early-access version 2425
This commit is contained in:
parent
0a2d207218
commit
e69d3cd638
@ -1,7 +1,7 @@
|
|||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 2424.
|
This is the source code for early-access 2425.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
@ -37,8 +37,8 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>
|
|||||||
{130, nullptr, "ActivateOpenContextRetention"},
|
{130, nullptr, "ActivateOpenContextRetention"},
|
||||||
{140, &ACC_SU::ListQualifiedUsers, "ListQualifiedUsers"},
|
{140, &ACC_SU::ListQualifiedUsers, "ListQualifiedUsers"},
|
||||||
{150, nullptr, "AuthenticateApplicationAsync"},
|
{150, nullptr, "AuthenticateApplicationAsync"},
|
||||||
{151, nullptr, "Unknown151"},
|
{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"},
|
||||||
{152, nullptr, "Unknown152"},
|
{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"},
|
||||||
{190, nullptr, "GetUserLastOpenedApplication"},
|
{190, nullptr, "GetUserLastOpenedApplication"},
|
||||||
{191, nullptr, "ActivateOpenContextHolder"},
|
{191, nullptr, "ActivateOpenContextHolder"},
|
||||||
{200, nullptr, "BeginUserRegistration"},
|
{200, nullptr, "BeginUserRegistration"},
|
||||||
|
@ -37,8 +37,8 @@ ACC_U1::ACC_U1(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>
|
|||||||
{130, nullptr, "ActivateOpenContextRetention"},
|
{130, nullptr, "ActivateOpenContextRetention"},
|
||||||
{140, &ACC_U1::ListQualifiedUsers, "ListQualifiedUsers"},
|
{140, &ACC_U1::ListQualifiedUsers, "ListQualifiedUsers"},
|
||||||
{150, nullptr, "AuthenticateApplicationAsync"},
|
{150, nullptr, "AuthenticateApplicationAsync"},
|
||||||
{151, nullptr, "Unknown151"},
|
{151, nullptr, "EnsureSignedDeviceIdentifierCacheForNintendoAccountAsync"},
|
||||||
{152, nullptr, "Unknown152"},
|
{152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"},
|
||||||
{190, nullptr, "GetUserLastOpenedApplication"},
|
{190, nullptr, "GetUserLastOpenedApplication"},
|
||||||
{191, nullptr, "ActivateOpenContextHolder"},
|
{191, nullptr, "ActivateOpenContextHolder"},
|
||||||
{997, nullptr, "DebugInvalidateTokenCacheForUser"},
|
{997, nullptr, "DebugInvalidateTokenCacheForUser"},
|
||||||
|
@ -37,6 +37,7 @@ OMM::OMM(Core::System& system_) : ServiceFramework{system_, "omm"} {
|
|||||||
{25, nullptr, "SetApplicationCecSettingsAndNotifyChanged"},
|
{25, nullptr, "SetApplicationCecSettingsAndNotifyChanged"},
|
||||||
{26, nullptr, "GetOperationModeSystemInfo"},
|
{26, nullptr, "GetOperationModeSystemInfo"},
|
||||||
{27, nullptr, "GetAppletFullAwakingSystemEvent"},
|
{27, nullptr, "GetAppletFullAwakingSystemEvent"},
|
||||||
|
{28, nullptr, "CreateCradleFirmwareUpdater"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -41,14 +41,14 @@ AudCtl::AudCtl(Core::System& system_) : ServiceFramework{system_, "audctl"} {
|
|||||||
{27, nullptr, "SetVolumeMappingTableForDev"},
|
{27, nullptr, "SetVolumeMappingTableForDev"},
|
||||||
{28, nullptr, "GetAudioOutputChannelCountForPlayReport"},
|
{28, nullptr, "GetAudioOutputChannelCountForPlayReport"},
|
||||||
{29, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"},
|
{29, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"},
|
||||||
{30, nullptr, "Unknown30"},
|
{30, nullptr, "SetSpeakerAutoMuteEnabled"},
|
||||||
{31, nullptr, "Unknown31"},
|
{31, nullptr, "IsSpeakerAutoMuteEnabled"},
|
||||||
{32, nullptr, "Unknown32"},
|
{32, nullptr, "GetActiveOutputTarget"},
|
||||||
{33, nullptr, "Unknown33"},
|
{33, nullptr, "GetTargetDeviceInfo"},
|
||||||
{34, nullptr, "Unknown34"},
|
{34, nullptr, "AcquireTargetNotification"},
|
||||||
{10000, nullptr, "Unknown10000"},
|
{10000, nullptr, "NotifyAudioOutputTargetForPlayReport"},
|
||||||
{10001, nullptr, "Unknown10001"},
|
{10001, nullptr, "NotifyAudioOutputChannelCountForPlayReport"},
|
||||||
{10002, nullptr, "Unknown10002"},
|
{10002, nullptr, "NotifyUnsupportedUsbOutputDeviceAttachedForPlayReport"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -201,6 +201,22 @@ public:
|
|||||||
{62, nullptr, "Unknown62"},
|
{62, nullptr, "Unknown62"},
|
||||||
{63, nullptr, "Unknown63"},
|
{63, nullptr, "Unknown63"},
|
||||||
{64, nullptr, "Unknown64"},
|
{64, nullptr, "Unknown64"},
|
||||||
|
{65, nullptr, "Unknown65"},
|
||||||
|
{66, nullptr, "Unknown66"},
|
||||||
|
{67, nullptr, "Unknown67"},
|
||||||
|
{68, nullptr, "Unknown68"},
|
||||||
|
{69, nullptr, "Unknown69"},
|
||||||
|
{70, nullptr, "Unknown70"},
|
||||||
|
{71, nullptr, "Unknown71"},
|
||||||
|
{72, nullptr, "Unknown72"},
|
||||||
|
{73, nullptr, "Unknown73"},
|
||||||
|
{74, nullptr, "Unknown74"},
|
||||||
|
{75, nullptr, "Unknown75"},
|
||||||
|
{76, nullptr, "Unknown76"},
|
||||||
|
{100, nullptr, "Unknown100"},
|
||||||
|
{101, nullptr, "Unknown101"},
|
||||||
|
{110, nullptr, "Unknown102"},
|
||||||
|
{111, nullptr, "Unknown103"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
@ -249,6 +265,20 @@ public:
|
|||||||
{7, nullptr, "AcquireRadioEvent"},
|
{7, nullptr, "AcquireRadioEvent"},
|
||||||
{8, nullptr, "AcquireGamepadPairingEvent"},
|
{8, nullptr, "AcquireGamepadPairingEvent"},
|
||||||
{9, nullptr, "IsGamepadPairingStarted"},
|
{9, nullptr, "IsGamepadPairingStarted"},
|
||||||
|
{10, nullptr, "StartAudioDeviceDiscovery"},
|
||||||
|
{11, nullptr, "StopAudioDeviceDiscovery"},
|
||||||
|
{12, nullptr, "IsDiscoveryingAudioDevice"},
|
||||||
|
{13, nullptr, "GetDiscoveredAudioDevice"},
|
||||||
|
{14, nullptr, "AcquireAudioDeviceConnectionEvent"},
|
||||||
|
{15, nullptr, "ConnectAudioDevice"},
|
||||||
|
{16, nullptr, "IsConnectingAudioDevice"},
|
||||||
|
{17, nullptr, "GetConnectedAudioDevices"},
|
||||||
|
{18, nullptr, "DisconnectAudioDevice"},
|
||||||
|
{19, nullptr, "AcquirePairedAudioDeviceInfoChangedEvent"},
|
||||||
|
{20, nullptr, "GetPairedAudioDevices"},
|
||||||
|
{21, nullptr, "RemoveAudioDevicePairing"},
|
||||||
|
{22, nullptr, "RequestAudioDeviceConnectionRejection"},
|
||||||
|
{23, nullptr, "CancelAudioDeviceConnectionRejection"}
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -744,6 +744,7 @@ FSP_SRV::FSP_SRV(Core::System& system_)
|
|||||||
{203, &FSP_SRV::OpenPatchDataStorageByCurrentProcess, "OpenPatchDataStorageByCurrentProcess"},
|
{203, &FSP_SRV::OpenPatchDataStorageByCurrentProcess, "OpenPatchDataStorageByCurrentProcess"},
|
||||||
{204, nullptr, "OpenDataFileSystemByProgramIndex"},
|
{204, nullptr, "OpenDataFileSystemByProgramIndex"},
|
||||||
{205, &FSP_SRV::OpenDataStorageWithProgramIndex, "OpenDataStorageWithProgramIndex"},
|
{205, &FSP_SRV::OpenDataStorageWithProgramIndex, "OpenDataStorageWithProgramIndex"},
|
||||||
|
{206, nullptr, "OpenDataStorageByPath"},
|
||||||
{400, nullptr, "OpenDeviceOperator"},
|
{400, nullptr, "OpenDeviceOperator"},
|
||||||
{500, nullptr, "OpenSdCardDetectionEventNotifier"},
|
{500, nullptr, "OpenSdCardDetectionEventNotifier"},
|
||||||
{501, nullptr, "OpenGameCardDetectionEventNotifier"},
|
{501, nullptr, "OpenGameCardDetectionEventNotifier"},
|
||||||
@ -796,6 +797,8 @@ FSP_SRV::FSP_SRV(Core::System& system_)
|
|||||||
{1014, nullptr, "OutputMultiProgramTagAccessLog"},
|
{1014, nullptr, "OutputMultiProgramTagAccessLog"},
|
||||||
{1016, nullptr, "FlushAccessLogOnSdCard"},
|
{1016, nullptr, "FlushAccessLogOnSdCard"},
|
||||||
{1017, nullptr, "OutputApplicationInfoAccessLog"},
|
{1017, nullptr, "OutputApplicationInfoAccessLog"},
|
||||||
|
{1018, nullptr, "SetDebugOption"},
|
||||||
|
{1019, nullptr, "UnsetDebugOption"},
|
||||||
{1100, nullptr, "OverrideSaveDataTransferTokenSignVerificationKey"},
|
{1100, nullptr, "OverrideSaveDataTransferTokenSignVerificationKey"},
|
||||||
{1110, nullptr, "CorruptSaveDataFileSystemBySaveDataSpaceId2"},
|
{1110, nullptr, "CorruptSaveDataFileSystemBySaveDataSpaceId2"},
|
||||||
{1200, &FSP_SRV::OpenMultiCommitManager, "OpenMultiCommitManager"},
|
{1200, &FSP_SRV::OpenMultiCommitManager, "OpenMultiCommitManager"},
|
||||||
|
@ -27,13 +27,13 @@ public:
|
|||||||
{10101, &IFriendService::GetFriendList, "GetFriendList"},
|
{10101, &IFriendService::GetFriendList, "GetFriendList"},
|
||||||
{10102, nullptr, "UpdateFriendInfo"},
|
{10102, nullptr, "UpdateFriendInfo"},
|
||||||
{10110, nullptr, "GetFriendProfileImage"},
|
{10110, nullptr, "GetFriendProfileImage"},
|
||||||
{10120, nullptr, "Unknown10120"},
|
{10120, nullptr, "IsFriendListCacheAvailable"},
|
||||||
{10121, nullptr, "Unknown10121"},
|
{10121, nullptr, "EnsureFriendListAvailable"},
|
||||||
{10200, nullptr, "SendFriendRequestForApplication"},
|
{10200, nullptr, "SendFriendRequestForApplication"},
|
||||||
{10211, nullptr, "AddFacedFriendRequestForApplication"},
|
{10211, nullptr, "AddFacedFriendRequestForApplication"},
|
||||||
{10400, &IFriendService::GetBlockedUserListIds, "GetBlockedUserListIds"},
|
{10400, &IFriendService::GetBlockedUserListIds, "GetBlockedUserListIds"},
|
||||||
{10420, nullptr, "Unknown10420"},
|
{10420, nullptr, "IsBlockedUserListCacheAvailable"},
|
||||||
{10421, nullptr, "Unknown10421"},
|
{10421, nullptr, "EnsureBlockedUserListAvailable"},
|
||||||
{10500, nullptr, "GetProfileList"},
|
{10500, nullptr, "GetProfileList"},
|
||||||
{10600, nullptr, "DeclareOpenOnlinePlaySession"},
|
{10600, nullptr, "DeclareOpenOnlinePlaySession"},
|
||||||
{10601, &IFriendService::DeclareCloseOnlinePlaySession, "DeclareCloseOnlinePlaySession"},
|
{10601, &IFriendService::DeclareCloseOnlinePlaySession, "DeclareCloseOnlinePlaySession"},
|
||||||
@ -103,8 +103,8 @@ public:
|
|||||||
{30900, nullptr, "SendFriendInvitation"},
|
{30900, nullptr, "SendFriendInvitation"},
|
||||||
{30910, nullptr, "ReadFriendInvitation"},
|
{30910, nullptr, "ReadFriendInvitation"},
|
||||||
{30911, nullptr, "ReadAllFriendInvitations"},
|
{30911, nullptr, "ReadAllFriendInvitations"},
|
||||||
{40100, nullptr, "Unknown40100"},
|
{40100, nullptr, "DeleteFriendListCache"},
|
||||||
{40400, nullptr, "Unknown40400"},
|
{40400, nullptr, "DeleteBlockedUserListCache"},
|
||||||
{49900, nullptr, "DeleteNetworkServiceAccountCache"},
|
{49900, nullptr, "DeleteNetworkServiceAccountCache"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
@ -211,6 +211,11 @@ public:
|
|||||||
{127, nullptr, "Unknown127"},
|
{127, nullptr, "Unknown127"},
|
||||||
{128, nullptr, "Unknown128"},
|
{128, nullptr, "Unknown128"},
|
||||||
{129, nullptr, "Unknown129"},
|
{129, nullptr, "Unknown129"},
|
||||||
|
{130, nullptr, "Unknown130"},
|
||||||
|
{131, nullptr, "Unknown131"},
|
||||||
|
{132, nullptr, "Unknown132"},
|
||||||
|
{133, nullptr, "Unknown133"},
|
||||||
|
{134, nullptr, "Unknown134"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
@ -287,6 +292,7 @@ public:
|
|||||||
{502, nullptr, "RequestDownloadTicketForPrepurchasedContents"},
|
{502, nullptr, "RequestDownloadTicketForPrepurchasedContents"},
|
||||||
{503, nullptr, "RequestSyncTicket"},
|
{503, nullptr, "RequestSyncTicket"},
|
||||||
{504, nullptr, "RequestDownloadTicketForPrepurchasedContents2"},
|
{504, nullptr, "RequestDownloadTicketForPrepurchasedContents2"},
|
||||||
|
{505, nullptr, "RequestDownloadTicketForPrepurchasedContentsForAccount"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -158,6 +158,7 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_
|
|||||||
{605, nullptr, "ListApplicationContentMetaStatusWithRightsCheck"},
|
{605, nullptr, "ListApplicationContentMetaStatusWithRightsCheck"},
|
||||||
{606, nullptr, "GetContentMetaStorage"},
|
{606, nullptr, "GetContentMetaStorage"},
|
||||||
{607, nullptr, "ListAvailableAddOnContent"},
|
{607, nullptr, "ListAvailableAddOnContent"},
|
||||||
|
{609, nullptr, "ListAvailabilityAssuredAddOnContent"},
|
||||||
{700, nullptr, "PushDownloadTaskList"},
|
{700, nullptr, "PushDownloadTaskList"},
|
||||||
{701, nullptr, "ClearTaskStatusList"},
|
{701, nullptr, "ClearTaskStatusList"},
|
||||||
{702, nullptr, "RequestDownloadTaskList"},
|
{702, nullptr, "RequestDownloadTaskList"},
|
||||||
@ -289,6 +290,11 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_
|
|||||||
{2514, nullptr, "ClearTaskOfAsyncTaskManager"},
|
{2514, nullptr, "ClearTaskOfAsyncTaskManager"},
|
||||||
{2515, nullptr, "CleanupAllPlaceHolderAndFragmentsIfNoTask"},
|
{2515, nullptr, "CleanupAllPlaceHolderAndFragmentsIfNoTask"},
|
||||||
{2516, nullptr, "EnsureApplicationCertificate"},
|
{2516, nullptr, "EnsureApplicationCertificate"},
|
||||||
|
{2517, nullptr, "CreateApplicationInstance"},
|
||||||
|
{2518, nullptr, "UpdateQualificationForDebug"},
|
||||||
|
{2519, nullptr, "IsQualificationTransitionSupported"},
|
||||||
|
{2520, nullptr, "IsQualificationTransitionSupportedByProcessId"},
|
||||||
|
{2521, nullptr, "GetRightsUserChangedEvent"},
|
||||||
{2800, nullptr, "GetApplicationIdOfPreomia"},
|
{2800, nullptr, "GetApplicationIdOfPreomia"},
|
||||||
{3000, nullptr, "RegisterDeviceLockKey"},
|
{3000, nullptr, "RegisterDeviceLockKey"},
|
||||||
{3001, nullptr, "UnregisterDeviceLockKey"},
|
{3001, nullptr, "UnregisterDeviceLockKey"},
|
||||||
|
@ -307,6 +307,8 @@ SET_SYS::SET_SYS(Core::System& system_) : ServiceFramework{system_, "set:sys"} {
|
|||||||
{202, nullptr, "SetFieldTestingFlag"},
|
{202, nullptr, "SetFieldTestingFlag"},
|
||||||
{203, nullptr, "GetPanelCrcMode"},
|
{203, nullptr, "GetPanelCrcMode"},
|
||||||
{204, nullptr, "SetPanelCrcMode"},
|
{204, nullptr, "SetPanelCrcMode"},
|
||||||
|
{205, nullptr, "GetNxControllerSettingsEx"},
|
||||||
|
{206, nullptr, "SetNxControllerSettingsEx"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -17,19 +17,19 @@ public:
|
|||||||
explicit IDsInterface(Core::System& system_) : ServiceFramework{system_, "IDsInterface"} {
|
explicit IDsInterface(Core::System& system_) : ServiceFramework{system_, "IDsInterface"} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "GetDsEndpoint"},
|
{0, nullptr, "BindDevice"},
|
||||||
{1, nullptr, "GetSetupEvent"},
|
{1, nullptr, "BindClientProcess"},
|
||||||
{2, nullptr, "Unknown2"},
|
{2, nullptr, "AddInterface"},
|
||||||
{3, nullptr, "EnableInterface"},
|
{3, nullptr, "GetStateChangeEvent"},
|
||||||
{4, nullptr, "DisableInterface"},
|
{4, nullptr, "GetState"},
|
||||||
{5, nullptr, "CtrlInPostBufferAsync"},
|
{5, nullptr, "ClearDeviceData"},
|
||||||
{6, nullptr, "CtrlOutPostBufferAsync"},
|
{6, nullptr, "AddUsbStringDescriptor"},
|
||||||
{7, nullptr, "GetCtrlInCompletionEvent"},
|
{7, nullptr, "DeleteUsbStringDescriptor"},
|
||||||
{8, nullptr, "GetCtrlInReportData"},
|
{8, nullptr, "SetUsbDeviceDescriptor"},
|
||||||
{9, nullptr, "GetCtrlOutCompletionEvent"},
|
{9, nullptr, "SetBinaryObjectStore"},
|
||||||
{10, nullptr, "GetCtrlOutReportData"},
|
{10, nullptr, "Enable"},
|
||||||
{11, nullptr, "StallCtrl"},
|
{11, nullptr, "Disable"},
|
||||||
{12, nullptr, "AppendConfigurationData"},
|
{12, nullptr, "Unknown12"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
@ -42,19 +42,7 @@ public:
|
|||||||
explicit USB_DS(Core::System& system_) : ServiceFramework{system_, "usb:ds"} {
|
explicit USB_DS(Core::System& system_) : ServiceFramework{system_, "usb:ds"} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "BindDevice"},
|
{0, nullptr, "OpenDsService"},
|
||||||
{1, nullptr, "BindClientProcess"},
|
|
||||||
{2, nullptr, "GetDsInterface"},
|
|
||||||
{3, nullptr, "GetStateChangeEvent"},
|
|
||||||
{4, nullptr, "GetState"},
|
|
||||||
{5, nullptr, "ClearDeviceData"},
|
|
||||||
{6, nullptr, "AddUsbStringDescriptor"},
|
|
||||||
{7, nullptr, "DeleteUsbStringDescriptor"},
|
|
||||||
{8, nullptr, "SetUsbDeviceDescriptor"},
|
|
||||||
{9, nullptr, "SetBinaryObjectStore"},
|
|
||||||
{10, nullptr, "Enable"},
|
|
||||||
{11, nullptr, "Disable"},
|
|
||||||
{12, nullptr, "Unknown12"},
|
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
@ -120,7 +108,7 @@ public:
|
|||||||
{5, nullptr, "DestroyInterfaceAvailableEvent"},
|
{5, nullptr, "DestroyInterfaceAvailableEvent"},
|
||||||
{6, nullptr, "GetInterfaceStateChangeEvent"},
|
{6, nullptr, "GetInterfaceStateChangeEvent"},
|
||||||
{7, nullptr, "AcquireUsbIf"},
|
{7, nullptr, "AcquireUsbIf"},
|
||||||
{8, nullptr, "Unknown8"},
|
{8, nullptr, "ResetDevice"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ public:
|
|||||||
{35, nullptr, "Unknown35"},
|
{35, nullptr, "Unknown35"},
|
||||||
{36, nullptr, "Unknown36"},
|
{36, nullptr, "Unknown36"},
|
||||||
{37, nullptr, "Unknown37"},
|
{37, nullptr, "Unknown37"},
|
||||||
|
{38, nullptr, "Unknown38"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
@ -117,7 +118,6 @@ public:
|
|||||||
{49, nullptr, "Unknown49"},
|
{49, nullptr, "Unknown49"},
|
||||||
{50, nullptr, "Unknown50"},
|
{50, nullptr, "Unknown50"},
|
||||||
{51, nullptr, "Unknown51"},
|
{51, nullptr, "Unknown51"},
|
||||||
{52, nullptr, "Unknown52"},
|
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user