From d884f5384f678392d155cd52bcf24b7edf2cd2b1 Mon Sep 17 00:00:00 2001 From: Daniil Shashimov Date: Sun, 26 Jul 2026 19:19:44 +0500 Subject: [PATCH 1/8] Add iOS app: NetworkExtension VPN driven by Xray-core alone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds an iPhone/iPad client under ios/, built on NEPacketTunnelProvider so every app on the device is tunnelled — not just proxy-aware ones. The tunnel is Xray and nothing else. Xray-core v26 has a native layer-3 `tun` inbound with an iOS mode: when the `xray.tun.fd` environment flag is set it adopts that descriptor instead of opening an interface itself. The provider applies its network settings, finds the utun descriptor iOS just created, and hands it straight to the core. No tun2socks, no local SOCKS hop, no second core — packets go utun -> Xray -> server inside one process. Shared code, not a fork. The iOS targets compile the very same Sources/XrayClient/{Models,Core} files as the Mac app; platform-specific pieces are behind `#if os(macOS)`. So parsers, config builder, routing model, subscriptions, store, ping and localization cannot drift between platforms, and `swift test` covers both. Core changes: - XrayConfigBuilder gains an inbound mode (local proxy vs. TUN), an optional log file, a DNS section with a port-53 rule, traffic stats, and a native WireGuard outbound. - QRCode and DeviceID are now cross-platform; ServerStore and GeoAssetManager use the shared app group container on iOS. - ProxyConfig.xraySupported marks the protocols an Xray-only build can run. Hysteria2/TUIC/AnyTLS need sing-box, so they are shown but not connectable. iOS specifics: - Switching servers does not reconnect the VPN: the app writes a new config and sends a `reload` message, the provider restarts only Xray on the same descriptor. Sub-second, and iOS never sees the tunnel drop. - IPv6 is claimed by default so IPv6 traffic cannot route around the tunnel. - NWPathMonitor rebuilds the core after Wi-Fi/cellular handovers and wake. - Go heap capped at 48 MB — NetworkExtension processes are killed outright when they exceed their budget. ios/XrayBridge is the gomobile binding; Scripts/ios/build-xraycore.sh produces the (gitignored, ~110 MB static) XrayCore.xcframework, and Scripts/ios/build-app.sh builds the app. CI added in .github/workflows/ios.yml. Verified: simulator and device builds are clean, 48 shared tests pass, and the exact configs the app generates boot a real Xray server through a passed in tun fd (`XRAY_TUN_FD=1 xray run -test`) for Reality, XHTTP, WireGuard and Shadowsocks+ws. Co-Authored-By: Claude Opus 5 --- .github/workflows/ios.yml | 52 ++ .gitignore | 13 +- README.md | 19 + Scripts/ios/build-app.sh | 62 +++ Scripts/ios/build-xraycore.sh | 48 ++ .../XrayClient/Core/ConnectionManager.swift | 9 +- Sources/XrayClient/Core/DeviceID.swift | 28 +- Sources/XrayClient/Core/GeoAssetManager.swift | 6 + Sources/XrayClient/Core/PingTester.swift | 4 + Sources/XrayClient/Core/QRCode.swift | 33 +- Sources/XrayClient/Core/ServerStore.swift | 6 + .../Core/SingBoxConfigBuilder.swift | 5 + .../XrayClient/Core/SystemIntegration.swift | 5 +- Sources/XrayClient/Core/SystemProxy.swift | 5 + Sources/XrayClient/Core/TunManager.swift | 5 + .../XrayClient/Core/XrayConfigBuilder.swift | 162 ++++++- Sources/XrayClient/Core/XrayProcess.swift | 5 + Sources/XrayClient/Models/AppSettings.swift | 19 + Sources/XrayClient/Models/ProxyConfig.swift | 13 +- Tests/XrayClientTests/TunConfigTests.swift | 170 +++++++ docs/ios.md | 161 +++++++ .../AccentColor.colorset/Contents.json | 20 + .../AppIcon.appiconset/AppIcon-1024.png | Bin 0 -> 558690 bytes .../AppIcon.appiconset/Contents.json | 14 + ios/App/Assets.xcassets/Contents.json | 6 + ios/App/TunnelController.swift | 292 ++++++++++++ ios/App/VeilApp.swift | 53 +++ ios/App/Views/AddServerView.swift | 123 +++++ ios/App/Views/ContentView.swift | 448 +++++++++++++++++ ios/App/Views/LogView.swift | 62 +++ ios/App/Views/QRDisplayView.swift | 65 +++ ios/App/Views/QRScannerView.swift | 175 +++++++ ios/App/Views/RoutingView.swift | 167 +++++++ ios/App/Views/ServerRow.swift | 72 +++ ios/App/Views/SettingsView.swift | 140 ++++++ ios/App/Views/SubscriptionView.swift | 120 +++++ ios/Config/Tunnel-Info.plist | 13 + ios/Config/Veil.entitlements | 14 + ios/Config/VeilTunnel.entitlements | 14 + ios/Shared/AppGroup.swift | 51 ++ ios/Shared/TunnelConfigWriter.swift | 65 +++ ios/Shared/TunnelIPC.swift | 76 +++ ios/Tunnel/PacketTunnelProvider.swift | 314 ++++++++++++ ios/Veil.xcodeproj/project.pbxproj | 449 ++++++++++++++++++ .../xcshareddata/xcschemes/Veil.xcscheme | 78 +++ ios/XrayBridge/go.mod | 46 ++ ios/XrayBridge/go.sum | 142 ++++++ ios/XrayBridge/xray.go | 171 +++++++ 48 files changed, 3995 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/ios.yml create mode 100755 Scripts/ios/build-app.sh create mode 100755 Scripts/ios/build-xraycore.sh create mode 100644 Tests/XrayClientTests/TunConfigTests.swift create mode 100644 docs/ios.md create mode 100644 ios/App/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/App/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png create mode 100644 ios/App/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/App/Assets.xcassets/Contents.json create mode 100644 ios/App/TunnelController.swift create mode 100644 ios/App/VeilApp.swift create mode 100644 ios/App/Views/AddServerView.swift create mode 100644 ios/App/Views/ContentView.swift create mode 100644 ios/App/Views/LogView.swift create mode 100644 ios/App/Views/QRDisplayView.swift create mode 100644 ios/App/Views/QRScannerView.swift create mode 100644 ios/App/Views/RoutingView.swift create mode 100644 ios/App/Views/ServerRow.swift create mode 100644 ios/App/Views/SettingsView.swift create mode 100644 ios/App/Views/SubscriptionView.swift create mode 100644 ios/Config/Tunnel-Info.plist create mode 100644 ios/Config/Veil.entitlements create mode 100644 ios/Config/VeilTunnel.entitlements create mode 100644 ios/Shared/AppGroup.swift create mode 100644 ios/Shared/TunnelConfigWriter.swift create mode 100644 ios/Shared/TunnelIPC.swift create mode 100644 ios/Tunnel/PacketTunnelProvider.swift create mode 100644 ios/Veil.xcodeproj/project.pbxproj create mode 100644 ios/Veil.xcodeproj/xcshareddata/xcschemes/Veil.xcscheme create mode 100644 ios/XrayBridge/go.mod create mode 100644 ios/XrayBridge/go.sum create mode 100644 ios/XrayBridge/xray.go diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml new file mode 100644 index 0000000..1f5c9aa --- /dev/null +++ b/.github/workflows/ios.yml @@ -0,0 +1,52 @@ +name: iOS + +on: + push: + branches: [ios, main] + pull_request: + branches: [ios, main] + +jobs: + build: + name: Build iOS app + runs-on: macos-26 + steps: + - uses: actions/checkout@v4 + + - name: Select latest Xcode + run: sudo xcode-select -s /Applications/Xcode.app + + - uses: actions/setup-go@v5 + with: + go-version: '1.26' + cache-dependency-path: ios/XrayBridge/go.sum + + # Xray-core compiled for iOS with gomobile. This is the app's only + # native dependency — no tun2socks, no sing-box. + - name: Cache XrayCore.xcframework + id: framework-cache + uses: actions/cache@v4 + with: + path: ios/Frameworks + key: xraycore-${{ runner.os }}-${{ hashFiles('ios/XrayBridge/go.sum', 'ios/XrayBridge/xray.go') }} + + - name: Build XrayCore.xcframework + if: steps.framework-cache.outputs.cache-hit != 'true' + run: Scripts/ios/build-xraycore.sh + + # The iOS targets compile the same Models/ and Core/ sources as the + # desktop app, so keep the desktop build honest too. + - name: Fetch desktop core binaries + run: | + Scripts/fetch-xray.sh + Scripts/fetch-singbox.sh + Scripts/fetch-tun2socks.sh + + - name: Test shared code + run: swift test + + - name: Build for simulator + run: Scripts/ios/build-app.sh simulator Release + + - name: Build for device (unsigned) + run: Scripts/ios/build-app.sh device Release diff --git a/.gitignore b/.gitignore index 458b6c4..95ea8ae 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,16 @@ Sources/XrayClient/Resources/tun2socks *.dmg dist/ +# iOS: the Xray-core xcframework is built locally +# (Scripts/ios/build-xraycore.sh), never committed. +ios/Frameworks/ +ios/build/ + +# Xcode +DerivedData/ +*.xcuserdatad/ +xcuserdata/ +*.xcworkspace + # Editor .vscode/ -*.xcodeproj -*.xcworkspace diff --git a/README.md b/README.md index 382760b..64d4243 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,25 @@ A native macOS VPN client for the [Xray-core](https://github.com/XTLS/Xray-core) - **Localized** in 12 languages: English, Русский, 中文, Español, हिन्दी, العربية, Français, Português, Deutsch, 日本語, Bahasa Indonesia, Türkçe. - **Safe shutdown** — restores routes/DNS on quit and recovers from a crashed previous session so you're never left without internet. +## iOS + +This branch also contains the iPhone/iPad app (`ios/`), built on Apple's +**NetworkExtension** so all traffic on the device is tunnelled. It ships +**Xray-core only** — no tun2socks and no second core: Xray's own layer-3 `tun` +inbound takes the utun descriptor straight from `NEPacketTunnelProvider`. + +It shares its entire model and core layer with the Mac app (`Sources/XrayClient/`), +so parsers, config builder, subscriptions, routing and localization behave +identically on both platforms. + +```bash +Scripts/ios/build-xraycore.sh # Xray-core -> XrayCore.xcframework +Scripts/ios/build-app.sh simulator Release +``` + +See **[docs/ios.md](docs/ios.md)** for the packet path, signing requirements and +the app↔extension protocol. + ## Requirements - macOS 14 (Sonoma) or later diff --git a/Scripts/ios/build-app.sh b/Scripts/ios/build-app.sh new file mode 100755 index 0000000..48488ca --- /dev/null +++ b/Scripts/ios/build-app.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# +# Builds the iOS app. Defaults to the simulator, which needs no signing; +# pass `device` to build for a real iPhone (requires a Team ID). +# +# Usage: +# Scripts/ios/build-app.sh # simulator, Debug +# Scripts/ios/build-app.sh simulator Release +# Scripts/ios/build-app.sh device Release TEAMID +# +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +PROJECT="$ROOT/ios/Veil.xcodeproj" +FRAMEWORK="$ROOT/ios/Frameworks/XrayCore.xcframework" + +TARGET_KIND="${1:-simulator}" +CONFIGURATION="${2:-Debug}" +TEAM_ID="${3:-}" + +if [[ ! -d "$FRAMEWORK" ]]; then + echo "error: $FRAMEWORK is missing." + echo " Run Scripts/ios/build-xraycore.sh first — the app cannot link without it." + exit 1 +fi + +case "$TARGET_KIND" in + simulator) + DESTINATION='generic/platform=iOS Simulator' + SDK=iphonesimulator + EXTRA=() + ;; + device) + DESTINATION='generic/platform=iOS' + SDK=iphoneos + if [[ -n "$TEAM_ID" ]]; then + EXTRA=("DEVELOPMENT_TEAM=$TEAM_ID") + else + echo "note: no Team ID given — building without code signing." + echo " The result will not install on a device; pass your Team ID as arg 3." + EXTRA=(CODE_SIGNING_ALLOWED=NO) + fi + ;; + *) + echo "usage: $0 [simulator|device] [Debug|Release] [TEAM_ID]" + exit 1 + ;; +esac + +echo "==> building Veil ($TARGET_KIND, $CONFIGURATION)" +xcodebuild \ + -project "$PROJECT" \ + -scheme Veil \ + -configuration "$CONFIGURATION" \ + -sdk "$SDK" \ + -destination "$DESTINATION" \ + -derivedDataPath "$ROOT/ios/build" \ + ${EXTRA[@]+"${EXTRA[@]}"} \ + build + +echo +echo "==> done: $ROOT/ios/build/Build/Products/$CONFIGURATION-$SDK/Veil.app" diff --git a/Scripts/ios/build-xraycore.sh b/Scripts/ios/build-xraycore.sh new file mode 100755 index 0000000..67bb685 --- /dev/null +++ b/Scripts/ios/build-xraycore.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# +# Builds XrayCore.xcframework — Xray-core compiled for iOS device + simulator +# via gomobile. This is the ONLY native dependency of the iOS app: no +# tun2socks, no sing-box. Xray's own `tun` inbound terminates the packets it +# gets from NetworkExtension. +# +# Usage: Scripts/ios/build-xraycore.sh +# +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +BRIDGE="$ROOT/ios/XrayBridge" +OUT_DIR="$ROOT/ios/Frameworks" +OUT="$OUT_DIR/XrayCore.xcframework" + +command -v go >/dev/null || { echo "error: Go toolchain not found (brew install go)"; exit 1; } +command -v xcodebuild >/dev/null || { echo "error: Xcode not found"; exit 1; } + +export PATH="$PATH:$(go env GOPATH)/bin" + +if ! command -v gomobile >/dev/null; then + echo "==> installing gomobile" + go install golang.org/x/mobile/cmd/gomobile@latest + go install golang.org/x/mobile/cmd/gobind@latest +fi + +echo "==> resolving Go modules" +cd "$BRIDGE" +go mod download + +echo "==> gomobile init" +gomobile init + +echo "==> building XrayCore.xcframework (device + simulator, arm64)" +mkdir -p "$OUT_DIR" +rm -rf "$OUT" +gomobile bind \ + -target=ios,iossimulator \ + -iosversion=16.0 \ + -o "$OUT" \ + -ldflags="-s -w" \ + -trimpath \ + . + +echo +echo "==> done: $OUT" +du -sh "$OUT" diff --git a/Sources/XrayClient/Core/ConnectionManager.swift b/Sources/XrayClient/Core/ConnectionManager.swift index 11dcfd1..1150887 100644 --- a/Sources/XrayClient/Core/ConnectionManager.swift +++ b/Sources/XrayClient/Core/ConnectionManager.swift @@ -1,8 +1,11 @@ import Foundation import Observation import Network -import AppKit +// The macOS coordinator drives an out-of-process core plus the system proxy or +// tun2socks. iOS has neither: there the tunnel lives in a NetworkExtension and +// is driven by `TunnelController` (ios/App), which speaks to the provider over +// NETunnelProviderSession. `ConnectionState` is shared by both. enum ConnectionState: Equatable { case disconnected case connecting @@ -19,6 +22,9 @@ enum ConnectionState: Equatable { } } +#if os(macOS) +import AppKit + /// Top-level coordinator: owns the xray process, the active transport mode /// (system proxy or TUN), uptime tracking, and logs. @MainActor @@ -500,3 +506,4 @@ final class ConnectionManager { } } } +#endif diff --git a/Sources/XrayClient/Core/DeviceID.swift b/Sources/XrayClient/Core/DeviceID.swift index 19b7e0d..9e77e76 100644 --- a/Sources/XrayClient/Core/DeviceID.swift +++ b/Sources/XrayClient/Core/DeviceID.swift @@ -1,12 +1,18 @@ import Foundation -/// Generates a stable hardware identifier (HWID) from the macOS platform UUID. -/// Some subscription providers require this to identify the device. +/// Generates a stable hardware identifier (HWID). Some subscription providers +/// require it to identify the device. +/// +/// On macOS this is the `IOPlatformUUID`. iOS exposes no system-wide hardware +/// identifier at all, so we mint one on first use and persist it in the shared +/// app group — that keeps the HWID stable across launches and identical between +/// the app and the tunnel extension, which is what panels expect. enum DeviceID { /// Cached HWID — computed once on first access. static let hwid: String = generate() + #if os(macOS) /// Reads `IOPlatformUUID` via `ioreg` and returns it. /// Falls back to a random UUID if the value cannot be obtained. private static func generate() -> String { @@ -34,4 +40,22 @@ enum DeviceID { } catch {} return UUID().uuidString } + #else + /// Reads (or mints) the identifier stored in the shared app group. + /// + /// `UIDevice.identifierForVendor` would be the obvious choice, but it is + /// main-actor isolated and this runs from wherever the first subscription + /// fetch happens — including inside the tunnel extension. A stored UUID has + /// the same lifetime anyway: both reset when the app is removed. + private static func generate() -> String { + let key = "hwid" + let defaults = UserDefaults(suiteName: AppGroup.identifier) ?? .standard + if let stored = defaults.string(forKey: key), !stored.isEmpty { + return stored + } + let generated = UUID().uuidString + defaults.set(generated, forKey: key) + return generated + } + #endif } diff --git a/Sources/XrayClient/Core/GeoAssetManager.swift b/Sources/XrayClient/Core/GeoAssetManager.swift index d5e04fd..d176a96 100644 --- a/Sources/XrayClient/Core/GeoAssetManager.swift +++ b/Sources/XrayClient/Core/GeoAssetManager.swift @@ -21,11 +21,17 @@ final class GeoAssetManager { init() { let fm = FileManager.default + #if os(iOS) + // Shared app group: the app downloads the .dat files, the tunnel + // extension is the one that actually reads them. + let dir = AppGroup.geoDirectory + #else let base = (try? fm.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)) ?? fm.temporaryDirectory let dir = base.appendingPathComponent("XrayClient/geo", isDirectory: true) + #endif try? fm.createDirectory(at: dir, withIntermediateDirectories: true) self.directory = dir refreshState() diff --git a/Sources/XrayClient/Core/PingTester.swift b/Sources/XrayClient/Core/PingTester.swift index 8745669..a8dbe95 100644 --- a/Sources/XrayClient/Core/PingTester.swift +++ b/Sources/XrayClient/Core/PingTester.swift @@ -24,6 +24,7 @@ final class PingTester { } Task.detached(priority: .userInitiated) { + #if os(macOS) // Resolve hostnames to IPs and pin them off the tunnel for the test. var pinnedIPs: [String] = [] if tunActive { @@ -38,6 +39,7 @@ final class PingTester { // Give the routing table a moment to settle. try? await Task.sleep(nanoseconds: 200_000_000) } + #endif await withTaskGroup(of: (UUID, Int?).self) { group in let maxConcurrent = 16 @@ -86,9 +88,11 @@ final class PingTester { if !pending.isEmpty { await self.applyResults(pending) } } + #if os(macOS) if tunActive { TunManager.pingRouteDel() } + #endif } } diff --git a/Sources/XrayClient/Core/QRCode.swift b/Sources/XrayClient/Core/QRCode.swift index 755272f..3034ac9 100644 --- a/Sources/XrayClient/Core/QRCode.swift +++ b/Sources/XrayClient/Core/QRCode.swift @@ -1,12 +1,30 @@ import Foundation import CoreImage + +#if canImport(AppKit) import AppKit +typealias PlatformImage = NSImage +#elseif canImport(UIKit) +import UIKit +typealias PlatformImage = UIImage +#endif /// QR-code generation and decoding helpers built on CoreImage. enum QRCode { - /// Renders `string` into a crisp QR-code NSImage of roughly `size` points. - static func image(from string: String, size: CGFloat = 240) -> NSImage? { + /// Renders `string` into a crisp QR-code image of roughly `size` points. + static func image(from string: String, size: CGFloat = 240) -> PlatformImage? { + guard let cg = cgImage(from: string, size: size) else { return nil } + #if canImport(AppKit) + return NSImage(cgImage: cg, size: NSSize(width: size, height: size)) + #else + return UIImage(cgImage: cg) + #endif + } + + /// The raw CGImage behind `image(from:size:)`, handy when the caller wants + /// the bitmap itself rather than a view-ready image. + static func cgImage(from string: String, size: CGFloat = 240) -> CGImage? { let data = Data(string.utf8) guard let filter = CIFilter(name: "CIQRCodeGenerator") else { return nil } filter.setValue(data, forKey: "inputMessage") @@ -18,15 +36,18 @@ enum QRCode { let scale = size / output.extent.width let scaled = output.transformed(by: CGAffineTransform(scaleX: scale, y: scale)) - let context = CIContext() - guard let cg = context.createCGImage(scaled, from: scaled.extent) else { return nil } - return NSImage(cgImage: cg, size: NSSize(width: size, height: size)) + return CIContext().createCGImage(scaled, from: scaled.extent) } /// Detects and returns the first QR-code payload found in an image, if any. - static func decode(from image: NSImage) -> String? { + static func decode(from image: PlatformImage) -> String? { + #if canImport(AppKit) guard let tiff = image.tiffRepresentation, let ci = CIImage(data: tiff) else { return nil } + #else + guard let cg = image.cgImage else { return nil } + let ci = CIImage(cgImage: cg) + #endif return decode(ciImage: ci) } diff --git a/Sources/XrayClient/Core/ServerStore.swift b/Sources/XrayClient/Core/ServerStore.swift index 38c70a2..810a8bf 100644 --- a/Sources/XrayClient/Core/ServerStore.swift +++ b/Sources/XrayClient/Core/ServerStore.swift @@ -14,11 +14,17 @@ final class ServerStore { init() { let fm = FileManager.default + #if os(iOS) + // Live in the shared app group so the tunnel extension reads the same + // servers and settings the app writes. + let dir = AppGroup.supportDirectory + #else let base = (try? fm.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true)) ?? fm.temporaryDirectory let dir = base.appendingPathComponent("XrayClient", isDirectory: true) + #endif try? fm.createDirectory(at: dir, withIntermediateDirectories: true) self.fileURL = dir.appendingPathComponent("store.json") load() diff --git a/Sources/XrayClient/Core/SingBoxConfigBuilder.swift b/Sources/XrayClient/Core/SingBoxConfigBuilder.swift index a9d0b8e..11d9f53 100644 --- a/Sources/XrayClient/Core/SingBoxConfigBuilder.swift +++ b/Sources/XrayClient/Core/SingBoxConfigBuilder.swift @@ -1,3 +1,7 @@ +// macOS-only: sing-box is the second bundled core. The iOS build ships +// Xray-core alone, so protocols that need sing-box are unavailable there +// (see ProxyConfig.xraySupported). +#if os(macOS) import Foundation /// Builds a sing-box JSON configuration from a `ProxyConfig`. @@ -255,3 +259,4 @@ enum SingBoxConfigBuilder { return hasMatcher ? r : nil } } +#endif diff --git a/Sources/XrayClient/Core/SystemIntegration.swift b/Sources/XrayClient/Core/SystemIntegration.swift index 1944a4f..e3053ec 100644 --- a/Sources/XrayClient/Core/SystemIntegration.swift +++ b/Sources/XrayClient/Core/SystemIntegration.swift @@ -1,7 +1,9 @@ import Foundation -import ServiceManagement import UserNotifications +#if os(macOS) +import ServiceManagement + /// Manages the "launch at login" state via the modern SMAppService API /// (macOS 13+). Registering adds the app as a login item; unregistering removes /// it. Requires the app to be a real bundle (it is, via package-app.sh). @@ -33,6 +35,7 @@ enum LoginItem { } } } +#endif /// Thin wrapper around UNUserNotificationCenter for connection status alerts. @MainActor diff --git a/Sources/XrayClient/Core/SystemProxy.swift b/Sources/XrayClient/Core/SystemProxy.swift index b691b30..f7047b0 100644 --- a/Sources/XrayClient/Core/SystemProxy.swift +++ b/Sources/XrayClient/Core/SystemProxy.swift @@ -1,3 +1,7 @@ +// macOS-only: this file drives the system proxy / tun2socks / a bundled +// core subprocess, none of which exist on iOS. The iOS build runs Xray +// in-process inside the NetworkExtension instead (see ios/Tunnel). +#if os(macOS) import Foundation /// Controls the macOS system-wide proxy via `networksetup`. @@ -139,3 +143,4 @@ enum SystemProxy { return String(data: data, encoding: .utf8) ?? "" } } +#endif diff --git a/Sources/XrayClient/Core/TunManager.swift b/Sources/XrayClient/Core/TunManager.swift index faf26d7..b86168e 100644 --- a/Sources/XrayClient/Core/TunManager.swift +++ b/Sources/XrayClient/Core/TunManager.swift @@ -1,3 +1,7 @@ +// macOS-only: this file drives the system proxy / tun2socks / a bundled +// core subprocess, none of which exist on iOS. The iOS build runs Xray +// in-process inside the NetworkExtension instead (see ios/Tunnel). +#if os(macOS) import Foundation /// Manages TUN (full-traffic) mode using `tun2socks` + route manipulation. @@ -205,3 +209,4 @@ enum TunManager { .joined(separator: " ") } } +#endif diff --git a/Sources/XrayClient/Core/XrayConfigBuilder.swift b/Sources/XrayClient/Core/XrayConfigBuilder.swift index 16ec721..8f6dc7c 100644 --- a/Sources/XrayClient/Core/XrayConfigBuilder.swift +++ b/Sources/XrayClient/Core/XrayConfigBuilder.swift @@ -7,25 +7,81 @@ struct InboundPorts { let listen: String = "127.0.0.1" } +/// How traffic reaches the core. +/// +/// macOS runs Xray as a subprocess and feeds it through local SOCKS/HTTP +/// inbounds (the system proxy or tun2socks points at them). iOS runs Xray +/// inside the NetworkExtension and hands it the utun descriptor directly, so +/// there the core uses its own layer-3 `tun` inbound and there is no local +/// proxy hop at all. +enum XrayInbound { + case localProxy(InboundPorts) + case tun(name: String, mtu: Int) +} + /// Builds an Xray-core JSON configuration from a `ProxyConfig`. /// -/// Produces two inbounds (SOCKS5 + HTTP) on localhost and one outbound for the -/// selected server, plus a direct outbound for routing rules. +/// Produces the requested inbound plus one outbound for the selected server and +/// direct/block outbounds for routing rules. enum XrayConfigBuilder { static func build(for cfg: ProxyConfig, ports: InboundPorts = InboundPorts(), rules: [RoutingRule] = [], logLevel: String = "warning") -> [String: Any] { + build(for: cfg, inbound: .localProxy(ports), rules: rules, logLevel: logLevel) + } + + /// - Parameters: + /// - inbound: local SOCKS/HTTP proxy, or Xray's native layer-3 TUN. + /// - logFile: when set, the core appends its error log here instead of + /// stderr — the only way to read logs out of a NetworkExtension. + /// - dnsServers: when non-empty, an Xray `dns` section is emitted and all + /// port-53 traffic is answered by the core. Needed in TUN mode, where + /// the OS resolver's queries arrive as raw packets. + /// - stats: enables traffic counters on the proxy outbound. + static func build(for cfg: ProxyConfig, + inbound: XrayInbound, + rules: [RoutingRule] = [], + logLevel: String = "warning", + logFile: String? = nil, + dnsServers: [String] = [], + stats: Bool = false) -> [String: Any] { let isBalancer = cfg.isBalancer let proxyOutbounds = outbounds(for: cfg) let balancerTags = isBalancer ? proxyOutbounds.compactMap { $0["tag"] as? String } : [] - return [ - "log": ["loglevel": logLevel], - "inbounds": inbounds(ports), - "outbounds": proxyOutbounds + [directOutbound(), blockOutbound()], - "routing": routing(rules: rules, isBalancer: isBalancer, balancerTags: balancerTags) + + var log: [String: Any] = ["loglevel": logLevel] + if let logFile, !logFile.isEmpty { + log["error"] = logFile + log["access"] = "none" + } + + var auxOutbounds = [directOutbound(), blockOutbound()] + if !dnsServers.isEmpty { auxOutbounds.append(dnsOutbound()) } + + var config: [String: Any] = [ + "log": log, + "inbounds": inbounds(inbound), + "outbounds": proxyOutbounds + auxOutbounds, + "routing": routing(rules: rules, + isBalancer: isBalancer, + balancerTags: balancerTags, + hasDNS: !dnsServers.isEmpty) ] + if !dnsServers.isEmpty { + config["dns"] = ["servers": dnsServers, "queryStrategy": "UseIP"] + } + if stats { + config["stats"] = [String: Any]() + config["policy"] = [ + "system": [ + "statsOutboundUplink": true, + "statsOutboundDownlink": true + ] + ] + } + return config } static func jsonData(for cfg: ProxyConfig, @@ -37,9 +93,30 @@ enum XrayConfigBuilder { options: [.prettyPrinted, .sortedKeys]) } + static func jsonString(for cfg: ProxyConfig, + inbound: XrayInbound, + rules: [RoutingRule] = [], + logLevel: String = "warning", + logFile: String? = nil, + dnsServers: [String] = [], + stats: Bool = false) throws -> String { + let dict = build(for: cfg, inbound: inbound, rules: rules, logLevel: logLevel, + logFile: logFile, dnsServers: dnsServers, stats: stats) + let data = try JSONSerialization.data(withJSONObject: dict, + options: [.prettyPrinted, .sortedKeys]) + return String(decoding: data, as: UTF8.self) + } + // MARK: - Inbounds - private static func inbounds(_ p: InboundPorts) -> [[String: Any]] { + private static func inbounds(_ inbound: XrayInbound) -> [[String: Any]] { + switch inbound { + case .localProxy(let p): return proxyInbounds(p) + case .tun(let name, let mtu): return [tunInbound(name: name, mtu: mtu)] + } + } + + private static func proxyInbounds(_ p: InboundPorts) -> [[String: Any]] { [ [ "tag": "socks-in", @@ -59,6 +136,25 @@ enum XrayConfigBuilder { ] } + /// Xray's own layer-3 inbound. It ignores `listen`/`port` and instead reads + /// raw IP packets from the interface — on iOS from the descriptor published + /// through the `xray.tun.fd` environment flag by the tunnel provider. + /// Sniffing is what lets domain-based routing rules still work when all the + /// core sees is IP packets. + private static func tunInbound(name: String, mtu: Int) -> [String: Any] { + [ + "tag": "tun-in", + "port": 0, + "protocol": "tun", + "settings": ["name": name, "MTU": mtu], + "sniffing": [ + "enabled": true, + "destOverride": ["http", "tls", "quic"], + "routeOnly": false + ] + ] + } + // MARK: - Outbound dispatch private static func singleOutbound(_ cfg: ProxyConfig, tag: String) -> [String: Any] { @@ -68,14 +164,17 @@ enum XrayConfigBuilder { case .vmess: out = vmessOutbound(cfg) case .trojan: out = trojanOutbound(cfg) case .shadowsocks: out = shadowsocksOutbound(cfg) - case .hysteria2, .tuic, .wireguard, .anytls: + case .wireguard: out = wireguardOutbound(cfg) + case .hysteria2, .tuic, .anytls: // Handled by the sing-box core, never here. ConnectionManager routes // them to SingBoxConfigBuilder; this is only reachable if called // directly, so emit a harmless freedom outbound. out = ["protocol": "freedom", "settings": [:]] } out["tag"] = tag - if let mux = muxSettings(cfg) { out["mux"] = mux } + // WireGuard carries its own transport; stream settings and mux do not + // apply to it. + if cfg.proto != .wireguard, let mux = muxSettings(cfg) { out["mux"] = mux } return out } @@ -170,6 +269,27 @@ enum XrayConfigBuilder { ] } + /// Xray's native WireGuard outbound. Used by the iOS build, where Xray is + /// the only core; macOS routes WireGuard through sing-box instead. + private static func wireguardOutbound(_ cfg: ProxyConfig) -> [String: Any] { + var peer: [String: Any] = [ + "endpoint": "\(cfg.address):\(cfg.port)", + "publicKey": cfg.peerPublicKey ?? "", + "keepAlive": 25 + ] + if let psk = cfg.presharedKey, !psk.isEmpty { peer["preSharedKey"] = psk } + + var settings: [String: Any] = [ + "secretKey": cfg.privateKey ?? "", + "address": cfg.localAddresses ?? ["10.0.0.2/32"], + "peers": [peer] + ] + if let mtu = cfg.mtu, mtu > 0 { settings["mtu"] = mtu } + if let reserved = cfg.reserved, !reserved.isEmpty { settings["reserved"] = reserved } + + return ["protocol": "wireguard", "settings": settings] + } + // MARK: - Stream settings (transport + security) private static func streamSettings(_ cfg: ProxyConfig) -> [String: Any] { @@ -268,13 +388,31 @@ enum XrayConfigBuilder { ["tag": "block", "protocol": "blackhole", "settings": [:]] } + /// Answers DNS queries from the core's own `dns` section instead of letting + /// them travel as opaque UDP. Only emitted alongside a `dns` config. + private static func dnsOutbound() -> [String: Any] { + ["tag": "dns-out", "protocol": "dns", "settings": [:]] + } + /// Builds the routing section from an ordered rule list. The first matching /// rule wins. For a balancer group the final catch-all rule uses an Xray /// `balancerTag` so traffic is distributed across all nodes. private static func routing(rules: [RoutingRule], isBalancer: Bool, - balancerTags: [String] = []) -> [String: Any] { - var ruleList = rules.compactMap { $0.xrayRule(useBalancerForProxy: isBalancer) } + balancerTags: [String] = [], + hasDNS: Bool = false) -> [String: Any] { + var ruleList: [[String: Any]] = [] + // DNS first: in TUN mode the resolver's queries arrive as plain UDP + // packets, and we want the core to answer them (and to fetch the answer + // through the tunnel) rather than forwarding them verbatim. + if hasDNS { + ruleList.append([ + "type": "field", + "port": "53", + "outboundTag": "dns-out" + ]) + } + ruleList += rules.compactMap { $0.xrayRule(useBalancerForProxy: isBalancer) } let finalRule: [String: Any] = [ "type": "field", "network": "tcp,udp", diff --git a/Sources/XrayClient/Core/XrayProcess.swift b/Sources/XrayClient/Core/XrayProcess.swift index f3b213c..da6c900 100644 --- a/Sources/XrayClient/Core/XrayProcess.swift +++ b/Sources/XrayClient/Core/XrayProcess.swift @@ -1,3 +1,7 @@ +// macOS-only: this file drives the system proxy / tun2socks / a bundled +// core subprocess, none of which exist on iOS. The iOS build runs Xray +// in-process inside the NetworkExtension instead (see ios/Tunnel). +#if os(macOS) import Foundation /// Safe replacement for the SPM-synthesized `Bundle.module`. @@ -142,3 +146,4 @@ final class XrayProcess { process = nil } } +#endif diff --git a/Sources/XrayClient/Models/AppSettings.swift b/Sources/XrayClient/Models/AppSettings.swift index 1fac86a..acd62a7 100644 --- a/Sources/XrayClient/Models/AppSettings.swift +++ b/Sources/XrayClient/Models/AppSettings.swift @@ -79,6 +79,13 @@ struct AppSettings: Codable, Equatable { // Subscription var sendHwid: Bool = true + // Tunnel shape. Only the iOS build reads these — there the whole tunnel is + // Xray's own layer-3 inbound behind NetworkExtension, so the interface MTU, + // the address families we claim and the resolver are ours to pick. + var tunnelMTU: Int = 1500 + var ipv6Enabled: Bool = true + var dnsServers: [String] = ["1.1.1.1", "8.8.8.8"] + init() {} /// Resilient decoding: any missing key falls back to its default so old @@ -108,6 +115,18 @@ struct AppSettings: Codable, Equatable { launchAtLogin = get(.launchAtLogin, false) notifyOnConnect = get(.notifyOnConnect, false) sendHwid = get(.sendHwid, true) + tunnelMTU = get(.tunnelMTU, 1500) + ipv6Enabled = get(.ipv6Enabled, true) + dnsServers = get(.dnsServers, ["1.1.1.1", "8.8.8.8"]) + } + + /// DNS servers to hand the tunnel, never empty — an empty resolver list + /// would leave the device with no way to resolve anything at all. + var effectiveDNSServers: [String] { + let cleaned = dnsServers + .map { $0.trimmingCharacters(in: .whitespaces) } + .filter { !$0.isEmpty } + return cleaned.isEmpty ? ["1.1.1.1", "8.8.8.8"] : cleaned } /// The ordered routing rules to feed Xray, derived from the active preset diff --git a/Sources/XrayClient/Models/ProxyConfig.swift b/Sources/XrayClient/Models/ProxyConfig.swift index 4888712..a322988 100644 --- a/Sources/XrayClient/Models/ProxyConfig.swift +++ b/Sources/XrayClient/Models/ProxyConfig.swift @@ -110,7 +110,9 @@ struct ProxyConfig: Codable, Identifiable, Equatable { [address] + (alternates?.map(\.address) ?? []) } - /// The core engine that handles this protocol. + /// The core engine that handles this protocol on macOS, where both cores + /// are bundled. WireGuard is handled by sing-box there because its endpoint + /// model is a better fit for the desktop routing setup. var engine: CoreEngine { switch proto { case .vless, .vmess, .trojan, .shadowsocks: return .xray @@ -118,6 +120,15 @@ struct ProxyConfig: Codable, Identifiable, Equatable { } } + /// Whether Xray-core alone can run this protocol. The iOS build ships no + /// second core, so entries where this is false cannot be connected there. + var xraySupported: Bool { + switch proto { + case .vless, .vmess, .trojan, .shadowsocks, .wireguard: return true + case .hysteria2, .tuic, .anytls: return false + } + } + /// How the ping tester should probe this server for reachability + RTT. enum PingStrategy: Sendable, Equatable { case tcp // standard TCP connect (has a TCP listener) diff --git a/Tests/XrayClientTests/TunConfigTests.swift b/Tests/XrayClientTests/TunConfigTests.swift new file mode 100644 index 0000000..fd635ca --- /dev/null +++ b/Tests/XrayClientTests/TunConfigTests.swift @@ -0,0 +1,170 @@ +import XCTest +@testable import XrayClient + +/// Covers the layer-3 config the iOS build feeds to Xray inside the +/// NetworkExtension. The desktop app never uses this shape, so without these +/// tests a change to the builder could silently break the phone. +final class TunConfigTests: XCTestCase { + + private func realityServer() -> ProxyConfig { + var cfg = ProxyConfig(name: "NL", proto: .vless, address: "1.2.3.4", port: 443) + cfg.uuid = "11111111-2222-3333-4444-555555555555" + cfg.flow = "xtls-rprx-vision" + cfg.security = .reality + cfg.sni = "www.microsoft.com" + cfg.fingerprint = "chrome" + cfg.publicKey = "xr0PXbLQvB0qCLLm7d5MO_9y2Bqk5DoMHKcVAKTZ1UA" + cfg.shortId = "0123abcd" + return cfg + } + + private func tunConfig(_ cfg: ProxyConfig, + rules: [RoutingRule] = [], + dns: [String] = ["1.1.1.1"], + stats: Bool = true) -> [String: Any] { + XrayConfigBuilder.build(for: cfg, + inbound: .tun(name: "utun9", mtu: 1500), + rules: rules, + logLevel: "warning", + logFile: "/tmp/xray.log", + dnsServers: dns, + stats: stats) + } + + // MARK: - Inbound + + func testTunInboundReplacesLocalProxies() { + let config = tunConfig(realityServer()) + let inbounds = config["inbounds"] as! [[String: Any]] + + XCTAssertEqual(inbounds.count, 1) + XCTAssertEqual(inbounds[0]["protocol"] as? String, "tun") + XCTAssertEqual(inbounds[0]["tag"] as? String, "tun-in") + + let settings = inbounds[0]["settings"] as! [String: Any] + XCTAssertEqual(settings["name"] as? String, "utun9") + XCTAssertEqual(settings["MTU"] as? Int, 1500) + } + + /// All the core sees is IP packets, so without sniffing no domain rule + /// would ever match. + func testTunInboundEnablesSniffing() { + let inbounds = tunConfig(realityServer())["inbounds"] as! [[String: Any]] + let sniffing = inbounds[0]["sniffing"] as! [String: Any] + XCTAssertEqual(sniffing["enabled"] as? Bool, true) + XCTAssertEqual(sniffing["destOverride"] as? [String], ["http", "tls", "quic"]) + } + + func testLocalProxyInboundsStillDefaultForDesktop() { + let inbounds = XrayConfigBuilder.build(for: realityServer())["inbounds"] as! [[String: Any]] + XCTAssertEqual(inbounds.map { $0["protocol"] as? String }, ["socks", "http"]) + } + + // MARK: - Outbound + + /// The TUN path must reuse the exact same outbound builder as the desktop + /// path — Reality/XHTTP settings have to be byte-for-byte identical. + func testOutboundMatchesDesktopBuild() { + let server = realityServer() + let tun = tunConfig(server)["outbounds"] as! [[String: Any]] + let desktop = XrayConfigBuilder.build(for: server)["outbounds"] as! [[String: Any]] + + let tunProxy = tun.first { $0["tag"] as? String == "proxy" }! + let desktopProxy = desktop.first { $0["tag"] as? String == "proxy" }! + XCTAssertEqual(NSDictionary(dictionary: tunProxy), + NSDictionary(dictionary: desktopProxy)) + } + + func testWireGuardOutboundIsNativeXray() { + var wg = ProxyConfig(name: "WG", proto: .wireguard, address: "9.9.9.9", port: 51820) + wg.privateKey = "cHJpdmF0ZQ==" + wg.peerPublicKey = "cHVibGlj" + wg.presharedKey = "cHNr" + wg.localAddresses = ["10.2.0.2/32"] + wg.mtu = 1420 + + let outbounds = tunConfig(wg)["outbounds"] as! [[String: Any]] + let proxy = outbounds.first { $0["tag"] as? String == "proxy" }! + XCTAssertEqual(proxy["protocol"] as? String, "wireguard") + // WireGuard brings its own transport — mux must not be attached. + XCTAssertNil(proxy["mux"]) + + let settings = proxy["settings"] as! [String: Any] + XCTAssertEqual(settings["secretKey"] as? String, "cHJpdmF0ZQ==") + XCTAssertEqual(settings["address"] as? [String], ["10.2.0.2/32"]) + XCTAssertEqual(settings["mtu"] as? Int, 1420) + + let peer = (settings["peers"] as! [[String: Any]])[0] + XCTAssertEqual(peer["endpoint"] as? String, "9.9.9.9:51820") + XCTAssertEqual(peer["publicKey"] as? String, "cHVibGlj") + XCTAssertEqual(peer["preSharedKey"] as? String, "cHNr") + } + + // MARK: - DNS + + /// In TUN mode the resolver's queries arrive as raw UDP, so they have to be + /// picked off by a port-53 rule and answered by the core's DNS outbound — + /// otherwise they would leave the device unproxied. + func testDNSSectionAndPort53RuleComeFirst() { + let config = tunConfig(realityServer(), + rules: RoutingPreset.bypassLAN.builtInRules(blockAds: false)) + + let dns = config["dns"] as! [String: Any] + XCTAssertEqual(dns["servers"] as? [String], ["1.1.1.1"]) + + let outbounds = config["outbounds"] as! [[String: Any]] + XCTAssertTrue(outbounds.contains { $0["tag"] as? String == "dns-out" }) + + let rules = (config["routing"] as! [String: Any])["rules"] as! [[String: Any]] + XCTAssertEqual(rules.first?["port"] as? String, "53") + XCTAssertEqual(rules.first?["outboundTag"] as? String, "dns-out") + } + + func testNoDNSSectionWhenNoServersGiven() { + let config = tunConfig(realityServer(), dns: []) + XCTAssertNil(config["dns"]) + let outbounds = config["outbounds"] as! [[String: Any]] + XCTAssertFalse(outbounds.contains { $0["tag"] as? String == "dns-out" }) + let rules = (config["routing"] as! [String: Any])["rules"] as! [[String: Any]] + XCTAssertNotEqual(rules.first?["outboundTag"] as? String, "dns-out") + } + + // MARK: - Log & stats + + /// A NetworkExtension has no stderr the app can read, so the core must be + /// told to append to a file in the shared container instead. + func testLogGoesToFile() { + let log = tunConfig(realityServer())["log"] as! [String: Any] + XCTAssertEqual(log["error"] as? String, "/tmp/xray.log") + XCTAssertEqual(log["access"] as? String, "none") + XCTAssertEqual(log["loglevel"] as? String, "warning") + } + + func testStatsCountersEnabled() { + let config = tunConfig(realityServer()) + XCTAssertNotNil(config["stats"]) + let system = (config["policy"] as! [String: Any])["system"] as! [String: Any] + XCTAssertEqual(system["statsOutboundUplink"] as? Bool, true) + XCTAssertEqual(system["statsOutboundDownlink"] as? Bool, true) + } + + func testDesktopBuildStillHasNoStatsOrLogFile() { + let config = XrayConfigBuilder.build(for: realityServer()) + XCTAssertNil(config["stats"]) + XCTAssertNil(config["dns"]) + XCTAssertNil((config["log"] as! [String: Any])["error"]) + } + + // MARK: - Protocol support + + func testProtocolsXrayCanRunAlone() { + for proto in [ProxyProtocol.vless, .vmess, .trojan, .shadowsocks, .wireguard] { + XCTAssertTrue(ProxyConfig(name: "x", proto: proto, address: "a", port: 1).xraySupported, + "\(proto) should be supported by the Xray-only iOS build") + } + for proto in [ProxyProtocol.hysteria2, .tuic, .anytls] { + XCTAssertFalse(ProxyConfig(name: "x", proto: proto, address: "a", port: 1).xraySupported, + "\(proto) needs sing-box and cannot run on the iOS build") + } + } +} diff --git a/docs/ios.md b/docs/ios.md new file mode 100644 index 0000000..9ba23ba --- /dev/null +++ b/docs/ios.md @@ -0,0 +1,161 @@ +# Veil for iOS + +The iOS app is a real VPN, not a proxy: it uses Apple's **NetworkExtension** +(`NEPacketTunnelProvider`) so every app on the device is tunnelled — Telegram, +Safari, games, UDP, background traffic. + +It ships **one** core: Xray. No tun2socks, no sing-box, no second binary. + +## How the packet path works + +``` +apps ──► iOS routing table ──► utun (created by NetworkExtension) + │ file descriptor + ▼ + Xray-core `tun` inbound (gVisor TCP/IP stack) + │ routing rules, sniffing, DNS + ▼ + VLESS / VMess / Trojan / SS / WireGuard outbound + │ + ▼ + server +``` + +Xray-core has had a native layer-3 `tun` inbound since v26 (`proxy/tun`), with an +explicit iOS mode: if the `xray.tun.fd` environment flag is set, it adopts that +descriptor instead of opening an interface itself. That is exactly what the +tunnel provider does: + +1. `NEPacketTunnelProvider.startTunnel` applies the network settings, which is + when iOS actually materialises the utun interface. +2. It finds the interface's descriptor — there is no API for this, but the utun + socket is the only one in the process that answers + `getsockopt(SYSPROTO_CONTROL, UTUN_OPT_IFNAME)`. +3. `XrayStart(config, fd, …)` publishes the descriptor via `os.Setenv` and boots + the core. + +So the packets never leave the extension process until Xray sends them to the +server. There is no local SOCKS listener and nothing translating TUN to SOCKS. + +## Layout + +| Path | What it is | +|---|---| +| `ios/Veil.xcodeproj` | App + extension targets | +| `ios/App/` | SwiftUI app (server list, settings, routing, QR) | +| `ios/Tunnel/` | `PacketTunnelProvider` — the whole VPN | +| `ios/Shared/` | App-group paths, app↔extension IPC, config writer | +| `ios/XrayBridge/` | Go package binding Xray-core for gomobile | +| `ios/Config/` | Entitlements + the extension's `Info.plist` | +| `Sources/XrayClient/Models`, `.../Core` | **Shared with macOS**, compiled into both iOS targets | + +The parsers, config builder, subscription fetcher, routing model, store, ping +tester and localization are the *same files* the desktop app uses — platform +differences are handled with `#if os(macOS)`, so there is one source of truth +and `swift test` covers both. + +## Protocols + +Everything Xray-core can do on its own: + +| Supported | Not supported on iOS | +|---|---| +| VLESS (Reality, TLS, XTLS Vision, post-quantum encryption) | Hysteria2 | +| VMess | TUIC | +| Trojan | AnyTLS | +| Shadowsocks | | +| WireGuard (Xray's native outbound) | | + +Transports: `tcp`, `ws`, `grpc`, `http`, `xhttp`, `kcp`. + +The three unsupported ones need the sing-box core, which the iOS build +deliberately does not ship. They still appear in the server list (imported from +subscriptions) but are greyed out and cannot be connected — see +`ProxyConfig.xraySupported`. + +## Building + +```bash +# 1. Compile Xray-core for iOS (device + simulator). Takes a few minutes. +Scripts/ios/build-xraycore.sh + +# 2. Build the app +Scripts/ios/build-app.sh simulator Release +Scripts/ios/build-app.sh device Release +``` + +`build-xraycore.sh` installs `gomobile` if missing and writes +`ios/Frameworks/XrayCore.xcframework` (gitignored — it is ~110 MB and +reproducible from source). The framework is a **static** library, so it is +linked into the extension and never embedded. + +To work in Xcode, open `ios/Veil.xcodeproj` after step 1. + +## Signing and capabilities + +Running the tunnel on a real device needs a paid Apple Developer account. The +App ID for **both** the app and the extension must have: + +- **Network Extensions** → `packet-tunnel-provider` +- **App Groups** → `group.dev.local.veil` + +Bundle identifiers are `dev.local.veil` and `dev.local.veil.tunnel`. If you +change them, update `AppGroup.identifier` and +`AppGroup.tunnelBundleIdentifier` in `ios/Shared/AppGroup.swift` and both +`.entitlements` files in `ios/Config/` to match. + +The simulator builds without a team, but NetworkExtension does not run there — +the simulator has no VPN stack. Use it for UI work only. + +## App ↔ extension + +They are separate processes, so everything goes through the shared app group +container `group.dev.local.veil`: + +| File | Written by | Read by | +|---|---|---| +| `store.json` | app | app | +| `xray-config.json` | app | extension | +| `session.json` | app | extension | +| `xray.log` | Xray | app (tailed) | +| `last-error.txt` | extension | app | +| `geo/*.dat` | app | Xray | + +Live state (traffic counters, log tail, core version) is pulled with +`NETunnelProviderSession.sendProviderMessage` once a second while connected. + +**Switching servers does not reconnect the VPN.** The app writes a new config +and sends a `reload` message; the provider restarts only Xray, keeping the same +utun descriptor. iOS never sees the tunnel drop, and the switch is sub-second — +the same trick the desktop app uses with its transport. + +## Tunnel shape + +- IPv4 `198.18.0.1/24`, default route. +- IPv6 `fd6e:a81b:704f:1211::1/64`, default route — **on by default**. If the + tunnel only claimed IPv4, IPv6-capable apps would route around it and leak. + Turn it off in Settings if your server has no IPv6. +- DNS is claimed with `matchDomains = [""]`, so every query enters the tunnel. + Xray picks port-53 traffic off with a routing rule and answers it from its own + `dns` section, which resolves through the proxy. +- MTU 1500 by default (adjustable 1280–1500). +- The Go heap is capped at 48 MB with an aggressive GC. NetworkExtension + processes have a small memory budget and are killed outright when they exceed + it. + +## Reconnect behaviour + +The provider watches `NWPathMonitor`. A Wi-Fi ↔ cellular handover invalidates +Xray's sockets but not the utun, so it just restarts the core (debounced 1.5 s) +while `reasserting` is set. `wake()` does the same after the device sleeps. + +## Verifying a generated config + +The config the app writes is ordinary Xray JSON, so a desktop core can check it: + +```bash +XRAY_TUN_FD=1 ./xray run -test -config xray-config.json +``` + +Without `XRAY_TUN_FD` the desktop core tries to create the interface itself and +fails on permissions — that is expected, and unrelated to the config. diff --git a/ios/App/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/App/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..fc9e0f2 --- /dev/null +++ b/ios/App/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.906", + "green" : "0.318", + "red" : "0.408" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/App/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png b/ios/App/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f68beca7043dbe47bdfe10c2ffec9e9263bff1 GIT binary patch literal 558690 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

f`8HFjK2 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⪚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\l(z25 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�+IV->h2Kh*i<|$veM~a7GqEP+@^A4Y|6eXTzrCAN zIUzwEbchPs7mmgdsxRVofN()sdFyERFt5Q?4f%C_@u|sI(z`EI)0s1}{McV@37y+% zcyKeaJ(TUJb`{QB09i**xtvl;qm; zYHmRM_ZX@=_TaC21Xb&PHY~rSKv^Vn4!kbm8Ol zsLc8Q6;o?b<3l^a*N#Z$N7fUY`wS2~d@-bT-xKIfh&~8KV~#I;rw#zdrvfWVO+yb4 zK5O3#*+@`kKX~U_(_1QD&de9G2g3Q(vrFVgq1q5!3!mkX; ziYF60Y-$NW<+F3ZGj2E&SLFO$V4u_U6^{#9Npmgch17mr++Im8E8CSmNs~A+$ZVUW zi#!)0ly_>?qvBxKIAq%Qw3%etk1Z7pKU#SolWhbpo$v?$&|%UK6tp$JRX=y_UnnMl z9AJ7e5D?hKrVw8S*;s#OJG0BswS*hzY{91R$gEc6X(bZ2Q--acslF0!3-lBv(|Kok zs7Fm22=95!M3t!xa=1e;a~hUL z(Ng&AxE0z7k}QqjU}6SQU~RvLu5KL$7YbN?V1&%Yy{yIB8}_bxh9x~>q4g3Q!slZjtGPI#gjmTdzr*!APWccfM*DN>ftWb{c#{!CM@p z;lV+ZIejvvQG*jG`{=!E0jPi{P;GweXb~g}^%i8ImMIl;ElyWz9&(uH?iF`)>MtSd z%6C<&$u({&8rvLg3LIOa=F0?TioOAl-TtS9b`YEa^ECa58rJlY#2&g*Att^D+LvBR zk2EpIg^p>YCRc{OB;)l4B@^!Uj^mjqmcB!t_acRWI~gfUhjYqA9HSLs>pURp-WSyU zNm)fUM@G_CylcuF?muNt3MwZ<(q2eDhw_e07+PG=7T=kgNqZ}?wsaP@PC+%%=9qup8!LXm0{%<)PxgBM)Cs-vq!0uq8=*2{CN1_&_F5tS6sKlhkB=0YX57BD7_B4(iaMf zu|F3S^sY-`>jpm@q;dO=1R$dStX9v4xwZFI`*;a48#9d4u*NRb+uZuOGi;f`PgiJ# z#fCb1|G>-j~`{c2G1=%R9JE{P|P5CcV~Nb z!YZXZ7l%qeRs@-ZPzXZ$lIQsLqs>SU{CHaz!t~N1^CijtOcYtK`@*)-&vu@sJ%#q^ z5K-D;63A~bRvLh4dr*3W%GVtbyYctnpO$3ScbRlA{w|&Ei@uKGh3U!00NE%`zh}rZ z^_b`j50QmZ$fadX=Y?J{Ofnssj9k!(e&jW-=~mq75;r*>ee(a&be_?0z2V;0Nkj>W z-UZ2@=)KHH1QCKn65U{w=)E(e1Q9JF(HSCIg3&vpgwaKa-g_Bk)G?+U=e+CvvOnx^ zd#z{h{XF-5{jR%$@n6O9kjv8qe!#dJ;oR14S50bYdGlVsz}sHr>?6wF8UE)}z!2@nWbBgjxsV4AV<63F zA2_eXHqxt$HZCs)wAyoD$o?!WQNmF@$M*?`f#1MHWVZrrt#wAb<^@3SwxWrD2cR1l zn02S4F0tgL7 zENv2({Z(PX5O%lguAksiHq{aPGdbk&lQ&^cazX>eV;3z1wNrBkBwA97 zPkkxqUGBu*D%Z85Vw2^fydxWQOMOLH9cH@#{{<9JrQK=xdm|2i^feWuXKf?rjvu}? zyEB-rI!0lx{rAjD0+|Cf7J#5!L9ex*n^#VxPLkgKBsw6jowvP7i-ZAG&Tu`2_)ehSPqJd`kV4e)^r&1!X zMxF`gUBSz8@*|N9uGwuGKdqkb#|HH|;z`Jqc#Vb+YSawy$Ly}7hHcU}lT8{jUu@xb zSfS?ukhx{0y9^C=#ur_qZ)Wk1&=puHHWui8bWlq+>Q{KbTB6_7|0Lt)UvE(Cpt3!P z(KC4uFSI_f29GEE)fQCq%+ambWR82pi~U)p-{cbM+z8CdT7Azkq?1?rJnAJ`p8IKl za=4wja$k}0QI=ctTsf}wn0>-*zQ620S)uuE30Ksk-cLsv{yF5OQ_J5U7VTSTx*iUc z<@g_xbS~{7_6g8|0jK7V#K;;iN|Wazk9w0V`$UQS@*~#rm-mM*4D-B%w+zb!cLPrqHYK&x{al-Sh}vY_Gxm8S?w0$pb~@D~3F5$n}hQ3|f2J!bEWV zoA$3s5M~QR9XTEza3Q29cOL3R2wivobes{WcuGsjHzI6QgcgYb$x4Q&fbHI(X5^Re zgPm)DNmXd4;;}27ff^*$>JFw&0#~=*E77s9P_uIBD%=Td*VQ8WF3@@X-=cj-c^Lcy z2s`W=#1-22+!?*-Vo)sv=3pz=LlAgwBoIq|l!;j5O;{e;R+>z`u?vp+lyVyEIlC;R zD7f4yQ5$QGYS;C!L=#9l7G`ZWH2&+qQ7?^sc`0rum9d1$ejTj%U9iiJmL=1JT)O2C zWt0+Nt2)a1mmJ}>VzSSJTgb;rB&-e$@^>6OY_iAxS_Ul@A&f*2sLE}N3$cb{(SLJB z0p7Q76ZYQ?_gaWRLv%*vy1t!SS6&_RC=9h${9Dp4+qgkKp}ICUx)lTh))G7ISlH|` z=Tc-C@beHG7kcS3YL2-^Rc7Pf;Scrl;F);NqPJ1z316iQHWoWzxo6S{pj!M#DHYzp2{FT|I$&8_e@U&LBxpW z1;3_*UgaI$%s?Lz_+xt5^0_7B+*;LmtXW;FQSyQ_%ao$ELg|h1U{duFrM|N3ZPkaD zXIrEVo#4fj0I_8I^{y%f3FlpwT}w74l35m?N0ollV9$6nrmLe7`8PC&RO^A;s(7{z z8Ax%Rt!qYs?ByY%>ekK|vGQ8Q^-<53U@K>}qO2EnBLh1(&gdyK!p} z#lCv8^%&7DKA$$v!`tkmi)Vrw!Rn(E9KfT}Ynq(e9uHY#!l*vj4JUJn3%6D9h}`?q zyB$PRm^Vg(xn<57I<%E!%{MN~wUC)=MI)lLK` zU=KQ>vtN@f*OvpZt8iX27$cbMJpOJJ#JQ)7idvOtqMf)6>C#OCUG5nG0Y?h$k`h#k z6gKYvClBJux{Z0XmgG7PgO4^K5bYAN-upRVUO_Qjtmb)r@bHQ(F6Ml;N7<<5_l1!w|Q5y~R(4LP!pY>sHrW z<|o5~t4Gsvnzc!@E&5t5GE^Z~ldtnBZ(Y3*!@L>#8db#RNXhONdUDZJ-`4%KW1iWS zDNX47je+Of3;h}qyG^~~mOjLW6TuIaGr-qkc6frEa`{SO1#T5Vn7n2Hxd=Vf(N8ou z#ABCTLjNB7eZ_gJeamoI_8kpsT2I5!{|OUVPzI>iGL7rR7^A%Y96#9xc=d7F=xU*m% zA-!c+Z$IwypAS>3A#z@_aGS!oFFZ%ngTHN`6u#3xfm;C=1eX`)id6cU>b>v$Yn~Lf z5fmBi8GD|b%!x>_#AzvBI0SE&W?je8Ii+j#Y7%U_S7 zgfi@f=Fm=4qGwIp#c)W`mNFbxZubfD>)6iYUkYH?WlC28Zm z#Lv<8yzM`SP>1O6E}Tybvc6i5$?cvyS{`>S34HLtoL*;Tz$UV#O^w(@B;q7DK`g?o z+c(VR3={Z-)cOb&%2LfLBoVpP8fu=N zyBT&Z`cG4+?8V#v82KntZrqRaQi|+xxk(eASx$-%xl0U`V-j%Gy90uYIBIr5r=o4& zI}cLW^cj1k`}rO)@{ux;S?*gEwLpR(W2XS08$pi}XxE`D1raoA>N9$I(l&No**vx6 zaxi40_Ck?Y^y7QGyx&XqHMvp406s-T0R96e07w|#4S?=vo@SF0)fLE>#wY5c$Vql& z1p~aNmhGZ(4se-|*QwX{n?Mmz?fXr;im2*lUIa1eVQ8|=7&`*@T^tKN-JK8#9w%bc zGDo9BTM5C|Uk0~dNu6Yx7-lkT6^|*UAxU@d#7QBldx1c*eW;gLG240SmC1$-){8zy z2*UTbw*#mFl!q*guZOQ`=9yeaBbaWJ&#q~TnJtrAKPIF(*J5P2Kyf|G?t}F_cd$8X~aqf zU-w}O?E&{9#Sl|Kxz2P@xh*1acFG-{d+>Al&ohh6SA(tX_!@o(w{#OlUE%N(X$F#i z?@F;o2e<8Or-@aSPb6#nBqL|;(8gwD1*>-Y4nOAnc!J~wDI~5Yi&=(Txsx>9#15dd z`_#{-SJmA=Tp*Ua+;*>rPa2NxMQ|PdeZa^nhTH!6d7UBKeB(Ul0#z(US#Bl{{B zea~`Fy(j5c3g*)%*$zn@^2Cex*)lhbIalQy_w;5zy!wXC@?6Wx8|I@%D^kAF-8>7D zU97$r&`e&jq#$;Nsp`NmaQkCVHAYpfvP2f}QPA(_{MPN{>hjogIT&Cgq+9=)ze!c@_-SL7q;8jY zj>tm^M%f4Yi(~8}OC9tatj~C|uXAZ;Lg?-dM|5|NE0CT0ATn(B+ne9RNi#y`F&c!G zg*IE15GjKzqmvQgnSj+EtbST9K^NsIO~NRpEekob$*J!N^-6hbA<*;7XThz6?+iCS zy2o0m5fefBap1TVL85o-Z|Wm!zmH;FLK^zN!t;PxarUKB@4s=g)T~ZRRZqkFI5J(D zGwj{$?4WM_DQWAT-d()St6x|rz7A_*Dyx_eaq)@fz~A>$N5h1(lRtNjaL~#DsR5|KPy*F45@R(dQjgO8uLY{FI9zaX8p zJB0>G7!z4K6GVHSD{tS8jBU4+N*MW5uU2s7VuG_w&vG%#9$CB?rR68=s`j@i(w59Y_{!R7VuO`>%L{3=C?-Dz#924$^YY6XZXb@8hU!? zux}q|y?GwGOc+03sxw6&d{11vew@}e_;k3jLW1VmVE~1q5^8*`2(QX?itT{)>mY+` z{84cp0+>wj(#f(%64f|eB`*G^_u{%(XaiDLmb-XKW;X+7PQ04GF<^`r^dp*%ER zY5k?1+&2V1YSq9)LN4{Ze&bJAK^Kl#;1#^X3%lT$H?a*@jN%dqE2J3<53wl z^VSMHeomd_K~w6OFnZ}6_BwX#SRh=u;T295uCp+Ma85-^hGJwZO*1vx`P<_J2Iaa0{O z#s?+nCo<2IT#QBiC$)~q8_Q5^`fyva$vw*fzINZ~I_p9F+)$STZ5Pgx@zc}nHH@t+ zS?do7y`p?v80O)LbI35p8 z&7+gIji)KZp8<5tA0I@$JbD))O!Z8$tHQBuHeu>;vB_|K5isV3!@`XK1_1 zw#jW@$jw))@~6QbHlZZ_4e67`AFzv+P86bU@jQtFmq?OfL9das( z)Az%_+aMC*OieFtGq7wwXiaY1;c@SG{8vXqJErJ?gHM4fQzz=r zsjsQNG!=Y5Sbu(FA(x(CEL-0VI0_4GCK;R!&$ik8$hTWx%zs>$)qwaaB_Y)3=19m| zu(;7-f~x2`b7Iv04ecx2#^Y<|sFb@uJ>FdfAQw%%xhj8eo#O9~I1*ky0Gv9J+z=v! z(shc}lk$ZB?*bSvWCSCn9>8W{Smo-u7jd?LYlBdTZFW44PhT&ShZXhyyO0uOfz1Pb z7k(txROQ2`y80{|qNell&05E%4OW%*<5Y%!<@qiWa`LKObVaQMaR~zkVgHN)(u}`o zh16%y7~eO3VDg&N47uDAfIIX!GG2jDCav%IPkncs$fNs0so)B{+}$=nT%t=1EY67k zU@HtWm@D0z^m68WtmRt}obYA)0}KYrWBQ4@}DQ4+iH#oH3P zJnV`DufRm#r+vQ_C?>ZHZB2gveIqwi_$0qZ;s^8 zMECA-HDX3AovEr?ejQnth&-J&=ipx7^FVR_uuH5+)EUsN=7yjy&}&lNTU?PW9QktE zWEmPxJBB^=Iq=j~f6Lm6PNvJ9>P7ntZi3^w8#U%?nlW*=3rJbD-7D-`^7LfEUO-^nE%Zc3&(z8uo8>2cT2?sV&0C>%Otw3Q!+DL>!wrwZO`rKS5IiA z3+bw6;V`V@si63RJV7VS$m+Xud9qW_-ri4oe$qiv70>0UDbE_B+qM<2?UkHY)%iC# z-_d{A967kizPvRseLa0A zdwHYbFm&sPob1tEbmo<&Z%SHk!V|0I3%J*^SIx%E-DTFU9xWr#Gu>}k{#Zx7kSJ>+ znfe+!RSOPO&iOF}B~cd@MWRgbGbV?8)o4kcr6lTHDQ>ulwEyEj>=LY(@e}TjSxX;> z7APcV`@?C*1d09nB>@0J!^HBH0Zb8(B+jPp!BpE%Efw0EU4%f>jVR8=Gy6rtW9}o) z1$ZYy`~FH(Q+tK>`4aDJ8wTf6vOJxB=`~I)gW}J2i?$Vk2aZ%~X0DXSqFFUNy>wyv zT=f$chiS~hB4@i&y?}7!I%8oy6-Gm$V|a0Oc~LAGy$_h-bgQQMm9CPdo0e3 zY!f>Zy~wF-mLhTBk@(Q7i~IeE1YgHJUH^HZzs=lc^yc}RaGh!WF;e@Ygw{5xn+ZbE zy-!1x+?xjN*JLv#uJuWV1IzqFCY}G)Bff-_nUqkpz&UuX>|NY?T-Jsdul@xOv__OT zE(;5w;Ox@`>EmH;$7NF1b=}LMpo@wh@AMuwdYvdo1}t^RCHGnp!?+$-rH`C5n>-zK zDX~>LrH9OqU!`d|SU$nws|laDq|by@nBbudP09`MZ{lR=5yRtgx%P z(PrR&Z>icY_iw;!`6ZjVRLhN_KIzw+8yxthMjC+5@`lIdFM`;gTOJt+$ zfu5m^c8N-{;fc9jvhNZ|d~-TNhnD3t-2GgyYq=^3b=lU-3fy@{C zzaC+QX7F2tn>-$P-u6Kda;o=E;`|Bhs%E@1Ba6H%8j}F@S^yiNe(6^UAxQPNbw(U3) zxcCAi3|gZO_po4$&q^5fvWpAui?b8esT#qOd(enM?fx+fupT{8Pf9qVdOn$uny<)U zU=EJw7`oT*qpRguIu$mHq*aOZ^4ThZ97-+U!L+vU9}^fl$ak#|EK!0wD9ezECaZ($ z>#25+r|l95P{jPJ2p*klEP{JDAWbQCctGcq!+p-tCm`H{ZixYYYNBIj`#y9zwXJGs z{!oc{H7w(q6ZJuX-xVD7d#Abo{4_{h>T%-$=K4oXqP>g75V{Mzra0sIaT1Opk4-fA zmUXsH`eE|}>^Q3vdR#rC+3|a3cqB%H#e9A@uC!XD!$X=;rV}7>AxQDz0pA5rHhXst zFn5T<97Shx5oeUBV2VLv$imH5r+EsKD9v1dhscDXCM!9qzaXD^)xK3fx;vwEt-=8j^t21bi;!zLhg{jI_frQ@W4b zvPYJM1S9=Jo1>2Chate#;M#dh#9;;$h?_eg&IfctdADk>@(fe ztc>lCVMdEJhhT?+#2F)C?3kPLqF`g(>8>#Zok@J@fxwp_yA_wclq5|anlhsJ#M(Zx z`NdY|on2DqQrbxPABzDbg!PP5lUZpa#Xc0m$6ua|$IhJ-`1uyux}yBKH~O>8@7Vtr zwEqW}t{?SefiHE!Jr&Ilq?I7C{nLF?I`H-Ji?bQ&d6LS(AJ0l1+D80S>Mx34a=ZTp z^=ky*8f#O?-7KibG&U#(EOdlp>Mfg&?5lKcRER^+dyW}j>It>vErKns`#egu!m|Y7 z+0`o+!H-1;pTC_qq1`PvkdEGwIn$A6v-sCL)8{$dAf+0JY$qJcTzd38V@Y*mWr@I5 zX07eux#h?@VZv8iTDAPWG99ZiU4YmDAUxygomk@298F=H{vKGg&JwuwQDt(FKa&;sG=D z*#O82B{?D|M6mWv%X%*Tc($=Ys5iZN8~jANSZ=&_aXw{Td=bg`r|pSy2Wr12P^W4> zpISruM2!cW*5oW^%*i^Y(oqSI^0N1IkddlJ_k8=Bj?Y90dx}BlZL0>#RrLNW71lFO zXIkut7hgOy6;7r7e$3vLm1NsgJeBeo%Q3^NN_r^TKgO?B^VC&7wtRK-$d+BNspe0P zi5q0pFq<}9hMWFnxgFi>k|%BHl`2~~5nMwLuOfHkL)keSq91|ond@(wXYEvOc$BMV ze`lJkyN@=R>1+O@GcFd$xQ11|E2^sV!g?!mB~Wfa$84n&)RSjIq8ap&my zk?T~C7%xkl1eLM@0?tieRX4lqT?V8@dg$`BL4;>6TvDn6-&;QCp^n zG2s=w;uqJH;q8Rci6`0p*}tU5YsVUbJ}1qnA4!MLkE5?$VTkMdf%~_8i@?qB z>7lEl!-^DQu_-DuPaocn-P)~1T%vYmV1XBBy9TO-#yHR$QoD7~sEm)*v6A+Gu)?mD zWS>-s>c3{KUbJRI@O1?LX3&TvPnaBd`%%;SvhiZvDwRZi4)IgG7z;iWffo{w9Y&7Y zQBhmOY*18TPj1xJG6Wx%zCn3KLt3z|7G1C)-?rT>8s;in1_xVbzi$fmRSMwtJM;h_ za_D~EmM;_}*f@yiWvjbH8l~)T`q}-9kOA9f6xrQ5ok@RjmOcwLw2GIQ8Dz|!lH#HGo{ijp@%jWLXUp1=aB{wc7QjC} z^I5SycB>;bIcG+^wtQF?`0eW0LMeXnP55++|`nXmBOK$EI zjGooEKA*!$1BHC3d`};UKT%m=_^jbizkEbp1z|eQ|mb=R{+T3lgc3)hMD5@KY2kGn0s|q{NZXJ`f!Kk*kG5I;>tJ*czVeL z4BG()qs~^MrWYA$^coWDhC0r@n%B{b{9*f2N9KfU%ZOTyCq+A5edn|R)cN%C zWaAkSitRA~gkXD?gY?%~_2K)%>gA(uN>>+Lna=i9OeONrT7-c$$9(-mPWql^!;z5> zg>wMMBw)tXLsG%-bTMNtJKaJ{y}X&l&oTS#tuxgq`SyYC*9(JGmFL}|4_elI(BRuI!HhntT$d(*c z++&yi@_cl3y8mVsS!`fD@TF^T^;vE7QJ~VQ2+2_rnH!0!a0_HBG=bczC*+*E6h>71 z(~gqx)i``Xpe|?TlbC)JGxJv!_RMHm(VmNQT|Y_X2i{FuiPPg((Ux|OhI_hO?KVov z>Q)Q+d$CnHijI0LNZFkt3-N5ag4g_~Vdb)WJei67n!}*cN-g$DE8%Q}!C*eMIH7N} z7R%@R0aIb|m^-m2Id}azWIKX*B1jxd}3Y}Cw^`y*e~1I>G(LhQL1`= zD)sEyXr-L@*@-O_d>u}JpZ@VWHuC~^!c)ET_Ig8z8R4AFjaWZQ7V0n7j0)$-+>Ou@lz9~(d3@?R+1;2;ML(v( zXd%Pcnf^6^`*R^=DKOEP6b1~t2!N$t9PXxQFKO4QWMqB+PnGa5fh82aVs>GO*l|eRNM;GN1gE>)zAAe8>(%_I2WYvx2bZXDm`6a> zHm?w)mLZ2{BCwmwo=VA0s`Yy<70b85wT$E)_(6Vj zf*`?I?9Tjo`NIN}jNkdIv;4WH{`}qtbXOz#HSwt!y)-@X{qPWpmW9-4f~23=c|+pS z+`Cxy;Oyrt`dw-mZo_Y@?>?G1x@S5&s&a0kdm*g_eZ42{ZtX7Q9bKgZL2joed0{W! z?A5uxaHg4Kfuhcs(Ngp-8`{>V)kX53)&DG!d<(J-ySTr<-Kn(AP#q=1a08Lwl;R6q zZhr+#sVJDUwwgS7ZndoxlX)ipO@GF+m0KcouLLoOF5=Q<@W9>u*_>u|9cK_$F1T9h z!c8N2 zEU{Kz&Zntl&hPL-~+W%??&I&J^y{C_&TafK|jX1TY?mPx5kp|`hPeK~h!tcad zUoB76=Xjl%a1)##pMTxfYw!gt9LA1qA!_$C^0Z2as@HW*n&~b_{PcIU5AmH`;RDfS z=Jp47t=Nx9*ZkoJZv(D$n}&u)qEAz?NkVv` z*od?K)C^JI4J-nW?QSgQlYsti`OxnbV`qXJtl~Hk3i~6@m-68Ch~S&Vr;nnd2q1eU z<^fp4P3g_@(!0N4?V$teBt$bNoj&`kwjk$E(9;-nqfm9fIl%*Z_5>f_6_86v1N?V9 z0lh>|P(!yYOSE~=Va7;hc}k6LOvrr4{b$<>HXa;M57R~MYslM9-FIE$#-^Jp$#Zqf zen7?bUzv!LLCzB3KT#YE-@dI6Ezb^yO|xExoo*`lKHQE}X-1B*cKHkoj!n!0qSo$p z1&x)ECI(NSKeFrIIexePp~NSqL~+!7TPOq>1*T*vD0x;+(=XfR1jVlEY6pf+sqY|^-hAZ(^K-*w_(7XXVzIO`J}m8kn|z) zmh(K@{F2D3I2wfX_&H$CGMCYu2Pt!qP{z<>oNcZun_#S)R<2McJPZJuilI#C8okk!?GZp|;b6sVPfn3N4T@|wSc2IKASvir3iY+)QEE!cV< z^*=c$eM=%BL}CLTvTlCEOVIJO%Sd#i&%#`VGel0NDCP9kyI{oKQ`IFj_o*eeKUJFr zHYSOl9RoK!1%96L4EF#bNrHudCh|2CsRUwz2=4ZKS6|kb1x(CGi|^Nu%#5`SQhAth z>~#+8uzgmK`NuD$m9xAYob_4P)j}Ux*X-@<_$Xnw0;a&ULG{=hm|W-q198f(u~zJm z!y)Y1lx=VX3;Ab1qJM2=tUARg6J9W2vBrYn59f zguPp1qQ;YPW5p-Dcb&iOe3FSc*tb9j&F|iCx5Z>GPi=oVPqSG&L5IU|49jIl^nt_6 zyqy6wZTr=+EO}I{;4Mkap_xz1v)Pm*IsLr!rLykBfPZTp8`rNQ!fuGUuqC_(h&#t0 z@3*cydk9**6l^>ar_vk3aqUKLTdCmDC3!0Naf@T(6>qy|@Veh9yVB9>?&(+BQlBge zO`r0%y@+Sbu~PC;9#$ON>$e{E18~!g#CXmtHl+EDQB2v|*?W>yEhctYxe6(AKYe6H z*(GsE`r?&fkJypjgu0uWcnHccO~F8=zdDCWTbLR8hzmy77Yo42NsuVdQ$=cnwHj17 zOFH~(hpHR;EMMOX!d1E2vUz<{7RXHGChJw%(bnHlm7#%}OMc}lRUM5lflMX-cnPV1 z(kL%=_jzjaF08ght~O#M$b@Qe_m|pQ0J62CkG_DfoT^Tbei4hM&OeS}I4OM@zri8z z@a`+gBDhxfISIsgG<9DTh?i8Bh2IP+nF2tXkAJq+@Gx$IP@`UDiHjr1r(o`XuT@X80@oZk z6#X7VFeuFr_^cz4K9N1ZS?YoL`@-y#EX0VHzXijXOoGx!*6j9Ozg*MYDV9S2Flp0x zUj1O+dtoq)UA)1laWUz6(xc(QY;vEz4=PkL+QsiaC4gDu@LEne?2UIuYTNPL@R)8Z zgYrM_ZjBl!>%D+x`>5!+m=OlnoV_W+e?&AjE3~z2>yB(A>>gMSb87eEY2`~}3(i^a ztkgch&JL%}nW}5f@#}Vu#k2ixD``NmdTU{0eS>|N;%CjaPtW!pue*-Tx57@tjXQK) zJDSFxH7mkZQK6v2AQL`i7UMm+r;DE2{?fl z>U5RdL3{-bARz{S4xnu#k{=C=f|EL_1b&P1+tqpYV^rp?1Xzm3ISTNj6tm*U^ecBG zc0B&#;BEeOv0PtkjezCeMUdN0D~RogE&ZaE-rUSSJ**CD)L=iIplm=DYPTl=Ag=BD zz#vaNHm84GV{wFZL@89s?KEeX zd>GQFT;MBPKJioe$ucV9X5L#sb<3BWBLMHq zdf1fS`F)vnATRCopPRH2*6^TO<#A_nV(ie?4~y+_*Z8r*6`@k2`h(g3M8-XF(vhdD z`Y0JQN+ri&4fZghteOe)4br>)$TJqNZml+wlpv^rlD|2`hB{DZu$_G4joO;B`mP$o z(4h>Pk>R%3uD~3mCS=SM6YNW`>{1Kmo8GH6GS?0wp~W#d)iCWzEBvO#oyDYW&a6S> z*q9LJJ|HEZ;hOx%kXbYL()gFC1NRP&TM~y8^J*-Ltbf&4y5~~|CRo^b?mx$`$EyZq zO|e^}?nNw{g2Sg_lKB^|Iu@8e-LwFiBXuL(dEILXt>saF7Y~vhpE|_V)}lgNz*N$N z6?ob1uANksd1$zcwqHb`v6S|9Vs6_^MlH==YBXb6#U`ui_4oIAjEtUQf~XKDf0!NF<+2?Z*)o$D5fNV!>w4|HZhtmo3Z!tF^m-_%zKd)l}LixQMWe zbOnkvmwagu(k^^=kNFYqw-?#{f$OPT4*+@h`doChOjBvDn+c5d(1ftnCb*#DmdV#_ zmhm-N9D3xfT!F9DVav{s^1S#!n)R^>Ee>RC9gO8Kg+O0ELJwi%jISFs`9%o4E$dkCXG7;akz-703@a@c&_j?*y zXS}DE@ax+$nI_TiK(EFH@!kJ?`2$e(=#Deo=uDtmG`WuzHSEY|u_^D{xuJcm zoe*cA+1$s=nr??WpfyN2S274*&aZ%yc*~?pIhmw|s{6UoaaqO;3~$EI4=x_gH9eS! z(l9^&O~Y586EBw;BzcVyjCvJqyd@s9ks@c}`|axKTLH7?A0JONiV<@S9cin4y?)8W z{<24qJ}&d4fSiAyZk+hMlwSKV9)WM@Ch{_Dh?@=Kwq%11pl^mDEy}LePRPu1dxF_p z$fpa||Lno5h?cZb<|`D`?1@3C6bZn6q|}}uB6{-?EZBr zu-Ig#X2HoXUYjwtIPFTytG8L#t=qh&vZW;b!w5Ve;qy=RyUSi987k25%bGw5ZG2+} znck!mN8S_p%E_U>4}@mi(oedf)^sxR+1H=!!}yXFnSJ=)1#BU10MmxUyY~YdTPbF? z*K2R~{Huug(f+(gmHHh*0bV-z*vVsqSh3dD>-R^qyg@=d*_b1Uz3f9%7fPp4ocBR9yY(^cJ}v$4 zxFYR>2r=XdJCu{Y!x1`(;d`U31x8;uPc7y2r0DJ&tQt94v6JV1oJ#Pa0ab zLhb7ljtEd2)uvwhd0^sUf4#UHH+eQ66}ZS|I$s3Zyzx4u6K|%IH>a(?ls;Qjsc%MA zm$~u^y3D)O4gEsk@%EIXGHVq$C^q&c%zacV;f%xWX2KC1g1M?#Oo%Go+n0EP&#L!L zX?~1yCyean2VtN4&+tgBeCn15r9}+&Eot9m+l2X?LxRxYt}BhhE0OkE7o~>ml2O^I7Xk z-H-!^y+c1m%{hG501M>m@nYYyDB6rnNF2ULOVV2V#N3^I|&Mj;lDmhgi&4Wr5AJChar z?guI)rFB-h*K`N<3<2A<9v8jgiLA2?>YuBO!W_EQD+tDJjsfcutzr}6_X{>1uLsbk^W9cU`Q7#@9^dBp(Q8QVe16{cL z*+q6agTr!NXSuxYHam37Y%s#aTljfYo=^ERRNSxV{e0ftl0sL!)zw1U?p26NRT?FE z&jk|9dw6j_q*XK@q*O(xY&pDF;-U)Acd2AkbElGq`!YZSRJ#t+u|oWUcM+@@2La1N zcLpczNj64uDgAw^FCtB;*>CdpyE*gPnE4=2w-2Zxk-2vsGHvp^OH8izx3XrKuiM@> z8XIyW2Yoq1^7X}Rqi%0*A4lmV#(havpot6n!JFmM`^%wHpZEI7X!ihm3IS zAYgY>iANJ91_bC>{|8n5l9HwC{ucIQW~@~N3|AJA#{*qE$tCL&yBKG_44MDcd43OHuy0eWY~S5cMCN-f%!($FTDjWGcKkJ$b=|DR#m36{@C@n* zqv`UWTPG?o<4txR`zZchK^kn=*WX#SSb%d<^>2XhE2{`Q{UUkmv&6*6%DMc&kT)A+ z+Bo}NG{yTT5dTxi-+2gVrF1N>An+u7Ah{~XU^(sB=|sT-<_Dxw=Mndgs)DmKDbT{@axIO2$66 zZ<5niGR(&2U5OsvCl2n!BEU-C^1p<^6U`(1sQmV08nIO2JQzT+ z$T_e3zxK(7=(Y9-MFIRObQ(vhN4@nAFaK@ig3MJ>Ihu}8mL8gU#|SR57Ih9@HH1G{ zGTu4DT!~<5swbz9L8ssN7Zv?p9n#MIhi(iZTdNn4e8E#~!f{I!v2mnPQiq1~^Dw)R zar6)(rdhz6UA*k|iO=yE<5(-Yi;NivE~TWvjWb_=SCoU~$bgZ0a)~r)xAYEw^P<}i z^h|+E)~Lowdm~(44rX}26?BoknAxRg_C-y;^IRl(j|*;r<|QjbNH5daBgpGCH4$5K zTFIY-rg;ShD4K@H=`HNgjjpci+z;WeaO5&~rGd5u4<@<5;o}ds1hPe7cn^}a(`RyB zYW5THyEe@42d-G55OZS92L$flXw3<;=F~%!2*ktC^FEy>kyD*)Z2oLShV|y_tn*iF zY>wfLsZEgxs@u!5s-D3^t4R2_qwGr`A_h#-8Oe}R-MN&oh{bK2c_797%3^M+vLkl_Br<>A=(sRgkI3RaD!$qS zwV`P761V}{5(ykyw?rcJuy?{I*aa%uh5qfueUuZgNTq6gv_2-2R2?{ets295W3h*w zYOM32rLIgY9;y<`@c5~Ve+M>l=KH7`=Cb3d97*mH$5na|N48SgW&5gO|j-%=b0$EG~( ze?J?^m9(VW*K!7Dm%ju)m15E5Ny?=PG=M%;V$1Q*ZNL4e!*KXgI6o&@t{=Xi`b^@a z-fd68RC&7m(SLkVPJQ>vYL79~`BQxx)uhW9nPD(lRQv)oYP$eZ z2X7oD)94&1djV-KtAcC~QCe<=;%z4$$u)!-iAx!e4PpMWa@Pz%a(bEIiI}UQQTz}W zYZ&6chauNAA($4PmDBW>0>=DGKidhnoMUa`Bp%l!WY2!Q<;pjbIwyrBJ$FdO)sB@f zh31@gvd2r!n9GEXh=SVf&XJ+u=Du@FWgBGdxqw3t<#1B=e5NZ&ep&%;`<8+3re7o} zbRy^aw~6H!p}lggY{q%|x# z`5e*QDUxJ0k`9}$QLFkb4?l6tslelv0`E}qdV8<3y}+Z>UAHibRrbf6cuYQ3r`~E; z>ZZD~ah(#NdUY%Oj7x%qmb`9G@T9kyJc%?|LB0Br`H!8e(ME^oySFCW&duXq3nt-> z2+l5pts(jnWtJ%Cn&kMOkXJL6QJZBF@}nuFG5c|$ zTW@+9D;w>6eAZ??+Wdnrb{!31*x$8GTg9D%$*P`MG(+3^**fpvWoSNvVb9?7G=Nr? z1IHG-EwyC-8k%fgNZy*v>5y)TEXUTsLDzdKCEEU}c=rG}+OH}7VtV$?6yfhSwNHoR zJUW*dz6aek04ax|PbG3Yen{+H#{#5|An~s_*-U3(xj5s_MiSxK-FEQ>D2T#Fu4+IgaMH=Fk9|-j zE7y!#VyTVgGNeyj`QxaDEKSIzj}=%3IIq7{YKh^IY%oLY`fPLbdrPQnkssW|I^<$5 zjK!e&w75WPobfB`>D7TRj%8jBPukKYTHXjYg3l2`K#3Y?R)YYn*t_ z5t;ZWe%7GZ;_wH!kH?D)K5CBM@?oc+KK>ufunaDvv$l#l(v81!liv9*dF;GYP&EII zKaq%+`e$93zvQ?iPjC$2-C}b@<3}IH6Q5bR$SM&c!>e=LZKojgt?ya=VszAW0T2@` zV#=Q+g<&Chjv@mmkcgILhyok^jKiU$OV_9uGca+DtQ% zuyG@h|1~mnJ1>F+ulrX9Eo2l&pqu1i>L>es{OhY}+Zo>q+izr77%()kpT^BE$Dg7} z(Oh7V<8il(F8~|7#(7o!ioYX;5HTja1;-dUGqAHBJd=Ho4=dS#0ePAM;@9&>5 z@`twvm}>xOb7IU;QhHzbkD95KvBl5zs!U?${s_a^Cb#S_!v)laMwz)U=v5?V8HEv? zmuymR6hxi5F66tP`q2Og_{NG9jSWWEOKuhfdTq;T1mL$8U?fMB$g@S(W_vJ7Mm08H z3?%nHK)2$It-8mbcuUek z-@~d5%jP;+b@%&kw*swh_y6U(ILCYO`PWW=`DePg|Ff6$jr_XU*M&ac%>Tl(uZ>~w zawJOR^)K1Jel_mY=OOLktZ^W?ICjWoa#=q0O>dWW>`(1Hn{ zv$g|Vjxof(U<{nl$kA6fc2!sId2K8Vfzqg|VQ!KWilVG_V1Y#|r#(NfYbqqb))KN^ zKP{Slz`7u?{3i}wj*2qe6xR*UfX84bSf5?Cm3NW8wxGv;Ts$XF%qeq@EYivvu~4ec zo5h|J`(nw5f9=bs>;IrXHAS!igcm#^w()5`N1#My-dccTF#2W4M6L78VpkcD`I9eL zw4)%~{6H~J*(Cgt%g(>!z;S*USP9VCTL2zk=4(E~1v-i35qNw3_goq?^_JC2$4v2m z`Xe8G@+tKPIDogP-R^e)sPJ!|p8lv#{Qo37i^bCg!2RdDvbE4fv(Ai(!ZZY{+_N#|7{K3o33rX_s(vj{#{P@nA?H9G zECD+|@E3+8nz&5J94ENQy6{o$V|*+FvHq0}e|7P}03CQ^V`nzfjmn}mZh#bXnR@{6 z-j$Jk#Zm&l6xFIx>P!;kUw zj91gx^|Qf}E?aZK50$~xGhxi%jI-7?r`0aA5wK3u>dtJ9OG-w*Xx^~BH>GbKvt|cN z0Lg3g5lhy!EdgWw*p8UIVg$Zz==F!5P7O|Mc=GCR{Flc57BgC`J&ry8Lt28yr?%lQ zXA7)M@vV2Rlao@VHh1_w0`rgD zTk0W=E$q*nCUp3EWPvtd(18|B+?%s>ekXvqP-y){k6iY+xW)guXI?)&_sM5ZfB0{o zlaBmpcTSJJ`@z$X>1M!>{>0l)Kl*-d3_Pmwqo=2S+g^E3Ups0+sC_2b&;{Rzy4R>JpI)dUiQWQUwz@F)0aK|=IQxo=ZpDlI(x!P zC6~`@*+|AK`hCUQ5&Y`+#6aKmr*SS^=U8FgTc;zDZd_?45lW2oWPE;e(X<7oG!>*))dZ_?PEA+2YPgDx&y#|5=dm6B0l&`waF0zn8*6f@%=r&<{F={s+}1A$i5Z#wBX+Jn z{!HKy=DC1`;tXxqa`+#084@lSCSQ$oNmF z|?w9hkyN(AD-YjL5V_2^N&hC46(U=?UvsF zP{Hrs{Z;Lof0D(X9n>Yrj`B{H7?~I6$QW1eove92Gs~{e60r{<^p~-=_ zWGzVEC#zi>08D&h;^Qccr)9AwQX*=*=^ZyH_BiZ^9}5?5`so5+y0{C?; zPiY*jW9Kgu(^u~#9B=$<7)>fN{3pB(o8fu=aT0^EKMb)}TTaJ#+xW4n>qR}S_;v5hHJTgMiS92x$V-83ekZHhmAa@YPo z&bR^`@Cn=)i-!hTAtO;xpP-pujJ>bmh;CqwrwLPs!iO1lB!KS9cmSl1F81XQkR*xY zF_@qpb|t_QJH~4tDyGi~m7!L%9$Wny%YITIazYs&uZka-Hf=4yvwfa@=7}YVAokP9 zG9AOnRyb}B_(lTRr1E#?3;*s)=L=driT5!fSZYd0H^u_W_aTh`c7YKiE{Jov;PPvh zw;A&aySMileg4@uPS5}DbEnVhFU{VkM;>{bzfa)3 z?|=L0N8b17=||N6@cT6W@kjOD1N)Z`E_QNf9RFinedQD8e)rc{f$pdFP+|XcUok(% z&+2XaU;g6D`kekZ^=~X+K7B>K|GxOm)2pw{TlaCnP^f(N8{h zMj!v4hmUgvRvh(%B|9Ifq6_p|)^q*?h1R#J|Bg~ORnD{rQZ3%_%TK;m_kLkg;jpDnd7&5ccee(nxIdimq+yUNkGw|3p++5L5 z&I`=0+KQM7~wG&#(wI484GKqPtS%*i6zxzy5 znxI}cHj=@Jt3lw^Ys|0a?AsnUSH?C{Q2ZEA+sAqQ8Qt)=S#yyJhTTc#SuEVhf5kZ; zJ1YJGaGyNIz;XjfPEQ;X3OkR@I_nlJ+WB_YrofC;&R}WmwMroSO+WL>Y=^ggZyH0( z5y*pB?ll%yXFU8Ra3ruhCMwc4aF%(3&fEkv#zSq-C6b^^-zcuT?1DeFkZsNpu>uaL zw&>POzEbMfycW{r1;2~tI*gbub;c<1L%-t~>Y2;0UclVC>8-y3aOc4Xe(mn-tc0uv z?>u(fEVv#p?&sji0TB<|vDnag_hsREK`hKJoH_VL&H_vv4Vch!_Clcva%37?ugQ#i zuw>y9bNr{boUvW9@UW9b8LMYk0%So#;E)!>yg)Cc&Gu?)><-O^;2{ch|$V_2-pmjY#N{GxNCs(F)x2(j-0VW2$MR{ zmVf7x&CvR8u%n&%OIH8Aw_WijR{a53wlcJQY~k$vq&fT?a&(o09RQDFH1@;JisV0} z?ZTQ*OZ^Z6#ahgmf#;g0{?Y*j&gPMX#1E2hLLCnwiJHCv4Ne&m}SQAD@^(PjA{lwj)xwtSH+4~iC>Q-(uNHoPJ zLf#b+mwb65?+^%kU1;maOw2Pxe8a@CHOCfWKw}${AuL%AJ?h0|?7)JR3!+*e*VH#6 z{FEDeS#aK|t^LUz8Lo0LO8B9shQxnUoL+h5?&*u4ds$z`_7c#+kqZ-^Y{7(ub?3!oJ_W(+YSm$+aDj*^Zetp4ZelUQE+{U**ryrF+3zyW8g7K_a%y2hX{?!qxB0I@a18L;HoTc;PwEJdVkM7>Z$n!;zqP*cm$*Kdb)1yqPZ0aKDB*&ggD;3KYPeC`=g*4%S6`L7o;I)ldg}{I=sjT4&e;RZ7s%d<+J?9sr;EPe=}r#S!!@N z$3 zp!YCx$Bbsh2d7+$*||euZ@hzlYeDZ2(mU4hs6RQRL4sU{*W?l(C{Et=0>t0>OnTOn zish(c6Whq^_r?Pc{90n(-fgOMd-w^Ec9q5^ zN#&@?l&w%H;{||i&SYYOQ0+4PMb_GzHqGQF{e?WFm+;Jc(^(!`t5~fq&KyXED#!)`g1uXq0dt=!}@ z%i>C{F@^u`KkiPe;Rr>uy+=HR9VdH>woT6m^kcp|OC))NV!$+a7N(w!Xm6Qvk*?^A z-1tl2CuEv>{rHvr0gS6%eBtkrgu^MHtIxw#a^Z#fiK}=%9~grNK;*LJBAAipmQ6vD zZ=s{x>tEc~4|{$(C(O#9G4ZV(KDG{rgMW4QX0w{>RRVA~e_||?$T}Z=waHCNhdlhL zLF+ckc|v|XScg^ChTR1kA6L+sklT8v3jWu&002M$Nklg zb;ZlGi)(IDA@?yg@p}9kWp-~bVizST9g+iM_y#A_XpNxoiJY*+s&>Y{p*DfWwifW> zCctWn#UZyY_N{}%SV#w*Gz|uJJvp8P%m}-k|KTWwl>Dv(ALD6bm#i>L9#y+mni$^O zjL};LCt*ZCy3Wo2h()eg64K-Lcz3M6c@~#gG>6J?Z6m|!J8U~>$CrJfk<-et{U&Q} zw!6XfQn$HZf!;Io=~;q?buUiDq@C4Nvd*K;oU!dEN84Da&7Su*MSXLt({&aXx{Ikj zc9PPs`duWK=>T|A+sHsXU#9}f@2$d=6oKp(#* z{OkaEm#h_a8moKh%nZ9T2HU)kpM$m4*09WJT`-Ktrh1<*OX<4&ao10tw;a8psHL!- z_hy5Rmiot^8KdIZU}Q^o5#L-f%p&>xM?Ut{hvIj8x3~Ts051LAJHMtK`AgX^S!67P z^#qxH*2RazS|lu33uYl?kyPfH7XdbkAZTJ}>p7zUXl^ClU}ETtiSWVy%$|8w*y69| zgIs+V@`#rlo26r-b{r7nPiXzHxb3gGgDJ%I{1ZMjhLk3GwGChJ_BIC&c%vi^<30b> ze{7@&`5b4*%-H?~#bbBc$Cs|7YrR~fUd+iBb(?u=a@Zc@LzWZC?pOco`ckw1BU|n~kzyzphqth-SR}muv{wX&*0?vjP4PJKQtJGeJhTLD_cZ z_8*prI=B1T&Kx)t0&rMFEuduCeE}v0@tgl4b@YXdKl`56D}1HGv2VdQo@U`cZ{7E+_4v~g-M~y0$Nzc2 zudvH+-nBrEG+t>-7MugZosbhYA0L>D1!T#`1N#vNZpVdoVt|YF0#f`;Qjg>@+4`dl zjIsB77i?+{;=6JoBD}$-ejt|U9!tV0uk7G~(Q%U`uOlNn{>G;m+h38&7J@d6! z^D4eB=AZsbF6^KFn#Nz1POt9sD!&_xWfq1zLj{XD`;~HGZD|%)d;_3uweicEI6vll zfm;;Qs6V5l6jp?XF*0}k#)y2(oS4|~7r^)x3_ZuYoNbSpi@`u1(mMpc%=Kp|ja)|E zOykE#UxLOyPO+D~kVWyk0kE;1Y9x~2(Sn#*k!ZUCI4&aD!_SWynvA<+E@8WtS+3G(l$Gp!a&DXQI|TFXxuqf=VgA zNX8~P)c%MsV}wp-vv*Qf7|lkmSrI%L9bM+(kF~H;7~8Cm07#Z_vPZAB&+Ts+e8a~^ zwi;_YMB43H{c6TJ!o0$VVe5E>J#`Wv*DJJ+`QX{-;C$;}{U@y-h#LTU)#_hrS^W}= z*!ynnNJ+i0m8oQY&|*nk+DSIca+X}B{ zq7m(nZ5JO}u(J@41HcPccDS#DWb#~#f8i1#Iq`~KC~2#4!k4E5IbIHo${XLRwc&8` zula_kc}iSX3LOYVT=MEx^iYddYj6RfmVzc8)gD9303*k_ZG>u&S_PyI~S7^Z}~ zj7&oU%Vtj8p*Ql>V$vAn;7#};6It=gf7whNj8o&pxwPxNHcr33fa4Fd@{J&Q@=O66 z>1=}z0&e4cWn7mq9d`+1AE{twZhdtwN+MBzRv4<(b>widEV^>RCdZ$Y29>|~*FWCD zLXA=SV>A&1xp9$~aAG~;HOH8@qSAOf__7Q8l3jAITVW+9IT=^j6vh{o8Z+g>)%DLs zMp!yYKOujUi(1@q^F^zt&I%b9?9}+kl4|B%0OqKRXdid@`zQW=)sD+s*N-pq6Is5{ zkLI`R&y(<^?Y#tuWBQ`Vq{1!vF($#pqUR=nofs2i^jwT6p#F5R;o4{nUiB^CP;HB0EXn}6lC(>K1-|M4!a%HR3A4tGuuKKy{+De%M(J$QQJsfSNb z{LmwMSHZ)lckA5)Pip>d{xp93quGDNo8o17wrws58Pk&W`M5Irw%s1tKEE7)yZ+$q zvGy^#liqs&#_8Fwzv@@-pVkFF<7f1j@hiIM*TwzUUpu|_>KjM>yuR=jp6Urpi@Lto z@i+SlC3WA99el&a-hc(f`v>i@&Y4;5wUwIqt@eE|1KR5HnZu}kG3^!hxy9hH};~@v~oK5V9xHje`T-Q&AVZl5x z%~V3y&-|ln2F-C_E9eM8%p*@pT;u3k*T(Oh6gsXBnJF6rGKYxgmEc z3^M*TPBDl|n6y=AJ6KaQ@=HgW3=Xv|7kz_GT4Ps*UobUc6Y;Sw}fw%$i=&P^)+RG0;$g{79kAo2Yd7qEPm2= z+#Z0A4LdfwtXRgLkdAN8j5N?M^w{8g+}zmk&1LL}i#h%9$Da)BZ|yROZT%%iP=7ff zar43E`BuLwFZ%@`#f-a;{dVQCU+^X?Av`v$>Ye}auih>*L0{V)pfYTYEqjkMjVT!T zk4)W~EPv@6BV25?VlG|8!5VJH#lN@`WHn732<9pF*Dlm2T*eq)2;DfnzJ_K zGtVs&(t7r1bVppRyc!BDC)(Kb36=SbKY>}RE3YAt@R2)4C?;Qx>)y3tp2$Ts>kXTX zeItMboNJH+0BaIQ2CLZ)f4>?opT4?h;Jlb4H_(`c@g%xVh!NDzbnT!(E z=r9Q9s8a=`?3Ebh#;C^TN{5xS0--kfY;=66$^Om?q^WUoC2sbIEbXs2^w>#<|Ld>4 zdHU*?^%nIn6aPgi$ai1sSv`DF;p0y}bb9Q`2Yo|;@#Fe}!t@$H@$l&}{rkgr=|3I3 z<6RG~3qFAvFa16y-rnvt-*p|gFUI+tPrJPI{Ofwf{`J%I&%CO?*H3)G-gA0;{_{`I zn7PKtUVAnBEA^vp>^Ev2{I&ims_T<|cIfALVSiyWc0%%TLaiD5-6S5DH)!az&uk(a zAJw7h$kNR>9iafBGydVos;3caQt}M3<2!MD$I2%l=9{&#qfZ>hG=nUh)Bq~s zkF6}+4jvq;o$T!2ss|EAEV)b9e?P-vYC3z(0Q#y zzSgMZd$S+@653yVWs3+3{&pix&-Cc_w$J5jcgd17vyKnwUFIgw(pxd(@wa#KAxazjsr-#ajW_qjZ?B)nC&{nX_=mDFS?*>=W2(iGAq*~c!03~Gb! ztX=1X!N_O#1pwLJ0Ih#@m0{;`4R*(y$5-9uucGYo#w@(+2V_hQp7kTq6reTUadz3b zpV!}z;g4V2x08|A-|h^^4zP{6cwIZHa`TtZPJD>?<`Z^pvTaTgaU2FH?uYS$m!WkN zCsgY<^%H1q(n~%U_A5UD=61qF=Hgy{xoDMt9i;}{7vqv;|HLO3^g3p#!|=B4sL$C) z=yyM?qUC}XjpZ!{xtV}9C_Q&=s&oE%Kqe1tj`Lr~u!04D%1Jii$9WKGayFD^PMMHu z8Dn+cT)*KTtmsqMoWCqj0j1o|X*LZPhAZbxk|TLAcP(0<@+d?2&&`kF(i~GOzzqse zCm!E<;I2MeppO^4`)&HuO#}VCQ#S_OKlb41o%(wRy>1k|^YPp;K=!b1GF;dA_WKug zG5^vFub*Dj1^tWaxwuEh-wV&Yc6wfK&41xpjs5qU<@s+GuyeMeOWxGVG)JDiM-+v( z=Q)uqe!fUF4or6&=4$(mrtEb4Bq;jsEBU(qiEmf$&tlT2Rl{{}tQ{~^~%=t1^PfT_aOl|3Y$WT2x%I+Y`(XVxW+@U6z^)m-WsM}km)^}oh0 zJ~6n?{~C8gg1=xVfiqhvT{G<7V!Y0;1pvJ5tz^hN=1R>Y@A*^y0>y8&f+M(b9KTh+1~$kzoyi7lFTi4rZf9^~ zP+8^t#KJhvU!*W{hY2@_Uv`P_bBc!h<1dS<*CN=3fIJWp5{Hw#~#sbc| zN&RHj9SaV+(*wW$k&iw3Ux9Gj+YiJ$0N4rIHUFn}&Octulf~t|!-G#2N_KvCJCwj&NRDJpZEqdxb&EfZ4R3Ff#23~psw=o;&w3k!PPP# zW*q*6LO*pt*D!#~_{b}$_8Uwrs>jc9=!=2Behei8#2vd20NX?7*|90EEf#?E1K?UP zuCB2qvv}mT16D#X>8oG7M`t~@Tia#kG`f!W@TGuB>O&ovC?-MG+S`BPE*>_p+49HN zwY1UUZ(#dpKYG3qNc}MYk4?ww&)VoV85XH;`O8M}4W&N%aH$=|ojo3;NszAbEt(xL z>Xj!ry?bt|n)^5y|DLehH@~CK7*-qpmk%B=sSLg=PImx;X~y*jNWq#5HFJ^8SpklV zxZG7I2)TgYnrS?~FvLCInlJs>@qYjSJ{T|^f8U76>vz0EC*iZ-7f)ZLgU~1Zy!Cfp zRb$UE7UTo-7GV2H#ti{{^3IvqLDqUc?>}`aE)0>a`h#s5eDTkPBsJ?eAFs$;kI6~q z!ce}hJEX*!k6@q}{u)RR|B-7<)p9`+fA34zH9GM8L*49`n5kmwk{IQm`j`edP-8-+ z^n0uos3dRV+d?%!Pc4o*10k6VT));D=)qn5shjkx{;s18jZOsOgiC9UmYSr8u*U3* zCg8YtbV06H-k*Iboz1BiF)HZ_qy z9NWS>nFO8HgN+yiKK5RBt>5@tJ+>JS(>WGXM``5eTF}jY$m0)Q+1Er0Y*EF``+>O} zeGzM`Z3BDoC5l_R5i#+xp!l&ffr$ebV&jOMp{!UCBZ4!2SvNVpy!&hr*IxNnK zYyD*cDrgIP=2oE{{+>4&li300>-s`!2n~DJWqjyXERU6e&8I%Z86Nxd7bl2(_b0r5 zf;fKo3$XjkN^QzN?y*64)PMZyZyvT_v-~N`s*%R6zljmoe$F^)!ms&xU^H#Q`{-e2 zLv`)3O@^&+`D5d;dXQFr8-MFp9L-#v4u0Mzci;FIQQZD*YjEo``5%ArnGd~j=kzCQF=&xwXJx6a1lg%th}r%7 zq1aL!y4oyX53t*83V*g(VzLhQ+DL5Kb|4tiazu2apy-&;-EU#GK7ey&vwhFAUQX~l1@&9nV(!?<;C9;LVNu+g8xb>NBpC*kv$yx2(u+QM|Cy8lRX-uF0Y7kv>1Gndh`s}e{7Y*{}({r7}3*2etDig9t zD}j+5{!6fUd!HC+184yjXmtS7;FLaDc1%yJU1r%|h)2F9kToG)0PRptmpbM&^4V>m zx#}mq?Tk0}_JURCNBxg|5~IYxjs#<0ZoOIJxww>vJzF9suAgFXK_7B9Ir7ic+X+=} zOST39j(+%2ammy*kYeb751vhG1T3``3?N3S!Z0GfuUOCU%UM?f5N!I|swQ zYzB+I!{VLwwLKGFOje+)avy6IPoP4!ccN4;ziY}M$7%u6@AVIVfN=-$$Y(!q#3BS@ zWz*Q3|L&jj&Dr@6+~IS0W@I_Tn|45g%OLShbA}dW0{|#$hcd@+q?KcJSTJFxruf!5 zAB~2uwY8Cj>xa3WFpK|j{I>4t33fdG#D6DHU82X9@m~KTBxWOrz+2W2v&COyC2;q_ z2Y%|G|N0Z33&QQ*o>${`=W_aIzxd3j^?Jq6vZTDAwBtO^(nPAi${2Maj$8sCM*)bf zWzpNZi(wOW!7af0U$K=_WkPSui3X>mEli1yP+8cARYuF!Tob~W5E@y1R`>yRzOBod zzdYi;)#RXmaFU&m>g(!i2%|SXJsgfYBN;TwJ6ukcVMb%VH@WWl*MBJ4vg7u@Rq-2$BD4H9Va(?P=Kp-A-LPvbV}a< z(=YcWpPGzq*3yIlE=dQ2yO+|=S8+11)!$YpG- zRpbB^pI4dJ4k#~k)ufz>sPX!UKoStps#;9zzsV!oI61tfD-WC(l3z(ztjReq^iTd1 z7u{YzO%@gBC3SP|1@el(ZjgWTKVEUakjny2MiL3{zs#~#jFjof4QuRIH?cg&cfjQZuB1hy$xYe1g(1DUmnUl6HPMv@HAvr_91!rrMb0A?(OKyi%rP=4T zivIs6?`?W*-IDCAdov}BKmsa_XdodzM8}3-01fjSoK2cQGgCsAY15(70wGz@z!HV3 zXSw0B|3W1KB>I3md>Y9;r~<15h{}5z&loXc&Ufu~4mX?LckZ*_IcLO(5hLQAYwff4 z+WQ>&3g7uW z*DREWEtq?#06y+>1*Y`@Z7U#njfc|!#Xx<_z*QS-2K#EtJ;ji*`zz=}U*zMyrW(a5 zp>vuzdnc)oO?LSfki69QuC7ofS0&k2p);RUdEQz#^xE9#51$(_om!vlu1jLJ=F3*e zjrTp1(R~;Jr!OSINcv~~hYd2{Ttlrj_wurTz?eaoNve3SNQua4rqAElx{k}n6Hf&q zcvn}#pZfin#&P8#Go!Vh*;YZ*i(;6+*1z5dL?smh9b}H zT#lR`BkWgMFwzI>s7;@Nm-NJJ`nMAM9smGk8KWi-~3j{akFE3V$kGuZb3(Z5Nl zUp@Rgzx(Sy`{$2>f3R1d=2rl?4f<~R-_}>&Ki7XeYj2J2zi+M&c+Lyg919L<52{&A zw6>A};oI@&ENRV#gLCYCU^+f-XUf4FoVlRNA@4zV_Br^*H@A~w;ebb3WK90rZPdl@ zTpcW#s?n0md+BHCa9w%mJVzc(kMfHLIuB~ci^%;Sf^fdD)!4cDLNNMI4CYBuk#^c{ z-}F`MwHfieEXUvq?(K8cCAhd?X-9B7?wax4_D7Eg+#K;4y)-75$+xXs@M~~47|t;w zYRi-DIE~T;c*WY5__||?txwDg=iU*n%i1PCH^3*#p;Ztb*G3G1NwC+PLiohUUq;u% z;)=iQH!Ae$Sk!{fUArzRjJsBS@pMTG=tpncmU^s>`K5 z3lp6*&=ZQrfeO|b2`{|38gBhBSi8o^T8^TPC0(Ua0U0`Ha7X>`G)vzvchas2ja z&DkIag9$f7HcB9u?_$F|SHXb6PRuzh*svZ_&VPo{aT$?4_+cE})ZDXy&N~+<1;Cn< zM*O8owM7Fq>JNY4@kcAqoBOC#k9_-tt}U7pKdQ}H-abcyCr2`59VLnK)yIGKt;5v8 zry(*>r`fDpE7?pIyHnYJxSX5%RMViK@cLmHXM16gfoNBJ8{pWfa?&F!ecq_#!*1Cp zGb>B(jDN$l8o=Dz_%JtUvEc#EXGx|-i`u3?){pSy}^;fM`UN-iOE8gqb*B-J!Tcm9yDd4gR*Hof%ZN#(@qd)3pG>sXxyaFR5@t3^_$IpW~IiQkv0IQ+>8|>P( z=--Lbe_HtM-=4IeV(M4JPf?8i3iJouC{7p0g-_pW*_eBTGV_F(6(}D*cVVM$f)E)l zCT4%?!pw>BtZDKu2B>W&S0*bm-gbwNZLoa;NCeR6F9WmF+cVNI*ba8;mo3s{BZV=k z6-ne@xs4x#{R*)%ZCWA=Lmf{>4S^;c(%5u8t2G6DZ@Vt|iZ?;IEu?xBB)p-TPi?W? zd+5PUc(4h#owWFv8O5?+o7RmtW_-msUYpLwXm73|-~JIhft?BTy5tiB%wxE{#@Dd` z46}J>D_-*>e6Y5S0H*Ar%*HM^_4u$o&rir4A_DtIlWpma2|(sEk3jPEjECj;t;M=I zcax(t#54L>8kY%do5trcHTZ}VMte*VkVVACUZ=wX;+-WZ4__afAB0)PK*{`HsX0Ft@ga;jy>ip?qQ*;b#8~9u{UTNv{djk42qz5D z?>>ltFg^v;A71>ThZ!}qhktC*0dMsP!fHy&(MuQTT+g3;c2JEIW{T7vbgweKIZy&#BB zes($koE132OV0$0s<1yY!dk$S|&j)z=k8bohMw9mGn>hV^Mc(ppR4koM?&D?oTMww=aX(1a=R?`C=}*#! zs|Fsg{iH_h{)U44H$Gdl2H`P%fYb4s@v&!M>tNZq8?*i!+x0!a5^SIr`1*N~li#-i z-;7(++#-8wkH!QzzJXH}p4_W-B()szQTH>REjIF*^GY0F?D0M0X__%&w>EK+-(SD+ zjg01G+pq0M;j0a%jSP$=9kX5&E;iC_oApb@Oj+*SUnO~UH2&0DgUJO3*RN&!hu;ycp@wS1~ z9_w%z9Lmj{T`5*sJx^@3t3e%MZXVC|xm5#B_ znmwOGm|%=1INOaYParmP@gb5;2P=q)hl(*_eoz-1PhA58$UyxWwL;Xo@YfDy9&c;u zIX@&`$#3vX10T~6VpJA58y!=U;CLCgmPCETB&0;z-9guSAJmtv=^S1A%xe>9o^uSp zWnyggi(88i;*0fJtO{AFI=NcxsakD+sNwSa?a8T>R z^yr^9b9RgNlcpP&zBWT?Jp&f$*Yr2eyqAF6{;pPY-Z!+uX1@LRy0Ep~iEwsL0f@Jz zuK5B&JvWebM$ZvD-YF(Hcm+KA$Kxk9uweSH_D`ni8D1oo&+`S;_%kZo{$w96 zWhqYZa5k#59p3aGDr9rs?LTqhZ(QaFC-wLK@T2=(!$&=>-?NSNgv=N%-9Tavg?kr^ zW1i5tN0;CD_TLSPhCG+dyXTvAeqBJgev!ZH2L_+(rzY!XmV^G9zt6*(Wi!@=fH8sK z=$zs-TccbWq3-lh&2bx7j*}NP7y)K0#&c!+kudec@M~A?_9%Y4pPs@ z_O0=j5pVCUzu{n71Qe(hOPg9NnuD;WqPPCs9loV-2I~-==Y@FvPNkvIL$Vy(E8Zfs zm&5120z{E_I)~o%hBsHmKqGwO2<*7{Wy)^wh1lMDbFXmq#lERW3+kI}9%hqwa?6{# z&J34rEF!>*wPEjYvTUyM_g)mneEVckI=H*c|Tn|j6G z{%gG{YPRSU-d+`_xwfXeTwd1C=3W=KwpW7gM?XC` zmPLgMbL%VTb1snuC^o@d@rZP7Y#HlgGk)8yH7*94(%hN4WyY@$Ki;)5mK_d;F!gti z<6Lk1_UgFJnXm66bH+Nezhmz8qNHDn{^wu)`e*-qZJ%NORKEhi4bfk~{y={R`%Aew zJ~>|IES(cIx4q|97<}OQf|zLUSq7}dI5^A<{{?WC3d+HiZ>ZoJWZ**_9I1{sU&Mpo z@JBSX$!`>)lRw`mpD(7Q7c9&iTJppO1D>Ykg+yuk#oYVAh9pdw(irXYN9m8=B)zcU zJz~qc#M)tQ|1dj2?V1_nxiG2!=$|(YjC0N4iJLU76BA?FzxCH|DT?WS!V{xw{pOfG z#^mI@oF^+dnkRwbU0bz@Cric8I~@^EJYt%NtYBp$fPs(UnM)nEKK6wos;GpikIthV zJ~^?w2W)oDLZ4tTf(wDnShyb(KLj8LG6=$i<&PZp5v{nMAeb2JCzDnV$vm120w)oD z%%uOrFm~fE0{0XnFblYx?!O$E(g2WJPaX3k+3t~J?R4D<;@u~HG@9`9;&-9IdFLyM zb)|M}s#N)szCEKZ-XTnMdZ~BC%#Uv*67FJ@PXvAU&@XR=Ww=MqsyM$G5~peTVR>xI zDIv^$*BmYS;9X8;z>X8TFJ@}TZJqp!{`9ml=;j?z=SeSItC&0l&NoZgwI|Bs`Usnt z5SS-*>gw97dFaR^JMV(_zdcN^=)`CgS2%$3ZokEiqV&o!{w5AF=nrNt8%uqXqP4{6w*Hn4-Cnt}6i;GhPY&}ZW86!USJG9~c$nH9gWg`Ht z#RbFGxSbuawB0eESZ$QxmNktw8GjFOe!&RxS>AQ>?LDnd0b%5Bau10omNQ`NivVZ8 z1T@a`DoavhS>D45F2lJ2sZD;@yY^ru&AJfi^tz;f$sEz>=W#juT~~4Nzzil!=W($y zq!W{0_U)geh@PHYd%}}5KKBfIiSXJ<3_3RXU4$^WsmR=mauUn^*c#EnAH|qg zk@mS?S>If{77Bd(Ym)X4&Cb!DhdKR6Gf6BsxxW4OQ@#67d7thZ06+cqyFd8uo1gwA z-SfvmVP^|BJZFi!>verT9R7+f0E5%PAi#v(XB#|g4$cs3?St9B&B)zD)Ps+S(Sru7 zANX@v!S}_rarphIYty&}E;+O~Hg8szPu!g0VaeWv;E0FQ#HJ&{i;v~QW-kaWqLZab zywK$&tYv1!TM(ErG1rEP)cR;u>vJf;V6aC+Qo9BjQVS%h%kZ&pJu*5a1m?{=+h`cO zaf8=nJmn?1CT*GK178zO3>40VU!U~FF>43-9CzsLfnvp? zf&J+B*AU#8uxt1p$U#li=y>uwCU(&7tDM0JoIkRU+KCTA^~Ts%=Ohd;@p$z^@JT|S- zeIk+YfLaB4 z2(%_!m6I3uw(|`EDGSKj2B^P~^MaZ>i4|IFX5{c=$B2urvae#ili2-kfBt~3*LCOx1 zV)i#fEZ95a%%n2E?KgnbfaIV&6eWKc_>uK;F=wp>1Z1$K-zf1nBqrW9`x^vzpA|1h zUc^U#Qo<{jUXY?a`n6Ymr%v?YyX^e9yY}d3aH6}$lozYfnaaA>{nm$jp*ZsrKlh&; zjP4O#ZEiXDAVLt6wh-X81+me`oF@kXm@#>Bf3QtLMRZVCx4f)&p9bgibM@a?;M2bb zR*ug}8ekW7xvwNpF!$Z*TFc0BKe6d^b6D1mpNCniM$b7!zu%;jP$L zY3+Xg4HYB@BXO{Qc&EhE4tTW)+aiUXSdAFp5831RE{^-1&40_jQk-SlHT^<$KQgq* z&c*z78u}_ApJmD|Vi#z&Bg#{D>zU+x>vvB}&l+m|09CFg2q_~zl2y3%@=o^Q7_a8t zML@D}tFl_h$j;`=ejbmDhU=c;SHnIL)B+mAg_o*1x|2Q(y54vGeV}@IHPGE5z?8Sf z{hr`#3@*+{s59q6$-XK@g`?*x$JLWX|ITtCm!OtATu7a?WE4hv}@XCYKjJ)bK9WtKpZkW#Z>3f-aCYlXyAACGHeC+>}_Be}s+)#V@=Zr4g zaqnUnn)wHDTHG6Zb}m|O4$*JPm$Uj69diDH$`EEHl#4=IAtz*RPw0fL+MaOIHwzus zO72e01mGi+55`03pG?B)jwtmA!oMrG#G~E(<)6DH!DW^I)DLrZY#*mMS4JRr1o;d1 zN9tMYgF+i@(e3-*(ZIc6jwO+|f-Dj@b>dJWNfj>YbexNQQ!@L6k`fShcY|ldgUNn0 zaHf95{qO%i5<=Xw^XcF{62mCBXJ+lR7y^KZ+zWYWy*WHDC$pNy^{QEM>yp<6tr;^e z+UWPIC;7H7OwN#RSfaqKVN*RR%WREP36D@Sjv#PW?ViLKanM2Sbf^BT+N|~ zw6hlW`0;S7n`YBkrV*ihTMBmE)oOrW^(8mU$s?@`+%LK8w_5#-40)*ISQV&tM5=d<;W#9vT7CF~|fcOy?^W|xms;w*%yjngUe6zsnB5k4{kl|4>>gIstlrp0&v z<_3|arDL?!St9Ddbz;9{u3O)Wc0ODNlA)%%2%*ZZ3;hk z{ycAL275?Kp|NkUCFWa14CmD;iKO3Il|ZGK#HIyLML$&5HRS%<998q3PhDdzl`547 zK0Y}LFa9IKaIslm338@(KmS+1L8>wu8(?$BkT^ck^r*2C-=v) z*FYGgZP4Oa_2Lfm%KF3dD-l0i5ih=yUn z!%!_0(=6DU%7xwDrnfsjcx$R&%s8tblSAd0axl34hph;^9{0d z$YJU@96(1VEHc3};mD3&bSU74UC7^1o1&hf)R$09889S7UX(McVxHL^6+GhHS>CJv zN2%UfL@-ncGB$V~?_#SulWeN?c2+sS2QqO0D83|5mvcPKOPz-mzrL6fOoS9;rA=;) zwZ;F6X15Gcm(uq_cL(^nk7EX{v%&gdEN4wwGXQ`>#D9t49YmkfwWvF1HYQziv!gKk z|K1}+FMi`&@8&ICk;<2M%l*t9u*3mB=nA>KmLL%n6Dt4w-e7cXxpzjOxgcoq)eE_W ziq+Q(;$?pcA3XAMn3u!!#e{Sjd4QV=hKA0_69@Fj_m&^h*V62+Un#~(0GtR<`!;eI>a?rB9iX z9vkwvN2R;HEcsIaL)JllrYdjT&XE#0`JY z7v~G53zNFrS`pO^v|=6)Eq=RQ_y%9h`g1`}&xOoZq2rGFEV&L?`N^8+|0b|j>bQYx zq_1fnkn6!IpY`W8?k2`LJefdH7Y!{uaEt_hX(Pyx4R!V_JcX z7P|0!&jR`n`z~gw@O3kSFy-|dpyfeh1rKiXh4=TiT-o|tjN(qXf=Sq?ej z6j5}r`ZyFw(FQUpekqoiX@u1Y4>$UZtiSp4BDi84rfT{nc>CwSI%PS~)RX&r3F^vG;tJZh^{E@nlz(aW?T4EEpyJdEy+v+g0|`62f8(xVD+zdsr~LbH zJy_Y`kjq{cv%9L&wIX}>y9TdPaE*cmLCrH4pBzHe-A-1rJujj%u2D;(@_c}ce*+V# z#LyQ$F+Wo@tLq_bOS?+&wpJOg=yDKE853RMIp)As*lt&IJ}0P2zoLf9QCax5h|jk- zF$S##xi87-SW=Vl3loX^icAWL(QaUr*#9S0vC6DioLX*W=(l(8DorG1nyNaoq%Ku< z{UBBReH)JHT7?Sx&hg^T%u+cNJ@X8E`SMg%{ZE?veR1pccH+pMz+SA8>rp@F<%eok zqigJ^?~_?CTVYUcS);&vc-&nX+soPc2*dT>;@p>zE-|gUXDknB8&uSX);2z&Sp0~Q zc5j7-^r@wLEp}slaVfXo;+!Pk^lbsO72FzDq!Jd3rVcHvCi7*_XWOX${%1|`ndb^u z$lrWcD0ImSde+)Zygdyt@HMSPx{cmOO7{5JwoTX_8;QK1K(#kf=iY(6B#B^x2s`3e z0XMaD|KBQ}yboja$eIh@Vrny=SWAx*0gf2#pS*MS4J=m=H_Hv~7zn+Q2%Bo&S$@h6 zS~zg@`<@=T-;4!MF=WB;DRqprwS(pdWP zSQaSL?#iWs6zfEe{oQ9eM7TsAIOdaF40J;i5J3hN-K#!S#;%#8yEL<8!y3U1=Nz5Q zO2lKQ&I>7FBO|9I?^u1^sonh`_jfNLQwx(?7HE3fouEJcw<-vMd+(OMoT3dl8oYCZ zG|XVDaw%zq1$s1m(WbzF9_$+|2u}bEAu(LyzKgX6cQ*zE%6vMF51hcb0%{vriLLq2B6;z(Op5-(U6EF`peWk{@5^;K(sf>L6mqU8We3 zYU~$o*adY4RT0Z=;+4!(CeYZQn>TYwjS0t=9 zl~Ey5t&8y3X(xriUD0oF$WANKVV6CzbEI&zCz`f-k*M0Z45t}4~*n`tbE)vsBeweZXUh`%IEy7^Nn~cbg)x6TllqZ9QNn=BGHD_ zi*Rk{ZbjO1pR5P7#jEGWo$nT&?cd5FIn8-%7jB#FMitruLK9SL9>}75RaP&XyGvFL z??O?{ST#rVn-*_uut|3`n_wRjlQTV-!Y6`QDeWR4S>EbM(6A6~uH?TF^Bk5%_H z2k5gZ#f4&qO+4u5Z}qB*_xM$$v?Bj}=2~-`;Ui%lQqh-8g<9Wf0U4>W^QNHe)U=jFu=VA5Q$>w$Mrt5Q?G{4eyU0c-cJT#8>s7%)pr1?A)7c;Tp!o zzymYnkD2^5j@?mUuWgVk&e4A}omFsKWw_LA67#&F=)E{2}_4wKbMc z6d%Qf*{jz-iz2Elsznh&CCl9heq2=~$1Fs91YlJ&&Y#~e|CO$|jDcz5XgOz34Mp@w z=m#x(TJMh|5ml+P$+ozGt!dB^FDlQ%_~7Odd1>8s;r~a#rSpQ2y;MYbkQmy4I z@j@=pfS#`0Q9$yU;*VJtr7n5-WF9ji-3D9VXCLiy)FEN8u zm+~^5+wZp(uvs6h5<&mk{)imM~ekK+-puw zXjjhvKB1C(FaFa0`EdlT==sN^X6Ou7=s;Y!{16&woQ(d_>iFGSh9ByZ87OtS+-g=b ze){xdzQLamj$W7D?k%TrNK|idIbdTc7^b4s5mZtRAwTNc40&{I;XwZ?@LW2QT|@3f z{aGCOqObXU!rn%4vlx8!F0phli(lJjnXtux|1}PrE>I#(G&D|fp+|)u`-_@kml_Op z82SF63&5b`uYu#JT+U%ggXH;}dVeDXRJvUSGRMCEu=WA^AS2yOoNzo&cTDOL8M4D# zpW!(L9ShYUeY^|Fj(SguqCi^CQ0aS*X0dC2^EB4X)8m{C^JdhOOZ-GxVO~t6_k6{LrU33JW zXJkmb7@Q_&jJ7YRNp|FQi}gZ~pWd%Jbp^t5o2E2;<+?l+7SjGPx21K~`l@$X6NS*R z>051yoKo^5#L;Q;7BDgM=YpU1R#_+G=Qpd~#~24{m7a;a_Fy?e?%u-F5_<<3Yn7CD z0Go36n!6oLJFYV7n21b>@gP6V=STF&jObs72zLFksQhB~EsY^PS zoN&4y^vEJ=BD6=-NKIc|t`8redSZKd8bQT38=UV0-$1|enbBX+T3^fpsjIMMg+&N% zaYs@guIuZT;WixJpV{!wlo{`)&drTnOeq#){}g)rtjhYYTG+Fck6j;O$S(G&AQ5AN zlj9;eVX7#rfAJJ8^2Z7A4K8wtAMV|Pm*-fk6=xiFvplIOW7d10psot^V(GveFr+rI zbm|W7S^=x$kwegG@8^Y*`&~;?Hp}J!Fl5c%Z(a#)RbRiv@Iu0qfi2Y3Pba+3hU?WnCBT6Nv6M!RFPUYTH>bjyYvY5YOfid3xf{mPWZQ%~3)6k_0(nbMXx ztw8zrXygN}^^qAsvDm}T=`u2l|~&{fWqAj+Jq4PH=Bw^Q4HCIR(g^?nm;)qx$s zmR3;VHB|j_UuLEpdiiSVG+Zz6=8E+$W=QtD>8!a&KfkGM9C6=kC0YF_F#l^B_ku>? zom;o9TyELWujSu-$Cphi4mDq;y%{H&B2m|P6potXn{Dci<)cF?Su#^A9GtY7 zUJ3YoFqQt{zHBRO8?o9S!^Q8N>zK#CvX$vgVf$tJ?Obatr?k9_#UoBMCj(yzi6knX zSJ???-HG5YaGOqaCdKpVb=Ka}9)nPg)X=?YTnEbm6K@I~qw*_)4jvvkW66d%MPoeX z@A==CZ5VmyAiat>@QsNKySktJnfHA3sVOuGiBKk8xaK|Mm0Yg&?(F#CICV`o$4}sp zRIyty)sVWjr4%Wx;_0QXBX?E`9F$)Af56no`TfYF9}1 zQ-G(2x>)I&{NyyIB!9I`&)M?&2kEk`O#`#06KM0592=?7mUFVZ%q8waJOzFcs?Q;h zHDg|>nCUxR_kIC5NAMq>%*g@K5pXD*)`**1`rD{A>T9a;)x`Cje&pS|_mNo2T1h3Q za?+oqesaL^^On1Q>5F9w`wkUk*Xf%}{Mt-93)7{}h*lB6$@1To^Yrgbwk5Yx@@@32 zJAAX>c@4eK^f%WTzsR>qSrGiBijoMp{xL3>^!evtlt8l9w1VQUWtap1#yv&|_22L# z4z`XUh+Jsf<+~eh7yny0h=ZL(6O{>Eb$xT^6FZTWPAC?cLZ+`8o@6Be>us(48Vcdl z^)VUUQvT4}OO2htiXM;-jf>thHbty2Ih%^%KSm;szRCjU3?U_uhJYJ?qADNjDqp|LGGKeQ%x-&`3Beb_P82a19(?JqF6-_(tJV%Yx8kI zuSFX7V0Jjnr}b#&$@Yqm%hVFMB&*YA=s9wab`t{-?(nRo#1a;Grb~vffu(I zyG6|aKoJAClWwa(+F7@oio`RT!fAit>1tvl9;}twDg#VK#sMwj%Qr4tQ4&=rOB$w{ zMpiMG+{lzmV~OcE8lb&8J6i|cvjH|IXxpA!2d}pEp&!PWEi=m`;tGO{AX_f2l);td zMc4z5|6H-pPsk2DRWn>OX zW<0-R0eWbA$8BDS|1+aE#c8yiO{YDKsEI|JohhK|oN;*uk2DFOEpS#t6}KB>;Gon5 zEHFmx2Uq<1rWU=u+VthG&zVG{0~nv!>(-c&!gQ&O=jV2{bTN@5n`2+BPvy%z#;t8T z;=Q&*MC$1G)swiDpfZKOKL4EqDVdtC=CfYlI?X_NHNQrie&R zk}HAd4WG>R7#C?x`*Uy$w>aIaUqw8i$Rs%~&fn+;awC@%tVJ24wn=G|>b5cQwzlYt zHM#zSIuk!!&(HoNR%(h5wz{V<`>^jH&Kjxl_iYq%d?&+|Da~vHvwR?4w@(J4Yb2@|`45 zzVgs{Ug=sd`(2|TW%1c-r&ub|;gb-r2e=D&L)&O_%%5CzST3OydBB!&wE7~EF7 z{3~fu8W{QyoBTb3|7iyalD~!^@S`h#w}qmEZcd|fDQnS-Tx=mN&-Q1al6{Eo_5)RX zl_;DgwtnmC7JbiuD>FeNH9mbepyiI4JI|eS#HDLZ(Ngsl1V{MAR>fDnnlg)S`BTlB zy0Vg3?^#XZ?A-u^5Hv> z8A|^L>(OXHO}Oed|-wH5rL` zHI?@(yJD=VR&n#$#_(X>&v9mS-8-x2if}k6&$e&i#l^iYqzFSgY-&mFzs0i~ zBtlU7oW${TVIttB)(@nBVEv8v%Ytu!cID-kJ1w|h<|m3VwbN_E3V;Z?r}8W3ceW?e z0XosgkZ~cPu%4}hkTinra8H4<@nq!JF)jiQ11~>n&$1H4Z+6~tx>0ICjqy9F2^8(T zONGl-s{-5=3~Z*0gm<@if`dkj1B)qzthX+Gb(;`58={$4kA_&`#_1=7M`I>1{!;BH~ zAALp7YiW~mJ|~bdlzSXfr)QTC&3Y9)rKdd`KJ9bomW20mJ!Rv#q~F3WWV+qs--G8t zZC8}Xlx+Vua)&zby?;U?cTMNnwyX7K7|KS_qVduaJ(T!=r3!pPR3UFOVX zLVmQ=EQ(BrZvl`Fa-iYXz0J43_Yx$QIxDv7$}g7rDZ9t(^kZ+EX_R!+e>7FSH){3(Y>?^}DDz66weCp`5*bMcW*<26Md@y+Vv0`v92JRxHW!}koP|DCC?tV)l3hi)R{w8|aFbNX5maVAz5d2BX^KY!D8eUoW zs8Nt|CGlonMNS#9Z|PL^$FsbXJ=BRo27WrYXXE1Ye_n{C46ZxXvzuj-UqV-P3Jj>w zQ^IT6DaArL6lcrHi^rxMox1wImQQqokBSU9!&3C2Fx7`C0+*^&%KsuKd209>)XSZ}z>91c7dH;ob{X0swY;>FV+K z&OZ86r|2*AXz(qEdO3BasTQ=&{FTZ7@pgm2gjjFVE;ho0UKV7Iz@wG@XOWcqfrplH zr-iI+oyLfY(E*;Brdns9iyf{LC~pdpd<|H9kW{3+tRSz5AxA8pkCq#hhdQ?t7vCiH zWAj?om%m-7F@PY>(q2|~we>z=I;}PpFe6_IcK`rUA z*faTqyS$V4De)zDzl{8p8EN`^ac6t!@=gP#tYJs-s0-vj68p9BkMj~&6864hYl2vS zy*S^)PMxYQGbVMPtdzI(WmsL0-p7s-Pnto~*Ha4A`^28qaKat;%%t6jvc=WM!GZ}z zFLZqtcYF;vky`^9k85HDED_>WBdz+-l|waR&StG~x)i21AmEZI;-J!+MuZ!tAfKpd zJi-2Ul^?z2W#Vg557VZnWp`dqJ-XGKfht6SCMSqf_ zI5BzlgEQaFsF48zKEXD$HSFGycSbQav-@y=UHZ#+YwJgIxS1^06}79Y6KJ&`=a)#3 zR4c*dKQgUlTz;M|JEC@Zh& zX5mxXy-4Bjb>&!o*Z&-MX#d6Bv1Q?v>>mCV^N}01UH6-ML3+{oyDE3DC51NbQIoMZ zSvNVDJN!xU?t6@v#)`17RczAq4#-Sd(7aHy;j_(r=4&g$?(KV^W3$CwOVIofP!V$C zdG*%Sw$)`#U>9X#PFZDDG|Hc3^X<56Fhe#od-pe=pEYr9me54x-hswWNixS7`&}`8 z0w_dSk?CQ6&E%=`Qo7s$$TJIf`_fHNd(I9SEN_| zXeg9XX=s#(Oo7}W^{a|v(>?$E5KMMVA0`(j3)4qF)GQ_bkl(JhtpOmWS)eON{nzuX zmYvHy%B@n)KUdQ^vIMjf%4|oo70%(~26SOBqpSq3rX0rOf&Rwm?pgRRQPg9BAnJ!F zELB(LZA06Gm}IFKVFVxOy-d+XfxfERk%2s6;fa9lsac@Q>$54*0u<}Ljpx0NiHYPE z^U6G}?y31gm^%N8mL-XccID2~YA!~Piy*?KCesQRpBthzjs;c9`;fPYOZD2q!fTj$@CHHoySM*Q>nRK zX0t=Wf3w8WUjbWxH|nr7O5vj*on{!}Dyt9H{4BRZDKY`HR3=P?(pSkme&Xw$WzE#)5cXzusDX#A(f~Z( zV)q$z6<-tpS>#R_$-uG-728Hs;toQQTx3@Rx``&;7xrRTfXegOZUJdD2#~F zLzQBhy5dQxdBq2&*k1WzYN7M>roV)Dr@)CIuB2qL%(I7{@U zUJct%gPt6n`3s%0hAGv7yF#Ty^Fo%c_UABFdlCd^9Ctc;^F??G=R=a%wVA_U2b$4H z6mbo!BZ`$XfR18nwi>u7NB1=a{oo=xzr&6ay)spJ&y#gcpUJzPvASlfs}@!5|qf-H4x*$q~~Xzdo9Gcqsl<#N)q z3)Oy2W1pTZd_p}O{P~*XM{+W}KJ3Hp^&z<|(Qt3>yU{QfzOV)b2>!49eT6|6o!hHV z!|1Nr9627m9nl>rhQ3zxI8h-PHi{qZvjiN|+uwu8!X*R?Bm%;RpG$FRoDWAO8d-~5 z@eP+w%G)#SWgc64u?@6dVm|QGG29Ldl%1C5t}+w6p;`rx9i@2EW&@-?hs+|Tf(kz( zPH;gB>hWRwDv7_+$=E>3?7;`$F7m!J^kkuSJhDyEQLpf|me!j!G4HN8i{w22L(qggJv;Ceq;H>BL&!4pw*$M2EcyLW>-Fvz#GoSF7yn*QUigD58i%f^av562g#)TZ`b{e02?H00X3h`ie?sDs*? zZ;toreH%8ci{QZHUI8ET%ktS0C6nE;zzX)#6O(1Hkr(ANx(lt7+$X(qS3G$XnYKUe zohakc`R5pq{p@yW-7=FkUXR(@=nfE*6C$hKc4WIP(#L?|(MS$<#J*SV*d^tAwceL& zum3f1HMKzjHVxO+bNXxLBc2_fRsu`nxT~OK{icmdLsGnuXO(5mWh&_-+72@h_Ptnh!97gTOtTw^-NSp`usCGr3a*p z>$dtbe)LO%I0mn5XtP{5S4kTCz{brF$+t4AdMa@Dq1_qIl4gXB-?0CzOlGIP9-YJ> z1iEdB3Rvb1b)e+Z|GaT}q1!960M^br zDi}MHnJ8h)@3F{kk;p9wBlWDv9o|!lzWNo@sLD18I`l=@gVb#&hGg*gj)(6+b87Up z9_uJv^rL@-iDWYG{If!vbA>$BVSZS}8}HdBq(UMrT79)pG(&cG3uVu7=`4KNMjDKb zqlT-_{xhc%dM|lWSnuV`+2;xxi&|9j=+&L`bCgRAeQq7gE>?2zRO`QHYkQm7zQW$i zx-;=2S3&dlb58$j#q)pYnMpIP^OSYt_6tF3mjNNkwGMqcSOLV0Fq1cXodcq6LR02l z^p!`4UQo&;=FnUd^MOpY`YX#%3t#_MKaKcLU_1R{olmBhOK<7=H?szdD&Y(%wj)B1 zR=lsfq4!x10q+>hTZwq!N%=d}_eIck(`T*Nl*-4vlTEBuNO#F`NQNrDoVS|qRan$* z^m-=ps6WoulI9zb2v>Tt{yqA0B@K#hsCC9{OUy%2jn!Zu>uo}8&_lc_RY zYiQHlR%_b9BOxDAQr4ZY)oWB;=P;>S&lT?N9V-lb9$(*3!>3;9yS3MxYi*R#rsSc6 zT~GHP2}xrM(jKvuP{1Xge?I6Sf~~fcYh6l_{7@Db4P045xnvJLTan4Pa5_};#j4ExAFu)hAtRe4fL<*ztPeU6ne#5Y-TFs}{lV5yx{xl= zM|RyD`}`Exrp(~?oC`ndO)OVW_t~J&^#(SIxN< z>=-wfsK`iR2=4?avCGOw8=rL}%PrN1TdFn)hAE^^?44VSs?sl(q$!E~!pm<|SPK;1 z-#_qrDS8B%*+{+f%^13z8z+gj(@V8-khQcSb1JyZy_nbhV}Xc>(ZqMV}x=$<}EjTy51{g7<)1L)AUyK z(7BW2$W+>L%k^F}UDD;T_XgZ@HBMAIDDf zmb!RR?Mbc7C#&Ta!DJ_22e7$qfCj^H9Z7oZS+|uQ$Da6iQVPTa=A4|f-<$H|WZK`Y z>3o%{Me*EtC#IIpI!92vo7t<_b@aFe+ZnlBrDr7FclIq`@(Y z$(wZGzYJ>TT;9#2<1qLPYMs4w{l8^(j*Vo(Qf*p_Khrt*HavM%YP{y(G--;UYWrC4 zX9|AQcWTDs$rW5hv1ogeZ(E&N{}Kr1NtRYiHw&#~XS`S8e)7$ggw+}%9osO;?s;vV z=Mpws-v5a27ExUbq_&My)&C-%%?JJn)fs-cWlgy-I~2v#R89W!Tkoi&6ua4!+(mOS z>Dsv~+V1Y(znH0=ySN4LT$m1g&C|{m2Rza_D4jo3`ek}j&*+R)kE(@NzA-UFT=?lv zY^`r5pJSHRpWjvz7tE)MF1#Wy$LPoNPK7G+tkBt(C+xLmWktNS*?v{75QiRzk>g6N z#tir+kh7xWq7&*Ls)vrR76k?TC=nhm-}$B>ym+HwCD$xnV5C4GStxjEjmROv=ZeZ8 zL{|lYo>n22pCo+05@v{dPF-#>^NSc21T20W^gUk^$rnBjR776}}<&t(OlOd^W*hsu2 zmL~=QzI^>EjvLNlB=_f^BM|4s)Ojiqb&(IJmic;)x|DnF5Z7(Vg;Wy-b!tJRXOmUi zboiRY8-6f#qoM=`9Vm*eZe4raRB%&ITFnLble7gapb?)_4W2^GWLnmYCw9X}7g}Yng1#Gud{8|v9!Abla0iu@ zP?3AwD?@lEwXIcPque%K@A*TOSRE<@}pR9lG zRh3gC!FpZ{p%pvlU_9B_7EHR!Zi;lul}+0GnKcyBaSzGM6m>3$#w^W#twr!0_gpZk z7I&Ny##FPKyZ4(eZ&}EM!Cew{>VA+{EE=vTFnROgwmH43X%NygF8jd;rOOH$Q~wmx zQ0<)hi}CnN!L(6El$!C0k?!BELjjeX`@Clbx_9`5l+aI2rex9|oG-%Mm))8G|D7s} z(;{^OvGn(=+8rrXyz}L&o0XffKQ(>dmIBk({uL{&1CfzmMRrGYcoxm8u#Mffv5@j) zH5fVQO9qL&8|-sE(qx5GbGRWzBs5M9N3qK9xxeNgp7vw!I>1kSViVmH!ro%$dOdbkHXf}hcP_VW+qTm`hgJ+QaN*eM2q zgD$J}N;7%uW1ONL%G4LI?G97gxoT?*?3Ma8>jOw#x3ep+RHJQdM1JLd$Lz&^ajktk}4bK3U%Ylv7A&>?fPW%ZS-1z_37fmc|iZu z=W8Q-<9TzKXuuk@#$s*R=E0&jalSr%Bcn?is%p?$-ySCr22>i4J*upAxD}T8FP>z zLOX{3-F+=y-JGyy)5lKh)y-8p_N|(rIV*Xsww?zWK?f<@WdQsH{WE9Bj97nF`A{Ew z0T;48_aE$qYh{bM*=)h>nA}vx(*z{a#eiLS zp#cP+fBXPM{n8BfkzD%rEncgdGomhO(TdZ6{jWO1=-8oXTUZDC+wDsBgo=6e9ZHFf z=*0`933>IWDfRvmtmGv%Rn6PvfDb6+{u5rrrY$ImlB)t+-Kn2uQeYC4Van~w`LEim zeOb_QN`?~`Av`2Cl+f%TSO;FM74K|g(|u<@w`0Cfu7)%$Xjr2l+KW4rQb@G@KC`)s z@Utc}i>Igue{iMn(EHWuf{0Nre{Pq0pfcg*-Zk2B?%)Zp)}s000w3vx1%x{_*`@bt~T=D+B)nydS8f@rT`pv!Sc$Xx^4~tcKQDE~a_%~Z)$ip-y$0@e)IO69U-!`ayf4VCovA7~;_$4oX^N|R z@CT&40RJ-h`_zw|+*nj59JR*kAhXk({P%}cf*HO1ceTlw=1Wn=@)@efzD41_|pEz_SMTo&SP1=$Y@a=L+8Vw zl&4k&;xE01t(6IF-y`U`3$E}!dsBXTd)Q}P#8YmzUN1Yy+v8!)LM3A0FIez&O-Y_1 z>8ik4P;~7u*{mhYGR(>AIw--x$n1Ht6y1{J$e*ovn* zBCS1hJKE&6ngDB4`lG@)-)>%AlnL7T>F$Jh`(g6DRD>UEmK+DROOm$EdS`?7C_pVZ zWbsPtR6^s4sQc^2pB46IOH7m`ZD7pLkpVj~g{dN*ioS@Hmo7syZT$uiGN*=S-NWN+ zk>W;v!%=c?1<%VDO_{2E@YlQ^#tPhp;XjXv6q6LL9{4|-w}_n#8a*(?YX2caz69LT zhUrch@;_=NOQp#*#SAn~2i-Bw6Z)faF!QBP%~u!w4zJR7b;a5l(FOO`I$p~)KC8^S zxo)|U{nd(mq*6RefGE_vjb>Xzi3K|{DIh^+i{x>!6ASP^CS#L3UCGuXIDO{8ioUL( zBw9S9-;8%{eqt;O{+iWZp&CRtZ}8u;2(+{IrLJ`Rtz$lI;J|Z~V{`{a=CjR!c+R4e z0;wA}&ai;p9(t)OzL0mOayG^v=Y|_mvwAXO!#yjxKygx2ZEuyy6*s(BA){0ev^epO z9tGZ!I#_6SUf(e=c&5v3tf0C@i~0HFF7XMr%Vi9t@9J~r4JI<7wC*X(qH5ijvP3}c zz7i`1YA*44+$`MG*0yB~O7WE6@-!vdBq1ZG^aYae=fQm$sYs`dacAd(6Cd)scL!dO zE4B#xNT*J!#zA-gy0>-Gx0k}Ebf z5$RAg!6$*!lgiLuuQob^%GV?}34bT%8Y%XssKE^Lv-;1Q(#oGo^hkH)Xp9JWqAjV9 zRVOdA$|YV*$+bi&KOZrATGW1BH!0{Rfg_;oqb2Bua(mmhO8_eV*=Lm{0npvLsRbw4 ztQB>WS|!Z*75!gkD^9Z_RYt1--<)x37e4Z$EYc}_{7o--%RuO(e&KGtE*>4`x^lDE zi!$L}Gn#;S^T~iFanrN%+q(vnR});bF@;wW!5dA!5@V5X6HVO)9rl`EwVVzjheW)) zcv_1i#uE>yA8t?-D{%E;0PSkn!7PmIxy3=Y9(m%~>Zu9_+#+%$?)m10C?5J*N9+T; zNg2hJJyj~8FUN+f9bd?)Ni_rXbYO>e$ryHzy#H9T2v3HvHR|AAE0DzV>mxUUPq-9i z##4rx1gwoB6x+bVZ2yO*^YEwof&XuIB1#$Ag(O+Y=H8@|h)UU9E6T{qzV0QJk7Sf= z?o~vxv)8@0WL(+%+Sj;TT=%;Be*M0W-}j$*-}imLp68sbzPXZcY%hmTZu+`JCFwX~ z{#djl)yb6Quur{_Sbu`!8C?I=!N3A7h`DB#k9dD}NB-c+#?cJl?F@G{(~g@p!%E?G zn*BPgof=rB>+Pk?)#Jj108Rr!!*%~kdeA+2sF#>hr+}-{QMOAS>^^gPi-&$8Ci2-( zU<*Wj!uom&D+#qG`yQ|-viC8-+ye3B)g!D%8IK-(BH5_xJKyW$?i{w1$))=Z-t}48 z6uH%v`zLf?P2jLGKF0_QIq&V|I8wsD{YwAU7g)xV)}^~20uMVayV^wZ%r<1Uz@746 z1DZ4S=rU5o*3+CuA#I{>PNee&!4G4l|M9BCX1SY{6-#MWPsxYiuRDc6Qw?kWt!3`7 z=IDKN5_r4JaoGA`Sc_+bryNV_sVuGQ_c6gzI|d#D{$ytqhCLR`2_2n@did}b#Zi6Q zR^1rtlbD>ewe_<2Ln!5Q6J?IAYI+M8wD)mix;p<$)^bgL-M`6q7B_Wx8L`IaTidmc zZH<;ewwd!A8-Vz@{f++|ZSYM9%rHQr@_;SAr7r;A|N#I-VAjrQ0zJs zQ?Wdr1CssqoPwtK6r9wDN`33iBons~I@2|;ohiU;Zy&y7ZFkc;UsM zPtyjp&5e6&MBfBP+%!kI0hZ&Bi$Pmlt1vzH6TYq-(?46RoFkZ! z>;S7N^Zgtf&+udHG50O#SU+xZ!KF8w#u|_VJdiP<`<977E#>lSIivoDN4vpKu)0?b z78#O-PZzjaMLg7YS%5Zh9EL2Ot2QAQs_~NW=j(65fV@wELz)2M4oV^#kND4?n6zH@;xxu7UOP-$?c}RD4QbWsE zipF2!c1xc1qlp0rUj#F@K_cVN>l^b+Am1NZ`^MzHN%;f2VXQnU?i4u}>#V6zbamb~ z!I-AK)Tow{R9+`%WEc#OqWv#bSMq@rP}xR*oiDjO`*o}0;2%)+0(A4gw>Ew3Lj;@lD7mqr?84$N+HCm?+@P*>>r1rd6*NPk6hFZ$s?|*9r@9$RU zm6TV&LC5Tv1-heCt`%#cOFkYEr)QCa&jV^*J#XzDX;1e0#j%H0N@P?*s}?A8&_)=Y z>u0q_5^%EVaK#||@$;TOPHcfe_WrALeD40`XL%6dF3$)JI#b%@plC_#OyDAh-6t@& zlIi_)yhz38jTvSCw@Vsuk?>X)^Ke#u4j>ywW2fC(K-8nT@6;PtoS3uGf8P zc4Ir!RtTY_IE!}>r^D<8p2`1WFA)tpWI#DQA+=vhS7X92hmlUdbP@Fa!g+Re3T(x> z_ibqwg`a<{gWlBg6$_epW=0QZi2V&E%=O@%f)?neNQZ`7LN$T+p?fCV5ZBp+gSIsb z<~ixQ@j#Spc-<~6^B{I$<3&9IOR_ z)+>KfHryH99r5T3`PyVh~_lb^y}?d0DkDP5DMcQb#m zY&^l$!EgQEcTcMh-)qY)h8%?BR1@|M#9NC6^a8}i(0752F(}dnnCuBDw_%kzRx|aT zEcX9dx#rgr)-bidoLm~hy|2ULkN^9TxzRU)G~*JksNmmHz4CZK55mj75ftmWTzKZ~ z6^_^XC$Jo+HK;t!Us7J?C;37}Usiaf9TnpngVRH5O8{lbe=Ar7`Dg!u z^+EcIYsr;&X{q#oJg)rytQS7_+91{1qCZ!XyArBOJdf-rOtxQ6`G%~hnKa>#@=ztO z!8yNqhNNdzT**f*bqVp&`$eT_meUY47wudElx zZ|{C#n#;dW9>nIK0gQoDXUC=b*yic`qCoKrV_|=y=SuA|L;dVdU;cR})=eyLvcMF& z{XG)(bF`CuaecXsbhQ#skY`)lajQ(O>>g9tQcY?x2ipWWb(`HeyQh=Zkd*%mea^AH z@g@durxD2Mb5CX<-E{9#st2iGJ|&>@&z8FUS%$*<#2nIL^{(!nh2o8U2c+hOw!KI+ z#Zo?k75^q6rP985stErN9+q)yNpI@WsiK1qqv}6A48E0S-1A-EK}4K-Fjw65E#Z}Wd`$dyo?gVU<|NjCCMMcc6+S9;U?tb#S66x8bB z9{k?m57z&M-dGMCIv6hAN2hh|Uen7j9|%1>dm(3QHcOVeHae@RC;+a4X|Bd9W%g^; z4YK6_y!rUq&&m(FJk%253U?iXRHJ^Hzrq7%Hi)mQ7S3>p(X|xHQjXq(LyVcl(?QW7Sb5jG7te2;P;UAxBH(G;ow58Z zjRi*Ysf`$(r3MkBD!L`2$U(@(YIIjV{mC3wSZr!?6TmCEDwss5?u+BQKb7Y;6dcK8 z9({Cpe`&-s;kv@PnVn8J!~4mNOet*vf%?$phFvG?T3^fClMl=8P3>+uO8H;k&tPE* zV$|Vvs||C%EVUTJvDND|#FZ*VM#0Rj(7`r9qDH{!`We1^y5>$`Dn)OdiXvavf52RMzOUzjBLDGdd>B)zg01CmQ$u-woLIBGjS zyQcvaT|#{AD>}?B^W3O_PL6EHR)mE7nYOjaae$5js||#uRu=pU-^VaHM@ko?Q+`yc zXvW)e#J^&eZtgvw%IkQX!C(R86tNy(;*S*PEk8N7v=%^7^Up1YpL*?32;h-q_s4w2 zI@F`}CI%*A!X`Jo{!-)P&;tuSU$}?VTUwa^=9U*+GAmh2uLf2vQ z#`_Q-1Jif+qB{wO5cYAD&(*=d;Z*KcIe{0*YxGpsm+wKsW9DEVwZ${#!2PC4`}n() zA(PAL-iKq^VDBOuUt7&?#>~a1bB>RvM$|-6zuT&0GKilRI2^lugLK1loibh`sMM!h z&gSLc%DcN2ImIjVX4cetx#1AA23W-lhRbT)xr<{>gILde6^wD-Q8R3?pmF^IuHqlDstZ5bXg^Uk?X$}VVJ(;V0Pjy?4{l=U}&+ceT24NB+AU9C_M%&Nv3?a@KVh!B(H49V6dxBp!(Hh783z{R{`n zr~2;+0`{gi;9$dfu>O4E#2*C&sd`JtNy?wxiW)hbM!IH8ffkw9a`gdL6S?=KVeGQ} zQl85%VJz$U7%$#y@T8-(<1)Cg%;!6P_|&0%o5OD@C{Oaoa%<@(i~9j@u=6}S0NMl` z{6T8?x~mivpg`i<--b@xe1zMg3Bvcv4k8&zqrcqtJsO~=iazj9fiW_fb@N3=Rgc|f zpGHx>L(X;hZv)92@HbxH(!|BFzx^Pt@=}C-WP;~RQtvMni6>LHhmFN9R_;^xz8|H% z7dTBHbEA(fsFvhOfBccS zl!%Y_0Ho3!Wa3cip9M-t%?R@P?~$F=xh{n`k36V)tiw=0b5T;2?A;>tTjKJqFhkeH zStXt^>|VIa%7u23`su-0X2@;aM{0=>9@7_P^V?lv6%UQJXu`+QSDb(LF33mx5q~%u zlI}{gqz}T)P_w(8Mw8u|W8+A&GIUy+@N~aFlAU$g#J}@b2l4cSd7{lyi#b#mXK-L9 zj7u6%-^n$G0zPduu*-4-iCMQS+wyUiby4OZJOscth9CdBPx#QTWLiLWnA1R z39*HI%x?1#2TOh>)CF%Cm!FDYF+Y1#ANby(bO$Hg7InY#%{(acX$0kO-tQZBOJ7QI z4{E4Uuf_SNCm7OhI*WIARvA}}J&tSo?b^RSP!+2hj%361mawkC@G}`&X*u5+ZAtBi+vtnh%QqRJ85gJa zNqX9H0CLnfPJ6@>?sH+4AO04G>M23Ti=&x??a&8>ycell9$#-iW%wK#1Qqq(U_N5W zsxYC^I?}Ejlw8=5i8a9VNpi`dlAFtaaP?a({6ptD6x&}m@k(=hHqH}BS&ev3_)HticdKg6?Twn7eAXOzVdC)ba zvN8`!_Sv_QVrwDh#qx1WTtUAJ=@(m{;S+(wa3(I)z{?_`uxVKbNR8_M$CMx|isM@|gb$i*&TO5f> zK{fB{sG!f6SNcU;=sUcjz<1l8uHm{@_VVRTWg4&Kh@qrCn?p|S7f~n-taTdz0@AKJg1A$$sRQJZylY$PH?%CeewIWx3|nG42D=b z1hqS;Kw;DX3BVoHJ7jwu@;kYwja07aiM(+6a{0*JE1Co$hADxsx0+v;JRy+7I~)UHiiKQE0T<;LgH1?Ir# z+jfVTNAF_t?=^etSvDY~wCgw}>#HT=Ub=kax)AYtVe8cg;?wWXfOCtbjosGV^)rN3 zSk;$axmguCd`B(dx7!8JZ*BNZyx8MGY}7ZE8Fl+J64#prH&UXtUIg8dnC3UZbWSE0 z5am)Zme5VPc>RI?>bneAfF>UpSk-Htu7{lCcX zvs0-vgt>%AN)(rd#6sq6<1AVSpAxtPX!m|y*gA7vW@{tyc z;$>;GjXv=AO{PKXh3Eajj^GY3e=QnsbV7gQZjMO(9qhxk6kQSH`+YYRUtMkfsS)!1 zchkli@JMU)RtX2f`~DnjMAf#%Xt!4mXzq*RDZ9F-my^cD2jT|wm-?&+o@-(El9i(0 znxLHo#UO1qoJdv}x_b45;r9nm{;ThQwZ6&eRUFmBD!AYsnLJFLuKBWawbA45`K4fa zZN@JZW#+P>uDIf{NK!!gP0eF<+DM4!7r+@75ziXC-%-E|6-gvkn2uuap<{Xbp6|o7 zv9OqFYq7}DR$72ozS4vq8~=Ob+1JP3j7wHDWg({zG0WgZMZ+1qn3azv0KQx^a40^_ zli;+|*&zD481j=a?)g-A-c7!H z_{8nFFS%JLsoW)$h@h!pGPsJv0IiDA2$b;kvh~!mH0zNesr&nB-F%^!lTJ6*y*q?C zWZsz`jyPCfZ`I8$_>+h|=Lf9k8G*0^z|J;8$PhiMjgN6&<&HZ}dJbt~EdiT2Rqm}H zGI=z$Lz#!TRcRd)Vs7kgPJ}eerB-gmAgmDc_*ac=;3OIc0HehrO8OqXKZSPJPkmJl z(%QT}#h9N^GZOWnD$na`k6P194A0AfvW)9EDy9f+QS0mKGDLw;6wTj4M^Kz55Ot!Q zi-wf)VY)JZ8PmeICbG_^v)FCL++LIt1ug6i_Ttk^H5?x6H5O8UiIje}Btm!A%B-|(o zdkpWjo7>=et)TCH^wH!-8;1&^D|9@n^7oK#$|KU0Dmlgo zBs;1Qqt}f9InUq)!;HfOr7`}q3tWvZ?tnIfHa4;qJ%?Y!YL3qdW0HfeQ5)j#6OlZ_ z8wb~jN^Zuq^vYeMJ4WaB`PC)I@sRhUBM)6-gBg zISzsk8(FUr%g0a;>D1&g`L{4!*p46Jx;g>dx&YxrN3hMyMq6!M?U;H2JXixZP8j}C zr2VT$3%4WMq>gC^;U(%Zb|%ln@S%D7J3)F&Lz$vl#}mkD^_}5Lg1q13@#CYJ)4{WO zKdAwqAA(W0_WK&}5iQm07%Kk~C2shb`DgDKNmqvwteI=8+^FNbjnLbW~JHgYre~)UG&ln#gnt{a~aEynWf~QNpJ4 zjms-#u7T4v*-0o*LY$3@XXdoD?6UC5*H|C{^9cwyjIQn`y|`AWb?d83%GjYX)!2w(AEBsFJdk1*rE?Ows_$)M8(F_t{zDb`nw*d6d| zkbF}jqH(DdOl%rGbiB;y{zOo~OrZ8`^It(Cx{Cg>13&)UjHocj7~;5)EM#~}d4W``V}0puRtfZbD>M;SgXYmLPiw}q0pZSD z9qeRs@gI_Q9{>C?Yz69pLeKNw0RI)`n3;% z(?2}4?q2DLQ)TWj#D^fg!J6h5{l{JOAzUy#O*Wt?@Vu%DOJDwL&5|?5+c$YT`|h9< zqWmP2_>oWWI!`Vi&I}pRS{NEldiRt}J7Dv>C-!xWI?v6TzfSPLlx)3WbKbM7@$oqi zYOB?O#Px!~Th0}1{EHltKBNO3v3^IxGe47A9p1m40AMJNa!sw-@J#Tx9TU2>@4!x0 zVN7?T>Ci@j%kDng3#(9Oi698l*&vL7U_lHRMks#E2=5?$a?TFCssw}3G-_ol_zSyg7!UwA;rRoJi8>daBi5(lW*6-Nm)4|X7}N4 zZ4l8}YkI!Naa;Aqn(=r9Nbv?-!o>a2!c(Y?KIA>fSJ+sPt+TldZ-l0W&?i*5PI`SWOQEu-V@nY$4m4i6!OefxjU zO+9A6&n_)sN{u-}Ji)vnR1Rgh<34>dnRRizzm8cIi9((QJW&*^rKBoSO7<#VL27$NnZzE(&sSeL zGJ;tb(_GpDJ)(Sz6x}nWE$9XjY!nu15wuM*>Az6QQ1I6Iz@|X(o~#@$0XGx%0g5;4GT%&8Vc@$h&hjG9w^^bP4KV$9Uu;(d9mE zo({ODW||vS{Pl}(ztgavgw=Y(3OeOk019KlT}iQ^n0PY-A$|<)jKQf{z^h^0J&DmF zdwFY0mtJ)#1R%!wX+PSoQC!i#dg@0fIY>}^^u?{L9Vj0DOz|bsZ~iC}av0e@^WktI zg*gMiZh-9lLLZ=@K24N*zF9nfGDbWUFQ{tu#6^zHT|cIDd~KVRZe)RVJfsL@)y5J6l6pv>GB z@2{3i<2~#-8KmE#q48f%>IhLIA)K*Fsu0QBZS2`(Z55CU7fttAHAdz-5b>&bcQQ5e zTc>{8k0R=)X8X>OKr_8jQqIaaux#~Q?T7x7d5W-}zIb=-obkf%{<##o_Q2WuKIQ50VMn#Q=4i2BDMgVJusK_FHY?9? z40NQi$_ce_^qT)=ky z%~5U_zeHYd?W!q#w}r48bXAq~RW+w==D;NgI`gX01YR8 zVMn;a&@s-NX;@b7vYHyra9m%U;tk!s>s%4`zbTFrGdjT*je zl1^i|gd*0X0+&O}NK>Ilw|*IQIIlWY_CG1sbxX2a7@ZrF(J&}QD$Qz0GLM?;=@ISA zb!3IyY~Rgu_omXn>CzW?_UIR|WFX2Iub_&@r>5%yd$vTATZ(Hbd(>1bbg|Fc<8kuQ#&M9=(TBAGO;VR;ONN4a z4@~b|fBRXVU=h0?e<@;Wd((7#P{^nA+i?n6>qF&_H$KKGUx8w|a|$qo~lGxjz7b;${` z;?EkQDo(&JlnQGMyZ6J0*Q~yD+SA64yH77!KmZ||LjqJSByim)_@+L>vhRY-FluiyWar%F%J6>N#b>W&0wm_=4ynAx43e2PVdpDH zrEb>QIINsDo3*q$3FnQpbQ*`Lz8S`u(l@F;l~Xv*;=~n0c>V z=E7EC)X;oeJtX!WdDhH=g>~UTz101`?&s)r$Y3dw%2p+rTuHcT4k`|+aJhqRTX+ES z`}%he^sKFQeaTx1lm{0;;|3{+NQCdrnk2uddWYln2$-H<8Q4jp{ZKzjmX<5O>E0wh zcB;9Rw}SED7`);Pz2zSD_CcP=U>&HkNO5WGs$_4X^sD z{Msj&jLX18eP?loZBX&iyU5C#3{_K=WTC{qrGT2+b0h7D$&QC@H++oOZ+`Vm%i# z+fNNAyi~F7EQCh14`a)cS#kx=8wiSS=}hMpz&p5FAgBFNnvEGCwIEnkHEN*_yGp%L z;5opSX0uoONlsvc%t(O2&B1xz5W&a^rkoK>4>BX)1Gc6o?V34oU`p4k^Gy5Zmv4P7 zUN$j}p!>sZ_n3&n48JYjR!J>PJ(mu`A|}rsC?}FoeaD`;owE@MPif6bGn4&q9*|Ua zVfArRRK}zK?mfEnxObxr$+5I&DuKL zhG^r%1H1KvcMqthyk;p>pTAukH>SQ%r0?=`+0~yl%3r#9eox{m`?MaBTq~4-+L3?Lqcs-4_97>Ub=r_jV1h`6ck6;K&K3vW#vk+btMxC zp>BSI83ssYD*R-BoooY)C$Ci56K9)FXxe+bG&G3&*Pad8s^@Vq;Q`r#=j<@tufRjXf8 zBzy1hLl6=JN8lR33c->-44lZVO6FPi(SNtSPd~GGK$M5+x*HFMxxGl-aV&0Cxoh1< zJcC6BE!EUf!fVYAi>R$kWkr5(cgD>HVBz$5b70ANanEAkQ*#jQ=>-F5_=ag=@V%v% zdO&?L>e}GfRg&%{hlul=LIPZEd}vRD>AGCEo~>4DkgLel%_w)WI`XeAagy(#f;s-* zIX@QQ?14OSW6rf6kfQv#G1LVR=9T2Adi<6nxF-xu)k)> z@ZSs@@VoUp0!Dt4DMZ_fUBn_FR#ENy2u&{p2gL;!adSFb`9YhAgTW zgWH|$K!YdtbuO8UVf0=Bf7Sf;W1l-$95Z-#l2h%za6O1t_*N|iA*H%8zl0VYM7?6A zHJp0W&v;U?tGu*lU1_#4-f|xce(ZB$IBu1sxP)5mzWu0*^H?Xt(vXL%iVCF34(Hr= zmLBzs8nBqBu!S)9p8$hYh5l?ylw&4Z1=5LNmf9sUaMP17G-7T-g`Vd$yq>q{4GHo> z?nKPaP!&&w+rZ-y>srrf=k1F%D*CkM4IO%5w_Z29At-vFdDaTyk1r4zWa`Qv!*HAwAV}nq#*7{3cMUrJWP9sr&{Y9Y%Juz z7S87UI7dU>&{ySUH~nPmdgkjlA0RB>_okyFI@)g`bc6wHVWOyW4Q!EE)Zfhe$iG=(rY*<9YC<3 z8kC9NR>$;?Vlwb(2eY@Ke+!ewO}36{B}aRqq1@ooV{wzbEIHQ}Zp2fAr9{lN7*jc8 zTbLd)IU-XMVbTL+^*aTbbPtMviFL156M9|K#}`XW07#FCWe6xAdi$N2#^_&<5w}C`7UDf? zgb_vcfZdD)J6ndsTm(E+We@h{Dr2M`(`3)kP(A;CUd za_W|&?}@zftODQy>uVAmG;>Ag7maS3wwiDhwzU>4KHw z!qO5JptR*UXjDcne}YQ3iuwI7rf|Im@17UO3xe!Yt@9nyjhih6HKC!g*Fdsw!Y(iI zm-+-f00C!PhXrCrCaaa+9lz(pjy?C~Qmj(pnR234>+r`ZL>ep-(2)Huhc`RY8t7`Z z?PNh-?Kh`|0}tn{F|%APt+L!mRzasB@jg9n>8g?Pwn%@PCh-A_lG{Zt`QS4Gr|0`o zS#0YX=_-F;R`P?3&GF>UoXI^YmIyzqxm^(VnrGdog=~+)tM&N5S|q3 zB*_A^<}ZM$Ph9UQAg(q57oI@FEa+=sS+7+$53=AKz)a^wq#vj-WvWd(k6prVsRRh# zHU$SsB%pr@P5?WMRo=(+bcW8bi0mBSR%7tcV3-m?^xuqnMtf5FZ3PiW<{WDW8M$o% z@$LZozl7syTcY{t@7=7Foye)<)kEt?7E0!+dMo3(pT|~U;gFYhXT$?&;}+32_koX-h8v>=LGtnCAJl<5p&42rs8ffRZ~8`TB6WGQ^_X4) z)jAb(PB~ekG^@*3Zm}|+gmg+6e(RtD zxo&AV0HT|JwwoQ>&QR}&Gh-t@>4;}jPtWA58$(A_T+~-#fc#FpZi`(i5Gq6KR0Ibj z7I|dMu+D<^3zs1r-S?g=N8mD7mcWl9E46V5B47s~`Z+RurW^n5o_qqndi`dQxb)}Q z57F_f{s3YJ^owL(ta3kwyDDM!2sABgM>k!s;Y+PzK1{ZH!QDjr5Jbd>N6Wu9_x(O* z3rp%~bW_}%%~_hp%eXK5n7Tg#{)v){nn|&QmgyTQUds5QNf*{!p4iq6S&aOT7tHP+ zlw7rpHSe*SkKW=wWu1WCa3Iodn==HkE!cInzW2@stIbPqlD2 zkEZ>pDMQ`%#DTwL%a!G^uAvTdN7*ov&b_R#-_F75gdg@>EgRhqU+V0BSCwHHs-~wb z0An3_WC_&W6HoM$yE58Gj=MTg65Hty-GbV<^yLzC@Vd)Oetm^N;a{mx{IB2d{ zx8w$K?kXrKqVMYB!YX0~pa{Oj4i4;rwYp5XjHV>pugQSswqDevq7DSKaR$M>=I@(Y z8Vmre!+-ds)@k1tqMokg!dR1APJ!TutTeenGGBQW{SbB)Qm z_NPt4qmwzcx^-V*bHLf|Kez`GO}=l2%gVFyyFttpc1CBf$+wS@kY1N%d4;=b0-xnRVgo6(Id>J-4 zCz!a+kA{rieZ{KjRCPw=u-j4#edF1wmKSaJm$~2m6Af)w_k1hVH4?F0{E^`%77|c4 zvG1E&8+eoBj|y(-#$~jZp{u6Oska?W7?1%zIZ~JH`)(Nyorv|n2V**53|~~--ge*Q z<=`vI|6V?idc^TFKd}Jkap&P}R1UQH&R!5?MaL9x++6p^c+l>5+ou|{ol4LH|F7GZ z%01p6XqmdDb}B|gHHz=7CL7Uf)R9(O+1cpeWlS9p2^#~-U{lTI&(YU)ksfMSR-W8?&K)DOtJ1?$2ul?J*B3`-9DK*R(HJfPF20}O7= z^z;zVNX_(3Ev4V1bHBBJwQ4bN+F&}q8i*edFUjJ2&3h@aujGM8HozJw^HI-}!<=!b zbVka52f7hwxpN6ryJA3GtQ-pQ^hRtgU%Ne6CvvfGbe_OgcmstZK0er0e)46&_@TM4 zdFN|LQpdTmo04u}KIJbbCpYGGKDZrFywT$FmB7R+-!l?Q&e=!B1i}UM>?TMn1{VgO zioFk5iL0=QH|PRkvvdeMh_lz(c#Tn&5FflC`^kG|~V>F2tsxedlj*xEM8 zqre{@{NVB_FZ${&tde4G6jD0EHrA0FDpDGq6A2OZxitha zqiFvquBIBYTa9|lFsj83$=C{oj=~QRCv#lxD9{u;1eeV00F4CGFqjC=BL|v8sgugW zU9{nOFfe$ABrOuuGqRdwhZ7);7CWod5R}UvDAJ+=VHuXHj3zd#1?IjgaxkA@^GmhO>8GKm2#>jyvGg)=0|{7$x( zX95-}lVxZBxzQtpx6~y(C*>3d5#1MB;EcCW!F@x{*1~!*(2AbsjTwcdUI)Y&ki;hX zLY9mAA5N~R>JX#VcvxcGl-nh=&c*g(9YDQcDvl6r#gkkiifi6#$80>0Cv%wp&}Vd( z)_@>wlHVsRKBs)=9Am*J&1$WtPZS!wSq8^^rBM^2BSRJLEFvQ773yeh{j;Do77Luul;Zu_FEZ~v9ULKrNFljI2Y*+CVzM`h%cS~YZvcXxtVoupz_TOC@HpGej^%c zzbceTZ?fP4?$pc-G{8PlIgivs{vlJYPNZYx`xM)}W`RwhS?#cID%GJ}C>nQ)2W@TyexMHWBw#g{{8~yaylSvWmgz;hIc`u1FkcIaHOW zIoPWVUcSDqyGXlObc)qFG2qz&#x;)prMHRBapc~+i{A9~1?LKwL+Wq>?l?ymfd$P{ zlNyiREl$D@A?Q$x@?#t@hiJeg*CRc4*d;^>$8Flw6;Oij-5q8t%igSnp*#-3glj1f zxX5GBLn?ILnt7)R4L4h&B3bqW_#w1B5Hlx`UJfn{v}l4NXkf`i6kan5-r;h4$?a-p z@_AK#et?5rgiVQdOGrN|PM5c8x?BKFKVbt&d{|5QyI=kmJDXgi`@JEyF zjj7M>!gbxG%TMlz>Vp?sIC+stoU*7DP{lvO0LJAZ{@gjIxm+WXnTz}*NLm*m(`sn zbNpXFg?m3dp)EDNMu0EF?F)8{(>O+MR{r#wmT;|FF(jIn4I3#2api}#m0oiC#%Tp) z(-v5FGAcnl;K&+|t%)kP0rZufmkJgQnm}u=a~ka(Edgvfjq!tB;UOWYZqfh#BLZWtts?YO1?mhF9e7&8-KboZYtaW`_5M9oH3x&!ywxGlpsUGcr0`6fR zZ>HuB@JD*0+F7ZsR{TjZ`>M(a)^01L8{8z|euq%99@6cC=64g`S|fhz6jt{nsY;29 z0o$?9??*Mux7*Dvi+#o2`|XtVc_drjYrnde>wrP$Lgnevss_d`(|Qiuw(qRl^5HMbpU=tXEk!^W7)gZoHIZOQ`3yb z5PA6V%iO;w4;I&xBk>l8#P%F|9pM*~wbB2D-dS)PW02I(Ed2H~^q>Jk@51eSw%~TM z+mDef{%6_nXr>B;0NwdWCr3#);v8(10U3X%Oft^HW$3b4Eg#ihLTC0|pR$~k&|E}j zMc=aZq_CtC=JEs}qU7@4VH|f^v0w-n(8$<;a4w|$Z$QK+6~YJHeFbs+~+7TG?)&AG8 z@+IUhAya)x7|ll+W4+E-nw850%qe>auFhR^28hh?EWtvKg}hp&a-<^9JYqb^_WLFE z_q8wOV>cy4W=|UVS(4H$3OYMhy!zJ!nA^(ZM*Rh>`E0EgNNuwXe3*g~386pE^zMEW zf1q<;$Xk9heVykw*rrDu@OMB55un_zvw-9tvdFCoD@}M-QVw`;0i5KJWE@`7NnC#7 zV^B%{Yz`!S(Z{@63I@1{_g%);rZ_NEgX$mckMrm0j}Ux#Cr+lm4pJInbr!2DBY0_F zG=WX+cqC5)khKT@AJ*Rd9}2LI+eReBWC<0f4Ix{yFH@<6P)U|BA|(61jTw?;9U(iD z6v@8thQwr@WM9WV_Q4otpT~XQ@ALV*KfOP_f5Xgm&0OdCJ-!E(S%o%ln3AB(+Irwn zfgJ>zJ)ezL9FCVCi|lRX8vWqhW;v1fV`rP^DwbLpLx}&{lyjDuSnT{DfAzsYqejl# z&bzTvj%_~i)iOS#hfAfdXSH3-(%eb8wuyw+!}0D4^Ic&U^-vz7zZh&zJC5TLB*YEdNANTXwKnM;zdN^&QK&%37{ z{B0`nIDQ8$uI8Nwd5X7`5Z)exXE_{{G4S)@*Ghu<#ti~4dSt-fAvFK%o0?>Y(=ej6IG5&7GZM zS%^83I#axQcq6+;RlD|94Y5b{1B5BKPHyICkq6uvIs1}#UI9{JjR1!{`2%^H3)5+` zk)D>5pcU#pdL9nYkRE8k1PXE|Os;Xxs}JyCG!T#+(T>_05XAK05p>m-2C%tmXKYio zbL#%_nAg3F9wt03XR=}tlN-ZKv}gvDoC`YXiC+cNFr6@%2MdOAx24@UcIW`e`Tq zJ`Wfs#vJ8J(S5rknGqr#k*y)u-Mz83$MuHvkm9Q~FV2LxHYrr7qZzO<}7^y`HcM{w628wxy+@E!@lMlYBPYv za&1%eDuX?sv&U^`ZfrPExOA4JemtZ6J5HDUN;HrEQDe%eeP<}U|2>oQT*pqjSQ&-~ z@^VOty+!9*;!bZ~`#~N7Z-1S)`}-%$KTc0>k_KLT&f-(rK2u(&+H|&Up|JFqumhur z+d*G@+e4MX(vKkoklW2G=KPdmWVm)i(X8`sU|p?UU9m41x9CJUN&!e#<&|%lSpm<(oh*a7h0~mFRdEXRaY>O@$e9 z7#6=HICwwO!ge(4;xaY{;IqEN;JoDEeJ&Qbzl!WU>jB+SF7wbN?W;PhMiOpzTv57} zwk1h0Whmi)zj~5w*sb%B^q%|GJaE4xD@6?L6!k3I!zN?3_*sx-cTUUXd*Ich2 zYY+V?hDjdO*y3IHxI!GK9_c{{a5(z=Z4Zjz+gS(+6$py0`uHjGBom1aM8)ijxiGAU zWU!*y|D&FGhw$!<_{BgP$Nibl?enp^Eq)4yCZ5{97-Mz5+OYi>{7pf;ApFa#wI7AF zL|#$)2w~|RnJ2!2IjXoQ*~ex(}Ap%?Ez4;li}$8+tcaP;kt8|lg+a~ zK-`$u_wB2q8Asynmz4a3HR|XqQ-K0c@5LZU!zTCgT;2{raO6Q*AgHYcHhKQbKd-AF zecldaO18glB}$fB6&Ho{JIu%WSx2t{Cr!T=e=;3-s`Fv_qc~C~tKK<`=httj7KmDh z+zNyZA~xD9;2aRfB_`mhMIw;a4I-;Ti5tB8uOQ_nIZHmd0N*b9Wk9p&dMu|qqG0rn^sE1YP3&oT zH^^Ne=4ZU~*2b`NwdIF8Era8F+le!29gq%>(7G%g?&mg4c05)y&isfu`Q(rxl|SC2 zYWS2w$C)4QVj;oMj2s&n@61h5cDd_UzZ*6RiJZ@xc?n>jp=Bn9H>hGMN-?{toDQMe( zN|tOeWn*J$B>qu0NJaWYWE8Rb%bd7cV;D?K@ROmw21eo{xV)#Ff}gDNFN-56WujmO zPgznQ{ATbo(C(;F7>+uwl5F71d6lr-)z7iDBCtLgTXPFJDTTzR^jn-y7Hx~hL9TYd zZMYGsb78!ew33na@Xm`91r1&c;spVKXj(5|)K?0l^1Sk(seF2?OJpMceA(m8;kki- zLU_ZxNMBf?CPN8io^7n$#&%!OHtl@{B26_l4132q zJk?x>#dZ|vs#!Duf>w8;FIq@K1l#X*?`V6k@IkknP8X&2RhAV^hJ2N=`w8DUClv~HXc8@v|qui?X+aNQt+CrZ1F^hX)NA;}voOWy7N<-fRQ@2QD#N5D$Gk66WSwN1KrtnQ+)oJrY1X@yUsi=#|VT{`5EJ2dI8Kq8guOY-ybohxO4)8x`;fMU+1BF zwmUU@(L21rQA_k4kEPDFcKg}-umj4k5TOsbkD+#Z`J3-xQ;$Nf{Pefi(T0DBY`lAZ zQmB)c$u#H6*}276v^Po7pCREFS7)n6LYw;g<;CUZI=uk5iN@8`hI# z@6mSF1IQ+z?fNHYbxYr+ekwULIp|-5C)rawy9RH-4Z4;26f|Ows$lZ=BEJGr$y{Eg zgBRo4-kP|Vr@xh2D<)0KJ(D~-pSIvz|B(3n^bnaKKSBLuZ5$Z>HArg-P!tfhB_!-^ z@|+TKs|6ZbRr~<7UB7zm6RAw8$u6bMKmTQE{EGB^m;k$m@=T>_LgPEN{a8)paRK*r z>C-dY6xN5gCs>iBiNM?E8`7r2{ODsg5E>%$a{1>x!?6#lV-yekg+uITNr4Ea(;vA8_Y?40}1((Bjd3lifnhZYckBdn+zQ~wO zI_5XaQ#Sl_qCEoYW@%MXW`AA2E6*Mo&fAMsB)*Kw^5t6GaW$!&&1&u*F5bl^gBO1M9X0}z?J9nPXtl^0X_!WS@4UBBeDboLSH ze#SSrPKB|3R3i&z261pN+S=mq1;VjkD3+XC-a7a}=UsKi7C^486z5DY(GT4U<~&mr zQ+oc%0ScT~qcU>wjwiHek@-Wnt(Kne<#3LnKV;nrQ{RR%8ier~eE~YpUsJ$_J#c;@ z1U%7J#b`wKXJe>br_vCIdeeK+1=j_!1effK!>>Hsehby)saKksbAB4Ct%rjLS2*IZ z5_Vy$_Y*#6*)SMKNX9UdAwNl??RT@bGq}U$AM&BV)Ho2;iXqs6BaH$~JhJ6J=!hOxV+eyH`E+Bx9^O-{6sZ{5%`)B9C%tQEsexH(^in z-j6<~3wd_%YxYKP297=+>(WFrpOb{g?|uTFZax)mmC~z`|1zs|EOWhA7`iHA%7QEB zG8@Nd!%gg{y^3@tO)r^vkd z-^Y2a+E4C0W&ZH$V&VlcT^@q09|lS4n~oRb6*zTq)PJ+%#9DKkDZsm^iRtjy{^$Aq z!1~+{*@5=qdFrVw5;|A7m+B+%?X~uHY=cz++<9kJgTb{;oUnc$0w(Uh{O3DEDx@qJvfyf90Mw zgOZ?qW3%uJp~v`K;Kge%i+%X`J8M;{)g=XWD#M^vMk7isF=t!|p&k0_Y`(-R@6AJ- zo#IfzVIg{k$n8L$qNdv_K{8B_Uu<>NJ!P=&(#W=z(jhy8p~MOe@Zp|n)It`2I~a&h zfsYN+RX{3@tGv=dk7shzw#pu`wDmi6Av2Ai&AnP0ds?0oSIbuKx)A`KK_ME$Lt zo?!nmHRDMZZ74&DJKPv^=WStr<55U0_{3c+u-@Jd%0KG;sLmUe75b@+D!QaV$3M|vJq20SlAPC*(Ovq&%8Nn!5`tD>pH*1(7 z-}ce;tDK?cnGSP~+1K=@ksWv`*BPNU?}>kUVVzG_|8C<555OPNe5Wc%Hp$Vj??HnV zt8?vU;b#emrgh=WBV`&AxhYk*(8rZC}Cu|?TmYdjH_n;%=`uHVVTjLtvJ%uFGLF2VSQB)Rlv!tsn6uqTk#QyAv}7FdGn6~Sqm{?@3Dc^4ng>#Xet@}a zmoaG~c>fy?*1A4JrZRZ`xyG~p_D4{Es8{TurhtJ)$a-S#Gi6uWtncN0SE$;y!+hZ5 z(mYj|h))|46=?9};PwlXxZtdNi(fR?w{mv#+J99X%hNZI2PLpI7MLnXVvmMlA`1V( z?gJRaW#msTqH5D@(}4B5b#ItL9^m4(bz6h6P6vHK_!GN^?MGMA4eTrmyN*|DJ$3dZ z3Dmroac4F>ASlGhnb05VW6nEaDLdk9_$8ko8c^Y2t;1%!(XUA|%>6@c_~M(wUJk5E zxZ9eQQ^EHd%li9)n(c2s^)q+2Bw%yie28O=TH~NZf?oBzw;kGEtVN^bD@;2wBXmgrlij|W>Eq5Wue`o$tR>i;4{A^Uv@%S-0u+~qM|)T;G=KB z!u<7h#2HDLuVq0_5pr~0Yc2T^=W2!g$l=~R8GEha`DGQ;x0f;0DjfDVrxb|g_Y>zA z!%j$G!g7!>*iS;c*4IrwG{*CzSIU;*8a ze(>>a&|)?$#fl~s-NgC&wq^;Uh_iM(1>>tMZISn~cPxId!E11bBw3kv+ChHXdrXnB z$xa+#M9e(%_}3WV6)Lq(GTQz+Cug7v)`TKCEl4_>PmjMJK2DibLJF-AJtNxmjxViW zu)G1mdj6C51x6Kpl&}yj0oE;Rem7DyJ<`7%uxaP4g3n&l4IAu^?~QB^p6jfjn>Ei_ zEvK-x=foje?lGr>evrqLN~n9e7E}T3KM?ik>Gfdia51X12Vwc-3rvyDE~8!I6*1Yf zLvbBxbPG7)g^K+1sQn`$Ysi^!94S-gDU|sRlCAM#%i$MuHV)@bRE+2R?olLp&o{3> zV=uF2cy7dUJ@F6X@S2Q7d#Hlm`8Vjer1q`T3E^8H|2{n)=-wP?^p#C~xt_rbKxZm! z%q})GC+Irz#(R2qEd+FN#7g6t)o3K6KJCa%E>Wm z+PHCqqnabh$derv0*VRz99kHM3L7*uH&IaxNRw|CN!;4zDvnfS`dDRtivP(5{K;h= zB(P=46US?D<%&t^ZF09o~g{LVjYrRGaZSwueI38hg2QaF->SSiHU43yfahrZj$-% zCsTfsI483|{(7MBZ2cG?>LI_3W^Z&1TnXH*hraph+^)uv_4Llx0zUg~H|sn~=|wi@2aS;_D^) zDG~|X#(I2%`v%Aons~lD_2Pg5*q8I$hmn{Q90xWa*l=;IH}rLdy31wtfy;VZn1^#{ zSA0#SSZ34j$Ev$#Fz?^Nxfguhgn{hdi!+=b?g>R*1a&A*-sY#W#Axf2QZC+>P`bAnS6heD&!S1vpX zIiVp}JFw(9vxS`V4#Chp%U{(!?8zk6Zlc}C|1eAQ**D*Ee;{eMS0-QE_#qXN7%|pg zli0C16V!43{2R7fsN{!!tH*_*b@<@3AFu;2j;MwIgO>c|WiJ-zS_d~-PpvP^G#wHj zj~0ad9)NF+R;#lBfiu&>6CtmdYj$a-mp|Hl-0_d8pckBS%c{ny4*H~0PZZN$hqu%gJ2*bWl)$>Ft*zWoWuQ|o~ z3nZ5)^4$6@C&KyS8~U9k-y7PeQcNrMlt3N({P{Z2ukn)Yxg%hmicGMg^dCq-TRbvg z>*m_xztb8fJdd}y(#80FJ&PVfG}K;WixDCm0;W6f_;oe8HQAFMEt~AD;NAYiEG_?Z zKbACm&ov%|)a(6RGuFF69foY8V2o`K_aXz7dA4yL(8p?hjsU`&@}R2Oo!^nX&@ASn z#H#b%C`)zx&kEn`$#p?kXRY`=7;*oYF$$)QF_aIFXTMD!0W3hyOv+~z_cIl%{QVTRX5pXI#fM($EPzzu$(3?D{*#G;((qlUHG)SOM9eG5( z{yB!vkgUpBOsGX^bj=vkBrUR$3&I-z^iz)- zk3<%6y-Sl*Biq=;c0ZSTfAI|(t4h6|fc)K9s&cmW)h0euRRKB?5uC;otBxETb!cTb zA>qhI+62>{H6cyyLg=#{u~!Y0*Qk8u_T`eAES&&)PaiL$7@8!HPZ8{Fw^ltv7Ix9p z7LAEEQSQ`vs!@qSlZJCTy1=-^)HS*d|G#x-iD+4j4N|$|_Jfn^vo+o8lMgOzDdPug zHe&Lg#e}08ly$J{LU*Cr!mL7ok$kc_%!?_?GFI8=u)^XS&ut$q#AiwhK7CBp%-6AX z2Z;EVW8323>4Ms?xPSc8ZDaRT7WjAGKR0jNlECdf`Bp-xj>QG&Nj0kT19g*iCEMJ? zNzV6{fReuHZaLUr{WJmm>wu%rL<3;o=!x}K)SacC^aFtpF56WJtvtZtnO|crt)=_! zf+i259g$(^C;W?*e1C_|ABZ?G1>H*<77GUD2d}20 zL1*yiJ8`6519CL-;@707XPyS=DOkMrzOfXU0;rBETJskpEJn;fO`v_rqi{)#zm;rT3)Na%j9yjv)$Lgz_g9i>KnX$I|6bE(8i)Hg2(P5pM*XYwyp z7I`!PXUWT4V`+RwG13;gF*!lCK1G~I>=p~auBuEAn}Fy<7&QS&F^9>u1u(UUz5t}m0by9=ax)1pD<3$5a6PBJ!exNm_ zkH$d}IQ;f5qonP{lkq_ac(4JA>3T!)T&Gn`r7?#M0}3LOR+*e~H}w9_;-w zxjOy9oNWq=*D^OduRh{|uFCT*(f&aRjill)O8w*d%Jc+q#?-E&eiBS=u=p^^I!@hg zFkqny!F+Ddhs68Wa{GFM`|pC!VjRr>Lhh9Zx0R;Zu{M*t1HDeKRE73zX!oby22s{< zhc3j$^=;C5<+Ei)3z9IsHI)~>)3CSgp|^Y3YGD)4#$tFGJsNm?5*OKkCbiDjq;T>H z&suv`kiu#pfWZ>LiI&u4ab~7r?^7Q1Sb(P-yvAb zeb$h=UoZK0q4;ng`YNmj8iOHCWE`cm6Hr}uMQ>y@l~-skN9ynVUYcpYorAz-I!YdDfjwccp|E>8m&e5Es7p!Pq_EvQ#-{$yFNrt-7w@}kc9@IN`0Z`oGP=@jHe)n4 zOp0+XP%R3tx>f%t$%UQ$y|ALO%vC$~w zyMGzKdmU{ev$|~06Yr1@ec@h&&)_B7qHR-SKCMZ4|7tJ`fUTT&O zXi=3wqB{*Q8{b~>UYj5b;jKIT=_>0S%T1d?-KHaZ~66>~sKE^Mq7OBf;|2p(I(`fmu6q}u-tj%9auv~;V z9e7;)p|?xEg{CCX#H|M==EG+u$Wl0gwqWGxtcEL>8_yre;YCSN14&D>B01i=b0kk1|}oD0IX zq_@zgUVlSOyey3LjA7-$Y$PiXZmQ3z@f-XpEFL<*wy!4<39p9zxZhYZub^Vq#t=TH4WmlS-1NPv%5- zrS4d`Kl_EGEkrl1kKcXU?%*&Alo9q?KPR`cQdKcj2M7q(=Yz6IyWM0i+c$nk4l8ey zPdG@( zg0Ya9-yJ8wk*4yMub;C_J2nGZy5B{0Ujb11>M$q6f-*RL|bl*w)w%mDWW~3A8*DL{vZ3uoAQKBHP9R<=c_{ni`)@=1T2R_rsk73KyvPx;K;ds$~l6nOCEXR-c#@F{j1Z>VF}AvPh`k zao{5edB(dPY3>m9N+7HqSm%R5@}w(p|^mb}dg)07T@SDC{2m>LWYT zkQtt2zx$eMFT88Hqic5DI`ElXI=82US3ev;R02JxV!}@38TmLVXjtW+`n+4nwTe6} zd!gg0C!MXglV|F&lI4{z zhTF5A!9uT$e1@rnZr(qYIVevEO)FoHMC{V8D>YeKWWtEgn{PB(zxz~W!%jYLF}TYP zdcTJJvu_w}Et&YC3W%2hX=?@tl{xep1zuS!NdplV0Sq#jW0`_)$ox-EZ*S&taR%%d zNe`t@pZq=BtMEqQ?=IYPCUxC<*#ZK#{i))wO_(wnC+5J7s3qS>l)EhE$y5AxLNG*^ z$)%x9y?4(kl}5klg8d)&+c*%nRU%61|Wl0#vkFUjwF4b2VmkZiwZSSmHX)||6WdWf}jtWUi zsdNbg8@@@Zx?RfZXAEJ+l_jmFA-p6x;GJ}Zw!>UjCXCf%1|K^1_5z1K?kA@4D8#Mk zKE51`8uvu5GTmaREd1QaHfs;9?E-{A51fq;cPt-a>o=6zjDeew=e+G(5&-`_zSE-T zmWw2;Ux&Q#>YP8?^h}FpqKGr43(dGOTeEL4smjS#p09AHP|4$2xSOLeS-gje` zCjNbjxswe3p{FVmCJ%$c+ z+uXUBG`>Ik>;J_k|^GC1TgYe_VFx_v`opo+66?+kl!=V-DWfu_-_M zd_wxDyp4d+nqlmo>9A|2}#ArZJIE^ljaEX?nVBQzQBjuuIE^{ zuVdVaT9Q>IYbKZS^3(dXInBl_CRhwtZ6Ce#{I@xJ(s9Cg!+#BVZDX~5SiPqH?N9@n zrprgWD`uW2?eH%{&o@gTp~Q9eR;S8d+D7yAvM18mF_cQXLVOG;J~ zRwEB{Oz47~9^#O~z_dlbj_u(qV#~`gpPr-Rchs3q2i$%C5To z>*0_^#Lr_7*86mSaLW^lp6S1Q6)Q8`djl#Bmp^M0-l3zXM)gx8egR6(Nnw5~vT^H&% zQ@<7iok&>hC}7qWuN!Vm`)jhl=1)>sKo5vk$bGq z!0Mz~k;Y!fDG=GUreKI5F|2day{&`{Jk;H8zxO$0q#$kyB%J{s*JZ50b4Iea3cBof z2h{2%6lYEYjxW(TlFePZ)B7(pSMoa`Pxz(b$LyNXu|xmkmr5|a-8Q~wjA@dQE!LTRiw+G6Aiq z{<}5@J`8ay^GYlmtn)qFv$6~fb+Cp|T?F{TZaRIO>`8x~SM-}_!mG8(*+9umZ&7RU zl(}2D?`h0rt~!~}s%&;zT|^tX?{KN&a#N4|{3&+z2N1@ePh7H|ig$C1LJmHRXG|-& zwes-Z`!(sLnQ%_!)s2U+Y%cR9RDgs(r{cBmb%l)g4-J>}kPdym0h|9Nm{i*0Uu*`x zm_NBHi8Dxt&g_?b^-zi!`E%u=Ui;kwJ`+xf1lKdqW^A)EHG2IAzatvW@wJ!0Ff4X4 zt-lsP`$*8L1#K=PfFY03QZbmYtuuwkrzm7i$qh-A5|HXZKgj1T)mh*0863umu)IeF z-U?M|e-q%OipS?!5Xje)^UN6Xj9yR1A;NGRMQF+GK*5-Z9+LhChYXv8OBiBTNCx9+ z9!;xnQmZ`ddhn#^zS4l)ry^_;cgLoKSd&WOAF1M}^2bY{SP6ke z+*Hxm3pw6zRl$_un_a7^sWf`m9pr1(b|n?cn{xTkz4x*3ZvtL69k&j;Wk*zo$fduD z<8tQhsge_2wkkyblekg58{GcQGugh+u8TX_=lX7adBerMNtXNox~H!r);Q}(OYH~# zNPQgUE7hQby&*vJs;rh2%vP)GA#1umNi1<9g&oHw zS_w8+EyEMQI!)GyYh+sXT<|vq5UmlAJBM2cx27dkuDsR{U3GZxy!U?5&+6!I?}%hC z=ZA!x0pM%Bu+7MK9oPE~6DP@U?yES*#qMYg-E>G(^w8SbpA@e7S}pnJ-t(Y7+rizJ z#!JJ%?J<+f?MldvOy4kgSYtfjxR;Ni_$i>XoGvVE@LKs;ka3e!;d18t0o=w+hRmIL z&L1~$%|(LB-t~*+n9A=>^uLFh;m~lyJ3dR{LZxAo<)6uy@p*zGat9^Yg)Kak0Brp- z{$#!Is%LsJR zlHUp$S6E$mac<=+5ZD}3gC@6EEHpIZvbzle}wLhhSr!6#(8vo^zyC!o+ARpL!n>@Sr0>9 zLeVQlSV7|_#d&ZB)1LO(l48afg3-$`MQ_O;+&r*AU@e`*9zlZhsjVpmv$(YlEn@H$ zu`d!b>(EzaQ&zlA#lb*Fb5HOaJ6aN@=|N(D+h_!?nRw8v;eTY=Im7tJ z77;9$@=CkeD;PC(uY~;KmLtZk47Rv9V~(*&~xzcyx?SmG;|Q zGdM2{>}Ou*)*^G`7Vh$VH=Fx9d?$U(Xl?MebetGHxuF_S&Whwt<`2!?MNa@3OXSEm7BC=IU9+dm=!NJ;wy^&*12>;p{3wRiU|={#0;EwC;rk&yxl|=k ztMYc%oRas!0X*2jYhRP_>TWA^r$!TNn)__U^*egSepx#N4jmDNB{gOJ7FvVtPrfor z$nj55%rw?0_>s1$n%y@E@aWQGEY|Gp)fKl(F5A=<;E9gg9@8*qh##{W+2MHoK*P@@ z&zQ`H0SK(*)SdYwHSaNqaTZtISxBpZ3>MF??fQoLmWHR?C}8P_4TV9dHWkULoR4OP|{>cAE9^zdY;39Vq@LhXFmn4#u6Sy^%47VUG&(!-u6uZ=S z$xf51c5%kKzqseQ@5{g5-;70IQZN=_A;ym`?T(|V__i~Co%s_#B|mpKoHyyg;{bU! zn#3>c(L7x4H!&qe(N6~I2!>hs&g{w9RE4H_<8JnsK85p#w*X9E`|g-#?p*v);`O4G zU@GnmQMLJGV8M9{xirH6c@Mw*Ach%^Rrt31OZTa^oX*XrD)zwmX!^20E^p9fA&iD5 z1qKuGOnXph6p6#nSo(?T@L55x8%)!~Zjq+|^YMkoU6@PK0;i?86KiMpJTb^}ylW z5YrprmxZAVZj6HDkotsk*hXD^|Gt&3 z%h6!)481z_S_VW>V^HJUoroESA!0ebNmb&Ut(t?il4y>YnYjNCp}1JW1?#eH!DO;V z9=^T=2p-k^q8UPSuFnPmkrI%m07GjHY_*hJG=LVJbo58(N^^S-25nG z#f-<El{Ftz(9_y9oE1a)PNVWwL`}_x%M--F%*xGT(j#C?WE`Mabs@L*Gk( zCwmX;27C~8UruQW<3EK)XJYnib?|GXMfS=IVbusLvJ2z-gND}FMb!qjyI;f+zLTfU zh?Vj`P8J^H-EO@x^m(9@KRYLqeJ-n86V5Uq9c1l=yZHNOKkZ!wpmu1?v(_HvTtBL! zhkxZ~^iwY|;3t>Km7SYI^ayijU(G@_9-BTk@c=?sQikvuX-pOCX*uj~FH|BLyPw~A z!Y8+?sZI8+76TDg>>k7W`OX{BJ3eVvz{fG7WK2iCJ=%cf)=m9qlPAh0V zn6BB^$QA7Of&yc0u4rDl+KTURq0NEt@By3?urgNN*~qZR6{C+WvW*$mXX%&VEz% zfWSS@ynzdtg{-b)PK>^>lAKDbDWd(OtL0B+UjyXEry6aSPD17}1j8LMc4NHhSB{wc zyjDd}j#BtQS}4y(H&z(o@YCIcol}SdTOf0kn?BU#%F5kh!dmIm9*Who5fuF#c`Fii zJSGI&L6GV^X_+fw*2oDC2$ek?=Wn0FFhm}1^vfghxu9>$pf&ZCMQqiflFKOsY+pkx zGB6)-1kt~}H*YIv?|^-<5)=uQ40(Or;>~fX=&&;#usMCnygdd`hFLvtKuNvmjQ0{n zoR3JEX(aFuC!@h<9cGG%p7mKQW$fQeb_9*>AjYu)6EE?GH)zpzQ~Uyk zp?IMN0^YGq+5d0KKW{H^NtOQn5G0Kakf$7z2&a!<$&ojVcRh~FAr>$HYfoyt$`siE z4%b31N56MG8*}q$V^}3G>52St>D>KDlcmcZgJF6rO37g-ZM0#Xl23+;5n34*2m6{q zoWdab%H!G3kM#8RipBD#$G~n!>osLog6AjS%lNks3*4sLN z>#>#YD4+rlUv{`-Tz+mhp2RN*XBq3*`>>)0saLB72upQ#S+94&19xd+_;j`U50+_BO~!urQ|@~`RgaA>xVp7RZcbVZF%H=!gJlE2$6O91W`6r0&| zz4*c8(_k|?x;ANBRgAu8YF=hD-p*0^^j#1^2-asZ`%GonE+HLBG@GB5`>xiqcxzk6 zRw-d!tLz1<6z1%9f4X*WriDH^ zx}-}TkRNT=(BZxf562DL;pych?!Yq=4Z@lg@+cOMbo>pYprteGKNDQt4jn2=IlePQ z)V`jOvEv$S>pvPO>E_ybl1cKiK?d3ADD}-xJCQm7EKJ~0n9L^A zi3H&C)SsegQ*x|IARfL-)N}nOPOtvxL2n3-&HG)A=jOSb^x$96!|Z9BAMLg0Cb`>>gj0uvVsu;4_~wZ8ii}l& zr5Z=q@be?N<ei$UL}-4d8) ztPeZc=$klTUlby!J(cv!(0#XH|7wSG-gBQ{#h`ZREB?nMGnv$b=-GX#=XtZ(-}*I( zucg=QmI&e*?>;L39h&s%wwaxKDfGCtMOSN>v1h>U?C=m~cry0OjLWs&Owm5tk@7Z; zGHxms&bV|Qx9$%xHF&kNxDJAL>I^elDXlR9%pI>j+Jlp`dx&@(* zAggmXIlk$z#?9cBZe)B?ZtWaNp3tdP_4JM*)Bs>-uXM1Ve znx7SJDR$r{q}1v(+8vZ^VTfGb7b_=g6^a>D5@lPx)ogcq=Pq_OR;&fE%TfN$AVzwY z7fppJ-SOtxG>cHsQ?dpBIBwm70aE(RU6kmv^XO<^wAo*B7!>J@ZMFVEL> zd$PM=dD>%95k{nWpOP!(Dj_SR?@S8RXcIT28%yA+;|+sRR#r|?FM%PyvTcI^N~YK{ za>g#EDe>Q{z0~e;Kdkkc!jW5=l6DWno#+zH4=B;tuZa`Zy+vr<4*!f+O){Q zUrEvwhXPihOqN@s4Gi-7FF$CAb~pw*l!1|)=}rYe%CXLWUrKH0?FixqhL*yJ5*q>6 z_}cDHW1A2{SK#(63EHQU>xx9wUTcx=}!iJLvA?I$OH ztJP#VzwFiZoL_s=PuKS_!o>|VN88PeYd}8+?PK`u7`$WlYD_rgs#Tw!GroQ^djNaZSrHnI%3Oajh;TUGhAc#KB0vGKY zzb{^&Cba}`+TJLpB|C{REol;08z$=hDWL&~w=s!1%evv~g=xWhAeFij3}xj3XiL@o5+bjvZMob{x*GUmHo#P+0`|L!k(O3GE3 zV)#m3sMg@k3*9dfYB!?b2X#}f4!Ocj-brsKh+)9yutdxa0$8 zy2K-9g|4Q3$7XGACzg|owkEs0`LcFBpFn)-hFR5GgV4x=c?VuI0J0z5UvtF-rCF2% z@O-vY>*-TxHa)dp6##o_jy*A3C0T_Z*(?w_-c~J+U>Cf^&gyHQPMMw=nu!Hf>L}#{ zBFhaf^HjIl;kQrFT6?&YBF% zM*H`r^4=0qMihG?LW|#`+%A|9S!|@zM7`aRGpMT(=S!(gc(}J+kRIf)rgYlR@4?5Q zzOgpq;^W*ejnAY?G)ByCgJ~A&mwuZgkNA<~GKNnFaK_V{1;}7tXi#hXMFg`Ed(6Sq zySa=j==HEKtNXf`fgZ67JUag_j)yKp=beSL3Qg}gAX*7xV!(5PO~JWqb1|BVzBVAg zRgt%6hNJ;J*dY%FQ?5>ixlIlL#_{_VjH?$GQux<)Av+qj`FCM|W+I$AAySyqv?!^# z$DFC^AUQ?*SgG!X*GKFZ<+(}9Cfv%7K3AOpTQ*58=}TFEpyLd?GLsiLy*3gb*s*n5iU54N=KDq^RusK4Ynry(l{s zk)7=8kbRrUz8eh2J~M{dmuG&z|8w8R@w|AB``!I^Ud=Jr%v{U&`#Dd)sfR@|{;WeM zqx8DBf4mm-;JttT(a|j)T-(d1PCpA?;PtSn0s(c(&n^C%$#u>1ws?e$Y5d!0OhhXM zs1NikShzI*Ibn|iTqs$=$jj2t1g|#-@E@x;&ndlS__5;T`Pbb`<$R{EBSkp7UMqsl z=HOj>6~^`jHTcyByr`N0y2f(W~-ovzD#R@gK+P`>lR^DHy{>)7K8K_3PaEBMPzasc!zy1?epOw)s*?NRIQ(tWRNpdYKI$n`cpVJ}{9%2#sbpwsq^IQ;Y(cbn9kZaI~G zTUCqClOBZ`90MGPJCrl?6S;+*1KvcS&kjSz+q>}*+{x@@b@TAQtKwnp)M$*m(u*kTWucvy`#aHoIkP%KC9 z(~QQ0z2?~`o0sQ%_#LBuTVYo2B#I?0p< zgVmK2Kg`5LNZ#}3p0YVLo^XD=a?3=e+MlOi7gDd5M=Ae%Z$G#=A>&W`lEScPArfaLyS=<{VfyO z?(x*axXNnRdSrUgvbA_$iyiHn1(FK99x?NWn5C*d-}fNB76r?0h`Q#PJy)!t?RP1? z9A-coOkt*?e*!5o+p38BTBwOK!4ou;wa@XP@s&)jQx2tj*nLOX+zl=@hmMDCtlW)1 zS#x{=E7|tuZU4@-?5mKmL!542Ix$1%mo*x;+K8Q`dF|4d=U&K8G98RjR$`fwYk8T^ z_{XD$)P5;9K`uqd!6WO-Vc(2TOAuRPP_#&2fe6d}$5$KTvv{QAzh!n840+h7qemU1 zOOIN9Il4Coft$3f7xXCM_hk|E)3}X5szL*0!JDMRM!vuF`)9~?>a`S1-0;1?IcRsNV>ove?qb2O7CT$Jq{dcZSzh|q+9W;f zck-R@x6hs@Zh}ka@??eL=ahfwy;Y`NNs6kV{S^9!?I|-3rBs2`!G!A?B44uNqlY9E z+CsM~{HwE_o?OH16f;Qqy(@k!&2>9W0`C4vP+VLO?=5*dl~!dj@+MjeaNb>rA=ryd>EG^b6_0qNDMqxz-JsQNT_l|f z2&R-RI^|2h-N)UO(pC7UPVTruk3iQeoL^g+(4xm}#Ng(aS`OJJNOwaw7ZKuIb-$;4 zG@)y_@SG!khhXMD^n`Q3s<$`l>RXa#!1ub2mnxEeBHI3TXsgR|&IZ#uz+l$*Pbo6Kq*!7P%W+$5 zI^JAG@Yug!sQdooeGdkKev1f(To3iYUrxK$*$c)C)t%8ryqG%3Nc(%(n$m~iOU_f* z=*qp}eYue!=YGK3H3|^obSlR6btHV1neACG0^xXM{nq?v03qkaKr%U0p_aM`+t5sT z4|BSvl$oO}hh-Il)Gc4>C=P_Z#PAyEFFSsQ<@iP;h;ks%Q=?~FvfoC#dg$BZ4q)<= zbEiN&N%S+{e|ov3lN~LkDmZD0t3f7AM;4NuY!EHjGE}QSvWNfGQ>SxSf8nsucjstL zY}cfN!~7PzjLbc4VHE(BHsxKFD9s%@IlY5OL{WucG9MJ~JQ!H0k!kJ5x$q*w_5NiZ zw?gW_HcN#SROge=25W--uWVqK35Xxb_4J1d5B`=US-stH$C5ev`n6vZ*1|orZWOhD zypZ+Q4!T+gEC_Hr?Yl-U3lk8{^UQ6yeotg#QvQB7QG2t5{R#0)wxGo=qK6@Z539Pd zGn^aT!l^yl0FR?L!RpyG|DVtOS;?(~rDdVJLtQmF;scEEn3Wab$*2L6FxcBx)f9DN zCiFVII=z}u48Ow0La8Ja!z!Ov�Bd6A;|^S*ax%iX3}o6fitMsM}hqgf-FZ5O>qJ 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 literal 0 HcmV?d00001 diff --git a/ios/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/App/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..f22e10c --- /dev/null +++ b/ios/App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "AppIcon-1024.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/App/Assets.xcassets/Contents.json b/ios/App/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/ios/App/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/App/TunnelController.swift b/ios/App/TunnelController.swift new file mode 100644 index 0000000..f01f368 --- /dev/null +++ b/ios/App/TunnelController.swift @@ -0,0 +1,292 @@ +import Foundation +import Observation +import NetworkExtension +import UserNotifications + +/// Drives the VPN from the app side. +/// +/// The app owns no networking of its own: it writes the Xray config into the +/// shared container, installs/updates the tunnel profile, and then asks +/// NetworkExtension to start it. Everything after that happens in the provider +/// process; state and counters come back over `sendProviderMessage`. +@MainActor +@Observable +final class TunnelController { + + private(set) var state: ConnectionState = .disconnected + private(set) var activeServerID: UUID? + private(set) var activeServerName: String = "" + private(set) var coreVersion: String = "" + private(set) var uplinkBytes: Int64 = 0 + private(set) var downlinkBytes: Int64 = 0 + private(set) var logs: String = "" + private(set) var uptimeText: String = "" + private(set) var isInstalled: Bool = false + + /// Post a local notification on connect / disconnect. + var notifyOnConnect: Bool = false + + private var manager: NETunnelProviderManager? + private var connectedSince: Date? + /// Held in a box so `deinit` — which is never main-actor isolated — can + /// still unregister the observer. + private let statusObserver = ObserverToken() + private var pollTask: Task? + /// Server the user asked for, kept so a switch can reuse the live tunnel. + private var pendingServerID: UUID? + + var isConnected: Bool { state == .connected } + + init() { + Task { await loadManager() } + } + + deinit { + statusObserver.clear() + } + + // MARK: - Profile + + /// Loads the existing VPN profile, if the user has already allowed one. + func loadManager() async { + let managers = (try? await NETunnelProviderManager.loadAllFromPreferences()) ?? [] + let existing = managers.first { + ($0.protocolConfiguration as? NETunnelProviderProtocol)? + .providerBundleIdentifier == AppGroup.tunnelBundleIdentifier + } + manager = existing + isInstalled = existing != nil + if let existing { + observe(existing) + syncState(from: existing.connection.status) + } + } + + /// Creates the profile if needed and points it at the current server. iOS + /// asks the user to allow the VPN configuration the first time this runs. + private func prepareManager(server: ProxyConfig) async throws -> NETunnelProviderManager { + let target = manager ?? NETunnelProviderManager() + + let proto = NETunnelProviderProtocol() + proto.providerBundleIdentifier = AppGroup.tunnelBundleIdentifier + // Shown in Settings > VPN. Routing is Xray's job, this is cosmetic. + proto.serverAddress = server.address + proto.providerConfiguration = ["server": server.name] + // Bring the tunnel back automatically if the provider is ever killed. + proto.disconnectOnSleep = false + + target.protocolConfiguration = proto + target.localizedDescription = "Veil" + target.isEnabled = true + + try await target.saveToPreferences() + // A save invalidates the in-memory object; NE requires a reload before + // the connection can be started. + try await target.loadFromPreferences() + + manager = target + isInstalled = true + observe(target) + return target + } + + private func observe(_ manager: NETunnelProviderManager) { + statusObserver.clear() + statusObserver.value = NotificationCenter.default.addObserver( + forName: .NEVPNStatusDidChange, + object: manager.connection, + queue: .main + ) { [weak self] notification in + guard let connection = notification.object as? NEVPNConnection else { return } + let status = connection.status + Task { @MainActor in self?.syncState(from: status) } + } + } + + // MARK: - Connect / disconnect + + /// Connects to `server`, or switches to it without dropping the tunnel when + /// one is already up. + func connect(to server: ProxyConfig, settings: AppSettings) async { + guard server.xraySupported else { + fail(TunnelConfigWriter.WriteError.unsupportedProtocol(server.proto).localizedDescription) + return + } + + do { + try TunnelConfigWriter.write(server: server, settings: settings) + } catch { + fail(error.localizedDescription) + return + } + + pendingServerID = server.id + activeServerName = server.name + + // Live tunnel: just tell the provider to reload. The utun stays up, iOS + // never sees a reconnect, and the switch takes well under a second. + if state == .connected, let session = manager?.connection as? NETunnelProviderSession { + do { + try session.sendProviderMessage(TunnelRequest(.reload).encoded()) { [weak self] data in + Task { @MainActor in + self?.activeServerID = server.id + if let data, let status = TunnelStatus.decode(data) { + self?.apply(status) + } + } + } + return + } catch { + // Provider not reachable — fall through to a full restart. + } + } + + state = .connecting + do { + let target = try await prepareManager(server: server) + try target.connection.startVPNTunnel() + } catch { + fail(error.localizedDescription) + } + } + + func disconnect() { + manager?.connection.stopVPNTunnel() + pendingServerID = nil + } + + /// Removes the VPN profile from system settings. + func removeProfile() async { + guard let manager else { return } + try? await manager.removeFromPreferences() + self.manager = nil + isInstalled = false + state = .disconnected + } + + // MARK: - State + + private func syncState(from status: NEVPNStatus) { + switch status { + case .connected: + let wasConnected = (state == .connected) + activeServerID = pendingServerID ?? activeServerID + state = .connected + if connectedSince == nil { connectedSince = Date() } + startPolling() + if notifyOnConnect && !wasConnected { + notify(title: "Connected", body: activeServerName) + } + case .connecting, .reasserting, .disconnecting: + state = .connecting + case .disconnected, .invalid: + let wasActive = (state == .connected || state == .connecting) + stopPolling() + connectedSince = nil + uptimeText = "" + activeServerID = nil + if let reason = readLastError(), wasActive { + state = .failed(reason) + } else { + state = .disconnected + if notifyOnConnect && wasActive { + notify(title: "Disconnected", body: activeServerName) + } + } + @unknown default: + state = .disconnected + } + } + + private func fail(_ message: String) { + state = .failed(message) + } + + private func readLastError() -> String? { + guard let data = try? Data(contentsOf: AppGroup.lastErrorURL), + let text = String(data: data, encoding: .utf8), + !text.isEmpty else { return nil } + try? FileManager.default.removeItem(at: AppGroup.lastErrorURL) + return text + } + + // MARK: - Live status + + /// Polls the provider once a second for counters, log and uptime. Only runs + /// while connected, so an idle app costs nothing. + private func startPolling() { + guard pollTask == nil else { return } + pollTask = Task { [weak self] in + while !Task.isCancelled { + await self?.refreshStatus() + self?.tickUptime() + try? await Task.sleep(nanoseconds: 1_000_000_000) + } + } + } + + private func stopPolling() { + pollTask?.cancel() + pollTask = nil + } + + func refreshStatus() async { + guard let session = manager?.connection as? NETunnelProviderSession, + session.status == .connected else { return } + let response: Data? = await withCheckedContinuation { continuation in + do { + try session.sendProviderMessage(TunnelRequest(.status).encoded()) { data in + continuation.resume(returning: data) + } + } catch { + continuation.resume(returning: nil) + } + } + guard let response, let status = TunnelStatus.decode(response) else { return } + apply(status) + } + + func clearLogs() { + logs = "" + guard let session = manager?.connection as? NETunnelProviderSession else { return } + try? session.sendProviderMessage(TunnelRequest(.clearLog).encoded(), responseHandler: nil) + } + + private func apply(_ status: TunnelStatus) { + coreVersion = status.coreVersion + uplinkBytes = status.uplinkBytes + downlinkBytes = status.downlinkBytes + logs = status.log + if !status.serverName.isEmpty { activeServerName = status.serverName } + if let startedAt = status.startedAt, connectedSince == nil { + connectedSince = startedAt + } + } + + private func tickUptime() { + guard let since = connectedSince else { uptimeText = ""; return } + let total = Int(Date().timeIntervalSince(since)) + let h = total / 3600, m = (total % 3600) / 60, s = total % 60 + uptimeText = h > 0 + ? String(format: "%d:%02d:%02d", h, m, s) + : String(format: "%02d:%02d", m, s) + } + + // MARK: - Notifications + + private func notify(title: String, body: String) { + NotificationManager.notify(title: title, body: body) + } +} + +/// Holds a NotificationCenter observer token outside of any actor, so both the +/// main-actor code that installs it and `deinit` can reach it. +private final class ObserverToken: @unchecked Sendable { + var value: NSObjectProtocol? + + func clear() { + guard let value else { return } + NotificationCenter.default.removeObserver(value) + self.value = nil + } +} diff --git a/ios/App/VeilApp.swift b/ios/App/VeilApp.swift new file mode 100644 index 0000000..b706e30 --- /dev/null +++ b/ios/App/VeilApp.swift @@ -0,0 +1,53 @@ +import SwiftUI + +@main +struct VeilApp: App { + @State private var store = ServerStore() + @State private var tunnel = TunnelController() + @State private var pinger = PingTester() + @State private var loc = Loc() + + var body: some Scene { + WindowGroup { + ContentView() + .environment(store) + .environment(tunnel) + .environment(pinger) + .environment(loc) + .preferredColorScheme(colorScheme) + .environment(\.layoutDirection, loc.isRTL ? .rightToLeft : .leftToRight) + .task { await bootstrap() } + } + } + + private func bootstrap() async { + loc.language = store.settings.language + tunnel.notifyOnConnect = store.settings.notifyOnConnect + if store.settings.notifyOnConnect { + NotificationManager.requestAuthorization() + } + + await tunnel.loadManager() + await SubscriptionService.refreshDue(store) + + // Geo databases only matter for presets that reference geosite:/geoip:. + if store.settings.routingPreset.needsGeoAssets, !GeoAssetManager.shared.hasAssets { + await GeoAssetManager.shared.download(source: store.settings.geoSource, + customGeoip: store.settings.customGeoipURL, + customGeosite: store.settings.customGeositeURL) + } + + if store.settings.autoConnectOnLaunch, + let server = store.server(withID: store.selectedServerID) { + await tunnel.connect(to: server, settings: store.settings) + } + } + + private var colorScheme: ColorScheme? { + switch store.settings.appearance { + case .system: return nil + case .light: return .light + case .dark: return .dark + } + } +} diff --git a/ios/App/Views/AddServerView.swift b/ios/App/Views/AddServerView.swift new file mode 100644 index 0000000..6e698d5 --- /dev/null +++ b/ios/App/Views/AddServerView.swift @@ -0,0 +1,123 @@ +import SwiftUI +import PhotosUI + +/// Paste one or more share links, scan a QR code, or pick a QR image from the +/// photo library. Parsing is the same `LinkParser` the desktop app uses. +struct AddServerView: View { + @Environment(ServerStore.self) private var store + @Environment(Loc.self) private var loc + @Environment(\.dismiss) private var dismiss + + @State private var linkText = "" + @State private var errorMessage: String? + @State private var showScanner = false + @State private var photoItem: PhotosPickerItem? + + var body: some View { + // PhotosPicker's label builder is @Sendable, so the localized title has + // to be resolved here rather than inside the closure. + let fromImageTitle = loc("From image…") + + return NavigationStack { + Form { + Section { + TextEditor(text: $linkText) + .font(.system(.footnote, design: .monospaced)) + .frame(minHeight: 140) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + } header: { + Text(loc("One link per line")) + } footer: { + Text("vless:// · vmess:// · trojan:// · ss:// · wireguard://") + .font(.caption2) + } + + Section { + Button { + showScanner = true + } label: { + Label(loc("Scan camera"), systemImage: "qrcode.viewfinder") + } + PhotosPicker(selection: $photoItem, matching: .images) { + Label(fromImageTitle, systemImage: "photo") + } + Button { + if let clipboard = UIPasteboard.general.string { + append(clipboard) + } + } label: { + Label(loc("Paste from clipboard"), systemImage: "doc.on.clipboard") + } + } + + if let errorMessage { + Section { + Text(errorMessage).foregroundStyle(.red).font(.footnote) + } + } + } + .navigationTitle(loc("Add Link")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button(loc("Cancel")) { dismiss() } + } + ToolbarItem(placement: .confirmationAction) { + Button(loc("Add")) { addServers() } + .disabled(linkText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty) + } + } + .sheet(isPresented: $showScanner) { + QRScannerView { payload in + showScanner = false + append(payload) + } + } + .onChange(of: photoItem) { _, item in + guard let item else { return } + Task { await decode(item) } + } + } + } + + private func append(_ payload: String) { + let trimmed = payload.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmed.isEmpty else { return } + linkText += linkText.isEmpty ? trimmed : "\n" + trimmed + } + + private func decode(_ item: PhotosPickerItem) async { + defer { photoItem = nil } + guard let data = try? await item.loadTransferable(type: Data.self), + let image = UIImage(data: data) else { + errorMessage = loc("Could not read that image.") + return + } + guard let payload = QRCode.decode(from: image) else { + errorMessage = loc("No QR code found in that image.") + return + } + append(payload) + } + + private func addServers() { + let text = linkText.trimmingCharacters(in: .whitespacesAndNewlines) + + // A pasted wg-quick profile isn't a share link — detect it first. + if text.lowercased().contains("[interface]"), + let wg = LinkParser.parseWireGuardConf(text) { + store.addManualServers([wg]) + dismiss() + return + } + + let servers = BalancerGrouper.group(LinkParser.parseMany(text)) + guard !servers.isEmpty else { + errorMessage = loc("No valid links found.") + return + } + store.addManualServers(servers) + dismiss() + } +} diff --git a/ios/App/Views/ContentView.swift b/ios/App/Views/ContentView.swift new file mode 100644 index 0000000..e278f7a --- /dev/null +++ b/ios/App/Views/ContentView.swift @@ -0,0 +1,448 @@ +import SwiftUI + +struct ContentView: View { + @Environment(ServerStore.self) private var store + @Environment(TunnelController.self) private var tunnel + @Environment(PingTester.self) private var pinger + @Environment(Loc.self) private var loc + + @State private var showAddSheet = false + @State private var showSubSheet = false + @State private var showSettings = false + @State private var showLog = false + @State private var isRefreshing = false + @State private var searchText = "" + @State private var aliveOnly = false + @State private var sortByPing = false + @State private var qrServer: ProxyConfig? + + var body: some View { + NavigationStack { + List { + Section { StatusCard() .listRowInsets(EdgeInsets()) } + + if !store.allServers.isEmpty { + Section { filterRow } + } + + if store.subscriptions.isEmpty { + Section { emptyState } + } else { + ForEach(store.subscriptions) { sub in + SubscriptionSection(subscription: sub, + searchText: searchText, + aliveOnly: aliveOnly, + sortByPing: sortByPing, + qrServer: $qrServer) + } + } + } + .listStyle(.insetGrouped) + .navigationTitle("Veil") + .navigationBarTitleDisplayMode(.inline) + .searchable(text: $searchText, prompt: loc("Search servers…")) + .refreshable { await refreshAll() } + .toolbar { toolbarContent } + .sheet(isPresented: $showAddSheet) { AddServerView() } + .sheet(isPresented: $showSubSheet) { SubscriptionView() } + .sheet(isPresented: $showSettings) { SettingsView() } + .sheet(isPresented: $showLog) { LogView() } + .sheet(item: $qrServer) { QRDisplayView(server: $0) } + } + } + + // MARK: - Toolbar + + @ToolbarContentBuilder + private var toolbarContent: some ToolbarContent { + ToolbarItem(placement: .topBarLeading) { + Menu { + Button { showSubSheet = true } label: { + Label(loc("Add Subscription"), systemImage: "arrow.down.circle") + } + Button { showAddSheet = true } label: { + Label(loc("Paste Link"), systemImage: "link") + } + } label: { + Image(systemName: "plus") + } + } + ToolbarItem(placement: .topBarTrailing) { + Menu { + Button { + Task { await refreshAll() } + } label: { + Label(loc("Refresh"), systemImage: "arrow.clockwise") + } + .disabled(isRefreshing) + + Button { + pinger.test(store.allServers) + } label: { + Label(loc("Test Ping"), systemImage: "speedometer") + } + .disabled(store.allServers.isEmpty) + + Divider() + + Button { showLog = true } label: { + Label(loc("Log"), systemImage: "text.alignleft") + } + Button { showSettings = true } label: { + Label(loc("Settings"), systemImage: "gearshape") + } + } label: { + if isRefreshing { + ProgressView() + } else { + Image(systemName: "ellipsis.circle") + } + } + } + } + + // MARK: - Pieces + + private var filterRow: some View { + HStack(spacing: 10) { + Toggle(loc("Alive"), isOn: $aliveOnly) + .toggleStyle(.button) + .buttonStyle(.bordered) + .font(.footnote) + Toggle(loc("By ping"), isOn: $sortByPing) + .toggleStyle(.button) + .buttonStyle(.bordered) + .font(.footnote) + Spacer() + Button { + pinger.test(store.allServers) + } label: { + Label(loc("Test Ping"), systemImage: "speedometer") + .font(.footnote) + } + .buttonStyle(.bordered) + .disabled(store.allServers.isEmpty) + } + .listRowBackground(Color.clear) + .listRowInsets(EdgeInsets(top: 4, leading: 0, bottom: 4, trailing: 0)) + } + + private var emptyState: some View { + VStack(spacing: 10) { + Image(systemName: "tray") + .font(.system(size: 34)) + .foregroundStyle(.secondary) + Text(loc("No servers yet")).font(.headline) + Text(loc("Add a subscription or paste a link to get started.")) + .font(.caption) + .foregroundStyle(.secondary) + .multilineTextAlignment(.center) + HStack { + Button(loc("Add Subscription")) { showSubSheet = true } + .buttonStyle(.bordered) + Button(loc("Paste Link")) { showAddSheet = true } + .buttonStyle(.borderedProminent) + } + .padding(.top, 4) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 28) + .listRowBackground(Color.clear) + } + + private func refreshAll() async { + isRefreshing = true + await SubscriptionService.refreshAll(store) + isRefreshing = false + } + + /// Shared filter/sort so every list on screen agrees on the ordering. + static func filterServers(_ servers: [ProxyConfig], search: String, + aliveOnly: Bool, sortByPing: Bool, + pinger: PingTester) -> [ProxyConfig] { + var list = servers + let q = search.trimmingCharacters(in: .whitespaces).lowercased() + if !q.isEmpty { + list = list.filter { $0.name.lowercased().contains(q) + || $0.address.lowercased().contains(q) } + } + if aliveOnly { + list = list.filter { + if let outer = pinger.latency(for: $0.id), outer != nil { return true } + return false + } + } + if sortByPing { + list.sort { a, b in + let la = (pinger.latency(for: a.id) ?? nil) ?? Int.max + let lb = (pinger.latency(for: b.id) ?? nil) ?? Int.max + return la < lb + } + } + return list + } +} + +// MARK: - Status card + +/// The connect/disconnect hero at the top of the list: state, active server, +/// uptime and live traffic counters read back from the tunnel provider. +struct StatusCard: View { + @Environment(ServerStore.self) private var store + @Environment(TunnelController.self) private var tunnel + @Environment(Loc.self) private var loc + + private var selected: ProxyConfig? { store.server(withID: store.selectedServerID) } + + var body: some View { + VStack(spacing: 16) { + ZStack { + Circle() + .fill(statusColor.opacity(0.16)) + .frame(width: 96, height: 96) + Image(systemName: tunnel.isConnected ? "shield.lefthalf.filled" : "shield.slash") + .font(.system(size: 40, weight: .medium)) + .foregroundStyle(statusColor) + } + .padding(.top, 8) + + VStack(spacing: 4) { + Text(stateLabel) + .font(.title3.weight(.semibold)) + .foregroundStyle(statusColor) + Text(subtitle) + .font(.subheadline) + .foregroundStyle(.secondary) + .multilineTextAlignment(.center) + } + + if tunnel.isConnected { + HStack(spacing: 20) { + trafficLabel(icon: "arrow.up", bytes: tunnel.uplinkBytes) + trafficLabel(icon: "arrow.down", bytes: tunnel.downlinkBytes) + Label(tunnel.uptimeText, systemImage: "clock") + .font(.caption.monospacedDigit()) + .foregroundStyle(.secondary) + } + } + + connectButton + } + .frame(maxWidth: .infinity) + .padding(.horizontal, 20) + .padding(.bottom, 18) + } + + private func trafficLabel(icon: String, bytes: Int64) -> some View { + Label(ByteFormat.string(bytes), systemImage: icon) + .font(.caption.monospacedDigit()) + .foregroundStyle(.secondary) + } + + @ViewBuilder + private var connectButton: some View { + if tunnel.isConnected || tunnel.state == .connecting { + Button(role: .destructive) { + tunnel.disconnect() + } label: { + Label(loc("Disconnect"), systemImage: "stop.fill") + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .controlSize(.large) + .tint(.red) + } else { + Button { + guard let server = selected else { return } + Task { await tunnel.connect(to: server, settings: store.settings) } + } label: { + Label(loc("Connect"), systemImage: "bolt.fill") + .frame(maxWidth: .infinity) + } + .buttonStyle(.borderedProminent) + .controlSize(.large) + .disabled(selected == nil || !(selected?.xraySupported ?? false)) + } + } + + private var stateLabel: String { + switch tunnel.state { + case .disconnected: return loc("Disconnected") + case .connecting: return loc("Connecting…") + case .connected: return loc("Connected") + case .failed: return loc("Failed") + } + } + + private var subtitle: String { + if case .failed(let message) = tunnel.state { return message } + if tunnel.isConnected { return tunnel.activeServerName } + if let selected { + return selected.xraySupported + ? selected.name + : "\(selected.name) — \(loc("not supported on iOS"))" + } + return loc("Select a server") + } + + private var statusColor: Color { + switch tunnel.state { + case .connected: return .green + case .connecting: return .orange + case .failed: return .red + case .disconnected: return .secondary + } + } +} + +// MARK: - Subscription section + +struct SubscriptionSection: View { + @Environment(ServerStore.self) private var store + @Environment(TunnelController.self) private var tunnel + @Environment(PingTester.self) private var pinger + @Environment(Loc.self) private var loc + + let subscription: Subscription + let searchText: String + let aliveOnly: Bool + let sortByPing: Bool + @Binding var qrServer: ProxyConfig? + + private var visibleServers: [ProxyConfig] { + ContentView.filterServers(subscription.servers, search: searchText, + aliveOnly: aliveOnly, sortByPing: sortByPing, + pinger: pinger) + } + + /// Hide a group that an active filter has emptied out. + private var isHidden: Bool { + (!searchText.isEmpty || aliveOnly) && visibleServers.isEmpty + } + + var body: some View { + if !isHidden { + Section { + if !subscription.isCollapsed { + ForEach(visibleServers) { server in + row(for: server) + } + } + } header: { + header + } footer: { + footer + } + } + } + + @ViewBuilder + private func row(for server: ProxyConfig) -> some View { + let isActive = tunnel.activeServerID == server.id && tunnel.isConnected + ServerRow(server: server, + isSelected: store.selectedServerID == server.id, + isActive: isActive, + latency: pinger.latency(for: server.id), + isTesting: pinger.isTesting(server.id)) + .contentShape(Rectangle()) + .onTapGesture { handleTap(server) } + .contextMenu { + Button(tunnel.isConnected ? loc("Switch here") : loc("Connect")) { + store.select(server.id) + Task { await tunnel.connect(to: server, settings: store.settings) } + } + .disabled(!server.xraySupported) + Button(loc("Test ping")) { pinger.test([server]) } + Divider() + Button(loc("Copy link")) { + UIPasteboard.general.string = LinkBuilder.link(for: server) + } + Button(loc("Show QR code")) { qrServer = server } + } + .swipeActions(edge: .trailing) { + if subscription.isManual && !isActive { + Button(role: .destructive) { + store.removeServer(id: server.id) + } label: { + Label(loc("Delete"), systemImage: "trash") + } + } + } + } + + private var header: some View { + HStack(spacing: 8) { + Button { + store.toggleCollapsed(id: subscription.id) + } label: { + Image(systemName: subscription.isCollapsed ? "chevron.right" : "chevron.down") + .font(.caption.weight(.bold)) + .frame(width: 20) + } + .buttonStyle(.plain) + + Text(subscription.name) + Text("\(subscription.servers.count)") + .font(.caption2) + .padding(.horizontal, 6).padding(.vertical, 1) + .background(Capsule().fill(Color.secondary.opacity(0.18))) + + Spacer() + + Menu { + Button(loc("Test ping")) { pinger.test(subscription.servers) } + if !subscription.isManual { + Divider() + Button(loc("Refresh now")) { + Task { await SubscriptionService.refresh(subscription, into: store) } + } + Toggle(loc("Auto-update"), isOn: Binding( + get: { subscription.autoUpdate }, + set: { store.setAutoUpdate($0, id: subscription.id) } + )) + Divider() + let holdsActive = tunnel.isConnected + && subscription.servers.contains { $0.id == tunnel.activeServerID } + Button(loc("Remove"), role: .destructive) { + store.removeSubscription(id: subscription.id) + } + .disabled(holdsActive) + } + } label: { + Image(systemName: "ellipsis.circle") + } + } + .textCase(nil) + } + + @ViewBuilder + private var footer: some View { + VStack(alignment: .leading, spacing: 4) { + if let note = subscription.note, !note.isEmpty { + Text(note) + } + if let used = subscription.usedBytes, let total = subscription.totalBytes { + HStack(spacing: 6) { + Text("\(ByteFormat.string(used)) / \(ByteFormat.string(total))") + if let expiry = subscription.expiresAt { + Text("· \(expiry.formatted(date: .abbreviated, time: .omitted))") + } + } + if let fraction = subscription.usageFraction { + ProgressView(value: fraction) + .tint(fraction > 0.9 ? .red : .accentColor) + } + } else if let expiry = subscription.expiresAt { + Text("\(loc("Expires")) \(expiry.formatted(date: .abbreviated, time: .omitted))") + } + } + } + + /// Disconnected: tap selects. Connected: tap switches straight away, which + /// only restarts the core inside the extension — the tunnel never drops. + private func handleTap(_ server: ProxyConfig) { + store.select(server.id) + guard tunnel.isConnected else { return } + Task { await tunnel.connect(to: server, settings: store.settings) } + } +} diff --git a/ios/App/Views/LogView.swift b/ios/App/Views/LogView.swift new file mode 100644 index 0000000..4b92ac8 --- /dev/null +++ b/ios/App/Views/LogView.swift @@ -0,0 +1,62 @@ +import SwiftUI + +/// Tail of the Xray log. The core runs in the extension, so the log is a file +/// in the shared container that the provider ships back a chunk at a time. +struct LogView: View { + @Environment(TunnelController.self) private var tunnel + @Environment(Loc.self) private var loc + @Environment(\.dismiss) private var dismiss + + private var text: String { + tunnel.logs.isEmpty ? loc("No logs yet.") : tunnel.logs + } + + var body: some View { + NavigationStack { + ScrollViewReader { proxy in + ScrollView { + Text(text) + .font(.system(.caption2, design: .monospaced)) + .foregroundStyle(tunnel.logs.isEmpty ? Color.secondary : .primary) + .frame(maxWidth: .infinity, alignment: .leading) + .textSelection(.enabled) + .padding(12) + .id("bottom") + } + .onChange(of: tunnel.logs) { _, _ in + withAnimation { proxy.scrollTo("bottom", anchor: .bottom) } + } + } + .navigationTitle(loc("Log")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button(loc("Done")) { dismiss() } + } + ToolbarItemGroup(placement: .topBarTrailing) { + Button { + UIPasteboard.general.string = tunnel.logs + } label: { + Image(systemName: "doc.on.doc") + } + .disabled(tunnel.logs.isEmpty) + + Button { + tunnel.clearLogs() + } label: { + Image(systemName: "trash") + } + .disabled(tunnel.logs.isEmpty) + } + } + .task { + // Keep the tail fresh while this screen is open even when the + // list view's poll loop isn't running. + while !Task.isCancelled { + await tunnel.refreshStatus() + try? await Task.sleep(nanoseconds: 1_000_000_000) + } + } + } + } +} diff --git a/ios/App/Views/QRDisplayView.swift b/ios/App/Views/QRDisplayView.swift new file mode 100644 index 0000000..2379efe --- /dev/null +++ b/ios/App/Views/QRDisplayView.swift @@ -0,0 +1,65 @@ +import SwiftUI + +/// Shows a server as a QR code so it can be moved to another device, plus the +/// raw share link for copy/paste. +struct QRDisplayView: View { + @Environment(Loc.self) private var loc + @Environment(\.dismiss) private var dismiss + + let server: ProxyConfig + + private var link: String { LinkBuilder.link(for: server) } + + var body: some View { + NavigationStack { + ScrollView { + VStack(spacing: 20) { + if let image = QRCode.image(from: link, size: 260) { + Image(uiImage: image) + .interpolation(.none) + .resizable() + .scaledToFit() + .frame(width: 260, height: 260) + .padding(12) + .background(.white, in: RoundedRectangle(cornerRadius: 16)) + } else { + Text(loc("Could not render a QR code for this server.")) + .foregroundStyle(.secondary) + } + + Text(link) + .font(.system(.caption2, design: .monospaced)) + .textSelection(.enabled) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(12) + .background(Color.secondary.opacity(0.1), + in: RoundedRectangle(cornerRadius: 10)) + + HStack { + Button { + UIPasteboard.general.string = link + } label: { + Label(loc("Copy link"), systemImage: "doc.on.doc") + .frame(maxWidth: .infinity) + } + .buttonStyle(.bordered) + + ShareLink(item: link) { + Label(loc("Share"), systemImage: "square.and.arrow.up") + .frame(maxWidth: .infinity) + } + .buttonStyle(.bordered) + } + } + .padding() + } + .navigationTitle(server.name) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .confirmationAction) { + Button(loc("Done")) { dismiss() } + } + } + } + } +} diff --git a/ios/App/Views/QRScannerView.swift b/ios/App/Views/QRScannerView.swift new file mode 100644 index 0000000..16965fe --- /dev/null +++ b/ios/App/Views/QRScannerView.swift @@ -0,0 +1,175 @@ +import SwiftUI +@preconcurrency import AVFoundation + +/// Live camera QR scanner. Wraps `AVCaptureSession` in a plain UIKit view +/// controller — SwiftUI has no first-party scanner, and this keeps the preview +/// layer's lifecycle tied to the view rather than to view-graph updates. +struct QRScannerView: View { + @Environment(Loc.self) private var loc + @Environment(\.dismiss) private var dismiss + + let onScan: (String) -> Void + + @State private var status: String = "" + + var body: some View { + NavigationStack { + ZStack { + ScannerRepresentable(onScan: handle, onStatus: { status = $0 }) + .ignoresSafeArea() + + VStack { + Spacer() + RoundedRectangle(cornerRadius: 20) + .strokeBorder(.white.opacity(0.8), lineWidth: 3) + .frame(width: 240, height: 240) + Spacer() + if !status.isEmpty { + Text(status) + .font(.footnote) + .foregroundStyle(.white) + .padding(10) + .background(.black.opacity(0.6), in: Capsule()) + .padding(.bottom, 40) + } + } + } + .navigationTitle(loc("Scan camera")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button(loc("Cancel")) { dismiss() } + } + } + } + } + + private func handle(_ payload: String) { + onScan(payload) + dismiss() + } +} + +private struct ScannerRepresentable: UIViewControllerRepresentable { + let onScan: (String) -> Void + let onStatus: (String) -> Void + + func makeUIViewController(context: Context) -> ScannerViewController { + let controller = ScannerViewController() + controller.onScan = onScan + controller.onStatus = onStatus + return controller + } + + func updateUIViewController(_ controller: ScannerViewController, context: Context) {} +} + +final class ScannerViewController: UIViewController { + // Captured locally by the delegate callback so we never touch `self`'s + // SwiftUI closures across actor boundaries. + var onScan: ((String) -> Void)? + var onStatus: ((String) -> Void)? + + private let session = AVCaptureSession() + private var previewLayer: AVCaptureVideoPreviewLayer? + private var hasScanned = false + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .black + configureSession() + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + previewLayer?.frame = view.bounds + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + guard !session.isRunning else { return } + // Starting the session blocks; keep it off the main thread. + DispatchQueue.global(qos: .userInitiated).async { [session] in + session.startRunning() + } + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + guard session.isRunning else { return } + DispatchQueue.global(qos: .userInitiated).async { [session] in + session.stopRunning() + } + } + + private func configureSession() { + switch AVCaptureDevice.authorizationStatus(for: .video) { + case .authorized: + buildSession() + case .notDetermined: + AVCaptureDevice.requestAccess(for: .video) { [weak self] granted in + DispatchQueue.main.async { + guard let self else { return } + if granted { + self.buildSession() + let session = self.session + DispatchQueue.global(qos: .userInitiated).async { session.startRunning() } + } else { + self.onStatus?("Camera access denied") + } + } + } + default: + onStatus?("Camera access denied — enable it in Settings") + } + } + + private func buildSession() { + guard let device = AVCaptureDevice.default(for: .video), + let input = try? AVCaptureDeviceInput(device: device), + session.canAddInput(input) else { + onStatus?("No camera available") + return + } + session.beginConfiguration() + session.addInput(input) + + let output = AVCaptureMetadataOutput() + guard session.canAddOutput(output) else { + session.commitConfiguration() + onStatus?("Cannot read QR codes on this device") + return + } + session.addOutput(output) + output.setMetadataObjectsDelegate(self, queue: .main) + output.metadataObjectTypes = [.qr] + session.commitConfiguration() + + let layer = AVCaptureVideoPreviewLayer(session: session) + layer.videoGravity = .resizeAspectFill + layer.frame = view.bounds + view.layer.insertSublayer(layer, at: 0) + previewLayer = layer + onStatus?("Point the camera at a QR code") + } + + fileprivate func handleScan(_ metadataObjects: [AVMetadataObject]) { + guard !hasScanned, + let object = metadataObjects.first as? AVMetadataMachineReadableCodeObject, + let value = object.stringValue, !value.isEmpty else { return } + hasScanned = true + UINotificationFeedbackGenerator().notificationOccurred(.success) + onScan?(value) + } +} + +// The metadata output is configured with `queue: .main`, so the callback really +// does arrive on the main actor — `@preconcurrency` states that fact for a +// delegate protocol that predates concurrency annotations. +extension ScannerViewController: @preconcurrency AVCaptureMetadataOutputObjectsDelegate { + func metadataOutput(_ output: AVCaptureMetadataOutput, + didOutput metadataObjects: [AVMetadataObject], + from connection: AVCaptureConnection) { + handleScan(metadataObjects) + } +} diff --git a/ios/App/Views/RoutingView.swift b/ios/App/Views/RoutingView.swift new file mode 100644 index 0000000..c85f3d4 --- /dev/null +++ b/ios/App/Views/RoutingView.swift @@ -0,0 +1,167 @@ +import SwiftUI + +/// Routing editor: preset picker, geo database source, and the custom ordered +/// rule list. Rules are the same `RoutingRule` model the desktop app compiles +/// into Xray `field` rules. +struct RoutingView: View { + @Environment(ServerStore.self) private var store + @Environment(Loc.self) private var loc + + @State private var geo = GeoAssetManager.shared + + var body: some View { + @Bindable var store = store + + Form { + Section(loc("Preset")) { + Picker(loc("Preset"), selection: $store.settings.routingPreset) { + ForEach(RoutingPreset.allCases) { Text($0.title).tag($0) } + } + .pickerStyle(.inline) + .labelsHidden() + Text(store.settings.routingPreset.subtitle) + .font(.caption) + .foregroundStyle(.secondary) + } + + Section(loc("Blocking")) { + Toggle(loc("Block ads"), isOn: $store.settings.blockAds) + } + + if store.settings.routingPreset.needsGeoAssets || store.settings.blockAds { + Section { + Picker(loc("Source"), selection: $store.settings.geoSource) { + ForEach(GeoAssetSource.allCases) { Text($0.title).tag($0) } + } + if store.settings.geoSource == .custom { + TextField("geoip.dat URL", text: $store.settings.customGeoipURL) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + TextField("geosite.dat URL", text: $store.settings.customGeositeURL) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + } + Button { + Task { + await geo.download(source: store.settings.geoSource, + customGeoip: store.settings.customGeoipURL, + customGeosite: store.settings.customGeositeURL) + } + } label: { + if geo.isDownloading { + HStack { ProgressView(); Text(loc("Downloading…")) } + } else { + Label(loc("Download geo databases"), systemImage: "arrow.down.circle") + } + } + .disabled(geo.isDownloading) + } header: { + Text(loc("Geo databases")) + } footer: { + if let error = geo.lastError { + Text(error).foregroundStyle(.red) + } else if geo.hasAssets { + Text(loc("Installed.")) + } else { + Text(loc("geosite:/geoip: rules need these files.")) + } + } + } + + if store.settings.routingPreset == .custom { + Section(loc("Custom rules")) { + ForEach($store.settings.customRules) { $rule in + RuleEditor(rule: $rule) + } + .onDelete { offsets in + store.settings.customRules.remove(atOffsets: offsets) + store.save() + } + .onMove { source, destination in + store.settings.customRules.move(fromOffsets: source, + toOffset: destination) + store.save() + } + + Button { + store.settings.customRules.append( + RoutingRule(name: loc("New rule"), outbound: .direct)) + store.save() + } label: { + Label(loc("Add rule"), systemImage: "plus") + } + } + } + } + .navigationTitle(loc("Routing")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { EditButton() } + .onDisappear { store.save() } + } +} + +/// One rule: where it sends traffic, and the domain / IP / port it matches. +private struct RuleEditor: View { + @Environment(Loc.self) private var loc + @Binding var rule: RoutingRule + + @State private var domainsText = "" + @State private var ipsText = "" + + var body: some View { + DisclosureGroup { + Picker(loc("Outbound"), selection: $rule.outbound) { + ForEach(RuleOutbound.allCases) { Text($0.title).tag($0) } + } + .pickerStyle(.segmented) + + TextField(loc("Name"), text: $rule.name) + + VStack(alignment: .leading, spacing: 4) { + Text(loc("Domains")).font(.caption).foregroundStyle(.secondary) + TextField("example.com, geosite:cn", text: $domainsText, axis: .vertical) + .font(.system(.footnote, design: .monospaced)) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .onChange(of: domainsText) { _, value in + rule.domains = Self.split(value) + } + } + + VStack(alignment: .leading, spacing: 4) { + Text(loc("IPs")).font(.caption).foregroundStyle(.secondary) + TextField("10.0.0.0/8, geoip:ru", text: $ipsText, axis: .vertical) + .font(.system(.footnote, design: .monospaced)) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .onChange(of: ipsText) { _, value in + rule.ips = Self.split(value) + } + } + + TextField(loc("Port (optional)"), text: $rule.port) + .keyboardType(.numbersAndPunctuation) + + Toggle(loc("Enabled"), isOn: $rule.enabled) + } label: { + HStack { + Text(rule.name.isEmpty ? loc("Untitled rule") : rule.name) + Spacer() + Text(rule.outbound.title) + .font(.caption) + .foregroundStyle(.secondary) + } + .opacity(rule.enabled ? 1 : 0.5) + } + .onAppear { + domainsText = rule.domains.joined(separator: ", ") + ipsText = rule.ips.joined(separator: ", ") + } + } + + private static func split(_ text: String) -> [String] { + text.split(whereSeparator: { $0 == "," || $0 == "\n" }) + .map { $0.trimmingCharacters(in: .whitespaces) } + .filter { !$0.isEmpty } + } +} diff --git a/ios/App/Views/ServerRow.swift b/ios/App/Views/ServerRow.swift new file mode 100644 index 0000000..11a5079 --- /dev/null +++ b/ios/App/Views/ServerRow.swift @@ -0,0 +1,72 @@ +import SwiftUI + +struct ServerRow: View { + let server: ProxyConfig + let isSelected: Bool + let isActive: Bool + /// Outer nil = never tested; inner nil = tested and unreachable. + let latency: Int?? + let isTesting: Bool + + var body: some View { + HStack(spacing: 10) { + Circle() + .fill(isActive ? Color.green : Color.secondary.opacity(0.3)) + .frame(width: 8, height: 8) + + VStack(alignment: .leading, spacing: 2) { + Text(server.name) + .lineLimit(1) + .foregroundStyle(server.xraySupported ? .primary : .secondary) + HStack(spacing: 6) { + Text(server.proto.rawValue.uppercased()) + if server.isBalancer { + Text("×\((server.alternates?.count ?? 0) + 1)") + } + if !server.xraySupported { + Text("Xray only") + .foregroundStyle(.orange) + } + } + .font(.caption2) + .foregroundStyle(.secondary) + } + + Spacer() + + latencyBadge + + if isSelected { + Image(systemName: "checkmark") + .font(.caption.weight(.semibold)) + .foregroundStyle(Color.accentColor) + } + } + .padding(.vertical, 2) + } + + @ViewBuilder + private var latencyBadge: some View { + if isTesting { + ProgressView().controlSize(.mini) + } else if let outer = latency { + if let ms = outer { + Text("\(ms) ms") + .font(.caption2.monospacedDigit()) + .foregroundStyle(latencyColor(ms)) + } else { + Text("timeout") + .font(.caption2) + .foregroundStyle(.red) + } + } + } + + private func latencyColor(_ ms: Int) -> Color { + switch ms { + case ..<150: return .green + case ..<350: return .orange + default: return .red + } + } +} diff --git a/ios/App/Views/SettingsView.swift b/ios/App/Views/SettingsView.swift new file mode 100644 index 0000000..8e97012 --- /dev/null +++ b/ios/App/Views/SettingsView.swift @@ -0,0 +1,140 @@ +import SwiftUI + +struct SettingsView: View { + @Environment(ServerStore.self) private var store + @Environment(TunnelController.self) private var tunnel + @Environment(Loc.self) private var loc + @Environment(\.dismiss) private var dismiss + + @State private var dnsText = "" + @State private var showRemoveConfirm = false + + var body: some View { + @Bindable var store = store + + NavigationStack { + Form { + Section { + // No mode picker: iOS has exactly one way to capture + // traffic, and it is the one this app uses. + LabeledContent(loc("Mode"), value: loc("Network Extension (all apps)")) + Picker(loc("Log level"), selection: $store.settings.logLevel) { + ForEach(LogLevel.allCases) { Text($0.title).tag($0) } + } + Toggle(loc("IPv6 inside tunnel"), isOn: $store.settings.ipv6Enabled) + Stepper(value: $store.settings.tunnelMTU, in: 1280...1500, step: 20) { + LabeledContent("MTU", value: "\(store.settings.tunnelMTU)") + } + TextField("1.1.1.1, 8.8.8.8", text: $dnsText) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .onSubmit(commitDNS) + } header: { + Text(loc("Tunnel")) + } footer: { + Text(loc("Changes apply the next time you connect or switch servers.")) + } + + Section(loc("Routing")) { + NavigationLink { + RoutingView() + } label: { + LabeledContent(loc("Rules"), value: store.settings.routingPreset.title) + } + } + + Section(loc("Startup")) { + Toggle(loc("Auto-connect on launch"), isOn: $store.settings.autoConnectOnLaunch) + Toggle(loc("Notify on connect"), isOn: $store.settings.notifyOnConnect) + .onChange(of: store.settings.notifyOnConnect) { _, on in + tunnel.notifyOnConnect = on + if on { NotificationManager.requestAuthorization() } + } + } + + Section(loc("Subscriptions")) { + Toggle(loc("Auto-update subscriptions"), + isOn: $store.settings.autoUpdateSubscriptions) + if store.settings.autoUpdateSubscriptions { + Stepper(value: $store.settings.autoUpdateIntervalHours, in: 1...168) { + LabeledContent(loc("Every"), + value: "\(store.settings.autoUpdateIntervalHours) h") + } + } + Toggle(loc("Send device ID (HWID)"), isOn: $store.settings.sendHwid) + } + + Section(loc("Appearance")) { + Picker(loc("Theme"), selection: $store.settings.appearance) { + ForEach(AppAppearance.allCases) { Text($0.title).tag($0) } + } + Picker(loc("Language"), selection: $store.settings.language) { + ForEach(AppLanguage.allCases) { Text($0.displayName).tag($0) } + } + .onChange(of: store.settings.language) { _, language in + loc.language = language + } + } + + Section { + LabeledContent(loc("Status"), + value: tunnel.isInstalled ? loc("Installed") : loc("Not installed")) + if tunnel.isInstalled { + Button(loc("Remove VPN profile"), role: .destructive) { + showRemoveConfirm = true + } + } + } header: { + Text(loc("VPN profile")) + } footer: { + Text(loc("iOS asks you to allow the VPN configuration the first time you connect.")) + } + + Section(loc("About")) { + LabeledContent(loc("App version"), value: appVersion) + LabeledContent(loc("Xray core"), + value: tunnel.coreVersion.isEmpty ? "—" : tunnel.coreVersion) + LabeledContent(loc("Device ID"), value: DeviceID.hwid) + .font(.caption) + .textSelection(.enabled) + } + } + .navigationTitle(loc("Settings")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .confirmationAction) { + Button(loc("Done")) { + commitDNS() + store.save() + dismiss() + } + } + } + .onAppear { dnsText = store.settings.effectiveDNSServers.joined(separator: ", ") } + .onDisappear { store.save() } + .confirmationDialog(loc("Remove VPN profile?"), + isPresented: $showRemoveConfirm, titleVisibility: .visible) { + Button(loc("Remove"), role: .destructive) { + Task { await tunnel.removeProfile() } + } + Button(loc("Cancel"), role: .cancel) {} + } + } + } + + private func commitDNS() { + let servers = dnsText + .split(whereSeparator: { $0 == "," || $0 == " " }) + .map { String($0).trimmingCharacters(in: .whitespaces) } + .filter { !$0.isEmpty } + store.settings.dnsServers = servers + dnsText = store.settings.effectiveDNSServers.joined(separator: ", ") + } + + private var appVersion: String { + let info = Bundle.main.infoDictionary + let short = info?["CFBundleShortVersionString"] as? String ?? "1.0" + let build = info?["CFBundleVersion"] as? String ?? "1" + return "\(short) (\(build))" + } +} diff --git a/ios/App/Views/SubscriptionView.swift b/ios/App/Views/SubscriptionView.swift new file mode 100644 index 0000000..7353e0f --- /dev/null +++ b/ios/App/Views/SubscriptionView.swift @@ -0,0 +1,120 @@ +import SwiftUI +import PhotosUI + +/// Adds a subscription profile by URL. The fetch, the HWID headers and the +/// `Subscription-Userinfo` parsing are all shared with the desktop app. +struct SubscriptionView: View { + @Environment(ServerStore.self) private var store + @Environment(Loc.self) private var loc + @Environment(\.dismiss) private var dismiss + + @State private var nameText = "" + @State private var urlText = "" + @State private var isLoading = false + @State private var message: String? + @State private var showScanner = false + @State private var photoItem: PhotosPickerItem? + + var body: some View { + // PhotosPicker's label builder is @Sendable, so the localized title has + // to be resolved here rather than inside the closure. + let fromImageTitle = loc("From image…") + + return NavigationStack { + Form { + Section(loc("Subscription")) { + TextField(loc("Name (optional)"), text: $nameText) + .autocorrectionDisabled() + TextField("https://example.com/sub", text: $urlText) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .keyboardType(.URL) + } + + Section { + Button { + showScanner = true + } label: { + Label(loc("Scan camera"), systemImage: "qrcode.viewfinder") + } + PhotosPicker(selection: $photoItem, matching: .images) { + Label(fromImageTitle, systemImage: "photo") + } + } + + if let message { + Section { + Text(message).font(.footnote).foregroundStyle(.secondary) + } + } + } + .navigationTitle(loc("Add Subscription")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button(loc("Cancel")) { dismiss() } + } + ToolbarItem(placement: .confirmationAction) { + if isLoading { + ProgressView() + } else { + Button(loc("Fetch")) { Task { await fetch() } } + .disabled(urlText.trimmingCharacters(in: .whitespaces).isEmpty) + } + } + } + .sheet(isPresented: $showScanner) { + QRScannerView { payload in + showScanner = false + urlText = payload.trimmingCharacters(in: .whitespacesAndNewlines) + } + } + .onChange(of: photoItem) { _, item in + guard let item else { return } + Task { await decode(item) } + } + } + } + + private func decode(_ item: PhotosPickerItem) async { + defer { photoItem = nil } + guard let data = try? await item.loadTransferable(type: Data.self), + let image = UIImage(data: data), + let payload = QRCode.decode(from: image) else { + message = loc("No QR code found in that image.") + return + } + urlText = payload.trimmingCharacters(in: .whitespacesAndNewlines) + } + + private func fetch() async { + let url = urlText.trimmingCharacters(in: .whitespaces) + guard !url.isEmpty else { return } + isLoading = true + message = nil + defer { isLoading = false } + + let hwid = store.settings.sendHwid ? DeviceID.hwid : nil + do { + let result = try await SubscriptionFetcher.fetch(url, hwid: hwid) + guard !result.servers.isEmpty else { + message = loc("The subscription returned no servers.") + return + } + let name = nameText.isEmpty + ? (result.profileTitle ?? defaultName(from: url)) + : nameText + store.addOrUpdateSubscription(name: name, url: url, + servers: result.servers, + userinfo: result.userinfo, + announce: result.announce) + dismiss() + } catch { + message = error.localizedDescription + } + } + + private func defaultName(from url: String) -> String { + URL(string: url)?.host ?? loc("Subscription") + } +} diff --git a/ios/Config/Tunnel-Info.plist b/ios/Config/Tunnel-Info.plist new file mode 100644 index 0000000..3059459 --- /dev/null +++ b/ios/Config/Tunnel-Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.networkextension.packet-tunnel + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).PacketTunnelProvider + + + diff --git a/ios/Config/Veil.entitlements b/ios/Config/Veil.entitlements new file mode 100644 index 0000000..bb83c8c --- /dev/null +++ b/ios/Config/Veil.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.developer.networking.networkextension + + packet-tunnel-provider + + com.apple.security.application-groups + + group.dev.local.veil + + + diff --git a/ios/Config/VeilTunnel.entitlements b/ios/Config/VeilTunnel.entitlements new file mode 100644 index 0000000..bb83c8c --- /dev/null +++ b/ios/Config/VeilTunnel.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.developer.networking.networkextension + + packet-tunnel-provider + + com.apple.security.application-groups + + group.dev.local.veil + + + diff --git a/ios/Shared/AppGroup.swift b/ios/Shared/AppGroup.swift new file mode 100644 index 0000000..d8dc7d6 --- /dev/null +++ b/ios/Shared/AppGroup.swift @@ -0,0 +1,51 @@ +import Foundation + +/// Every path the app and the tunnel extension both need. +/// +/// A NetworkExtension runs in its own process with its own container, so the +/// only way the two sides can exchange the config, the geo databases and the +/// core log is through the shared app group container. +enum AppGroup { + + /// Must match the App Groups entitlement on both targets. + static let identifier = "group.dev.local.veil" + + /// Bundle identifier of the packet tunnel provider extension. + static let tunnelBundleIdentifier = "dev.local.veil.tunnel" + + /// Root of the shared container. Falls back to the process-local caches + /// directory when the app group is unavailable (unsigned local builds), so + /// nothing crashes — the tunnel simply won't have anything to read. + static let containerURL: URL = { + FileManager.default + .containerURL(forSecurityApplicationGroupIdentifier: identifier) + ?? FileManager.default.temporaryDirectory + }() + + /// Where `ServerStore` keeps store.json. + static let supportDirectory: URL = ensure(containerURL.appendingPathComponent("Veil", + isDirectory: true)) + + /// geoip.dat / geosite.dat, downloaded by the app, read by the core. + static let geoDirectory: URL = ensure(supportDirectory.appendingPathComponent("geo", + isDirectory: true)) + + /// The generated Xray configuration the tunnel provider boots from. + static let configURL = supportDirectory.appendingPathComponent("xray-config.json") + + /// Sidecar describing the session the config belongs to (server name, MTU…). + static let sessionURL = supportDirectory.appendingPathComponent("session.json") + + /// Xray writes its error log here; the app tails it for the log screen. + static let logURL = supportDirectory.appendingPathComponent("xray.log") + + /// Why the tunnel last refused to come up. The provider process is already + /// gone by the time the app notices the failed connection, so it leaves the + /// reason here on its way out. + static let lastErrorURL = supportDirectory.appendingPathComponent("last-error.txt") + + private static func ensure(_ url: URL) -> URL { + try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: true) + return url + } +} diff --git a/ios/Shared/TunnelConfigWriter.swift b/ios/Shared/TunnelConfigWriter.swift new file mode 100644 index 0000000..8421b04 --- /dev/null +++ b/ios/Shared/TunnelConfigWriter.swift @@ -0,0 +1,65 @@ +import Foundation + +/// Renders a `ProxyConfig` into the Xray configuration the tunnel provider +/// boots from, and drops it in the shared container. +/// +/// The iOS config differs from the desktop one in exactly one place: instead of +/// local SOCKS/HTTP inbounds it uses Xray's native layer-3 `tun` inbound, which +/// reads the descriptor NetworkExtension handed us. Outbounds, transports, +/// Reality, XHTTP and the routing rules are the same code path as macOS. +enum TunnelConfigWriter { + + enum WriteError: LocalizedError { + case unsupportedProtocol(ProxyProtocol) + + var errorDescription: String? { + switch self { + case .unsupportedProtocol(let proto): + return "\(proto.rawValue.uppercased()) needs the sing-box core, " + + "which the iOS build does not ship. Use a VLESS, VMess, " + + "Trojan, Shadowsocks or WireGuard server." + } + } + } + + /// Builds the config + session sidecar and writes both to the app group. + @discardableResult + static func write(server: ProxyConfig, settings: AppSettings) throws -> TunnelSession { + guard server.xraySupported else { + throw WriteError.unsupportedProtocol(server.proto) + } + + let session = TunnelSession( + serverName: server.name, + serverAddress: server.address, + mtu: settings.tunnelMTU, + ipv6Enabled: settings.ipv6Enabled, + dnsServers: settings.effectiveDNSServers, + maxMemoryMB: 48 + ) + + let json = try XrayConfigBuilder.jsonString( + for: server, + // On iOS the name is unused: Xray takes the descriptor from the + // `xray.tun.fd` environment flag instead of opening an interface + // itself. It still has to be a well-formed `utunN` so the very same + // config can be validated with a desktop `xray run -test`. + inbound: .tun(name: "utun9", mtu: session.mtu), + rules: settings.effectiveRoutingRules, + logLevel: settings.logLevel.rawValue, + logFile: AppGroup.logURL.path, + dnsServers: session.dnsServers, + stats: true + ) + + try Data(json.utf8).write(to: AppGroup.configURL, options: .atomic) + try session.write() + return session + } + + /// Reads back the config the extension should boot. + static func loadConfig() throws -> String { + let data = try Data(contentsOf: AppGroup.configURL) + return String(decoding: data, as: UTF8.self) + } +} diff --git a/ios/Shared/TunnelIPC.swift b/ios/Shared/TunnelIPC.swift new file mode 100644 index 0000000..dec9801 --- /dev/null +++ b/ios/Shared/TunnelIPC.swift @@ -0,0 +1,76 @@ +import Foundation + +/// Wire format for `NETunnelProviderSession.sendProviderMessage`. +/// +/// The app never talks to Xray directly — the core only ever runs inside the +/// extension. Everything the UI shows (state, traffic counters, core log) comes +/// back through these messages. +enum TunnelCommand: String, Codable { + /// Current core state + counters + log tail. + case status + /// Re-read the config file and restart the core without dropping the + /// tunnel. This is how switching servers stays sub-second: the utun stays + /// up, iOS never shows a reconnect, only Xray restarts. + case reload + /// Truncate the core log. + case clearLog +} + +struct TunnelRequest: Codable { + var command: TunnelCommand + + init(_ command: TunnelCommand) { self.command = command } + + func encoded() -> Data { (try? JSONEncoder().encode(self)) ?? Data() } + + static func decode(_ data: Data) -> TunnelRequest? { + try? JSONDecoder().decode(TunnelRequest.self, from: data) + } +} + +struct TunnelStatus: Codable { + var running: Bool = false + var coreVersion: String = "" + var serverName: String = "" + var uplinkBytes: Int64 = 0 + var downlinkBytes: Int64 = 0 + var startedAt: Date? + var lastError: String? + /// Tail of the core log, capped so provider messages stay small. + var log: String = "" + + func encoded() -> Data { (try? JSONEncoder().encode(self)) ?? Data() } + + static func decode(_ data: Data) -> TunnelStatus? { + try? JSONDecoder().decode(TunnelStatus.self, from: data) + } +} + +/// Everything the provider needs that isn't in the Xray config itself. Written +/// next to the config by the app, read by the extension on start and on reload. +struct TunnelSession: Codable { + var serverName: String = "" + /// Only used to populate `tunnelRemoteAddress`; routing is Xray's job. + var serverAddress: String = "127.0.0.1" + var mtu: Int = 1500 + /// Advertise IPv6 inside the tunnel. On by default: if we only claim IPv4, + /// IPv6-capable apps route around the tunnel and leak. + var ipv6Enabled: Bool = true + var dnsServers: [String] = ["1.1.1.1", "8.8.8.8"] + /// Hard cap on the Go heap. NetworkExtension processes get a small memory + /// budget and are killed outright when they exceed it. + var maxMemoryMB: Int = 48 + + func write() throws { + let data = try JSONEncoder().encode(self) + try data.write(to: AppGroup.sessionURL, options: .atomic) + } + + static func load() -> TunnelSession { + guard let data = try? Data(contentsOf: AppGroup.sessionURL), + let session = try? JSONDecoder().decode(TunnelSession.self, from: data) else { + return TunnelSession() + } + return session + } +} diff --git a/ios/Tunnel/PacketTunnelProvider.swift b/ios/Tunnel/PacketTunnelProvider.swift new file mode 100644 index 0000000..41b3f83 --- /dev/null +++ b/ios/Tunnel/PacketTunnelProvider.swift @@ -0,0 +1,314 @@ +import Foundation +import NetworkExtension +import Network +import os + +import XrayCore + +/// The whole VPN. NetworkExtension creates a utun interface for us and hands +/// over its file descriptor; we give that descriptor to Xray-core, whose native +/// layer-3 `tun` inbound terminates TCP/UDP off the wire with its own gVisor +/// stack and dispatches every connection through the configured outbound. +/// +/// There is no tun2socks, no local SOCKS hop and no second core: the packet +/// path is utun -> Xray -> server, entirely in this process. +/// +/// Concurrency: NetworkExtension calls in on several queues, so every piece of +/// mutable state below is confined to `stateQueue`. Methods whose names end in +/// `Locked` must already be running on it. +final class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable { + + private let log = Logger(subsystem: "dev.local.veil", category: "tunnel") + private let stateQueue = DispatchQueue(label: "dev.local.veil.tunnel.state") + + private var session = TunnelSession() + private var startedAt: Date? + private var lastError: String? + /// Descriptor of the utun NetworkExtension gave us. Owned by the system — + /// we hand it to Xray but never close it. + private var tunFileDescriptor: Int32 = -1 + + private var pathMonitor: NWPathMonitor? + private var restartWorkItem: DispatchWorkItem? + + // MARK: - Lifecycle + + override func startTunnel(options: [String: NSObject]?, + completionHandler: @escaping (Error?) -> Void) { + let completion = UncheckedSendable(completionHandler) + Task { + do { + try? FileManager.default.removeItem(at: AppGroup.lastErrorURL) + + let session = TunnelSession.load() + let configJSON = try TunnelConfigWriter.loadConfig() + + try await setTunnelNetworkSettings(Self.makeNetworkSettings(session)) + + // The utun only exists once the settings are applied, so look + // for it here rather than at the top of startTunnel. + guard let fd = Self.findUtunDescriptor() else { + throw TunnelError.noTunDescriptor + } + log.info("utun descriptor: \(fd, privacy: .public)") + + try stateQueue.sync { + self.session = session + self.tunFileDescriptor = fd + try self.startCoreLocked(configJSON: configJSON, truncateLog: true) + self.startedAt = Date() + } + + startPathMonitor() + completion.value(nil) + } catch { + stateQueue.sync { self.lastError = error.localizedDescription } + // This process is about to be torn down, so leave the reason + // somewhere the app can still find it. + try? Data(error.localizedDescription.utf8) + .write(to: AppGroup.lastErrorURL, options: .atomic) + log.error("startTunnel failed: \(error.localizedDescription, privacy: .public)") + completion.value(error) + } + } + } + + override func stopTunnel(with reason: NEProviderStopReason, + completionHandler: @escaping () -> Void) { + log.info("stopTunnel: \(reason.rawValue, privacy: .public)") + stopPathMonitor() + stateQueue.sync { + stopCoreLocked() + startedAt = nil + tunFileDescriptor = -1 + } + completionHandler() + } + + override func sleep(completionHandler: @escaping () -> Void) { + // Nothing to flush — Xray owns its connections. Just make sure a + // pending restart doesn't fire while the device is asleep. + stateQueue.sync { + restartWorkItem?.cancel() + restartWorkItem = nil + } + completionHandler() + } + + override func wake() { + // The link almost certainly changed underneath us; rebuild it. + scheduleCoreRestart(reason: "wake", after: 1.0) + } + + // MARK: - Core control + + /// - Parameter truncateLog: only true for a fresh tunnel. A restart caused + /// by a network change would otherwise wipe the very lines explaining why + /// it happened. + private func startCoreLocked(configJSON: String, truncateLog: Bool) throws { + var error: NSError? + if truncateLog { + XrayPrepareLog(AppGroup.logURL.path, &error) + } + + error = nil + let started = XrayStart(configJSON, + Int(tunFileDescriptor), + AppGroup.geoDirectory.path, + session.maxMemoryMB, + &error) + guard started else { + throw error ?? TunnelError.coreStartFailed("unknown") + } + lastError = nil + log.info("xray \(XrayVersion(), privacy: .public) running") + } + + private func stopCoreLocked() { + var error: NSError? + XrayStop(&error) + if let error { + log.error("xray stop: \(error.localizedDescription, privacy: .public)") + } + } + + /// Restarts Xray against the current config file while keeping the tunnel + /// (and its descriptor) up. Used both for switching servers and for + /// recovering from a network change. + private func restartCoreLocked(reason: String) { + guard tunFileDescriptor >= 0 else { return } + log.info("restarting core: \(reason, privacy: .public)") + reasserting = true + defer { reasserting = false } + + stopCoreLocked() + do { + session = TunnelSession.load() + let configJSON = try TunnelConfigWriter.loadConfig() + try startCoreLocked(configJSON: configJSON, truncateLog: false) + if startedAt == nil { startedAt = Date() } + } catch { + lastError = error.localizedDescription + log.error("restart failed: \(error.localizedDescription, privacy: .public)") + } + } + + // MARK: - Network settings + + private static func makeNetworkSettings(_ session: TunnelSession) -> NEPacketTunnelNetworkSettings { + let settings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: session.serverAddress) + settings.mtu = NSNumber(value: session.mtu) + + // Benchmark/test-network range: no home or carrier network uses it, so + // the interface address can never collide with the physical one. + let ipv4 = NEIPv4Settings(addresses: ["198.18.0.1"], subnetMasks: ["255.255.255.0"]) + ipv4.includedRoutes = [NEIPv4Route.default()] + settings.ipv4Settings = ipv4 + + if session.ipv6Enabled { + let ipv6 = NEIPv6Settings(addresses: ["fd6e:a81b:704f:1211::1"], + networkPrefixLengths: [64]) + ipv6.includedRoutes = [NEIPv6Route.default()] + settings.ipv6Settings = ipv6 + } + + let dns = NEDNSSettings(servers: session.dnsServers) + // Empty match domain = "resolve everything through us", which is what + // sends the queries into the tunnel where Xray's DNS outbound answers. + dns.matchDomains = [""] + settings.dnsSettings = dns + + return settings + } + + // MARK: - utun discovery + + /// Finds the descriptor of the utun socket NetworkExtension opened for this + /// provider. There is no API for it, but that socket answers + /// `getsockopt(SYSPROTO_CONTROL, UTUN_OPT_IFNAME)` with its interface name, + /// which nothing else in the process does. + private static func findUtunDescriptor() -> Int32? { + let sysprotoControl: Int32 = 2 + let utunOptIfname: Int32 = 2 + var name = [CChar](repeating: 0, count: Int(IFNAMSIZ)) + + for fd in Int32(0)...1024 { + var length = socklen_t(name.count) + guard getsockopt(fd, sysprotoControl, utunOptIfname, &name, &length) == 0 else { + continue + } + let bytes = name.prefix { $0 != 0 }.map { UInt8(bitPattern: $0) } + if String(decoding: bytes, as: UTF8.self).hasPrefix("utun") { return fd } + } + return nil + } + + // MARK: - Path monitoring + + /// Wi-Fi <-> cellular handovers invalidate every socket Xray holds. iOS + /// keeps the utun alive across them, so all we have to do is rebuild the + /// core's connections — debounced, because one handover produces a burst of + /// path updates. + private func startPathMonitor() { + stopPathMonitor() + let monitor = NWPathMonitor() + monitor.pathUpdateHandler = { [weak self] path in + guard path.status == .satisfied else { return } + self?.scheduleCoreRestart(reason: "network change", after: 1.5) + } + monitor.start(queue: stateQueue) + stateQueue.sync { pathMonitor = monitor } + } + + private func stopPathMonitor() { + stateQueue.sync { + restartWorkItem?.cancel() + restartWorkItem = nil + pathMonitor?.cancel() + pathMonitor = nil + } + } + + private func scheduleCoreRestart(reason: String, after delay: TimeInterval) { + stateQueue.async { [self] in + restartWorkItem?.cancel() + let work = DispatchWorkItem { [weak self] in + self?.restartCoreLocked(reason: reason) + } + restartWorkItem = work + stateQueue.asyncAfter(deadline: .now() + delay, execute: work) + } + } + + // MARK: - App messages + + override func handleAppMessage(_ messageData: Data, + completionHandler: ((Data?) -> Void)?) { + guard let request = TunnelRequest.decode(messageData) else { + completionHandler?(nil) + return + } + + let completion = UncheckedSendable(completionHandler) + stateQueue.async { [self] in + switch request.command { + case .status: + break + case .reload: + // Server switch: same tunnel, same descriptor, new outbound. + restartWorkItem?.cancel() + restartWorkItem = nil + restartCoreLocked(reason: "config reload") + case .clearLog: + var error: NSError? + XrayPrepareLog(AppGroup.logURL.path, &error) + } + completion.value?(currentStatusLocked().encoded()) + } + } + + private func currentStatusLocked() -> TunnelStatus { + TunnelStatus(running: XrayIsRunning(), + coreVersion: XrayVersion(), + serverName: session.serverName, + uplinkBytes: XrayUplink(), + downlinkBytes: XrayDownlink(), + startedAt: startedAt, + lastError: lastError, + log: Self.logTail()) + } + + /// Last few KB of the core log. Provider messages travel over XPC, so we + /// keep the payload small rather than shipping the whole file. + private static func logTail(maxBytes: Int = 16_000) -> String { + guard let handle = try? FileHandle(forReadingFrom: AppGroup.logURL) else { return "" } + defer { try? handle.close() } + let size = (try? handle.seekToEnd()) ?? 0 + let offset = size > UInt64(maxBytes) ? size - UInt64(maxBytes) : 0 + try? handle.seek(toOffset: offset) + let data = (try? handle.readToEnd()) ?? Data() + return String(decoding: data, as: UTF8.self) + } +} + +/// Escape hatch for NetworkExtension's completion handlers: they are plain +/// non-`@Sendable` closures, but Apple documents them as callable from any +/// thread, so boxing them is the honest way to move them across a queue hop. +private struct UncheckedSendable: @unchecked Sendable { + let value: Value + init(_ value: Value) { self.value = value } +} + +enum TunnelError: LocalizedError { + case noTunDescriptor + case coreStartFailed(String) + + var errorDescription: String? { + switch self { + case .noTunDescriptor: + return "Could not find the tunnel interface descriptor." + case .coreStartFailed(let message): + return "Xray failed to start: \(message)" + } + } +} diff --git a/ios/Veil.xcodeproj/project.pbxproj b/ios/Veil.xcodeproj/project.pbxproj new file mode 100644 index 0000000..e22a963 --- /dev/null +++ b/ios/Veil.xcodeproj/project.pbxproj @@ -0,0 +1,449 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + AA00000000000000000090 /* VeilTunnel.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AA00000000000000000031 /* VeilTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + AA00000000000000000091 /* XrayCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA00000000000000000032 /* XrayCore.xcframework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + AA000000000000000000A1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AA00000000000000000001 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA00000000000000000011; + remoteInfo = VeilTunnel; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + AA00000000000000000053 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + AA00000000000000000090 /* VeilTunnel.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + AA00000000000000000030 /* Veil.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Veil.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AA00000000000000000031 /* VeilTunnel.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VeilTunnel.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + AA00000000000000000032 /* XrayCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = Frameworks/XrayCore.xcframework; sourceTree = ""; }; + AA00000000000000000033 /* Veil.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Veil.entitlements; sourceTree = ""; }; + AA00000000000000000034 /* VeilTunnel.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = VeilTunnel.entitlements; sourceTree = ""; }; + AA00000000000000000035 /* Tunnel-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tunnel-Info.plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedRootGroup section */ + AA00000000000000000040 /* App */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = App; + sourceTree = ""; + }; + AA00000000000000000041 /* Tunnel */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = Tunnel; + sourceTree = ""; + }; + AA00000000000000000042 /* Shared */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = Shared; + sourceTree = ""; + }; + AA00000000000000000043 /* Models */ = { + isa = PBXFileSystemSynchronizedRootGroup; + name = Models; + path = ../Sources/XrayClient/Models; + sourceTree = ""; + }; + AA00000000000000000044 /* Core */ = { + isa = PBXFileSystemSynchronizedRootGroup; + name = Core; + path = ../Sources/XrayClient/Core; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + +/* Begin PBXFrameworksBuildPhase section */ + AA00000000000000000051 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA00000000000000000061 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA00000000000000000091 /* XrayCore.xcframework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AA00000000000000000020 = { + isa = PBXGroup; + children = ( + AA00000000000000000040 /* App */, + AA00000000000000000041 /* Tunnel */, + AA00000000000000000042 /* Shared */, + AA00000000000000000043 /* Models */, + AA00000000000000000044 /* Core */, + AA00000000000000000023 /* Config */, + AA00000000000000000022 /* Frameworks */, + AA00000000000000000021 /* Products */, + ); + sourceTree = ""; + }; + AA00000000000000000021 /* Products */ = { + isa = PBXGroup; + children = ( + AA00000000000000000030 /* Veil.app */, + AA00000000000000000031 /* VeilTunnel.appex */, + ); + name = Products; + sourceTree = ""; + }; + AA00000000000000000022 /* Frameworks */ = { + isa = PBXGroup; + children = ( + AA00000000000000000032 /* XrayCore.xcframework */, + ); + name = Frameworks; + sourceTree = ""; + }; + AA00000000000000000023 /* Config */ = { + isa = PBXGroup; + children = ( + AA00000000000000000033 /* Veil.entitlements */, + AA00000000000000000034 /* VeilTunnel.entitlements */, + AA00000000000000000035 /* Tunnel-Info.plist */, + ); + path = Config; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AA00000000000000000010 /* Veil */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA00000000000000000081 /* Build configuration list for PBXNativeTarget "Veil" */; + buildPhases = ( + AA00000000000000000050 /* Sources */, + AA00000000000000000051 /* Frameworks */, + AA00000000000000000052 /* Resources */, + AA00000000000000000053 /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + AA000000000000000000A0 /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + AA00000000000000000040 /* App */, + AA00000000000000000042 /* Shared */, + AA00000000000000000043 /* Models */, + AA00000000000000000044 /* Core */, + ); + name = Veil; + packageProductDependencies = ( + ); + productName = Veil; + productReference = AA00000000000000000030 /* Veil.app */; + productType = "com.apple.product-type.application"; + }; + AA00000000000000000011 /* VeilTunnel */ = { + isa = PBXNativeTarget; + buildConfigurationList = AA00000000000000000082 /* Build configuration list for PBXNativeTarget "VeilTunnel" */; + buildPhases = ( + AA00000000000000000060 /* Sources */, + AA00000000000000000061 /* Frameworks */, + AA00000000000000000062 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + AA00000000000000000041 /* Tunnel */, + AA00000000000000000042 /* Shared */, + AA00000000000000000043 /* Models */, + AA00000000000000000044 /* Core */, + ); + name = VeilTunnel; + packageProductDependencies = ( + ); + productName = VeilTunnel; + productReference = AA00000000000000000031 /* VeilTunnel.appex */; + productType = "com.apple.product-type.app-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AA00000000000000000001 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 2700; + LastUpgradeCheck = 2700; + TargetAttributes = { + AA00000000000000000010 = { + CreatedOnToolsVersion = 27.0; + }; + AA00000000000000000011 = { + CreatedOnToolsVersion = 27.0; + }; + }; + }; + buildConfigurationList = AA00000000000000000080 /* Build configuration list for PBXProject "Veil" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = AA00000000000000000020; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = AA00000000000000000021 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AA00000000000000000010 /* Veil */, + AA00000000000000000011 /* VeilTunnel */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AA00000000000000000052 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA00000000000000000062 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AA00000000000000000050 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA00000000000000000060 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + AA000000000000000000A0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AA00000000000000000011 /* VeilTunnel */; + targetProxy = AA000000000000000000A1 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + AA00000000000000000070 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 6.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + AA00000000000000000071 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_VERSION = 6.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + AA00000000000000000072 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Config/Veil.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = Veil; + INFOPLIST_KEY_NSCameraUsageDescription = "Veil uses the camera to scan server and subscription QR codes."; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.local.veil; + PRODUCT_NAME = Veil; + SWIFT_EMIT_LOC_STRINGS = YES; + }; + name = Debug; + }; + AA00000000000000000073 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Config/Veil.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = Veil; + INFOPLIST_KEY_NSCameraUsageDescription = "Veil uses the camera to scan server and subscription QR codes."; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.local.veil; + PRODUCT_NAME = Veil; + SWIFT_EMIT_LOC_STRINGS = YES; + }; + name = Release; + }; + AA00000000000000000074 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = Config/VeilTunnel.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Config/Tunnel-Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "Veil Tunnel"; + MARKETING_VERSION = 1.0.0; + OTHER_LDFLAGS = ( + "-lresolv", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.local.veil.tunnel; + PRODUCT_NAME = VeilTunnel; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + }; + name = Debug; + }; + AA00000000000000000075 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = Config/VeilTunnel.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Config/Tunnel-Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "Veil Tunnel"; + MARKETING_VERSION = 1.0.0; + OTHER_LDFLAGS = ( + "-lresolv", + ); + PRODUCT_BUNDLE_IDENTIFIER = dev.local.veil.tunnel; + PRODUCT_NAME = VeilTunnel; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AA00000000000000000080 /* Build configuration list for PBXProject "Veil" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA00000000000000000070 /* Debug */, + AA00000000000000000071 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AA00000000000000000081 /* Build configuration list for PBXNativeTarget "Veil" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA00000000000000000072 /* Debug */, + AA00000000000000000073 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AA00000000000000000082 /* Build configuration list for PBXNativeTarget "VeilTunnel" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AA00000000000000000074 /* Debug */, + AA00000000000000000075 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AA00000000000000000001 /* Project object */; +} diff --git a/ios/Veil.xcodeproj/xcshareddata/xcschemes/Veil.xcscheme b/ios/Veil.xcodeproj/xcshareddata/xcschemes/Veil.xcscheme new file mode 100644 index 0000000..28bcab6 --- /dev/null +++ b/ios/Veil.xcodeproj/xcshareddata/xcschemes/Veil.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/XrayBridge/go.mod b/ios/XrayBridge/go.mod new file mode 100644 index 0000000..a0c44f8 --- /dev/null +++ b/ios/XrayBridge/go.mod @@ -0,0 +1,46 @@ +module github.com/faustyu1/veil/ios/xraybridge + +go 1.26.0 + +require github.com/xtls/xray-core v1.260327.0 + +require ( + github.com/andybalholm/brotli v1.0.6 // indirect + github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22 // indirect + github.com/cloudflare/circl v1.6.3 // indirect + github.com/ghodss/yaml v1.0.1-0.20220118164431-d8423dcdf344 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/juju/ratelimit v1.0.2 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/miekg/dns v1.1.72 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pires/go-proxyproto v0.11.0 // indirect + github.com/quic-go/qpack v0.6.0 // indirect + github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af // indirect + github.com/sagernet/sing v0.5.1 // indirect + github.com/sagernet/sing-shadowsocks v0.2.7 // indirect + github.com/vishvananda/netlink v1.3.1 // indirect + github.com/vishvananda/netns v0.0.5 // indirect + github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f // indirect + go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect + golang.org/x/crypto v0.54.0 // indirect + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect + golang.org/x/mobile v0.0.0-20260709172247-6129f5bee9d5 // indirect + golang.org/x/mod v0.38.0 // indirect + golang.org/x/net v0.57.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.40.0 // indirect + golang.org/x/time v0.12.0 // indirect + golang.org/x/tools v0.48.0 // indirect + golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect + golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.11 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gvisor.dev/gvisor v0.0.0-20260122175437-89a5d21be8f0 // indirect + lukechampine.com/blake3 v1.4.1 // indirect +) diff --git a/ios/XrayBridge/go.sum b/ios/XrayBridge/go.sum new file mode 100644 index 0000000..692fe15 --- /dev/null +++ b/ios/XrayBridge/go.sum @@ -0,0 +1,142 @@ +github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= +github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22 h1:00ziBGnLWQEcR9LThDwvxOznJJquJ9bYUdmBFnawLMU= +github.com/apernet/quic-go v0.59.1-0.20260217092621-db4786c77a22/go.mod h1:Npbg8qBtAZlsAB3FWmqwlVh5jtVG6a4DlYsOylUpvzA= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8= +github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ghodss/yaml v1.0.1-0.20220118164431-d8423dcdf344 h1:Arcl6UOIS/kgO2nW3A65HN+7CMjSDP/gofXL4CZt1V4= +github.com/ghodss/yaml v1.0.1-0.20220118164431-d8423dcdf344/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/mock v1.7.0-rc.1 h1:YojYx61/OLFsiv6Rw1Z96LpldJIy31o+UHmwAUMJ6/U= +github.com/golang/mock v1.7.0-rc.1/go.mod h1:s42URUywIqd+OcERslBJvOjepvNymP31m3q8d/GkuRs= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/juju/ratelimit v1.0.2 h1:sRxmtRiajbvrcLQT7S+JbqU0ntsb9W2yhSdNN8tWfaI= +github.com/juju/ratelimit v1.0.2/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI= +github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pires/go-proxyproto v0.11.0 h1:gUQpS85X/VJMdUsYyEgyn59uLJvGqPhJV5YvG68wXH4= +github.com/pires/go-proxyproto v0.11.0/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= +github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= +github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af h1:er2acxbi3N1nvEq6HXHUAR1nTWEJmQfqiGR8EVT9rfs= +github.com/refraction-networking/utls v1.8.3-0.20260301010127-aa6edf4b11af/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/sagernet/sing v0.5.1 h1:mhL/MZVq0TjuvHcpYcFtmSD1BFOxZ/+8ofbNZcg1k1Y= +github.com/sagernet/sing v0.5.1/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/sagernet/sing-shadowsocks v0.2.7 h1:zaopR1tbHEw5Nk6FAkM05wCslV6ahVegEZaKMv9ipx8= +github.com/sagernet/sing-shadowsocks v0.2.7/go.mod h1:0rIKJZBR65Qi0zwdKezt4s57y/Tl1ofkaq6NlkzVuyE= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/vishvananda/netlink v1.3.1 h1:3AEMt62VKqz90r0tmNhog0r/PpWKmrEShJU0wJW6bV0= +github.com/vishvananda/netlink v1.3.1/go.mod h1:ARtKouGSTGchR8aMwmkzC0qiNPrrWO5JS/XMVl45+b4= +github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY= +github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= +github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f h1:iy2JRioxmUpoJ3SzbFPyTxHZMbR/rSHP7dOOgYaq1O8= +github.com/xtls/reality v0.0.0-20260322125925-9234c772ba8f/go.mod h1:DsJblcWDGt76+FVqBVwbwRhxyyNJsGV48gJLch0OOWI= +github.com/xtls/xray-core v1.260327.0 h1:g4TzxMwyPrxslZh6uD+FiG3lXKTrnNO+b4ky2OhogHE= +github.com/xtls/xray-core v1.260327.0/go.mod h1:OXMlhBloFry8mw0KwWLWLd3RQyXJzEYsCGlgsX36h60= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= +go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= +go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M= +go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= +golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= +golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= +golang.org/x/crypto v0.54.0/go.mod h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/mobile v0.0.0-20260709172247-6129f5bee9d5 h1:Mn1OzFmF0ZKX/ZayHz/UdnWHufPp1wlD9lZ5U8LRDFY= +golang.org/x/mobile v0.0.0-20260709172247-6129f5bee9d5/go.mod h1:YX+n47s+53POxN3dx9cIGxG3hGUm/lD64hvrRJFbcSA= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk= +golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= +golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= +golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= +golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE= +golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk= +golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= +golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= +golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb h1:whnFRlWMcXI9d+ZbWg+4sHnLp52d5yiIPUxMBSt4X9A= +golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb/go.mod h1:rpwXGsirqLqN2L0JDJQlwOboGHmptD5ZD6T2VmcqhTw= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gvisor.dev/gvisor v0.0.0-20260122175437-89a5d21be8f0 h1:Lk6hARj5UPY47dBep70OD/TIMwikJ5fGUGX0Rm3Xigk= +gvisor.dev/gvisor v0.0.0-20260122175437-89a5d21be8f0/go.mod h1:QkHjoMIBaYtpVufgwv3keYAbln78mBoCuShZrPrer1Q= +lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= +lukechampine.com/blake3 v1.4.1/go.mod h1:QFosUxmjB8mnrWFSNwKmvxHpfY72bmD2tQ0kBMM3kwo= diff --git a/ios/XrayBridge/xray.go b/ios/XrayBridge/xray.go new file mode 100644 index 0000000..90be5d9 --- /dev/null +++ b/ios/XrayBridge/xray.go @@ -0,0 +1,171 @@ +// Package xray embeds Xray-core into an iOS NetworkExtension. +// +// The whole tunnel lives inside Xray: the packet tunnel provider hands us the +// utun file descriptor it got from NetworkExtension, we publish it through the +// `xray.tun.fd` environment flag, and Xray's native `tun` inbound (gVisor based) +// terminates TCP/UDP straight off the interface. There is no tun2socks, no +// second core and no local SOCKS hop — packets go utun -> Xray -> server. +// +// Built with `gomobile bind` into XrayCore.xcframework, see +// Scripts/ios/build-xraycore.sh. +package xray + +import ( + "bytes" + "errors" + "os" + "path/filepath" + "runtime/debug" + "strconv" + "sync" + + "github.com/xtls/xray-core/common/platform" + "github.com/xtls/xray-core/core" + "github.com/xtls/xray-core/features/stats" + "github.com/xtls/xray-core/infra/conf/serial" + + // Registers every protocol, transport and JSON parser. Importing the conf + // package (pulled in via main/json) is also what registers the `tun` + // inbound handler. + _ "github.com/xtls/xray-core/main/distro/all" +) + +var ( + mu sync.Mutex + instance *core.Instance + counters stats.Manager +) + +// Version returns the embedded Xray-core version, e.g. "26.3.27". +func Version() string { + return core.Version() +} + +// IsRunning reports whether a core instance is currently up. +func IsRunning() bool { + mu.Lock() + defer mu.Unlock() + return instance != nil +} + +// Start boots Xray-core from a JSON configuration. +// +// - configJSON is a full Xray config; it must contain a `tun` inbound. +// - tunFd is the utun descriptor owned by NEPacketTunnelProvider. Xray reads +// and writes raw IP packets on it and never closes it. +// - assetDir is where geoip.dat / geosite.dat live (may be empty). +// - maxMemoryMB caps the Go heap. NetworkExtension processes are killed hard +// when they exceed their (small) memory budget, so we make the collector +// aggressive instead of letting the jetsam killer do it for us. +func Start(configJSON string, tunFd int, assetDir string, maxMemoryMB int) error { + mu.Lock() + defer mu.Unlock() + + if instance != nil { + return errors.New("xray is already running") + } + if tunFd <= 0 { + return errors.New("invalid tun file descriptor") + } + + if maxMemoryMB > 0 { + limit := int64(maxMemoryMB) << 20 + debug.SetGCPercent(10) + debug.SetMemoryLimit(limit) + } + + if err := os.Setenv(platform.TunFdKey, strconv.Itoa(tunFd)); err != nil { + return err + } + if assetDir != "" { + if err := os.Setenv(platform.AssetLocation, assetDir); err != nil { + return err + } + } + + config, err := serial.LoadJSONConfig(bytes.NewReader([]byte(configJSON))) + if err != nil { + return err + } + + inst, err := core.New(config) + if err != nil { + return err + } + if err := inst.Start(); err != nil { + _ = inst.Close() + return err + } + + instance = inst + if manager, ok := inst.GetFeature(stats.ManagerType()).(stats.Manager); ok { + counters = manager + } + return nil +} + +// Stop tears the core down. The tun descriptor stays open — it belongs to +// NetworkExtension, which closes it when the tunnel goes away. +func Stop() error { + mu.Lock() + defer mu.Unlock() + + if instance == nil { + return nil + } + err := instance.Close() + instance = nil + counters = nil + _ = os.Unsetenv(platform.TunFdKey) + debug.FreeOSMemory() + return err +} + +// Uplink returns the bytes sent through the "proxy" outbound since start. +// Returns 0 when statistics are not enabled in the config. +func Uplink() int64 { + return counter("outbound>>>proxy>>>traffic>>>uplink") +} + +// Downlink returns the bytes received through the "proxy" outbound since start. +func Downlink() int64 { + return counter("outbound>>>proxy>>>traffic>>>downlink") +} + +func counter(name string) int64 { + mu.Lock() + manager := counters + mu.Unlock() + if manager == nil { + return 0 + } + c := manager.GetCounter(name) + if c == nil { + return 0 + } + return c.Value() +} + +// CheckConfig validates a configuration without starting anything. Used by the +// app to surface bad server entries before the tunnel is brought up. +func CheckConfig(configJSON string) error { + _, err := serial.LoadJSONConfig(bytes.NewReader([]byte(configJSON))) + return err +} + +// PrepareLog truncates the core log file so each session starts clean, and +// returns the path it was given. Xray itself appends to this file through the +// `log.error` config field. +func PrepareLog(path string) error { + if path == "" { + return nil + } + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return err + } + f, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o644) + if err != nil { + return err + } + return f.Close() +} From a9d596dd6fc9f27bf029682f825c9416635e1776 Mon Sep 17 00:00:00 2001 From: Daniil Shashimov Date: Sun, 26 Jul 2026 20:10:40 +0500 Subject: [PATCH 2/8] iOS: one add button that works out what you pasted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The main screen offered "Add Subscription" and "Paste Link" side by side, which made the user classify their own input before the app would take it. Now there is a single "+" and a single sheet. `AddInputClassifier` (shared Core, covered by tests) recognises share links one per line, a wg-quick [Interface] profile, a subscription URL — plain or base64-wrapped as some panels hand them out — and a base64 subscription body pasted instead of its address. The sheet says what it found before you commit ("Subscription · panel.example.com", "2 servers detected") and keeps the confirm button disabled for anything it can't place. The optional name field only appears when the input is actually a subscription. Also from checking the UI in the simulator: - BalancerGrouper iterated a dictionary, so the server list reshuffled on every refresh. Bucket order now follows first appearance. Affected macOS equally. - NEVPNError.localizedDescription is developer-speak; "IPC failed" is what the user saw when a tunnel refused to start. The actionable codes are now translated, including the Simulator's (which has no VPN stack at all). - The status card ate half the screen before a single server was visible; tightened it. - Labelled the DNS field in Settings — it was a bare, unexplained text row. - The row badge for sing-box-only protocols said "Xray only", which reads as if the server *is* supported. It now says "needs sing-box". Verified in the iOS 27 simulator: list, empty state, add sheet in all three detection states, settings, routing, QR, light and dark. 58 shared tests pass; simulator and device builds are clean. Co-Authored-By: Claude Opus 5 --- Sources/XrayClient/Core/AddInput.swift | 56 ++++++ Sources/XrayClient/Core/BalancerGrouper.swift | 16 +- Tests/XrayClientTests/AddInputTests.swift | 111 +++++++++++ docs/ios.md | 19 ++ ios/App/TunnelController.swift | 31 ++- ios/App/Views/AddServerView.swift | 123 ------------ ios/App/Views/AddView.swift | 180 ++++++++++++++++++ ios/App/Views/ContentView.swift | 41 ++-- ios/App/Views/ServerRow.swift | 2 +- ios/App/Views/SettingsView.swift | 11 +- ios/App/Views/SubscriptionView.swift | 120 ------------ ios/Veil.xcodeproj/project.pbxproj | 16 +- 12 files changed, 435 insertions(+), 291 deletions(-) create mode 100644 Sources/XrayClient/Core/AddInput.swift create mode 100644 Tests/XrayClientTests/AddInputTests.swift delete mode 100644 ios/App/Views/AddServerView.swift create mode 100644 ios/App/Views/AddView.swift delete mode 100644 ios/App/Views/SubscriptionView.swift diff --git a/Sources/XrayClient/Core/AddInput.swift b/Sources/XrayClient/Core/AddInput.swift new file mode 100644 index 0000000..68fc119 --- /dev/null +++ b/Sources/XrayClient/Core/AddInput.swift @@ -0,0 +1,56 @@ +import Foundation + +/// What the user just pasted, scanned or picked. +enum AddInput: Equatable { + /// One or more share links, or a wg-quick profile — nothing to fetch. + case servers([ProxyConfig]) + /// A subscription URL that still has to be downloaded. + case subscription(String) + case unrecognized +} + +/// Works out what a blob of pasted text actually is, so the UI can offer a +/// single "add" action instead of making the user classify it first. +/// +/// Order matters: share links and subscription URLs live in disjoint schemes +/// (`vless://` … vs `http(s)://`), so links are tried first and a URL is only +/// considered once nothing parsed as a server. +enum AddInputClassifier { + + static func classify(_ raw: String) -> AddInput { + let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmed.isEmpty else { return .unrecognized } + + // A wg-quick profile pasted whole. + if trimmed.lowercased().contains("[interface]"), + let wireguard = LinkParser.parseWireGuardConf(trimmed) { + return .servers([wireguard]) + } + + // Share links, one per line — or a whole base64-wrapped subscription + // body, which some users paste instead of the URL. + let servers = BalancerGrouper.group(SubscriptionFetcher.decode(trimmed)) + if !servers.isEmpty { return .servers(servers) } + + // A subscription URL, plain… + if let url = subscriptionURL(trimmed) { return .subscription(url) } + + // …or base64-wrapped, the way some panels hand them out. + if let data = LinkParser.decodeBase64(trimmed), + let decoded = String(data: data, encoding: .utf8), + let url = subscriptionURL(decoded.trimmingCharacters(in: .whitespacesAndNewlines)) { + return .subscription(url) + } + + return .unrecognized + } + + private static func subscriptionURL(_ text: String) -> String? { + guard !text.contains(where: \.isNewline), + let url = URL(string: text), + let scheme = url.scheme?.lowercased(), + scheme == "http" || scheme == "https", + let host = url.host, !host.isEmpty else { return nil } + return text + } +} diff --git a/Sources/XrayClient/Core/BalancerGrouper.swift b/Sources/XrayClient/Core/BalancerGrouper.swift index 6601b94..7afe90e 100644 --- a/Sources/XrayClient/Core/BalancerGrouper.swift +++ b/Sources/XrayClient/Core/BalancerGrouper.swift @@ -9,24 +9,24 @@ enum BalancerGrouper { /// Groups servers by normalized name, protocol and auth key. Servers that do /// not share a bucket are returned unchanged. static func group(_ servers: [ProxyConfig]) -> [ProxyConfig] { + // Bucket order follows first appearance, not the dictionary's hash + // order — otherwise the server list reshuffles on every refresh. + var order: [String] = [] var buckets: [String: [ProxyConfig]] = [:] for server in servers { let key = groupKey(for: server) + if buckets[key] == nil { order.append(key) } buckets[key, default: []].append(server) } - var result: [ProxyConfig] = [] - for group in buckets.values { - guard group.count > 1 else { - result.append(group[0]) - continue - } + return order.map { key in + let group = buckets[key]! + guard group.count > 1 else { return group[0] } var main = group[0] main.name = baseName(main.name) main.alternates = Array(group.dropFirst()) - result.append(main) + return main } - return result } private static func groupKey(for server: ProxyConfig) -> String { diff --git a/Tests/XrayClientTests/AddInputTests.swift b/Tests/XrayClientTests/AddInputTests.swift new file mode 100644 index 0000000..e32fbb2 --- /dev/null +++ b/Tests/XrayClientTests/AddInputTests.swift @@ -0,0 +1,111 @@ +import XCTest +@testable import XrayClient + +/// The add screen offers a single action and infers what was pasted, so the +/// inference is the thing that has to be right. +final class AddInputTests: XCTestCase { + + private let vless = "vless://11111111-2222-3333-4444-555555555555@1.2.3.4:443" + + "?encryption=none&security=reality&sni=www.microsoft.com&fp=chrome" + + "&pbk=xr0PXbLQvB0qCLLm7d5MO_9y2Bqk5DoMHKcVAKTZ1UA&sid=0123abcd" + + "&type=tcp&flow=xtls-rprx-vision#NL" + + func testSingleShareLink() { + guard case .servers(let servers) = AddInputClassifier.classify(vless) else { + return XCTFail("expected servers") + } + XCTAssertEqual(servers.count, 1) + XCTAssertEqual(servers[0].name, "NL") + } + + func testMultipleLinksOnePerLine() { + let text = """ + \(vless) + trojan://pw@us.example.com:443?security=tls#US + ss://YWVzLTI1Ni1nY206aHVudGVyMg@jp.example.com:8388#JP + """ + guard case .servers(let servers) = AddInputClassifier.classify(text) else { + return XCTFail("expected servers") + } + XCTAssertEqual(servers.count, 3) + } + + func testLinksSurvivedLeadingAndTrailingWhitespace() { + guard case .servers = AddInputClassifier.classify("\n \(vless) \n\n") else { + return XCTFail("expected servers") + } + } + + /// Balancer members must already be folded together here, so the add sheet + /// reports "1 server", not "3", and the store gets the grouped entry. + func testNumberedNodesAreGrouped() { + let text = """ + \(vless.replacingOccurrences(of: "#NL", with: "#NL-01")) + \(vless.replacingOccurrences(of: "#NL", with: "#NL-02")) + \(vless.replacingOccurrences(of: "#NL", with: "#NL-03")) + """ + guard case .servers(let servers) = AddInputClassifier.classify(text) else { + return XCTFail("expected servers") + } + XCTAssertEqual(servers.count, 1) + XCTAssertEqual(servers[0].alternates?.count, 2) + } + + func testHTTPSSubscriptionURL() { + XCTAssertEqual(AddInputClassifier.classify("https://panel.example.com/sub/abc"), + .subscription("https://panel.example.com/sub/abc")) + XCTAssertEqual(AddInputClassifier.classify(" http://panel.example.com/s "), + .subscription("http://panel.example.com/s")) + } + + /// Some panels hand out the subscription URL base64-wrapped. + func testBase64WrappedSubscriptionURL() { + let encoded = Data("https://panel.example.com/sub/abc".utf8).base64EncodedString() + XCTAssertEqual(AddInputClassifier.classify(encoded), + .subscription("https://panel.example.com/sub/abc")) + } + + /// …and a user may paste the subscription *body* rather than its URL. + func testBase64SubscriptionBodyBecomesServers() { + let body = Data("\(vless)\ntrojan://pw@us.example.com:443#US".utf8) + .base64EncodedString() + guard case .servers(let servers) = AddInputClassifier.classify(body) else { + return XCTFail("expected servers") + } + XCTAssertEqual(servers.count, 2) + } + + func testWireGuardConfProfile() { + let conf = """ + [Interface] + PrivateKey = cHJpdmF0ZQ== + Address = 10.2.0.2/32 + MTU = 1420 + + [Peer] + PublicKey = cHVibGlj + Endpoint = wg.example.com:51820 + """ + guard case .servers(let servers) = AddInputClassifier.classify(conf) else { + return XCTFail("expected servers") + } + XCTAssertEqual(servers.count, 1) + XCTAssertEqual(servers[0].proto, .wireguard) + XCTAssertEqual(servers[0].port, 51820) + } + + func testGarbageAndEmptyAreRejected() { + XCTAssertEqual(AddInputClassifier.classify(""), .unrecognized) + XCTAssertEqual(AddInputClassifier.classify(" \n "), .unrecognized) + XCTAssertEqual(AddInputClassifier.classify("hello world"), .unrecognized) + XCTAssertEqual(AddInputClassifier.classify("ftp://example.com/x"), .unrecognized) + // A scheme we do not support must not be mistaken for a subscription. + XCTAssertEqual(AddInputClassifier.classify("ssh://host"), .unrecognized) + } + + /// A bare hostname is not a subscription — requiring a scheme keeps typos + /// from silently becoming a download attempt. + func testHostWithoutSchemeIsRejected() { + XCTAssertEqual(AddInputClassifier.classify("panel.example.com/sub"), .unrecognized) + } +} diff --git a/docs/ios.md b/docs/ios.md index 9ba23ba..aec2988 100644 --- a/docs/ios.md +++ b/docs/ios.md @@ -54,6 +54,25 @@ tester and localization are the *same files* the desktop app uses — platform differences are handled with `#if os(macOS)`, so there is one source of truth and `swift test` covers both. +## Adding servers + +There is one entry point, not a "link vs. subscription" choice. Whatever the +user pastes, scans or picks from the photo library goes through +`AddInputClassifier` (in `Sources/XrayClient/Core/AddInput.swift`), which +recognises: + +- share links, one per line (`vless://`, `vmess://`, `trojan://`, `ss://`, + `wireguard://` …) — balancer members are folded together before they land in + the store; +- a wg-quick `[Interface]` profile pasted whole; +- a subscription URL, plain or base64-wrapped the way some panels hand it out; +- a base64 subscription *body*, for users who paste the payload instead of the + address. + +The sheet reports what it recognised before the user commits, and the confirm +button stays disabled for anything it cannot place. The classifier lives in the +shared Core layer and is covered by `AddInputTests`. + ## Protocols Everything Xray-core can do on its own: diff --git a/ios/App/TunnelController.swift b/ios/App/TunnelController.swift index f01f368..0c5fe1e 100644 --- a/ios/App/TunnelController.swift +++ b/ios/App/TunnelController.swift @@ -146,7 +146,36 @@ final class TunnelController { let target = try await prepareManager(server: server) try target.connection.startVPNTunnel() } catch { - fail(error.localizedDescription) + fail(Self.describe(error)) + } + } + + /// NetworkExtension reports its problems as bare `NEVPNError`s whose + /// `localizedDescription` is developer-speak ("IPC failed"). Translate the + /// ones a user can actually act on. + private static func describe(_ error: Error) -> String { + let nsError = error as NSError + guard nsError.domain == NEVPNErrorDomain, + let code = NEVPNError.Code(rawValue: nsError.code) else { + return error.localizedDescription + } + switch code { + case .configurationInvalid: + return "The VPN configuration was rejected by the system." + case .configurationDisabled: + return "The VPN configuration is turned off in Settings." + case .connectionFailed: + return "The tunnel could not start. Check the log for details." + case .configurationStale: + return "The VPN configuration changed — try again." + case .configurationReadWriteFailed: + // Also what the Simulator returns: it has no VPN stack at all. + return "Could not talk to the VPN service. " + + "NetworkExtension does not run in the Simulator — use a real device." + case .configurationUnknown: + return "No VPN configuration is installed yet." + @unknown default: + return error.localizedDescription } } diff --git a/ios/App/Views/AddServerView.swift b/ios/App/Views/AddServerView.swift deleted file mode 100644 index 6e698d5..0000000 --- a/ios/App/Views/AddServerView.swift +++ /dev/null @@ -1,123 +0,0 @@ -import SwiftUI -import PhotosUI - -/// Paste one or more share links, scan a QR code, or pick a QR image from the -/// photo library. Parsing is the same `LinkParser` the desktop app uses. -struct AddServerView: View { - @Environment(ServerStore.self) private var store - @Environment(Loc.self) private var loc - @Environment(\.dismiss) private var dismiss - - @State private var linkText = "" - @State private var errorMessage: String? - @State private var showScanner = false - @State private var photoItem: PhotosPickerItem? - - var body: some View { - // PhotosPicker's label builder is @Sendable, so the localized title has - // to be resolved here rather than inside the closure. - let fromImageTitle = loc("From image…") - - return NavigationStack { - Form { - Section { - TextEditor(text: $linkText) - .font(.system(.footnote, design: .monospaced)) - .frame(minHeight: 140) - .autocorrectionDisabled() - .textInputAutocapitalization(.never) - } header: { - Text(loc("One link per line")) - } footer: { - Text("vless:// · vmess:// · trojan:// · ss:// · wireguard://") - .font(.caption2) - } - - Section { - Button { - showScanner = true - } label: { - Label(loc("Scan camera"), systemImage: "qrcode.viewfinder") - } - PhotosPicker(selection: $photoItem, matching: .images) { - Label(fromImageTitle, systemImage: "photo") - } - Button { - if let clipboard = UIPasteboard.general.string { - append(clipboard) - } - } label: { - Label(loc("Paste from clipboard"), systemImage: "doc.on.clipboard") - } - } - - if let errorMessage { - Section { - Text(errorMessage).foregroundStyle(.red).font(.footnote) - } - } - } - .navigationTitle(loc("Add Link")) - .navigationBarTitleDisplayMode(.inline) - .toolbar { - ToolbarItem(placement: .cancellationAction) { - Button(loc("Cancel")) { dismiss() } - } - ToolbarItem(placement: .confirmationAction) { - Button(loc("Add")) { addServers() } - .disabled(linkText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty) - } - } - .sheet(isPresented: $showScanner) { - QRScannerView { payload in - showScanner = false - append(payload) - } - } - .onChange(of: photoItem) { _, item in - guard let item else { return } - Task { await decode(item) } - } - } - } - - private func append(_ payload: String) { - let trimmed = payload.trimmingCharacters(in: .whitespacesAndNewlines) - guard !trimmed.isEmpty else { return } - linkText += linkText.isEmpty ? trimmed : "\n" + trimmed - } - - private func decode(_ item: PhotosPickerItem) async { - defer { photoItem = nil } - guard let data = try? await item.loadTransferable(type: Data.self), - let image = UIImage(data: data) else { - errorMessage = loc("Could not read that image.") - return - } - guard let payload = QRCode.decode(from: image) else { - errorMessage = loc("No QR code found in that image.") - return - } - append(payload) - } - - private func addServers() { - let text = linkText.trimmingCharacters(in: .whitespacesAndNewlines) - - // A pasted wg-quick profile isn't a share link — detect it first. - if text.lowercased().contains("[interface]"), - let wg = LinkParser.parseWireGuardConf(text) { - store.addManualServers([wg]) - dismiss() - return - } - - let servers = BalancerGrouper.group(LinkParser.parseMany(text)) - guard !servers.isEmpty else { - errorMessage = loc("No valid links found.") - return - } - store.addManualServers(servers) - dismiss() - } -} diff --git a/ios/App/Views/AddView.swift b/ios/App/Views/AddView.swift new file mode 100644 index 0000000..0f3a65e --- /dev/null +++ b/ios/App/Views/AddView.swift @@ -0,0 +1,180 @@ +import SwiftUI +import PhotosUI + +/// The single "add something" screen. +/// +/// There is deliberately no subscription-vs-link choice: the user pastes, +/// scans or picks whatever they have and `AddInputClassifier` works out which +/// it is. The sheet just reports what it found and does the right thing. +struct AddView: View { + @Environment(ServerStore.self) private var store + @Environment(Loc.self) private var loc + @Environment(\.dismiss) private var dismiss + + @State private var text = "" + @State private var nameText = "" + @State private var isLoading = false + @State private var errorMessage: String? + @State private var showScanner = false + @State private var photoItem: PhotosPickerItem? + + private var input: AddInput { AddInputClassifier.classify(text) } + + var body: some View { + // PhotosPicker's label builder is @Sendable, so the localized title has + // to be resolved here rather than inside the closure. + let fromImageTitle = loc("From image…") + + return NavigationStack { + Form { + Section { + TextEditor(text: $text) + .font(.system(.footnote, design: .monospaced)) + .frame(minHeight: 120) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + } header: { + Text(loc("Paste a link, subscription URL or config")) + } footer: { + detectionFooter + } + + if case .subscription = input { + Section { + TextField(loc("Name (optional)"), text: $nameText) + .autocorrectionDisabled() + } + } + + Section { + Button { + showScanner = true + } label: { + Label(loc("Scan camera"), systemImage: "qrcode.viewfinder") + } + PhotosPicker(selection: $photoItem, matching: .images) { + Label(fromImageTitle, systemImage: "photo") + } + Button { + if let clipboard = UIPasteboard.general.string { + append(clipboard) + } + } label: { + Label(loc("Paste from clipboard"), systemImage: "doc.on.clipboard") + } + } + + if let errorMessage { + Section { + Text(errorMessage) + .font(.footnote) + .foregroundStyle(.red) + } + } + } + .navigationTitle(loc("Add")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button(loc("Cancel")) { dismiss() } + } + ToolbarItem(placement: .confirmationAction) { + if isLoading { + ProgressView() + } else { + Button(loc("Add")) { Task { await commit() } } + .disabled(input == .unrecognized) + } + } + } + .sheet(isPresented: $showScanner) { + QRScannerView { payload in + showScanner = false + append(payload) + } + } + .onChange(of: photoItem) { _, item in + guard let item else { return } + Task { await decode(item) } + } + } + } + + /// Live feedback so the user can see the app understood the paste before + /// committing to it. + @ViewBuilder + private var detectionFooter: some View { + switch input { + case .servers(let servers): + Label(servers.count == 1 + ? "\(loc("Server")): \(servers[0].name)" + : "\(servers.count) \(loc("servers detected"))", + systemImage: "checkmark.circle") + .foregroundStyle(.green) + case .subscription(let url): + Label("\(loc("Subscription")) · \(URL(string: url)?.host ?? url)", + systemImage: "arrow.down.circle") + .foregroundStyle(.green) + case .unrecognized where text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty: + Text("vless:// · vmess:// · trojan:// · ss:// · wireguard:// · https://…/sub") + case .unrecognized: + Label(loc("Not a link or subscription URL"), systemImage: "exclamationmark.triangle") + .foregroundStyle(.orange) + } + } + + private func append(_ payload: String) { + let trimmed = payload.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmed.isEmpty else { return } + errorMessage = nil + text += text.isEmpty ? trimmed : "\n" + trimmed + } + + private func decode(_ item: PhotosPickerItem) async { + defer { photoItem = nil } + guard let data = try? await item.loadTransferable(type: Data.self), + let image = UIImage(data: data) else { + errorMessage = loc("Could not read that image.") + return + } + guard let payload = QRCode.decode(from: image) else { + errorMessage = loc("No QR code found in that image.") + return + } + append(payload) + } + + private func commit() async { + errorMessage = nil + switch input { + case .servers(let servers): + store.addManualServers(servers) + dismiss() + + case .subscription(let url): + isLoading = true + defer { isLoading = false } + let hwid = store.settings.sendHwid ? DeviceID.hwid : nil + do { + let result = try await SubscriptionFetcher.fetch(url, hwid: hwid) + guard !result.servers.isEmpty else { + errorMessage = loc("The subscription returned no servers.") + return + } + let name = nameText.isEmpty + ? (result.profileTitle ?? URL(string: url)?.host ?? loc("Subscription")) + : nameText + store.addOrUpdateSubscription(name: name, url: url, + servers: result.servers, + userinfo: result.userinfo, + announce: result.announce) + dismiss() + } catch { + errorMessage = error.localizedDescription + } + + case .unrecognized: + errorMessage = loc("Not a link or subscription URL") + } + } +} diff --git a/ios/App/Views/ContentView.swift b/ios/App/Views/ContentView.swift index e278f7a..64d9d2b 100644 --- a/ios/App/Views/ContentView.swift +++ b/ios/App/Views/ContentView.swift @@ -7,7 +7,6 @@ struct ContentView: View { @Environment(Loc.self) private var loc @State private var showAddSheet = false - @State private var showSubSheet = false @State private var showSettings = false @State private var showLog = false @State private var isRefreshing = false @@ -43,8 +42,7 @@ struct ContentView: View { .searchable(text: $searchText, prompt: loc("Search servers…")) .refreshable { await refreshAll() } .toolbar { toolbarContent } - .sheet(isPresented: $showAddSheet) { AddServerView() } - .sheet(isPresented: $showSubSheet) { SubscriptionView() } + .sheet(isPresented: $showAddSheet) { AddView() } .sheet(isPresented: $showSettings) { SettingsView() } .sheet(isPresented: $showLog) { LogView() } .sheet(item: $qrServer) { QRDisplayView(server: $0) } @@ -56,16 +54,10 @@ struct ContentView: View { @ToolbarContentBuilder private var toolbarContent: some ToolbarContent { ToolbarItem(placement: .topBarLeading) { - Menu { - Button { showSubSheet = true } label: { - Label(loc("Add Subscription"), systemImage: "arrow.down.circle") - } - Button { showAddSheet = true } label: { - Label(loc("Paste Link"), systemImage: "link") - } - } label: { + Button { showAddSheet = true } label: { Image(systemName: "plus") } + .accessibilityLabel(loc("Add")) } ToolbarItem(placement: .topBarTrailing) { Menu { @@ -133,16 +125,16 @@ struct ContentView: View { .font(.system(size: 34)) .foregroundStyle(.secondary) Text(loc("No servers yet")).font(.headline) - Text(loc("Add a subscription or paste a link to get started.")) + Text(loc("Paste a server link or a subscription URL to get started.")) .font(.caption) .foregroundStyle(.secondary) .multilineTextAlignment(.center) - HStack { - Button(loc("Add Subscription")) { showSubSheet = true } - .buttonStyle(.bordered) - Button(loc("Paste Link")) { showAddSheet = true } - .buttonStyle(.borderedProminent) + Button { + showAddSheet = true + } label: { + Label(loc("Add"), systemImage: "plus") } + .buttonStyle(.borderedProminent) .padding(.top, 4) } .frame(maxWidth: .infinity) @@ -195,20 +187,21 @@ struct StatusCard: View { private var selected: ProxyConfig? { store.server(withID: store.selectedServerID) } var body: some View { - VStack(spacing: 16) { + // Kept compact on purpose: this sits above the server list, and every + // point it takes is a row the user has to scroll for. + VStack(spacing: 12) { ZStack { Circle() .fill(statusColor.opacity(0.16)) - .frame(width: 96, height: 96) + .frame(width: 68, height: 68) Image(systemName: tunnel.isConnected ? "shield.lefthalf.filled" : "shield.slash") - .font(.system(size: 40, weight: .medium)) + .font(.system(size: 28, weight: .medium)) .foregroundStyle(statusColor) } - .padding(.top, 8) - VStack(spacing: 4) { + VStack(spacing: 2) { Text(stateLabel) - .font(.title3.weight(.semibold)) + .font(.headline) .foregroundStyle(statusColor) Text(subtitle) .font(.subheadline) @@ -230,7 +223,7 @@ struct StatusCard: View { } .frame(maxWidth: .infinity) .padding(.horizontal, 20) - .padding(.bottom, 18) + .padding(.vertical, 14) } private func trafficLabel(icon: String, bytes: Int64) -> some View { diff --git a/ios/App/Views/ServerRow.swift b/ios/App/Views/ServerRow.swift index 11a5079..b864724 100644 --- a/ios/App/Views/ServerRow.swift +++ b/ios/App/Views/ServerRow.swift @@ -24,7 +24,7 @@ struct ServerRow: View { Text("×\((server.alternates?.count ?? 0) + 1)") } if !server.xraySupported { - Text("Xray only") + Text("needs sing-box") .foregroundStyle(.orange) } } diff --git a/ios/App/Views/SettingsView.swift b/ios/App/Views/SettingsView.swift index 8e97012..8360032 100644 --- a/ios/App/Views/SettingsView.swift +++ b/ios/App/Views/SettingsView.swift @@ -25,10 +25,13 @@ struct SettingsView: View { Stepper(value: $store.settings.tunnelMTU, in: 1280...1500, step: 20) { LabeledContent("MTU", value: "\(store.settings.tunnelMTU)") } - TextField("1.1.1.1, 8.8.8.8", text: $dnsText) - .autocorrectionDisabled() - .textInputAutocapitalization(.never) - .onSubmit(commitDNS) + LabeledContent("DNS") { + TextField("1.1.1.1, 8.8.8.8", text: $dnsText) + .multilineTextAlignment(.trailing) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .onSubmit(commitDNS) + } } header: { Text(loc("Tunnel")) } footer: { diff --git a/ios/App/Views/SubscriptionView.swift b/ios/App/Views/SubscriptionView.swift deleted file mode 100644 index 7353e0f..0000000 --- a/ios/App/Views/SubscriptionView.swift +++ /dev/null @@ -1,120 +0,0 @@ -import SwiftUI -import PhotosUI - -/// Adds a subscription profile by URL. The fetch, the HWID headers and the -/// `Subscription-Userinfo` parsing are all shared with the desktop app. -struct SubscriptionView: View { - @Environment(ServerStore.self) private var store - @Environment(Loc.self) private var loc - @Environment(\.dismiss) private var dismiss - - @State private var nameText = "" - @State private var urlText = "" - @State private var isLoading = false - @State private var message: String? - @State private var showScanner = false - @State private var photoItem: PhotosPickerItem? - - var body: some View { - // PhotosPicker's label builder is @Sendable, so the localized title has - // to be resolved here rather than inside the closure. - let fromImageTitle = loc("From image…") - - return NavigationStack { - Form { - Section(loc("Subscription")) { - TextField(loc("Name (optional)"), text: $nameText) - .autocorrectionDisabled() - TextField("https://example.com/sub", text: $urlText) - .autocorrectionDisabled() - .textInputAutocapitalization(.never) - .keyboardType(.URL) - } - - Section { - Button { - showScanner = true - } label: { - Label(loc("Scan camera"), systemImage: "qrcode.viewfinder") - } - PhotosPicker(selection: $photoItem, matching: .images) { - Label(fromImageTitle, systemImage: "photo") - } - } - - if let message { - Section { - Text(message).font(.footnote).foregroundStyle(.secondary) - } - } - } - .navigationTitle(loc("Add Subscription")) - .navigationBarTitleDisplayMode(.inline) - .toolbar { - ToolbarItem(placement: .cancellationAction) { - Button(loc("Cancel")) { dismiss() } - } - ToolbarItem(placement: .confirmationAction) { - if isLoading { - ProgressView() - } else { - Button(loc("Fetch")) { Task { await fetch() } } - .disabled(urlText.trimmingCharacters(in: .whitespaces).isEmpty) - } - } - } - .sheet(isPresented: $showScanner) { - QRScannerView { payload in - showScanner = false - urlText = payload.trimmingCharacters(in: .whitespacesAndNewlines) - } - } - .onChange(of: photoItem) { _, item in - guard let item else { return } - Task { await decode(item) } - } - } - } - - private func decode(_ item: PhotosPickerItem) async { - defer { photoItem = nil } - guard let data = try? await item.loadTransferable(type: Data.self), - let image = UIImage(data: data), - let payload = QRCode.decode(from: image) else { - message = loc("No QR code found in that image.") - return - } - urlText = payload.trimmingCharacters(in: .whitespacesAndNewlines) - } - - private func fetch() async { - let url = urlText.trimmingCharacters(in: .whitespaces) - guard !url.isEmpty else { return } - isLoading = true - message = nil - defer { isLoading = false } - - let hwid = store.settings.sendHwid ? DeviceID.hwid : nil - do { - let result = try await SubscriptionFetcher.fetch(url, hwid: hwid) - guard !result.servers.isEmpty else { - message = loc("The subscription returned no servers.") - return - } - let name = nameText.isEmpty - ? (result.profileTitle ?? defaultName(from: url)) - : nameText - store.addOrUpdateSubscription(name: name, url: url, - servers: result.servers, - userinfo: result.userinfo, - announce: result.announce) - dismiss() - } catch { - message = error.localizedDescription - } - } - - private func defaultName(from url: String) -> String { - URL(string: url)?.host ?? loc("Subscription") - } -} diff --git a/ios/Veil.xcodeproj/project.pbxproj b/ios/Veil.xcodeproj/project.pbxproj index e22a963..70079a6 100644 --- a/ios/Veil.xcodeproj/project.pbxproj +++ b/ios/Veil.xcodeproj/project.pbxproj @@ -8,7 +8,7 @@ /* Begin PBXBuildFile section */ AA00000000000000000090 /* VeilTunnel.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = AA00000000000000000031 /* VeilTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - AA00000000000000000091 /* XrayCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA00000000000000000032 /* XrayCore.xcframework */; }; + AA00000000000000000091 /* Frameworks/XrayCore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA00000000000000000032 /* Frameworks/XrayCore.xcframework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -38,7 +38,7 @@ /* Begin PBXFileReference section */ AA00000000000000000030 /* Veil.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Veil.app; sourceTree = BUILT_PRODUCTS_DIR; }; AA00000000000000000031 /* VeilTunnel.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VeilTunnel.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - AA00000000000000000032 /* XrayCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = Frameworks/XrayCore.xcframework; sourceTree = ""; }; + AA00000000000000000032 /* Frameworks/XrayCore.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = Frameworks/XrayCore.xcframework; sourceTree = ""; }; AA00000000000000000033 /* Veil.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Veil.entitlements; sourceTree = ""; }; AA00000000000000000034 /* VeilTunnel.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = VeilTunnel.entitlements; sourceTree = ""; }; AA00000000000000000035 /* Tunnel-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tunnel-Info.plist"; sourceTree = ""; }; @@ -86,7 +86,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - AA00000000000000000091 /* XrayCore.xcframework in Frameworks */, + AA00000000000000000091 /* Frameworks/XrayCore.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -119,7 +119,7 @@ AA00000000000000000022 /* Frameworks */ = { isa = PBXGroup; children = ( - AA00000000000000000032 /* XrayCore.xcframework */, + AA00000000000000000032 /* Frameworks/XrayCore.xcframework */, ); name = Frameworks; sourceTree = ""; @@ -383,9 +383,7 @@ INFOPLIST_FILE = "Config/Tunnel-Info.plist"; INFOPLIST_KEY_CFBundleDisplayName = "Veil Tunnel"; MARKETING_VERSION = 1.0.0; - OTHER_LDFLAGS = ( - "-lresolv", - ); + OTHER_LDFLAGS = "-lresolv"; PRODUCT_BUNDLE_IDENTIFIER = dev.local.veil.tunnel; PRODUCT_NAME = VeilTunnel; SKIP_INSTALL = YES; @@ -403,9 +401,7 @@ INFOPLIST_FILE = "Config/Tunnel-Info.plist"; INFOPLIST_KEY_CFBundleDisplayName = "Veil Tunnel"; MARKETING_VERSION = 1.0.0; - OTHER_LDFLAGS = ( - "-lresolv", - ); + OTHER_LDFLAGS = "-lresolv"; PRODUCT_BUNDLE_IDENTIFIER = dev.local.veil.tunnel; PRODUCT_NAME = VeilTunnel; SKIP_INSTALL = YES; From 3364ab3cc85757f36d450b149a269ac693e31c85 Mon Sep 17 00:00:00 2001 From: Daniil Shashimov Date: Sun, 26 Jul 2026 22:00:00 +0500 Subject: [PATCH 3/8] Fix half-translated UI, missing icon and the paste prompt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every iOS screen was a mix of Russian and English. Three separate causes: 1. 55 of the strings the iOS app passes through `loc(…)` were never added to LocalizationTable. `Loc` falls back to the English key when a translation is missing, so the gap is invisible in development and only shows up to a user running the app in their own language. 2. The enum titles behind every picker — LogLevel, RoutingPreset (and its subtitles), AppAppearance, RuleOutbound, GeoAssetSource — returned hardcoded English and were never passed through `loc` at all, on either platform. "Bypass LAN", "Warning", "Proxy/Direct/Block" were English for everyone. 3. Strings the system draws itself (Cancel, Edit, the share sheet, the photo picker) stayed English regardless. Without .lproj bundles iOS treats the app as English-only, so it never offers its own localizations. Declaring CFBundleLocalizations fixes that; `EditButton` still follows the *device* language rather than this app's setting, so routing uses its own button. 83 keys added across all 11 languages, plus the 2 macOS settings strings that were also missing. LocalizationTests now scans Sources/XrayClient/Views and ios/App for `loc("…")` calls and fails if any key is absent, if a row is missing a language, or if a row has an unknown language code — this class of bug should not be found by a user again. Also: - The empty-state Add button showed a bare word: the button style drops a Label's icon unless the label style is stated explicitly. - "Paste from clipboard" read UIPasteboard directly, which pops the system "Allow Paste?" alert on every tap and looks broken when declined. Replaced with a PasteButton, which needs no permission. - Server counts are no longer interpolated into a translated noun; plural forms differ per language, so the detection footer reads "Servers found: N". Verified in the simulator with -AppleLanguages (ru): main list, add sheet, settings and routing are fully Russian, including system-drawn controls. 61 tests pass; simulator and device builds are clean. Co-Authored-By: Claude Opus 5 --- .../XrayClient/Core/LocalizationTable.swift | 334 ++++++++++++++++++ Tests/XrayClientTests/LocalizationTests.swift | 94 +++++ ios/App/Views/AddView.swift | 21 +- ios/App/Views/ContentView.swift | 5 + ios/App/Views/RoutingView.swift | 21 +- ios/App/Views/ServerRow.swift | 6 +- ios/App/Views/SettingsView.swift | 6 +- ios/Config/App-Info.plist | 29 ++ ios/Veil.xcodeproj/project.pbxproj | 4 + 9 files changed, 503 insertions(+), 17 deletions(-) create mode 100644 Tests/XrayClientTests/LocalizationTests.swift create mode 100644 ios/Config/App-Info.plist diff --git a/Sources/XrayClient/Core/LocalizationTable.swift b/Sources/XrayClient/Core/LocalizationTable.swift index 626af65..56db625 100644 --- a/Sources/XrayClient/Core/LocalizationTable.swift +++ b/Sources/XrayClient/Core/LocalizationTable.swift @@ -449,5 +449,339 @@ extension Loc { "ru": "Системный", "zh": "系统", "es": "Sistema", "hi": "सिस्टम", "ar": "النظام", "fr": "Système", "pt": "Sistema", "de": "System", "ja": "システム", "id": "Sistem", "tr": "Sistem"], + + // MARK: Enum titles shown in pickers (LogLevel, RoutingPreset, AppAppearance, RuleOutbound, GeoAssetSource) + "Debug": [ + "ru": "Отладка", "zh": "调试", "es": "Depuración", "hi": "डिबग", + "ar": "تصحيح", "fr": "Débogage", "pt": "Depuração", "de": "Debug", + "ja": "デバッグ", "id": "Debug", "tr": "Hata ayıklama"], + "Info": [ + "ru": "Инфо", "zh": "信息", "es": "Información", "hi": "जानकारी", + "ar": "معلومات", "fr": "Info", "pt": "Informação", "de": "Info", + "ja": "情報", "id": "Info", "tr": "Bilgi"], + "Warning": [ + "ru": "Предупреждения", "zh": "警告", "es": "Advertencia", "hi": "चेतावनी", + "ar": "تحذير", "fr": "Avertissement", "pt": "Aviso", "de": "Warnung", + "ja": "警告", "id": "Peringatan", "tr": "Uyarı"], + "Error": [ + "ru": "Ошибки", "zh": "错误", "es": "Error", "hi": "त्रुटि", + "ar": "خطأ", "fr": "Erreur", "pt": "Erro", "de": "Fehler", + "ja": "エラー", "id": "Kesalahan", "tr": "Hata"], + "None": [ + "ru": "Нет", "zh": "无", "es": "Ninguno", "hi": "कोई नहीं", + "ar": "بدون", "fr": "Aucun", "pt": "Nenhum", "de": "Keine", + "ja": "なし", "id": "Tidak ada", "tr": "Yok"], + "Global": [ + "ru": "Глобально", "zh": "全局", "es": "Global", "hi": "ग्लोबल", + "ar": "عام", "fr": "Global", "pt": "Global", "de": "Global", + "ja": "グローバル", "id": "Global", "tr": "Genel"], + "Bypass LAN": [ + "ru": "В обход LAN", "zh": "绕过局域网", "es": "Omitir LAN", "hi": "LAN बायपास", + "ar": "تجاوز الشبكة المحلية", "fr": "Contourner le LAN", "pt": "Ignorar LAN", "de": "LAN umgehen", + "ja": "LAN をバイパス", "id": "Lewati LAN", "tr": "LAN'ı atla"], + "Bypass China": [ + "ru": "В обход Китая", "zh": "绕过中国", "es": "Omitir China", "hi": "चीन बायपास", + "ar": "تجاوز الصين", "fr": "Contourner la Chine", "pt": "Ignorar China", "de": "China umgehen", + "ja": "中国をバイパス", "id": "Lewati Tiongkok", "tr": "Çin'i atla"], + "Bypass Russia": [ + "ru": "В обход России", "zh": "绕过俄罗斯", "es": "Omitir Rusia", "hi": "रूस बायपास", + "ar": "تجاوز روسيا", "fr": "Contourner la Russie", "pt": "Ignorar Rússia", "de": "Russland umgehen", + "ja": "ロシアをバイパス", "id": "Lewati Rusia", "tr": "Rusya'yı atla"], + "Custom": [ + "ru": "Свои", "zh": "自定义", "es": "Personalizado", "hi": "कस्टम", + "ar": "مخصص", "fr": "Personnalisé", "pt": "Personalizado", "de": "Eigene", + "ja": "カスタム", "id": "Kustom", "tr": "Özel"], + "Light": [ + "ru": "Светлая", "zh": "浅色", "es": "Claro", "hi": "लाइट", + "ar": "فاتح", "fr": "Clair", "pt": "Claro", "de": "Hell", + "ja": "ライト", "id": "Terang", "tr": "Açık"], + "Dark": [ + "ru": "Тёмная", "zh": "深色", "es": "Oscuro", "hi": "डार्क", + "ar": "داكن", "fr": "Sombre", "pt": "Escuro", "de": "Dunkel", + "ja": "ダーク", "id": "Gelap", "tr": "Koyu"], + "Proxy": [ + "ru": "Прокси", "zh": "代理", "es": "Proxy", "hi": "प्रॉक्सी", + "ar": "الوكيل", "fr": "Proxy", "pt": "Proxy", "de": "Proxy", + "ja": "プロキシ", "id": "Proxy", "tr": "Proxy"], + "Direct": [ + "ru": "Напрямую", "zh": "直连", "es": "Directo", "hi": "सीधा", + "ar": "مباشر", "fr": "Direct", "pt": "Direto", "de": "Direkt", + "ja": "直接", "id": "Langsung", "tr": "Doğrudan"], + "Block": [ + "ru": "Блокировать", "zh": "阻止", "es": "Bloquear", "hi": "ब्लॉक", + "ar": "حظر", "fr": "Bloquer", "pt": "Bloquear", "de": "Blockieren", + "ja": "ブロック", "id": "Blokir", "tr": "Engelle"], + "All traffic through the proxy.": [ + "ru": "Весь трафик через прокси.", "zh": "所有流量走代理。", "es": "Todo el tráfico por el proxy.", "hi": "सारा ट्रैफ़िक प्रॉक्सी से।", + "ar": "كل حركة البيانات عبر الوكيل.", "fr": "Tout le trafic passe par le proxy.", "pt": "Todo o tráfego pelo proxy.", "de": "Gesamter Verkehr über den Proxy.", + "ja": "すべての通信をプロキシ経由にします。", "id": "Semua lalu lintas lewat proxy.", "tr": "Tüm trafik proxy üzerinden."], + "Proxy everything except local/LAN addresses.": [ + "ru": "Всё через прокси, кроме локальных адресов.", "zh": "除本地/局域网地址外全部走代理。", "es": "Todo por el proxy salvo las direcciones locales/LAN.", "hi": "लोकल/LAN पतों को छोड़कर सब प्रॉक्सी से।", + "ar": "كل شيء عبر الوكيل عدا العناوين المحلية.", "fr": "Tout via le proxy sauf les adresses locales/LAN.", "pt": "Tudo pelo proxy exceto endereços locais/LAN.", "de": "Alles über den Proxy außer lokalen/LAN-Adressen.", + "ja": "ローカル/LAN アドレス以外をプロキシ経由にします。", "id": "Semua lewat proxy kecuali alamat lokal/LAN.", "tr": "Yerel/LAN adresleri dışında her şey proxy üzerinden."], + "Mainland China sites & LAN go direct, rest via proxy.": [ + "ru": "Сайты Китая и локальная сеть — напрямую, остальное через прокси.", "zh": "中国大陆站点与局域网直连,其余走代理。", "es": "Sitios de China continental y LAN directos, el resto por proxy.", "hi": "मुख्यभूमि चीन की साइटें और LAN सीधे, बाकी प्रॉक्सी से।", + "ar": "مواقع الصين والشبكة المحلية مباشرة، والباقي عبر الوكيل.", "fr": "Sites de Chine continentale et LAN en direct, le reste via le proxy.", "pt": "Sites da China continental e LAN diretos, o resto pelo proxy.", "de": "Festlandchina-Seiten und LAN direkt, der Rest über den Proxy.", + "ja": "中国本土のサイトと LAN は直接接続、それ以外はプロキシ経由。", "id": "Situs Tiongkok daratan dan LAN langsung, sisanya lewat proxy.", "tr": "Çin anakarası siteleri ve LAN doğrudan, gerisi proxy üzerinden."], + "Russian & .ru-gov sites go direct, rest via proxy.": [ + "ru": "Российские и госсайты — напрямую, остальное через прокси.", "zh": "俄罗斯及 .ru 政府站点直连,其余走代理。", "es": "Sitios rusos y gubernamentales directos, el resto por proxy.", "hi": "रूसी और सरकारी साइटें सीधे, बाकी प्रॉक्सी से।", + "ar": "المواقع الروسية والحكومية مباشرة، والباقي عبر الوكيل.", "fr": "Sites russes et gouvernementaux en direct, le reste via le proxy.", "pt": "Sites russos e governamentais diretos, o resto pelo proxy.", "de": "Russische und Regierungsseiten direkt, der Rest über den Proxy.", + "ja": "ロシアと政府系サイトは直接接続、それ以外はプロキシ経由。", "id": "Situs Rusia dan pemerintah langsung, sisanya lewat proxy.", "tr": "Rus ve devlet siteleri doğrudan, gerisi proxy üzerinden."], + "Your own ordered rule list.": [ + "ru": "Ваш собственный упорядоченный список правил.", "zh": "你自己排序的规则列表。", "es": "Tu propia lista ordenada de reglas.", "hi": "आपकी अपनी क्रमबद्ध नियम सूची।", + "ar": "قائمة قواعدك المرتّبة الخاصة.", "fr": "Votre propre liste de règles ordonnée.", "pt": "Sua própria lista ordenada de regras.", "de": "Ihre eigene, geordnete Regelliste.", + "ja": "独自の順序付きルールリスト。", "id": "Daftar aturan berurutan milik Anda.", "tr": "Kendi sıralı kural listeniz."], + "Loyalsoldier (global + CN)": [ + "ru": "Loyalsoldier (мир + Китай)", "zh": "Loyalsoldier(全球 + 中国)", "es": "Loyalsoldier (global + CN)", "hi": "Loyalsoldier (वैश्विक + CN)", + "ar": "Loyalsoldier (عالمي + الصين)", "fr": "Loyalsoldier (monde + CN)", "pt": "Loyalsoldier (global + CN)", "de": "Loyalsoldier (global + CN)", + "ja": "Loyalsoldier(全世界 + 中国)", "id": "Loyalsoldier (global + CN)", "tr": "Loyalsoldier (küresel + ÇH)"], + "runetfreedom (RU)": [ + "ru": "runetfreedom (Россия)", "zh": "runetfreedom(俄罗斯)", "es": "runetfreedom (Rusia)", "hi": "runetfreedom (रूस)", + "ar": "runetfreedom (روسيا)", "fr": "runetfreedom (Russie)", "pt": "runetfreedom (Rússia)", "de": "runetfreedom (Russland)", + "ja": "runetfreedom(ロシア)", "id": "runetfreedom (Rusia)", "tr": "runetfreedom (Rusya)"], + "v2fly (official)": [ + "ru": "v2fly (официальный)", "zh": "v2fly(官方)", "es": "v2fly (oficial)", "hi": "v2fly (आधिकारिक)", + "ar": "v2fly (رسمي)", "fr": "v2fly (officiel)", "pt": "v2fly (oficial)", "de": "v2fly (offiziell)", + "ja": "v2fly(公式)", "id": "v2fly (resmi)", "tr": "v2fly (resmî)"], + "Custom URLs": [ + "ru": "Свои ссылки", "zh": "自定义地址", "es": "URL personalizadas", "hi": "कस्टम URL", + "ar": "روابط مخصصة", "fr": "URL personnalisées", "pt": "URLs personalizadas", "de": "Eigene URLs", + "ja": "カスタム URL", "id": "URL kustom", "tr": "Özel adresler"], + + // MARK: iOS app + "About": [ + "ru": "О программе", "zh": "关于", "es": "Acerca de", "hi": "परिचय", + "ar": "حول", "fr": "À propos", "pt": "Sobre", "de": "Über", + "ja": "情報", "id": "Tentang", "tr": "Hakkında"], + "App version": [ + "ru": "Версия приложения", "zh": "应用版本", "es": "Versión de la app", "hi": "ऐप संस्करण", + "ar": "إصدار التطبيق", "fr": "Version de l'app", "pt": "Versão do app", "de": "App-Version", + "ja": "アプリバージョン", "id": "Versi aplikasi", "tr": "Uygulama sürümü"], + "Block ads": [ + "ru": "Блокировать рекламу", "zh": "拦截广告", "es": "Bloquear anuncios", "hi": "विज्ञापन ब्लॉक करें", + "ar": "حظر الإعلانات", "fr": "Bloquer les pubs", "pt": "Bloquear anúncios", "de": "Werbung blockieren", + "ja": "広告をブロック", "id": "Blokir iklan", "tr": "Reklamları engelle"], + "Blocking": [ + "ru": "Блокировка", "zh": "拦截", "es": "Bloqueo", "hi": "ब्लॉकिंग", + "ar": "الحظر", "fr": "Blocage", "pt": "Bloqueio", "de": "Blockieren", + "ja": "ブロック", "id": "Pemblokiran", "tr": "Engelleme"], + "Changes apply the next time you connect or switch servers.": [ + "ru": "Изменения применятся при следующем подключении или смене сервера.", "zh": "更改将在下次连接或切换服务器时生效。", "es": "Los cambios se aplican la próxima vez que te conectes o cambies de servidor.", "hi": "परिवर्तन अगली बार कनेक्ट करने या सर्वर बदलने पर लागू होंगे।", + "ar": "تُطبَّق التغييرات عند الاتصال التالي أو عند تبديل الخادم.", "fr": "Les modifications s'appliqueront à la prochaine connexion ou au changement de serveur.", "pt": "As alterações serão aplicadas na próxima conexão ou troca de servidor.", "de": "Änderungen gelten beim nächsten Verbinden oder Serverwechsel.", + "ja": "変更は次回の接続またはサーバー切り替え時に適用されます。", "id": "Perubahan berlaku saat Anda terhubung berikutnya atau berganti server.", "tr": "Değişiklikler bir sonraki bağlantıda veya sunucu değişiminde uygulanır."], + "Copy link": [ + "ru": "Скопировать ссылку", "zh": "复制链接", "es": "Copiar enlace", "hi": "लिंक कॉपी करें", + "ar": "نسخ الرابط", "fr": "Copier le lien", "pt": "Copiar link", "de": "Link kopieren", + "ja": "リンクをコピー", "id": "Salin tautan", "tr": "Bağlantıyı kopyala"], + "Could not read that image.": [ + "ru": "Не удалось прочитать изображение.", "zh": "无法读取该图片。", "es": "No se pudo leer la imagen.", "hi": "वह छवि पढ़ी नहीं जा सकी।", + "ar": "تعذّرت قراءة الصورة.", "fr": "Impossible de lire cette image.", "pt": "Não foi possível ler a imagem.", "de": "Bild konnte nicht gelesen werden.", + "ja": "画像を読み取れませんでした。", "id": "Tidak dapat membaca gambar itu.", "tr": "Görsel okunamadı."], + "Could not render a QR code for this server.": [ + "ru": "Не удалось создать QR-код для этого сервера.", "zh": "无法为该服务器生成二维码。", "es": "No se pudo generar el código QR de este servidor.", "hi": "इस सर्वर के लिए QR कोड नहीं बनाया जा सका।", + "ar": "تعذّر إنشاء رمز QR لهذا الخادم.", "fr": "Impossible de générer le QR code pour ce serveur.", "pt": "Não foi possível gerar o QR code deste servidor.", "de": "QR-Code für diesen Server konnte nicht erstellt werden.", + "ja": "このサーバーの QR コードを生成できませんでした。", "id": "Tidak dapat membuat kode QR untuk server ini.", "tr": "Bu sunucu için QR kod oluşturulamadı."], + "Custom rules": [ + "ru": "Свои правила", "zh": "自定义规则", "es": "Reglas personalizadas", "hi": "कस्टम नियम", + "ar": "قواعد مخصصة", "fr": "Règles personnalisées", "pt": "Regras personalizadas", "de": "Eigene Regeln", + "ja": "カスタムルール", "id": "Aturan kustom", "tr": "Özel kurallar"], + "Device ID": [ + "ru": "ID устройства", "zh": "设备 ID", "es": "ID del dispositivo", "hi": "डिवाइस आईडी", + "ar": "معرّف الجهاز", "fr": "Identifiant de l'appareil", "pt": "ID do dispositivo", "de": "Geräte-ID", + "ja": "デバイス ID", "id": "ID perangkat", "tr": "Cihaz kimliği"], + "Download geo databases": [ + "ru": "Скачать geo-базы", "zh": "下载 geo 数据库", "es": "Descargar bases geo", "hi": "geo डेटाबेस डाउनलोड करें", + "ar": "تنزيل قواعد geo", "fr": "Télécharger les bases geo", "pt": "Baixar bases geo", "de": "Geo-Datenbanken laden", + "ja": "geo データベースをダウンロード", "id": "Unduh basis data geo", "tr": "Geo veritabanlarını indir"], + "Enabled": [ + "ru": "Включено", "zh": "已启用", "es": "Activada", "hi": "सक्षम", + "ar": "مفعّل", "fr": "Activée", "pt": "Ativada", "de": "Aktiviert", + "ja": "有効", "id": "Aktif", "tr": "Etkin"], + "Every": [ + "ru": "Каждые", "zh": "每", "es": "Cada", "hi": "हर", + "ar": "كل", "fr": "Toutes les", "pt": "A cada", "de": "Alle", + "ja": "間隔", "id": "Setiap", "tr": "Her"], + "Expires": [ + "ru": "Истекает", "zh": "到期", "es": "Vence", "hi": "समाप्ति", + "ar": "ينتهي", "fr": "Expire", "pt": "Expira", "de": "Läuft ab", + "ja": "有効期限", "id": "Kedaluwarsa", "tr": "Bitiş"], + "Failed": [ + "ru": "Ошибка", "zh": "失败", "es": "Error", "hi": "विफल", + "ar": "فشل", "fr": "Échec", "pt": "Falhou", "de": "Fehlgeschlagen", + "ja": "失敗", "id": "Gagal", "tr": "Başarısız"], + "From image…": [ + "ru": "Из изображения…", "zh": "从图片…", "es": "Desde imagen…", "hi": "छवि से…", + "ar": "من صورة…", "fr": "Depuis une image…", "pt": "De uma imagem…", "de": "Aus Bild…", + "ja": "画像から…", "id": "Dari gambar…", "tr": "Görselden…"], + "Geo databases": [ + "ru": "Geo-базы", "zh": "Geo 数据库", "es": "Bases geo", "hi": "Geo डेटाबेस", + "ar": "قواعد geo", "fr": "Bases geo", "pt": "Bases geo", "de": "Geo-Datenbanken", + "ja": "geo データベース", "id": "Basis data geo", "tr": "Geo veritabanları"], + "IPs": [ + "ru": "IP-адреса", "zh": "IP 地址", "es": "IP", "hi": "IP पते", + "ar": "عناوين IP", "fr": "IP", "pt": "IPs", "de": "IPs", + "ja": "IP アドレス", "id": "Alamat IP", "tr": "IP adresleri"], + "IPv6 inside tunnel": [ + "ru": "IPv6 в туннеле", "zh": "隧道内 IPv6", "es": "IPv6 en el túnel", "hi": "टनल में IPv6", + "ar": "IPv6 داخل النفق", "fr": "IPv6 dans le tunnel", "pt": "IPv6 no túnel", "de": "IPv6 im Tunnel", + "ja": "トンネル内の IPv6", "id": "IPv6 dalam terowongan", "tr": "Tünel içinde IPv6"], + "Installed": [ + "ru": "Установлен", "zh": "已安装", "es": "Instalado", "hi": "इंस्टॉल्ड", + "ar": "مثبَّت", "fr": "Installé", "pt": "Instalado", "de": "Installiert", + "ja": "インストール済み", "id": "Terpasang", "tr": "Yüklü"], + "Installed.": [ + "ru": "Установлены.", "zh": "已安装。", "es": "Instaladas.", "hi": "इंस्टॉल्ड।", + "ar": "مثبَّتة.", "fr": "Installées.", "pt": "Instaladas.", "de": "Installiert.", + "ja": "インストール済み。", "id": "Terpasang.", "tr": "Yüklü."], + "Name": [ + "ru": "Название", "zh": "名称", "es": "Nombre", "hi": "नाम", + "ar": "الاسم", "fr": "Nom", "pt": "Nome", "de": "Name", + "ja": "名前", "id": "Nama", "tr": "Ad"], + "Network Extension (all apps)": [ + "ru": "Network Extension (все приложения)", "zh": "Network Extension(所有应用)", "es": "Network Extension (todas las apps)", "hi": "Network Extension (सभी ऐप्स)", + "ar": "Network Extension (كل التطبيقات)", "fr": "Network Extension (toutes les apps)", "pt": "Network Extension (todos os apps)", "de": "Network Extension (alle Apps)", + "ja": "Network Extension(全アプリ)", "id": "Network Extension (semua aplikasi)", "tr": "Network Extension (tüm uygulamalar)"], + "New rule": [ + "ru": "Новое правило", "zh": "新规则", "es": "Nueva regla", "hi": "नया नियम", + "ar": "قاعدة جديدة", "fr": "Nouvelle règle", "pt": "Nova regra", "de": "Neue Regel", + "ja": "新しいルール", "id": "Aturan baru", "tr": "Yeni kural"], + "No QR code found in that image.": [ + "ru": "В изображении нет QR-кода.", "zh": "该图片中未找到二维码。", "es": "No se encontró ningún código QR en la imagen.", "hi": "उस छवि में कोई QR कोड नहीं मिला।", + "ar": "لم يُعثر على رمز QR في الصورة.", "fr": "Aucun QR code trouvé dans cette image.", "pt": "Nenhum QR code encontrado na imagem.", "de": "Kein QR-Code im Bild gefunden.", + "ja": "画像に QR コードが見つかりません。", "id": "Tidak ada kode QR pada gambar itu.", "tr": "Görselde QR kod bulunamadı."], + "No logs yet.": [ + "ru": "Логов пока нет.", "zh": "暂无日志。", "es": "Aún no hay registros.", "hi": "अभी कोई लॉग नहीं।", + "ar": "لا توجد سجلات بعد.", "fr": "Aucun journal pour l'instant.", "pt": "Ainda não há logs.", "de": "Noch keine Logs.", + "ja": "ログはまだありません。", "id": "Belum ada log.", "tr": "Henüz günlük yok."], + "Not a link or subscription URL": [ + "ru": "Это не ссылка и не URL подписки", "zh": "不是链接或订阅地址", "es": "No es un enlace ni una URL de suscripción", "hi": "यह लिंक या सब्सक्रिप्शन URL नहीं है", + "ar": "ليس رابطًا ولا عنوان اشتراك", "fr": "Ni un lien ni une URL d'abonnement", "pt": "Não é um link nem uma URL de assinatura", "de": "Weder Link noch Abo-URL", + "ja": "リンクでもサブスクリプション URL でもありません", "id": "Bukan tautan atau URL langganan", "tr": "Bağlantı ya da abonelik adresi değil"], + "Not installed": [ + "ru": "Не установлен", "zh": "未安装", "es": "No instalado", "hi": "इंस्टॉल नहीं है", + "ar": "غير مثبَّت", "fr": "Non installé", "pt": "Não instalado", "de": "Nicht installiert", + "ja": "未インストール", "id": "Belum terpasang", "tr": "Yüklü değil"], + "Notify on connect": [ + "ru": "Уведомлять о подключении", "zh": "连接时通知", "es": "Notificar al conectar", "hi": "कनेक्ट होने पर सूचित करें", + "ar": "تنبيه عند الاتصال", "fr": "Notifier à la connexion", "pt": "Notificar ao conectar", "de": "Bei Verbindung benachrichtigen", + "ja": "接続時に通知", "id": "Beri tahu saat terhubung", "tr": "Bağlanınca bildir"], + "Outbound": [ + "ru": "Исходящий", "zh": "出站", "es": "Salida", "hi": "आउटबाउंड", + "ar": "الوجهة", "fr": "Sortie", "pt": "Saída", "de": "Ausgang", + "ja": "アウトバウンド", "id": "Keluar", "tr": "Çıkış"], + "Paste a link, subscription URL or config": [ + "ru": "Вставьте ссылку, URL подписки или конфиг", "zh": "粘贴链接、订阅地址或配置", "es": "Pega un enlace, URL de suscripción o configuración", "hi": "लिंक, सब्सक्रिप्शन URL या कॉन्फ़िग पेस्ट करें", + "ar": "الصق رابطًا أو عنوان اشتراك أو إعدادًا", "fr": "Collez un lien, une URL d'abonnement ou une config", "pt": "Cole um link, URL de assinatura ou config", "de": "Link, Abo-URL oder Config einfügen", + "ja": "リンク・サブスクリプション URL・設定を貼り付け", "id": "Tempel tautan, URL langganan, atau konfigurasi", "tr": "Bağlantı, abonelik adresi veya yapılandırma yapıştırın"], + "Paste a server link or a subscription URL to get started.": [ + "ru": "Вставьте ссылку на сервер или URL подписки, чтобы начать.", "zh": "粘贴服务器链接或订阅地址即可开始。", "es": "Pega un enlace de servidor o una URL de suscripción para empezar.", "hi": "शुरू करने के लिए सर्वर लिंक या सब्सक्रिप्शन URL पेस्ट करें।", + "ar": "الصق رابط خادم أو عنوان اشتراك للبدء.", "fr": "Collez un lien de serveur ou une URL d'abonnement pour commencer.", "pt": "Cole um link de servidor ou uma URL de assinatura para começar.", "de": "Server-Link oder Abo-URL einfügen, um zu starten.", + "ja": "サーバーのリンクかサブスクリプション URL を貼り付けて始めましょう。", "id": "Tempel tautan server atau URL langganan untuk memulai.", "tr": "Başlamak için bir sunucu bağlantısı veya abonelik adresi yapıştırın."], + "Paste from clipboard": [ + "ru": "Вставить из буфера", "zh": "从剪贴板粘贴", "es": "Pegar del portapapeles", "hi": "क्लिपबोर्ड से पेस्ट करें", + "ar": "لصق من الحافظة", "fr": "Coller depuis le presse-papiers", "pt": "Colar da área de transferência", "de": "Aus Zwischenablage einfügen", + "ja": "クリップボードから貼り付け", "id": "Tempel dari papan klip", "tr": "Panodan yapıştır"], + "Port (optional)": [ + "ru": "Порт (необязательно)", "zh": "端口(可选)", "es": "Puerto (opcional)", "hi": "पोर्ट (वैकल्पिक)", + "ar": "المنفذ (اختياري)", "fr": "Port (facultatif)", "pt": "Porta (opcional)", "de": "Port (optional)", + "ja": "ポート(任意)", "id": "Port (opsional)", "tr": "Bağlantı noktası (isteğe bağlı)"], + "Remove VPN profile": [ + "ru": "Удалить VPN-профиль", "zh": "删除 VPN 配置", "es": "Eliminar perfil VPN", "hi": "VPN प्रोफ़ाइल हटाएँ", + "ar": "إزالة ملف VPN", "fr": "Supprimer le profil VPN", "pt": "Remover perfil VPN", "de": "VPN-Profil entfernen", + "ja": "VPN プロファイルを削除", "id": "Hapus profil VPN", "tr": "VPN profilini kaldır"], + "Remove VPN profile?": [ + "ru": "Удалить VPN-профиль?", "zh": "删除 VPN 配置?", "es": "¿Eliminar el perfil VPN?", "hi": "VPN प्रोफ़ाइल हटाएँ?", + "ar": "إزالة ملف VPN؟", "fr": "Supprimer le profil VPN ?", "pt": "Remover perfil VPN?", "de": "VPN-Profil entfernen?", + "ja": "VPN プロファイルを削除しますか?", "id": "Hapus profil VPN?", "tr": "VPN profili kaldırılsın mı?"], + "Rules": [ + "ru": "Правила", "zh": "规则", "es": "Reglas", "hi": "नियम", + "ar": "القواعد", "fr": "Règles", "pt": "Regras", "de": "Regeln", + "ja": "ルール", "id": "Aturan", "tr": "Kurallar"], + "Scan camera": [ + "ru": "Сканировать камерой", "zh": "用相机扫描", "es": "Escanear con la cámara", "hi": "कैमरे से स्कैन करें", + "ar": "المسح بالكاميرا", "fr": "Scanner avec l'appareil photo", "pt": "Escanear com a câmera", "de": "Mit Kamera scannen", + "ja": "カメラでスキャン", "id": "Pindai dengan kamera", "tr": "Kamerayla tara"], + "Send device ID (HWID)": [ + "ru": "Отправлять ID устройства (HWID)", "zh": "发送设备 ID (HWID)", "es": "Enviar ID del dispositivo (HWID)", "hi": "डिवाइस आईडी (HWID) भेजें", + "ar": "إرسال معرّف الجهاز (HWID)", "fr": "Envoyer l'identifiant (HWID)", "pt": "Enviar ID do dispositivo (HWID)", "de": "Geräte-ID (HWID) senden", + "ja": "デバイス ID (HWID) を送信", "id": "Kirim ID perangkat (HWID)", "tr": "Cihaz kimliğini (HWID) gönder"], + "Server": [ + "ru": "Сервер", "zh": "服务器", "es": "Servidor", "hi": "सर्वर", + "ar": "الخادم", "fr": "Serveur", "pt": "Servidor", "de": "Server", + "ja": "サーバー", "id": "Server", "tr": "Sunucu"], + "Servers found": [ + "ru": "Найдено серверов", "zh": "找到服务器", "es": "Servidores encontrados", "hi": "सर्वर मिले", + "ar": "الخوادم الموجودة", "fr": "Serveurs trouvés", "pt": "Servidores encontrados", "de": "Gefundene Server", + "ja": "見つかったサーバー", "id": "Server ditemukan", "tr": "Bulunan sunucular"], + "Share": [ + "ru": "Поделиться", "zh": "分享", "es": "Compartir", "hi": "शेयर करें", + "ar": "مشاركة", "fr": "Partager", "pt": "Compartilhar", "de": "Teilen", + "ja": "共有", "id": "Bagikan", "tr": "Paylaş"], + "Show QR code": [ + "ru": "Показать QR-код", "zh": "显示二维码", "es": "Mostrar código QR", "hi": "QR कोड दिखाएँ", + "ar": "عرض رمز QR", "fr": "Afficher le QR code", "pt": "Mostrar QR code", "de": "QR-Code anzeigen", + "ja": "QR コードを表示", "id": "Tampilkan kode QR", "tr": "QR kodu göster"], + "Source": [ + "ru": "Источник", "zh": "来源", "es": "Fuente", "hi": "स्रोत", + "ar": "المصدر", "fr": "Source", "pt": "Fonte", "de": "Quelle", + "ja": "ソース", "id": "Sumber", "tr": "Kaynak"], + "Startup": [ + "ru": "Запуск", "zh": "启动", "es": "Inicio", "hi": "स्टार्टअप", + "ar": "بدء التشغيل", "fr": "Démarrage", "pt": "Inicialização", "de": "Start", + "ja": "起動", "id": "Mulai", "tr": "Başlangıç"], + "Status": [ + "ru": "Статус", "zh": "状态", "es": "Estado", "hi": "स्थिति", + "ar": "الحالة", "fr": "État", "pt": "Status", "de": "Status", + "ja": "状態", "id": "Status", "tr": "Durum"], + "The subscription returned no servers.": [ + "ru": "Подписка не вернула ни одного сервера.", "zh": "订阅未返回任何服务器。", "es": "La suscripción no devolvió servidores.", "hi": "सब्सक्रिप्शन से कोई सर्वर नहीं मिला।", + "ar": "لم يُرجع الاشتراك أي خادم.", "fr": "L'abonnement n'a renvoyé aucun serveur.", "pt": "A assinatura não retornou servidores.", "de": "Das Abo hat keine Server geliefert.", + "ja": "サブスクリプションからサーバーが返されませんでした。", "id": "Langganan tidak mengembalikan server.", "tr": "Abonelik hiç sunucu döndürmedi."], + "Untitled rule": [ + "ru": "Правило без названия", "zh": "未命名规则", "es": "Regla sin nombre", "hi": "बिना नाम का नियम", + "ar": "قاعدة بلا اسم", "fr": "Règle sans nom", "pt": "Regra sem nome", "de": "Unbenannte Regel", + "ja": "名称未設定のルール", "id": "Aturan tanpa nama", "tr": "Adsız kural"], + "VPN profile": [ + "ru": "VPN-профиль", "zh": "VPN 配置", "es": "Perfil VPN", "hi": "VPN प्रोफ़ाइल", + "ar": "ملف VPN", "fr": "Profil VPN", "pt": "Perfil VPN", "de": "VPN-Profil", + "ja": "VPN プロファイル", "id": "Profil VPN", "tr": "VPN profili"], + "Xray core": [ + "ru": "Ядро Xray", "zh": "Xray 内核", "es": "Núcleo Xray", "hi": "Xray कोर", + "ar": "نواة Xray", "fr": "Noyau Xray", "pt": "Núcleo Xray", "de": "Xray-Kern", + "ja": "Xray コア", "id": "Inti Xray", "tr": "Xray çekirdeği"], + "geosite:/geoip: rules need these files.": [ + "ru": "Правила geosite:/geoip: требуют эти файлы.", "zh": "geosite:/geoip: 规则需要这些文件。", "es": "Las reglas geosite:/geoip: necesitan estos archivos.", "hi": "geosite:/geoip: नियमों के लिए ये फ़ाइलें ज़रूरी हैं।", + "ar": "قواعد geosite:/geoip: تحتاج هذه الملفات.", "fr": "Les règles geosite:/geoip: nécessitent ces fichiers.", "pt": "As regras geosite:/geoip: precisam destes arquivos.", "de": "geosite:/geoip:-Regeln brauchen diese Dateien.", + "ja": "geosite:/geoip: ルールにはこれらのファイルが必要です。", "id": "Aturan geosite:/geoip: memerlukan berkas ini.", "tr": "geosite:/geoip: kuralları bu dosyaları gerektirir."], + "iOS asks you to allow the VPN configuration the first time you connect.": [ + "ru": "При первом подключении iOS попросит разрешить VPN-конфигурацию.", "zh": "首次连接时 iOS 会请求允许该 VPN 配置。", "es": "iOS te pedirá permitir la configuración VPN la primera vez que te conectes.", "hi": "पहली बार कनेक्ट करने पर iOS VPN कॉन्फ़िगरेशन की अनुमति माँगेगा।", + "ar": "سيطلب منك iOS السماح بإعداد VPN عند أول اتصال.", "fr": "iOS vous demandera d'autoriser la configuration VPN à la première connexion.", "pt": "O iOS pedirá para permitir a configuração VPN na primeira conexão.", "de": "iOS fragt beim ersten Verbinden nach Erlaubnis für die VPN-Konfiguration.", + "ja": "初回接続時に iOS が VPN 構成の許可を求めます。", "id": "iOS akan meminta izin konfigurasi VPN saat pertama kali terhubung.", "tr": "iOS ilk bağlantıda VPN yapılandırmasına izin vermenizi ister."], + "needs sing-box": [ + "ru": "нужен sing-box", "zh": "需要 sing-box", "es": "requiere sing-box", "hi": "sing-box चाहिए", + "ar": "يتطلب sing-box", "fr": "nécessite sing-box", "pt": "requer sing-box", "de": "braucht sing-box", + "ja": "sing-box が必要", "id": "butuh sing-box", "tr": "sing-box gerekir"], + "not supported on iOS": [ + "ru": "не поддерживается на iOS", "zh": "在 iOS 上不支持", "es": "no compatible con iOS", "hi": "iOS पर समर्थित नहीं", + "ar": "غير مدعوم على iOS", "fr": "non pris en charge sur iOS", "pt": "sem suporte no iOS", "de": "unter iOS nicht unterstützt", + "ja": "iOS では非対応", "id": "tidak didukung di iOS", "tr": "iOS'ta desteklenmiyor"], + "timeout": [ + "ru": "таймаут", "zh": "超时", "es": "tiempo agotado", "hi": "टाइमआउट", + "ar": "انتهت المهلة", "fr": "délai dépassé", "pt": "tempo esgotado", "de": "Zeitüberschreitung", + "ja": "タイムアウト", "id": "waktu habis", "tr": "zaman aşımı"], + + // MARK: macOS settings + "Launch at login": [ + "ru": "Запускать при входе", "zh": "登录时启动", "es": "Abrir al iniciar sesión", "hi": "लॉगिन पर लॉन्च करें", + "ar": "التشغيل عند تسجيل الدخول", "fr": "Lancer à l'ouverture de session", "pt": "Abrir ao iniciar sessão", "de": "Beim Anmelden starten", + "ja": "ログイン時に起動", "id": "Jalankan saat masuk", "tr": "Oturum açınca başlat"], + "Notify on connect / disconnect": [ + "ru": "Уведомлять о подключении / отключении", "zh": "连接/断开时通知", "es": "Notificar al conectar / desconectar", "hi": "कनेक्ट / डिस्कनेक्ट पर सूचित करें", + "ar": "تنبيه عند الاتصال / قطع الاتصال", "fr": "Notifier à la connexion / déconnexion", "pt": "Notificar ao conectar / desconectar", "de": "Bei Verbindung / Trennung benachrichtigen", + "ja": "接続 / 切断時に通知", "id": "Beri tahu saat terhubung / terputus", "tr": "Bağlanınca / kesilince bildir"], + "Edit": [ + "ru": "Изменить", "zh": "编辑", "es": "Editar", "hi": "संपादित करें", + "ar": "تحرير", "fr": "Modifier", "pt": "Editar", "de": "Bearbeiten", + "ja": "編集", "id": "Ubah", "tr": "Düzenle"], ] } diff --git a/Tests/XrayClientTests/LocalizationTests.swift b/Tests/XrayClientTests/LocalizationTests.swift new file mode 100644 index 0000000..2f08f8f --- /dev/null +++ b/Tests/XrayClientTests/LocalizationTests.swift @@ -0,0 +1,94 @@ +import XCTest +@testable import XrayClient + +/// Guards against the failure mode where a screen ends up half-translated: +/// `Loc` falls back to the English key when a string is missing, so an +/// untranslated entry is invisible in development and only shows up as mixed +/// language to a user running the app in their own locale. +/// +/// These tests read the sources rather than the built product, so they cover +/// the iOS targets too even though the test bundle itself is macOS. +/// `Loc` is main-actor isolated, and so is its table. +@MainActor +final class LocalizationTests: XCTestCase { + + /// Every language the table claims to support. + private static let languages: Set = [ + "ru", "zh", "es", "hi", "ar", "fr", "pt", "de", "ja", "id", "tr" + ] + + private static let repoRoot = URL(fileURLWithPath: #filePath) + .deletingLastPathComponent() // XrayClientTests + .deletingLastPathComponent() // Tests + .deletingLastPathComponent() // repo root + + /// Directories whose `loc("…")` calls must all resolve. + private static let uiDirectories = [ + "Sources/XrayClient/Views", + "ios/App", + ] + + func testEveryKeyHasEveryLanguage() { + for (key, translations) in Loc.table { + let missing = Self.languages.subtracting(translations.keys) + XCTAssertTrue(missing.isEmpty, + "\"\(key)\" is missing: \(missing.sorted().joined(separator: ", "))") + for (language, text) in translations { + XCTAssertFalse(text.trimmingCharacters(in: .whitespaces).isEmpty, + "\"\(key)\" has an empty \(language) translation") + } + } + } + + func testNoUnsupportedLanguageCodesSlippedIn() { + for (key, translations) in Loc.table { + let extra = Set(translations.keys).subtracting(Self.languages) + XCTAssertTrue(extra.isEmpty, + "\"\(key)\" has unknown language(s): \(extra.sorted().joined(separator: ", "))") + } + } + + /// Any string the UI passes through `loc(…)` must exist in the table, + /// otherwise it silently renders in English. + func testEveryStringUsedByTheUIIsTranslated() throws { + let keys = Set(Loc.table.keys) + var used: Set = [] + + for directory in Self.uiDirectories { + let url = Self.repoRoot.appendingPathComponent(directory) + guard FileManager.default.fileExists(atPath: url.path) else { + XCTFail("UI directory not found: \(directory)") + continue + } + used.formUnion(try Self.locCalls(in: url)) + } + + XCTAssertFalse(used.isEmpty, "found no loc(…) calls — did the scan break?") + + let untranslated = used.subtracting(keys).sorted() + XCTAssertTrue(untranslated.isEmpty, + "not in LocalizationTable: \(untranslated.joined(separator: " | "))") + } + + /// Extracts the literal arguments of every `loc("…")` call under `url`. + private static func locCalls(in url: URL) throws -> Set { + let regex = try NSRegularExpression(pattern: #"loc\("((?:[^"\\]|\\.)*)"\)"#) + var found: Set = [] + + let enumerator = FileManager.default.enumerator(at: url, + includingPropertiesForKeys: nil) + while let file = enumerator?.nextObject() as? URL { + guard file.pathExtension == "swift" else { continue } + let source = try String(contentsOf: file, encoding: .utf8) + let range = NSRange(source.startIndex..., in: source) + for match in regex.matches(in: source, range: range) { + guard let literal = Range(match.range(at: 1), in: source) else { continue } + // Undo the Swift escaping so the key matches the table's. + found.insert(String(source[literal]) + .replacingOccurrences(of: "\\\"", with: "\"") + .replacingOccurrences(of: "\\\\", with: "\\")) + } + } + return found + } +} diff --git a/ios/App/Views/AddView.swift b/ios/App/Views/AddView.swift index 0f3a65e..0590f54 100644 --- a/ios/App/Views/AddView.swift +++ b/ios/App/Views/AddView.swift @@ -55,12 +55,19 @@ struct AddView: View { PhotosPicker(selection: $photoItem, matching: .images) { Label(fromImageTitle, systemImage: "photo") } - Button { - if let clipboard = UIPasteboard.general.string { - append(clipboard) - } - } label: { + // A system paste button rather than reading + // UIPasteboard ourselves: that would pop the "Allow Paste?" + // alert on every tap, and a denied alert looks exactly like + // a broken button. + HStack { Label(loc("Paste from clipboard"), systemImage: "doc.on.clipboard") + Spacer() + PasteButton(payloadType: String.self) { strings in + guard let pasted = strings.first else { return } + append(pasted) + } + .labelStyle(.iconOnly) + .buttonBorderShape(.capsule) } } @@ -106,9 +113,11 @@ struct AddView: View { private var detectionFooter: some View { switch input { case .servers(let servers): + // Never interpolate a count into a translated noun — plural forms + // differ per language. "Label: N" reads correctly everywhere. Label(servers.count == 1 ? "\(loc("Server")): \(servers[0].name)" - : "\(servers.count) \(loc("servers detected"))", + : "\(loc("Servers found")): \(servers.count)", systemImage: "checkmark.circle") .foregroundStyle(.green) case .subscription(let url): diff --git a/ios/App/Views/ContentView.swift b/ios/App/Views/ContentView.swift index 64d9d2b..596d163 100644 --- a/ios/App/Views/ContentView.swift +++ b/ios/App/Views/ContentView.swift @@ -132,9 +132,14 @@ struct ContentView: View { Button { showAddSheet = true } label: { + // Without an explicit label style the button drops the icon and + // shows a bare word. Label(loc("Add"), systemImage: "plus") + .labelStyle(.titleAndIcon) + .padding(.horizontal, 8) } .buttonStyle(.borderedProminent) + .controlSize(.large) .padding(.top, 4) } .frame(maxWidth: .infinity) diff --git a/ios/App/Views/RoutingView.swift b/ios/App/Views/RoutingView.swift index c85f3d4..8618d19 100644 --- a/ios/App/Views/RoutingView.swift +++ b/ios/App/Views/RoutingView.swift @@ -8,6 +8,10 @@ struct RoutingView: View { @Environment(Loc.self) private var loc @State private var geo = GeoAssetManager.shared + /// Drives edit mode by hand instead of using `EditButton`: system controls + /// draw their own title from the *device* language, which would ignore the + /// language picked in this app's settings. + @State private var isEditing = false var body: some View { @Bindable var store = store @@ -15,11 +19,11 @@ struct RoutingView: View { Form { Section(loc("Preset")) { Picker(loc("Preset"), selection: $store.settings.routingPreset) { - ForEach(RoutingPreset.allCases) { Text($0.title).tag($0) } + ForEach(RoutingPreset.allCases) { Text(loc($0.title)).tag($0) } } .pickerStyle(.inline) .labelsHidden() - Text(store.settings.routingPreset.subtitle) + Text(loc(store.settings.routingPreset.subtitle)) .font(.caption) .foregroundStyle(.secondary) } @@ -31,7 +35,7 @@ struct RoutingView: View { if store.settings.routingPreset.needsGeoAssets || store.settings.blockAds { Section { Picker(loc("Source"), selection: $store.settings.geoSource) { - ForEach(GeoAssetSource.allCases) { Text($0.title).tag($0) } + ForEach(GeoAssetSource.allCases) { Text(loc($0.title)).tag($0) } } if store.settings.geoSource == .custom { TextField("geoip.dat URL", text: $store.settings.customGeoipURL) @@ -95,7 +99,12 @@ struct RoutingView: View { } .navigationTitle(loc("Routing")) .navigationBarTitleDisplayMode(.inline) - .toolbar { EditButton() } + .environment(\.editMode, .constant(isEditing ? .active : .inactive)) + .toolbar { + if store.settings.routingPreset == .custom { + Button(isEditing ? loc("Done") : loc("Edit")) { isEditing.toggle() } + } + } .onDisappear { store.save() } } } @@ -111,7 +120,7 @@ private struct RuleEditor: View { var body: some View { DisclosureGroup { Picker(loc("Outbound"), selection: $rule.outbound) { - ForEach(RuleOutbound.allCases) { Text($0.title).tag($0) } + ForEach(RuleOutbound.allCases) { Text(loc($0.title)).tag($0) } } .pickerStyle(.segmented) @@ -147,7 +156,7 @@ private struct RuleEditor: View { HStack { Text(rule.name.isEmpty ? loc("Untitled rule") : rule.name) Spacer() - Text(rule.outbound.title) + Text(loc(rule.outbound.title)) .font(.caption) .foregroundStyle(.secondary) } diff --git a/ios/App/Views/ServerRow.swift b/ios/App/Views/ServerRow.swift index b864724..fd1969e 100644 --- a/ios/App/Views/ServerRow.swift +++ b/ios/App/Views/ServerRow.swift @@ -1,6 +1,8 @@ import SwiftUI struct ServerRow: View { + @Environment(Loc.self) private var loc + let server: ProxyConfig let isSelected: Bool let isActive: Bool @@ -24,7 +26,7 @@ struct ServerRow: View { Text("×\((server.alternates?.count ?? 0) + 1)") } if !server.xraySupported { - Text("needs sing-box") + Text(loc("needs sing-box")) .foregroundStyle(.orange) } } @@ -55,7 +57,7 @@ struct ServerRow: View { .font(.caption2.monospacedDigit()) .foregroundStyle(latencyColor(ms)) } else { - Text("timeout") + Text(loc("timeout")) .font(.caption2) .foregroundStyle(.red) } diff --git a/ios/App/Views/SettingsView.swift b/ios/App/Views/SettingsView.swift index 8360032..cc1dc62 100644 --- a/ios/App/Views/SettingsView.swift +++ b/ios/App/Views/SettingsView.swift @@ -19,7 +19,7 @@ struct SettingsView: View { // traffic, and it is the one this app uses. LabeledContent(loc("Mode"), value: loc("Network Extension (all apps)")) Picker(loc("Log level"), selection: $store.settings.logLevel) { - ForEach(LogLevel.allCases) { Text($0.title).tag($0) } + ForEach(LogLevel.allCases) { Text(loc($0.title)).tag($0) } } Toggle(loc("IPv6 inside tunnel"), isOn: $store.settings.ipv6Enabled) Stepper(value: $store.settings.tunnelMTU, in: 1280...1500, step: 20) { @@ -42,7 +42,7 @@ struct SettingsView: View { NavigationLink { RoutingView() } label: { - LabeledContent(loc("Rules"), value: store.settings.routingPreset.title) + LabeledContent(loc("Rules"), value: loc(store.settings.routingPreset.title)) } } @@ -69,7 +69,7 @@ struct SettingsView: View { Section(loc("Appearance")) { Picker(loc("Theme"), selection: $store.settings.appearance) { - ForEach(AppAppearance.allCases) { Text($0.title).tag($0) } + ForEach(AppAppearance.allCases) { Text(loc($0.title)).tag($0) } } Picker(loc("Language"), selection: $store.settings.language) { ForEach(AppLanguage.allCases) { Text($0.displayName).tag($0) } diff --git a/ios/Config/App-Info.plist b/ios/Config/App-Info.plist new file mode 100644 index 0000000..59f22e9 --- /dev/null +++ b/ios/Config/App-Info.plist @@ -0,0 +1,29 @@ + + + + + + CFBundleLocalizations + + en + ru + zh + es + hi + ar + fr + pt + de + ja + id + tr + + + diff --git a/ios/Veil.xcodeproj/project.pbxproj b/ios/Veil.xcodeproj/project.pbxproj index 70079a6..e4a4924 100644 --- a/ios/Veil.xcodeproj/project.pbxproj +++ b/ios/Veil.xcodeproj/project.pbxproj @@ -42,6 +42,7 @@ AA00000000000000000033 /* Veil.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Veil.entitlements; sourceTree = ""; }; AA00000000000000000034 /* VeilTunnel.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = VeilTunnel.entitlements; sourceTree = ""; }; AA00000000000000000035 /* Tunnel-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tunnel-Info.plist"; sourceTree = ""; }; + AA00000000000000000036 /* App-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "App-Info.plist"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ @@ -130,6 +131,7 @@ AA00000000000000000033 /* Veil.entitlements */, AA00000000000000000034 /* VeilTunnel.entitlements */, AA00000000000000000035 /* Tunnel-Info.plist */, + AA00000000000000000036 /* App-Info.plist */, ); path = Config; sourceTree = ""; @@ -339,6 +341,7 @@ CURRENT_PROJECT_VERSION = 1; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Config/App-Info.plist"; INFOPLIST_KEY_CFBundleDisplayName = Veil; INFOPLIST_KEY_NSCameraUsageDescription = "Veil uses the camera to scan server and subscription QR codes."; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -361,6 +364,7 @@ CURRENT_PROJECT_VERSION = 1; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "Config/App-Info.plist"; INFOPLIST_KEY_CFBundleDisplayName = Veil; INFOPLIST_KEY_NSCameraUsageDescription = "Veil uses the camera to scan server and subscription QR codes."; INFOPLIST_KEY_UILaunchScreen_Generation = YES; From 80c70d694b3a0435dc41217744849a21da188c7f Mon Sep 17 00:00:00 2001 From: Daniil Shashimov Date: Sun, 26 Jul 2026 22:36:41 +0500 Subject: [PATCH 4/8] iOS: hold the shield to connect, subscription details above the list - The Connect/Disconnect button is gone; the shield itself is the control and fills a ring while held. Dropping the tunnel mid-session is disruptive, so a deliberate press beats a button that is easy to hit by accident. A caption under it says which way it goes, and it dims when the selected server is one the Xray-only build cannot run. - Subscription note, traffic and expiry moved from the section footer to the header. Underneath the last row they read as if they described that server. - The Test Ping button laid its icon out on a fixed column, leaving a gap before the title; it uses a plain HStack now. Co-Authored-By: Claude Opus 5 --- .../XrayClient/Core/LocalizationTable.swift | 8 + ios/App/Views/ContentView.swift | 138 ++++++++++++------ 2 files changed, 104 insertions(+), 42 deletions(-) diff --git a/Sources/XrayClient/Core/LocalizationTable.swift b/Sources/XrayClient/Core/LocalizationTable.swift index 56db625..65a51d7 100644 --- a/Sources/XrayClient/Core/LocalizationTable.swift +++ b/Sources/XrayClient/Core/LocalizationTable.swift @@ -783,5 +783,13 @@ extension Loc { "ru": "Изменить", "zh": "编辑", "es": "Editar", "hi": "संपादित करें", "ar": "تحرير", "fr": "Modifier", "pt": "Editar", "de": "Bearbeiten", "ja": "編集", "id": "Ubah", "tr": "Düzenle"], + "Hold to connect": [ + "ru": "Удерживайте, чтобы подключить", "zh": "长按以连接", "es": "Mantén pulsado para conectar", "hi": "कनेक्ट करने के लिए दबाए रखें", + "ar": "اضغط مطولًا للاتصال", "fr": "Maintenez pour connecter", "pt": "Mantenha pressionado para conectar", "de": "Zum Verbinden gedrückt halten", + "ja": "長押しで接続", "id": "Tahan untuk menghubungkan", "tr": "Bağlanmak için basılı tutun"], + "Hold to disconnect": [ + "ru": "Удерживайте, чтобы отключить", "zh": "长按以断开", "es": "Mantén pulsado para desconectar", "hi": "डिस्कनेक्ट करने के लिए दबाए रखें", + "ar": "اضغط مطولًا لقطع الاتصال", "fr": "Maintenez pour déconnecter", "pt": "Mantenha pressionado para desconectar", "de": "Zum Trennen gedrückt halten", + "ja": "長押しで切断", "id": "Tahan untuk memutuskan", "tr": "Bağlantıyı kesmek için basılı tutun"], ] } diff --git a/ios/App/Views/ContentView.swift b/ios/App/Views/ContentView.swift index 596d163..3ea5de5 100644 --- a/ios/App/Views/ContentView.swift +++ b/ios/App/Views/ContentView.swift @@ -109,8 +109,13 @@ struct ContentView: View { Button { pinger.test(store.allServers) } label: { - Label(loc("Test Ping"), systemImage: "speedometer") - .font(.footnote) + // An HStack rather than a Label: the button style lays a Label + // out on a fixed icon column, which leaves a gap here. + HStack(spacing: 5) { + Image(systemName: "speedometer") + Text(loc("Test Ping")) + } + .font(.footnote) } .buttonStyle(.bordered) .disabled(store.allServers.isEmpty) @@ -189,20 +194,16 @@ struct StatusCard: View { @Environment(TunnelController.self) private var tunnel @Environment(Loc.self) private var loc + @State private var holdProgress: CGFloat = 0 + @State private var isHolding = false + private var selected: ProxyConfig? { store.server(withID: store.selectedServerID) } var body: some View { // Kept compact on purpose: this sits above the server list, and every // point it takes is a row the user has to scroll for. VStack(spacing: 12) { - ZStack { - Circle() - .fill(statusColor.opacity(0.16)) - .frame(width: 68, height: 68) - Image(systemName: tunnel.isConnected ? "shield.lefthalf.filled" : "shield.slash") - .font(.system(size: 28, weight: .medium)) - .foregroundStyle(statusColor) - } + shieldControl VStack(spacing: 2) { Text(stateLabel) @@ -224,11 +225,75 @@ struct StatusCard: View { } } - connectButton + Text(holdHint) + .font(.caption) + .foregroundStyle(.tertiary) } .frame(maxWidth: .infinity) .padding(.horizontal, 20) - .padding(.vertical, 14) + .padding(.vertical, 16) + } + + /// The shield *is* the connect control — hold it to toggle the tunnel. + /// A deliberate press beats a button you can hit by accident, since + /// dropping the VPN mid-session is disruptive. + private var shieldControl: some View { + ZStack { + Circle() + .fill(statusColor.opacity(0.16)) + .frame(width: 104, height: 104) + + // Fills while held; completing the ring is what fires the action. + Circle() + .trim(from: 0, to: holdProgress) + .stroke(statusColor, style: StrokeStyle(lineWidth: 4, lineCap: .round)) + .rotationEffect(.degrees(-90)) + .frame(width: 104, height: 104) + + Image(systemName: tunnel.isConnected ? "shield.lefthalf.filled" : "shield.slash") + .font(.system(size: 40, weight: .medium)) + .foregroundStyle(statusColor) + } + .opacity(canToggle ? 1 : 0.4) + .scaleEffect(isHolding ? 0.93 : 1) + .animation(.easeOut(duration: 0.15), value: isHolding) + .contentShape(Circle()) + .onLongPressGesture(minimumDuration: Self.holdDuration) { + toggle() + } onPressingChanged: { pressing in + guard canToggle else { return } + isHolding = pressing + withAnimation(.linear(duration: pressing ? Self.holdDuration : 0.2)) { + holdProgress = pressing ? 1 : 0 + } + } + .accessibilityLabel(holdHint) + } + + private static let holdDuration: TimeInterval = 0.6 + + /// False while a connect is already in flight, or when the selected server + /// is one the Xray-only build cannot run. + private var canToggle: Bool { + if tunnel.isConnected { return true } + guard tunnel.state != .connecting else { return false } + return selected?.xraySupported ?? false + } + + private var holdHint: String { + if !canToggle && !tunnel.isConnected { return " " } + return tunnel.isConnected ? loc("Hold to disconnect") : loc("Hold to connect") + } + + private func toggle() { + guard canToggle else { return } + withAnimation(.easeOut(duration: 0.2)) { holdProgress = 0 } + isHolding = false + if tunnel.isConnected { + tunnel.disconnect() + } else if let server = selected { + Task { await tunnel.connect(to: server, settings: store.settings) } + } } private func trafficLabel(icon: String, bytes: Int64) -> some View { @@ -237,32 +302,6 @@ struct StatusCard: View { .foregroundStyle(.secondary) } - @ViewBuilder - private var connectButton: some View { - if tunnel.isConnected || tunnel.state == .connecting { - Button(role: .destructive) { - tunnel.disconnect() - } label: { - Label(loc("Disconnect"), systemImage: "stop.fill") - .frame(maxWidth: .infinity) - } - .buttonStyle(.borderedProminent) - .controlSize(.large) - .tint(.red) - } else { - Button { - guard let server = selected else { return } - Task { await tunnel.connect(to: server, settings: store.settings) } - } label: { - Label(loc("Connect"), systemImage: "bolt.fill") - .frame(maxWidth: .infinity) - } - .buttonStyle(.borderedProminent) - .controlSize(.large) - .disabled(selected == nil || !(selected?.xraySupported ?? false)) - } - } - private var stateLabel: String { switch tunnel.state { case .disconnected: return loc("Disconnected") @@ -328,8 +367,6 @@ struct SubscriptionSection: View { } } header: { header - } footer: { - footer } } } @@ -368,7 +405,18 @@ struct SubscriptionSection: View { } } + /// Name, note, traffic and expiry all sit above the servers: a description + /// under the last row reads as if it belonged to that row. private var header: some View { + VStack(alignment: .leading, spacing: 6) { + titleRow + details + } + .textCase(nil) + .padding(.bottom, 2) + } + + private var titleRow: some View { HStack(spacing: 8) { Button { store.toggleCollapsed(id: subscription.id) @@ -410,14 +458,16 @@ struct SubscriptionSection: View { Image(systemName: "ellipsis.circle") } } - .textCase(nil) } @ViewBuilder - private var footer: some View { + private var details: some View { VStack(alignment: .leading, spacing: 4) { if let note = subscription.note, !note.isEmpty { Text(note) + .font(.caption) + .foregroundStyle(.secondary) + .fixedSize(horizontal: false, vertical: true) } if let used = subscription.usedBytes, let total = subscription.totalBytes { HStack(spacing: 6) { @@ -426,12 +476,16 @@ struct SubscriptionSection: View { Text("· \(expiry.formatted(date: .abbreviated, time: .omitted))") } } + .font(.caption) + .foregroundStyle(.secondary) if let fraction = subscription.usageFraction { ProgressView(value: fraction) .tint(fraction > 0.9 ? .red : .accentColor) } } else if let expiry = subscription.expiresAt { Text("\(loc("Expires")) \(expiry.formatted(date: .abbreviated, time: .omitted))") + .font(.caption) + .foregroundStyle(.secondary) } } } From 1a834ce16ad890ceba18d1ed992ad5b4b75b2390 Mon Sep 17 00:00:00 2001 From: Daniil Shashimov Date: Sun, 26 Jul 2026 22:58:20 +0500 Subject: [PATCH 5/8] iOS: card backdrop behind the group header, animated collapse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The subscription name, note, traffic and expiry floated on the list background while everything around them sat on cards. They now share the same secondarySystemGroupedBackground card as the rows, aligned to the same insets, so a group reads as one object. Collapsing is animated: the state change runs inside withAnimation, and the chevron is a single glyph that rotates rather than two symbols swapping — the latter cannot tween. Tapping anywhere across the name toggles it now, with the overflow menu keeping its own hit area. Co-Authored-By: Claude Opus 5 --- ios/App/Views/ContentView.swift | 51 ++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/ios/App/Views/ContentView.swift b/ios/App/Views/ContentView.swift index 3ea5de5..865d9b6 100644 --- a/ios/App/Views/ContentView.swift +++ b/ios/App/Views/ContentView.swift @@ -406,34 +406,47 @@ struct SubscriptionSection: View { } /// Name, note, traffic and expiry all sit above the servers: a description - /// under the last row reads as if it belonged to that row. + /// under the last row reads as if it belonged to that row. The whole block + /// gets the same card treatment as the rows so it reads as one group. private var header: some View { - VStack(alignment: .leading, spacing: 6) { + VStack(alignment: .leading, spacing: 8) { titleRow details } .textCase(nil) - .padding(.bottom, 2) + .padding(.horizontal, 14) + .padding(.vertical, 12) + .frame(maxWidth: .infinity, alignment: .leading) + .background(Color(.secondarySystemGroupedBackground), + in: RoundedRectangle(cornerRadius: 12, style: .continuous)) + .listRowInsets(EdgeInsets(top: 8, leading: 0, bottom: 6, trailing: 0)) } private var titleRow: some View { HStack(spacing: 8) { - Button { - store.toggleCollapsed(id: subscription.id) - } label: { - Image(systemName: subscription.isCollapsed ? "chevron.right" : "chevron.down") + // Tapping anywhere across the name collapses the group, but the + // menu keeps its own hit area. + HStack(spacing: 8) { + Image(systemName: "chevron.down") .font(.caption.weight(.bold)) + .foregroundStyle(.secondary) + // Rotating one glyph animates; swapping two would not. + .rotationEffect(.degrees(subscription.isCollapsed ? -90 : 0)) .frame(width: 20) - } - .buttonStyle(.plain) - - Text(subscription.name) - Text("\(subscription.servers.count)") - .font(.caption2) - .padding(.horizontal, 6).padding(.vertical, 1) - .background(Capsule().fill(Color.secondary.opacity(0.18))) - Spacer() + Text(subscription.name) + .font(.headline) + .foregroundStyle(.primary) + .lineLimit(1) + Text("\(subscription.servers.count)") + .font(.caption2) + .padding(.horizontal, 6).padding(.vertical, 1) + .background(Capsule().fill(Color.secondary.opacity(0.18))) + + Spacer(minLength: 0) + } + .contentShape(Rectangle()) + .onTapGesture { toggleCollapsed() } Menu { Button(loc("Test ping")) { pinger.test(subscription.servers) } @@ -490,6 +503,12 @@ struct SubscriptionSection: View { } } + private func toggleCollapsed() { + withAnimation(.snappy(duration: 0.28)) { + store.toggleCollapsed(id: subscription.id) + } + } + /// Disconnected: tap selects. Connected: tap switches straight away, which /// only restarts the core inside the extension — the tunnel never drops. private func handleTap(_ server: ProxyConfig) { From c058aee0f4d87a9f987ed26bf80480ed82590dad Mon Sep 17 00:00:00 2001 From: Daniil Shashimov Date: Sun, 26 Jul 2026 23:44:03 +0500 Subject: [PATCH 6/8] iOS: fold the group heading into the section's own card MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The separate backdrop read as a slab parked next to the server list rather than part of it. The heading is now the section's first row, so the list draws one rounded card around heading and servers together, with a separator between them — one object instead of two. The description is also no longer a wall of grey text: providers pad the Announce header with blank lines, which ate the whole preview (the first two lines were the title and an empty one), so blank lines are dropped and the note shows two lines with tap-to-expand. Traffic and expiry share one compact line with a 4pt bar drawn directly, since ProgressView's is too tall and too loud for a line of metadata. Co-Authored-By: Claude Opus 5 --- ios/App/Views/ContentView.swift | 87 +++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 26 deletions(-) diff --git a/ios/App/Views/ContentView.swift b/ios/App/Views/ContentView.swift index 865d9b6..8c618cc 100644 --- a/ios/App/Views/ContentView.swift +++ b/ios/App/Views/ContentView.swift @@ -346,6 +346,8 @@ struct SubscriptionSection: View { let sortByPing: Bool @Binding var qrServer: ProxyConfig? + @State private var isNoteExpanded = false + private var visibleServers: [ProxyConfig] { ContentView.filterServers(subscription.servers, search: searchText, aliveOnly: aliveOnly, sortByPing: sortByPing, @@ -359,14 +361,16 @@ struct SubscriptionSection: View { var body: some View { if !isHidden { + // The heading is the section's first *row*, not its header, so it + // shares the one rounded card the list draws around a section + // instead of floating on its own slab next to it. Section { + header if !subscription.isCollapsed { ForEach(visibleServers) { server in row(for: server) } } - } header: { - header } } } @@ -405,21 +409,15 @@ struct SubscriptionSection: View { } } - /// Name, note, traffic and expiry all sit above the servers: a description - /// under the last row reads as if it belonged to that row. The whole block - /// gets the same card treatment as the rows so it reads as one group. + /// Name, note, traffic and expiry sit above the servers: a description + /// under the last row reads as if it belonged to that row. private var header: some View { VStack(alignment: .leading, spacing: 8) { titleRow details } - .textCase(nil) - .padding(.horizontal, 14) - .padding(.vertical, 12) - .frame(maxWidth: .infinity, alignment: .leading) - .background(Color(.secondarySystemGroupedBackground), - in: RoundedRectangle(cornerRadius: 12, style: .continuous)) - .listRowInsets(EdgeInsets(top: 8, leading: 0, bottom: 6, trailing: 0)) + .padding(.vertical, 4) + .contentShape(Rectangle()) } private var titleRow: some View { @@ -473,36 +471,73 @@ struct SubscriptionSection: View { } } + /// The Announce header usually arrives padded with blank lines. They cost + /// the whole two-line preview, so drop them and keep the real breaks. + private var noteText: String { + (subscription.note ?? "") + .split(whereSeparator: \.isNewline) + .map { $0.trimmingCharacters(in: .whitespaces) } + .filter { !$0.isEmpty } + .joined(separator: "\n") + } + @ViewBuilder private var details: some View { - VStack(alignment: .leading, spacing: 4) { - if let note = subscription.note, !note.isEmpty { - Text(note) + VStack(alignment: .leading, spacing: 8) { + if !noteText.isEmpty { + // Providers put whole adverts in the Announce header; two lines + // is enough of a preview, tap to read the rest. + Text(noteText) .font(.caption) .foregroundStyle(.secondary) + .lineLimit(isNoteExpanded ? nil : 2) .fixedSize(horizontal: false, vertical: true) + .frame(maxWidth: .infinity, alignment: .leading) + .contentShape(Rectangle()) + .onTapGesture { + withAnimation(.snappy(duration: 0.25)) { isNoteExpanded.toggle() } + } } + if let used = subscription.usedBytes, let total = subscription.totalBytes { - HStack(spacing: 6) { - Text("\(ByteFormat.string(used)) / \(ByteFormat.string(total))") - if let expiry = subscription.expiresAt { - Text("· \(expiry.formatted(date: .abbreviated, time: .omitted))") + VStack(alignment: .leading, spacing: 5) { + HStack(spacing: 6) { + Text("\(ByteFormat.string(used)) / \(ByteFormat.string(total))") + .monospacedDigit() + Spacer(minLength: 8) + if let expiry = subscription.expiresAt { + Text(expiry.formatted(date: .abbreviated, time: .omitted)) + } + } + .font(.caption2) + .foregroundStyle(.secondary) + + if let fraction = subscription.usageFraction { + usageBar(fraction) } - } - .font(.caption) - .foregroundStyle(.secondary) - if let fraction = subscription.usageFraction { - ProgressView(value: fraction) - .tint(fraction > 0.9 ? .red : .accentColor) } } else if let expiry = subscription.expiresAt { Text("\(loc("Expires")) \(expiry.formatted(date: .abbreviated, time: .omitted))") - .font(.caption) + .font(.caption2) .foregroundStyle(.secondary) } } } + /// Hand-drawn rather than a `ProgressView`, whose bar is too tall and too + /// loud for a line of metadata. + private func usageBar(_ fraction: Double) -> some View { + GeometryReader { geometry in + ZStack(alignment: .leading) { + Capsule().fill(Color.secondary.opacity(0.18)) + Capsule() + .fill(fraction > 0.9 ? Color.red : Color.accentColor) + .frame(width: max(3, geometry.size.width * fraction)) + } + } + .frame(height: 4) + } + private func toggleCollapsed() { withAnimation(.snappy(duration: 0.28)) { store.toggleCollapsed(id: subscription.id) From 88acc6c97c646990a27148b7c87884605f3c0275 Mon Sep 17 00:00:00 2001 From: Daniil Shashimov Date: Mon, 27 Jul 2026 00:19:39 +0500 Subject: [PATCH 7/8] iOS: show the subscription description in full MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two lines with tap-to-expand hid most of what the provider wrote. The note is now rendered whole and is selectable. Runs of blank lines still collapse to a single break — providers pad the Announce header with them, and the paragraphs read better without the dead space. Co-Authored-By: Claude Opus 5 --- ios/App/Views/ContentView.swift | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/ios/App/Views/ContentView.swift b/ios/App/Views/ContentView.swift index 8c618cc..5d3efc2 100644 --- a/ios/App/Views/ContentView.swift +++ b/ios/App/Views/ContentView.swift @@ -346,8 +346,6 @@ struct SubscriptionSection: View { let sortByPing: Bool @Binding var qrServer: ProxyConfig? - @State private var isNoteExpanded = false - private var visibleServers: [ProxyConfig] { ContentView.filterServers(subscription.servers, search: searchText, aliveOnly: aliveOnly, sortByPing: sortByPing, @@ -471,32 +469,34 @@ struct SubscriptionSection: View { } } - /// The Announce header usually arrives padded with blank lines. They cost - /// the whole two-line preview, so drop them and keep the real breaks. + /// Shown in full. Providers pad the Announce header with runs of blank + /// lines; those collapse to a single break so the paragraphs survive + /// without the dead space between them. private var noteText: String { - (subscription.note ?? "") - .split(whereSeparator: \.isNewline) + let lines = (subscription.note ?? "") + .split(separator: "\n", omittingEmptySubsequences: false) .map { $0.trimmingCharacters(in: .whitespaces) } - .filter { !$0.isEmpty } - .joined(separator: "\n") + + var kept: [String] = [] + for line in lines { + // Drops leading blanks and every repeat of one. + if line.isEmpty && (kept.last?.isEmpty ?? true) { continue } + kept.append(line) + } + while kept.last?.isEmpty == true { kept.removeLast() } + return kept.joined(separator: "\n") } @ViewBuilder private var details: some View { VStack(alignment: .leading, spacing: 8) { if !noteText.isEmpty { - // Providers put whole adverts in the Announce header; two lines - // is enough of a preview, tap to read the rest. Text(noteText) .font(.caption) .foregroundStyle(.secondary) - .lineLimit(isNoteExpanded ? nil : 2) .fixedSize(horizontal: false, vertical: true) .frame(maxWidth: .infinity, alignment: .leading) - .contentShape(Rectangle()) - .onTapGesture { - withAnimation(.snappy(duration: 0.25)) { isNoteExpanded.toggle() } - } + .textSelection(.enabled) } if let used = subscription.usedBytes, let total = subscription.totalBytes { From 229b1eb02bbcf59295dfa58d591bcd873598fe0d Mon Sep 17 00:00:00 2001 From: Daniil Shashimov Date: Mon, 27 Jul 2026 00:42:46 +0500 Subject: [PATCH 8/8] README: explain why there is no iOS build to download The tunnel needs the packet-tunnel-provider entitlement, which Apple only issues with a paid Developer Program membership. Worth spelling out, because both ways of trying to work around it fail confusingly: signing with a free personal team is rejected outright, and stripping the entitlement produces an app that installs and launches but whose VPN silently never starts. Re-signing tools built on free accounts hit the same wall. Adds a TON address for anyone who wants to help fund the membership, and notes that nothing is paywalled and the licence stays MIT either way. Co-Authored-By: Claude Opus 5 --- README.md | 34 ++++++++++++++++++++++++++++++++++ docs/ios.md | 7 +++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 64d4243..44ffc7c 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,40 @@ Scripts/ios/build-app.sh simulator Release See **[docs/ios.md](docs/ios.md)** for the packet path, signing requirements and the app↔extension protocol. +### Why there is no iOS build to download yet + +The tunnel needs the `packet-tunnel-provider` Network Extension entitlement. +Apple only issues that entitlement through a **paid Apple Developer Program +membership** ($99/year) — a free personal team cannot provision it. + +**Please don't try to sign the app with an ordinary certificate.** It will not +work, and the failure is confusing rather than obvious: + +- Sign it with a free personal team and signing fails outright — the + entitlement is rejected, because entitlements have to be authorised by a + provisioning profile Apple issued. +- Strip the entitlement to make it build and the app installs and launches + fine, but the VPN never starts: `NETunnelProviderManager` refuses the + configuration, and you get an error with no obvious cause. + +Re-signing tools that rely on free accounts (AltStore, Sideloadly and friends) +hit the same wall, for the same reason — none of them can grant an entitlement +Apple has not issued. + +So the app is buildable from source by anyone who already has a paid account, +but there is no signed build to hand out until the membership is funded. + +**Raising the money for the Apple Developer Program membership.** If you'd like +to help, TON: + +``` +UQDsbwQEaspICRDSW4oSNmL0PXxDlnfkiMuqoUbK7ufiCVXj +``` + +Nothing in the app is paywalled and none of this changes the licence — it is +MIT either way. The membership only buys the ability to ship a build that iOS +will actually run. + ## Requirements - macOS 14 (Sonoma) or later diff --git a/docs/ios.md b/docs/ios.md index aec2988..6a94457 100644 --- a/docs/ios.md +++ b/docs/ios.md @@ -112,8 +112,11 @@ To work in Xcode, open `ios/Veil.xcodeproj` after step 1. ## Signing and capabilities -Running the tunnel on a real device needs a paid Apple Developer account. The -App ID for **both** the app and the extension must have: +Running the tunnel on a real device needs a paid Apple Developer account — +there is no way around it, and no re-signing tool can substitute for it. See +[Why there is no iOS build to download yet](../README.md#why-there-is-no-ios-build-to-download-yet). + +The App ID for **both** the app and the extension must have: - **Network Extensions** → `packet-tunnel-provider` - **App Groups** → `group.dev.local.veil`