From 1425ce28a1857863c3613fc17fc0e5d0285cb0ad Mon Sep 17 00:00:00 2001 From: ProxySU Date: Thu, 26 Nov 2020 21:07:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Xray?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProxySU/MainWindow.xaml | 102 +- ProxySU/MainWindow.xaml.cs | 1613 +++++++++++++++- ProxySU/Properties/AssemblyInfo.cs | 4 +- ProxySU/ProxySU.csproj | 7 + ProxySU/ResultClientInformation.xaml | 103 +- ProxySU/ResultClientInformation.xaml.cs | 1719 ++++++++++++++++- ProxySU/Translations/ProxySU.en-US.xaml | 12 + ProxySU/Translations/ProxySU.zh-CN.xaml | 17 +- ProxySU/Translations/ProxySU.zh-TW.xaml | 13 +- ProxySU/V2RayTemplateWindow.xaml | 20 +- ProxySU/XayTemplateWindow.xaml | 390 ++++ ProxySU/XayTemplateWindow.xaml.cs | 1146 +++++++++++ ProxySU/bin/Beta/Beta.zip | Bin 753373 -> 794165 bytes TemplateConfg/xray/base.json | 12 + TemplateConfg/xray/caddy/Http2Web.caddyfile | 18 + .../xray/caddy/WebSocketTLSWeb.caddyfile | 18 + .../xray/caddy/vlessTcpTlsWeb.caddyfile | 10 + TemplateConfg/xray/client/00_log/00_log.json | 5 + TemplateConfg/xray/client/01_api/01_api.json | 3 + TemplateConfg/xray/client/02_dns/02_dns.json | 3 + .../xray/client/03_routing/03_routing.json | 3 + .../xray/client/04_policy/04_policy.json | 3 + .../xray/client/05_inbounds/05_inbounds.json | 22 + .../client/06_outbounds/06_outbounds.json | 3 + .../06_outbounds/Http2Web_client_config.json | 32 + .../Http2selfSigned_client_config.json | 32 + .../WebSocketTLSWeb_client_config.json | 29 + ...WebSocketTLS_selfSigned_client_config.json | 32 + .../WebSocket_TLS_client_config.json | 29 + .../06_outbounds/http2_client_config.json | 29 + .../06_outbounds/mkcp_client_config.json | 34 + .../06_outbounds/quic_client_config.json | 32 + .../tcpTLSselfSigned_client_config.json | 29 + .../06_outbounds/tcp_TLS_client_config.json | 26 + .../06_outbounds/tcp_client_config.json | 25 + .../06_outbounds/tcp_http_client_config.json | 56 + .../client/06_outbounds/trojan_tcp_tls.json | 23 + .../vless_http2_tls_server_config.json | 31 + .../vless_mkcp_client_config.json | 33 + .../vless_tcp_tls_caddy_cilent_config.json | 25 + .../vless_tcp_xtls_client_config.json | 26 + .../vless_ws_tls_client_config.json | 28 + .../vmess_tcp_tls_client_config.json | 36 + .../06_outbounds/webSocket_client_config.json | 25 + .../client/07_transport/07_transport.json | 3 + .../xray/client/08_stats/08_stats.json | 3 + .../xray/client/09_reverse/09_reverse.json | 3 + TemplateConfg/xray/server/00_log/00_log.json | 5 + TemplateConfg/xray/server/01_api/01_api.json | 3 + TemplateConfg/xray/server/02_dns/02_dns.json | 3 + .../xray/server/03_routing/03_routing.json | 14 + .../xray/server/04_policy/04_policy.json | 3 + .../server/05_inbounds/00_padavan_router.json | 9 + .../xray/server/05_inbounds/05_inbounds.json | 3 + .../05_inbounds/Http2Web_server_config.json | 27 + .../Http2selfSigned_server_config.json | 28 + .../WebSocketTLSWeb_server_config.json | 23 + ...WebSocketTLS_selfSigned_server_config.json | 28 + .../WebSocket_TLS_server_config.json | 31 + .../05_inbounds/http2_server_config.json | 31 + .../05_inbounds/mkcp_server_config.json | 28 + .../05_inbounds/quic_server_config.json | 26 + .../tcpTLSselfSigned_server_config.json | 25 + .../05_inbounds/tcp_TLS_server_config.json | 28 + .../05_inbounds/tcp_http_server_config.json | 44 + .../server/05_inbounds/tcp_server_config.json | 16 + .../vless_http2_tls_server_config.json | 27 + .../05_inbounds/vless_mkcp_server_config.json | 28 + .../vless_tcp_tls_server_config.json | 36 + .../vless_tcp_xtls_server_config.json | 37 + ...mess_xtls_tcp_websocket_server_config.json | 145 ++ .../vless_ws_tls_server_config.json | 24 + .../05_inbounds/webSocket_server_config.json | 19 + .../server/06_outbounds/06_outbounds.json | 12 + .../server/07_transport/07_transport.json | 3 + .../xray/server/08_stats/08_stats.json | 3 + .../xray/server/09_reverse/09_reverse.json | 3 + 77 files changed, 6531 insertions(+), 48 deletions(-) create mode 100644 ProxySU/XayTemplateWindow.xaml create mode 100644 ProxySU/XayTemplateWindow.xaml.cs create mode 100644 TemplateConfg/xray/base.json create mode 100644 TemplateConfg/xray/caddy/Http2Web.caddyfile create mode 100644 TemplateConfg/xray/caddy/WebSocketTLSWeb.caddyfile create mode 100644 TemplateConfg/xray/caddy/vlessTcpTlsWeb.caddyfile create mode 100644 TemplateConfg/xray/client/00_log/00_log.json create mode 100644 TemplateConfg/xray/client/01_api/01_api.json create mode 100644 TemplateConfg/xray/client/02_dns/02_dns.json create mode 100644 TemplateConfg/xray/client/03_routing/03_routing.json create mode 100644 TemplateConfg/xray/client/04_policy/04_policy.json create mode 100644 TemplateConfg/xray/client/05_inbounds/05_inbounds.json create mode 100644 TemplateConfg/xray/client/06_outbounds/06_outbounds.json create mode 100644 TemplateConfg/xray/client/06_outbounds/Http2Web_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/Http2selfSigned_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/WebSocketTLSWeb_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/WebSocketTLS_selfSigned_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/WebSocket_TLS_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/http2_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/mkcp_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/quic_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/tcpTLSselfSigned_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/tcp_TLS_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/tcp_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/tcp_http_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/trojan_tcp_tls.json create mode 100644 TemplateConfg/xray/client/06_outbounds/vless_http2_tls_server_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/vless_mkcp_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/vless_tcp_tls_caddy_cilent_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/vless_tcp_xtls_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/vless_ws_tls_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/vmess_tcp_tls_client_config.json create mode 100644 TemplateConfg/xray/client/06_outbounds/webSocket_client_config.json create mode 100644 TemplateConfg/xray/client/07_transport/07_transport.json create mode 100644 TemplateConfg/xray/client/08_stats/08_stats.json create mode 100644 TemplateConfg/xray/client/09_reverse/09_reverse.json create mode 100644 TemplateConfg/xray/server/00_log/00_log.json create mode 100644 TemplateConfg/xray/server/01_api/01_api.json create mode 100644 TemplateConfg/xray/server/02_dns/02_dns.json create mode 100644 TemplateConfg/xray/server/03_routing/03_routing.json create mode 100644 TemplateConfg/xray/server/04_policy/04_policy.json create mode 100644 TemplateConfg/xray/server/05_inbounds/00_padavan_router.json create mode 100644 TemplateConfg/xray/server/05_inbounds/05_inbounds.json create mode 100644 TemplateConfg/xray/server/05_inbounds/Http2Web_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/Http2selfSigned_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/WebSocketTLSWeb_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/WebSocketTLS_selfSigned_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/WebSocket_TLS_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/http2_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/mkcp_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/quic_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/tcpTLSselfSigned_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/tcp_TLS_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/tcp_http_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/tcp_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/vless_http2_tls_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/vless_mkcp_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/vless_tcp_tls_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/vless_tcp_xtls_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/vless_vmess_xtls_tcp_websocket_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/vless_ws_tls_server_config.json create mode 100644 TemplateConfg/xray/server/05_inbounds/webSocket_server_config.json create mode 100644 TemplateConfg/xray/server/06_outbounds/06_outbounds.json create mode 100644 TemplateConfg/xray/server/07_transport/07_transport.json create mode 100644 TemplateConfg/xray/server/08_stats/08_stats.json create mode 100644 TemplateConfg/xray/server/09_reverse/09_reverse.json diff --git a/ProxySU/MainWindow.xaml b/ProxySU/MainWindow.xaml index 354d236..fddda06 100644 --- a/ProxySU/MainWindow.xaml +++ b/ProxySU/MainWindow.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:ProxySU" mc:Ignorable="d" - Title="ProxySU - v2.4.25 Beta2" Height="675" Width="650"> + Title="ProxySU - v2.5.0 Beta1" Height="675" Width="660"> @@ -165,7 +165,100 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -257,7 +350,8 @@ - + + @@ -310,7 +404,7 @@ - + diff --git a/ProxySU/MainWindow.xaml.cs b/ProxySU/MainWindow.xaml.cs index 07905d5..01c16e9 100644 --- a/ProxySU/MainWindow.xaml.cs +++ b/ProxySU/MainWindow.xaml.cs @@ -151,17 +151,11 @@ namespace ProxySU //初始化SSR的密码 TextBoxSSRPassword.Text = RandomUUID(); - //初始化所选方案面板为不显示 + //初始化V2Ray所选方案面板为不显示 GridV2rayCurrentlyPlan.Visibility = Visibility.Hidden; - //初始化三合一的所有内容 - //TextBoxV2rayUUID3in1.Text = RandomUUID(); - //TextBoxV2rayPath3in1.Text = "/ray"; - - //TextBoxTrojanPassword3in1.Text= RandomUUID(); - - //TextBoxNaiveUser3in1.Text = RandomUserName(); - //TextBoxNaivePassword3in1.Text= RandomUUID(); + //初始化Xray所选方案面板为不显示 + GridXrayCurrentlyPlan.Visibility = Visibility.Hidden; //自动检查ProxySU是否有新版本发布,有则显示更新提示 Thread thread = new Thread(() => TestLatestVersionProxySU(TextBlockLastVersionProxySU, TextBlockNewVersionReminder, ButtonUpgradeProxySU)); @@ -743,6 +737,7 @@ namespace ProxySU } + #region V2Ray相关 //打开v2ray模板设置窗口 @@ -1225,14 +1220,27 @@ namespace ProxySU client.RunCommand("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak"); UploadConfig(connectionInfo, serverConfig, upLoadPath); - //设置Caddy配置文件 - functionResult = SetCaddyfile(client, upLoadPath); - if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + functionResult = FileCheckExists(client, @"/etc/caddy/Caddyfile"); + if (functionResult == false) + { + //****** "Caddy配置文件上传失败!" ******32 + currentStatus = Application.Current.FindResource("DisplayInstallInfo_UploadCaddyConfigFailed").ToString(); + MainWindowsShowInfo(currentStatus); + FunctionResultErr(); + client.Disconnect(); + return; + } //****** "Caddy配置文件上传成功,OK!" ******32 SetUpProgressBarProcessing(70); currentStatus = Application.Current.FindResource("DisplayInstallInfo_UploadCaddyConfigOK").ToString(); MainWindowsShowInfo(currentStatus); + + //设置Caddy配置文件 + functionResult = SetCaddyfile(client, upLoadPath); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + #endregion //启动Caddy服务 @@ -2188,12 +2196,10 @@ namespace ProxySU functionResult = FileCheckExists(client, @"/usr/local/bin/v2ray"); if (functionResult == false) { - //******"退出!原因:远程主机未安装V2ray"****** - MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorUpgradeSoftNotInstall").ToString() + "V2Ray!"); //******"退出!原因:远程主机未安装V2ray"****** currentStatus = Application.Current.FindResource("MessageBoxShow_ErrorUpgradeSoftNotInstall").ToString() + "V2Ray!"; MainWindowsShowInfo(currentStatus); - + MessageBox.Show(currentStatus); client.Disconnect(); return; @@ -2297,6 +2303,1570 @@ namespace ProxySU } #endregion + #region Xray相关 + //打开Xray模板设置窗口 + private void ButtonTemplateConfigurationXray_Click(object sender, RoutedEventArgs e) + { + //清空初始化模板参数 + for (int i = 0; i != ReceiveConfigurationParameters.Length; i++) + + { + ReceiveConfigurationParameters[i] = ""; + } + XrayWindowTemplateConfiguration XraywindowTemplateConfiguration = new XrayWindowTemplateConfiguration(); + XraywindowTemplateConfiguration.Closed += XraywindowTemplateConfigurationClosed; + XraywindowTemplateConfiguration.ShowDialog(); + } + + //Xay模板设置窗口关闭后,触发事件,将所选的方案与其参数显示在UI上 + private void XraywindowTemplateConfigurationClosed(object sender, System.EventArgs e) + { + if (String.IsNullOrEmpty(ReceiveConfigurationParameters[0]) == true) + { + //显示"未选择方案!" + TextBlockCurrentlySelectedPlanXray.Text = Application.Current.FindResource("TextBlockCurrentlySelectedPlanNo").ToString(); + + GridXrayCurrentlyPlan.Visibility = Visibility.Hidden; + + return; + } + else + { + GridXrayCurrentlyPlan.Visibility = Visibility.Visible; + } + TextBlockCurrentlySelectedPlanXray.Text = ReceiveConfigurationParameters[8]; //所选方案名称 + TextBlockCurrentlySelectedPlanPortXray.Text = ReceiveConfigurationParameters[1]; //服务器端口 + TextBlockCurrentlySelectedPlanUUIDXray.Text = ReceiveConfigurationParameters[2]; //UUID + TextBlockCurrentlySelectedPlanPathSeedKeyXray.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path + //MessageBox.Show(ReceiveConfigurationParameters[7]); + TextBlockCurrentlySelectedPlanFakeWebsiteXray.Text = ReceiveConfigurationParameters[7]; //伪装网站 + + if (String.Equals(ReceiveConfigurationParameters[0], "TCP") == true + || String.Equals(ReceiveConfigurationParameters[0], "TCPhttp") == true + || String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "webSocket") == true) + { + //隐藏Path/mKCP Seed/Quic Key + HideXayPathSeedKey(); + HideVlessVmessXtlsTcpWsXray(); + + //隐藏域名/Quic加密方式 + HideXrayDomainQuicEncrypt(); + + //隐藏伪装网站 + HideXrayMaskSites(); + + } + else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true) + { + //隐藏Path/mKCP Seed/Quic Key + HideXayPathSeedKey(); + HideVlessVmessXtlsTcpWsXray(); + + //显示域名 + ShowXrayDomainQuicEncrypt(); + + //隐藏伪装网站 + HideXrayMaskSites(); + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true) + { + //显示复合方案路径 + ShowVlessVmessXtlsTcpWsXray(); + + //显示域名 + ShowXrayDomainQuicEncrypt(); + + //显示伪装网站 + ShowXayMaskSites(); + + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true) + { + //隐藏Path/mKCP Seed/Quic Key + HideXayPathSeedKey(); + HideVlessVmessXtlsTcpWsXray(); + + //显示域名 + ShowXrayDomainQuicEncrypt(); + + //显示伪装网站 + ShowXayMaskSites(); + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true + || String.Equals(ReceiveConfigurationParameters[0], "Http2") == true) + { + //显示Path + ShowXayPathSeedKey(); + TextBlockXrayShowPathSeedKey.Text = "Path:"; + TextBlockCurrentlySelectedPlanPathSeedKeyXray.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path + + + //显示域名 + ShowXrayDomainQuicEncrypt(); + + //显示伪装网站(暂时不显示) + HideXrayMaskSites(); + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true) + { + //显示Path + ShowXayPathSeedKey(); + TextBlockXrayShowPathSeedKey.Text = "Path:"; + TextBlockCurrentlySelectedPlanPathSeedKeyXray.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path + + //显示域名 + ShowXrayDomainQuicEncrypt(); + + //显示伪装网站 + ShowXayMaskSites(); + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true) + { + //显示Path + ShowXayPathSeedKey(); + TextBlockXrayShowPathSeedKey.Text = "Path:"; + TextBlockCurrentlySelectedPlanPathSeedKeyXray.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path + + //隐藏域名/Quic加密方式 + HideXrayDomainQuicEncrypt(); + + //隐藏伪装网站 + HideXrayMaskSites(); + } + else if (ReceiveConfigurationParameters[0].Contains("mKCP") == true) + { + //显示mKCP Seed + ShowXayPathSeedKey(); + TextBlockXrayShowPathSeedKey.Text = "mKCP Seed:"; + TextBlockCurrentlySelectedPlanPathSeedKeyXray.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path + + //隐藏域名/Quic加密方式 + HideXrayDomainQuicEncrypt(); + + //隐藏伪装网站 + HideXrayMaskSites(); + } + else if (ReceiveConfigurationParameters[0].Contains("Quic") == true) + { + //显示QUIC Key + ShowXayPathSeedKey(); + TextBlockXrayShowPathSeedKey.Text = "QUIC Key:"; + TextBlockCurrentlySelectedPlanPathSeedKeyXray.Text = ReceiveConfigurationParameters[6]; //mKCP Seed\Quic Key\Path + + //显示Quic加密方式 + ShowXrayDomainQuicEncrypt(); + TextBlockXrayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockQuicEncryption").ToString(); + TextBlockCurrentlySelectedPlanDomainXray.Text = ReceiveConfigurationParameters[3]; //Quic加密方式 + if (String.Equals(TextBlockCurrentlySelectedPlanDomain.Text, "none") == true) + { + HideXayPathSeedKey(); + } + + + //隐藏伪装网站 + HideXrayMaskSites(); + } + } + + #region 当前方案界面控制 + //显示端口与UUID + private void ShowXrayCurrentPortUUID() + { + TextBlockXrayShowPort.Visibility = Visibility.Visible; + TextBlockCurrentlySelectedPlanPortXray.Visibility = Visibility.Visible; + + TextBlockXrayShowUUID.Visibility = Visibility.Visible; + TextBlockCurrentlySelectedPlanUUIDXray.Visibility = Visibility.Visible; + } + + //显示Path/mKCP Seed/Quic Key + private void ShowXayPathSeedKey() + { + HideVlessVmessXtlsTcpWsXray(); + TextBlockXrayShowPathSeedKey.Visibility = Visibility.Visible; + TextBlockCurrentlySelectedPlanPathSeedKeyXray.Visibility = Visibility.Visible; + } + + //隐藏Path/mKCP Seed/Quic Key + private void HideXayPathSeedKey() + { + TextBlockXrayShowPathSeedKey.Visibility = Visibility.Hidden; + TextBlockCurrentlySelectedPlanPathSeedKeyXray.Visibility = Visibility.Hidden; + } + + //显示VLESS VMESS XTLS TCP WS 复合方案 + private void ShowVlessVmessXtlsTcpWsXray() + { + HideXayPathSeedKey(); + GridVlessVmessXtlsTcpWsXray.Visibility = Visibility.Visible; + TextBlockBoxPathVlessWSXray.Text = ReceiveConfigurationParameters[3]; + TextBlockBoxPathVmessTcpXray.Text = ReceiveConfigurationParameters[9]; + TextBlockBoxPathVmessWSXray.Text = ReceiveConfigurationParameters[6]; + } + + //隐藏VLESS VMESS XTLS TCP WS 复合方案 + private void HideVlessVmessXtlsTcpWsXray() + { + GridVlessVmessXtlsTcpWsXray.Visibility = Visibility.Collapsed; + } + + //显示域名/Quic加密方式 + private void ShowXrayDomainQuicEncrypt() + { + TextBlockXrayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Visible; + TextBlockCurrentlySelectedPlanDomainXray.Visibility = Visibility.Visible; + TextBlockXrayShowCurrentlySelectedPlanDomain.Text = Application.Current.FindResource("TextBlockV2RayDomain").ToString(); + TextBlockCurrentlySelectedPlanDomainXray.Text = ReceiveConfigurationParameters[4]; //域名 + + } + + //隐藏域名/Quic加密方式 + private void HideXrayDomainQuicEncrypt() + { + TextBlockXrayShowCurrentlySelectedPlanDomain.Visibility = Visibility.Hidden; + TextBlockCurrentlySelectedPlanDomainXray.Visibility = Visibility.Hidden; + } + //显示伪装网站 + private void ShowXayMaskSites() + { + TextBlockXrayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Visible; + TextBlockCurrentlySelectedPlanFakeWebsiteXray.Visibility = Visibility.Visible; + } + + //隐藏伪装网站 + private void HideXrayMaskSites() + { + TextBlockXrayShowCurrentlySelectedPlanFakeWebsite.Visibility = Visibility.Hidden; + TextBlockCurrentlySelectedPlanFakeWebsiteXray.Visibility = Visibility.Hidden; + } + #endregion + + //传送Xray模板参数,启动Xray安装进程 + private void ButtonXraySetUP_Click(object sender, RoutedEventArgs e) + + { + ConnectionInfo connectionInfo = GenerateConnectionInfo(); + if (connectionInfo == null) + { + //****** "远程主机连接信息有误,请检查!" ****** + MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorHostConnection").ToString()); + return; + } + + + //生成客户端配置时,连接的服务主机的IP或者域名 + if (String.IsNullOrEmpty(ReceiveConfigurationParameters[4]) == true) + { + ReceiveConfigurationParameters[4] = PreTrim(TextBoxHost.Text); + testDomain = false; + } + //选择模板 + if (String.IsNullOrEmpty(ReceiveConfigurationParameters[0]) == true) + { + //******"请先选择配置模板!"****** + MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ChooseTemplate").ToString()); + return; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "TCP") == true + || String.Equals(ReceiveConfigurationParameters[0], "TCPhttp") == true + || String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "webSocket") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true + || ReceiveConfigurationParameters[0].Contains("mKCP") == true + || ReceiveConfigurationParameters[0].Contains("Quic") == true) + { + testDomain = false; + + } + else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "Http2") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true) + { + testDomain = true; + + } + + + //Thread thread + //SetUpProgressBarProcessing(0); //重置安装进度 + installationDegree = 0; + TextBoxMonitorCommandResults.Text = ""; + //Thread thread = new Thread(() => StartSetUpXray(connectionInfo, TextBlockSetUpProcessing, ProgressBarSetUpProcessing)); + Thread thread = new Thread(() => StartSetUpXray(connectionInfo)); + + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + + + } + + //登录远程主机布署Xray程序 + private void StartSetUpXray(ConnectionInfo connectionInfo) + { + functionResult = true; + onlyIpv6 = false; + getApt = false; + getDnf = false; + getYum = false; + + //******"正在登录远程主机......"****** + SetUpProgressBarProcessing(1); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_Login").ToString(); + MainWindowsShowInfo(currentStatus); + + try + { + #region 主机指纹,暂未启用 + //byte[] expectedFingerPrint = new byte[] { + // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, + // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b + // }; + #endregion + using (var client = new SshClient(connectionInfo)) + { + #region ssh登录验证主机指纹代码块,暂未启用 + // client.HostKeyReceived += (sender, e) => + // { + // if (expectedFingerPrint.Length == e.FingerPrint.Length) + // { + // for (var i = 0; i < expectedFingerPrint.Length; i++) + // { + // if (expectedFingerPrint[i] != e.FingerPrint[i]) + // { + // e.CanTrust = false; + // break; + // } + // } + // } + // else + // { + // e.CanTrust = false; + // } + // }; + #endregion + + client.Connect(); + if (client.IsConnected == true) + { + //******"主机登录成功"****** + SetUpProgressBarProcessing(3); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginSuccessful").ToString(); + MainWindowsShowInfo(currentStatus); + //Thread.Sleep(3000); + } + + //检测root权限 5--7 + functionResult = RootAuthorityDetect(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //检测是否已安装代理 8--10 + functionResult = SoftInstalledIsNoYes(client, "xray", @"/usr/local/bin/xray"); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //检测系统是否符合安装要求 11--30 + //检测关闭Selinux及系统组件是否齐全(apt-get/yum/dnf/systemctl) + //安装依赖软件,检测端口,防火墙开启端口 + functionResult = ShutDownSelinuxAndSysComponentsDetect(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //检测校对时间 31--33 + functionResult = CheckProofreadingTime(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //检测域名解析是否正确 34---36 + if (testDomain == true) + { + functionResult = DomainResolutionCurrentIPDetect(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + } + + //下载安装脚本安装 37--40 + //functionResult = ProxySoftInstall(client, @"Xray", @"https://raw.githubusercontent.com/v2fly/fhs-install-Xray/master/install-release.sh"); + functionResult = ProxySoftInstall(client, @"Xray", @"https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh"); + + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + //functionResult = XrayInstallScript(client); + //if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //程序是否安装成功检测 41--43 + functionResult = SoftInstalledSuccessOrFail(client, "xray", @"/usr/local/bin/xray"); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //生成服务端配置 44--46 + functionResult = GenerateServerConfigurationXray(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //****** "上传配置文件......" ****** 47--50 + currentStatus = Application.Current.FindResource("DisplayInstallInfo_UploadSoftConfig").ToString(); + MainWindowsShowInfo(currentStatus); + string serverRemoteConfig = @"/usr/local/etc/xray/config.json"; + UploadConfig(connectionInfo, @"config.json", serverRemoteConfig); + File.Delete(@"config.json"); + SetUpProgressBarProcessing(50); + + //如果使用http2/WebSocketTLS/tcpTLS/VlessTcpTlsWeb/VLESS+TCP+XTLS+Web模式,先要安装acme.sh,申请证书 + if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true + || String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true) + { + //安装acme.sh与申请证书 51--57 + functionResult = AcmeShInstall(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //安装证书到Xray 58--60 + functionResult = CertInstallToXray(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + } + + + #region Caddy安装 61--70 + + //如果是VLESS+TCP+XTLS+Web/VLESS+TCP+TLS+Web/VLESS+WebSocket+TLS+Web/VLESS+http2+TLS+Web/WebSocket+TLS+Web/http2Web模式,需要安装Caddy + if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true) + { + //安装Caddy 61--66 + functionResult = CaddyInstall(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + + #region 上传Caddy配置文件 67--70 + + //******"上传Caddy配置文件"****** + SetUpProgressBarProcessing(67); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_UploadCaddyConfig").ToString(); + MainWindowsShowInfo(currentStatus); + + string serverConfig = ""; + sshShellCommand = @"mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true) + { + serverConfig = $"{pwdir}" + @"TemplateConfg\xray\caddy\vlessTcpTlsWeb.caddyfile"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true) + { + serverConfig = $"{pwdir}" + @"TemplateConfg\xray\caddy\WebSocketTLSWeb.caddyfile"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true) + { + serverConfig = $"{pwdir}" + @"TemplateConfg\xray\caddy\Http2Web.caddyfile"; + } + + string upLoadPath = "/etc/caddy/Caddyfile"; + client.RunCommand("mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak"); + UploadConfig(connectionInfo, serverConfig, upLoadPath); + + functionResult = FileCheckExists(client, @"/etc/caddy/Caddyfile"); + if (functionResult == false) + { + //****** "Caddy配置文件上传失败!" ******32 + currentStatus = Application.Current.FindResource("DisplayInstallInfo_UploadCaddyConfigFailed").ToString(); + MainWindowsShowInfo(currentStatus); + FunctionResultErr(); + client.Disconnect(); + return; + } + + //****** "Caddy配置文件上传成功,OK!" ******32 + SetUpProgressBarProcessing(70); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_UploadCaddyConfigOK").ToString(); + MainWindowsShowInfo(currentStatus); + + //设置Caddy配置文件 + functionResult = SetCaddyfile(client, upLoadPath); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + + #endregion + + //启动Caddy服务 + functionResult = SoftStartDetect(client, "caddy", @"/usr/bin/caddy"); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + } + #endregion + + //****** "正在启动Xray......" ******35 + functionResult = SoftStartDetect(client, "xray", @"/usr/local/bin/xray"); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + //测试BBR条件,若满足提示是否启用 + functionResult = DetectBBRandEnable(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + client.Disconnect();//断开服务器ssh连接 + + //生成客户端配置 96--98 + functionResult = GenerateClientConfigurationXray(); + + //****** "Xray安装成功,祝你玩的愉快!!" ******40 + SetUpProgressBarProcessing(100); + currentStatus = "Xray" + Application.Current.FindResource("DisplayInstallInfo_ProxyInstalledOK").ToString(); + MainWindowsShowInfo(currentStatus); + + Thread.Sleep(1000); + + //显示服务端连接参数 + proxyType = "Xray"; + ResultClientInformation resultClientInformation = new ResultClientInformation(); + resultClientInformation.ShowDialog(); + + return; + + } + } + catch (Exception ex1)//例外处理 + { + ProcessException(ex1.Message); + + //****** "安装失败!" ****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginFailed").ToString(); + MainWindowsShowInfo(currentStatus); + } + } + + #region Xray专用调用函数 + //安装代理程序 37--40 + //functionResult = ProxySoftInstall(client,@"",@""); + //if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + /* private bool ProxySoftInstallV2ray(SshClient client, string proxyName, string downloadUrl) + { + //****** "系统环境检测完毕,符合安装要求,开始布署......" ****** + SetUpProgressBarProcessing(37); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_StartInstalling").ToString(); + MainWindowsShowInfo(currentStatus); + + //****** "正在安装{proxyName}......" ****** + SetUpProgressBarProcessing(38); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_StartInstallSoft").ToString() + $"{proxyName}......"; + MainWindowsShowInfo(currentStatus); + + saveShellScriptFileName = GenerateRandomScriptFileName(GenerateRandomStr(10)); + + sshShellCommand = $"curl -o {saveShellScriptFileName} {downloadUrl}"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + functionResult = FileCheckExists(client, $"{saveShellScriptFileName}"); + if (functionResult == false) + { + //***文件下载失败!*** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_DownloadScriptFailed").ToString(); + MainWindowsShowInfo(currentStatus); + return false; + + } + sshShellCommand = $"yes | bash {saveShellScriptFileName} --version v4.32.1"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = $"rm -f {saveShellScriptFileName}"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(40); + return true; + } */ + + + //生成Xray服务端配置 44--46 + //functionResult = GenerateServerConfiguration(client); + //if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + private bool GenerateServerConfigurationXray(SshClient client) + { + SetUpProgressBarProcessing(44); + //修改xray.service + + sshShellCommand = $"sed -i 's/User=nobody/User=root/g' /etc/systemd/system/xray.service"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = $"sed -i 's/CapabilityBoundingSet=/#CapabilityBoundingSet=/g' /etc/systemd/system/xray.service"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = $"sed -i 's/AmbientCapabilities=/#AmbientCapabilities=/g' /etc/systemd/system/xray.service"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = $"systemctl daemon-reload"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + //备用下载地址:https://raw.githubusercontent.com/proxysu/Resources/master/xray/xray.service + + //sshShellCommand = $"yes | curl -o /etc/systemd/system/xray.service https://raw.githubusercontent.com/proxysu/Resources/master/xray/xray.service"; + //currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + //备份原来的文件 + //functionResult = FileCheckExists(client, @"/usr/local/etc/xray/config.json"); + //if (functionResult == true) + //{ + + sshShellCommand = @"mv /usr/local/etc/xray/config.json /usr/local/etc/xray/config.json.1"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + //} + //读取配置文件各个模块 + string logConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\00_log\00_log.json"; + string apiConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\01_api\01_api.json"; + string dnsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\02_dns\02_dns.json"; + string routingConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\03_routing\03_routing.json"; + string policyConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\04_policy\04_policy.json"; + string inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\05_inbounds.json"; + string outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\06_outbounds\06_outbounds.json"; + string transportConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\07_transport\07_transport.json"; + string statsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\08_stats\08_stats.json"; + string reverseConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\09_reverse\09_reverse.json"; + string baseConfigJson = $"{pwdir}" + @"TemplateConfg\xray\base.json"; + + //配置文件模块合成 + using (StreamReader reader = File.OpenText(baseConfigJson)) + { + JObject serverJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); + //读取"log" + using (StreamReader readerJson = File.OpenText(logConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["log"] = jObjectJson["log"]; + } + //读取"api" + using (StreamReader readerJson = File.OpenText(apiConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["api"] = jObjectJson["api"]; + } + //读取"dns" + using (StreamReader readerJson = File.OpenText(dnsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["dns"] = jObjectJson["dns"]; + } + //读取"routing" + using (StreamReader readerJson = File.OpenText(routingConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["routing"] = jObjectJson["routing"]; + } + //读取"policy" + using (StreamReader readerJson = File.OpenText(policyConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["policy"] = jObjectJson["policy"]; + } + //读取"inbounds" + using (StreamReader readerJson = File.OpenText(inboundsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["inbounds"] = jObjectJson["inbounds"]; + } + //读取"outbounds" + using (StreamReader readerJson = File.OpenText(outboundsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["outbounds"] = jObjectJson["outbounds"]; + } + //读取"transport" + using (StreamReader readerJson = File.OpenText(transportConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["transport"] = jObjectJson["transport"]; + } + //读取"stats" + using (StreamReader readerJson = File.OpenText(statsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["stats"] = jObjectJson["stats"]; + } + //读取"reverse" + using (StreamReader readerJson = File.OpenText(reverseConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + serverJson["reverse"] = jObjectJson["reverse"]; + } + + //依据安装模式读取相应模板 + if (String.Equals(ReceiveConfigurationParameters[0], "TCP") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\tcp_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "TCPhttp") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\tcp_http_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\tcp_TLS_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\tcpTLSselfSigned_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\vless_tcp_xtls_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\vless_tcp_tls_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\vless_ws_tls_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\vless_http2_tls_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\vless_vmess_xtls_tcp_websocket_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "webSocket") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\webSocket_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\WebSocket_TLS_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\WebSocketTLS_selfSigned_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\WebSocketTLSWeb_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\http2_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\Http2Web_server_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\Http2selfSigned_server_config.json"; + } + //else if (String.Equals(ReceiveConfigurationParameters[0], "MkcpNone")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2SRTP")||String.Equals(ReceiveConfigurationParameters[0], "mKCPuTP")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2WechatVideo")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2DTLS")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2WireGuard")) + else if (ReceiveConfigurationParameters[0].Contains("mKCP") == true) + { + if (mKCPvlessIsSet == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\vless_mkcp_server_config.json"; + } + else + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\mkcp_server_config.json"; + } + + } + + // else if (String.Equals(ReceiveConfigurationParameters[0], "QuicNone") || String.Equals(ReceiveConfigurationParameters[0], "QuicSRTP") || String.Equals(ReceiveConfigurationParameters[0], "Quic2uTP") || String.Equals(ReceiveConfigurationParameters[0], "QuicWechatVideo") || String.Equals(ReceiveConfigurationParameters[0], "QuicDTLS") || String.Equals(ReceiveConfigurationParameters[0], "QuicWireGuard")) + else if (ReceiveConfigurationParameters[0].Contains("Quic") == true) + { + inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\quic_server_config.json"; + } + + //读取"inbounds" + using (StreamReader readerJson = File.OpenText(inboundsConfigJson)) + { + JObject jObjectJsonTmp = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + var jObjectJson = (dynamic)jObjectJsonTmp; + + //Padavan路由固件服务端设置(因为客户端分流有问题所以在服务端弥补)加上后会影响一定的速度 + + //string sniffingAddServer = $"{pwdir}" + @"TemplateConfg\xray\server\05_inbounds\00_padavan_router.json"; + //using (StreamReader readerSniffingJson = File.OpenText(sniffingAddServer)) + //{ + // JObject jObjectSniffingJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerSniffingJson)); + // jObjectJson["inbounds"][0]["sniffing"] = jObjectSniffingJson["sniffing"]; + //} + + //设置uuid + jObjectJson["inbounds"][0]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2]; + + //除WebSocketTLSWeb/http2Web/VLESS+WebSocket+TLS+Web/VLESS+http2+TLS+Web模式外设置监听端口 + if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == false + && String.Equals(ReceiveConfigurationParameters[0], "http2Web") == false + && String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == false + && String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == false) + { + jObjectJson["inbounds"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]); + } + + //设置VLESS协议的回落端口,指向Caddy + if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true) + { + //设置Caddy随机监听的端口 + randomCaddyListenPort = GetRandomPort(); + + //指向Caddy监听的随机端口 + jObjectJson["inbounds"][0]["settings"]["fallbacks"][0]["dest"] = randomCaddyListenPort; + } + //设置VLESS+VMESS+Trojan+XTLS+TCP+WebSocket+Web协议 + if (String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == true) + { + //设置Caddy随机监听的端口 + randomCaddyListenPort = GetRandomPort(); + + //指向Caddy监听的随机端口 + jObjectJson["inbounds"][1]["settings"]["fallbacks"][0]["dest"] = randomCaddyListenPort; + //设置其他模式的UUID + jObjectJson["inbounds"][1]["settings"]["clients"][0]["password"] = ReceiveConfigurationParameters[2]; + jObjectJson["inbounds"][2]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2]; + jObjectJson["inbounds"][3]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2]; + jObjectJson["inbounds"][4]["settings"]["clients"][0]["id"] = ReceiveConfigurationParameters[2]; + + //设置Vless回落与分流的Path + jObjectJson["inbounds"][0]["settings"]["fallbacks"][1]["path"] = ReceiveConfigurationParameters[3]; + jObjectJson["inbounds"][0]["settings"]["fallbacks"][2]["path"] = ReceiveConfigurationParameters[9]; + jObjectJson["inbounds"][0]["settings"]["fallbacks"][3]["path"] = ReceiveConfigurationParameters[6]; + + //设置Vless ws Path + jObjectJson["inbounds"][2]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[3]; + //设置Vmess tcp Path + jObjectJson["inbounds"][3]["streamSettings"]["tcpSettings"]["header"]["request"]["path"][0] = ReceiveConfigurationParameters[9]; + //设置Vmess ws Path + jObjectJson["inbounds"][4]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[6]; + + } + + //TLS自签证书/WebSocketTLS(自签证书)/http2自签证书模式下,使用v2ctl 生成自签证书 + if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true) + { + string selfSignedCa = client.RunCommand("/usr/local/bin/v2ctl cert --ca").Result; + JObject selfSignedCaJObject = JObject.Parse(selfSignedCa); + jObjectJson["inbounds"][0]["streamSettings"]["tlsSettings"]["certificates"][0] = selfSignedCaJObject; + } + + //如果是WebSocketTLSWeb/WebSocketTLS/WebSocketTLS(自签证书)/VLESS+WebSocket+TLS+Web模式,则设置路径 + if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true) + { + jObjectJson["inbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[6]; + } + + //如果是Http2/http2Web/http2自签/VLESS+http2+TLS+Web模式下,设置路径 + if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true) + { + jObjectJson["inbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[6]; + } + + //如果是Http2+Web/VLESS+http2+TLS+Web模式下,设置host + if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true) + { + jObjectJson["inbounds"][0]["streamSettings"]["httpSettings"]["host"][0] = ReceiveConfigurationParameters[4]; + } + + //mkcp模式下,设置伪装类型 + if (ReceiveConfigurationParameters[0].Contains("mKCP") == true) + { + jObjectJson["inbounds"][0]["streamSettings"]["kcpSettings"]["header"]["type"] = ReceiveConfigurationParameters[5]; + if (String.IsNullOrEmpty(ReceiveConfigurationParameters[6]) == false) + { + jObjectJson["inbounds"][0]["streamSettings"]["kcpSettings"]["seed"] = ReceiveConfigurationParameters[6]; + } + } + + //quic模式下设置伪装类型及密钥 + if (ReceiveConfigurationParameters[0].Contains("Quic") == true) + { + jObjectJson["inbounds"][0]["streamSettings"]["quicSettings"]["header"]["type"] = ReceiveConfigurationParameters[5]; + jObjectJson["inbounds"][0]["streamSettings"]["quicSettings"]["security"] = ReceiveConfigurationParameters[3]; + + if (String.Equals(ReceiveConfigurationParameters[3], "none") == true) + { + ReceiveConfigurationParameters[6] = ""; + } + jObjectJson["inbounds"][0]["streamSettings"]["quicSettings"]["key"] = ReceiveConfigurationParameters[6]; + } + + serverJson["inbounds"] = jObjectJson["inbounds"]; + } + + using (StreamWriter sw = new StreamWriter(@"config.json")) + { + sw.Write(serverJson.ToString()); + } + } + SetUpProgressBarProcessing(46); + return true; + } + + //安装证书到Xray 58--60 + //functionResult = CertInstallToXray(client); + //if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + private bool CertInstallToXray(SshClient client) + { + //****** "安装证书到Xray......" ******26 + SetUpProgressBarProcessing(58); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_IntallCertToSoft").ToString() + "Xray......"; + MainWindowsShowInfo(currentStatus); + + sshShellCommand = @"mkdir -p /usr/local/etc/xray/ssl"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = $"/root/.acme.sh/acme.sh --installcert -d {ReceiveConfigurationParameters[4]} --certpath /usr/local/etc/xray/ssl/xray_ssl.crt --keypath /usr/local/etc/xray/ssl/xray_ssl.key --capath /usr/local/etc/xray/ssl/xray_ssl.crt --reloadcmd \"systemctl restart xray\""; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + sshShellCommand = @"if [ ! -f ""/usr/local/etc/xray/ssl/xray_ssl.key"" ]; then echo ""0""; else echo ""1""; fi | head -n 1"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + if (currentShellCommandResult.Contains("1") == true) + { + //****** "证书成功安装到Xray!" ******27 + SetUpProgressBarProcessing(60); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_IntallCertToSoftOK").ToString() + "Xray!"; + MainWindowsShowInfo(currentStatus); + } + else + { + //****** "证书安装到Xray失败,原因未知,可以向开发者提问!" ****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_IntallCertToSoftFail").ToString() + + "Xray" + + Application.Current.FindResource("DisplayInstallInfo_InstallCertFailAsk").ToString(); + MainWindowsShowInfo(currentStatus); + return false; + } + + //设置私钥权限 + sshShellCommand = @"chmod 644 /usr/local/etc/xray/ssl/xray_ssl.key"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + return true; + } + + //生成Xray客户端配置 96--98 + //functionResult = GenerateClientConfiguration(); + //if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + private bool GenerateClientConfigurationXray() + { + //****** "生成客户端配置......" ******39 + SetUpProgressBarProcessing(96); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_GenerateClientConfig").ToString(); + MainWindowsShowInfo(currentStatus); + + string logConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\00_log\00_log.json"; + string apiConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\01_api\01_api.json"; + string dnsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\02_dns\02_dns.json"; + string routingConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\03_routing\03_routing.json"; + string policyConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\04_policy\04_policy.json"; + string inboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\05_inbounds\05_inbounds.json"; + string outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\06_outbounds.json"; + string transportConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\07_transport\07_transport.json"; + string statsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\08_stats\08_stats.json"; + string reverseConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\09_reverse\09_reverse.json"; + string baseConfigJson = $"{pwdir}" + @"TemplateConfg\xray\base.json"; + //Thread.Sleep(1000); + if (!Directory.Exists("xray_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory("xray_config");//创建该文件夹   + } + + using (StreamReader reader = File.OpenText(baseConfigJson)) + { + JObject clientJson = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); + //读取"log" + using (StreamReader readerJson = File.OpenText(logConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["log"] = jObjectJson["log"]; + } + //读取"api" + using (StreamReader readerJson = File.OpenText(apiConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["api"] = jObjectJson["api"]; + } + //读取"dns" + using (StreamReader readerJson = File.OpenText(dnsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["dns"] = jObjectJson["dns"]; + } + //读取"routing" + using (StreamReader readerJson = File.OpenText(routingConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["routing"] = jObjectJson["routing"]; + } + //读取"policy" + using (StreamReader readerJson = File.OpenText(policyConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["policy"] = jObjectJson["policy"]; + } + //读取"inbounds" + using (StreamReader readerJson = File.OpenText(inboundsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["inbounds"] = jObjectJson["inbounds"]; + } + //读取"outbounds" + using (StreamReader readerJson = File.OpenText(outboundsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["outbounds"] = jObjectJson["outbounds"]; + } + //读取"transport" + using (StreamReader readerJson = File.OpenText(transportConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["transport"] = jObjectJson["transport"]; + } + //读取"stats" + using (StreamReader readerJson = File.OpenText(statsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["stats"] = jObjectJson["stats"]; + } + //读取"reverse" + using (StreamReader readerJson = File.OpenText(reverseConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + clientJson["reverse"] = jObjectJson["reverse"]; + } + + //根据不同的安装方案,选择相应的客户端模板 + if (String.Equals(ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == false) + { + #region 单模式方案 + //根据选择的不同模式,选择相应的配置文件 + if (String.Equals(ReceiveConfigurationParameters[0], "TCP") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\tcp_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "TCPhttp") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\tcp_http_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLS") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\tcp_TLS_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\tcpTLSselfSigned_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vless_tcp_xtls_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vless_tcp_tls_caddy_cilent_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vless_ws_tls_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vless_http2_tls_server_config.json"; + } + + else if (String.Equals(ReceiveConfigurationParameters[0], "webSocket") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\webSocket_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\WebSocket_TLS_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\WebSocketTLS_selfSigned_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\WebSocketTLSWeb_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\http2_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\Http2Web_client_config.json"; + } + else if (String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\Http2selfSigned_client_config.json"; + } + //else if (String.Equals(ReceiveConfigurationParameters[0], "MkcpNone")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2SRTP")||String.Equals(ReceiveConfigurationParameters[0], "mKCPuTP")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2WechatVideo")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2DTLS")|| String.Equals(ReceiveConfigurationParameters[0], "mKCP2WireGuard")) + else if (ReceiveConfigurationParameters[0].Contains("mKCP") == true) + { + if (mKCPvlessIsSet == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vless_mkcp_client_config.json"; + } + else + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\mkcp_client_config.json"; + } + + } + // else if (String.Equals(ReceiveConfigurationParameters[0], "QuicNone") || String.Equals(ReceiveConfigurationParameters[0], "QuicSRTP") || String.Equals(ReceiveConfigurationParameters[0], "Quic2uTP") || String.Equals(ReceiveConfigurationParameters[0], "QuicWechatVideo") || String.Equals(ReceiveConfigurationParameters[0], "QuicDTLS") || String.Equals(ReceiveConfigurationParameters[0], "QuicWireGuard")) + else if (ReceiveConfigurationParameters[0].Contains("Quic") == true) + { + outboundsConfigJson = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\quic_client_config.json"; + } + + + //读取"相应模板的outbounds" + using (StreamReader readerJson = File.OpenText(outboundsConfigJson)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + + //设置客户端的地址/端口/id + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["address"] = ReceiveConfigurationParameters[4]; + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]); + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] = ReceiveConfigurationParameters[2]; + + + //设置WebSocket模式下的path + if (String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true) + { + jObjectJson["outbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[6]; + } + + //设置http2模式下的path + if (String.Equals(ReceiveConfigurationParameters[0], "Http2") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "http2selfSigned") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true) + { + jObjectJson["outbounds"][0]["streamSettings"]["httpSettings"]["path"] = ReceiveConfigurationParameters[6]; + } + + //设置http2+TLS+Web/VLESS+http2+TLS+Web模式下的host + if (String.Equals(ReceiveConfigurationParameters[0], "http2Web") == true + || String.Equals(ReceiveConfigurationParameters[0], "VlessHttp2Web") == true) + { + jObjectJson["outbounds"][0]["streamSettings"]["httpSettings"]["host"][0] = ReceiveConfigurationParameters[4]; + } + + //设置VLESS+TCP+XTLS+Web模式下的serverName + //if (String.Equals(ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true) + //{ + // jObjectJson["outbounds"][0]["streamSettings"]["xtlsSettings"]["serverName"] = ReceiveConfigurationParameters[4]; + //} + + //设置mkcp + if (ReceiveConfigurationParameters[0].Contains("mKCP") == true) + { + jObjectJson["outbounds"][0]["streamSettings"]["kcpSettings"]["header"]["type"] = ReceiveConfigurationParameters[5]; + if (String.IsNullOrEmpty(ReceiveConfigurationParameters[6]) == false) + { + jObjectJson["outbounds"][0]["streamSettings"]["kcpSettings"]["seed"] = ReceiveConfigurationParameters[6]; + } + } + + //设置QUIC + if (ReceiveConfigurationParameters[0].Contains("Quic") == true) + { + jObjectJson["outbounds"][0]["streamSettings"]["quicSettings"]["header"]["type"] = ReceiveConfigurationParameters[5]; + jObjectJson["outbounds"][0]["streamSettings"]["quicSettings"]["security"] = ReceiveConfigurationParameters[3]; + if (String.Equals(ReceiveConfigurationParameters[3], "none") == true) + { + ReceiveConfigurationParameters[6] = ""; + } + jObjectJson["outbounds"][0]["streamSettings"]["quicSettings"]["key"] = ReceiveConfigurationParameters[6]; + } + + clientJson["outbounds"] = jObjectJson["outbounds"]; + + } + + using (StreamWriter sw = new StreamWriter(@"xray_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + + #endregion + + } + else + { + //复合方案所需要的配置文件 + //VLESS over TCP with XTLS模式 + string outboundsConfigJsons = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vless_tcp_xtls_client_config.json"; + using (StreamReader readerJson = File.OpenText(outboundsConfigJsons)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + + //设置客户端的地址/端口/id + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["address"] = ReceiveConfigurationParameters[4]; + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]); + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] = ReceiveConfigurationParameters[2]; + + clientJson["outbounds"] = jObjectJson["outbounds"]; + if (!Directory.Exists(@"xray_config\vless_tcp_xtls_client_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"xray_config\vless_tcp_xtls_client_config");//创建该文件夹   + } + using (StreamWriter sw = new StreamWriter(@"xray_config\vless_tcp_xtls_client_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + + //VLESS over TCP with TLS模式 + outboundsConfigJsons = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vless_tcp_tls_caddy_cilent_config.json"; + using (StreamReader readerJson = File.OpenText(outboundsConfigJsons)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + + //设置客户端的地址/端口/id + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["address"] = ReceiveConfigurationParameters[4]; + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]); + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] = ReceiveConfigurationParameters[2]; + + clientJson["outbounds"] = jObjectJson["outbounds"]; + if (!Directory.Exists(@"xray_config\vless_tcp_tls_client_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"xray_config\vless_tcp_tls_client_config");//创建该文件夹   + } + using (StreamWriter sw = new StreamWriter(@"xray_config\vless_tcp_tls_client_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + + //VLESS over WS with TLS 模式 + outboundsConfigJsons = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vless_ws_tls_client_config.json"; + using (StreamReader readerJson = File.OpenText(outboundsConfigJsons)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + + //设置客户端的地址/端口/id + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["address"] = ReceiveConfigurationParameters[4]; + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]); + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] = ReceiveConfigurationParameters[2]; + jObjectJson["outbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[3]; + + clientJson["outbounds"] = jObjectJson["outbounds"]; + if (!Directory.Exists(@"xray_config\vless_ws_tls_client_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"xray_config\vless_ws_tls_client_config");//创建该文件夹   + } + using (StreamWriter sw = new StreamWriter(@"xray_config\vless_ws_tls_client_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + + //VMess over TCP with TLS模式 + outboundsConfigJsons = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\vmess_tcp_tls_client_config.json"; + using (StreamReader readerJson = File.OpenText(outboundsConfigJsons)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + + //设置客户端的地址/端口/id + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["address"] = ReceiveConfigurationParameters[4]; + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]); + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] = ReceiveConfigurationParameters[2]; + jObjectJson["outbounds"][0]["streamSettings"]["tcpSettings"]["header"]["request"]["path"][0] = ReceiveConfigurationParameters[9]; + + clientJson["outbounds"] = jObjectJson["outbounds"]; + if (!Directory.Exists(@"xray_config\vmess_tcp_tls_client_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"xray_config\vmess_tcp_tls_client_config");//创建该文件夹   + } + using (StreamWriter sw = new StreamWriter(@"xray_config\vmess_tcp_tls_client_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + + //VMess over WS with TLS模式 + outboundsConfigJsons = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\WebSocketTLSWeb_client_config.json"; + using (StreamReader readerJson = File.OpenText(outboundsConfigJsons)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + + //设置客户端的地址/端口/id + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["address"] = ReceiveConfigurationParameters[4]; + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]); + jObjectJson["outbounds"][0]["settings"]["vnext"][0]["users"][0]["id"] = ReceiveConfigurationParameters[2]; + jObjectJson["outbounds"][0]["streamSettings"]["wsSettings"]["path"] = ReceiveConfigurationParameters[6]; + + clientJson["outbounds"] = jObjectJson["outbounds"]; + if (!Directory.Exists(@"xray_config\vmess_ws_tls_client_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"xray_config\vmess_ws_tls_client_config");//创建该文件夹   + } + using (StreamWriter sw = new StreamWriter(@"xray_config\vmess_ws_tls_client_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + + //Trojan over TCP with TLS模式 + outboundsConfigJsons = $"{pwdir}" + @"TemplateConfg\xray\client\06_outbounds\trojan_tcp_tls.json"; + using (StreamReader readerJson = File.OpenText(outboundsConfigJsons)) + { + JObject jObjectJson = (JObject)JToken.ReadFrom(new JsonTextReader(readerJson)); + + //设置客户端的地址/端口/id + jObjectJson["outbounds"][0]["settings"]["servers"][0]["address"] = ReceiveConfigurationParameters[4]; + jObjectJson["outbounds"][0]["settings"]["servers"][0]["port"] = int.Parse(ReceiveConfigurationParameters[1]); + jObjectJson["outbounds"][0]["settings"]["servers"][0]["password"] = ReceiveConfigurationParameters[2]; + jObjectJson["outbounds"][0]["streamSettings"]["tlsSettings"]["serverName"] = ReceiveConfigurationParameters[4]; + + clientJson["outbounds"] = jObjectJson["outbounds"]; + if (!Directory.Exists(@"xray_config\trojan_tcp_tls_client_config"))//如果不存在就创建file文件夹      + { + Directory.CreateDirectory(@"xray_config\trojan_tcp_tls_client_config");//创建该文件夹   + } + using (StreamWriter sw = new StreamWriter(@"xray_config\trojan_tcp_tls_client_config\config.json")) + { + sw.Write(clientJson.ToString()); + } + } + + } + } + SetUpProgressBarProcessing(98); + return true; + } + + + #endregion + + //检测升级远程主机端的Xray版本 + private void ButtonUpdateXray_Click(object sender, RoutedEventArgs e) + { + ConnectionInfo connectionInfo = GenerateConnectionInfo(); + if (connectionInfo == null) + { + //****** "远程主机连接信息有误,请检查!" ****** + MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorHostConnection").ToString()); + return; + } + installationDegree = 0; + TextBoxMonitorCommandResults.Text = ""; + Thread thread = new Thread(() => UpdateXray(connectionInfo)); + thread.SetApartmentState(ApartmentState.STA); + thread.Start(); + } + + //升级Xray主程序 + private void UpdateXray(ConnectionInfo connectionInfo) + { + functionResult = true; + onlyIpv6 = false; + getApt = false; + getDnf = false; + getYum = false; + + //******"正在登录远程主机......"****** + SetUpProgressBarProcessing(1); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_Login").ToString(); + MainWindowsShowInfo(currentStatus); + + try + { + #region 主机指纹,暂未启用 + //byte[] expectedFingerPrint = new byte[] { + // 0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31, + // 0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b + // }; + #endregion + using (var client = new SshClient(connectionInfo)) + + { + #region ssh登录验证主机指纹代码块,暂未启用 + // client.HostKeyReceived += (sender, e) => + // { + // if (expectedFingerPrint.Length == e.FingerPrint.Length) + // { + // for (var i = 0; i < expectedFingerPrint.Length; i++) + // { + // if (expectedFingerPrint[i] != e.FingerPrint[i]) + // { + // e.CanTrust = false; + // break; + // } + // } + // } + // else + // { + // e.CanTrust = false; + // } + // }; + #endregion + + client.Connect(); + if (client.IsConnected == true) + { + //******"主机登录成功"****** + SetUpProgressBarProcessing(3); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginSuccessful").ToString(); + MainWindowsShowInfo(currentStatus); + } + + //检测root权限 5--7 + functionResult = RootAuthorityDetect(client); + if (functionResult == false) { FunctionResultErr(); client.Disconnect(); return; } + + + //******"检测系统是否已经安装Xray......"****** + SetUpProgressBarProcessing(20); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_TestExistSoft").ToString() + "Xray......"; + MainWindowsShowInfo(currentStatus); + + //Thread.Sleep(1000); + //检测是否安装Xray + //sshShellCommand = @"find / -name xray"; + //sshShellCommand = @"if [[ -f /usr/local/bin/xray ]];then echo '1';else echo '0'; fi"; + //currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + //if (currentShellCommandResult.Contains("/usr/local/bin/xray") == false) + //if (currentShellCommandResult.Trim().Equals("0") == true) + functionResult = FileCheckExists(client, @"/usr/local/bin/xray"); + if (functionResult == false) + { + //******"退出!原因:远程主机未安装Xray"****** + currentStatus = Application.Current.FindResource("MessageBoxShow_ErrorUpgradeSoftNotInstall").ToString() + "Xray!"; + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + + client.Disconnect(); + return; + + } + + //sshcmd = @"/usr/local/bin/xray -version | head -n 1 | cut -d "" "" -f2"; + sshShellCommand = @"/usr/local/bin/xray -version | head -n 1 | cut -d "" "" -f2"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + string xrayCurrentVersion = currentShellCommandResult;//不含字母v + + //sshcmd = @"curl -H ""Accept: application/json"" -H ""User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0"" -s ""https://api.github.com/repos/v2fly/xray-core/releases/latest"" --connect-timeout 10| grep 'tag_name' | cut -d\"" -f4"; + sshShellCommand = @"curl -H ""Accept: application/json"" -H ""User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0"" -sS ""https://api.github.com/repos/XTLS/Xray-core/releases/latest"" --connect-timeout 10 | grep 'tag_name' | cut -d\"" -f4"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + string xrayNewVersion = currentShellCommandResult;//包含字母v + + if (xrayNewVersion.Contains(xrayCurrentVersion) == false) + { + MessageBoxResult messageBoxResult = MessageBox.Show( + //****** "远程主机当前版本为:v" ****** + Application.Current.FindResource("DisplayInstallInfo_CurrentVersion").ToString() + + $"{xrayCurrentVersion}\n" + + //****** "最新版本为:" ****** + Application.Current.FindResource("DisplayInstallInfo_NewVersion").ToString() + + $"{xrayNewVersion}\n" + + //****** "是否升级为最新版本?" ****** + Application.Current.FindResource("DisplayInstallInfo_IsOrNoUpgradeNewVersion").ToString(), "", MessageBoxButton.YesNo, MessageBoxImage.Question); + if (messageBoxResult == MessageBoxResult.Yes) + { + //****** "正在升级到最新版本......" ****** + SetUpProgressBarProcessing(60); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_StartUpgradeNewVersion").ToString(); + MainWindowsShowInfo(currentStatus); + + //client.RunCommand(@"bash <(curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-xray/master/install-release.sh)"); + sshShellCommand = $"bash <(curl -L -s https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + SetUpProgressBarProcessing(80); + //sshcmd = @"/usr/local/bin/xray -version | head -n 1 | cut -d "" "" -f2"; + sshShellCommand = @"/usr/local/bin/xray -version | head -n 1 | cut -d "" "" -f2"; + currentShellCommandResult = MainWindowsShowCmd(client, sshShellCommand); + + xrayCurrentVersion = currentShellCommandResult;//不含字母v + if (xrayNewVersion.Contains(xrayCurrentVersion) == true) + { + //****** "升级成功!当前已是最新版本!" ****** + SetUpProgressBarProcessing(100); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_UpgradeNewVersionOK").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + } + else + { + //****** "升级失败,原因未知,请向开发者提问!" ****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_UpgradeNewVersionFail").ToString(); + MainWindowsShowInfo(currentStatus); + MessageBox.Show(currentStatus); + } + } + else + { + //****** "升级取消,退出!" ****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_UpgradeVersionCancel").ToString(); + MainWindowsShowInfo(currentStatus); + + client.Disconnect(); + return; + } + } + else + { + //****** "远程主机当前已是最新版本:" ****** + SetUpProgressBarProcessing(100); + currentStatus = Application.Current.FindResource("DisplayInstallInfo_IsNewVersion").ToString() + + $"{xrayNewVersion}\n" + + //****** "无需升级!退出!" ****** + Application.Current.FindResource("DisplayInstallInfo_NotUpgradeVersion").ToString(); + MessageBox.Show(currentStatus); + MainWindowsShowInfo(currentStatus); + } + + client.Disconnect(); + return; + } + } + catch (Exception ex1)//例外处理 + #region 例外处理 + { + ProcessException(ex1.Message); + + //****** "主机登录失败!" ****** + currentStatus = Application.Current.FindResource("DisplayInstallInfo_LoginFailed").ToString(); + MainWindowsShowInfo(currentStatus); + } + #endregion + + } + + #endregion + #region Trojan-go相关 //打开设置TrojanGo参数窗口 @@ -2855,12 +4425,10 @@ namespace ProxySU functionResult = FileCheckExists(client, @"/usr/local/bin/trojan-go"); if (functionResult == false) { - //******"退出!原因:远程主机未安装Trojan-go"****** - MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorUpgradeSoftNotInstall").ToString() + "Trojan-go!"); //******"退出!原因:远程主机未安装Trojan-go"****** currentStatus = Application.Current.FindResource("MessageBoxShow_ErrorUpgradeSoftNotInstall").ToString() + "Trojan-go!"; MainWindowsShowInfo(currentStatus); - + MessageBox.Show(currentStatus); client.Disconnect(); return; @@ -3413,12 +4981,10 @@ namespace ProxySU functionResult = FileCheckExists(client, @"/usr/local/bin/trojan"); if (functionResult == false) { - //******"退出!原因:远程主机未安装Trojan"****** - MessageBox.Show(Application.Current.FindResource("MessageBoxShow_ErrorUpgradeSoftNotInstall").ToString() + "Trojan!"); //******"退出!原因:远程主机未安装Trojan"****** currentStatus = Application.Current.FindResource("MessageBoxShow_ErrorUpgradeSoftNotInstall").ToString() + "Trojan!"; MainWindowsShowInfo(currentStatus); - + MessageBox.Show(currentStatus); client.Disconnect(); return; @@ -8232,8 +9798,6 @@ namespace ProxySU } } - - SetUpProgressBarProcessing(30); return true; } @@ -8863,12 +10427,13 @@ namespace ProxySU + //生成客户端配置 96--98 #endregion - + } } diff --git a/ProxySU/Properties/AssemblyInfo.cs b/ProxySU/Properties/AssemblyInfo.cs index 5b57888..afe39ff 100644 --- a/ProxySU/Properties/AssemblyInfo.cs +++ b/ProxySU/Properties/AssemblyInfo.cs @@ -51,5 +51,5 @@ using System.Windows; // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 // 方法是按如下所示使用“*”: : // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.4.25.0")] -[assembly: AssemblyFileVersion("2.4.25.0")] +[assembly: AssemblyVersion("2.5.0.0")] +[assembly: AssemblyFileVersion("2.5.0.0")] diff --git a/ProxySU/ProxySU.csproj b/ProxySU/ProxySU.csproj index 4db557a..1dac41d 100644 --- a/ProxySU/ProxySU.csproj +++ b/ProxySU/ProxySU.csproj @@ -92,6 +92,9 @@ SSpluginWindow.xaml + + XayTemplateWindow.xaml + V2RayTemplateWindow.xaml @@ -134,6 +137,10 @@ Designer MSBuild:Compile + + MSBuild:Compile + Designer + Designer MSBuild:Compile diff --git a/ProxySU/ResultClientInformation.xaml b/ProxySU/ResultClientInformation.xaml index ca916fd..a2d4646 100644 --- a/ProxySU/ResultClientInformation.xaml +++ b/ProxySU/ResultClientInformation.xaml @@ -13,7 +13,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -106,6 +106,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -327,7 +424,7 @@ - + diff --git a/ProxySU/ResultClientInformation.xaml.cs b/ProxySU/ResultClientInformation.xaml.cs index b26162e..019faf6 100644 --- a/ProxySU/ResultClientInformation.xaml.cs +++ b/ProxySU/ResultClientInformation.xaml.cs @@ -367,7 +367,7 @@ namespace ProxySU configDomainSavePath = CreateConfigSaveDir(proxyfolder, TextBoxHostAddress.Text); V2raySetVlessTcpXtls(); - GenerateV2rayVlessTcpXtlsShareQRcodeAndBase64Url(); + //GenerateV2rayVlessTcpXtlsShareQRcodeAndBase64Url(); V2raySetVlessTcpTls(); GenerateV2rayVlessTcpTlsShareQRcodeAndBase64Url(); @@ -385,6 +385,339 @@ namespace ProxySU RadioButtonVlessTcpXtls.IsChecked = true; } + } + else if (String.Equals(MainWindow.proxyType, "Xray")) + { + //显示Xray参数,隐藏其他 + GroupBoxClientMTProto.Visibility = Visibility.Collapsed; + GroupBoxClientQRandURL.Visibility = Visibility.Visible; + GroupBoxClientSSpc.Visibility = Visibility.Collapsed; + GroupBoxV2rayClient.Visibility = Visibility.Collapsed; + GroupBoxXrayClient.Visibility = Visibility.Visible; + GroupBoxTrojanGoClient.Visibility = Visibility.Collapsed; + GroupBoxTrojanClient.Visibility = Visibility.Collapsed; + GroupBoxNaiveProxyClient.Visibility = Visibility.Collapsed; + GroupBoxSSRClient.Visibility = Visibility.Collapsed; + GroupBoxClientSS.Visibility = Visibility.Collapsed; + + //主机地址 + TextBoxHostAddressXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + //主机端口 + TextBoxPortXray.Text = MainWindow.ReceiveConfigurationParameters[1]; + //用户ID(uuid)/Trojan密码 + TextBoxUUIDXray.Text = MainWindow.ReceiveConfigurationParameters[2]; + //额外ID + TextBoxUUIDextraXray.Text = "0"; + //加密方式,一般都为auto + TextBoxEncryptionXray.Text = "auto"; + + //传输协议 + TextBoxTransmissionXray.Text = ""; + //伪装类型 + TextBoxCamouflageTypeXray.Text = MainWindow.ReceiveConfigurationParameters[5]; + + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = ""; + + //QUIC密钥/mKCP Seed/路径Path + TextBoxQuicKeyMkcpSeedPathXray.Text = MainWindow.ReceiveConfigurationParameters[6]; + + //TLS设置 + TextBoxTLSXray.Text = "none"; + + //初始化时,隐藏多方案客户端选择面板 + GroupBoxSelectVlessVmessXtlsTcpWsXray.Visibility = Visibility.Collapsed; + //显示非Trojan的所有参数 + GridNotTrojanParametersXray.Visibility = Visibility.Visible; + + if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessVmessXtlsTcpWebSocketWeb") == false) + { + #region 单模式方案 + if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCP") == true) + { + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "none"; + TextBoxTLSXray.Text = "none"; + ShowHostNameXray(); + ShowPathXray(); + + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "TCPhttp") == true) + { + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "http"; + TextBoxTLSXray.Text = "none"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "tcpTLS") == true) + { + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "tcpTLSselfSigned") == true) + { + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessXtlsTcp") == true) + { + TextBlockVmessOrVlessXray.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString(); + + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxEncryptionXray.Text = "none"; + TextBoxTLSXray.Text = "xtls"; + HideAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + HideGroupBoxClientQRandURL(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == true) + { + TextBlockVmessOrVlessXray.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString(); + + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxEncryptionXray.Text = "none"; + TextBoxTLSXray.Text = "tls"; + HideAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + HideGroupBoxClientQRandURL(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == true) + { + TextBlockVmessOrVlessXray.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString(); + + TextBoxTransmissionXray.Text = "ws"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxEncryptionXray.Text = "none"; + TextBoxTLSXray.Text = "tls"; + HideAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + HideGroupBoxClientQRandURL(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessHttp2Web") == true) + { + TextBlockVmessOrVlessXray.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString(); + + TextBoxTransmissionXray.Text = "h2"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxEncryptionXray.Text = "none"; + TextBoxTLSXray.Text = "tls"; + HideAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + HideGroupBoxClientQRandURL(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "webSocket") == true) + { + TextBoxTransmissionXray.Text = "ws"; + TextBoxCamouflageTypeXray.Text = "none"; + TextBoxTLSXray.Text = "none"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS") == true) + { + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "ws"; + TextBoxCamouflageType.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLS2Web") == true) + { + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "ws"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "WebSocketTLSselfSigned") == true) + { + TextBoxTransmissionXray.Text = "ws"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Http2") == true) + { + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "h2"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "http2Web") == true) + { + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "h2"; + TextBoxCamouflageTypeXray.Text = "none"; + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4];//获取Host + TextBoxTLSXray.Text = "tls"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "http2selfSigned") == true) + { + TextBoxTransmissionXray.Text = "h2"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowHostNameXray(); + ShowPathXray(); + } + else if (MainWindow.ReceiveConfigurationParameters[0].Contains("mKCP") == true) + { + if (MainWindow.mKCPvlessIsSet == true) + { + TextBlockVmessOrVlessXray.Text = Application.Current.FindResource("TabItemHeaderV2RayVlessProtocol").ToString(); + TextBoxEncryptionXray.Text = "none"; + HideAlterIdXray(); + HideGroupBoxClientQRandURL(); + } + if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPNone") == true) + { + TextBoxCamouflageTypeXray.Text = "none"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2SRTP") == true) + { + TextBoxCamouflageTypeXray.Text = "srtp"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCPuTP") == true) + { + TextBoxCamouflageTypeXray.Text = "utp"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WechatVideo") == true) + { + TextBoxCamouflageTypeXray.Text = "wechat-video"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2DTLS") == true) + { + TextBoxCamouflageTypeXray.Text = "dtls"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "mKCP2WireGuard") == true) + { + TextBoxCamouflageTypeXray.Text = "wireguard"; + } + + TextBoxTransmissionXray.Text = "kcp"; + TextBoxQuicKeyMkcpSeedPathXray.Text = MainWindow.ReceiveConfigurationParameters[6];//获取mkcp Seed + TextBoxTLSXray.Text = "none"; + ShowHostNameXray(); + ShowMkcpSeedXray(); + } + else if (MainWindow.ReceiveConfigurationParameters[0].Contains("Quic") == true) + { + if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicNone") == true) + { + TextBoxCamouflageTypeXray.Text = "none"; + + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicSRTP") == true) + { + TextBoxCamouflageTypeXray.Text = "srtp"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "Quic2uTP") == true) + { + TextBoxCamouflageTypeXray.Text = "utp"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWechatVideo") == true) + { + TextBoxCamouflageTypeXray.Text = "wechat-video"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicDTLS") == true) + { + TextBoxCamouflageTypeXray.Text = "dtls"; + } + else if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "QuicWireGuard") == true) + { + TextBoxCamouflageTypeXray.Text = "wireguard"; + } + + TextBoxTransmissionXray.Text = "quic"; + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[3];//获取Quic加密方式 + TextBoxQuicKeyMkcpSeedPathXray.Text = MainWindow.ReceiveConfigurationParameters[6];//获取Quic加密密钥 + TextBoxTLSXray.Text = "none"; + ShowQuicEncryptionXray(); + ShowQuicKeyXray(); + } + + else + { + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "none"; + TextBoxTLSXray.Text = "none"; + ShowHostNameXray(); + ShowPathXray(); + } + CheckDir("xray_config"); + + GenerateXrayShareQRcodeAndBase64Url(); + #endregion + } + else + { + //显示多方案客户端选择面板 + GroupBoxSelectVlessVmessXtlsTcpWsXray.Visibility = Visibility.Visible; + + string proxyfolder = CheckDir("xray_config"); + configDomainSavePath = CreateConfigSaveDir(proxyfolder, TextBoxHostAddress.Text); + + XraySetVlessTcpXtls(); + GenerateXrayVlessTcpXtlsShareQRcodeAndBase64Url(); + + XraySetVlessTcpTls(); + GenerateXrayVlessTcpTlsShareQRcodeAndBase64Url(); + + XraySetVlessWsTls(); + GenerateXrayVlessWsTlsShareQRcodeAndBase64Url(); + + XraySetVmessTcpTls(); + GenerateXrayVmessTcpTlsShareQRcodeAndBase64Url(); + + V2raySetVmessWsTls(); + GenerateXrayVmessWsTlsShareQRcodeAndBase64Url(); + + GenerateXrayTrojanShareQRcodeAndBase64Url(); + RadioButtonVlessTcpXtlsXray.IsChecked = true; + } + } else if (String.Equals(MainWindow.proxyType, "TrojanGo")) { @@ -702,6 +1035,8 @@ namespace ProxySU } } + #region V2Ray 相关 + #region V2ray参数设置函数 //设置VLESS over TCP with XTLS @@ -2116,7 +2451,1377 @@ namespace ProxySU #endregion #endregion - + + #endregion + + #region Xray 相关 + + #region Xray参数设置函数 + + //设置VLESS over TCP with XTLS + private void XraySetVlessTcpXtls() + { + GridNotTrojanParametersXray.Visibility = Visibility.Visible; + TextBlockVmessOrVlessXray.Text = Application.Current.FindResource("TabItemHeaderXrayVlessProtocol").ToString(); + TextBlockVmessOrVlessXray.Visibility = Visibility.Visible; + //隐藏下面的二维码显示 + HideGroupBoxClientQRandURL(); + + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "xtls"; + HideAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + TextBoxQuicKeyMkcpSeedPathXray.Text = ""; + + + } + + //设置VLESS over TCP with TLS + private void XraySetVlessTcpTls() + { + GridNotTrojanParametersXray.Visibility = Visibility.Visible; + TextBlockVmessOrVlessXray.Text = Application.Current.FindResource("TabItemHeaderXrayVlessProtocol").ToString(); + TextBlockVmessOrVlessXray.Visibility = Visibility.Visible; + //隐藏下面的二维码显示 + HideGroupBoxClientQRandURL(); + + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + HideAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + TextBoxQuicKeyMkcpSeedPathXray.Text = ""; + } + + //设置VLESS over WS with TLS + private void XraySetVlessWsTls() + { + GridNotTrojanParametersXray.Visibility = Visibility.Visible; + TextBlockVmessOrVlessXray.Text = Application.Current.FindResource("TabItemHeaderXrayVlessProtocol").ToString(); + TextBlockVmessOrVlessXray.Visibility = Visibility.Visible; + //隐藏下面的二维码显示 + HideGroupBoxClientQRandURL(); + + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "ws"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + HideAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + TextBoxQuicKeyMkcpSeedPathXray.Text = MainWindow.ReceiveConfigurationParameters[3]; + + } + + //设置VMess over TCP with TLS + private void XraySetVmessTcpTls() + { + GridNotTrojanParametersXray.Visibility = Visibility.Visible; + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "tcp"; + TextBoxCamouflageTypeXray.Text = "http"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + TextBoxQuicKeyMkcpSeedPathXray.Text = MainWindow.ReceiveConfigurationParameters[9]; + TextBlockVmessOrVlessXray.Visibility = Visibility.Collapsed; + //显示下面的二维码显示。 + //HideGroupBoxClientQRandURL(); + ShowGroupBoxClientQRandURL(); + TextBoxURL.Text = TextBoxURLVmessTcp; + ImageShareQRcode.Source = ImageShareQRcodeVmessTcp; + } + + //设置VMess over WS with TLS + private void XraySetVmessWsTls() + { + GridNotTrojanParametersXray.Visibility = Visibility.Visible; + TextBoxEncryptionXray.Text = "none"; + TextBoxTransmissionXray.Text = "ws"; + TextBoxCamouflageTypeXray.Text = "none"; + //TLS的Host /Quic 加密方式 + TextBoxHostQuicEncryptionXray.Text = MainWindow.ReceiveConfigurationParameters[4]; + TextBoxTLSXray.Text = "tls"; + ShowAlterIdXray(); + ShowHostNameXray(); + ShowPathXray(); + TextBoxQuicKeyMkcpSeedPathXray.Text = MainWindow.ReceiveConfigurationParameters[6]; + TextBlockVmessOrVlessXray.Visibility = Visibility.Collapsed; + //显示下面的二维码与分享链接 + ShowGroupBoxClientQRandURL(); + TextBoxURL.Text = TextBoxURLVmessWs; + ImageShareQRcode.Source = ImageShareQRcodeVmessWs; + } + + //设置Trojan over TCP with TLS + private void XraySetTrojanTcpTls() + { + //隐藏所有不是Trojan的参数 + GridNotTrojanParametersXray.Visibility = Visibility.Collapsed; + //显示下面的二维码与分享链接 + ShowGroupBoxClientQRandURL(); + TextBoxURL.Text = TextBoxURLTrojanTcp; + ImageShareQRcode.Source = ImageShareQRcodeTrojanTcp; + } + #endregion + + #region 界面控制相关 + + //显示Quic 加密方式 + private void ShowQuicEncryptionXray() + { + TextBlockQuicEncryptionXray.Visibility = Visibility.Visible; + TextBlockHostXray.Visibility = Visibility.Collapsed; + } + + //显示Host隐藏Quic加密方式 + private void ShowHostNameXray() + { + TextBlockHostXray.Visibility = Visibility.Visible; + TextBlockQuicEncryptionXray.Visibility = Visibility.Collapsed; + } + + //显示路径Path,隐藏mKCP/Quic Key/复制按钮 + private void ShowPathXray() + { + TextBlockPathXray.Visibility = Visibility.Visible; + TextBlockMkcpSeedXray.Visibility = Visibility.Collapsed; + TextBlockQuicKeyXray.Visibility = Visibility.Collapsed; + } + + //显示mKCP Seed/复制按钮,隐藏Path/Quic Key + private void ShowMkcpSeedXray() + { + TextBlockPathXray.Visibility = Visibility.Collapsed; + TextBlockMkcpSeedXray.Visibility = Visibility.Visible; + TextBlockQuicKeyXray.Visibility = Visibility.Collapsed; + } + + //显示Quic Key/复制按钮 隐藏Path/mKcp Seed + private void ShowQuicKeyXray() + { + TextBlockPathXray.Visibility = Visibility.Collapsed; + TextBlockMkcpSeedXray.Visibility = Visibility.Collapsed; + TextBlockQuicKeyXray.Visibility = Visibility.Visible; + } + + //显示额外ID + private void ShowAlterIdXray() + { + TextBlockUUIDextraXray.Visibility = Visibility.Visible; + TextBoxUUIDextraXray.Visibility = Visibility.Visible; + TextBlockUUIDextraExplanationXray.Visibility = Visibility.Visible; + + } + + //隐藏额外ID + private void HideAlterIdXray() + { + TextBlockUUIDextraXray.Visibility = Visibility.Collapsed; + TextBoxUUIDextraXray.Visibility = Visibility.Collapsed; + TextBlockUUIDextraExplanationXray.Visibility = Visibility.Collapsed; + + } + + //显示加密方式 + private void ShowEncryptionXray() + { + TextBlockEncryptionXray.Visibility = Visibility.Visible; + TextBoxEncryptionXray.Visibility = Visibility.Visible; + } + //隐藏加密方式 + private void HideEncryptionXray() + { + TextBlockEncryptionXray.Visibility = Visibility.Collapsed; + TextBoxEncryptionXray.Visibility = Visibility.Collapsed; + } + + //显示传输协议 + private void ShowTransferProtocolXray() + { + TextBlockTransferProtocolXray.Visibility = Visibility.Visible; + TextBoxTransmissionXray.Visibility = Visibility.Visible; + } + //隐藏传输协议 + private void HideTransferProtocolXray() + { + TextBlockTransferProtocolXray.Visibility = Visibility.Collapsed; + TextBoxTransmissionXray.Visibility = Visibility.Collapsed; + } + //显示伪装类型 + private void ShowTextBlockCamouflageTypeXray() + { + TextBlockCamouflageTypeXray.Visibility = Visibility.Visible; + TextBoxCamouflageTypeXray.Visibility = Visibility.Visible; + } + //隐藏伪装类型 + private void HideTextBlockCamouflageTypeXray() + { + TextBlockCamouflageTypeXray.Visibility = Visibility.Collapsed; + TextBoxCamouflageTypeXray.Visibility = Visibility.Collapsed; + } + + /* //显示二维码与链接分享 + private void ShowGroupBoxClientQRandURL() + { + GroupBoxClientQRandURL.Visibility = Visibility.Visible; + } + //隐藏二维码与链接分享 + private void HideGroupBoxClientQRandURL() + { + GroupBoxClientQRandURL.Visibility = Visibility.Hidden; + } */ + + //以下几个为对RadioButton按钮的选中后,界面变化与参数显示 + private void RadioButtonVlessTcpXtlsXray_Checked(object sender, RoutedEventArgs e) + { + XraySetVlessTcpXtls(); + } + + private void RadioButtonVlessTcpTlsXray_Checked(object sender, RoutedEventArgs e) + { + XraySetVlessTcpTls(); + } + + private void RadioButtonVlessWsTlsXray_Checked(object sender, RoutedEventArgs e) + { + XraySetVlessWsTls(); + } + + private void RadioButtonVmessTcpTlsXray_Checked(object sender, RoutedEventArgs e) + { + XraySetVmessTcpTls(); + } + + private void RadioButtonVmessWsTlsXray_Checked(object sender, RoutedEventArgs e) + { + XraySetVmessWsTls(); + } + + private void RadioButtonTrojanTcpTlsXray_Checked(object sender, RoutedEventArgs e) + { + XraySetTrojanTcpTls(); + } + #endregion + + #region 复制参数到剪贴板中 + + /* //复制内容到剪贴板函数 + private void CopyToClipboard(string content) + { + if (content != "") + { + Clipboard.SetDataObject(content); + //MessageBox.Show(Application.Current.FindResource("MessageBoxShow_XrayUUIDcopyedToClip").ToString()); + string message = Application.Current.FindResource("MessageBoxShow_XrayUUIDcopyedToClip").ToString(); + MessageBoxTimeoutA((IntPtr)0, message, "", 0, 0, 600); // 直接调用 0.6秒后自动关闭 + } + else + { + //MessageBox.Show(Application.Current.FindResource("MessageBoxShow_XrayEmptyToClip").ToString()); + string message = Application.Current.FindResource("MessageBoxShow_XrayEmptyToClip").ToString(); + MessageBoxTimeoutA((IntPtr)0, message, "", 0, 0, 600); // 直接调用 0.6秒后自动关闭 + } + } */ + + //复制服务器地址到剪贴板 + private void TextBoxHostAddressXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxHostAddressXray.Text); + } + + + //复制服务器端口到剪贴板 + private void TextBoxPortXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxPortXray.Text); + } + + //复制UUID到剪贴板 + private void TextBoxUUIDXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxUUIDXray.Text); + } + + //复制额外ID到剪贴板 + private void TextBoxUUIDextraXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxUUIDextraXray.Text); + } + + //复制加密方式到剪贴板 + private void TextBoxEncryptionXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxEncryptionXray.Text); + } + + //复制传输协议到剪贴板 + private void TextBoxTransmissionXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxTransmissionXray.Text); + } + + //复制伪装方式到剪贴板 + private void TextBoxCamouflageTypeXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxCamouflageTypeXray.Text); + } + + //复制Host/Quic加密方法到剪贴板 + private void TextBoxHostQuicEncryptionXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxHostQuicEncryptionXray.Text); + } + + //复制Quic Key/mKCP Seed/路径Path 到剪贴板中 + private void TextBoxQuicKeyMkcpSeedPathXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxQuicKeyMkcpSeedPathXray.Text); + } + + //复制TLS 到剪贴板中 + private void TextBoxTLSXray_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + CopyToClipboard(TextBoxTLSXray.Text); + } + + #endregion + + #region Xray客户端生成 + //生成单方案v2rayN客户端导入文件 + private void GenerateXrayShareQRcodeAndBase64Url() + { + //生成v2rayN的json文件 + string v2rayNjsonFile = @" +{ + ""v"": """", + ""ps"": """", + ""add"": """", + ""port"": """", + ""id"": """", + ""aid"": """", + ""net"": """", + ""type"": """", + ""host"": """", + ""path"": """", + ""tls"": """" +}"; + //MessageBox.Show(v2rayNjsonFile); + JObject v2rayNjsonObject = JObject.Parse(v2rayNjsonFile); + v2rayNjsonObject["v"] = "2"; + v2rayNjsonObject["add"] = TextBoxHostAddressXray.Text; //设置域名 + v2rayNjsonObject["port"] = TextBoxPortXray.Text; //设置端口 + v2rayNjsonObject["id"] = TextBoxUUIDXray.Text; //设置uuid + v2rayNjsonObject["aid"] = TextBoxUUIDextraXray.Text; //设置额外ID + v2rayNjsonObject["net"] = TextBoxTransmissionXray.Text; //设置传输模式 + v2rayNjsonObject["type"] = TextBoxCamouflageTypeXray.Text; //设置伪装类型 + + if (TextBoxTransmissionXray.Text.Contains("kcp") == true) + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text;//设置mKCP Seed + v2rayNjsonObject["host"] = "";//设置Host + } + else if (TextBoxTransmissionXray.Text.Contains("quic") == true) + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text;//设置quic密钥 + v2rayNjsonObject["host"] = TextBoxHostQuicEncryptionXray.Text;//Quic加密方式 + } + else + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text; //设置路径 + v2rayNjsonObject["host"] = TextBoxHostQuicEncryptionXray.Text;//设置TLS的Host + } + + v2rayNjsonObject["tls"] = TextBoxTLSXray.Text; //设置是否启用TLS + v2rayNjsonObject["ps"] = v2rayNjsonObject["add"]; //设置备注 + //MessageBox.Show(v2rayNjsonObject["v"].ToString()); + //MessageBox.Show("step1"); + string proxyfolder = CheckDir("xray_config"); + //MessageBox.Show("step2"); + configDomainSavePath = CreateConfigSaveDir(proxyfolder, TextBoxHostAddressXray.Text); + //MessageBox.Show("step3"); + string configSavePath = configDomainSavePath; + + //生成二维码与URL,跳过VlessTcpTlsWeb暂时未有URL标准 + string vmessUrl = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString()); + TextBoxURL.Text = vmessUrl; + if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessXtlsTcp") == false + && String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == false + && String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessWebSocketTlsWeb") == false + && String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessHttp2Web") == false + && MainWindow.mKCPvlessIsSet == false) + { + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) + { + sw.WriteLine(vmessUrl); + } + ImageShareQRcode.Source = CreateQRCode(vmessUrl, $"{configSavePath}\\QR.bmp"); + } + + if (File.Exists(@"xray_config\config.json")) + { + File.Move(@"xray_config\config.json", $"{configSavePath}\\config.json"); + //File.Delete(@"config\config.json");//删除该文件 + } + + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) + { + ReadmeTxtWriteGenerateXray(sw); + + } + } + + #region VLESS VMESS XTLS WS共存方案生成链接与说明文件 + + //生成VLESS Vmess Tcp Xtls Ws 配置保存(暂未有分享链接与二维码) + private void GenerateXrayVlessVmessTcpXtlsWsShareQRcodeAndBase64Url(string plainSavePath) + { + #region 暂时不用内容 + // //生成v2rayN的json文件 + // string v2rayNjsonFile = @" + //{ + // ""v"": """", + // ""ps"": """", + // ""add"": """", + // ""port"": """", + // ""id"": """", + // ""aid"": """", + // ""net"": """", + // ""type"": """", + // ""host"": """", + // ""path"": """", + // ""tls"": """" + //}"; + // //MessageBox.Show(v2rayNjsonFile); + // JObject v2rayNjsonObject = JObject.Parse(v2rayNjsonFile); + // v2rayNjsonObject["v"] = "2"; + // v2rayNjsonObject["add"] = TextBoxHostAddress.Text; //设置域名 + // v2rayNjsonObject["port"] = TextBoxPort.Text; //设置端口 + // v2rayNjsonObject["id"] = TextBoxUUID.Text; //设置uuid + // v2rayNjsonObject["aid"] = TextBoxUUIDextra.Text; //设置额外ID + // v2rayNjsonObject["net"] = TextBoxTransmission.Text; //设置传输模式 + // v2rayNjsonObject["type"] = TextBoxCamouflageType.Text; //设置伪装类型 + + // if (TextBoxTransmission.Text.Contains("kcp") == true) + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置mKCP Seed + // } + // else if (TextBoxTransmission.Text.Contains("quic") == true) + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置quic密钥 + // v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//Quic加密方式 + // } + // else + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text; //设置路径 + // v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//设置TLS的Host + // } + + // v2rayNjsonObject["tls"] = TextBoxTLS.Text; //设置是否启用TLS + // v2rayNjsonObject["ps"] = v2rayNjsonObject["add"]; //设置备注 + // //MessageBox.Show(v2rayNjsonObject["v"].ToString()); + + //string saveFileFolderFirst = TextBoxHostAddress.Text; + //int num = 1; + //saveFileFolder = saveFileFolderFirst; + //CheckDir(@"v2ray_config"); + //while (Directory.Exists(@"v2ray_config\" + saveFileFolder)) + //{ + // saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString(); + // num++; + //} + //CheckDir(@"v2ray_config\" + saveFileFolder); + + #endregion + + //创建保存目录 + //string plainSavePath = @""; + + //v2ray_config\${域名IP}\vless_tcp_xtls_client_config + string configSavePath = CheckDir($"{configDomainSavePath}\\{plainSavePath}"); + + + //生成二维码与URL,跳过VlessTcpTlsWeb暂时未有URL标准 + //string vmessUrl = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString()); + //TextBoxURL.Text = vmessUrl; + //using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) + //{ + // if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == false) + // { + // sw.WriteLine(vmessUrl); + // } + //} + //if (String.Equals(MainWindow.ReceiveConfigurationParameters[0], "VlessTcpTlsWeb") == false) + //{ + // ImageShareQRcode.Source = CreateQRCode(vmessUrl, $"v2ray_config\\{saveFileFolder}\\QR.bmp"); + //} + + + if (File.Exists($"xray_config\\{plainSavePath}\\config.json")) + { + File.Move($"xray_config\\{plainSavePath}\\config.json", $"{configSavePath}\\config.json"); + Directory.Delete($"xray_config\\{plainSavePath}"); + } + + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) + { + sw.WriteLine("config.json"); + //****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine01").ToString()); + + //****** "v2ray官方网站:https://www.v2ray.com/" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine02").ToString()); + + //****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine03").ToString()); + + //****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine04").ToString()); + + sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("QR.bmp"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine05").ToString()); + + //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine06").ToString()); + + //****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine07").ToString()); + + //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine08").ToString()); + + //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine09").ToString()); + + //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine10").ToString()); + + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("url.txt"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine11").ToString()); + + //写入通用配置参数 + TxtWriteGeneralParametersXray(sw); + } + } + + + //生成VLESS over TCP with XTLS的配置保存(暂未有分享链接与二维码) + private void GenerateXrayVlessTcpXtlsShareQRcodeAndBase64Url() + { + #region 暂时不用内容 + // //生成v2rayN的json文件 + // string v2rayNjsonFile = @" + //{ + // ""v"": """", + // ""ps"": """", + // ""add"": """", + // ""port"": """", + // ""id"": """", + // ""aid"": """", + // ""net"": """", + // ""type"": """", + // ""host"": """", + // ""path"": """", + // ""tls"": """" + //}"; + // //MessageBox.Show(v2rayNjsonFile); + // JObject v2rayNjsonObject = JObject.Parse(v2rayNjsonFile); + // v2rayNjsonObject["v"] = "2"; + // v2rayNjsonObject["add"] = TextBoxHostAddress.Text; //设置域名 + // v2rayNjsonObject["port"] = TextBoxPort.Text; //设置端口 + // v2rayNjsonObject["id"] = TextBoxUUID.Text; //设置uuid + // v2rayNjsonObject["aid"] = TextBoxUUIDextra.Text; //设置额外ID + // v2rayNjsonObject["net"] = TextBoxTransmission.Text; //设置传输模式 + // v2rayNjsonObject["type"] = TextBoxCamouflageType.Text; //设置伪装类型 + + // if (TextBoxTransmission.Text.Contains("kcp") == true) + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置mKCP Seed + // } + // else if (TextBoxTransmission.Text.Contains("quic") == true) + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置quic密钥 + // v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//Quic加密方式 + // } + // else + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text; //设置路径 + // v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//设置TLS的Host + // } + + // v2rayNjsonObject["tls"] = TextBoxTLS.Text; //设置是否启用TLS + // v2rayNjsonObject["ps"] = v2rayNjsonObject["add"]; //设置备注 + // //MessageBox.Show(v2rayNjsonObject["v"].ToString()); + + //string saveFileFolderFirst = TextBoxHostAddress.Text; + //int num = 1; + //saveFileFolder = saveFileFolderFirst; + //CheckDir(@"v2ray_config"); + //while (Directory.Exists(@"v2ray_config\" + saveFileFolder)) + //{ + // saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString(); + // num++; + //} + //CheckDir(@"v2ray_config\" + saveFileFolder); + + #endregion + + //创建保存目录 + string plainSavePath = @"vless_tcp_xtls_client_config"; + + //v2ray_config\${域名IP}\vless_tcp_xtls_client_config + string configSavePath = CheckDir($"{configDomainSavePath}\\{plainSavePath}"); + + + //生成二维码与URL,跳过VlessTcpTlsWeb暂时未有URL标准 + //TextBoxURLDefault = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString()); + //TextBoxURL.Text = TextBoxURLDefault; + //using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) + //{ + + // sw.WriteLine(TextBoxURLDefault); + + //} + + // ImageShareQRcodeDefault = CreateQRCode(TextBoxURLDefault, $"v2ray_config\\{saveFileFolder}\\QR.bmp"); + // ImageShareQRcode.Source = ImageShareQRcodeDefault; + + + if (File.Exists($"xray_config\\{plainSavePath}\\config.json")) + { + File.Move($"xray_config\\{plainSavePath}\\config.json", $"{configSavePath}\\config.json"); + Directory.Delete($"xray_config\\{plainSavePath}"); + } + + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) + { + sw.WriteLine("config.json"); + //****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine01").ToString()); + + //****** "v2ray官方网站:https://www.v2ray.com/" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine02").ToString()); + + //****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine03").ToString()); + + //****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine04").ToString()); + + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("QR.bmp"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine05").ToString()); + + //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine06").ToString()); + + //****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine07").ToString()); + + //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine08").ToString()); + + //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine09").ToString()); + + //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine10").ToString()); + + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("url.txt"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine11").ToString()); + + //写入通用配置参数-- + TxtWriteGeneralParametersXray(sw, false); + + } + } + + //生成VLESS over TCP with TLS的配置保存(暂未有分享链接与二维码) + private void GenerateXrayVlessTcpTlsShareQRcodeAndBase64Url() + { + #region 暂时不用内容 + // //生成v2rayN的json文件 + // string v2rayNjsonFile = @" + //{ + // ""v"": """", + // ""ps"": """", + // ""add"": """", + // ""port"": """", + // ""id"": """", + // ""aid"": """", + // ""net"": """", + // ""type"": """", + // ""host"": """", + // ""path"": """", + // ""tls"": """" + //}"; + // //MessageBox.Show(v2rayNjsonFile); + // JObject v2rayNjsonObject = JObject.Parse(v2rayNjsonFile); + // v2rayNjsonObject["v"] = "2"; + // v2rayNjsonObject["add"] = TextBoxHostAddress.Text; //设置域名 + // v2rayNjsonObject["port"] = TextBoxPort.Text; //设置端口 + // v2rayNjsonObject["id"] = TextBoxUUID.Text; //设置uuid + // v2rayNjsonObject["aid"] = TextBoxUUIDextra.Text; //设置额外ID + // v2rayNjsonObject["net"] = TextBoxTransmission.Text; //设置传输模式 + // v2rayNjsonObject["type"] = TextBoxCamouflageType.Text; //设置伪装类型 + + // if (TextBoxTransmission.Text.Contains("kcp") == true) + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置mKCP Seed + // } + // else if (TextBoxTransmission.Text.Contains("quic") == true) + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置quic密钥 + // v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//Quic加密方式 + // } + // else + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text; //设置路径 + // v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//设置TLS的Host + // } + + // v2rayNjsonObject["tls"] = TextBoxTLS.Text; //设置是否启用TLS + // v2rayNjsonObject["ps"] = v2rayNjsonObject["add"]; //设置备注 + // //MessageBox.Show(v2rayNjsonObject["v"].ToString()); + + //string saveFileFolderFirst = TextBoxHostAddress.Text; + //int num = 1; + //saveFileFolder = saveFileFolderFirst; + //CheckDir(@"v2ray_config"); + //while (Directory.Exists(@"v2ray_config\" + saveFileFolder)) + //{ + // saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString(); + // num++; + //} + //CheckDir(@"v2ray_config\" + saveFileFolder); + + #endregion + + //创建保存目录 + string plainSavePath = @"vless_tcp_tls_client_config"; + //v2ray_config\${域名IP} + //string configDomainSavePath = CreateConfigSaveDir(@"v2ray_config", TextBoxHostAddressSS.Text); + //v2ray_config\${域名IP}\vless_tcp_xtls_client_config + string configSavePath = CheckDir($"{configDomainSavePath}\\{plainSavePath}"); + + + //生成二维码与URL,跳过VlessTcpTlsWeb暂时未有URL标准 + //TextBoxURLVlessTcp = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString()); + //TextBoxURL.Text = TextBoxURLVlessTcp; + //using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) + //{ + + // sw.WriteLine(TextBoxURLVlessTcp); + + //} + + // ImageShareQRcodeVlessTcp = CreateQRCode(TextBoxURLVlessTcp, $"v2ray_config\\{saveFileFolder}\\QR.bmp"); + // ImageShareQRcode.Source = ImageShareQRcodeVlessTcp; + + + if (File.Exists($"xray_config\\{plainSavePath}\\config.json")) + { + File.Move($"xray_config\\{plainSavePath}\\config.json", $"{configSavePath}\\config.json"); + Directory.Delete($"xray_config\\{plainSavePath}"); + } + + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) + { + sw.WriteLine("config.json"); + //****** "此文件为v2ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine01").ToString()); + + //****** "v2ray官方网站:https://www.v2ray.com/" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine02").ToString()); + + //****** "v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine03").ToString()); + + //****** "下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine04").ToString()); + + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("QR.bmp"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine05").ToString()); + + //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine06").ToString()); + + //****** "Qv2ray:https://github.com/Qv2ray/Qv2ray/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine07").ToString()); + + //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine08").ToString()); + + //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine09").ToString()); + + //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine10").ToString()); + + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("url.txt"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine11").ToString()); + + //写入通用配置参数-- + TxtWriteGeneralParametersXray(sw, false); + + } + } + + //生成VLESS over WS with TLS的配置保存(暂未有分享链接与二维码) + private void GenerateXrayVlessWsTlsShareQRcodeAndBase64Url() + { + #region 暂时不用内容 + // //生成v2rayN的json文件 + // string v2rayNjsonFile = @" + //{ + // ""v"": """", + // ""ps"": """", + // ""add"": """", + // ""port"": """", + // ""id"": """", + // ""aid"": """", + // ""net"": """", + // ""type"": """", + // ""host"": """", + // ""path"": """", + // ""tls"": """" + //}"; + // //MessageBox.Show(v2rayNjsonFile); + // JObject v2rayNjsonObject = JObject.Parse(v2rayNjsonFile); + // v2rayNjsonObject["v"] = "2"; + // v2rayNjsonObject["add"] = TextBoxHostAddress.Text; //设置域名 + // v2rayNjsonObject["port"] = TextBoxPort.Text; //设置端口 + // v2rayNjsonObject["id"] = TextBoxUUID.Text; //设置uuid + // v2rayNjsonObject["aid"] = TextBoxUUIDextra.Text; //设置额外ID + // v2rayNjsonObject["net"] = TextBoxTransmission.Text; //设置传输模式 + // v2rayNjsonObject["type"] = TextBoxCamouflageType.Text; //设置伪装类型 + + // if (TextBoxTransmission.Text.Contains("kcp") == true) + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置mKCP Seed + // } + // else if (TextBoxTransmission.Text.Contains("quic") == true) + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text;//设置quic密钥 + // v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//Quic加密方式 + // } + // else + // { + // v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPath.Text; //设置路径 + // v2rayNjsonObject["host"] = TextBoxHostQuicEncryption.Text;//设置TLS的Host + // } + + // v2rayNjsonObject["tls"] = TextBoxTLS.Text; //设置是否启用TLS + // v2rayNjsonObject["ps"] = v2rayNjsonObject["add"]; //设置备注 + // //MessageBox.Show(v2rayNjsonObject["v"].ToString()); + + //string saveFileFolderFirst = TextBoxHostAddress.Text; + //int num = 1; + //saveFileFolder = saveFileFolderFirst; + //CheckDir(@"v2ray_config"); + //while (Directory.Exists(@"v2ray_config\" + saveFileFolder)) + //{ + // saveFileFolder = saveFileFolderFirst + "_copy_" + num.ToString(); + // num++; + //} + //CheckDir(@"v2ray_config\" + saveFileFolder); + + #endregion + + //创建保存目录 + string plainSavePath = @"vless_ws_tls_client_config"; + //v2ray_config\${域名IP} + //string configDomainSavePath = CreateConfigSaveDir(@"v2ray_config", TextBoxHostAddressSS.Text); + //v2ray_config\${域名IP}\vless_tcp_xtls_client_config + string configSavePath = CheckDir($"{configDomainSavePath}\\{plainSavePath}"); + + + //生成二维码与URL,跳过VlessTcpTlsWeb暂时未有URL标准 + //TextBoxURLVlessWs = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString()); + //TextBoxURL.Text = TextBoxURLVlessWs; + //using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) + //{ + + // sw.WriteLine(TextBoxURLVlessWs); + + //} + + // ImageShareQRcodeVlessWs = CreateQRCode(TextBoxURLVlessWs, $"v2ray_config\\{saveFileFolder}\\QR.bmp"); + //ImageShareQRcode.Source = ImageShareQRcodeVlessWs; + + + if (File.Exists($"xray_config\\{plainSavePath}\\config.json")) + { + File.Move($"xray_config\\{plainSavePath}\\config.json", $"{configSavePath}\\config.json"); + Directory.Delete($"xray_config\\{plainSavePath}"); + } + + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) + { + sw.WriteLine("config.json"); + //****** "此文件为Xray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine01").ToString()); + + //****** "Xray官方网站:https://github.com/XTLS/Xray-core" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine02").ToString()); + + //****** "Xray官方程序下载地址:https://github.com/XTLS/Xray-core/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine03").ToString()); + + //****** "下载相应版本,Windows选择xray-windows-64.zip或者xray-windows-32.zip,解压后提取v2ray.exe。与config.json放在同一目录,运行xray.exe即可。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine04").ToString()); + + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("QR.bmp"); + + //****** "此文件为v2rayN(windows)、Qv2ray(windows)、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); + + //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); + + //****** "Qv2ray下载网址:https://github.com/Qv2ray/Qv2ray/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); + + //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); + + //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); + + //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); + + //sw.WriteLine("-----------------------------------------"); + //sw.WriteLine("url.txt"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + //sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine11").ToString()); + + //写入通用配置参数-- + TxtWriteGeneralParametersXray(sw, false); + + } + } + + //生成VMess over TCP with TLS的配置保存 + private void GenerateXrayVmessTcpTlsShareQRcodeAndBase64Url() + { + #region 暂时不用内容 + //生成v2rayN的json文件 + string v2rayNjsonFile = @" +{ + ""v"": """", + ""ps"": """", + ""add"": """", + ""port"": """", + ""id"": """", + ""aid"": """", + ""net"": """", + ""type"": """", + ""host"": """", + ""path"": """", + ""tls"": """" +}"; + //MessageBox.Show(v2rayNjsonFile); + JObject v2rayNjsonObject = JObject.Parse(v2rayNjsonFile); + v2rayNjsonObject["v"] = "2"; + v2rayNjsonObject["add"] = TextBoxHostAddressXray.Text; //设置域名 + v2rayNjsonObject["port"] = TextBoxPortXray.Text; //设置端口 + v2rayNjsonObject["id"] = TextBoxUUIDXray.Text; //设置uuid + v2rayNjsonObject["aid"] = TextBoxUUIDextraXray.Text; //设置额外ID + v2rayNjsonObject["net"] = TextBoxTransmissionXray.Text; //设置传输模式 + v2rayNjsonObject["type"] = TextBoxCamouflageTypeXray.Text; //设置伪装类型 + + if (TextBoxTransmission.Text.Contains("kcp") == true) + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text;//设置mKCP Seed + v2rayNjsonObject["host"] = "";//设置Host + } + else if (TextBoxTransmission.Text.Contains("quic") == true) + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text;//设置quic密钥 + v2rayNjsonObject["host"] = TextBoxHostQuicEncryptionXray.Text;//Quic加密方式 + } + else + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text; //设置路径 + v2rayNjsonObject["host"] = TextBoxHostQuicEncryptionXray.Text;//设置TLS的Host + } + + v2rayNjsonObject["tls"] = TextBoxTLSXray.Text; //设置是否启用TLS + v2rayNjsonObject["ps"] = v2rayNjsonObject["add"]; //设置备注 + + + #endregion + + //创建保存目录 + string plainSavePath = @"vmess_tcp_tls_client_config"; + //v2ray_config\${域名IP} + //string configDomainSavePath = CreateConfigSaveDir(@"v2ray_config", TextBoxHostAddressSS.Text); + //v2ray_config\${域名IP}\vless_tcp_xtls_client_config + string configSavePath = CheckDir($"{configDomainSavePath}\\{plainSavePath}"); + + + //生成二维码与URL,跳过VlessTcpTlsWeb暂时未有URL标准 + TextBoxURLVmessTcp = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString()); + //TextBoxURL.Text = TextBoxURLVmessTcp; + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) + { + sw.WriteLine(TextBoxURLVmessTcp); + } + + ImageShareQRcodeVmessTcp = CreateQRCode(TextBoxURLVmessTcp, $"{configSavePath}\\QR.bmp"); + //ImageShareQRcode.Source = ImageShareQRcodeVmessTcp; + + + if (File.Exists($"xray_config\\{plainSavePath}\\config.json")) + { + File.Move($"xray_config\\{plainSavePath}\\config.json", $"{configSavePath}\\config.json"); + Directory.Delete($"xray_config\\{plainSavePath}"); + } + + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) + { + ReadmeTxtWriteGenerateXray(sw); + + } + } + + //生成VMess over WS with TLS的配置保存 + private void GenerateXrayVmessWsTlsShareQRcodeAndBase64Url() + { + #region 暂时不用内容 + //生成v2rayN的json文件 + string v2rayNjsonFile = @" +{ + ""v"": """", + ""ps"": """", + ""add"": """", + ""port"": """", + ""id"": """", + ""aid"": """", + ""net"": """", + ""type"": """", + ""host"": """", + ""path"": """", + ""tls"": """" +}"; + //MessageBox.Show(v2rayNjsonFile); + JObject v2rayNjsonObject = JObject.Parse(v2rayNjsonFile); + v2rayNjsonObject["v"] = "2"; + v2rayNjsonObject["add"] = TextBoxHostAddressXray.Text; //设置域名 + v2rayNjsonObject["port"] = TextBoxPortXray.Text; //设置端口 + v2rayNjsonObject["id"] = TextBoxUUIDXray.Text; //设置uuid + v2rayNjsonObject["aid"] = TextBoxUUIDextraXray.Text; //设置额外ID + v2rayNjsonObject["net"] = TextBoxTransmissionXray.Text; //设置传输模式 + v2rayNjsonObject["type"] = TextBoxCamouflageTypeXray.Text; //设置伪装类型 + + if (TextBoxTransmission.Text.Contains("kcp") == true) + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text;//设置mKCP Seed + } + else if (TextBoxTransmission.Text.Contains("quic") == true) + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text;//设置quic密钥 + v2rayNjsonObject["host"] = TextBoxHostQuicEncryptionXray.Text;//Quic加密方式 + } + else + { + v2rayNjsonObject["path"] = TextBoxQuicKeyMkcpSeedPathXray.Text; //设置路径 + v2rayNjsonObject["host"] = TextBoxHostQuicEncryptionXray.Text;//设置TLS的Host + } + + v2rayNjsonObject["tls"] = "tls"; //设置是否启用TLS + v2rayNjsonObject["ps"] = v2rayNjsonObject["add"]; //设置备注 + + #endregion + + //创建保存目录 + string plainSavePath = @"vmess_ws_tls_client_config"; + //v2ray_config\${域名IP} + //string configDomainSavePath = CreateConfigSaveDir(@"v2ray_config", TextBoxHostAddressSS.Text); + //v2ray_config\${域名IP}\vless_tcp_xtls_client_config + string configSavePath = CheckDir($"{configDomainSavePath}\\{plainSavePath}"); + + + //生成二维码与URL, + TextBoxURLVmessWs = "vmess://" + ToBase64Encode(v2rayNjsonObject.ToString()); + //TextBoxURL.Text = TextBoxURLVmessWs; + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) + { + + sw.WriteLine(TextBoxURLVmessWs); + + } + + ImageShareQRcodeVmessWs = CreateQRCode(TextBoxURLVmessWs, $"{configSavePath}\\QR.bmp"); + //ImageShareQRcode.Source = ImageShareQRcodeVmessWs; + + if (File.Exists($"xray_config\\{plainSavePath}\\config.json")) + { + File.Move($"xray_config\\{plainSavePath}\\config.json", $"{configSavePath}\\config.json"); + Directory.Delete($"xray_config\\{plainSavePath}"); + } + + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) + { + ReadmeTxtWriteGenerateXray(sw); + + } + } + + //生成Trojan over TCP with TLS的配置保存 + private void GenerateXrayTrojanShareQRcodeAndBase64Url() + { + //创建保存目录 + string plainSavePath = @"trojan_tcp_tls_client_config"; + string configSavePath = CheckDir($"{configDomainSavePath}\\{plainSavePath}"); + + TextBoxURLTrojanTcp = $"trojan://{TextBoxUUIDXray.Text}@{TextBoxHostAddressXray.Text}:{TextBoxPortXray.Text}#{TextBoxHostAddressXray.Text}"; + + //TextBoxURL.Text = TextBoxURLTrojanTcp; + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\url.txt")) + { + sw.WriteLine(TextBoxURLTrojanTcp); + + } + //ImageShareQRcode.Source = CreateQRCode(TextBoxURLTrojanTcp, $"{configSavePath}\\QR.bmp"); + ImageShareQRcodeTrojanTcp = CreateQRCode(TextBoxURLTrojanTcp, $"{configSavePath}\\QR.bmp"); + //ImageShareQRcode.Source = ImageShareQRcodeTrojanTcp; + //移动官方程序配置文件到相应目录 + if (File.Exists($"xray_config\\{plainSavePath}\\config.json")) + { + File.Move($"xray_config\\{plainSavePath}\\config.json", $"{configSavePath}\\config.json"); + Directory.Delete($"xray_config\\{plainSavePath}"); + } + + using (StreamWriter sw = new StreamWriter($"{configSavePath}\\readme.txt")) + { + //ReadmeTxtWriteGenerate(sw); + sw.WriteLine("config.json"); + //****** "此文件为Xray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine01").ToString()); + + //****** "Xray官方网站:https://github.com/XTLS/Xray-core" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine02").ToString()); + + //****** "Xray官方程序下载地址:https://github.com/XTLS/Xray-core/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine03").ToString()); + + //****** "下载相应版本,Windows选择Xray-windows-64.zip或者Xray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine04").ToString()); + + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("QR.bmp"); + + //****** "此文件为v2rayN(windows)、Qv2ray(windows)、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); + + //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); + + //****** "Qv2ray下载网址:https://github.com/Qv2ray/Qv2ray/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); + + //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); + + //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); + + //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); + + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("url.txt"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); + + sw.WriteLine("-----------------------------------------\n"); + + string strApplicat = ""; + string strParam = ""; + int strLenth = 20; + //****** "服务器通用连接配置参数:" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine12").ToString()); + sw.WriteLine(""); + + strApplicat = "TextBlockServerAddress"; + strParam = TextBoxHostAddressXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + strApplicat = "TextBlockServerPort"; + strParam = TextBoxPortXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + strApplicat = "TextBlockUserUUID"; + strParam = TextBoxUUIDXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + } + + } + + //写入VMESS的readme.txt文件 + private void ReadmeTxtWriteGenerateXray(StreamWriter sw) + { + sw.WriteLine("config.json"); + //****** "此文件为Xray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine01").ToString()); + + //****** "Xray官方网站:https://github.com/XTLS/Xray-core" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine02").ToString()); + + //****** "Xray官方程序下载地址:https://github.com/XTLS/Xray-core/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine03").ToString()); + + //****** "下载相应版本,Windows选择xray-windows-64.zip或者xray-windows-32.zip,解压后提取xray.exe。与config.json放在同一目录,运行xray.exe即可。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtXrayExplainLine04").ToString()); + + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("QR.bmp"); + + //****** "此文件为v2rayN(windows)、Qv2ray(windows)、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine05").ToString()); + + //****** "v2rayN下载网址:https://github.com/2dust/v2rayN/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine06").ToString()); + + //****** "Qv2ray下载网址:https://github.com/Qv2ray/Qv2ray/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine07").ToString()); + + //****** "v2rayNG(Android)下载网址:https://github.com/2dust/v2rayNG/releases" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine08").ToString()); + + //****** "v2rayNG(Android)在Google Play下载网址:https://play.google.com/store/apps/details?id=com.v2ray.ang" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine09").ToString()); + + //****** "Shadowrocket(ios)下载,需要使用国外区的AppleID。请自行谷歌方法。" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine10").ToString()); + + sw.WriteLine("-----------------------------------------"); + sw.WriteLine("url.txt"); + + //****** "此文件为v2rayN、Qv2ray、v2rayNG(Android)、Shadowrocket(ios)复制粘贴导入节点的vmess网址" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine11").ToString()); + + //写入通用配置参数 + TxtWriteGeneralParametersXray(sw); + } + //TXT文件中写入通用配置参数--- + private void TxtWriteGeneralParametersXray(StreamWriter sw, bool alterId = true) + { + sw.WriteLine("-----------------------------------------\n"); + + string strApplicat = ""; + string strParam = ""; + int strLenth = 20; + //****** "服务器通用连接配置参数:" ****** + sw.WriteLine(Application.Current.FindResource("readmeTxtV2RayExplainLine12").ToString()); + sw.WriteLine(""); + + strApplicat = "TextBlockServerAddress"; + strParam = TextBoxHostAddressXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + strApplicat = "TextBlockServerPort"; + strParam = TextBoxPortXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + strApplicat = "TextBlockUserUUID"; + strParam = TextBoxUUIDXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + if (alterId == true) + { + strApplicat = "TextBlockXrayAlterId"; + strParam = TextBoxUUIDextraXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + } + + strApplicat = "TextBlockEncryption"; + strParam = TextBoxEncryptionXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + strApplicat = "TextBlockTransferProtocol"; + strParam = TextBoxTransmissionXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + strApplicat = "TextBlockCamouflageType"; + strParam = TextBoxCamouflageTypeXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + strApplicat = "TextBlockIsOrNotTLS"; + strParam = TextBoxTLSXray.Text; + sw.WriteLine(AlignmentStrFunc(Application.Current.FindResource($"{strApplicat}").ToString(), strLenth) + strParam); + + if (MainWindow.ReceiveConfigurationParameters[0].Contains("Quic") == true) + { + strParam = TextBoxHostQuicEncryptionXray.Text; + sw.WriteLine(AlignmentStrFunc(TextBlockQuicEncryptionXray.Text, strLenth) + strParam); + + strParam = TextBoxQuicKeyMkcpSeedPathXray.Text; + sw.WriteLine(AlignmentStrFunc(TextBlockQuicKeyXray.Text, strLenth) + strParam); + + } + else if (MainWindow.ReceiveConfigurationParameters[0].Contains("mKCP") == true) + { + strParam = TextBoxHostQuicEncryptionXray.Text; + sw.WriteLine(AlignmentStrFunc("host:", strLenth) + strParam); + + strParam = TextBoxQuicKeyMkcpSeedPathXray.Text; + sw.WriteLine(AlignmentStrFunc(TextBlockMkcpSeedXray.Text, strLenth) + strParam); + + } + else + { + strParam = TextBoxHostQuicEncryptionXray.Text; + sw.WriteLine(AlignmentStrFunc("host:", strLenth) + strParam); + + strParam = TextBoxQuicKeyMkcpSeedPathXray.Text; + sw.WriteLine(AlignmentStrFunc(TextBlockPathXray.Text, strLenth) + strParam); + } + } + #endregion + + #endregion + + #endregion + + #region TrojanGo 相关 //生成TrojanGo客户端资料 private void GenerateTrojanGoShareQRcodeAndBase64Url() { @@ -2456,6 +4161,9 @@ namespace ProxySU #endregion + #endregion + + #region NaiveProxy 相关 //生成NaiveProxy客户端资料 private void GenerateNaivePrxoyShareQRcodeAndBase64Url() { @@ -2572,7 +4280,9 @@ namespace ProxySU #endregion + #endregion + #region SSR相关 //生成SSR客户端资料 private void GenerateSSRShareQRcodeAndBase64Url() { @@ -2940,9 +4650,12 @@ namespace ProxySU { CopyToClipboard(TextBoxURLpcSS.Text); } - + #endregion + #endregion + + #region MTProto 界面控制 private void RadioButtonMtgIpv4_Checked(object sender, RoutedEventArgs e) { diff --git a/ProxySU/Translations/ProxySU.en-US.xaml b/ProxySU/Translations/ProxySU.en-US.xaml index e9251ec..3f2e32e 100644 --- a/ProxySU/Translations/ProxySU.en-US.xaml +++ b/ProxySU/Translations/ProxySU.en-US.xaml @@ -30,6 +30,11 @@ Save Installation Log... Waiting for installation and deployment System Tools + + Xray template library + Xray one-click installation + Upgrade Xay + V2Ray Templates V2ray install Upgrade V2Ray @@ -184,6 +189,7 @@ Strong stability, Caddy2 as the front, hidden proxy feature, recognized as https traffic to the website, the strongest anti-blocking recognition, domain name is required, CDN support based on HTTP/2 transmission. Completely implemented in accordance with the HTTP/2 standard, with Caddy2 as the front, hidden proxy features, H2C protocol forwarding to V2Ray, domain name is required, and CloudFlare CDN is not currently supported VLESS over TCP with XTLS + fallback and shunt to WHATEVER (ultimate configuration), configured and recommended by rprx boss (author of xtls), configure the following six solutions at the same time on the server side, sharing the same domain name and port 443, WS can pass through CDN. + VLESS over TCP with XTLS + fallback and shunt to WHATEVER (ultimate configuration), configured and recommended by rprx boss (author of xtls), configure the following five solutions at the same time on the server side, sharing the same domain name and port 443, WS can pass through CDN.(If you want to add XTLS scheme, please use Xray configuration) Encrypted data transmission will be recognized as unknown tcp traffic TCP+Http camouflage Encrypted data transmission and HTTP disguise will be recognized as http traffic, but not real http access @@ -336,6 +342,7 @@ Caddy installed successfully! is upgrading the Caddy v2.2.0 beta version for Http2Web mode! Upload Caddy configuration file... + Caddy configuration file upload failed! The Caddy configuration file is uploaded successfully, OK! Starting Caddy... Caddy started successfully! @@ -394,6 +401,11 @@ The upgrade is complete, OK! Optimizing network parameters... Optimize network parameters, OK! + + This file is the client configuration file used by the official Xay program. It is configured in global mode, socks5 address: 127.0.0.1:1080, http proxy address: 127.0.0.1:1081 + Xray official website: https://github.com/XTLS/Xray-core + Xray official program download address: https://github.com/XTLS/Xray-core/releases + Download the corresponding version, select xray-windows-64.zip or xray-windows-32.zip for Windows, extract xray.exe after decompression. Put it in the same directory as config.json, just run xray.exe. This file is the client configuration file used by the official V2Ray program. It is configured in global mode, socks5 address: 127.0.0.1:1080, http proxy address: 127.0.0.1:1081 v2ray official website: https://www.v2ray.com/ diff --git a/ProxySU/Translations/ProxySU.zh-CN.xaml b/ProxySU/Translations/ProxySU.zh-CN.xaml index 486f0fd..335deb1 100644 --- a/ProxySU/Translations/ProxySU.zh-CN.xaml +++ b/ProxySU/Translations/ProxySU.zh-CN.xaml @@ -30,10 +30,16 @@ 安装日志另存为... 等待安装布署 系统工具 + + Xray模板库 + Xray一键安装 + 升级Xay + V2Ray模板库 V2ray一键安装 - 升级V2Ray + 升级V2ray 取消 + Trojan-Go参数设置 Trojan-Go一键安装 升级Trojan-Go @@ -187,6 +193,7 @@ 稳定性强,Caddy2做前置,隐藏代理特征,被识别为访问网站的https流量,抗封锁识别最强,需要域名,支持CDN 基于 HTTP/2 传输。完整按 HTTP/2 标准实现,Caddy2做前置,隐藏代理特征,H2C协议转发到V2Ray,需要域名,暂不支持CloudFlare的CDN VLESS over TCP with XTLS + 回落 and 分流 to WHATEVER(终极配置),由rprx大佬 (xtls作者) 配置并推荐,在服务端同时配置以下六种方案,共用同一域名与443端口,其中 WS 都可以通过 CDN。 + VLESS over TCP with XTLS + 回落 and 分流 to WHATEVER(终极配置),由rprx大佬 (xtls作者) 配置并推荐,在服务端同时配置以下五种方案,共用同一域名与443端口,其中 WS 都可以通过 CDN。(想增加XTLS方案请使用Xray配置) TCP+Http伪装 数据加密传输,会被识别为未知的tcp流量 数据加密传输,并做http伪装,会被识别为http流量,但并不是真正的http访问 @@ -341,6 +348,7 @@ Caddy安装成功! 正在为Http2Web模式升级Caddy v2.2.0测试版! 上传Caddy配置文件...... + Caddy配置文件上传失败! Caddy配置文件上传成功,OK! 正在启动Caddy...... Caddy启动成功! @@ -399,11 +407,18 @@ 升级完毕,OK! 正在优化网络参数...... 优化网络参数,OK! + + 此文件为Xay官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081 + Xray官方网站:https://github.com/XTLS/Xray-core + Xray官方程序下载地址:https://github.com/XTLS/Xray-core/releases + 下载相应版本,Windows选择xray-windows-64.zip或者xray-windows-32.zip,解压后提取xray.exe。与config.json放在同一目录,运行xray.exe即可。 + 此文件为V2Ray官方程序所使用的客户端配置文件,配置为全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081 v2ray官方网站:https://www.v2ray.com/ v2ray官方程序下载地址:https://github.com/v2ray/v2ray-core/releases 下载相应版本,Windows选择v2ray-windows-64.zip或者v2ray-windows-32.zip,解压后提取v2ctl.exe和v2ray.exe。与config.json放在同一目录,运行v2ray.exe即可。 + 此文件为v2rayN(windows)、Qv2ray(windows)、v2rayNG(Android)、Shadowrocket(ios)扫码导入节点 v2rayN下载网址:https://github.com/2dust/v2rayN/releases Qv2ray下载网址:https://github.com/Qv2ray/Qv2ray/releases diff --git a/ProxySU/Translations/ProxySU.zh-TW.xaml b/ProxySU/Translations/ProxySU.zh-TW.xaml index 17634c6..66ecb43 100644 --- a/ProxySU/Translations/ProxySU.zh-TW.xaml +++ b/ProxySU/Translations/ProxySU.zh-TW.xaml @@ -30,6 +30,11 @@ 安裝日誌另存為... 等待安裝佈署 系統工具 + + Xray模板庫 + Xray一鍵安裝 + 升級Xay + V2Ray模板庫 V2ray一鍵安裝 升級V2Ray @@ -184,6 +189,7 @@ 穩定性強,Caddy2做前置,隱藏代理特徵,被識別為訪問網站的https流量,抗封鎖識別最強,需要域名,支持CDN 基於 HTTP/2 傳輸。完整按 HTTP/2 標準實現,Caddy2做前置,隱藏代理特徵,H2C協議轉發到V2Ray,需要域名,暫不支持CloudFlare的CDN VLESS over TCP with XTLS + 回落and 分流to WHATEVER(終極配置),由rprx大佬(xtls作者)配置並推薦,在服務端同時配置以下六種方案,共用同一域名與443端口,其中 WS 都可以通過 CDN。 + VLESS over TCP with XTLS + 回落and 分流to WHATEVER(終極配置),由rprx大佬(xtls作者)配置並推薦,在服務端同時配置以下五種方案,共用同一域名與443端口,其中 WS 都可以通過 CDN。(想增加XTLS方案請使用Xray配置) 數據加密傳輸,會被識別為未知的tcp流量 TCP+Http偽裝 數據加密傳輸,並做http偽裝,會被識別為http流量,但並不是真正的http訪問 @@ -336,6 +342,7 @@ Caddy安裝成功! 正在為Http2Web模式升級Caddy v2.2.0測試版! 上傳Caddy配置文件...... + Caddy配置文件上傳失敗! Caddy配置文件上傳成功,OK! 正在啟動Caddy...... Caddy啟動成功! @@ -394,8 +401,12 @@ 升級完畢,OK! 正在優化網絡參數...... 優化網絡參數,OK! + + 此文件為Xay官方程序所使用的客戶端配置文件,配置為全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081 + Xray官方網站:https://github.com/XTLS/Xray-core + Xray官方程序下載地址:https://github.com/XTLS/Xray-core/releases + 下載相應版本,Windows選擇xray-windows-64.zip或者xray-windows-32.zip,解壓後提取xray.exe。與config.json放在同一目錄,運行xray.exe即可。 - 此文件為V2Ray官方程序所使用的客戶端配置文件,配置為全局模式,socks5地址:127.0.0.1:1080,http代理地址:127.0.0.1:1081 v2ray官方網站:https://www.v2ray.com/ v2ray官方程序下載地址:https://github.com/v2ray/v2ray-core/releases diff --git a/ProxySU/V2RayTemplateWindow.xaml b/ProxySU/V2RayTemplateWindow.xaml index 1502837..a3e0577 100644 --- a/ProxySU/V2RayTemplateWindow.xaml +++ b/ProxySU/V2RayTemplateWindow.xaml @@ -93,16 +93,16 @@ - - - - - - - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ProxySU/XayTemplateWindow.xaml.cs b/ProxySU/XayTemplateWindow.xaml.cs new file mode 100644 index 0000000..1079966 --- /dev/null +++ b/ProxySU/XayTemplateWindow.xaml.cs @@ -0,0 +1,1146 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; +//using System.Windows.Forms; + +namespace ProxySU +{ + /// + /// WindowTemplateConfiguration.xaml 的交互逻辑 + /// + public partial class XrayWindowTemplateConfiguration : Window + { + //QUIC 加密方法 + public class EncryptionMethodInfo + { + public string Name { get; set; } + public string Value { get; set; } + } + + public XrayWindowTemplateConfiguration() + { + InitializeComponent(); + + #region 加密方法选择 初始设置为chacha20-poly1305 + List methodList = new List(); + + methodList.Add(new EncryptionMethodInfo { Name = "chacha20-poly1305", Value = "chacha20-poly1305" }); + methodList.Add(new EncryptionMethodInfo { Name = "aes-128-gcm", Value = "aes-128-gcm" }); + methodList.Add(new EncryptionMethodInfo { Name = "none", Value = "none" }); + + ComboBoxEncryptionMethodInfo.ItemsSource = methodList; + + ComboBoxEncryptionMethodInfo.DisplayMemberPath = "Name";//显示出来的值 + ComboBoxEncryptionMethodInfo.SelectedValuePath = "Value";//实际选中后获取的结果的值 + ComboBoxEncryptionMethodInfo.SelectedIndex = 0; + + DataContext = this; + #endregion + + //隐藏QUIC密钥 + FirstQuicHideEncryption(); + RadioButtonVMESSmKCP.IsChecked = true; + } + //取消不在当前活动选项卡中的其他所有选项卡中的所有RadioBuuton的选中状态 + //代码参考网址:https://blog.csdn.net/weixin_42583999/article/details/103468857 + //调用:UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + private void UncheckLayouts(TabItem activePage) + { + foreach (TabItem tabPage in TabControlTemplate.Items) + { + if (tabPage == activePage) continue; + Grid grid = (Grid)tabPage.Content; + foreach (UIElement element in grid.Children) + { + if (element is RadioButton) + { + RadioButton radiobutton = (element as RadioButton); + radiobutton.IsChecked = false; + } + + } + } + } + + //传递所选择的参数与模板方案 + private void ButtondDecide_Click(object sender, RoutedEventArgs e) + { + bool preDomainMask = ClassModel.PreDomainMask(TextBoxMaskSites.Text); + bool domainNotEmpty = true; + + #region TCP 传输协议(VMESS) + + //TCP模式被选中 + if (RadioButtonTCP.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "TCP"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonTCP.Content.ToString(); + + } + + //TCP+http伪装模式被选中 + else if (RadioButtonTCPhttp.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "TCPhttp"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonTCPhttp.Content.ToString(); + //伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "http"; + + } + + //TCP+TLS模式被选中 + else if (RadioButtonTCP2TLS.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "tcpTLS"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonTCP2TLS.Content.ToString(); + + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + + } + + //tcp+TLS(自签证书)模式被选中 + else if (RadioButtonTcpTLS2SelfSigned.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "tcpTLSselfSigned"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonTcpTLS2SelfSigned.Content.ToString(); + + //传递域名 + // MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + + } + + #endregion + + #region VLESS协议 + + //VLESS+TCP+XTLS+Web模式选中 + else if (RadioButtonVlessXtlsTcp.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "VlessXtlsTcp"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonVlessXtlsTcp.Content.ToString(); + + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + //传递伪装网站 + MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text)); + + } + + //VLESS+TCP+TLS+Web模式选中 + else if (RadioButtonVlessTcpTlsWeb.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "VlessTcpTlsWeb"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonVlessTcpTlsWeb.Content.ToString(); + + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + //传递伪装网站 + MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text)); + + } + + //VLESS+WebSocket+TLS+Web模式选中 + else if (RadioButtonVlessWebSocketTlsWeb.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "VlessWebSocketTlsWeb"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonVlessWebSocketTlsWeb.Content.ToString(); + + //传递路径 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text); + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + //传递伪装网站 + MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text)); + } + + //VLESS+http2+TLS+Web模式选中 + else if (RadioButtonVlessHttp2Web.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "VlessHttp2Web"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonVlessHttp2Web.Content.ToString(); + + //传递路径 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text); + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + //传递伪装网站 + MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text)); + } + + //VLESS+VMESS+Trojan+XTLS+TCP+WebSocket+Web模式被选中 + else if (RadioButtonVlessVmessXtlsTcpWebSocketHot.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "VlessVmessXtlsTcpWebSocketWeb"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonVlessVmessXtlsTcpWebSocketHot.Content.ToString(); + //传递路径 + MainWindow.ReceiveConfigurationParameters[3] = PreTrim(TextBoxPathVlessWS.Text);//VLESS ws Path + MainWindow.ReceiveConfigurationParameters[9] = PreTrim(TextBoxPathVmessTcp.Text);//VMESS tcp Path + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPathVmessWS.Text);//VMESS ws Path + + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + //传递混淆方式(VMESS TCP Path方式所用) + MainWindow.ReceiveConfigurationParameters[5] = "http"; + //传递伪装网站 + MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text)); + + } + + #endregion + + #region WebSocket传输协议(VMESS) + + //webSocket模式被选中 + else if (RadioButtonWebSocket.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "webSocket"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonWebSocket.Content.ToString(); + + } + + //WebSocket+TLS模式被选中 + else if (RadioButtonWebSocketTLS.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "WebSocketTLS"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonWebSocketTLS.Content.ToString(); + //传递路径 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text); + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + + } + + //WebSocket+TLS+Web模式被选中 + else if (RadioButtonWebSocketTLS2Web.IsChecked == true|| RadioButtonWebSocketTLS2WebHot.IsChecked==true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "WebSocketTLS2Web"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonWebSocketTLS2Web.Content.ToString(); + + //传递路径 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text); + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + //传递伪装网站 + MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text)); + + } + + //WebSocket+TLS(自签证书)模式被选中 + else if (RadioButtonWebSocketTLSselfSigned.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "WebSocketTLSselfSigned"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonWebSocketTLSselfSigned.Content.ToString(); + + //传递路径 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text); + //传递域名 + //MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + + } + + #endregion + + #region http2传输协议(VMESS) + + //http2模式被选中 + else if (RadioButtonHTTP2.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "Http2"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonHTTP2.Content.ToString(); + + //传递路径 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text); + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + + } + + //http2+TLS+Web模式被选中 + else if (RadioButtonHTTP2Web.IsChecked == true || RadioButtonHTTP2WebHot.IsChecked == true) + { + domainNotEmpty = ClassModel.TestDomainIsEmpty(TextBoxDomain.Text); + + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "http2Web"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonHTTP2Web.Content.ToString(); + + //传递路径 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text); + //传递域名 + MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + //传递伪装网站 + MainWindow.ReceiveConfigurationParameters[7] = ClassModel.DisguiseURLprocessing(PreTrim(TextBoxMaskSites.Text)); + + } + + //http2(自签证书)模式被选中 + else if (RadioButtonHTTP2selfSigned.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "http2selfSigned"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonHTTP2selfSigned.Content.ToString(); + + //传递路径 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxPath.Text); + //传递域名 + //MainWindow.ReceiveConfigurationParameters[4] = PreTrim(TextBoxDomain.Text); + + } + + #endregion + + #region mKCP 传输协议 (VMESS) + + //mKCP无伪装模式被选中 + else if (RadioButtonMkcpNone.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "mKCPNone"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonMkcpNone.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "none"; + //传递mKCP Seed + if (String.IsNullOrEmpty(PreTrim(TextBoxQuicAndMkcpSeedUUID.Text)) ==false) + { + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + } + } + + //mKCP+srtp伪装模式被选中 + else if (RadioButton2mKCP2SRTP.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "mKCP2SRTP"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButton2mKCP2SRTP.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "srtp"; + //传递mKCP Seed + if (String.IsNullOrEmpty(PreTrim(TextBoxQuicAndMkcpSeedUUID.Text)) == false) + { + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + } + } + + //mKCP+utp伪装模式被选中 + else if (RadioButton2mKCPuTP.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "mKCPuTP"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButton2mKCPuTP.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "utp"; + //传递mKCP Seed + if (String.IsNullOrEmpty(PreTrim(TextBoxQuicAndMkcpSeedUUID.Text)) == false) + { + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + } + } + + //mKCP+wechat-video伪装模式被选中 + else if (RadioButton2mKCP2WechatVideo.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "mKCP2WechatVideo"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButton2mKCP2WechatVideo.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "wechat-video"; + //传递mKCP Seed + if (String.IsNullOrEmpty(PreTrim(TextBoxQuicAndMkcpSeedUUID.Text)) == false) + { + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + } + } + + //mKCP+dtls伪装模式被选中 + else if (RadioButton2mKCP2DTLS.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "mKCP2DTLS"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButton2mKCP2DTLS.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "dtls"; + //传递mKCP Seed + if (String.IsNullOrEmpty(PreTrim(TextBoxQuicAndMkcpSeedUUID.Text)) == false) + { + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + } + } + + //mKCP+wireguard伪装模式被选中 + else if (RadioButton2mKCP2WireGuard.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "mKCP2WireGuard"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButton2mKCP2WireGuard.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "wireguard"; + //传递mKCP Seed + if (String.IsNullOrEmpty(PreTrim(TextBoxQuicAndMkcpSeedUUID.Text)) == false) + { + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + } + } + + #endregion + + #region QUIC传输协议(VMESS) + + //QUIC无伪装模式被选中 + else if (RadioButtonQuicNone.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "QuicNone"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonQuicNone.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "none"; + //QUIC 密钥 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + //QUIC加密方法 + MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS(); + } + + //QUIC+srtp伪装模式被选中 + else if (RadioButtonQuicSRTP.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "QuicSRTP"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonQuicSRTP.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "srtp"; + //QUIC 密钥 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + //QUIC加密方法 + MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS(); + } + + //QUIC+utp伪装模式被选中 + else if (RadioButtonQuic2uTP.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "Quic2uTP"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonQuic2uTP.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "utp"; + //QUIC 密钥 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + //QUIC加密方法 + MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS(); + } + + //QUIC+wechat-video伪装模式被选中 + else if (RadioButtonQuicWechatVideo.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "QuicWechatVideo"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonQuicWechatVideo.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "wechat-video"; + //QUIC 密钥 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + //QUIC加密方法 + MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS(); + } + + //QUIC+dtls伪装模式被选中 + else if (RadioButtonQuicDTLS.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "QuicDTLS"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonQuicDTLS.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "dtls"; + //QUIC 密钥 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + //QUIC加密方法 + MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS(); + } + + //QUIC+wireguard伪装模式被选中 + else if (RadioButtonQuicWireGuard.IsChecked == true) + { + //传递模板类型 + MainWindow.ReceiveConfigurationParameters[0] = "QuicWireGuard"; + //传递方案名称 + MainWindow.ReceiveConfigurationParameters[8] = RadioButtonQuicWireGuard.Content.ToString(); + //传递伪装类型 + MainWindow.ReceiveConfigurationParameters[5] = "wireguard"; + //QUIC 密钥 + MainWindow.ReceiveConfigurationParameters[6] = PreTrim(TextBoxQuicAndMkcpSeedUUID.Text); + //QUIC加密方法 + MainWindow.ReceiveConfigurationParameters[3] = GetEncryptionMethodSS(); + } + + #endregion + + //传递服务端口 + MainWindow.ReceiveConfigurationParameters[1] = PreTrim(TextBoxServerListenPort.Text); + //传递uuid + MainWindow.ReceiveConfigurationParameters[2] = PreTrim(TextBoxNewUUID.Text); + + if (RadioButtonVLESSmKCP.IsChecked == true) + { + MainWindow.mKCPvlessIsSet = true; + } + else + { + MainWindow.mKCPvlessIsSet = false; + } + + if (domainNotEmpty == true && preDomainMask == true) + { + this.Close(); + } + + } + + //取消选择返回主窗口 + private void ButtondCancel_Click(object sender, RoutedEventArgs e) => Close(); + + + //伪装网站处理 + //DisguiseURLprocessing(string fakeUrl); + // private string DisguiseURLprocessing(string fakeUrl) + //{ + //var uri = new Uri(fakeUrl); + //return uri.Host; + //Console.WriteLine(uri.Host); + + ////处理伪装网站域名中的前缀 + //if (fakeUrl.Length >= 7) + //{ + // string testDomainMask = fakeUrl.Substring(0, 7); + // if (String.Equals(testDomainMask, "https:/") || String.Equals(testDomainMask, "http://")) + // { + // string[] tmpUrl = fakeUrl.Split('/'); + // fakeUrl = tmpUrl[2]; + // } + + //} + + //} + + #region 其他设置中的界面控制 + + private void RadioButtonTCP_Checked(object sender, RoutedEventArgs e) + { + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //隐藏Path + HidePath(); + HideVlessVmessMultiplePath(); + + //隐藏域名 + HideDomain(); + + //隐藏伪装网站 + HideMaskSites(); + + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + //Random random = new Random(); + int randomServerPort = GetRandomPort(); + TextBoxServerListenPort.Text = randomServerPort.ToString(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + private void RadioButtonTCPhttp_Checked(object sender, RoutedEventArgs e) + { + TextBoxServerListenPort.Text = "80"; + + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //隐藏Path + HidePath(); + HideVlessVmessMultiplePath(); + + //隐藏域名 + HideDomain(); + + //隐藏伪装网站 + HideMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + private void RadioButtonTCP2TLS_Checked(object sender, RoutedEventArgs e) + { + TextBoxServerListenPort.Text = "443"; + + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //隐藏Path + HidePath(); + HideVlessVmessMultiplePath(); + + //显示域名 + ShowDomain(); + + //隐藏伪装网站 + HideMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + private void RadioButtonVlessTcpTlsWeb_Checked(object sender, RoutedEventArgs e) + { + TextBoxServerListenPort.Text = "443"; + + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //隐藏Path + HidePath(); + HideVlessVmessMultiplePath(); + + //显示域名 + ShowDomain(); + + //显示伪装网站 + ShowMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + private void RadioButtonVlessVmessXtlsTcpWebSocketHot_Checked(object sender, RoutedEventArgs e) + { + TextBoxServerListenPort.Text = "443"; + + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //显示复合路径 + ShowVlessVmessMultiplePath(); + + //显示域名 + ShowDomain(); + + //显示伪装网站 + ShowMaskSites(); + + //生成UUID + TextBoxNewUUID.Text = GenerateRandomUUID(); + + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + //单击TextBlockVlessVmessXtlsTcpWebSocket标签则选中RadioButtonVlessVmessXtlsTcpWebSocketHot + private void TextBlockVlessVmessXtlsTcpWebSocket_MouseDown(object sender, MouseButtonEventArgs e) + { + RadioButtonVlessVmessXtlsTcpWebSocketHot.IsChecked = true; + } + private void RadioButtonTCP2TLSnoDomain_Checked(object sender, RoutedEventArgs e) + { + TextBoxServerListenPort.Text = "443"; + + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //隐藏Path + HidePath(); + HideVlessVmessMultiplePath(); + + //隐藏域名 + HideDomain(); + + //隐藏伪装网站 + HideMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + private void RadioButtonWebSocketTLS2Web_Checked(object sender, RoutedEventArgs e) + { + TextBoxServerListenPort.Text = "443"; + + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //显示Path + ShowPath(); + + //显示域名 + ShowDomain(); + + //显示伪装网站 + ShowMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + private void RadioButtonWebSocketTLSselfSigned_Checked(object sender, RoutedEventArgs e) + { + TextBoxServerListenPort.Text = "443"; + + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //显示Path + ShowPath(); + + //隐藏域名 + HideDomain(); + + //隐藏伪装网站 + HideMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + private void RadioButtonHTTP2_Checked(object sender, RoutedEventArgs e) + { + TextBoxServerListenPort.Text = "443"; + + //隐藏mKCP项 + HideMkcpSeed(); + + //隐藏QUIC密钥 + HideQuic(); + + //显示Path + ShowPath(); + + //显示域名 + ShowDomain(); + + //隐藏伪装网站 + HideMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + + //mKCP显示界面 + private void RadioButtonMkcp_Checked(object sender, RoutedEventArgs e) + { + //隐藏QUIC密钥 + HideQuic(); + + //显示mKCP Seed + ShowMkcpSeed(); + + //隐藏Path + HidePath(); + HideVlessVmessMultiplePath(); + + //隐藏域名 + HideDomain(); + + //隐藏伪装网站 + HideMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + + //uuid = Guid.NewGuid(); + TextBoxQuicAndMkcpSeedUUID.Text = GenerateRandomUUID(); + + //Random random = new Random(); + int randomServerPort = GetRandomPort(); + TextBoxServerListenPort.Text = randomServerPort.ToString(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + + //QUIC显示界面 + private void RadioButtonQuicNone_Checked(object sender, RoutedEventArgs e) + { + //隐藏mKCP项 + HideMkcpSeed(); + + //显示QUIC密钥 + ShowQuic(); + + //隐藏Path + HidePath(); + HideVlessVmessMultiplePath(); + + //隐藏域名 + HideDomain(); + + //隐藏伪装网站 + HideMaskSites(); + + //Guid uuid = Guid.NewGuid(); + TextBoxNewUUID.Text = GenerateRandomUUID(); + + //uuid = Guid.NewGuid(); + TextBoxQuicAndMkcpSeedUUID.Text = GenerateRandomUUID(); + + //Random random = new Random(); + int randomServerPort = GetRandomPort(); + TextBoxServerListenPort.Text = randomServerPort.ToString(); + //清除其他选项卡中的选项 + UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + } + + + //隐藏QUIC相关项 + private void HideQuic() + { + TextBlockQuicUUID.Visibility = Visibility.Collapsed; + TextBoxQuicAndMkcpSeedUUID.Visibility = Visibility.Collapsed; + ButtonQuicAndmKcpSeedUUID.Visibility = Visibility.Collapsed; + TextBlockQuicEncryption.Visibility = Visibility.Collapsed; + ComboBoxEncryptionMethodInfo.Visibility = Visibility.Collapsed; + //TextBlockMkcpUUID.Visibility = Visibility.Collapsed; + } + //如果加密方法选择none,则隐藏只QUIC密钥 + private void NoneEncryptionHideQuicKey() + { + TextBlockQuicUUID.Visibility = Visibility.Collapsed; + TextBoxQuicAndMkcpSeedUUID.Visibility = Visibility.Collapsed; + ButtonQuicAndmKcpSeedUUID.Visibility = Visibility.Collapsed; + } + //窗口初始化时,需要做一次隐藏QUIC加密方法 + private void FirstQuicHideEncryption() + { + TextBlockQuicEncryption.Visibility = Visibility.Collapsed; + ComboBoxEncryptionMethodInfo.Visibility = Visibility.Collapsed; + } + //显示QUIC相关项 + private void ShowQuic() + { + TextBlockQuicUUID.Visibility = Visibility.Visible; + TextBoxQuicAndMkcpSeedUUID.Visibility = Visibility.Visible; + ButtonQuicAndmKcpSeedUUID.Visibility = Visibility.Visible; + TextBlockQuicEncryption.Visibility = Visibility.Visible; + ComboBoxEncryptionMethodInfo.Visibility = Visibility.Visible; + + //隐藏mKCP相关项 + TextBlockMkcpSeedUUID.Visibility = Visibility.Collapsed; + TextBlockMkcpUUID.Visibility = Visibility.Collapsed; + } + //隐藏mKCP Seed相关项 + private void HideMkcpSeed() + { + TextBlockMkcpSeedUUID.Visibility = Visibility.Collapsed; + TextBoxQuicAndMkcpSeedUUID.Visibility = Visibility.Collapsed; + ButtonQuicAndmKcpSeedUUID.Visibility = Visibility.Collapsed; + TextBlockMkcpUUID.Visibility = Visibility.Collapsed; + + } + //显示mKCP Seed相关项 + private void ShowMkcpSeed() + { + TextBlockMkcpSeedUUID.Visibility = Visibility.Visible; + TextBoxQuicAndMkcpSeedUUID.Visibility = Visibility.Visible; + ButtonQuicAndmKcpSeedUUID.Visibility = Visibility.Visible; + TextBlockMkcpUUID.Visibility = Visibility.Visible; + //隐藏QUIC标示 + TextBlockQuicUUID.Visibility = Visibility.Collapsed; + } + //隐藏路径相关项 + private void HidePath() + { + //隐藏Path + TextBlockPath.Visibility = Visibility.Collapsed; + TextBoxPath.Visibility = Visibility.Collapsed; + ButtonPath.Visibility = Visibility.Collapsed; + } + //显示路径相关项 + private void ShowPath() + { + HideVlessVmessMultiplePath();//隐藏VLESS VMESS多种方案的路径Path + //显示Path + TextBlockPath.Visibility = Visibility.Visible; + TextBoxPath.Visibility = Visibility.Visible; + TextBoxPath.Text = "/ray"; + ButtonPath.Visibility = Visibility.Visible; + } + //隐藏VLESS VMESS复合方案路径 + private void HideVlessVmessMultiplePath() + { + TextBlockPathVlessWs.Visibility = Visibility.Collapsed; + TextBoxPathVlessWS.Visibility = Visibility.Collapsed; + TextBlockPathVmessTcp.Visibility = Visibility.Collapsed; + TextBoxPathVmessTcp.Visibility = Visibility.Collapsed; + TextBlockPathVmessWs.Visibility = Visibility.Collapsed; + TextBoxPathVmessWS.Visibility = Visibility.Collapsed; + ButtonVlessVmessPath.Visibility = Visibility.Collapsed; + TextBlockTrojanPassword.Visibility = Visibility.Collapsed; + + } + //显示VLESS VMESS复合方案路径 + private void ShowVlessVmessMultiplePath() + { + HidePath();//隐藏普通路径Path + TextBlockPathVlessWs.Visibility = Visibility.Visible; + TextBoxPathVlessWS.Visibility = Visibility.Visible; + TextBoxPathVlessWS.Text = "/vlessws"; + + TextBlockPathVmessTcp.Visibility = Visibility.Visible; + TextBoxPathVmessTcp.Visibility = Visibility.Visible; + TextBoxPathVmessTcp.Text = "/vmesstcp"; + + TextBlockPathVmessWs.Visibility = Visibility.Visible; + TextBoxPathVmessWS.Visibility = Visibility.Visible; + TextBoxPathVmessWS.Text = "/vmessws"; + + ButtonVlessVmessPath.Visibility = Visibility.Visible; + TextBlockTrojanPassword.Visibility = Visibility.Visible; + } + //隐藏域名相关项 + private void HideDomain() + { + //隐藏域名 + TextBlockDomain.Visibility = Visibility.Collapsed; + TextBoxDomain.Visibility = Visibility.Collapsed; + ButtonDomain.Visibility = Visibility.Collapsed; + } + //显示域名相关项 + private void ShowDomain() + { + //显示域名 + TextBlockDomain.Visibility = Visibility.Visible; + TextBoxDomain.Visibility = Visibility.Visible; + //ButtonDomain.Visibility = Visibility.Visible; + } + //隐藏伪装网站 + private void HideMaskSites() + { + TextBlockMaskSites.Visibility = Visibility.Collapsed; + TextBoxMaskSites.Visibility = Visibility.Collapsed; + } + //显示伪装网站 + private void ShowMaskSites() + { + TextBlockMaskSites.Visibility = Visibility.Visible; + TextBoxMaskSites.Visibility = Visibility.Visible; + } + #endregion + + //产生随机的uuid + private void ButtonNewUUID_Click(object sender, RoutedEventArgs e) + { + TextBoxNewUUID.Text = GenerateRandomUUID(); + } + + //产生QUIC密钥/mKCP Seed所用的UUID + private void ButtonQuicAndMkcpSeedUUID_Click(object sender, RoutedEventArgs e) + { + TextBoxQuicAndMkcpSeedUUID.Text = GenerateRandomUUID(); + } + + //更新随机服务端口 + private void ButtonServerListenPort_Click(object sender, RoutedEventArgs e) + { + int randomServerPort = GetRandomPort(); + TextBoxServerListenPort.Text = randomServerPort.ToString(); + } + + //更新单方案随机的Path + private void ButtonPath_Click(object sender, RoutedEventArgs e) + { + string path = GenerateRandomPath(); + TextBoxPath.Text = $"/{path}"; + } + + //更新多方案共存的Path + private void ButtonVlessVmessPath_Click(object sender, RoutedEventArgs e) + { + string path = GenerateRandomPath(); + TextBoxPathVlessWS.Text = $"/{path}"; + + path = GenerateRandomPath(); + TextBoxPathVmessTcp.Text = $"/{path}"; + + path = GenerateRandomPath(); + TextBoxPathVmessWS.Text = $"/{path}"; + } + //TextBox输入内容做预处理 + private string PreTrim(string preString) + { + return preString.Trim(); + } + //生成随机端口 + private int GetRandomPort() + { + Random random = new Random(); + return random.Next(10001, 60000); + } + + //生成随机UUID + private string GenerateRandomUUID() + { + Guid uuid = Guid.NewGuid(); + return uuid.ToString(); + } + + //生成随机Path + private string GenerateRandomPath() + { + Random random = new Random(); + int randomSerialNum = random.Next(0, 4); + //Guid uuid = Guid.NewGuid(); + string uuid = GenerateRandomUUID(); + string[] pathArray = uuid.Split('-'); + string path = pathArray[randomSerialNum]; + return path; + } + //域名检测是否为空 + //private bool TestDomainIsEmpty() + //{ + // if (string.IsNullOrEmpty(PreTrim(TextBoxDomain.Text)) == true) + // { + // //****** "域名不能为空,请检查相关参数设置!" ****** + // MessageBox.Show(Application.Current.FindResource("MessageBoxShow_DomainNotEmpty").ToString()); + // return false; + // } + // else + // { + // return true; + // } + //} + + //加密方法更改后的动作 + private void ComboBoxEncryptionMethodInfo_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + string getMethond = GetEncryptionMethodSS(); + //传递加密方式 + MainWindow.ReceiveConfigurationParameters[3] = getMethond; + if (String.Equals(getMethond,"none")) + { + NoneEncryptionHideQuicKey(); + } + else + { + ShowQuic(); + } + + } + + //读取加密方式 + private string GetEncryptionMethodSS() + { + return ComboBoxEncryptionMethodInfo.SelectedValue.ToString(); + } + private void ButtonDomain_Click(object sender, RoutedEventArgs e) + { + + } + + + + + + + + + + //private void ButtonTestChecked_Click(object sender, RoutedEventArgs e) + //{ + // UncheckLayouts((TabItem)TabControlTemplate.SelectedItem); + + //} + } +} diff --git a/ProxySU/bin/Beta/Beta.zip b/ProxySU/bin/Beta/Beta.zip index 91bc3600dec2b0f88b255482f211d86679b77c71..588c53c38d4c77f79865f25fc566f2b9c70ec8cd 100644 GIT binary patch delta 150404 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%0D%$qo^4sg&oZFm=e0(RS_98`h>sT)xDv!Z+ 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 HfLH$qgfG7U delta 130679 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 z zkB15II1wP5o<&7NAbCtXPQG8J5Z@(JwdM<6R;t zBc&U3FMkt0;)nspeq=B;ngPF{`##pLi3FlJ#Q!|BPR5D57F?A5?`PYwciXrY%l7*6?Vi}G=96(k$BPa9o86BOiPQN z(X43tE~^hmfwB8N))Z83#MnjT`>ZzPocMrf{sC(UDICXpdql$zOB^#7^*>@YA%CT! z{>Py=5s8|g1l|!O7XH+Ct&eE_S(%Gp#FC$fT)rY&eo^kC6H)ieuzN>D^jEAaXipZm zSzx@%5$fzEiq>DVrc%i8LqvZQN>GPPG{MeCS!)=wv56^`|CU9A@UZ*I;z$Pc3oCxd zdO}~2ZSt|w@q5-1#tLjoWUPeR<$w4CYw)1;k7cvArMLIG{umhF*;dFP1zduoq#}P} zwE>7KJlOGP))H1oQJj%NTEzasmIeirti0rx{B$d)E_wv2e+_P=7wvDXr5sg=6tw-F zi2yX1R$x|5*?Ej&HU7gFh{QrGiN&pt`BVyGO$mz#B2F*k%L3{l7#72{0W#MB;((`cuTImx>nw$ zA$m{c-T*MsNfseGHa~hA4+;ks;es~riRTkzV(IC;!@F`y;pVvFxF3vEHiP`e&IoE= zDEhK9d1nB+Ul3A3W^xf4Lw_CIx;vFA91$I71@;0J@5v@pBhx^ub5>xdnhuNdeP;7o zPs`leOyt4vK)s1UHs3Pnz zxye2(y4LcxGTqZ3PbOj4Z(SfF3={2aD8%S`-WAq0CPgKt4IyGONkZdW&ki(elwC<2 zo&y|)X(XbMN`Efh$U7=QloRH;;o^~)81_#kEV1-F-cbo6(2SnXyDC9N0mU})rIjEL zS_w$&7JZv}ta5a$p{GA^D0w*{*Hmobk+2F-pS)t!#W8uM3$)WfqCp6(|HZ&7^gApntkTQOZUvIScOrB7rz$*1Pud zwqOJz;TWW4`vNV4PC3A3J?VaQKPsOeH*ca52b~uLj!s;I>LCgp+A_c!!`6C4s(mnc zhDRKkzLU#IS8j-RhGNN8@4lRy5OaXHhT=*Gb)SmYi3@oo6i)_~Iu7!dQV9EUvStyz zhZ4`>S>N37OG^--) zrS8jd_6U86)@sr`K0Z)I3D!CG5NtmbNOF%Pm`i~G<7vlVxFQgf1eY{uw#Nf!by}-B zSk1$M9=|~+mI#!-3T9Hh26|5t>}7}<@nbKw0)LH;4^hqwBfP5;R5WJGMq$i{A`_;Q zj624g0vl-X*_8^L-if4^=at+OKcY2{4n%by=ItJg{pfic&gQ24MRKi`4zw?uraa`u*t{*gV~v>c(md~|1QBZOCX>S6j4^Bf2JeTX{6OsGZ{V zGGsAs4IRm&&7c?$L_DnJD@46%jIt3}h%Qsrwz(-TUS zuN6&CELFZvG(D+QIh;g#a*6U4%SF?*rGLsneorY?-X~hG<4w9;??e>$LF-e?;Q*bd zmBU#nTAyAHXO(DuMme0-qV<{OaMp;{>qBvL-?Tof9L_q?`s{Kz>md^<6i4@ycn*(v zaEgU2o?8;353-QL5m3D1`QZpCTk(Q$1Qe{eF&qJ z#o-7j$+nkpp%Jug@|cabo692giMCtHBCQl{x0Xd(CE9K)i?mv_y|gUS8qxN$vPf%1 z!|i;DMuL64;(8ih9#V=GG`u3L6e-^kUb;>++!<1eJ=gHckW%cn$X&cvml{QbgV0@( zSA`b#iO8$N3Zb!)yF&}tKt57fA%8SA^4hRMXldkiVTI7p$UR|&vYq!Dh2GN+jrZ}o z;6fBbI_+;MkF`>?zqLHpD$)M7@>r`y``gQ7t$z{ikCew+ z3pe+&6TCyZip^lBu;aM!xr&{tUX7|tmMb_E&)A~a413zH@XR`6?eD(DxRn?n&Y}cW zu>pc+u-gebh1GEdoywLHbQ;@4(CO>|L1(Zrg3e@5B4{Ri5kY6My9k=aK1k4P_636G zuj_%OE+A+TOA=JgCJ9>1t|zF5-9b<-dzhdl?8^kz zF=!}4^{k1Y2wO)`1KUSXBO4*8iA@qD*i8gAv-=5ZVILu=m3@VvHuhJ7+FA7}3hH1h z2AAf|j!95wwimNl=tMNKg;^C_ypyU4nYqqXaEyi+@j5&kZDg+?=v+4E zbOoKqS_nFy?LR|7o7gx(n;9q%LjA0jpe=0POa*Oa%L&@Xww|S+?d&pwcCeQdw3B_5 zpvSR45VVWEa<+nYvwt@cw1<6gj)L~GZxFPP73L~vKTFS7&;{&g3lucKninZ(kZmAn zhz$~SfZapTh3ta_9c14m=pyzgK^L>Lsugqz>m}$?b|FERv1&or02Vm>`QiNYDuTHbJB8lz(~!jj?8eQfwzdSF&pe zI?Vn^P?{}{C}^DZ5tLzRg0k#61WmBp2)c^hOHhuzjUbyXXi!j|ts$tu?k8xH)io+; zimf5&2-{82G&@Al)htKQHS8?}9c7;(=n3p+1U-@6)}){(vGat2p3HU;bS=A-pr^1r zLD#Wo5cE`bD}O;xW3MIX>Fj8Wf}X+7YE#fN+4=1Xx}II!p`d568#)#AY<3GlH?VsN zdJcPppy#rW67)RwWrCj1en-#?*vu{k-N@<)x``bk=!NVKf?mYlM9_=bhY5NKTivao zo7onEZef=ZbSoyeT-dwu7W{SGPl6{h(Pq7~n^lA17fLpEH$mTE-yrCl?6(Aci_O@ipl`FU5%eAQ_00~949oz?GB&_CFIf*xZ>31WQKZUu3^f}kpX z2|+XX6A3zne~6${`R@rjjUU>hpwsz#2!A?*U%OX9XYy|mG?V|CptJaM_bF%=e~6&j z{Bs1&;m_T#pt<}3g68p`5;ULpU!b4`{2GE5@_Ptc#J@sNHJ>@4pv8PEK{Y%_P%VEM zK}+}t2&&^^P(k(l27)5|xkCzS;BO$Pk#`(WP!mrOB=|E4YUXbxsD&@MP(iJ{mw%u( zzL%hOo+GG(|CFFk-f~buU3?8e-TVMSOZg21E#n^}D9V3FP!C^yk%D6UAVIzSI)aw- zuM)I^pK-B*`uI5nt>iBzXcd1OL96+%30lLKT%w@0{4#>p@kxT#^ScPzz&}OM+58U# zox?X?s-TTLMbNqYK7!8UA13I0{(lRCHu2e)DQGiaOHe;QO3)Vm34*rrZxOVOKSt1Y zUVFKMcJM6(?c~=H^f>-`f_Cwr5VV`K$17+LZz5k0)OEoKVm(-%U`0rwK~(+X%Aw`w1H1vyuuL<(CjN#-Bt`iocbh zEBUtxI?UHu3QF@hLF4=;f-?LA1ZDZah=L~giwL@kzn7pK{{=xdpEatWJl{l6fsYb2 z$zMRw6n{HGNBH!Zf~NTc1bM4S$rNqkP~>1wDb^LeLZWcL;hCUwK$TPv&@lPvh?+=;^#Wqo8N--xBmpzAdYu>-o(DJ&XUEpl9>Z z2?gE2KSt1V_~}bgb6!C&;x`lY zVm`m1pqKDH1l`PkNYE|3Z&E?G@|y{|jbA#YpqKIo33?fydqhFE^IZhJoIgy^D|pMa zg6`nYAm~p14}xCFuen-5ckwq9^eX;Wf?mxBuTjw5`~iYq!|RSJ=(YShf?mh}LeM>Y z|i{V7k}#52K;icwr!RalY}X< zBO(vK@ql|?S2BXx8BsBTRfv3UTEs^o%7u72UE^fVsWFI%t<(9_(@{hi0jh2T?D!;X zqykYWf*<3+RVrsC@>!^j*h;8Pd*Q^btRt3F_srAqmMi^x{_G#U=!T!X?9Ly*?)D$Q z=E)nJ$8%=7_kZO%&t|({2Xo(+cjF0}k160FiSu~gEOjfMz$^{t>6xd>ybfJOq;}_i zkccNJQR- zBFuvf@-2hCWt~zxWrpksNG@d}LL5~j%|4@^PytDS_uV;97tU3wDRfB1>`%Pn$)W5% zrhRaM@432!DG?g2W+CnTZO{5iSI^gln!GM@$ZHf|6=x9MOCe3qn{VcCQLAmb*cgGewon-{f@e&#}$Z+t?Lc#TSXr>wG6^qo8hs) zSJfNzS$X-EtAF&6-Z5*5AC~H!RFaf&buF@u>wgCfdYSzt^vcigiX8owH6_aT~9q6Nh0$Po>gnFsmYmf&rx(RcU@u!SJ-Quy|HA z<{HMqLCv+6BRrGef9V01A=aOZ=cWx)n1;SjCB!&L!+AQEgu4nr+s0BhK97oY7FrFN zA%7B#=SJn^5g!?W*9tZ~g6Raf$x2R#<)J-b4;ThMK$qccsho3wQU>%c=ZdJgh-YHM zdG?yBJFDPn0-s_niV+}U3SW}VNehN`z{C-kPb@qu3PJ+;fngnki=l;`hhaIIAB!Sq zAUOvcSsKlxu9i&OqL4Y9f!PmBV`5WY(0>*VPIbD~DcfvwDhUXwk(A^C+nx6!XhC2( z$tWgZ!jQQ!;_RQ+Z z!ex3+S389-=FjK4J0-!mZU&$i?1VDVxD{ndN$c6$lDFJ|B&KaSa}N&2fP_Wl(SK#Z zF2z~DfU|ZI?S9(M5`2je8u%j9^GpN?}%e#F1Sw`47RmAV+HnSCEMdl5Ss znAKhH>o3R*hQ?wi>o1Lux?SY}Oxb2&NZ6@7xGef0G=LeXW=xtNM2$n= z_mC2yB=cEdG-2iPl2bUx3d+$e`hU0Vbp&A-CZt^e1#rzfi9uSSE;Jq8rZApYb$u1d z!1f72b6Z@ZY{w`x4kjZ%!;a3X-jAaEdYnOmQYBepu_H*5B0O@$XrmlShRArdv;cwS zkwOkoa^;vRBeeOmakkg$uFbG>2Q7>|3RDi$6N+9w z*6R#-$*c;EjqyN>V#;ZEj|J_vvuU)O*c6iuvtd#~Sdp4Hv4_y=W`Rdy2W+b}ajr)t zHRHg}e&@jrRZp)%h3ion0e+k9Zg1if=-gO zHXbAlO1ENpdr#l;c4^Co0e?z<#2M5O%7=g!8u$cy$~5(@1pHNikMc%|O5VUli;v<` z8Wdp~D~IE4BG|E+(fF)J#6M3*(mb3UhjP)#5;PFP?W&P#FdraD-Fpu{|M8LILmT2cO2W4L@xn zE;R)Ps|^|_7idTnWHOC@umx>NB}mUN*f%KRd8i|qnoK3ZxCr@eZaJ`Qp$GDxtA1Mr z5`^9ZM-oH@9Djl0qeg@Eu|d)xXS9sEJyT<;vG^ogHb`qVPx#!U|B6_Rz3JgRYhjeD}$>05@qHJ~DbJpOOMN1h#ApCnaDRrU@v9 z3Q#wt2yIoN_Qim^O zp`rbQ)HE1_)+9_fJNLtbQ9LW(jn!n~R5Pg}tkPh(ptp-;#GqbFy`k!LRiLMa)&Uj? z3fp#M+V#>haz3y|!IXg+w}=fY#a2+Kpgz&tK^=2YcMLjXlVCu^PU(Y#2Evq*u|Y$| zQWJWpgMVh(Fr^|5Fzj^tM2EaUB4liE&IZexRax>NWK*$CJBm7vJfk9zW&l1qNiaE@ zK9keNn7aa{Nd}q-%#3gF6=YGCwk{ahdw`^pz>~me!$|{RBFU>^nU}pDhe4Omr!92T zt(=Yrf)pm;H7jEV7OUqMU9u#v7BGWH>dke_dw-2p?3|f&DJ>jcbNN1yp=D`tP^z(x zkf9b>Y&p@bv>Ay*rI?#wqeHb$8uMm#4eM@_&S;>t<{z zpuL!~(&-)*DwPg?HUk<-o0KS+bao1Sb0-Xj!9Y8}({MG$y<;y=do$ixbuJ^FrQSZz z5(iiFeP)CX{Bjv{iuyuxQH&_T_=bgIA-OG$(>+d?#(bbBPN&|HVd+}wAkQ&Y?+vsO zd6NZTs*+8hd9${-EAqgdo`3NDob%6-Z7^2{jvni|HIK1q+^hvLpfipy3}=tHUYwQ! z?pYeUT5xH5QBc7tc^$t?+Fjik71mb%1=KPbPp91JGAo_n6nMo6h}?L6B{Z}2D0U@i z9L;cqY-?*cjJ4@_6OLSC3Fi$HCF9^V=|OlqznNy|l$B2EsDq3qL4P>h8R~G&q`b5c zDMPp-2Q8Bu%owvGevlp8u+HF3g6|3!@p>83HcK<6n8H@e*OJyq97L;mJgsWqF7HNI z*}c=*XX@=K_mRHG-rdB$aQ9Ys_4bJwADV#=RMaF5D|84x!oQ10fe}18kV&V&^Suzx zgu{5pcR`4m&b-|Hg@3vox6;OaU$hG-HT1FMNJ*G07pyjIXN9~wRfQDebp2_{+!~Nx zuHJc7wd$@z7aNzqV62RFsJ2E0+=W3U)X^Xr)5%zA!@Gh20eI3zM2*&tdIby>V;INr zQYaaLVkTH+IFs5ekT&Ucgq6{Y2pEYNd(s*PYUHTUq}&(pNq=N%Z29vxwDMd(SiJUl62`3UGjW^68IBA1&fgh}+rJJ@63ScqWleAz2Ag3^4fK`cuzJbj{ z(kWXCRrWRFiX6NNY@p)%BSEwT2U!%*$(;f{K&<}#2P7#uT}34iIyyB(g<1I}Am9)r zucFydU0Tk_@qfHt?;9&|>|(k_mD-C=j~RZW(EK=h129v7kw_HuY8q4?g6dONPR{(Y z@pw^!>B7U;P1i3IU1+KGV+ddFHToFrz3z_JSG~4sw>zx#NK*O{RZUC*VR^fIv1Zw{ z<7vc~t)xHxOf!_zDH!C?ag?MpThX`#T};A&94w^ra(^74#4g-FsMVs_BxA3D#zG76 zMH{S@o&`XIvZxY|!${;MnK}m;-ct@YP%c2}qlxJ3@`~=9z z<6zNz;TPHIGaz#9&WPHrCB zVT1!$&sT>nYXW6PegRSxMQJ2nXAkGkV{r6lpNSh=X1dy(nX=tNewai*8%B zT7R8SOkjce!k(ZP7R|%9x)+RZDD7~^ma3(Sxe(M-lT>HSQA3Fv@!UOfg%)=Pzu}h; zT6r}@vpPDiH%)LDNRyj@P%(ZRxQpgW%0$$A-dp8thb}d;VrB@)9jbHzhf9kzOD(7e zExj!mCUQtTg+BoUqA<9IQ_12m3GULuvVV@O2DKX%G9cC&6r_@-$0Uh98AhYYfzre6 z+zs9+jZT6xV}Z7XYy}5`x15i!AU--Ti0vgyh6j|@i~|)@+I%i>0}Y=5&qswYoaoR9 z@Gf0`+4)n_hBrIXu&^sIu~x6KAK?%4K{WNkc4nMtgY zX~Ez4ANcV9*qjjBKB&_(JyZ||xU=e|G`D7@8HZT|c~&0pGEj(gT88jxO-SSB;Eqj0 zTQA%?0AGbm)2>#L2h|6Mg~*O-jH{ z9nllLEq!5aoqz@D=@~8=AVb7hFMnb+rYSpMOV2S;ad1#1$oc^~xb~xCMb6pIttE0A z^k5FmxcR*(&;v=Ak+P@g;_KLNcKPk_0RvwwU7RK)Bx z?FqU2V^Wf`f-V_`=&|vGK&J82s1Nfu{MWV-;@%~jxxL@aIT4t2qJuFyDuiKLY(~o_ zIc^|uVaG?T7Mg~2<{iKOgao18Ne~A*c4TOr$t+Y##;d;F;d}Y3PZm=!M2M>jI5PSz zh7PyC6Mpr`4TAv-wq>2V&VR}j@GgG)zp{z&tkP!gEu(JFd?YzOCoI^482$#?q73-|$k&%cZ9D0B((8^RN1c7!JTn(eDygv$&t0>*5h8}(fN zOdd8NcztV~%>~>64dj91ca$Rs`F6%Kx~Rrz*gTf>&0p8@ql2_CP=BmbB+cYsrt0b3 z7DY*ZF^rO-N{q-!n7k!lP=>ATa-x;n;t5OUYIGkn8)`eQpldH;i%PIAEDmFA^N`-K zLu`kQ0~cs6bU*qTFe|W&8Bm`=Ga9bv<=s0fYhW?GEpoI&-j!LUL-7gI6;O1v9$C** zx=>LS`kQM`i_oeVxqs&xL93hYwmmxoQz;Ec)gMBZ%URF3mO(vt2q8kq5W0`wU1|u) zaR6Led5B9}`{8%qPq-4D( zbx3XRKb|HzL&`In>}+Mku&YSNoc+AGZx9{B7^IGsrd=YQf`GllJ`RsZ1q*&GPk zmv@6}C8*xqub}NJsMwOnX)OHhL+m*-3S#539BtCxTWf* zszH~1ub41()qfNfQ7{GNYmR;irGy=vNXQj2PQ%A8t(-*(!alLcygAP{@d1xWaJvbz z;^e9p7z2frpUT22kwq-WoI8^ZH>X1#SjIBH^q$3^%1!C{yB5*0mEoF})%~cG#-hkF ziZ55lV40IFN@=X|BupHzXu^bOHwdafi-rTiNEvX{!hdxo`-67jC!7ekZKw`ytgBDk zZ3sCaU0;J&>+jssRVYA4e{aC~X!-3(_be^^O5v8iv*|f8oP`nI>^26Eu{z1>`uVIg zXp>k|K6+%xh?j$?R;)p)WQBs*$scxg)rZ5}IscWa8pQ z^E$0dUta(rPA$oOyJVawk827HB{=Q+EB`$=vqPZC@{Ge_r(MVb?$+<^QXK%%i3{*S z=x_fa8lte>Jsz_Y6O7e!+>14gFMb(Z&x?8mNwQSoZ4gJuKsWd8y)9Gu(wM}f!=(JB zynn@PEec$p#M2=e@N`Bqa@$e2AxiBQy5S&P>|w0b##&R@PFcC_m`6K1ZfWZd^ML6L z8&MQIOc85w_z*m zeD(ZE)fi21T2Lv`jCznevjMf#=R~5*aq5QaFK_$6Mq4) zCC=0JtMyZqeOJ<)xM+UzO-|j$-4wAsTm59uUMruU0O375<&7|oTN72w0_ZLZD#~nc z+91iffk9bBiPn0fwpqI->sCRh8(u1slfPw_tn?@{JsCJ)moo$3w&!i!p)_}&E3CUO zHe@8MSN`7ie(-(bwEqTgp=RhK_J8=;k&)gi@>0{pF25Lv>GvouuQ!;Hq$ybQ*avhZ zy@e78tpYb~%{7W4Z!;BLZ{6yRZ1ns!ofSRBLm}>&Aa$NHp77JJZCJC(S(9b)Q&*0p z%=~RUzl+yGnN{AAc z3g|h}IZWIdH;&^N)$G`^-%XT^>tiywX7RqK`%?3c{51!7D(aX9g$mI_j|0NExv*J66u@ zn4BL2_ZycNh$P}b$;8v=V}F|Ji(XIAr=exqMk?>F#Rh56xo5|Vsx|WHVbfm=7RHBP z0{!QOig?_D=#XDobH;~~4aMkcGY^>%iNpAXXPx4gvfWuWN?{BlhZPY%#d-Q-YhryX zaoFR+K+i^WCewHWk%&uAw#8)^0bjxV=!F|L70DTmGd$hE!xp-Rw}0_BaifkjgrtC~ zB}ZP|(=#IBevO)9hZ_WBcON~P%#0j8I$an)di3h)2^d00j}A^-KrR{8iu8WE-)^G|2=epkYz3@SX=z(Dvq6Jvz#+I+r^3?P2MMDPnR%S85;? z_{C!z(pfYQmC!%Baeq5iZ6+n@s0*eHc}F>YP20@)p%E)%BV-!!BslrY0*K;NLVAQp z@=;K@0z6_R5wBUO4|D?spBaU6eM&>tl%RB$W;bqbo`l5!jX~rg{(961QEMN z1jb08#c)Fm_%8Z@u*}yuOw!N5AFj|;-4xiW=sZhPmY<5ac9&>OAQ?dx!l|(1StgRkPW(2QE#rjXguC`kkpbokF2VT>P+c z=MOxWbn-cAynH5DhbPTe;I2DlVdx6*NGwqIIINLc@(*P%=ra|jmQJLByj;=)b5JEU zoR0nDYj_OaIjn%$e9B|eF=;G9-izKER!$VGJf~&YZDPVWIlOiy^b6vFv^4EfGc>ZS z-71?dQ-6g@kqXsZG+dzu!jb_&6U{#dpgA*Gs;s#f8^$+EwY6s90CAD03Jf-vRGYQx z8)8FzK8QAH&NNOg6EfjzM_C%6FzK4+9XlH0g4!1_uJr^;qwr#pnU*)0`lAS>Yve`) z?J20tcyG>3_jCKM7`8zt>rGJaKwi^&11(L={4;_NfyzW)7~ZOYdn|Ij zrp-aK>zR9A_pQQoGy-qbDngBdo!0kX`42l1qk5RSBGK1$;h(z_a?P|8 zSnSNknwe(TWAG_93|D+fk38)_#Iep+RRW zbY0#iis_3kbob>U#=Hz{b!*J?&JLucU&zaJlxBe+wfEZaW_NEekVuHeRdB(;tTP<` z-4^4M!bHdrUO1P^i3y`?;RWU5XvVNsqk*p7K0z^P9s);P+*T`QEr5IuW5@Ow1b@6V zu0e3_S#aGE&Z35b%%AOEg;X@5!*AcEBAV2N1IA?SUy;j3Vx}4H-Qe3eCjd=7DeI?R z5w|n~n$Kv(C0#0~lH9X*Y5UqSEnpGjvaF$RZ)y;?R$Ei*|0sTiuQ9 z6(E6{9!^UK-~HrL){sXM8Yd=Ux+Kh=Hv}+IMU1Bfltj>T*)mU7ifirK1&S%4K zCP3dxucmdW|28HJf{00XvKjJ`G{b)+-R(PV5HC3%VN969)gDS9X7Mf)QT0r8lrXPD z906pS-Q5+F4y|K@eb`v}$+)ThfaZwy67*(*Mq0JJcqo-+c7yBb?bWwV5zjC~Cc$ip zY{9KyU~hOtMY=RzqnM{v_@o>)6TTzV#$t;E;Al0FKeBGkp*5>$wsf^sURr+y93p8t zuN&?u;u`}N=KWOs#xwY}yaj!!fZe8m+w;`PvYim?9jDZfoMpx>DGX*iXBm|>M2oUB zY!j))T{tMo7zPJf^KW56l!}C9hJi4i=&mp6vKI3`z!?4ot`7V$bJMyksW#{$Qzj+Y z@Eg*H5p`Hnk5)I`rRdg35ix%TjahS%U27Bj^gW$Au~MrShAF(5RsdcR&A0Fe@qQpZ zd4fzsuPegY6cgUfgfp60C{#qJYn+!U@oY4m9ge5zIzLS2Sgq45#frYQvE}f;6&qG8 zU$;Dp2j-Nvgy5`jr<`(yZw7=t#qcFH%oUO(`7w61DT*#Roj^5%YgK7^5rJghpXH zD-0tQe7D!VqNbNZSbA&l>->vcQ}V}(^qh52rM@^D@`@tm!}LIs=GCbQP*t|qD#?2-#j zrJ?jaCzCAdrt?*lA4PvTLm7bGwY4JQbO-c*o{TfD zC_G_Z!MrAY-3RhAISx9Fl0xPjEdu^cJzCR8x!iQ;w~;ziHV^zZ{-P5$jrtZq$HGLz z4I>#oXl5A;X?!G2lMl6krbjJpK|><`u}>Z#Mp=1_SO|JV^%Q7@VnNv>BT= zQVpR7!%%=2sYNPF548hz=|M&2IBkVn1%W;ldpm#VI4plfrDoz^VuzXT$GZyi5%;U}JNTO`T8EJlaVb?`ND%pC+YwDP=I(2ox)5+u=J*u!;Gj$C7_7%G z3vLO$1jK(A?{(kTVm}$$Z^e!FR&to<_|50Yuu1t?jHq!YC6_Du)swITMRMp;$?dUN z)e?2Y6_NiID?4SIU3MbfbsUO(BDw~<=_cdxvS+SLCDJoySmRG@fL=7@8wZ9CRIK*- ztjV-)dE$`4=y7Vk2|K|lQc1HS1M4`|--Q3$bbo(j*zBfb=%V9Li4#%v+C}tfEsSyJ z3iy_7T$V{626E1n+n5(g@7Pf~R70QsP#=cCQYh2{#HVrxfHoZhRSc&&5*KEXo1ehk za{f+(J5+joKH9TG=rjjfYo0K4=Qq4BLaTuJ4sIBGeGF`d6;F(5$~5DX>t$}i#VI))c+pbwn9gI0rav<)Y-#I?fk8)@Kxd z%D>Nd;b#~tZ8d(hv6A*8qPL|-@Gqu#4Q+p__|+q~YOZ{(B^t-o-Y@V^asB1T@CGM_ zt-@3-dWPZCspD#7oY?U2iNY9`?9c5i~YD71@C`K^s(aRCO9h=+D+-=7{R9 zLnK6fZ$>y@dVs4p6=Oq0T=S$B%f%y3_KUtgJVBSVn6{aspN~%KDKJJPV z@@=CUH%r8KCJ)cOxY^lsik+Mg5~qKj+|0NAE&)!UBPTk6>Z*Mc=*##^_;F65jssYJ zD(%U@&Ho^1Im+V`hs%xfy~U&a4u0G5PriO8x4WO5g@jAnqA}D1=?#*Bc)CI^)nlRA zd?|nNaZQ&MaHtTEmqpFtIqRIufQ&19fDDcmt^IhxhIs;3rT3gt)%^PRGd6#VF}8;d zvdwH0{C79}xBK?e=M^0?ixpIGFUkq;CUmaTxSAc_43$d?_8LN0FN-eKy?6W^EvPF>HYvEcT+Hhm1w`akgvRh5!?M z<;!JYm5ifRQvdMUwei)7)oXuNtY5jxTE1?5{fdraUexi(vt>5sIGniI=+t$ZD&Q<~ zu!;@thmi<_4Y}%v70q#QvU0`n$jWuA*Tj=6*Q~Nuu8v$bgI#3O-6j_oGN& z?IlkeKGAVf_#HTv?NvgFT@)Wr9|uWqXNV@o>W5(7-7N2&-)l_~MdyF&6H(7uO+dNa zz!2?Kta*=R%S%}|XO9eyWv32pmASpL5Oqmr|B9{|tgR&0pi0LRwWqK}oAIh9%8YYX zZZ)T}g?k`Djik97HvS7hO*Edy>W1ROJ3$^hEWppf!gq^%#HsOgPw@bKjt39oipUwP zwy1bp&aw`|2$ieV$eDkh!hSf?oy{QQqIxEquVo@H9@#6W>Lq8fYWWlzNzY^hAcsy= z&+_2Iw@2XVY|m4?b8X2SR_(#1bm;229{hd_s6^(mTB;Q~8BUbpMQc=X?R-a~@@$tp zleHxkmv=ry7O>g@NS(~8Ql}1;gIv3iEiwvaHL76oBDTON*qeVA9t@t!C$mASOwc^t`L1&=fkF$T$Gen9Og8rGZ@Us*4Z^T)d znZoLs1gAsOvPAMU+?A+bo;qMD=v?|qkN)dwM`us#V=wcq~wbPQ!e5WRmlcLNOp(&eo73 z{>;QI<6(crB3oC%+0gN7eM(8VHVz%tNDb&g!^K_Ui5*`)RgfeL6@mh zpi@{%Avy7N5%wq|t96e^ipt6@Rs_kfca=N~ZnsnN1fyh5F-lIKC{m1)9RmA)9InTK zBxjPy&>W%&oO)zT7O62=1&CMv6p`b>3vWy+PdS2L%2d~6sEnL$Sn4#Ro0V~kY?*bh zNHTw_qaVRTSyY#-=^`yQ!PI)cVw3uYh+^itiy3^M=x=brQnnIb6Ydv7bT0dw)2!4P zA~CYN>_ghbG+?XROhY|+ZS3l^S%x*G1&3QFGG>cZHxoBa+8m=GwK8^7SaTiK<3!s> za0t@NMT(2SKI`l^cx25JX_Ko1_%l2+O~-#LSqqt9Vq6-4vKm=Bxyl- zhMR9M_<6m^^mE!Lgc#&icO8DON$nXVSQ*o*o9816bUZ!3G~b4 zHl>wbB~o0;GyUa_RsMPY3H(%8p-<#_v?_eXkbVPC%XjQzF*2IkqbF=nE{tswYxojT z7&|97D_pATqv4PAAxHRNmC8|CEsB47%~9@C|Dump$=gIh-x|ac&si!mJTj;&t4d?} zBuH+J$n>DYr%KS&DS~b~ovMG;+R9iXQlrz=d&uFJ zwymLSjgC@DVJTbdL{enRgAFx-d6jixf}Hh++of6C6!U5VhT`UK5SfvTbYDdhrfn3- zk%a0E1e0PDD56?~5_NlWHj9jC3SFS4%h=*28&#gBN#80`qG@Iz)aieaZ1WKnaO+InMfr9Dm7)FyTk>{NT(?C zlTn$MIhhlm5^)het?_^8eEfbfC^9Eos>B0PR!m!?#HUr7*+5)AEw8qRX3{|&B#KO# zSFyyh4v8eML=`*1>-1LsVUg3DHx#DLI3iMGxrAYw)MrGZmlLCT92Kc9FD0r@xyM9i zWNTxL)6C8_qA+qWtFB@jqB%1;Oq!K=GGdJx9@>94Z!76p_ZTq@k@cKm zsf=uzAoY}ci9|+9H|VsmTqQFFjQ!$r`pvGqGa^ef@gxbeD{d9}k(3UNdALW3nJ5l zMRZw77b7C6+OmJxu>~vbk~vA3NqUmF>_uV!(ven}D&_ROMS3(vlwcA*B!(Ex<)1K8%kF>p4;$t@BH<$uf%g0Dyca)*WK*JZRP zU?qIon1yKypTIliai1|31cqxc__N05g&h~AN%?bPDAmCJIT=0MH~3K^Z2ae=HjXq& zCFp%s^N4>i;|n6yi%@NaFwM{}8or}Soj|`lV_9DkNnRO-VWUGPJg8B6|v+D7)A_?E+(zq+D z9K}fao>Bif_1H-BQPs(LO#i+}@l19uXr}%^B=$gJWps#C&vfI`MN&}2d(t3cZl#4p za*Ra&b%x|lF*F86U8R-SCE{YFT8Z6J!loS!J0|x-G0+&hbcO}r2mVOhX>OiPvSW!q zHtK(9UqtZDnQNbUwqyHCrq?Ymvxfe}&}P)ZNlE{yNQsqqnNN`<{7ejSXXd1WpNm|t zy;`;X;;&a*l;J%_E8`a;wI^cyVHNzc2ZroGYKA$#5*e|Gjm=G~Yeah{Bi|>^4PJCHuD`JyumFIfs+eekXsDU1XEg856zjm-~CqxX)DnaWJ(sSCUHl zgNXMaq_AQ3A4Phs#B%+bjaBp~G0cOEpYdn^UH<}rmHlV$M!L!VBGP-~iU>mHUxnpC zW=}VG9V*bEqFX6{iwaPxL|>Ik&JfbAQd8~sRG6WnDV8$dqa4O`K7^mDFo9kG)SlchBc3tm2nRcVL+L zR7DVm=YoQlORq3t1TD0AMnwb8tqpsH%yzG+s@0}B)p(Ng@O{xMy_y%3JpWZP$Adgt z5VnH6T3RtT`jl2(>V_7PMH+V#2`q% zOAd`efI8&%mzgmXp4RJg=^<(>Z-C75Ae@EceXzQtY@5RGI;Rbk$=*6x#}oyFJp0{# z`g|(AO|EuX=?(GH!Lq2Y#2iu1A0l&l&Z4L%1f~b9v^dY&8WqTi_w1(0>M4J7gD!ih zXRn)Lv?ZRJAQO8Kq?MQGDQMN1kzJCNB%`*EqNy^HWonEb=Gm~yvQlJ{7bi`So9d+| zkwogCRJtWoJP7%@Y2`*|rb(-35=bd4U8eO^Beg|peW6T0O`X# zTcKa9w)gP!rKg`_6sbBiufS7ub~^v9caaJ`8$!?L+Vpfl!pbXRji26uUh%V zo=v7ySLuZ%GB1{fMr2T}${H@yV%0%CDXsS2a!Ng0qzS@hXO56oPjr8($ec1yX47kJ zNTEa3&v_$dRv+jvM)F6=oIX%eH;(q?$~auf2?3lR9wRe*=^lPKc&sNOhKY7Ih_GOs z%#GDGCPxy}-7&;uvP9!EUh8Sr_|zrWaJ4iHt9WzCdH-ZX61b7#p+Zvti!Hc0uiWlnz&2Owx!&$?eQN9KCc zHkf2wgPggsT-KHR0aWPF^m3UJYputuvgUcu@N{Z~A6B;V=gXX!RQ9TOR=smjW`WFz zNozZ(vnY;dJs^`}(%Av0><49fPXx2-)v3sWhh%OqAAimCS`v(rpVnHG@AJ-LXc@cvz#%?h7GG z&0g+Vx$u9pw7kKCOR_SvcQSiXyHY0FA&X_cc`F-~&EOahA|Aey;a2LZp3+OL)OYlh zKEg_UXHV&6R_dcYrH`~y-_=w4C@b~dJ*AJfQs2{4`WP#yXUfG`$x5IpmtrL=k!D?%X|a;|zB{Cob)|Qz5mr`P z?^I=0R(tPMBdx5fy;F^{vaa<`HTosL{)-qiS&X%>F5!-Upz;ylvWh^_vg*ouzx{v9 z2I{&$-pp9MvbeOQWK{7=T!1dFGcIqxMD!Cc5x7Gj#7agl5vLiwRQ!?AZQ?FT=w%|4(aXg+ zMz0XF8NE`}FnX1EjM1yb6O3LXE;4_*U3`Sm9pbBu?iAgO?h=1w)L#tiM`(Z;&uE}1 zXEaDuGa4)&Wi&)Q&L~ctWE3xMFd8bp$0$Mkg;Amy_!2@%BA-#Rn93+cyoph&Sjxx} zn;4~uXBnl7_cO{6pJ$XQe#R(EyyB&VvPBA`95I1WuBc>`Csr{UCU!B(7sr1Y6^M(B z3dQFc6^SlJ#p3sjN<`{ygocY^Mx|mFqY+{uqcZUxMkB>uMx(?yA>WHeTk zy^PQ}v4YXvqJ`0G#c@XC#Z^YH6L~KubdPu~qt}bnR}h*Y?q)PmoMSXee4No_vHX>U zrik5)riz8HA~a1jGP+lsWi)?Xe4Wu7#BHx8be|ae8bbGrH!zwZ(rza-Q;cCWOI&3% zTa3Ar&>V5>E<$s~rT&D<#itp~6G2AvMeYDX3&iUfJs{r5=s~fJ(L-W2qc@6Y7`;h+ zjM1A#H>0o^jxHEy!Dv`v#F=`eU7(FIF&1iqM=wP%){E^XGac2^tb>f9&LhD6$3ZV_+Q>lbDio+J6O=4>r zq0Qnrqb=e?jJAsJG1?~n#Av%1oKC1k@Oi4x^{V?U{rQifn&Ihr~ighsAD2N5mf( zJtKx^5jrYr7#$POGCD3^pH1k5_!*;<;s-f|o)v#$^qjamm(VG3lF@0Akw@r^n8>JA zyqD2g0i&tVInluAdGT{bFNneUgkBVD8J!p3V{}3MmC;4fSU~8K*v9Cx=vPSSifCli zCceO^U8EKfx+;GjW^_$_oY8gBznIVsF^tiB#brkC6Zs{C-Y+&X`hfTnqYsK9!wG#z zG%@(6r&h@O5D%r(_$&3&xmb|J}Ztf z`keR>qtA;kG5Uh|Bcm^hyG9cFlE`56WwC(KSHv<#Ulo6A7=2AV!|3bc5~FVjF^bSP zMI57Vi2_F77O!XY9Wjs5cg0dh-xGI^CiH#L$>;}S;}}96B7ZEQpm>;3NPLh{r^p^h zs7o|5>K5N+^h2@sZbCm2dl~&$oMQA7af8uM#V;8BOuYQHgnlmWX7mfOk#7Dh?(8Ai!+_EbVCawVfw`4vW%ylonxG+D?f zUCw2cA$K#%l$RN0$*(ZVmVaZEBd6a>C|5Qx%9EQI4U^9@%9mebR3LAgPN-0(Fe;L> z7!`lZdPXJkaYn=C*BF(`KQS616W&0mOg_wLq+G>ll-$c`w0xe?82M91Vyob?5`4&c#WDBFo@}rEV$lGTSnkq9G zO_Q%>bg!JxXu5m{qc_MijP8@2jP93WCLw?9<}#WoU&m;cd?%yXaxbGf@*1PLGRUZ0 z4w^-1p3G-7UruDSKrUtUfcz?>2j%Uv2|Xm|FnXgr$LLM+dyL*J!!6AH+C7&XX+j2h);M$6^1j8@3c zFHyY=u!E7M(>hyA0+f{xsTC%?sJtpNF z39Xg^Mr-6jMr&okn+UCw4UE>y&oO`6ARFFHXruf9qfK(~TL^8Ib&R&iPcqsnhrN~1 zHaVZscKK~aEi!E(p&fD+qsQgIhY39)mowTaKgwvA%%~u=TfT?U9{CGKdu7rhLi^-l zMo-FaMo-D9m4x=o?=w0e3#te`EjKbcD9w-fdPcrsF`<8>@&==0 z@`sF$%bX>IPRIbGlky{so|Pq!5PDATXLL&bp3!OfrfNcGfQ{4}jiX0|_BVfpcAx9qxFNLvbnwy(!R78+Hc|9t^f@&F#3nHMsq3$K|%pXWR0eJe{Y` z2Dd*m&iR1)g*IF=J_OIM>pavP`JwyqWBS9eZ2Ca5gWy6tuXkNK8@#^8yUg2P8M?5& z>%<1`L~f8Oq;p?;gkXs=e|56&In>eqOlQkFhY$sI?{9Kv$ESa;<1VKCZ>PM${pTQ8 z-H4?4VC%-NXV!-H91Gsq6Wo3r?LfV$j@%)vh>FhLg`F?9ceWpl?7{(es7=t&$-|)o zH-c?Xguf5&uikxvB6aUSe+0yF(W@IKLjt8-LUM!R?QQ zcAe{Lz214P)gyn|tB8SjQW2UcRxxn{N&Q0`o4T7ehIU^G9o{g`;S$>aoc($8vy|e9 z!c`|$MMxodbvxcbr*iXg3olq%Ut^4}8$Xr?c<|i1&YjOw_k#~fs&nT-m}T3J-`Ll^ zehUUYhBJR@)eo8;Guv%>_Z|{L+aHHX;-SYX)V@8q_A<#N{B=ns%`1=*3hO+vm6B0* z_pTeEJr}$8oVO>jqbEWan!DF;@3?jYZMVO)UJ31eqU*@1?!E1y-DiT2ZwX#`A++%v zlAw(wr7&@`W4}-_szvzIx8zr3c{zO}`fvrf+0=gn_!9#ww6(SS)ZXCLwqV=w;HE>6 zp#F}Ube&xn+;9q`0K>EM;4$^xmKUZh3}vc6Ra+C=*`IEvFRK2SqPJ0t?4-5!{Ha?3 z+m3mfx}>9hE&dza{#7>oBJi4=3i=xAI!?j zLwkRo4edWjrFK5KhUy)yw=)H-me}vYPNqHvh!?cOY@}3GfDl~EO0CAL7l4xVxHNS z56EkhWq2; z)4lF-Xb!!MFxUC%9?b|6vM*^z4*9G!eAbU!IQBFb-{3OB$mI2jbmLZ&w6)*Kep-K* z(U08+jwp47YkCH9(HSs8bU9i~p|%dBwc?GB@!+`)df01Y-ku#G2sHh(V3&|4w^rGlKGn- z-AynB>s6N*(mpoH$fgT!-QLyO+Hv(z*YzjB+t$ww7bzKnAw>m$QegU16Pp&Yv8qlf zvof<7>>CcC8C~Zth0bgVZg?tqVzXWGt9v^iyD}~aqj_#eu>E4!jf0rOf=7R!v>n`| zTTvwb?7H!EXxp)_8_k_3+L6aK-kjN#Uc+~(@VnpPQsH_J6^{I^31WaI8gKIJUy6#6 z2O4MoibP}`e%tTo{qCDITbXfK@8_^w>ux#-%hY|~5J}q>-Rf%{?Z-lAcUtp6df~aQ z^H+wKWEGZ{WI+vrmyZWquK|C+x$bDcWJ`4G5qL1cD=!8QtS7;B@53~*%^HDBWhGfk zD|SNeus&vb$K{Q|rmf&aeMW-@!F6jf?cqB*!S)xr zHk{_BSn#sCn)YDIK)33-ra&3xBf%|eJGZR|cO-PS-9WEntp}@#2@`+yM$aJ$whht( zYnA0WC|B2wmadj#!CmWuN7q1#kQ@ddRBz6#^6q^t&{jkJJNtdFU+`d?y=LBa5bF{s zroCX;d=R>;f(uEDxwo)#vXl!_d>?p>4XzwV}MXwrtxoiJrDVsYDg;b&JjDj~EfQrLfbyRUcJdW;gGJg{q^ z3JZHnzjgh{w2+>lK4=T%N^3&b+!k!vfZBqgs(`i?5TDKw-5;TSttf$vy-vlzL4&%R zZ*;Uh-qpO*UemW84jnuOIYB>=+PQx-@T+=Hi`{GO>61fKhg&;t9Kd{txq`miQKzE_pJTjXE7B4AOYC3{rTgF4I#vV!4+t%@`nzrhCxGvplHFC;}|n$X@;~_KIkc} z-$<-RxvLucUarm0Zhh0*o2o%ne;dVrP+pg=3Yc7Ii4nZo1a`1m)D6T$4}swE$A~$7 zf#%yETi}T8gR!7Vpu6c12D!-@%MA1-4QJg3Qayi@3=%M;sDx)0Z?t51Aq7%xW!rP6 zr%Vxpa!i?7Tu<2`3*v1orB(#Ib4SY@xv5LgSTks7=V=W1>Wh~8R$){i_J%ef3;+i< zwDAc@9una2;?XN`JdMKd9!16+;)=z_sF(Oa9$$xi}G=B z*~x#Ml0b2a(vpsATPbkC+O23fAjfS|2^}{MhnmkC$w~3lXT*ra!ZuS=nBj3RioC37 zwKoM{6iL4DO(ywVcYjCsmHK{@J#*Jb@m7s!Ldx0f#dfofx~}iXj=E-3(nu@VfY=!-`E#uYI1%m7dE`3 zZCl6HJqULOcbr7*1TBM07JTXuxptw0Egfx7*=|_VK766IP3P4oLTisi&v~@T;Y8V- zcekRV!L#qTXXfHk?a`{0R4F+WSDQN6Wv|uEUu<@J8(z)%rF##n7rbbJ1it2*C~O zI@(U*jW9KawwMKhA>8HYg1X!HcC{X*F&bSct2sFXQBh?rF^;NerPRGlVY8^%{<#C) zFYM>9x~mu5Kc&2!)@AzV`ChW;CF--KSCufWotrL(nwsqi{aQQxP|``g!o)!u)mmU* z!L%SDEP3!rv9SN_xPGAP!fuRE+Gx>1Sx5lW49`t!u?H8xvL7y_0Edn|SQYfvppJ!F zTs;+RvE_G}mulApC0)~wmY42g^#G=hM>2hfmfFRxJq;7tz4xM8;cNlM1}1_wXtQ=5 zwTeJ&S|?Bg{#ihrhWA-mdqW)N#;l(GZxG)FMzmU={nllf@_}#Bgzk^y|!_5U)uO- z`B6!hS+&j_p$lf<11bS)*7fUJ?Efp6hO3tWKXtq z?b%K%f053OSAy4@&FGv81KhxLPg00nz0!0=>wO}Jf}@-QGw@cRn-y+TNPhPpYZIb0 zP&&&F1{9ZC)Q$G%R`l@s(3Xwil+Yn)>N?W$zPJ6}QVwi(T{{hL2h*N1&8~Q2A7}r8 zcOtN5T35#vbvXo_tevxa*%vX=^t`(aF+%SYe>*H|ro?m>xD*{2(Hpu>4sxPtYuSnO zcWpkVL%gP$h9QI;XexvZqJjqnxu%Dq=7re)1y5&oYg}g>?s%2mc*}mxRezf|o914f zLV0*kCu&2bbJsrXOk+KW^&N5*(1@hbiE)Yl<~tD&@@x#b4DL_!!-{~J#Nt%?Yc*8X ze|cq_!P%mdR6C70*f^(r);5PaH4<(GIl4EXXz5v{ZGSt}N=IvYeH2_3qM+I8>T*LC(Rt(*{B!nCha%@ykoxmo@fn&)TbGxC4P z!v0itNg9#%j|!=M1oe~S%Av})f=@l&)pAY!8ZjI^2*&=E;s@@XFmK9&DRb=ze|9_E zD31Ffgsr@R=j-e0S0eP?aqYB~yApx-j%)j|=*_c;4EjVqIWI@`M6dP+hz6dhy+5(` z4EEyn97Y}jom`_fV)$x9NoyO}KkI>Vt9$h|@@FYXZn0OO&oiN!`SuJ!>KFb#Zj|R< z8}>Y+4t|Ye^T2DU>D7n zX}YM*i{-qK-}oMDDJCMt)3UE;09fhyYvh;0s}zxojBbMQ`9ZK4WP$CvBR@k*g^a~d+ zHqbnPRU+?pM;{r`4W$T;sEdvVdd$*pN zOYG2AaD=+J+KvB5ek~aC@Im9qgHFAA$zw$T(lDDw$(~Jsf8tqM99*1Qt<&~6>cIVv zQ!9wL;wHt8y9 z?tM-KD)@Yve|gNi`^bUd(cRN0Ywm@1xV7uzTCA)_m6@A7h`8&3i0xP(KIOE-9iZXQ zrVBaFksFy53S#EcS)e>4hy^=EfrfF8+fV0J)lLTdAiG-;hNk9pKBr>*TVF)IJf#qE zkcjX6*guq%H}0mRX?MJef_OM$<~N$zwxzTEJi4eDe_LbW&ri#}lB=oof|jhjOu;t7 z##5o~+bQm$MT~aPj*e^J4+EA}?C~vhNJs4f^09Kd%mhAk;|tRb_+XxeoGjW|v*6B# zHl9HhXn_>2X=di)jU@ZPU7j^ZeTe;c)bUW}FioHR zw1Q`^f1Aw*8ak-mg8z4eWh$vmIQ*;JcwfBk1}F2C`m{&s5%SnKx0DC5l!QW;PV z%oMt1#xdi6w1nwXs05mYbO}bI!s71}J6}bVP%Kj@|HPUfl=~#D3&vS}seQ-ge?W|? z0vyt{Cxo?EVT~z5O&cRHRk%tD0#Yq!(xEa@n)8Wj%b$22m_}LW%ysrj!r##TT$&0D zf0K_>&FjhJ=Q-2fyrLOX+*L^I6y(?>R>OpK8ljIiHM#~l5)l96CD@= zYn+zDYQ;%LU8(cU0-Y0!F5w`+f6ElwP(%v|LlZ|Gh>o^Lx%0Ks@ws4?2R>@(&}G^{ zg-Sct1eH}QO=3Z0ASf*wRa80xTZH60LJa7BI$}>WI2{@mL$kBD;Z@jHswowq^_s*R zsU=UzU6MF-UTy2RvK_Vpxu9NrZo7RAYzRj6xQe=lM<1=KUHs^ys~VR*fBNVK}cye3h@kx2y_fu-+?Pk#`!OoaC!*m{o3#E*?`b*|(^=qShKyJhpgvNx}R@jkOJp z*6>k9C1twd)Cgy5ovXJEd$Ft0G@R7wy7*!rnl@xW)Bw;U@sTQh%9GerP@8{Tj_&^8 zvOIRU)Uj53sv|#%Tx^&&f7}g0pCL#aI&eLF8x|)}Th(_q9!{u@66^poKlGrhXe=)y zGd(8XWd;FYBcsCwm}aq9r6n8P+{qnV(s|->JBCB{4~?>N%*+3Ug|DN$RC11G)&Pf2 z^$}!esPMx0`fAXTpxtUu6sU?z?+l5*b_^L%mb(g*)2PA;uF%t{fBQKaJUBfB^_xB$ zn!v?q7r^A8&(n9dovp@CzIhqroD2+W-O+RgPVuJ6ERuLwHnTs7rP_7GF>%Wb#Oi11 z5QV_X%S{jFn5{spnfFAWn@R1XihA)!W5yZR_El}DFJdv(WWf!Gy7wK8CewOGLIyFG zg-}4FV_r9oC1ljje=SyYWpsGi(Bs#?mOE5Qgi49st!d_%HMpFRhvm)iF(-bo!Q4W$ zBs0owKG8zwB1p&S%@wK$EG_vhR5+O}I6>G@)8mLQ6+};?*7b^}W_u2x)j$&0mDc-D*t13K^$EpOkD0(8-6*A~1zuufiSmT-5mgsrC zfUgFqS5&w{+G(VlHr;z)=xja}JhG40I_|o2^iZ|V?NWt3^Uda60>`e|3hnZRC9fMH_V=AwP!_v`8?#5W+K0opY%=#%VT25CTu-6<+-mUhj;vdS=qu52Jxt?eCf{l`!lKpp z+ufy8xkN2Y{{M)tI1Qb0u)TMM(&q6jD-)u+Ii z<`UzmLKwLSEJn*kw@0Px_IRd7$)YeXin)D=>hx*EDnq9a<5q%t;A^9irL-uDVXn@Q z2SQrUe?&R__uOsd^U{#M+)HA^#PxMlF}m@b5To6xiNwd%Qf8}#bJLA1EAea}W@&UU zwJ)^oaZLO4J))|(hD#ddHUd;teOK3=j8D7(28Ejci7gLCnm+XUL$kr0hAZY!Jbf}I zN=k79L1$4S%hnVj-K%r$D7oitS2A4yj4CNFf6E+>1)awZbX+^sx$RlIl4~}?;p7#P z-oG$SZ<_Pj42$T`8L1Scq0ew&bo|CexTI3MWoFpfH2 zibkWO?;f$Po3f^rhmPc+Czcy4c*Vg?e{@DI3r$UVu8U4yVo`LiN;&Z;O4bI1DuuS7 zkO;9 zxcwh<37}#G5vpJ^QU$wKA==+_9uA~#)+fP@l2n3TY`7!Sij(=E2=%vnc@a%vI(&!Z zlM*XWy$hnu811gpA{6t6e!$K1f1WLBMt>qV7VE+1oAk4E-BnQB>;o?F4=ogTEACL- zirccdTXA=HifwUQ++7xz#ogWADN-m7#a+tbKXY!*#o3F@Y;KZCGD+Tf^LrjI+cbNc zjDVwu%lSDe+Q*qomjU_VWD0|v&)WB!S(dF_Reu!?plRK)h3Ha$w4=4EzN;3^FV*1j z|N46J(F$TH@2Vs4j{W7yNxz7*^6Sv_=ESbg^X5OXbi0mDibymT>!vIJpPs0U=}M^H zICah%I-ohhic{;t7zH9#+foWX3C=!;EG+jxk3do#L)|qMh+&1lU-Y<%*KM&@2U(NfhWV1QopXlSg!pO-_4<8ZYcge1?hF}x=7Ncz&;R_%O0t0rys zvD|l1`Yq5eSR!u&wCRk91jO&;S=60v^--M8IrB4>NAsa2wV*Ghuw1b~t-oxk zY+z2~9^8nv9k{s-j|W>Ndy>WbJ{#A#BYf7zuhzH8qW{H;*IJdxx^G#XFnwf`P@>Gy zvFPDPzbsC!96Uh1F;s{_-D#D@0gBZ|1Nj^hJKpc&4NZzQ{PRNH|8%$+r0+}Ev8XX( zb>guaCaXQ+C5^HEJ{UnNnmTd+1quY=xv*)yJVEZ64yI}F`S{dGr%@reCZ!w84=(F3 z6kSbNCuF&PPxttXM+bf(?-)A5FaMIv-)ablFMgClv)clm9;)!OWmgzmA9TEIKvRNe z={s>I%nh zmg{*IVe7+Fs`g6voROZU>e=23RVPB1-{X{J^kh;~>Wj5Q%^$kv7~Rg%JwLA0@oyZu zM&wu8CKkO7SJ7Lx+V^yd+89HZApRv#CF2d-+u@yDp5`@OqvdS`;oZX0sW?%I(ix9i z-l@{*kQ`@}uE-FDZxw||j>3=eUsnz<_SoqGK_HQccY=Xqm>uOLej zakit&FYfv5htT{Pm^q**m37^?f2e?os+68q$T!y#!Iq-_r-JB%^~|CbNcT4Hw%+@{ zMA|Fo&ATf%kNpt1Y>lrg$}?;cU1~kwnrwA~)BYSO=fXC*87sARa^$}ZKGsFLXgLuV z*^sg{UCK~gwVYjqo{WtD<>%EO}c6ZT58dY_urNP>j^09aWN$b`9Yd-kp*!MW= zp?mh{w_oQk_&M>m(ZGrBE1zHO;RLv~ywWCy#(Bq8`Q0V`er2e-@^#>~BmHeSrr-s9 zwtKzKClmFL2N9Tb

yUH(TGML|rpetS0%`VJj?r0%v-X8~Rnvm+SiINw1s+L)>(v zX>VuFjpeD0N1MM66s5BZ>M$izjaAzQSu&xb3z@n%ltQ~3X*ra4ZO9=i3(p>WR^My0MdG|k3?qqkl zJbJBDhX8`t;X3BG@gV?*_@qh?^K0$DJY3L#D3whj=0mNKwlRy?Tg6+` zANlCZ?BAn>iLiERW{Q$#T~2=0HFX8ug(bb2o2_Lf?bjmP6+iwJcduVH#qjV%dX;J~ zFA^+k8AlgGKV}N~VxRD)Dr?Hn7B#qkS{TQ#NK+nU6wKcSyL8_8x)eWZKVP8HoXs&kg}@9No7(rD+#(@W7hmj_tJY3#?Oq{y`F z8ZjX%g6!?BFIT2(8X(pp%hJr}yd2IzDGwHTuGh*+t?>y!e`l1`0%e@9e}2tKrel2# zbhyWs$Y)XRM;r4GDBEwRs+!xWn-@D+t$AjEAK-e?C+{LKDw9~>wkgr@ST1|dsCm+; zlF1P*AmymW!nHkd3{gkx{`f1^Tw)}gg^~g$l@z3dBXw3~={KKpu zE`FR7XTzM(_nOi;u@yN>7-;e)HBBv{EmXxZYSBg+**%ez| zB4Wg28=mG;fE-$yOAk5zQWQA@B2lC#M>4y4JfSho4*4)SyA8}%v}kx&0@7_YCIO`NYvbw$ z9fQP~6o}HdL}8yjJS+=qBOn6(oHOB!jfH)DvZ3-Mr%S6XiHU$taqi0HPl2w-%fHR% zM60qiM=K71r%>E0;^+3-`od*xGuomsP^D4_$HMDQebqO4RIq~DUCZvmAVrefx1}iM zL--sMH7N($&$2U^jJilk#HXkJP3c<`9Cez!j}^{U`OD*zxLR>EM?%aj@-)ho4}8nw zUNXkB^42W(m}LNFLA@e7-dmQ9Tt?>8-cXvfOloWc^ZoAUeG$|v3&LhCeJJ4(NG|Vh z`1$buoL91Pa#eHrK;felI3(FG!C206p1KxE#3~;*;-4kw*bkWkLQEDbI~gpHrD^I_ zt!YAa@EplFwlR~cSJLie zKK1|q81Mf}yg}8h~hGS-nim7?W7%b!o&G3`1{N znWsUlSGAIMI!TK?_W`w1qRlF>p7}(TuT-Kc>Dw*xcwxJ_B7sdEa>?=wUe+QX0GDgU zVDk4102Cbk2FZQQbnYQ6bX(ibwk)2;j7->Ex{RpFO-HoX%(5w?udy%y`SVWHmNYgx zpMK1%CY)IAmdIwA;TGXHIDWQ+LVU8VUy#tnefU=ZIL7P4KiU5u=3QfOW;6svSS^KX2x3WImy;tu4a_`-Bbz5fqrN=X0 z0v8Ylw&*_obJ`2t;$rd(!N7wz!(^QG;q%+LjHt2R&Lm&hq5fUl*1ODI;Yrxfi6!qO z!o7q14dT-&sqdaw4PL0^ms!n7K&6|^hd~9n($XSp=VeiG+bc_ zk7`>}#r{O+K}RZjuvUbd;!L7cBMP42DFj5^@vgm=tmTs;<3c-go5rX0bofNCq4i9% z!%grE$d#@vd9wAdo$hYKbMAYe-tzdV?eb;EK=yVkdcB+y`7Y=`+Q9s?C>LbY%eu> zGM+z5Xqnu{+Pp`)$O|e_b+tD{)i?F|WM?;NC^0EpjS}17=&}r#y9qzRV)ZzMYA7_` zn~}4s>NhqCktP)ncb)QbnJtGJ8fZq{wlb|(G($DUBC0JtstSubJ96PE;%$_ENX2SB zIdOhyI6`--q2Z8(xHDb=I#$ERY~t4 zugpFkr8Nco$K|Ok&4M=oJOA|)k52|6UVI@~)TNC*sN|U&>)j9wrxX7m4Ri}OQH~Z@ zC-@;pAQ_6IBbopdLDU}O{_>I zx5DX*>FEosnH8p28i|5#*%qy)P;s)~Z6&TpSu93W0_=_3?^Fd>UHm<4JVH5ao0e6y z5|t;0iLv(ct_i!LM*6ycK-4mZm2C#Rb}G2qi#B0d^-46)Txt&c%7iV3fES#3`F7$V zu6(32EIExk*)0leSVoP&C{`0lmSfd5uHq{l7LE)TN`hjRc>_u0u`(mJS#*T!UpWPP zfCC=&+no%vaAn7!BTj<3WGt>OIuY_ODf`+1PPYGx6;lY4~o;4-u6fP6IGgpoJ={BH9G{)a+*iU>|Z7`V1wU+sJ_648pZqQ(lF9NX+%6hI#z&8(PBkNo|Wp&nhw?< zsJB$2yV4*6<=hF!JstMPMkK0AjGN&re_T#8T}5TRobLLNymE zWvru0@J3Z`YtCVY0^FeWPn=C!q;Xk`>3_xT$Xtg;l!-+lW>M@^M4(apoHL!R)*jM# zV;+7jYl{P!PI_RG%M^4=om0zqQ6|EEGUk(vY(G{(T}U)_JiacYG2kF~hg_;ph66Mx zLZRsx(W_#x;ie+HTHriW5vE-@Mp#^~XEW1QGWYAntQVQ(df&Z~rkxG89h`u``%hDw zy38hz^i9X30bgzyIWmvR?4qm(iMgSL`K$iwWdBph%?OeO@BRdMOmXu3TG568 zz*k1-tKZaUit`_m@o-G~wEq{yr&z5M^LCa+_HMeu4K~bM>l_c0A=_@D>0Jf|5mv%jilQREA1MF7@ROz+joADJo zMkheIBfumshFGLDb@e_X_#er$T#LI(s_M3Y<_IitwU|*YxrJLrK>`_)Il3@wfA>^P z{9KHua>9J4M8%7G^{vwy=ektAy`Q zS;}RN6O%A}#ngBk)_u&91xDP=%j7_hu7t0}@-(dR7wPQBT2tW_PXy8FL?2D*?)C`U zN2tU47}Ir2K9dcI5pY16QpJUC=CAGedINrr{i7#zIWWct>Ic$CBsU8k@-5E!@gqPi>8w(t}|K zKK`@*Ia{c*y~?kT^HT2obRAUIJ|NMpEXqHx>UP7Qv%>y7Q6@%5EPneRKNAv+xeO5l zPB5WR^~97LEuQiZ@S-^9Sg5n7<`5^i9pNBdB4;duH@LVNhO~*9$ODS5?7^ziV8U4ys71wT9hg>CcypRN4D>{f2uPg@0XIW%d z`BIKW97jq^EvQnIAh51D$6fZsC#zQEZjaNZN(&hKzJjmSK)Eq!O|(BOi&Zq(nh`0Q z;6cG8qBY!#@b}ofaG#Z)c>X9IURN$E$%Rzb+#!^B?25C%Obd{fNs%OhC!2f~3B6uW zP-rJiqWKg2H|i43tsImfG_1)hP^DocNEiM3r#!-WSjcF(a(eT4dY&(a%`i zjO`f9Tm+ecyQE`}Q7OGkdNfPi!xq(44$S$Rxdy*gg?PopY%p>*-0W!~6Mc+& z64kLi6=Q5TnZAGI#gA+=n+Z_VZk!*_BPsRM2_1+KZDV0+d!M25({X1ExtvYL$~Nf^ zZ?H*!%8;5;rx}KW%GJhY&k0sF^1F8+r#*!a(77$>HXOf-nu2Xfiep7OtN@ zk$%Ya<~$MUlGgdc;8N;|5WN?&+=Bvl%BX;76)yl?2xo zo%&|P4^S`X)D#(i%w$W4=k*$%&t5en4^CTKnleVMpf&Yl{(i_5U9{=9N!As6W+zshH#JJr#KcpP~uKpFGGMNN5x6Bk#8(tbe z0-+yTQ5P%GAv%3$u@q`H{NJS@N4oHvDfks)Rv)uk5<6c2>cJx|J|sqFwy2WR7R37J5MRrLi}qNBE*{)0 z^BpIOZd>L%Nf4q#Vl68?+B&U?KN4}HVm}w9^{faoiNu`3pllH)w>7<464-V2k$G)( zgHoJTiLwoc;f`2u6FJ#2#^D@Zu5Q@V3$|F(EL<>9t-Nj_N9=fEbzdnz+2+g>M6Z&m zutAL`l|M{3Qk(E-FH@*b?cyX;C`9dIBva@|ebp8Z_yZn%qm29v9)zQe9448YnNW>F zdhz+U4=!4*aZsGe7{60h5PJxLzEjx}dr*C+Vj}k7{9gD`$E?ql_UNV8B#xq|3=YnKkQo&^U%Ey`<4uX$m0S7@ay=1X$ znz??hc|b7fx@`NGOr{x`cI-^1ZJBoBOxx@PcNT8Vzyx<;?xn}e?M)DtWNBpN0kfR9 zT@Tbfp|rk;wV}SVvAG>RHt!BrRK%jr*hb6I(^Gs|t@9{b6Vg>g%GwWT?d|9fb+z%) zZUs=7@r`G0O+9l<&>Kb(m|9zUZ`QXfbvLjA=I1mez{j*l-Al5D$ zxIHp3QN=4^v@D##9JHuDX|gDe0dqYV1)l~NyF;RaJ;rAHdMvRgvSm&lsAE|QW&6yPj&ixuh{9xtu zL|u}8VRM2*PJ~_ZevU{5AMuUh*gpCna2LlEbi*z|`vJTUqAzzsEx{gpdQ6-eYScCC^vjUr$NHh8kY&*#K0l`nfwnJ7# zOObUDq^0N=LY@e?4;cPB4<%{ z6~TtM${aqj*;eiv8=_&e6T36u*vMvci4iH=&jmQ9oF9-K6{1eXlQL_=5j;n9I^7gaQ_!z2C!n{s;m(;-V7Fo3$DW28+-ia6NZgo8BT^QGGylJ8(Bm_rTG_ zt`)eO3Ne=YR+9r1Hn%be02&eCfx9WSIG;;aM~?J%KSP|NKQKZXnmYR-nv7@ zkN_qn_UDY&zN5okd2j$_|F*(Wnkg>CC{hO;z>;eQx+S?{1lC0Na6DI!W&)19b{T;^ z1bG&>pD4E_j^a#FA)=AtL~lA@&29&0UMG>u@P3cVXb+p9Sl}9d&-2e zME6<}CY-UVt=Z!Y609bRisx2~2LF;(F*0~FRFt3ifnDY^j3GV~0HFV#C(wUi_5-@p z6W)Q+8cMN=De}y@RX$=RWCD`rjMsdL3n*QMAO)_J5EEAn$j-GH7&w~8Ma&q!A#a^L zY00g-%oUZaO(ZoIx_~S-!2&kjVup{gn)!^Z=2Jq)S`VX7FNk+jfP7J0Se<8vfmjZ9mtg!nuyb?lWuMfdnRMJ8+ zM`Zkgb9x^PJjp^B!gy@~RNu$=fa;MANSn+kM2cxrA4nY!Y&q%xwj7V+Y&QaR_Z`9T z?@~%&jKcyO_Nc*RiNA=ZQmu%l5{xWvYhOt|*t$P&0Tq9WYMq}TM0!sSc(YeSB+Qib z0n`;zxqPx-X&@~VqFg@VlRoLQg8KmNvEz`DQ>6hB9$(^sZXW_(NbBYMvCi4Ta!2~Afi&K@h16B#Sh4G33_ zIeSMcpx*}oo31&498^;?su-AIsy^rShGjZq&#%YgE{>Y}CgWkvroTYH zB+UvuF#=C5_BuXpGI^$r;vW^{z>GIXiL5ba1?XG2e55`|d*yXyG;&T_DHBo`U0xN9yZC_? zRy%{JzT{EjD;;D48-)nPAi<5uAf<)KAZfxD*&wY8bgD48ZL{Je%YBi%=}Srwt4A>7 zIA~D4HMMe-Dd%^FwLNs}=&#d3>!gpqnHV0je0qvUy=O1n*4NIm@eDj_uWq$1*dMBV z9{Q1ChR44@d>22}aqqlrmet9}mr3xMOtb=z&ny!{vCWhGdZj0GA^i4L1Z%7Ql!`TQ z?|bqSXkX1EQu5cZ=DoH;B#GwCLnFv(yXETSv%~m7)9F-}hEvsm)Y<*Q@{L_qjpLAF z?bcG-nNzgy)zFpRiY{w+)I~COXbv2~NHf{y@6D#-zn8%61rgy%L6SIfjUlPHO#V+T zYjb$XjIFI$MxFLLCR^eewuc3$x+s4?Eu+;DfSNuX2)9W?D?j=B?u!3vb_+cjTjjV7 zN&Ymo(;vMoZ`H-u(nhdeqb>g@bs56-%C_jvWEO79*U(ltP<||~kSspSd=H;eo<_imB-6;Y`!Whdf`0Dw z7v#TtkbD5w(y6Vy{*a-U=MhBP0BhLE(l04-> zJKhaF4CGs6>vKPQ2?8%~Z6mszRX*v3MOe~;+Eg1{H%my{@YL; zl$?w``Z~P2jJINx+dG(p^|A^C11o^yu0b2|`%o$L3dCc{9a!Fy zQkk`4C~?2sRKs&2fZ)>svDsce@T_y1m|eoKl#-hAjpe%#EpsfVYRh6Xu z$H{~id|OgFV5qgk@wi6MGCArkEaX;C=U(tzxTJ(L8dv=xyNMMAL* zX|q|#V_nkxpU_ulmPw@?Q;$K7F4nw6@&s-SHG^b|TO86EUpG?JU#i9{75ax-hXM`r zqK+Fs-x13N1nw)#yl#%uKDxOA{j1C8Ohlj7YV(?Tewm2g!i2Ov?}NA|k$gC}2ktK( zWnH|hx=l>tDj2;Hx3MG@ZA)cVoaSX`!bmaH@ne?l1)W2{sgB4hM6=2o{1qmdUeyD| zFQZGZC!YGmf4bbm)+JS$Uc!;8OLx2thgWriT7aCV_)TX*7$XEW$;O*K0hnu-gT{#m zZ_F-Zv0ekv)Jl>BYfwrDqJL}^Jh_}Swm_%XN?#!rw}8IhEsbe-n6<-3+2G1)5qzDy z1VTJJJDRCvS3=Yk-hZ+88V=2~)Lf;{WPY*%z+Lp*=8`F`EUQ@&UdFMa8^`rEpXY3^ zp{M23w7y^53mzY!Jd@HF0aS1HTpn>3SYJ>TX1~tuc>Cn>38aG79yr?ZFX&+(jqXO1 zejO@owCeZ7f6?Z!Wk>KU({M=Rz~3cr|CmfV;c;#GG3bY;$^z}iTAWaSZGvw& z8t8WyItkRH&g5N?A_Atu+B$Dd+v^|V7<|@(llLXTZi`6|lCSZ}7vkxz7?N67J3FBW ztct(AlxloTrl2hg(BI;N2El0YA3K24$`#l8Bu>|cBxA&_34$&wWtiTHduXRA+Wbsk z!j&Qag>Y>u?n*O3!`Ok)-q?&%J=m0fF_uF{x!eCoSBnb{p=y$9shDQDKY0ePw9^|p zkeRBtzxrtvg|20Z&Fp%>tr5mZNDPnTw`~*ed0%HB5TuEt)Xu|6e(R{eS^tA2ow{H@ zaqZyyjmgnq6>{C2qfGxSqUPMbQpv$`A0}^OmGIGKQ;Ej~YZ<1k==WRG3oFE2_f$FrjI@9-J6ee(kmLnFt`y+5>QchS~_Jic!Y zS$!Q(qk+vOq_reBBJWwgvknO;cLV+gLh^aP7VG!vhPi}FeY@Bng9)*M4sx_RJG3)0 z_5866Q+!FLG7&g+Qe;mGkYXIWM{^xg%5$sCz~jv=k%> z{V5Xa7u+#~wEdp!6@lZWXE7#r{no~mT!BJmD7SL*k|Xeko9*cHK?Srwi5c@nQmAW% zGaqurk-3*EHExMD%Bqi-|5pCe%bL!#dubTS!svz@vdI-P0TeDF3x`+g7mIj1)b98NCY5jKRDn?M>Jf?O$1}5j^ zS@N{753cMJ(E1q>o5-S05`SSX3`J^GOl&d~w7&nzGV?oku37lyn3W%0m9)+0Wf^8N zES>SFjmTfO?%}?P#F~t|#PB~G(yqPxrp?80%xxP3e=QIO^a2+U zBLM!?b-dZ?rUqJBY~z6UjfyG^EBb)_GkiSkWZS=2#=!{8W3j`E0Y1AdW#M3$7*>lb zN8uPXA28-7D4ZnGj>~5 zE=-&ygidK~OgA6ci4jSpJ%b+nU<5@FtV2xr?3l;&ce{L+a=}W0_`nnM*`L)?YPp7; zT1nZcpUX0bn|=MIGhPMuL;Sj0W9!8U2KDql=84>9NXy*zO6bHb?p6yjN?|T4ELiWq zO4f)Wp?ipZ{qLXMjgR`x?9Yqmx-4hGrv7d2T>H?dqLO*k(5Ya8h418v2-t8?P{;I7 z-6D&HN@s)Dv*>Hpc%2DSuFN33wzbx#m_mXg?!p~!;-yGz$8CX)4R(k;0$7Rm~%Kt_Eyy^3bl=~}?V!U_GkETq9m}%8h<|W26?4jVT z8~MF#t~+5HEcLg0tNxwNG;hmc1QRI!_B;JYo*)3-@TRZ2rAEX`z%0i1DrA|DB`ub( zMg;rY&0K0YsdGb57ak^Y?oB?wsMS7G%d)QGexjbZ5-Hhp_54GQMg#mS=sB$Z81E4l zZ*Zu6ZKTPXcj}An)jGmG6dWAx!+$V-C4ske;D89%;4?dFfABpKJN2ideB?<5|INX& zc1_mA+JK$0kteG3Qe^X&&klCI(rI^h8EiXm6FW)$)btrx9YF*V+R=L2g9h#!Ay9)o zMJNrRu)rw63{arSRRrvjf6>m< zQjG0)=S$vN&IIvic@ZB99J9#>E`0sx@TDM zf1c_yzL#5tRJz$uWFqAM>|5_vRZ!$nYgtH$v$V6|q)+b*E`eioOH?=$8X&XWC*l$q zG?SfR=|Nagr){BGpMN~JD(fDqS31`JC815JH0}md8>f>q7Ey#pi4fA>8i?cJ^F;7T z>F0}nHM6l1>mrhqvS~ye?u|)7pSnZTvidFF2UArr8ci=KK4eWR4`FuLnWI|JsXFOh zyp%bBPcPRwKT#*7{&nvV)&|PgH$JnXat)Sa#!y>Bx-9|2QW3h3kjD=CqJHfy!0^x0 zYKT=gksctE^gvyu3~_YyBZ7YZ@>OkY&ljss#P74VaS(kK1{qVfjBfIPABS3^L_CrC zksG17_|GO$4Xb)7&L)}DVuz^}N5!0*2$R@ctGNDan|<(<($`1va0!qJopVY;V4|3f zWvjm#eX9wjBhZ9bI4L#-?U@xf#2E!Ocd-88$b-e|zPE@$ccIfZ+UwWTvV*VgJztZs z7n+CGXEj}FkMx}yZLQzDJ&`uRsHlG>h{#d_Mgi)H$BA>gim6HxRN$Y9cd6QxpBVII+c7A_inb7f2UJMB(Bwr_=Q)gwyA74$5RHAXfSg?OR~1I-{+rFJrJdF`d^rE;Br zm*kZ=yWH#o1E`u=kthvi!2yJ_%O0z| zTet67?vi7)mhN|x!4gK7M=nHJtj5-n9sl#E5be}$}T=E=_w#Tg> z57Ru1Y}e>V zuf$6j2HI$e6#2}PG1AfC<`llsxMIw1QAq5jnxgEb`M&C9O`70KNW+2072vq*xw7SR1k-J~_YS8#iioT2W!Qz9x#t=LY<7Q{)IczFxb&7x43OU`%x z0Clt#M#Lazwz?5`C+8!}XMrWBR+go&Ea=3nd}$+VbW@z* z6I$_lzQVDBFDst!<6l*Qr+V*$)_-}Mp~R?H4YaM9Wxtqbml62J5$LBEckU?YjyB+O zdZitK>K0BE07{P~_&udeZFXK8oR-5>U+@PzhH(fnG$V3!#Q!;Y+WBEiD3~FVl}AA= z#WMU%a9|?cQmJUwPixmUSfP}#3`N2oU26q7n}J)+*4{!WiN1|&I-eo-oGu;OSnst? z{oocp;<#0sx4#H|c8|y-`BuUf`xBSJ3_>S5@ zDncl=<4u}FaJg;w9`u?#xLA1c9~KPnK_9{TqFYA02ne-+`}V&ob#btY?&%4HAs4B$ zMXQBW*Xw0mTn2GPZAPB+r`q4plP^_w)Tw)o{Bj2o@l^Qih;8i*SgB_QU9pz1RfIMd zzux|X!2+}0ZLxT?uD%fqK$39m|RTz$D3O1uN^j;YHR)nZLwrMXVgZ=k>LIK^~jVFjit;P_?NWPWiD#*q2Y(@nz7SPlCbS;K#AfH%~V_C4I zB!?#AVk=4}oW1oUgP*0i0Os(Z9(Ie++TX?D6ot<|4?`XV&hs`u*Mo`%{>I`}@Lo}0 zf)Pg%u`kJcbrkFzd)YnDSipTi<+@$>apBR@MR?X&mE0$xS>;6!K!w zb{$m!)@bJ!Mok>q(D8bGGke_O0geXSzfC!nt7zY1!p8cC)7NzpXXLPBs{-+%o!|RJ z`VUg3^qN)nBpLDN7Xo6@7Q3a-SEJ2GmDmpHNTKb#1QS z!@M=3Xjs-6dr4Ol*9~gO7+aV<4if^mZYqfsjj}f?pSu&y$=c<4$ePLE-$|XtlKD4E z(LuypZdsI7cj@==t?&4{X-tVRNAiMdiCYaSqT#EAphoYNfHuA1N`cEZJBJ;lLlEr4 zO^O)=Z9!xrl!!d8Tp-MVyz#@BtMM&r^+qguONJwA3eKsN3$Zp?t8Hn$zQ=~>*wAF% zF=4`2RjYm&bBzyU-u1|tA}pS9`!UT%5;Ec|=BED0Y_#lD+VrytB63b^LMcnz2Vj>k zd$uW!5j0SW$F|&(r=3MDlAEmn9oU5^)!ih+mkrNq-Y6%(=5H|DsH#}I1AQhdy=s6+ z`4Sxm=C#iPK+`CV1w>@TubujzVL91-`~Qc`-y(|krG-9iNb8X2+FhhQ<`(>8h?UzXTS`19Btb9By-znpxfN@G)7ml^9_v@|_o^b}eXjPA zP~Z&Me+tWy69t%4FN8E0x!nKwcFlPVplvJsZ9|Sc$PK;9{D$s9ak2cvQzb{F*tJYy zadOs{&y^u%+0}%39e$zz>=Q!@GoakvGL(jDB`DcgP&!t!^xqihj^}vGPMhP0Qp9APV?gB6_iE{Hi6_|Yc}<=1S%ErqpWW?V(uTc@zpg|u}ThVWZ%lB!dVxT znC#cdlqjm2CTZ|N0K}k;$)L#%p$q(brvk)A(VS*_;xD)sJV*43a43>|RI=s&S*#Wr z^5SeVQ{uC%)NFOvBR~-9`+6TyA3`+=rDkhTC|8$o>0uRrq%>0%^Zf$a(_GvXi!y#3XI*(ABXX+c0iW3rW zcF^RRpQcAeSQqu!wS(xPa6NX)KxEEx^r4_Sf7NNWzu4Wdl*LIS{Z%O;pAok-8|)66 zkG*$B&Fq;kS`y+9g*|&S?}03;<$$B|W_3FTWU1|L55yUcuv(k4?ekQs3Nhj|=oxM~BDz?k0*b-rZ_)n|5jhonK=b+n z`JV%&Ct~%Rdf$JZGK))Rdg_X(is6PI+Yp0p;E4gU7q|?iv7t%&Q!`Fd@+$9rvQ&h> zC;8bCSb=RY0-rqEyZ4)N_FMl=IfyAKiOp!CDO&A-zHV_BJmJKV4xC|_&UxYlDs(y{ znw~}p04Qq_-R6V&Ex%$iACS(K(x|=3sPO$OQz&?&6P1;8*csQLzkv$QH9tu4apq>o zj8P23&YjWgPIMN>YZOHvE;6rkviDXIUF&Ttu*fkLmY4p+*U0VJ zdoWo*j4`gKMveuN*yek;jQH5_5Egzmjc+mfmm#%%B?8!8X1_Tj>)Be4F|X5Wvh$p- zSKfY+%^6X)`y-IHCRoaxX*E|1h2__+AB*FH>8ncKzJ0Wr+?|#2Bh;MNO+~4>^S1kJ z8f5f(Wn~-aDpT9~-2bqnxC_VRH*(ohaxYUgBT?8WEkS& z)`olAgmboV^PMVd#m3!=2%Oe){hNx9%_p9D8h^WtPM=~{laKz>ZHEC&ueCBfFYBnC%^${X zO#TxWTS}l`*!<=jwP=$)O{C$mMs0d;Z(>ba~%AG&j=8kTv{=5T}vqq#GH}$ zS66g$-rBIj=;q*W`u%ZRUYR#@+ShS@r1-LvB?Bu?vNl?Pe;HncX)r&U zQ})2+qAZbt{8>QYbUt9Y8YQ`yJtvjVWIMBKASW07|)h2|=3i7|5t0s(ml3)Dt(5`;aUHBFxi`MWN!ztqqO7{Z|GOtc6WYR6)0Iz)7l zDGh{iOZ`#Bi!v{#9xlTB^wMa4^2L^^U!|H22Cfi)?bx<@fIekeSQ2*+gp*Hk>du&z zYFjzIFIS46kBMRJw}WVSM6Cchbj8>xyXx;7TEin9YfN-U1odvScrD5Zh{NU_FThF{ zE z6$0Gdnbt88D)}Fa-`1r-rIxqO;}=McHoO&fjIClXXUhdL9@Voj5eJ4k^ z7S#ZS4>++Skm9zvOZ5Hu{`n@}KNEG>5%0MIrc3zuxxVu$4{6`I4?}xB{jR}o(HU>? z!bCtLoBXm^9a{cU9Pj5~Q+7vocfa?@gjNPoMCN)fy@5(XFNgAdF%BOxEYn-p1h(6oIABQZ3 zYA5NZj`v_X{l`7o!l|cIf7Zg@V0%pbE#kU-6h4Mcy0;+|8u?=5t$>{S~MAtv_4liEmMj~ZdEq&ol8>Vys8*(#``Z0|-(!Xh{6SmKPz_*a zA-445t=_@iN0x`~rr~|XcifLkRSiqU9Gdv*n=kP@F$|L@tBvi)(7A<;4+1YWBRC*X22i+H$#+5*M%DHAJo6*j8bw zwfD`UCzMuCb{_0K;$Pv374uLN9y$z^)=umHSrhcAy@8a= znhB#B?%x#a77}%D5w_%n#CEr^leN7w(v`YY$@EQW$w>M0Q}PNbMQJD8+wC4w6YC-` z9wA7VDgxwK!_RT*4JqNf(!JWDo!P)!NVb0xvPHheyG#Bsj(gfR-H&IQGkAdSJ=5_v zzElSYASOg#XYcp&*M`vhbK{2wY%}a zh4B46KcD0Sw~UH{trWr`M}47WyPk*XTl`@NldGworcW}-XO~>dZJM~>NN0~|)G5un z&_tRD8a6!D+c8miD1SL*81oKrGu+Y*FG4XFZ+7k)TWena7X5LjR$ilcj?B-=9PLDh zHR;v2Y536GZjY=;-@}{>IYSs&GOwv9Q57)|3p_ ziR8UNQ?pRsblu?qhEn;QO6Y%nWY{a*u8xg1TYRVv%qh%ym%Jfo{VH?i(VKZ4hU8*y zkM)8s9J>b@TYZ;Jm}u(;#Rk}P--vUmSXzGf2*!SyNqym(0dp;n#`*XDO*{Kc?vhDI z90>UQX+B2D%h@4$wZ@SC;(4%cd&v-Sv@DYQF1d>I zN@Cj1JiTN-rTad~{w4+YvbUmy_g=&HvT-2Ief^ID&mJ3)Zb#|sjj7*SvvATqOom=e zjibD-SG0+HBzj+D1jo;Ww0f0QN?&;7Cn<9^vtEJ?3*EHiO4q$C%9tV2(qBYpSl?_} z5yh8p9bG9m>r>6;vwm@=1i^Yq)8D@$N_T0(pxjGe^7X=%B}wOi)wm^=CpIoSP_jm$ zm7iK-IaVB24*R$J1O^8N2I2>%fTfH3O;@5qi~MrGu#)&~QXHB^glk8M$K3L;b6Sb> zURr9Y+4J{S8&@;vD*r_gQMAG_R66A&axI7BGspIkkxQ*t{JE{L?+8{F7H5TPo5B8b z3A@fN~{3XW<+7CBbUJA38>eVa2L#-E$kdbcNacx|Wa*>%P%S(P`s5H?#RlEszS z$2cYnZto;nt~@!=>0G}7L+YA$@rDe-)rnqgx=j-UhL?!CRj0qMJ@WlactQSZ4m+K7}q>sde66D z7k;qIEmHiR%;m`>H@oM36NfTD$wG9yWOIT!wZTA#@{+T6LDy{f+b0_3BYSsJ6tQ!P zTvBG!6&xiNqlv{@(X~3TMad8x`M3rFxGDgewG-OQ|M7 z;WP?XH#a#(yQ>bA?~Y{9Kj0mpT>>>cOe1@GtM)GxG%s<+N^*FYl*H8G(_h#tKrq}k)OVRl=|9q3 zVoC8!otB-{T$17?Bsu(mH8@$nNs_X4|I$<9kiF;OWw}>J?`Lr+UUrh=<=CcB=%g7d zC1a%>QeJrx5|*~svk;8=c)l!+NO(Cjxi$Ap66V_5X3t;u!Wy~CLRVMzm_LuU@I3C6 z>GJ!0v+g06d4%hL{8l-ltqcPzVDz0{r11M(wf^mG#-IDI#nrM?7b=cQ+D+?=*{5DU z7;bpfT{W4UtEz}sukyK3vxJIdviS`QkD}6oMqi#gUq?2}-p{~9_PMXaHR=`ynVrlm zt=blwM1qqQ-`6iD6l$TzUrc4L8xeiAbzto>P-}H5s95^e)UCb$3{Ky~e0}U{jecA{5p?^X#&R(|nuaa^3c}`?M)}e8a+8RMot%v%y4h z9A85~M|08Xb{GZmF+(-DAEPYeQ=TsvR_s1@Db2zl-seGQ(`cZ2KoK!~w>JIe zSGV>yo;Q1rp6&DehjDQTEo#$vsUf${czGdAJsN1@GD*xLdU*M`{EUs;*)cv1){6IK z-pW3MwKHVu-bf(cNaKSQ=#gby*B&pCj2ZYkcHV%6&cG6r`U0NuD}Vd6^qiave7ONj z(mf8ZTvj{0lNv=D5tB{*dPI`-l`QA7a$I}Kt)4hiRa|<8r||g`BB{hGI_*RH|N`iLW+x^j_; zO3t}gT&w(5ln#jz(HWsnA15XC=?NT5udg0A)*y6$cxapE86_ywan=fmF8El|4QW3z z#Jw8W)%SH;sVync(+Xkm!Dv#9`!?|mww5>ZZQ^Cd41a9mj5+Agfe>43^RYLV^L$d^ z{Sb9|Tgls9ih$PU=d0w0B_tUFrB1Hi)ERRMNrB6B8FN)hf$@4Dk`-k>B&V_7?s_Rl zUS3L*F*n7KF{hjq=!{Ma)*sNvGtDj|eKy*sbMNBk$YR9M7? zyRA=upsDP$ZFKF4)#+3X3s{;~e3o?OroibkG$Q+EZsgyo6sK{|mN(N@M;5(B>IskX z(r)T@o&=hK+eAZgg9+w*<_{eAOp{+*_6Emds(kTJ>G*MGO~V7h^8_SPYm_E<*iS%dt z#G*>dC7C(8v7b@jRMK_gjbu-6PsA#SyM-^5wYhe&uqd?s>Fl{X?eb;ZF9(*EQq~W2 zB=pFFuEulwl|lQDdN;}eFij-#eZ8*!v|O+sVkXaL9+wcnW1R=^L8@`!GKaJ9%x$)|KkqyoH{FK5f zKZ1T6dRJ_X5%DBHfBeP1$nnS5<};NuxwCRcSRMMGsR$lHuc0OQC9`#9K*G!2^(R?aQfz#E5p91>ddfKhrpE;1J`6OJoZgJBp!>B=s;!M(sHbx1< z%w|Ws$vqdBegrzbJh88zxh(z}LFV(X?2FGk+`577K_sW4VRbE!xgs2c_2GM*`2xp; zbBpCKM$GH@3e9Z?T&jHU2}=QmYcYsf_R=S%MYPLrm}dOiMwi>$r4h&G&yGv;gpD7v z*U)^)`ohcoF5XC+@_L$9ca~1%`>>oK6+xy{FTzVyi8)UZ9{A^Mtf+j>>158;yyFxM zaTVw`;F)s_o*VblZ&eL84G?F%5Fl_}Wq#Za6Qi~#m%FLutmtGnRvwwq8cD9g7MfxP zhuDp=wu#i0##?gq3=SQW%g@4>`8rBVpQ!S^8{_UgNZi&Z`zT1!GG#m{6K3_m%V;K$ zc{~gY=Zkav4}=F#*CU_ke(FZLd%=>Ssb+PZ$>uymP2$c;a`s)_4$S^K*ApoEF$J~1 z>C*?<<~5~93%+flU2H1w{+xuq9X>;Qqb7vDta3A!;m7nm-*}E6^r>KqhVME129=+u z1~8E98QKPq$j2m7SU`|uf8uzxNr&c(z-K-u#lT|8nue@$fEHc%iNZxct zE|w#gn8NU;1g)j~KtQwplLrd4jGoWrh_YQ6MC`F!u%9Y(G3ms16a9?EU5X2f-ultC zv68dH=|agCy5)nmt75Lh^Rg)B;A*{>_|EqHfEWIk_QgXSo?bJvTxFIj%?h%<0Q_4` zNrxrAu|1iZ2!`z8r?(O=g{NLo|1h|xu6D$Y_j-Npw)jDyi?Rk2&{6XRyh?zVdPDWDp+K-5;y^C}|$h)hGk~$cA`g(y> z0`nRxiqY0dT83h*z!a>Re4chQt^AlsveG;~s%LX+Msv>tB~%zo>PUp%WQPgVU2i)Z zHlo_uM&X)rOXq!X-;wA_I69M% zjtKjVpC53D_!P+I9;l*6N6)Qsxl)U@m%S>d<+2_qc8A;EuvB=D?vb&)XQ_*bNGI*t zhddhnRpX|&Duf-UpKMY7l-khm530_3TG4nEG9TmkIpcysmVqk=cnp{;7z zAAQpYBNZshT(^=UvNzU}m02+pI;*fq-QIUI%sHs4Uc9KIcOh>7oEcg`R8LUjH)7fO z$BNUjgHdXv!Ru-F%WLQ5M9*{!Es@=RAP@%ryna7Pd;N`8Yj=}oCHu?#2FF#8YboMC zJsMd=SrknK5r_+~aebn`LH9B*CDdu~^jH@?DR8MWd1WoHsh#81W1)Je$D%%E7o8c3 zS7Gv%st94BKF7XFMjLuw9h0@?LuaFre&lP@+rlg@&_{E`XuJ)er*|^B@sz2LOuLpa zRDnMyD4$g&l-rmkl=~rp_q1a@xvWmlWV22rof1f)U5`*;&~_~mePiOIKrVZ)C#6{| zl0wPU;x;v<)9o9MuM#-lW87&v>!T5JVX&1^DcSm3 zQ;0zF*#%G6%RGZgeEyg+%xr$t&l2x{Dm3`DsQ=JkxbZ_qBA&AejWL&LI=1kXmdEAK z&zlNl!#lCl5DA&mnu0XxxH0->q*i6O%S@UBy{3*uwCEbaPgk*$$jRIck`<`Pt*8Wf)haS_1u~8Be^RaMMw231#UpGtjj5C@WN&#a z+8$u*tq0_DUuh1~ttujBRNhRSkD6uuDX1R{a9xDYB&BZAEu!1dmO>{qEZ$L0SO|6_PN&$+!m~uurzB$(2HN~=-|fK z$vn8O5B;)uM9jw!88zX>ROyfdc?so<=XqT+#zuz2;y!F#(g>im-8q>fV)zEH(aeFcIq~< zHb?a{f ziwP?3{O!f#C9M_X&S-aQn%^Fl$!mvjo@uzbX7wV8js$UTRBK^;D96BQc+aK1r#MYI zw_7V!_?lLb70X*iY^|u7=MiEes;Rn|xP-aEB=hMe=LK(?22W44(6mH7Et%H6X&Sy% z=fi6oyR1KYeLcF}wSwAaIv6K%z5eX5h}TacF&9BKA$zHqTXj)9eu<9jYg-d-DQurka`r#JRXJoBXQ+lvnoMzsqvOr`I0LUPu4 zW@73K^#`J@eJZd22%)tg>tNvc;mEfgFd*$){@G2M-J~e9%?VvP!?=6bnELK~r+W`x z{o-C_R}$io&To4~>=VM&{D5<%LqT<=%=0G;-AB8tm5H9$E*SODq#51yx4vA6l~*3T z9~nTQFobE3k@f13twdoW>nL{^C`crMIqXXMB~gb1YNJ zFm*KLUXhtsMMukd=jb?*^E$$DR^<3#gU}jrd?-2=^dP(WVJWeQ&2S?v4b4u5R_1d{ zOYX|O`OMu*{rXpjKKI|}7TI&{ko>ip;Jz2&;vB#ba4M;gjUvT*|?(F~saW zG}eR_GsM?{p4rNyy_eEkJ({(l5!~AASC+qcIXXC8aOSJnF*+JFPq<9G?2CVp{E~0d zapWoG@ib__Bfbs&k~7Zx2L~G+!x&UgqHHi5{p)`n!|4lzuWT%1())}Ty$KkaVy8(ei*c*$Rp z7rPI6@3MjVauT~cQ=#+?sWW*acxqC+=bPprZlqLaykZ`H!C0cpd7@y)F}I@WctmdH zQS_L73-7a$*GFZm)qor!on6MR3%^%qFu-5d`Kt29sM(%v$xrs0QB}0#qy?{C_m5uM z25u438?8cx*3NcI)kfVdAU}t6V(4*3X3oV0MQlXknBji?;dz$<|D~-%&1bKk&(`fXye{2TqIm4cBvt`>l*WoDHmoG(8;qJr1G*741yMcDy_{D72A z#jY7}%;5Bcn0WTylIl)dZ>ILfO2vN2FH9yIO&eRx0hZ~KJcEv1@gLUhvlsf0e}t*& zFJD}oNd@muLiH10!I!z8ImI5QUu1Jntaxy*7K>p{MGKm(%SU~8ZHpg>uGiRB?E2cL zjiMRu7mYlNVF2lkS?ZN9(>_NKyVV6v35;osB*2IcGohuT*2)g;&7`+ z)FG$AjoJQ+a!}>CClK`fUDE*+o}J;r&FkxZxiwfB#sk5LO?Mo}S1$B1{UR*Jl$Ntg z;*f1!=#bjCn$At!|3S*=JjcB5@|N8^ou!BRk2v z(^;HX@GLtIzhNmQRBEyu$G~liyz=;H-$yEQi?){YDS zJykwi>-y%3$hTk&0x_AaLxehy#P)#kE??=Q+)zP>RLe2pgXXx0N3Wuzn~jZ)om5p- zL-(I{i=Q2|v6V44X6=$TX(alXY4Jiw==sispX8e659X$(CfBAnY_6JB00W0iE7M-S zM(ayVp8I8Q2^k~?p1R3?O_qO&{p+ouvB<*^r-kgI^{gzO2@KHyLY7>_btR=_!PW$6 zMA%;EM37K>;t>Up&Ujxq#uUqafsFap|eYfNKUtbOOsvl+9C^%D|X9*Be6Yd9tHu0FxtPOZlNiehPV<^8tecv3o7^y<;-o(&duOxlsEAAAoZGHLIdt-+>I)7WzH*SpT19l{xk@ zjo$5ycD2N=qh(GKQd05!cMDaTWPT97_WY`?udi|#=RBXDV=buQ!-zQQEL7FdAZ8S{ zAZpuvJ@l%wz9cPGRZ}x;&g;35+n&QWoLY)r%#C|&`>df7w}!748_LOfPP+<^&!vRE zKWc7n)_22Q7m+^>=hSR`|8(!ypgAKA>pE3k=!oN(q=_oOsHpbV)0rr9y*-b%3*r-w zx5pa2dL+ro$#bT*&gl3dG~I5-iAPLf-KnFASaLpR??8;9wLkJ~DA-DGPdwT-&f(h) z2mGV>_K5KCPTvmZC&r&N#X}Zm%n^Y{>+AMY(VIz8QBe+3{QUe}n_f3340^;82~AwS zUKPjG)rr^E($adJBlG@I(B;dQ-?h9df14YY@K(q?WOc~l=&f-GP8DKkcv$7v%@~p3 z?O!8~2~H!8jlZnsB<4S)csi-yHbUEbzvCz6bC2s#Vy%{Rw=?M~j@sS3v~3f4g$f&& zB*rLqIj7I>6rU>zxt!@d<9CT_(okQYZtaX+%ST^eOm!B(#cfmzq7w8pH!-0qPNnM( zq81{vZQEoO!LHzDB*m9O+?4x*3jl3jEOIV8t((}XuAvJy>P)SE)h>QbU^wjQC(KVT z=`74BY7-l1XxW#=d|%c)TqViH+i|8fYOgH80dpy(uwrd@Hi7%@?fhnwmtpLxB>fiU zY$P(Ri4s^9`ai_>Xs{;44mZ1hQf)|ml+6MMBv%r5AAgb=j}fzDK}k)P=4gWeeU=46gsPW zCD9>h=8A3E8s<-zd-v!O30EBX>gaavd}p0ymwXYr%on$KfE{8r+-!kxl!|JV(i9YdG%56A5}@(q|kcpPX)P2BiuUn5|zhm730QA zBs}eLn|UuNa`xZ6tXxc)FpyB^=h|QU>0y15LQpi{HqiOriMtmqfn$8d^-dK*)tIgo zpH!QfOTMI?1TDg`-W=VsaCDV0OuDK~=goJp$-S^pBPeQ;&N@!>cLAL z)_WcAO1JBJm13={wh&5vfzN`)E{=y}8(>7cQ)zPR^-dlb#l%BJE1n-ad#BFc?npp{ zX4X7WRWh@I9)B*?=R+GuY|8)|U!G_(o5G6}NnJK)Tg9RBp9kMwiA)Xh?MUojC^X+b zm&Ul+^U#3KwN`45WT#N`OY}A6;eb(W{;xd-=VJV(j2`hnL{CGUq0+t7HSq5FgC~p% z6>hU`iRWJ|@Ww6KNz!hb8yomnj-Q#J`MO73sh94CQLmMzkT&u49=a>VtfT3biHgfR zWje#MJ(rTm6#|6(l10s)v^UsP&(vVsKQy+&TQFZ%R4T)4*m_5+e4T6EQq>~MrRnHV za6Xqat$u@5W7QYE8pQXn-FiVs$@@?@0 zpLSZ_FMp{CxuR0_>)E;a%=yUOPWh|K>6O{VN!N}@j-PMcJ(>g&zm&P|&KC@A98~Nz z`+k?-DNNoqbDe9Q)r@P)siL%+5Z&W7u9gl0q}xK#7xS~q(s2xiuT{n-+#Brq(IMz; zVQpjiklbKz#!g}v(`ZmQzrb&mXqx z;nEq^J~^}GA#M=2bM@|gu2s}XXNYaWqwW3gk6JR<*feGGK77n!dq8CB@Wxn(M*mVy zR71$sy0dg@O*j{yaxHkNdJG>~y%P(25IVM1S6&=)rJg;VrG6*sq< zSlsiu2HJ0bD8LCSfEr(28RIM&@-##MI~V~DP=*A+ED9q6m)E@E(IYt3RXpHzu01nu418_v1hX%?ECQbpQ zp!FN5<_Ssw0dkB*(718`slX*r#tfR4BU89MAT+Lme}m+i10cM|Nil z9SzL_3w)IaT%_PE)I$oomS6#l;6NV0bLI{Qh?x&?5}?dr1SRtU9*mrcbD&i|z$^KG zM?^zL{B6ObQJ|eaJtTr~|0gcUObt+iOZfmEhoH78G7)xn7*V79cLYd3km(~pi@`sC zDm~dL;N6b^9)**F2~v;3;4Wk67EK<}1d zy~vX%{J3Z*j%aA;XjEwC;c%KL{J%^BPE3YQO~8sz01?CEQds&oo(@5l?5`n^E}ss8 z>oYXxf2u&k&rp3jPz+vj;5^v!86YD-SpQyiaOs5RvT|xPNDfdTYe7MdR*6R#--nK( z!w6azLUhH|Q+g@|v@;=BJaDWKz$QQq8AfpHgiEk?%C({d=)jJ0sLUiwEOs;5edvGE z`_TU`b6^ovA;Wc~o?iHmBHzG)m)sQr7&Ry1LH%v9dtwm_TQGxSU!YZoTD2&IEkM05 zP_o})rZ8Ck1*#Ov{FE_v!id{Iro#mi&;UeW90nd9g?aBlfMsqUI?516@KG^D&)S5u z2Z?9_Vq~Q#nDx%OpNt-rGK}EQ6Z*rgf9Y7DLQ~vckt&kqNU?JD< zFWj}TXsKQ;d?EOJA>-Ngl~1Oa-k-xqJ9>O#VK@kU z3<9-K5QQ^vN)Vf$@lV2k{j+N!e`$;p#YOO-7P218w?HnjssR{b2aur-vJO5aN}EF0 zsn9y;>L+l{9La_e%s*jaoQ3UNxBwQgvmUzcOV>l!{i{4M6-Myz7r;QI{LeOFg0{(x zbFi@O2|#-yBqQL{{6iD91MPUC27urU0u!e0>;OFfuwXVA)Bq)sjs+7I8vt$s24~m? zMzDDo3a$7@=tFFn?(PWPx5(^4q5slUG(x7bxF@VjV3`2a(U2os-2<>G=#yZ36v8V7 z%yR-Lh!p+^;|!b_=o4Ty{;mMy_Mvf6H$&qJ!8;*{L>>U#6eto3Pi-~a01B}1giKF} zB!lrMXOQVIv_OSET87PG9VpxaWiC#1LKOmw+@TxKH0a*^9~R68n@(7Y#3!taksi=) z<8K872-eBrMQ}>8ZiPs`Bq$O+GAP9uqh2Qy)T>Zr7(u)?h&)J&B4dIC$AB=wq6F*+ zBdC51O@+oEH9AZFucVzE4+pF`hVJYB(rLFt=2s~GW#&u+Sm0L)fF$BE9vQ)yF&qU( zaOZ?=Nr_~GIvr3Ne-WZPAVMt_OtA5XmTWva9v8t(AZ!C8DAftE_NZZ2d?z6FH^Ji! z9s`Ko1x<|tEzBA}gC{_M+EOrr3>XmW{Rzu}?w^P_;J6&L^iF1xqX65jjreUJ`k%W0 zWAld6pLnpJJg)*7&O&z@sEu263?~mCgED8KsLkJ?s3ZR<1Q}6e6#jjYQ}2eZ51I_f z5GT*butDB)c=+U})~F5!hXU2kK_P~^p%8JuD>BaEu`rw}P)YqA2YJQDVT9wv_5c(V zDDOWJ45f!+%=ADpv`*P{y#TMopRE6s>i^T5>mZx&02`Rm3st^J#|n8lLm}!8=kIh+ zTJsr9rV}Om$#YN=iYy1XsiP29B0KY$oBt9qLFkDo0A}|=4F*L;;r|Ts?Np0=@_N#y z|A`b5^Ls>4xgT1bG|X^H5SxwhPr`p{g1o;t^Ws#&J^&2@rFc;dTf@h2D{ed`a^d2! zG5$&Tul31vqVs^S%K^rd=j0?Hvj3t~4nJXg_!u0<#bY3p{Noz%{5R?Hb%5}sBjbVX zg8(+;pW^?9Mz-ZUtS5EghdVM#VL|i=Il1sL+>w)zL=DD2zxQ8PWFICt56Vsgf}q+E zG!2_&mPogSDHve~&~6BthP$W4&LMz{;DIO{_LLBa4=rH!VQ2vpv%z*YVbGHV=ab(1 zDQ2e}1G}Ud!DlFMj@6cC(P;`h59Or03(Pq1`({e zV1mUMM7Wj(JHQAgoe(0pk%Y)`K$JkQ`;YH`CB|bQQu<>heCC1eWF~;KpnxWHiL4xl zx)(|aBRDY*86)`qp>h!j?7_~bgy$0wL5Kez!dWmc4r-bwMF9^dpr(o9!w9}4g);fG zFU1R-sLcr&nBfVB5#%L#oAk zoskq;cPI&r;NgiR<3zF{{*MF?beDnZ90biSg@^Ea$`c)G`<&`TXQ5$oNWc=?4Csdd z$huX`LKQ(#VFY_ls0@<-xFb8~IWU(Rifk|kT_I3A5~ch5x{AE#b&`Uwl*&J$%#b&} z6S(lTABC_D_-hUd*YGb}kP$^d;s5mam4^M1KLv#PGCsK=Y~Ou~u==;Q+;ggUFb@ba zqF5;WI|i~ZE6E^ZM4CfwIR@(g6sWd^LRbybFF->G|A$NtF4N(WF``H){5u4)C8Np0 z!#G%gT5=fz9s&ws!n<&^EZ2=KC_SSVCiK8Fe2