using System.Text.RegularExpressions; namespace Ryujinx.Common.Helper { public static partial class Patterns { #region Accessors public static readonly Regex Numeric = NumericRegex(); public static readonly Regex AmdGcn = AmdGcnRegex(); public static readonly Regex AmdRdna3 = AmdRdna3Regex(); public static readonly Regex NvidiaConsumerClass = NvidiaConsumerClassRegex(); public static readonly Regex DomainLp1Ns = DomainLp1NsRegex(); public static readonly Regex DomainLp1Lp1Npln = DomainLp1Lp1NplnRegex(); public static readonly Regex DomainLp1Znc = DomainLp1ZncRegex(); public static readonly Regex DomainSbApi = DomainSbApiRegex(); public static readonly Regex DomainSbAccounts = DomainSbAccountsRegex(); public static readonly Regex DomainAccounts = DomainAccountsRegex(); public static readonly Regex Module = ModuleRegex(); public static readonly Regex FsSdk = FsSdkRegex(); public static readonly Regex SdkMw = SdkMwRegex(); // ReSharper disable once InconsistentNaming public static readonly Regex CJK = CJKRegex(); public static readonly Regex LdnPassphrase = LdnPassphraseRegex(); public static readonly Regex CleanText = CleanTextRegex(); #endregion #region Generated pattern stubs #region Numeric validation [GeneratedRegex("[0-9]|.")] internal static partial Regex NumericRegex(); #endregion #region GPU names [GeneratedRegex( "Radeon (((HD|R(5|7|9|X)) )?((M?[2-6]\\d{2}(\\D|$))|([7-8]\\d{3}(\\D|$))|Fury|Nano))|(Pro Duo)")] internal static partial Regex AmdGcnRegex(); [GeneratedRegex("Radeon ([7-8](\\d{2}\\d?)[MS]|PRO [VW]7(\\d{2}\\d?)|RX 7\\d{3}([MS]?| XTX?| GRE)?)")] public static partial Regex AmdRdna3Regex(); [GeneratedRegex("NVIDIA GeForce (R|G)?TX? (\\d{3}\\d?)M?")] internal static partial Regex NvidiaConsumerClassRegex(); #endregion #region DNS blocking public static readonly Regex[] BlockedHosts = [ DomainLp1Ns, DomainLp1Lp1Npln, DomainLp1Znc, DomainSbApi, DomainSbAccounts, DomainAccounts ]; const RegexOptions DnsRegexOpts = RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture; [GeneratedRegex(@"^(.*)\-lp1\.(n|s)\.n\.srv\.nintendo\.net$", DnsRegexOpts)] internal static partial Regex DomainLp1NsRegex(); [GeneratedRegex(@"^(.*)\-lp1\.lp1\.t\.npln\.srv\.nintendo\.net$", DnsRegexOpts)] internal static partial Regex DomainLp1Lp1NplnRegex(); [GeneratedRegex(@"^(.*)\-lp1\.(znc|p)\.srv\.nintendo\.net$", DnsRegexOpts)] internal static partial Regex DomainLp1ZncRegex(); [GeneratedRegex(@"^(.*)\-sb\-api\.accounts\.nintendo\.com$", DnsRegexOpts)] internal static partial Regex DomainSbApiRegex(); [GeneratedRegex(@"^(.*)\-sb\.accounts\.nintendo\.com$", DnsRegexOpts)] internal static partial Regex DomainSbAccountsRegex(); [GeneratedRegex(@"^accounts\.nintendo\.com$", DnsRegexOpts)] internal static partial Regex DomainAccountsRegex(); #endregion #region Executable information [GeneratedRegex(@"[a-z]:[\\/][ -~]{5,}\.nss", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)] internal static partial Regex ModuleRegex(); [GeneratedRegex(@"sdk_version: ([0-9.]*)")] internal static partial Regex FsSdkRegex(); [GeneratedRegex(@"SDK MW[ -~]*")] internal static partial Regex SdkMwRegex(); #endregion #region CJK [GeneratedRegex( "\\p{IsHangulJamo}|\\p{IsCJKRadicalsSupplement}|\\p{IsCJKSymbolsandPunctuation}|\\p{IsEnclosedCJKLettersandMonths}|\\p{IsCJKCompatibility}|\\p{IsCJKUnifiedIdeographsExtensionA}|\\p{IsCJKUnifiedIdeographs}|\\p{IsHangulSyllables}|\\p{IsCJKCompatibilityForms}")] private static partial Regex CJKRegex(); #endregion [GeneratedRegex("Ryujinx-[0-9a-f]{8}")] private static partial Regex LdnPassphraseRegex(); [GeneratedRegex(@"[^\u0000\u0009\u000A\u000D\u0020-\uFFFF]..")] private static partial Regex CleanTextRegex(); #endregion } }