From e8e4c5aa6174e2ef8ddef72894eaba24fc20609e Mon Sep 17 00:00:00 2001 From: KeatonTheBot Date: Sat, 10 May 2025 10:07:10 -0500 Subject: [PATCH] Android changes --- Directory.Packages.props | 1 + Ryujinx.sln | 10 +- .../Signal/NativeSignalHandlerGenerator.cs | 2 +- src/ARMeilleure/Translation/Cache/JitCache.cs | 136 +- src/ARMeilleure/Translation/Delegates.cs | 1 + src/ARMeilleure/Translation/PTC/Ptc.cs | 7 +- src/ARMeilleure/Translation/Translator.cs | 20 +- .../HeadlessDynamicTextInputHandler.cs | 4 +- .../HeadlessHostUiTheme.cs | 2 +- .../Kenjinx.Headless.SDL2.csproj} | 6 +- .../Kenjinx.bmp} | Bin .../OpenGL/OpenGLWindow.cs | 4 +- .../Options.cs | 4 +- .../Program.cs | 14 +- .../SDL2Mouse.cs | 2 +- .../SDL2MouseDriver.cs | 2 +- .../StatusUpdatedEventArgs.cs | 2 +- .../Vulkan/VulkanWindow.cs | 2 +- .../WindowBase.cs | 14 +- src/{Ryujinx => Kenjinx}/App.axaml | 0 src/{Ryujinx => Kenjinx}/App.axaml.cs | 2 +- src/{Ryujinx => Kenjinx}/AppHost.cs | 0 .../Assets/Fonts/SegoeFluentIcons.ttf | Bin .../Assets/Icons/Controller_JoyConLeft.svg | 0 .../Assets/Icons/Controller_JoyConPair.svg | 0 .../Assets/Icons/Controller_JoyConRight.svg | 0 .../Assets/Icons/Controller_ProCon.svg | 0 .../Assets/Locales/ar_SA.json | 2 +- .../Assets/Locales/de_DE.json | 94 +- .../Assets/Locales/el_GR.json | 92 +- .../Assets/Locales/en_US.json | 96 +- .../Assets/Locales/es_ES.json | 90 +- .../Assets/Locales/fr_FR.json | 90 +- .../Assets/Locales/he_IL.json | 10 +- .../Assets/Locales/it_IT.json | 90 +- .../Assets/Locales/ja_JP.json | 78 +- .../Assets/Locales/ko_KR.json | 50 +- .../Assets/Locales/pl_PL.json | 88 +- .../Assets/Locales/pt_BR.json | 90 +- .../Assets/Locales/ru_RU.json | 92 +- .../Assets/Locales/th_TH.json | 6 +- .../Assets/Locales/tr_TR.json | 90 +- .../Assets/Locales/uk_UA.json | 90 +- .../Assets/Locales/zh_CN.json | 86 +- .../Assets/Locales/zh_TW.json | 90 +- .../Assets/Styles/Styles.xaml | 0 .../Assets/Styles/Themes.xaml | 0 .../Common/ApplicationHelper.cs | 38 +- .../Common/ApplicationSort.cs | 0 .../Common/KeyboardHotkeyState.cs | 0 .../Common/Locale/LocaleExtension.cs | 0 .../Common/Locale/LocaleManager.cs | 2 +- .../Common/ThemeManager.cs | 0 .../Common/XCIFileTrimmerLog.cs | 0 .../Common/XCIFileTrimmerMainWindowLog.cs | 0 .../Common/XCIFileTrimmerWindowLog.cs | 0 .../Input/AvaloniaKeyboard.cs | 0 .../Input/AvaloniaKeyboardDriver.cs | 0 .../Input/AvaloniaKeyboardMappingHelper.cs | 0 .../Input/AvaloniaMouse.cs | 0 .../Input/AvaloniaMouseDriver.cs | 0 .../Ryujinx.csproj => Kenjinx/Kenjinx.csproj} | 15 +- .../Ryujinx.ico => Kenjinx/Kenjinx.ico} | Bin .../Modules/Updater/Updater.cs | 18 +- src/{Ryujinx => Kenjinx}/Program.cs | 6 +- .../UI/Applet/AvaHostUIHandler.cs | 2 +- .../Applet/AvaloniaDynamicTextInputHandler.cs | 0 .../UI/Applet/AvaloniaHostUITheme.cs | 0 .../UI/Applet/ControllerAppletDialog.axaml | 0 .../UI/Applet/ControllerAppletDialog.axaml.cs | 8 +- .../UI/Applet/ErrorAppletWindow.axaml | 0 .../UI/Applet/ErrorAppletWindow.axaml.cs | 0 .../UI/Applet/SwkbdAppletDialog.axaml | 0 .../UI/Applet/SwkbdAppletDialog.axaml.cs | 0 .../UI/Controls/ApplicationContextMenu.axaml | 0 .../Controls/ApplicationContextMenu.axaml.cs | 0 .../UI/Controls/ApplicationGridView.axaml | 0 .../UI/Controls/ApplicationGridView.axaml.cs | 0 .../UI/Controls/ApplicationListView.axaml | 0 .../UI/Controls/ApplicationListView.axaml.cs | 0 .../UI/Controls/NavigationDialogHost.axaml | 0 .../UI/Controls/NavigationDialogHost.axaml.cs | 0 .../UI/Controls/SliderScroll.axaml.cs | 0 .../UI/Controls/UpdateWaitWindow.axaml | 2 +- .../UI/Controls/UpdateWaitWindow.axaml.cs | 0 .../UI/Helpers/ApplicationOpenedEventArgs.cs | 0 .../UI/Helpers/AvaloniaListExtensions.cs | 0 .../UI/Helpers/BitmapArrayValueConverter.cs | 0 .../UI/Helpers/ButtonKeyAssigner.cs | 0 .../UI/Helpers/ContentDialogHelper.cs | 0 .../DownloadableContentLabelConverter.cs | 0 src/{Ryujinx => Kenjinx}/UI/Helpers/Glyph.cs | 0 .../UI/Helpers/GlyphValueConverter.cs | 0 .../UI/Helpers/KeyValueConverter.cs | 0 .../UI/Helpers/LocalizedNeverConverter.cs | 0 .../UI/Helpers/LoggerAdapter.cs | 0 .../UI/Helpers/MiniCommand.cs | 0 .../UI/Helpers/MultiplayerInfoConverter.cs | 0 .../UI/Helpers/NotificationHelper.cs | 0 .../UI/Helpers/OffscreenTextBox.cs | 0 .../UI/Helpers/TimeZoneConverter.cs | 0 .../UI/Helpers/TitleUpdateLabelConverter.cs | 0 .../UI/Helpers/UserErrorDialog.cs | 0 .../UI/Helpers/UserResult.cs | 0 .../UI/Helpers/Win32NativeInterop.cs | 0 .../XCITrimmerFileSpaceSavingsConverter.cs | 0 .../Helpers/XCITrimmerFileStatusConverter.cs | 0 .../XCITrimmerFileStatusDetailConverter.cs | 0 .../XCITrimmerOperationOutcomeHelper.cs | 0 .../UI/Models/CheatNode.cs | 0 .../UI/Models/ControllerModel.cs | 0 .../UI/Models/DeviceType.cs | 0 .../Models/Generic/LastPlayedSortComparer.cs | 0 .../Models/Generic/TimePlayedSortComparer.cs | 0 .../UI/Models/Input/GamepadInputConfig.cs | 0 .../UI/Models/Input/HotkeyConfig.cs | 0 .../UI/Models/Input/KeyboardInputConfig.cs | 0 .../UI/Models/Input/StickVisualizer.cs | 0 .../UI/Models/ModModel.cs | 0 .../UI/Models/PlayerModel.cs | 0 .../UI/Models/ProfileImageModel.cs | 0 .../UI/Models/SaveModel.cs | 0 .../UI/Models/StatusInitEventArgs.cs | 0 .../UI/Models/StatusUpdatedEventArgs.cs | 0 .../UI/Models/TempProfile.cs | 0 .../UI/Models/TimeZone.cs | 0 .../UI/Models/UserProfile.cs | 0 .../UI/Renderer/EmbeddedWindow.cs | 0 .../UI/Renderer/EmbeddedWindowOpenGL.cs | 0 .../UI/Renderer/EmbeddedWindowVulkan.cs | 0 .../UI/Renderer/OpenTKBindingsContext.cs | 0 .../UI/Renderer/RendererHost.axaml | 0 .../UI/Renderer/RendererHost.axaml.cs | 0 .../UI/Renderer/SPBOpenGLContext.cs | 0 .../UI/ViewModels/AboutWindowViewModel.cs | 0 .../UI/ViewModels/AmiiboWindowViewModel.cs | 0 .../ViewModels/AppListFavoriteComparable.cs | 0 .../UI/ViewModels/BaseModel.cs | 0 .../DownloadableContentManagerViewModel.cs | 0 .../Input/ControllerInputViewModel.cs | 0 .../UI/ViewModels/Input/InputViewModel.cs | 0 .../Input/KeyboardInputViewModel.cs | 0 .../ViewModels/Input/MotionInputViewModel.cs | 0 .../ViewModels/Input/RumbleInputViewModel.cs | 0 .../UI/ViewModels/MainWindowViewModel.cs | 76 +- .../UI/ViewModels/ModManagerViewModel.cs | 0 .../UI/ViewModels/SettingsViewModel.cs | 2 +- .../UI/ViewModels/TitleUpdateViewModel.cs | 0 .../UserFirmwareAvatarSelectorViewModel.cs | 0 .../UserProfileImageSelectorViewModel.cs | 0 .../UI/ViewModels/UserProfileViewModel.cs | 0 .../UI/ViewModels/UserSaveManagerViewModel.cs | 0 .../UI/ViewModels/XCITrimmerViewModel.cs | 0 .../UI/Views/Input/ControllerInputView.axaml | 0 .../Views/Input/ControllerInputView.axaml.cs | 0 .../UI/Views/Input/InputView.axaml | 0 .../UI/Views/Input/InputView.axaml.cs | 0 .../UI/Views/Input/KeyboardInputView.axaml | 0 .../UI/Views/Input/KeyboardInputView.axaml.cs | 0 .../UI/Views/Input/MotionInputView.axaml | 0 .../UI/Views/Input/MotionInputView.axaml.cs | 0 .../UI/Views/Input/RumbleInputView.axaml | 0 .../UI/Views/Input/RumbleInputView.axaml.cs | 0 .../UI/Views/Main/MainMenuBarView.axaml | 0 .../UI/Views/Main/MainMenuBarView.axaml.cs | 4 +- .../UI/Views/Main/MainStatusBarView.axaml | 0 .../UI/Views/Main/MainStatusBarView.axaml.cs | 0 .../UI/Views/Main/MainViewControls.axaml | 0 .../UI/Views/Main/MainViewControls.axaml.cs | 0 .../UI/Views/Settings/SettingsAudioView.axaml | 0 .../Views/Settings/SettingsAudioView.axaml.cs | 0 .../UI/Views/Settings/SettingsCPUView.axaml | 0 .../Views/Settings/SettingsCPUView.axaml.cs | 0 .../Views/Settings/SettingsGraphicsView.axaml | 0 .../Settings/SettingsGraphicsView.axaml.cs | 0 .../Views/Settings/SettingsHotkeysView.axaml | 0 .../Settings/SettingsHotkeysView.axaml.cs | 0 .../UI/Views/Settings/SettingsInputView.axaml | 0 .../Views/Settings/SettingsInputView.axaml.cs | 0 .../Views/Settings/SettingsLoggingView.axaml | 0 .../Settings/SettingsLoggingView.axaml.cs | 0 .../Views/Settings/SettingsNetworkView.axaml | 0 .../Settings/SettingsNetworkView.axaml.cs | 2 +- .../Views/Settings/SettingsSystemView.axaml | 0 .../Settings/SettingsSystemView.axaml.cs | 0 .../UI/Views/Settings/SettingsUIView.axaml | 0 .../UI/Views/Settings/SettingsUIView.axaml.cs | 0 .../UI/Views/User/UserEditorView.axaml | 0 .../UI/Views/User/UserEditorView.axaml.cs | 0 .../User/UserFirmwareAvatarSelectorView.axaml | 0 .../UserFirmwareAvatarSelectorView.axaml.cs | 0 .../User/UserProfileImageSelectorView.axaml | 0 .../UserProfileImageSelectorView.axaml.cs | 0 .../UI/Views/User/UserRecovererView.axaml | 0 .../UI/Views/User/UserRecovererView.axaml.cs | 0 .../UI/Views/User/UserSaveManagerView.axaml | 0 .../Views/User/UserSaveManagerView.axaml.cs | 0 .../UI/Views/User/UserSelectorView.axaml | 0 .../UI/Views/User/UserSelectorView.axaml.cs | 0 .../UI/Windows/AboutWindow.axaml | 4 +- .../UI/Windows/AboutWindow.axaml.cs | 0 .../UI/Windows/AmiiboWindow.axaml | 0 .../UI/Windows/AmiiboWindow.axaml.cs | 4 +- .../UI/Windows/CheatWindow.axaml | 0 .../UI/Windows/CheatWindow.axaml.cs | 4 +- .../Windows/ContentDialogOverlayWindow.axaml | 0 .../ContentDialogOverlayWindow.axaml.cs | 0 .../DownloadableContentManagerWindow.axaml | 0 .../DownloadableContentManagerWindow.axaml.cs | 0 .../UI/Windows/IconColorPicker.cs | 0 .../UI/Windows/MainWindow.axaml | 0 .../UI/Windows/MainWindow.axaml.cs | 11 +- .../UI/Windows/ModManagerWindow.axaml | 0 .../UI/Windows/ModManagerWindow.axaml.cs | 0 .../UI/Windows/SettingsWindow.axaml | 2 +- .../UI/Windows/SettingsWindow.axaml.cs | 2 +- .../UI/Windows/StyleableWindow.cs | 0 .../UI/Windows/TitleUpdateWindow.axaml | 0 .../UI/Windows/TitleUpdateWindow.axaml.cs | 0 .../UI/Windows/XCITrimmerWindow.axaml | 0 .../UI/Windows/XCITrimmerWindow.axaml.cs | 0 src/{Ryujinx => Kenjinx}/app.manifest | 0 src/KenjinxAndroid/.gitignore | 12 + src/KenjinxAndroid/app/build.gradle | 129 ++ src/KenjinxAndroid/app/proguard-rules.pro | 33 + .../app/src/main/AndroidManifest.xml | 74 + .../app/src/main/cpp/CMakeLists.txt | 81 ++ .../app/src/main/cpp/kenjinx.cpp | 254 ++++ src/KenjinxAndroid/app/src/main/cpp/kenjinx.h | 60 + .../app/src/main/cpp/libraries/adrenotools | 1 + .../app/src/main/cpp/libraries/openal | 1 + .../app/src/main/cpp/native_window.h | 305 ++++ .../app/src/main/cpp/vulkan_wrapper.cpp | 404 ++++++ .../app/src/main/cpp/vulkan_wrapper.h | 236 +++ .../libVkLayer_khronos_validation.so | Bin 0 -> 21444896 bytes .../src/main/extLibs/arm64-v8a/libavcodec.so | Bin 0 -> 12500224 bytes .../src/main/extLibs/arm64-v8a/libavutil.so | Bin 0 -> 377576 bytes .../src/main/extLibs/arm64-v8a/libcrypto.so | Bin 0 -> 2367064 bytes .../app/src/main/extLibs/arm64-v8a/libssl.so | Bin 0 -> 507408 bytes .../main/extLibs/arm64-v8a/libswresample.so | Bin 0 -> 195488 bytes .../src/main/extLibs/arm64-v8a/libswscale.so | Bin 0 -> 278592 bytes .../app/src/main/ic_launcher-playstore.png | Bin 0 -> 19264 bytes .../org/kenjinx/android/BackendThreading.kt | 7 + .../java/org/kenjinx/android/BaseActivity.kt | 9 + .../java/org/kenjinx/android/CrashHandler.kt | 95 ++ .../org/kenjinx/android/GameController.kt | 435 ++++++ .../main/java/org/kenjinx/android/GameHost.kt | 180 +++ .../kenjinx/android/GamePadButtonInputId.kt | 27 + .../main/java/org/kenjinx/android/Helpers.kt | 169 +++ .../main/java/org/kenjinx/android/Icons.kt | 1025 +++++++++++++ .../org/kenjinx/android/KenjinxApplication.kt | 20 + .../java/org/kenjinx/android/KenjinxNative.kt | 163 +++ .../main/java/org/kenjinx/android/Logging.kt | 63 + .../java/org/kenjinx/android/MainActivity.kt | 253 ++++ .../kenjinx/android/MotionSensorManager.kt | 139 ++ .../kenjinx/android/NativeGraphicsInterop.kt | 7 + .../java/org/kenjinx/android/NativeHelpers.kt | 31 + .../java/org/kenjinx/android/NativeWindow.kt | 42 + .../org/kenjinx/android/PerformanceManager.kt | 32 + .../org/kenjinx/android/PerformanceMonitor.kt | 43 + .../android/PhysicalControllerManager.kt | 158 ++ .../java/org/kenjinx/android/RegionCode.kt | 11 + .../org/kenjinx/android/SystemLanguage.kt | 22 + .../java/org/kenjinx/android/UiHandler.kt | 220 +++ .../android/providers/DocumentProvider.kt | 300 ++++ .../org/kenjinx/android/ui/theme/Color.kt | 13 + .../org/kenjinx/android/ui/theme/Theme.kt | 86 ++ .../java/org/kenjinx/android/ui/theme/Type.kt | 34 + .../android/viewmodels/DlcViewModel.kt | 254 ++++ .../kenjinx/android/viewmodels/GameInfo.java | 27 + .../kenjinx/android/viewmodels/GameModel.kt | 95 ++ .../android/viewmodels/HomeViewModel.kt | 119 ++ .../android/viewmodels/MainViewModel.kt | 432 ++++++ .../android/viewmodels/MemoryConfiguration.kt | 9 + .../android/viewmodels/MemoryManagerMode.kt | 7 + .../android/viewmodels/QuickSettings.kt | 120 ++ .../android/viewmodels/SettingsViewModel.kt | 392 +++++ .../viewmodels/TitleUpdateViewModel.kt | 212 +++ .../android/viewmodels/UserViewModel.kt | 77 + .../kenjinx/android/viewmodels/VSyncMode.kt | 6 + .../viewmodels/VulkanDriverViewModel.kt | 167 +++ .../org/kenjinx/android/views/DlcViews.kt | 170 +++ .../org/kenjinx/android/views/GameViews.kt | 354 +++++ .../org/kenjinx/android/views/HomeViews.kt | 719 +++++++++ .../org/kenjinx/android/views/MainView.kt | 25 + .../org/kenjinx/android/views/SettingViews.kt | 1283 +++++++++++++++++ .../kenjinx/android/views/TitleUpdateViews.kt | 179 +++ .../org/kenjinx/android/views/UserViews.kt | 179 +++ .../android/views/VulkanDriverViews.kt | 234 +++ .../kenjinx/android/widgets/ActionButton.kt | 58 + .../android/widgets/DropdownSelector.kt | 79 + .../kenjinx/android/widgets/ExpandableView.kt | 179 +++ .../android/widgets/SimpleAlertDialog.kt | 227 +++ .../kenjinx/android/widgets/SwitchSelector.kt | 68 + .../app/src/main/res/drawable/app_update.xml | 9 + .../res/drawable/ic_launcher_foreground.xml | 35 + .../app/src/main/res/drawable/icon_nro.png | Bin 0 -> 10254 bytes .../app/src/main/res/layout/game_layout.xml | 34 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1376 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 1346 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2876 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 1024 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 972 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1804 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1834 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 1792 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3776 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2554 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 2718 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5786 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3428 bytes .../ic_launcher_foreground.webp | Bin 0 -> 3620 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 8324 bytes .../app/src/main/res/values/colors.xml | 10 + .../res/values/ic_launcher_background.xml | 4 + .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/themes.xml | 5 + .../app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + .../app/src/main/res/xml/provider_paths.xml | 12 + src/KenjinxAndroid/build.gradle | 6 + src/KenjinxAndroid/gradle.properties | 36 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + src/KenjinxAndroid/gradlew | 185 +++ src/KenjinxAndroid/gradlew.bat | 89 ++ src/KenjinxAndroid/libkenjinx/README.md | 12 + src/KenjinxAndroid/libkenjinx/build.gradle | 144 ++ .../libkenjinx/libs/OpenSSL.cmake | 54 + src/KenjinxAndroid/settings.gradle | 21 + src/LibKenjinx/Android/AndroidLogTarget.cs | 49 + src/LibKenjinx/Android/AndroidUiHandler.cs | 128 ++ src/LibKenjinx/Android/Interop.cs | 232 +++ src/LibKenjinx/Android/Jni/Delegates.cs | 357 +++++ .../Android/Jni/Identifiers/JFieldId.cs | 28 + .../Android/Jni/Identifiers/JMethodId.cs | 28 + src/LibKenjinx/Android/Jni/JReferenceType.cs | 12 + src/LibKenjinx/Android/Jni/JReleaseMode.cs | 11 + src/LibKenjinx/Android/Jni/JResult.cs | 15 + src/LibKenjinx/Android/Jni/JniHelper.cs | 251 ++++ .../Android/Jni/Pointers/JEnvRef.cs | 37 + .../Android/Jni/Pointers/JavaVMRef.cs | 31 + .../Android/Jni/Primitives/JBoolean.cs | 67 + .../Android/Jni/Primitives/JByte.cs | 74 + .../Android/Jni/Primitives/JChar.cs | 56 + .../Android/Jni/Primitives/JDouble.cs | 70 + .../Android/Jni/Primitives/JFloat.cs | 70 + src/LibKenjinx/Android/Jni/Primitives/JInt.cs | 73 + .../Android/Jni/Primitives/JLong.cs | 73 + .../Android/Jni/Primitives/JShort.cs | 74 + .../Android/Jni/References/JArrayLocalRef.cs | 26 + .../Android/Jni/References/JClassLocalRef.cs | 29 + .../Android/Jni/References/JGlobalRef.cs | 28 + .../Android/Jni/References/JObjectLocalRef.cs | 28 + .../Android/Jni/References/JStringLocalRef.cs | 27 + .../Jni/References/JThrowableLocalRef.cs | 27 + .../Android/Jni/References/JWeakRef.cs | 26 + .../Android/Jni/Values/JEnvValue.cs | 30 + .../Android/Jni/Values/JInvokeInterface.cs | 20 + .../Android/Jni/Values/JNativeInterface.cs | 247 ++++ .../Android/Jni/Values/JNativeMethod.cs | 11 + src/LibKenjinx/Android/Jni/Values/JValue.cs | 46 + .../Android/Jni/Values/JavaVMAttachArgs.cs | 13 + .../Android/Jni/Values/JavaVMInitArgs.cs | 12 + .../Android/Jni/Values/JavaVMOption.cs | 10 + .../Android/Jni/Values/JavaVMValue.cs | 29 + src/LibKenjinx/Android/JniExportedMethods.cs | 581 ++++++++ src/LibKenjinx/LibKenjinx.Device.cs | 261 ++++ src/LibKenjinx/LibKenjinx.Graphics.cs | 248 ++++ src/LibKenjinx/LibKenjinx.Input.cs | 523 +++++++ src/LibKenjinx/LibKenjinx.Native.cs | 469 ++++++ src/LibKenjinx/LibKenjinx.User.cs | 82 ++ src/LibKenjinx/LibKenjinx.cs | 954 ++++++++++++ src/LibKenjinx/LibKenjinx.csproj | 43 + src/LibKenjinx/OpenTKBindingsContext.cs | 20 + src/LibKenjinx/VulkanLoader.cs | 98 ++ src/LibKenjinx/rd.xml | 536 +++++++ .../Configuration/AppDataManager.cs | 2 +- .../GraphicsDriver/NVThreadedOptimization.cs | 6 +- .../Logging/Formatters/DefaultLogFormatter.cs | 2 +- src/Ryujinx.Common/Logging/Logger.cs | 13 +- src/Ryujinx.Common/PlatformInfo.cs | 2 +- src/Ryujinx.Common/ReleaseInformation.cs | 3 +- src/Ryujinx.Cpu/AddressSpace.cs | 36 +- src/Ryujinx.Cpu/AddressTable.cs | 2 +- .../Jit/MemoryManagerHostNoMirror.cs | 330 +++++ .../LightningJit/Cache/JitCache.cs | 83 +- .../LightningJit/Cache/NoWxCache.cs | 2 +- .../LightningJit/LightningJitCpuContext.cs | 5 + src/Ryujinx.Cpu/MemoryEhMeilleure.cs | 18 + src/Ryujinx.Cpu/Nce/Arm64/ArmCondition.cs | 22 + src/Ryujinx.Cpu/Nce/Arm64/ArmExtensionType.cs | 14 + src/Ryujinx.Cpu/Nce/Arm64/ArmShiftType.cs | 11 + src/Ryujinx.Cpu/Nce/Arm64/Assembler.cs | 1103 ++++++++++++++ src/Ryujinx.Cpu/Nce/Arm64/CodeGenCommon.cs | 66 + src/Ryujinx.Cpu/Nce/Arm64/Operand.cs | 40 + src/Ryujinx.Cpu/Nce/Arm64/OperandKind.cs | 10 + src/Ryujinx.Cpu/Nce/Arm64/OperandType.cs | 36 + src/Ryujinx.Cpu/Nce/Arm64/Register.cs | 43 + .../Nce/Arm64/RegisterSaveRestore.cs | 220 +++ src/Ryujinx.Cpu/Nce/Arm64/RegisterType.cs | 8 + src/Ryujinx.Cpu/Nce/MemoryManagerNative.cs | 328 +++++ src/Ryujinx.Cpu/Nce/NceCpuCodePatch.cs | 81 ++ src/Ryujinx.Cpu/Nce/NceCpuContext.cs | 144 ++ src/Ryujinx.Cpu/Nce/NceEngine.cs | 19 + src/Ryujinx.Cpu/Nce/NceExecutionContext.cs | 174 +++ src/Ryujinx.Cpu/Nce/NceMemoryAllocator.cs | 13 + src/Ryujinx.Cpu/Nce/NceMemoryBlock.cs | 25 + src/Ryujinx.Cpu/Nce/NceNativeContext.cs | 98 ++ src/Ryujinx.Cpu/Nce/NceNativeInterface.cs | 55 + src/Ryujinx.Cpu/Nce/NcePatcher.cs | 603 ++++++++ src/Ryujinx.Cpu/Nce/NceThreadPal.cs | 40 + src/Ryujinx.Cpu/Nce/NceThreadPalAndroid.cs | 20 + src/Ryujinx.Cpu/Nce/NceThreadPalUnix.cs | 37 + src/Ryujinx.Cpu/Nce/NceThreadTable.cs | 97 ++ src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs | 23 +- .../Signal/UnixSignalHandlerRegistration.cs | 210 ++- .../CodeGen/Glsl/Declarations.cs | 8 +- .../Translation/Optimizations/Optimizer.cs | 5 - .../Translation/Translator.cs | 22 +- .../ShaderCollection.cs | 28 +- src/Ryujinx.Graphics.Vulkan/TextureStorage.cs | 14 +- src/Ryujinx.Graphics.Vulkan/TextureView.cs | 3 +- .../VulkanDebugMessenger.cs | 7 +- src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 11 + src/Ryujinx.Graphics.Vulkan/Window.cs | 29 +- src/Ryujinx.Graphics.Vulkan/WindowBase.cs | 3 + src/Ryujinx.HLE/FileSystem/ContentManager.cs | 617 ++++---- .../{Logo_Ryujinx.png => Logo_Kenjinx.png} | Bin .../SoftwareKeyboardApplet.cs | 2 +- .../SoftwareKeyboardRendererBase.cs | 2 +- src/Ryujinx.HLE/HOS/ArmProcessContext.cs | 7 +- .../HOS/ArmProcessContextFactory.cs | 71 +- .../HOS/Kernel/Common/KSystemControl.cs | 2 +- .../HOS/Kernel/Memory/KPageTableBase.cs | 85 +- .../HOS/Kernel/Process/IProcessContext.cs | 1 + .../HOS/Kernel/Process/KProcess.cs | 23 +- .../HOS/Kernel/Process/ProcessContext.cs | 1 + .../HOS/Kernel/SupervisorCall/Syscall.cs | 10 +- .../Services/Account/Acc/AccountManager.cs | 2 +- .../LdnRyu/Proxy/P2pProxyServer.cs | 4 +- .../HOS/Services/Nfc/Nfp/VirtualAmiibo.cs | 2 +- .../Nifm/StaticService/IGeneralService.cs | 12 +- .../HOS/Services/Pm/IBootModeInterface.cs | 11 + .../HOS/Services/Pm/Types/BootMode.cs | 9 + .../HOS/Services/Ro/IRoInterface.cs | 4 +- .../Settings/ISystemSettingsServer.cs | 9 + .../HOS/Services/Spl/IGeneralInterface.cs | 8 + .../HOS/SystemState/SystemStateMgr.cs | 2 +- .../Extensions/FileSystemExtensions.cs | 7 + .../PartitionFileSystemExtensions.cs | 2 +- .../Loaders/Processes/ProcessLoader.cs | 132 +- .../Loaders/Processes/ProcessLoaderHelper.cs | 45 +- src/Ryujinx.HLE/Ryujinx.HLE.csproj | 4 +- src/Ryujinx.HLE/Switch.cs | 21 + .../Utilities/PartitionFileSystemUtils.cs | 11 +- src/Ryujinx.Memory/MemoryManagementUnix.cs | 6 +- src/Ryujinx.SDL2.Common/SDL2Driver.cs | 4 +- .../App/ApplicationLibrary.cs | 3 +- .../Helper/FileAssociationHelper.cs | 6 +- .../Helper/ShortcutHelper.cs | 6 +- src/Ryujinx.UI.Common/Helper/TitleHelper.cs | 2 +- 464 files changed, 23351 insertions(+), 1429 deletions(-) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/HeadlessDynamicTextInputHandler.cs (93%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/HeadlessHostUiTheme.cs (93%) rename src/{Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj => Kenjinx.Headless.SDL2/Kenjinx.Headless.SDL2.csproj} (96%) rename src/{Ryujinx.Headless.SDL2/Ryujinx.bmp => Kenjinx.Headless.SDL2/Kenjinx.bmp} (100%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/OpenGL/OpenGLWindow.cs (97%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/Options.cs (99%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/Program.cs (98%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/SDL2Mouse.cs (98%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/SDL2MouseDriver.cs (99%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/StatusUpdatedEventArgs.cs (94%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/Vulkan/VulkanWindow.cs (98%) rename src/{Ryujinx.Headless.SDL2 => Kenjinx.Headless.SDL2}/WindowBase.cs (96%) rename src/{Ryujinx => Kenjinx}/App.axaml (100%) rename src/{Ryujinx => Kenjinx}/App.axaml.cs (99%) rename src/{Ryujinx => Kenjinx}/AppHost.cs (100%) rename src/{Ryujinx => Kenjinx}/Assets/Fonts/SegoeFluentIcons.ttf (100%) rename src/{Ryujinx => Kenjinx}/Assets/Icons/Controller_JoyConLeft.svg (100%) rename src/{Ryujinx => Kenjinx}/Assets/Icons/Controller_JoyConPair.svg (100%) rename src/{Ryujinx => Kenjinx}/Assets/Icons/Controller_JoyConRight.svg (100%) rename src/{Ryujinx => Kenjinx}/Assets/Icons/Controller_ProCon.svg (100%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/ar_SA.json (99%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/de_DE.json (92%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/el_GR.json (92%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/en_US.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/es_ES.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/fr_FR.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/he_IL.json (98%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/it_IT.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/ja_JP.json (95%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/ko_KR.json (96%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/pl_PL.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/pt_BR.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/ru_RU.json (94%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/th_TH.json (99%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/tr_TR.json (92%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/uk_UA.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/zh_CN.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Locales/zh_TW.json (93%) rename src/{Ryujinx => Kenjinx}/Assets/Styles/Styles.xaml (100%) rename src/{Ryujinx => Kenjinx}/Assets/Styles/Themes.xaml (100%) rename src/{Ryujinx => Kenjinx}/Common/ApplicationHelper.cs (92%) rename src/{Ryujinx => Kenjinx}/Common/ApplicationSort.cs (100%) rename src/{Ryujinx => Kenjinx}/Common/KeyboardHotkeyState.cs (100%) rename src/{Ryujinx => Kenjinx}/Common/Locale/LocaleExtension.cs (100%) rename src/{Ryujinx => Kenjinx}/Common/Locale/LocaleManager.cs (99%) rename src/{Ryujinx => Kenjinx}/Common/ThemeManager.cs (100%) rename src/{Ryujinx => Kenjinx}/Common/XCIFileTrimmerLog.cs (100%) rename src/{Ryujinx => Kenjinx}/Common/XCIFileTrimmerMainWindowLog.cs (100%) rename src/{Ryujinx => Kenjinx}/Common/XCIFileTrimmerWindowLog.cs (100%) rename src/{Ryujinx => Kenjinx}/Input/AvaloniaKeyboard.cs (100%) rename src/{Ryujinx => Kenjinx}/Input/AvaloniaKeyboardDriver.cs (100%) rename src/{Ryujinx => Kenjinx}/Input/AvaloniaKeyboardMappingHelper.cs (100%) rename src/{Ryujinx => Kenjinx}/Input/AvaloniaMouse.cs (100%) rename src/{Ryujinx => Kenjinx}/Input/AvaloniaMouseDriver.cs (100%) rename src/{Ryujinx/Ryujinx.csproj => Kenjinx/Kenjinx.csproj} (95%) rename src/{Ryujinx/Ryujinx.ico => Kenjinx/Kenjinx.ico} (100%) rename src/{Ryujinx => Kenjinx}/Modules/Updater/Updater.cs (98%) rename src/{Ryujinx => Kenjinx}/Program.cs (98%) rename src/{Ryujinx => Kenjinx}/UI/Applet/AvaHostUIHandler.cs (99%) rename src/{Ryujinx => Kenjinx}/UI/Applet/AvaloniaDynamicTextInputHandler.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Applet/AvaloniaHostUITheme.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Applet/ControllerAppletDialog.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Applet/ControllerAppletDialog.axaml.cs (94%) rename src/{Ryujinx => Kenjinx}/UI/Applet/ErrorAppletWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Applet/ErrorAppletWindow.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Applet/SwkbdAppletDialog.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Applet/SwkbdAppletDialog.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/ApplicationContextMenu.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/ApplicationContextMenu.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/ApplicationGridView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/ApplicationGridView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/ApplicationListView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/ApplicationListView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/NavigationDialogHost.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/NavigationDialogHost.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/SliderScroll.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Controls/UpdateWaitWindow.axaml (97%) rename src/{Ryujinx => Kenjinx}/UI/Controls/UpdateWaitWindow.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/ApplicationOpenedEventArgs.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/AvaloniaListExtensions.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/BitmapArrayValueConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/ButtonKeyAssigner.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/ContentDialogHelper.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/DownloadableContentLabelConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/Glyph.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/GlyphValueConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/KeyValueConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/LocalizedNeverConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/LoggerAdapter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/MiniCommand.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/MultiplayerInfoConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/NotificationHelper.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/OffscreenTextBox.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/TimeZoneConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/TitleUpdateLabelConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/UserErrorDialog.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/UserResult.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/Win32NativeInterop.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/XCITrimmerFileStatusConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Helpers/XCITrimmerOperationOutcomeHelper.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/CheatNode.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/ControllerModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/DeviceType.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/Generic/LastPlayedSortComparer.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/Generic/TimePlayedSortComparer.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/Input/GamepadInputConfig.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/Input/HotkeyConfig.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/Input/KeyboardInputConfig.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/Input/StickVisualizer.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/ModModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/PlayerModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/ProfileImageModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/SaveModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/StatusInitEventArgs.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/StatusUpdatedEventArgs.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/TempProfile.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/TimeZone.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Models/UserProfile.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Renderer/EmbeddedWindow.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Renderer/EmbeddedWindowOpenGL.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Renderer/EmbeddedWindowVulkan.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Renderer/OpenTKBindingsContext.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Renderer/RendererHost.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Renderer/RendererHost.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Renderer/SPBOpenGLContext.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/AboutWindowViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/AmiiboWindowViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/AppListFavoriteComparable.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/BaseModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/DownloadableContentManagerViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/Input/ControllerInputViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/Input/InputViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/Input/KeyboardInputViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/Input/MotionInputViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/Input/RumbleInputViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/MainWindowViewModel.cs (96%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/ModManagerViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/SettingsViewModel.cs (99%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/TitleUpdateViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/UserProfileImageSelectorViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/UserProfileViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/UserSaveManagerViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/ViewModels/XCITrimmerViewModel.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/ControllerInputView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/ControllerInputView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/InputView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/InputView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/KeyboardInputView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/KeyboardInputView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/MotionInputView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/MotionInputView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/RumbleInputView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Input/RumbleInputView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Main/MainMenuBarView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Main/MainMenuBarView.axaml.cs (99%) rename src/{Ryujinx => Kenjinx}/UI/Views/Main/MainStatusBarView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Main/MainStatusBarView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Main/MainViewControls.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Main/MainViewControls.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsAudioView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsAudioView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsCPUView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsCPUView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsGraphicsView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsGraphicsView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsHotkeysView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsHotkeysView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsInputView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsInputView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsLoggingView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsLoggingView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsNetworkView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsNetworkView.axaml.cs (89%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsSystemView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsSystemView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsUIView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/Settings/SettingsUIView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserEditorView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserEditorView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserFirmwareAvatarSelectorView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserProfileImageSelectorView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserProfileImageSelectorView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserRecovererView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserRecovererView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserSaveManagerView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserSaveManagerView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserSelectorView.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Views/User/UserSelectorView.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/AboutWindow.axaml (98%) rename src/{Ryujinx => Kenjinx}/UI/Windows/AboutWindow.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/AmiiboWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/AmiiboWindow.axaml.cs (85%) rename src/{Ryujinx => Kenjinx}/UI/Windows/CheatWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/CheatWindow.axaml.cs (94%) rename src/{Ryujinx => Kenjinx}/UI/Windows/ContentDialogOverlayWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/ContentDialogOverlayWindow.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/DownloadableContentManagerWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/DownloadableContentManagerWindow.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/IconColorPicker.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/MainWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/MainWindow.axaml.cs (98%) rename src/{Ryujinx => Kenjinx}/UI/Windows/ModManagerWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/ModManagerWindow.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/SettingsWindow.axaml (98%) rename src/{Ryujinx => Kenjinx}/UI/Windows/SettingsWindow.axaml.cs (97%) rename src/{Ryujinx => Kenjinx}/UI/Windows/StyleableWindow.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/TitleUpdateWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/TitleUpdateWindow.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/XCITrimmerWindow.axaml (100%) rename src/{Ryujinx => Kenjinx}/UI/Windows/XCITrimmerWindow.axaml.cs (100%) rename src/{Ryujinx => Kenjinx}/app.manifest (100%) create mode 100644 src/KenjinxAndroid/.gitignore create mode 100644 src/KenjinxAndroid/app/build.gradle create mode 100644 src/KenjinxAndroid/app/proguard-rules.pro create mode 100644 src/KenjinxAndroid/app/src/main/AndroidManifest.xml create mode 100644 src/KenjinxAndroid/app/src/main/cpp/CMakeLists.txt create mode 100644 src/KenjinxAndroid/app/src/main/cpp/kenjinx.cpp create mode 100644 src/KenjinxAndroid/app/src/main/cpp/kenjinx.h create mode 160000 src/KenjinxAndroid/app/src/main/cpp/libraries/adrenotools create mode 160000 src/KenjinxAndroid/app/src/main/cpp/libraries/openal create mode 100644 src/KenjinxAndroid/app/src/main/cpp/native_window.h create mode 100644 src/KenjinxAndroid/app/src/main/cpp/vulkan_wrapper.cpp create mode 100644 src/KenjinxAndroid/app/src/main/cpp/vulkan_wrapper.h create mode 100644 src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libVkLayer_khronos_validation.so create mode 100644 src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libavcodec.so create mode 100644 src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libavutil.so create mode 100644 src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libcrypto.so create mode 100644 src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libssl.so create mode 100644 src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libswresample.so create mode 100644 src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libswscale.so create mode 100644 src/KenjinxAndroid/app/src/main/ic_launcher-playstore.png create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/BackendThreading.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/BaseActivity.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/CrashHandler.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/GameController.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/GameHost.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/GamePadButtonInputId.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/Helpers.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/Icons.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/KenjinxApplication.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/KenjinxNative.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/Logging.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MotionSensorManager.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/NativeGraphicsInterop.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/NativeHelpers.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/NativeWindow.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/PerformanceManager.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/PerformanceMonitor.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/PhysicalControllerManager.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/RegionCode.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/SystemLanguage.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/UiHandler.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/providers/DocumentProvider.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/ui/theme/Color.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/ui/theme/Theme.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/ui/theme/Type.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/DlcViewModel.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/GameInfo.java create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/GameModel.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/HomeViewModel.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MainViewModel.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MemoryConfiguration.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MemoryManagerMode.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/QuickSettings.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/TitleUpdateViewModel.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/UserViewModel.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/VSyncMode.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/VulkanDriverViewModel.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/DlcViews.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/GameViews.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/HomeViews.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/MainView.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/SettingViews.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/TitleUpdateViews.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/UserViews.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/VulkanDriverViews.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/widgets/ActionButton.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/widgets/DropdownSelector.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/widgets/ExpandableView.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/widgets/SimpleAlertDialog.kt create mode 100644 src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/widgets/SwitchSelector.kt create mode 100644 src/KenjinxAndroid/app/src/main/res/drawable/app_update.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/drawable/icon_nro.png create mode 100644 src/KenjinxAndroid/app/src/main/res/layout/game_layout.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 src/KenjinxAndroid/app/src/main/res/values/colors.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/values/ic_launcher_background.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/values/strings.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/values/themes.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/xml/backup_rules.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/xml/data_extraction_rules.xml create mode 100644 src/KenjinxAndroid/app/src/main/res/xml/provider_paths.xml create mode 100644 src/KenjinxAndroid/build.gradle create mode 100644 src/KenjinxAndroid/gradle.properties create mode 100644 src/KenjinxAndroid/gradle/wrapper/gradle-wrapper.jar create mode 100644 src/KenjinxAndroid/gradle/wrapper/gradle-wrapper.properties create mode 100644 src/KenjinxAndroid/gradlew create mode 100644 src/KenjinxAndroid/gradlew.bat create mode 100644 src/KenjinxAndroid/libkenjinx/README.md create mode 100644 src/KenjinxAndroid/libkenjinx/build.gradle create mode 100644 src/KenjinxAndroid/libkenjinx/libs/OpenSSL.cmake create mode 100644 src/KenjinxAndroid/settings.gradle create mode 100644 src/LibKenjinx/Android/AndroidLogTarget.cs create mode 100644 src/LibKenjinx/Android/AndroidUiHandler.cs create mode 100644 src/LibKenjinx/Android/Interop.cs create mode 100644 src/LibKenjinx/Android/Jni/Delegates.cs create mode 100644 src/LibKenjinx/Android/Jni/Identifiers/JFieldId.cs create mode 100644 src/LibKenjinx/Android/Jni/Identifiers/JMethodId.cs create mode 100644 src/LibKenjinx/Android/Jni/JReferenceType.cs create mode 100644 src/LibKenjinx/Android/Jni/JReleaseMode.cs create mode 100644 src/LibKenjinx/Android/Jni/JResult.cs create mode 100644 src/LibKenjinx/Android/Jni/JniHelper.cs create mode 100644 src/LibKenjinx/Android/Jni/Pointers/JEnvRef.cs create mode 100644 src/LibKenjinx/Android/Jni/Pointers/JavaVMRef.cs create mode 100644 src/LibKenjinx/Android/Jni/Primitives/JBoolean.cs create mode 100644 src/LibKenjinx/Android/Jni/Primitives/JByte.cs create mode 100644 src/LibKenjinx/Android/Jni/Primitives/JChar.cs create mode 100644 src/LibKenjinx/Android/Jni/Primitives/JDouble.cs create mode 100644 src/LibKenjinx/Android/Jni/Primitives/JFloat.cs create mode 100644 src/LibKenjinx/Android/Jni/Primitives/JInt.cs create mode 100644 src/LibKenjinx/Android/Jni/Primitives/JLong.cs create mode 100644 src/LibKenjinx/Android/Jni/Primitives/JShort.cs create mode 100644 src/LibKenjinx/Android/Jni/References/JArrayLocalRef.cs create mode 100644 src/LibKenjinx/Android/Jni/References/JClassLocalRef.cs create mode 100644 src/LibKenjinx/Android/Jni/References/JGlobalRef.cs create mode 100644 src/LibKenjinx/Android/Jni/References/JObjectLocalRef.cs create mode 100644 src/LibKenjinx/Android/Jni/References/JStringLocalRef.cs create mode 100644 src/LibKenjinx/Android/Jni/References/JThrowableLocalRef.cs create mode 100644 src/LibKenjinx/Android/Jni/References/JWeakRef.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JEnvValue.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JInvokeInterface.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JNativeInterface.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JNativeMethod.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JValue.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JavaVMAttachArgs.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JavaVMInitArgs.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JavaVMOption.cs create mode 100644 src/LibKenjinx/Android/Jni/Values/JavaVMValue.cs create mode 100644 src/LibKenjinx/Android/JniExportedMethods.cs create mode 100644 src/LibKenjinx/LibKenjinx.Device.cs create mode 100644 src/LibKenjinx/LibKenjinx.Graphics.cs create mode 100644 src/LibKenjinx/LibKenjinx.Input.cs create mode 100644 src/LibKenjinx/LibKenjinx.Native.cs create mode 100644 src/LibKenjinx/LibKenjinx.User.cs create mode 100644 src/LibKenjinx/LibKenjinx.cs create mode 100644 src/LibKenjinx/LibKenjinx.csproj create mode 100644 src/LibKenjinx/OpenTKBindingsContext.cs create mode 100644 src/LibKenjinx/VulkanLoader.cs create mode 100644 src/LibKenjinx/rd.xml create mode 100644 src/Ryujinx.Cpu/Jit/MemoryManagerHostNoMirror.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/ArmCondition.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/ArmExtensionType.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/ArmShiftType.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/Assembler.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/CodeGenCommon.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/Operand.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/OperandKind.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/OperandType.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/Register.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/RegisterSaveRestore.cs create mode 100644 src/Ryujinx.Cpu/Nce/Arm64/RegisterType.cs create mode 100644 src/Ryujinx.Cpu/Nce/MemoryManagerNative.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceCpuCodePatch.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceCpuContext.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceEngine.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceExecutionContext.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceMemoryAllocator.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceMemoryBlock.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceNativeContext.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceNativeInterface.cs create mode 100644 src/Ryujinx.Cpu/Nce/NcePatcher.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceThreadPal.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceThreadPalAndroid.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceThreadPalUnix.cs create mode 100644 src/Ryujinx.Cpu/Nce/NceThreadTable.cs rename src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/Resources/{Logo_Ryujinx.png => Logo_Kenjinx.png} (100%) create mode 100644 src/Ryujinx.HLE/HOS/Services/Pm/Types/BootMode.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index bb7056283..66d275737 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -53,5 +53,6 @@ + diff --git a/Ryujinx.sln b/Ryujinx.sln index 8a582d32d..3f6cf7d72 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.1.32228.430 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibKenjinx", "src\LibKenjinx\LibKenjinx.csproj", "{AF58C1D5-DE16-429B-B155-7CE83B4E8FA6}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE", "src\Ryujinx.HLE\Ryujinx.HLE.csproj", "{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}" @@ -63,11 +65,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Headless.SDL2", "src\Ryujinx.Headless.SDL2\Ryujinx.Headless.SDL2.csproj", "{390DC343-5CB4-4C79-A5DD-E3ED235E4C49}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kenjinx.Headless.SDL2", "src\Kenjinx.Headless.SDL2\Kenjinx.Headless.SDL2.csproj", "{390DC343-5CB4-4C79-A5DD-E3ED235E4C49}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kenjinx", "src\Kenjinx\Kenjinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.Common", "src\Ryujinx.UI.Common\Ryujinx.UI.Common.csproj", "{BA161CA0-CD65-4E6E-B644-51C8D1E542DC}" EndProject @@ -97,6 +99,10 @@ Global {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.Build.0 = Release|Any CPU + {AF58C1D5-DE16-429B-B155-7CE83B4E8FA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF58C1D5-DE16-429B-B155-7CE83B4E8FA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF58C1D5-DE16-429B-B155-7CE83B4E8FA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF58C1D5-DE16-429B-B155-7CE83B4E8FA6}.Release|Any CPU.Build.0 = Release|Any CPU {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs b/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs index e88a97cad..dea29e256 100644 --- a/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs +++ b/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs @@ -8,7 +8,7 @@ namespace ARMeilleure.Signal { public static class NativeSignalHandlerGenerator { - public const int MaxTrackedRanges = 16; + public const int MaxTrackedRanges = 8; private const int StructAddressOffset = 0; private const int StructWriteOffset = 4; diff --git a/src/ARMeilleure/Translation/Cache/JitCache.cs b/src/ARMeilleure/Translation/Cache/JitCache.cs index faccdabbe..48849d2d7 100644 --- a/src/ARMeilleure/Translation/Cache/JitCache.cs +++ b/src/ARMeilleure/Translation/Cache/JitCache.cs @@ -2,8 +2,6 @@ using ARMeilleure.CodeGen; using ARMeilleure.CodeGen.Unwinding; using ARMeilleure.Memory; using ARMeilleure.Native; -using Humanizer; -using Ryujinx.Common.Logging; using Ryujinx.Memory; using System; using System.Collections.Generic; @@ -20,68 +18,51 @@ namespace ARMeilleure.Translation.Cache private static readonly int _pageMask = _pageSize - 1; private const int CodeAlignment = 4; // Bytes. - private const int CacheSize = 256 * 1024 * 1024; + private const int CacheSize = 2047 * 1024 * 1024; + private static ReservedRegion _jitRegion; private static JitCacheInvalidation _jitCacheInvalidator; - private static List _cacheAllocators = []; + private static CacheMemoryAllocator _cacheAllocator; private static readonly List _cacheEntries = []; private static readonly Lock _lock = new(); private static bool _initialized; - private static readonly List _jitRegions = []; - private static int _activeRegionIndex = 0; - [SupportedOSPlatform("windows")] [LibraryImport("kernel32.dll", SetLastError = true)] public static partial IntPtr FlushInstructionCache(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize); public static void Initialize(IJitMemoryAllocator allocator) { + if (_initialized) + { + return; + } + lock (_lock) { if (_initialized) { - if (OperatingSystem.IsWindows()) - { - JitUnwindWindows.RemoveFunctionTableHandler( - _jitRegions[0].Pointer); - } - - for (int i = 0; i < _jitRegions.Count; i++) - { - _jitRegions[i].Dispose(); - } - - _jitRegions.Clear(); - _cacheAllocators.Clear(); - } - else - { - _initialized = true; + return; } - _activeRegionIndex = 0; - - var firstRegion = new ReservedRegion(allocator, CacheSize); - _jitRegions.Add(firstRegion); - - CacheMemoryAllocator firstCacheAllocator = new(CacheSize); - _cacheAllocators.Add(firstCacheAllocator); + _jitRegion = new ReservedRegion(allocator, CacheSize); if (!OperatingSystem.IsWindows() && !OperatingSystem.IsMacOS()) { _jitCacheInvalidator = new JitCacheInvalidation(allocator); } + _cacheAllocator = new CacheMemoryAllocator(CacheSize); + if (OperatingSystem.IsWindows()) { - JitUnwindWindows.InstallFunctionTableHandler( - firstRegion.Pointer, CacheSize, firstRegion.Pointer + Allocate(_pageSize) - ); + JitUnwindWindows.InstallFunctionTableHandler(_jitRegion.Pointer, CacheSize, _jitRegion.Pointer + Allocate(_pageSize)); } + + _initialized = true; } } @@ -94,8 +75,8 @@ namespace ARMeilleure.Translation.Cache Debug.Assert(_initialized); int funcOffset = Allocate(code.Length); - ReservedRegion targetRegion = _jitRegions[_activeRegionIndex]; - IntPtr funcPtr = targetRegion.Pointer + funcOffset; + + IntPtr funcPtr = _jitRegion.Pointer + funcOffset; if (OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64) { @@ -109,9 +90,9 @@ namespace ARMeilleure.Translation.Cache } else { - ReprotectAsWritable(targetRegion, funcOffset, code.Length); + ReprotectAsWritable(funcOffset, code.Length); Marshal.Copy(code, 0, funcPtr, code.Length); - ReprotectAsExecutable(targetRegion, funcOffset, code.Length); + ReprotectAsExecutable(funcOffset, code.Length); if (OperatingSystem.IsWindows() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64) { @@ -135,74 +116,50 @@ namespace ARMeilleure.Translation.Cache { Debug.Assert(_initialized); - foreach (var region in _jitRegions) + int funcOffset = (int)(pointer.ToInt64() - _jitRegion.Pointer.ToInt64()); + + if (TryFind(funcOffset, out CacheEntry entry, out int entryIndex) && entry.Offset == funcOffset) { - if (pointer.ToInt64() < region.Pointer.ToInt64() || - pointer.ToInt64() >= (region.Pointer + CacheSize).ToInt64()) - { - continue; - } - - int funcOffset = (int)(pointer.ToInt64() - region.Pointer.ToInt64()); - - if (TryFind(funcOffset, out CacheEntry entry, out int entryIndex) && entry.Offset == funcOffset) - { - _cacheAllocators[_activeRegionIndex].Free(funcOffset, AlignCodeSize(entry.Size)); - _cacheEntries.RemoveAt(entryIndex); - } - - return; + _cacheAllocator.Free(funcOffset, AlignCodeSize(entry.Size)); + _cacheEntries.RemoveAt(entryIndex); } } } - private static void ReprotectAsWritable(ReservedRegion region, int offset, int size) + private static void ReprotectAsWritable(int offset, int size) { int endOffs = offset + size; + int regionStart = offset & ~_pageMask; int regionEnd = (endOffs + _pageMask) & ~_pageMask; - region.Block.MapAsRwx((ulong)regionStart, (ulong)(regionEnd - regionStart)); + _jitRegion.Block.MapAsRwx((ulong)regionStart, (ulong)(regionEnd - regionStart)); } - private static void ReprotectAsExecutable(ReservedRegion region, int offset, int size) + private static void ReprotectAsExecutable(int offset, int size) { int endOffs = offset + size; + int regionStart = offset & ~_pageMask; int regionEnd = (endOffs + _pageMask) & ~_pageMask; - region.Block.MapAsRx((ulong)regionStart, (ulong)(regionEnd - regionStart)); + _jitRegion.Block.MapAsRx((ulong)regionStart, (ulong)(regionEnd - regionStart)); } private static int Allocate(int codeSize) { codeSize = AlignCodeSize(codeSize); - int allocOffset = _cacheAllocators[_activeRegionIndex].Allocate(codeSize); + int allocOffset = _cacheAllocator.Allocate(codeSize); - if (allocOffset >= 0) + if (allocOffset < 0) { - _jitRegions[_activeRegionIndex].ExpandIfNeeded((ulong)allocOffset + (ulong)codeSize); - return allocOffset; + throw new OutOfMemoryException("JIT Cache exhausted."); } - int exhaustedRegion = _activeRegionIndex; - var newRegion = new ReservedRegion(_jitRegions[0].Allocator, CacheSize); - _jitRegions.Add(newRegion); - _activeRegionIndex = _jitRegions.Count - 1; + _jitRegion.ExpandIfNeeded((ulong)allocOffset + (ulong)codeSize); - Logger.Warning?.Print(LogClass.Cpu, $"JIT Cache Region {exhaustedRegion} exhausted, creating new Cache Region {_activeRegionIndex} ({((long)(_activeRegionIndex + 1) * CacheSize).Bytes()} Total Allocation)."); - - _cacheAllocators.Add(new CacheMemoryAllocator(CacheSize)); - - int allocOffsetNew = _cacheAllocators[_activeRegionIndex].Allocate(codeSize); - if (allocOffsetNew < 0) - { - throw new OutOfMemoryException("Failed to allocate in new Cache Region!"); - } - - newRegion.ExpandIfNeeded((ulong)allocOffsetNew + (ulong)codeSize); - return allocOffsetNew; + return allocOffset; } private static int AlignCodeSize(int codeSize) @@ -228,21 +185,18 @@ namespace ARMeilleure.Translation.Cache { lock (_lock) { - foreach (var region in _jitRegions) + int index = _cacheEntries.BinarySearch(new CacheEntry(offset, 0, default)); + + if (index < 0) { - int index = _cacheEntries.BinarySearch(new CacheEntry(offset, 0, default)); + index = ~index - 1; + } - if (index < 0) - { - index = ~index - 1; - } - - if (index >= 0) - { - entry = _cacheEntries[index]; - entryIndex = index; - return true; - } + if (index >= 0) + { + entry = _cacheEntries[index]; + entryIndex = index; + return true; } } diff --git a/src/ARMeilleure/Translation/Delegates.cs b/src/ARMeilleure/Translation/Delegates.cs index d763afa68..0f4dfd7eb 100644 --- a/src/ARMeilleure/Translation/Delegates.cs +++ b/src/ARMeilleure/Translation/Delegates.cs @@ -1,4 +1,5 @@ using ARMeilleure.Instructions; +using ARMeilleure.State; using System; using System.Collections.Generic; using System.Reflection; diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 755a69518..ae7eee58a 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -29,8 +29,8 @@ namespace ARMeilleure.Translation.PTC { private const string OuterHeaderMagicString = "PTCohd\0\0"; private const string InnerHeaderMagicString = "PTCihd\0\0"; - - private const uint InternalVersion = 7008; //! To be incremented manually for each change to the ARMeilleure project. + + private const uint InternalVersion = 6998; //! To be incremented manually for each change to the ARMeilleure project. private const string ActualDir = "0"; private const string BackupDir = "1"; @@ -563,7 +563,6 @@ namespace ARMeilleure.Translation.PTC { if (AreCarriersEmpty() || ContainsBlacklistedFunctions()) { - ResetCarriersIfNeeded(); return; } @@ -870,7 +869,7 @@ namespace ARMeilleure.Translation.PTC Debug.Assert(Profiler.IsAddressInStaticCodeRange(address)); - TranslatedFunction func = translator.Translate(address, executionMode, highCq, pptcTranslation: true); + TranslatedFunction func = translator.Translate(address, executionMode, highCq); if (func == null) { diff --git a/src/ARMeilleure/Translation/Translator.cs b/src/ARMeilleure/Translation/Translator.cs index 4eb4dd69a..646b2ee40 100644 --- a/src/ARMeilleure/Translation/Translator.cs +++ b/src/ARMeilleure/Translation/Translator.cs @@ -219,7 +219,7 @@ namespace ARMeilleure.Translation } } - internal TranslatedFunction Translate(ulong address, ExecutionMode mode, bool highCq, bool singleStep = false, bool pptcTranslation = false) + internal TranslatedFunction Translate(ulong address, ExecutionMode mode, bool highCq, bool singleStep = false) { var context = new ArmEmitterContext( Memory, @@ -246,12 +246,7 @@ namespace ARMeilleure.Translation context.Branch(context.GetLabel(address)); } - ControlFlowGraph cfg = EmitAndGetCFG(context, blocks, out Range funcRange, out Counter counter, pptcTranslation); - - if (cfg == null) - { - return null; - } + ControlFlowGraph cfg = EmitAndGetCFG(context, blocks, out Range funcRange, out Counter counter); ulong funcSize = funcRange.End - funcRange.Start; @@ -326,8 +321,7 @@ namespace ARMeilleure.Translation ArmEmitterContext context, Block[] blocks, out Range range, - out Counter counter, - bool pptcTranslation) + out Counter counter) { counter = null; @@ -412,14 +406,6 @@ namespace ARMeilleure.Translation if (opCode.Instruction.Emitter != null) { opCode.Instruction.Emitter(context); - // if we're pre-compiling PPTC functions, and we hit an Undefined instruction as the first - // instruction in the block, mark the function as blacklisted - // this way, we don't pre-compile Exlaunch hooks, which allows ExeFS mods to run with PPTC - if (pptcTranslation && opCode.Instruction.Name == InstName.Und && blkIndex == 0) - { - range = new Range(rangeStart, rangeEnd); - return null; - } } else { diff --git a/src/Ryujinx.Headless.SDL2/HeadlessDynamicTextInputHandler.cs b/src/Kenjinx.Headless.SDL2/HeadlessDynamicTextInputHandler.cs similarity index 93% rename from src/Ryujinx.Headless.SDL2/HeadlessDynamicTextInputHandler.cs rename to src/Kenjinx.Headless.SDL2/HeadlessDynamicTextInputHandler.cs index 503874ff1..4c511eb69 100644 --- a/src/Ryujinx.Headless.SDL2/HeadlessDynamicTextInputHandler.cs +++ b/src/Kenjinx.Headless.SDL2/HeadlessDynamicTextInputHandler.cs @@ -2,7 +2,7 @@ using Ryujinx.HLE.UI; using System.Threading; using System.Threading.Tasks; -namespace Ryujinx.Headless.SDL2 +namespace Kenjinx.Headless.SDL2 { /// /// Headless text processing class, right now there is no way to forward the input to it. @@ -30,7 +30,7 @@ namespace Ryujinx.Headless.SDL2 Task.Run(() => { Thread.Sleep(100); - TextChangedEvent?.Invoke("Ryujinx", 7, 7, false); + TextChangedEvent?.Invoke("Kenjinx", 7, 7, false); }); } } diff --git a/src/Ryujinx.Headless.SDL2/HeadlessHostUiTheme.cs b/src/Kenjinx.Headless.SDL2/HeadlessHostUiTheme.cs similarity index 93% rename from src/Ryujinx.Headless.SDL2/HeadlessHostUiTheme.cs rename to src/Kenjinx.Headless.SDL2/HeadlessHostUiTheme.cs index 78cd43ae5..274d69ebe 100644 --- a/src/Ryujinx.Headless.SDL2/HeadlessHostUiTheme.cs +++ b/src/Kenjinx.Headless.SDL2/HeadlessHostUiTheme.cs @@ -1,6 +1,6 @@ using Ryujinx.HLE.UI; -namespace Ryujinx.Headless.SDL2 +namespace Kenjinx.Headless.SDL2 { internal class HeadlessHostUiTheme : IHostUITheme { diff --git a/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj b/src/Kenjinx.Headless.SDL2/Kenjinx.Headless.SDL2.csproj similarity index 96% rename from src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj rename to src/Kenjinx.Headless.SDL2/Kenjinx.Headless.SDL2.csproj index f442f7830..3abe57dfd 100644 --- a/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj +++ b/src/Kenjinx.Headless.SDL2/Kenjinx.Headless.SDL2.csproj @@ -1,4 +1,4 @@ - + win-x64;osx-x64;linux-x64;win-arm64;osx-arm64;linux-arm64 @@ -56,13 +56,13 @@ - + false - ..\Ryujinx\Ryujinx.ico + ..\Kenjinx\Kenjinx.ico diff --git a/src/Ryujinx.Headless.SDL2/Ryujinx.bmp b/src/Kenjinx.Headless.SDL2/Kenjinx.bmp similarity index 100% rename from src/Ryujinx.Headless.SDL2/Ryujinx.bmp rename to src/Kenjinx.Headless.SDL2/Kenjinx.bmp diff --git a/src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs b/src/Kenjinx.Headless.SDL2/OpenGL/OpenGLWindow.cs similarity index 97% rename from src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs rename to src/Kenjinx.Headless.SDL2/OpenGL/OpenGLWindow.cs index 57bc5efcc..043a5cd6e 100644 --- a/src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs +++ b/src/Kenjinx.Headless.SDL2/OpenGL/OpenGLWindow.cs @@ -7,7 +7,7 @@ using Ryujinx.Input.HLE; using System; using static SDL2.SDL; -namespace Ryujinx.Headless.SDL2.OpenGL +namespace Kenjinx.Headless.SDL2.OpenGL { class OpenGLWindow : WindowBase { @@ -65,7 +65,7 @@ namespace Ryujinx.Headless.SDL2.OpenGL // Ensure we share our contexts. SetupOpenGLAttributes(true, GraphicsDebugLevel.None); - IntPtr windowHandle = SDL_CreateWindow("Ryujinx background context window", 0, 0, 1, 1, SDL_WindowFlags.SDL_WINDOW_OPENGL | SDL_WindowFlags.SDL_WINDOW_HIDDEN); + IntPtr windowHandle = SDL_CreateWindow("Kenji-NX background context window", 0, 0, 1, 1, SDL_WindowFlags.SDL_WINDOW_OPENGL | SDL_WindowFlags.SDL_WINDOW_HIDDEN); IntPtr context = SDL_GL_CreateContext(windowHandle); GL.LoadBindings(new OpenToolkitBindingsContext()); diff --git a/src/Ryujinx.Headless.SDL2/Options.cs b/src/Kenjinx.Headless.SDL2/Options.cs similarity index 99% rename from src/Ryujinx.Headless.SDL2/Options.cs rename to src/Kenjinx.Headless.SDL2/Options.cs index ecb1d92aa..7e8f5f43c 100644 --- a/src/Ryujinx.Headless.SDL2/Options.cs +++ b/src/Kenjinx.Headless.SDL2/Options.cs @@ -3,13 +3,13 @@ using Ryujinx.Common.Configuration; using Ryujinx.HLE; using Ryujinx.HLE.HOS.SystemState; -namespace Ryujinx.Headless.SDL2 +namespace Kenjinx.Headless.SDL2 { public class Options { // General - [Option("root-data-dir", Required = false, HelpText = "Set the custom folder path for Ryujinx data.")] + [Option("root-data-dir", Required = false, HelpText = "Set the custom folder path for Kenji-NX data.")] public string BaseDataDir { get; set; } [Option("profile", Required = false, HelpText = "Set the user profile to launch the game with.")] diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Kenjinx.Headless.SDL2/Program.cs similarity index 98% rename from src/Ryujinx.Headless.SDL2/Program.cs rename to src/Kenjinx.Headless.SDL2/Program.cs index 2beb79c5d..062fee2c2 100644 --- a/src/Ryujinx.Headless.SDL2/Program.cs +++ b/src/Kenjinx.Headless.SDL2/Program.cs @@ -20,8 +20,8 @@ using Ryujinx.Graphics.Gpu.Shader; using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan.MoltenVK; -using Ryujinx.Headless.SDL2.OpenGL; -using Ryujinx.Headless.SDL2.Vulkan; +using Kenjinx.Headless.SDL2.OpenGL; +using Kenjinx.Headless.SDL2.Vulkan; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; @@ -40,7 +40,7 @@ using ConfigGamepadInputId = Ryujinx.Common.Configuration.Hid.Controller.Gamepad using ConfigStickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId; using Key = Ryujinx.Common.Configuration.Hid.Key; -namespace Ryujinx.Headless.SDL2 +namespace Kenjinx.Headless.SDL2 { class Program { @@ -68,7 +68,7 @@ namespace Ryujinx.Headless.SDL2 // Make process DPI aware for proper window sizing on high-res screens. ForceDpiAware.Windows(); - Console.Title = $"Ryujinx Console {Version} (Headless SDL2)"; + Console.Title = $"Kenji-NX Console {Version} (Headless SDL2)"; if (OperatingSystem.IsMacOS() || OperatingSystem.IsLinux()) { @@ -451,7 +451,7 @@ namespace Ryujinx.Headless.SDL2 } else { - Logger.Error?.Print(LogClass.Application, "No writable log directory available. Make sure either the Logs directory, Application Data, or the Ryujinx directory is writable."); + Logger.Error?.Print(LogClass.Application, "No writable log directory available. Make sure either the Logs directory, Application Data, or the Kenji-NX directory is writable."); } } @@ -579,7 +579,7 @@ namespace Ryujinx.Headless.SDL2 options.AudioVolume, options.UseHypervisor ?? true, options.MultiplayerLanInterfaceId, - Common.Configuration.Multiplayer.MultiplayerMode.Disabled, + Ryujinx.Common.Configuration.Multiplayer.MultiplayerMode.Disabled, false, "", "", @@ -717,7 +717,7 @@ namespace Ryujinx.Headless.SDL2 } catch (ArgumentOutOfRangeException) { - Logger.Error?.Print(LogClass.Application, "The specified file is not supported by Ryujinx."); + Logger.Error?.Print(LogClass.Application, "The specified file is not supported by Kenji-NX."); _emulationContext.Dispose(); diff --git a/src/Ryujinx.Headless.SDL2/SDL2Mouse.cs b/src/Kenjinx.Headless.SDL2/SDL2Mouse.cs similarity index 98% rename from src/Ryujinx.Headless.SDL2/SDL2Mouse.cs rename to src/Kenjinx.Headless.SDL2/SDL2Mouse.cs index de64b4f8f..aeadbd2a7 100644 --- a/src/Ryujinx.Headless.SDL2/SDL2Mouse.cs +++ b/src/Kenjinx.Headless.SDL2/SDL2Mouse.cs @@ -4,7 +4,7 @@ using System; using System.Drawing; using System.Numerics; -namespace Ryujinx.Headless.SDL2 +namespace Kenjinx.Headless.SDL2 { class SDL2Mouse : IMouse { diff --git a/src/Ryujinx.Headless.SDL2/SDL2MouseDriver.cs b/src/Kenjinx.Headless.SDL2/SDL2MouseDriver.cs similarity index 99% rename from src/Ryujinx.Headless.SDL2/SDL2MouseDriver.cs rename to src/Kenjinx.Headless.SDL2/SDL2MouseDriver.cs index 8983091f5..599e04ccf 100644 --- a/src/Ryujinx.Headless.SDL2/SDL2MouseDriver.cs +++ b/src/Kenjinx.Headless.SDL2/SDL2MouseDriver.cs @@ -8,7 +8,7 @@ using System.Numerics; using System.Runtime.CompilerServices; using static SDL2.SDL; -namespace Ryujinx.Headless.SDL2 +namespace Kenjinx.Headless.SDL2 { class SDL2MouseDriver : IGamepadDriver { diff --git a/src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs b/src/Kenjinx.Headless.SDL2/StatusUpdatedEventArgs.cs similarity index 94% rename from src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs rename to src/Kenjinx.Headless.SDL2/StatusUpdatedEventArgs.cs index c1dd3805f..1e253c7f7 100644 --- a/src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs +++ b/src/Kenjinx.Headless.SDL2/StatusUpdatedEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Headless.SDL2 +namespace Kenjinx.Headless.SDL2 { class StatusUpdatedEventArgs( string vSyncMode, diff --git a/src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs b/src/Kenjinx.Headless.SDL2/Vulkan/VulkanWindow.cs similarity index 98% rename from src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs rename to src/Kenjinx.Headless.SDL2/Vulkan/VulkanWindow.cs index 1903c1f49..13a42c8a5 100644 --- a/src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs +++ b/src/Kenjinx.Headless.SDL2/Vulkan/VulkanWindow.cs @@ -6,7 +6,7 @@ using System; using System.Runtime.InteropServices; using static SDL2.SDL; -namespace Ryujinx.Headless.SDL2.Vulkan +namespace Kenjinx.Headless.SDL2.Vulkan { class VulkanWindow : WindowBase { diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Kenjinx.Headless.SDL2/WindowBase.cs similarity index 96% rename from src/Ryujinx.Headless.SDL2/WindowBase.cs rename to src/Kenjinx.Headless.SDL2/WindowBase.cs index 6fb937c51..0557b710b 100644 --- a/src/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/src/Kenjinx.Headless.SDL2/WindowBase.cs @@ -23,7 +23,7 @@ using AntiAliasing = Ryujinx.Common.Configuration.AntiAliasing; using ScalingFilter = Ryujinx.Common.Configuration.ScalingFilter; using Switch = Ryujinx.HLE.Switch; -namespace Ryujinx.Headless.SDL2 +namespace Kenjinx.Headless.SDL2 { abstract partial class WindowBase : IHostUIHandler, IDisposable { @@ -133,7 +133,7 @@ namespace Ryujinx.Headless.SDL2 private void SetWindowIcon() { - Stream iconStream = typeof(WindowBase).Assembly.GetManifestResourceStream("Ryujinx.Headless.SDL2.Ryujinx.bmp"); + Stream iconStream = typeof(WindowBase).Assembly.GetManifestResourceStream("Kenjinx.Headless.SDL2.Kenjinx.bmp"); byte[] iconBytes = new byte[iconStream!.Length]; if (iconStream.Read(iconBytes, 0, iconBytes.Length) != iconBytes.Length) @@ -187,7 +187,7 @@ namespace Ryujinx.Headless.SDL2 FullscreenFlag = SDL_WindowFlags.SDL_WINDOW_FULLSCREEN_DESKTOP; } - WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | GetWindowFlags()); + WindowHandle = SDL_CreateWindow($"Kenji-NX {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | GetWindowFlags()); if (WindowHandle == IntPtr.Zero) { @@ -251,12 +251,12 @@ namespace Ryujinx.Headless.SDL2 private void SetAntiAliasing() { - Renderer?.Window.SetAntiAliasing((Graphics.GAL.AntiAliasing)AntiAliasing); + Renderer?.Window.SetAntiAliasing((Ryujinx.Graphics.GAL.AntiAliasing)AntiAliasing); } private void SetScalingFilter() { - Renderer?.Window.SetScalingFilter((Graphics.GAL.ScalingFilter)ScalingFilter); + Renderer?.Window.SetScalingFilter((Ryujinx.Graphics.GAL.ScalingFilter)ScalingFilter); Renderer?.Window.SetScalingFilterLevel(ScalingFilterLevel); } @@ -471,7 +471,7 @@ namespace Ryujinx.Headless.SDL2 public bool DisplayInputDialog(SoftwareKeyboardUIArgs args, out string userText) { // SDL2 doesn't support input dialogs - userText = "Ryujinx"; + userText = "Kenji-NX"; return true; } @@ -486,7 +486,7 @@ namespace Ryujinx.Headless.SDL2 public bool DisplayCabinetDialog(out string userText) { // SDL2 doesn't support input dialogs - userText = "Ryujinx"; + userText = "Kenji-NX"; return true; } diff --git a/src/Ryujinx/App.axaml b/src/Kenjinx/App.axaml similarity index 100% rename from src/Ryujinx/App.axaml rename to src/Kenjinx/App.axaml diff --git a/src/Ryujinx/App.axaml.cs b/src/Kenjinx/App.axaml.cs similarity index 99% rename from src/Ryujinx/App.axaml.cs rename to src/Kenjinx/App.axaml.cs index cd4416aa1..49dbcc60c 100644 --- a/src/Ryujinx/App.axaml.cs +++ b/src/Kenjinx/App.axaml.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Ava public override void Initialize() { - Name = $"Ryujinx {Program.Version}"; + Name = $"Kenji-NX {Program.Version}"; AvaloniaXamlLoader.Load(this); diff --git a/src/Ryujinx/AppHost.cs b/src/Kenjinx/AppHost.cs similarity index 100% rename from src/Ryujinx/AppHost.cs rename to src/Kenjinx/AppHost.cs diff --git a/src/Ryujinx/Assets/Fonts/SegoeFluentIcons.ttf b/src/Kenjinx/Assets/Fonts/SegoeFluentIcons.ttf similarity index 100% rename from src/Ryujinx/Assets/Fonts/SegoeFluentIcons.ttf rename to src/Kenjinx/Assets/Fonts/SegoeFluentIcons.ttf diff --git a/src/Ryujinx/Assets/Icons/Controller_JoyConLeft.svg b/src/Kenjinx/Assets/Icons/Controller_JoyConLeft.svg similarity index 100% rename from src/Ryujinx/Assets/Icons/Controller_JoyConLeft.svg rename to src/Kenjinx/Assets/Icons/Controller_JoyConLeft.svg diff --git a/src/Ryujinx/Assets/Icons/Controller_JoyConPair.svg b/src/Kenjinx/Assets/Icons/Controller_JoyConPair.svg similarity index 100% rename from src/Ryujinx/Assets/Icons/Controller_JoyConPair.svg rename to src/Kenjinx/Assets/Icons/Controller_JoyConPair.svg diff --git a/src/Ryujinx/Assets/Icons/Controller_JoyConRight.svg b/src/Kenjinx/Assets/Icons/Controller_JoyConRight.svg similarity index 100% rename from src/Ryujinx/Assets/Icons/Controller_JoyConRight.svg rename to src/Kenjinx/Assets/Icons/Controller_JoyConRight.svg diff --git a/src/Ryujinx/Assets/Icons/Controller_ProCon.svg b/src/Kenjinx/Assets/Icons/Controller_ProCon.svg similarity index 100% rename from src/Ryujinx/Assets/Icons/Controller_ProCon.svg rename to src/Kenjinx/Assets/Icons/Controller_ProCon.svg diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Kenjinx/Assets/Locales/ar_SA.json similarity index 99% rename from src/Ryujinx/Assets/Locales/ar_SA.json rename to src/Kenjinx/Assets/Locales/ar_SA.json index 7125078e1..a499bd11d 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Kenjinx/Assets/Locales/ar_SA.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "تحميل لُعْبَة غير محزومة", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "‫فتح مجلد Ryujinx", + "MenuBarFileOpenEmuFolder": "‫فتح مجلد Kenji-NX", "MenuBarFileOpenLogsFolder": "فتح مجلد السجلات", "MenuBarFileExit": "_خروج", "MenuBarOptions": "_خيارات", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Kenjinx/Assets/Locales/de_DE.json similarity index 92% rename from src/Ryujinx/Assets/Locales/de_DE.json rename to src/Kenjinx/Assets/Locales/de_DE.json index eecb8d81e..d7af2b0a9 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Kenjinx/Assets/Locales/de_DE.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "_Entpacktes Spiel öffnen", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "Ryujinx-Ordner öffnen", + "MenuBarFileOpenEmuFolder": "Kenji-NX-Ordner öffnen", "MenuBarFileOpenLogsFolder": "Logs-Ordner öffnen", "MenuBarFileExit": "_Beenden", "MenuBarOptions": "_Optionen", @@ -45,7 +45,7 @@ "MenuBarViewWindow2160": "2160p", "MenuBarHelp": "_Hilfe", "MenuBarHelpCheckForUpdates": "Nach Updates suchen", - "MenuBarHelpAbout": "Über Ryujinx", + "MenuBarHelpAbout": "Über Kenji-NX", "MenuSearch": "Suchen...", "GameListHeaderFavorite": "Favorit", "GameListHeaderIcon": "Icon", @@ -96,11 +96,11 @@ "StatusBarSystemVersion": "Systemversion: {0}", "LinuxVmMaxMapCountDialogTitle": "Niedriges Limit für Speicherzuordnungen erkannt", "LinuxVmMaxMapCountDialogTextPrimary": "Möchtest Du den Wert von vm.max_map_count auf {0} erhöhen", - "LinuxVmMaxMapCountDialogTextSecondary": "Einige Spiele könnten versuchen, mehr Speicherzuordnungen zu erstellen, als derzeit erlaubt. Ryujinx wird abstürzen, sobald dieses Limit überschritten wird.", + "LinuxVmMaxMapCountDialogTextSecondary": "Einige Spiele könnten versuchen, mehr Speicherzuordnungen zu erstellen, als derzeit erlaubt. Kenji-NX wird abstürzen, sobald dieses Limit überschritten wird.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Ja, bis zum nächsten Neustart", "LinuxVmMaxMapCountDialogButtonPersistent": "Ja, permanent", "LinuxVmMaxMapCountWarningTextPrimary": "Maximale Anzahl an Speicherzuordnungen ist niedriger als empfohlen.", - "LinuxVmMaxMapCountWarningTextSecondary": "Der aktuelle Wert von vm.max_map_count ({0}) ist kleiner als {1}. Einige Spiele könnten versuchen, mehr Speicherzuordnungen zu erstellen, als derzeit erlaubt. Ryujinx wird abstürzen, sobald dieses Limit überschritten wird.\n\nDu kannst das Limit entweder manuell erhöhen oder pkexec installieren, damit Ryujinx Dir dabei hilft.", + "LinuxVmMaxMapCountWarningTextSecondary": "Der aktuelle Wert von vm.max_map_count ({0}) ist kleiner als {1}. Einige Spiele könnten versuchen, mehr Speicherzuordnungen zu erstellen, als derzeit erlaubt. Kenji-NX wird abstürzen, sobald dieses Limit überschritten wird.\n\nDu kannst das Limit entweder manuell erhöhen oder pkexec installieren, damit Kenji-NX Dir dabei hilft.", "Settings": "Einstellungen", "SettingsTabGeneral": "Oberfläche", "SettingsTabGeneralGeneral": "Allgemein", @@ -429,42 +429,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Schwacher Vibrations-Multiplikator", "DialogMessageSaveNotAvailableMessage": "Es existieren keine Speicherdaten für {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Sollen Speicherdaten für dieses Spiel erstellt werden?", - "DialogConfirmationTitle": "Ryujinx - Bestätigung", - "DialogUpdaterTitle": "Ryujinx - Updater", - "DialogErrorTitle": "Ryujinx - Fehler", - "DialogWarningTitle": "Ryujinx - Warnung", - "DialogExitTitle": "Ryujinx - Beenden", + "DialogConfirmationTitle": "Kenji-NX - Bestätigung", + "DialogUpdaterTitle": "Kenji-NX - Updater", + "DialogErrorTitle": "Kenji-NX - Fehler", + "DialogWarningTitle": "Kenji-NX - Warnung", + "DialogExitTitle": "Kenji-NX - Beenden", "DialogErrorMessage": "Ein Fehler ist aufgetreten", - "DialogExitMessage": "Ryujinx wirklich schließen?", + "DialogExitMessage": "Kenji-NX wirklich schließen?", "DialogExitSubMessage": "Alle nicht gespeicherten Daten gehen verloren!", "DialogMessageCreateSaveErrorMessage": "Es ist ein Fehler bei der Erstellung der angegebenen Speicherdaten aufgetreten: {0}", "DialogMessageFindSaveErrorMessage": "Es ist ein Fehler beim Suchen der angegebenen Speicherdaten aufgetreten: {0}", "FolderDialogExtractTitle": "Wähle den Ordner, in welchen die Dateien entpackt werden sollen", "DialogNcaExtractionMessage": "Extrahiert {0} abschnitt von {1}...", - "DialogNcaExtractionTitle": "Ryujinx - NCA-Abschnitt-Extraktor", + "DialogNcaExtractionTitle": "Kenji-NX - NCA-Abschnitt-Extraktor", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraktion fehlgeschlagen. Der Hauptheader der NCA war in der ausgewählten Datei nicht vorhanden.", "DialogNcaExtractionCheckLogErrorMessage": "Extraktion fehlgeschlagen. Überprüfe die Logs für weitere Informationen.", "DialogNcaExtractionSuccessMessage": "Extraktion erfolgreich abgeschlossen.", - "DialogUpdaterConvertFailedMessage": "Die Konvertierung der aktuellen Ryujinx-Version ist fehlgeschlagen.", + "DialogUpdaterConvertFailedMessage": "Die Konvertierung der aktuellen Kenji-NX-Version ist fehlgeschlagen.", "DialogUpdaterCancelUpdateMessage": "Update wird abgebrochen!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Es wird bereits die aktuellste Version von Ryujinx benutzt", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Es wird bereits die aktuellste Version von Kenji-NX benutzt", "DialogUpdaterFailedToGetVersionMessage": "Beim Versuch, Veröffentlichungs-Info von GitHub Release zu erhalten, ist ein Fehler aufgetreten. Dies kann aufgrund einer neuen Veröffentlichung, die gerade von GitHub Actions kompiliert wird, verursacht werden.", - "DialogUpdaterConvertFailedGithubMessage": "Fehler beim Konvertieren der erhaltenen Ryujinx-Version von GitHub Release.", + "DialogUpdaterConvertFailedGithubMessage": "Fehler beim Konvertieren der erhaltenen Kenji-NX-Version von GitHub Release.", "DialogUpdaterDownloadingMessage": "Update wird heruntergeladen...", "DialogUpdaterExtractionMessage": "Update wird entpackt...", "DialogUpdaterRenamingMessage": "Update wird umbenannt...", "DialogUpdaterAddingFilesMessage": "Update wird hinzugefügt...", "DialogUpdaterCompleteMessage": "Update abgeschlossen!", - "DialogUpdaterRestartMessage": "Ryujinx jetzt neu starten?", + "DialogUpdaterRestartMessage": "Kenji-NX jetzt neu starten?", "DialogUpdaterNoInternetMessage": "Es besteht keine Verbindung mit dem Internet!", "DialogUpdaterNoInternetSubMessage": "Bitte vergewissern, dass eine funktionierende Internetverbindung existiert!", - "DialogUpdaterDirtyBuildMessage": "Inoffizielle Versionen von Ryujinx können nicht aktualisiert werden", - "DialogUpdaterDirtyBuildSubMessage": "Lade Ryujinx bitte von hier herunter, um eine unterstützte Version zu erhalten: https://ryujinx.org/", + "DialogUpdaterDirtyBuildMessage": "Inoffizielle Versionen von Kenji-NX können nicht aktualisiert werden", + "DialogUpdaterDirtyBuildSubMessage": "Lade Kenji-NX bitte von hier herunter, um eine unterstützte Version zu erhalten: https://ryujinx.org/", "DialogRestartRequiredMessage": "Neustart erforderlich", "DialogThemeRestartMessage": "Das Design wurde gespeichert. Ein Neustart ist erforderlich, um das Design anzuwenden.", "DialogThemeRestartSubMessage": "Jetzt neu starten?", "DialogFirmwareInstallEmbeddedMessage": "Die in diesem Spiel enthaltene Firmware installieren? (Firmware {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "Es wurde keine installierte Firmware gefunden, aber Ryujinx konnte die Firmware {0} aus dem bereitgestellten Spiel installieren.\nRyujinx wird nun gestartet.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "Es wurde keine installierte Firmware gefunden, aber Kenji-NX konnte die Firmware {0} aus dem bereitgestellten Spiel installieren.\nRyujinx wird nun gestartet.", "DialogFirmwareNoFirmwareInstalledMessage": "Keine Firmware installiert", "DialogFirmwareInstalledMessage": "Firmware {0} wurde installiert", "DialogInstallFileTypesSuccessMessage": "Dateitypen erfolgreich installiert!", @@ -478,7 +478,7 @@ "DialogErrorAppletErrorExceptionMessage": "Fehler beim Anzeigen des ErrorApplet-Dialogs: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nWeitere Informationen zur Behebung dieses Fehlers können in unserem Setup-Guide gefunden werden.", - "DialogUserErrorDialogTitle": "Ryujinx Fehler ({0})", + "DialogUserErrorDialogTitle": "Kenji-NX Fehler ({0})", "DialogAmiiboApiTitle": "Amiibo-API", "DialogAmiiboApiFailFetchMessage": "Beim Abrufen von Informationen aus der API ist ein Fehler aufgetreten.", "DialogAmiiboApiConnectErrorMessage": "Verbindung zum Amiibo API Server kann nicht hergestellt werden. Der Dienst ist möglicherweise nicht verfügbar oder es existiert keine Internetverbindung.", @@ -528,7 +528,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Bitte beende die Emulation oder schließe den Emulator, vor dem Starten eines neuen Spiels", "DialogUpdateAddUpdateErrorMessage": "Die angegebene Datei enthält keine Updates für den ausgewählten Titel!", "DialogSettingsBackendThreadingWarningTitle": "Warnung - Render Threading", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx muss muss neu gestartet werden, damit die Änderungen wirksam werden. Abhängig von dem Betriebssystem muss möglicherweise das Multithreading des Treibers manuell deaktiviert werden, wenn Ryujinx verwendet wird.", + "DialogSettingsBackendThreadingWarningMessage": "Kenji-NX muss muss neu gestartet werden, damit die Änderungen wirksam werden. Abhängig von dem Betriebssystem muss möglicherweise das Multithreading des Treibers manuell deaktiviert werden, wenn Kenji-NX verwendet wird.", "DialogModManagerDeletionWarningMessage": "Du bist dabei, diesen Mod zu lösche. {0}\n\nMöchtest du wirklich fortfahren?", "DialogModManagerDeletionAllWarningMessage": "Du bist dabei, alle Mods für diesen Titel zu löschen.\n\nMöchtest du wirklich fortfahren?", "SettingsTabGraphicsFeaturesOptions": "Erweiterungen", @@ -541,15 +541,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "Der Dateiname enthält ungültige Zeichen. Bitte erneut versuchen.", "MenuBarOptionsPauseEmulation": "Pause", "MenuBarOptionsResumeEmulation": "Fortsetzen", - "AboutUrlTooltipMessage": "Klicke hier, um die Ryujinx Website im Standardbrowser zu öffnen.", - "AboutDisclaimerMessage": "Ryujinx ist in keinster Weise weder mit Nintendo™, \nnoch mit deren Partnern verbunden.", + "AboutUrlTooltipMessage": "Klicke hier, um die Kenji-NX Website im Standardbrowser zu öffnen.", + "AboutDisclaimerMessage": "Kenji-NX ist in keinster Weise weder mit Nintendo™, \nnoch mit deren Partnern verbunden.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) wird in unserer Amiibo \nEmulation benutzt.", - "AboutPatreonUrlTooltipMessage": "Klicke hier, um die Ryujinx Patreon Seite im Standardbrowser zu öffnen.", - "AboutGithubUrlTooltipMessage": "Klicke hier, um die Ryujinx GitHub Seite im Standardbrowser zu öffnen.", - "AboutDiscordUrlTooltipMessage": "Klicke hier, um eine Einladung zum Ryujinx Discord Server im Standardbrowser zu öffnen.", - "AboutTwitterUrlTooltipMessage": "Klicke hier, um die Ryujinx Twitter Seite im Standardbrowser zu öffnen.", + "AboutPatreonUrlTooltipMessage": "Klicke hier, um die Kenji-NX Patreon Seite im Standardbrowser zu öffnen.", + "AboutGithubUrlTooltipMessage": "Klicke hier, um die Kenji-NX GitHub Seite im Standardbrowser zu öffnen.", + "AboutDiscordUrlTooltipMessage": "Klicke hier, um eine Einladung zum Kenji-NX Discord Server im Standardbrowser zu öffnen.", + "AboutTwitterUrlTooltipMessage": "Klicke hier, um die Kenji-NX Twitter Seite im Standardbrowser zu öffnen.", "AboutRyujinxAboutTitle": "Über:", - "AboutRyujinxAboutContent": "Ryujinx ist ein Nintendo Switch™ Emulator.\n\nEntwickler, die an einer Mitarbeit interessiert sind, können auf GitHub mehr erfahren.", + "AboutRyujinxAboutContent": "Kenji-NX ist ein Nintendo Switch™ Emulator.\n\nEntwickler, die an einer Mitarbeit interessiert sind, können auf GitHub mehr erfahren.", "AboutRyujinxMaintainersTitle": "Entwickelt von:", "AboutRyujinxFormerMaintainersTitle": "Früher Entwickelt von:", "AboutRyujinxMaintainersContentTooltipMessage": "Klicke hier, um die Liste der Mitwirkenden im Standardbrowser zu öffnen.", @@ -598,7 +598,7 @@ "MemoryManagerTooltip": "Ändert wie der Gastspeicher abgebildet wird und wie auf ihn zugegriffen wird. Beinflusst die Leistung der emulierten CPU erheblich.\n\nIm Zweifelsfall Host ungeprüft auswählen.", "MemoryManagerSoftwareTooltip": "Verwendung einer Software-Seitentabelle für die Adressumsetzung. Höchste Genauigkeit, aber langsamste Leistung.", "MemoryManagerHostTooltip": "Direkte Zuordnung von Speicher im Host-Adressraum. Viel schnellere JIT-Kompilierung und Ausführung.", - "MemoryManagerUnsafeTooltip": "Direkte Zuordnung des Speichers, aber keine Maskierung der Adresse innerhalb des Gastadressraums vor dem Zugriff. Schneller, aber auf Kosten der Sicherheit. Die Gastanwendung kann von überall in Ryujinx auf den Speicher zugreifen, daher sollte in diesem Modus nur Programme ausgeführt werden denen vertraut wird.", + "MemoryManagerUnsafeTooltip": "Direkte Zuordnung des Speichers, aber keine Maskierung der Adresse innerhalb des Gastadressraums vor dem Zugriff. Schneller, aber auf Kosten der Sicherheit. Die Gastanwendung kann von überall in Kenji-NX auf den Speicher zugreifen, daher sollte in diesem Modus nur Programme ausgeführt werden denen vertraut wird.", "UseHypervisorTooltip": "Verwende Hypervisor anstelle von JIT. Verbessert die Leistung stark, falls vorhanden, kann jedoch in seinem aktuellen Zustand instabil sein.", "DRamTooltip": "Erhöht den Arbeitsspeicher des emulierten Systems von 4 GiB auf 6 GiB.\n\nDies ist nur für Texturenpakete mit höherer Auflösung oder Mods mit 4K-Auflösung nützlich. Diese Option verbessert NICHT die Leistung.\n\nIm Zweifelsfall AUS lassen.", "IgnoreMissingServicesTooltip": "Durch diese Option werden nicht implementierte Dienste der Switch-Firmware ignoriert. Dies kann dabei helfen, Abstürze beim Starten bestimmter Spiele zu umgehen.\n\nIm Zweifelsfall AUS lassen.", @@ -621,17 +621,17 @@ "FSAccessLogModeTooltip": "Aktiviert die Ausgabe des FS-Zugriff-Logs in der Konsole. Mögliche Modi sind 0-3", "DeveloperOptionTooltip": "Mit Vorsicht verwenden", "OpenGlLogLevel": "Erfordert die Aktivierung der entsprechenden Log-Level", - "DebugLogTooltip": "Ausgabe von Debug-Logs in der Konsole.\n\nVerwende diese Option nur auf ausdrückliche Anweisung von Ryujinx Entwicklern, da sie das Lesen der Protokolle erschwert und die Leistung des Emulators verschlechtert.", + "DebugLogTooltip": "Ausgabe von Debug-Logs in der Konsole.\n\nVerwende diese Option nur auf ausdrückliche Anweisung von Kenji-NX Entwicklern, da sie das Lesen der Protokolle erschwert und die Leistung des Emulators verschlechtert.", "LoadApplicationFileTooltip": "Öffnet die Dateiauswahl um Datei zu laden, welche mit der Switch kompatibel ist", "LoadApplicationFolderTooltip": "Öffnet die Dateiauswahl um ein Spiel zu laden, welches mit der Switch kompatibel ist", - "OpenRyujinxFolderTooltip": "Öffnet den Ordner, der das Ryujinx Dateisystem enthält", + "OpenRyujinxFolderTooltip": "Öffnet den Ordner, der das Kenji-NX Dateisystem enthält", "OpenRyujinxLogsTooltip": "Öffnet den Ordner, in welchem die Logs gespeichert werden", - "ExitTooltip": "Beendet Ryujinx", + "ExitTooltip": "Beendet Kenji-NX", "OpenSettingsTooltip": "Öffnet das Einstellungsfenster", "OpenProfileManagerTooltip": "Öffnet das Profilverwaltungsfenster", "StopEmulationTooltip": "Beendet die Emulation des derzeitigen Spiels und kehrt zu der Spielauswahl zurück", - "CheckUpdatesTooltip": "Sucht nach Updates für Ryujinx", - "OpenAboutTooltip": "Öffnet das 'Über Ryujinx'-Fenster", + "CheckUpdatesTooltip": "Sucht nach Updates für Kenji-NX", + "OpenAboutTooltip": "Öffnet das 'Über Kenji-NX'-Fenster", "GridSize": "Rastergröße", "GridSizeTooltip": "Ändert die Größe der Rasterelemente", "SettingsTabSystemSystemLanguageBrazilianPortuguese": "Brasilianisches Portugiesisch", @@ -639,13 +639,13 @@ "SettingsTabSystemAudioVolume": "Lautstärke: ", "AudioVolumeTooltip": "Ändert die Lautstärke", "SettingsTabSystemEnableInternetAccess": "Gast-Internet-Zugang/LAN Modus", - "EnableInternetAccessTooltip": "Erlaubt es der emulierten Anwendung sich mit dem Internet zu verbinden.\n\nSpiele die den LAN-Modus unterstützen, ermöglichen es Ryujinx sich sowohl mit anderen Ryujinx-Systemen, als auch mit offiziellen Nintendo Switch Konsolen zu verbinden. Allerdings nur, wenn diese Option aktiviert ist und die Systeme mit demselben lokalen Netzwerk verbunden sind.\n\nDies erlaubt KEINE Verbindung zu Nintendo-Servern. Kann bei bestimmten Spielen die versuchen sich mit dem Internet zu verbinden zum Absturz führen.\n\nIm Zweifelsfall AUS lassen", + "EnableInternetAccessTooltip": "Erlaubt es der emulierten Anwendung sich mit dem Internet zu verbinden.\n\nSpiele die den LAN-Modus unterstützen, ermöglichen es Kenji-NX sich sowohl mit anderen Kenji-NX-Systemen, als auch mit offiziellen Nintendo Switch Konsolen zu verbinden. Allerdings nur, wenn diese Option aktiviert ist und die Systeme mit demselben lokalen Netzwerk verbunden sind.\n\nDies erlaubt KEINE Verbindung zu Nintendo-Servern. Kann bei bestimmten Spielen die versuchen sich mit dem Internet zu verbinden zum Absturz führen.\n\nIm Zweifelsfall AUS lassen", "GameListContextMenuManageCheatToolTip": "Öffnet den Cheat-Manager", "GameListContextMenuManageCheat": "Cheats verwalten", "GameListContextMenuManageModToolTip": "Mods verwalten", "GameListContextMenuManageMod": "Mods verwalten", "ControllerSettingsStickRange": "Bereich:", - "DialogStopEmulationTitle": "Ryujinx - Beende Emulation", + "DialogStopEmulationTitle": "Kenji-NX - Beende Emulation", "DialogStopEmulationMessage": "Emulation wirklich beenden?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "Audio", @@ -653,7 +653,7 @@ "SettingsTabNetworkConnection": "Netwerkverbindung", "SettingsTabCpuCache": "CPU-Cache", "SettingsTabCpuMemory": "CPU-Speicher", - "DialogUpdaterFlatpakNotSupportedMessage": "Bitte aktualisiere Ryujinx über FlatHub", + "DialogUpdaterFlatpakNotSupportedMessage": "Bitte aktualisiere Kenji-NX über FlatHub", "UpdaterDisabledWarningTitle": "Updater deaktiviert!", "ControllerSettingsRotate90": "Um 90° rotieren", "IconSize": "Cover Größe", @@ -666,17 +666,17 @@ "UserErrorApplicationNotFound": "Anwendung nicht gefunden", "UserErrorUnknown": "Unbekannter Fehler", "UserErrorUndefined": "Undefinierter Fehler", - "UserErrorNoKeysDescription": "Ryujinx konnte deine 'prod.keys' Datei nicht finden", - "UserErrorNoFirmwareDescription": "Ryujinx konnte keine installierte Firmware finden!", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx konnte die zu verfügung gestellte Firmware nicht analysieren. Ein möglicher Grund dafür sind veraltete keys.", - "UserErrorApplicationNotFoundDescription": "Ryujinx konnte keine valide Anwendung an dem gegeben Pfad finden.", + "UserErrorNoKeysDescription": "Kenji-NX konnte deine 'prod.keys' Datei nicht finden", + "UserErrorNoFirmwareDescription": "Kenji-NX konnte keine installierte Firmware finden!", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX konnte die zu verfügung gestellte Firmware nicht analysieren. Ein möglicher Grund dafür sind veraltete keys.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX konnte keine valide Anwendung an dem gegeben Pfad finden.", "UserErrorUnknownDescription": "Ein unbekannter Fehler ist aufgetreten!", "UserErrorUndefinedDescription": "Ein undefinierter Fehler ist aufgetreten! Dies sollte nicht passieren. Bitte kontaktiere einen Entwickler!", "OpenSetupGuideMessage": "Öffne den 'Setup Guide'", "NoUpdate": "Kein Update", "TitleUpdateVersionLabel": "Version {0} - {1}", - "RyujinxInfo": "Ryujinx - Info", - "RyujinxConfirm": "Ryujinx - Bestätigung", + "RyujinxInfo": "Kenji-NX - Info", + "RyujinxConfirm": "Kenji-NX - Bestätigung", "FileDialogAllTypes": "Alle Typen", "Never": "Niemals", "SwkbdMinCharacters": "Muss mindestens {0} Zeichen lang sein", @@ -710,7 +710,7 @@ "OpenFileDialogTitle": "Wähle eine unterstützte Datei", "OpenFolderDialogTitle": "Wähle einen Ordner mit einem entpackten Spiel", "AllSupportedFormats": "Alle unterstützten Formate", - "RyujinxUpdater": "Ryujinx - Updater", + "RyujinxUpdater": "Kenji-NX - Updater", "SettingsTabHotkeys": "Tastatur-Hotkeys", "SettingsTabHotkeysHotkeys": "Tastatur-Hotkeys", "SettingsTabHotkeysToggleVsyncHotkey": "VSync:", @@ -758,10 +758,10 @@ "SettingsEnableTextureRecompressionTooltip": "Komprimiert ASTC-Texturen, um die VRAM-Nutzung zu reduzieren.\n\nZu den Spielen, die dieses Texturformat verwenden, gehören Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder und The Legend of Zelda: Tears of the Kingdom.\n\nGrafikkarten mit 4GiB VRAM oder weniger werden beim Ausführen dieser Spiele wahrscheinlich irgendwann abstürzen.\n\nAktivieren Sie diese Option nur, wenn Ihnen bei den oben genannten Spielen der VRAM ausgeht. Lassen Sie es aus, wenn Sie unsicher sind.", "SettingsTabGraphicsPreferredGpu": "Bevorzugte GPU:", "SettingsTabGraphicsPreferredGpuTooltip": "Wähle die Grafikkarte aus, die mit dem Vulkan Grafik-Backend verwendet werden soll.\n\nDies hat keinen Einfluss auf die GPU die OpenGL verwendet.\n\nIm Zweifelsfall die als \"dGPU\" gekennzeichnete GPU auswählen. Diese Einstellung unberührt lassen, wenn keine zur Auswahl steht.", - "SettingsAppRequiredRestartMessage": "Ein Neustart von Ryujinx ist erforderlich", + "SettingsAppRequiredRestartMessage": "Ein Neustart von Kenji-NX ist erforderlich", "SettingsGpuBackendRestartMessage": "Das Grafik-Backend oder die Grafikkarteneinstellungen wurden geändert. Ein Neustart ist erforderlich um diese Einstellungen anzuwenden.", - "SettingsGpuBackendRestartSubMessage": "Ryujinx jetzt neu starten?", - "RyujinxUpdaterMessage": "Möchtest du Ryujinx auf die neueste Version aktualisieren?", + "SettingsGpuBackendRestartSubMessage": "Kenji-NX jetzt neu starten?", + "RyujinxUpdaterMessage": "Möchtest du Kenji-NX auf die neueste Version aktualisieren?", "SettingsTabHotkeysVolumeUpHotkey": "Lautstärke erhöhen:", "SettingsTabHotkeysVolumeDownHotkey": "Lautstärke verringern:", "SettingsEnableMacroHLE": "HLE Makros aktivieren", @@ -804,7 +804,7 @@ "AboutChangelogButtonTooltipMessage": "Klicke hier, um das Changelog für diese Version in Ihrem Standardbrowser zu öffnen.", "SettingsTabNetworkMultiplayer": "Mehrspieler", "MultiplayerMode": "Modus:", - "MultiplayerModeTooltip": "Ändert den LDN-Mehrspielermodus.\n\nLdnMitm ändert die lokale drahtlose/lokale Spielfunktionalität in Spielen so, dass sie wie ein LAN funktioniert und lokale, netzwerkgleiche Verbindungen mit anderen Ryujinx-Instanzen und gehackten Nintendo Switch-Konsolen ermöglicht, auf denen das ldn_mitm-Modul installiert ist.\n\nMultiplayer erfordert, dass alle Spieler die gleiche Spielversion verwenden (d.h. Super Smash Bros. Ultimate v13.0.1 kann sich nicht mit v13.0.0 verbinden).\n\nIm Zweifelsfall auf DISABLED lassen.", + "MultiplayerModeTooltip": "Ändert den LDN-Mehrspielermodus.\n\nLdnMitm ändert die lokale drahtlose/lokale Spielfunktionalität in Spielen so, dass sie wie ein LAN funktioniert und lokale, netzwerkgleiche Verbindungen mit anderen Kenji-NX-Instanzen und gehackten Nintendo Switch-Konsolen ermöglicht, auf denen das ldn_mitm-Modul installiert ist.\n\nMultiplayer erfordert, dass alle Spieler die gleiche Spielversion verwenden (d.h. Super Smash Bros. Ultimate v13.0.1 kann sich nicht mit v13.0.0 verbinden).\n\nIm Zweifelsfall auf DISABLED lassen.", "MultiplayerModeDisabled": "Deaktiviert", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Kenjinx/Assets/Locales/el_GR.json similarity index 92% rename from src/Ryujinx/Assets/Locales/el_GR.json rename to src/Kenjinx/Assets/Locales/el_GR.json index f1cf864ad..4812e7460 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Kenjinx/Assets/Locales/el_GR.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "Φόρτωση Απακετάριστου _Παιχνιδιού", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "Άνοιγμα Φακέλου Ryujinx", + "MenuBarFileOpenEmuFolder": "Άνοιγμα Φακέλου Kenji-NX", "MenuBarFileOpenLogsFolder": "Άνοιγμα Φακέλου Καταγραφής", "MenuBarFileExit": "_Έξοδος", "MenuBarOptions": "_Επιλογές", @@ -95,11 +95,11 @@ "StatusBarSystemVersion": "Έκδοση Συστήματος: {0}", "LinuxVmMaxMapCountDialogTitle": "Εντοπίστηκε χαμηλό όριο για αντιστοιχίσεις μνήμης", "LinuxVmMaxMapCountDialogTextPrimary": "Θα θέλατε να αυξήσετε την τιμή του vm.max_map_count σε {0}", - "LinuxVmMaxMapCountDialogTextSecondary": "Μερικά παιχνίδια μπορεί να προσπαθήσουν να δημιουργήσουν περισσότερες αντιστοιχίσεις μνήμης από αυτές που επιτρέπονται τώρα. Ο Ryujinx θα καταρρεύσει μόλις ξεπεραστεί αυτό το όριο.", + "LinuxVmMaxMapCountDialogTextSecondary": "Μερικά παιχνίδια μπορεί να προσπαθήσουν να δημιουργήσουν περισσότερες αντιστοιχίσεις μνήμης από αυτές που επιτρέπονται τώρα. Ο Kenji-NX θα καταρρεύσει μόλις ξεπεραστεί αυτό το όριο.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Ναι, μέχρι την επόμενη επανεκκίνηση", "LinuxVmMaxMapCountDialogButtonPersistent": "Ναι, μόνιμα", "LinuxVmMaxMapCountWarningTextPrimary": "Ο μέγιστος αριθμός αντιστοιχίσεων μνήμης είναι μικρότερος από τον συνιστώμενο.", - "LinuxVmMaxMapCountWarningTextSecondary": "Η τρέχουσα τιμή του vm.max_map_count ({0}) είναι χαμηλότερη από {1}. Ορισμένα παιχνίδια μπορεί να προσπαθήσουν να δημιουργήσουν περισσότερες αντιστοιχίσεις μνήμης από αυτές που επιτρέπονται τώρα. Ο Ryujinx θα συντριβεί μόλις ξεπεραστεί το όριο.\n\nΜπορεί να θέλετε είτε να αυξήσετε χειροκίνητα το όριο ή να εγκαταστήσετε το pkexec, το οποίο επιτρέπει Ryujinx να βοηθήσει με αυτό.", + "LinuxVmMaxMapCountWarningTextSecondary": "Η τρέχουσα τιμή του vm.max_map_count ({0}) είναι χαμηλότερη από {1}. Ορισμένα παιχνίδια μπορεί να προσπαθήσουν να δημιουργήσουν περισσότερες αντιστοιχίσεις μνήμης από αυτές που επιτρέπονται τώρα. Ο Kenji-NX θα συντριβεί μόλις ξεπεραστεί το όριο.\n\nΜπορεί να θέλετε είτε να αυξήσετε χειροκίνητα το όριο ή να εγκαταστήσετε το pkexec, το οποίο επιτρέπει Kenji-NX να βοηθήσει με αυτό.", "Settings": "Ρυθμίσεις", "SettingsTabGeneral": "Εμφάνιση", "SettingsTabGeneralGeneral": "Γενικά", @@ -428,42 +428,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Αδύναμος Πολλαπλασιαστής Δόνησης", "DialogMessageSaveNotAvailableMessage": "Δεν υπάρχουν αποθηκευμένα δεδομένα για το {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Θέλετε να αποθηκεύσετε δεδομένα για αυτό το παιχνίδι;", - "DialogConfirmationTitle": "Ryujinx - Επιβεβαίωση", - "DialogUpdaterTitle": "Ryujinx - Ενημερωτής", - "DialogErrorTitle": "Ryujinx - Σφάλμα", - "DialogWarningTitle": "Ryujinx - Προειδοποίηση", - "DialogExitTitle": "Ryujinx - Έξοδος", - "DialogErrorMessage": "Το Ryujinx αντιμετώπισε σφάλμα", - "DialogExitMessage": "Είστε βέβαιοι ότι θέλετε να κλείσετε το Ryujinx;", + "DialogConfirmationTitle": "Kenji-NX - Επιβεβαίωση", + "DialogUpdaterTitle": "Kenji-NX - Ενημερωτής", + "DialogErrorTitle": "Kenji-NX - Σφάλμα", + "DialogWarningTitle": "Kenji-NX - Προειδοποίηση", + "DialogExitTitle": "Kenji-NX - Έξοδος", + "DialogErrorMessage": "Το Kenji-NX αντιμετώπισε σφάλμα", + "DialogExitMessage": "Είστε βέβαιοι ότι θέλετε να κλείσετε το Kenji-NX;", "DialogExitSubMessage": "Όλα τα μη αποθηκευμένα δεδομένα θα χαθούν!", "DialogMessageCreateSaveErrorMessage": "Σφάλμα κατά τη δημιουργία των αποθηκευμένων δεδομένων: {0}", "DialogMessageFindSaveErrorMessage": "Σφάλμα κατά την εύρεση των αποθηκευμένων δεδομένων: {0}", "FolderDialogExtractTitle": "Επιλέξτε τον φάκελο στον οποίο θέλετε να εξαγάγετε", "DialogNcaExtractionMessage": "Εξαγωγή ενότητας {0} από {1}...", - "DialogNcaExtractionTitle": "Ryujinx - NCA Εξαγωγέας Τμημάτων", + "DialogNcaExtractionTitle": "Kenji-NX - NCA Εξαγωγέας Τμημάτων", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Αποτυχία εξαγωγής. Η κύρια NCA δεν υπήρχε στο επιλεγμένο αρχείο.", "DialogNcaExtractionCheckLogErrorMessage": "Αποτυχία εξαγωγής. Διαβάστε το αρχείο καταγραφής για περισσότερες πληροφορίες.", "DialogNcaExtractionSuccessMessage": "Η εξαγωγή ολοκληρώθηκε με επιτυχία.", - "DialogUpdaterConvertFailedMessage": "Αποτυχία μετατροπής της τρέχουσας έκδοσης Ryujinx.", + "DialogUpdaterConvertFailedMessage": "Αποτυχία μετατροπής της τρέχουσας έκδοσης Kenji-NX.", "DialogUpdaterCancelUpdateMessage": "Ακύρωση Ενημέρωσης!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Χρησιμοποιείτε ήδη την πιο ενημερωμένη έκδοση του Ryujinx!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Χρησιμοποιείτε ήδη την πιο ενημερωμένη έκδοση του Kenji-NX!", "DialogUpdaterFailedToGetVersionMessage": "Προέκυψε ένα σφάλμα στη λήψη πληροφοριών έκδοσης από τα GitHub Releases. Αυτό δύναται να συμβεί αν μία έκδοση χτίζεται αυτή τη στιγμή στα GitHub Actions. Παρακαλούμε προσπαθήστε αργότερα.", - "DialogUpdaterConvertFailedGithubMessage": "Αποτυχία μετατροπής της ληφθείσας έκδοσης Ryujinx από την έκδοση GitHub.", + "DialogUpdaterConvertFailedGithubMessage": "Αποτυχία μετατροπής της ληφθείσας έκδοσης Kenji-NX από την έκδοση GitHub.", "DialogUpdaterDownloadingMessage": "Λήψη Ενημέρωσης...", "DialogUpdaterExtractionMessage": "Εξαγωγή Ενημέρωσης...", "DialogUpdaterRenamingMessage": "Μετονομασία Ενημέρωσης...", "DialogUpdaterAddingFilesMessage": "Προσθήκη Νέας Ενημέρωσης...", "DialogUpdaterCompleteMessage": "Η Ενημέρωση Ολοκληρώθηκε!", - "DialogUpdaterRestartMessage": "Θέλετε να επανεκκινήσετε το Ryujinx τώρα;", + "DialogUpdaterRestartMessage": "Θέλετε να επανεκκινήσετε το Kenji-NX τώρα;", "DialogUpdaterNoInternetMessage": "Δεν είστε συνδεδεμένοι στο Διαδίκτυο!", "DialogUpdaterNoInternetSubMessage": "Επαληθεύστε ότι έχετε σύνδεση στο Διαδίκτυο που λειτουργεί!", - "DialogUpdaterDirtyBuildMessage": "Δεν μπορείτε να ενημερώσετε μία Πρόχειρη Έκδοση του Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Κάντε λήψη του Ryujinx στη διεύθυνση https://ryujinx.org/ εάν αναζητάτε μία υποστηριζόμενη έκδοση.", + "DialogUpdaterDirtyBuildMessage": "Δεν μπορείτε να ενημερώσετε μία Πρόχειρη Έκδοση του Kenji-NX!", + "DialogUpdaterDirtyBuildSubMessage": "Κάντε λήψη του Kenji-NX στη διεύθυνση https://ryujinx.org/ εάν αναζητάτε μία υποστηριζόμενη έκδοση.", "DialogRestartRequiredMessage": "Απαιτείται Επανεκκίνηση", "DialogThemeRestartMessage": "Το θέμα έχει αποθηκευτεί. Απαιτείται επανεκκίνηση για την εφαρμογή του θέματος.", "DialogThemeRestartSubMessage": "Θέλετε να κάνετε επανεκκίνηση", "DialogFirmwareInstallEmbeddedMessage": "Θα θέλατε να εγκαταστήσετε το Firmware που είναι ενσωματωμένο σε αυτό το παιχνίδι; (Firmware {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Ryujinx was able to install firmware {0} from the provided game.\nThe emulator will now start.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Kenji-NX was able to install firmware {0} from the provided game.\nThe emulator will now start.", "DialogFirmwareNoFirmwareInstalledMessage": "Δεν έχει εγκατασταθεί Firmware", "DialogFirmwareInstalledMessage": "Το Firmware {0} εγκαταστάθηκε", "DialogInstallFileTypesSuccessMessage": "Επιτυχής εγκατάσταση τύπων αρχείων!", @@ -477,7 +477,7 @@ "DialogErrorAppletErrorExceptionMessage": "Σφάλμα εμφάνισης του διαλόγου ErrorApplet: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nΓια πληροφορίες σχετικά με τον τρόπο διόρθωσης του σφάλματος, ακολουθήστε τον Οδηγό Εγκατάστασης.", - "DialogUserErrorDialogTitle": "Σφάλμα Ryujinx ({0})", + "DialogUserErrorDialogTitle": "Σφάλμα Kenji-NX ({0})", "DialogAmiiboApiTitle": "API για Amiibo.", "DialogAmiiboApiFailFetchMessage": "Παρουσιάστηκε σφάλμα κατά την ανάκτηση πληροφοριών από το API.", "DialogAmiiboApiConnectErrorMessage": "Δεν είναι δυνατή η σύνδεση με τον διακομιστή Amiibo API. Η υπηρεσία μπορεί να είναι εκτός λειτουργίας ή μπορεί να χρειαστεί να επαληθεύσετε ότι έχετε ενεργή σύνδεσή στο Διαδίκτυο.", @@ -491,7 +491,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Πρόκειται να διαγράψετε την προσωρινή μνήμη Shader για :\n\n{0}\n\nΕίστε βέβαιοι ότι θέλετε να συνεχίσετε;", "DialogShaderDeletionErrorMessage": "Σφάλμα κατά την εκκαθάριση προσωρινής μνήμης Shader στο {0}: {1}", - "DialogRyujinxErrorMessage": "Το Ryujinx αντιμετώπισε σφάλμα", + "DialogRyujinxErrorMessage": "Το Kenji-NX αντιμετώπισε σφάλμα", "DialogInvalidTitleIdErrorMessage": "Σφάλμα UI: Το επιλεγμένο παιχνίδι δεν έχει έγκυρο αναγνωριστικό τίτλου", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "Δεν βρέθηκε έγκυρο Firmware συστήματος στο {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Εγκατάσταση Firmware {0}", @@ -527,7 +527,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Σταματήστε την εξομοίωση ή κλείστε τον εξομοιωτή πριν ξεκινήσετε ένα άλλο παιχνίδι.", "DialogUpdateAddUpdateErrorMessage": "Το αρχείο δεν περιέχει ενημέρωση για τον επιλεγμένο τίτλο!", "DialogSettingsBackendThreadingWarningTitle": "Προειδοποίηση - Backend Threading", - "DialogSettingsBackendThreadingWarningMessage": "Το Ryujinx πρέπει να επανεκκινηθεί αφού αλλάξει αυτή η επιλογή για να εφαρμοστεί πλήρως. Ανάλογα με την πλατφόρμα σας, μπορεί να χρειαστεί να απενεργοποιήσετε με μη αυτόματο τρόπο το multithreading του ίδιου του προγράμματος οδήγησης όταν χρησιμοποιείτε το Ryujinx.", + "DialogSettingsBackendThreadingWarningMessage": "Το Kenji-NX πρέπει να επανεκκινηθεί αφού αλλάξει αυτή η επιλογή για να εφαρμοστεί πλήρως. Ανάλογα με την πλατφόρμα σας, μπορεί να χρειαστεί να απενεργοποιήσετε με μη αυτόματο τρόπο το multithreading του ίδιου του προγράμματος οδήγησης όταν χρησιμοποιείτε το Kenji-NX.", "DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?", "DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?", "SettingsTabGraphicsFeaturesOptions": "Χαρακτηριστικά", @@ -540,15 +540,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "Το όνομα αρχείου περιέχει μη έγκυρους χαρακτήρες. Παρακαλώ προσπαθήστε ξανά.", "MenuBarOptionsPauseEmulation": "Παύση", "MenuBarOptionsResumeEmulation": "Συνέχιση", - "AboutUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τον ιστότοπο Ryujinx στο προεπιλεγμένο πρόγραμμα περιήγησης.", - "AboutDisclaimerMessage": "Το Ryujinx δεν είναι συνδεδεμένο με τη Nintendo™,\nούτε με κανέναν από τους συνεργάτες της, με οποιονδήποτε τρόπο.", + "AboutUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τον ιστότοπο Kenji-NX στο προεπιλεγμένο πρόγραμμα περιήγησης.", + "AboutDisclaimerMessage": "Το Kenji-NX δεν είναι συνδεδεμένο με τη Nintendo™,\nούτε με κανέναν από τους συνεργάτες της, με οποιονδήποτε τρόπο.", "AboutAmiiboDisclaimerMessage": "Το AmiiboAPI (www.amiiboapi.com) χρησιμοποιείται\nστην προσομοίωση Amiibo.", - "AboutPatreonUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Ryujinx Patreon στο προεπιλεγμένο πρόγραμμα περιήγησης.", - "AboutGithubUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Ryujinx GitHub στο προεπιλεγμένο πρόγραμμα περιήγησης.", - "AboutDiscordUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε μία πρόσκληση στον διακομιστή Ryujinx Discord στο προεπιλεγμένο πρόγραμμα περιήγησης.", - "AboutTwitterUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Ryujinx Twitter στο προεπιλεγμένο πρόγραμμα περιήγησης.", + "AboutPatreonUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Kenji-NX Patreon στο προεπιλεγμένο πρόγραμμα περιήγησης.", + "AboutGithubUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Kenji-NX GitHub στο προεπιλεγμένο πρόγραμμα περιήγησης.", + "AboutDiscordUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε μία πρόσκληση στον διακομιστή Kenji-NX Discord στο προεπιλεγμένο πρόγραμμα περιήγησης.", + "AboutTwitterUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Kenji-NX Twitter στο προεπιλεγμένο πρόγραμμα περιήγησης.", "AboutRyujinxAboutTitle": "Σχετικά με:", - "AboutRyujinxAboutContent": "Το Ryujinx είναι ένας εξομοιωτής για το Nintendo Switch™.\n\nΟι προγραμματιστές που ενδιαφέρονται να συνεισφέρουν μπορούν να μάθουν περισσότερα στον GitHub μας.", + "AboutRyujinxAboutContent": "Το Kenji-NX είναι ένας εξομοιωτής για το Nintendo Switch™.\n\nΟι προγραμματιστές που ενδιαφέρονται να συνεισφέρουν μπορούν να μάθουν περισσότερα στον GitHub μας.", "AboutRyujinxMaintainersTitle": "Συντηρείται από:", "AboutRyujinxFormerMaintainersTitle": "Προηγουμένως διατηρείται από:", "AboutRyujinxMaintainersContentTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Συνεισφέροντες στο προεπιλεγμένο πρόγραμμα περιήγησης.", @@ -597,12 +597,12 @@ "MemoryManagerTooltip": "Αλλάξτε τον τρόπο αντιστοίχισης και πρόσβασης στη μνήμη επισκέπτη. Επηρεάζει σε μεγάλο βαθμό την απόδοση της προσομοίωσης της CPU.", "MemoryManagerSoftwareTooltip": "Χρησιμοποιήστε έναν πίνακα σελίδων λογισμικού για τη μετάφραση διευθύνσεων. Υψηλότερη ακρίβεια αλλά πιο αργή απόδοση.", "MemoryManagerHostTooltip": "Απευθείας αντιστοίχιση της μνήμης στον χώρο διευθύνσεων υπολογιστή υποδοχής. Πολύ πιο γρήγορη μεταγλώττιση και εκτέλεση JIT.", - "MemoryManagerUnsafeTooltip": "Απευθείας χαρτογράφηση της μνήμης, αλλά μην καλύπτετε τη διεύθυνση εντός του χώρου διευθύνσεων επισκέπτη πριν από την πρόσβαση. Πιο γρήγορα, αλλά με κόστος ασφάλειας. Η εφαρμογή μπορεί να έχει πρόσβαση στη μνήμη από οπουδήποτε στο Ryujinx, επομένως εκτελείτε μόνο προγράμματα που εμπιστεύεστε με αυτήν τη λειτουργία.", + "MemoryManagerUnsafeTooltip": "Απευθείας χαρτογράφηση της μνήμης, αλλά μην καλύπτετε τη διεύθυνση εντός του χώρου διευθύνσεων επισκέπτη πριν από την πρόσβαση. Πιο γρήγορα, αλλά με κόστος ασφάλειας. Η εφαρμογή μπορεί να έχει πρόσβαση στη μνήμη από οπουδήποτε στο Kenji-NX, επομένως εκτελείτε μόνο προγράμματα που εμπιστεύεστε με αυτήν τη λειτουργία.", "UseHypervisorTooltip": "Χρησιμοποιήστε Hypervisor αντί για JIT. Βελτιώνει σημαντικά την απόδοση όταν διατίθεται, αλλά μπορεί να είναι ασταθής στην τρέχουσα κατάστασή του.", "DRamTooltip": "Επεκτείνει την ποσότητα της μνήμης στο εξομοιούμενο σύστημα από 4 GiB σε 6 GiB", "IgnoreMissingServicesTooltip": "Ενεργοποίηση ή απενεργοποίηση της αγνοώησης για υπηρεσίες που λείπουν", "GraphicsBackendThreadingTooltip": "Ενεργοποίηση Πολυνηματικής Επεξεργασίας Γραφικών", - "GalThreadingTooltip": "Εκτελεί εντολές γραφικών σε ένα δεύτερο νήμα. Επιτρέπει την πολυνηματική μεταγλώττιση Shader σε χρόνο εκτέλεσης, μειώνει το τρεμόπαιγμα και βελτιώνει την απόδοση των προγραμμάτων οδήγησης χωρίς τη δική τους υποστήριξη πολλαπλών νημάτων. Ποικίλες κορυφαίες επιδόσεις σε προγράμματα οδήγησης με multithreading. Μπορεί να χρειαστεί επανεκκίνηση του Ryujinx για να απενεργοποιήσετε σωστά την ενσωματωμένη λειτουργία πολλαπλών νημάτων του προγράμματος οδήγησης ή ίσως χρειαστεί να το κάνετε χειροκίνητα για να έχετε την καλύτερη απόδοση.", + "GalThreadingTooltip": "Εκτελεί εντολές γραφικών σε ένα δεύτερο νήμα. Επιτρέπει την πολυνηματική μεταγλώττιση Shader σε χρόνο εκτέλεσης, μειώνει το τρεμόπαιγμα και βελτιώνει την απόδοση των προγραμμάτων οδήγησης χωρίς τη δική τους υποστήριξη πολλαπλών νημάτων. Ποικίλες κορυφαίες επιδόσεις σε προγράμματα οδήγησης με multithreading. Μπορεί να χρειαστεί επανεκκίνηση του Kenji-NX για να απενεργοποιήσετε σωστά την ενσωματωμένη λειτουργία πολλαπλών νημάτων του προγράμματος οδήγησης ή ίσως χρειαστεί να το κάνετε χειροκίνητα για να έχετε την καλύτερη απόδοση.", "ShaderCacheToggleTooltip": "Ενεργοποιεί ή απενεργοποιεί την Προσωρινή Μνήμη Shader", "ResolutionScaleTooltip": "Multiplies the game's rendering resolution.\n\nA few games may not work with this and look pixelated even when the resolution is increased; for those games, you may need to find mods that remove anti-aliasing or that increase their internal rendering resolution. For using the latter, you'll likely want to select Native.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nKeep in mind 4x is overkill for virtually any setup.", "ResolutionScaleEntryTooltip": "Κλίμακα ανάλυσης κινητής υποδιαστολής, όπως 1,5. Οι μη αναπόσπαστες τιμές είναι πιθανό να προκαλέσουν προβλήματα ή σφάλματα.", @@ -623,13 +623,13 @@ "DebugLogTooltip": "Ενεργοποιεί την εκτύπωση μηνυμάτων αρχείου καταγραφής εντοπισμού σφαλμάτων", "LoadApplicationFileTooltip": "Ανοίξτε έναν επιλογέα αρχείων για να επιλέξετε ένα αρχείο συμβατό με το Switch για φόρτωση", "LoadApplicationFolderTooltip": "Ανοίξτε έναν επιλογέα αρχείων για να επιλέξετε μία μη συσκευασμένη εφαρμογή, συμβατή με το Switch για φόρτωση", - "OpenRyujinxFolderTooltip": "Ανοίξτε το φάκελο συστήματος αρχείων Ryujinx", + "OpenRyujinxFolderTooltip": "Ανοίξτε το φάκελο συστήματος αρχείων Kenji-NX", "OpenRyujinxLogsTooltip": "Ανοίξτε το φάκελο στον οποίο διατηρούνται τα αρχεία καταγραφής", - "ExitTooltip": "Έξοδος από το Ryujinx", + "ExitTooltip": "Έξοδος από το Kenji-NX", "OpenSettingsTooltip": "Ανοίξτε το παράθυρο Ρυθμίσεων", "OpenProfileManagerTooltip": "Ανοίξτε το παράθυρο Διαχείρισης Προφίλ Χρήστη", "StopEmulationTooltip": "Σταματήστε την εξομοίωση του τρέχοντος παιχνιδιού και επιστρέψτε στην επιλογή παιχνιδιού", - "CheckUpdatesTooltip": "Ελέγξτε για ενημερώσεις του Ryujinx", + "CheckUpdatesTooltip": "Ελέγξτε για ενημερώσεις του Kenji-NX", "OpenAboutTooltip": "Ανοίξτε το Παράθυρο Σχετικά", "GridSize": "Μέγεθος Πλέγματος", "GridSizeTooltip": "Αλλαγή μεγέθους στοιχείων πλέγματος", @@ -644,7 +644,7 @@ "GameListContextMenuManageModToolTip": "Manage Mods", "GameListContextMenuManageMod": "Manage Mods", "ControllerSettingsStickRange": "Εύρος:", - "DialogStopEmulationTitle": "Ryujinx - Διακοπή εξομοίωσης", + "DialogStopEmulationTitle": "Kenji-NX - Διακοπή εξομοίωσης", "DialogStopEmulationMessage": "Είστε βέβαιοι ότι θέλετε να σταματήσετε την εξομοίωση;", "SettingsTabCpu": "Επεξεργαστής", "SettingsTabAudio": "Ήχος", @@ -652,7 +652,7 @@ "SettingsTabNetworkConnection": "Σύνδεση δικτύου", "SettingsTabCpuCache": "Προσωρινή Μνήμη CPU", "SettingsTabCpuMemory": "Μνήμη CPU", - "DialogUpdaterFlatpakNotSupportedMessage": "Παρακαλούμε ενημερώστε το Ryujinx μέσω FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Παρακαλούμε ενημερώστε το Kenji-NX μέσω FlatHub.", "UpdaterDisabledWarningTitle": "Ο Διαχειριστής Ενημερώσεων Είναι Απενεργοποιημένος!", "ControllerSettingsRotate90": "Περιστροφή 90° Δεξιόστροφα", "IconSize": "Μέγεθος Εικονιδίου", @@ -665,17 +665,17 @@ "UserErrorApplicationNotFound": "Η εφαρμογή δε βρέθηκε", "UserErrorUnknown": "Άγνωστο σφάλμα", "UserErrorUndefined": "Αόριστο σφάλμα", - "UserErrorNoKeysDescription": "Το Ryujinx δεν κατάφερε να εντοπίσει το αρχείο 'prod.keys'", - "UserErrorNoFirmwareDescription": "Το Ryujinx δεν κατάφερε να εντοπίσει κανένα εγκατεστημένο firmware", - "UserErrorFirmwareParsingFailedDescription": "Το Ryujinx δεν κατάφερε να αναλύσει το συγκεκριμένο firmware. Αυτό συνήθως οφείλετε σε ξεπερασμένα/παλιά κλειδιά.", - "UserErrorApplicationNotFoundDescription": "Το Ryujinx δεν κατάφερε να εντοπίσει έγκυρη εφαρμογή στη συγκεκριμένη διαδρομή.", + "UserErrorNoKeysDescription": "Το Kenji-NX δεν κατάφερε να εντοπίσει το αρχείο 'prod.keys'", + "UserErrorNoFirmwareDescription": "Το Kenji-NX δεν κατάφερε να εντοπίσει κανένα εγκατεστημένο firmware", + "UserErrorFirmwareParsingFailedDescription": "Το Kenji-NX δεν κατάφερε να αναλύσει το συγκεκριμένο firmware. Αυτό συνήθως οφείλετε σε ξεπερασμένα/παλιά κλειδιά.", + "UserErrorApplicationNotFoundDescription": "Το Kenji-NX δεν κατάφερε να εντοπίσει έγκυρη εφαρμογή στη συγκεκριμένη διαδρομή.", "UserErrorUnknownDescription": "Παρουσιάστηκε άγνωστο σφάλμα.", "UserErrorUndefinedDescription": "Παρουσιάστηκε ένα άγνωστο σφάλμα! Αυτό δεν πρέπει να συμβεί, παρακαλώ επικοινωνήστε με έναν προγραμματιστή!", "OpenSetupGuideMessage": "Ανοίξτε τον Οδηγό Εγκατάστασης.", "NoUpdate": "Καμία Eνημέρωση", "TitleUpdateVersionLabel": "Version {0} - {1}", - "RyujinxInfo": "Ryujinx - Πληροφορίες", - "RyujinxConfirm": "Ryujinx - Επιβεβαίωση", + "RyujinxInfo": "Kenji-NX - Πληροφορίες", + "RyujinxConfirm": "Kenji-NX - Επιβεβαίωση", "FileDialogAllTypes": "Όλοι οι τύποι", "Never": "Ποτέ", "SwkbdMinCharacters": "Πρέπει να έχει μήκος τουλάχιστον {0} χαρακτήρες", @@ -709,7 +709,7 @@ "OpenFileDialogTitle": "Επιλέξτε ένα υποστηριζόμενο αρχείο για άνοιγμα", "OpenFolderDialogTitle": "Επιλέξτε ένα φάκελο με ένα αποσυμπιεσμένο παιχνίδι", "AllSupportedFormats": "Όλες Οι Υποστηριζόμενες Μορφές", - "RyujinxUpdater": "Ryujinx Ενημερωτής", + "RyujinxUpdater": "Kenji-NX Ενημερωτής", "SettingsTabHotkeys": "Συντομεύσεις Πληκτρολογίου", "SettingsTabHotkeysHotkeys": "Συντομεύσεις Πληκτρολογίου", "SettingsTabHotkeysToggleVsyncHotkey": "Εναλλαγή VSync:", @@ -757,10 +757,10 @@ "SettingsEnableTextureRecompressionTooltip": "Compresses ASTC textures in order to reduce VRAM usage.\n\nGames using this texture format include Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder and The Legend of Zelda: Tears of the Kingdom.\n\nGraphics cards with 4GiB VRAM or less will likely crash at some point while running these games.\n\nEnable only if you're running out of VRAM on the aforementioned games. Leave OFF if unsure.", "SettingsTabGraphicsPreferredGpu": "Προτιμώμενη GPU", "SettingsTabGraphicsPreferredGpuTooltip": "Επιλέξτε την κάρτα γραφικών η οποία θα χρησιμοποιηθεί από το Vulkan.\n\nΔεν επηρεάζει το OpenGL.\n\nΔιαλέξτε την GPU που διαθέτει την υπόδειξη \"dGPU\" αν δεν είστε βέβαιοι. Αν δεν υπάρχει κάποιαν, το πειράξετε", - "SettingsAppRequiredRestartMessage": "Απαιτείται Επανεκκίνηση Του Ryujinx", - "SettingsGpuBackendRestartMessage": "Οι ρυθμίσεις GPU έχουν αλλαχτεί. Θα χρειαστεί επανεκκίνηση του Ryujinx για να τεθούν σε ισχύ.", + "SettingsAppRequiredRestartMessage": "Απαιτείται Επανεκκίνηση Του Kenji-NX", + "SettingsGpuBackendRestartMessage": "Οι ρυθμίσεις GPU έχουν αλλαχτεί. Θα χρειαστεί επανεκκίνηση του Kenji-NX για να τεθούν σε ισχύ.", "SettingsGpuBackendRestartSubMessage": "Θέλετε να κάνετε επανεκκίνηση τώρα;", - "RyujinxUpdaterMessage": "Θέλετε να ενημερώσετε το Ryujinx στην πιο πρόσφατη έκδοση:", + "RyujinxUpdaterMessage": "Θέλετε να ενημερώσετε το Kenji-NX στην πιο πρόσφατη έκδοση:", "SettingsTabHotkeysVolumeUpHotkey": "Αύξηση Έντασης:", "SettingsTabHotkeysVolumeDownHotkey": "Μείωση Έντασης:", "SettingsEnableMacroHLE": "Ενεργοποίηση του Macro HLE", @@ -803,7 +803,7 @@ "AboutChangelogButtonTooltipMessage": "Κάντε κλικ για να ανοίξετε το αρχείο αλλαγών για αυτήν την έκδοση στο προεπιλεγμένο πρόγραμμα περιήγησης σας.", "SettingsTabNetworkMultiplayer": "Πολλαπλοί παίκτες", "MultiplayerMode": "Λειτουργία:", - "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", + "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Kenji-NX instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Disabled", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Kenjinx/Assets/Locales/en_US.json similarity index 93% rename from src/Ryujinx/Assets/Locales/en_US.json rename to src/Kenjinx/Assets/Locales/en_US.json index fd38981f8..b52646ab5 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Kenjinx/Assets/Locales/en_US.json @@ -14,7 +14,7 @@ "MenuBarFileOpenUnpacked": "Load _Unpacked Game", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "Open Ryujinx Folder", + "MenuBarFileOpenEmuFolder": "Open Kenji-NX Folder", "MenuBarFileOpenScreenshotsFolder": "Open Screenshots Folder", "MenuBarFileOpenLogsFolder": "Open Logs Folder", "MenuBarFileExit": "_Exit", @@ -102,11 +102,11 @@ "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Low limit for memory mappings detected", "LinuxVmMaxMapCountDialogTextPrimary": "Would you like to increase the value of vm.max_map_count to {0}", - "LinuxVmMaxMapCountDialogTextSecondary": "Some games might try to create more memory mappings than currently allowed. Ryujinx will crash as soon as this limit gets exceeded.", + "LinuxVmMaxMapCountDialogTextSecondary": "Some games might try to create more memory mappings than currently allowed. Kenji-NX will crash as soon as this limit gets exceeded.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Yes, until the next restart", "LinuxVmMaxMapCountDialogButtonPersistent": "Yes, permanently", "LinuxVmMaxMapCountWarningTextPrimary": "Max amount of memory mappings is lower than recommended.", - "LinuxVmMaxMapCountWarningTextSecondary": "The current value of vm.max_map_count ({0}) is lower than {1}. Some games might try to create more memory mappings than currently allowed. Ryujinx will crash as soon as this limit gets exceeded.\n\nYou might want to either manually increase the limit or install pkexec, which allows Ryujinx to assist with that.", + "LinuxVmMaxMapCountWarningTextSecondary": "The current value of vm.max_map_count ({0}) is lower than {1}. Some games might try to create more memory mappings than currently allowed. Kenji-NX will crash as soon as this limit gets exceeded.\n\nYou might want to either manually increase the limit or install pkexec, which allows Kenji-NX to assist with that.", "Settings": "Settings", "SettingsTabGeneral": "User Interface", "SettingsTabGeneralGeneral": "General", @@ -455,42 +455,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Weak Rumble Multiplier", "DialogMessageSaveNotAvailableMessage": "There is no savedata for {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Would you like to create savedata for this game?", - "DialogConfirmationTitle": "Ryujinx - Confirmation", - "DialogUpdaterTitle": "Ryujinx - Updater", - "DialogErrorTitle": "Ryujinx - Error", - "DialogWarningTitle": "Ryujinx - Warning", - "DialogExitTitle": "Ryujinx - Exit", - "DialogErrorMessage": "Ryujinx has encountered an error", - "DialogExitMessage": "Are you sure you want to close Ryujinx?", + "DialogConfirmationTitle": "Kenji-NX - Confirmation", + "DialogUpdaterTitle": "Kenji-NX - Updater", + "DialogErrorTitle": "Kenji-NX - Error", + "DialogWarningTitle": "Kenji-NX - Warning", + "DialogExitTitle": "Kenji-NX - Exit", + "DialogErrorMessage": "Kenji-NX has encountered an error", + "DialogExitMessage": "Are you sure you want to close Kenji-NX?", "DialogExitSubMessage": "All unsaved data will be lost!", "DialogMessageCreateSaveErrorMessage": "There was an error creating the specified savedata: {0}", "DialogMessageFindSaveErrorMessage": "There was an error finding the specified savedata: {0}", "FolderDialogExtractTitle": "Choose the folder to extract into", "DialogNcaExtractionMessage": "Extracting {0} section from {1}...", - "DialogNcaExtractionTitle": "Ryujinx - NCA Section Extractor", + "DialogNcaExtractionTitle": "Kenji-NX - NCA Section Extractor", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraction failure. The main NCA was not present in the selected file.", "DialogNcaExtractionCheckLogErrorMessage": "Extraction failure. Read the log file for further information.", "DialogNcaExtractionSuccessMessage": "Extraction completed successfully.", - "DialogUpdaterConvertFailedMessage": "Failed to convert the current Ryujinx version.", + "DialogUpdaterConvertFailedMessage": "Failed to convert the current Kenji-NX version.", "DialogUpdaterCancelUpdateMessage": "Cancelling Update!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "You are already using the most updated version of Ryujinx!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "You are already using the most updated version of Kenji-NX!", "DialogUpdaterFailedToGetVersionMessage": "An error has occurred when trying to get release information from GitHub Release. This can be caused if a new release is being compiled by GitHub Actions. Try again in a few minutes.", - "DialogUpdaterConvertFailedGithubMessage": "Failed to convert the received Ryujinx version from Github Release.", + "DialogUpdaterConvertFailedGithubMessage": "Failed to convert the received Kenji-NX version from Github Release.", "DialogUpdaterDownloadingMessage": "Downloading Update...", "DialogUpdaterExtractionMessage": "Extracting Update...", "DialogUpdaterRenamingMessage": "Renaming Update...", "DialogUpdaterAddingFilesMessage": "Adding New Update...", "DialogUpdaterCompleteMessage": "Update Complete!", - "DialogUpdaterRestartMessage": "Do you want to restart Ryujinx now?", + "DialogUpdaterRestartMessage": "Do you want to restart Kenji-NX now?", "DialogUpdaterNoInternetMessage": "You are not connected to the Internet!", "DialogUpdaterNoInternetSubMessage": "Please verify that you have a working Internet connection!", - "DialogUpdaterDirtyBuildMessage": "You Cannot update a Dirty build of Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Please download Ryujinx at https://ryujinx.org/ if you are looking for a supported version.", + "DialogUpdaterDirtyBuildMessage": "You Cannot update a Dirty build of Kenji-NX!", + "DialogUpdaterDirtyBuildSubMessage": "Please download Kenji-NX at https://ryujinx.org/ if you are looking for a supported version.", "DialogRestartRequiredMessage": "Restart Required", "DialogThemeRestartMessage": "Theme has been saved. A restart is needed to apply the theme.", "DialogThemeRestartSubMessage": "Do you want to restart", "DialogFirmwareInstallEmbeddedMessage": "Would you like to install the firmware embedded in this game? (Firmware {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Ryujinx was able to install firmware {0} from the provided game.\nThe emulator will now start.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Kenji-NX was able to install firmware {0} from the provided game.\nThe emulator will now start.", "DialogFirmwareNoFirmwareInstalledMessage": "No Firmware Installed", "DialogFirmwareInstalledMessage": "Firmware {0} was installed", "DialogInstallFileTypesSuccessMessage": "Successfully installed file types!", @@ -505,7 +505,7 @@ "DialogErrorAppletErrorExceptionMessage": "Error displaying ErrorApplet Dialog: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nFor more information on how to fix this error, follow our Setup Guide.", - "DialogUserErrorDialogTitle": "Ryujinx Error ({0})", + "DialogUserErrorDialogTitle": "Kenji-NX Error ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "An error occured while fetching information from the API.", "DialogAmiiboApiConnectErrorMessage": "Unable to connect to Amiibo API server. The service may be down or you may need to verify your internet connection is online.", @@ -519,7 +519,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "You are about to delete the Shader cache for :\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionErrorMessage": "Error purging Shader cache at {0}: {1}", - "DialogRyujinxErrorMessage": "Ryujinx has encountered an error", + "DialogRyujinxErrorMessage": "Kenji-NX has encountered an error", "DialogInvalidTitleIdErrorMessage": "UI error: The selected game did not have a valid title ID", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "A valid system firmware was not found in {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Install Firmware {0}", @@ -555,7 +555,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Please stop emulation or close the emulator before launching another game.", "DialogUpdateAddUpdateErrorMessage": "The specified file does not contain an update for the selected title!", "DialogSettingsBackendThreadingWarningTitle": "Warning - Backend Threading", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx must be restarted after changing this option for it to apply fully. Depending on your platform, you may need to manually disable your driver's own multithreading when using Ryujinx's.", + "DialogSettingsBackendThreadingWarningMessage": "Kenji-NX must be restarted after changing this option for it to apply fully. Depending on your platform, you may need to manually disable your driver's own multithreading when using Kenji-NX's.", "DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?", "DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?", "SettingsTabGraphicsFeaturesOptions": "Features", @@ -568,15 +568,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "The file name contains invalid characters. Please try again.", "MenuBarOptionsPauseEmulation": "Pause", "MenuBarOptionsResumeEmulation": "Resume", - "AboutUrlTooltipMessage": "Click to open the Ryujinx website in your default browser.", - "AboutDisclaimerMessage": "Ryujinx is not affiliated with Nintendo™,\nor any of its partners, in any way.", + "AboutUrlTooltipMessage": "Click to open the Kenji-NX website in your default browser.", + "AboutDisclaimerMessage": "Kenji-NX is not affiliated with Nintendo™,\nor any of its partners, in any way.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) is used\nin our Amiibo emulation.", - "AboutPatreonUrlTooltipMessage": "Click to open the Ryujinx Patreon page in your default browser.", - "AboutGithubUrlTooltipMessage": "Click to open the Ryujinx GitHub page in your default browser.", - "AboutDiscordUrlTooltipMessage": "Click to open an invite to the Ryujinx Discord server in your default browser.", - "AboutTwitterUrlTooltipMessage": "Click to open the Ryujinx Twitter page in your default browser.", + "AboutPatreonUrlTooltipMessage": "Click to open the Kenji-NX Patreon page in your default browser.", + "AboutGithubUrlTooltipMessage": "Click to open the Kenji-NX GitHub page in your default browser.", + "AboutDiscordUrlTooltipMessage": "Click to open an invite to the Kenji-NX Discord server in your default browser.", + "AboutTwitterUrlTooltipMessage": "Click to open the Kenji-NX Twitter page in your default browser.", "AboutRyujinxAboutTitle": "About:", - "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\n\nDevelopers interested in contributing can find out more on our GitHub.", + "AboutRyujinxAboutContent": "Kenji-NX is an emulator for the Nintendo Switch™.\n\nDevelopers interested in contributing can find out more on our GitHub.", "AboutRyujinxMaintainersTitle": "Maintained By:", "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Click to open the Contributors page in your default browser.", @@ -603,7 +603,7 @@ "OrderDescending": "Descending", "SettingsTabGraphicsFeatures": "Features & Enhancements", "ErrorWindowTitle": "Error Window", - "ToggleDiscordTooltip": "Choose whether or not to display Ryujinx on your \"currently playing\" Discord activity", + "ToggleDiscordTooltip": "Choose whether or not to display Kenji-NX on your \"currently playing\" Discord activity", "AddGameDirBoxTooltip": "Enter a game directory to add to the list", "AddGameDirTooltip": "Add a game directory to the list", "RemoveGameDirTooltip": "Remove selected game directory", @@ -629,7 +629,7 @@ "MemoryManagerTooltip": "Change how guest memory is mapped and accessed. Greatly affects emulated CPU performance.\n\nSet to HOST UNCHECKED if unsure.", "MemoryManagerSoftwareTooltip": "Use a software page table for address translation. Highest accuracy but slowest performance.", "MemoryManagerHostTooltip": "Directly map memory in the host address space. Much faster JIT compilation and execution.", - "MemoryManagerUnsafeTooltip": "Directly map memory, but do not mask the address within the guest address space before access. Faster, but at the cost of safety. The guest application can access memory from anywhere in Ryujinx, so only run programs you trust with this mode.", + "MemoryManagerUnsafeTooltip": "Directly map memory, but do not mask the address within the guest address space before access. Faster, but at the cost of safety. The guest application can access memory from anywhere in Kenji-NX, so only run programs you trust with this mode.", "UseHypervisorTooltip": "Use Hypervisor instead of JIT. Greatly improves performance when available, but can be unstable in its current state.", "DRamTooltip": "Utilizes alternative memory modes from 4GiB to 12GiB of DRAM.\n\nThis is only useful for higher-resolution texture packs or 4k resolution mods. Does NOT improve performance.\n\nLeave OFF if unsure.", "IgnoreMissingServicesTooltip": "Ignores unimplemented Horizon OS services. This may help in bypassing crashes when booting certain games.\n\nLeave OFF if unsure.", @@ -658,14 +658,14 @@ "LoadApplicationFolderTooltip": "Open a file explorer to choose a Switch compatible, unpacked application to load", "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", - "OpenRyujinxFolderTooltip": "Open Ryujinx filesystem folder", - "OpenScreenshotFolderTooltip": "Open Ryujinx screenshots folder", + "OpenRyujinxFolderTooltip": "Open Kenji-NX filesystem folder", + "OpenScreenshotFolderTooltip": "Open Kenji-NX screenshots folder", "OpenRyujinxLogsTooltip": "Opens the folder where logs are written to", - "ExitTooltip": "Exit Ryujinx", + "ExitTooltip": "Exit Kenji-NX", "OpenSettingsTooltip": "Open settings window", "OpenProfileManagerTooltip": "Open User Profiles Manager window", "StopEmulationTooltip": "Stop emulation of the current game and return to game selection", - "CheckUpdatesTooltip": "Check for updates to Ryujinx", + "CheckUpdatesTooltip": "Check for updates to Kenji-NX", "OpenAboutTooltip": "Open About Window", "GridSize": "Grid Size", "GridSizeTooltip": "Change the size of grid items", @@ -680,7 +680,7 @@ "GameListContextMenuManageModToolTip": "Manage Mods", "GameListContextMenuManageMod": "Manage Mods", "ControllerSettingsStickRange": "Range:", - "DialogStopEmulationTitle": "Ryujinx - Stop Emulation", + "DialogStopEmulationTitle": "Kenji-NX - Stop Emulation", "DialogStopEmulationMessage": "Are you sure you want to stop emulation?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "Audio", @@ -688,7 +688,7 @@ "SettingsTabNetworkConnection": "Network Connection", "SettingsTabCpuCache": "CPU Cache", "SettingsTabCpuMemory": "CPU Mode", - "DialogUpdaterFlatpakNotSupportedMessage": "Please update Ryujinx via FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Please update Kenji-NX via FlatHub.", "UpdaterDisabledWarningTitle": "Updater Disabled!", "ControllerSettingsRotate90": "Rotate 90° Clockwise", "IconSize": "Icon Size", @@ -701,10 +701,10 @@ "UserErrorApplicationNotFound": "Application not found", "UserErrorUnknown": "Unknown error", "UserErrorUndefined": "Undefined error", - "UserErrorNoKeysDescription": "Ryujinx was unable to find your 'prod.keys' file", - "UserErrorNoFirmwareDescription": "Ryujinx was unable to find any firmwares installed", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx was unable to parse the provided firmware. This is usually caused by outdated keys.", - "UserErrorApplicationNotFoundDescription": "Ryujinx couldn't find a valid application at the given path.", + "UserErrorNoKeysDescription": "Kenji-NX was unable to find your 'prod.keys' file", + "UserErrorNoFirmwareDescription": "Kenji-NX was unable to find any firmwares installed", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX was unable to parse the provided firmware. This is usually caused by outdated keys.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX couldn't find a valid application at the given path.", "UserErrorUnknownDescription": "An unknown error occured!", "UserErrorUndefinedDescription": "An undefined error occured! This shouldn't happen, please contact a dev!", "OpenSetupGuideMessage": "Open the Setup Guide", @@ -718,8 +718,8 @@ "TitleXCIStatusFailedLabel": "(Failed)", "TitleXCICanSaveLabel": "Save {0:n0} Mb", "TitleXCISavingLabel": "Saved {0:n0} Mb", - "RyujinxInfo": "Ryujinx - Info", - "RyujinxConfirm": "Ryujinx - Confirmation", + "RyujinxInfo": "Kenji-NX - Info", + "RyujinxConfirm": "Kenji-NX - Confirmation", "FileDialogAllTypes": "All types", "Never": "Never", "SwkbdMinCharacters": "Must be at least {0} characters long", @@ -753,7 +753,7 @@ "OpenFileDialogTitle": "Select a supported file to open", "OpenFolderDialogTitle": "Select a folder with an unpacked game", "AllSupportedFormats": "All Supported Formats", - "RyujinxUpdater": "Ryujinx Updater", + "RyujinxUpdater": "Kenji-NX Updater", "SettingsTabHotkeys": "Keyboard Hotkeys", "SettingsTabHotkeysHotkeys": "Keyboard Hotkeys", "SettingsTabHotkeysToggleVSyncModeHotkey": "Toggle VSync mode:", @@ -838,10 +838,10 @@ "SettingsEnableTextureRecompressionTooltip": "Compresses ASTC textures in order to reduce VRAM usage.\n\nGames using this texture format include Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder and The Legend of Zelda: Tears of the Kingdom.\n\nGraphics cards with 4GiB VRAM or less will likely crash at some point while running these games.\n\nEnable only if you're running out of VRAM on the aforementioned games. Leave OFF if unsure.", "SettingsTabGraphicsPreferredGpu": "Preferred GPU", "SettingsTabGraphicsPreferredGpuTooltip": "Select the graphics card that will be used with the Vulkan graphics backend.\n\nDoes not affect the GPU that OpenGL will use.\n\nSet to the GPU flagged as \"dGPU\" if unsure. If there isn't one, leave untouched.", - "SettingsAppRequiredRestartMessage": "Ryujinx Restart Required", + "SettingsAppRequiredRestartMessage": "Kenji-NX Restart Required", "SettingsGpuBackendRestartMessage": "Graphics Backend or GPU settings have been modified. This will require a restart to be applied", "SettingsGpuBackendRestartSubMessage": "Do you want to restart now?", - "RyujinxUpdaterMessage": "Do you want to update Ryujinx to the latest version?", + "RyujinxUpdaterMessage": "Do you want to update Kenji-NX to the latest version?", "SettingsTabHotkeysVolumeUpHotkey": "Increase Volume:", "SettingsTabHotkeysVolumeDownHotkey": "Decrease Volume:", "SettingsEnableMacroHLE": "Enable Macro HLE", @@ -885,7 +885,7 @@ "AboutChangelogButtonTooltipMessage": "Click to open the changelog for this version in your default browser.", "SettingsTabNetworkMultiplayer": "Multiplayer", "MultiplayerMode": "Mode:", - "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", + "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Kenji-NX instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Disabled", "MultiplayerModeLdnMitm": "ldn_mitm", "MultiplayerModeLdnRyu": "RyuLDN", @@ -893,11 +893,11 @@ "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", "LdnPassphrase": "Network Passphrase:", "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", - "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Kenji-NX-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", "LdnPassphraseInputPublic": "(public)", "GenLdnPass": "Generate Random", "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", "ClearLdnPass": "Clear", "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", - "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Kenji-NX-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Kenjinx/Assets/Locales/es_ES.json similarity index 93% rename from src/Ryujinx/Assets/Locales/es_ES.json rename to src/Kenjinx/Assets/Locales/es_ES.json index f881e2237..54aeff8f7 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Kenjinx/Assets/Locales/es_ES.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "Cargar juego _desempaquetado", "MenuBarFileLoadDlcFromFolder": "Cargar DLC Desde Carpeta", "MenuBarFileLoadTitleUpdatesFromFolder": "Cargar Actualizaciones de Títulos Desde Carpeta", - "MenuBarFileOpenEmuFolder": "Abrir carpeta de Ryujinx", + "MenuBarFileOpenEmuFolder": "Abrir carpeta de Kenji-NX", "MenuBarFileOpenLogsFolder": "Abrir carpeta de registros", "MenuBarFileExit": "_Salir", "MenuBarOptions": "_Opciones", @@ -95,11 +95,11 @@ "StatusBarSystemVersion": "Versión del sistema: {0}", "LinuxVmMaxMapCountDialogTitle": "Límite inferior para mapeos de memoria detectado", "LinuxVmMaxMapCountDialogTextPrimary": "¿Quieres aumentar el valor de vm.max_map_count a {0}?", - "LinuxVmMaxMapCountDialogTextSecondary": "Algunos juegos podrían intentar crear más mapeos de memoria de los permitidos. Ryujinx se bloqueará tan pronto como se supere este límite.", + "LinuxVmMaxMapCountDialogTextSecondary": "Algunos juegos podrían intentar crear más mapeos de memoria de los permitidos. Kenji-NX se bloqueará tan pronto como se supere este límite.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Sí, hasta el próximo reinicio", "LinuxVmMaxMapCountDialogButtonPersistent": "Si, permanentemente", "LinuxVmMaxMapCountWarningTextPrimary": "La cantidad máxima de mapeos de memoria es menor de lo recomendado.", - "LinuxVmMaxMapCountWarningTextSecondary": "El valor actual de vm.max_map_count ({0}) es menor que {1}. Algunos juegos podrían intentar crear más mapeos de memoria de los permitidos actualmente. Ryujinx se bloqueará tan pronto como se supere este límite.\n\nPuede que desee aumentar manualmente el límite o instalar pkexec, lo que permite a Ryujinx ayudar con eso.", + "LinuxVmMaxMapCountWarningTextSecondary": "El valor actual de vm.max_map_count ({0}) es menor que {1}. Algunos juegos podrían intentar crear más mapeos de memoria de los permitidos actualmente. Kenji-NX se bloqueará tan pronto como se supere este límite.\n\nPuede que desee aumentar manualmente el límite o instalar pkexec, lo que permite a Kenji-NX ayudar con eso.", "Settings": "Configuración", "SettingsTabGeneral": "Interfaz de usuario", "SettingsTabGeneralGeneral": "General", @@ -428,42 +428,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Multiplicador de vibraciones débiles", "DialogMessageSaveNotAvailableMessage": "No hay datos de guardado para {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "¿Quieres crear datos de guardado para este juego?", - "DialogConfirmationTitle": "Ryujinx - Confirmación", - "DialogUpdaterTitle": "Ryujinx - Actualizador", - "DialogErrorTitle": "Ryujinx - Error", - "DialogWarningTitle": "Ryujinx - Advertencia", - "DialogExitTitle": "Ryujinx - Salir", - "DialogErrorMessage": "Ryujinx encontró un error", - "DialogExitMessage": "¿Seguro que quieres cerrar Ryujinx?", + "DialogConfirmationTitle": "Kenji-NX - Confirmación", + "DialogUpdaterTitle": "Kenji-NX - Actualizador", + "DialogErrorTitle": "Kenji-NX - Error", + "DialogWarningTitle": "Kenji-NX - Advertencia", + "DialogExitTitle": "Kenji-NX - Salir", + "DialogErrorMessage": "Kenji-NX encontró un error", + "DialogExitMessage": "¿Seguro que quieres cerrar Kenji-NX?", "DialogExitSubMessage": "¡Se perderán los datos no guardados!", "DialogMessageCreateSaveErrorMessage": "Hubo un error al crear los datos de guardado especificados: {0}", "DialogMessageFindSaveErrorMessage": "Hubo un error encontrando los datos de guardado especificados: {0}", "FolderDialogExtractTitle": "Elige la carpeta en la que deseas extraer", "DialogNcaExtractionMessage": "Extrayendo {0} sección de {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Extractor de sección NCA", + "DialogNcaExtractionTitle": "Kenji-NX - Extractor de sección NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Fallo de extracción. El NCA principal no estaba presente en el archivo seleccionado.", "DialogNcaExtractionCheckLogErrorMessage": "Fallo de extracción. Lee el registro para más información.", "DialogNcaExtractionSuccessMessage": "Se completó la extracción con éxito.", - "DialogUpdaterConvertFailedMessage": "No se pudo convertir la versión actual de Ryujinx.", + "DialogUpdaterConvertFailedMessage": "No se pudo convertir la versión actual de Kenji-NX.", "DialogUpdaterCancelUpdateMessage": "¡Cancelando actualización!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "¡Ya tienes la versión más reciente de Ryujinx!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "¡Ya tienes la versión más reciente de Kenji-NX!", "DialogUpdaterFailedToGetVersionMessage": "Se ha producido un error al intentar obtener información de liberación de GitHub Release. Esto puede ser causado si una nueva versión está siendo compilada por GitHub Actions. Inténtalo de nuevo en unos minutos.", - "DialogUpdaterConvertFailedGithubMessage": "No se pudo convertir la versión de Ryujinx recibida de GitHub Release.", + "DialogUpdaterConvertFailedGithubMessage": "No se pudo convertir la versión de Kenji-NX recibida de GitHub Release.", "DialogUpdaterDownloadingMessage": "Descargando actualización...", "DialogUpdaterExtractionMessage": "Extrayendo actualización...", "DialogUpdaterRenamingMessage": "Renombrando actualización...", "DialogUpdaterAddingFilesMessage": "Aplicando actualización...", "DialogUpdaterCompleteMessage": "¡Actualización completa!", - "DialogUpdaterRestartMessage": "¿Quieres reiniciar Ryujinx?", + "DialogUpdaterRestartMessage": "¿Quieres reiniciar Kenji-NX?", "DialogUpdaterNoInternetMessage": "¡No estás conectado a internet!", "DialogUpdaterNoInternetSubMessage": "¡Por favor, verifica que tu conexión a Internet funciona!", - "DialogUpdaterDirtyBuildMessage": "¡No puedes actualizar una versión \"dirty\" de Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Por favor, descarga Ryujinx en https://ryujinx.org/ si buscas una versión con soporte.", + "DialogUpdaterDirtyBuildMessage": "¡No puedes actualizar una versión \"dirty\" de Kenji-NX!", + "DialogUpdaterDirtyBuildSubMessage": "Por favor, descarga Kenji-NX en https://ryujinx.org/ si buscas una versión con soporte.", "DialogRestartRequiredMessage": "Se necesita reiniciar", "DialogThemeRestartMessage": "Tema guardado. Se necesita reiniciar para aplicar el tema.", "DialogThemeRestartSubMessage": "¿Quieres reiniciar?", "DialogFirmwareInstallEmbeddedMessage": "¿Quieres instalar el firmware incluido en este juego? (Firmware versión {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Ryujinx was able to install firmware {0} from the provided game.\nThe emulator will now start.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Kenji-NX was able to install firmware {0} from the provided game.\nThe emulator will now start.", "DialogFirmwareNoFirmwareInstalledMessage": "No hay firmware instalado", "DialogFirmwareInstalledMessage": "Se instaló el firmware {0}", "DialogInstallFileTypesSuccessMessage": "¡Tipos de archivos instalados con éxito!", @@ -477,7 +477,7 @@ "DialogErrorAppletErrorExceptionMessage": "Error al mostrar díalogo ErrorApplet: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nPara más información sobre cómo arreglar este error, sigue nuestra Guía de Instalación.", - "DialogUserErrorDialogTitle": "Ryujinx Error ({0})", + "DialogUserErrorDialogTitle": "Kenji-NX Error ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "Ocurrió un error al recibir información de la API.", "DialogAmiiboApiConnectErrorMessage": "No se pudo conectar al servidor de la API Amiibo. El servicio puede estar caído o tu conexión a internet puede haberse desconectado.", @@ -491,7 +491,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Vas a borrar la caché de sombreadores para:\n\n{0}\n\n¿Estás seguro de querer continuar?", "DialogShaderDeletionErrorMessage": "Error purgando la caché de sombreadores en {0}: {1}", - "DialogRyujinxErrorMessage": "Ryujinx ha encontrado un error", + "DialogRyujinxErrorMessage": "Kenji-NX ha encontrado un error", "DialogInvalidTitleIdErrorMessage": "Error de interfaz: El juego seleccionado no tiene una ID válida", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "No se pudo encontrar un firmware válido en {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Instalar firmware {0}", @@ -527,7 +527,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Por favor, detén la emulación o cierra el emulador antes de iniciar otro juego.", "DialogUpdateAddUpdateErrorMessage": "¡Ese archivo no contiene una actualización para el título seleccionado!", "DialogSettingsBackendThreadingWarningTitle": "Advertencia - multihilado de gráficos", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx debe reiniciarse para aplicar este cambio. Dependiendo de tu plataforma, puede que tengas que desactivar manualmente la optimización enlazada de tus controladores gráficos para usar el multihilo de Ryujinx.", + "DialogSettingsBackendThreadingWarningMessage": "Kenji-NX debe reiniciarse para aplicar este cambio. Dependiendo de tu plataforma, puede que tengas que desactivar manualmente la optimización enlazada de tus controladores gráficos para usar el multihilo de Kenji-NX.", "DialogModManagerDeletionWarningMessage": "Estás a punto de eliminar el mod: {0}\n\n¿Estás seguro de que quieres continuar?", "DialogModManagerDeletionAllWarningMessage": "Estás a punto de eliminar todos los Mods para este título.\n\n¿Estás seguro de que quieres continuar?", "SettingsTabGraphicsFeaturesOptions": "Funcionalidades", @@ -540,15 +540,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "El nombre de archivo contiene caracteres inválidos. Por favor, inténtalo de nuevo.", "MenuBarOptionsPauseEmulation": "Pausar", "MenuBarOptionsResumeEmulation": "Reanudar", - "AboutUrlTooltipMessage": "Haz clic para abrir el sitio web de Ryujinx en tu navegador predeterminado.", - "AboutDisclaimerMessage": "Ryujinx no tiene afiliación alguna con Nintendo™,\nni con ninguno de sus socios.", + "AboutUrlTooltipMessage": "Haz clic para abrir el sitio web de Kenji-NX en tu navegador predeterminado.", + "AboutDisclaimerMessage": "Kenji-NX no tiene afiliación alguna con Nintendo™,\nni con ninguno de sus socios.", "AboutAmiiboDisclaimerMessage": "Utilizamos AmiiboAPI (www.amiiboapi.com)\nen nuestra emulación de Amiibo.", - "AboutPatreonUrlTooltipMessage": "Haz clic para abrir el Patreon de Ryujinx en tu navegador predeterminado.", - "AboutGithubUrlTooltipMessage": "Haz clic para abrir el GitHub de Ryujinx en tu navegador predeterminado.", - "AboutDiscordUrlTooltipMessage": "Haz clic para recibir una invitación al Discord de Ryujinx en tu navegador predeterminado.", - "AboutTwitterUrlTooltipMessage": "Haz clic para abrir el Twitter de Ryujinx en tu navegador predeterminado.", + "AboutPatreonUrlTooltipMessage": "Haz clic para abrir el Patreon de Kenji-NX en tu navegador predeterminado.", + "AboutGithubUrlTooltipMessage": "Haz clic para abrir el GitHub de Kenji-NX en tu navegador predeterminado.", + "AboutDiscordUrlTooltipMessage": "Haz clic para recibir una invitación al Discord de Kenji-NX en tu navegador predeterminado.", + "AboutTwitterUrlTooltipMessage": "Haz clic para abrir el Twitter de Kenji-NX en tu navegador predeterminado.", "AboutRyujinxAboutTitle": "Acerca de:", - "AboutRyujinxAboutContent": "Ryujinx es un emulador para Nintendo Switch™.\n\nDesarrolladores interesados en contribuir pueden encontrar más información en GitHub.", + "AboutRyujinxAboutContent": "Kenji-NX es un emulador para Nintendo Switch™.\n\nDesarrolladores interesados en contribuir pueden encontrar más información en GitHub.", "AboutRyujinxMaintainersTitle": "Mantenido por:", "AboutRyujinxFormerMaintainersTitle": "Anteriormente Mantenido por:", "AboutRyujinxMaintainersContentTooltipMessage": "Haz clic para abrir la página de contribuidores en tu navegador predeterminado.", @@ -575,7 +575,7 @@ "OrderDescending": "Descendente", "SettingsTabGraphicsFeatures": "Funcionalidades Y Mejoras", "ErrorWindowTitle": "Ventana de error", - "ToggleDiscordTooltip": "Elige si muestras Ryujinx o no en tu actividad de Discord cuando lo estés usando", + "ToggleDiscordTooltip": "Elige si muestras Kenji-NX o no en tu actividad de Discord cuando lo estés usando", "AddGameDirBoxTooltip": "Elige un directorio de juegos para mostrar en la ventana principal", "AddGameDirTooltip": "Agrega un directorio de juegos a la lista", "RemoveGameDirTooltip": "Quita el directorio seleccionado de la lista", @@ -597,7 +597,7 @@ "MemoryManagerTooltip": "Cambia la forma de mapear y acceder a la memoria del guest. Afecta en gran medida al rendimiento de la CPU emulada.\n\nSelecciona \"Host sin verificación\" si no sabes qué hacer.", "MemoryManagerSoftwareTooltip": "Usa una tabla de paginación de software para traducir direcciones. Ofrece la precisión más exacta pero el rendimiento más lento.", "MemoryManagerHostTooltip": "Mapea la memoria directamente en la dirección de espacio del host. Compilación y ejecución JIT mucho más rápida.", - "MemoryManagerUnsafeTooltip": "Mapea la memoria directamente, pero no enmascara la dirección dentro del espacio de dirección del guest antes del acceso. El modo más rápido, pero a costa de seguridad. La aplicación guest puede acceder a la memoria desde cualquier parte en Ryujinx, así que ejecuta solo programas en los que confíes cuando uses este modo.", + "MemoryManagerUnsafeTooltip": "Mapea la memoria directamente, pero no enmascara la dirección dentro del espacio de dirección del guest antes del acceso. El modo más rápido, pero a costa de seguridad. La aplicación guest puede acceder a la memoria desde cualquier parte en Kenji-NX, así que ejecuta solo programas en los que confíes cuando uses este modo.", "UseHypervisorTooltip": "Usar Hypervisor en lugar de JIT. Mejora enormemente el rendimiento cuando está disponible, pero puede ser inestable en su estado actual.", "DRamTooltip": "Expande la memoria DRAM del sistema emulado de 4GiB a 6GiB.\n\nUtilizar solo con packs de texturas HD o mods de resolución 4K. NO mejora el rendimiento.\n\nDesactívalo si no sabes qué hacer.", "IgnoreMissingServicesTooltip": "Hack para ignorar servicios no implementados del Horizon OS. Esto puede ayudar a sobrepasar crasheos cuando inicies ciertos juegos.\n\nDesactívalo si no sabes qué hacer.", @@ -623,13 +623,13 @@ "DebugLogTooltip": "Escribe mensajes de debug en la consola\n\nActiva esto solo si un miembro del equipo te lo pide expresamente, pues hará que el registro sea difícil de leer y empeorará el rendimiento del emulador.", "LoadApplicationFileTooltip": "Abre el explorador de archivos para elegir un archivo compatible con Switch para cargar", "LoadApplicationFolderTooltip": "Abre el explorador de archivos para elegir un archivo desempaquetado y compatible con Switch para cargar", - "OpenRyujinxFolderTooltip": "Abre la carpeta de sistema de Ryujinx", + "OpenRyujinxFolderTooltip": "Abre la carpeta de sistema de Kenji-NX", "OpenRyujinxLogsTooltip": "Abre la carpeta en la que se guardan los registros", - "ExitTooltip": "Cierra Ryujinx", + "ExitTooltip": "Cierra Kenji-NX", "OpenSettingsTooltip": "Abre la ventana de configuración", "OpenProfileManagerTooltip": "Abre la ventana para gestionar los perfiles de usuario", "StopEmulationTooltip": "Detiene la emulación del juego actual y regresa a la selección de juegos", - "CheckUpdatesTooltip": "Busca actualizaciones para Ryujinx", + "CheckUpdatesTooltip": "Busca actualizaciones para Kenji-NX", "OpenAboutTooltip": "Abre la ventana \"Acerca de\"", "GridSize": "Tamaño de cuadrícula", "GridSizeTooltip": "Cambia el tamaño de los objetos en la cuadrícula", @@ -644,7 +644,7 @@ "GameListContextMenuManageModToolTip": "Gestionar Mods", "GameListContextMenuManageMod": "Gestionar Mods", "ControllerSettingsStickRange": "Alcance:", - "DialogStopEmulationTitle": "Ryujinx - Detener emulación", + "DialogStopEmulationTitle": "Kenji-NX - Detener emulación", "DialogStopEmulationMessage": "¿Seguro que quieres detener la emulación actual?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "Sonido", @@ -652,7 +652,7 @@ "SettingsTabNetworkConnection": "Conexión de red", "SettingsTabCpuCache": "Caché de CPU", "SettingsTabCpuMemory": "Memoria de CPU", - "DialogUpdaterFlatpakNotSupportedMessage": "Por favor, actualiza Ryujinx a través de FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Por favor, actualiza Kenji-NX a través de FlatHub.", "UpdaterDisabledWarningTitle": "¡Actualizador deshabilitado!", "ControllerSettingsRotate90": "Rotar 90° en el sentido de las agujas del reloj", "IconSize": "Tamaño de iconos", @@ -665,17 +665,17 @@ "UserErrorApplicationNotFound": "No se encontró la aplicación", "UserErrorUnknown": "Error desconocido", "UserErrorUndefined": "Error indefinido", - "UserErrorNoKeysDescription": "Ryujinx no pudo encontrar tus 'prod.keys'.", - "UserErrorNoFirmwareDescription": "Ryujinx no pudo encontrar un firmware instalado.", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx no pudo analizar el firmware. Normalmente esto ocurre debido a keys desfasadas.", - "UserErrorApplicationNotFoundDescription": "Ryujinx no pudo encontrar una aplicación válida en ese camino.", + "UserErrorNoKeysDescription": "Kenji-NX no pudo encontrar tus 'prod.keys'.", + "UserErrorNoFirmwareDescription": "Kenji-NX no pudo encontrar un firmware instalado.", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX no pudo analizar el firmware. Normalmente esto ocurre debido a keys desfasadas.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX no pudo encontrar una aplicación válida en ese camino.", "UserErrorUnknownDescription": "¡Ocurrió un error desconocido!", "UserErrorUndefinedDescription": "¡Ocurrió un error indefinido! Esto no debería pasar, por favor, ¡contacta con un desarrollador!", "OpenSetupGuideMessage": "Abrir la guía de instalación", "NoUpdate": "No actualizado", "TitleUpdateVersionLabel": "Versión {0} - {1}", - "RyujinxInfo": "Ryujinx - Info", - "RyujinxConfirm": "Ryujinx - Confirmación", + "RyujinxInfo": "Kenji-NX - Info", + "RyujinxConfirm": "Kenji-NX - Confirmación", "FileDialogAllTypes": "Todos los tipos", "Never": "Nunca", "SwkbdMinCharacters": "Debe tener al menos {0} caracteres", @@ -709,7 +709,7 @@ "OpenFileDialogTitle": "Selecciona un archivo soportado para cargar", "OpenFolderDialogTitle": "Selecciona una carpeta con un juego desempaquetado", "AllSupportedFormats": "Todos los formatos soportados", - "RyujinxUpdater": "Actualizador de Ryujinx", + "RyujinxUpdater": "Actualizador de Kenji-NX", "SettingsTabHotkeys": "Atajos de teclado", "SettingsTabHotkeysHotkeys": "Atajos de teclado", "SettingsTabHotkeysToggleVsyncHotkey": "Alternar la sincronización vertical:", @@ -757,10 +757,10 @@ "SettingsEnableTextureRecompressionTooltip": "Compresses ASTC textures in order to reduce VRAM usage.\n\nGames using this texture format include Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder and The Legend of Zelda: Tears of the Kingdom.\n\nGraphics cards with 4GiB VRAM or less will likely crash at some point while running these games.\n\nEnable only if you're running out of VRAM on the aforementioned games. Leave OFF if unsure.", "SettingsTabGraphicsPreferredGpu": "GPU preferida", "SettingsTabGraphicsPreferredGpuTooltip": "Selecciona la tarjeta gráfica que se utilizará con los back-end de gráficos Vulkan.\n\nNo afecta la GPU que utilizará OpenGL.\n\nFije a la GPU marcada como \"dGUP\" ante dudas. Si no hay una, no haga modificaciones.", - "SettingsAppRequiredRestartMessage": "Reinicio de Ryujinx requerido.", + "SettingsAppRequiredRestartMessage": "Reinicio de Kenji-NX requerido.", "SettingsGpuBackendRestartMessage": "La configuración de la GPU o del back-end de los gráficos fue modificada. Es necesario reiniciar para que se aplique.", "SettingsGpuBackendRestartSubMessage": "¿Quieres reiniciar ahora?", - "RyujinxUpdaterMessage": "¿Quieres actualizar Ryujinx a la última versión?", + "RyujinxUpdaterMessage": "¿Quieres actualizar Kenji-NX a la última versión?", "SettingsTabHotkeysVolumeUpHotkey": "Aumentar volumen:", "SettingsTabHotkeysVolumeDownHotkey": "Disminuir volumen:", "SettingsEnableMacroHLE": "Activar Macros HLE", @@ -803,7 +803,7 @@ "AboutChangelogButtonTooltipMessage": "Haga clic para abrir el registro de cambios para esta versión en su navegador predeterminado.", "SettingsTabNetworkMultiplayer": "Multijugador", "MultiplayerMode": "Modo:", - "MultiplayerModeTooltip": "Cambiar modo LDN multijugador.\n\nLdnMitm modificará la funcionalidad local de juego inalámbrico para funcionar como si fuera LAN, permitiendo locales conexiones de la misma red con otras instancias de Ryujinx y consolas hackeadas de Nintendo Switch que tienen instalado el módulo ldn_mitm.\n\nMultijugador requiere que todos los jugadores estén en la misma versión del juego (por ejemplo, Super Smash Bros. Ultimate v13.0.1 no se puede conectar a v13.0.0).\n\nDejar DESACTIVADO si no está seguro.", + "MultiplayerModeTooltip": "Cambiar modo LDN multijugador.\n\nLdnMitm modificará la funcionalidad local de juego inalámbrico para funcionar como si fuera LAN, permitiendo locales conexiones de la misma red con otras instancias de Kenji-NX y consolas hackeadas de Nintendo Switch que tienen instalado el módulo ldn_mitm.\n\nMultijugador requiere que todos los jugadores estén en la misma versión del juego (por ejemplo, Super Smash Bros. Ultimate v13.0.1 no se puede conectar a v13.0.0).\n\nDejar DESACTIVADO si no está seguro.", "MultiplayerModeDisabled": "Deshabilitar", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Kenjinx/Assets/Locales/fr_FR.json similarity index 93% rename from src/Ryujinx/Assets/Locales/fr_FR.json rename to src/Kenjinx/Assets/Locales/fr_FR.json index 79041b506..9859227dd 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Kenjinx/Assets/Locales/fr_FR.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "Charger un jeu extrait", "MenuBarFileLoadDlcFromFolder": "Charger les DLC depuis le dossier des DLC", "MenuBarFileLoadTitleUpdatesFromFolder": "Charger les mises à jour depuis le dossier des mises à jour", - "MenuBarFileOpenEmuFolder": "Ouvrir le dossier Ryujinx", + "MenuBarFileOpenEmuFolder": "Ouvrir le dossier Kenji-NX", "MenuBarFileOpenLogsFolder": "Ouvrir le dossier des journaux", "MenuBarFileExit": "_Quitter", "MenuBarOptions": "_Options", @@ -95,11 +95,11 @@ "StatusBarSystemVersion": "Version du Firmware: {0}", "LinuxVmMaxMapCountDialogTitle": "Limite basse pour les mappings mémoire détectée", "LinuxVmMaxMapCountDialogTextPrimary": "Voulez-vous augmenter la valeur de vm.max_map_count à {0}", - "LinuxVmMaxMapCountDialogTextSecondary": "Certains jeux peuvent essayer de créer plus de mappings mémoire que ce qui est actuellement autorisé. Ryujinx plantera dès que cette limite sera dépassée.", + "LinuxVmMaxMapCountDialogTextSecondary": "Certains jeux peuvent essayer de créer plus de mappings mémoire que ce qui est actuellement autorisé. Kenji-NX plantera dès que cette limite sera dépassée.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Oui, jusqu'au prochain redémarrage", "LinuxVmMaxMapCountDialogButtonPersistent": "Oui, en permanence", "LinuxVmMaxMapCountWarningTextPrimary": "La quantité maximale de mappings mémoire est inférieure à la valeur recommandée.", - "LinuxVmMaxMapCountWarningTextSecondary": "La valeur actuelle de vm.max_map_count ({0}) est inférieure à {1}. Certains jeux peuvent essayer de créer plus de mappings mémoire que ceux actuellement autorisés. Ryujinx plantera dès que cette limite sera dépassée.\n\nVous pouvez soit augmenter manuellement la limite, soit installer pkexec, ce qui permet à Ryujinx de l'aider.", + "LinuxVmMaxMapCountWarningTextSecondary": "La valeur actuelle de vm.max_map_count ({0}) est inférieure à {1}. Certains jeux peuvent essayer de créer plus de mappings mémoire que ceux actuellement autorisés. Kenji-NX plantera dès que cette limite sera dépassée.\n\nVous pouvez soit augmenter manuellement la limite, soit installer pkexec, ce qui permet à Kenji-NX de l'aider.", "Settings": "Paramètres", "SettingsTabGeneral": "Interface Utilisateur", "SettingsTabGeneralGeneral": "Général", @@ -430,42 +430,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Multiplicateur de vibrations faibles", "DialogMessageSaveNotAvailableMessage": "Il n'y a aucune sauvegarde pour {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Voulez-vous créer une sauvegarde pour ce jeu ?", - "DialogConfirmationTitle": "Ryujinx - Confirmation", - "DialogUpdaterTitle": "Ryujinx - Mise à Jour", - "DialogErrorTitle": "Ryujinx - Erreur", - "DialogWarningTitle": "Ryujinx - Avertissement", - "DialogExitTitle": "Ryujinx - Quitter", - "DialogErrorMessage": "Ryujinx a rencontré une erreur", - "DialogExitMessage": "Êtes-vous sûr de vouloir fermer Ryujinx ?", + "DialogConfirmationTitle": "Kenji-NX - Confirmation", + "DialogUpdaterTitle": "Kenji-NX - Mise à Jour", + "DialogErrorTitle": "Kenji-NX - Erreur", + "DialogWarningTitle": "Kenji-NX - Avertissement", + "DialogExitTitle": "Kenji-NX - Quitter", + "DialogErrorMessage": "Kenji-NX a rencontré une erreur", + "DialogExitMessage": "Êtes-vous sûr de vouloir fermer Kenji-NX ?", "DialogExitSubMessage": "Toutes les données non enregistrées seront perdues !", "DialogMessageCreateSaveErrorMessage": "Une erreur s'est produite lors de la création de la sauvegarde spécifiée : {0}", "DialogMessageFindSaveErrorMessage": "Une erreur s'est produite lors de la recherche de la sauvegarde spécifiée : {0}", "FolderDialogExtractTitle": "Choisissez le dossier dans lequel extraire", "DialogNcaExtractionMessage": "Extraction de la section {0} depuis {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Extracteur de la section NCA", + "DialogNcaExtractionTitle": "Kenji-NX - Extracteur de la section NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Échec de l'extraction. Le NCA principal n'était pas présent dans le fichier sélectionné.", "DialogNcaExtractionCheckLogErrorMessage": "Échec de l'extraction. Lisez le fichier journal pour plus d'informations.", "DialogNcaExtractionSuccessMessage": "Extraction terminée avec succès.", - "DialogUpdaterConvertFailedMessage": "Échec de la conversion de la version actuelle de Ryujinx.", + "DialogUpdaterConvertFailedMessage": "Échec de la conversion de la version actuelle de Kenji-NX.", "DialogUpdaterCancelUpdateMessage": "Annuler la mise à jour !", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Vous utilisez déjà la version la plus récente de Ryujinx !", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Vous utilisez déjà la version la plus récente de Kenji-NX !", "DialogUpdaterFailedToGetVersionMessage": "Une erreur s'est produite lors de la tentative d'obtention des informations de publication de la version GitHub. Cela peut survenir lorsqu'une nouvelle version est en cours de compilation par GitHub Actions. Réessayez dans quelques minutes.", - "DialogUpdaterConvertFailedGithubMessage": "Impossible de convertir la version reçue de Ryujinx depuis Github Release.", + "DialogUpdaterConvertFailedGithubMessage": "Impossible de convertir la version reçue de Kenji-NX depuis Github Release.", "DialogUpdaterDownloadingMessage": "Téléchargement de la mise à jour...", "DialogUpdaterExtractionMessage": "Extraction de la mise à jour…", "DialogUpdaterRenamingMessage": "Renommage de la mise à jour...", "DialogUpdaterAddingFilesMessage": "Ajout d'une nouvelle mise à jour...", "DialogUpdaterCompleteMessage": "Mise à jour terminée !", - "DialogUpdaterRestartMessage": "Voulez-vous redémarrer Ryujinx maintenant ?", + "DialogUpdaterRestartMessage": "Voulez-vous redémarrer Kenji-NX maintenant ?", "DialogUpdaterNoInternetMessage": "Vous n'êtes pas connecté à Internet !", "DialogUpdaterNoInternetSubMessage": "Veuillez vérifier que vous disposez d'une connexion Internet fonctionnelle !", - "DialogUpdaterDirtyBuildMessage": "Vous ne pouvez pas mettre à jour une version Dirty de Ryujinx !", - "DialogUpdaterDirtyBuildSubMessage": "Veuillez télécharger Ryujinx sur https://ryujinx.org/ si vous recherchez une version prise en charge.", + "DialogUpdaterDirtyBuildMessage": "Vous ne pouvez pas mettre à jour une version Dirty de Kenji-NX !", + "DialogUpdaterDirtyBuildSubMessage": "Veuillez télécharger Kenji-NX sur https://ryujinx.org/ si vous recherchez une version prise en charge.", "DialogRestartRequiredMessage": "Redémarrage requis", "DialogThemeRestartMessage": "Le thème a été enregistré. Un redémarrage est requis pour appliquer le thème.", "DialogThemeRestartSubMessage": "Voulez-vous redémarrer", "DialogFirmwareInstallEmbeddedMessage": "Voulez-vous installer le firmware intégré dans ce jeu ? (Firmware {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "Aucun firmware installé n'a été trouvé mais Ryujinx a pu installer le firmware {0} à partir du jeu fourni.\nL'émulateur va maintenant démarrer.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "Aucun firmware installé n'a été trouvé mais Kenji-NX a pu installer le firmware {0} à partir du jeu fourni.\nL'émulateur va maintenant démarrer.", "DialogFirmwareNoFirmwareInstalledMessage": "Aucun Firmware installé", "DialogFirmwareInstalledMessage": "Le firmware {0} a été installé", "DialogInstallFileTypesSuccessMessage": "Types de fichiers installés avec succès!", @@ -479,7 +479,7 @@ "DialogErrorAppletErrorExceptionMessage": "Erreur lors de l'affichage de la boîte de dialogue ErrorApplet: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nPour plus d'informations sur la manière de corriger cette erreur, suivez notre Guide d'Installation.", - "DialogUserErrorDialogTitle": "Erreur Ryujinx ({0})", + "DialogUserErrorDialogTitle": "Erreur Kenji-NX ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "Une erreur est survenue lors de la récupération des informations de l'API.", "DialogAmiiboApiConnectErrorMessage": "Impossible de se connecter au serveur API Amiibo. Le service est peut-être hors service ou vous devriez peut-être vérifier que votre connexion internet est connectée.", @@ -493,7 +493,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Vous êtes sur le point de supprimer le cache du Shader pour :\n\n{0}\n\nÊtes-vous sûr de vouloir continuer ?", "DialogShaderDeletionErrorMessage": "Erreur lors de la purge du cache du Shader à {0}: {1}", - "DialogRyujinxErrorMessage": "Ryujinx a rencontré une erreur", + "DialogRyujinxErrorMessage": "Kenji-NX a rencontré une erreur", "DialogInvalidTitleIdErrorMessage": "Erreur d'UI : le jeu sélectionné n'a pas d'ID de titre valide", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "Un firmware valide n'a pas été trouvé dans {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Installer le Firmware {0}", @@ -529,7 +529,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Veuillez arrêter l'émulation ou fermer l'émulateur avant de lancer un autre jeu.", "DialogUpdateAddUpdateErrorMessage": "Le fichier spécifié ne contient pas de mise à jour pour le titre sélectionné !", "DialogSettingsBackendThreadingWarningTitle": "Avertissement - Backend Threading ", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx doit être redémarré après avoir changé cette option pour qu'elle s'applique complètement. Selon votre plate-forme, vous devrez peut-être désactiver manuellement le multithreading de votre pilote lorsque vous utilisez Ryujinx.", + "DialogSettingsBackendThreadingWarningMessage": "Kenji-NX doit être redémarré après avoir changé cette option pour qu'elle s'applique complètement. Selon votre plate-forme, vous devrez peut-être désactiver manuellement le multithreading de votre pilote lorsque vous utilisez Kenji-NX.", "DialogModManagerDeletionWarningMessage": "Vous êtes sur le point de supprimer le mod : {0}\n\nÊtes-vous sûr de vouloir continuer ?", "DialogModManagerDeletionAllWarningMessage": "Vous êtes sur le point de supprimer tous les mods pour ce titre.\n\nÊtes-vous sûr de vouloir continuer ?", "SettingsTabGraphicsFeaturesOptions": "Fonctionnalités", @@ -542,15 +542,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "Le nom du fichier contient des caractères invalides. Veuillez réessayer.", "MenuBarOptionsPauseEmulation": "Suspendre", "MenuBarOptionsResumeEmulation": "Reprendre", - "AboutUrlTooltipMessage": "Cliquez pour ouvrir le site de Ryujinx dans votre navigateur par défaut.", - "AboutDisclaimerMessage": "Ryujinx n'est pas affilié à Nintendo™,\nou à aucun de ses partenaires, de quelque manière que ce soit.", + "AboutUrlTooltipMessage": "Cliquez pour ouvrir le site de Kenji-NX dans votre navigateur par défaut.", + "AboutDisclaimerMessage": "Kenji-NX n'est pas affilié à Nintendo™,\nou à aucun de ses partenaires, de quelque manière que ce soit.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) est utilisé\ndans notre émulation Amiibo.", - "AboutPatreonUrlTooltipMessage": "Cliquez pour ouvrir la page Patreon de Ryujinx dans votre navigateur par défaut.", - "AboutGithubUrlTooltipMessage": "Cliquez pour ouvrir la page GitHub de Ryujinx dans votre navigateur par défaut.", - "AboutDiscordUrlTooltipMessage": "Cliquez pour ouvrir une invitation au serveur Discord de Ryujinx dans votre navigateur par défaut.", - "AboutTwitterUrlTooltipMessage": "Cliquez pour ouvrir la page Twitter de Ryujinx dans votre navigateur par défaut.", + "AboutPatreonUrlTooltipMessage": "Cliquez pour ouvrir la page Patreon de Kenji-NX dans votre navigateur par défaut.", + "AboutGithubUrlTooltipMessage": "Cliquez pour ouvrir la page GitHub de Kenji-NX dans votre navigateur par défaut.", + "AboutDiscordUrlTooltipMessage": "Cliquez pour ouvrir une invitation au serveur Discord de Kenji-NX dans votre navigateur par défaut.", + "AboutTwitterUrlTooltipMessage": "Cliquez pour ouvrir la page Twitter de Kenji-NX dans votre navigateur par défaut.", "AboutRyujinxAboutTitle": "À propos :", - "AboutRyujinxAboutContent": "Ryujinx est un émulateur pour la Nintendo Switch™.\n\nLes développeurs intéressés à contribuer peuvent en savoir plus sur notre GitHub.", + "AboutRyujinxAboutContent": "Kenji-NX est un émulateur pour la Nintendo Switch™.\n\nLes développeurs intéressés à contribuer peuvent en savoir plus sur notre GitHub.", "AboutRyujinxMaintainersTitle": "Maintenu par :", "AboutRyujinxFormerMaintainersTitle": "Auparavant Maintenu par :", "AboutRyujinxMaintainersContentTooltipMessage": "Cliquez pour ouvrir la page Contributeurs dans votre navigateur par défaut.", @@ -577,7 +577,7 @@ "OrderDescending": "Décroissant", "SettingsTabGraphicsFeatures": "Fonctionnalités & Améliorations", "ErrorWindowTitle": "Fenêtre d'erreur", - "ToggleDiscordTooltip": "Choisissez d'afficher ou non Ryujinx sur votre activité « en cours de jeu » Discord", + "ToggleDiscordTooltip": "Choisissez d'afficher ou non Kenji-NX sur votre activité « en cours de jeu » Discord", "AddGameDirBoxTooltip": "Entrez un répertoire de jeux à ajouter à la liste", "AddGameDirTooltip": "Ajouter un répertoire de jeux à la liste", "RemoveGameDirTooltip": "Supprimer le répertoire de jeu sélectionné", @@ -600,7 +600,7 @@ "MemoryManagerTooltip": "Change la façon dont la mémoire émulée est mappée et utiliser. Cela affecte grandement les performances du processeur.\n\nRéglez sur Host Uncheked en cas d'incertitude.", "MemoryManagerSoftwareTooltip": "Utilisez une table logicielle pour la traduction d'adresses. La plus grande précision est fournie, mais les performances en seront impacter.", "MemoryManagerHostTooltip": "Mappez directement la mémoire dans l'espace d'adresses de l'hôte. Compilation et exécution JIT beaucoup plus rapides.", - "MemoryManagerUnsafeTooltip": "Mapper directement la mémoire dans la carte, mais ne pas masquer l'adresse dans l'espace d'adressage du client avant l'accès. Plus rapide, mais la sécurité sera négliger. L'application peut accéder à la mémoire depuis n'importe où dans Ryujinx, donc exécutez uniquement les programmes en qui vous avez confiance avec ce mode.", + "MemoryManagerUnsafeTooltip": "Mapper directement la mémoire dans la carte, mais ne pas masquer l'adresse dans l'espace d'adressage du client avant l'accès. Plus rapide, mais la sécurité sera négliger. L'application peut accéder à la mémoire depuis n'importe où dans Kenji-NX, donc exécutez uniquement les programmes en qui vous avez confiance avec ce mode.", "UseHypervisorTooltip": "Utiliser l'Hyperviseur au lieu du JIT. Améliore considérablement les performances lorsqu'il est disponible, mais peut être instable dans son état actuel.", "DRamTooltip": "Utilise une disposition alternative de la mémoire pour imiter le kit de développeur de la Switch.\n\nActiver cette option uniquement pour les packs de textures 4k ou les mods à résolution 4k.\nN'améliore pas les performances, cause des crashs dans certains jeux si activer.\n\nLaissez Désactiver en cas d'incertitude.", "IgnoreMissingServicesTooltip": "Ignore les services Horizon OS non-intégré. Cela peut aider à contourner les plantages lors du démarrage de certains jeux.\n\nActivez-le en cas d'incertitude.", @@ -626,13 +626,13 @@ "DebugLogTooltip": "Affiche les messages de débogage dans la console.\n\nN'utilisez ceci que si un membre du personnel le demande, car cela rendra les logs difficiles à lire et réduit les performances de l'émulateur.", "LoadApplicationFileTooltip": "Ouvrir un explorateur de fichiers pour choisir un fichier compatible Switch à charger", "LoadApplicationFolderTooltip": "Ouvrir un explorateur de fichiers pour choisir une application Switch compatible et décompressée à charger", - "OpenRyujinxFolderTooltip": "Ouvrir le dossier du système de fichiers Ryujinx", + "OpenRyujinxFolderTooltip": "Ouvrir le dossier du système de fichiers Kenji-NX", "OpenRyujinxLogsTooltip": "Ouvre le dossier dans lequel les journaux sont écrits", - "ExitTooltip": "Quitter Ryujinx", + "ExitTooltip": "Quitter Kenji-NX", "OpenSettingsTooltip": "Ouvrir la fenêtre de configuration", "OpenProfileManagerTooltip": "Ouvrir la fenêtre du gestionnaire de profils d'utilisateurs", "StopEmulationTooltip": "Arrêter l'émulation du jeu en cours et revenir à la sélection des jeux", - "CheckUpdatesTooltip": "Vérifier les mises à jour de Ryujinx", + "CheckUpdatesTooltip": "Vérifier les mises à jour de Kenji-NX", "OpenAboutTooltip": "Ouvrir la fenêtre À Propos", "GridSize": "Taille de la grille", "GridSizeTooltip": "Modifier la taille des éléments de la grille", @@ -647,7 +647,7 @@ "GameListContextMenuManageModToolTip": "Gérer les mods", "GameListContextMenuManageMod": "Gérer les mods", "ControllerSettingsStickRange": "Intervalle :", - "DialogStopEmulationTitle": "Ryujinx - Arrêt de l'émulation", + "DialogStopEmulationTitle": "Kenji-NX - Arrêt de l'émulation", "DialogStopEmulationMessage": "Êtes-vous sûr de vouloir arrêter l'émulation ?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "Audio", @@ -655,7 +655,7 @@ "SettingsTabNetworkConnection": "Connexion réseau", "SettingsTabCpuCache": "Cache CPU", "SettingsTabCpuMemory": "Mémoire CPU", - "DialogUpdaterFlatpakNotSupportedMessage": "Merci de mettre à jour Ryujinx via FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Merci de mettre à jour Kenji-NX via FlatHub.", "UpdaterDisabledWarningTitle": "Mise à jour désactivée !", "ControllerSettingsRotate90": "Faire pivoter de 90° à droite", "IconSize": "Taille d'icône", @@ -668,17 +668,17 @@ "UserErrorApplicationNotFound": " Application introuvable", "UserErrorUnknown": "Erreur inconnue", "UserErrorUndefined": "Erreur non définie", - "UserErrorNoKeysDescription": "Ryujinx n'a pas pu trouver votre fichier 'prod.keys'", - "UserErrorNoFirmwareDescription": "Ryujinx n'a pas trouvé de firmwares installés", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx n'a pas pu analyser le firmware fourni. Cela est généralement dû à des clés obsolètes.", - "UserErrorApplicationNotFoundDescription": "Ryujinx n'a pas pu trouver une application valide dans le chemin indiqué.", + "UserErrorNoKeysDescription": "Kenji-NX n'a pas pu trouver votre fichier 'prod.keys'", + "UserErrorNoFirmwareDescription": "Kenji-NX n'a pas trouvé de firmwares installés", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX n'a pas pu analyser le firmware fourni. Cela est généralement dû à des clés obsolètes.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX n'a pas pu trouver une application valide dans le chemin indiqué.", "UserErrorUnknownDescription": "Une erreur inconnue est survenue !", "UserErrorUndefinedDescription": "Une erreur inconnue est survenue ! Cela ne devrait pas se produire, merci de contacter un développeur !", "OpenSetupGuideMessage": "Ouvrir le guide d'installation", "NoUpdate": "Aucune mise à jour", "TitleUpdateVersionLabel": "Version {0}", - "RyujinxInfo": "Ryujinx - Info", - "RyujinxConfirm": "Ryujinx - Confirmation", + "RyujinxInfo": "Kenji-NX - Info", + "RyujinxConfirm": "Kenji-NX - Confirmation", "FileDialogAllTypes": "Tous les types", "Never": "Jamais", "SwkbdMinCharacters": "Doit comporter au moins {0} caractères", @@ -712,7 +712,7 @@ "OpenFileDialogTitle": "Sélectionnez un fichier supporté à ouvrir", "OpenFolderDialogTitle": "Sélectionnez un dossier avec un jeu décompressé", "AllSupportedFormats": "Tous les formats supportés", - "RyujinxUpdater": "Mise à jour de Ryujinx", + "RyujinxUpdater": "Mise à jour de Kenji-NX", "SettingsTabHotkeys": "Raccourcis clavier", "SettingsTabHotkeysHotkeys": "Raccourcis clavier", "SettingsTabHotkeysToggleVsyncHotkey": "Activer/désactiver la VSync :", @@ -768,10 +768,10 @@ "SettingsEnableTextureRecompressionTooltip": "Les jeux utilisant ce format de texture incluent Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder et The Legend of Zelda: Tears of the Kingdom.\n\nLes cartes graphiques avec 4 Go ou moins de VRAM risquent probablement de planter à un moment donné lors de l'exécution de ces jeux.\n\nActivez uniquement si vous manquez de VRAM sur les jeux mentionnés ci-dessus. Laissez DÉSACTIVÉ si vous n'êtes pas sûr.", "SettingsTabGraphicsPreferredGpu": "GPU préféré", "SettingsTabGraphicsPreferredGpuTooltip": "Sélectionnez la carte graphique qui sera utilisée avec l'interface graphique Vulkan.\n\nCela ne change pas le GPU qu'OpenGL utilisera.\n\nChoisissez le GPU noté \"dGPU\" si vous n'êtes pas sûr. S'il n'y en a pas, ne pas modifier.", - "SettingsAppRequiredRestartMessage": "Redémarrage de Ryujinx requis", + "SettingsAppRequiredRestartMessage": "Redémarrage de Kenji-NX requis", "SettingsGpuBackendRestartMessage": "Les paramètres de l'interface graphique ou du GPU ont été modifiés. Cela nécessitera un redémarrage pour être appliqué", "SettingsGpuBackendRestartSubMessage": "\n\nVoulez-vous redémarrer maintenant ?", - "RyujinxUpdaterMessage": "Voulez-vous mettre à jour Ryujinx vers la dernière version ?", + "RyujinxUpdaterMessage": "Voulez-vous mettre à jour Kenji-NX vers la dernière version ?", "SettingsTabHotkeysVolumeUpHotkey": "Augmenter le volume :", "SettingsTabHotkeysVolumeDownHotkey": "Diminuer le volume :", "SettingsEnableMacroHLE": "Activer les macros HLE", @@ -814,7 +814,7 @@ "AboutChangelogButtonTooltipMessage": "Cliquez pour ouvrir le changelog de cette version dans votre navigateur par défaut.", "SettingsTabNetworkMultiplayer": "Multijoueur", "MultiplayerMode": "Mode :", - "MultiplayerModeTooltip": "Changer le mode multijoueur LDN.\n\nLdnMitm modifiera la fonctionnalité de jeu sans fil local/jeu local dans les jeux pour fonctionner comme s'il s'agissait d'un LAN, permettant des connexions locales sur le même réseau avec d'autres instances de Ryujinx et des consoles Nintendo Switch piratées ayant le module ldn_mitm installé.\n\nLe multijoueur nécessite que tous les joueurs soient sur la même version du jeu (par exemple, Super Smash Bros. Ultimate v13.0.1 ne peut pas se connecter à v13.0.0).\n\nLaissez DÉSACTIVÉ si vous n'êtes pas sûr.", + "MultiplayerModeTooltip": "Changer le mode multijoueur LDN.\n\nLdnMitm modifiera la fonctionnalité de jeu sans fil local/jeu local dans les jeux pour fonctionner comme s'il s'agissait d'un LAN, permettant des connexions locales sur le même réseau avec d'autres instances de Kenji-NX et des consoles Nintendo Switch piratées ayant le module ldn_mitm installé.\n\nLe multijoueur nécessite que tous les joueurs soient sur la même version du jeu (par exemple, Super Smash Bros. Ultimate v13.0.1 ne peut pas se connecter à v13.0.0).\n\nLaissez DÉSACTIVÉ si vous n'êtes pas sûr.", "MultiplayerModeDisabled": "Désactivé", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Kenjinx/Assets/Locales/he_IL.json similarity index 98% rename from src/Ryujinx/Assets/Locales/he_IL.json rename to src/Kenjinx/Assets/Locales/he_IL.json index 9a58849d5..ad4c772cd 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Kenjinx/Assets/Locales/he_IL.json @@ -95,11 +95,11 @@ "StatusBarSystemVersion": "גרסת מערכת: {0}", "LinuxVmMaxMapCountDialogTitle": "זוהתה מגבלה נמוכה עבור מיפויי זיכרון", "LinuxVmMaxMapCountDialogTextPrimary": "האם תרצה להגביר את הערך של vm.max_map_count ל{0}", - "LinuxVmMaxMapCountDialogTextSecondary": "משחקים מסוימים עלולים לייצר עוד מיפויי זיכרון ממה שמתאפשר. Ryujinx יקרוס ברגע שהמגבלה תחרוג.", + "LinuxVmMaxMapCountDialogTextSecondary": "משחקים מסוימים עלולים לייצר עוד מיפויי זיכרון ממה שמתאפשר. Kenji-NX יקרוס ברגע שהמגבלה תחרוג.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "כן, עד האתחול הבא", "LinuxVmMaxMapCountDialogButtonPersistent": "כן, לצמיתות", "LinuxVmMaxMapCountWarningTextPrimary": "הכמות המירבית של מיפויי הזיכרון נמוכה מהמומלץ.", - "LinuxVmMaxMapCountWarningTextSecondary": "הערך הנוכחי של vm.max_map_count {0} נמוך מ{1}. משחקים מסוימים עלולים לייצר עוד מיפוי זיכרון ממה שמתאפשר.Ryujinx יקרוס ברגע שהמגבלה תחרוג.\n\nיתכן ותרצה להעלות את המגבלה הנוכחית או להתקין את pkexec, אשר יאפשר לRyujinx לסייע בכך.", + "LinuxVmMaxMapCountWarningTextSecondary": "הערך הנוכחי של vm.max_map_count {0} נמוך מ{1}. משחקים מסוימים עלולים לייצר עוד מיפוי זיכרון ממה שמתאפשר.Kenji-NX יקרוס ברגע שהמגבלה תחרוג.\n\nיתכן ותרצה להעלות את המגבלה הנוכחית או להתקין את pkexec, אשר יאפשר לRyujinx לסייע בכך.", "Settings": "הגדרות", "SettingsTabGeneral": "ממשק משתמש", "SettingsTabGeneralGeneral": "כללי", @@ -477,7 +477,7 @@ "DialogErrorAppletErrorExceptionMessage": "שגיאה בהצגת דיאלוג ErrorApplet: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nלמידע נוסף על איך לתקן שגיאה זו, עקוב אחר מדריך ההתקנה שלנו.", - "DialogUserErrorDialogTitle": "שגיאת Ryujinx ({0})", + "DialogUserErrorDialogTitle": "שגיאת Kenji-NX ({0})", "DialogAmiiboApiTitle": "ממשק תכנות אמיבו", "DialogAmiiboApiFailFetchMessage": "אירעה שגיאה בעת שליפת מידע מהממשק.", "DialogAmiiboApiConnectErrorMessage": "לא ניתן להתחבר לממשק שרת האמיבו. ייתכן שהשירות מושבת או שתצטרך לוודא שהחיבור לאינטרנט שלך מקוון.", @@ -546,7 +546,7 @@ "AboutPatreonUrlTooltipMessage": "לחץ כדי לפתוח את דף הפטראון של ריוג'ינקס בדפדפן ברירת המחדל שלך.", "AboutGithubUrlTooltipMessage": "לחץ כדי לפתוח את דף הגיטהב של ריוג'ינקס בדפדפן ברירת המחדל שלך.", "AboutDiscordUrlTooltipMessage": "לחץ כדי לפתוח הזמנה לשרת הדיסקורד של ריוג'ינקס בדפדפן ברירת המחדל שלך.", - "AboutTwitterUrlTooltipMessage": "לחץ כדי לפתוח את דף הטוויטר של Ryujinx בדפדפן ברירת המחדל שלך.", + "AboutTwitterUrlTooltipMessage": "לחץ כדי לפתוח את דף הטוויטר של Kenji-NX בדפדפן ברירת המחדל שלך.", "AboutRyujinxAboutTitle": "אודות:", "AboutRyujinxAboutContent": "ריוג'ינקס הוא אמולטור עבור הנינטנדו סוויץ' (כל הזכויות שמורות).\n\nמפתחים המעוניינים לתרום יכולים לקבל מידע נוסף ב-גיטהאב או ב-דיסקורד שלנו.", "AboutRyujinxMaintainersTitle": "מתוחזק על ידי:", @@ -803,7 +803,7 @@ "AboutChangelogButtonTooltipMessage": "לחץ כדי לפתוח את יומן השינויים עבור גרסה זו בדפדפן ברירת המחדל שלך.", "SettingsTabNetworkMultiplayer": "רב משתתפים", "MultiplayerMode": "מצב:", - "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", + "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Kenji-NX instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Disabled", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Kenjinx/Assets/Locales/it_IT.json similarity index 93% rename from src/Ryujinx/Assets/Locales/it_IT.json rename to src/Kenjinx/Assets/Locales/it_IT.json index 7ad30d85c..1e622c34c 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Kenjinx/Assets/Locales/it_IT.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "Carica _gioco estratto", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "Apri cartella di Ryujinx", + "MenuBarFileOpenEmuFolder": "Apri cartella di Kenji-NX", "MenuBarFileOpenLogsFolder": "Apri cartella dei log", "MenuBarFileExit": "_Esci", "MenuBarOptions": "_Opzioni", @@ -95,11 +95,11 @@ "StatusBarSystemVersion": "Versione di sistema: {0}", "LinuxVmMaxMapCountDialogTitle": "Rilevato limite basso per le mappature di memoria", "LinuxVmMaxMapCountDialogTextPrimary": "Vuoi aumentare il valore di vm.max_map_count a {0}?", - "LinuxVmMaxMapCountDialogTextSecondary": "Alcuni giochi potrebbero provare a creare più mappature di memoria di quanto sia attualmente consentito. Ryujinx si bloccherà non appena questo limite viene superato.", + "LinuxVmMaxMapCountDialogTextSecondary": "Alcuni giochi potrebbero provare a creare più mappature di memoria di quanto sia attualmente consentito. Kenji-NX si bloccherà non appena questo limite viene superato.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Sì, fino al prossimo riavvio", "LinuxVmMaxMapCountDialogButtonPersistent": "Sì, in modo permanente", "LinuxVmMaxMapCountWarningTextPrimary": "La quantità massima di mappature di memoria è inferiore a quella consigliata.", - "LinuxVmMaxMapCountWarningTextSecondary": "Il valore corrente di vm.max_map_count ({0}) è inferiore a {1}. Alcuni giochi potrebbero provare a creare più mappature di memoria di quanto sia attualmente consentito. Ryujinx si bloccherà non appena questo limite viene superato.\n\nPotresti voler aumentare manualmente il limite o installare pkexec, il che permette a Ryujinx di assisterlo.", + "LinuxVmMaxMapCountWarningTextSecondary": "Il valore corrente di vm.max_map_count ({0}) è inferiore a {1}. Alcuni giochi potrebbero provare a creare più mappature di memoria di quanto sia attualmente consentito. Kenji-NX si bloccherà non appena questo limite viene superato.\n\nPotresti voler aumentare manualmente il limite o installare pkexec, il che permette a Kenji-NX di assisterlo.", "Settings": "Impostazioni", "SettingsTabGeneral": "Interfaccia utente", "SettingsTabGeneralGeneral": "Generali", @@ -428,42 +428,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Moltiplicatore vibrazione debole", "DialogMessageSaveNotAvailableMessage": "Non ci sono dati di salvataggio per {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Vuoi creare dei dati di salvataggio per questo gioco?", - "DialogConfirmationTitle": "Ryujinx - Conferma", - "DialogUpdaterTitle": "Ryujinx - Aggiornamento", - "DialogErrorTitle": "Ryujinx - Errore", - "DialogWarningTitle": "Ryujinx - Avviso", - "DialogExitTitle": "Ryujinx - Esci", - "DialogErrorMessage": "Ryujinx ha riscontrato un problema", - "DialogExitMessage": "Sei sicuro di voler chiudere Ryujinx?", + "DialogConfirmationTitle": "Kenji-NX - Conferma", + "DialogUpdaterTitle": "Kenji-NX - Aggiornamento", + "DialogErrorTitle": "Kenji-NX - Errore", + "DialogWarningTitle": "Kenji-NX - Avviso", + "DialogExitTitle": "Kenji-NX - Esci", + "DialogErrorMessage": "Kenji-NX ha riscontrato un problema", + "DialogExitMessage": "Sei sicuro di voler chiudere Kenji-NX?", "DialogExitSubMessage": "Tutti i dati non salvati andranno persi!", "DialogMessageCreateSaveErrorMessage": "C'è stato un errore durante la creazione dei dati di salvataggio: {0}", "DialogMessageFindSaveErrorMessage": "C'è stato un errore durante la ricerca dei dati di salvataggio: {0}", "FolderDialogExtractTitle": "Scegli una cartella in cui estrarre", "DialogNcaExtractionMessage": "Estrazione della sezione {0} da {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Estrazione sezione NCA", + "DialogNcaExtractionTitle": "Kenji-NX - Estrazione sezione NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "L'estrazione è fallita. L'NCA principale non era presente nel file selezionato.", "DialogNcaExtractionCheckLogErrorMessage": "L'estrazione è fallita. Consulta il file di log per maggiori informazioni.", "DialogNcaExtractionSuccessMessage": "Estrazione completata con successo.", - "DialogUpdaterConvertFailedMessage": "La conversione dell'attuale versione di Ryujinx è fallita.", + "DialogUpdaterConvertFailedMessage": "La conversione dell'attuale versione di Kenji-NX è fallita.", "DialogUpdaterCancelUpdateMessage": "Annullamento dell'aggiornamento in corso!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Stai già usando la versione più recente di Ryujinx!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Stai già usando la versione più recente di Kenji-NX!", "DialogUpdaterFailedToGetVersionMessage": "Si è verificato un errore durante il tentativo di recuperare le informazioni sulla versione da GitHub Release. Ciò può verificarsi se una nuova versione è in fase di compilazione da GitHub Actions. Riprova tra qualche minuto.", - "DialogUpdaterConvertFailedGithubMessage": "La conversione della versione di Ryujinx ricevuta da Github Release è fallita.", + "DialogUpdaterConvertFailedGithubMessage": "La conversione della versione di Kenji-NX ricevuta da Github Release è fallita.", "DialogUpdaterDownloadingMessage": "Download dell'aggiornamento...", "DialogUpdaterExtractionMessage": "Estrazione dell'aggiornamento...", "DialogUpdaterRenamingMessage": "Rinominazione dell'aggiornamento...", "DialogUpdaterAddingFilesMessage": "Aggiunta del nuovo aggiornamento...", "DialogUpdaterCompleteMessage": "Aggiornamento completato!", - "DialogUpdaterRestartMessage": "Vuoi riavviare Ryujinx adesso?", + "DialogUpdaterRestartMessage": "Vuoi riavviare Kenji-NX adesso?", "DialogUpdaterNoInternetMessage": "Non sei connesso ad Internet!", "DialogUpdaterNoInternetSubMessage": "Verifica di avere una connessione ad Internet funzionante!", - "DialogUpdaterDirtyBuildMessage": "Non puoi aggiornare una Dirty build di Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Scarica Ryujinx da https://ryujinx.org/ se stai cercando una versione supportata.", + "DialogUpdaterDirtyBuildMessage": "Non puoi aggiornare una Dirty build di Kenji-NX!", + "DialogUpdaterDirtyBuildSubMessage": "Scarica Kenji-NX da https://ryujinx.org/ se stai cercando una versione supportata.", "DialogRestartRequiredMessage": "Riavvio richiesto", "DialogThemeRestartMessage": "Il tema è stato salvato. È richiesto un riavvio per applicare il tema.", "DialogThemeRestartSubMessage": "Vuoi riavviare?", "DialogFirmwareInstallEmbeddedMessage": "Vuoi installare il firmware incorporato in questo gioco? (Firmware {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "Non è stato trovato alcun firmware installato, ma Ryujinx è riuscito ad installare il firmware {0} dal gioco fornito.\nL'emulatore si avvierà adesso.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "Non è stato trovato alcun firmware installato, ma Kenji-NX è riuscito ad installare il firmware {0} dal gioco fornito.\nL'emulatore si avvierà adesso.", "DialogFirmwareNoFirmwareInstalledMessage": "Nessun firmware installato", "DialogFirmwareInstalledMessage": "Il firmware {0} è stato installato", "DialogInstallFileTypesSuccessMessage": "Tipi di file installati con successo!", @@ -477,7 +477,7 @@ "DialogErrorAppletErrorExceptionMessage": "Errore nella visualizzazione dell'ErrorApplet Dialog: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nPer maggiori informazioni su come risolvere questo errore, segui la nostra guida all'installazione.", - "DialogUserErrorDialogTitle": "Errore di Ryujinx ({0})", + "DialogUserErrorDialogTitle": "Errore di Kenji-NX ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "Si è verificato un errore durante il recupero delle informazioni dall'API.", "DialogAmiiboApiConnectErrorMessage": "Impossibile connettersi al server Amiibo API. Il servizio potrebbe essere fuori uso o potresti dover verificare che la tua connessione internet sia online.", @@ -491,7 +491,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Stai per eliminare la cache degli shader per:\n\n{0}\n\nSei sicuro di voler proseguire?", "DialogShaderDeletionErrorMessage": "Errore nell'eliminazione della cache degli shader a {0}: {1}", - "DialogRyujinxErrorMessage": "Ryujinx ha incontrato un errore", + "DialogRyujinxErrorMessage": "Kenji-NX ha incontrato un errore", "DialogInvalidTitleIdErrorMessage": "Errore UI: Il gioco selezionato non ha un ID titolo valido", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "Un firmware del sistema valido non è stato trovato in {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Installa firmware {0}", @@ -527,7 +527,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Ferma l'emulazione o chiudi l'emulatore prima di avviare un altro gioco.", "DialogUpdateAddUpdateErrorMessage": "Il file specificato non contiene un aggiornamento per il titolo selezionato!", "DialogSettingsBackendThreadingWarningTitle": "Avviso - Backend Threading", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx deve essere riavviato dopo aver cambiato questa opzione per applicarla completamente. A seconda della tua piattaforma, potrebbe essere necessario disabilitare manualmente il multithreading del driver quando usi quello di Ryujinx.", + "DialogSettingsBackendThreadingWarningMessage": "Kenji-NX deve essere riavviato dopo aver cambiato questa opzione per applicarla completamente. A seconda della tua piattaforma, potrebbe essere necessario disabilitare manualmente il multithreading del driver quando usi quello di Kenji-NX.", "DialogModManagerDeletionWarningMessage": "Stai per eliminare la mod: {0}\n\nConfermi di voler procedere?", "DialogModManagerDeletionAllWarningMessage": "Stai per eliminare tutte le mod per questo titolo.\n\nVuoi davvero procedere?", "SettingsTabGraphicsFeaturesOptions": "Funzionalità", @@ -540,15 +540,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "Il nome del file contiene dei caratteri non validi. Riprova.", "MenuBarOptionsPauseEmulation": "Metti in pausa", "MenuBarOptionsResumeEmulation": "Riprendi", - "AboutUrlTooltipMessage": "Clicca per aprire il sito web di Ryujinx nel tuo browser predefinito.", - "AboutDisclaimerMessage": "Ryujinx non è affiliato con Nintendo™,\no i suoi partner, in alcun modo.", + "AboutUrlTooltipMessage": "Clicca per aprire il sito web di Kenji-NX nel tuo browser predefinito.", + "AboutDisclaimerMessage": "Kenji-NX non è affiliato con Nintendo™,\no i suoi partner, in alcun modo.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) è usata\nnella nostra emulazione Amiibo.", - "AboutPatreonUrlTooltipMessage": "Clicca per aprire la pagina Patreon di Ryujinx nel tuo browser predefinito.", - "AboutGithubUrlTooltipMessage": "Clicca per aprire la pagina GitHub di Ryujinx nel tuo browser predefinito.", - "AboutDiscordUrlTooltipMessage": "Clicca per aprire un invito al server Discord di Ryujinx nel tuo browser predefinito.", - "AboutTwitterUrlTooltipMessage": "Clicca per aprire la pagina Twitter di Ryujinx nel tuo browser predefinito.", + "AboutPatreonUrlTooltipMessage": "Clicca per aprire la pagina Patreon di Kenji-NX nel tuo browser predefinito.", + "AboutGithubUrlTooltipMessage": "Clicca per aprire la pagina GitHub di Kenji-NX nel tuo browser predefinito.", + "AboutDiscordUrlTooltipMessage": "Clicca per aprire un invito al server Discord di Kenji-NX nel tuo browser predefinito.", + "AboutTwitterUrlTooltipMessage": "Clicca per aprire la pagina Twitter di Kenji-NX nel tuo browser predefinito.", "AboutRyujinxAboutTitle": "Informazioni:", - "AboutRyujinxAboutContent": "Ryujinx è un emulatore per la console Nintendo Switch™.\n\nGli sviluppatori interessati a contribuire possono trovare più informazioni sul nostro GitHub.", + "AboutRyujinxAboutContent": "Kenji-NX è un emulatore per la console Nintendo Switch™.\n\nGli sviluppatori interessati a contribuire possono trovare più informazioni sul nostro GitHub.", "AboutRyujinxMaintainersTitle": "Mantenuto da:", "AboutRyujinxFormerMaintainersTitle": "Precedentemente Mantenuto da:", "AboutRyujinxMaintainersContentTooltipMessage": "Clicca per aprire la pagina dei contributori nel tuo browser predefinito.", @@ -575,7 +575,7 @@ "OrderDescending": "Decrescente", "SettingsTabGraphicsFeatures": "Funzionalità e miglioramenti", "ErrorWindowTitle": "Finestra di errore", - "ToggleDiscordTooltip": "Scegli se mostrare o meno Ryujinx nella tua attività su Discord", + "ToggleDiscordTooltip": "Scegli se mostrare o meno Kenji-NX nella tua attività su Discord", "AddGameDirBoxTooltip": "Inserisci una cartella dei giochi per aggiungerla alla lista", "AddGameDirTooltip": "Aggiungi una cartella dei giochi alla lista", "RemoveGameDirTooltip": "Rimuovi la cartella dei giochi selezionata", @@ -598,7 +598,7 @@ "MemoryManagerTooltip": "Cambia il modo in cui la memoria guest è mappata e vi si accede. Influisce notevolmente sulle prestazioni della CPU emulata.\n\nNel dubbio, imposta l'opzione su Host Unchecked.", "MemoryManagerSoftwareTooltip": "Usa una software page table per la traduzione degli indirizzi. Massima precisione ma prestazioni più lente.", "MemoryManagerHostTooltip": "Mappa direttamente la memoria nello spazio degli indirizzi dell'host. Compilazione ed esecuzione JIT molto più veloce.", - "MemoryManagerUnsafeTooltip": "Mappa direttamente la memoria, ma non maschera l'indirizzo all'interno dello spazio degli indirizzi guest prima dell'accesso. Più veloce, ma a costo della sicurezza. L'applicazione guest può accedere alla memoria da qualsiasi punto di Ryujinx, quindi esegui solo programmi di cui ti fidi con questa modalità.", + "MemoryManagerUnsafeTooltip": "Mappa direttamente la memoria, ma non maschera l'indirizzo all'interno dello spazio degli indirizzi guest prima dell'accesso. Più veloce, ma a costo della sicurezza. L'applicazione guest può accedere alla memoria da qualsiasi punto di Kenji-NX, quindi esegui solo programmi di cui ti fidi con questa modalità.", "UseHypervisorTooltip": "Usa Hypervisor invece di JIT. Migliora notevolmente le prestazioni quando disponibile, ma può essere instabile nel suo stato attuale.", "DRamTooltip": "Utilizza un layout di memoria alternativo per imitare un'unità di sviluppo di Switch.\n\nQuesta opzione è utile soltanto per i pacchetti di texture ad alta risoluzione o per le mod che aumentano la risoluzione a 4K. NON migliora le prestazioni.\n\nNel dubbio, lascia l'opzione disattivata.", "IgnoreMissingServicesTooltip": "Ignora i servizi non implementati del sistema operativo Horizon. Può aiutare ad aggirare gli arresti anomali che si verificano avviando alcuni giochi.\n\nNel dubbio, lascia l'opzione disattivata.", @@ -624,13 +624,13 @@ "DebugLogTooltip": "Stampa i messaggi di log per il debug nella console.\n\nUsa questa opzione solo se specificatamente richiesto da un membro del team, dal momento che rende i log difficili da leggere e riduce le prestazioni dell'emulatore.", "LoadApplicationFileTooltip": "Apri un file explorer per scegliere un file compatibile Switch da caricare", "LoadApplicationFolderTooltip": "Apri un file explorer per scegliere un file compatibile Switch, applicazione sfusa da caricare", - "OpenRyujinxFolderTooltip": "Apri la cartella del filesystem di Ryujinx", + "OpenRyujinxFolderTooltip": "Apri la cartella del filesystem di Kenji-NX", "OpenRyujinxLogsTooltip": "Apre la cartella dove vengono salvati i log", - "ExitTooltip": "Esci da Ryujinx", + "ExitTooltip": "Esci da Kenji-NX", "OpenSettingsTooltip": "Apri la finestra delle impostazioni", "OpenProfileManagerTooltip": "Apri la finestra di gestione dei profili utente", "StopEmulationTooltip": "Ferma l'emulazione del gioco attuale e torna alla selezione dei giochi", - "CheckUpdatesTooltip": "Controlla la presenza di aggiornamenti di Ryujinx", + "CheckUpdatesTooltip": "Controlla la presenza di aggiornamenti di Kenji-NX", "OpenAboutTooltip": "Apri la finestra delle informazioni", "GridSize": "Dimensione griglia", "GridSizeTooltip": "Cambia la dimensione dei riquadri della griglia", @@ -645,7 +645,7 @@ "GameListContextMenuManageModToolTip": "Gestisci mod", "GameListContextMenuManageMod": "Gestisci mod", "ControllerSettingsStickRange": "Raggio:", - "DialogStopEmulationTitle": "Ryujinx - Ferma emulazione", + "DialogStopEmulationTitle": "Kenji-NX - Ferma emulazione", "DialogStopEmulationMessage": "Sei sicuro di voler fermare l'emulazione?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "Audio", @@ -653,7 +653,7 @@ "SettingsTabNetworkConnection": "Connessione di rete", "SettingsTabCpuCache": "Cache CPU", "SettingsTabCpuMemory": "Modalità CPU", - "DialogUpdaterFlatpakNotSupportedMessage": "Aggiorna Ryujinx tramite FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Aggiorna Kenji-NX tramite FlatHub.", "UpdaterDisabledWarningTitle": "Updater disabilitato!", "ControllerSettingsRotate90": "Ruota in senso orario di 90°", "IconSize": "Dimensioni icone", @@ -666,17 +666,17 @@ "UserErrorApplicationNotFound": "Applicazione non trovata", "UserErrorUnknown": "Errore sconosciuto", "UserErrorUndefined": "Errore non definito", - "UserErrorNoKeysDescription": "Ryujinx non è riuscito a trovare il file 'prod.keys'", - "UserErrorNoFirmwareDescription": "Ryujinx non è riuscito a trovare alcun firmware installato", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx non è riuscito ad analizzare il firmware. Questo di solito è causato da chiavi non aggiornate.", - "UserErrorApplicationNotFoundDescription": "Ryujinx non è riuscito a trovare un'applicazione valida nel percorso specificato.", + "UserErrorNoKeysDescription": "Kenji-NX non è riuscito a trovare il file 'prod.keys'", + "UserErrorNoFirmwareDescription": "Kenji-NX non è riuscito a trovare alcun firmware installato", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX non è riuscito ad analizzare il firmware. Questo di solito è causato da chiavi non aggiornate.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX non è riuscito a trovare un'applicazione valida nel percorso specificato.", "UserErrorUnknownDescription": "Si è verificato un errore sconosciuto!", "UserErrorUndefinedDescription": "Si è verificato un errore sconosciuto! Ciò non dovrebbe accadere, contatta uno sviluppatore!", "OpenSetupGuideMessage": "Apri la guida all'installazione", "NoUpdate": "Nessun aggiornamento", "TitleUpdateVersionLabel": "Versione {0}", - "RyujinxInfo": "Ryujinx - Info", - "RyujinxConfirm": "Ryujinx - Conferma", + "RyujinxInfo": "Kenji-NX - Info", + "RyujinxConfirm": "Kenji-NX - Conferma", "FileDialogAllTypes": "Tutti i tipi", "Never": "Mai", "SwkbdMinCharacters": "Non può avere meno di {0} caratteri", @@ -710,7 +710,7 @@ "OpenFileDialogTitle": "Seleziona un file supportato da aprire", "OpenFolderDialogTitle": "Seleziona una cartella con un gioco estratto", "AllSupportedFormats": "Tutti i formati supportati", - "RyujinxUpdater": "Aggiornamento di Ryujinx", + "RyujinxUpdater": "Aggiornamento di Kenji-NX", "SettingsTabHotkeys": "Tasti di scelta rapida", "SettingsTabHotkeysHotkeys": "Tasti di scelta rapida", "SettingsTabHotkeysToggleVsyncHotkey": "Attiva/disattiva VSync:", @@ -758,10 +758,10 @@ "SettingsEnableTextureRecompressionTooltip": "Comprime le texture ASTC per ridurre l'utilizzo di VRAM.\n\nI giochi che utilizzano questo formato di texture includono Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder e The Legend of Zelda: Tears of the Kingdom.\n\nLe schede grafiche con 4GiB o meno di VRAM probabilmente si bloccheranno ad un certo punto durante l'esecuzione di questi giochi.\n\nAttiva questa opzione solo se sei a corto di VRAM nei giochi sopra menzionati. Nel dubbio, lascia l'opzione disattivata.", "SettingsTabGraphicsPreferredGpu": "GPU preferita", "SettingsTabGraphicsPreferredGpuTooltip": "Seleziona la scheda grafica che verrà usata con la backend grafica Vulkan.\n\nNon influenza la GPU che userà OpenGL.\n\nImposta la GPU contrassegnata come \"dGPU\" se non sei sicuro. Se non ce n'è una, lascia intatta quest'impostazione.", - "SettingsAppRequiredRestartMessage": "È richiesto un riavvio di Ryujinx", + "SettingsAppRequiredRestartMessage": "È richiesto un riavvio di Kenji-NX", "SettingsGpuBackendRestartMessage": "Le impostazioni della backend grafica o della GPU sono state modificate. Questo richiederà un riavvio perché le modifiche siano applicate", "SettingsGpuBackendRestartSubMessage": "Vuoi riavviare ora?", - "RyujinxUpdaterMessage": "Vuoi aggiornare Ryujinx all'ultima versione?", + "RyujinxUpdaterMessage": "Vuoi aggiornare Kenji-NX all'ultima versione?", "SettingsTabHotkeysVolumeUpHotkey": "Alza il volume:", "SettingsTabHotkeysVolumeDownHotkey": "Abbassa il volume:", "SettingsEnableMacroHLE": "Attiva HLE macro", @@ -804,7 +804,7 @@ "AboutChangelogButtonTooltipMessage": "Clicca per aprire il changelog per questa versione nel tuo browser predefinito.", "SettingsTabNetworkMultiplayer": "Multigiocatore", "MultiplayerMode": "Modalità:", - "MultiplayerModeTooltip": "Cambia la modalità multigiocatore LDN.\n\nLdnMitm modificherà la funzionalità locale wireless/local play nei giochi per funzionare come se fosse in modalità LAN, consentendo connessioni locali sulla stessa rete con altre istanze di Ryujinx e console Nintendo Switch modificate che hanno il modulo ldn_mitm installato.\n\nLa modalità multigiocatore richiede che tutti i giocatori usino la stessa versione del gioco (es. Super Smash Bros. Ultimate v13.0.1 non può connettersi con la v13.0.0).\n\nNel dubbio, lascia l'opzione su Disabilitato.", + "MultiplayerModeTooltip": "Cambia la modalità multigiocatore LDN.\n\nLdnMitm modificherà la funzionalità locale wireless/local play nei giochi per funzionare come se fosse in modalità LAN, consentendo connessioni locali sulla stessa rete con altre istanze di Kenji-NX e console Nintendo Switch modificate che hanno il modulo ldn_mitm installato.\n\nLa modalità multigiocatore richiede che tutti i giocatori usino la stessa versione del gioco (es. Super Smash Bros. Ultimate v13.0.1 non può connettersi con la v13.0.0).\n\nNel dubbio, lascia l'opzione su Disabilitato.", "MultiplayerModeDisabled": "Disabilitato", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Kenjinx/Assets/Locales/ja_JP.json similarity index 95% rename from src/Ryujinx/Assets/Locales/ja_JP.json rename to src/Kenjinx/Assets/Locales/ja_JP.json index eac9d888d..e8f80854e 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Kenjinx/Assets/Locales/ja_JP.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "展開されたゲームをロード", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "Ryujinx フォルダを開く", + "MenuBarFileOpenEmuFolder": "Kenji-NX フォルダを開く", "MenuBarFileOpenLogsFolder": "ログフォルダを開く", "MenuBarFileExit": "終了(_E)", "MenuBarOptions": "オプション(_O)", @@ -44,7 +44,7 @@ "MenuBarViewWindow2160": "2160p", "MenuBarHelp": "ヘルプ(_H)", "MenuBarHelpCheckForUpdates": "アップデートを確認", - "MenuBarHelpAbout": "Ryujinx について", + "MenuBarHelpAbout": "Kenji-NX について", "MenuSearch": "検索...", "GameListHeaderFavorite": "お気に入り", "GameListHeaderIcon": "アイコン", @@ -99,7 +99,7 @@ "LinuxVmMaxMapCountDialogButtonUntilRestart": "はい, 次回再起動まで", "LinuxVmMaxMapCountDialogButtonPersistent": "はい, 恒久的に", "LinuxVmMaxMapCountWarningTextPrimary": "メモリマッピングの最大量が推奨値よりも小さいです.", - "LinuxVmMaxMapCountWarningTextSecondary": "vm.max_map_count の現在値 {0} は {1} よりも小さいです. ゲームによっては現在許可されている値よりも大きなメモリマッピングを作成しようとする場合があります. 上限を越えた場合, Ryujinx はクラッシュします.", + "LinuxVmMaxMapCountWarningTextSecondary": "vm.max_map_count の現在値 {0} は {1} よりも小さいです. ゲームによっては現在許可されている値よりも大きなメモリマッピングを作成しようとする場合があります. 上限を越えた場合, Kenji-NX はクラッシュします.", "Settings": "設定", "SettingsTabGeneral": "ユーザインタフェース", "SettingsTabGeneralGeneral": "一般", @@ -428,37 +428,37 @@ "ControllerSettingsRumbleWeakMultiplier": "弱振動の補正値", "DialogMessageSaveNotAvailableMessage": "{0} [{1:x16}] のセーブデータはありません", "DialogMessageSaveNotAvailableCreateSaveMessage": "このゲームのセーブデータを作成してよろしいですか?", - "DialogConfirmationTitle": "Ryujinx - 確認", - "DialogUpdaterTitle": "Ryujinx - アップデータ", - "DialogErrorTitle": "Ryujinx - エラー", - "DialogWarningTitle": "Ryujinx - 警告", - "DialogExitTitle": "Ryujinx - 終了", + "DialogConfirmationTitle": "Kenji-NX - 確認", + "DialogUpdaterTitle": "Kenji-NX - アップデータ", + "DialogErrorTitle": "Kenji-NX - エラー", + "DialogWarningTitle": "Kenji-NX - 警告", + "DialogExitTitle": "Kenji-NX - 終了", "DialogErrorMessage": "エラーが発生しました", - "DialogExitMessage": "Ryujinx を閉じてよろしいですか?", + "DialogExitMessage": "Kenji-NX を閉じてよろしいですか?", "DialogExitSubMessage": "セーブされていないデータはすべて失われます!", "DialogMessageCreateSaveErrorMessage": "セーブデータ: {0} の作成中にエラーが発生しました", "DialogMessageFindSaveErrorMessage": "セーブデータ: {0} の検索中にエラーが発生しました", "FolderDialogExtractTitle": "展開フォルダを選択", "DialogNcaExtractionMessage": "{1} から {0} セクションを展開中...", - "DialogNcaExtractionTitle": "Ryujinx - NCA セクション展開", + "DialogNcaExtractionTitle": "Kenji-NX - NCA セクション展開", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "展開に失敗しました. 選択されたファイルにはメイン NCA が存在しません.", "DialogNcaExtractionCheckLogErrorMessage": "展開に失敗しました. 詳細はログを確認してください.", "DialogNcaExtractionSuccessMessage": "展開が正常終了しました", - "DialogUpdaterConvertFailedMessage": "現在の Ryujinx バージョンの変換に失敗しました.", + "DialogUpdaterConvertFailedMessage": "現在の Kenji-NX バージョンの変換に失敗しました.", "DialogUpdaterCancelUpdateMessage": "アップデータをキャンセル中!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "最新バージョンの Ryujinx を使用中です!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "最新バージョンの Kenji-NX を使用中です!", "DialogUpdaterFailedToGetVersionMessage": "Github からのリリース情報取得時にエラーが発生しました. Github Actions でリリースファイルを作成中かもしれません. 後ほどもう一度試してみてください.", - "DialogUpdaterConvertFailedGithubMessage": "Github から取得した Ryujinx バージョンの変換に失敗しました.", + "DialogUpdaterConvertFailedGithubMessage": "Github から取得した Kenji-NX バージョンの変換に失敗しました.", "DialogUpdaterDownloadingMessage": "アップデートをダウンロード中...", "DialogUpdaterExtractionMessage": "アップデートを展開中...", "DialogUpdaterRenamingMessage": "アップデートをリネーム中...", "DialogUpdaterAddingFilesMessage": "新規アップデートを追加中...", "DialogUpdaterCompleteMessage": "アップデート完了!", - "DialogUpdaterRestartMessage": "すぐに Ryujinx を再起動しますか?", + "DialogUpdaterRestartMessage": "すぐに Kenji-NX を再起動しますか?", "DialogUpdaterNoInternetMessage": "インターネットに接続されていません!", "DialogUpdaterNoInternetSubMessage": "インターネット接続が正常動作しているか確認してください!", - "DialogUpdaterDirtyBuildMessage": "Dirty ビルドの Ryujinx はアップデートできません!", - "DialogUpdaterDirtyBuildSubMessage": "サポートされているバージョンをお探しなら, https://ryujinx.org/ で Ryujinx をダウンロードしてください.", + "DialogUpdaterDirtyBuildMessage": "Dirty ビルドの Kenji-NX はアップデートできません!", + "DialogUpdaterDirtyBuildSubMessage": "サポートされているバージョンをお探しなら, https://ryujinx.org/ で Kenji-NX をダウンロードしてください.", "DialogRestartRequiredMessage": "再起動が必要", "DialogThemeRestartMessage": "テーマがセーブされました. テーマを適用するには再起動が必要です.", "DialogThemeRestartSubMessage": "再起動しますか", @@ -477,7 +477,7 @@ "DialogErrorAppletErrorExceptionMessage": "エラーアプレットダイアログ表示エラー: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nこのエラーへの対処方法については, セットアップガイドを参照してください.", - "DialogUserErrorDialogTitle": "Ryujinx エラー ({0})", + "DialogUserErrorDialogTitle": "Kenji-NX エラー ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "API からの情報取得中にエラーが発生しました.", "DialogAmiiboApiConnectErrorMessage": "Amiibo API サーバに接続できませんでした. サーバがダウンしているか, インターネット接続に問題があるかもしれません.", @@ -527,7 +527,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "別のゲームを起動する前に, エミュレーションを中止またはエミュレータを閉じてください.", "DialogUpdateAddUpdateErrorMessage": "選択されたファイルはこのタイトル用のアップデートではありません!", "DialogSettingsBackendThreadingWarningTitle": "警告 - バックエンドスレッディング", - "DialogSettingsBackendThreadingWarningMessage": "このオプションの変更を完全に適用するには Ryujinx の再起動が必要です. プラットフォームによっては, Ryujinx のものを使用する前に手動でドライバ自身のマルチスレッディングを無効にする必要があるかもしれません.", + "DialogSettingsBackendThreadingWarningMessage": "このオプションの変更を完全に適用するには Kenji-NX の再起動が必要です. プラットフォームによっては, Kenji-NX のものを使用する前に手動でドライバ自身のマルチスレッディングを無効にする必要があるかもしれません.", "DialogModManagerDeletionWarningMessage": "以下のModを削除しようとしています: {0}\n\n続行してもよろしいですか?", "DialogModManagerDeletionAllWarningMessage": "このタイトルの Mod をすべて削除しようとしています.\n\n続行してもよろしいですか?", "SettingsTabGraphicsFeaturesOptions": "機能", @@ -540,15 +540,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "プロファイル名に無効な文字が含まれています. 再度試してみてください.", "MenuBarOptionsPauseEmulation": "一時停止", "MenuBarOptionsResumeEmulation": "再開", - "AboutUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx のウェブサイトを開きます.", - "AboutDisclaimerMessage": "Ryujinx は Nintendo™ および\nそのパートナー企業とは一切関係ありません.", + "AboutUrlTooltipMessage": "クリックするとデフォルトのブラウザで Kenji-NX のウェブサイトを開きます.", + "AboutDisclaimerMessage": "Kenji-NX は Nintendo™ および\nそのパートナー企業とは一切関係ありません.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) は\nAmiibo エミュレーションに使用されています.", - "AboutPatreonUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx の Patreon ページを開きます.", - "AboutGithubUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx の Github ページを開きます.", - "AboutDiscordUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx の Discord サーバを開きます.", - "AboutTwitterUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx の Twitter ページを開きます.", - "AboutRyujinxAboutTitle": "Ryujinx について:", - "AboutRyujinxAboutContent": "Ryujinx は Nintendo Switch™ のエミュレータです.\n\n貢献したい開発者の方は GitHub で詳細をご確認ください.", + "AboutPatreonUrlTooltipMessage": "クリックするとデフォルトのブラウザで Kenji-NX の Patreon ページを開きます.", + "AboutGithubUrlTooltipMessage": "クリックするとデフォルトのブラウザで Kenji-NX の Github ページを開きます.", + "AboutDiscordUrlTooltipMessage": "クリックするとデフォルトのブラウザで Kenji-NX の Discord サーバを開きます.", + "AboutTwitterUrlTooltipMessage": "クリックするとデフォルトのブラウザで Kenji-NX の Twitter ページを開きます.", + "AboutRyujinxAboutTitle": "Kenji-NX について:", + "AboutRyujinxAboutContent": "Kenji-NX は Nintendo Switch™ のエミュレータです.\n\n貢献したい開発者の方は GitHub で詳細をご確認ください.", "AboutRyujinxMaintainersTitle": "開発者:", "AboutRyujinxFormerMaintainersTitle": "以前の開発者:", "AboutRyujinxMaintainersContentTooltipMessage": "クリックするとデフォルトのブラウザで 貢献者のページを開きます.", @@ -575,7 +575,7 @@ "OrderDescending": "降順", "SettingsTabGraphicsFeatures": "機能", "ErrorWindowTitle": "エラーウインドウ", - "ToggleDiscordTooltip": "Discord の \"現在プレイ中\" アクティビティに Ryujinx を表示するかどうかを選択します", + "ToggleDiscordTooltip": "Discord の \"現在プレイ中\" アクティビティに Kenji-NX を表示するかどうかを選択します", "AddGameDirBoxTooltip": "リストに追加するゲームディレクトリを入力します", "AddGameDirTooltip": "リストにゲームディレクトリを追加します", "RemoveGameDirTooltip": "選択したゲームディレクトリを削除します", @@ -597,7 +597,7 @@ "MemoryManagerTooltip": "ゲストメモリのマップ/アクセス方式を変更します. エミュレートされるCPUのパフォーマンスに大きな影響を与えます.\n\nよくわからない場合は「ホスト,チェックなし」を設定してください.", "MemoryManagerSoftwareTooltip": "アドレス変換にソフトウェアページテーブルを使用します. 非常に正確ですがパフォーマンスが大きく低下します.", "MemoryManagerHostTooltip": "ホストのアドレス空間にメモリを直接マップします.JITのコンパイルと実行速度が大きく向上します.", - "MemoryManagerUnsafeTooltip": "メモリを直接マップしますが, アクセス前にゲストのアドレス空間内のアドレスをマスクしません. より高速になりますが, 安全性が犠牲になります. ゲストアプリケーションは Ryujinx のどこからでもメモリにアクセスできるので,このモードでは信頼できるプログラムだけを実行するようにしてください.", + "MemoryManagerUnsafeTooltip": "メモリを直接マップしますが, アクセス前にゲストのアドレス空間内のアドレスをマスクしません. より高速になりますが, 安全性が犠牲になります. ゲストアプリケーションは Kenji-NX のどこからでもメモリにアクセスできるので,このモードでは信頼できるプログラムだけを実行するようにしてください.", "UseHypervisorTooltip": "JIT の代わりにハイパーバイザーを使用します. 利用可能な場合, パフォーマンスが大幅に向上しますが, 現在の状態では不安定になる可能性があります.", "DRamTooltip": "エミュレートされたシステムのメモリ容量を 4GiB から 6GiB に増加します.\n\n高解像度のテクスチャパックや 4K解像度の mod を使用する場合に有用です. パフォーマンスを改善するものではありません.\n\nよくわからない場合はオフのままにしてください.", "IgnoreMissingServicesTooltip": "未実装の Horizon OS サービスを無視します. 特定のゲームにおいて起動時のクラッシュを回避できる場合があります.\n\nよくわからない場合はオフのままにしてください.", @@ -623,14 +623,14 @@ "DebugLogTooltip": "デバッグログメッセージをコンソールに出力します.\n\nログが読みづらくなり,エミュレータのパフォーマンスが低下するため,開発者から特別な指示がある場合のみ使用してください.", "LoadApplicationFileTooltip": "ロードする Switch 互換のファイルを選択するためファイルエクスプローラを開きます", "LoadApplicationFolderTooltip": "ロードする Switch 互換の展開済みアプリケーションを選択するためファイルエクスプローラを開きます", - "OpenRyujinxFolderTooltip": "Ryujinx ファイルシステムフォルダを開きます", + "OpenRyujinxFolderTooltip": "Kenji-NX ファイルシステムフォルダを開きます", "OpenRyujinxLogsTooltip": "ログが格納されるフォルダを開きます", - "ExitTooltip": "Ryujinx を終了します", + "ExitTooltip": "Kenji-NX を終了します", "OpenSettingsTooltip": "設定ウインドウを開きます", "OpenProfileManagerTooltip": "ユーザプロファイル管理ウインドウを開きます", "StopEmulationTooltip": "ゲームのエミュレーションを中止してゲーム選択画面に戻ります", - "CheckUpdatesTooltip": "Ryujinx のアップデートを確認します", - "OpenAboutTooltip": "Ryujinx についてのウインドウを開きます", + "CheckUpdatesTooltip": "Kenji-NX のアップデートを確認します", + "OpenAboutTooltip": "Kenji-NX についてのウインドウを開きます", "GridSize": "グリッドサイズ", "GridSizeTooltip": "グリッドサイズを変更します", "SettingsTabSystemSystemLanguageBrazilianPortuguese": "ポルトガル語(ブラジル)", @@ -644,7 +644,7 @@ "GameListContextMenuManageModToolTip": "Modを管理します", "GameListContextMenuManageMod": "Manage Mods", "ControllerSettingsStickRange": "範囲:", - "DialogStopEmulationTitle": "Ryujinx - エミュレーションを中止", + "DialogStopEmulationTitle": "Kenji-NX - エミュレーションを中止", "DialogStopEmulationMessage": "エミュレーションを中止してよろしいですか?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "音声", @@ -652,7 +652,7 @@ "SettingsTabNetworkConnection": "ネットワーク接続", "SettingsTabCpuCache": "CPU キャッシュ", "SettingsTabCpuMemory": "CPU メモリ", - "DialogUpdaterFlatpakNotSupportedMessage": "FlatHub を使用して Ryujinx をアップデートしてください.", + "DialogUpdaterFlatpakNotSupportedMessage": "FlatHub を使用して Kenji-NX をアップデートしてください.", "UpdaterDisabledWarningTitle": "アップデータは無効です!", "ControllerSettingsRotate90": "時計回りに 90° 回転", "IconSize": "アイコンサイズ", @@ -674,8 +674,8 @@ "OpenSetupGuideMessage": "セットアップガイドを開く", "NoUpdate": "アップデートなし", "TitleUpdateVersionLabel": "バージョン {0} - {1}", - "RyujinxInfo": "Ryujinx - 情報", - "RyujinxConfirm": "Ryujinx - 確認", + "RyujinxInfo": "Kenji-NX - 情報", + "RyujinxConfirm": "Kenji-NX - 確認", "FileDialogAllTypes": "すべての種別", "Never": "決して", "SwkbdMinCharacters": "最低 {0} 文字必要です", @@ -709,7 +709,7 @@ "OpenFileDialogTitle": "開くファイルを選択", "OpenFolderDialogTitle": "展開されたゲームフォルダを選択", "AllSupportedFormats": "すべての対応フォーマット", - "RyujinxUpdater": "Ryujinx アップデータ", + "RyujinxUpdater": "Kenji-NX アップデータ", "SettingsTabHotkeys": "キーボード ホットキー", "SettingsTabHotkeysHotkeys": "キーボード ホットキー", "SettingsTabHotkeysToggleVsyncHotkey": "VSync 切り替え:", @@ -757,10 +757,10 @@ "SettingsEnableTextureRecompressionTooltip": "VRAM使用量を減らすためにASTCテクスチャを圧縮します.\n\nこのテクスチャフォーマットを使用するゲームには, Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder, The Legend of Zelda: Tears of the Kingdomが含まれます.\n\nVRAMが4GB以下のグラフィックカードでは, これらのゲームを実行中にクラッシュする可能性があります.\n\n前述のゲームでVRAMが不足している場合のみ有効にしてください. 不明な場合はオフにしてください.", "SettingsTabGraphicsPreferredGpu": "優先使用するGPU", "SettingsTabGraphicsPreferredGpuTooltip": "Vulkanグラフィックスバックエンドで使用されるグラフィックスカードを選択します.\n\nOpenGLが使用するGPUには影響しません.\n\n不明な場合は, \"dGPU\" としてフラグが立っているGPUに設定します. ない場合はそのままにします.", - "SettingsAppRequiredRestartMessage": "Ryujinx の再起動が必要です", + "SettingsAppRequiredRestartMessage": "Kenji-NX の再起動が必要です", "SettingsGpuBackendRestartMessage": "グラフィックスバックエンドまたはGPUの設定が変更されました. 変更を適用するには再起動する必要があります", "SettingsGpuBackendRestartSubMessage": "今すぐ再起動しますか?", - "RyujinxUpdaterMessage": "Ryujinx を最新版にアップデートしますか?", + "RyujinxUpdaterMessage": "Kenji-NX を最新版にアップデートしますか?", "SettingsTabHotkeysVolumeUpHotkey": "音量を上げる:", "SettingsTabHotkeysVolumeDownHotkey": "音量を下げる:", "SettingsEnableMacroHLE": "マクロの高レベルエミュレーション (HLE) を有効にする", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Kenjinx/Assets/Locales/ko_KR.json similarity index 96% rename from src/Ryujinx/Assets/Locales/ko_KR.json rename to src/Kenjinx/Assets/Locales/ko_KR.json index 965250dc3..9bededdef 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Kenjinx/Assets/Locales/ko_KR.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "_압축을 푼 게임 불러오기", "MenuBarFileLoadDlcFromFolder": "폴더에서 DLC 불러오기", "MenuBarFileLoadTitleUpdatesFromFolder": "폴더에서 타이틀 업데이트 불러오기", - "MenuBarFileOpenEmuFolder": "Ryujinx 폴더 열기", + "MenuBarFileOpenEmuFolder": "Kenji-NX 폴더 열기", "MenuBarFileOpenScreenshotsFolder": "스크린샷 폴더 열기", "MenuBarFileOpenLogsFolder": "로그 폴더 열기", "MenuBarFileExit": "_종료", @@ -431,27 +431,27 @@ "ControllerSettingsRumbleWeakMultiplier": "약한 진동 증폭기", "DialogMessageSaveNotAvailableMessage": "{0} [{1:x16}]에 대한 저장 데이터가 없음", "DialogMessageSaveNotAvailableCreateSaveMessage": "이 게임에 대한 저장 데이터를 생성하겠습니까?", - "DialogConfirmationTitle": "Ryujinx - 확인", - "DialogUpdaterTitle": "Ryujinx - 업데이터", - "DialogErrorTitle": "Ryujinx - 오류", - "DialogWarningTitle": "Ryujinx - 경고", - "DialogExitTitle": "Ryujinx - 종료", - "DialogErrorMessage": "Ryujinx 오류 발생", + "DialogConfirmationTitle": "Kenji-NX - 확인", + "DialogUpdaterTitle": "Kenji-NX - 업데이터", + "DialogErrorTitle": "Kenji-NX - 오류", + "DialogWarningTitle": "Kenji-NX - 경고", + "DialogExitTitle": "Kenji-NX - 종료", + "DialogErrorMessage": "Kenji-NX 오류 발생", "DialogExitMessage": "Ryujinx를 종료하겠습니까?", "DialogExitSubMessage": "저장하지 않은 모든 데이터는 손실됩니다!", "DialogMessageCreateSaveErrorMessage": "지정된 저장 데이터를 작성하는 중에 오류 발생: {0}", "DialogMessageFindSaveErrorMessage": "지정된 저장 데이터를 찾는 중에 오류 발생: {0}", "FolderDialogExtractTitle": "추출할 폴더 선택", "DialogNcaExtractionMessage": "{1}에서 {0} 섹션을 추출하는 중...", - "DialogNcaExtractionTitle": "Ryujinx - NCA 섹션 추출기", + "DialogNcaExtractionTitle": "Kenji-NX - NCA 섹션 추출기", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "추출 실패하였습니다. 선택한 파일에 기본 NCA가 없습니다.", "DialogNcaExtractionCheckLogErrorMessage": "추출 실패하였습니다. 자세한 내용은 로그 파일을 읽으세요.", "DialogNcaExtractionSuccessMessage": "추출이 성공적으로 완료되었습니다.", - "DialogUpdaterConvertFailedMessage": "현재 Ryujinx 버전을 변환하지 못했습니다.", + "DialogUpdaterConvertFailedMessage": "현재 Kenji-NX 버전을 변환하지 못했습니다.", "DialogUpdaterCancelUpdateMessage": "업데이트 취소 중 입니다!", "DialogUpdaterAlreadyOnLatestVersionMessage": "이미 최신 버전의 Ryujinx를 사용하고 있습니다!", "DialogUpdaterFailedToGetVersionMessage": "GitHub 릴리스에서 릴리스 정보를 가져오는 중에 오류가 발생했습니다. 이는 GitHub Actions에서 새 릴리스를 컴파일하는 경우 발생할 수 있습니다. 몇 분 후에 다시 시도하세요.", - "DialogUpdaterConvertFailedGithubMessage": "Github 개정에서 받은 Ryujinx 버전을 변환하지 못했습니다.", + "DialogUpdaterConvertFailedGithubMessage": "Github 개정에서 받은 Kenji-NX 버전을 변환하지 못했습니다.", "DialogUpdaterDownloadingMessage": "업데이트 다운로드 중...", "DialogUpdaterExtractionMessage": "업데이트 추출 중...", "DialogUpdaterRenamingMessage": "업데이트 이름 바꾸는 중...", @@ -543,13 +543,13 @@ "DialogProfileInvalidProfileNameErrorMessage": "파일 이름에 잘못된 문자가 포함되어 있습니다. 다시 시도하세요.", "MenuBarOptionsPauseEmulation": "일시 정지", "MenuBarOptionsResumeEmulation": "다시 시작", - "AboutUrlTooltipMessage": "기본 브라우저에서 Ryujinx 웹사이트를 열려면 클릭하세요.", + "AboutUrlTooltipMessage": "기본 브라우저에서 Kenji-NX 웹사이트를 열려면 클릭하세요.", "AboutDisclaimerMessage": "Ryujinx는 닌텐도™,\n또는 그 파트너와 제휴한 바가 없습니다.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com)는\nAmiibo 에뮬레이션에 사용됩니다.", - "AboutPatreonUrlTooltipMessage": "기본 브라우저에서 Ryujinx Patreon 페이지를 열려면 클릭하세요.", - "AboutGithubUrlTooltipMessage": "기본 브라우저에서 Ryujinx GitHub 페이지를 열려면 클릭하세요.", - "AboutDiscordUrlTooltipMessage": "기본 브라우저에서 Ryujinx 디스코드 서버에 대한 초대를 열려면 클릭하세요.", - "AboutTwitterUrlTooltipMessage": "기본 브라우저에서 Ryujinx 트위터 페이지를 열려면 클릭하세요.", + "AboutPatreonUrlTooltipMessage": "기본 브라우저에서 Kenji-NX Patreon 페이지를 열려면 클릭하세요.", + "AboutGithubUrlTooltipMessage": "기본 브라우저에서 Kenji-NX GitHub 페이지를 열려면 클릭하세요.", + "AboutDiscordUrlTooltipMessage": "기본 브라우저에서 Kenji-NX 디스코드 서버에 대한 초대를 열려면 클릭하세요.", + "AboutTwitterUrlTooltipMessage": "기본 브라우저에서 Kenji-NX 트위터 페이지를 열려면 클릭하세요.", "AboutRyujinxAboutTitle": "정보 :", "AboutRyujinxAboutContent": "Ryujinx는 닌텐도 스위치™용 에뮬레이터입니다.\n\n기여에 참여하고자 하는 개발자는 GitHub 자세한 내용을 확인할 수 있습니다.", "AboutRyujinxMaintainersTitle": "유지 관리 :", @@ -627,14 +627,14 @@ "DebugLogTooltip": "콘솔에 디버그 로그 메시지를 인쇄합니다.\n\n로그를 읽기 어렵게 만들고 에뮬레이터 성능을 악화시키므로 직원이 구체적으로 지시한 경우에만 사용하세요.", "LoadApplicationFileTooltip": "파일 탐색기를 열어 불러올 스위치 호환 파일 선택", "LoadApplicationFolderTooltip": "파일 탐색기를 열어 불러올 스위치 호환 압축 해제 응용 프로그램 선택", - "OpenRyujinxFolderTooltip": "Ryujinx 파일 시스템 폴더 열기", - "OpenScreenshotFolderTooltip": "Ryujinx 스크린샷 폴더 열기", + "OpenRyujinxFolderTooltip": "Kenji-NX 파일 시스템 폴더 열기", + "OpenScreenshotFolderTooltip": "Kenji-NX 스크린샷 폴더 열기", "OpenRyujinxLogsTooltip": "로그가 기록된 폴더 열기", - "ExitTooltip": "Ryujinx 종료", + "ExitTooltip": "Kenji-NX 종료", "OpenSettingsTooltip": "설정 창 열기", "OpenProfileManagerTooltip": "사용자 프로파일 관리자 창 열기", "StopEmulationTooltip": "현재 게임의 에뮬레이션을 중지하고 게임 선택으로 돌아감", - "CheckUpdatesTooltip": "Ryujinx 업데이트 확인", + "CheckUpdatesTooltip": "Kenji-NX 업데이트 확인", "OpenAboutTooltip": "정보 창 열기", "GridSize": "격자 크기", "GridSizeTooltip": "격자 항목의 크기 변경", @@ -649,7 +649,7 @@ "GameListContextMenuManageModToolTip": "Mod 관리", "GameListContextMenuManageMod": "Mod 관리", "ControllerSettingsStickRange": "범위 :", - "DialogStopEmulationTitle": "Ryujinx - 에뮬레이션 중지", + "DialogStopEmulationTitle": "Kenji-NX - 에뮬레이션 중지", "DialogStopEmulationMessage": "에뮬레이션을 중지하겠습니까?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "오디오", @@ -679,8 +679,8 @@ "OpenSetupGuideMessage": "설정 가이드 열기", "NoUpdate": "업데이트 없음", "TitleUpdateVersionLabel": "버전 {0}", - "RyujinxInfo": "Ryujinx - 정보", - "RyujinxConfirm": "Ryujinx - 확인", + "RyujinxInfo": "Kenji-NX - 정보", + "RyujinxConfirm": "Kenji-NX - 확인", "FileDialogAllTypes": "모든 유형", "Never": "절대 안 함", "SwkbdMinCharacters": "{0}자 이상이어야 함", @@ -714,7 +714,7 @@ "OpenFileDialogTitle": "지원되는 파일을 선택", "OpenFolderDialogTitle": "압축을 푼 게임이 있는 폴더 선택", "AllSupportedFormats": "지원되는 모든 형식", - "RyujinxUpdater": "Ryujinx 업데이터", + "RyujinxUpdater": "Kenji-NX 업데이터", "SettingsTabHotkeys": "키보드 단축키", "SettingsTabHotkeysHotkeys": "키보드 단축키", "SettingsTabHotkeysToggleVsyncHotkey": "수직 동기화 전환 :", @@ -762,7 +762,7 @@ "SettingsEnableTextureRecompressionTooltip": "ASTC 텍스처를 압축하여 VRAM 사용량을 줄입니다.\n\n애스트럴 체인, 바요네타 3, 파이어 엠블렘 인게이지, 메트로이드 프라임 리마스터, 슈퍼 마리오브라더스 원더, 젤다의 전설: 티어스 오브 더 킹덤 등이 이러한 텍스처 포맷을 사용합니다.\n\nVRAM이 4GiB 이하인 그래픽 카드로 위와 같은 게임들을 구동할시 특정 지점에서 크래시가 발생할 수 있습니다.\n\n위에 서술된 게임들에서 VRAM이 부족한 경우에만 해당 옵션을 켜고, 그 외의 경우에는 끄기를 권장드립니다.", "SettingsTabGraphicsPreferredGpu": "선호하는 GPU", "SettingsTabGraphicsPreferredGpuTooltip": "Vulkan 그래픽 후단부와 함께 사용할 그래픽 카드를 선택하세요.\n\nOpenGL이 사용할 GPU에는 영향을 미치지 않습니다.\n\n확실하지 않은 경우 \"dGPU\" 플래그가 지정된 GPU로 설정하세요. 없는 경우, 그대로 두세요.", - "SettingsAppRequiredRestartMessage": "Ryujinx 다시 시작 필요", + "SettingsAppRequiredRestartMessage": "Kenji-NX 다시 시작 필요", "SettingsGpuBackendRestartMessage": "그래픽 후단부 또는 GPU 설정이 수정되었습니다. 적용하려면 다시 시작해야 합니다.", "SettingsGpuBackendRestartSubMessage": "지금 다시 시작하겠습니까?", "RyujinxUpdaterMessage": "Ryujinx를 최신 버전으로 업데이트하겠습니까?", @@ -808,7 +808,7 @@ "AboutChangelogButtonTooltipMessage": "기본 브라우저에서 이 버전의 변경 로그를 열려면 클릭합니다.", "SettingsTabNetworkMultiplayer": "멀티 플레이어", "MultiplayerMode": "모드 :", - "MultiplayerModeTooltip": "LDN 멀티플레이어 모드를 변경합니다.\n\nLdnMitm은 로컬 무선/로컬 플레이 기능을 수정하여 LAN 모드에 있는 것처럼 만들어 로컬이나 동일한 네트워크 상에 있는 다른 Ryujinx 인스턴스나 커펌된 닌텐도 스위치 콘솔(ldn_mitm 모듈 설치 필요)과 연결할 수 있습니다.\n\n멀티플레이어 모드는 모든 플레이어들이 동일한 게임 버전을 요구합니다. 예를 들어 슈퍼 스매시브라더스 얼티밋 v13.0.1 사용자는 v13.0.0 사용자와 연결할 수 없습니다.\n\n해당 옵션에 대해 잘 모른다면 비활성화해두세요.", + "MultiplayerModeTooltip": "LDN 멀티플레이어 모드를 변경합니다.\n\nLdnMitm은 로컬 무선/로컬 플레이 기능을 수정하여 LAN 모드에 있는 것처럼 만들어 로컬이나 동일한 네트워크 상에 있는 다른 Kenji-NX 인스턴스나 커펌된 닌텐도 스위치 콘솔(ldn_mitm 모듈 설치 필요)과 연결할 수 있습니다.\n\n멀티플레이어 모드는 모든 플레이어들이 동일한 게임 버전을 요구합니다. 예를 들어 슈퍼 스매시브라더스 얼티밋 v13.0.1 사용자는 v13.0.0 사용자와 연결할 수 없습니다.\n\n해당 옵션에 대해 잘 모른다면 비활성화해두세요.", "MultiplayerModeDisabled": "비활성화됨", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Kenjinx/Assets/Locales/pl_PL.json similarity index 93% rename from src/Ryujinx/Assets/Locales/pl_PL.json rename to src/Kenjinx/Assets/Locales/pl_PL.json index f0b82fe25..b1b86fcab 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Kenjinx/Assets/Locales/pl_PL.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "Załaduj _rozpakowaną grę", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "Otwórz folder Ryujinx", + "MenuBarFileOpenEmuFolder": "Otwórz folder Kenji-NX", "MenuBarFileOpenLogsFolder": "Otwórz folder plików dziennika zdarzeń", "MenuBarFileExit": "_Wyjdź", "MenuBarOptions": "_Opcje", @@ -95,11 +95,11 @@ "StatusBarSystemVersion": "Wersja systemu: {0}", "LinuxVmMaxMapCountDialogTitle": "Wykryto niski limit dla przypisań pamięci", "LinuxVmMaxMapCountDialogTextPrimary": "Czy chcesz zwiększyć wartość vm.max_map_count do {0}", - "LinuxVmMaxMapCountDialogTextSecondary": "Niektóre gry mogą próbować przypisać sobie więcej pamięci niż obecnie, jest to dozwolone. Ryujinx ulegnie awarii, gdy limit zostanie przekroczony.", + "LinuxVmMaxMapCountDialogTextSecondary": "Niektóre gry mogą próbować przypisać sobie więcej pamięci niż obecnie, jest to dozwolone. Kenji-NX ulegnie awarii, gdy limit zostanie przekroczony.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Tak, do następnego ponownego uruchomienia", "LinuxVmMaxMapCountDialogButtonPersistent": "Tak, permanentnie ", "LinuxVmMaxMapCountWarningTextPrimary": "Maksymalna ilość przypisanej pamięci jest mniejsza niż zalecana.", - "LinuxVmMaxMapCountWarningTextSecondary": "Obecna wartość vm.max_map_count ({0}) jest mniejsza niż {1}. Niektóre gry mogą próbować stworzyć więcej mapowań pamięci niż obecnie jest to dozwolone. Ryujinx napotka crash, gdy dojdzie do takiej sytuacji.\n\nMożesz chcieć ręcznie zwiększyć limit lub zainstalować pkexec, co pozwala Ryujinx na pomoc w tym zakresie.", + "LinuxVmMaxMapCountWarningTextSecondary": "Obecna wartość vm.max_map_count ({0}) jest mniejsza niż {1}. Niektóre gry mogą próbować stworzyć więcej mapowań pamięci niż obecnie jest to dozwolone. Kenji-NX napotka crash, gdy dojdzie do takiej sytuacji.\n\nMożesz chcieć ręcznie zwiększyć limit lub zainstalować pkexec, co pozwala Kenji-NX na pomoc w tym zakresie.", "Settings": "Ustawienia", "SettingsTabGeneral": "Interfejs użytkownika", "SettingsTabGeneralGeneral": "Ogólne", @@ -428,42 +428,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Mnożnik słabych wibracji", "DialogMessageSaveNotAvailableMessage": "Nie ma zapisanych danych dla {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Czy chcesz utworzyć zapis danych dla tej gry?", - "DialogConfirmationTitle": "Ryujinx - Potwierdzenie", - "DialogUpdaterTitle": "Ryujinx - Asystent aktualizacji", - "DialogErrorTitle": "Ryujinx - Błąd", - "DialogWarningTitle": "Ryujinx - Ostrzeżenie", - "DialogExitTitle": "Ryujinx - Wyjdź", - "DialogErrorMessage": "Ryujinx napotkał błąd", - "DialogExitMessage": "Czy na pewno chcesz zamknąć Ryujinx?", + "DialogConfirmationTitle": "Kenji-NX - Potwierdzenie", + "DialogUpdaterTitle": "Kenji-NX - Asystent aktualizacji", + "DialogErrorTitle": "Kenji-NX - Błąd", + "DialogWarningTitle": "Kenji-NX - Ostrzeżenie", + "DialogExitTitle": "Kenji-NX - Wyjdź", + "DialogErrorMessage": "Kenji-NX napotkał błąd", + "DialogExitMessage": "Czy na pewno chcesz zamknąć Kenji-NX?", "DialogExitSubMessage": "Wszystkie niezapisane dane zostaną utracone!", "DialogMessageCreateSaveErrorMessage": "Wystąpił błąd podczas tworzenia określonych zapisanych danych: {0}", "DialogMessageFindSaveErrorMessage": "Wystąpił błąd podczas próby znalezienia określonych zapisanych danych: {0}", "FolderDialogExtractTitle": "Wybierz folder, do którego chcesz rozpakować", "DialogNcaExtractionMessage": "Wypakowywanie sekcji {0} z {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Asystent wypakowania sekcji NCA", + "DialogNcaExtractionTitle": "Kenji-NX - Asystent wypakowania sekcji NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Niepowodzenie podczas wypakowywania. W wybranym pliku nie było głównego NCA.", "DialogNcaExtractionCheckLogErrorMessage": "Niepowodzenie podczas wypakowywania. Przeczytaj plik dziennika, aby uzyskać więcej informacji.", "DialogNcaExtractionSuccessMessage": "Wypakowywanie zakończone pomyślnie.", - "DialogUpdaterConvertFailedMessage": "Nie udało się przekonwertować obecnej wersji Ryujinx.", + "DialogUpdaterConvertFailedMessage": "Nie udało się przekonwertować obecnej wersji Kenji-NX.", "DialogUpdaterCancelUpdateMessage": "Anulowanie aktualizacji!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Używasz już najnowszej wersji Ryujinx!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Używasz już najnowszej wersji Kenji-NX!", "DialogUpdaterFailedToGetVersionMessage": "Wystąpił błąd podczas próby uzyskania informacji o obecnej wersji z GitHub Release. Może to być spowodowane nową wersją kompilowaną przez GitHub Actions. Spróbuj ponownie za kilka minut.", - "DialogUpdaterConvertFailedGithubMessage": "Nie udało się przekonwertować otrzymanej wersji Ryujinx z Github Release.", + "DialogUpdaterConvertFailedGithubMessage": "Nie udało się przekonwertować otrzymanej wersji Kenji-NX z Github Release.", "DialogUpdaterDownloadingMessage": "Pobieranie aktualizacji...", "DialogUpdaterExtractionMessage": "Wypakowywanie Aktualizacji...", "DialogUpdaterRenamingMessage": "Zmiana Nazwy Aktualizacji...", "DialogUpdaterAddingFilesMessage": "Dodawanie Nowej Aktualizacji...", "DialogUpdaterCompleteMessage": "Aktualizacja Zakończona!", - "DialogUpdaterRestartMessage": "Czy chcesz teraz zrestartować Ryujinx?", + "DialogUpdaterRestartMessage": "Czy chcesz teraz zrestartować Kenji-NX?", "DialogUpdaterNoInternetMessage": "Nie masz połączenia z Internetem!", "DialogUpdaterNoInternetSubMessage": "Sprawdź, czy masz działające połączenie internetowe!", - "DialogUpdaterDirtyBuildMessage": "Nie możesz zaktualizować Dirty wersji Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Pobierz Ryujinx ze strony https://ryujinx.org/, jeśli szukasz obsługiwanej wersji.", + "DialogUpdaterDirtyBuildMessage": "Nie możesz zaktualizować Dirty wersji Kenji-NX!", + "DialogUpdaterDirtyBuildSubMessage": "Pobierz Kenji-NX ze strony https://ryujinx.org/, jeśli szukasz obsługiwanej wersji.", "DialogRestartRequiredMessage": "Wymagane Ponowne Uruchomienie", "DialogThemeRestartMessage": "Motyw został zapisany. Aby zastosować motyw, konieczne jest ponowne uruchomienie.", "DialogThemeRestartSubMessage": "Czy chcesz uruchomić ponownie?", "DialogFirmwareInstallEmbeddedMessage": "Czy chcesz zainstalować firmware wbudowany w tę grę? (Firmware {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "Nie znaleziono zainstalowanego oprogramowania, ale Ryujinx był w stanie zainstalować oprogramowanie {0} z dostarczonej gry.\n\nEmulator uruchomi się teraz.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "Nie znaleziono zainstalowanego oprogramowania, ale Kenji-NX był w stanie zainstalować oprogramowanie {0} z dostarczonej gry.\n\nEmulator uruchomi się teraz.", "DialogFirmwareNoFirmwareInstalledMessage": "Brak Zainstalowanego Firmware'u", "DialogFirmwareInstalledMessage": "Firmware {0} został zainstalowany", "DialogInstallFileTypesSuccessMessage": "Pomyślnie zainstalowano typy plików!", @@ -491,7 +491,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Zamierzasz usunąć cache Shaderów dla :\n\n{0}\n\nNa pewno chcesz kontynuować?", "DialogShaderDeletionErrorMessage": "Błąd czyszczenia cache Shaderów w {0}: {1}", - "DialogRyujinxErrorMessage": "Ryujinx napotkał błąd", + "DialogRyujinxErrorMessage": "Kenji-NX napotkał błąd", "DialogInvalidTitleIdErrorMessage": "Błąd UI: Wybrana gra nie miała prawidłowego ID tytułu", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "Nie znaleziono prawidłowego firmware'u systemowego w {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Zainstaluj Firmware {0}", @@ -527,7 +527,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Zatrzymaj emulację lub zamknij emulator przed uruchomieniem innej gry.", "DialogUpdateAddUpdateErrorMessage": "Określony plik nie zawiera aktualizacji dla wybranego tytułu!", "DialogSettingsBackendThreadingWarningTitle": "Ostrzeżenie — Wątki Backend", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx musi zostać ponownie uruchomiony po zmianie tej opcji, aby działał w pełni. W zależności od platformy może być konieczne ręczne wyłączenie sterownika wielowątkowości podczas korzystania z Ryujinx.", + "DialogSettingsBackendThreadingWarningMessage": "Kenji-NX musi zostać ponownie uruchomiony po zmianie tej opcji, aby działał w pełni. W zależności od platformy może być konieczne ręczne wyłączenie sterownika wielowątkowości podczas korzystania z Kenji-NX.", "DialogModManagerDeletionWarningMessage": "Zamierzasz usunąć modyfikacje: {0}\n\nCzy na pewno chcesz kontynuować?", "DialogModManagerDeletionAllWarningMessage": "Zamierzasz usunąć wszystkie modyfikacje dla wybranego tytułu: {0}\n\nCzy na pewno chcesz kontynuować?", "SettingsTabGraphicsFeaturesOptions": "Funkcje", @@ -540,15 +540,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "Nazwa pliku zawiera nieprawidłowe znaki. Proszę spróbuj ponownie.", "MenuBarOptionsPauseEmulation": "Pauza", "MenuBarOptionsResumeEmulation": "Wznów", - "AboutUrlTooltipMessage": "Kliknij, aby otworzyć stronę Ryujinx w domyślnej przeglądarce.", - "AboutDisclaimerMessage": "Ryujinx nie jest w żaden sposób powiązany z Nintendo™,\nani z żadnym z jej partnerów.", + "AboutUrlTooltipMessage": "Kliknij, aby otworzyć stronę Kenji-NX w domyślnej przeglądarce.", + "AboutDisclaimerMessage": "Kenji-NX nie jest w żaden sposób powiązany z Nintendo™,\nani z żadnym z jej partnerów.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) jest używane\nw naszej emulacji Amiibo.", - "AboutPatreonUrlTooltipMessage": "Kliknij, aby otworzyć stronę Patreon Ryujinx w domyślnej przeglądarce.", - "AboutGithubUrlTooltipMessage": "Kliknij, aby otworzyć stronę GitHub Ryujinx w domyślnej przeglądarce.", - "AboutDiscordUrlTooltipMessage": "Kliknij, aby otworzyć zaproszenie na serwer Discord Ryujinx w domyślnej przeglądarce.", - "AboutTwitterUrlTooltipMessage": "Kliknij, aby otworzyć stronę Twitter Ryujinx w domyślnej przeglądarce.", + "AboutPatreonUrlTooltipMessage": "Kliknij, aby otworzyć stronę Patreon Kenji-NX w domyślnej przeglądarce.", + "AboutGithubUrlTooltipMessage": "Kliknij, aby otworzyć stronę GitHub Kenji-NX w domyślnej przeglądarce.", + "AboutDiscordUrlTooltipMessage": "Kliknij, aby otworzyć zaproszenie na serwer Discord Kenji-NX w domyślnej przeglądarce.", + "AboutTwitterUrlTooltipMessage": "Kliknij, aby otworzyć stronę Twitter Kenji-NX w domyślnej przeglądarce.", "AboutRyujinxAboutTitle": "O Aplikacji:", - "AboutRyujinxAboutContent": "Ryujinx to emulator Nintendo Switch™.\n\nDeweloperzy zainteresowani współpracą mogą dowiedzieć się więcej na naszym GitHubie.", + "AboutRyujinxAboutContent": "Kenji-NX to emulator Nintendo Switch™.\n\nDeweloperzy zainteresowani współpracą mogą dowiedzieć się więcej na naszym GitHubie.", "AboutRyujinxMaintainersTitle": "Utrzymywany Przez:", "AboutRyujinxFormerMaintainersTitle": "Dawniej Utrzymywane Przez:", "AboutRyujinxMaintainersContentTooltipMessage": "Kliknij, aby otworzyć stronę Współtwórcy w domyślnej przeglądarce.", @@ -575,7 +575,7 @@ "OrderDescending": "Malejąco", "SettingsTabGraphicsFeatures": "Funkcje i Ulepszenia", "ErrorWindowTitle": "Okno Błędu", - "ToggleDiscordTooltip": "Wybierz, czy chcesz wyświetlać Ryujinx w swojej \"aktualnie grane\" aktywności Discord", + "ToggleDiscordTooltip": "Wybierz, czy chcesz wyświetlać Kenji-NX w swojej \"aktualnie grane\" aktywności Discord", "AddGameDirBoxTooltip": "Wprowadź katalog gier aby dodać go do listy", "AddGameDirTooltip": "Dodaj katalog gier do listy", "RemoveGameDirTooltip": "Usuń wybrany katalog gier", @@ -597,7 +597,7 @@ "MemoryManagerTooltip": "Zmień sposób mapowania i uzyskiwania dostępu do pamięci gości. Znacznie wpływa na wydajność emulowanego procesora.\n\nUstaw na HOST UNCHECKED, jeśli nie masz pewności.", "MemoryManagerSoftwareTooltip": "Użyj tabeli stron oprogramowania do translacji adresów. Najwyższa celność, ale najwolniejsza wydajność.", "MemoryManagerHostTooltip": "Bezpośrednio mapuj pamięć w przestrzeni adresowej hosta. Znacznie szybsza kompilacja i wykonanie JIT.", - "MemoryManagerUnsafeTooltip": "Bezpośrednio mapuj pamięć, ale nie maskuj adresu w przestrzeni adresowej gościa przed uzyskaniem dostępu. Szybciej, ale kosztem bezpieczeństwa. Aplikacja gościa może uzyskać dostęp do pamięci z dowolnego miejsca w Ryujinx, więc w tym trybie uruchamiaj tylko programy, którym ufasz.", + "MemoryManagerUnsafeTooltip": "Bezpośrednio mapuj pamięć, ale nie maskuj adresu w przestrzeni adresowej gościa przed uzyskaniem dostępu. Szybciej, ale kosztem bezpieczeństwa. Aplikacja gościa może uzyskać dostęp do pamięci z dowolnego miejsca w Kenji-NX, więc w tym trybie uruchamiaj tylko programy, którym ufasz.", "UseHypervisorTooltip": "Użyj Hiperwizora zamiast JIT. Znacznie poprawia wydajność, gdy jest dostępny, ale może być niestabilny w swoim obecnym stanie ", "DRamTooltip": "Wykorzystuje alternatywny układ MemoryMode, aby naśladować model rozwojowy Switcha.\n\nJest to przydatne tylko w przypadku pakietów tekstur o wyższej rozdzielczości lub modów w rozdzielczości 4k. NIE poprawia wydajności.\n\nW razie wątpliwości pozostaw WYŁĄCZONE.", "IgnoreMissingServicesTooltip": "Ignoruje niezaimplementowane usługi Horizon OS. Może to pomóc w ominięciu awarii podczas uruchamiania niektórych gier.\n\nW razie wątpliwości pozostaw WYŁĄCZONE.", @@ -623,13 +623,13 @@ "DebugLogTooltip": "Wyświetla komunikaty dziennika debugowania w konsoli.\n\nUżywaj tego tylko na wyraźne polecenie członka załogi, ponieważ utrudni to odczytanie dzienników i pogorszy wydajność emulatora.", "LoadApplicationFileTooltip": "Otwórz eksplorator plików, aby wybrać plik kompatybilny z Switch do wczytania", "LoadApplicationFolderTooltip": "Otwórz eksplorator plików, aby wybrać zgodną z Switch, rozpakowaną aplikację do załadowania", - "OpenRyujinxFolderTooltip": "Otwórz folder systemu plików Ryujinx", + "OpenRyujinxFolderTooltip": "Otwórz folder systemu plików Kenji-NX", "OpenRyujinxLogsTooltip": "Otwiera folder, w którym zapisywane są logi", - "ExitTooltip": "Wyjdź z Ryujinx", + "ExitTooltip": "Wyjdź z Kenji-NX", "OpenSettingsTooltip": "Otwórz okno ustawień", "OpenProfileManagerTooltip": "Otwórz okno Menedżera Profili Użytkownika", "StopEmulationTooltip": "Zatrzymaj emulację bieżącej gry i wróć do wyboru gier", - "CheckUpdatesTooltip": "Sprawdź aktualizacje Ryujinx", + "CheckUpdatesTooltip": "Sprawdź aktualizacje Kenji-NX", "OpenAboutTooltip": "Otwórz Okno Informacje", "GridSize": "Wielkość siatki", "GridSizeTooltip": "Zmień rozmiar elementów siatki", @@ -644,7 +644,7 @@ "GameListContextMenuManageModToolTip": "Zarządzaj modyfikacjami", "GameListContextMenuManageMod": "Zarządzaj modyfikacjami", "ControllerSettingsStickRange": "Zasięg:", - "DialogStopEmulationTitle": "Ryujinx - Zatrzymaj Emulację", + "DialogStopEmulationTitle": "Kenji-NX - Zatrzymaj Emulację", "DialogStopEmulationMessage": "Czy na pewno chcesz zatrzymać emulację?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "Dżwięk", @@ -652,7 +652,7 @@ "SettingsTabNetworkConnection": "Połączenie Sieciowe", "SettingsTabCpuCache": "Cache CPU", "SettingsTabCpuMemory": "Pamięć CPU", - "DialogUpdaterFlatpakNotSupportedMessage": "Zaktualizuj Ryujinx przez FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Zaktualizuj Kenji-NX przez FlatHub.", "UpdaterDisabledWarningTitle": "Aktualizator Wyłączony!", "ControllerSettingsRotate90": "Obróć o 90° w Prawo", "IconSize": "Rozmiar ikon", @@ -665,17 +665,17 @@ "UserErrorApplicationNotFound": "Aplikacja nie znaleziona", "UserErrorUnknown": "Nieznany błąd", "UserErrorUndefined": "Niezdefiniowany błąd", - "UserErrorNoKeysDescription": "Ryujinx nie mógł znaleźć twojego pliku 'prod.keys'", - "UserErrorNoFirmwareDescription": "Ryujinx nie mógł znaleźć żadnego zainstalowanego firmware'u", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx nie był w stanie zparsować dostarczonego firmware'u. Jest to zwykle spowodowane nieaktualnymi kluczami.", - "UserErrorApplicationNotFoundDescription": "Ryujinx nie mógł znaleźć prawidłowej aplikacji na podanej ścieżce.", + "UserErrorNoKeysDescription": "Kenji-NX nie mógł znaleźć twojego pliku 'prod.keys'", + "UserErrorNoFirmwareDescription": "Kenji-NX nie mógł znaleźć żadnego zainstalowanego firmware'u", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX nie był w stanie zparsować dostarczonego firmware'u. Jest to zwykle spowodowane nieaktualnymi kluczami.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX nie mógł znaleźć prawidłowej aplikacji na podanej ścieżce.", "UserErrorUnknownDescription": "Wystąpił nieznany błąd!", "UserErrorUndefinedDescription": "Wystąpił niezdefiniowany błąd! To nie powinno się zdarzyć, skontaktuj się z deweloperem!", "OpenSetupGuideMessage": "Otwórz Podręcznik Konfiguracji", "NoUpdate": "Brak Aktualizacji", "TitleUpdateVersionLabel": "Wersja {0} - {1}", - "RyujinxInfo": "Ryujinx - Info", - "RyujinxConfirm": "Ryujinx - Potwierdzenie", + "RyujinxInfo": "Kenji-NX - Info", + "RyujinxConfirm": "Kenji-NX - Potwierdzenie", "FileDialogAllTypes": "Wszystkie typy", "Never": "Nigdy", "SwkbdMinCharacters": "Musi mieć co najmniej {0} znaków", @@ -709,7 +709,7 @@ "OpenFileDialogTitle": "Wybierz obsługiwany plik do otwarcia", "OpenFolderDialogTitle": "Wybierz folder z rozpakowaną grą", "AllSupportedFormats": "Wszystkie Obsługiwane Formaty", - "RyujinxUpdater": "Aktualizator Ryujinx", + "RyujinxUpdater": "Aktualizator Kenji-NX", "SettingsTabHotkeys": "Skróty Klawiszowe Klawiatury", "SettingsTabHotkeysHotkeys": "Skróty Klawiszowe Klawiatury", "SettingsTabHotkeysToggleVsyncHotkey": "Przełącz VSync:", @@ -757,10 +757,10 @@ "SettingsEnableTextureRecompressionTooltip": "Compresses ASTC textures in order to reduce VRAM usage.\n\nGames using this texture format include Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder and The Legend of Zelda: Tears of the Kingdom.\n\nGraphics cards with 4GiB VRAM or less will likely crash at some point while running these games.\n\nEnable only if you're running out of VRAM on the aforementioned games. Leave OFF if unsure.", "SettingsTabGraphicsPreferredGpu": "Preferowane GPU", "SettingsTabGraphicsPreferredGpuTooltip": "Wybierz kartę graficzną, która będzie używana z backendem graficznym Vulkan.\n\nNie wpływa na GPU używane przez OpenGL.\n\nW razie wątpliwości ustaw flagę GPU jako \"dGPU\". Jeśli żadnej nie ma, pozostaw nietknięte.", - "SettingsAppRequiredRestartMessage": "Wymagane Zrestartowanie Ryujinx", + "SettingsAppRequiredRestartMessage": "Wymagane Zrestartowanie Kenji-NX", "SettingsGpuBackendRestartMessage": "Zmieniono ustawienia Backendu Graficznego lub GPU. Będzie to wymagało ponownego uruchomienia", "SettingsGpuBackendRestartSubMessage": "Czy chcesz zrestartować teraz?", - "RyujinxUpdaterMessage": "Czy chcesz zaktualizować Ryujinx do najnowszej wersji?", + "RyujinxUpdaterMessage": "Czy chcesz zaktualizować Kenji-NX do najnowszej wersji?", "SettingsTabHotkeysVolumeUpHotkey": "Zwiększ Głośność:", "SettingsTabHotkeysVolumeDownHotkey": "Zmniejsz Głośność:", "SettingsEnableMacroHLE": "Włącz Macro HLE", @@ -803,7 +803,7 @@ "AboutChangelogButtonTooltipMessage": "Kliknij, aby otworzyć listę zmian dla tej wersji w domyślnej przeglądarce.", "SettingsTabNetworkMultiplayer": "Gra Wieloosobowa", "MultiplayerMode": "Tryb:", - "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", + "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Kenji-NX instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Wyłączone", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Kenjinx/Assets/Locales/pt_BR.json similarity index 93% rename from src/Ryujinx/Assets/Locales/pt_BR.json rename to src/Kenjinx/Assets/Locales/pt_BR.json index 4edd8b8b7..d6acab2e8 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Kenjinx/Assets/Locales/pt_BR.json @@ -97,11 +97,11 @@ "StatusBarSystemVersion": "Versão do firmware: {0}", "LinuxVmMaxMapCountDialogTitle": "Limite baixo para mapeamentos de memória detectado", "LinuxVmMaxMapCountDialogTextPrimary": "Você gostaria de aumentar o valor de vm.max_map_count para {0}", - "LinuxVmMaxMapCountDialogTextSecondary": "Alguns jogos podem tentar criar mais mapeamentos de memória do que o atualmente permitido. Ryujinx irá falhar assim que este limite for excedido.", + "LinuxVmMaxMapCountDialogTextSecondary": "Alguns jogos podem tentar criar mais mapeamentos de memória do que o atualmente permitido. Kenji-NX irá falhar assim que este limite for excedido.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Sim, até a próxima reinicialização", "LinuxVmMaxMapCountDialogButtonPersistent": "Sim, permanentemente", "LinuxVmMaxMapCountWarningTextPrimary": "A quantidade máxima de mapeamentos de memória é menor que a recomendada.", - "LinuxVmMaxMapCountWarningTextSecondary": "O valor atual de vm.max_map_count ({0}) é menor que {1}. Alguns jogos podem tentar criar mais mapeamentos de memória do que o permitido no momento. Ryujinx vai falhar assim que este limite for excedido.\n\nTalvez você queira aumentar o limite manualmente ou instalar pkexec, o que permite que Ryujinx ajude com isso.", + "LinuxVmMaxMapCountWarningTextSecondary": "O valor atual de vm.max_map_count ({0}) é menor que {1}. Alguns jogos podem tentar criar mais mapeamentos de memória do que o permitido no momento. Kenji-NX vai falhar assim que este limite for excedido.\n\nTalvez você queira aumentar o limite manualmente ou instalar pkexec, o que permite que Kenji-NX ajude com isso.", "Settings": "Configurações", "SettingsTabGeneral": "Geral", "SettingsTabGeneralGeneral": "Geral", @@ -431,42 +431,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Multiplicador de vibração fraca", "DialogMessageSaveNotAvailableMessage": "Não há jogos salvos para {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Gostaria de criar o diretório de salvamento para esse jogo?", - "DialogConfirmationTitle": "Ryujinx - Confirmação", - "DialogUpdaterTitle": "Ryujinx - Atualizador", - "DialogErrorTitle": "Ryujinx - Erro", - "DialogWarningTitle": "Ryujinx - Alerta", - "DialogExitTitle": "Ryujinx - Sair", - "DialogErrorMessage": "Ryujinx encontrou um erro", - "DialogExitMessage": "Tem certeza que deseja fechar o Ryujinx?", + "DialogConfirmationTitle": "Kenji-NX - Confirmação", + "DialogUpdaterTitle": "Kenji-NX - Atualizador", + "DialogErrorTitle": "Kenji-NX - Erro", + "DialogWarningTitle": "Kenji-NX - Alerta", + "DialogExitTitle": "Kenji-NX - Sair", + "DialogErrorMessage": "Kenji-NX encontrou um erro", + "DialogExitMessage": "Tem certeza que deseja fechar o Kenji-NX?", "DialogExitSubMessage": "Todos os dados que não foram salvos serão perdidos!", "DialogMessageCreateSaveErrorMessage": "Ocorreu um erro ao criar o diretório de salvamento: {0}", "DialogMessageFindSaveErrorMessage": "Ocorreu um erro ao tentar encontrar o diretório de salvamento: {0}", "FolderDialogExtractTitle": "Escolha o diretório onde os arquivos serão extraídos", "DialogNcaExtractionMessage": "Extraindo seção {0} de {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Extrator de seções NCA", + "DialogNcaExtractionTitle": "Kenji-NX - Extrator de seções NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Falha na extração. O NCA principal não foi encontrado no arquivo selecionado.", "DialogNcaExtractionCheckLogErrorMessage": "Falha na extração. Leia o arquivo de log para mais informações.", "DialogNcaExtractionSuccessMessage": "Extração concluída com êxito.", - "DialogUpdaterConvertFailedMessage": "Falha ao converter a versão atual do Ryujinx.", + "DialogUpdaterConvertFailedMessage": "Falha ao converter a versão atual do Kenji-NX.", "DialogUpdaterCancelUpdateMessage": "Cancelando atualização!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Você já está usando a versão mais recente do Ryujinx!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Você já está usando a versão mais recente do Kenji-NX!", "DialogUpdaterFailedToGetVersionMessage": "Ocorreu um erro ao tentar obter as informações de atualização do GitHub Release. Isso pode ser causado se uma nova versão estiver sendo compilado pelas Ações do GitHub. Tente novamente em alguns minutos.", - "DialogUpdaterConvertFailedGithubMessage": "Falha ao converter a versão do Ryujinx recebida do AppVeyor.", + "DialogUpdaterConvertFailedGithubMessage": "Falha ao converter a versão do Kenji-NX recebida do AppVeyor.", "DialogUpdaterDownloadingMessage": "Baixando atualização...", "DialogUpdaterExtractionMessage": "Extraindo atualização...", "DialogUpdaterRenamingMessage": "Renomeando atualização...", "DialogUpdaterAddingFilesMessage": "Adicionando nova atualização...", "DialogUpdaterCompleteMessage": "Atualização concluída!", - "DialogUpdaterRestartMessage": "Deseja reiniciar o Ryujinx agora?", + "DialogUpdaterRestartMessage": "Deseja reiniciar o Kenji-NX agora?", "DialogUpdaterNoInternetMessage": "Você não está conectado à Internet!", "DialogUpdaterNoInternetSubMessage": "Por favor, certifique-se de que você tem uma conexão funcional à Internet!", - "DialogUpdaterDirtyBuildMessage": "Você não pode atualizar uma compilação Dirty do Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Por favor, baixe o Ryujinx em https://ryujinx.org/ se está procurando por uma versão suportada.", + "DialogUpdaterDirtyBuildMessage": "Você não pode atualizar uma compilação Dirty do Kenji-NX!", + "DialogUpdaterDirtyBuildSubMessage": "Por favor, baixe o Kenji-NX em https://ryujinx.org/ se está procurando por uma versão suportada.", "DialogRestartRequiredMessage": "Reinicialização necessária", "DialogThemeRestartMessage": "O tema foi salvo. Uma reinicialização é necessária para aplicar o tema.", "DialogThemeRestartSubMessage": "Deseja reiniciar?", "DialogFirmwareInstallEmbeddedMessage": "Gostaria de instalar o firmware incluso neste jogo? (Firmware {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Ryujinx was able to install firmware {0} from the provided game.\nThe emulator will now start.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Kenji-NX was able to install firmware {0} from the provided game.\nThe emulator will now start.", "DialogFirmwareNoFirmwareInstalledMessage": "Firmware não foi instalado", "DialogFirmwareInstalledMessage": "Firmware {0} foi instalado", "DialogInstallFileTypesSuccessMessage": "Tipos de arquivo instalados com sucesso!", @@ -480,7 +480,7 @@ "DialogErrorAppletErrorExceptionMessage": "Erro ao exibir applet ErrorApplet: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nPara mais informações sobre como corrigir esse erro, siga nosso Guia de Configuração.", - "DialogUserErrorDialogTitle": "Erro do Ryujinx ({0})", + "DialogUserErrorDialogTitle": "Erro do Kenji-NX ({0})", "DialogAmiiboApiTitle": "API Amiibo", "DialogAmiiboApiFailFetchMessage": "Um erro ocorreu ao tentar obter informações da API.", "DialogAmiiboApiConnectErrorMessage": "Não foi possível conectar ao servidor da API Amiibo. O serviço pode estar fora do ar ou você precisa verificar sua conexão com a Internet.", @@ -494,7 +494,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Você está prestes a apagar o cache de Shader para :\n\n{0}\n\nTem certeza que deseja continuar?", "DialogShaderDeletionErrorMessage": "Erro apagando o cache de Shader em {0}: {1}", - "DialogRyujinxErrorMessage": "Ryujinx encontrou um erro", + "DialogRyujinxErrorMessage": "Kenji-NX encontrou um erro", "DialogInvalidTitleIdErrorMessage": "Erro de interface: O jogo selecionado não tem um ID de título válido", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "Um firmware de sistema válido não foi encontrado em {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Instalar firmware {0}", @@ -530,7 +530,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Por favor, pare a emulação ou feche o emulador antes de abrir outro jogo.", "DialogUpdateAddUpdateErrorMessage": "O arquivo especificado não contém atualizações para o título selecionado!", "DialogSettingsBackendThreadingWarningTitle": "Alerta - Threading da API gráfica", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx precisa ser reiniciado após mudar essa opção para que ela tenha efeito. Dependendo da sua plataforma, pode ser preciso desabilitar o multithreading do driver de vídeo quando usar o Ryujinx.", + "DialogSettingsBackendThreadingWarningMessage": "Kenji-NX precisa ser reiniciado após mudar essa opção para que ela tenha efeito. Dependendo da sua plataforma, pode ser preciso desabilitar o multithreading do driver de vídeo quando usar o Kenji-NX.", "DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?", "DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?", "SettingsTabGraphicsFeaturesOptions": "Recursos", @@ -543,15 +543,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "O nome do arquivo contém caracteres inválidos. Por favor, tente novamente.", "MenuBarOptionsPauseEmulation": "Pausar", "MenuBarOptionsResumeEmulation": "Resumir", - "AboutUrlTooltipMessage": "Clique para abrir o site do Ryujinx no seu navegador padrão.", - "AboutDisclaimerMessage": "Ryujinx não é afiliado com a Nintendo™,\nou qualquer um de seus parceiros, de nenhum modo.", + "AboutUrlTooltipMessage": "Clique para abrir o site do Kenji-NX no seu navegador padrão.", + "AboutDisclaimerMessage": "Kenji-NX não é afiliado com a Nintendo™,\nou qualquer um de seus parceiros, de nenhum modo.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) é usado\nem nossa emulação de Amiibo.", - "AboutPatreonUrlTooltipMessage": "Clique para abrir a página do Patreon do Ryujinx no seu navegador padrão.", - "AboutGithubUrlTooltipMessage": "Clique para abrir a página do GitHub do Ryujinx no seu navegador padrão.", - "AboutDiscordUrlTooltipMessage": "Clique para abrir um convite ao servidor do Discord do Ryujinx no seu navegador padrão.", - "AboutTwitterUrlTooltipMessage": "Clique para abrir a página do Twitter do Ryujinx no seu navegador padrão.", + "AboutPatreonUrlTooltipMessage": "Clique para abrir a página do Patreon do Kenji-NX no seu navegador padrão.", + "AboutGithubUrlTooltipMessage": "Clique para abrir a página do GitHub do Kenji-NX no seu navegador padrão.", + "AboutDiscordUrlTooltipMessage": "Clique para abrir um convite ao servidor do Discord do Kenji-NX no seu navegador padrão.", + "AboutTwitterUrlTooltipMessage": "Clique para abrir a página do Twitter do Kenji-NX no seu navegador padrão.", "AboutRyujinxAboutTitle": "Sobre:", - "AboutRyujinxAboutContent": "Ryujinx é um emulador de Nintendo Switch™.\n\nDesenvolvedores com interesse em contribuir podem conseguir mais informações no GitHub.", + "AboutRyujinxAboutContent": "Kenji-NX é um emulador de Nintendo Switch™.\n\nDesenvolvedores com interesse em contribuir podem conseguir mais informações no GitHub.", "AboutRyujinxMaintainersTitle": "Mantido por:", "AboutRyujinxFormerMaintainersTitle": "Anteriormente Mantido por:", "AboutRyujinxMaintainersContentTooltipMessage": "Clique para abrir a página de contribuidores no seu navegador padrão.", @@ -600,12 +600,12 @@ "MemoryManagerTooltip": "Muda como a memória do sistema convidado é acessada. Tem um grande impacto na performance da CPU emulada.", "MemoryManagerSoftwareTooltip": "Usar uma tabela de página via software para tradução de endereços. Maior precisão, porém performance mais baixa.", "MemoryManagerHostTooltip": "Mapeia memória no espaço de endereço hóspede diretamente. Compilação e execução do JIT muito mais rápida.", - "MemoryManagerUnsafeTooltip": "Mapeia memória diretamente, mas sem limitar o acesso ao espaço de endereçamento do sistema convidado. Mais rápido, porém menos seguro. O aplicativo convidado pode acessar memória de qualquer parte do Ryujinx, então apenas rode programas em que você confia nesse modo.", + "MemoryManagerUnsafeTooltip": "Mapeia memória diretamente, mas sem limitar o acesso ao espaço de endereçamento do sistema convidado. Mais rápido, porém menos seguro. O aplicativo convidado pode acessar memória de qualquer parte do Kenji-NX, então apenas rode programas em que você confia nesse modo.", "UseHypervisorTooltip": "Usa o Hypervisor em vez de JIT (recompilador dinâmico). Melhora significativamente o desempenho quando disponível, mas pode ser instável no seu estado atual.", "DRamTooltip": "Expande a memória do sistema emulado de 4GiB para 6GiB", "IgnoreMissingServicesTooltip": "Habilita ou desabilita a opção de ignorar serviços não implementados", "GraphicsBackendThreadingTooltip": "Habilita multithreading do backend gráfico", - "GalThreadingTooltip": "Executa comandos do backend gráfico em uma segunda thread. Permite multithreading em tempo de execução da compilação de shader, diminui os travamentos, e melhora performance em drivers sem suporte embutido a multithreading. Pequena variação na performance máxima em drivers com suporte a multithreading. Ryujinx pode precisar ser reiniciado para desabilitar adequadamente o multithreading embutido do driver, ou você pode precisar fazer isso manualmente para ter a melhor performance.", + "GalThreadingTooltip": "Executa comandos do backend gráfico em uma segunda thread. Permite multithreading em tempo de execução da compilação de shader, diminui os travamentos, e melhora performance em drivers sem suporte embutido a multithreading. Pequena variação na performance máxima em drivers com suporte a multithreading. Kenji-NX pode precisar ser reiniciado para desabilitar adequadamente o multithreading embutido do driver, ou você pode precisar fazer isso manualmente para ter a melhor performance.", "ShaderCacheToggleTooltip": "Habilita ou desabilita o cache de shader", "ResolutionScaleTooltip": "Multiplies the game's rendering resolution.\n\nA few games may not work with this and look pixelated even when the resolution is increased; for those games, you may need to find mods that remove anti-aliasing or that increase their internal rendering resolution. For using the latter, you'll likely want to select Native.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nKeep in mind 4x is overkill for virtually any setup.", "ResolutionScaleEntryTooltip": "Escala de resolução de ponto flutuante, como 1.5. Valores não inteiros tem probabilidade maior de causar problemas ou quebras.", @@ -626,14 +626,14 @@ "DebugLogTooltip": "Habilita exibição de mensagens de depuração", "LoadApplicationFileTooltip": "Abre o navegador de arquivos para seleção de um arquivo do Switch compatível a ser carregado", "LoadApplicationFolderTooltip": "Abre o navegador de pastas para seleção de pasta extraída do Switch compatível a ser carregada", - "OpenRyujinxFolderTooltip": "Abre o diretório do sistema de arquivos do Ryujinx", - "OpenScreenshotFolderTooltip": "Abre a pasta de capturas de tela do Ryujinx", + "OpenRyujinxFolderTooltip": "Abre o diretório do sistema de arquivos do Kenji-NX", + "OpenScreenshotFolderTooltip": "Abre a pasta de capturas de tela do Kenji-NX", "OpenRyujinxLogsTooltip": "Abre o diretório onde os logs são salvos", - "ExitTooltip": "Sair do Ryujinx", + "ExitTooltip": "Sair do Kenji-NX", "OpenSettingsTooltip": "Abrir janela de configurações", "OpenProfileManagerTooltip": "Abrir janela de gerenciamento de perfis", "StopEmulationTooltip": "Parar emulação do jogo atual e voltar a seleção de jogos", - "CheckUpdatesTooltip": "Verificar por atualizações para o Ryujinx", + "CheckUpdatesTooltip": "Verificar por atualizações para o Kenji-NX", "OpenAboutTooltip": "Abrir janela sobre", "GridSize": "Tamanho da grade", "GridSizeTooltip": "Mudar tamanho dos items da grade", @@ -648,7 +648,7 @@ "GameListContextMenuManageModToolTip": "Manage Mods", "GameListContextMenuManageMod": "Manage Mods", "ControllerSettingsStickRange": "Intervalo:", - "DialogStopEmulationTitle": "Ryujinx - Parar emulação", + "DialogStopEmulationTitle": "Kenji-NX - Parar emulação", "DialogStopEmulationMessage": "Tem certeza que deseja parar a emulação?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "Áudio", @@ -656,7 +656,7 @@ "SettingsTabNetworkConnection": "Conexão de rede", "SettingsTabCpuCache": "Cache da CPU", "SettingsTabCpuMemory": "Memória da CPU", - "DialogUpdaterFlatpakNotSupportedMessage": "Por favor, atualize o Ryujinx pelo FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Por favor, atualize o Kenji-NX pelo FlatHub.", "UpdaterDisabledWarningTitle": "Atualizador desabilitado!", "ControllerSettingsRotate90": "Rodar 90° sentido horário", "IconSize": "Tamanho do ícone", @@ -669,17 +669,17 @@ "UserErrorApplicationNotFound": "Aplicativo não encontrado", "UserErrorUnknown": "Erro desconhecido", "UserErrorUndefined": "Erro indefinido", - "UserErrorNoKeysDescription": "Ryujinx não conseguiu encontrar o seu arquivo 'prod.keys'", - "UserErrorNoFirmwareDescription": "Ryujinx não conseguiu encontrar nenhum Firmware instalado", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx não conseguiu ler o Firmware fornecido. Geralmente isso é causado por chaves desatualizadas.", - "UserErrorApplicationNotFoundDescription": "Ryujinx não conseguiu encontrar um aplicativo válido no caminho fornecido.", + "UserErrorNoKeysDescription": "Kenji-NX não conseguiu encontrar o seu arquivo 'prod.keys'", + "UserErrorNoFirmwareDescription": "Kenji-NX não conseguiu encontrar nenhum Firmware instalado", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX não conseguiu ler o Firmware fornecido. Geralmente isso é causado por chaves desatualizadas.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX não conseguiu encontrar um aplicativo válido no caminho fornecido.", "UserErrorUnknownDescription": "Um erro desconhecido foi encontrado!", "UserErrorUndefinedDescription": "Um erro indefinido occoreu! Isso não deveria acontecer, por favor contate um desenvolvedor!", "OpenSetupGuideMessage": "Abrir o guia de configuração", "NoUpdate": "Sem atualizações", "TitleUpdateVersionLabel": "Versão {0} - {1}", - "RyujinxInfo": "Ryujinx - Informação", - "RyujinxConfirm": "Ryujinx - Confirmação", + "RyujinxInfo": "Kenji-NX - Informação", + "RyujinxConfirm": "Kenji-NX - Confirmação", "FileDialogAllTypes": "Todos os tipos", "Never": "Nunca", "SwkbdMinCharacters": "Deve ter pelo menos {0} caracteres", @@ -713,7 +713,7 @@ "OpenFileDialogTitle": "Selecione um arquivo suportado para abrir", "OpenFolderDialogTitle": "Selecione um diretório com um jogo extraído", "AllSupportedFormats": "Todos os formatos suportados", - "RyujinxUpdater": "Atualizador do Ryujinx", + "RyujinxUpdater": "Atualizador do Kenji-NX", "SettingsTabHotkeys": "Atalhos do teclado", "SettingsTabHotkeysHotkeys": "Atalhos do teclado", "SettingsTabHotkeysToggleVsyncHotkey": "Mudar VSync:", @@ -761,10 +761,10 @@ "SettingsEnableTextureRecompressionTooltip": "Compresses ASTC textures in order to reduce VRAM usage.\n\nGames using this texture format include Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder and The Legend of Zelda: Tears of the Kingdom.\n\nGraphics cards with 4GiB VRAM or less will likely crash at some point while running these games.\n\nEnable only if you're running out of VRAM on the aforementioned games. Leave OFF if unsure.", "SettingsTabGraphicsPreferredGpu": "GPU preferencial", "SettingsTabGraphicsPreferredGpuTooltip": "Selecione a placa de vídeo que será usada com o backend gráfico Vulkan.\n\nNão afeta a GPU que OpenGL usará.\n\nSelecione \"dGPU\" em caso de dúvida. Se não houver nenhuma, não mexa.", - "SettingsAppRequiredRestartMessage": "Reinicialização do Ryujinx necessária", + "SettingsAppRequiredRestartMessage": "Reinicialização do Kenji-NX necessária", "SettingsGpuBackendRestartMessage": "Configurações do backend gráfico ou da GPU foram alteradas. Uma reinicialização é necessária para que as mudanças tenham efeito.", "SettingsGpuBackendRestartSubMessage": "Deseja reiniciar agora?", - "RyujinxUpdaterMessage": "Você quer atualizar o Ryujinx para a última versão?", + "RyujinxUpdaterMessage": "Você quer atualizar o Kenji-NX para a última versão?", "SettingsTabHotkeysVolumeUpHotkey": "Aumentar volume:", "SettingsTabHotkeysVolumeDownHotkey": "Diminuir volume:", "SettingsEnableMacroHLE": "Habilitar emulação de alto nível para Macros", @@ -807,7 +807,7 @@ "AboutChangelogButtonTooltipMessage": "Clique para abrir o relatório de alterações para esta versão no seu navegador padrão.", "SettingsTabNetworkMultiplayer": "Multiplayer", "MultiplayerMode": "Modo:", - "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", + "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Kenji-NX instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Disabled", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Kenjinx/Assets/Locales/ru_RU.json similarity index 94% rename from src/Ryujinx/Assets/Locales/ru_RU.json rename to src/Kenjinx/Assets/Locales/ru_RU.json index 6192633c3..164e35078 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Kenjinx/Assets/Locales/ru_RU.json @@ -14,7 +14,7 @@ "MenuBarFileOpenFromFileError": "В выбранном файле не найдено приложения.", "MenuBarFileLoadDlcFromFolder": "Загружать DLC из папки", "MenuBarFileLoadTitleUpdatesFromFolder": "Загружать обновления из папки", - "MenuBarFileOpenEmuFolder": "Открыть папку Ryujinx", + "MenuBarFileOpenEmuFolder": "Открыть папку Kenji-NX", "MenuBarFileOpenScreenshotsFolder": "Открыть папку со скриншотами", "MenuBarFileOpenLogsFolder": "Открыть папку с логами", "MenuBarFileExit": "_Выход", @@ -102,11 +102,11 @@ "StatusBarXCIFileTrimming": "Обрезка файла XCI: {0}", "LinuxVmMaxMapCountDialogTitle": "Обнаружен низкий лимит разметки памяти", "LinuxVmMaxMapCountDialogTextPrimary": "Хотите увеличить значение vm.max_map_count до {0}", - "LinuxVmMaxMapCountDialogTextSecondary": "Некоторые игры могут создавать большую разметку памяти, чем разрешено на данный момент по умолчанию. Ryujinx вылетит при превышении этого лимита.", + "LinuxVmMaxMapCountDialogTextSecondary": "Некоторые игры могут создавать большую разметку памяти, чем разрешено на данный момент по умолчанию. Kenji-NX вылетит при превышении этого лимита.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Да, до следующего перезапуска", "LinuxVmMaxMapCountDialogButtonPersistent": "Да, постоянно", "LinuxVmMaxMapCountWarningTextPrimary": "Максимальная разметка памяти меньше, чем рекомендуется.", - "LinuxVmMaxMapCountWarningTextSecondary": "Текущее значение vm.max_map_count ({0}) меньше, чем {1}. Некоторые игры могут попытаться создать большую разметку памяти, чем разрешено в данный момент. Ryujinx вылетит как только этот лимит будет превышен.\n\nВозможно, вам потребуется вручную увеличить лимит или установить pkexec, что позволит Ryujinx помочь справиться с превышением лимита.", + "LinuxVmMaxMapCountWarningTextSecondary": "Текущее значение vm.max_map_count ({0}) меньше, чем {1}. Некоторые игры могут попытаться создать большую разметку памяти, чем разрешено в данный момент. Kenji-NX вылетит как только этот лимит будет превышен.\n\nВозможно, вам потребуется вручную увеличить лимит или установить pkexec, что позволит Kenji-NX помочь справиться с превышением лимита.", "Settings": "Параметры", "SettingsTabGeneral": "Интерфейс", "SettingsTabGeneralGeneral": "Общее", @@ -454,42 +454,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Множитель слабой вибрации", "DialogMessageSaveNotAvailableMessage": "Нет сохранений для {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Создать сохранение для этой игры?", - "DialogConfirmationTitle": "Ryujinx - Подтверждение", - "DialogUpdaterTitle": "Ryujinx - Обновление", - "DialogErrorTitle": "Ryujinx - Ошибка", - "DialogWarningTitle": "Ryujinx - Предупреждение", - "DialogExitTitle": "Ryujinx - Выход", - "DialogErrorMessage": "Ryujinx обнаружил ошибку", - "DialogExitMessage": "Вы уверены, что хотите выйти из Ryujinx?", + "DialogConfirmationTitle": "Kenji-NX - Подтверждение", + "DialogUpdaterTitle": "Kenji-NX - Обновление", + "DialogErrorTitle": "Kenji-NX - Ошибка", + "DialogWarningTitle": "Kenji-NX - Предупреждение", + "DialogExitTitle": "Kenji-NX - Выход", + "DialogErrorMessage": "Kenji-NX обнаружил ошибку", + "DialogExitMessage": "Вы уверены, что хотите выйти из Kenji-NX?", "DialogExitSubMessage": "Все несохраненные данные будут потеряны", "DialogMessageCreateSaveErrorMessage": "Произошла ошибка при создании указанных данных сохранения: {0}", "DialogMessageFindSaveErrorMessage": "Произошла ошибка при поиске указанных данных сохранения: {0}", "FolderDialogExtractTitle": "Выберите папку для извлечения", "DialogNcaExtractionMessage": "Извлечение {0} раздела из {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Извлечение разделов NCA", + "DialogNcaExtractionTitle": "Kenji-NX - Извлечение разделов NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Ошибка извлечения. Основной NCA не присутствовал в выбранном файле.", "DialogNcaExtractionCheckLogErrorMessage": "Ошибка извлечения. Прочтите файл журнала для получения дополнительной информации.", "DialogNcaExtractionSuccessMessage": "Извлечение завершено успешно.", - "DialogUpdaterConvertFailedMessage": "Не удалось преобразовать текущую версию Ryujinx.", + "DialogUpdaterConvertFailedMessage": "Не удалось преобразовать текущую версию Kenji-NX.", "DialogUpdaterCancelUpdateMessage": "Отмена обновления...", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Вы используете самую последнюю версию Ryujinx", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Вы используете самую последнюю версию Kenji-NX", "DialogUpdaterFailedToGetVersionMessage": "Произошла ошибка при попытке получить информацию о выпуске от GitHub Release. Это может быть вызвано тем, что в данный момент в GitHub Actions компилируется новый релиз. Повторите попытку позже.", - "DialogUpdaterConvertFailedGithubMessage": "Не удалось преобразовать полученную версию Ryujinx из Github Release.", + "DialogUpdaterConvertFailedGithubMessage": "Не удалось преобразовать полученную версию Kenji-NX из Github Release.", "DialogUpdaterDownloadingMessage": "Загрузка обновления...", "DialogUpdaterExtractionMessage": "Извлечение обновления...", "DialogUpdaterRenamingMessage": "Переименование обновления...", "DialogUpdaterAddingFilesMessage": "Добавление нового обновления...", "DialogUpdaterCompleteMessage": "Обновление завершено", - "DialogUpdaterRestartMessage": "Перезапустить Ryujinx?", + "DialogUpdaterRestartMessage": "Перезапустить Kenji-NX?", "DialogUpdaterNoInternetMessage": "Вы не подключены к интернету", "DialogUpdaterNoInternetSubMessage": "Убедитесь, что у вас работает подключение к интернету", "DialogUpdaterDirtyBuildMessage": "Вы не можете обновлять Dirty Build", - "DialogUpdaterDirtyBuildSubMessage": "Загрузите Ryujinx по адресу https://ryujinx.org/ если вам нужна поддерживаемая версия.", + "DialogUpdaterDirtyBuildSubMessage": "Загрузите Kenji-NX по адресу https://ryujinx.org/ если вам нужна поддерживаемая версия.", "DialogRestartRequiredMessage": "Требуется перезагрузка", "DialogThemeRestartMessage": "Тема сохранена. Для применения темы требуется перезапуск.", "DialogThemeRestartSubMessage": "Хотите перезапустить", "DialogFirmwareInstallEmbeddedMessage": "Хотите установить прошивку, встроенную в эту игру? (Прошивка {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "Установленная прошивка не была найдена, но Ryujinx удалось установить прошивку {0} из предоставленной игры.\nТеперь эмулятор запустится.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "Установленная прошивка не была найдена, но Kenji-NX удалось установить прошивку {0} из предоставленной игры.\nТеперь эмулятор запустится.", "DialogFirmwareNoFirmwareInstalledMessage": "Прошивка не установлена", "DialogFirmwareInstalledMessage": "Прошивка {0} была установлена", "DialogInstallFileTypesSuccessMessage": "Типы файлов успешно установлены", @@ -504,7 +504,7 @@ "DialogErrorAppletErrorExceptionMessage": "Ошибка отображения диалогового окна ErrorApplet: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nДля получения дополнительной информации о том, как исправить эту ошибку, следуйте нашему Руководству по установке.", - "DialogUserErrorDialogTitle": "Ошибка Ryujinx ({0})", + "DialogUserErrorDialogTitle": "Ошибка Kenji-NX ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "Произошла ошибка при получении информации из API.", "DialogAmiiboApiConnectErrorMessage": "Не удалось подключиться к серверу Amiibo API. Служба может быть недоступна или вам может потребоваться проверить ваше интернет-соединение.", @@ -518,7 +518,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Вы собираетесь удалить кэш шейдеров для:\n\n{0}\n\nВы уверены, что хотите продолжить?", "DialogShaderDeletionErrorMessage": "Ошибка очистки кэша шейдеров в {0}: {1}", - "DialogRyujinxErrorMessage": "Ryujinx обнаружил ошибку", + "DialogRyujinxErrorMessage": "Kenji-NX обнаружил ошибку", "DialogInvalidTitleIdErrorMessage": "Ошибка пользовательского интерфейса: выбранная игра не имеет действительного ID.", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "Валидная системная прошивка не найдена в {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Установить прошивку {0}", @@ -554,7 +554,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Пожалуйста, остановите эмуляцию или закройте эмулятор перед запуском другой игры.", "DialogUpdateAddUpdateErrorMessage": "Указанный файл не содержит обновлений для выбранного приложения", "DialogSettingsBackendThreadingWarningTitle": "Предупреждение: многопоточность в бэкенде", - "DialogSettingsBackendThreadingWarningMessage": "Для применения этой настройки необходимо перезапустить Ryujinx. В зависимости от используемой вами операционной системы вам может потребоваться вручную отключить многопоточность драйвера при использовании Ryujinx.", + "DialogSettingsBackendThreadingWarningMessage": "Для применения этой настройки необходимо перезапустить Kenji-NX. В зависимости от используемой вами операционной системы вам может потребоваться вручную отключить многопоточность драйвера при использовании Kenji-NX.", "DialogModManagerDeletionWarningMessage": "Вы сейчас удалите мод: {0}\n\nВы уверены, что хотите продолжить?", "DialogModManagerDeletionAllWarningMessage": "Вы сейчас удалите все выбранные моды для этой игры.\n\nВы уверены, что хотите продолжить?", "SettingsTabGraphicsFeaturesOptions": "Функции & Улучшения", @@ -567,15 +567,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "Имя файла содержит недопустимые символы. Пожалуйста, попробуйте еще раз.", "MenuBarOptionsPauseEmulation": "Пауза эмуляции", "MenuBarOptionsResumeEmulation": "Продолжить", - "AboutUrlTooltipMessage": "Нажмите, чтобы открыть веб-сайт Ryujinx", - "AboutDisclaimerMessage": "Ryujinx никоим образом не связан ни с Nintendo™, ни с кем-либо из ее партнеров.", + "AboutUrlTooltipMessage": "Нажмите, чтобы открыть веб-сайт Kenji-NX", + "AboutDisclaimerMessage": "Kenji-NX никоим образом не связан ни с Nintendo™, ни с кем-либо из ее партнеров.", "AboutAmiiboDisclaimerMessage": "Amiibo API (www.amiiboapi.com) используется для эмуляции Amiibo.", - "AboutPatreonUrlTooltipMessage": "Нажмите, чтобы открыть страницу Ryujinx на Patreon", - "AboutGithubUrlTooltipMessage": "Нажмите, чтобы открыть страницу Ryujinx на GitHub", - "AboutDiscordUrlTooltipMessage": "Нажмите, чтобы открыть приглашение на сервер Ryujinx в Discord", - "AboutTwitterUrlTooltipMessage": "Нажмите, чтобы открыть страницу Ryujinx в X (бывший Twitter)", + "AboutPatreonUrlTooltipMessage": "Нажмите, чтобы открыть страницу Kenji-NX на Patreon", + "AboutGithubUrlTooltipMessage": "Нажмите, чтобы открыть страницу Kenji-NX на GitHub", + "AboutDiscordUrlTooltipMessage": "Нажмите, чтобы открыть приглашение на сервер Kenji-NX в Discord", + "AboutTwitterUrlTooltipMessage": "Нажмите, чтобы открыть страницу Kenji-NX в X (бывший Twitter)", "AboutRyujinxAboutTitle": "О программе:", - "AboutRyujinxAboutContent": "Ryujinx — это эмулятор Nintendo Switch™.\n\nРазработчики, заинтересованные в участии, могут ознакомиться с проектом на GitHub.", + "AboutRyujinxAboutContent": "Kenji-NX — это эмулятор Nintendo Switch™.\n\nРазработчики, заинтересованные в участии, могут ознакомиться с проектом на GitHub.", "AboutRyujinxMaintainersTitle": "Разработка:", "AboutRyujinxFormerMaintainersTitle": "Предыдущая Разработка:", "AboutRyujinxMaintainersContentTooltipMessage": "Нажмите, чтобы открыть страницу с участниками", @@ -628,7 +628,7 @@ "MemoryManagerTooltip": "Меняет разметку и доступ к гостевой памяти. Значительно влияет на производительность процессора.\n\nРекомендуется оставить \"Хост не установлен\"", "MemoryManagerSoftwareTooltip": "Использует таблицу страниц для преобразования адресов. \nСамая высокая точность, но самая низкая производительность.", "MemoryManagerHostTooltip": "Прямая разметка памяти в адресном пространстве хоста. \nЗначительно более быстрые запуск и компиляция JIT.", - "MemoryManagerUnsafeTooltip": "Производит прямую разметку памяти, но не маскирует адрес в гостевом адресном пространстве перед получением доступа. \nБыстро, но небезопасно. Гостевое приложение может получить доступ к памяти из Ryujinx, поэтому в этом режиме рекомендуется запускать только те программы, которым вы доверяете.", + "MemoryManagerUnsafeTooltip": "Производит прямую разметку памяти, но не маскирует адрес в гостевом адресном пространстве перед получением доступа. \nБыстро, но небезопасно. Гостевое приложение может получить доступ к памяти из Kenji-NX, поэтому в этом режиме рекомендуется запускать только те программы, которым вы доверяете.", "UseHypervisorTooltip": "Использует Hypervisor вместо JIT. Значительно увеличивает производительность, но может работать нестабильно.", "DRamTooltip": "Использует альтернативный макет MemoryMode для имитации использования Nintendo Switch в режиме разработчика.\n\nПолезно только для пакетов текстур с высоким разрешением или модов добавляющих разрешение 4К. Не улучшает производительность.\n\nРекомендуется оставить выключенным.", "IgnoreMissingServicesTooltip": "Игнорирует нереализованные сервисы Horizon в новых прошивках. Эта настройка поможет избежать вылеты при запуске определенных игр.\n\nРекомендуется оставить выключенным.", @@ -656,14 +656,14 @@ "LoadApplicationFolderTooltip": "Открывает файловый менеджер для выбора распакованного приложения, совместимого с Nintendo Switch.", "LoadDlcFromFolderTooltip": "Открывает файловый менеджер для выбора одной или несколько папок для массовой загрузки DLC", "LoadTitleUpdatesFromFolderTooltip": "Открывает файловый менеджер для выбора одной или несколько папок для массовой загрузки обновлений", - "OpenRyujinxFolderTooltip": "Открывает папку с файлами Ryujinx. ", - "OpenScreenshotFolderTooltip": "Открывает папку скриншотов Ryujinx", + "OpenRyujinxFolderTooltip": "Открывает папку с файлами Kenji-NX. ", + "OpenScreenshotFolderTooltip": "Открывает папку скриншотов Kenji-NX", "OpenRyujinxLogsTooltip": "Открывает папку в которую записываются логи", - "ExitTooltip": "Выйти из Ryujinx", + "ExitTooltip": "Выйти из Kenji-NX", "OpenSettingsTooltip": "Открывает окно параметров", "OpenProfileManagerTooltip": "Открыть менеджер учетных записей", "StopEmulationTooltip": "Остановка эмуляции текущей игры и возврат к списку игр", - "CheckUpdatesTooltip": "Проверяет наличие обновлений для Ryujinx", + "CheckUpdatesTooltip": "Проверяет наличие обновлений для Kenji-NX", "OpenAboutTooltip": "Открывает окно «О программе»", "GridSize": "Размер сетки", "GridSizeTooltip": "Меняет размер сетки элементов", @@ -678,7 +678,7 @@ "GameListContextMenuManageModToolTip": "Открывает окно управления модами", "GameListContextMenuManageMod": "Управление модами", "ControllerSettingsStickRange": "Диапазон:", - "DialogStopEmulationTitle": "Ryujinx - Остановка эмуляции", + "DialogStopEmulationTitle": "Kenji-NX - Остановка эмуляции", "DialogStopEmulationMessage": "Вы уверены, что хотите остановить эмуляцию?", "SettingsTabCpu": "Процессор", "SettingsTabAudio": "Аудио", @@ -686,7 +686,7 @@ "SettingsTabNetworkConnection": "Подключение к сети", "SettingsTabCpuCache": "Кэш процессора", "SettingsTabCpuMemory": "Режим процессора", - "DialogUpdaterFlatpakNotSupportedMessage": "Пожалуйста, обновите Ryujinx через FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Пожалуйста, обновите Kenji-NX через FlatHub.", "UpdaterDisabledWarningTitle": "Средство обновления отключено", "ControllerSettingsRotate90": "Повернуть на 90° по часовой стрелке", "IconSize": "Размер обложек", @@ -699,10 +699,10 @@ "UserErrorApplicationNotFound": "Приложение не найдено", "UserErrorUnknown": "Неизвестная ошибка", "UserErrorUndefined": "Неопределенная ошибка", - "UserErrorNoKeysDescription": "Ryujinx не удалось найти ваш файл «prod.keys»", - "UserErrorNoFirmwareDescription": "Ryujinx не удалось найти ни одной установленной прошивки", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx не удалось распаковать выбранную прошивку. Обычно это вызвано устаревшими ключами.", - "UserErrorApplicationNotFoundDescription": "Ryujinx не удалось найти валидное приложение по указанному пути.", + "UserErrorNoKeysDescription": "Kenji-NX не удалось найти ваш файл «prod.keys»", + "UserErrorNoFirmwareDescription": "Kenji-NX не удалось найти ни одной установленной прошивки", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX не удалось распаковать выбранную прошивку. Обычно это вызвано устаревшими ключами.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX не удалось найти валидное приложение по указанному пути.", "UserErrorUnknownDescription": "Произошла неизвестная ошибка", "UserErrorUndefinedDescription": "Произошла неизвестная ошибка. Этого не должно происходить, пожалуйста, свяжитесь с разработчиками.", "OpenSetupGuideMessage": "Открыть руководство по установке", @@ -716,8 +716,8 @@ "TitleXCIStatusFailedLabel": "(не удалось)", "TitleXCICanSaveLabel": "Сохранить {0:n0} Мб", "TitleXCISavingLabel": "Сохранено {0:n0} Мб", - "RyujinxInfo": "Ryujinx - Информация", - "RyujinxConfirm": "Ryujinx - Подтверждение", + "RyujinxInfo": "Kenji-NX - Информация", + "RyujinxConfirm": "Kenji-NX - Подтверждение", "FileDialogAllTypes": "Все типы", "Never": "Никогда", "SwkbdMinCharacters": "Должно быть не менее {0} символов.", @@ -751,7 +751,7 @@ "OpenFileDialogTitle": "Выберите совместимый файл для открытия", "OpenFolderDialogTitle": "Выберите папку с распакованной игрой", "AllSupportedFormats": "Все поддерживаемые форматы", - "RyujinxUpdater": "Ryujinx - Обновление", + "RyujinxUpdater": "Kenji-NX - Обновление", "SettingsTabHotkeys": "Горячие клавиши", "SettingsTabHotkeysHotkeys": "Горячие клавиши", "SettingsTabHotkeysToggleVsyncHotkey": "Вертикальная синхронизация:", @@ -836,10 +836,10 @@ "SettingsEnableTextureRecompressionTooltip": "Сжатие ASTC текстур для уменьшения использования VRAM. \n\nИгры, использующие этот формат текстур: Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder и The Legend of Zelda: Tears of the Kingdom. \nНа видеоадаптерах с 4GiB видеопамяти или менее возможны вылеты при запуске этих игр. \n\nВключите, только если у вас заканчивается видеопамять в вышеупомянутых играх. \n\nРекомендуется оставить выключенным.", "SettingsTabGraphicsPreferredGpu": "Предпочтительный видеоадаптер", "SettingsTabGraphicsPreferredGpuTooltip": "Выберает видеоадаптер, который будет использоваться графическим бэкендом Vulkan.\n\nЭта настройка не влияет на видеоадаптер, который будет использоваться с OpenGL.\n\nЕсли вы не уверены что нужно выбрать, используйте графический процессор, помеченный как \"dGPU\". Если его нет, оставьте выбор по умолчанию.", - "SettingsAppRequiredRestartMessage": "Требуется перезапуск Ryujinx", + "SettingsAppRequiredRestartMessage": "Требуется перезапуск Kenji-NX", "SettingsGpuBackendRestartMessage": "Графический бэкенд или настройки графического процессора были изменены. Требуется перезапуск для вступления в силу изменений.", "SettingsGpuBackendRestartSubMessage": "Перезапустить сейчас?", - "RyujinxUpdaterMessage": "Обновить Ryujinx до последней версии?", + "RyujinxUpdaterMessage": "Обновить Kenji-NX до последней версии?", "SettingsTabHotkeysVolumeUpHotkey": "Увеличить громкость:", "SettingsTabHotkeysVolumeDownHotkey": "Уменьшить громкость:", "SettingsEnableMacroHLE": "Использовать макрос высокоуровневой эмуляции видеоадаптера", @@ -883,7 +883,7 @@ "AboutChangelogButtonTooltipMessage": "Нажмите, чтобы открыть список изменений для этой версии", "SettingsTabNetworkMultiplayer": "Мультиплеер", "MultiplayerMode": "Режим:", - "MultiplayerModeTooltip": "Меняет многопользовательский режим LDN.\n\nLdnMitm модифицирует функциональность локальной беспроводной/игры на одном устройстве в играх, позволяя играть с другими пользователями Ryujinx или взломанными консолями Nintendo Switch с установленным модулем ldn_mitm, находящимися в одной локальной сети друг с другом.\n\nМногопользовательская игра требует наличия у всех игроков одной и той же версии игры (т.е. Super Smash Bros. Ultimate v13.0.1 не может подключиться к v13.0.0).\n\nРекомендуется оставить отключенным.", + "MultiplayerModeTooltip": "Меняет многопользовательский режим LDN.\n\nLdnMitm модифицирует функциональность локальной беспроводной/игры на одном устройстве в играх, позволяя играть с другими пользователями Kenji-NX или взломанными консолями Nintendo Switch с установленным модулем ldn_mitm, находящимися в одной локальной сети друг с другом.\n\nМногопользовательская игра требует наличия у всех игроков одной и той же версии игры (т.е. Super Smash Bros. Ultimate v13.0.1 не может подключиться к v13.0.0).\n\nРекомендуется оставить отключенным.", "MultiplayerModeDisabled": "Отключено", "MultiplayerModeLdnMitm": "ldn_mitm", "MultiplayerModeLdnRyu": "RyuLDN", @@ -891,11 +891,11 @@ "MultiplayerDisableP2PTooltip": "Отключает хостинг P2P-сетей, пользователи будут проксировать через главный сервер, а не подключаться к вам напрямую.", "LdnPassphrase": "Фраза-пароль сети:", "LdnPassphraseTooltip": "Вы сможете видеть только те игры, в которых используется та же фраза-пароль, что и у вас.", - "LdnPassphraseInputTooltip": "Введите фразу-пароль в формате Ryujinx-<8 hex символов>. Вы сможете видеть только те игры, в которых используется та же фраза-пароль, что и у вас.", + "LdnPassphraseInputTooltip": "Введите фразу-пароль в формате Kenji-NX-<8 hex символов>. Вы сможете видеть только те игры, в которых используется та же фраза-пароль, что и у вас.", "LdnPassphraseInputPublic": "(публичная)", "GenLdnPass": "Сгенерировать случайную", "GenLdnPassTooltip": "Генерирует случайную фразу-пароль, которой вы можете поделится с другими игроками.", "ClearLdnPass": "Очистить", "ClearLdnPassTooltip": "Удаляет текущую фразу-пароль, вы возвращаетесь в публичную сеть.", - "InvalidLdnPassphrase": "Недопустимая фраза-пароль! Она должна быть в формате «Ryujinx-<8 hex символов>»" + "InvalidLdnPassphrase": "Недопустимая фраза-пароль! Она должна быть в формате «Kenji-NX-<8 hex символов>»" } diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Kenjinx/Assets/Locales/th_TH.json similarity index 99% rename from src/Ryujinx/Assets/Locales/th_TH.json rename to src/Kenjinx/Assets/Locales/th_TH.json index 7907f1874..8799b2149 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Kenjinx/Assets/Locales/th_TH.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "โหลดเกมที่คลายแพ็กแล้ว", "MenuBarFileLoadDlcFromFolder": "โหลด DLC จากโฟลเดอร์", "MenuBarFileLoadTitleUpdatesFromFolder": "โหลดไฟล์อัพเดตจากโฟลเดอร์", - "MenuBarFileOpenEmuFolder": "เปิดโฟลเดอร์ Ryujinx", + "MenuBarFileOpenEmuFolder": "เปิดโฟลเดอร์ Kenji-NX", "MenuBarFileOpenLogsFolder": "เปิดโฟลเดอร์ Logs", "MenuBarFileExit": "_ออก", "MenuBarOptions": "_ตัวเลือก", @@ -623,7 +623,7 @@ "DebugLogTooltip": "พิมพ์ข้อความประวัติการแก้ไขข้อบกพร่องในคอนโซล\n\nใช้สิ่งนี้เฉพาะเมื่อได้รับคำแนะนำจากเจ้าหน้าที่โดยเฉพาะเท่านั้น เนื่องจากจะทำให้บันทึกอ่านยากและทำให้ประสิทธิภาพของโปรแกรมจำลองแย่ลง", "LoadApplicationFileTooltip": "เปิด File Explorer เพื่อเลือกไฟล์ที่เข้ากันได้กับ Switch ที่จะโหลด", "LoadApplicationFolderTooltip": "เปิดตัวสำรวจไฟล์เพื่อเลือกไฟล์ที่เข้ากันได้กับ Switch ที่จะโหลด", - "OpenRyujinxFolderTooltip": "เปิดโฟลเดอร์ระบบไฟล์ Ryujinx", + "OpenRyujinxFolderTooltip": "เปิดโฟลเดอร์ระบบไฟล์ Kenji-NX", "OpenRyujinxLogsTooltip": "เปิดโฟลเดอร์ ที่เก็บไฟล์ประวัติ", "ExitTooltip": "ออกจากโปรแกรม รียูจินซ์", "OpenSettingsTooltip": "เปิดหน้าต่างการตั้งค่า", @@ -803,7 +803,7 @@ "AboutChangelogButtonTooltipMessage": "คลิกเพื่อเปิดประวัติการเปลี่ยนแปลงสำหรับเวอร์ชั่นนี้ บนเบราว์เซอร์เริ่มต้นของคุณ", "SettingsTabNetworkMultiplayer": "ผู้เล่นหลายคน", "MultiplayerMode": "โหมด:", - "MultiplayerModeTooltip": "เปลี่ยนโหมดผู้เล่นหลายคนของ LDN\n\nLdnMitm จะปรับเปลี่ยนฟังก์ชันการเล่นแบบไร้สาย/ภายใน จะให้เกมทำงานเหมือนกับว่าเป็น LAN ช่วยให้สามารถเชื่อมต่อภายในเครือข่ายเดียวกันกับอินสแตนซ์ Ryujinx อื่น ๆ และคอนโซล Nintendo Switch ที่ถูกแฮ็กซึ่งมีโมดูล ldn_mitm ติดตั้งอยู่\n\nผู้เล่นหลายคนต้องการให้ผู้เล่นทุกคนอยู่ในเกมเวอร์ชันเดียวกัน (เช่น Super Smash Bros. Ultimate v13.0.1 ไม่สามารถเชื่อมต่อกับ v13.0.0)\n\nปล่อยให้ปิดการใช้งานหากไม่แน่ใจ", + "MultiplayerModeTooltip": "เปลี่ยนโหมดผู้เล่นหลายคนของ LDN\n\nLdnMitm จะปรับเปลี่ยนฟังก์ชันการเล่นแบบไร้สาย/ภายใน จะให้เกมทำงานเหมือนกับว่าเป็น LAN ช่วยให้สามารถเชื่อมต่อภายในเครือข่ายเดียวกันกับอินสแตนซ์ Kenji-NX อื่น ๆ และคอนโซล Nintendo Switch ที่ถูกแฮ็กซึ่งมีโมดูล ldn_mitm ติดตั้งอยู่\n\nผู้เล่นหลายคนต้องการให้ผู้เล่นทุกคนอยู่ในเกมเวอร์ชันเดียวกัน (เช่น Super Smash Bros. Ultimate v13.0.1 ไม่สามารถเชื่อมต่อกับ v13.0.0)\n\nปล่อยให้ปิดการใช้งานหากไม่แน่ใจ", "MultiplayerModeDisabled": "Disabled", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Kenjinx/Assets/Locales/tr_TR.json similarity index 92% rename from src/Ryujinx/Assets/Locales/tr_TR.json rename to src/Kenjinx/Assets/Locales/tr_TR.json index cc8aa4801..80b3d6d35 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Kenjinx/Assets/Locales/tr_TR.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "_Sıkıştırılmamış Oyun Aç", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "Ryujinx Klasörünü aç", + "MenuBarFileOpenEmuFolder": "Kenji-NX Klasörünü aç", "MenuBarFileOpenLogsFolder": "Logs Klasörünü aç", "MenuBarFileExit": "_Çıkış", "MenuBarOptions": "_Seçenekler", @@ -95,11 +95,11 @@ "StatusBarSystemVersion": "Sistem Sürümü: {0}", "LinuxVmMaxMapCountDialogTitle": "Bellek Haritaları İçin Düşük Limit Tespit Edildi ", "LinuxVmMaxMapCountDialogTextPrimary": "vm.max_map_count değerini {0} sayısına yükseltmek ister misiniz", - "LinuxVmMaxMapCountDialogTextSecondary": "Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Ryujinx bu limitin geçildiği takdirde kendini kapatıcaktır.", + "LinuxVmMaxMapCountDialogTextSecondary": "Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Kenji-NX bu limitin geçildiği takdirde kendini kapatıcaktır.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Evet, bir sonraki yeniden başlatmaya kadar", "LinuxVmMaxMapCountDialogButtonPersistent": "Evet, kalıcı olarak", "LinuxVmMaxMapCountWarningTextPrimary": "İzin verilen maksimum bellek haritası değeri tavsiye edildiğinden daha düşük. ", - "LinuxVmMaxMapCountWarningTextSecondary": "Şu anki vm.max_map_count değeri {0}, bu {1} değerinden daha az. Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Ryujinx bu limitin geçildiği takdirde kendini kapatıcaktır.\n\nManuel olarak bu limiti arttırmayı deneyebilir ya da pkexec'i yükleyebilirsiniz, bu da Ryujinx'in yardımcı olmasına izin verir.", + "LinuxVmMaxMapCountWarningTextSecondary": "Şu anki vm.max_map_count değeri {0}, bu {1} değerinden daha az. Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Kenji-NX bu limitin geçildiği takdirde kendini kapatıcaktır.\n\nManuel olarak bu limiti arttırmayı deneyebilir ya da pkexec'i yükleyebilirsiniz, bu da Kenji-NX'in yardımcı olmasına izin verir.", "Settings": "Ayarlar", "SettingsTabGeneral": "Kullancı Arayüzü", "SettingsTabGeneralGeneral": "Genel", @@ -428,42 +428,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Zayıf Titreşim Seviyesi", "DialogMessageSaveNotAvailableMessage": "{0} [{1:x16}] için kayıt verisi bulunamadı", "DialogMessageSaveNotAvailableCreateSaveMessage": "Bu oyun için kayıt verisi oluşturmak ister misiniz?", - "DialogConfirmationTitle": "Ryujinx - Onay", - "DialogUpdaterTitle": "Ryujinx - Güncelleyici", - "DialogErrorTitle": "Ryujinx - Hata", - "DialogWarningTitle": "Ryujinx - Uyarı", - "DialogExitTitle": "Ryujinx - Çıkış", - "DialogErrorMessage": "Ryujinx bir hata ile karşılaştı", - "DialogExitMessage": "Ryujinx'i kapatmak istediğinizden emin misiniz?", + "DialogConfirmationTitle": "Kenji-NX - Onay", + "DialogUpdaterTitle": "Kenji-NX - Güncelleyici", + "DialogErrorTitle": "Kenji-NX - Hata", + "DialogWarningTitle": "Kenji-NX - Uyarı", + "DialogExitTitle": "Kenji-NX - Çıkış", + "DialogErrorMessage": "Kenji-NX bir hata ile karşılaştı", + "DialogExitMessage": "Kenji-NX'i kapatmak istediğinizden emin misiniz?", "DialogExitSubMessage": "Kaydedilmeyen bütün veriler kaybedilecek!", "DialogMessageCreateSaveErrorMessage": "Belirtilen kayıt verisi oluşturulurken bir hata oluştu: {0}", "DialogMessageFindSaveErrorMessage": "Belirtilen kayıt verisi bulunmaya çalışırken hata: {0}", "FolderDialogExtractTitle": "İçine ayıklanacak klasörü seç", "DialogNcaExtractionMessage": "{1} den {0} kısmı ayıklanıyor...", - "DialogNcaExtractionTitle": "Ryujinx - NCA Kısmı Ayıklayıcısı", + "DialogNcaExtractionTitle": "Kenji-NX - NCA Kısmı Ayıklayıcısı", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Ayıklama hatası. Ana NCA seçilen dosyada bulunamadı.", "DialogNcaExtractionCheckLogErrorMessage": "Ayıklama hatası. Ek bilgi için kayıt dosyasını okuyun.", "DialogNcaExtractionSuccessMessage": "Ayıklama başarıyla tamamlandı.", - "DialogUpdaterConvertFailedMessage": "Güncel Ryujinx sürümü dönüştürülemedi.", + "DialogUpdaterConvertFailedMessage": "Güncel Kenji-NX sürümü dönüştürülemedi.", "DialogUpdaterCancelUpdateMessage": "Güncelleme iptal ediliyor!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Zaten Ryujinx'in en güncel sürümünü kullanıyorsunuz!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Zaten Kenji-NX'in en güncel sürümünü kullanıyorsunuz!", "DialogUpdaterFailedToGetVersionMessage": "GitHub tarafından sürüm bilgileri alınırken bir hata oluştu. Eğer yeni sürüm için hazırlıklar yapılıyorsa bu hatayı almanız olasıdır. Lütfen birkaç dakika sonra tekrar deneyiniz.", - "DialogUpdaterConvertFailedGithubMessage": "Github Release'den alınan Ryujinx sürümü dönüştürülemedi.", + "DialogUpdaterConvertFailedGithubMessage": "Github Release'den alınan Kenji-NX sürümü dönüştürülemedi.", "DialogUpdaterDownloadingMessage": "Güncelleme İndiriliyor...", "DialogUpdaterExtractionMessage": "Güncelleme Ayıklanıyor...", "DialogUpdaterRenamingMessage": "Güncelleme Yeniden Adlandırılıyor...", "DialogUpdaterAddingFilesMessage": "Yeni Güncelleme Ekleniyor...", "DialogUpdaterCompleteMessage": "Güncelleme Tamamlandı!", - "DialogUpdaterRestartMessage": "Ryujinx'i şimdi yeniden başlatmak istiyor musunuz?", + "DialogUpdaterRestartMessage": "Kenji-NX'i şimdi yeniden başlatmak istiyor musunuz?", "DialogUpdaterNoInternetMessage": "İnternete bağlı değilsiniz!", "DialogUpdaterNoInternetSubMessage": "Lütfen aktif bir internet bağlantınız olduğunu kontrol edin!", - "DialogUpdaterDirtyBuildMessage": "Ryujinx'in Dirty build'lerini güncelleyemezsiniz!", - "DialogUpdaterDirtyBuildSubMessage": "Desteklenen bir sürüm için lütfen Ryujinx'i https://ryujinx.org/ sitesinden indirin.", + "DialogUpdaterDirtyBuildMessage": "Kenji-NX'in Dirty build'lerini güncelleyemezsiniz!", + "DialogUpdaterDirtyBuildSubMessage": "Desteklenen bir sürüm için lütfen Kenji-NX'i https://ryujinx.org/ sitesinden indirin.", "DialogRestartRequiredMessage": "Yeniden Başlatma Gerekli", "DialogThemeRestartMessage": "Tema kaydedildi. Temayı uygulamak için yeniden başlatma gerekiyor.", "DialogThemeRestartSubMessage": "Yeniden başlatmak ister misiniz", "DialogFirmwareInstallEmbeddedMessage": "Bu oyunun içine gömülü olan yazılımı yüklemek ister misiniz? (Firmware {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Ryujinx was able to install firmware {0} from the provided game.\nThe emulator will now start.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Kenji-NX was able to install firmware {0} from the provided game.\nThe emulator will now start.", "DialogFirmwareNoFirmwareInstalledMessage": "Yazılım Yüklü Değil", "DialogFirmwareInstalledMessage": "Yazılım {0} yüklendi", "DialogInstallFileTypesSuccessMessage": "Dosya uzantıları başarıyla yüklendi!", @@ -477,7 +477,7 @@ "DialogErrorAppletErrorExceptionMessage": "Applet diyaloğu gösterilirken hata: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nBu hatayı düzeltmek adına daha fazla bilgi için kurulum kılavuzumuzu takip edin.", - "DialogUserErrorDialogTitle": "Ryujinx Hatası ({0})", + "DialogUserErrorDialogTitle": "Kenji-NX Hatası ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "API'dan bilgi alırken bir hata oluştu.", "DialogAmiiboApiConnectErrorMessage": "Amiibo API sunucusuna bağlanılamadı. Sunucu çevrimdışı olabilir veya uygun bir internet bağlantınızın olduğunu kontrol etmeniz gerekebilir.", @@ -491,7 +491,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Belirtilen Shader cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", "DialogShaderDeletionErrorMessage": "Belirtilen Shader cache temizlenirken hata {0}: {1}", - "DialogRyujinxErrorMessage": "Ryujinx bir hata ile karşılaştı", + "DialogRyujinxErrorMessage": "Kenji-NX bir hata ile karşılaştı", "DialogInvalidTitleIdErrorMessage": "Arayüz hatası: Seçilen oyun geçerli bir title ID'ye sahip değil", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "{0} da geçerli bir sistem firmware'i bulunamadı.", "DialogFirmwareInstallerFirmwareInstallTitle": "Firmware {0} Yükle", @@ -527,7 +527,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Lütfen yeni bir oyun açmadan önce emülasyonu durdurun veya emülatörü kapatın.", "DialogUpdateAddUpdateErrorMessage": "Belirtilen dosya seçilen oyun için güncelleme içermiyor!", "DialogSettingsBackendThreadingWarningTitle": "Uyarı - Backend Threading", - "DialogSettingsBackendThreadingWarningMessage": "Bu seçeneğin tamamen uygulanması için Ryujinx'in kapatıp açılması gerekir. Kullandığınız işletim sistemine bağlı olarak, Ryujinx'in multithreading'ini kullanırken driver'ınızın multithreading seçeneğini kapatmanız gerekebilir.", + "DialogSettingsBackendThreadingWarningMessage": "Bu seçeneğin tamamen uygulanması için Kenji-NX'in kapatıp açılması gerekir. Kullandığınız işletim sistemine bağlı olarak, Kenji-NX'in multithreading'ini kullanırken driver'ınızın multithreading seçeneğini kapatmanız gerekebilir.", "DialogModManagerDeletionWarningMessage": "You are about to delete the mod: {0}\n\nAre you sure you want to proceed?", "DialogModManagerDeletionAllWarningMessage": "You are about to delete all mods for this title.\n\nAre you sure you want to proceed?", "SettingsTabGraphicsFeaturesOptions": "Özellikler", @@ -540,15 +540,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "Dosya adı geçersiz karakter içeriyor. Lütfen tekrar deneyin.", "MenuBarOptionsPauseEmulation": "Durdur", "MenuBarOptionsResumeEmulation": "Devam Et", - "AboutUrlTooltipMessage": "Ryujinx'in websitesini varsayılan tarayıcınızda açmak için tıklayın.", - "AboutDisclaimerMessage": "Ryujinx, Nintendo™ veya ortaklarıyla herhangi bir şekilde bağlantılı değildir.", + "AboutUrlTooltipMessage": "Kenji-NX'in websitesini varsayılan tarayıcınızda açmak için tıklayın.", + "AboutDisclaimerMessage": "Kenji-NX, Nintendo™ veya ortaklarıyla herhangi bir şekilde bağlantılı değildir.", "AboutAmiiboDisclaimerMessage": "Amiibo emülasyonumuzda \nAmiiboAPI (www.amiiboapi.com) kullanılmaktadır.", - "AboutPatreonUrlTooltipMessage": "Ryujinx'in Patreon sayfasını varsayılan tarayıcınızda açmak için tıklayın.", - "AboutGithubUrlTooltipMessage": "Ryujinx'in GitHub sayfasını varsayılan tarayıcınızda açmak için tıklayın.", - "AboutDiscordUrlTooltipMessage": "Varsayılan tarayıcınızda Ryujinx'in Discord'una bir davet açmak için tıklayın.", - "AboutTwitterUrlTooltipMessage": "Ryujinx'in Twitter sayfasını varsayılan tarayıcınızda açmak için tıklayın.", + "AboutPatreonUrlTooltipMessage": "Kenji-NX'in Patreon sayfasını varsayılan tarayıcınızda açmak için tıklayın.", + "AboutGithubUrlTooltipMessage": "Kenji-NX'in GitHub sayfasını varsayılan tarayıcınızda açmak için tıklayın.", + "AboutDiscordUrlTooltipMessage": "Varsayılan tarayıcınızda Kenji-NX'in Discord'una bir davet açmak için tıklayın.", + "AboutTwitterUrlTooltipMessage": "Kenji-NX'in Twitter sayfasını varsayılan tarayıcınızda açmak için tıklayın.", "AboutRyujinxAboutTitle": "Hakkında:", - "AboutRyujinxAboutContent": "Ryujinx bir Nintendo Switch™ emülatörüdür.\n\nKatkıda bulunmak isteyen geliştiriciler GitHub üzerinden daha fazla bilgi edinebilir.", + "AboutRyujinxAboutContent": "Kenji-NX bir Nintendo Switch™ emülatörüdür.\n\nKatkıda bulunmak isteyen geliştiriciler GitHub üzerinden daha fazla bilgi edinebilir.", "AboutRyujinxMaintainersTitle": "Geliştiriciler:", "AboutRyujinxFormerMaintainersTitle": "Önceki Geliştiriciler:", "AboutRyujinxMaintainersContentTooltipMessage": "Katkıda bulunanlar sayfasını varsayılan tarayıcınızda açmak için tıklayın.", @@ -575,7 +575,7 @@ "OrderDescending": "Azalan", "SettingsTabGraphicsFeatures": "Özellikler & İyileştirmeler", "ErrorWindowTitle": "Hata Penceresi", - "ToggleDiscordTooltip": "Ryujinx'i \"şimdi oynanıyor\" Discord aktivitesinde göstermeyi veya göstermemeyi seçin", + "ToggleDiscordTooltip": "Kenji-NX'i \"şimdi oynanıyor\" Discord aktivitesinde göstermeyi veya göstermemeyi seçin", "AddGameDirBoxTooltip": "Listeye eklemek için oyun dizini seçin", "AddGameDirTooltip": "Listeye oyun dizini ekle", "RemoveGameDirTooltip": "Seçili oyun dizinini kaldır", @@ -597,7 +597,7 @@ "MemoryManagerTooltip": "Guest hafızasının nasıl tahsis edilip erişildiğini değiştirir. Emüle edilen CPU performansını ciddi biçimde etkiler.\n\nEmin değilseniz HOST UNCHECKED seçeneğine ayarlayın.", "MemoryManagerSoftwareTooltip": "Adres çevirisi için bir işlemci sayfası kullanır. En yüksek doğruluğu ve en yavaş performansı sunar.", "MemoryManagerHostTooltip": "Hafızayı doğrudan host adres aralığında tahsis eder. Çok daha hızlı JIT derleme ve işletimi sunar.", - "MemoryManagerUnsafeTooltip": "Hafızayı doğrudan tahsis eder, ancak host aralığına erişimden önce adresi maskelemez. Daha iyi performansa karşılık emniyetten ödün verir. Misafir uygulama Ryujinx içerisinden istediği hafızaya erişebilir, bu sebeple bu seçenek ile sadece güvendiğiniz uygulamaları çalıştırın.", + "MemoryManagerUnsafeTooltip": "Hafızayı doğrudan tahsis eder, ancak host aralığına erişimden önce adresi maskelemez. Daha iyi performansa karşılık emniyetten ödün verir. Misafir uygulama Kenji-NX içerisinden istediği hafızaya erişebilir, bu sebeple bu seçenek ile sadece güvendiğiniz uygulamaları çalıştırın.", "UseHypervisorTooltip": "JIT yerine Hypervisor kullan. Uygun durumlarda performansı büyük oranda arttırır. Ancak şu anki halinde stabil durumda çalışmayabilir.", "DRamTooltip": "Emüle edilen sistem hafızasını 4GiB'dan 6GiB'a yükseltir.\n\nBu seçenek yalnızca yüksek çözünürlük doku paketleri veya 4k çözünürlük modları için kullanılır. Performansı artırMAZ!\n\nEmin değilseniz devre dışı bırakın.", "IgnoreMissingServicesTooltip": "Henüz programlanmamış Horizon işletim sistemi servislerini görmezden gelir. Bu seçenek belirli oyunların açılırken çökmesinin önüne geçmeye yardımcı olabilir.\n\nEmin değilseniz devre dışı bırakın.", @@ -623,13 +623,13 @@ "DebugLogTooltip": "Debug log mesajlarını konsola yazdırır.\n\nBu seçeneği yalnızca geliştirici üyemiz belirtirse aktifleştirin, çünkü bu seçenek log dosyasını okumayı zorlaştırır ve emülatörün performansını düşürür.", "LoadApplicationFileTooltip": "Switch ile uyumlu bir dosya yüklemek için dosya tarayıcısını açar", "LoadApplicationFolderTooltip": "Switch ile uyumlu ayrıştırılmamış bir uygulama yüklemek için dosya tarayıcısını açar", - "OpenRyujinxFolderTooltip": "Ryujinx dosya sistem klasörünü açar", + "OpenRyujinxFolderTooltip": "Kenji-NX dosya sistem klasörünü açar", "OpenRyujinxLogsTooltip": "Log dosyalarının bulunduğu klasörü açar", - "ExitTooltip": "Ryujinx'ten çıkış yapmayı sağlar", + "ExitTooltip": "Kenji-NX'ten çıkış yapmayı sağlar", "OpenSettingsTooltip": "Seçenekler penceresini açar", "OpenProfileManagerTooltip": "Kullanıcı profil yöneticisi penceresini açar", "StopEmulationTooltip": "Oynanmakta olan oyunun emülasyonunu durdurup oyun seçimine geri döndürür", - "CheckUpdatesTooltip": "Ryujinx güncellemelerini denetlemeyi sağlar", + "CheckUpdatesTooltip": "Kenji-NX güncellemelerini denetlemeyi sağlar", "OpenAboutTooltip": "Hakkında penceresini açar", "GridSize": "Öge Boyutu", "GridSizeTooltip": "Grid ögelerinin boyutunu değiştirmeyi sağlar", @@ -644,7 +644,7 @@ "GameListContextMenuManageModToolTip": "Modları Yönet", "GameListContextMenuManageMod": "Modları Yönet", "ControllerSettingsStickRange": "Menzil:", - "DialogStopEmulationTitle": "Ryujinx - Emülasyonu Durdur", + "DialogStopEmulationTitle": "Kenji-NX - Emülasyonu Durdur", "DialogStopEmulationMessage": "Emülasyonu durdurmak istediğinizden emin misiniz?", "SettingsTabCpu": "İşlemci", "SettingsTabAudio": "Ses", @@ -652,7 +652,7 @@ "SettingsTabNetworkConnection": "Ağ Bağlantısı", "SettingsTabCpuCache": "İşlemci Belleği", "SettingsTabCpuMemory": "CPU Hafızası", - "DialogUpdaterFlatpakNotSupportedMessage": "Lütfen Ryujinx'i FlatHub aracılığıyla güncelleyin.", + "DialogUpdaterFlatpakNotSupportedMessage": "Lütfen Kenji-NX'i FlatHub aracılığıyla güncelleyin.", "UpdaterDisabledWarningTitle": "Güncelleyici Devre Dışı!", "ControllerSettingsRotate90": "Saat yönünde 90° Döndür", "IconSize": "Ikon Boyutu", @@ -665,17 +665,17 @@ "UserErrorApplicationNotFound": "Uygulama bulunamadı", "UserErrorUnknown": "Bilinmeyen hata", "UserErrorUndefined": "Tanımlanmayan hata", - "UserErrorNoKeysDescription": "Ryujinx 'prod.keys' dosyasını bulamadı", - "UserErrorNoFirmwareDescription": "Ryujinx yüklü herhangi firmware bulamadı", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx temin edilen firmware'i çözümleyemedi. Bu durum genellikle güncel olmayan keys'den kaynaklanır.", - "UserErrorApplicationNotFoundDescription": "Ryujinx belirtilen yolda geçerli bir uygulama bulamadı.", + "UserErrorNoKeysDescription": "Kenji-NX 'prod.keys' dosyasını bulamadı", + "UserErrorNoFirmwareDescription": "Kenji-NX yüklü herhangi firmware bulamadı", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX temin edilen firmware'i çözümleyemedi. Bu durum genellikle güncel olmayan keys'den kaynaklanır.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX belirtilen yolda geçerli bir uygulama bulamadı.", "UserErrorUnknownDescription": "Bilinmeyen bir hata oluştu!", "UserErrorUndefinedDescription": "Tanımlanmayan bir hata oluştu! Bu durum ile karşılaşılmamalıydı, lütfen bir geliştirici ile iletişime geçin!", "OpenSetupGuideMessage": "Kurulum Kılavuzunu Aç", "NoUpdate": "Güncelleme Yok", "TitleUpdateVersionLabel": "Sürüm {0} - {1}", - "RyujinxInfo": "Ryujinx - Bilgi", - "RyujinxConfirm": "Ryujinx - Doğrulama", + "RyujinxInfo": "Kenji-NX - Bilgi", + "RyujinxConfirm": "Kenji-NX - Doğrulama", "FileDialogAllTypes": "Tüm türler", "Never": "Hiçbir Zaman", "SwkbdMinCharacters": "En az {0} karakter uzunluğunda olmalı", @@ -709,7 +709,7 @@ "OpenFileDialogTitle": "Açmak için desteklenen bir dosya seçin", "OpenFolderDialogTitle": "Ayrıştırılmamış oyun içeren bir klasör seçin", "AllSupportedFormats": "Tüm Desteklenen Formatlar", - "RyujinxUpdater": "Ryujinx Güncelleyicisi", + "RyujinxUpdater": "Kenji-NX Güncelleyicisi", "SettingsTabHotkeys": "Klavye Kısayolları", "SettingsTabHotkeysHotkeys": "Klavye Kısayolları", "SettingsTabHotkeysToggleVsyncHotkey": "VSync'i Etkinleştir/Devre Dışı Bırak:", @@ -757,10 +757,10 @@ "SettingsEnableTextureRecompressionTooltip": "Compresses ASTC textures in order to reduce VRAM usage.\n\nGames using this texture format include Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder and The Legend of Zelda: Tears of the Kingdom.\n\nGraphics cards with 4GiB VRAM or less will likely crash at some point while running these games.\n\nEnable only if you're running out of VRAM on the aforementioned games. Leave OFF if unsure.", "SettingsTabGraphicsPreferredGpu": "Kullanılan GPU", "SettingsTabGraphicsPreferredGpuTooltip": "Vulkan Grafik Arka Ucu ile kullanılacak Ekran Kartını Seçin.\n\nOpenGL'nin kullanacağı GPU'yu etkilemez.\n\n Emin değilseniz \"dGPU\" olarak işaretlenmiş GPU'ya ayarlayın. Eğer yoksa, dokunmadan bırakın.\n", - "SettingsAppRequiredRestartMessage": "Ryujinx'i Yeniden Başlatma Gerekli", + "SettingsAppRequiredRestartMessage": "Kenji-NX'i Yeniden Başlatma Gerekli", "SettingsGpuBackendRestartMessage": "Grafik Motoru ya da GPU ayarları değiştirildi. Bu işlemin uygulanması için yeniden başlatma gerekli.", "SettingsGpuBackendRestartSubMessage": "Şimdi yeniden başlatmak istiyor musunuz?", - "RyujinxUpdaterMessage": "Ryujinx'i en son sürüme güncellemek ister misiniz?", + "RyujinxUpdaterMessage": "Kenji-NX'i en son sürüme güncellemek ister misiniz?", "SettingsTabHotkeysVolumeUpHotkey": "Sesi Arttır:", "SettingsTabHotkeysVolumeDownHotkey": "Sesi Azalt:", "SettingsEnableMacroHLE": "Macro HLE'yi Aktifleştir", @@ -803,7 +803,7 @@ "AboutChangelogButtonTooltipMessage": "Kullandığınız versiyon için olan değişiklikleri varsayılan tarayıcınızda görmek için tıklayın", "SettingsTabNetworkMultiplayer": "Çok Oyunculu", "MultiplayerMode": "Mod:", - "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", + "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Kenji-NX instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Devre Dışı", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Kenjinx/Assets/Locales/uk_UA.json similarity index 93% rename from src/Ryujinx/Assets/Locales/uk_UA.json rename to src/Kenjinx/Assets/Locales/uk_UA.json index ae8352343..4d7daf920 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Kenjinx/Assets/Locales/uk_UA.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "Завантажити _розпаковану гру", "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", - "MenuBarFileOpenEmuFolder": "Відкрити теку Ryujinx", + "MenuBarFileOpenEmuFolder": "Відкрити теку Kenji-NX", "MenuBarFileOpenScreenshotsFolder": "Відкрити теку скріншотів", "MenuBarFileOpenLogsFolder": "Відкрити теку журналів змін", "MenuBarFileExit": "_Вихід", @@ -97,11 +97,11 @@ "StatusBarSystemVersion": "Версія системи: {0}", "LinuxVmMaxMapCountDialogTitle": "Виявлено низьку межу для відображення памʼяті", "LinuxVmMaxMapCountDialogTextPrimary": "Бажаєте збільшити значення vm.max_map_count на {0}", - "LinuxVmMaxMapCountDialogTextSecondary": "Деякі ігри можуть спробувати створити більше відображень памʼяті, ніж дозволено наразі. Ryujinx завершить роботу, щойно цей ліміт буде перевищено.", + "LinuxVmMaxMapCountDialogTextSecondary": "Деякі ігри можуть спробувати створити більше відображень памʼяті, ніж дозволено наразі. Kenji-NX завершить роботу, щойно цей ліміт буде перевищено.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "Так, до наст. перезапуску", "LinuxVmMaxMapCountDialogButtonPersistent": "Так, назавжди", "LinuxVmMaxMapCountWarningTextPrimary": "Максимальна кількість відображення памʼяті менша, ніж рекомендовано.", - "LinuxVmMaxMapCountWarningTextSecondary": "Поточне значення vm.max_map_count ({0}) менше за {1}. Деякі ігри можуть спробувати створити більше відображень пам’яті, ніж дозволено наразі. Ryujinx завершить роботу, щойно цей ліміт буде перевищено.\n\nВи можете збільшити ліміт вручну або встановити pkexec, який дозволяє Ryujinx допомогти з цим.", + "LinuxVmMaxMapCountWarningTextSecondary": "Поточне значення vm.max_map_count ({0}) менше за {1}. Деякі ігри можуть спробувати створити більше відображень пам’яті, ніж дозволено наразі. Kenji-NX завершить роботу, щойно цей ліміт буде перевищено.\n\nВи можете збільшити ліміт вручну або встановити pkexec, який дозволяє Kenji-NX допомогти з цим.", "Settings": "Налаштування", "SettingsTabGeneral": "Інтерфейс користувача", "SettingsTabGeneralGeneral": "Загальні", @@ -431,42 +431,42 @@ "ControllerSettingsRumbleWeakMultiplier": "Множник слабкої вібрації", "DialogMessageSaveNotAvailableMessage": "Немає збережених даних для {0} [{1:x16}]", "DialogMessageSaveNotAvailableCreateSaveMessage": "Хочете створити дані збереження для цієї гри?", - "DialogConfirmationTitle": "Ryujinx - Підтвердження", - "DialogUpdaterTitle": "Ryujinx - Програма оновлення", - "DialogErrorTitle": "Ryujinx - Помилка", - "DialogWarningTitle": "Ryujinx - Попередження", - "DialogExitTitle": "Ryujinx - Вихід", - "DialogErrorMessage": "У Ryujinx сталася помилка", - "DialogExitMessage": "Ви впевнені, що бажаєте закрити Ryujinx?", + "DialogConfirmationTitle": "Kenji-NX - Підтвердження", + "DialogUpdaterTitle": "Kenji-NX - Програма оновлення", + "DialogErrorTitle": "Kenji-NX - Помилка", + "DialogWarningTitle": "Kenji-NX - Попередження", + "DialogExitTitle": "Kenji-NX - Вихід", + "DialogErrorMessage": "У Kenji-NX сталася помилка", + "DialogExitMessage": "Ви впевнені, що бажаєте закрити Kenji-NX?", "DialogExitSubMessage": "Усі незбережені дані буде втрачено!", "DialogMessageCreateSaveErrorMessage": "Під час створення вказаних даних збереження сталася помилка: {0}", "DialogMessageFindSaveErrorMessage": "Під час пошуку вказаних даних збереження сталася помилка: {0}", "FolderDialogExtractTitle": "Виберіть папку для видобування", "DialogNcaExtractionMessage": "Видобування розділу {0} з {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Екстрактор розділів NCA", + "DialogNcaExtractionTitle": "Kenji-NX - Екстрактор розділів NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Помилка видобування. Основний NCA не був присутній у вибраному файлі.", "DialogNcaExtractionCheckLogErrorMessage": "Помилка видобування. Прочитайте файл журналу для отримання додаткової інформації.", "DialogNcaExtractionSuccessMessage": "Видобування успішно завершено.", - "DialogUpdaterConvertFailedMessage": "Не вдалося конвертувати поточну версію Ryujinx.", + "DialogUpdaterConvertFailedMessage": "Не вдалося конвертувати поточну версію Kenji-NX.", "DialogUpdaterCancelUpdateMessage": "Скасування оновлення!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "Ви вже використовуєте останню версію Ryujinx!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "Ви вже використовуєте останню версію Kenji-NX!", "DialogUpdaterFailedToGetVersionMessage": "Під час спроби отримати інформацію про випуск із GitHub Release сталася помилка. Це може бути спричинено, якщо новий випуск компілюється GitHub Actions. Повторіть спробу через кілька хвилин.", - "DialogUpdaterConvertFailedGithubMessage": "Не вдалося конвертувати отриману версію Ryujinx із випуску Github.", + "DialogUpdaterConvertFailedGithubMessage": "Не вдалося конвертувати отриману версію Kenji-NX із випуску Github.", "DialogUpdaterDownloadingMessage": "Завантаження оновлення...", "DialogUpdaterExtractionMessage": "Видобування оновлення...", "DialogUpdaterRenamingMessage": "Перейменування оновлення...", "DialogUpdaterAddingFilesMessage": "Додавання нового оновлення...", "DialogUpdaterCompleteMessage": "Оновлення завершено!", - "DialogUpdaterRestartMessage": "Перезапустити Ryujinx зараз?", + "DialogUpdaterRestartMessage": "Перезапустити Kenji-NX зараз?", "DialogUpdaterNoInternetMessage": "Ви не підключені до Інтернету!", "DialogUpdaterNoInternetSubMessage": "Будь ласка, переконайтеся, що у вас є робоче підключення до Інтернету!", - "DialogUpdaterDirtyBuildMessage": "Ви не можете оновити брудну збірку Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Будь ласка, завантажте Ryujinx на https://ryujinx.org/, якщо ви шукаєте підтримувану версію.", + "DialogUpdaterDirtyBuildMessage": "Ви не можете оновити брудну збірку Kenji-NX!", + "DialogUpdaterDirtyBuildSubMessage": "Будь ласка, завантажте Kenji-NX на https://ryujinx.org/, якщо ви шукаєте підтримувану версію.", "DialogRestartRequiredMessage": "Потрібен перезапуск", "DialogThemeRestartMessage": "Тему збережено. Щоб застосувати тему, потрібен перезапуск.", "DialogThemeRestartSubMessage": "Ви хочете перезапустити", "DialogFirmwareInstallEmbeddedMessage": "Бажаєте встановити прошивку, вбудовану в цю гру? (Прошивка {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "Встановлену прошивку не знайдено, але Ryujinx вдалося встановити прошивку {0} з наданої гри.\nТепер запуститься емулятор.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "Встановлену прошивку не знайдено, але Kenji-NX вдалося встановити прошивку {0} з наданої гри.\nТепер запуститься емулятор.", "DialogFirmwareNoFirmwareInstalledMessage": "Прошивка не встановлена", "DialogFirmwareInstalledMessage": "Встановлено прошивку {0}", "DialogInstallFileTypesSuccessMessage": "Успішно встановлено типи файлів!", @@ -480,7 +480,7 @@ "DialogErrorAppletErrorExceptionMessage": "Помилка показу діалогового вікна ErrorApplet: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\nДля отримання додаткової інформації про те, як виправити цю помилку, дотримуйтесь нашого посібника з налаштування.", - "DialogUserErrorDialogTitle": "Помилка Ryujinx ({0})", + "DialogUserErrorDialogTitle": "Помилка Kenji-NX ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "Під час отримання інформації з API сталася помилка.", "DialogAmiiboApiConnectErrorMessage": "Неможливо підключитися до сервера Amiibo API. Можливо, служба не працює або вам потрібно перевірити, чи є підключення до Інтернету.", @@ -494,7 +494,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "Ви збираєтеся видалити кеш шейдерів для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?", "DialogShaderDeletionErrorMessage": "Помилка очищення кешу шейдерів на {0}: {1}", - "DialogRyujinxErrorMessage": "У Ryujinx сталася помилка", + "DialogRyujinxErrorMessage": "У Kenji-NX сталася помилка", "DialogInvalidTitleIdErrorMessage": "Помилка інтерфейсу: вибрана гра не мала дійсного ідентифікатора назви", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "Дійсна прошивка системи не знайдена в {0}.", "DialogFirmwareInstallerFirmwareInstallTitle": "Встановити прошивку {0}", @@ -530,7 +530,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "Зупиніть емуляцію або закрийте емулятор перед запуском іншої гри.", "DialogUpdateAddUpdateErrorMessage": "Зазначений файл не містить оновлення для вибраного заголовка!", "DialogSettingsBackendThreadingWarningTitle": "Попередження - потокове керування сервером", - "DialogSettingsBackendThreadingWarningMessage": "Ryujinx потрібно перезапустити після зміни цього параметра, щоб він застосовувався повністю. Залежно від вашої платформи вам може знадобитися вручну вимкнути власну багатопотоковість драйвера під час використання Ryujinx.", + "DialogSettingsBackendThreadingWarningMessage": "Kenji-NX потрібно перезапустити після зміни цього параметра, щоб він застосовувався повністю. Залежно від вашої платформи вам може знадобитися вручну вимкнути власну багатопотоковість драйвера під час використання Kenji-NX.", "DialogModManagerDeletionWarningMessage": "Ви збираєтесь видалити модифікацію: {0}\n\nВи дійсно бажаєте продовжити?", "DialogModManagerDeletionAllWarningMessage": "Ви збираєтесь видалити всі модифікації для цього Додатка.\n\nВи дійсно бажаєте продовжити?", "SettingsTabGraphicsFeaturesOptions": "Особливості", @@ -543,15 +543,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "Ім'я файлу містить неприпустимі символи. Будь ласка, спробуйте ще раз.", "MenuBarOptionsPauseEmulation": "Пауза", "MenuBarOptionsResumeEmulation": "Продовжити", - "AboutUrlTooltipMessage": "Натисніть, щоб відкрити сайт Ryujinx у браузері за замовчування.", - "AboutDisclaimerMessage": "Ryujinx жодним чином не пов’язано з Nintendo™,\nчи будь-яким із їхніх партнерів.", + "AboutUrlTooltipMessage": "Натисніть, щоб відкрити сайт Kenji-NX у браузері за замовчування.", + "AboutDisclaimerMessage": "Kenji-NX жодним чином не пов’язано з Nintendo™,\nчи будь-яким із їхніх партнерів.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) використовується в нашій емуляції Amiibo.", - "AboutPatreonUrlTooltipMessage": "Натисніть, щоб відкрити сторінку Patreon Ryujinx у вашому браузері за замовчування.", - "AboutGithubUrlTooltipMessage": "Натисніть, щоб відкрити сторінку GitHub Ryujinx у браузері за замовчуванням.", - "AboutDiscordUrlTooltipMessage": "Натисніть, щоб відкрити запрошення на сервер Discord Ryujinx у браузері за замовчуванням.", - "AboutTwitterUrlTooltipMessage": "Натисніть, щоб відкрити сторінку Twitter Ryujinx у браузері за замовчуванням.", + "AboutPatreonUrlTooltipMessage": "Натисніть, щоб відкрити сторінку Patreon Kenji-NX у вашому браузері за замовчування.", + "AboutGithubUrlTooltipMessage": "Натисніть, щоб відкрити сторінку GitHub Kenji-NX у браузері за замовчуванням.", + "AboutDiscordUrlTooltipMessage": "Натисніть, щоб відкрити запрошення на сервер Discord Kenji-NX у браузері за замовчуванням.", + "AboutTwitterUrlTooltipMessage": "Натисніть, щоб відкрити сторінку Twitter Kenji-NX у браузері за замовчуванням.", "AboutRyujinxAboutTitle": "Про програму:", - "AboutRyujinxAboutContent": "Ryujinx — це емулятор для Nintendo Switch™.\n\nРозробники, які хочуть зробити внесок, можуть дізнатися більше на нашому GitHub.", + "AboutRyujinxAboutContent": "Kenji-NX — це емулятор для Nintendo Switch™.\n\nРозробники, які хочуть зробити внесок, можуть дізнатися більше на нашому GitHub.", "AboutRyujinxMaintainersTitle": "Підтримується:", "AboutRyujinxFormerMaintainersTitle": "Раніше Підтримується:", "AboutRyujinxMaintainersContentTooltipMessage": "Натисніть, щоб відкрити сторінку співавторів у вашому браузері за замовчування.", @@ -578,7 +578,7 @@ "OrderDescending": "За спаданням", "SettingsTabGraphicsFeatures": "Функції та вдосконалення", "ErrorWindowTitle": "Вікно помилок", - "ToggleDiscordTooltip": "Виберіть, чи відображати Ryujinx у вашій «поточній грі» в Discord", + "ToggleDiscordTooltip": "Виберіть, чи відображати Kenji-NX у вашій «поточній грі» в Discord", "AddGameDirBoxTooltip": "Введіть каталог ігор, щоб додати до списку", "AddGameDirTooltip": "Додати каталог гри до списку", "RemoveGameDirTooltip": "Видалити вибраний каталог гри", @@ -601,7 +601,7 @@ "MemoryManagerTooltip": "Змінює спосіб відображення та доступу до гостьової пам’яті. Значно впливає на продуктивність емульованого ЦП.\n\nВстановіть «Неперевірений хост», якщо не впевнені.", "MemoryManagerSoftwareTooltip": "Використовує програмну таблицю сторінок для перекладу адрес. Найвища точність, але найповільніша продуктивність.", "MemoryManagerHostTooltip": "Пряме відображення пам'яті в адресному просторі хосту. Набагато швидша компіляція та виконання JIT.", - "MemoryManagerUnsafeTooltip": "Пряме відображення пам’яті, але не маскує адресу в гостьовому адресному просторі перед доступом. Швидше, але ціною безпеки. Гостьова програма може отримати доступ до пам’яті з будь-якого місця в Ryujinx, тому запускайте в цьому режимі лише програми, яким ви довіряєте.", + "MemoryManagerUnsafeTooltip": "Пряме відображення пам’яті, але не маскує адресу в гостьовому адресному просторі перед доступом. Швидше, але ціною безпеки. Гостьова програма може отримати доступ до пам’яті з будь-якого місця в Kenji-NX, тому запускайте в цьому режимі лише програми, яким ви довіряєте.", "UseHypervisorTooltip": "Використання гіпервізор замість JIT. Значно покращує продуктивність, коли доступний, але може бути нестабільним у поточному стані.", "DRamTooltip": "Використовує альтернативний макет MemoryMode для імітації моделі розробки Switch.\n\nЦе корисно лише для пакетів текстур з вищою роздільною здатністю або модифікацій із роздільною здатністю 4K. НЕ покращує продуктивність.\n\nЗалиште вимкненим, якщо не впевнені.", "IgnoreMissingServicesTooltip": "Ігнорує нереалізовані служби Horizon OS. Це може допомогти в обході збоїв під час завантаження певних ігор.\n\nЗалиште вимкненим, якщо не впевнені.", @@ -627,14 +627,14 @@ "DebugLogTooltip": "Друкує повідомлення журналу налагодження на консолі.\n\nВикористовуйте це лише за спеціальною вказівкою співробітника, оскільки це ускладнить читання журналів і погіршить роботу емулятора.", "LoadApplicationFileTooltip": "Відкриває файловий провідник, щоб вибрати для завантаження сумісний файл Switch", "LoadApplicationFolderTooltip": "Відкриває файловий провідник, щоб вибрати сумісну з комутатором розпаковану програму для завантаження", - "OpenRyujinxFolderTooltip": "Відкриває папку файлової системи Ryujinx", - "OpenScreenshotFolderTooltip": "Відкрити теку куди зберігаються скріншоти Ryujinx", + "OpenRyujinxFolderTooltip": "Відкриває папку файлової системи Kenji-NX", + "OpenScreenshotFolderTooltip": "Відкрити теку куди зберігаються скріншоти Kenji-NX", "OpenRyujinxLogsTooltip": "Відкриває папку, куди записуються журнали", - "ExitTooltip": "Виходить з Ryujinx", + "ExitTooltip": "Виходить з Kenji-NX", "OpenSettingsTooltip": "Відкриває вікно налаштувань", "OpenProfileManagerTooltip": "Відкриває вікно диспетчера профілів користувачів", "StopEmulationTooltip": "Зупиняє емуляцію поточної гри та повертається до вибору гри", - "CheckUpdatesTooltip": "Перевіряє наявність оновлень для Ryujinx", + "CheckUpdatesTooltip": "Перевіряє наявність оновлень для Kenji-NX", "OpenAboutTooltip": "Відкриває вікно «Про програму».", "GridSize": "Розмір сітки", "GridSizeTooltip": "Змінити розмір елементів сітки", @@ -649,7 +649,7 @@ "GameListContextMenuManageModToolTip": "Керування модами", "GameListContextMenuManageMod": "Керування модами", "ControllerSettingsStickRange": "Діапазон:", - "DialogStopEmulationTitle": "Ryujinx - Зупинити емуляцію", + "DialogStopEmulationTitle": "Kenji-NX - Зупинити емуляцію", "DialogStopEmulationMessage": "Ви впевнені, що хочете зупинити емуляцію?", "SettingsTabCpu": "ЦП", "SettingsTabAudio": "Аудіо", @@ -657,7 +657,7 @@ "SettingsTabNetworkConnection": "Підключення до мережі", "SettingsTabCpuCache": "Кеш ЦП", "SettingsTabCpuMemory": "Пам'ять ЦП", - "DialogUpdaterFlatpakNotSupportedMessage": "Будь ласка, оновіть Ryujinx через FlatHub.", + "DialogUpdaterFlatpakNotSupportedMessage": "Будь ласка, оновіть Kenji-NX через FlatHub.", "UpdaterDisabledWarningTitle": "Програму оновлення вимкнено!", "ControllerSettingsRotate90": "Повернути на 90° за годинниковою стрілкою", "IconSize": "Розмір значка", @@ -670,17 +670,17 @@ "UserErrorApplicationNotFound": "Додаток не знайдено", "UserErrorUnknown": "Невідома помилка", "UserErrorUndefined": "Невизначена помилка", - "UserErrorNoKeysDescription": "Ryujinx не вдалося знайти ваш файл «prod.keys».", - "UserErrorNoFirmwareDescription": "Ryujinx не вдалося знайти встановлену прошивку", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx не вдалося проаналізувати прошивку. Зазвичай це спричинено застарілими ключами.", - "UserErrorApplicationNotFoundDescription": "Ryujinx не вдалося знайти дійсний додаток за вказаним шляхом", + "UserErrorNoKeysDescription": "Kenji-NX не вдалося знайти ваш файл «prod.keys».", + "UserErrorNoFirmwareDescription": "Kenji-NX не вдалося знайти встановлену прошивку", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX не вдалося проаналізувати прошивку. Зазвичай це спричинено застарілими ключами.", + "UserErrorApplicationNotFoundDescription": "Kenji-NX не вдалося знайти дійсний додаток за вказаним шляхом", "UserErrorUnknownDescription": "Сталася невідома помилка!", "UserErrorUndefinedDescription": "Сталася невизначена помилка! Цього не повинно статися, зверніться до розробника!", "OpenSetupGuideMessage": "Відкрити посібник із налаштування", "NoUpdate": "Немає оновлень", "TitleUpdateVersionLabel": "Версія {0} - {1}", "RyujinxInfo": "Ryujin x - Інформація", - "RyujinxConfirm": "Ryujinx - Підтвердження", + "RyujinxConfirm": "Kenji-NX - Підтвердження", "FileDialogAllTypes": "Всі типи", "Never": "Ніколи", "SwkbdMinCharacters": "Мінімальна кількість символів: {0}", @@ -714,7 +714,7 @@ "OpenFileDialogTitle": "Виберіть підтримуваний файл для відкриття", "OpenFolderDialogTitle": "Виберіть теку з розпакованою грою", "AllSupportedFormats": "Усі підтримувані формати", - "RyujinxUpdater": "Програма оновлення Ryujinx", + "RyujinxUpdater": "Програма оновлення Kenji-NX", "SettingsTabHotkeys": "Гарячі клавіші клавіатури", "SettingsTabHotkeysHotkeys": "Гарячі клавіші клавіатури", "SettingsTabHotkeysToggleVsyncHotkey": "Увімк/вимк вертикальну синхронізацію:", @@ -762,10 +762,10 @@ "SettingsEnableTextureRecompressionTooltip": "Стискає текстури ASTC, щоб зменшити використання VRAM.\n\nЦим форматом текстур користуються такі ігри, як Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder і The Legend of Zelda: Tears of the Kingdom.\n\nЦі ігри, скоріше всього крашнуться на відеокартах з розміром VRAM в 4 Гб і менше.\n\nВмикайте тільки якщо у Вас закінчується VRAM на цих іграх. Залиште на \"Вимкнути\", якщо не впевнені.", "SettingsTabGraphicsPreferredGpu": "Бажаний GPU", "SettingsTabGraphicsPreferredGpuTooltip": "Виберіть відеокарту, яка використовуватиметься з графічним сервером Vulkan.\n\nНе впливає на графічний процесор, який використовуватиме OpenGL.\n\nВстановіть графічний процесор, позначений як «dGPU», якщо не впевнені. Якщо такого немає, не чіпайте.", - "SettingsAppRequiredRestartMessage": "Необхідно перезапустити Ryujinx", + "SettingsAppRequiredRestartMessage": "Необхідно перезапустити Kenji-NX", "SettingsGpuBackendRestartMessage": "Налаштування графічного сервера або GPU було змінено. Для цього знадобиться перезапуск", "SettingsGpuBackendRestartSubMessage": "Бажаєте перезапустити зараз?", - "RyujinxUpdaterMessage": "Бажаєте оновити Ryujinx до останньої версії?", + "RyujinxUpdaterMessage": "Бажаєте оновити Kenji-NX до останньої версії?", "SettingsTabHotkeysVolumeUpHotkey": "Збільшити гучність:", "SettingsTabHotkeysVolumeDownHotkey": "Зменшити гучність:", "SettingsEnableMacroHLE": "Увімкнути макрос HLE", @@ -808,7 +808,7 @@ "AboutChangelogButtonTooltipMessage": "Клацніть, щоб відкрити журнал змін для цієї версії у стандартному браузері.", "SettingsTabNetworkMultiplayer": "Мережева гра", "MultiplayerMode": "Режим:", - "MultiplayerModeTooltip": "Змінити LDN мультиплеєру.\n\nLdnMitm змінить функціонал бездротової/локальної гри в іграх, щоб вони працювали так, ніби це LAN, що дозволяє локальні підключення в тій самій мережі з іншими екземплярами Ryujinx та хакнутими консолями Nintendo Switch, які мають встановлений модуль ldn_mitm.\n\nМультиплеєр вимагає, щоб усі гравці були на одній і тій же версії гри (наприклад Super Smash Bros. Ultimate v13.0.1 не зможе під'єднатися до v13.0.0).\n\nЗалиште на \"Вимкнено\", якщо не впевнені, ", + "MultiplayerModeTooltip": "Змінити LDN мультиплеєру.\n\nLdnMitm змінить функціонал бездротової/локальної гри в іграх, щоб вони працювали так, ніби це LAN, що дозволяє локальні підключення в тій самій мережі з іншими екземплярами Kenji-NX та хакнутими консолями Nintendo Switch, які мають встановлений модуль ldn_mitm.\n\nМультиплеєр вимагає, щоб усі гравці були на одній і тій же версії гри (наприклад Super Smash Bros. Ultimate v13.0.1 не зможе під'єднатися до v13.0.0).\n\nЗалиште на \"Вимкнено\", якщо не впевнені, ", "MultiplayerModeDisabled": "Вимкнено", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Kenjinx/Assets/Locales/zh_CN.json similarity index 93% rename from src/Ryujinx/Assets/Locales/zh_CN.json rename to src/Kenjinx/Assets/Locales/zh_CN.json index 898d1a644..6c2b1ade1 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Kenjinx/Assets/Locales/zh_CN.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "加载解包后的游戏(_U)", "MenuBarFileLoadDlcFromFolder": "从文件夹加载DLC", "MenuBarFileLoadTitleUpdatesFromFolder": "从文件夹加载游戏更新", - "MenuBarFileOpenEmuFolder": "打开 Ryujinx 系统目录", + "MenuBarFileOpenEmuFolder": "打开 Kenji-NX 系统目录", "MenuBarFileOpenScreenshotsFolder": "打开截图文件夹", "MenuBarFileOpenLogsFolder": "打开日志目录", "MenuBarFileExit": "退出(_E)", @@ -97,11 +97,11 @@ "StatusBarSystemVersion": "系统固件版本:{0}", "LinuxVmMaxMapCountDialogTitle": "检测到操作系统内存映射最大数量被设置的过低", "LinuxVmMaxMapCountDialogTextPrimary": "你想要将操作系统 vm.max_map_count 的值增加到 {0} 吗", - "LinuxVmMaxMapCountDialogTextSecondary": "有些游戏可能会尝试创建超过当前系统允许的内存映射最大数量,若超过当前最大数量,Ryujinx 模拟器将会闪退。", + "LinuxVmMaxMapCountDialogTextSecondary": "有些游戏可能会尝试创建超过当前系统允许的内存映射最大数量,若超过当前最大数量,Kenji-NX 模拟器将会闪退。", "LinuxVmMaxMapCountDialogButtonUntilRestart": "确定,临时保存(重启后失效)", "LinuxVmMaxMapCountDialogButtonPersistent": "确定,永久保存", "LinuxVmMaxMapCountWarningTextPrimary": "内存映射的最大数量低于推荐值。", - "LinuxVmMaxMapCountWarningTextSecondary": "vm.max_map_count ({0}) 的当前值小于 {1}。 有些游戏可能会尝试创建超过当前系统允许的内存映射最大数量,若超过当前最大数量,Ryujinx 模拟器将会闪退。\n\n你可以手动增加内存映射最大数量,或者安装 pkexec,它可以辅助 Ryujinx 完成内存映射最大数量的修改操作。", + "LinuxVmMaxMapCountWarningTextSecondary": "vm.max_map_count ({0}) 的当前值小于 {1}。 有些游戏可能会尝试创建超过当前系统允许的内存映射最大数量,若超过当前最大数量,Kenji-NX 模拟器将会闪退。\n\n你可以手动增加内存映射最大数量,或者安装 pkexec,它可以辅助 Kenji-NX 完成内存映射最大数量的修改操作。", "Settings": "设置", "SettingsTabGeneral": "用户界面", "SettingsTabGeneralGeneral": "常规", @@ -431,42 +431,42 @@ "ControllerSettingsRumbleWeakMultiplier": "弱震动幅度", "DialogMessageSaveNotAvailableMessage": "没有{0} [{1:x16}]的游戏存档", "DialogMessageSaveNotAvailableCreateSaveMessage": "是否创建该游戏的存档?", - "DialogConfirmationTitle": "Ryujinx - 确认", - "DialogUpdaterTitle": "Ryujinx - 更新", - "DialogErrorTitle": "Ryujinx - 错误", - "DialogWarningTitle": "Ryujinx - 警告", - "DialogExitTitle": "Ryujinx - 退出", - "DialogErrorMessage": "Ryujinx 模拟器发生错误", - "DialogExitMessage": "是否关闭 Ryujinx 模拟器?", + "DialogConfirmationTitle": "Kenji-NX - 确认", + "DialogUpdaterTitle": "Kenji-NX - 更新", + "DialogErrorTitle": "Kenji-NX - 错误", + "DialogWarningTitle": "Kenji-NX - 警告", + "DialogExitTitle": "Kenji-NX - 退出", + "DialogErrorMessage": "Kenji-NX 模拟器发生错误", + "DialogExitMessage": "是否关闭 Kenji-NX 模拟器?", "DialogExitSubMessage": "未保存的进度将会丢失!", "DialogMessageCreateSaveErrorMessage": "创建指定存档时出错:{0}", "DialogMessageFindSaveErrorMessage": "查找指定存档时出错:{0}", "FolderDialogExtractTitle": "选择要提取到的文件夹", "DialogNcaExtractionMessage": "提取 {1} 的 {0} 分区...", - "DialogNcaExtractionTitle": "Ryujinx - NCA 分区提取", + "DialogNcaExtractionTitle": "Kenji-NX - NCA 分区提取", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "提取失败,所选文件中没有 NCA 文件", "DialogNcaExtractionCheckLogErrorMessage": "提取失败,请查看日志文件获取详情", "DialogNcaExtractionSuccessMessage": "提取成功!", - "DialogUpdaterConvertFailedMessage": "无法切换当前 Ryujinx 版本。", + "DialogUpdaterConvertFailedMessage": "无法切换当前 Kenji-NX 版本。", "DialogUpdaterCancelUpdateMessage": "取消更新!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "您使用的 Ryujinx 模拟器是最新版本。", + "DialogUpdaterAlreadyOnLatestVersionMessage": "您使用的 Kenji-NX 模拟器是最新版本。", "DialogUpdaterFailedToGetVersionMessage": "尝试从 Github 获取版本信息时无效,可能由于 GitHub Actions 正在编译新版本。\n请过一会再试。", - "DialogUpdaterConvertFailedGithubMessage": "无法切换至从 Github 接收到的新版 Ryujinx 模拟器。", + "DialogUpdaterConvertFailedGithubMessage": "无法切换至从 Github 接收到的新版 Kenji-NX 模拟器。", "DialogUpdaterDownloadingMessage": "下载更新中...", "DialogUpdaterExtractionMessage": "正在提取更新...", "DialogUpdaterRenamingMessage": "正在重命名更新...", "DialogUpdaterAddingFilesMessage": "安装更新中...", "DialogUpdaterCompleteMessage": "更新成功!", - "DialogUpdaterRestartMessage": "是否立即重启 Ryujinx 模拟器?", + "DialogUpdaterRestartMessage": "是否立即重启 Kenji-NX 模拟器?", "DialogUpdaterNoInternetMessage": "没有连接到网络", "DialogUpdaterNoInternetSubMessage": "请确保互联网连接正常。", - "DialogUpdaterDirtyBuildMessage": "无法更新非官方版本的 Ryujinx 模拟器!", + "DialogUpdaterDirtyBuildMessage": "无法更新非官方版本的 Kenji-NX 模拟器!", "DialogUpdaterDirtyBuildSubMessage": "如果想使用受支持的版本,请您在 https://ryujinx.org/ 下载官方版本。", "DialogRestartRequiredMessage": "需要重启模拟器", "DialogThemeRestartMessage": "主题设置已保存,需要重启模拟器才能生效。", "DialogThemeRestartSubMessage": "是否要重启模拟器?", "DialogFirmwareInstallEmbeddedMessage": "要安装游戏文件中内嵌的系统固件吗?(固件版本 {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "Ryujinx 模拟器已经从当前游戏文件中安装了系统固件 {0} 。\n模拟器现在可以正常运行了。", + "DialogFirmwareInstallEmbeddedSuccessMessage": "Kenji-NX 模拟器已经从当前游戏文件中安装了系统固件 {0} 。\n模拟器现在可以正常运行了。", "DialogFirmwareNoFirmwareInstalledMessage": "未安装系统固件", "DialogFirmwareInstalledMessage": "已安装系统固件 {0}", "DialogInstallFileTypesSuccessMessage": "关联文件类型成功!", @@ -480,7 +480,7 @@ "DialogErrorAppletErrorExceptionMessage": "显示错误对话框时出错:{0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\n有关修复此错误的更多信息,可以查看我们的安装指南。", - "DialogUserErrorDialogTitle": "Ryujinx 错误 ({0})", + "DialogUserErrorDialogTitle": "Kenji-NX 错误 ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "从 API 获取信息时出错。", "DialogAmiiboApiConnectErrorMessage": "无法连接到 Amiibo API 服务器,服务可能已关闭,或者没有连接互联网。", @@ -494,7 +494,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "您即将删除:\n\n{0} 的着色器缓存文件\n\n确定吗?", "DialogShaderDeletionErrorMessage": "清除 {0} 的着色器缓存文件时出错:{1}", - "DialogRyujinxErrorMessage": "Ryujinx 模拟器发生错误", + "DialogRyujinxErrorMessage": "Kenji-NX 模拟器发生错误", "DialogInvalidTitleIdErrorMessage": "用户界面错误:所选游戏没有有效的游戏 ID", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "在路径 {0} 中找不到有效的 Switch 系统固件。", "DialogFirmwareInstallerFirmwareInstallTitle": "安装系统固件 {0}", @@ -530,7 +530,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "请停止模拟或关闭模拟器,再启动另一个游戏。", "DialogUpdateAddUpdateErrorMessage": "选择的文件不是当前游戏的更新!", "DialogSettingsBackendThreadingWarningTitle": "警告 - 图形引擎多线程", - "DialogSettingsBackendThreadingWarningMessage": "更改此选项后,必须重启 Ryujinx 模拟器才能生效。\n\n当启用图形引擎多线程时,根据显卡不同,您可能需要手动禁用显卡驱动程序自身的多线程(线程优化)。", + "DialogSettingsBackendThreadingWarningMessage": "更改此选项后,必须重启 Kenji-NX 模拟器才能生效。\n\n当启用图形引擎多线程时,根据显卡不同,您可能需要手动禁用显卡驱动程序自身的多线程(线程优化)。", "DialogModManagerDeletionWarningMessage": "您即将删除 MOD:{0} \n\n确定吗?", "DialogModManagerDeletionAllWarningMessage": "您即将删除该游戏的所有 MOD,\n\n确定吗?", "SettingsTabGraphicsFeaturesOptions": "功能", @@ -543,15 +543,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "文件名包含无效字符,请重试。", "MenuBarOptionsPauseEmulation": "暂停", "MenuBarOptionsResumeEmulation": "继续", - "AboutUrlTooltipMessage": "在浏览器中打开 Ryujinx 模拟器官网。", - "AboutDisclaimerMessage": "Ryujinx 与 Nintendo™ 以及其合作伙伴没有任何关联。", + "AboutUrlTooltipMessage": "在浏览器中打开 Kenji-NX 模拟器官网。", + "AboutDisclaimerMessage": "Kenji-NX 与 Nintendo™ 以及其合作伙伴没有任何关联。", "AboutAmiiboDisclaimerMessage": "我们的 Amiibo 模拟使用了\nAmiiboAPI (www.amiiboapi.com)。", - "AboutPatreonUrlTooltipMessage": "在浏览器中打开 Ryujinx 的 Patreon 赞助页。", - "AboutGithubUrlTooltipMessage": "在浏览器中打开 Ryujinx 的 GitHub 代码库。", - "AboutDiscordUrlTooltipMessage": "在浏览器中打开 Ryujinx 的 Discord 邀请链接。", - "AboutTwitterUrlTooltipMessage": "在浏览器中打开 Ryujinx 的 Twitter 主页。", + "AboutPatreonUrlTooltipMessage": "在浏览器中打开 Kenji-NX 的 Patreon 赞助页。", + "AboutGithubUrlTooltipMessage": "在浏览器中打开 Kenji-NX 的 GitHub 代码库。", + "AboutDiscordUrlTooltipMessage": "在浏览器中打开 Kenji-NX 的 Discord 邀请链接。", + "AboutTwitterUrlTooltipMessage": "在浏览器中打开 Kenji-NX 的 Twitter 主页。", "AboutRyujinxAboutTitle": "关于:", - "AboutRyujinxAboutContent": "Ryujinx 是一款 Nintendo Switch™ 模拟器。\n\n如果您对开发感兴趣,欢迎来 GitHub 加入我们!", + "AboutRyujinxAboutContent": "Kenji-NX 是一款 Nintendo Switch™ 模拟器。\n\n如果您对开发感兴趣,欢迎来 GitHub 加入我们!", "AboutRyujinxMaintainersTitle": "开发维护人员名单:", "AboutRyujinxFormerMaintainersTitle": "以前的开发人员和维护人员列表:", "AboutRyujinxMaintainersContentTooltipMessage": "在浏览器中打开贡献者页面", @@ -627,14 +627,14 @@ "DebugLogTooltip": "在控制台中显示调试日志。\n\n仅在特别需要时使用此功能,因为它会导致日志信息难以阅读,并降低模拟器性能。", "LoadApplicationFileTooltip": "选择 Switch 游戏文件并加载", "LoadApplicationFolderTooltip": "选择解包后的 Switch 游戏目录并加载", - "OpenRyujinxFolderTooltip": "打开 Ryujinx 模拟器系统目录", - "OpenScreenshotFolderTooltip": "打开 Ryujinx 截图文件夹", + "OpenRyujinxFolderTooltip": "打开 Kenji-NX 模拟器系统目录", + "OpenScreenshotFolderTooltip": "打开 Kenji-NX 截图文件夹", "OpenRyujinxLogsTooltip": "打开日志存放的目录", - "ExitTooltip": "退出 Ryujinx 模拟器", + "ExitTooltip": "退出 Kenji-NX 模拟器", "OpenSettingsTooltip": "打开设置窗口", "OpenProfileManagerTooltip": "打开用户账户管理窗口", "StopEmulationTooltip": "停止运行当前游戏,并回到主界面", - "CheckUpdatesTooltip": "检查 Ryujinx 新版本", + "CheckUpdatesTooltip": "检查 Kenji-NX 新版本", "OpenAboutTooltip": "打开关于窗口", "GridSize": "网格尺寸", "GridSizeTooltip": "调整网格项目的大小", @@ -649,7 +649,7 @@ "GameListContextMenuManageModToolTip": "管理当前游戏的 MOD", "GameListContextMenuManageMod": "管理 MOD", "ControllerSettingsStickRange": "范围:", - "DialogStopEmulationTitle": "Ryujinx - 停止模拟", + "DialogStopEmulationTitle": "Kenji-NX - 停止模拟", "DialogStopEmulationMessage": "确定要停止模拟?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "音频", @@ -657,7 +657,7 @@ "SettingsTabNetworkConnection": "网络连接", "SettingsTabCpuCache": "CPU 缓存", "SettingsTabCpuMemory": "CPU 模式", - "DialogUpdaterFlatpakNotSupportedMessage": "请通过 FlatHub 更新 Ryujinx 模拟器。", + "DialogUpdaterFlatpakNotSupportedMessage": "请通过 FlatHub 更新 Kenji-NX 模拟器。", "UpdaterDisabledWarningTitle": "已禁用更新!", "ControllerSettingsRotate90": "顺时针旋转 90°", "IconSize": "图标尺寸", @@ -670,17 +670,17 @@ "UserErrorApplicationNotFound": "找不到游戏程序", "UserErrorUnknown": "未知错误", "UserErrorUndefined": "未定义错误", - "UserErrorNoKeysDescription": "Ryujinx 模拟器找不到“prod.keys”密钥文件", - "UserErrorNoFirmwareDescription": "Ryujinx 模拟器未安装 Switch 系统固件", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx 模拟器无法解密当前固件,一般是由于使用了旧版的密钥导致的。", - "UserErrorApplicationNotFoundDescription": "Ryujinx 模拟器在所选路径中找不到有效的游戏程序。", + "UserErrorNoKeysDescription": "Kenji-NX 模拟器找不到“prod.keys”密钥文件", + "UserErrorNoFirmwareDescription": "Kenji-NX 模拟器未安装 Switch 系统固件", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX 模拟器无法解密当前固件,一般是由于使用了旧版的密钥导致的。", + "UserErrorApplicationNotFoundDescription": "Kenji-NX 模拟器在所选路径中找不到有效的游戏程序。", "UserErrorUnknownDescription": "出现未知错误!", "UserErrorUndefinedDescription": "出现未定义错误!此类错误不应出现,请联系开发者!", "OpenSetupGuideMessage": "打开安装指南", "NoUpdate": "无更新(或不加载游戏更新)", "TitleUpdateVersionLabel": "游戏更新的版本 {0}", - "RyujinxInfo": "Ryujinx - 信息", - "RyujinxConfirm": "Ryujinx - 确认", + "RyujinxInfo": "Kenji-NX - 信息", + "RyujinxConfirm": "Kenji-NX - 确认", "FileDialogAllTypes": "全部类型", "Never": "从不", "SwkbdMinCharacters": "不少于 {0} 个字符", @@ -714,7 +714,7 @@ "OpenFileDialogTitle": "选择支持的游戏文件并加载", "OpenFolderDialogTitle": "选择包含解包游戏的目录并加载", "AllSupportedFormats": "所有支持的格式", - "RyujinxUpdater": "Ryujinx 更新", + "RyujinxUpdater": "Kenji-NX 更新", "SettingsTabHotkeys": "快捷键", "SettingsTabHotkeysHotkeys": "键盘快捷键", "SettingsTabHotkeysToggleVsyncHotkey": "开启或关闭垂直同步:", @@ -762,10 +762,10 @@ "SettingsEnableTextureRecompressionTooltip": "压缩 ASTC 纹理以减少 VRAM (显存)的占用。\n\n使用此纹理格式的游戏包括:异界锁链(Astral Chain),蓓优妮塔3(Bayonetta 3),火焰纹章Engage(Fire Emblem Engage),密特罗德 究极(Metroid Prime Remased),超级马力欧兄弟 惊奇(Super Mario Bros. Wonder)以及塞尔达传说 王国之泪(The Legend of Zelda: Tears of the Kingdom)。\n\n显存小于4GB的显卡在运行这些游戏时可能会偶发闪退。\n\n只有当您在上述游戏中的显存不足时才需要启用此选项。\n\n如果不确定,请保持关闭状态。", "SettingsTabGraphicsPreferredGpu": "首选 GPU:", "SettingsTabGraphicsPreferredGpuTooltip": "选择 Vulkan 图形引擎使用的 GPU。\n\n此选项不会影响 OpenGL 使用的 GPU。\n\n如果不确定,建议选择\"独立显卡(dGPU)\"。如果没有独立显卡,则无需改动此选项。", - "SettingsAppRequiredRestartMessage": "Ryujinx 模拟器需要重启", + "SettingsAppRequiredRestartMessage": "Kenji-NX 模拟器需要重启", "SettingsGpuBackendRestartMessage": "您修改了图形引擎或 GPU 设置,需要重启模拟器才能生效", "SettingsGpuBackendRestartSubMessage": "是否要立即重启模拟器?", - "RyujinxUpdaterMessage": "是否更新 Ryujinx 到最新的版本?", + "RyujinxUpdaterMessage": "是否更新 Kenji-NX 到最新的版本?", "SettingsTabHotkeysVolumeUpHotkey": "音量加:", "SettingsTabHotkeysVolumeDownHotkey": "音量减:", "SettingsEnableMacroHLE": "启用 HLE 宏加速", @@ -808,7 +808,7 @@ "AboutChangelogButtonTooltipMessage": "点击这里在浏览器中打开此版本的更新日志。", "SettingsTabNetworkMultiplayer": "多人联机游玩", "MultiplayerMode": "联机模式:", - "MultiplayerModeTooltip": "修改 LDN 多人联机游玩模式。\n\nldn_mitm 联机插件将修改游戏中的本地无线和本地游玩功能,使其表现得像局域网一样,允许和其他安装了 ldn_mitm 插件的 Ryujinx 模拟器和破解的任天堂 Switch 主机在同一网络下进行本地连接,实现多人联机游玩。\n\n多人联机游玩要求所有玩家必须运行相同的游戏版本(例如,任天堂明星大乱斗特别版 v13.0.1 无法与 v13.0.0 版本联机)。\n\n如果不确定,请保持为“禁用”。", + "MultiplayerModeTooltip": "修改 LDN 多人联机游玩模式。\n\nldn_mitm 联机插件将修改游戏中的本地无线和本地游玩功能,使其表现得像局域网一样,允许和其他安装了 ldn_mitm 插件的 Kenji-NX 模拟器和破解的任天堂 Switch 主机在同一网络下进行本地连接,实现多人联机游玩。\n\n多人联机游玩要求所有玩家必须运行相同的游戏版本(例如,任天堂明星大乱斗特别版 v13.0.1 无法与 v13.0.0 版本联机)。\n\n如果不确定,请保持为“禁用”。", "MultiplayerModeDisabled": "禁用", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Kenjinx/Assets/Locales/zh_TW.json similarity index 93% rename from src/Ryujinx/Assets/Locales/zh_TW.json rename to src/Kenjinx/Assets/Locales/zh_TW.json index 0d571e88c..5bc481c9b 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Kenjinx/Assets/Locales/zh_TW.json @@ -13,7 +13,7 @@ "MenuBarFileOpenUnpacked": "載入未封裝的遊戲(_U)", "MenuBarFileLoadDlcFromFolder": "從資料夾中載入 DLC", "MenuBarFileLoadTitleUpdatesFromFolder": "從資料夾中載入遊戲更新", - "MenuBarFileOpenEmuFolder": "開啟 Ryujinx 資料夾", + "MenuBarFileOpenEmuFolder": "開啟 Kenji-NX 資料夾", "MenuBarFileOpenScreenshotsFolder": "開啟螢幕擷取畫面資料夾", "MenuBarFileOpenLogsFolder": "開啟日誌資料夾", "MenuBarFileExit": "結束(_E)", @@ -97,11 +97,11 @@ "StatusBarSystemVersion": "系統版本: {0}", "LinuxVmMaxMapCountDialogTitle": "檢測到記憶體映射的低限值", "LinuxVmMaxMapCountDialogTextPrimary": "您是否要將 vm.max_map_count 的數值增至 {0}?", - "LinuxVmMaxMapCountDialogTextSecondary": "某些遊戲可能會嘗試建立超過目前允許的記憶體映射。一旦超過此限制,Ryujinx 就會崩潰。", + "LinuxVmMaxMapCountDialogTextSecondary": "某些遊戲可能會嘗試建立超過目前允許的記憶體映射。一旦超過此限制,Kenji-NX 就會崩潰。", "LinuxVmMaxMapCountDialogButtonUntilRestart": "是的,直到下次重新啟動", "LinuxVmMaxMapCountDialogButtonPersistent": "是的,永久設定", "LinuxVmMaxMapCountWarningTextPrimary": "記憶體映射的最大值低於建議值。", - "LinuxVmMaxMapCountWarningTextSecondary": "目前 vm.max_map_count ({0}) 的數值小於 {1}。某些遊戲可能會嘗試建立比目前允許值更多的記憶體映射。一旦超過此限制,Ryujinx 就會崩潰。\n\n您可能需要手動提高上限,或者安裝 pkexec,讓 Ryujinx 協助提高上限。", + "LinuxVmMaxMapCountWarningTextSecondary": "目前 vm.max_map_count ({0}) 的數值小於 {1}。某些遊戲可能會嘗試建立比目前允許值更多的記憶體映射。一旦超過此限制,Kenji-NX 就會崩潰。\n\n您可能需要手動提高上限,或者安裝 pkexec,讓 Kenji-NX 協助提高上限。", "Settings": "設定", "SettingsTabGeneral": "使用者介面", "SettingsTabGeneralGeneral": "一般", @@ -431,42 +431,42 @@ "ControllerSettingsRumbleWeakMultiplier": "弱震動調節", "DialogMessageSaveNotAvailableMessage": "沒有 {0} [{1:x16}] 的存檔", "DialogMessageSaveNotAvailableCreateSaveMessage": "您想為這款遊戲建立存檔嗎?", - "DialogConfirmationTitle": "Ryujinx - 確認", - "DialogUpdaterTitle": "Ryujinx - 更新程式", - "DialogErrorTitle": "Ryujinx - 錯誤", - "DialogWarningTitle": "Ryujinx - 警告", - "DialogExitTitle": "Ryujinx - 結束", - "DialogErrorMessage": "Ryujinx 遇到了錯誤", - "DialogExitMessage": "您確定要關閉 Ryujinx 嗎?", + "DialogConfirmationTitle": "Kenji-NX - 確認", + "DialogUpdaterTitle": "Kenji-NX - 更新程式", + "DialogErrorTitle": "Kenji-NX - 錯誤", + "DialogWarningTitle": "Kenji-NX - 警告", + "DialogExitTitle": "Kenji-NX - 結束", + "DialogErrorMessage": "Kenji-NX 遇到了錯誤", + "DialogExitMessage": "您確定要關閉 Kenji-NX 嗎?", "DialogExitSubMessage": "所有未儲存的資料將會遺失!", "DialogMessageCreateSaveErrorMessage": "建立指定的存檔時出現錯誤: {0}", "DialogMessageFindSaveErrorMessage": "尋找指定的存檔時出現錯誤: {0}", "FolderDialogExtractTitle": "選擇要解壓到的資料夾", "DialogNcaExtractionMessage": "從 {1} 提取 {0} 分區...", - "DialogNcaExtractionTitle": "Ryujinx - NCA 分區提取器", + "DialogNcaExtractionTitle": "Kenji-NX - NCA 分區提取器", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "提取失敗。所選檔案中不存在主 NCA 檔案。", "DialogNcaExtractionCheckLogErrorMessage": "提取失敗。請閱讀日誌檔案了解更多資訊。", "DialogNcaExtractionSuccessMessage": "提取成功。", - "DialogUpdaterConvertFailedMessage": "無法轉換目前的 Ryujinx 版本。", + "DialogUpdaterConvertFailedMessage": "無法轉換目前的 Kenji-NX 版本。", "DialogUpdaterCancelUpdateMessage": "取消更新!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "您已經在使用最新版本的 Ryujinx!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "您已經在使用最新版本的 Kenji-NX!", "DialogUpdaterFailedToGetVersionMessage": "嘗試從 GitHub Release 取得發布資訊時發生錯誤。如果 GitHub Actions 正在編譯新版本,則可能會出現這種情況。請幾分鐘後再試一次。", - "DialogUpdaterConvertFailedGithubMessage": "無法轉換從 Github Release 接收到的 Ryujinx 版本。", + "DialogUpdaterConvertFailedGithubMessage": "無法轉換從 Github Release 接收到的 Kenji-NX 版本。", "DialogUpdaterDownloadingMessage": "正在下載更新...", "DialogUpdaterExtractionMessage": "正在提取更新...", "DialogUpdaterRenamingMessage": "重新命名更新...", "DialogUpdaterAddingFilesMessage": "加入新更新...", "DialogUpdaterCompleteMessage": "更新成功!", - "DialogUpdaterRestartMessage": "您現在要重新啟動 Ryujinx 嗎?", + "DialogUpdaterRestartMessage": "您現在要重新啟動 Kenji-NX 嗎?", "DialogUpdaterNoInternetMessage": "您沒有連線到網際網路!", "DialogUpdaterNoInternetSubMessage": "請確認您的網際網路連線正常!", - "DialogUpdaterDirtyBuildMessage": "您無法更新非官方版本的 Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "如果您正在尋找受官方支援的版本,請從 https://ryujinx.org/ 下載 Ryujinx。", + "DialogUpdaterDirtyBuildMessage": "您無法更新非官方版本的 Kenji-NX!", + "DialogUpdaterDirtyBuildSubMessage": "如果您正在尋找受官方支援的版本,請從 https://ryujinx.org/ 下載 Kenji-NX。", "DialogRestartRequiredMessage": "需要重新啟動", "DialogThemeRestartMessage": "佈景主題設定已儲存。需要重新啟動才能套用主題。", "DialogThemeRestartSubMessage": "您要重新啟動嗎", "DialogFirmwareInstallEmbeddedMessage": "您想安裝遊戲內建的韌體嗎? (韌體 {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "未找到已安裝的韌體,但 Ryujinx 可以從現有的遊戲安裝韌體{0}。\n模擬器現在可以執行。", + "DialogFirmwareInstallEmbeddedSuccessMessage": "未找到已安裝的韌體,但 Kenji-NX 可以從現有的遊戲安裝韌體{0}。\n模擬器現在可以執行。", "DialogFirmwareNoFirmwareInstalledMessage": "未安裝韌體", "DialogFirmwareInstalledMessage": "已安裝韌體{0}", "DialogInstallFileTypesSuccessMessage": "成功安裝檔案類型!", @@ -480,7 +480,7 @@ "DialogErrorAppletErrorExceptionMessage": "顯示錯誤對話方塊時出現錯誤: {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\n有關如何修復此錯誤的更多資訊,請參閱我們的設定指南。", - "DialogUserErrorDialogTitle": "Ryujinx 錯誤 ({0})", + "DialogUserErrorDialogTitle": "Kenji-NX 錯誤 ({0})", "DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiFailFetchMessage": "從 API 取得資訊時出現錯誤。", "DialogAmiiboApiConnectErrorMessage": "無法連接 Amiibo API 伺服器。服務可能已停機,或者您可能需要確認網際網路連線是否在線上。", @@ -494,7 +494,7 @@ "DialogPPTCNukeMessage": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", "DialogShaderDeletionMessage": "您將刪除以下遊戲的著色器快取:\n\n{0}\n\n您確定要繼續嗎?", "DialogShaderDeletionErrorMessage": "在 {0} 清除著色器快取時出錯: {1}", - "DialogRyujinxErrorMessage": "Ryujinx 遇到錯誤", + "DialogRyujinxErrorMessage": "Kenji-NX 遇到錯誤", "DialogInvalidTitleIdErrorMessage": "UI 錯誤: 所選遊戲沒有有效的遊戲 ID", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "在 {0} 中未發現有效的系統韌體。", "DialogFirmwareInstallerFirmwareInstallTitle": "安裝韌體 {0}", @@ -530,7 +530,7 @@ "DialogLoadAppGameAlreadyLoadedSubMessage": "請停止模擬或關閉模擬器,然後再啟動另一款遊戲。", "DialogUpdateAddUpdateErrorMessage": "指定檔案不包含所選遊戲的更新!", "DialogSettingsBackendThreadingWarningTitle": "警告 - 後端執行緒處理中", - "DialogSettingsBackendThreadingWarningMessage": "變更此選項後,必須重新啟動 Ryujinx 才能完全生效。使用 Ryujinx 的多執行緒功能時,可能需要手動停用驅動程式本身的多執行緒功能,這取決於您的平台。", + "DialogSettingsBackendThreadingWarningMessage": "變更此選項後,必須重新啟動 Kenji-NX 才能完全生效。使用 Kenji-NX 的多執行緒功能時,可能需要手動停用驅動程式本身的多執行緒功能,這取決於您的平台。", "DialogModManagerDeletionWarningMessage": "您將刪除模組: {0}\n\n您確定要繼續嗎?", "DialogModManagerDeletionAllWarningMessage": "您即將刪除此遊戲的所有模組。\n\n您確定要繼續嗎?", "SettingsTabGraphicsFeaturesOptions": "功能", @@ -543,15 +543,15 @@ "DialogProfileInvalidProfileNameErrorMessage": "檔案名稱包含無效字元。請重試。", "MenuBarOptionsPauseEmulation": "暫停", "MenuBarOptionsResumeEmulation": "繼續", - "AboutUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 網站。", - "AboutDisclaimerMessage": "Ryujinx 和 Nintendo™\n或其任何合作夥伴完全沒有關聯。", + "AboutUrlTooltipMessage": "在預設瀏覽器中開啟 Kenji-NX 網站。", + "AboutDisclaimerMessage": "Kenji-NX 和 Nintendo™\n或其任何合作夥伴完全沒有關聯。", "AboutAmiiboDisclaimerMessage": "我們在 Amiibo 模擬中\n使用了 AmiiboAPI (www.amiiboapi.com)。", - "AboutPatreonUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 的 Patreon 網頁。", - "AboutGithubUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 的 GitHub 網頁。", - "AboutDiscordUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 的 Discord 邀請連結。", - "AboutTwitterUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 的 Twitter 網頁。", + "AboutPatreonUrlTooltipMessage": "在預設瀏覽器中開啟 Kenji-NX 的 Patreon 網頁。", + "AboutGithubUrlTooltipMessage": "在預設瀏覽器中開啟 Kenji-NX 的 GitHub 網頁。", + "AboutDiscordUrlTooltipMessage": "在預設瀏覽器中開啟 Kenji-NX 的 Discord 邀請連結。", + "AboutTwitterUrlTooltipMessage": "在預設瀏覽器中開啟 Kenji-NX 的 Twitter 網頁。", "AboutRyujinxAboutTitle": "關於:", - "AboutRyujinxAboutContent": "Ryujinx 是一款 Nintendo Switch™ 模擬器。\n\n對於有興趣貢獻的開發者,可以在我們的 GitHub 上了解更多資訊。", + "AboutRyujinxAboutContent": "Kenji-NX 是一款 Nintendo Switch™ 模擬器。\n\n對於有興趣貢獻的開發者,可以在我們的 GitHub 上了解更多資訊。", "AboutRyujinxMaintainersTitle": "維護者:", "AboutRyujinxFormerMaintainersTitle": "以前的維護者:", "AboutRyujinxMaintainersContentTooltipMessage": "在預設瀏覽器中開啟貢獻者的網頁", @@ -601,7 +601,7 @@ "MemoryManagerTooltip": "變更客體記憶體的映射和存取方式。這會極大地影響模擬 CPU 效能。\n\n如果不確定,請設定為主體略過檢查模式。", "MemoryManagerSoftwareTooltip": "使用軟體分頁表進行位址轉換。精度最高,但效能最差。", "MemoryManagerHostTooltip": "直接映射主體位址空間中的記憶體。更快的 JIT 編譯和執行速度。", - "MemoryManagerUnsafeTooltip": "直接映射記憶體,但在存取前不封鎖客體位址空間內的位址。速度更快,但相對不安全。訪客應用程式可以從 Ryujinx 中的任何地方存取記憶體,因此只能使用該模式執行您信任的程式。", + "MemoryManagerUnsafeTooltip": "直接映射記憶體,但在存取前不封鎖客體位址空間內的位址。速度更快,但相對不安全。訪客應用程式可以從 Kenji-NX 中的任何地方存取記憶體,因此只能使用該模式執行您信任的程式。", "UseHypervisorTooltip": "使用 Hypervisor 取代 JIT。使用時可大幅提高效能,但在目前狀態下可能不穩定。", "DRamTooltip": "利用另一種 MemoryMode 配置來模仿 Switch 開發模式。\n\n這僅對高解析度紋理套件或 4K 解析度模組有用。不會提高效能。\n\n如果不確定,請保持關閉狀態。", "IgnoreMissingServicesTooltip": "忽略未實現的 Horizon OS 服務。這可能有助於在啟動某些遊戲時避免崩潰。\n\n如果不確定,請保持關閉狀態。", @@ -627,14 +627,14 @@ "DebugLogTooltip": "在控制台中輸出偵錯日誌訊息。\n\n只有在人員特別指示的情況下才能使用,因為這會導致日誌難以閱讀,並降低模擬器效能。", "LoadApplicationFileTooltip": "開啟檔案總管,選擇與 Switch 相容的檔案來載入", "LoadApplicationFolderTooltip": "開啟檔案總管,選擇與 Switch 相容且未封裝的應用程式來載入", - "OpenRyujinxFolderTooltip": "開啟 Ryujinx 檔案系統資料夾", - "OpenScreenshotFolderTooltip": "開啟 Ryujinx 螢幕擷取畫面資料夾", + "OpenRyujinxFolderTooltip": "開啟 Kenji-NX 檔案系統資料夾", + "OpenScreenshotFolderTooltip": "開啟 Kenji-NX 螢幕擷取畫面資料夾", "OpenRyujinxLogsTooltip": "開啟日誌被寫入的資料夾", - "ExitTooltip": "結束 Ryujinx", + "ExitTooltip": "結束 Kenji-NX", "OpenSettingsTooltip": "開啟設定視窗", "OpenProfileManagerTooltip": "開啟使用者設定檔管理員視窗", "StopEmulationTooltip": "停止模擬目前遊戲,返回遊戲選擇介面", - "CheckUpdatesTooltip": "檢查 Ryujinx 的更新", + "CheckUpdatesTooltip": "檢查 Kenji-NX 的更新", "OpenAboutTooltip": "開啟關於視窗", "GridSize": "網格尺寸", "GridSizeTooltip": "調整網格的大小", @@ -649,7 +649,7 @@ "GameListContextMenuManageModToolTip": "管理模組", "GameListContextMenuManageMod": "管理模組", "ControllerSettingsStickRange": "範圍:", - "DialogStopEmulationTitle": "Ryujinx - 停止模擬", + "DialogStopEmulationTitle": "Kenji-NX - 停止模擬", "DialogStopEmulationMessage": "您確定要停止模擬嗎?", "SettingsTabCpu": "CPU", "SettingsTabAudio": "音訊", @@ -657,7 +657,7 @@ "SettingsTabNetworkConnection": "網路連線", "SettingsTabCpuCache": "CPU 快取", "SettingsTabCpuMemory": "CPU 模式", - "DialogUpdaterFlatpakNotSupportedMessage": "請透過 Flathub 更新 Ryujinx。", + "DialogUpdaterFlatpakNotSupportedMessage": "請透過 Flathub 更新 Kenji-NX。", "UpdaterDisabledWarningTitle": "更新已停用!", "ControllerSettingsRotate90": "順時針旋轉 90°", "IconSize": "圖示大小", @@ -670,17 +670,17 @@ "UserErrorApplicationNotFound": "找不到應用程式", "UserErrorUnknown": "未知錯誤", "UserErrorUndefined": "未定義錯誤", - "UserErrorNoKeysDescription": "Ryujinx 無法找到您的「prod.keys」檔案", - "UserErrorNoFirmwareDescription": "Ryujinx 無法找到已安裝的任何韌體", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx 無法解析所提供的韌體。這通常是由於金鑰過時造成的。", - "UserErrorApplicationNotFoundDescription": "Ryujinx 無法在指定路徑下找到有效的應用程式。", + "UserErrorNoKeysDescription": "Kenji-NX 無法找到您的「prod.keys」檔案", + "UserErrorNoFirmwareDescription": "Kenji-NX 無法找到已安裝的任何韌體", + "UserErrorFirmwareParsingFailedDescription": "Kenji-NX 無法解析所提供的韌體。這通常是由於金鑰過時造成的。", + "UserErrorApplicationNotFoundDescription": "Kenji-NX 無法在指定路徑下找到有效的應用程式。", "UserErrorUnknownDescription": "發生未知錯誤!", "UserErrorUndefinedDescription": "發生未定義錯誤! 這種情況不應該發生,請聯絡開發人員!", "OpenSetupGuideMessage": "開啟設定指南", "NoUpdate": "沒有更新", "TitleUpdateVersionLabel": "版本 {0}", - "RyujinxInfo": "Ryujinx - 資訊", - "RyujinxConfirm": "Ryujinx - 確認", + "RyujinxInfo": "Kenji-NX - 資訊", + "RyujinxConfirm": "Kenji-NX - 確認", "FileDialogAllTypes": "全部類型", "Never": "從不", "SwkbdMinCharacters": "長度必須至少為 {0} 個字元", @@ -714,7 +714,7 @@ "OpenFileDialogTitle": "選取支援的檔案格式", "OpenFolderDialogTitle": "選取未封裝遊戲的資料夾", "AllSupportedFormats": "所有支援的格式", - "RyujinxUpdater": "Ryujinx 更新程式", + "RyujinxUpdater": "Kenji-NX 更新程式", "SettingsTabHotkeys": "鍵盤快速鍵", "SettingsTabHotkeysHotkeys": "鍵盤快捷鍵", "SettingsTabHotkeysToggleVsyncHotkey": "切換垂直同步:", @@ -762,10 +762,10 @@ "SettingsEnableTextureRecompressionTooltip": "壓縮 ASTC 紋理,以減少 VRAM 占用。\n\n使用這種紋理格式的遊戲包括 Astral Chain、Bayonetta 3、Fire Emblem Engage、Metroid Prime Remastered、Super Mario Bros. Wonder 和 The Legend of Zelda: Tears of the Kingdom。\n\n使用 4GB 或更低 VRAM 的顯示卡在執行這些遊戲時可能會崩潰。\n\n只有在上述遊戲的 VRAM 即將耗盡時才啟用。如果不確定,請保持關閉狀態。", "SettingsTabGraphicsPreferredGpu": "優先選取的 GPU", "SettingsTabGraphicsPreferredGpuTooltip": "選擇將與 Vulkan 圖形後端一起使用的顯示卡。\n\n不會影響 OpenGL 將使用的 GPU。\n\n如果不確定,請設定為標記為「dGPU」的 GPU。如果沒有,則保持原狀。", - "SettingsAppRequiredRestartMessage": "需要重新啟動 Ryujinx", + "SettingsAppRequiredRestartMessage": "需要重新啟動 Kenji-NX", "SettingsGpuBackendRestartMessage": "圖形後端或 GPU 設定已修改。這需要重新啟動才能套用。", "SettingsGpuBackendRestartSubMessage": "您現在要重新啟動嗎?", - "RyujinxUpdaterMessage": "您想將 Ryujinx 升級到最新版本嗎?", + "RyujinxUpdaterMessage": "您想將 Kenji-NX 升級到最新版本嗎?", "SettingsTabHotkeysVolumeUpHotkey": "提高音量:", "SettingsTabHotkeysVolumeDownHotkey": "降低音量:", "SettingsEnableMacroHLE": "啟用 Macro HLE", @@ -808,7 +808,7 @@ "AboutChangelogButtonTooltipMessage": "在預設瀏覽器中開啟此版本的更新日誌。", "SettingsTabNetworkMultiplayer": "多人遊戲", "MultiplayerMode": "模式:", - "MultiplayerModeTooltip": "變更 LDN 多人遊戲模式。\n\nLdnMitm 將修改遊戲中的本機無線/本機遊戲功能,使其如同區域網路一樣執行,允許與其他安裝了 ldn_mitm 模組的 Ryujinx 實例和已破解的 Nintendo Switch 遊戲機進行本機同網路連線。\n\n多人遊戲要求所有玩家使用相同的遊戲版本 (例如,Super Smash Bros. Ultimate v13.0.1 無法連接 v13.0.0)。\n\n如果不確定,請保持 Disabled (停用) 狀態。", + "MultiplayerModeTooltip": "變更 LDN 多人遊戲模式。\n\nLdnMitm 將修改遊戲中的本機無線/本機遊戲功能,使其如同區域網路一樣執行,允許與其他安裝了 ldn_mitm 模組的 Kenji-NX 實例和已破解的 Nintendo Switch 遊戲機進行本機同網路連線。\n\n多人遊戲要求所有玩家使用相同的遊戲版本 (例如,Super Smash Bros. Ultimate v13.0.1 無法連接 v13.0.0)。\n\n如果不確定,請保持 Disabled (停用) 狀態。", "MultiplayerModeDisabled": "已停用", "MultiplayerModeLdnMitm": "ldn_mitm" } diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Kenjinx/Assets/Styles/Styles.xaml similarity index 100% rename from src/Ryujinx/Assets/Styles/Styles.xaml rename to src/Kenjinx/Assets/Styles/Styles.xaml diff --git a/src/Ryujinx/Assets/Styles/Themes.xaml b/src/Kenjinx/Assets/Styles/Themes.xaml similarity index 100% rename from src/Ryujinx/Assets/Styles/Themes.xaml rename to src/Kenjinx/Assets/Styles/Themes.xaml diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Kenjinx/Common/ApplicationHelper.cs similarity index 92% rename from src/Ryujinx/Common/ApplicationHelper.cs rename to src/Kenjinx/Common/ApplicationHelper.cs index 80309515b..b71879222 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Kenjinx/Common/ApplicationHelper.cs @@ -3,6 +3,7 @@ using Avalonia.Platform.Storage; using Avalonia.Threading; using LibHac; using LibHac.Account; +using LibHac.Bcat; using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; @@ -17,8 +18,10 @@ using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Common.Logging; using Ryujinx.HLE.FileSystem; +using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.Loaders.Processes.Extensions; +using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; using System; @@ -100,6 +103,37 @@ namespace Ryujinx.Ava.Common return false; } + public static void CreateSaveDir(ulong titleId, BlitStruct nacpData) + { + var applicationId = new LibHac.Ncm.ApplicationId(titleId); + + Logger.Info?.Print(LogClass.Application, $"Ensuring required savedata exists for title id: {titleId}."); + + ref LibHac.Ns.ApplicationControlProperty control = ref nacpData.Value; + + if (LibHac.Common.Utilities.IsZeros(nacpData.ByteSpan)) + { + control = ref new BlitStruct(1).Value; + control.UserAccountSaveDataSize = 0x4000; + control.UserAccountSaveDataJournalSize = 0x4000; + control.SaveDataOwnerId = applicationId.Value; + } + + LibHac.Result resultCode = _horizonClient.Fs.EnsureApplicationCacheStorage(out _, out _, applicationId, in control); + if (resultCode.IsFailure()) + { + Logger.Error?.Print(LogClass.Application, $"Error calling EnsureApplicationCacheStorage. Result code {resultCode.ToStringWithName()}"); + } + + Uid userId = _accountManager.LastOpenedUser.UserId.ToLibHacUid(); + + resultCode = _horizonClient.Fs.EnsureApplicationSaveData(out _, applicationId, in control, in userId); + if (resultCode.IsFailure()) + { + Logger.Error?.Print(LogClass.Application, $"Error calling EnsureApplicationSaveData. Result code {resultCode.ToStringWithName()}"); + } + } + public static void OpenSaveDir(in SaveDataFilter saveDataFilter, ulong titleId, BlitStruct controlData, string titleName) { if (!TryFindSaveData(titleName, titleId, controlData, in saveDataFilter, out ulong saveDataId)) @@ -302,7 +336,7 @@ namespace Ryujinx.Ava.Common var cancellationToken = new CancellationTokenSource(); UpdateWaitWindow waitingDialog = new( - $"Ryujinx {Program.Version} - {LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle]}", + $"Kenji-NX {Program.Version} - {LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle]}", LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogNcaExtractionMessage, ncaSectionType, Path.GetFileName(updateFilePath)), cancellationToken); @@ -390,7 +424,7 @@ namespace Ryujinx.Ava.Common Dispatcher.UIThread.Post(waitingDialog.Close); NotificationHelper.ShowInformation( - $"Ryujinx {Program.Version} - {LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle]}", + $"Kenji-NX {Program.Version} - {LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle]}", $"{updateName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}"); } } diff --git a/src/Ryujinx/Common/ApplicationSort.cs b/src/Kenjinx/Common/ApplicationSort.cs similarity index 100% rename from src/Ryujinx/Common/ApplicationSort.cs rename to src/Kenjinx/Common/ApplicationSort.cs diff --git a/src/Ryujinx/Common/KeyboardHotkeyState.cs b/src/Kenjinx/Common/KeyboardHotkeyState.cs similarity index 100% rename from src/Ryujinx/Common/KeyboardHotkeyState.cs rename to src/Kenjinx/Common/KeyboardHotkeyState.cs diff --git a/src/Ryujinx/Common/Locale/LocaleExtension.cs b/src/Kenjinx/Common/Locale/LocaleExtension.cs similarity index 100% rename from src/Ryujinx/Common/Locale/LocaleExtension.cs rename to src/Kenjinx/Common/Locale/LocaleExtension.cs diff --git a/src/Ryujinx/Common/Locale/LocaleManager.cs b/src/Kenjinx/Common/Locale/LocaleManager.cs similarity index 99% rename from src/Ryujinx/Common/Locale/LocaleManager.cs rename to src/Kenjinx/Common/Locale/LocaleManager.cs index 96f648761..545966095 100644 --- a/src/Ryujinx/Common/Locale/LocaleManager.cs +++ b/src/Kenjinx/Common/Locale/LocaleManager.cs @@ -150,7 +150,7 @@ namespace Ryujinx.Ava.Common.Locale private static Dictionary LoadJsonLanguage(string languageCode) { var localeStrings = new Dictionary(); - string languageJson = EmbeddedResources.ReadAllText($"Ryujinx/Assets/Locales/{languageCode}.json"); + string languageJson = EmbeddedResources.ReadAllText($"Kenjinx/Assets/Locales/{languageCode}.json"); if (languageJson == null) { diff --git a/src/Ryujinx/Common/ThemeManager.cs b/src/Kenjinx/Common/ThemeManager.cs similarity index 100% rename from src/Ryujinx/Common/ThemeManager.cs rename to src/Kenjinx/Common/ThemeManager.cs diff --git a/src/Ryujinx/Common/XCIFileTrimmerLog.cs b/src/Kenjinx/Common/XCIFileTrimmerLog.cs similarity index 100% rename from src/Ryujinx/Common/XCIFileTrimmerLog.cs rename to src/Kenjinx/Common/XCIFileTrimmerLog.cs diff --git a/src/Ryujinx/Common/XCIFileTrimmerMainWindowLog.cs b/src/Kenjinx/Common/XCIFileTrimmerMainWindowLog.cs similarity index 100% rename from src/Ryujinx/Common/XCIFileTrimmerMainWindowLog.cs rename to src/Kenjinx/Common/XCIFileTrimmerMainWindowLog.cs diff --git a/src/Ryujinx/Common/XCIFileTrimmerWindowLog.cs b/src/Kenjinx/Common/XCIFileTrimmerWindowLog.cs similarity index 100% rename from src/Ryujinx/Common/XCIFileTrimmerWindowLog.cs rename to src/Kenjinx/Common/XCIFileTrimmerWindowLog.cs diff --git a/src/Ryujinx/Input/AvaloniaKeyboard.cs b/src/Kenjinx/Input/AvaloniaKeyboard.cs similarity index 100% rename from src/Ryujinx/Input/AvaloniaKeyboard.cs rename to src/Kenjinx/Input/AvaloniaKeyboard.cs diff --git a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs b/src/Kenjinx/Input/AvaloniaKeyboardDriver.cs similarity index 100% rename from src/Ryujinx/Input/AvaloniaKeyboardDriver.cs rename to src/Kenjinx/Input/AvaloniaKeyboardDriver.cs diff --git a/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs b/src/Kenjinx/Input/AvaloniaKeyboardMappingHelper.cs similarity index 100% rename from src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs rename to src/Kenjinx/Input/AvaloniaKeyboardMappingHelper.cs diff --git a/src/Ryujinx/Input/AvaloniaMouse.cs b/src/Kenjinx/Input/AvaloniaMouse.cs similarity index 100% rename from src/Ryujinx/Input/AvaloniaMouse.cs rename to src/Kenjinx/Input/AvaloniaMouse.cs diff --git a/src/Ryujinx/Input/AvaloniaMouseDriver.cs b/src/Kenjinx/Input/AvaloniaMouseDriver.cs similarity index 100% rename from src/Ryujinx/Input/AvaloniaMouseDriver.cs rename to src/Kenjinx/Input/AvaloniaMouseDriver.cs diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Kenjinx/Kenjinx.csproj similarity index 95% rename from src/Ryujinx/Ryujinx.csproj rename to src/Kenjinx/Kenjinx.csproj index 51a68eb80..6cedb7166 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Kenjinx/Kenjinx.csproj @@ -1,16 +1,17 @@ win-x64;osx-x64;linux-x64;win-arm64;osx-arm64;linux-arm64 - Exe + Kenjinx + Exe true 2.0.3 $(DefineConstants);$(ExtraDefineConstants) - - Ryujinx.ico + Kenjinx.ico true app.manifest $(DefaultItemExcludes);._* - false + false @@ -75,12 +76,11 @@ - + - + Always alsoft.ini @@ -92,9 +92,10 @@ Always LICENSE.txt + - + Always diff --git a/src/Ryujinx/Ryujinx.ico b/src/Kenjinx/Kenjinx.ico similarity index 100% rename from src/Ryujinx/Ryujinx.ico rename to src/Kenjinx/Kenjinx.ico diff --git a/src/Ryujinx/Modules/Updater/Updater.cs b/src/Kenjinx/Modules/Updater/Updater.cs similarity index 98% rename from src/Ryujinx/Modules/Updater/Updater.cs rename to src/Kenjinx/Modules/Updater/Updater.cs index 36bdfd342..9f011a9fb 100644 --- a/src/Ryujinx/Modules/Updater/Updater.cs +++ b/src/Kenjinx/Modules/Updater/Updater.cs @@ -35,7 +35,7 @@ namespace Ryujinx.Modules private static readonly GithubReleasesJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); private static readonly string _homeDir = AppDomain.CurrentDomain.BaseDirectory; - private static readonly string _updateDir = Path.Combine(Path.GetTempPath(), "Ryujinx", "update"); + private static readonly string _updateDir = Path.Combine(Path.GetTempPath(), "Kenjinx", "update"); private static readonly string _updatePublishDir = Path.Combine(_updateDir, "publish"); private const int ConnectionCount = 4; @@ -104,7 +104,7 @@ namespace Ryujinx.Modules foreach (var asset in fetched.Assets) { - if (asset.Name.StartsWith("ryujinx") && asset.Name.EndsWith(_platformExt)) + if (asset.Name.StartsWith("kenjinx") && asset.Name.EndsWith(_platformExt)) { _buildUrl = asset.BrowserDownloadUrl; @@ -226,7 +226,7 @@ namespace Ryujinx.Modules HttpClient result = new(); // Required by GitHub to interact with APIs. - result.DefaultRequestHeaders.Add("User-Agent", "Ryujinx-Updater/1.0.0"); + result.DefaultRequestHeaders.Add("User-Agent", "Kenji-NX-Updater/1.0.0"); return result; } @@ -288,7 +288,7 @@ namespace Ryujinx.Modules if (OperatingSystem.IsMacOS()) { string baseBundlePath = Path.GetFullPath(Path.Combine(executableDirectory, "..", "..")); - string newBundlePath = Path.Combine(_updateDir, "Ryujinx.app"); + string newBundlePath = Path.Combine(_updateDir, "Kenjinx.app"); string updaterScriptPath = Path.Combine(newBundlePath, "Contents", "Resources", "updater.sh"); string currentPid = Environment.ProcessId.ToString(); @@ -302,7 +302,7 @@ namespace Ryujinx.Modules // Migration: Start the updated binary. // TODO: Remove this in a future update. - if (ryuName.StartsWith("Ryujinx.Ava")) + if (ryuName.StartsWith("Kenjinx.Ava")) { ryuName = ryuName.Replace(".Ava", ""); } @@ -316,7 +316,7 @@ namespace Ryujinx.Modules // Fallback if the executable could not be found. if (ryuName.Length == 0 || !Path.Exists(Path.Combine(executableDirectory, ryuName))) { - ryuName = OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx"; + ryuName = OperatingSystem.IsWindows() ? "Kenjinx.exe" : "Kenjinx"; } ProcessStartInfo processStart = new(ryuName) @@ -771,13 +771,13 @@ namespace Ryujinx.Modules // TODO: Remove this in a future update. if (!OperatingSystem.IsMacOS()) { - string[] oldRyuFiles = Directory.GetFiles(_homeDir, "Ryujinx.Ava*", SearchOption.TopDirectoryOnly); + string[] oldRyuFiles = Directory.GetFiles(_homeDir, "Kenjinx.Ava*", SearchOption.TopDirectoryOnly); // Assume we are running the new one if the process path is not available. // This helps to prevent an infinite loop of restarts. - string currentRyuName = Path.GetFileName(Environment.ProcessPath) ?? (OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx"); + string currentRyuName = Path.GetFileName(Environment.ProcessPath) ?? (OperatingSystem.IsWindows() ? "Kenjinx.exe" : "Kenjinx"); string newRyuName = Path.Combine(_homeDir, currentRyuName.Replace(".Ava", "")); - if (!currentRyuName.Contains("Ryujinx.Ava")) + if (!currentRyuName.Contains("Kenjinx.Ava")) { foreach (string oldRyuFile in oldRyuFiles) { diff --git a/src/Ryujinx/Program.cs b/src/Kenjinx/Program.cs similarity index 98% rename from src/Ryujinx/Program.cs rename to src/Kenjinx/Program.cs index 481d26290..c2d72bfa0 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Kenjinx/Program.cs @@ -42,7 +42,7 @@ namespace Ryujinx.Ava if (OperatingSystem.IsWindows() && !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 19041)) { - _ = MessageBoxA(IntPtr.Zero, "You are running an outdated version of Windows.\n\nRyujinx supports Windows 10 version 20H1 and newer.\n", $"Ryujinx {Version}", MbIconwarning); + _ = MessageBoxA(IntPtr.Zero, "You are running an outdated version of Windows.\n\nRyujinx supports Windows 10 version 20H1 and newer.\n", $"Kenji-NX {Version}", MbIconwarning); } PreviewerDetached = true; @@ -90,7 +90,7 @@ namespace Ryujinx.Ava // Delete backup files after updating. Task.Run(Updater.CleanupUpdate); - Console.Title = $"Ryujinx Console {Version}"; + Console.Title = $"Kenji-NX Console {Version}"; // Hook unhandled exception and process exit events. AppDomain.CurrentDomain.UnhandledException += (sender, e) @@ -236,7 +236,7 @@ namespace Ryujinx.Ava private static void PrintSystemInfo() { - Logger.Notice.Print(LogClass.Application, $"Ryujinx Version: {Version}"); + Logger.Notice.Print(LogClass.Application, $"Kenji-NX Version: {Version}"); Logger.Notice.Print(LogClass.Application, $".NET Runtime: {RuntimeInformation.FrameworkDescription}"); SystemInfo.Gather().Print(); diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Kenjinx/UI/Applet/AvaHostUIHandler.cs similarity index 99% rename from src/Ryujinx/UI/Applet/AvaHostUIHandler.cs rename to src/Kenjinx/UI/Applet/AvaHostUIHandler.cs index 080905e1f..e994a9dff 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Kenjinx/UI/Applet/AvaHostUIHandler.cs @@ -172,7 +172,7 @@ namespace Ryujinx.Ava.UI.Applet _parent.ViewModel.AppHost.NpadManager.BlockInputUpdates(); SoftwareKeyboardUIArgs args = new SoftwareKeyboardUIArgs(); args.KeyboardMode = KeyboardMode.Default; - args.InitialText = "Ryujinx"; + args.InitialText = "Kenji-NX"; args.StringLengthMin = 1; args.StringLengthMax = 25; (UserResult result, string userInput) = await SwkbdAppletDialog.ShowInputDialog(LocaleManager.Instance[LocaleKeys.CabinetDialog], args); diff --git a/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs b/src/Kenjinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs similarity index 100% rename from src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs rename to src/Kenjinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs diff --git a/src/Ryujinx/UI/Applet/AvaloniaHostUITheme.cs b/src/Kenjinx/UI/Applet/AvaloniaHostUITheme.cs similarity index 100% rename from src/Ryujinx/UI/Applet/AvaloniaHostUITheme.cs rename to src/Kenjinx/UI/Applet/AvaloniaHostUITheme.cs diff --git a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml b/src/Kenjinx/UI/Applet/ControllerAppletDialog.axaml similarity index 100% rename from src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml rename to src/Kenjinx/UI/Applet/ControllerAppletDialog.axaml diff --git a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs b/src/Kenjinx/UI/Applet/ControllerAppletDialog.axaml.cs similarity index 94% rename from src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs rename to src/Kenjinx/UI/Applet/ControllerAppletDialog.axaml.cs index 6b999b1f4..4538e5ead 100644 --- a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs +++ b/src/Kenjinx/UI/Applet/ControllerAppletDialog.axaml.cs @@ -16,10 +16,10 @@ namespace Ryujinx.Ava.UI.Applet { internal partial class ControllerAppletDialog : UserControl { - private const string ProControllerResource = "Ryujinx/Assets/Icons/Controller_ProCon.svg"; - private const string JoyConPairResource = "Ryujinx/Assets/Icons/Controller_JoyConPair.svg"; - private const string JoyConLeftResource = "Ryujinx/Assets/Icons/Controller_JoyConLeft.svg"; - private const string JoyConRightResource = "Ryujinx/Assets/Icons/Controller_JoyConRight.svg"; + private const string ProControllerResource = "Kenjinx/Assets/Icons/Controller_ProCon.svg"; + private const string JoyConPairResource = "Kenjinx/Assets/Icons/Controller_JoyConPair.svg"; + private const string JoyConLeftResource = "Kenjinx/Assets/Icons/Controller_JoyConLeft.svg"; + private const string JoyConRightResource = "Kenjinx/Assets/Icons/Controller_JoyConRight.svg"; public static SvgImage ProControllerImage => GetResource(ProControllerResource); public static SvgImage JoyconPairImage => GetResource(JoyConPairResource); diff --git a/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml b/src/Kenjinx/UI/Applet/ErrorAppletWindow.axaml similarity index 100% rename from src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml rename to src/Kenjinx/UI/Applet/ErrorAppletWindow.axaml diff --git a/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml.cs b/src/Kenjinx/UI/Applet/ErrorAppletWindow.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml.cs rename to src/Kenjinx/UI/Applet/ErrorAppletWindow.axaml.cs diff --git a/src/Ryujinx/UI/Applet/SwkbdAppletDialog.axaml b/src/Kenjinx/UI/Applet/SwkbdAppletDialog.axaml similarity index 100% rename from src/Ryujinx/UI/Applet/SwkbdAppletDialog.axaml rename to src/Kenjinx/UI/Applet/SwkbdAppletDialog.axaml diff --git a/src/Ryujinx/UI/Applet/SwkbdAppletDialog.axaml.cs b/src/Kenjinx/UI/Applet/SwkbdAppletDialog.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Applet/SwkbdAppletDialog.axaml.cs rename to src/Kenjinx/UI/Applet/SwkbdAppletDialog.axaml.cs diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Kenjinx/UI/Controls/ApplicationContextMenu.axaml similarity index 100% rename from src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml rename to src/Kenjinx/UI/Controls/ApplicationContextMenu.axaml diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Kenjinx/UI/Controls/ApplicationContextMenu.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs rename to src/Kenjinx/UI/Controls/ApplicationContextMenu.axaml.cs diff --git a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml b/src/Kenjinx/UI/Controls/ApplicationGridView.axaml similarity index 100% rename from src/Ryujinx/UI/Controls/ApplicationGridView.axaml rename to src/Kenjinx/UI/Controls/ApplicationGridView.axaml diff --git a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs b/src/Kenjinx/UI/Controls/ApplicationGridView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs rename to src/Kenjinx/UI/Controls/ApplicationGridView.axaml.cs diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml b/src/Kenjinx/UI/Controls/ApplicationListView.axaml similarity index 100% rename from src/Ryujinx/UI/Controls/ApplicationListView.axaml rename to src/Kenjinx/UI/Controls/ApplicationListView.axaml diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs b/src/Kenjinx/UI/Controls/ApplicationListView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs rename to src/Kenjinx/UI/Controls/ApplicationListView.axaml.cs diff --git a/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml b/src/Kenjinx/UI/Controls/NavigationDialogHost.axaml similarity index 100% rename from src/Ryujinx/UI/Controls/NavigationDialogHost.axaml rename to src/Kenjinx/UI/Controls/NavigationDialogHost.axaml diff --git a/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs b/src/Kenjinx/UI/Controls/NavigationDialogHost.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs rename to src/Kenjinx/UI/Controls/NavigationDialogHost.axaml.cs diff --git a/src/Ryujinx/UI/Controls/SliderScroll.axaml.cs b/src/Kenjinx/UI/Controls/SliderScroll.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Controls/SliderScroll.axaml.cs rename to src/Kenjinx/UI/Controls/SliderScroll.axaml.cs diff --git a/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml b/src/Kenjinx/UI/Controls/UpdateWaitWindow.axaml similarity index 97% rename from src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml rename to src/Kenjinx/UI/Controls/UpdateWaitWindow.axaml index d80259956..b4ca74358 100644 --- a/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml +++ b/src/Kenjinx/UI/Controls/UpdateWaitWindow.axaml @@ -4,7 +4,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - Title="Ryujinx - Waiting" + Title="Kenji-NX - Waiting" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterOwner" CanResize="False" diff --git a/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml.cs b/src/Kenjinx/UI/Controls/UpdateWaitWindow.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml.cs rename to src/Kenjinx/UI/Controls/UpdateWaitWindow.axaml.cs diff --git a/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs b/src/Kenjinx/UI/Helpers/ApplicationOpenedEventArgs.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs rename to src/Kenjinx/UI/Helpers/ApplicationOpenedEventArgs.cs diff --git a/src/Ryujinx/UI/Helpers/AvaloniaListExtensions.cs b/src/Kenjinx/UI/Helpers/AvaloniaListExtensions.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/AvaloniaListExtensions.cs rename to src/Kenjinx/UI/Helpers/AvaloniaListExtensions.cs diff --git a/src/Ryujinx/UI/Helpers/BitmapArrayValueConverter.cs b/src/Kenjinx/UI/Helpers/BitmapArrayValueConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/BitmapArrayValueConverter.cs rename to src/Kenjinx/UI/Helpers/BitmapArrayValueConverter.cs diff --git a/src/Ryujinx/UI/Helpers/ButtonKeyAssigner.cs b/src/Kenjinx/UI/Helpers/ButtonKeyAssigner.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/ButtonKeyAssigner.cs rename to src/Kenjinx/UI/Helpers/ButtonKeyAssigner.cs diff --git a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs b/src/Kenjinx/UI/Helpers/ContentDialogHelper.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/ContentDialogHelper.cs rename to src/Kenjinx/UI/Helpers/ContentDialogHelper.cs diff --git a/src/Ryujinx/UI/Helpers/DownloadableContentLabelConverter.cs b/src/Kenjinx/UI/Helpers/DownloadableContentLabelConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/DownloadableContentLabelConverter.cs rename to src/Kenjinx/UI/Helpers/DownloadableContentLabelConverter.cs diff --git a/src/Ryujinx/UI/Helpers/Glyph.cs b/src/Kenjinx/UI/Helpers/Glyph.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/Glyph.cs rename to src/Kenjinx/UI/Helpers/Glyph.cs diff --git a/src/Ryujinx/UI/Helpers/GlyphValueConverter.cs b/src/Kenjinx/UI/Helpers/GlyphValueConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/GlyphValueConverter.cs rename to src/Kenjinx/UI/Helpers/GlyphValueConverter.cs diff --git a/src/Ryujinx/UI/Helpers/KeyValueConverter.cs b/src/Kenjinx/UI/Helpers/KeyValueConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/KeyValueConverter.cs rename to src/Kenjinx/UI/Helpers/KeyValueConverter.cs diff --git a/src/Ryujinx/UI/Helpers/LocalizedNeverConverter.cs b/src/Kenjinx/UI/Helpers/LocalizedNeverConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/LocalizedNeverConverter.cs rename to src/Kenjinx/UI/Helpers/LocalizedNeverConverter.cs diff --git a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs b/src/Kenjinx/UI/Helpers/LoggerAdapter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/LoggerAdapter.cs rename to src/Kenjinx/UI/Helpers/LoggerAdapter.cs diff --git a/src/Ryujinx/UI/Helpers/MiniCommand.cs b/src/Kenjinx/UI/Helpers/MiniCommand.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/MiniCommand.cs rename to src/Kenjinx/UI/Helpers/MiniCommand.cs diff --git a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs b/src/Kenjinx/UI/Helpers/MultiplayerInfoConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs rename to src/Kenjinx/UI/Helpers/MultiplayerInfoConverter.cs diff --git a/src/Ryujinx/UI/Helpers/NotificationHelper.cs b/src/Kenjinx/UI/Helpers/NotificationHelper.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/NotificationHelper.cs rename to src/Kenjinx/UI/Helpers/NotificationHelper.cs diff --git a/src/Ryujinx/UI/Helpers/OffscreenTextBox.cs b/src/Kenjinx/UI/Helpers/OffscreenTextBox.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/OffscreenTextBox.cs rename to src/Kenjinx/UI/Helpers/OffscreenTextBox.cs diff --git a/src/Ryujinx/UI/Helpers/TimeZoneConverter.cs b/src/Kenjinx/UI/Helpers/TimeZoneConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/TimeZoneConverter.cs rename to src/Kenjinx/UI/Helpers/TimeZoneConverter.cs diff --git a/src/Ryujinx/UI/Helpers/TitleUpdateLabelConverter.cs b/src/Kenjinx/UI/Helpers/TitleUpdateLabelConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/TitleUpdateLabelConverter.cs rename to src/Kenjinx/UI/Helpers/TitleUpdateLabelConverter.cs diff --git a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs b/src/Kenjinx/UI/Helpers/UserErrorDialog.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/UserErrorDialog.cs rename to src/Kenjinx/UI/Helpers/UserErrorDialog.cs diff --git a/src/Ryujinx/UI/Helpers/UserResult.cs b/src/Kenjinx/UI/Helpers/UserResult.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/UserResult.cs rename to src/Kenjinx/UI/Helpers/UserResult.cs diff --git a/src/Ryujinx/UI/Helpers/Win32NativeInterop.cs b/src/Kenjinx/UI/Helpers/Win32NativeInterop.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/Win32NativeInterop.cs rename to src/Kenjinx/UI/Helpers/Win32NativeInterop.cs diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs b/src/Kenjinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs rename to src/Kenjinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs b/src/Kenjinx/UI/Helpers/XCITrimmerFileStatusConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs rename to src/Kenjinx/UI/Helpers/XCITrimmerFileStatusConverter.cs diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs b/src/Kenjinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs rename to src/Kenjinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerOperationOutcomeHelper.cs b/src/Kenjinx/UI/Helpers/XCITrimmerOperationOutcomeHelper.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/XCITrimmerOperationOutcomeHelper.cs rename to src/Kenjinx/UI/Helpers/XCITrimmerOperationOutcomeHelper.cs diff --git a/src/Ryujinx/UI/Models/CheatNode.cs b/src/Kenjinx/UI/Models/CheatNode.cs similarity index 100% rename from src/Ryujinx/UI/Models/CheatNode.cs rename to src/Kenjinx/UI/Models/CheatNode.cs diff --git a/src/Ryujinx/UI/Models/ControllerModel.cs b/src/Kenjinx/UI/Models/ControllerModel.cs similarity index 100% rename from src/Ryujinx/UI/Models/ControllerModel.cs rename to src/Kenjinx/UI/Models/ControllerModel.cs diff --git a/src/Ryujinx/UI/Models/DeviceType.cs b/src/Kenjinx/UI/Models/DeviceType.cs similarity index 100% rename from src/Ryujinx/UI/Models/DeviceType.cs rename to src/Kenjinx/UI/Models/DeviceType.cs diff --git a/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs b/src/Kenjinx/UI/Models/Generic/LastPlayedSortComparer.cs similarity index 100% rename from src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs rename to src/Kenjinx/UI/Models/Generic/LastPlayedSortComparer.cs diff --git a/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs b/src/Kenjinx/UI/Models/Generic/TimePlayedSortComparer.cs similarity index 100% rename from src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs rename to src/Kenjinx/UI/Models/Generic/TimePlayedSortComparer.cs diff --git a/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs b/src/Kenjinx/UI/Models/Input/GamepadInputConfig.cs similarity index 100% rename from src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs rename to src/Kenjinx/UI/Models/Input/GamepadInputConfig.cs diff --git a/src/Ryujinx/UI/Models/Input/HotkeyConfig.cs b/src/Kenjinx/UI/Models/Input/HotkeyConfig.cs similarity index 100% rename from src/Ryujinx/UI/Models/Input/HotkeyConfig.cs rename to src/Kenjinx/UI/Models/Input/HotkeyConfig.cs diff --git a/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs b/src/Kenjinx/UI/Models/Input/KeyboardInputConfig.cs similarity index 100% rename from src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs rename to src/Kenjinx/UI/Models/Input/KeyboardInputConfig.cs diff --git a/src/Ryujinx/UI/Models/Input/StickVisualizer.cs b/src/Kenjinx/UI/Models/Input/StickVisualizer.cs similarity index 100% rename from src/Ryujinx/UI/Models/Input/StickVisualizer.cs rename to src/Kenjinx/UI/Models/Input/StickVisualizer.cs diff --git a/src/Ryujinx/UI/Models/ModModel.cs b/src/Kenjinx/UI/Models/ModModel.cs similarity index 100% rename from src/Ryujinx/UI/Models/ModModel.cs rename to src/Kenjinx/UI/Models/ModModel.cs diff --git a/src/Ryujinx/UI/Models/PlayerModel.cs b/src/Kenjinx/UI/Models/PlayerModel.cs similarity index 100% rename from src/Ryujinx/UI/Models/PlayerModel.cs rename to src/Kenjinx/UI/Models/PlayerModel.cs diff --git a/src/Ryujinx/UI/Models/ProfileImageModel.cs b/src/Kenjinx/UI/Models/ProfileImageModel.cs similarity index 100% rename from src/Ryujinx/UI/Models/ProfileImageModel.cs rename to src/Kenjinx/UI/Models/ProfileImageModel.cs diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Kenjinx/UI/Models/SaveModel.cs similarity index 100% rename from src/Ryujinx/UI/Models/SaveModel.cs rename to src/Kenjinx/UI/Models/SaveModel.cs diff --git a/src/Ryujinx/UI/Models/StatusInitEventArgs.cs b/src/Kenjinx/UI/Models/StatusInitEventArgs.cs similarity index 100% rename from src/Ryujinx/UI/Models/StatusInitEventArgs.cs rename to src/Kenjinx/UI/Models/StatusInitEventArgs.cs diff --git a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs b/src/Kenjinx/UI/Models/StatusUpdatedEventArgs.cs similarity index 100% rename from src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs rename to src/Kenjinx/UI/Models/StatusUpdatedEventArgs.cs diff --git a/src/Ryujinx/UI/Models/TempProfile.cs b/src/Kenjinx/UI/Models/TempProfile.cs similarity index 100% rename from src/Ryujinx/UI/Models/TempProfile.cs rename to src/Kenjinx/UI/Models/TempProfile.cs diff --git a/src/Ryujinx/UI/Models/TimeZone.cs b/src/Kenjinx/UI/Models/TimeZone.cs similarity index 100% rename from src/Ryujinx/UI/Models/TimeZone.cs rename to src/Kenjinx/UI/Models/TimeZone.cs diff --git a/src/Ryujinx/UI/Models/UserProfile.cs b/src/Kenjinx/UI/Models/UserProfile.cs similarity index 100% rename from src/Ryujinx/UI/Models/UserProfile.cs rename to src/Kenjinx/UI/Models/UserProfile.cs diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Kenjinx/UI/Renderer/EmbeddedWindow.cs similarity index 100% rename from src/Ryujinx/UI/Renderer/EmbeddedWindow.cs rename to src/Kenjinx/UI/Renderer/EmbeddedWindow.cs diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs b/src/Kenjinx/UI/Renderer/EmbeddedWindowOpenGL.cs similarity index 100% rename from src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs rename to src/Kenjinx/UI/Renderer/EmbeddedWindowOpenGL.cs diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowVulkan.cs b/src/Kenjinx/UI/Renderer/EmbeddedWindowVulkan.cs similarity index 100% rename from src/Ryujinx/UI/Renderer/EmbeddedWindowVulkan.cs rename to src/Kenjinx/UI/Renderer/EmbeddedWindowVulkan.cs diff --git a/src/Ryujinx/UI/Renderer/OpenTKBindingsContext.cs b/src/Kenjinx/UI/Renderer/OpenTKBindingsContext.cs similarity index 100% rename from src/Ryujinx/UI/Renderer/OpenTKBindingsContext.cs rename to src/Kenjinx/UI/Renderer/OpenTKBindingsContext.cs diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml b/src/Kenjinx/UI/Renderer/RendererHost.axaml similarity index 100% rename from src/Ryujinx/UI/Renderer/RendererHost.axaml rename to src/Kenjinx/UI/Renderer/RendererHost.axaml diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Kenjinx/UI/Renderer/RendererHost.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Renderer/RendererHost.axaml.cs rename to src/Kenjinx/UI/Renderer/RendererHost.axaml.cs diff --git a/src/Ryujinx/UI/Renderer/SPBOpenGLContext.cs b/src/Kenjinx/UI/Renderer/SPBOpenGLContext.cs similarity index 100% rename from src/Ryujinx/UI/Renderer/SPBOpenGLContext.cs rename to src/Kenjinx/UI/Renderer/SPBOpenGLContext.cs diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Kenjinx/UI/ViewModels/AboutWindowViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs rename to src/Kenjinx/UI/ViewModels/AboutWindowViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Kenjinx/UI/ViewModels/AmiiboWindowViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs rename to src/Kenjinx/UI/ViewModels/AmiiboWindowViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs b/src/Kenjinx/UI/ViewModels/AppListFavoriteComparable.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs rename to src/Kenjinx/UI/ViewModels/AppListFavoriteComparable.cs diff --git a/src/Ryujinx/UI/ViewModels/BaseModel.cs b/src/Kenjinx/UI/ViewModels/BaseModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/BaseModel.cs rename to src/Kenjinx/UI/ViewModels/BaseModel.cs diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Kenjinx/UI/ViewModels/DownloadableContentManagerViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs rename to src/Kenjinx/UI/ViewModels/DownloadableContentManagerViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs b/src/Kenjinx/UI/ViewModels/Input/ControllerInputViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs rename to src/Kenjinx/UI/ViewModels/Input/ControllerInputViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Kenjinx/UI/ViewModels/Input/InputViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs rename to src/Kenjinx/UI/ViewModels/Input/InputViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs b/src/Kenjinx/UI/ViewModels/Input/KeyboardInputViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs rename to src/Kenjinx/UI/ViewModels/Input/KeyboardInputViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs b/src/Kenjinx/UI/ViewModels/Input/MotionInputViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs rename to src/Kenjinx/UI/ViewModels/Input/MotionInputViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs b/src/Kenjinx/UI/ViewModels/Input/RumbleInputViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs rename to src/Kenjinx/UI/ViewModels/Input/RumbleInputViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Kenjinx/UI/ViewModels/MainWindowViewModel.cs similarity index 96% rename from src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs rename to src/Kenjinx/UI/ViewModels/MainWindowViewModel.cs index 1427ebb28..c51d43f12 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Kenjinx/UI/ViewModels/MainWindowViewModel.cs @@ -125,6 +125,9 @@ namespace Ryujinx.Ava.UI.ViewModels private ApplicationContextMenu _listAppContextMenu; private ApplicationContextMenu _gridAppContextMenu; + private readonly object _refreshLock = new object(); + private readonly object _applicationsLock = new object(); + public ApplicationData ListSelectedApplication { get => _listSelectedApplication; @@ -1216,12 +1219,71 @@ namespace Ryujinx.Ava.UI.ViewModels private void RefreshGrid() { - Applications.ToObservableChangeSet() - .Filter(Filter) - .Sort(GetComparer()) - .Bind(out _appsObservableList).AsObservableList(); + lock (_refreshLock) + { + try + { + // Creazione di una copia completa di Applications + List appsCopy; + lock (_applicationsLock) + { + appsCopy = new List(Applications); + } - OnPropertyChanged(nameof(AppsObservableList)); + // Filtraggio e ordinamento in una lista temporanea + var tempApplications = new List(); + foreach (var app in appsCopy) + { + if (Filter(app)) + { + tempApplications.Add(app); + } + } + + // Ordinamento alfabetico + tempApplications.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.OrdinalIgnoreCase)); + + // Creazione delle directory di salvataggio + foreach (var application in tempApplications) + { + try + { + ApplicationHelper.CreateSaveDir(application.Id, application.ControlHolder); + } + catch (Exception ex) + { + // Log dell'errore se necessario + Logger.Error?.Print(LogClass.Application, $"Failed to create save directory for {application.Name}: {ex.Message}"); + } + } + + // Ricreazione dell'observable collection in modo thread-safe + Dispatcher.UIThread.InvokeAsync(() => + { + try + { + lock (_applicationsLock) + { + // Ricrea la collezione osservabile in modo più sicuro + var source = Applications.ToObservableChangeSet(); + var filtered = source.Filter(Filter); + var sorted = filtered.Sort(GetComparer()); + sorted.Bind(out _appsObservableList).Subscribe(); + + OnPropertyChanged(nameof(AppsObservableList)); + } + } + catch (Exception ex) + { + Logger.Error?.Print(LogClass.Application, $"Failed to refresh application list: {ex.Message}"); + } + }); + } + catch (Exception ex) + { + Logger.Error?.Print(LogClass.Application, $"Exception in RefreshGrid: {ex}"); + } + } } private bool Filter(object arg) @@ -1321,6 +1383,7 @@ namespace Ryujinx.Ava.UI.ViewModels finally { RefreshFirmwareStatus(); + RefreshView(); } }) { @@ -1424,6 +1487,7 @@ namespace Ryujinx.Ava.UI.ViewModels finally { VirtualFileSystem.ReloadKeySet(); + RefreshView(); } }) { @@ -2129,7 +2193,7 @@ namespace Ryujinx.Ava.UI.ViewModels Dispatcher.UIThread.InvokeAsync(() => { - Title = $"Ryujinx {Program.Version}"; + Title = $"Kenji-NX {Program.Version}"; }); } diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Kenjinx/UI/ViewModels/ModManagerViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs rename to src/Kenjinx/UI/ViewModels/ModManagerViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Kenjinx/UI/ViewModels/SettingsViewModel.cs similarity index 99% rename from src/Ryujinx/UI/ViewModels/SettingsViewModel.cs rename to src/Kenjinx/UI/ViewModels/SettingsViewModel.cs index cd18471c5..2b6e0072f 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Kenjinx/UI/ViewModels/SettingsViewModel.cs @@ -369,7 +369,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - [GeneratedRegex("Ryujinx-[0-9a-f]{8}")] + [GeneratedRegex("Kenji-NX-[0-9a-f]{8}")] private static partial Regex LdnPassphraseRegex(); public bool IsInvalidLdnPassphraseVisible { get; set; } diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Kenjinx/UI/ViewModels/TitleUpdateViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs rename to src/Kenjinx/UI/ViewModels/TitleUpdateViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs b/src/Kenjinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs rename to src/Kenjinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs b/src/Kenjinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs rename to src/Kenjinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs b/src/Kenjinx/UI/ViewModels/UserProfileViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs rename to src/Kenjinx/UI/ViewModels/UserProfileViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs b/src/Kenjinx/UI/ViewModels/UserSaveManagerViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs rename to src/Kenjinx/UI/ViewModels/UserSaveManagerViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Kenjinx/UI/ViewModels/XCITrimmerViewModel.cs similarity index 100% rename from src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs rename to src/Kenjinx/UI/ViewModels/XCITrimmerViewModel.cs diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml b/src/Kenjinx/UI/Views/Input/ControllerInputView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Input/ControllerInputView.axaml rename to src/Kenjinx/UI/Views/Input/ControllerInputView.axaml diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Kenjinx/UI/Views/Input/ControllerInputView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs rename to src/Kenjinx/UI/Views/Input/ControllerInputView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Input/InputView.axaml b/src/Kenjinx/UI/Views/Input/InputView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Input/InputView.axaml rename to src/Kenjinx/UI/Views/Input/InputView.axaml diff --git a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs b/src/Kenjinx/UI/Views/Input/InputView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Input/InputView.axaml.cs rename to src/Kenjinx/UI/Views/Input/InputView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml b/src/Kenjinx/UI/Views/Input/KeyboardInputView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml rename to src/Kenjinx/UI/Views/Input/KeyboardInputView.axaml diff --git a/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs b/src/Kenjinx/UI/Views/Input/KeyboardInputView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs rename to src/Kenjinx/UI/Views/Input/KeyboardInputView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Input/MotionInputView.axaml b/src/Kenjinx/UI/Views/Input/MotionInputView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Input/MotionInputView.axaml rename to src/Kenjinx/UI/Views/Input/MotionInputView.axaml diff --git a/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs b/src/Kenjinx/UI/Views/Input/MotionInputView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs rename to src/Kenjinx/UI/Views/Input/MotionInputView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml b/src/Kenjinx/UI/Views/Input/RumbleInputView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Input/RumbleInputView.axaml rename to src/Kenjinx/UI/Views/Input/RumbleInputView.axaml diff --git a/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs b/src/Kenjinx/UI/Views/Input/RumbleInputView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs rename to src/Kenjinx/UI/Views/Input/RumbleInputView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Kenjinx/UI/Views/Main/MainMenuBarView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml rename to src/Kenjinx/UI/Views/Main/MainMenuBarView.axaml diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Kenjinx/UI/Views/Main/MainMenuBarView.axaml.cs similarity index 99% rename from src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs rename to src/Kenjinx/UI/Views/Main/MainMenuBarView.axaml.cs index 71b20db40..28eb5ca85 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Kenjinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -58,7 +58,7 @@ namespace Ryujinx.Ava.UI.Views.Main { List menuItems = []; - string localePath = "Ryujinx/Assets/Locales"; + string localePath = "Kenjinx/Assets/Locales"; string localeExt = ".json"; string[] localesPath = EmbeddedResources.GetAllAvailableResources(localePath, localeExt); @@ -211,7 +211,7 @@ namespace Ryujinx.Ava.UI.Views.Main ViewModel.AreMimeTypesRegistered = FileAssociationHelper.Install(); if (ViewModel.AreMimeTypesRegistered) await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty); - else + else { await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesErrorMessage]); } diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml b/src/Kenjinx/UI/Views/Main/MainStatusBarView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml rename to src/Kenjinx/UI/Views/Main/MainStatusBarView.axaml diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Kenjinx/UI/Views/Main/MainStatusBarView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs rename to src/Kenjinx/UI/Views/Main/MainStatusBarView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Main/MainViewControls.axaml b/src/Kenjinx/UI/Views/Main/MainViewControls.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Main/MainViewControls.axaml rename to src/Kenjinx/UI/Views/Main/MainViewControls.axaml diff --git a/src/Ryujinx/UI/Views/Main/MainViewControls.axaml.cs b/src/Kenjinx/UI/Views/Main/MainViewControls.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Main/MainViewControls.axaml.cs rename to src/Kenjinx/UI/Views/Main/MainViewControls.axaml.cs diff --git a/src/Ryujinx/UI/Views/Settings/SettingsAudioView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsAudioView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsAudioView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsAudioView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsAudioView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsAudioView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsAudioView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsAudioView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Settings/SettingsCPUView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsCPUView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsCPUView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsCPUView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsCPUView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsCPUView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsCPUView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsCPUView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsGraphicsView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsGraphicsView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsGraphicsView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsGraphicsView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsHotkeysView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsHotkeysView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Settings/SettingsInputView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsInputView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsInputView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsInputView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsInputView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsInputView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsInputView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsInputView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Settings/SettingsLoggingView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsLoggingView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsLoggingView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsLoggingView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsLoggingView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsLoggingView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsLoggingView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsLoggingView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsNetworkView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsNetworkView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsNetworkView.axaml.cs similarity index 89% rename from src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsNetworkView.axaml.cs index c69307522..03aa8128b 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs +++ b/src/Kenjinx/UI/Views/Settings/SettingsNetworkView.axaml.cs @@ -18,7 +18,7 @@ namespace Ryujinx.Ava.UI.Views.Settings { byte[] code = new byte[4]; new Random().NextBytes(code); - ViewModel.LdnPassphrase = $"Ryujinx-{BitConverter.ToUInt32(code):x8}"; + ViewModel.LdnPassphrase = $"Kenji-NX-{BitConverter.ToUInt32(code):x8}"; } private void ClearLdnPassButton_OnClick(object sender, RoutedEventArgs e) diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsSystemView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsSystemView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsSystemView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsSystemView.axaml.cs diff --git a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml b/src/Kenjinx/UI/Views/Settings/SettingsUIView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml rename to src/Kenjinx/UI/Views/Settings/SettingsUIView.axaml diff --git a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs b/src/Kenjinx/UI/Views/Settings/SettingsUIView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs rename to src/Kenjinx/UI/Views/Settings/SettingsUIView.axaml.cs diff --git a/src/Ryujinx/UI/Views/User/UserEditorView.axaml b/src/Kenjinx/UI/Views/User/UserEditorView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/User/UserEditorView.axaml rename to src/Kenjinx/UI/Views/User/UserEditorView.axaml diff --git a/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs b/src/Kenjinx/UI/Views/User/UserEditorView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs rename to src/Kenjinx/UI/Views/User/UserEditorView.axaml.cs diff --git a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml b/src/Kenjinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml rename to src/Kenjinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml diff --git a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs b/src/Kenjinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs rename to src/Kenjinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs diff --git a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml b/src/Kenjinx/UI/Views/User/UserProfileImageSelectorView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml rename to src/Kenjinx/UI/Views/User/UserProfileImageSelectorView.axaml diff --git a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs b/src/Kenjinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs rename to src/Kenjinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs diff --git a/src/Ryujinx/UI/Views/User/UserRecovererView.axaml b/src/Kenjinx/UI/Views/User/UserRecovererView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/User/UserRecovererView.axaml rename to src/Kenjinx/UI/Views/User/UserRecovererView.axaml diff --git a/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs b/src/Kenjinx/UI/Views/User/UserRecovererView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs rename to src/Kenjinx/UI/Views/User/UserRecovererView.axaml.cs diff --git a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml b/src/Kenjinx/UI/Views/User/UserSaveManagerView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml rename to src/Kenjinx/UI/Views/User/UserSaveManagerView.axaml diff --git a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs b/src/Kenjinx/UI/Views/User/UserSaveManagerView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs rename to src/Kenjinx/UI/Views/User/UserSaveManagerView.axaml.cs diff --git a/src/Ryujinx/UI/Views/User/UserSelectorView.axaml b/src/Kenjinx/UI/Views/User/UserSelectorView.axaml similarity index 100% rename from src/Ryujinx/UI/Views/User/UserSelectorView.axaml rename to src/Kenjinx/UI/Views/User/UserSelectorView.axaml diff --git a/src/Ryujinx/UI/Views/User/UserSelectorView.axaml.cs b/src/Kenjinx/UI/Views/User/UserSelectorView.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Views/User/UserSelectorView.axaml.cs rename to src/Kenjinx/UI/Views/User/UserSelectorView.axaml.cs diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml b/src/Kenjinx/UI/Windows/AboutWindow.axaml similarity index 98% rename from src/Ryujinx/UI/Windows/AboutWindow.axaml rename to src/Kenjinx/UI/Windows/AboutWindow.axaml index 069ed9105..2b24dc910 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml +++ b/src/Kenjinx/UI/Windows/AboutWindow.axaml @@ -50,14 +50,14 @@ { ApplicationLibrary.DesiredLanguage = ConfigurationState.Instance.System.Language; + + ApplicationLibrary.ApplicationCountUpdated += (sender, args) => { + if (args.NumAppsFound == args.NumAppsLoaded && args.NumAppsFound > 0) + { + ViewModel.RefreshView(); + } + }; ApplicationLibrary.LoadApplications(ConfigurationState.Instance.UI.GameDirs); diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml b/src/Kenjinx/UI/Windows/ModManagerWindow.axaml similarity index 100% rename from src/Ryujinx/UI/Windows/ModManagerWindow.axaml rename to src/Kenjinx/UI/Windows/ModManagerWindow.axaml diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs b/src/Kenjinx/UI/Windows/ModManagerWindow.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs rename to src/Kenjinx/UI/Windows/ModManagerWindow.axaml.cs diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml b/src/Kenjinx/UI/Windows/SettingsWindow.axaml similarity index 98% rename from src/Ryujinx/UI/Windows/SettingsWindow.axaml rename to src/Kenjinx/UI/Windows/SettingsWindow.axaml index 86ac29289..b8fe47e4a 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml +++ b/src/Kenjinx/UI/Windows/SettingsWindow.axaml @@ -72,7 +72,7 @@ Tag="CpuPage"> diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs b/src/Kenjinx/UI/Windows/SettingsWindow.axaml.cs similarity index 97% rename from src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs rename to src/Kenjinx/UI/Windows/SettingsWindow.axaml.cs index 118d6bde9..1cbf1debb 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs +++ b/src/Kenjinx/UI/Windows/SettingsWindow.axaml.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Ava.UI.Windows public SettingsWindow(VirtualFileSystem virtualFileSystem, ContentManager contentManager) { - Title = $"Ryujinx {Program.Version} - {LocaleManager.Instance[LocaleKeys.Settings]}"; + Title = $"Kenji-NX {Program.Version} - {LocaleManager.Instance[LocaleKeys.Settings]}"; DataContext = ViewModel = new SettingsViewModel(virtualFileSystem, contentManager); diff --git a/src/Ryujinx/UI/Windows/StyleableWindow.cs b/src/Kenjinx/UI/Windows/StyleableWindow.cs similarity index 100% rename from src/Ryujinx/UI/Windows/StyleableWindow.cs rename to src/Kenjinx/UI/Windows/StyleableWindow.cs diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml b/src/Kenjinx/UI/Windows/TitleUpdateWindow.axaml similarity index 100% rename from src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml rename to src/Kenjinx/UI/Windows/TitleUpdateWindow.axaml diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs b/src/Kenjinx/UI/Windows/TitleUpdateWindow.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs rename to src/Kenjinx/UI/Windows/TitleUpdateWindow.axaml.cs diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml b/src/Kenjinx/UI/Windows/XCITrimmerWindow.axaml similarity index 100% rename from src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml rename to src/Kenjinx/UI/Windows/XCITrimmerWindow.axaml diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs b/src/Kenjinx/UI/Windows/XCITrimmerWindow.axaml.cs similarity index 100% rename from src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs rename to src/Kenjinx/UI/Windows/XCITrimmerWindow.axaml.cs diff --git a/src/Ryujinx/app.manifest b/src/Kenjinx/app.manifest similarity index 100% rename from src/Ryujinx/app.manifest rename to src/Kenjinx/app.manifest diff --git a/src/KenjinxAndroid/.gitignore b/src/KenjinxAndroid/.gitignore new file mode 100644 index 000000000..314e02c26 --- /dev/null +++ b/src/KenjinxAndroid/.gitignore @@ -0,0 +1,12 @@ +.idea/ +*.iml +.gradle +local.properties +.DS_Store +build/ +captures +.externalNativeBuild +.cxx/ + +app/src/main/jniLibs/arm64-v8a/** +!app/src/main/jniLibs/arm64-v8a/.gitkeep diff --git a/src/KenjinxAndroid/app/build.gradle b/src/KenjinxAndroid/app/build.gradle new file mode 100644 index 000000000..d4fdbee17 --- /dev/null +++ b/src/KenjinxAndroid/app/build.gradle @@ -0,0 +1,129 @@ +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' +} + +android { + namespace 'org.kenjinx.android' + compileSdk 34 + + defaultConfig { + applicationId "org.kenjinx.android" + minSdk 30 + targetSdk 34 + versionCode 10044 + versionName '2.0.3' + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary true + } + + ndk { + //noinspection ChromeOsAbiSupport + abiFilters 'arm64-v8a' + } + + externalNativeBuild { + cmake { + cppFlags "-std=c++17 -O3 -ffast-math -march=armv8-a -funroll-loops" + arguments "-DANDROID_STL=c++_shared", + "-DCMAKE_BUILD_TYPE=Release", + "-DANDROID_ARM_NEON=TRUE" + } + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.debug + debuggable false + jniDebuggable false + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 + } + kotlinOptions { + jvmTarget = '21' + freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn", "-Xallow-jvm-ir-dependencies"] + } + buildFeatures { + compose true + prefab true + buildConfig true + } + composeOptions { + kotlinCompilerExtensionVersion '1.5.13' + } + packagingOptions { + jniLibs { + keepDebugSymbols += '**/libkenjinx.so' + useLegacyPackaging true + } + resources { + excludes += '/META-INF/{AL2.0,LGPL2.1}' + } + } + externalNativeBuild { + cmake { + path file('src/main/cpp/CMakeLists.txt') + version '3.22.1' + } + } + + sourceSets { + main { + jniLibs.srcDirs = ['src/main/extLibs', 'src/main/jniLibs'] + } + } +} + +tasks.named("preBuild") { + dependsOn ':libkenjinx:assemble' +} + +dependencies { + implementation "androidx.compose.material:material-icons-extended:1.6.5" + implementation 'net.java.dev.jna:jna:5.14.0@aar' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.12.0' + implementation platform('androidx.compose:compose-bom:2024.05.00') + implementation platform('androidx.compose:compose-bom:2024.05.00') + androidTestImplementation platform('androidx.compose:compose-bom:2024.05.00') + androidTestImplementation platform('androidx.compose:compose-bom:2024.05.00') + runtimeOnly project(":libkenjinx") + implementation 'androidx.core:core-ktx:1.13.1' + implementation platform('org.jetbrains.kotlin:kotlin-bom:1.9.24') + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.7.0' + implementation "androidx.navigation:navigation-compose:2.7.7" + implementation 'androidx.activity:activity-compose:1.9.0' + implementation platform('androidx.compose:compose-bom:2024.05.00') + implementation 'androidx.compose.ui:ui' + implementation 'androidx.compose.ui:ui-graphics' + implementation 'androidx.compose.ui:ui-tooling-preview' + implementation 'androidx.compose.material3:material3' + implementation 'com.github.swordfish90:radialgamepad:2.0.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation "com.anggrayudi:storage:1.5.5" + implementation "androidx.preference:preference-ktx:1.2.1" + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0' + implementation 'com.google.code.gson:gson:2.10.1' + implementation 'net.lingala.zip4j:zip4j:2.11.5' + implementation("br.com.devsrsouza.compose.icons:css-gg:1.1.0") + implementation 'io.coil-kt:coil-compose:2.6.0' + implementation("com.halilibo.compose-richtext:richtext-ui:0.20.0") + implementation("com.halilibo.compose-richtext:richtext-commonmark:0.20.0") + implementation("com.halilibo.compose-richtext:richtext-ui-material3:0.20.0") + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + androidTestImplementation platform('androidx.compose:compose-bom:2024.05.00') + androidTestImplementation 'androidx.compose.ui:ui-test-junit4' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0' + debugImplementation 'androidx.compose.ui:ui-tooling' + debugImplementation 'androidx.compose.ui:ui-test-manifest' +} diff --git a/src/KenjinxAndroid/app/proguard-rules.pro b/src/KenjinxAndroid/app/proguard-rules.pro new file mode 100644 index 000000000..5266a349a --- /dev/null +++ b/src/KenjinxAndroid/app/proguard-rules.pro @@ -0,0 +1,33 @@ +-optimizationpasses 5 +-optimizations !code/simplification/arithmetic +-optimizations !code/simplification/cast +-optimizations !field/* +-optimizations !class/merging/* +-optimizations !method/inlining/short +-optimizations !method/inlining/unique +-optimizations method/inlining/tailrecursion +-optimizations method/removal/parameter +-optimizations code/merging +-optimizations code/simplification/variable +-allowaccessmodification +-repackageclasses '' +-keepattributes Exceptions,InnerClasses,Signature,*Annotation* +-dontpreverify +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends androidx.fragment.app.Fragment +-assumenosideeffects class java.lang.Math { + public static double random(); + public static double sin(...); + public static double cos(...); + public static double sqrt(...); +} +-assumenosideeffects public class ** { + public boolean is*(); + public boolean get*(); + public boolean has*(); + public void set*(***); +} \ No newline at end of file diff --git a/src/KenjinxAndroid/app/src/main/AndroidManifest.xml b/src/KenjinxAndroid/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..531936010 --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/AndroidManifest.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/KenjinxAndroid/app/src/main/cpp/CMakeLists.txt b/src/KenjinxAndroid/app/src/main/cpp/CMakeLists.txt new file mode 100644 index 000000000..de3ed1543 --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/cpp/CMakeLists.txt @@ -0,0 +1,81 @@ +include(FetchContent) + +# For more information about using CMake with Android Studio, read the +# documentation: https://d.android.com/studio/projects/add-native-code.html + +# Sets the minimum version of CMake required to build the native library. + +cmake_minimum_required(VERSION 3.22.1) + +# Declares and names the project. + +project("kenjinxjni") + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED TRUE) + +FetchContent_Declare( + adrenotools + GIT_REPOSITORY https://github.com/bylaws/libadrenotools.git + GIT_TAG deec5f75ee1a8ccbe32c8780b1d17284fc87b0f1 # v1.0-14-gdeec5f7 +) + +FetchContent_MakeAvailable(adrenotools) + +# Creates and names a library, sets it as either STATIC +# or SHARED, and provides the relative paths to its source code. +# You can define multiple libraries, and CMake builds them for you. +# Gradle automatically packages shared libraries with your APK. + +add_library( # Sets the name of the library. + kenjinxjni + + # Sets the library as a shared library. + SHARED + + # Provides a relative path to your source file(s). + vulkan_wrapper.cpp + kenjinx.cpp) + +# Searches for a specified prebuilt library and stores the path as a +# variable. Because CMake includes system libraries in the search path by +# default, you only need to specify the name of the public NDK library +# you want to add. CMake verifies that the library exists before +# completing its build. + +find_library( # Sets the name of the path variable. + log-lib + + # Specifies the name of the NDK library that + # you want CMake to locate. + log ) + +# Specifies libraries CMake should link to your target library. You +# can link multiple libraries, such as libraries you define in this +# build script, prebuilt third-party libraries, or system libraries. + +target_link_libraries( # Specifies the target library. + kenjinxjni + # Links the target library to the log library + # included in the NDK. + ${log-lib} + -lvulkan + -landroid + adrenotools + ) + +# Build external libraries if prebuilt files don't exist +set(JNI_PATH ../jniLibs/${CMAKE_ANDROID_ARCH_ABI}) +cmake_path(ABSOLUTE_PATH JNI_PATH NORMALIZE) + +cmake_path(APPEND JNI_PATH libcrypto.so OUTPUT_VARIABLE LIBCRYPTO_JNI_PATH) +cmake_path(APPEND JNI_PATH libssl.so OUTPUT_VARIABLE LIBSSL_JNI_PATH) + + +# Add OpenAL +add_subdirectory(libraries/openal) +set_target_properties(OpenAL PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${JNI_PATH} + ARCHIVE_OUTPUT_DIRECTORY ${JNI_PATH} + RUNTIME_OUTPUT_DIRECTORY ${JNI_PATH} +) \ No newline at end of file diff --git a/src/KenjinxAndroid/app/src/main/cpp/kenjinx.cpp b/src/KenjinxAndroid/app/src/main/cpp/kenjinx.cpp new file mode 100644 index 000000000..7b0d2b607 --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/cpp/kenjinx.cpp @@ -0,0 +1,254 @@ +// Write C++ code here. +// +// Do not forget to dynamically load the C++ library into your application. +// +// For instance, +// +// In MainActivity.java: +// static { +// System.loadLibrary("kenjinxjni"); +// } +// +// Or, in MainActivity.kt: +// companion object { +// init { +// System.loadLibrary("kenjinxjni") +// } +// } + +#include "kenjinx.h" +#include "pthread.h" +#include +#include + + +std::chrono::time_point _currentTimePoint; + +extern "C" +{ +JNIEXPORT jlong JNICALL +Java_org_kenjinx_android_NativeHelpers_getNativeWindow( + JNIEnv *env, + jobject instance, + jobject surface) { + auto nativeWindow = ANativeWindow_fromSurface(env, surface); + return nativeWindow == NULL ? -1 : (jlong) nativeWindow; +} + +JNIEXPORT void JNICALL +Java_org_kenjinx_android_NativeHelpers_releaseNativeWindow( + JNIEnv *env, + jobject instance, + jlong window) { + auto nativeWindow = (ANativeWindow *) window; + + if (nativeWindow != NULL) + ANativeWindow_release(nativeWindow); +} + +long createSurface(long native_surface, long instance) { + auto nativeWindow = (ANativeWindow *) native_surface; + VkSurfaceKHR surface; + auto vkInstance = (VkInstance) instance; + auto fpCreateAndroidSurfaceKHR = + reinterpret_cast(vkGetInstanceProcAddr(vkInstance, + "vkCreateAndroidSurfaceKHR")); + if (fpCreateAndroidSurfaceKHR == nullptr) + LOGE("Could not get function pointer to CreateAndroidSurfaceKHR"); + + VkAndroidSurfaceCreateInfoKHR info; + info.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; + info.pNext = nullptr; + info.flags = 0; + info.window = nativeWindow; + VK_CHECK(fpCreateAndroidSurfaceKHR(vkInstance, &info, nullptr, &surface)); + return (long) surface; +} + +JNIEXPORT jlong JNICALL +Java_org_kenjinx_android_NativeHelpers_getCreateSurfacePtr( + JNIEnv *env, + jobject instance) { + return (jlong) createSurface; +} + +char *getStringPointer( + JNIEnv *env, + jstring jS) { + const char *cparam = env->GetStringUTFChars(jS, 0); + auto len = env->GetStringUTFLength(jS); + char *s = new char[len + 1]; //null terminator + strcpy(s, cparam); + env->ReleaseStringUTFChars(jS, cparam); + + return s; +} + +jstring createString( + JNIEnv *env, + char *ch) { + auto str = env->NewStringUTF(ch); + + return str; +} + +jstring createStringFromStdString( + JNIEnv *env, + std::string s) { + auto str = env->NewStringUTF(s.c_str()); + + return str; +} + + +} +extern "C" +void setRenderingThread() { + auto currentId = pthread_self(); + + _renderingThreadId = currentId; + + _currentTimePoint = std::chrono::high_resolution_clock::now(); +} +extern "C" +JNIEXPORT void JNICALL +Java_org_kenjinx_android_MainActivity_initVm(JNIEnv *env, jobject thiz) { + JavaVM *vm = nullptr; + env->GetJavaVM(&vm); + _vm = vm; + _mainActivity = thiz; + _mainActivityClass = env->GetObjectClass(thiz); +} + +bool isInitialOrientationFlipped = true; + +extern "C" +void setCurrentTransform(long native_window, int transform) { + if (native_window == 0 || native_window == -1) + return; + auto nativeWindow = (ANativeWindow *) native_window; + + auto nativeTransform = ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_IDENTITY; + + transform = transform >> 1; + + // transform is a valid VkSurfaceTransformFlagBitsKHR + switch (transform) { + case 0x1: + nativeTransform = ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_IDENTITY; + break; + case 0x2: + nativeTransform = ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_ROTATE_90; + break; + case 0x4: + nativeTransform = isInitialOrientationFlipped + ? ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_IDENTITY + : ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_ROTATE_180; + break; + case 0x8: + nativeTransform = ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_ROTATE_270; + break; + case 0x10: + nativeTransform = ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL; + break; + case 0x20: + nativeTransform = static_cast( + ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL | + ANATIVEWINDOW_TRANSFORM_ROTATE_90); + break; + case 0x40: + nativeTransform = ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL; + break; + case 0x80: + nativeTransform = static_cast( + ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL | + ANATIVEWINDOW_TRANSFORM_ROTATE_90); + break; + case 0x100: + nativeTransform = ANativeWindowTransform::ANATIVEWINDOW_TRANSFORM_IDENTITY; + break; + } + + nativeWindow->perform(nativeWindow, NATIVE_WINDOW_SET_BUFFERS_TRANSFORM, + static_cast(nativeTransform)); +} + +extern "C" +JNIEXPORT jlong JNICALL +Java_org_kenjinx_android_NativeHelpers_loadDriver(JNIEnv *env, jobject thiz, + jstring native_lib_path, + jstring private_apps_path, + jstring driver_name) { + auto libPath = getStringPointer(env, native_lib_path); + auto privateAppsPath = getStringPointer(env, private_apps_path); + auto driverName = getStringPointer(env, driver_name); + + auto handle = adrenotools_open_libvulkan( + RTLD_NOW, + ADRENOTOOLS_DRIVER_CUSTOM, + nullptr, + libPath, + privateAppsPath, + driverName, + nullptr, + nullptr + ); + + delete libPath; + delete privateAppsPath; + delete driverName; + + return (jlong) handle; +} + +extern "C" +void debug_break(int code) { + if (code >= 3) + int r = 0; +} + +extern "C" +JNIEXPORT void JNICALL +Java_org_kenjinx_android_NativeHelpers_setTurboMode(JNIEnv *env, jobject thiz, jboolean enable) { + adrenotools_set_turbo(enable); +} + +extern "C" +JNIEXPORT jint JNICALL +Java_org_kenjinx_android_NativeHelpers_getMaxSwapInterval(JNIEnv *env, jobject thiz, + jlong native_window) { + auto nativeWindow = (ANativeWindow *) native_window; + + return nativeWindow->maxSwapInterval; +} + +extern "C" +JNIEXPORT jint JNICALL +Java_org_kenjinx_android_NativeHelpers_getMinSwapInterval(JNIEnv *env, jobject thiz, + jlong native_window) { + auto nativeWindow = (ANativeWindow *) native_window; + + return nativeWindow->minSwapInterval; +} + +extern "C" +JNIEXPORT jint JNICALL +Java_org_kenjinx_android_NativeHelpers_setSwapInterval(JNIEnv *env, jobject thiz, + jlong native_window, jint swap_interval) { + auto nativeWindow = (ANativeWindow *) native_window; + + return nativeWindow->setSwapInterval(nativeWindow, swap_interval); +} + +extern "C" +JNIEXPORT jstring JNICALL +Java_org_kenjinx_android_NativeHelpers_getStringJava(JNIEnv *env, jobject thiz, jlong ptr) { + return createString(env, (char*)ptr); +} + +extern "C" +JNIEXPORT void JNICALL +Java_org_kenjinx_android_NativeHelpers_setIsInitialOrientationFlipped(JNIEnv *env, jobject thiz, + jboolean is_flipped) { + isInitialOrientationFlipped = is_flipped; +} diff --git a/src/KenjinxAndroid/app/src/main/cpp/kenjinx.h b/src/KenjinxAndroid/app/src/main/cpp/kenjinx.h new file mode 100644 index 000000000..c75a9f8a0 --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/cpp/kenjinx.h @@ -0,0 +1,60 @@ +// +// Created by Emmanuel Hansen on 6/19/2023. +// + +#ifndef KENJINXNATIVE_KENJINX_H +#define KENJINXNATIVE_KENJINX_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "vulkan_wrapper.h" +#include +#include "adrenotools/driver.h" +#include "native_window.h" + +// Android log function wrappers +static const char* TAG = "Kenjinx"; +#define LOGI(...) \ + ((void)__android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__)) +#define LOGW(...) \ + ((void)__android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__)) +#define LOGE(...) \ + ((void)__android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__)) + +// A macro to pass call to Vulkan and check for return value for success +#define CALL_VK(func) \ + if (VK_SUCCESS != (func)) { \ + __android_log_print(ANDROID_LOG_ERROR, "Tutorial ", \ + "Vulkan error. File[%s], line[%d]", __FILE__, \ + __LINE__); \ + assert(false); \ + } + +// A macro to check value is VK_SUCCESS +// Used also for non-vulkan functions but return VK_SUCCESS +#define VK_CHECK(x) CALL_VK(x) + +#define LoadLib(a) dlopen(a, RTLD_NOW) + +void *_kenjinxNative = nullptr; + +// Kenjinx imported functions +bool (*initialize)(char *) = nullptr; + +long _renderingThreadId = 0; +JavaVM *_vm = nullptr; +jobject _mainActivity = nullptr; +jclass _mainActivityClass = nullptr; + +#endif //KENJINXNATIVE_KENJINX_H diff --git a/src/KenjinxAndroid/app/src/main/cpp/libraries/adrenotools b/src/KenjinxAndroid/app/src/main/cpp/libraries/adrenotools new file mode 160000 index 000000000..8fae8ce25 --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/cpp/libraries/adrenotools @@ -0,0 +1 @@ +Subproject commit 8fae8ce254dfc1344527e05301e43f37dea2df80 diff --git a/src/KenjinxAndroid/app/src/main/cpp/libraries/openal b/src/KenjinxAndroid/app/src/main/cpp/libraries/openal new file mode 160000 index 000000000..8f2fe93fa --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/cpp/libraries/openal @@ -0,0 +1 @@ +Subproject commit 8f2fe93faf2752e99c49565b284437c527749f88 diff --git a/src/KenjinxAndroid/app/src/main/cpp/native_window.h b/src/KenjinxAndroid/app/src/main/cpp/native_window.h new file mode 100644 index 000000000..354cd6ccd --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/cpp/native_window.h @@ -0,0 +1,305 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2021 Skyline Team and Contributors (https://github.com/skyline-emu/) +// Copyright © 2021 The Android Open Source Project + +#pragma once + +/* A collection of various types from AOSP that allow us to access private APIs for Native Window which we utilize for emulating the guest SF more accurately */ + +/** + * @url https://cs.android.com/android/platform/superproject/+/android11-release:frameworks/native/libs/nativebase/include/nativebase/nativebase.h;l=29;drc=cb496acbe593326e8d5d563847067d02b2df40ec + */ +#define ANDROID_NATIVE_UNSIGNED_CAST(x) static_cast(x) + +/** + * @url https://cs.android.com/android/platform/superproject/+/android11-release:frameworks/native/libs/nativebase/include/nativebase/nativebase.h;l=34-38;drc=cb496acbe593326e8d5d563847067d02b2df40ec + */ +#define ANDROID_NATIVE_MAKE_CONSTANT(a, b, c, d) \ + ((ANDROID_NATIVE_UNSIGNED_CAST(a) << 24) | \ + (ANDROID_NATIVE_UNSIGNED_CAST(b) << 16) | \ + (ANDROID_NATIVE_UNSIGNED_CAST(c) << 8) | \ + (ANDROID_NATIVE_UNSIGNED_CAST(d))) + +/** + * @url https://cs.android.com/android/platform/superproject/+/android11-release:frameworks/native/libs/nativewindow/include/system/window.h;l=60;drc=401cda638e7d17f6697b5a65c9a5ad79d056202d + */ +#define ANDROID_NATIVE_WINDOW_MAGIC ANDROID_NATIVE_MAKE_CONSTANT('_','w','n','d') + +constexpr int AndroidNativeWindowMagic{ANDROID_NATIVE_WINDOW_MAGIC}; + +#undef ANDROID_NATIVE_WINDOW_MAGIC +#undef ANDROID_NATIVE_MAKE_CONSTANT +#undef ANDROID_NATIVE_UNSIGNED_CAST + +/** + * @url https://cs.android.com/android/platform/superproject/+/android11-release:frameworks/native/libs/nativewindow/include/system/window.h;l=325-331;drc=401cda638e7d17f6697b5a65c9a5ad79d056202d + */ +constexpr int64_t NativeWindowTimestampAuto{-9223372036854775807LL - 1}; + +/** + * @url https://cs.android.com/android/platform/superproject/+/android11-release:frameworks/native/libs/nativewindow/include/system/window.h;l=198-259;drc=401cda638e7d17f6697b5a65c9a5ad79d056202d + */ +enum { + NATIVE_WINDOW_CONNECT = 1, /* deprecated */ + NATIVE_WINDOW_DISCONNECT = 2, /* deprecated */ + NATIVE_WINDOW_SET_CROP = 3, /* private */ + NATIVE_WINDOW_SET_BUFFER_COUNT = 4, + NATIVE_WINDOW_SET_BUFFERS_TRANSFORM = 6, + NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP = 7, + NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS = 8, + NATIVE_WINDOW_SET_SCALING_MODE = 10, /* private */ + NATIVE_WINDOW_LOCK = 11, /* private */ + NATIVE_WINDOW_UNLOCK_AND_POST = 12, /* private */ + NATIVE_WINDOW_API_CONNECT = 13, /* private */ + NATIVE_WINDOW_API_DISCONNECT = 14, /* private */ + NATIVE_WINDOW_SET_BUFFERS_USER_DIMENSIONS = 15, /* private */ + NATIVE_WINDOW_SET_POST_TRANSFORM_CROP = 16, /* deprecated, unimplemented */ + NATIVE_WINDOW_SET_BUFFERS_STICKY_TRANSFORM = 17, /* private */ + NATIVE_WINDOW_SET_SIDEBAND_STREAM = 18, + NATIVE_WINDOW_SET_BUFFERS_DATASPACE = 19, + NATIVE_WINDOW_SET_SURFACE_DAMAGE = 20, /* private */ + NATIVE_WINDOW_SET_SHARED_BUFFER_MODE = 21, + NATIVE_WINDOW_SET_AUTO_REFRESH = 22, + NATIVE_WINDOW_GET_REFRESH_CYCLE_DURATION = 23, + NATIVE_WINDOW_GET_NEXT_FRAME_ID = 24, + NATIVE_WINDOW_ENABLE_FRAME_TIMESTAMPS = 25, + NATIVE_WINDOW_GET_COMPOSITOR_TIMING = 26, + NATIVE_WINDOW_GET_FRAME_TIMESTAMPS = 27, + NATIVE_WINDOW_GET_WIDE_COLOR_SUPPORT = 28, + NATIVE_WINDOW_GET_HDR_SUPPORT = 29, + NATIVE_WINDOW_GET_CONSUMER_USAGE64 = 31, + NATIVE_WINDOW_SET_BUFFERS_SMPTE2086_METADATA = 32, + NATIVE_WINDOW_SET_BUFFERS_CTA861_3_METADATA = 33, + NATIVE_WINDOW_SET_BUFFERS_HDR10_PLUS_METADATA = 34, + NATIVE_WINDOW_SET_AUTO_PREROTATION = 35, + NATIVE_WINDOW_GET_LAST_DEQUEUE_START = 36, /* private */ + NATIVE_WINDOW_SET_DEQUEUE_TIMEOUT = 37, /* private */ + NATIVE_WINDOW_GET_LAST_DEQUEUE_DURATION = 38, /* private */ + NATIVE_WINDOW_GET_LAST_QUEUE_DURATION = 39, /* private */ + NATIVE_WINDOW_SET_FRAME_RATE = 40, + NATIVE_WINDOW_SET_CANCEL_INTERCEPTOR = 41, /* private */ + NATIVE_WINDOW_SET_DEQUEUE_INTERCEPTOR = 42, /* private */ + NATIVE_WINDOW_SET_PERFORM_INTERCEPTOR = 43, /* private */ + NATIVE_WINDOW_SET_QUEUE_INTERCEPTOR = 44, /* private */ + NATIVE_WINDOW_ALLOCATE_BUFFERS = 45, /* private */ + NATIVE_WINDOW_GET_LAST_QUEUED_BUFFER = 46, /* private */ + NATIVE_WINDOW_SET_QUERY_INTERCEPTOR = 47, /* private */ + NATIVE_WINDOW_GET_LAST_QUEUED_BUFFER2 = 50, /* private */ +}; + +/** + * @url https://cs.android.com/android/platform/superproject/+/android11-release:frameworks/native/libs/nativebase/include/nativebase/nativebase.h;l=43-56;drc=cb496acbe593326e8d5d563847067d02b2df40ec + */ +struct android_native_base_t { + int magic; + int version; + void *reserved[4]; + + void (*incRef)(android_native_base_t *); + + void (*decRef)(android_native_base_t *); +}; + +/** + * @url https://cs.android.com/android/platform/superproject/+/android11-release:frameworks/native/libs/nativewindow/include/system/window.h;l=341-560;drc=401cda638e7d17f6697b5a65c9a5ad79d056202d + */ +struct ANativeWindow { + struct android_native_base_t common; + + /* flags describing some attributes of this surface or its updater */ + const uint32_t flags; + + /* min swap interval supported by this updated */ + const int minSwapInterval; + + /* max swap interval supported by this updated */ + const int maxSwapInterval; + + /* horizontal and vertical resolution in DPI */ + const float xdpi; + const float ydpi; + + /* Some storage reserved for the OEM's driver. */ + intptr_t oem[4]; + + /* + * Set the swap interval for this surface. + * + * Returns 0 on success or -errno on error. + */ + int (*setSwapInterval)(struct ANativeWindow *window, + int interval); + + /* + * Hook called by EGL to acquire a buffer. After this call, the buffer + * is not locked, so its content cannot be modified. This call may block if + * no buffers are available. + * + * The window holds a reference to the buffer between dequeueBuffer and + * either queueBuffer or cancelBuffer, so clients only need their own + * reference if they might use the buffer after queueing or canceling it. + * Holding a reference to a buffer after queueing or canceling it is only + * allowed if a specific buffer count has been set. + * + * Returns 0 on success or -errno on error. + * + * XXX: This function is deprecated. It will continue to work for some + * time for binary compatibility, but the new dequeueBuffer function that + * outputs a fence file descriptor should be used in its place. + */ + int (*dequeueBuffer_DEPRECATED)(struct ANativeWindow *window, + struct ANativeWindowBuffer **buffer); + + /* + * hook called by EGL to lock a buffer. This MUST be called before modifying + * the content of a buffer. The buffer must have been acquired with + * dequeueBuffer first. + * + * Returns 0 on success or -errno on error. + * + * XXX: This function is deprecated. It will continue to work for some + * time for binary compatibility, but it is essentially a no-op, and calls + * to it should be removed. + */ + int (*lockBuffer_DEPRECATED)(struct ANativeWindow *window, + struct ANativeWindowBuffer *buffer); + + /* + * Hook called by EGL when modifications to the render buffer are done. + * This unlocks and post the buffer. + * + * The window holds a reference to the buffer between dequeueBuffer and + * either queueBuffer or cancelBuffer, so clients only need their own + * reference if they might use the buffer after queueing or canceling it. + * Holding a reference to a buffer after queueing or canceling it is only + * allowed if a specific buffer count has been set. + * + * Buffers MUST be queued in the same order than they were dequeued. + * + * Returns 0 on success or -errno on error. + * + * XXX: This function is deprecated. It will continue to work for some + * time for binary compatibility, but the new queueBuffer function that + * takes a fence file descriptor should be used in its place (pass a value + * of -1 for the fence file descriptor if there is no valid one to pass). + */ + int (*queueBuffer_DEPRECATED)(struct ANativeWindow *window, + struct ANativeWindowBuffer *buffer); + + /* + * hook used to retrieve information about the native window. + * + * Returns 0 on success or -errno on error. + */ + int (*query)(const struct ANativeWindow *window, + int what, int *value); + + /* + * hook used to perform various operations on the surface. + * (*perform)() is a generic mechanism to add functionality to + * ANativeWindow while keeping backward binary compatibility. + * + * DO NOT CALL THIS HOOK DIRECTLY. Instead, use the helper functions + * defined below. + * + * (*perform)() returns -ENOENT if the 'what' parameter is not supported + * by the surface's implementation. + * + * See above for a list of valid operations, such as + * NATIVE_WINDOW_SET_USAGE or NATIVE_WINDOW_CONNECT + */ + int (*perform)(struct ANativeWindow *window, + int operation, ...); + + /* + * Hook used to cancel a buffer that has been dequeued. + * No synchronization is performed between dequeue() and cancel(), so + * either external synchronization is needed, or these functions must be + * called from the same thread. + * + * The window holds a reference to the buffer between dequeueBuffer and + * either queueBuffer or cancelBuffer, so clients only need their own + * reference if they might use the buffer after queueing or canceling it. + * Holding a reference to a buffer after queueing or canceling it is only + * allowed if a specific buffer count has been set. + * + * XXX: This function is deprecated. It will continue to work for some + * time for binary compatibility, but the new cancelBuffer function that + * takes a fence file descriptor should be used in its place (pass a value + * of -1 for the fence file descriptor if there is no valid one to pass). + */ + int (*cancelBuffer_DEPRECATED)(struct ANativeWindow *window, + struct ANativeWindowBuffer *buffer); + + /* + * Hook called by EGL to acquire a buffer. This call may block if no + * buffers are available. + * + * The window holds a reference to the buffer between dequeueBuffer and + * either queueBuffer or cancelBuffer, so clients only need their own + * reference if they might use the buffer after queueing or canceling it. + * Holding a reference to a buffer after queueing or canceling it is only + * allowed if a specific buffer count has been set. + * + * The libsync fence file descriptor returned in the int pointed to by the + * fenceFd argument will refer to the fence that must signal before the + * dequeued buffer may be written to. A value of -1 indicates that the + * caller may access the buffer immediately without waiting on a fence. If + * a valid file descriptor is returned (i.e. any value except -1) then the + * caller is responsible for closing the file descriptor. + * + * Returns 0 on success or -errno on error. + */ + int (*dequeueBuffer)(struct ANativeWindow *window, + struct ANativeWindowBuffer **buffer, int *fenceFd); + + /* + * Hook called by EGL when modifications to the render buffer are done. + * This unlocks and post the buffer. + * + * The window holds a reference to the buffer between dequeueBuffer and + * either queueBuffer or cancelBuffer, so clients only need their own + * reference if they might use the buffer after queueing or canceling it. + * Holding a reference to a buffer after queueing or canceling it is only + * allowed if a specific buffer count has been set. + * + * The fenceFd argument specifies a libsync fence file descriptor for a + * fence that must signal before the buffer can be accessed. If the buffer + * can be accessed immediately then a value of -1 should be used. The + * caller must not use the file descriptor after it is passed to + * queueBuffer, and the ANativeWindow implementation is responsible for + * closing it. + * + * Returns 0 on success or -errno on error. + */ + int (*queueBuffer)(struct ANativeWindow *window, + struct ANativeWindowBuffer *buffer, int fenceFd); + + /* + * Hook used to cancel a buffer that has been dequeued. + * No synchronization is performed between dequeue() and cancel(), so + * either external synchronization is needed, or these functions must be + * called from the same thread. + * + * The window holds a reference to the buffer between dequeueBuffer and + * either queueBuffer or cancelBuffer, so clients only need their own + * reference if they might use the buffer after queueing or canceling it. + * Holding a reference to a buffer after queueing or canceling it is only + * allowed if a specific buffer count has been set. + * + * The fenceFd argument specifies a libsync fence file decsriptor for a + * fence that must signal before the buffer can be accessed. If the buffer + * can be accessed immediately then a value of -1 should be used. + * + * Note that if the client has not waited on the fence that was returned + * from dequeueBuffer, that same fence should be passed to cancelBuffer to + * ensure that future uses of the buffer are preceded by a wait on that + * fence. The caller must not use the file descriptor after it is passed + * to cancelBuffer, and the ANativeWindow implementation is responsible for + * closing it. + * + * Returns 0 on success or -errno on error. + */ + int (*cancelBuffer)(struct ANativeWindow *window, + struct ANativeWindowBuffer *buffer, int fenceFd); +}; diff --git a/src/KenjinxAndroid/app/src/main/cpp/vulkan_wrapper.cpp b/src/KenjinxAndroid/app/src/main/cpp/vulkan_wrapper.cpp new file mode 100644 index 000000000..f186c8504 --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/cpp/vulkan_wrapper.cpp @@ -0,0 +1,404 @@ +// Copyright 2016 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// This file is generated. +#include "vulkan_wrapper.h" +#include + +int InitVulkan(void) { + void* libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL); + if (!libvulkan) + return 0; + + // Vulkan supported, set function addresses + vkCreateInstance = reinterpret_cast(dlsym(libvulkan, "vkCreateInstance")); + vkDestroyInstance = reinterpret_cast(dlsym(libvulkan, "vkDestroyInstance")); + vkEnumeratePhysicalDevices = reinterpret_cast(dlsym(libvulkan, "vkEnumeratePhysicalDevices")); + vkGetPhysicalDeviceFeatures = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceFeatures")); + vkGetPhysicalDeviceFormatProperties = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceFormatProperties")); + vkGetPhysicalDeviceImageFormatProperties = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceImageFormatProperties")); + vkGetPhysicalDeviceProperties = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceProperties")); + vkGetPhysicalDeviceQueueFamilyProperties = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceQueueFamilyProperties")); + vkGetPhysicalDeviceMemoryProperties = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceMemoryProperties")); + vkGetInstanceProcAddr = reinterpret_cast(dlsym(libvulkan, "vkGetInstanceProcAddr")); + vkGetDeviceProcAddr = reinterpret_cast(dlsym(libvulkan, "vkGetDeviceProcAddr")); + vkCreateDevice = reinterpret_cast(dlsym(libvulkan, "vkCreateDevice")); + vkDestroyDevice = reinterpret_cast(dlsym(libvulkan, "vkDestroyDevice")); + vkEnumerateInstanceExtensionProperties = reinterpret_cast(dlsym(libvulkan, "vkEnumerateInstanceExtensionProperties")); + vkEnumerateDeviceExtensionProperties = reinterpret_cast(dlsym(libvulkan, "vkEnumerateDeviceExtensionProperties")); + vkEnumerateInstanceLayerProperties = reinterpret_cast(dlsym(libvulkan, "vkEnumerateInstanceLayerProperties")); + vkEnumerateDeviceLayerProperties = reinterpret_cast(dlsym(libvulkan, "vkEnumerateDeviceLayerProperties")); + vkGetDeviceQueue = reinterpret_cast(dlsym(libvulkan, "vkGetDeviceQueue")); + vkQueueSubmit = reinterpret_cast(dlsym(libvulkan, "vkQueueSubmit")); + vkQueueWaitIdle = reinterpret_cast(dlsym(libvulkan, "vkQueueWaitIdle")); + vkDeviceWaitIdle = reinterpret_cast(dlsym(libvulkan, "vkDeviceWaitIdle")); + vkAllocateMemory = reinterpret_cast(dlsym(libvulkan, "vkAllocateMemory")); + vkFreeMemory = reinterpret_cast(dlsym(libvulkan, "vkFreeMemory")); + vkMapMemory = reinterpret_cast(dlsym(libvulkan, "vkMapMemory")); + vkUnmapMemory = reinterpret_cast(dlsym(libvulkan, "vkUnmapMemory")); + vkFlushMappedMemoryRanges = reinterpret_cast(dlsym(libvulkan, "vkFlushMappedMemoryRanges")); + vkInvalidateMappedMemoryRanges = reinterpret_cast(dlsym(libvulkan, "vkInvalidateMappedMemoryRanges")); + vkGetDeviceMemoryCommitment = reinterpret_cast(dlsym(libvulkan, "vkGetDeviceMemoryCommitment")); + vkBindBufferMemory = reinterpret_cast(dlsym(libvulkan, "vkBindBufferMemory")); + vkBindImageMemory = reinterpret_cast(dlsym(libvulkan, "vkBindImageMemory")); + vkGetBufferMemoryRequirements = reinterpret_cast(dlsym(libvulkan, "vkGetBufferMemoryRequirements")); + vkGetImageMemoryRequirements = reinterpret_cast(dlsym(libvulkan, "vkGetImageMemoryRequirements")); + vkGetImageSparseMemoryRequirements = reinterpret_cast(dlsym(libvulkan, "vkGetImageSparseMemoryRequirements")); + vkGetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceSparseImageFormatProperties")); + vkQueueBindSparse = reinterpret_cast(dlsym(libvulkan, "vkQueueBindSparse")); + vkCreateFence = reinterpret_cast(dlsym(libvulkan, "vkCreateFence")); + vkDestroyFence = reinterpret_cast(dlsym(libvulkan, "vkDestroyFence")); + vkResetFences = reinterpret_cast(dlsym(libvulkan, "vkResetFences")); + vkGetFenceStatus = reinterpret_cast(dlsym(libvulkan, "vkGetFenceStatus")); + vkWaitForFences = reinterpret_cast(dlsym(libvulkan, "vkWaitForFences")); + vkCreateSemaphore = reinterpret_cast(dlsym(libvulkan, "vkCreateSemaphore")); + vkDestroySemaphore = reinterpret_cast(dlsym(libvulkan, "vkDestroySemaphore")); + vkCreateEvent = reinterpret_cast(dlsym(libvulkan, "vkCreateEvent")); + vkDestroyEvent = reinterpret_cast(dlsym(libvulkan, "vkDestroyEvent")); + vkGetEventStatus = reinterpret_cast(dlsym(libvulkan, "vkGetEventStatus")); + vkSetEvent = reinterpret_cast(dlsym(libvulkan, "vkSetEvent")); + vkResetEvent = reinterpret_cast(dlsym(libvulkan, "vkResetEvent")); + vkCreateQueryPool = reinterpret_cast(dlsym(libvulkan, "vkCreateQueryPool")); + vkDestroyQueryPool = reinterpret_cast(dlsym(libvulkan, "vkDestroyQueryPool")); + vkGetQueryPoolResults = reinterpret_cast(dlsym(libvulkan, "vkGetQueryPoolResults")); + vkCreateBuffer = reinterpret_cast(dlsym(libvulkan, "vkCreateBuffer")); + vkDestroyBuffer = reinterpret_cast(dlsym(libvulkan, "vkDestroyBuffer")); + vkCreateBufferView = reinterpret_cast(dlsym(libvulkan, "vkCreateBufferView")); + vkDestroyBufferView = reinterpret_cast(dlsym(libvulkan, "vkDestroyBufferView")); + vkCreateImage = reinterpret_cast(dlsym(libvulkan, "vkCreateImage")); + vkDestroyImage = reinterpret_cast(dlsym(libvulkan, "vkDestroyImage")); + vkGetImageSubresourceLayout = reinterpret_cast(dlsym(libvulkan, "vkGetImageSubresourceLayout")); + vkCreateImageView = reinterpret_cast(dlsym(libvulkan, "vkCreateImageView")); + vkDestroyImageView = reinterpret_cast(dlsym(libvulkan, "vkDestroyImageView")); + vkCreateShaderModule = reinterpret_cast(dlsym(libvulkan, "vkCreateShaderModule")); + vkDestroyShaderModule = reinterpret_cast(dlsym(libvulkan, "vkDestroyShaderModule")); + vkCreatePipelineCache = reinterpret_cast(dlsym(libvulkan, "vkCreatePipelineCache")); + vkDestroyPipelineCache = reinterpret_cast(dlsym(libvulkan, "vkDestroyPipelineCache")); + vkGetPipelineCacheData = reinterpret_cast(dlsym(libvulkan, "vkGetPipelineCacheData")); + vkMergePipelineCaches = reinterpret_cast(dlsym(libvulkan, "vkMergePipelineCaches")); + vkCreateGraphicsPipelines = reinterpret_cast(dlsym(libvulkan, "vkCreateGraphicsPipelines")); + vkCreateComputePipelines = reinterpret_cast(dlsym(libvulkan, "vkCreateComputePipelines")); + vkDestroyPipeline = reinterpret_cast(dlsym(libvulkan, "vkDestroyPipeline")); + vkCreatePipelineLayout = reinterpret_cast(dlsym(libvulkan, "vkCreatePipelineLayout")); + vkDestroyPipelineLayout = reinterpret_cast(dlsym(libvulkan, "vkDestroyPipelineLayout")); + vkCreateSampler = reinterpret_cast(dlsym(libvulkan, "vkCreateSampler")); + vkDestroySampler = reinterpret_cast(dlsym(libvulkan, "vkDestroySampler")); + vkCreateDescriptorSetLayout = reinterpret_cast(dlsym(libvulkan, "vkCreateDescriptorSetLayout")); + vkDestroyDescriptorSetLayout = reinterpret_cast(dlsym(libvulkan, "vkDestroyDescriptorSetLayout")); + vkCreateDescriptorPool = reinterpret_cast(dlsym(libvulkan, "vkCreateDescriptorPool")); + vkDestroyDescriptorPool = reinterpret_cast(dlsym(libvulkan, "vkDestroyDescriptorPool")); + vkResetDescriptorPool = reinterpret_cast(dlsym(libvulkan, "vkResetDescriptorPool")); + vkAllocateDescriptorSets = reinterpret_cast(dlsym(libvulkan, "vkAllocateDescriptorSets")); + vkFreeDescriptorSets = reinterpret_cast(dlsym(libvulkan, "vkFreeDescriptorSets")); + vkUpdateDescriptorSets = reinterpret_cast(dlsym(libvulkan, "vkUpdateDescriptorSets")); + vkCreateFramebuffer = reinterpret_cast(dlsym(libvulkan, "vkCreateFramebuffer")); + vkDestroyFramebuffer = reinterpret_cast(dlsym(libvulkan, "vkDestroyFramebuffer")); + vkCreateRenderPass = reinterpret_cast(dlsym(libvulkan, "vkCreateRenderPass")); + vkDestroyRenderPass = reinterpret_cast(dlsym(libvulkan, "vkDestroyRenderPass")); + vkGetRenderAreaGranularity = reinterpret_cast(dlsym(libvulkan, "vkGetRenderAreaGranularity")); + vkCreateCommandPool = reinterpret_cast(dlsym(libvulkan, "vkCreateCommandPool")); + vkDestroyCommandPool = reinterpret_cast(dlsym(libvulkan, "vkDestroyCommandPool")); + vkResetCommandPool = reinterpret_cast(dlsym(libvulkan, "vkResetCommandPool")); + vkAllocateCommandBuffers = reinterpret_cast(dlsym(libvulkan, "vkAllocateCommandBuffers")); + vkFreeCommandBuffers = reinterpret_cast(dlsym(libvulkan, "vkFreeCommandBuffers")); + vkBeginCommandBuffer = reinterpret_cast(dlsym(libvulkan, "vkBeginCommandBuffer")); + vkEndCommandBuffer = reinterpret_cast(dlsym(libvulkan, "vkEndCommandBuffer")); + vkResetCommandBuffer = reinterpret_cast(dlsym(libvulkan, "vkResetCommandBuffer")); + vkCmdBindPipeline = reinterpret_cast(dlsym(libvulkan, "vkCmdBindPipeline")); + vkCmdSetViewport = reinterpret_cast(dlsym(libvulkan, "vkCmdSetViewport")); + vkCmdSetScissor = reinterpret_cast(dlsym(libvulkan, "vkCmdSetScissor")); + vkCmdSetLineWidth = reinterpret_cast(dlsym(libvulkan, "vkCmdSetLineWidth")); + vkCmdSetDepthBias = reinterpret_cast(dlsym(libvulkan, "vkCmdSetDepthBias")); + vkCmdSetBlendConstants = reinterpret_cast(dlsym(libvulkan, "vkCmdSetBlendConstants")); + vkCmdSetDepthBounds = reinterpret_cast(dlsym(libvulkan, "vkCmdSetDepthBounds")); + vkCmdSetStencilCompareMask = reinterpret_cast(dlsym(libvulkan, "vkCmdSetStencilCompareMask")); + vkCmdSetStencilWriteMask = reinterpret_cast(dlsym(libvulkan, "vkCmdSetStencilWriteMask")); + vkCmdSetStencilReference = reinterpret_cast(dlsym(libvulkan, "vkCmdSetStencilReference")); + vkCmdBindDescriptorSets = reinterpret_cast(dlsym(libvulkan, "vkCmdBindDescriptorSets")); + vkCmdBindIndexBuffer = reinterpret_cast(dlsym(libvulkan, "vkCmdBindIndexBuffer")); + vkCmdBindVertexBuffers = reinterpret_cast(dlsym(libvulkan, "vkCmdBindVertexBuffers")); + vkCmdDraw = reinterpret_cast(dlsym(libvulkan, "vkCmdDraw")); + vkCmdDrawIndexed = reinterpret_cast(dlsym(libvulkan, "vkCmdDrawIndexed")); + vkCmdDrawIndirect = reinterpret_cast(dlsym(libvulkan, "vkCmdDrawIndirect")); + vkCmdDrawIndexedIndirect = reinterpret_cast(dlsym(libvulkan, "vkCmdDrawIndexedIndirect")); + vkCmdDispatch = reinterpret_cast(dlsym(libvulkan, "vkCmdDispatch")); + vkCmdDispatchIndirect = reinterpret_cast(dlsym(libvulkan, "vkCmdDispatchIndirect")); + vkCmdCopyBuffer = reinterpret_cast(dlsym(libvulkan, "vkCmdCopyBuffer")); + vkCmdCopyImage = reinterpret_cast(dlsym(libvulkan, "vkCmdCopyImage")); + vkCmdBlitImage = reinterpret_cast(dlsym(libvulkan, "vkCmdBlitImage")); + vkCmdCopyBufferToImage = reinterpret_cast(dlsym(libvulkan, "vkCmdCopyBufferToImage")); + vkCmdCopyImageToBuffer = reinterpret_cast(dlsym(libvulkan, "vkCmdCopyImageToBuffer")); + vkCmdUpdateBuffer = reinterpret_cast(dlsym(libvulkan, "vkCmdUpdateBuffer")); + vkCmdFillBuffer = reinterpret_cast(dlsym(libvulkan, "vkCmdFillBuffer")); + vkCmdClearColorImage = reinterpret_cast(dlsym(libvulkan, "vkCmdClearColorImage")); + vkCmdClearDepthStencilImage = reinterpret_cast(dlsym(libvulkan, "vkCmdClearDepthStencilImage")); + vkCmdClearAttachments = reinterpret_cast(dlsym(libvulkan, "vkCmdClearAttachments")); + vkCmdResolveImage = reinterpret_cast(dlsym(libvulkan, "vkCmdResolveImage")); + vkCmdSetEvent = reinterpret_cast(dlsym(libvulkan, "vkCmdSetEvent")); + vkCmdResetEvent = reinterpret_cast(dlsym(libvulkan, "vkCmdResetEvent")); + vkCmdWaitEvents = reinterpret_cast(dlsym(libvulkan, "vkCmdWaitEvents")); + vkCmdPipelineBarrier = reinterpret_cast(dlsym(libvulkan, "vkCmdPipelineBarrier")); + vkCmdBeginQuery = reinterpret_cast(dlsym(libvulkan, "vkCmdBeginQuery")); + vkCmdEndQuery = reinterpret_cast(dlsym(libvulkan, "vkCmdEndQuery")); + vkCmdResetQueryPool = reinterpret_cast(dlsym(libvulkan, "vkCmdResetQueryPool")); + vkCmdWriteTimestamp = reinterpret_cast(dlsym(libvulkan, "vkCmdWriteTimestamp")); + vkCmdCopyQueryPoolResults = reinterpret_cast(dlsym(libvulkan, "vkCmdCopyQueryPoolResults")); + vkCmdPushConstants = reinterpret_cast(dlsym(libvulkan, "vkCmdPushConstants")); + vkCmdBeginRenderPass = reinterpret_cast(dlsym(libvulkan, "vkCmdBeginRenderPass")); + vkCmdNextSubpass = reinterpret_cast(dlsym(libvulkan, "vkCmdNextSubpass")); + vkCmdEndRenderPass = reinterpret_cast(dlsym(libvulkan, "vkCmdEndRenderPass")); + vkCmdExecuteCommands = reinterpret_cast(dlsym(libvulkan, "vkCmdExecuteCommands")); + vkDestroySurfaceKHR = reinterpret_cast(dlsym(libvulkan, "vkDestroySurfaceKHR")); + vkGetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceSurfaceSupportKHR")); + vkGetPhysicalDeviceSurfaceCapabilitiesKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR")); + vkGetPhysicalDeviceSurfaceFormatsKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceSurfaceFormatsKHR")); + vkGetPhysicalDeviceSurfacePresentModesKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceSurfacePresentModesKHR")); + vkCreateSwapchainKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateSwapchainKHR")); + vkDestroySwapchainKHR = reinterpret_cast(dlsym(libvulkan, "vkDestroySwapchainKHR")); + vkGetSwapchainImagesKHR = reinterpret_cast(dlsym(libvulkan, "vkGetSwapchainImagesKHR")); + vkAcquireNextImageKHR = reinterpret_cast(dlsym(libvulkan, "vkAcquireNextImageKHR")); + vkQueuePresentKHR = reinterpret_cast(dlsym(libvulkan, "vkQueuePresentKHR")); + vkGetPhysicalDeviceDisplayPropertiesKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceDisplayPropertiesKHR")); + vkGetPhysicalDeviceDisplayPlanePropertiesKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR")); + vkGetDisplayPlaneSupportedDisplaysKHR = reinterpret_cast(dlsym(libvulkan, "vkGetDisplayPlaneSupportedDisplaysKHR")); + vkGetDisplayModePropertiesKHR = reinterpret_cast(dlsym(libvulkan, "vkGetDisplayModePropertiesKHR")); + vkCreateDisplayModeKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateDisplayModeKHR")); + vkGetDisplayPlaneCapabilitiesKHR = reinterpret_cast(dlsym(libvulkan, "vkGetDisplayPlaneCapabilitiesKHR")); + vkCreateDisplayPlaneSurfaceKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateDisplayPlaneSurfaceKHR")); + vkCreateSharedSwapchainsKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateSharedSwapchainsKHR")); + +#ifdef VK_USE_PLATFORM_XLIB_KHR + vkCreateXlibSurfaceKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateXlibSurfaceKHR")); + vkGetPhysicalDeviceXlibPresentationSupportKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceXlibPresentationSupportKHR")); +#endif + +#ifdef VK_USE_PLATFORM_XCB_KHR + vkCreateXcbSurfaceKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateXcbSurfaceKHR")); + vkGetPhysicalDeviceXcbPresentationSupportKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceXcbPresentationSupportKHR")); +#endif + +#ifdef VK_USE_PLATFORM_WAYLAND_KHR + vkCreateWaylandSurfaceKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateWaylandSurfaceKHR")); + vkGetPhysicalDeviceWaylandPresentationSupportKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceWaylandPresentationSupportKHR")); +#endif + +#ifdef VK_USE_PLATFORM_MIR_KHR + vkCreateMirSurfaceKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateMirSurfaceKHR")); + vkGetPhysicalDeviceMirPresentationSupportKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceMirPresentationSupportKHR")); +#endif + +#ifdef VK_USE_PLATFORM_ANDROID_KHR + vkCreateAndroidSurfaceKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateAndroidSurfaceKHR")); +#endif + +#ifdef VK_USE_PLATFORM_WIN32_KHR + vkCreateWin32SurfaceKHR = reinterpret_cast(dlsym(libvulkan, "vkCreateWin32SurfaceKHR")); + vkGetPhysicalDeviceWin32PresentationSupportKHR = reinterpret_cast(dlsym(libvulkan, "vkGetPhysicalDeviceWin32PresentationSupportKHR")); +#endif +#ifdef USE_DEBUG_EXTENTIONS + vkCreateDebugReportCallbackEXT = reinterpret_cast(dlsym(libvulkan, "vkCreateDebugReportCallbackEXT")); + vkDestroyDebugReportCallbackEXT = reinterpret_cast(dlsym(libvulkan, "vkDestroyDebugReportCallbackEXT")); + vkDebugReportMessageEXT = reinterpret_cast(dlsym(libvulkan, "vkDebugReportMessageEXT")); +#endif + return 1; +} + +// No Vulkan support, do not set function addresses +PFN_vkCreateInstance vkCreateInstance; +PFN_vkDestroyInstance vkDestroyInstance; +PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; +PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; +PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; +PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; +PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; +PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; +PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; +PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; +PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; +PFN_vkCreateDevice vkCreateDevice; +PFN_vkDestroyDevice vkDestroyDevice; +PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; +PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; +PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; +PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; +PFN_vkGetDeviceQueue vkGetDeviceQueue; +PFN_vkQueueSubmit vkQueueSubmit; +PFN_vkQueueWaitIdle vkQueueWaitIdle; +PFN_vkDeviceWaitIdle vkDeviceWaitIdle; +PFN_vkAllocateMemory vkAllocateMemory; +PFN_vkFreeMemory vkFreeMemory; +PFN_vkMapMemory vkMapMemory; +PFN_vkUnmapMemory vkUnmapMemory; +PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; +PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; +PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; +PFN_vkBindBufferMemory vkBindBufferMemory; +PFN_vkBindImageMemory vkBindImageMemory; +PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; +PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; +PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; +PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; +PFN_vkQueueBindSparse vkQueueBindSparse; +PFN_vkCreateFence vkCreateFence; +PFN_vkDestroyFence vkDestroyFence; +PFN_vkResetFences vkResetFences; +PFN_vkGetFenceStatus vkGetFenceStatus; +PFN_vkWaitForFences vkWaitForFences; +PFN_vkCreateSemaphore vkCreateSemaphore; +PFN_vkDestroySemaphore vkDestroySemaphore; +PFN_vkCreateEvent vkCreateEvent; +PFN_vkDestroyEvent vkDestroyEvent; +PFN_vkGetEventStatus vkGetEventStatus; +PFN_vkSetEvent vkSetEvent; +PFN_vkResetEvent vkResetEvent; +PFN_vkCreateQueryPool vkCreateQueryPool; +PFN_vkDestroyQueryPool vkDestroyQueryPool; +PFN_vkGetQueryPoolResults vkGetQueryPoolResults; +PFN_vkCreateBuffer vkCreateBuffer; +PFN_vkDestroyBuffer vkDestroyBuffer; +PFN_vkCreateBufferView vkCreateBufferView; +PFN_vkDestroyBufferView vkDestroyBufferView; +PFN_vkCreateImage vkCreateImage; +PFN_vkDestroyImage vkDestroyImage; +PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; +PFN_vkCreateImageView vkCreateImageView; +PFN_vkDestroyImageView vkDestroyImageView; +PFN_vkCreateShaderModule vkCreateShaderModule; +PFN_vkDestroyShaderModule vkDestroyShaderModule; +PFN_vkCreatePipelineCache vkCreatePipelineCache; +PFN_vkDestroyPipelineCache vkDestroyPipelineCache; +PFN_vkGetPipelineCacheData vkGetPipelineCacheData; +PFN_vkMergePipelineCaches vkMergePipelineCaches; +PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; +PFN_vkCreateComputePipelines vkCreateComputePipelines; +PFN_vkDestroyPipeline vkDestroyPipeline; +PFN_vkCreatePipelineLayout vkCreatePipelineLayout; +PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; +PFN_vkCreateSampler vkCreateSampler; +PFN_vkDestroySampler vkDestroySampler; +PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; +PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; +PFN_vkCreateDescriptorPool vkCreateDescriptorPool; +PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; +PFN_vkResetDescriptorPool vkResetDescriptorPool; +PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; +PFN_vkFreeDescriptorSets vkFreeDescriptorSets; +PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; +PFN_vkCreateFramebuffer vkCreateFramebuffer; +PFN_vkDestroyFramebuffer vkDestroyFramebuffer; +PFN_vkCreateRenderPass vkCreateRenderPass; +PFN_vkDestroyRenderPass vkDestroyRenderPass; +PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; +PFN_vkCreateCommandPool vkCreateCommandPool; +PFN_vkDestroyCommandPool vkDestroyCommandPool; +PFN_vkResetCommandPool vkResetCommandPool; +PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; +PFN_vkFreeCommandBuffers vkFreeCommandBuffers; +PFN_vkBeginCommandBuffer vkBeginCommandBuffer; +PFN_vkEndCommandBuffer vkEndCommandBuffer; +PFN_vkResetCommandBuffer vkResetCommandBuffer; +PFN_vkCmdBindPipeline vkCmdBindPipeline; +PFN_vkCmdSetViewport vkCmdSetViewport; +PFN_vkCmdSetScissor vkCmdSetScissor; +PFN_vkCmdSetLineWidth vkCmdSetLineWidth; +PFN_vkCmdSetDepthBias vkCmdSetDepthBias; +PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; +PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; +PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; +PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; +PFN_vkCmdSetStencilReference vkCmdSetStencilReference; +PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; +PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; +PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; +PFN_vkCmdDraw vkCmdDraw; +PFN_vkCmdDrawIndexed vkCmdDrawIndexed; +PFN_vkCmdDrawIndirect vkCmdDrawIndirect; +PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; +PFN_vkCmdDispatch vkCmdDispatch; +PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; +PFN_vkCmdCopyBuffer vkCmdCopyBuffer; +PFN_vkCmdCopyImage vkCmdCopyImage; +PFN_vkCmdBlitImage vkCmdBlitImage; +PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; +PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; +PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; +PFN_vkCmdFillBuffer vkCmdFillBuffer; +PFN_vkCmdClearColorImage vkCmdClearColorImage; +PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; +PFN_vkCmdClearAttachments vkCmdClearAttachments; +PFN_vkCmdResolveImage vkCmdResolveImage; +PFN_vkCmdSetEvent vkCmdSetEvent; +PFN_vkCmdResetEvent vkCmdResetEvent; +PFN_vkCmdWaitEvents vkCmdWaitEvents; +PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; +PFN_vkCmdBeginQuery vkCmdBeginQuery; +PFN_vkCmdEndQuery vkCmdEndQuery; +PFN_vkCmdResetQueryPool vkCmdResetQueryPool; +PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; +PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; +PFN_vkCmdPushConstants vkCmdPushConstants; +PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; +PFN_vkCmdNextSubpass vkCmdNextSubpass; +PFN_vkCmdEndRenderPass vkCmdEndRenderPass; +PFN_vkCmdExecuteCommands vkCmdExecuteCommands; +PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; +PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; +PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; +PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; +PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; +PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; +PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; +PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; +PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; +PFN_vkQueuePresentKHR vkQueuePresentKHR; +PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR; +PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR; +PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR; +PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR; +PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR; +PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR; +PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR; +PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR; + +#ifdef VK_USE_PLATFORM_XLIB_KHR +PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; +PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR; +#endif + +#ifdef VK_USE_PLATFORM_XCB_KHR +PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; +PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR; +#endif + +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; +PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR; +#endif + +#ifdef VK_USE_PLATFORM_MIR_KHR +PFN_vkCreateMirSurfaceKHR vkCreateMirSurfaceKHR; +PFN_vkGetPhysicalDeviceMirPresentationSupportKHR vkGetPhysicalDeviceMirPresentationSupportKHR; +#endif + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; +#endif + +#ifdef VK_USE_PLATFORM_WIN32_KHR +PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; +PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR; +#endif +PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; +PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; +PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT; + diff --git a/src/KenjinxAndroid/app/src/main/cpp/vulkan_wrapper.h b/src/KenjinxAndroid/app/src/main/cpp/vulkan_wrapper.h new file mode 100644 index 000000000..5d34c0c8d --- /dev/null +++ b/src/KenjinxAndroid/app/src/main/cpp/vulkan_wrapper.h @@ -0,0 +1,236 @@ +// Copyright 2016 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file is generated. +#ifndef VULKAN_WRAPPER_H +#define VULKAN_WRAPPER_H + +#define VK_NO_PROTOTYPES 1 +#include + +/* Initialize the Vulkan function pointer variables declared in this header. + * Returns 0 if vulkan is not available, non-zero if it is available. + */ +int InitVulkan(void); + +// VK_core +extern PFN_vkCreateInstance vkCreateInstance; +extern PFN_vkDestroyInstance vkDestroyInstance; +extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; +extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; +extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; +extern PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; +extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; +extern PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; +extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; +extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; +extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; +extern PFN_vkCreateDevice vkCreateDevice; +extern PFN_vkDestroyDevice vkDestroyDevice; +extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; +extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; +extern PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; +extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; +extern PFN_vkGetDeviceQueue vkGetDeviceQueue; +extern PFN_vkQueueSubmit vkQueueSubmit; +extern PFN_vkQueueWaitIdle vkQueueWaitIdle; +extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle; +extern PFN_vkAllocateMemory vkAllocateMemory; +extern PFN_vkFreeMemory vkFreeMemory; +extern PFN_vkMapMemory vkMapMemory; +extern PFN_vkUnmapMemory vkUnmapMemory; +extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; +extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; +extern PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; +extern PFN_vkBindBufferMemory vkBindBufferMemory; +extern PFN_vkBindImageMemory vkBindImageMemory; +extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; +extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; +extern PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; +extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; +extern PFN_vkQueueBindSparse vkQueueBindSparse; +extern PFN_vkCreateFence vkCreateFence; +extern PFN_vkDestroyFence vkDestroyFence; +extern PFN_vkResetFences vkResetFences; +extern PFN_vkGetFenceStatus vkGetFenceStatus; +extern PFN_vkWaitForFences vkWaitForFences; +extern PFN_vkCreateSemaphore vkCreateSemaphore; +extern PFN_vkDestroySemaphore vkDestroySemaphore; +extern PFN_vkCreateEvent vkCreateEvent; +extern PFN_vkDestroyEvent vkDestroyEvent; +extern PFN_vkGetEventStatus vkGetEventStatus; +extern PFN_vkSetEvent vkSetEvent; +extern PFN_vkResetEvent vkResetEvent; +extern PFN_vkCreateQueryPool vkCreateQueryPool; +extern PFN_vkDestroyQueryPool vkDestroyQueryPool; +extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults; +extern PFN_vkCreateBuffer vkCreateBuffer; +extern PFN_vkDestroyBuffer vkDestroyBuffer; +extern PFN_vkCreateBufferView vkCreateBufferView; +extern PFN_vkDestroyBufferView vkDestroyBufferView; +extern PFN_vkCreateImage vkCreateImage; +extern PFN_vkDestroyImage vkDestroyImage; +extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; +extern PFN_vkCreateImageView vkCreateImageView; +extern PFN_vkDestroyImageView vkDestroyImageView; +extern PFN_vkCreateShaderModule vkCreateShaderModule; +extern PFN_vkDestroyShaderModule vkDestroyShaderModule; +extern PFN_vkCreatePipelineCache vkCreatePipelineCache; +extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache; +extern PFN_vkGetPipelineCacheData vkGetPipelineCacheData; +extern PFN_vkMergePipelineCaches vkMergePipelineCaches; +extern PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; +extern PFN_vkCreateComputePipelines vkCreateComputePipelines; +extern PFN_vkDestroyPipeline vkDestroyPipeline; +extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout; +extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; +extern PFN_vkCreateSampler vkCreateSampler; +extern PFN_vkDestroySampler vkDestroySampler; +extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; +extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; +extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool; +extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; +extern PFN_vkResetDescriptorPool vkResetDescriptorPool; +extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; +extern PFN_vkFreeDescriptorSets vkFreeDescriptorSets; +extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; +extern PFN_vkCreateFramebuffer vkCreateFramebuffer; +extern PFN_vkDestroyFramebuffer vkDestroyFramebuffer; +extern PFN_vkCreateRenderPass vkCreateRenderPass; +extern PFN_vkDestroyRenderPass vkDestroyRenderPass; +extern PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; +extern PFN_vkCreateCommandPool vkCreateCommandPool; +extern PFN_vkDestroyCommandPool vkDestroyCommandPool; +extern PFN_vkResetCommandPool vkResetCommandPool; +extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; +extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers; +extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer; +extern PFN_vkEndCommandBuffer vkEndCommandBuffer; +extern PFN_vkResetCommandBuffer vkResetCommandBuffer; +extern PFN_vkCmdBindPipeline vkCmdBindPipeline; +extern PFN_vkCmdSetViewport vkCmdSetViewport; +extern PFN_vkCmdSetScissor vkCmdSetScissor; +extern PFN_vkCmdSetLineWidth vkCmdSetLineWidth; +extern PFN_vkCmdSetDepthBias vkCmdSetDepthBias; +extern PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; +extern PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; +extern PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; +extern PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; +extern PFN_vkCmdSetStencilReference vkCmdSetStencilReference; +extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; +extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; +extern PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; +extern PFN_vkCmdDraw vkCmdDraw; +extern PFN_vkCmdDrawIndexed vkCmdDrawIndexed; +extern PFN_vkCmdDrawIndirect vkCmdDrawIndirect; +extern PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; +extern PFN_vkCmdDispatch vkCmdDispatch; +extern PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; +extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer; +extern PFN_vkCmdCopyImage vkCmdCopyImage; +extern PFN_vkCmdBlitImage vkCmdBlitImage; +extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; +extern PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; +extern PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; +extern PFN_vkCmdFillBuffer vkCmdFillBuffer; +extern PFN_vkCmdClearColorImage vkCmdClearColorImage; +extern PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; +extern PFN_vkCmdClearAttachments vkCmdClearAttachments; +extern PFN_vkCmdResolveImage vkCmdResolveImage; +extern PFN_vkCmdSetEvent vkCmdSetEvent; +extern PFN_vkCmdResetEvent vkCmdResetEvent; +extern PFN_vkCmdWaitEvents vkCmdWaitEvents; +extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; +extern PFN_vkCmdBeginQuery vkCmdBeginQuery; +extern PFN_vkCmdEndQuery vkCmdEndQuery; +extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool; +extern PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; +extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; +extern PFN_vkCmdPushConstants vkCmdPushConstants; +extern PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; +extern PFN_vkCmdNextSubpass vkCmdNextSubpass; +extern PFN_vkCmdEndRenderPass vkCmdEndRenderPass; +extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands; + +// VK_KHR_surface +extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; +extern PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; +extern PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; +extern PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; +extern PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; + +// VK_KHR_swapchain +extern PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; +extern PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; +extern PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; +extern PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; +extern PFN_vkQueuePresentKHR vkQueuePresentKHR; + +// VK_KHR_display +extern PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR; +extern PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR; +extern PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR; +extern PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR; +extern PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR; +extern PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR; +extern PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR; + +// VK_KHR_display_swapchain +extern PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR; + +#ifdef VK_USE_PLATFORM_XLIB_KHR +// VK_KHR_xlib_surface +extern PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; +extern PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR; +#endif + +#ifdef VK_USE_PLATFORM_XCB_KHR +// VK_KHR_xcb_surface +extern PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; +extern PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR; +#endif + +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +// VK_KHR_wayland_surface +extern PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; +extern PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR; +#endif + +#ifdef VK_USE_PLATFORM_MIR_KHR +// VK_KHR_mir_surface +extern PFN_vkCreateMirSurfaceKHR vkCreateMirSurfaceKHR; +extern PFN_vkGetPhysicalDeviceMirPresentationSupportKHR vkGetPhysicalDeviceMirPresentationSupportKHR; +#endif + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +// VK_KHR_android_surface +extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; +#endif + +#ifdef VK_USE_PLATFORM_WIN32_KHR +// VK_KHR_win32_surface +extern PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; +extern PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR; +#endif + +#ifdef USE_DEBUG_EXTENTIONS +#include +// VK_EXT_debug_report +extern PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; +extern PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; +extern PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT; +#endif + + +#endif // VULKAN_WRAPPER_H diff --git a/src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libVkLayer_khronos_validation.so b/src/KenjinxAndroid/app/src/main/extLibs/arm64-v8a/libVkLayer_khronos_validation.so new file mode 100644 index 0000000000000000000000000000000000000000..ef0d455f1ed6a0cc6e5aed1f0e7e4bb6aa911f14 GIT binary patch literal 21444896 zcmb<-^>JfjWMqH=W`^wy2p$82161OHkvm-2fx&`-lfi*Ol0kxjje&uIg#n=srXEKB zfa-$L98mK>!mLm>HtIvKF-QpmjAjskr~(Os?1YJbmw3jF)+YrkR2d}flo_PK;Z&nlY&9|LD&LfECV{d2Wl9M2B`%J zf&AIRzyMAwj(I6X`I#vUQVa|XMMkE{AbE1JrKzE%nW-_k+QDg2gn@y9nSp`9-7l0O zBTDQ2TBk1+pWZgDY<>Ie>Z|1Ga`+4f#e)zQ1)$`IOpx z2jdWr!Xci7Lp&3QcmWRaavb6laEMREA-)KQ_(~k&>v4#0!y&#Ghxid3;-_(lU&0}N z1Bdtn9O5r?4Tm@%6Lxc?afoZ;5ZA*YZh}MHiHU(h0ZabM z#G$?dhj#EWo<*WeIu!y(>>Lwp7f@x?gA*WwW0ibMPW4)Ies#4q9yzk@^k zIS%oUIK+SB5NBh>o=*61h)d!SSHvN%fkWILhqxOKabFzb;W)&TaENE(5HH3d-ibqe z5)Sd%IK-FX5Z{bLd@m013pm7Y;1GX^L;N`oaYi=m>46i6xBw1uNj3%sB`oE?5f1hC zIK+c+h{xa%FTx?-fkS*A4sl&@yN-{6WzIgZFF<`B5W^WNE`cT<4i(pdife!rGcYhz zLB&I$;xSP1g;4PgP;pSd1tfI>D*gm24m0N^RGeon#61!q#bC_DfE_Y2FyoNHr5+^C z4A%u>VZ$I*Obm=*vsu6-LUT9|@!e>U~GlBV_KC68uNCOMQC8&B(|F(mHfdSOr2ldw(I3_VD z^e`|ua4;}AF*GoMUzD1jSzMA@6rWg-&rIaTYr8kd~HHTATrLVqyx&x;&`0CHbW}5Pog}Ls@ZNK~ZL2Ng6{z zesN|6$fCrY%=A2l_;`p5!FI;S!_|TL#U(``50+)Srt zsmb|8De>v0iA5={aMO~DQWHy3;oRcXlH!8Y;*6oDOEl$Z%hJ_V&E#SHQBiI9P=_?-Ooc(8p8#U+WLWM5oaT#}j_UjT`%N>KJl z0U3lQ3=XU0#GIU@#N=#-;*ym7(h^X5O)du~KzRB~0SOkB7AK~sG9>5ZCuhf}roOFjLP~@9_+mGP(!BK4l4MXQBs1itmgnRrC+4IwloqE#S!Kn=$%%Ps3}uPM z(2&S1u1LvD&n$`0VaP0ou|Q^nik9M%qBM}x;&T{slZuN<^2?Kp8K6dhN+_tQnZ@Nf z`Q@oaU^5V`(t-l8Sb1`BUQtPYZc;Hrc`}#*G7TgIGA=g>Y%W7?63BQ^xmZ$JkP3>p z_}rxUx%5h)-mKQoUZFEKB_I43o=03LhUsg?22d{tao3`&p;Ww0cb zR!~}!%m7R2#i=Fn;M^3Sn_3J`kDy{TCqJE`xUv{Tfy-AA15z(Q%L7P#5TBV_fN*|( zUNRyZgIti3nv+_R3X0^!(u%Ug94r|oJr$9_ia^OAJHEUKoOWSp2`UOr(P*MYDPXlZ znMo-*dd2w+KAuj_3^|!exgbtXW>PYU1_{RdgM@SP(?J3`nMqLZgLt4ymw|x+HqXEe z9RP>%8RkLeA7J7Iw;_BEG;xVHbzqYO(8Oh+;u2`$bKXMKE1-#=cmNtnWMI%h6F&e| zZ-6F#0V-~RCf?Kb9_$_mG;xtmh`0xuc+NwJy#Z+A6?Y-x5oqE^N?(G_Pe2o2(FzeS zKogIEhFb-ic*{9RI5eP%SDc54cc6*O?1qR>Koj?XiqAk3Z+Qfo#b97qfF`~GYW@l| z@s3rS!T#ESCcXr!eg~TP8mRaIH1Q2k@e^p`TcF|>(8TvZ#c!aApMbjO0h;&$sQMRZ z;wPZuAJD{0enP_G2b%a9sCtI^kaP`8=U1TO9BAS;%}h- z(m)e`0ab5+CjJ2`ZhK1}Z)QOR)n7mpw}Fb^KofU?ia$UTcYwO* z1)8`ARQ(4u@c^j!4>a)&+*9@o77{);(8L!&)jvQJ z*9rdu_U{Wc@fA?@AJD|tK*fKciEn|5Gb}_)|4{dEpo#B*suw^LKL8b%Koie^nxlXw zegvvs15Nx4RNMef`~puYtNJ08QM0xfvXu5oqE!pyni? ziSL1$lYu6F2dcgRP5cQ|yaG-91ysBNP5cd1yaP@A3sigpn)sg_NPeGzCjJAeegT>| z!$nB_wE|6CA{S!L1~hRNsQMjf;yh6C18Cv`Q1KIJ;u5To^5+7Yc!mMQ-WzD*f1u&~ z08P9kwH+K^FVMtAp!R-16K_}t$zMOv#3i8W85W_Y{|TuO_i&(zD?rr?poyzM#U;?h zb)e!3XyON;?$JOKH-M@)Kohrsid&$GGpvXB%K=T?2CCizP22@49)Knu12rcCP2460 z63z)|;vP_QGSI|#K+P#Y6Ze6tuRs&eNrQxQ1DbdURDB1Ucmz~@0-AUNRD1@S_z$Ri z7NCizK-I566Zc4mxMu^Jcn(zk4m9xssQ3Xi@d~K;2{dtw4UqV{fF@o8Reu9b{7o#R zoPU5O9s@P!1)6vZ)SM4!;yqCDA86tQP;(d-qoseSdJZ)48BlQnH1QUwITC2%bD-)K z(8N_TAmOZmCcXr!-T+N}&XWdkez!mqUjbF`fF^zf>K+d?@dZ^7a{|!B*FepQKofrg zH75a0d;?T{2AcSnIgoa50h;&@sQL;t@jX!S1~l;_Q1K2lag~jb^fLiX`~+0}3^egI ziy`h=fF^zcs(uBUctBa{0db44m9x;sCy2eiQj;#KY=D5Q3P?%1vK#oQ1v&^ z#GgRLAE1f9fr`IC6aN4e|9~d`1uFgnP5cj3oM8!S`dWNVsQLgjaSf<=1e&-3 zR6GGqTxAm^9cG}3n?ThUpoxogLEKY;CT;^&-+(6W02S{*6Ze3MPe2n-fx2e~nz#>C z{Q@-c5UBVHH1Q6oIUCT#BcSScpo#C<2x-q8Kod`Zsy~4yo&puWfF_;;6~BQdUH}z; zfF@o76@P&yexd*p&L7akYoO|Xpo!msx}RYwYWi=0s^>rxZ`lHgcL8*9sCo%B@e9Qe z_b8x=_dwNapoyQTgS6)j(8MP|)mxy6AA!2Z0Zn`gRJ{k9_?i-kdjinJ=Rnm*pouSl ziYK6nuYihYpoz0=g@jK5n)n*1`U*7hlro5W8qmbIK-G7kiSK}lPe2nt02QBsChh`t z&jK{@BT)4#(8L|eA@13LCVmF0eg~TP1*rG|H1Qiy@e^p`EW07*UqBPT166+mP5cQ| z`~jNy3#j-DH1Ri3@egR?1&1K^{y-DoQVU6M49if{|AQuoI0u^ehGP(O1kl94K<$-4 z6OZ@-=~pVCiT{AA*FY2J*ak^I2591cpz1Bq#P>8q+~a^I&T<)2PkEq;D|EJj+fe~% z;v7)*5oqEbQ1>LDiSt0!XP}ACXo0w=08Ly3s=fkETmmZIfF`a074JY3SAmL8KodW4 z8PcwsfhMj2RlfjDyaVd56=>o*Q1u(o#2XqQ{@Q^iZUR+*08QKiDt-b@+yN?n0Zse_ z)IB%Q#5=A+{Ph4$+y!dR3p8<#?U3~I0ZrTks{RL>xJ(7aUkuAp(|-U|JqMcjncEQe z2%w24+=Pfrpox1x-J^ge?lKLMFEr4^L!kB=pozyo&9OiekASLoKod`ZihH1m&w-i~ zfF{ne15%Gipo!P4hKMJiiC3(Hh-aXQr$Fs3Koie_idUeCGhBj%e*>C$0aSelns^0N zd;*#{&p(JcGtk6qpz0T(iMK$-SD=X-{Dzpb0ZqIEs(uHW_ynl<0W|R?e<0?ZKog$= zReu3Zd=6Cn2AcREsJ|Ydi7$Yve}N{x0xJFiO?<DO3TWaIj1Y4)(8P~G)f=FRpMi>7poz;cLCkSL6Tbje?}083 zRUd#RegmpL0!{o5R6GGqe1ZtX-V8MHCs6eTXyPxR;uUD(4U!OZ8qmZ)K-G7kiO;Eq zlp7P!#2Y3;#Al$1Z>WKYFF+Ij02N<>CSK4EQNICA{7E-Ndfpn)dNas|?EF+dZKkcPC!EYQRc za6rTz(8M{Q=6IlqUlD|;4?q*w;fIJvpo#N9%}GEL7l4XqpozC|L(C~a6PJLhuRs%* zfr>YviAV54%;`WASAnXZfF`a16`z47ZU7ZufG#cziLVuC;wDh_8_>i%mO$cb2b#DI zRQ&;TadC+IPoRnSut3Bwpou#`&AEXlK0y+q{sEeJ4;w`M1)8`E)SM4!;w4`i!R_83 zXyP`nAmR+GP}9E$)Eo{paf^Qt^#W+(N1);oXyQIla}?0TV;msk>Kf?c@{o8jKobvu znqz?`uHghR#{o^8M-gI<2by>Y)SLh`aTOPcIT2{$E0iGSB%p~$K+VZO6F(CSF{c1c zJO--10!{o%3`Bhcns@?KeFvI&22^|kn)m`Wh&yMXiRVDoFF+G7fr_s{6EDz&n6m** zyaK9z2by>TRQv#%xP=bHoD*o`KORBa$rsSXTcGCLKoehL2r=gYns^6P{R=el2~hD5 zXyPe)5OaQ@iBEy5XIPDz{^vl&IncyojzRj50%+nThaut;XyQE^A>s;X;w`5j;u>h; z3!wHIpoy=5id&$G?>PuD#{o_J!v%=A2b%bdl@Rd&G;xj~NccpciSxXK#8(2E_=dL- z@eDNaHBfgJpo#B*&Qn*QiEn_aZ$J~j1MR1Dpou#`=cy;4iEn|LGXqUrW(TA{xByLj z2UPtEH1Pva@eOF=N1)<6(8Nzb#Sfr~Ux13AKoh?L6~BNcegi6g15Nw^RQv&&_?c6X z_w@fc|MFswmM{~w_0Incy^K*a^n#5thz<`QV)f1v6W(8O7; zLfSbRXyP1DaRW4Q9;mnlnz#s5+yPCTClAu!@jw%ofT|Bb6IXzWN1%y!{DRB}C7_9` zK-FiUiR(bc3(&+3pyCy1;wDh>1~hRSsCWmOxC2yt0-CrBRD1@SxDQl(0h)LNG~QRB ziKl#p_;&-EcmUL#9cbbjKOpK4poxb-)t^8UkAaF`Kod`Zir+vJPl1X*Koie_ioZY; zFMx`FKoc*4ivK_puYrm)tVK=#4N!3oH1QUwxB!}X4^&(NO*{a)4ov|~d;(Ox2AcQ` zsJH=|_!MY-S)hr}fvR^v6JG)q_dpY0uoqHp1fYq(X@;~XBhbWGK+Q=&6Tbp=PX?O! z8mRgLH1QeBA@)|FiEn|bZ$J~@0Tu5+7heT2X9Ak|0jT;JXyQkp;tSBk&p^djpow3A zif=#@zXBECfhK+jDt-V>`~g(_1e*90sQ3jm@i$QM8))JmpyChE#J@nrU!aNqfr@`X z6KA*vDQ|zEiJSC8`m+q{P}Bc}(~xlHKohrtsuw^LKLYKKOQ4BwI0rFD0Zsf2RJ{h8 zI1ALB2590uP;m=1agm*n`rQFdyaU=E^FR|ffVP(c(8N2S?Xd_naRI2k325RHQ1J{j z@r)yo_EiCz_zbA|6=>oD8zAZ%(8P~G+hZMQ;xbTsC!mR|K*eXEiBH)F3I7FX;u=u( zE6~IZpyC_Q#6zIryaP?#1gic3nz%wZr2ajDCO!pf&IL4a8>l%q(8PIyA?7?l6aN4; z=LMR$3)GwsXyQIl@gHd74~)Np`^60FQPY0_R6Pfpcmz~j08KmwDlUO0o&XhBKoie^ ziff>W=Rm~`(8LR%;udJ)6;N>pG;xDnkbL2RCSC(oAAly_0u_%y6Ayu!lYl1P0ac%Y zCO!cwUVtV(1u9;FCO!iy-hd{)04m;rCY}Lx&jd8_B~bM<(8Sk3#TTH7Z-9!gKod`J zg!IQZpotqOK=RQJH1RD^a}J=1>o`NqIe{kr06H#l0Zn`d)SMe=;xAkw<~%?XKcWnA z&kHp1Jy3H#poup`LCpDqCVoK`Vh+Ow)bu|k0ivD*P5i=RNWV`2P5c1VUI{eu4kL*9 z3TWaf%#isb4K(pPLXiA!fF@o8jdu$)@gq=s9ni#8WyS08MKo9+UqHn>(8M>agqSk{P5c8?{R}km z7!gRjZULJ3fi{RaE6~KhK+V~JCLRDC-`jyEeu5EV{sA=cA5e2npovd_*2@>r#9N^C z@(nccKTvZXpozb@2&p$;pozOc$6G$2i8EY>wtvvXS)k$!8&T6g4^*53O?=5mNO~4P z6BmH0mp~JjfQl=iiC27rn4^IvE(29>fF`a26}LbWxA+V(#{o@T1FGHwP22z~9)Kp! z^95o~1e&-BRDA-PxD8Z115JFwSBNOY`~*FeR8pow?E(8Omz)mxy6FMx_Wpow#^LCo<$6JG*V zAAlyl1}YwbCjJC!P6C?v2B`WBH1Qo!@d7mQJy7uqH1Pva@dh;U6HxIEH1RV~@d;?+ z7og%Z(8O;*#TTH7-+_v+Kofre72kj+F4G2y-yLY;FQDoVpozbMil0Ce{{j`ifF`~N zTEE{w6aN8K{{T&#;Rd8Ue}N|c2Wrj-G;t3j(8(_h3_sAsS)k@HY(`E06}utrXAU%R z4ybwoG;sl_xCENG!XAh@3TWaIS`hbWpoxn>%`rd|KLItz0!>^3s@?%jd`>wK+Net z6W4*7GXYKf0MwirXyOJ?^$XC%Eui8n(8N9VLHxA=P22{meg~Sk3sn37ns^MY;w@0| z05tI%P;(;C#5ZgO?(Q}oCY*;n*)&W=|B^o0aZT% zO?&}Vdg*O?(N|oDFE=6QJhoKoeg9Reu0Yd;?Vc1e*8-s5uwV z#J51z-#`=J0~LROCN6Lg51u8Cp zChh?>M*>a!22{NQns|scq>jReu6aTm>qA z0ZqIl7-G&1G;s~6`Uhy@22k-AXyO4{kaq6}G;tHC`X6ZGHc)YfZK&y=K^tNY2b%a4 zX#ZURO?<;aNPk=cP22%$z5<%~g-a0i8ffAT(Ehstnz#$p91ApY52&~Uns@+I+yhN~ z4)mOd05tIssQL&r@ffIh0-AUNR6GMsJOwIVfF_;;6|X=OFMx_Spoy12#XHc%YoOv2 z(8PP7`C*_!Ox4 z1vK$FQ1KgR;tQbS575MyK*e96iLZf*e?Sx802Tj%CcXtK&afRd{qKQ_bD)VIfQk#C zi64QAOQ4CLfr=}jiBCBN$?qCy;uoOm4ba4IK*cT4#P2}G9ni!dK*c@K#9u(g1JJ~0 zK+{hIn)n;2`UEubFHrFeH1Qu$@d7mQKTz=sG;x+&kaE5OO?(N|JsoJ`98mQW(8L9x z;xo|1pFqu7fF>>iRlfpFTm~w>0Zm*1D!v0vTm>qA08Ly6Dt-b@{0G!M7tq8Fpz3d+ ziCaL$AE1jLhSaAo(8O(^>OY`~Php3ow;yQYE>QIhJ5bZV2UMH`P5jOph&cji;sH?g z5@_NfP;mt`@ffJM2AX&U)L#Z@;t5do7HHxnD&w+{upow3A`YQrW zyacK~0ZqIDDxQHR-T)OZKof6)`l|v>yarmIHlT@DKEH1QtjJn{rI@fN7PGtk6) zpyCVA#1}yAU4bV41iEf;1Dd!6v|iqUCcYyG68;C!#3w-QJ%J`Z11f$2O?(10d~TqL z&w;9cfF`~KD*ggZd<9he1Dg06sQ3>w@hwnshMlPCe+$$-9BAS@py~zC#1BBlCD6pb zK+RD=6F&k~uYo3h1}biVCT?;BlHV=R#4kYAJD`c*fQoydiQj>W2cU^RfQm<;iNAn~ zC!mQ>fVw9GP5cd1eF2*I7pQmznz+D1Ncw3&6aN8K-+?C1a2rxzOh6OA0Cmp{G;tQF z`UPm>JW%l!XyQIcA>q6MOWuWRWpoyzM#c!aAOB{o^ z=K-3y22}kEG;sr{_y;uc5~w*p(8Oz?;}Q(JP}9E&)Eo{p@flEa1kl7Spz0;i#2ujG z3TWa2(DkAkXyPtV^#*9-K2UKBH1PnaxC5Ga2vpnyO*{rF9)Kp!0zEGx0!=&tsy+ct zJOe78fhN8N8a@SR;yFomQ1J#d@fzs5oenhdhJTRx)(L3h6;N|#po#B*x@Q5J zxDE?s-PZ~<@fxT(8_>j$K+V~KCf)#5e*jIq11f$3O}qyxegRE92fD882AX&cbRF6Q zH1P(g`WI;8f1vBiKA?%ufv!XQfhH~hHHTq0YWkl5btea!_zbAH0Gjv(X!uB=iO+$m zS3nbQiGZwg&_ENv12xA0O?(N|91ApYmk@|K4rt;ppyqg>iLZg06M!bZ1u7naCjJF# zP6C?v4ygJJH1Pva@d7mQE$oo-gbFnABT)4XXyRv};vHz>4IB`2CZLI5fU2K?CVm4d zz5q>p4kyH%6=>pjpz1fEi9dmg??4lmI1VYF51@&^fT}-%CjJ2`egREH_*ht zK-E7$6aNDhe}N{>a0gO9en1mvfr|e?6X$`7GweZ4{{m2P4m5EQsJH-{xC~TW0!`co z8a@hW;tEjp8ffAgP;mn^aUH0*1)8`4RNMhg+yW}@fhKMP6%RlYcYumVpox1x#S_rP z1EBuOKoj?YsxLqj4}pqTpowQd&1parkASN0Kod`Zicdfj?}3^#15G>ys(t~Qcn(y2 z1)BHR+IV zt3*KBlONE;Elxo4=?^sV2~cww_M)c$8BlQ!G;trOIRa?nbD-)a(8QNO#TC%R6QJg3 zpoy=5sy9Fr-vAZ2Ko^IO(>kDuhd|dcdZ3A`K-Vz_powpRnje8Ct^i%fn1CjJ1-gzg z15JDf)SLn|@jK9Uj1_3&JD}?r8_>k}K+Wku6EA_TW1N5{egwLXaR!>W0rdRF1!&?& zpz9b{pot%V+PeWwyv7KUu6Ce_M?lvx9zYYnAOxwGPoRmnK;!)an)nf@y*JRr&p^c= zpow3AioZY;zXBEifF^ziD*gja`~g&)VIOMxe*zWfKoggMuB#M46Mq9$FM%fh0V=M5 zCVr&~vi?v5P5cK`y#bo|AE>wmn)npxx=IH$ahAJ~de8$+oC7KzfF`~Kx~?(;OR#ZRD#J3z%RpozOc#c!aAdqBk> zpos@S#b2O_hd{+YpovF7#eblQe-VR(1H*pQ^q&A#&w(bM0u>iP6VHK)OQ4AtK*bf% z#7m&!8ffA*P;mn^@dl{41)6vZRNMhgyay`ofhIlyDjt9)J_RZsfhIl&DxQEQJ^@;e zWuS>KfT}M*6JG%puRs(306lM~0Zn`jRDB1U_!g-61axtzduE`C?|`abfF^zbD!u|u z{07vV4QS#=pz3#^iF2?*($4`j@iS2MC(y(%K*cYhiQj;V-#`;z0Nro?08RW3RQ(Gy zaTiXAdp@9vKY^>g756|Bmw<`~pozbM#(M;sxC~T%0-CrAR6GMs zTmvdzfF`a36|X=OH-U;bpov>R#XHc%ZJ^>4(8OJ!;xo|18BRjly$jI9J)r7Wpos@S z#W$ddi$KlUfhHaTReu0YJO(O$0!=&tDt-Y?JOwI#15G>!D*gaXyZ|cx0!_RGD*gdY zyap=%15LaED$Z~aHT}0h#W~Q#d!XV1XyRL}ApLgg^$KX>Goa!cXyP2+ko;nR zCO!wM-U3a02~^wxP5cbh91k?{6;Sm7XyO~7;t^=#Hd`U?Nk9|d0#%=ZCcXzMUVtXf zvjbvI1)8`Dbo{LWP5c1VoDMW`9jN*VXyQkp>Sv&dpMi=mKoi%1rsoxC;uoOmH=v2% zfQs)x6Sskya{x{J4pjXKH1Q`;@e63;FQDQ#(8S+B#UG%Fe}Rg>KokD~75{)H{s$`l z15KReKBT;5IE0%1IiTVkXyQCjaRD@O5vaHXnz#g1Tmem71}d(BCawY%H$W2)fQGXL znz#!zJvg9=Ye3EMKogIEst-UDzXBaMjzAOFftr(mCjJ7dJ_AkM0II$KP22)1UV$c_ z0`*q|nz#*AeFvJj3sigpns^7)oEd219#HiQ(8L3v;w#X^dwd}IbOV}r2vq$JH1Qay z_yIKW3}1*jC(y(bpz1H6iDy8?Z=i{P`3dPqKR^@DfvSIjCSC#+|9~c50Tus&CSC&- zXE=tO?(AZJOEAH0cuVJn)n*1`UEubEl}|cH1QCqIR$9qJD}<-(8Lcw#T(GX zGoa>lpot%Ws-J)+eg-N&15LaJYR&>Q@e5G(E6~JmK*cwpiFf>mq~{%I;&-6x51@%Z zfr_6%6JNjpX(wDj6Mq3!e*;bY162G0ns@;t#GDss;$NWZKcI>Kfr|e?6K8k;E&q?8 zrhgWwI0u?I4^&(LO?&|~oF&l21)%B`(8ML6;u>h;TcG9`poz;s)mxy6t3bsa(8M*M z;vQ(?I#BTdG;tHCcm$fb1yno%P22`5o`ELr0u?Vn6Ze3MSD=aeK*bx-#5HC?(pv|b zIL~Z|_yjcZ5U4pb(8Ob);tSBkFF?&%fhL{+RlfmEe9at)y*tpvGob1Zpo!-|#ZRD# zmq5iYpoyP=#`_I4@d~K=2Wa9AQ1KUN;w@0|4`|{YQ1KsV;uE0a3`bGZ{}iY=2b%Z{ zsJH-{_yVZ71e*9AsJ|4@#Fs$TYoLj*fr=ZTiOZaZ)E5?L;v1mq9ni#gK*c@K#0{Y4 z1fYrUfvS%{6F&kKPe2n7ftr(nCVm2{z5q@90#v*LO*{i?P6L|w6{z|SH1Ru7@d;?+ z51`^R(8QlW#TTH7zk!OcKokD}72kj+{sk(&15Nx7RQv#%IKx9oxq1RkoCPX=0Zp6- zDt-e^TmUNm08Ly3D*ggZTm~xs0Zm+m2~uDDKoeJhs%JQcn*KGQ;v8t=I#6)|G;sr{ zxCENG1yo!CO}qvg?;2?0Hc<5jXyOsqAnia4G;tTGdIvOd52&~Yns@+IJOE8R;|9e1 z2sH5!sQLsn@ffIh2AVhvGbEe~(8Lp<>MPL1Goa!PXyOx~;nRU8o&!}s0Zm*2+D@K< zCSC$nzW`0V0xG@&O}qgrz5z|#fSAmK%oIp+gZ=mLIpowpRj-LpiiSM}xP5XcCawTAM*vNH3RJxWn)n>3xB{BE z3Dg`7H1P#c^#*9-E1=>QXyP7Fa~#mb*Fe>KpowpRiU**H$3V@AKoj2qRiA(+egG<- zfhJx6HKzbg{0LNi1)BI7sCWaKcnj2=4m9x#Q1uhg#BV^wXP}ASfr>9c6Mp~|Ux6n6 z0xG@%O?(SiO+!g>jIki52*SZXyOcyA@#@uH1Q=+b6%i{ zvq05iS9s)II z1Df~)sQMjf;xC}$2hhYbpyr%F6Mq9$e*sPW3sn3Dn)nZ>_yaWYKTz=(XyPnSAoaxu zH1Qg!dw!sab3oNIoIy?h0#I=dG;tBAxB!~C1XNrCO8=#3B zK*cT4#7&^$4rt;QP;n15aR;b)0GhZ9R6GJr+yg3}fF>RQ70*Bup8yT#0yOausQL;t z@ffIh1DbdORJ;RCJOwH~0ZlvyDn0{EJmN2;f3W~fya1|x1)6vTRD1)P_!6kUcA$yZ zK-C{W6K{cvpFk7e0X63Wns^6P{S7qn2~hC|XyRv}=Da`?p8{3?0Zn`kRQv~;_yVXn z!&%hyzXU4IfhN8NDlUK~egoDO7HHxppyCc_ z;!mLN@jw$l163b@CVmAf9)TwQ18PnJn)nT<`V2Jj2T<_>G;x{pkaE5PP5cQ|eFK{K z8>n~(n)nB(_yjcZFHrFrXySjM;tSBk8J{4XF4FG;tlM_y;s`1E}~9G;s^4IKw&A^lt+d z=Rgy8fQk#Ci*rNTT@q;G9#HiPXyQIlaSb%_B|H#w4A8_wpz1Bq#3P{M4rt;DP;n15 z@f4_d0GfCPR6GJryZ|bmfF^DLP0tx<;w4b^1!&?mQ1J>haTlmL4QS#GQ1u;X;vG=& z325RGP;+LWiT6O&FF+HY0u^6@CY}Q|X9Jq}45<1YXyOZ?;s?;g8=&T#KoegAReu3Z zd<|6m2AcQ=sQ3dk@hwpC7ii*ppyD6U#HT>r^8-!%08~B0dDQfO0xHgdCf>jencopW z6F&o0FM%e01uCw9CcXpe9t||{8&LHIXyOl`;udJ)PoUxsXyPxR;vQ(?AE4p^XyRX> z;t^=#KcM0XXyOddAmwKUn)n&0zY5UAS)l4G(8PJ5;tgox51{6Bpot4W)lWbZmw<}T zKoj2qosV09CN2Y2zXDBM1uDJ)OY18Cv~Q1KIJ;(ws#TtE{yfvUfO zCT;^2e}E>Q!vaZ%FVMstpz1%MiF-iBf1ruqfSzy6Z~-;_`#{xmpoxb-#RbsB6ZjzR zkw6n)GXZkWfC8F$1k@Z2H1RD^^#*9-N1)^O7HHxzP;(s6#Lqz0d!UIYK-CAJiDy8? zBhbXZK+|CYns^RWeFmC%2~@lQO}qjsUV$cF0~K#T6K{cvcc6)PK*cAZiT6OoXP}8s zfr>9c6X&=9X^*Wy6Q2Q9zX45r0aSbknz#nXP}95K*bBt#08+@6=>ojQ1J#daS5n+2b#D7RD1%OxC&H!2Aa4ARD1!NxB*mr z1)8`CRD1)PxCK;v2b#D8RQv#%xC>PL1e&-9RQv*(xCQh)mK$i|0Z{c1(8NQa;xEv| zW1!+6(8Lp<;y=*DQ=sAumr&Dx4pf{2O}qdqE`TOp0u`4)6R&}aE1-!tK*crC#9N@^ z2590vP;m=1@d;3I2Q=|1P;n15@i|cO05tIhQ1J*f@g-341T^tAQ1J{j@eNS%0yOb0 zQ1J>h@jX!S1~l;lQ1K2l@gq?2325SHpyD&o#4kX_7odq>fr_s{6Tbr$-+(6m04lx% zP5cQ|`~aHx8>sjRG;s|I{2UI-=nz#T|TmVfxM;Ky`1e&-ARJ{V4xC~TW15MmS1Y(W>nz#Z~ zy#<=M22|VuO`Js(VvYxzxDHf(0GhZ7R6GJrdbSoC9d$8Bp~n(8LR%;up}w_eep^xq&8L0#*M2O}qvw{sK+BMH*tx2Q={psQMph z;vGw4hNce4^+JXn)no`xCELwgDk`x1vK#)Q1u#U;tQbS25912pypVh zi7$bwcR&+g0~Pl`6K|1&xF-Njd;?T{1e*8`sCWXJ_#AnNIT>i;d!XtI(8P~G#VgRn z0~8?UG@yx}fU5666TbizpMWMVp$IW&2AcR4sQLwH;&-6pE6~JWK+V~JCjJ1beg~TP z3#j-3H1Rn~5cixw6Mq9$e*sPW3sn3Dns|;f#GD6c;y@M6M-gf0#%=YCT;^2&p;EG(14gzfF|w$RbPQ7 z?g15VKofrfHKzkj+y|y zs{R0)cn(zj1e&;oKE#|0XyOG>^*7MOE1=>J(8Sk3`=>9^#A~4HKcI=XK*fKciC=)4 z!*C5X{dYjsbD)V&fQk#CiBExwOQ4C*fQl=ii7$YPYoLigfx5>4O?(Mdy#<>18mPDf zn)n8&xCff}7N~dtn)n{5cm$gG0jPKan)nf@cm|sI8|XQr1!&@Dpz15o#4kX_8_>jW zK*c-I#6vDZ#%(5`iQj>$pMfS`VFXEU3(&-u6hh{kR-lPLfts@cP5cd1dD&H)vFfhIly>Yfj1;yh6GKhVT|tRdmU za2+-Mx7a|$IncyKpymjmiOWF6CD6nbpyCQ>;wn&a4K#5bsJH=|xB*n$0!`cmD(-+L zZUYtfKofU>iU**HyFkSw(8PV9;t6QtYxp7IlYu54099XrCLRG5uRs%D0*$W*H1Qay z`VKU4n;(#LI{{5R1*(1qns^Cxf64+h@eHW?6=>oo9zo3CfF_;;HD?F9IMkd2XyO`A zA?BPw6EA?OzknuQ0TsW2CjJB(J`d2uYoO|1pozCY#Xq2lJ6wX48$Zy*JD}+X%qc(fhK+iD&Bx5KIc8e zoDMYc3sChF(8O;*#b=<2-+_uRKofre6<>iS{sJn#0Zlx?7~-BCXyR|6>JOlae}Rgh zKokD~6~BNc{s$_415KReHMIOk6X$@6zd#e`fr@`X6BmJs|3DKrxd-tV!%fumF9B80 zfhMj16&FAgSAmL4powch#TC%R4WQy0XyOHzA^Fq*P22>k-U3bB1}g4=CjJEKFAp?v z2dMf0G;t58cm$fb4^%t>O*{Z9o`EJF0TnMm6FiTT!+L<2by>a zRQ&`r@eHW=3^eh88xV6Apotei)vrJkFM*10KogI-1uHw6VSwac0$BwpotsYgoN_~H1UYr5b+gg;#)c)=4?O{XXt~7 z??4luQ3)~U0Gjxl7D)Ja)w6CwU$xQ&|r73M+gSfF>TW0U|DeCSI}|QhzC+iA%6S z)1xWZ3!usJi(#53+f;%NbzxXn?B ze^;Q1TfB#eA3zg_nR5b7T;d%>{RK4f15k5bpozoG`G6+A1ZvI?H1UuR5c3)CK>WeX z0uDw7n149X#516L0VoYq{{YIDfYLB=4rur&potqm#Wm2xBcS32XyQAdda-aZB{TpaGP=O{6ifFMz6tg)4e|aX`ZxCT_9_QvM5|i6=nQn*y4+fs_e2Uu&R= z7fh@N7k~z6;sVnk;udJ)7Eo~qH1PnaxCfee22?x%O?<(5Nccpci5EcCC!mQhfvV3y z6JG-rFF+ID02Qx56W;4AKodU$ zRlfmE{0dZj2b%Z|sQ3Xi@jFoQ6KLX3pyC(M#A~4Lxq&AB0;>K2n)nB(_zN`gFHrFh zXyOe}^M9a;|A4AzxDP2mVClI7s-6Q){0~&U0Gc?<1xWglKojSHiYuUr^FYNl(8NWc z;s$8q5>RmqG;tZIxC5HF3RK(!OJ6sY{;tFWu2cYI?pozCY)f=FR_dvxh(8P~G z&2c~zKLHi@Koh?J6%RlYzXBDHKoh?K6;D7De*hKFKog$;b!P#Z_!Ovk1)BIAsCWaK z_!Fr49cbbUpz0@}iNAoVpMfU60;+xin)n*1_zE=fEl}|dXyR|6=I=lg-vL#B08RV= zRQv>*_y?#t7tq9yK-J$s6F&nLe}E=_0V@6iP5cYg{10g2SD@;Dpo#y1s%LnJn*JH4 zL)sf0XyP}Z<_MsPb3oNgpo!mss#ic0e*zWPKofrf6*oW=e*+b_KokE06?Z@r=YhJ% z15Nw~RDA%NIKxFq{S|>GE&w$r0Zp6*sy+ivoChjifF>>g6|X=O7lE4JfF>>j74JY3 zSAdF7KoeJiiqAk37lGQl08Ly6s(uBUxCB)F1~hR4sQMjf;tEjp2hhY-pyDUc#C4$J z7tq8_pyuB|6E}dWe}E=#0Tq9NE)F&41Dd!ERQ(S$aTlmK!z0x6Zv!=l15MlkDlUK~ z?g2GN0$m)cUI9(q2dZ8JT^y?308Kmus@?)kJOV22fF_;*756|B4}h8K~wq z7eLj&Koeg9RsR7^yaKBJ2by>dRGi^4YWiOTHHQODyalRW08M-YRJ{b6cn4Iy0-E>^ zsCo@F@jXy+12pj?P;m=1@gAu84rt;hpz1x)#3w-22cU^xfU1u`6Q2TApMWNQ1*$#+ zO?(bieF2*I4XFAGH1P#c^$lp^51{Hh(8QlW#V4SNzk!O+KokD}6<>fR{sk(&0!{o6 zRD1)P_!6i)cc6(gT!Pe_2hhY6X$@czknvr0~No4CN2UMe}E<~0Tq9NCN2XN z|9~dG2I`(4XyPhR^$br?)4v8(oC8hV04gqkCcXh`z66@M2~@oTn)nu|dJQyj8>o5% zG;s&0xCNTH2UOevO?(H`d=E5nAE^2OH1QCqcm$gG9;i79XyOr2^%-d52cYT;(8Lp< z>MPL1Q=sAvXyQ3g@eVZc0;u=|H1QIs_zX1hBT)A&KohTls$YR7egdj~1DbdPRQ(P# z@e5G(2hhY@pz2SciC=-Lzknv*166+mP5cH_{R1@d2~hPf(8M1=)qg+}p8{3?15Nx1 zR6WB})bu|Gs-6Q)d;wHk08M-aR9pg0`~}o}1vK$BQ1u#U;%}hp4ba55K-F8IiSK}l zJD`alfQoydiGP5aAAlx)1gbs)P5cW~eFB>J8L0XUH1P{i@d7mQ8&L5IH1Qu$^Bd5_ z??Baepou?$icdfje*qPrfhPV2D!u?s{14RL6=>oNGa&uG4QS#lQ1KmT;yh6C18Cx3 zp!S|X6BmH0zknwG1FHT8nz#g1{R1@dKT!2A(8Oh+>OY`~vs{MMQ$Nte6`<-Fo}s3H z4ybw#G;s~6dI2kz5q?!0xDjCChhfUjbFm@B%gc-+-#;Koh?M6&FAgUjsEq0!{o0RJ{V4_zS4G z2AcQ=s5u5`;vb;uEzrcbK-D{-iSL1md!UIQfQkp8i64QAN1%zHfr=-fiC=(WSD=YMfQmPui9dmgcc6*Cfr?K+6aN4epMfU+1uDJ(P5cj3d=K`8I4^;gPG;x+Ikao)hG;sl_`WI;85>W9E zXyP1DbAF(S%RtpLyhKg^Do}9_G;toNIRa?n0#I=YG;s~6ISOdv5>WLTXyP(ZaRW4Q z9jG}LXyPhR^$uv_8c=Z$G;sr{cmTRM)cgoEaTBQe1axtz`V2I28>spMG;s^4`U*60 z2dH=hx;WIF4m5EWsQL+L;yzIE8EE1zP;(Zbi3dQ{uRs%zfQoNG6Ze3cvja^$2CDu5 zns^FS`~;e~57e9sXyO@A^*7MO3!vf;(8L3v=Da`?FM+E6fF@o875{-I9s)Io;T3B7 zZ-A=jKojqPiVL8LM?lSyKojqQs#ic0kAbS!Kog$=Rd0YMo&Z&EfhL{-6?Z@rp8++; z15G>!sy+ZsyaXy9fhIl&YEA;0cm-5_2AX&SRJ;I9d;!#)3N-O0Q1J#d@fN5#9cbcf zpz0@}iFZKN&p;EO02N<=CcXh`&I&Z~DNywr(8T9J#dn~IZ-JU~08M-cRQv>*_yMT+ z1vK#^Q1KgR;tQbmK0p&+0Tq9NCVm2H&IdH{Gf?p#XyR9(;ta1*)Bg>qI0u^e9jLef zn)nl_xCEN`8mK!J(8OOr)oY-MZ-A;dKokD}Rd0bN{sk)TfF`~LYK{k*_#deH05tI( zQ1uaL;s>DO325R+pyC;5;wPZu1!&?IpyCy1;#Z*J4QS#wpyC~9;t!zW6VSvNW^5D*gdYoCoTjA86tdQ1uLNP}9ExRGb4%TmWj00GhZ8RJ{b6 zxDHfY0ZrThDz1ShZUPlIKohrtid&$GJ3z%9(8OJ!;vQ(?K2Y%hG;tBAzar4YC7|L7 zXyO4-b28Ax6`<-1(8NQa>MPL1W1!*mp~I=168kpCT;^&uYo4M z1*+ZvO?(Gb+yYJ90cwr|n)m^zdJi=5BT(@GH1RV~@dz~W3sCU{H1R7?@eDNaJ5ccg zH1P*e@d`BYCs6SQH1Ri3@eVZc4^Z(5XyRX>;xo|1|3JkTpoueFgOs-`(8OJ!;kf}# z+y^SY15G>tDt-V>JOnC!0!=&yDt-Y?JOL_x15KO->dpsf;yh6C7ii)sP;)+@iDy8? zf1rsMK*br}p{D;5s5l3jxB%2%0W@(5sJH~0cm>oP1vK#*sJI52cnehA08P9DDsF)$ zE(5jK0Zm*5D(-I;&Y(tC!mQhfQrvR6L*1{vj9!p2P(b-O?(N|oDFE=0Z{cj(8MF4;s?;g zW1!+E(8Lp<;up}wGoa!((8P0~;t$Zo3!vgJ(8MdC;vdk&S3v#s15LaJs-EFJYWi=1 zigTceuYsB)fF|AnRWE@iJ^?DOfF?c#Dz1ShJ_9OlfF`~GDsF)$z5(hU2Q={|Q1u>Y z;%lJd0cheIpyCl|;#;8RC!mS%fr@9KiEn|LQ-CIZ0II$MP5cB@ya7#o2h^MnH1RV~ z^%Ky&H*(? z08RV`RJ{b6_#LRY0-87v)Eo^o@h4FA2590hpyC#2;sQ`}9MHr+K-GJoiHkth2cU_| zK*b}_#J@nzNk9`7ods%fSOZ*Cawcj-+(4=0u}E-6aND>X9AkI1yubE zG;s&0_yRO>hU?Jw51Kd&RD1)PI1f~O2b#DG)cgZz;sQ|hC(y(tpyC(M#66(q+&~kT zfvSIiCawY%e}N|M12yLZnz#m3{SP#81E@H|N7VEm05yjLP22>kUI0zp1}ZLrCLRJc zM*&UT0jgdDP22-2Zh$5p0X4@0P22~n-T_TK2CCizO*{cA9)Knu0yQTBO*{rFo`5Ev z0yQTCO*{drz5q=;1FF6PO*{uG-hd{a0X3%sO}qdqJ^@`EYR(Ka@e-)|1!&?mQ1KOL z;w4aXHlT?&K-KR+6YqeEA3zhYfSPjxO}q!H{sNl#6sY(OH1Qg!IS zRlfsGoCB)<0GhY}RQv>*_yVXo7tq9)K*evMiHktZd4MLq2CDuAnz#g1{RcGh4N&zz z(8Lv>>KQ(xrvEKa^&Dv8Dp2(TXySXI>Lt*`4?x8g(8M*M=4haapMa`2KodU$6}LbW z*MXYjfF^zgs@?-l+yJUR08QKiDjtC*egkSw0-CrDRDA}TxC>Og08RW3)SL=5aSy2a z1~l;isCWmO_yedp6VSv%pz3F!iN`?27odqhfts@dO*{dregm3#22^|pn)nN-IS0_h zbD-)^poy12#V??Vzk!-_15Nw`RQv&&cm>p)7ii)?pz1%MiPu2Y|3DLOfr>MHK~4XE zpyqI(iFZKN3!sTlfQn0?i8IWB^ivej#95%?8ffBEpyn8$iSt0!TcC;0fU0*u6JG!o z_dpXDfSMD4CN2UMk3bV&0yQTAOK~wqn?TjSKofrgRsR7^+y<)t2b#D8RGi@}YWjZxHHQOD+ykm! z08RW2RJ{b6_!p?S0-CrF)Eo^o@gGq225908HzD=A1)6vO)EoyiaTch04>a)*sQLgj zaUQ7p2sCj4sCWXJxCB%@15G>vYJLHlxC~T%1)8`DRJ;LAJO*k`2b#DBRQ&`raRaFM z3^efss5uMJ#7&^;SD=a8K*cwpiKjr#*?}gW0Tn-hCSCv)KY=Fh05$&tns^CR{S7qn z8mRaKG;tTGIWN$}J)q(r(8L3v;y=*D8=&Shd_ztDAyD-kXyP$YaRD^(1gN+Kns^FS zTmely2P&?CCSCv)H$W3Ffr?w8iPu2I9ni#Ep#Jhe6YqeE2cU^JK+TCj6Q2N8pMWOb z0#%=ZCf)-TFF+HY02Qx56Q2SVZ$J~D0~PN;6JG!opMWO51S&oQO?(Yhd;yyH2B`Q7 zH1RD^@eOF=d!XVw(8Lcw#Sfr~AAyRWKodU$6~BNcJ_Q=iH_*f{K-E7$6Tbl!e}N`` z2P*ynP5c2={0Ex&3#d55chvMh1L__QH1Ri3^#W+(U!dX=XyQMh;tFWuf1u(TXyPol zAmzLPn)n>3do0kzIiTtt(8L9x;vQ(?3!vr%poxn>)kmO-%Rt2w(8Lv>;u&b-Dp2tP zG;tlMcmO0WHEui8P(8O0j&6$BFZUa@n08M-iRQ(DxaTloi4QS#X zQ1KmT;v1mm96%EffT}-%CLRJ6zkntl0~No4CcXt~{sT1e1gQEKXyQAd>OY`~XF%2e zKoie_iZlE`P5*nK=5U~imq67Epov#N#U;?h8=&F}XyON;=4+sdAAyP+poyP>id&$G zUx11`pozCY?e#zt?}3U3pow3BniGL0egi6=fF}L`DxQHR{sbysfF?cxYHtOa_zb9c z1Df~?s5u>I;&Y(tC!mQhfr`&S6JG%pUw|gQ1}eS+O?(Sfd;^;J8>oABpo#B*sy~1x zegGvs6aNA==LMSh1*rNDXyP}Z;y=*D??A;Fexj!T z2T*YiH1QWuaRD^(A5iy5pozbMs#ic0{{j`)KokE1HOBx={0CIM1)4a+ZAg9LfG$24 z((m>_6K8>{4?q*=fr>|Nk9`9fU3_x6PJLB7odrAK+UN@6PJOiZ$J}Qfr@va ziSt0snSds)0aZT(P22z~z5q>J0BX((G;tBA_y#m_6R0^m(8Oh+>JOlaTR_#HKofU> zieEqzSAd#x15Mlos{R3*xDQnP1)6vORQv;)cnDPd2by>cRGi@#YWi1!x`zWzJOQd+ z08KmtDlUO0t^qYi0Zlvys$K(4yaXz4fF`a3HOB%?+yE->fF@o6HOB)@+ybgT08QKm zDjtC*UIR5J0ZrTmsy+ivyaB4d08P9DDqevm-UAhHKoj?Xn%{vY9sm`efF>RS6`z47 z9sw0!fF_;*6<>iSo&pu$fF?cx>dqZ#;xnM)2hhYbpyr%F6Q2WBe*sNA2de%Cns@OY`~S3t#opoy=6n#1rLHT`daigTce*Fen?Koj2qRWE@iegG=2 zfF|AmHAe$Y{0LON0h;(3sJI21cnj1V2Q={uQ1u>Y;y0k;0cheKP;(;C#P2}WC!mQx zfr@9KiT6OwDL@l{0aagtCjJ2`-hd`P0cuVMn)nx}`Uz;_f1u(s(8L+;Kysy+ZsJO?TsfhN8LYEA;0cmY&>2AX&URJ;I9 zdw0V@6iP5c1VoDXQ?N1)DiCZLHk%!BkVGSI|XpyCB+;yh6C3N zsCWaK_z|eR9cbcbpyCtI#4kX_XP}8+fr>9c6Tbr$Ux6n604lx#P5cQ|d>hHRlGJ_z$T12WaAdpyDsk#ATr7d_WUtxeKWWf1rtTK*bsU zp{9QYs5u;H;sQ|h0%+nYQ1udM;yO@q1vGIHs5u&F;s#Ll2590IP;m=1aS5n74rt;s zP;n15aTTa|0GhZB)cgoEaSf>Y1T=92sCWjNxCvCe08QKiDqevm?f?~UKofU?ig%!i zdqBk}pos@S#b=<2hd{*_povF7#aEz-J3zx>1DbdORQ(P#@f4`|0W|R(sQ3vq@dBv$ z1vK#zsQ3*u@fxW312pjlsQ3#s@fN7~2Q={>sQ3>w@d;3IhX1JPe+pEb15JDmR9pZ} z+yxqL5@_NJpz0OS#8*JYHPFO8pyn8$iLZgGw?Gr$0u^^a6Ze6d5m56dpo!mss-J-- z9s^as08RV}RQ(Dx@fT3>4QS#CP;+*miGP5qKY%9w1uA|5O*{o^&IL5_KT!2I(8L+; zLCWn1XyP1D@fT>~JW%luXyO7;@gHd75>Rml2FQIZu=_7Epzh>A6PJOi7eEtNfr?9@ ziEBW`70|?WpyC>6;wDgW12l09sJI21xD8a?0ZrTmD(-Lt*`_dvxJ(8ODy=4haa zcRUjP;VfF`a1 zHRlJK_zI|c1}4<>zXmGKfhMj4HAetVd<#^)1e&-3RJ{V4xCK;P15JDf)EomeaT}<5 z3p8;TsJH`~_#UV^9%$koQ1t<5;sH?c2sH5nP;(N{#6zI!Gtk6ipyCB+;zyw7RG^6` zK-D*(iDy8?JJ7^WK+TzeCY}RTKLbs?1S-A&O}qjsz5-3W1}eS*O}qsvz5`AC4Aeab z(8N2S>QA7FPk@SFKoh?JHRlGJ_!Ox62WaARpyDsk#IHcj`G6+A0IL26n)nK+I0G|k z`o94+hXYM~4OG1Vn)nu|xCEN`9jG}9XyQAd>NU{B4?x8Y(8M1=&9OieKLSS)SMY;;$NWZ7ods%fr_s{6K8k;E&tKPS)k%O(8PJ5;s?;gzd+q{0!>^1 zs{R6+xCB)E2AcQ}s5uYN#ATrBU!aMrK*c|xiEBW`f1ru$K*bqYP}9E&RGb4%+yW{t zfF^DO6_-F0cY%s4pox1x#Wm2xeW2n7XySjM;b4I#&M+S`4(Wg<9s)JT15G>zDjt9) z&H^ws=feCJO?UXfhJx86>mTj=Yg8vfhJx7RX+huya6gc z15LaID!u?syaOt}0!@4ZRD1)P_!Ox44m9x@Q1Jt3;tQbSC(y(Np#HjmCcXr!{sx-( z8mRaKG;tBAIWN$}H$c^YKoj2q75{-IE&(-%ffY6V?}4i4KodU#6&FAgmw}oifhK+e zs$Kz2`~p;515I23YK{S#_!X#n3pDXNP;mz|@dr?G4>a*7Q1JjX@i$QM2sH5zQ1Jvb z@h?#E3^egSQ1JpZafXMGag16BV5 zP22^l{sWr02UPqAns@+IoPiBB{To2d=Rgw=fvOik6OVz4OQ4CHK+RD=6HkDu*FY1` zfQlQSiCaL;u|N~gfvR^v6Ssk?_dpXbfvOKc6R&`ZN1%x}K*bZ##2ujKXP}9@K*bBt z#9N@|RG^9bK-D*(i3dQ%JJ7^Cpyo_K6OVwZpMfUc1698OO?(PedUW@tFMx_4Kod`ZnsWk8d&VeSL0X0VeP5ca0y#$*06{xrZns^S>91S$_8&LHIXyOl`;udJ) zPoUxsXyPxR;vQ(?AE4p^XyOG>_e7wHe}Sq`KokE170*BuFM*mjgpyC~9;sQ|d325RHQ1KaP;uTQ$EI<>NfvR7DCawY%-+(4w12ty{ns@_L`~aGG z2UPq7ns^UX`~sTz1gQ88H1Qcw@ds$)bD-ic(8L!&#Xq2luYijGKoegB6=&c;P5&Cu zaNs}_H-L%@powpQnj?WGZUR-WfF^DO71ux$-vTwq08QKhs@?)k+yg4^fF|w(756|B z4}gjXpovF7#Us$fW1!**XyOS_@eDNa45)Ykn)nW=zbeqgbD-)Q(8Noi;vHz>6;SaB zXyP?c@fm31El}|VXySXI?pc8*-T_s=0Zn`YRD1`T_yMRn2hhZ)K-Hf>6Q2VWzknuw z1ZvI=H1P#c^$*a*S3t#IpoyP=n)3lod<|6n4>a*DP;mxM)bxJ_Y7PgQ_ztLg0W|Rg zP;m(~@e5FM6wt(vK-FuYiJyUr8=#3_ftq81CVl~`-T_Vg22|VwP5cg2JOEAn0aQE! zP5cE^JONGo2Gl(nXyR|6>I=}szd*$+(8TXR&1par{{dCsfhNxI7*dZ+KofreHD?Bz zI15z$0yJ?RsQ3yr@h4DoHlT?MK-KR+6PJLBA3zg-0X63Ynz#&9{RK2}6{z?PH1Ri3 za~`0HYe3b%Kod8Bihn>8{{S`T2b#DER6PS1YWlZ0c0F00!=&xsy+ct zJO?VCfhNuZHKzbgya1}c0!_RED&Bx5&H**215LaJs(u2RI1g0)3^Z{8sQ3aj@fN5# zE6~JypyC_Q#6_Uy>_8Kr09AhgOwaTTaJ4BV*ce*;uK2b%Z}sJH-{xCYc52{iFNQ1uFE;zyw38ffA= zP;(5>#7{ugTcC+wfQmbyi5o!8@jw&50#zS?CVmGh9)Tuq0yQTAP5c2=eFmEN3#fPj znz#kjoC-AYH&FErXyRX>;vHz>KcM0h(8T{h#b=<2vpj*+7YoqDZJ_R1fhNuYRlfmE zTmUM*15I26Dt-V>TmmY70!>^2Dt-Y?Tm>qA15I25D*gaX+yE;60!`cmD*gdY+yW~8 z15MlkD$c-zn*Lp&;v8t=9#C-sH1PnaxCENG12mi!(8NQa>NU{BW1!*&XyOS_aSJr@ z6sWiZns^RW+yhPA1?rvvH1Ptc`Uo`f3aEGjnz#qloD4Ma8mRgLH1QUwcmyKoh?KRWE@i{s1bjfF_;*HAe$Y{0UUO0h;(5sJI21_y?%C1Dg03sJI83 z_#dcv0Gc?%Q%E@(fhNuZ6;D7D=Yfi6pot4W#S75HMWEspXyP(Z@dh;U6lnN#pouF$ z)lWbZ*MN%8Koi%2iZ4JDH-L(-Kohrsif=#@w}Fc9KofU>iXT7|&w#rB1e&-9RQ&}s zaUZDo4K(o_s5uYN#6zI!U!aLcK*c|xi6=nCf1rt{K*bsOP}6?~RGb4%yZ|aLfG!So zrv#dK2~@oTns^OVTmwzK1Zs`}ns@_Ly#<Yf#7;s>DWH=v21fQs)x6YqeUa{x{J3{?FIH1R7?@e63;Jy3IQpo!mrs(*kc z{s1ce0!{o0RQv;)_zS4`4>a))P;mx+)b#%aD$ao>{sSs5fF{oH3{rkdpovd_`bz;# zoCT_015KO8{{R*LfhPV1 zD$XE?n*M)4#W~Q#8Jy$W7O1!cnm7kkTmem704lD5CN2UMH$W4YfQnn7i7P`~%dS6KLWhQ1utk#ATr3 zH_*htK+So8CawTg{{l^111kOjP5cMcoF8c7I#Bft!l>!r1S-yfCjJL%jsTjt1ysER znz#d0Tmem-VIgF`NdryX1*+ZvP22}6Zh3;)MJqMcj4yd>Qnz#nk90@e>Jy7)uXyQkp z;u>h;I#6>A(8Nzb)mxy6Ux11`potqm&GA4JzXDYsfF^ziDjtC*ZUQwY0Zse?RDA}T z_zS3b0h+i4)SL=5@i$QQ4QS$DpyC~9;xfhIl!Dt-Y?d;wJa2AX&Q)IAT-#Fs$Tzd#dT0~P;(CcXhG{sT>X3sjsz z3^o1lfr@jWi64N93!sS~fr?9@iI+g#uYe|g2C7~IP5c5>+yG7d22|VvO}qkXz5|;0 z9jJN_H1Qg!`T#WX2B>%hn)nl_ISFXuZ=m8CXyPqUa|+PJKS0%2po#y0iZ`H%|AC5k zpoufQf|TbI(8M{Q;xo|1JD~1afF{lZRlfpFya%d&1Df~*sQ3;vaS^CF2hhZ2pyDUc z#1)|87tq92pyD^s#C4$J575L7pyDsk#7&^$AJD{YpyEH!#2ujG4C1Ki-vuhpfhO() z6&FAgp8^dZ2{iElsCor7@d&862AcQ`s5u5`;xSP57HHygpz0ma#8aT^Jp(8Nzb&G~>Pz6PrP2b%a6s5pZJYWhC|HHQODd$L11j!;CVmGh9)KqP04g4VCjJ5{ zo`5EP1L~d(H1Ri3^#y3+U!dX@XyQMh;tgoxf1u(WXyPodq2)iCI0saG2AVhzRD1!N zxCm5y1)BIBsJ}L#iAzA$??4k*fQlbL6IX$XpFk7WfQny06E}d0-#`<80Cmp;G;tHC z`WI;8Hc;^oXyQ+x=KMetcYvyAkVH-Y9#C-(G;trOxB!}X090H8O*{fBu7D=~0_q+O zH1QaydIL1^H&FE!XyPeQ^$uv_8BlQ#H1Q8ma{|!B3!v&F(8Noi;t6QtU!dk>po!N& z)fb?NH$cTJ(8ODy;tgoxJy7uuH1Qu$dncfYPl2kRfhNwf2r|yL08Lx~D!u|ud;!#) z4QS#rQ1v^|#5JJe2hhaVK+QRUCT;>%e*sP00V;k2O?(H`oCj#)AyD-%(8SL`)qg+} z&w#4`fhJx86=#q_P5%v0aSk-`9;mngn)nQ;xCEN`5~#QWn)nTJB-$4& zz5z}A0hGT3O2gc#($NG~e*jH91S)<4O}qyxegRD!7Ctx7#AiU&!|aFI3k#nYXzGs~ zg2e9!G;vt?Fi4}O+W;t^14_fpmv{rIHwDnd=Rn;ffhIns6A}&zXyPu1UV+0$15NzE zTZs7vXyPIVA?hvA#CzJ_gUxY36Bp@(h>@0}<~)6EA>@Pe2ogrH2`4;x$n9F#BQl!u+)Y zO}!D+UmMWGVd>!jnz)7xBz>Gf6NjaT3uxjypzgVWCf)!Qe}E=FqZtw}FVMtc>EQ#q zcnd`R4>WODdSHOM7Zwh%^uU284oeRLXyUMNlRy)n0}VF?H1PltNP2*U6U<(iIR{|q#7Sojy9iNnIb0$m&${tam2u<-9d z6NiQW1T=A2_%A>cXOM-Yw-spODp@Vye6#^gya6h{15Nx5RQv#%ctkeDoD*o`d!XVM z(8PIiAnI?RiRVDYAE1dZfQr9B6W;?B|9~bAtCxSEi61`#DSu$$fu627py31)-v~`t z0%+ne`y|lBVfHGZiEAE(*lU0$o&e=rKxvr0C!qdvKod{Ng@l_2nm9)uL_7dZ99F(X zpoxn>)x+$E*$c~G8EEQdjzQdCfF=$r-x|=wZ$SASP#R`FEPqWv6Ms+yasLc7@swhS z_yRQXIWlj->2?L0_y?%^4QS#Ap!sVDnm8Dl^X(R;syE;|4N{VU(kbyE1-$P>SYZyaag@7H%A9;xT(5 z;Uj=1J_9N)fi4bh&nuvb!@^AiT^t&225922aI-)YhlQI1nm8=nJkZ2p=`8?F+!>l~ zBhbWQ=@u4Fu<(JIlYypQ4{A;UnmEiI4LHO*(8OWkKLJhr4m6x+poxp@hs4VQG;vtE zU4bSJ3;zx1;?VHlfhGDCJqb#3uxj22O;jffhHaS6@P#xo&Xj9fF`b> z2uZg;(8Oy_L(FG@%ERL80#uv>OG#uyC7!rr!Q6q#jv-CJyVrtUwco^>USh>9bO&jF=j z;uqRG!RbK&P5eU}L|g(*{0mfE0Zm*7YK{h)xC>O=08QKjDsF)$?gJHfKoeg9756|B zKLQmGKof`Mmk2cRj~5~74Hh1-aDat#2AX<4sQLmlahQD-XyPz?8_>k{FG1{`fF}L{ z%AWzHVeS#w0}1~HXyR9PK*U#|iQj;VZ$J}Q*a=a;15MlmDt-V>+y^Rt0!=&sDt-Y? z{KamF`8UwSS)lHJfF=$LpBHH28!tn`2NoW%aDc_j4>a|MpyA1&f||}@_Hm$z!|WA6 z6Tb$vR{>4D0Ls^Z(lGbH;>7?>Jmmx=94yepGoa!QXyPlN;vQ(?C!pd1XyRv};t^=# z7og$^XyQjsLEMvpCjI~_4)Y((U$AhlKvUm$1rjd}XyUMN?m!cVh4Tb7@!G2pa~7b9 ze}M8=KxvqJVBx$0O?<{3h`)BAiO+$GA3zho02M!hCjJB}egRGV1yuY7n)n;2_yaWY zfV&X)yg(Drfr`WY2lE#!oPVIHH@yZ49|lz%=^0HN7R~}_;)>TH<|v?vSExbE)j$&u zk?jJP{|0E{5m0dpH1QayxC5Ga3RK(!O*{uG9)Tu40qULvG;x@FGSI{;pym{yiPu2I zE6~JSpyCZ^;yqCD325RgpzfK0CJuAY0yOa%P;*wGiO+$GZ$J}Y0u|qZCcXwLegaMW z0MtDf(8OWxxq&9W18U9#H1R!9@fT>~N1);#(8SL`#TlUX!_w^yD4zpL!^C0k5kM2a z0X0VgP5cg2Tmen|2~=DIP5cd1+yYJf1C;LorP1BvfhPU~YEA%}_#dcv1e!RD93)>P zpo#N9#WT>vVfnEDO}y|1BtOFPAIzPwa-acCy%tn`2bws{K3Kj%H)jT#`q@x(7NCj4 z%z>qMbaOVKsec4DX9t=%%p6!cMK|XJntJVnz;8@$oQcJns|Q&WE|1~O%wMo_ zH2_UL-*-s)6M-fU8*fQK6Ni=O8EE3apypJdiJyS-8=y4IJsp!E{^~#zcbE(jpMWOL zF$E$%15G>zD!u?syaFn|0!>_HD#V-(XyOl`;ycj9UqHnVpoz0ggO~&JAIx8{aK3=1 ze)$hbINv}MhlTS4G;vrszd#e8@)Kgt2Q+cmy1^f4;;?mt44RPi4s$1L-Jk@T_z5Uq z0ZPNvf2o-S&KDYJ;w)&voe^Sh1)BH`D8B(p!`$=b4kY|L(8c#d#3!JM|A30m zKogfa08zgHOD3p8<3;^Acn#G33(&+HpyDgg z#J51jH=v21fr{@y6TbizKY%8F1uA|5P2A=vB%CjxiAO-iVg7^p3l`1~(A0~tLc-?- znm9Z?qlv@9`3IUfD;vZd4jr`g4CM)06NiO!1)6w2 zJ0zSt(8O;*`4gZtES%x#8BJUR>iz|2;yO_A6=>oCQ1K0D;t5dk9cbbyQ1Jt3;u%o! z6KLWmpyC(M#GgRLVg7^p3l`1~(9}zEK*Hw*nm9Z?qlv@9`3IUf7bnCV4qdeL4CM;u>h;Iwv6M%>Yf@1uAZVChh?hcR&;Ofr@*eiT9j@m>+;9 zz5*&9fhGfJUyd{Z-Kgh z0h;&@sQ3yr@jFoQ4QS$TpyE5w#6LjA51@&Efr_6%6Aw8B3FixF;ssD~nEzn@f`#(~ zH1%@aknnkdCJs-}XyUMN{(&aW&jT@sLk}%IL-_(w8s;8&dPWnkfx2G-O}qgru7M`L z11fHSCVl}bZh)>iz|2;x16}6=>oaQ1K0D;uTQw9cbb; zQ1Jt3;tf#o6KLWOpyC(M#Q#9WVg7^p3l`1~(9|pQLBi(+nm9Z?qlv@9`3IV~C_ls; z4t=!r4CMW$3Vpm(8LR%;udJ)B~Wn(H1P_kxCff} znOo5Gj3)j9DjtC*4h!c5H1P${@X0_Eho@&WaacH4pov!qK*G5LP5cIwKLJX^!Wo{P z(Zqj1`;`mO#Q#9WSD=X-+=Yb01~hROsQ3;vaSy2Y0W@(RsQ3vq@s4{C^Dm%@FM*1~ z{0H+FESw*pslNpcpBHH2@bru(4h!cWXyS_nA>qtnfR>)2d;us8a}PW{qls%ggZN7U zOfJUyd{Z-Kgh0h;&@sQ3yr@jFoQ4QS$T zpyE5w#6LjA51@&Efr_6%6AyR}iT4X=;yF-pnEzn@f`#(~H1)Bj?gtk4KodW~XAKq)Kof_lk3bWLsZT%?S7WgNn^S=%u3-cT#|AX< zHQiId>O0WHZ)}5zFF+HAnX>{-yaK9z1Dd$Wc8EDU(8OWxIDjVp0m?rCrD5q!0_y$? zXyPz;yg(CgfR2a5%!8S;r5G|E{sT?@4XC&P)E=06m^m=}Vd4j%>J`w`bCf{LhlLYN zJuJT%ps7D24oT-0XyPz?Jcn?%O16_P4M1298 z_>x@^@d`BYg541D1~l<6Q1K2l@dOf@UIJCGfF^Em1Y(W`nmEiI25905P`(9}hMC_1vs6W;?Be}N``04n|g zP5cN{{0Ex&4X8K+)E}_$`2rQ^Kof`6%K~WPB9f4BgM|mo99TFjps7!RhO-8mILtl+ zG;x@{7HHymPo=p!^L`8Wvx$ z_Wuqv@egs+z~&r46aNAgKY=E06Aw{;0ZlvwDt-e^JOe8J08KmxD*ggZ`~g(_1Dg0B zs5s1jFn__)A%iI-zrw^T6d~!B15F&({ue+KhowUaH1VlQ5OXxp#4DhD11Jr%7uNo_ zKojRlgM^y{nz#T|+yhPA11cVXCY}Hlk3bVofr=-fiDy8?Gtk6YG9m6MKoeJhio^T| z^A{|f8_?9dD?`Gk15F&({-1y*4h!cQXyOSf5OY?biT{A|H$Z8ad*JCAOai}>OXyO%6z5$emxd)z}(ZuIK-S2=Vz5pujfhK+gDjt9) zeg!HXfhK+fDxQEQeg`U^fhPV2Dqesl&XEO4=P>`l`~?f=1~m0SYLIa5Kof_jXEbqG zIL|;6{|q%}1)BH|D1QT#hPelxp3%fbpzc3_CN2RLKY=Em02RN0Cf)%Rzkw#+0~LRO zCO!cw{sK*$B^wf+AJD`VpyDw9!TbdaX9jcB^sK8631<#8ad>)06NiPf1e&;)2E-f< zH1P^3-vCO(+yhU~XyQ6h_dB488$iW9(8M#K;sI#l4N&n2H1QUwcmkSu2UI)*ONtzkwzWQ~v;m_zN83AJD`V?nC-h43?b{;uE0a3TWaNpyC>6;%}hhF#BQl!qS5Un)=Bmka%=J6Nl|L z4?q*&0OdzOX_)yRp!O!9iTfOY_$vcVd!UGl#uyEdirassdqW%DyILy8iXyPz? zFQAF{K<#~iCT?H_Nq;ZU#MeOm^#M(s<1i$AexQk$K*brL=E3~+0V>XcCZ2KxVvYcs z_!g+R1e&UW z>C8YAhn3F@(8OWo^9nR^SoypGP5f~!Wc*|Ynz&w;Be)zpfF{1K+663r0!{p|lqXpH z0-E^y<&b??H_*goGa=#p08Jd`o)>81n)Q(K{{xyh%soHQ#9{7Xu!iI(SbBrGhXYMK z^cQ4&OaM(B=1vJTahN+5(8OWkrhz67Gsgf;9A=IMnmEiH2Q+b*e?8E|Vg3z36NiOc z1e!R^zX@pKuzAJ|G;!EGV*#2tY@V?KO&m7Q*nlPun`i7m6Nk++PCyff%`+}Q6KAl2 z#On$)@d;~Yfz#mzH1Ri3@f~R55o;mp51@%3fr_6%6W3V>QGWqVyap~ z9y=lCd_WWD*aH#&fhMj36^Ho`J)Ak9{)UMcI6}fl08Jbg&Jt+iuy9sD6F=t!F~M~ z08JbgJ`rf*cf26s0}BsWIKbj115G_MRDA)OILy8ZG;x@{4QS#9-Vl2`(8SyRL;5ch z(8OWqIm|#4hn>T)08Jcr4#NsGao9Nw8_>j)*FgGrJJ7`Apyy^BKofU|o`Z1$T^xGu z#04~Qm^*KviNoCa08Jd`&KGFnFmpbjiNnnKfhGiR&vu`o98b z;v1DA>l-D|#2KeT&Mi?u6NjnSz#(pcL)-#Q+?>-NT<$rbi3>u{8}UFBho7T@CJsMG z1x*}&jtZJM{2UcDarikZXyWj5RM5oX=cu5G!_QGc6NjIpf+h|>M+HqBevS&7IQ$$H zG;#PjDrn;Hb5zj8-$T>M0W@)@*O2sc0!^In4rJZV1vK$#Pa)^4+&~k*5~K@`-v?;o z7op|A3pDZXb&&C{4`||Y?T~SmA86vY!tB82b2y@=|Ho?~`CS4{{6BXPSiJ_CxD$gB zSlj|lyk!DpoZkaYy!I*N{G13h@mbLHoPj2O%M)@APXU^^FgGOqSD=aC$%l+`~sTz8>sjVG;vt{@&HY|Edf%$z`_F-4zPOd1Dg7tc!>HRXyP#Y7@Sbk56oT; zG;#Grh&d8y;u%oB0+fci2No|HXyQMh{xv`o{{t1bKobv9hQx~lns^UX+yhN~0#rNz zO?(PeJOWMpfEvX71T^tGP;r?5VE%%Ia{-$AW@z|Spozo6xdBZa7S0`L;#ofrax5H1R*`5Pxkz6KBwXi0?oXkAR9FKog$;6+eL{J_Ra%0Zn`cRQv{- zxQQ0T-Un#n0Z?(6|6u-th4TkA^+%!M^8-yB7S0ULIMOqk_}OGgI7^_3XF&N1P#WeQ zSU78-iN`?QZ-6GA02Q}D6F&eIcR&+o(1wJM2bwqwR6GDpoC7KzfhNwQ4>2bJOi3dQ%FQAEsK*evMiEn_4KR^>d0~Lq)59TjeIDbG>uapZ3pC4%AuyrpCt~k;& znz(r$#2g7U@eC+m0ZPN%15eLr;y0k~H$W4=0~NPG6Bn2QNmmYN;wn&a4>WNNsCWRH zxDHf20!`coDxQEQ9sw1H`48qVSU4A;secL$p9(Z_czQ+?ho@&Wan1rrIL|;6e*xt$ zfYLDcz|%9DcnZ}08_>ivpyE5w#CxFP2hhalK*dj>i7$YPUqBOI0u{f3CeAPw5|0ni z#ATr3F#o~)1q5CY}N1D?n+Od*JCAP5cDZ z{RU{_XQ1L1XyObrAo1dWCN2UM_dpYufQkp8iOWF6BhbWkpyCN=;vP_OnEzn@f`xMd zn))S`knpKM6Njf~G;w%(MiW0-1usQ3dkah{ow_=Wio<}X+{e?U`TQ4I;7A86w6 z^z4ZvJ)?>D)j-UVKoie^@)e*o%sue*j3zDtb-w|cxC~U>0!=&xD(-+L-UAi)Kog$; z6%RlYp8^$+KokEl3lg3QXyPKXA>uIq!Tbda=K?hKwzZJ(sX!Blr)M;AczQ+?PpX5M zGXqWh1(d%4O2ga(3+EN+;!yW*KoeJiitj)Z_kfBYKogIEil0CekAaF`Kod`Zir+vJ z|1$>?o)6H(CFVlJVg7^p3l`2F(9{doL&E0=nm8<+8N6_$XEbrM28cNlXyO@Az5kziN`?2Ji!LA z;xC}$JJ7@x=0Vcc0W@(7sQ3vqaT}=k1vGI7sQ3*uah3%T^B+6#*v=U#LqWF%#lD7&w%n3pft=q@bru(t^;+y0h+i0RNMkhJOe83 zfF|Am756|BZ-I&jpow=t#Us$fH!OsNa{`+98K^kSe=vW+!npuVeO(JAd@9hy;prJo z9G;%h#HX}E%$b2E{sPKh0HtB>fsa3EM9jN#YG;xtdkZ?GFCawb&KY=E0 z02RN0CT;>1zkx2k7-IedH1PnaILv=Af5F1}1Dbm0Hc0sVKof_LKl|WF&uHRP+9Bph zpowQd`3g`P<{ntNp@AkI19iUvns@?K+yYH}3RK(yO?(AZ+yhN~4OBb;O?(4XJOWMp z08~5yP5cg29OgfmzhL29fTrG~0}?(JXyUMPqXA7Eo}SUf<2oVc%s>-=0p%}%(lGbH z%8eCh;xC}?-+(6m1}eS-O-#`;@fr>vs6JG!o zhxrfYFIYH#KvVw@8a_YJ#9`$IgD;Nsj3&<74GCunH1P~5Uja(P+yhU~XyR+2?l(Xa z-vAZ2Kofrg6?Z@r{{a>EKokE16%RlYXIKh}uLv}80jPKanz#;B9OgfmzhL29fTn&a zG<+)1#Np`~O&p${(ZqN6K*D(jn)nMSe*u(+xd)z}(ZnsF?%#kWZUYtHfhL{+6+eI` zUH}z8fhJx86~BNcUI7)qfhK+hD*gaX`~y@R=0BLfVB!1$O?`APBz%6LiNn*gACB~l zCZ5y>F-HPTJOj#CfYLDcz|%9D_#deI4ba3HmO;{+1)8`CRNMhg+yg4^fhO()6%RlY z4}gkCpou3y#S_rPYoOvV|H1qP3+Dnf^-TSc@Tou(ho@&Wad>)06aNb}X9k-13n+g9 zl!mzno}SUfJD~30fF|Ap72km-z5yzJ08RV=RQv>*_z|f11vK#!Q1KgR;wsA_@%sQx z+yN>M^B>G#uyFo>roL$cB%FVsiNn*gKaTW_CZ0DDVvYowcm|ZO0HtB>fv0CQaUZDr z4ba2`pyC#2;w4aV2Q={(sJI83cn4HG08P9HDjtC*zGDR>oDOVunrvgnJo}SUf;prJo{M{r-IL|;6e*xt$fYLDcz|%9D_yef>H=v0>fr{@y6X#e7 z35Nq{;u28t6KLWxQ1J_B;tEjl8))JUQ1J(7;&Y(lF#o~)1q zcmSICAEiAO-iVg7^p3l`1=XzHIp!>0mG9G;%h#Np`~P5k~;NI1_x z6Mq5aFM!f8_oP7GxdKhR1uDJ)P5b~xC5Fv&w5Dsc%X?3K*a;l#6_Uu5oqEe8zAN+potei z#bN$~`3n}#1!(H8Lc^y5O&p${(Zu2D8BP4c3`jW7KofrfZJRX=3iz5<%K!Cc6B5gKUXVWp6D z?*?e%wIvX9EYQT=3nAw`IG~A#9f#~+@IVvK{O87l4ZYKofuC1~G>L>JM0c;efiI15F%O&Iq81Hywhce^_|H%z@=Q1vK?L z4novxpozomGe8rE*=vC&ei>@71Dd$kNl3c&Koied2-&w1fF|x|4B7t`fhKM_9g@Ei z(8Oo=LH6Thpotf&K+exEKog(%NE@6UD$vATPD0L~X+RTyA?^cK-+?CH*a#^HCZLJ? zPKBHUGXqV0wgF`S+5$B3`Dzwm^H-pW`~HWN4;#?LbD-g~15JEA)cgZz;;?;cC(y)U z`_wL=iNp4(-9QtE?NfVzCJx)D_5w{DwomN?nmBBq+7C2w*giFe5J*0TrCZoOH4Zd! z*giD@G;!EIH3c;B04QGrO2f?O*tP;3{sw5`K2UKBH1QcwaR)SU*nVvfH1R7?^)UNk z_QLXG1e*F2ry%(;0ZkmXU%LQJ{05X?0i|K)OT4KA`>O#>`~Y(USiA#G{E6^Nu=oTt z@e>bTfW>E^i63|iF@FJ?_ywr=3N-Paw)bFjHlT@%bV9^;po!-^gxGrkO}yeRMEnGr z_>t0=VDm4ai7(-Y_zMc^vVFGVdkF^ zf!ND|Ce8sB7eEu|fr?9@iTgms70|?UpyC>6;ssD~12pjxsJI21_!6kN1Df~&sJI83 zIIR2+Kogfe0|_@+c)-E|7S0K1>Q$lPoPj0|v#$VMT)`b2{uOBAhoSa%po#B*@+UxP zn0qcj{WSwkoIw;4UklL0Eui8n(8OW+eFK`f3sgPKewe+ma5#Xbp64ti+)kj0!}9wL zH1QLYAnEM^n)r-atHA011)BI5sQ3po@rYcAe}ABfw?M@i!XWm*+@CS69&A1bn)rhA zka9o(P5esZ7qEH>H1Q=+^$KX>YoOv9XyO~7;s$8qTcF|=XySXI;tpuyB~bT!pot%V zst-UDKLHhwKohTknv;Mgeg>*O15Nx2RJ;I9{03CK0!{o5RJ;LA{0UUN15LaJ>YfQ` z;xC};XP}9HfQm0b6aNAgUx6mx05yLDn)nZ>`Wl{sT>11uD)Ej+*{8pyC{8;&-Yb_jd@O ziR(bsOQ4DW+4>2bFBH(k4WQ~Z(8L*fAm$sOiCaL`TcC;CK*b%<#9g4`9%$lopz#}k zChh@MAAu$w02NO_6JG!|Cj(791ggFOO*{rFUV$dQ1ZqwLns@?KeFvI&22^|kn)nK+ zIWy42A3*QTS%4;90ySp^nz%#!XK;LNKoeK#fb1XKfhK8pO66Y*AF!DCy7(R{$+?jP5&35;mLs} z9-sv=M*v;C7GjPBn)nAjhoIpyo87iGP5a z(}6AyHD>~v_!+1Hh~*JqMaN!$nB_C4eR_kqa?L0!^F+s$Kz2oChkdfhH~h6*oW=*SQ5LPb|>HGYla1 zI-rTS_(8-y(8OitLE3=fRJ|`Mt&I&Yf8>spXXyPtV@f~R5 zb3!5J96%FSSq$;l2{dsJs5uwV#HaW}%(;Ok-m?*6&I2^@oHU5~7ii)kQ1d^aiK}$= zfXn$GXyOS_^$by{=|3V3QciN9iGSGyagP9+xJNp~JrZc*IZ*Qz(8M#8ApI8&H1P_k zdIL1^i0P32hy|MX85xK<4rt#H1QOuIT>i; ze`@E0!?^%WdJUO?1qpovd-2@y9y6L)z75w}1Se*iV#0Zm+CCghxX4>a*NQ1t<5 z;vb;m5oqEsJRs&Ipo#y1s?R_Z|1k*?ZUt!KM>-+qRG^7VK;yjuO`PKrq@L|S6E87^ z%$rO=6BmK1pMfSW0To|>CN2XNUx6krkPpdU8_>j6pz3#^i7T9&2afjxXyOJ?^(WB8 z&vZb{zknug0#$zlOa)|&~l6+1~vWrK-F`g ziHAVN1<=IzK+Tar6OVwZS3na#09CJnCY}IQZ-6GA0u{GF6VHK)JD`adK*c@K#Bbb$ z#8&{C_=y5YI7gs~*FeolKoegO1iAk@15LaEs=feCe8yIY`4wp5El~9hXyO-&A?iEO z#CxFXC!mRY%z?OP2AcQ;sQLwH;uRYq=C42#U$X^Lzi&VnFM+7vfhIl&YW@K9Bg7mHH1Qiy^#*9-EW07*TcC;GfvR^v z6Mq5~_dpYW0TmBG6X%hIxF-TlyxvSy!n{xq8d`1hzJvY$AMWE(CKoggMioZY;SAdFt zKoeJiivK_pS6B`iZ)Au=P5&BD^&Dv8AF3ek6hIU2SOGCd0!_T30is?3P22=(z6P53 zkJS)!4A8_Kpz1Bq#A6yE<~yK?yFk;Y2f8@aoB%ZOBhd62fhPXs52W9efF>?e0kJm& zO*{ZoNCm`lDpou3y-QR&G?xEKUPCpaS#6zI=&Oj620yTdDn)nGL zh&e0J#1o+AY(NvwI0oL#t?HF(8Lcw&FMfBmtcgLGXYKf z1=O4wXyRv}<}5%HmtlgKvjR>0#wkdm;8j-djU^&V*AK5US2m;f|!7pOTAXyOZaA?g#*#5trP z;u&b-9#C@%(8OQdgT!wIn)sDkNcc3MiTgm!=|B?~*#_yKPCyfnk%z>~3^efos5uMJ z#2fZQ%vpgZ&Z7u1X9Jpe2-KV%XySAJLd-dUCjN&LGM;<_P27eDB7Ol)yg~>fegjQ> zjTA)u0h;&)6^J`upoupefQ~6W;+>h zRlfsGTmdS608Lx~8a^k`#8sf`FQAF*K*evMi5o!0AE1ewK*e96iQ7QMKcI;_K*fKc ziI>cQq(g=j)b#HIRnLJYE&}zJ0GhZ2R9pg0JOFBr0-E@X7DzhOKobvvsy9FrkAaF? zpou3y#U0SZQ=sA=XyQ3g@c=aO0;qTdns^CRJONF-1}dI`Cf)!QFF+I5m<$Q$3N-N^ zsQLyp@c`($uMRZvE36y9?eGa`;xnM;%s>;rvI`Q<3(&;pK-I566JG)q-+(5*U@yd+ z9cbcfG$8fh0W|RyP;*Y8i8ri(m~#P5d<|6n4K(o?%OUC?powpRs(*ndzQ7RTo)2i^ zJ61u=`GF>W0BR0HDr)*a0u|>#6F&nL7eEug02P-&6Tbo#S3ncL0~Oam6Mp~|H$W4A z0u{GF6Mq90cR&;W02TK@6Yqh}%LJf_|ADHHKoe)U1}Se7(8N2OAoWfLn)rm%kZ>+Q z6Ayrv4;5(Qcf26xG@yxZI0rGO15G>uYR&{Sah6WV`1}ksaUQ7q7odr+aEF+`0!{o4 zv^}-~P5chDJ+=c)yaei=18CwqpzW~}XyOu3_gp{|-vDio-9Qr$fwspUpozCY?R|kJ z9s+HTeLxdmA`NLL|3DL0fx3qw4K@8w*#`+94m9y6T9E#T0GhY~)Eo&k@rWo$eX4*i zz6#QB(m)ee2#2UQKog%30TH)A6W^l(agPICW1Dd$YGD!Wk15LaIYR&;P@ikC$PN0c*K-FJB6Q2MTzkwz` z1uFgkO?(Da`~{l$0;u>0H1Q2k_xwN;UjkLnkdB)E*FeQN(8M=D#RbsB1$IEvvjm#B zfdV8SDWHjOftsU%CZ2H+VvYft_yg#;gaw-T4yZW}XyPpFkbL2RCjNsPA|8MyK0y#7 z9)TvVBL)#qKoh?q4H3^k6Mq5?=K?hG8~-8w>k2gSE!>cDsR2#A!w3>?9cbcnpzG=< zpo!lRg5>KNXyS8@L(E@*CjKH5GETSxO*{fRuDAhB{0ualcc6)XnFcZE0GfCYbe#4C zn)nTi&mYeXU9575M)K+So9CeHB+;+_v^;(NYB#DAcPe}J09kb#>1 z=j?>o%Yi0-;Wk8E08RW0)Eo&k@fTkq>J`w$FEl{L{WQ?Te?ZMKKoe(q2C3gI(8MkL zAnC*bP5ckk91k>c4|&MAM*x~Qi$BDi2sCkq>(KTOnz)5CWZo(RO`Hd+z5q>p$w!F! z6=>pLTp;E&povRB&FMfBulNKpX9Ak|1~-T~Gtk6Upyn(<6Sw#bF=qvuxQHjjoDFE= z22gW$po#N*ftYguO z%=v&O-r@&w&kr>5nAwnV42De9^l$PDVh#tIxI+NM904@(7^r(B(8L9PL(EY?6aNzk zF-HSUJOk<;12pkBP;)HM#CHTk%yB>yFMzto15JF*ABcMb(8NnZA?8G&iPu2QNk9|t z_zN*715Ml@9AZuZns^7)oC-AYlz$L&8qma9>>%cJpovd`nlk}ST!$6X9-DzCe!w1L z&H^;?1yFNVpow#^LCo2JCSKzRF=q#w_!_7=2hhZyK+QRUCcXix{sNl#4ygDIH1R!9 z@ds$)2cY6F(8Nzb#Xq2lpMi@1Koh?J6=%poP5(Eb;v8t=cc9_|XyOjt>%r||2{dt; zHc0#`pozbLnxlax&eIDq#{f=6IlqGu(ib=K*Nq4xJEl zBGANjpyni?iL*e>$v_i7G6`Z%0h+iC)SL=5aRI0~4QS#96Cmbvpov#_L;N)XOJX<00H33b$ zq7M>2GtkAM<}5%H{{eN+3N-N=sQL|P;w@0|9cbczpynJv6YqekKY=Db0V;k0O}wH2 z;;$QM;zuSx{Ph4$d{*!@h4FAE6~Kxm_y9pfF|Cv9^#%IXyPxR<{Us1XRw5r za{^8L!(NCv7tqANK+U;IWN$}8E!)A_YY{|6YL@8{6G_5^9o`P zLoRCi-{1gI&w(b+12ta&P5i=dh&d8y;stVR!Rb>0O+3O2V!j5N_zYc$dIL0Z6{x)y zXyPTo5OW;R#P{e!%<(`I-(U(64?q(S(1NskBhbV<%pmF$(8LqcA>tWm;tbjla|+PJ zO_U-1?g}(<9ccf(0ZrTi>fa7DaSfd8p~X11ipeCf)!wM*vM+0NT!%Kof6)s#ic0?}3VIpovd_iW{JbPl1YC zpo!0ciaVf*FMx`BpouSmiU**HuYrn3powpQiYK6n>p;iDGtk8MK-CwZi64N9SD=Y^ zK-Y^lpoyP>s_#G(p8{RKF#%2d0#yABH1Qiy@daq&cc9`c(8M1=#W$ddzkrJGKog$< zO(zG?#NR;GpFk7;0u{f2CjJ8|egjQBhZVAp@d27R%PmMb{{l^XP7oIpyo87iQ7QW-{?RSKLS-h0Zsf2RD1@S_?-n1_bfmYzW`Og0!{n| zRD1)P_#LSD4m9xxQ1Jt3;xC}$C(y*dK;3fzP5gxdWS;H@n)nx}ISY;0IFUAO-0{biDy8~xqv1<1-icO2AX&dRQ&@q@e-)` z3pDW>=(?Q`XyP`|bFqG)iB~|)VJJdP{|(S})EsEyTkIg~QUuV%YoO*xpot%Vs#ic0 z{{mfyrhz8j0X4?}O}qyxZh|)O*{me4g=7{F9bl=p+%sH&w;K( zOF$D(ftr(nCZ3@SSr<`&CO!k|{t7hl3D9$>8qmajpzEVL(8ODy>!2o}iTgm;Sy;Q^ZXlq$%0!V5IfRZU7ZufhKMN72kj+ZUYtHfhO(%6+eI`?g14)fhIl! z>aPoE;yzIIH_*gGpyChE#OFZGd4VQga2c{6{{xzM0@R!zXyOZ?<}j3?rhkKL5OX-t z#B-qL2%w2Cftn+MCeCsLVvYiucm>oP4K(o;P;(5>#9Pim+6flu;!txO(8M{yAnh>^ zH1U=@5OV_1#8o07>Lbv^w?N&KfF>R=5i;JJfhIl!>Yf5L@f}ceD$vCLyoQ+5fF`~K zYEB25_#UV^6VSx}lh8t z#3w-4F(sCWjN_#NoF$^tZT zj!TgBhZShzZ=mKhpozbLuB+@o6K{a7tDJx){sU^x3^ef&=(@@UXyOIXb(Jg7#98h_ z>cI_Y;(uO3+`j`&d;@e{@cc6)vK*cAZiPu2IXP}8UK*blJiO0-_?B8F3 zCf);8zX45r0#tkln)no`_yIKWIZ*KvXyPvOAmbYs(8QN$Lizg0HBj{*(8RYu#eblQ`#{~pP>!1ZJ2pc0J8+RQHAezXT;>eqJQ)Qv zaSm2U`q4lWKLa)208RV}bicU;n)nTy&w;AiRHbTtlKog$~vIEObRzsx`r z*Vqj)X91e{5~w*V(8SL`&Dnq^-opcF_wGOww-JJfA3zs}jz6D36F(sgQGWqVda*3Q1uLzsOkR$H$W4A0u{GF6Mq2}cR&+=0~Pl`6aNAg4?q+D0Tqux z6aNDhPe2oAxeqBCTm>pV15JDm zG@KWpi7$YPuRs&mfSR)bO?(AZ{SGwoHBj*bXyQ6hb55X%Z-J`6fF^DLReu9b+yW~8 z08M-c)SMS+;xkWVW>h)|1XX}$_)-Q@c^hf0%+nrK9GDWfhMkT z3Sy1|ns^M<91S$_3}1*j2590O(DN8A(8M#K<~X2j&p;EO z0~KF@CVmBK&I&Z~1yJ=H(8O0j#dn~I-+-EP08M-iRQ(Aw@hwpC3uxkZpyu2_6W;+< z{{T(=095=1n)m~#IUmr(k3iM`KodU$6=$eMP5)1z=5U~iZ!m%MQv}e&Z$QnFKojry z4~cgLH1Ru7^%`j6PoUxkXyOYPAngPTH1QWu^$uv_AE4qMXyOHo5OV_1#J@n*N1%!S zfr=-fi8DNamj7ttEKu*xD8bN0-CrBRQv{-xCd1H0h+iE zRQv^+xW+6a)yP;rJ@)b#%ZD$ao>{st;8fF}L{DlUO0{sk(ofF}M2 zDz1Sh&hQXYt{R|;vp~fy(8PJ5;tpuy0#I=eH1P!%koqeCOi9pz3#^iD%q^n129GTwyxIoD*o`F;H_Zpoz0EL&Et6n)r>< zh2ZhA2Wa9MP;*|Oi6`8GxaR|!xQ7m8-uwrexCFGF%ut7#{!5_dbD)V=K*a^n#2cXE z5@_Nk&mitmKofsZ5Al}oucOms-1Df~}sQL~x@ikEK z325RQpyD&o#E;}b{Ivj0d=FIp3N-N)X#U!OCVl{_eg~TP38?r1H1Q0mIVaG>JK7-e zegRGV3e=n%XyQ3ga~`0H->`@H>jj$l1E@J4(8QlW#eblQzkrG})T5^V4^VLqH1Ptc zdj!zLzd+SXpo#y1iYuUrmq5+YKoe(p1TFv3#5thi7HHx;P;mz|aRI2f2b#D9R6GDp zyaMW;2sH5;=sZXQnz#zooD4Ma8mKu1XyQE`kbF^rCcft)H2tHA_dw0*KofWAf|xS_ zO+4ok#GDyu;&Y(pEI<ioZY;zXCPq1Df~+sQMph;y0k;42`Ji{|;1~15JDfbbY1( zn)nN-dI>b~EztFu3TWbQpz1Zy#J@nr4ba5zK>cNbCjJAe-T_UV;W4Bh@jw%Q05vB7 zO`HX)J_1dg2P&R`CjJC!P6nE|091Venz#g1yaG*J2fDAn0Zn`cbUi=^nz#zooC#>+ zPoV1oW}u13K<_hMfF^DLHD?8ycn5U-{01~}7bi$Q-GL@<12yLWn)nRpd0!{c#2KLH zeO*8k_kfyn15G>!dfwLqH1R#I5cj-56Ayu!^8rm<2YTMu4>a)#cZfL*O{nQV0cs8h znm7aWye|PX@fI(LITC2%IZ$&H(8ODy=Y46QiC=-vI~bseS3u3NKohTlp7-T|CO*Lz z;vNq)ah?T`@uC1UaSiBsUlC~HKK>AM641nZpzg^)6K8>*(^Y^b&H+8|s{&120_vUy zH1P*eb2`w(j|4&7GXYI}0n|M+(8ZzWeJwx}ZwP^yvjR0aXyP_u z5OWToiSK}#a{^5~0(#!p1vK#tJIFbKH_*h7K+So8Cawbww-;#QH~b*xd_WVw05#_a znz#Yf9EN7p^dFG{F^2<9{0`I{0W@(Fs5ug7;vDlK;~NTS;xC})XrPIAtcIvJKokEl z2O@5PCjJF#jsu$b52&~Yns`n*WS>F+nmEf7NPQ83CT;`uR|1+i2UL9qnz#T|yZ}vH z1S(#ECN2RLZ$J}QfQomZiK{@xC!mRIK*eXEi5o!07odroK*d*}iCaL$H=v0-K*e{U ziMv3>51@&AK*dj>i3dQ%FQAD#K*RY4ns^9Q{R1@d7^wIQH1Pze_y;uc2fC1a`U6co z2dbW-1ugymh4e2t(8LR%>IKlmE1=>MXyP7Fe<`4e*Fe>4pozCY#SPHJeW2!8pov>R z&tY&t6Q2Mz#{*3~0BTMEn)no``Uo`fIZ*KgH1P#c@eDNaB~bAKH1Rc1@d`BY5U6_^ z(8M=D)pwwY?|_O=Koj2s6`z47egG=I08RV^RD1=Rcm&iv8_>khK-KR+6Tbo#KY%74 z12yLan)nT<`U_~{51`^V(8Lp<<~%?Xe*#ti0!{o4RQv;)_y?%?4>a*FP;rJ<)b#%c zD$ao>&hQjcP70ujvp~fq(8PJ5;tFWu0#I=cH1Uc9kadg(XyP(Z^%iL2En6V@)B#Q0 z4>WNNs5t>>;yO_A2sH5%uOa3npov>R)n}lI+d#z&(8LRNK+LH?6L;W-v@06W z#66(qbfAf!SpzX=0-E>|9*8+J(8NQa<}5%HpRxsF&I&Z~1gQEAXyPeQ@f~R5AC5xI zIe;c!09AhiT^yR8FQAFfIR!E22AX&c)SL%s;w4aXUZ9B!oP(J20ZqIEYR(Td@d~Ip z3~i|CKjRX_91b+`DNu6+(8Oz?=18E4$6SY)qkty90BVi~ns@`$90N4*7tr|>3pDXH zP;(s6#5X|2JkOBhbWKpzcXP6W5srsZTS|#7{uYDL@l%;D*faRG^8U zfvRsn6Tbo#??4mpfx2e`n)nT<`Wa~A51`@;(8QlW#aEz-zkrHwKokD}72km-{sk(2 z08RV{RQv>*IKwkY`FR0Nd;-*8H_*gcpz0r>iSt0kU!aLkftvFHO+3XK5??>i#3i8S zFtnql{~gfzI1V&%0b7VU0%+nYP;(^E#1&W}@veX-eg=BJu?CvB0n{7=H1R)Bb1cxr z3#=gSaX=HdfturiCZ59raZdo6c!vYToCq{=52!f_XyP}Z=No6BiBFjVF{c1cJOpY^ z1)6vQAH+QkXyP8Skn#BrH1P#6F&p>mjIgh45)euH1P#caRoH-3s7@3(8QNO)f=FRuYrnN zpow3Bn&W^bz5%M<15JDfR6GDp{07vV2sH6MQ1uCD;zyw38EE2npym{yiJyR~uRs&O z02OaQ6Tbo#??4m30TrKsCjI~_J_Aks2~>Omn)nN-_zE=f4^Z(9XyRX>;ycj9e?Y|# zpoud)hm`Xt(8O7w;up}wIiTV<(8L9x;t$ZoMWEs@(8ML6;vdk&6`0bjX&VeRw02LQN6E}g1OQ4BcK*bf%#2ujG8ffA!P;mn^aSy1t1)BH+XnJ!%6Ayr@ z_dpX5frKojqQiZ4JDp8yqKfhIl$D!u_td=6B62b%Z-sQ3Xi@g-346KLXVpyC(M z#5X|2Z=i{9fr>vs6W;?Be}N``04n|gP5cN{{0Ex&8K^iz7i#*y02Svz6Tbo#7eEug z0~MD*6Mp~|S3nbg69H)_XrPNj)f=FRYY0Nx2^MJLbD|*TIG~CDfSTihCVmHMP5_$t zj~IwK5oqEpFCgVu0-E>|A&7f2(8S-wLd+>Z6BmG*Q-LO)BMdR80Zsft9K@UsG;tZI zITO&tO++B(%s>;r5)UzF0h+i5)SMM);w+*Nb2gxfw zO_CwzTtE|dfSPjyO}s-4;+_X+;u&@h!y=_f(*XPl1}# zfF{l$3o)kyP28mvV$K9K@dZ$GW}u00fts@bP28dkV$KRQ@ikC$HlT^O$U)q*15Nxy zCB&QqXyQAd=A1wipCb=3=K`8|O*O=v8))K3pyoV46Aw^;nDYWnT%rzQ&IdH{3s7@@ zpovQ;Ld;?4K~4WW^$>G7(8TXR%@IHoe*rZ|0!@5Q1H>E!H1QWub2QMz=O{tkV}K?; zp%G$^1)BI5s5uU3;yKC?b3D+*Tbdx|1fYpCyo8kV5oqEjDiCuL(8Md6A?9SDiSt0s zDL@lvQH7XOfhL~Q0x_onOPZqNxa=Led22-F;gUexqIM-$>64m9xxmdnBGu?5h?6QJfupo{B3%uzrS z-(m$ZM*~ef2WpN1nz)5N#2gDW@dBuN2Q={tsJI83c*a8L`Uf=e8mRgRH1QUwcmkSu z4%D0sH1Q6o`T{iZ2~hD0H1R1=@dh;U8Bp;KH1P#c@d;?+1yJ|QKoegARlfjDd<|55 z1)BHosOCf;HL5idX!7lE2nfhH~k6>mTjSAdFlpoyzM#V4SN>p;b4potqm#TTH7 zn?S`^po!Z+#W$ddJ3z&EpouHYhLo!Z(8PV9>QA7Fui=M;&jmDbn{vp$fE#Gy5m0j; zpovep14)N3(8OoxLiPoGKoht50a5=0O*{o^K0`lh`VaU3aSsQYcm`Cx0GjxTM-cNR z(8Lq?A?{H?6VHK~qk$%_@f2c?0h)Nu4~Tm#(8MdC<~X2^9tAY8CpsCWRH_=ZBrJW&LixCm5z0-CtVJ&3I=}s6`WOwnGkar zCZeYQfEy5VIMBokpymjmi9eYKF-HPTJmwa}90fG-8mKuMXyQlaLe8BtKoh?*A0lpn zCay6LBJO}DzU9DdaC_AQO?(Q}-T*Z5gz1p_A_7f(Ln_3a1T^slP;)ZS#NW(;m{Wiz z?h-W*?4AlV@ikC$8qmZm7D3GEKoj2)3o&N`x;WIF8EE1xDn~-qhKogI+4G|YW6W`JaF<$~roS_dQ zu7D;!qY`3{2AX)qc8ItEn)sF-5OE7M@hLMP;tpuyA?*-x4>a))T@djAH1R*V5O+qP zi96&qiO7fghRXP}8I%!8O;fF{0XF+{uqO*~)&M7#k_JVFR^esTwzxPv96Je+_g zegL}9Xa<`2jWv*U;|tKl71l$|0M7+Hw;4m9yC3bVlK51@&2{Db7v z6KLWy6x8ZMxTXIzX02{YV46W6Ia*^Isf?wnz#y7oB^tj znFVYeg9cQb15G>uDlUK~UI7)CKohTliYuUrH$cTT(8L!&#SPHJ_dvxh(8N8U;pTuQ zej6HYu<(HS3l`1+XzEL$>Lbv^VfH1UiNoy8Kogg^1c|Q-H1QKqegl+-xd#?69cbb! zjzi*W0-E?5sQ3&t@dr@x1!&@5pyDgg#D74=H=v3Cfr{@y6L&cQanAuX@dT(i%zrR{ z!NU0hntFX`_}oAfhlTS4G;vrszd#ee1U2Uenz+XlNcv}h(lGbH!kGh2T;mkPUjk_2 zI#6*5H1PzexB{AZ2~=DIO}qjsZh$6U0~NPG6W;(8cR&+A0~Lq)59TjeI0vAqSGx>J zhY@Jvuy9U56NiO!2AcQ-s5upA;wPZ|1}F`4&w(?L@a#Yn7dQ(MpMWMF0~McvCa!W0 zqJ9CI_ywr=3N&$%^APnL(8NQa;ycj9H$cS?poyP>io^T|^A{|fFQBRSz5)s78))JS zEFtOe0h%~0oL``cD_@0}^8-!XV=BZP1}F`455ql(e>u>^HK5`GXyQ3gaS1f>3s7+d zG;xXh5c4(A#7&^$2590rP;m=1@e-)G1Df~*s5s1jFn__qIRH)l3TXI5poxEwfrL*2 znm8<+Gtk5jU4w*k1)BH?D8B(p!`!3r9uf{6XyP7F@d;?+Jy7u(XyPBB;tSBkEj~cZ zUx6kb0u|qYCf)-T-+?AR1uA|3O?(4X9OgfmzhL2f0Zskf>yYrdfhG=2W1GCqTs;(8N=q;vHz>8Bp;FXyRXXK+Ka@PLH_EPd`kQ@`ytMEwCYahQE4(8OW(UO*EUx(hMq0h+kMbV&Mp zfhK-H5pq8B2Q+aRsDFQ;i7PLg&4c-C2UMH`P5cK`TmVg+fe~V_1e&-8R9pc~JOC=LfhL{< z6^Ho`<{nr$TcD|*01Y1pG;vrsd!UKK!Z`p(8Ns{a;s>DO9cbbVToCmW(8T{h#b=<2-{6L*Uw|g=!w(T(fhL{-6^Ho` z<}X+{??6+}^9T|?2hhY};d}y392U+O(8QS^L(F-ACT=hjnx4_bmk2}L{{c;$K?EZH z15G>!D$W2k59Y5kP;m}4aRpI`IRa?n1yFGbH1P{iaRoGS0SSmX8ffA=P;r?5VD5p1 zvjv*^5@`51pozo6*#k`+7R~`^;@M9i;T(Y`{_DIAxO_-J6Q8)j5-gs9CN3*!1Qstq z6OZq51dCUoiLciV1&eo}iNApICqQXfINVtdIiFz$n)m~#_yRQXCs6SfXyP&}Am(g9 z6E}g1??4l`fQlbL6SskipFk7$fr?*16VHH(-#`jF$a=vPN0duY2OSs=K`8|K?g+q2AX)pgiT=e z575L@pyDsk#NSMTsQ-W_t}zuN{sT>%p%Y>+!)%CqVd-m)5EjsTjt4phAa zn)sVF5cLXZ;v8!s;u>h;0#I=SG;s;2xCNTH0n}d(XyOesAm)3Zi6_j0hzFpF-UW@tn?U3D0GhZBRQv>*xCd1H0-AUXRQv{-IKvHy zy${gD3!v&>poxn>)qg+}mw}4^Koj?XiZejN50=hTpyC{8;s)Cw?h!x}=hzMrmp~Iw zfQl=iiJ#aBQLlj}zUDMU+yG5{3sl?!O?=N~hRZReu0Y9A@7MG;sqdNV$0dO&n(a4K(pnQ1f4)iNnnQ zfF^D*A2MJ015F%eKEqsy{jl)l{{)FI0W@)#`4VX2u=!L4G;vsXYM_btLd`co6NkCS z0!`c-s@?-l9A;ktnm8;xBhbWQ<|m+u?}3_MfF=$zzXDBMz}yl%|J#5j4l}<4P5c+s z{26HCF!L9niEj`$2b;eFO&n(a1~hT&&ye^!fF=$z{{))&2I&0t1vGJ3eBD43zX&z| z0h&0>JulG2o1yA|pozomW0;4U-eB>?fhGuhO&n&v z1)6v))O-&#ahUl5XyUN=ia-;GnV*0rz6xr70h&0>{0cO2SpI526Nj1KfhPV5YW@r~ zahUlF(8MEd8$;3?nmEk-4QS%FUm@Xt08Jcb{s}a3g>R7Z=K`8IJiVcbUxS+e08Jd` zo)>819Z>Z@(8OW(G0ex2-q6Hh<_n;S3x0$6R{>2NX1)fRIIMgyKof_VZ-FKr4K?2b zO&n%^0Gc=~|3;vR!^}@W6JHNCzW_}fW_|^lI4nIhpozoG??4m(1vP&LnmEk-1!&^1 z^t=L19A^FoG;yczknlf%CJrr=aFvKof_Ve*;Y%mcJgLiNnl)fhPVFYW@#2ahUlG3sKV>Ed6t! ziNn%^0GfErPe^)@Kof_#M*&S-1FGHtO&n&Q1)4Z4Jvg9=!_4EkF~00X4q@O&sQ)1~l<4Q1uhg#9{W$Kof`gcLAC>%={H-;+(%A;lBe- z9A^FjG;vt^KY=C=GyejbxFyv52Wa9j^IxEe!_xl;G;x^uKhVUBq2_ZeLQRJ-^99hv zVd-B2O&n&v0-E>|sQCtH;xO|q(8OWs-vLb=mL5FN#QlCl!ao2_9Oj+~H1VrY_hg`n z!|W?S6NjaT3N&$;`3-2|TcGZlfF=$ze+HU3Ed4J)6Nj0<0!`fD55&Ja(8OWpA3zg_ zwQoahUlp(8OWwfe&cnF!O()iA(>5xSwM&YI=j2FMuWvPj6`A zu=JpSCeHN_V!j5NILti;XyOy0?r}g9mw@s;pfq~@7=R`YGd}`Nya4K+3^Z|=`2}d= zu=1e-O&n%^1Dg0#sQDAn#9`*oKof_B=K?fwnE5Nv#H0U1!gB|jIL!P5XyWknh9(X( z{{ou$WvKZN(8OWpzd#d*mv3m|u=MZ)O?(qW9C-YkVF_w_gSm$TO*{yyUII=01Jqmv zG;vt@pn)b1Gv5GB{6Exu2Q+b*`5tKEu<{`QO&n%^1e$mfBgDTMXyP#Q3(&-2@l}B) z4l}<2P5dC#{0V5{F!N`iiNnf=1!&?h^H-pWOEW>-zXMGiX8r**aaejjfhG=14;RqH zZ$QnzfhG=f&jU2^3aI)IXyP#YexQlN(gVX%9O(^BT$LH(UkNmEnE485;;`~T15F&} zegib|MyUA?XyP#QJ9F!Kx0#9{fj0!ox`x?;1Ve!?0CJr-y0-E>~ zsQC-f#9`*IKof`M-wkNuF!OhyiQk2qe*#S$X8r{RKV4$EH*%Td!CEWS9<#1BHv7eEt-xkmy`yb7vb15F%ep8=XUEWRwz#9`(;poxEl znje5B4l_RjO&pfL641n9=4YUZ+jBs|vjR;VW_|;jI4pm4pozoGpMWOb3N?QLnmEk- z6=>qH{Ivm192Q?Y(8PH;A?`nbCJuAY2{iFzQ1{$G6NlON08JbgUoX(aVdj586L*BV zhhYV3dV`tIfhG>iUjk_2F!LqQ#9N@|YoLk4%r`(6ht9uPpozo6(*aFfmJ1S|9%$k) z_XMDcUxd0R0ZklcUj~{uEIbR)#9`)Fpoxb;-P3_44l{oOnm8=|&p;E0nZE!{d@0oY z4QS#p^LL<$!_xl&G;x^uC(y({K+V5_CJrWO@`2lF+%sdeP zCZLJK%+Ej*hn4>YXyUN&tUwc=3N^n0O&sQ)4m5EesQMXb;xPLbpozo6a|N0>%=`^# z;-{hJA3zg_nSTOJ9G3nspozoGzkwz$&I<|87ii)z^FN@8!_xl`G;x^u469JnTRhZ! z0W@)#`4VX2u=KBhCJu`)4K(rBQ1cDY#9{8SKoegCRquf&4zn)+O&k_q5oqEt^Apg- z75O0HS%4-EGrs~&9G3nY(8ZzaLpspJcSFsefF=%e&kQv2G^qL&XyP#YHlT^a{JR59 z9A^FjH1WSs^Dm%@!_2>dCJsxV575M6=D$D_59No1=MOY-nE4E=QPUeNeR80Q!^{^z z6JH56Uja=VX1)fRI4pe{pozoGw?GsB0X5$PO&n%^0Gc?gyox{*ho%1nH1YWYknqVs z6NkB{08QKrs=fhD9A;k!nm8;yOh6NdnLh(f{2|o*6=>ox^EaT0!_xl_G;x^u2hhZg z1R?&tfF=$z{|1^ktbg$UO&n(a3pDXwsQEw8#9`($tU*n0u=wIY6Nkl@0Ghaw5XAiw zXyP#UD4>bohq}iAO&n&Q1)4Z4z8uiRVdi_Fi5EfL6M-fUGd}@M9F~7G(8OWp7odrs zfSTWcCJr;d15F&3ed&HsTW4l|!&9csFQ&2Ms`iNn&f0GfE07$kfo(8OWxQ9u(nf~q$_ z6NlMnfhG=1&kktfF!Mdo#Lq*`k3bWLnV*0r4lm!(#9`(apowdVL;Tx-CJr;d15F%W zzM+Z3!gB_i_)Vz!3(&-2?pc8*-UwB{15JDalz#w9qt6eXKof_Ve*sNgP6FcJ2Wa9j z^IxEe!^(#b=;F}!?GH5Z6HxOR)}y9Fn0q+T#EYQnCD6oS_9>u=!_toinmEjS12l1N zNr-9F!Kx0#9`^D0!6RQ3MnmEk93uxl7__~264m1A&n)o89 z`5(~4Vdnop6NjZwh7CB<8=CkRsQD6T;xO|S(8OWovj&n0*mw;;`^cKof_VpMfUMECX>*1)4a_{01~}So-fk6Ni~U0Zlv;YW@N= zahUll(8OWse*>C0EIfChiR;Ni+`4zuq8nm8;xU!aM@%>RHU zUI%p#!$#Ef1~Z=nO&pd!1<=G{=1ZW7--Vj5fhGWO@`2lF+ zE1~8mpozoG&p;Q4?yo686Ni~!fhPVPYJLZrIL!PBXyUN)e+HU3%=`st;{J+|@Z5kV z4l{oTnm8=J4xov{;_C#OIFAy<{0nH}F!$U*6Q2il&kHnhn0+76#9{IE15F%eKEr0z zbeIlxj{urD%zOznaajIUKof_VuYo3h18TknnmEjS2Q+b5{_;Q*hnXLMChnjN3C{#H zahUlTXyUN=DnJv5#a9KIxTFfi{01~}n0q?V#8*SzGXqT=X5RudaaeqaPoE;xO}Xpo!mun*Rb#9A^FpG;vsY`vXlJW?MN zt_4+JfF=&JuL4aRmL3|=#9`)lpot%cnm+?g9A^FkG;vt|U4bSJGk*h`xRN@=zX#C7 zVdkGe6NjaT3uxjn^KYPuS3=EyfhG&XyP#QEzra>pziTN6Ni}}fF=&hzY%ESF!K}8#P>kWFF+HA znO}h>4vVh_G;x^u9cbdhnvn3EfhG$KKhVTs<}++VO>eOL#epUcGhYBrTwMzio(gE< zF!MFg#9{GefF=$z-vUiM18TkpnmEk-05ow}{)#{ohs9R{n)oxQ`59>9F!vOoi7$bw zZ$J}=+1G(44vVh|XyP#QXP}9TYD27?HO&n(a0W|SosQDMr#9`*& zKof_h{|9K|F!NuaiO+_b{{u}NWC2;xO|I(8SxJ<~N{;!_4nM z6Nlxm325T5@SK4r&Y}wm&jo1WF!!uL6F&-d&ki(kn0*J(#9`ri0!jauOEInL66PGuHxc>&4ILti{(8O0j-SYuW z9A@7SG;vsZVAzEty`hOWL){~RCJr-S0Zkm1zckRqVeU6T6aNb}-vLb=X1)iyIP~6; z05ox!`4MR1c}9@%%s>-|nO}e=4oeReXyUN=YCsc@G=`YpfhG=f&jd8_M^N`HKof`A zw*pNZ7GE3C#9`*|Koj2!b@;nm8;y1fYq-(nAEA z_!p@8325Rl_hg`nPlu|nKof`A*MKGtOAj4r;xO|kpo!a=LHxS_O&n(a3N&$8{@s8k z4l{oTn)p1Z`6tlCVdh^z6NjaT8))J%^B|XyP#Q9ni#oK+O+86Ni}}fhG>izX@pK zF!M9e!~-oL{;fb0hne4iCJu|Q4m5F?`4iB@*Fw!-fF=$ze+8O2EdOpm6Nkmu4m9yP zONjdqpozoWa{^6V0IL25nmEk92WaB3_7}R`*eW>XTWKof_h2MILs zPFslk70|?C?$JOKH-xIUKof`A=YS>-OAj7s;xO|A(8SL{%}+oRhnb&&CJxJA1!&?h z^DEHAHSHk&?LZTUnLhzd9F`ttpozoGUw|gw05yLDnmEk-9cbdP{CfaR92Q?E(8RUu zA@09`CJuAY4K(pfQ1`q*6NlON0ZkkhUq8^qVdgXJM@@(MQ1=L+iNnm7Kof`MUj;OA znE4uL;)kK;TcC-<%y&Q&hsBo%nmEk-05owa2S|7(pozoG&p;E0<=+A{aaep+powpX zn%{sX4s%Zjns^0N{R}j5n0*V-#9{HZ0!7J#9`*& zKoeJWgoNh{G;x^uAJD{M@$~~u9A-Yl0o3%C3^iW>O&n&v1e!Q3e<`4e!{SQ=P5d_0 zd;>Ibn0qYH#OFZOd!UKK>hs9R}nmEk-1T=AWCrEe}pozoGuRs%r<*x=bahUlX zXyQ&#^Jk!m!^~fRCJw7#R-lQ)%-?_}UI#V*0Gc?={1a&6u>5raO&k_qH_*hboFU=! z08Jd`o)>81hoSEIfhG>KkKrI{dV|Fm2bws{d;v7^c~JK#pozoG*FY18F&i8HuD%+Ej*hqX{WhndfC2sORI(mw~9ILv$jH1ShV^A*s}7(8OWpcc6nmn)nZ>dpHiGrbC#00%+o}{40Sb4l`c?O?*DoJqBpvF!L?Y#9{f@0Zklc zz6YB452*POXyP#Q6VSwA@s)ul4l}<1O+3U45}plc;xO|&(8OW+cLJI?EWT!-i8Faa z%wK>e4s*{6H1X|F_v}CuhuL=kO&k_qC(y)U=3hV)w}QIo0h&0>{1<5Au=?u*nmEk- zA86toQ1dyCpr$vN`2uL-u=tWd6Nj0vfF^zkYQ6!QILv$tG;vt|azGP@neTxnF75+~ zuLv}8nE454;;{Bo2AVi5JrtmcuY#IifhG=fPXn5GJXHMzG;x@HGtk6g>0tqyIL!PN zXyT8c=I=lghnar>O&pegPoRmz%)fvpuIUR2&j)DYF!NuaiNoUS1DZI@{2yrIc~J8? zj-sYFnE3)|;;{IVKof_>mjar&x*x>-8ffA$_ZXmwZ-ctW0Zklcp9h*aEWQHJ#9`(~ zpozCa-IIYP4l}<1O&pegE6~JY<~N{;|Ad-90Zklc{tPs6SpHprCJr-y1)6xKKO{VN zpozoGKY%6oxS!z|YI=jY zhXYOA394QKO&n&Q0-881J!qhb!^}586Bi7GxW@ra9A>@;nm8=~2B3+<%#T15uY;PO zfhG zO&pdUPN0dy(!&Kbaou2u`8UwSVeWZ=CVm;}o)2i^F#CR>iNn$Z!*Lwx4NbfR>K+L+ zahUlEXyUN)K?6-3=6(Y-@rzLN9ni#K=6j%t!_q?lnmEk-2sCl65J-4tpozoGFF+TE zt{~uLGL69#nk*nmEk92sCk6d?lcX!_3b>6Xy+wxTgY59A{1s^8u=v`5CJr-y2bwrz1jPL((8OWpUqBOw)xS5; z#9{IE08RWY)chA{;xPAoKoc*4s%JQfn%-dcaiEFA;!6Nc9A>@*ns{&|#J?J7;xO|K z(8OW+%K}XtX1)WO_z9@_0ched^CQs2VeyrKCJr+{15Ml^3gZ3>G;x^u4QS%9{MCUb z4l{oOn)rUG`3um*Vdk$u6NlB08_>jI>0t+&_~dAa`wyUr!`yQMP23c!{sx*j%)SR` z;;{7a0!`3C6X(EHRZ z(8OWpJD`crftnwHCJr+{0!?&&}ihuJp) zO&k_qGtk6g<}W}Kp9^)*1~hS)`8&|WVfps}nmEk-6KLY!q2}K}6Nj1q08Jd0e_x=9 z!_5DHCLR(82~UR8sOb%6J_njOEdL6iiNoSc0!>^k9%8-%nmEio8ffA>pzg6i6NlO7 zfF=%$FAp?vnE3%{;*C)EB%q1I%+Ej*hvlyVG;x^u6=>q0pyqd=iNnmFfF=%$uNi3K zF!L9niN_~E!gB+fIL!PVXyUN^bpTBqX8s8@@#9eQZ=i|8%zuC;4l8e8pozoM!v{3+ z1&I*%|3DXq-UrHX1~nZTLDdVOiNoxZKof_h2L&{7n140U#D7E0w?GqzneTum4$HqD zXyP#Q1JJ}%lOX<0Kof_VpMfS0OAiHT;xO|o(8Mo6&F?@HhnYVCO&pdUW}u0~%wK>e zZj}si{{}R1nE5-<#9`^-0Gc?={1a&6OQGi9Kof_V{{T%KcK+B4G;x^uAJD{wQy}hV zIE$LDVCHk6iNnh`G;vsZmOvA~4>ex_O&sPP4K(p~sCo-DaRDgb0ZOBvAL4-~4l_Rh zO3Ig4IL!P7XyVtP=5Ig~ zhnc?vO&pe<51@&|;_C#OctaW_d@i7g!`yQNOzV z>F_Ajd;v6ZnE4WD;;`~Z0Zklcz6P4OWIDvZ7HHxy^BvH{Ve#dGCJr+{08P9AYJLKm zIL!PEG;vsb6`+a3%&$NbKLj(|6Nj14a2_?iS!Y80D}W{r zGhYHt99BLkpozoG*FY0r2{qpWO&n&v1DZHIy`hQ2%nv{l7tVsXKLJe~W_|{mI6S?f ziNoTn0!{oe)cgiCahQ8L(8MdC>Sv&d7eM(7pfq}Uz5-1gX8r~=aqDb|e-EIE!^}T{ zCJrkfE})A;&nLWrCN7x+G5-OYILtjS(8L!(-SY!Y9A+QG1=REgOP?HQ;xO|C(8Oz@ z?omJ!hncT|CJsxV2590i^DWTCzeCOUKof_VAAlwfOP>*F;xO|Q(8P0dA>mnoCJr;d z0!$#9{7HKoj?c zsy9FrhuLR=CJu`)2Q+b*`5tKEU!dkkpozoGPe2og<=+f6ahUl9XyU%b5dSuyiNnnA zKof_>*90_inE5l%#8*PiUx6kLGk*h`I4u9}Kof_>*8w!~oDzupPoRmz+;agz87fXu=x6bCJr?e3h}Q2nmEjS z3p8<9d^w1e6g{vX%mp~JTnXiB*4om+UXyP#U8=#5LfST`sCJr;-15F&( zehWYohoy%IH1X0Ji2D=J#9{8qKob{%s;@v3huPPFCJsvv9cbb(^CzH*ABLL008Jcb z{t7g4SpM38CJr-y2b#EgEyTYk(8OWpUqBOwrH316;;`_1fF}L|YW@o}ahQ8PpozCb z)iYc}O>Z#!IMBpl;VFP74l`c@P28*w;$ICkahUlAXyUN^Wq~FRGv5JCd@|Jh05ox! z`4MR1u<%Sk6Nj0ffhPVLYJLTpIL!P8G;vt|>Od2R#n%Kh@n!Xp@R@-o4s*`}H1Q~? z`VDB}F#C3(iNoUS0Gc?={1a&6_o3$BKof_V{{T%Kmi}L$iNnnQfF`cj0P!!wb=33* zGoJ%Z92Q>!XyUN<2?d3N>E=O&sPP4K(pesCo-DahQD$XyUN&^gt7bnIC{A{ts$? z0-89?{0ww)*!k6H;xO|o(8S#uA>rA9CJr-y0-89ie4c?O4hzo(XySLF=C42#hq-41 zns`4{{Q)#_n0+VE#9`ri0Zklc{tYy7i6)4DU!aM@%>RHU4ojau(8OWpGu%K;hnZ0G z1<=G{=1ZW7!_ub$nm8;xHPFOanj!8tKof_##{x}!8`M1>XyP#Y0?@=^;TeG@4l_Ri zP23*po&q#+nE4fG;;{0$0Zklceg~R(C)E5IXyP#Q7ods5(&q{^aaee6Kod7;frRG{ zG;x@F4xou&fx71cnmEk98))LN@O*$K4m1A+ns_DDJwMRIVdgX3L``q7^vQuH4l`c> zP5cJbd<8UdnE4uL;;{5-fF=$z-vUkCxD^tf9%$k)^8?VtVeS72G;vsbC7_8vg_@s% zCJu8?0h)LxRDA=QILy8dG;vsbO+XWenLh(fT(1q{-xX-$F!MK{iNn(W4m5F?`3KO% z+o0xOKof_Ve*;Y%7GDq0#9`*YKofrmHU9^iILv&8Td3&`);{4t6Ni~EfF|zT4hbIx zG;x^u8ffAjYasWd8K8;7(t`z>xOxY~dGoj{R zKof_Ve*;Y%mVY0hiNnl)fhI1}1#$lmG;x^u47X9!8>~F%Kof_h2LUv3;ckfe5@_Nu z_b8x=PlCF~08Jcbp9PvYtbA}l6Nj1afhOJvbx#DEIL!P6G;vt@kbx!+Grs^${2$c( z1~hS)`5kEDu=FqiO&n(a3^eh&9!PkuKof_VzX44gRzB=N6Nj0908N~=7h?VeG;x^u zH_*gk>EQvIIL!PPXyVOK^M9a;!^~&6gPPu8(|6Nj1afhN8OYJLQoIL!P6G;vt_Ap=buW_|&hxMDxVzYS>OF!MXm z#Np`;O&k`UGtk7JK+Ru(CJuAY3N-O1sQMjf;uE0!15g@${lEz{ahUlR(8P@=K>Ygv zO&n(a3p8<9{{4U^4m1A;n)pPh`5bpq(;>`!0W@(~cuJs&!^~Ge6aNG?-vCV_kZT1fYq-+!KK&9tBmOfhG>KuK-OPmi{Zy#9`()po!~Fg1Bb_ znmEk-8EE3L^uGX29A^FsH1Wky^LL<$!^}T`CJu|Q6KLWv^Dm%@i%y2P{{fmf%={N< z;;{Pn1DZI@{2yrIO;GbW?xChPnE3)|;;`~o0!Q@OuYo2GbB_U<_$R1) z9MHsJ_IaR*!_q?lnmEk-2sH7dQ1@h@iNnk7nZE)}d>PdI9cbb(^ADhj!}9M5G;x^u7tqAzr$OBR08Jcb{tGm5SbF$? zCJsvvKhVTqLCt5lkDA_K?%_Za?}w_FKof`Ar+_97OAi`o;xO|K(8P_VL;UN2CJr;- z15F%OJ_MkN!_1FB6Q2MzKLbr1W_|&hI4nI>pozoGZ$J}&1vP&HnmEk-8EE3L@?im* zI4r(apo!0#0STWCXyP#U>_8K@hpIn;CJwXj0-881zHXq2!_0qxCjJO&{s%O1nE5}@ z#9{fD;Q@~Hh9+(~6XIV9G;x^u3TWc6_|iZVhq>PXO?)!cd?PO{srou3N&$;eGO>hu=wgg6Ni~U0Zsfn)IAH(#9`*IKof`M zuMKG8F!OhyiMP&%`1b^wIL!PDXyUN=x`8GRGyegaIR6}o`5(~4Vdnop6Nlw5hKH!> z4HjPK+X=ahQDuXyUN=vOp7uneTumJ{{_w05ox!`4MR1 zu>6&PCJr+{15I3R9>l*DXyP#Q8_>jI@zsGQ4l{oOn)nK+`3um*Vdk$u6Nlxm4QS#p z^LL<$Th52L{{)&i%=`;z;;{Ph2AVi5Jv=}Y*H{2C{{@;j%sn5_#1BHO0WHVfIZx6NiQ83^Z|=`3um**%v|FvjI&UX8sN| zaajI3fF=$z{{)(N7S#M3XyP#QAE1fD!t({1IL!PHXyO;3<}*A-O>Z#sIncym`AYyz z92Q>^XyW@8L&8S^O&sPP4K#6EsCo-DahQD$XyUN=@<0=ZnIC{AuCoN;nE4rK z;;{5zfF=&}Zv~pT;ZlhC4QS#p_jI6%Z-BaI2AVj`z6EIFF#oPV6Nj0<0Zn{9)IA5# z#9`*2Kof_h&kJbcF!OJqiOVd5`1b{xIL!PHXyUN+`2$THWg)IBrM#9`(yKof_h{}pKBF!MK{iEoFRe*jG!X8s8@ zaaek|fF=$z{|1`4#7anbzCaU)ng0Pz9M*pOfhG=%FNUY6>FpZSd=4~mn0o}!#7m&+ z70|?C_GzGr!{W;TO&n&v1)8|(Du{nQ(8OWp2cU_=@^1v1IL!P6H1TGr`2}d=F!L+W z#9{H(fF=$zzXMJD3Do={2yrIF!LFnp{6%j{^CFrhnX*cCN8xG;$H%=`^#;;{U+15F%e{sA=cJgE5>(8OWp-#`8$ z8c_8U(8OW(%|H`}`F8=DIL!PNXyR9)=I=lghnar>O&nI9oIn$YnSTLI++qX7zYoyF zVdlR;6NjbG4`|{r^M9a;PluY%@d7m+!ps*y6Ni;25@_PE^r?U*9=H+WehoBnn0pM+ z#6LpazXyP#QBhbX>LEV#qCJr;d08Jd0J}c0~VdgiWiT{F{KLJe~ zX8sH`aaepUKof_VzXDA>auXyxcc6*G%s+r84l7SipozoGzknvbA8P&sG;x^uFVMtc z?d=a};;{7a15LbfGsOK2FHzGQ%sm`v;xbV65@_Nu`xMZ`Vd+5wO&n&v0h;(_sQC_P z;xO|)(8OW+Hvml>W_|>kxb+r@e>2d;VdfX0iNn%E1)4a_{021f`B3vGpozoGpMfS0 z%fAcI#9`*IKokE5HGc=1IL!P5XyUN+Z~{#nmL4vki67kx37;Ei;xP9-Kod`Zs{eo{ z4zuqEnm8;yFucN%-q6Iww?W(^fhG@;nm8=~ z2B3+ox^Bd5_Vfm{AO&n(a1T=Bh-4OpSKof_VzXDAhmL4{s ziNnm_fhJxLHU9*fIL!PDXyUN^djm}zX8r>-afUq*_kTbWhnfEaO&pdU7~Y_!H&}Y$ zKoh?XHD3Tt9OfPgH1P_kdJQyjn0*Fl;;{5!fhGnm8=J zGSI~94nW*rfF=%ePX(GdD^z_4nmEk9325T5_?m$x4l{oNn)nl_`5Vy0Vdn2Z6Nlxm z18Cwf^G~3OCme+M_XfH+l>Y!q!`6So(*FxIahUlZ(8Mo8&1ZOrn%-dU=RgyOm4^ao z;;{IVKodW72;zPPG;x@FG| zhnZi2CO!dbeg~R3%=`&x;;{5E15F%e{sJ`dw@~vppozoG-+?9$D}N54iNoUS1e*Bb z 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 z zI)Enr0m?rCrD5i8fZBTjP5cj3{05qMz-~xv zFNW=qd;?Pt^OpdcxC4|g0i|K;6QK4gpovd_iff>WpMZ)Rpozo$Wq~Gs1*#rqKg?d3 zzdX>?-+=ln08Jd`uLLyl2~d6pl!lpq18Q#pnmETENW4^_i90~W8_>jI{^~#z_kpU1 z*$=Z9=C2uO>ecQ-(%}L$ahSh0pou?#@^?UKnE3%vdk>(AH$cTtpo#B*ieEqzhxzLU zn)nf@dYJt%dtv^1fu_C$>aP!I;xK

k1su z#H*p@ya$>%%$xu;@!8OOiX+g(VeUyl6Nj0TfhL{{HKzbg+^z~z4pg9t!^~+w6Mys$ zl72eS#9{84fF=$zX9k*h1@s>01!&^7(EPOmO&n&<1~l;_&~@)S(8SleK>8^M(8OWp zoIn%j>4MBNUO*F%h33;6XyPz)9-xU&afgiazd#e83>_!=fF=$z=Led¥kfiJ=NL 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

_APQ0Z={%l!lq#aAOL%y)A$yegf(q2{iFD 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