123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- using System.Net;
- internal class Program
- {
- public static async Task Main(string[] args)
- {
- Console.WriteLine("Hello, World!");
- Console.WindowHeight = 9;
- Console.SetBufferSize(Console.BufferWidth, 9);
- var isCancelKeyPress = false;
- Console.CancelKeyPress += (sender, eventArgs) => { eventArgs.Cancel = true; isCancelKeyPress = true; };
- var sharedBuffer1MB = new byte[1024 * 1024];
- var totalRxBytes = 0L;
- const int NumberOfThreads = 3;
- IReadOnlyList<(string Url, string? Referer)> ItemsToFetch =
- [
- /* 骚扰短信 551KB 3x 6.4MB/s */ ("https://image.svipjf.cn/photoGallery/exchange/822.png","https://car.zhouznq.cn/"),
- /* 骚扰短信 1.4MB 4.2MB/s 间歇性全体403 */ //("https://assets.vviptuangou.com/uploads/picture/20241028/cce8ec7bd1e0756961bd8f3459f70e3d.png","https://mall.vvipttyx.com/"),
- /* 骚扰短信 72MB 61MB/s ali OSS 403 已挂 */ //("https://kwejyt.satpb.cn/knvuiebt3","https://kwejyt.satpb.cn/knvuiebt3"),
- /* 骚扰短信 581KB 10x慢 3.7MB/s */ //("https://76611.vip/option.bin",null),
- /* 骚扰短信 581KB 10x慢 3.7MB/s */ //("https://76611.vip/lsoc/static/picture/01.bin",null),
-
- /* 骚扰短信 1.1MB ?MB/s 由 Tencent Cloud EdgeOne 提供防护 */ //("https://car.zhouznq.cn/static/js/chunk-vendors.97172d20.js","https://car.zhouznq.cn/"),
-
- /* 骚扰短信 794KB 2.6MB/s */ //("https://www.vviptuangou.com/static/js/chunk-vendors.351bddc0.js", null),
- /* 骚扰短信 795KB 2.5MB/s */ //("https://mall.vvipttyx.com/static/js/chunk-vendors.3b3ced30.js",null),
- /* 骚扰短信 759KB 3.0MB/s */ //"https://www.vviptuangou.com/static/js/chunk-vendors.e6ddf75a.js",
- /* 骚扰短信 251KB 1.6MB/s */ //("https://img.c6ph.com/Uploads/ueditor/20240313/1710313841429137.jpg",null),
- /* 骚扰短信 1.3MB 3.9MB/s */ //("https://assets.vviptuangou.com/uploads/picture/20240226/06d890d618d6000d834167291ebda3d8.png","https://mall.vvipttyx.com/"),
- /* 骚扰短信 1.2MB 3.3MB/s */ //("https://assets.vviptuangou.com/uploads/picture/20240914/94b03193916c94a97e6556b4b68bca3e.png","https://mall.vvipttyx.com/"),
- /* 骚扰短信 824KB 1.5MB/s */ //"https://51huoyou-staging.oss-cn-beijing.aliyuncs.com/uploads/picture/20220922/190487a32b807936984105ffb4f84372.jpg",
- /* 骚扰短信 742KB 1.5MB/s */ //"https://51huoyou-staging.oss-cn-beijing.aliyuncs.com/uploads/picture/20220922/af8f58c2f93d855416d542891cc3f93b.jpg",
- /* 骚扰短信 695KB 1.5MB/s */ //"https://51huoyou-staging.oss-cn-beijing.aliyuncs.com/uploads/picture/20220922/9d95b9904c63cf7abe469b2a36c14376.jpg",
- /* 骚扰短信 533KB 1.5MB/s */ //"https://51huoyou-staging.oss-cn-beijing.aliyuncs.com/uploads/picture/20220921/997828dbd7396ea1ee9f1b4bbdf3d08d.jpg",
- /* 骚扰短信 410KB 1.4MB/s */ //"https://cdn.9vq.cn//dspt/2024-10-31/s31tdj9d5u.jpg",
- /* 骚扰短信 250KB 1.1MB/s */ //"https://mall.vvipttyx.com/static/js/index.a28cde69.js",
- /* 骚扰短信 472KB 1.0MB/s */ //"https://51huoyou-staging.oss-cn-beijing.aliyuncs.com/uploads/picture/20221218/813cd519ccb855490411681b5954eb80.jpeg",
- /* 骚扰短信 38.9KB 慢 0.8MB/s */ //("https://image.svipjf.cn/photoGallery/PChome61118.png","https://car.zhouznq.cn/"),
- /* 骚扰短信 191KB 慢 0.4MB/s */ //"https://frontend.wuhanwyg.com/wygad2wxlink/static/js/chunk-vendors.6e04d8fb.js",
- /* 骚扰短信 110KB 慢 0.6MB/s */ //"https://cdnresource.wuhanwyg.com/material/bd616694eb55dc9ae4f7434f500d0c4e.jpeg.webp",
- /* 骚扰短信 90KB 慢 0.5MB/s */ //"https://mall.vvipttyx.com/static/js/pages-invest-index.e87b1933.js",
- /* 骚扰短信 157KB 慢 0.8MB/s */ //"https://mall.vvipttyx.com/static/js/pages-detail-index~pages-detail-payinfo.ce13bdd5.js",
- /* 骚扰短信 110KB 慢 0.8MB/s */ //"http://cdnresource.wuhanwyg.com/material/bd616694eb55dc9ae4f7434f500d0c4e.jpeg.webp",
- /* 骚扰短信 144KB 慢 0.1MB/s */ //"https://probe.bjmantis.net/chat/idangerous.swiper.min.js",
- /* 骚扰短信 439KB 慢 0.1MB/s */ //"https://xplancommon.bjmantis.net/8159/scrm/upload/scrmUserImageFolder/b2ef25bea209487aac84c8ad95a31d5a.png",
- /* 骚扰短信 6.3MB 慢 0.4MB/s */ //"http://whhlsjy.cn/kefu.gif",
- /* 骚扰短信 20KB 慢 19KB/s */ //"https://vip.c6ph.com/info.html?code=eezw3&uid=1#buy",
- /* 骚扰短信 1.2KB 慢 11KB/s */ //"https://mall.vvipttyx.com",
- //403 refer
- /* 骚扰短信 780KB 2.9MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20240227/9736380d4861b611b771f5dcaf763bd4.jpg",
- /* 骚扰短信 981KB 2.8MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20231120/de5c5798894eac6096c08d4b01fc55c1.png",
- /* 骚扰短信 786KB 2.8MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20240227/4a9939cac484d0dac89f6e3cb3ccc152.jpg",
- /* 骚扰短信 942KB 2.7MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20241007/d54ccfbb9714287995a23a6780532321.jpg",
- /* 骚扰短信 1.1MB 2.6MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20240521/1c71a325fa7286f4dea7d39251e8f6d9.png",
- /* 骚扰短信 936KB 2.6MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20241009/0e587b5b992004dad246c8d712a019da.png",
- /* 骚扰短信 831KB 2.4MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20240227/d1fc8f763172cf3ca3d461367ab440aa.jpg",
- /* 骚扰短信 997KB 2.4MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20241102/35ee468c51600e6d253c76c5f94c73d2.jpg",
- /* 骚扰短信 789KB 2.3MB/S */ //"https://assets.vviptuangou.com/uploads/picture/20230907/a03025ae38c7c85ee2a5f13192dd65c4.jpg",
- /* 骚扰短信 1.1MB 2.3MB/S */ //"https://assets.vviptuangou.com/uploads/picture/20240904/aaee5c385f5f8ffbfcae53e6ff94d8de.png",
- /* 骚扰短信 722KB 2.2MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20240622/6cf2948cf7b23e5b986aa97316e52ee1.png",
- /* 骚扰短信 869KB 2.4MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20240327/e94ba5a1c033a0209e05b9c55a14f603.jpg",
- /* 骚扰短信 760KB 2.2MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20240904/48c7fc95c975d7cff8fdd63995d47173.jpg",
- /* 骚扰短信 2.3MB 5.1MB/s */ //"https://assets.vviptuangou.com/uploads/picture/20240123/312ba13e6a3508f040ae474c21fed4dc.png",
-
- //404
- /* 骚扰短信 2.6MB 5.1MB/s */ //("https://assets.vviptuangou.com/uploads/picture/20240123/c650dac2182dfa9b369daa131631f833.png","https://mall.vvipttyx.com/"),
- /* 骚扰短信 1.2KB 慢 11KB/s */ //"https://www.vviptuangou.com",
- /* 骚扰短信 170KB 1.0MB/s */ //"https://www.vviptuangou.com/static/js/index.14f6233c.js",
- /* 骚扰短信 B/s */ //"https://car.zhouznq.cn/",
- /* 骚扰短信 B/s */ //"https://car.svipjcsh.cn/",
- /* 骚扰短信 B/s */ //"https://www.76611.vip/lsoc/jfkdoai.html?channelCode=1216-7",
- /* 端游诛仙 9,418,817,833 */ //"https://zhuxiandl.wmupd.com/zhuxian/client/zhuxian3haoyuechangsheng.rar",
- /* 端游剑灵 4,089,446,400 */ //"http://down-update.qq.com/bns/W/full/3.60052.19.56/BNS_full_3.60052.19.56_20240627221522_bin.7z.001",
- /* 手游帕弥什 2,068,271,999 */ //"https://zspms-volcdn-media.kurogame.com/install/3.0.0/20241105CeRGTMDstiO3MBuPkf5f-Ver3.0.0_P36417A.apk",
- /* 手游鸣潮 1,997,604,851 */ //"https://mirrors-package-mc.aki-game.com/client/download/20240919153138_DfMc71zrMqk43foG1E/%E9%B8%A3%E6%BD%AE_1.3.0_116761876__%E5%AE%98%E6%B8%A0_56323c8fffdc1701fe2f3d3195a45e9c_shelled.apk",
- /* 手游尘白 754,214,153 */ //"https://cbjq-content.xoyocdn.com/ob202307/setup/ob202307/setup/Android/CBJQ.2.3.0.92.jinshan.apk",
- /* 有道 118,749,568 */ //"https://download.ydstatic.com/cidian/static/11.0/241108/YoudaoDictSetup.exe",
- /* 手游绝区零 372,190,717 */ //"https://autopatchcn.juequling.com/package_download/op/client_app/download/20241025155348_P1CiQgR6Uw0z3Pb8/mktbackup2/ZenlessZoneZero_1.3.apk",
- /* 咪咕快游APK 119,028,035 */ //"https://freeserver.migufun.com/resource/beta/apk/20240712112601/MiguPlay-V3.85.1.1_miguzsj.apk",
- /* 腾讯企点 229,468,256 */ //"https://dldir1.qq.com/qqfile/crm/qidian/QiDian6.2.3.21609.exe",
- /* 慢 端游笑傲江 45,387,452,121 */ //"https://xajhdl.wmupd.com/xiaoao_chongzhi/client/xajh_arc_0.0.1836_2022715.zip",
- /* 手游原神 331,501,027 */ //"https://autopatchcn.yuanshen.com/client_app/download/Android/20240927184040_XnwSMMsa18eRD0fz/mihoyo/yuanshen_5.1.0.apk",
- /* 电信APK 217,759,223 */ //"https://appupdates.189.cn/client/ctclientchannel581.apk",
- /* 腾讯会议 216,900,104 */ //"https://updatecdn.meeting.qq.com/cos/4ee0c091f7cae39e0889aef58d8ab1be/TencentMeeting_0300000000_3.29.11.430_x86_64.publish.officialwebsite.exe",
- /* WeiBoApk 216,193,905 */ //"https://pkg.sinaimg.cn/weibo_14.11.0_vcode_7069_wm_3333_1001_so_32_64_weibo_6268_225583.apk",
- /* 梨视频APK 125,502,566 */ //"https://ucdl.25pp.com/fs08/2022/11/11/5/2_a3328e4c7d40956410077f03c2e8e908.apk",
- /* 阿里 无影 105,626,616 */ //"https://ecd-client.oss-accelerate.aliyuncs.com/wuying/windows10/wuying-setup-7.5.5.exe",
- /* 饿了么APK 85,996,048 */ //"https://appdownload.alicdn.com/publish/eleme_android/latest/eleme_android_1601275026119.apk",
- /* 天翼云游戏APK 47,577,079 */ //"https://cmscdn.play.cn/f/cloud/www/file/20241016/cn.egame.terminal.cloud5g_5.0.0.23_00000000.apk",
- /* 拼多多APK 30,207,478 */ //"https://cd.pddpic.com/android_dev/2024-11-05/07eb5b3b012e8a2ba581a880e6fde923.apk",
- /* 快手APK 19,927,625 */ //"https://js.a.kspkg.com/bs2/fes/KS_TV-KSPC_TV-huidu-4.2.4.2340-YRD-x32-signed_c2508a.apk",
- /* sj.qq 向日葵 7,500,656 */ //"https://down.pc.yyb.qq.com/packing/e0503375d50c2d30134790b37c6e2f14/com.oray.sunlogin.service_2100100017_installer.exe",
- /* 抖音APK 3,328,896 */ //"https://www.douyin.com/download/pc/obj/douyin-pc-web/douyin-pc-client/7044145585217083655/releases/12209044/4.9.0/win32-ia32/douyin-downloader-v4.9.0-win32-ia32-douyincold.exe",
- /* 天翼云 */ //"https://vod-origin-rjzy.gdoss.xstore.ctyun.cn/8ee30576c30d40518c4dae03f7eacf3c.mp4",
- /* 咪咕视频 */ //"https://img.cmvideo.cn/publish/noms/2023/12/06/1O4SHFIFR36BD.gif",
- /* 天翼云桌面 */ //"https://sxjz1b-deskmgr.ctyun.cn:8999/desktop-prod/software/windows_tob_client/15/64/202051101/CtyunClouddeskUniversal_2.5.11_202051101_x86_20241015144002_Setup_signed.exe?tmprnum=dqmbnc&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=EFXH8EMMHO6ZVUOW75DC%2F20241108%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20241108T122223Z&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Signature=385613455c46bd9f9ab3996680dfe17d201c0e3435d19e308f50bada85e887be",
- /* 联通公免 */ //"https://m1.ad.10010.com/small_video/uploadImg/1669798519261.png",
- /* 和彩云 */ //"https://img.mcloud.139.com/material_prod/material_media/20221128/1669626861087.png",
- /* 咪咕音乐 */ //"https://wsdkdl.migu.cn:8443/b486900f41fc411187240dcb45fdbc8d/1723479628065/netsdk_b.js",
- /* BAN 端游新天龙 7,698,595,495 */ // "https://tlbbjd.the3.changyou.com/tlbb/XTLBB-JD-3.70.8511_GF.zip",
- /* BAN 端游龙武 486,057,368 */ //"https://down.q1.com/lw/LWSetup_BC_ZDAD_241104_z4v46654989z3v.exe",
- /* BAN 央视影音 */ //"https://download.cntv.cn/cbox/v5/ysyy_xp_v5.1.3.1_1001_setup.exe",
- /* BAN 央视影音 */ //"https://download.cntv.cn/app/cntv/ysyyHD_CBoxHD_Android_7.9.3_channel_07221813_androidguanwang.apk",
- ];
- var upTimeStart = DateTime.Now;
- var rxItems = new long[ItemsToFetch.Count];
- var connItems = new int[ItemsToFetch.Count];
- var rokItems = new int[ItemsToFetch.Count];
- var rswItems = new int[ItemsToFetch.Count];
- var rtoItems = new int[ItemsToFetch.Count];
- var rerItems = new int[ItemsToFetch.Count];
- var uaIndex = 0;
- const int MinEveryUrl = 10;
- var urlRollingIndex = 0;
- var threadUrl = new int[NumberOfThreads];
- for (int t = 0; t < NumberOfThreads; t++)
- {
- var localVarThreadIndex = t;
- _ = Task.Run(async () =>
- {
- while (isCancelKeyPress == false)
- {
- var urlIndex = Interlocked.Increment(ref urlRollingIndex) % ItemsToFetch.Count;
- var item = ItemsToFetch[urlIndex];
- threadUrl[localVarThreadIndex] = urlIndex;
- using var ctsSwitch = new CancellationTokenSource(TimeSpan.FromMinutes(MinEveryUrl));
- ctsSwitch.Token.Register(() => Interlocked.Increment(ref rswItems[urlIndex]));
- try
- {
- using var h = new HttpClientHandler { UseProxy = false, AutomaticDecompression = DecompressionMethods.None };
- using var client = new HttpClient(h) { Timeout = TimeSpan.FromSeconds(5) };
- client.DefaultRequestHeaders.UserAgent.ParseAdd(UserAgents[Interlocked.Increment(ref uaIndex) % UserAgents.Count]);
- client.DefaultRequestHeaders.AcceptEncoding.Clear();
- client.DefaultRequestHeaders.AcceptEncoding.ParseAdd("none");
- client.DefaultRequestHeaders.Referrer = new Uri(item.Referer ?? item.Url);
- var r = await client.GetAsync(item.Url, HttpCompletionOption.ResponseHeadersRead, ctsSwitch.Token);
- Interlocked.Increment(ref connItems[urlIndex]);
- var stream = await r.Content.ReadAsStreamAsync(ctsSwitch.Token);
- var read = 0;
- do
- {
- using var ctsTimeout = new CancellationTokenSource(1000 * 5);
- ctsTimeout.Token.Register(() => Interlocked.Increment(ref rtoItems[urlIndex]));
- using var ctl = CancellationTokenSource.CreateLinkedTokenSource(ctsTimeout.Token, ctsSwitch.Token);
- read = await stream.ReadAsync(sharedBuffer1MB, 0, sharedBuffer1MB.Length, ctl.Token);
- Interlocked.Add(ref totalRxBytes, read);
- Interlocked.Add(ref rxItems[urlIndex], read);
- } while (isCancelKeyPress == false && read > 0);
- if (read == 0) Interlocked.Increment(ref rokItems[urlIndex]);
- r.EnsureSuccessStatusCode();
- await Task.Delay(50, CancellationToken.None);
- }
- catch (OperationCanceledException)
- {
- Interlocked.Increment(ref rswItems[urlIndex]);
- }
- catch (Exception e)
- {
- Interlocked.Increment(ref rerItems[urlIndex]);
- Console.WriteLine($"Error: #{urlIndex + 1}, {e.Message}");
- await Task.Delay(3000, CancellationToken.None);
- }
- }
- });
- }
- var rxCopy = rxItems.ToArray();
- var rxCopy2 = rxItems.ToArray();
- var spdItems = new double[rxItems.Length];
- var lastRx = 0L;
- const double TimeRatio = 1;
- while (isCancelKeyPress == false)
- {
- lastRx = totalRxBytes;
- rxItems.CopyTo(rxCopy, 0);
- await Task.Delay(TimeSpan.FromMilliseconds(1000 / TimeRatio));
- var speed = (totalRxBytes - lastRx) * TimeRatio;
- rxItems.CopyTo(rxCopy2, 0);
- var ut = DateTime.Now - upTimeStart;
- for (var i = 0; i < spdItems.Length; i++) spdItems[i] = (rxCopy2[i] - rxCopy[i]) * TimeRatio;
- Console.Title = $"{FormatFileSize(totalRxBytes)} {FormatFileSize(speed)}";
- Console.Write(
- $"{Environment.NewLine}{Environment.NewLine}[{DateTime.Now:dd HH:mm:ss.fff}] T:{FormatFileSize(totalRxBytes)} S:{FormatFileSize(speed)} UP:{ut}" +
- $"{Environment.NewLine} SRx:[{string.Join(" ", rxCopy.Select((p, i) => (i, p)).OrderByDescending(p => p.p).Select(p => $"{p.i + 1:00}#{FormatFileSize(p.p, 1)}"))}]" +
- $"{Environment.NewLine} Spd:[{string.Join(" ", spdItems.Select((p, i) => (i, p)).OrderByDescending(p => p.p).Select(p => $"{p.i + 1:00}#{FormatFileSize(p.p, 1)}"))}]" +
- $"{Environment.NewLine} Con:[{string.Join(" ", connItems.Select((p, i) => (i, p)).OrderByDescending(p => p.p).Select(p => $"{p.i + 1:00}#{FormatFileSize(p.p, 1)}"))}]" +
- $"{Environment.NewLine} Rok:[{string.Join(" ", rokItems.Select((p, i) => (i, p)).OrderByDescending(p => p.p).Select(p => $"{p.i + 1:00}#{FormatFileSize(p.p, 1)}"))}]" +
- $"{Environment.NewLine} Rsw:[{string.Join(" ", rswItems.Select((p, i) => (i, p)).OrderByDescending(p => p.p).Select(p => $"{p.i + 1:00}#{FormatFileSize(p.p, 1)}"))}]" +
- $"{Environment.NewLine} Rto:[{string.Join(" ", rtoItems.Select((p, i) => (i, p)).OrderByDescending(p => p.p).Select(p => $"{p.i + 1:00}#{FormatFileSize(p.p, 1)}"))}]" +
- $"{Environment.NewLine} Err:[{string.Join(" ", rerItems.Select((p, i) => (i, p)).OrderByDescending(p => p.p).Select(p => $"{p.i + 1:00}#{FormatFileSize(p.p, 1)}"))}]" +
- $"{Environment.NewLine} Thr:[{string.Join(" ", threadUrl.Select((p, i) => (i, p)).OrderByDescending(p => -p.i).Select(p => $"{p.i + 1:00}#{p.p:00}"))}]"
- );
- }
- Console.WriteLine("Bye, World!");
- }
- private static string FormatFileSize(int sizeInBytes, int dig = 2) => FormatFileSize((double)sizeInBytes, dig);
- private static string FormatFileSize(long sizeInBytes, int dig = 2) => FormatFileSize((double)sizeInBytes, dig);
- private static string FormatFileSize(double sizeInBytes, int dig = 2)
- {
- if (sizeInBytes < 0) return "0 B";
- string[] units = { " ", "K", "M", "G", "T", "P" };
- var size = sizeInBytes;
- var unitIndex = 0;
- // 根据大小选择合适的单位
- while (size >= 100 && unitIndex < units.Length - 1)
- {
- size /= 1024;
- unitIndex++;
- }
- return $"{size.ToString("N" + dig).PadLeft(3 + dig, '0')}{units[unitIndex]}";
- }
- private static readonly IReadOnlyList<string> UserAgents =
- [
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.132 Safari/537.36",
- "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1",
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:118.0) Gecko/20100101 Firefox/118.0",
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.132 Safari/537.36 Edg/117.0.2045.60",
- "Mozilla/5.0 (Linux; Android 13; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/21.0 Chrome/117.0.5938.132 Mobile Safari/537.36",
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.132 Safari/537.36 OPR/101.0.4843.33",
- ];
- }
|