mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-10-25 12:36:46 +09:00
Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94b8f80141 | ||
|
|
9d96b1cd13 | ||
|
|
1d721ffb9a | ||
|
|
2130131a9d | ||
|
|
e0b091b474 | ||
|
|
8547de82ea | ||
|
|
aa871bd1c9 | ||
|
|
23806e1def | ||
|
|
31867993ce | ||
|
|
7b7a922d92 | ||
|
|
09bd958d8d | ||
|
|
576e2226fe | ||
|
|
1533270e4e |
No files matched your search
@@ -217,7 +217,11 @@ jobs:
|
||||
export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/ios/bin"
|
||||
export QT_MACOS_ROOT_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos"
|
||||
export PATH=$PATH:~/go/bin
|
||||
sh deploy/build_ios.sh
|
||||
sh deploy/build_ios.sh | \
|
||||
sed -e '/-Xcc -DPROD_AGW_PUBLIC_KEY/,/-Xcc/ { /-Xcc/!d; }' -e '/-Xcc -DPROD_AGW_PUBLIC_KEY/d' | \
|
||||
sed -e '/-Xcc -DDEV_AGW_PUBLIC_KEY/,/-Xcc/ { /-Xcc/!d; }' -e '/-Xcc -DDEV_AGW_PUBLIC_KEY/d' | \
|
||||
sed -e '/-DPROD_AGW_PUBLIC_KEY/,/-D/ { /-D/!d; }' -e '/-DPROD_AGW_PUBLIC_KEY/d' | \
|
||||
sed -e '/-DDEV_AGW_PUBLIC_KEY/,/-D/ { /-D/!d; }' -e '/-DDEV_AGW_PUBLIC_KEY/d'
|
||||
env:
|
||||
IOS_TRUST_CERT_BASE64: ${{ secrets.IOS_TRUST_CERT_BASE64 }}
|
||||
IOS_SIGNING_CERT_BASE64: ${{ secrets.IOS_SIGNING_CERT_BASE64 }}
|
||||
@@ -256,7 +260,7 @@ jobs:
|
||||
- name: 'Setup xcode'
|
||||
uses: maxim-lobanov/setup-xcode@v1
|
||||
with:
|
||||
xcode-version: '14.3.1'
|
||||
xcode-version: '15.4.0'
|
||||
|
||||
- name: 'Install Qt'
|
||||
uses: jurplel/install-qt-action@v3
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
|
||||
|
||||
set(PROJECT AmneziaVPN)
|
||||
|
||||
project(${PROJECT} VERSION 4.8.2.3
|
||||
project(${PROJECT} VERSION 4.8.2.4
|
||||
DESCRIPTION "AmneziaVPN"
|
||||
HOMEPAGE_URL "https://amnezia.org/"
|
||||
)
|
||||
@@ -11,7 +11,7 @@ string(TIMESTAMP CURRENT_DATE "%Y-%m-%d")
|
||||
set(RELEASE_DATE "${CURRENT_DATE}")
|
||||
|
||||
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
|
||||
set(APP_ANDROID_VERSION_CODE 2069)
|
||||
set(APP_ANDROID_VERSION_CODE 2071)
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
set(MZ_PLATFORM_NAME "linux")
|
||||
|
||||
@@ -4,21 +4,21 @@
|
||||
[](https://github.com/amnezia-vpn/amnezia-client/actions/workflows/deploy.yml?query=branch:dev)
|
||||
[](https://gitpod.io/#https://github.com/amnezia-vpn/amnezia-client)
|
||||
|
||||
Amnezia is an open-source VPN client, with a key feature that enables you to deploy your own VPN server on your server.
|
||||
[Amnezia](https://amnezia.org) is an open-source VPN client, with a key feature that enables you to deploy your own VPN server on your server.
|
||||
|
||||

|
||||
[](https://amnezia.org)
|
||||
|
||||
<br>
|
||||
### [Website](https://amnezia.org) | [Alt website link](https://storage.googleapis.com/kldscp/amnezia.org) | [Documentation](https://docs.amnezia.org) | [Troubleshooting](https://docs.amnezia.org/troubleshooting)
|
||||
|
||||
<a href="https://amnezia.org/downloads"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/download.png" width="150" style="max-width: 100%;"></a>
|
||||
<a href="https://play.google.com/store/search?q=amnezia+vpn&c=apps"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/play.png" width="150" style="max-width: 100%;"></a>
|
||||
<a href="https://apps.apple.com/us/app/amneziavpn/id1600529900"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/apl.png" width="150" style="max-width: 100%;"></a>
|
||||
> [!TIP]
|
||||
> If the [Amnezia website](https://amnezia.org) is blocked in your region, you can use an [Alternative website link](https://storage.googleapis.com/kldscp/amnezia.org).
|
||||
|
||||
[Alternative download link (mirror)](https://storage.googleapis.com/kldscp/amnezia.org/downloads)
|
||||
<a href="https://amnezia.org/downloads"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/download-website.svg" width="150" style="max-width: 100%; margin-right: 10px"></a>
|
||||
<a href="https://storage.googleapis.com/kldscp/amnezia.org/downloads"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/download-alt.svg" width="150" style="max-width: 100%;"></a>
|
||||
|
||||
[All releases](https://github.com/amnezia-vpn/amnezia-client/releases)
|
||||
|
||||
<br>
|
||||
<br/>
|
||||
|
||||
<a href="https://www.testiny.io"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/testiny.png" height="28px"></a>
|
||||
|
||||
@@ -33,7 +33,8 @@ Amnezia is an open-source VPN client, with a key feature that enables you to dep
|
||||
|
||||
## Links
|
||||
|
||||
- [https://amnezia.org](https://amnezia.org) - project website | [Alternative link (mirror)](https://storage.googleapis.com/kldscp/amnezia.org)
|
||||
- [https://amnezia.org](https://amnezia.org) - Project website | [Alternative link (mirror)](https://storage.googleapis.com/kldscp/amnezia.org)
|
||||
- [https://docs.amnezia.org](https://docs.amnezia.org) - Documentation
|
||||
- [https://www.reddit.com/r/AmneziaVPN](https://www.reddit.com/r/AmneziaVPN) - Reddit
|
||||
- [https://t.me/amnezia_vpn_en](https://t.me/amnezia_vpn_en) - Telegram support channel (English)
|
||||
- [https://t.me/amnezia_vpn_ir](https://t.me/amnezia_vpn_ir) - Telegram support channel (Farsi)
|
||||
@@ -182,8 +183,8 @@ Patreon: [https://www.patreon.com/amneziavpn](https://www.patreon.com/amneziavpn
|
||||
Bitcoin: bc1q26eevjcg9j0wuyywd2e3uc9cs2w58lpkpjxq6p <br>
|
||||
USDT BEP20: 0x6abD576765a826f87D1D95183438f9408C901bE4 <br>
|
||||
USDT TRC20: TELAitazF1MZGmiNjTcnxDjEiH5oe7LC9d <br>
|
||||
XMR: 48spms39jt1L2L5vyw2RQW6CXD6odUd4jFu19GZcDyKKQV9U88wsJVjSbL4CfRys37jVMdoaWVPSvezCQPhHXUW5UKLqUp3
|
||||
|
||||
XMR: 48spms39jt1L2L5vyw2RQW6CXD6odUd4jFu19GZcDyKKQV9U88wsJVjSbL4CfRys37jVMdoaWVPSvezCQPhHXUW5UKLqUp3 <br>
|
||||
TON: UQDpU1CyKRmg7L8mNScKk9FRc2SlESuI7N-Hby4nX-CcVmns
|
||||
## Acknowledgments
|
||||
|
||||
This project is tested with BrowserStack.
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<!-- To request network state -->
|
||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
+49
-36
@@ -1,11 +1,12 @@
|
||||
package org.amnezia.vpn.protocol.wireguard
|
||||
|
||||
import android.net.VpnService.Builder
|
||||
import java.io.IOException
|
||||
import java.util.Locale
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.coroutines.launch
|
||||
import org.amnezia.awg.GoBackend
|
||||
import org.amnezia.vpn.protocol.Protocol
|
||||
import org.amnezia.vpn.protocol.ProtocolState.CONNECTED
|
||||
@@ -27,6 +28,8 @@ open class Wireguard : Protocol() {
|
||||
|
||||
private var tunnelHandle: Int = -1
|
||||
protected open val ifName: String = "amn0"
|
||||
private lateinit var scope: CoroutineScope
|
||||
private var statusJob: Job? = null
|
||||
|
||||
override val statistics: Statistics
|
||||
get() {
|
||||
@@ -49,46 +52,17 @@ open class Wireguard : Protocol() {
|
||||
|
||||
override fun internalInit() {
|
||||
if (!isInitialized) loadSharedLibrary(context, "wg-go")
|
||||
if (this::scope.isInitialized) {
|
||||
scope.cancel()
|
||||
}
|
||||
scope = CoroutineScope(Dispatchers.IO)
|
||||
}
|
||||
|
||||
override suspend fun startVpn(config: JSONObject, vpnBuilder: Builder, protect: (Int) -> Boolean) {
|
||||
val wireguardConfig = parseConfig(config)
|
||||
val startTime = System.currentTimeMillis()
|
||||
start(wireguardConfig, vpnBuilder, protect)
|
||||
waitForConnection(startTime)
|
||||
state.value = CONNECTED
|
||||
}
|
||||
|
||||
private suspend fun waitForConnection(startTime: Long) {
|
||||
Log.d(TAG, "Waiting for connection")
|
||||
withContext(Dispatchers.IO) {
|
||||
val time = String.format(Locale.ROOT,"%.3f", startTime / 1000.0)
|
||||
try {
|
||||
delay(1000)
|
||||
var log = getLogcat(time)
|
||||
Log.v(TAG, "First waiting log: $log")
|
||||
// check that there is a connection log,
|
||||
// to avoid infinite connection
|
||||
if (!log.contains("Attaching to interface")) {
|
||||
Log.w(TAG, "Logs do not contain a connection log")
|
||||
return@withContext
|
||||
}
|
||||
while (!log.contains("Received handshake response")) {
|
||||
delay(1000)
|
||||
log = getLogcat(time)
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
Log.e(TAG, "Failed to get logcat: $e")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getLogcat(time: String): String =
|
||||
ProcessBuilder("logcat", "--buffer=main", "--format=raw", "*:S AmneziaWG/awg0", "-t", time)
|
||||
.redirectErrorStream(true)
|
||||
.start()
|
||||
.inputStream.reader().readText()
|
||||
|
||||
protected open fun parseConfig(config: JSONObject): WireguardConfig {
|
||||
val configData = config.getJSONObject("wireguard_config_data")
|
||||
return WireguardConfig.build {
|
||||
@@ -178,6 +152,43 @@ open class Wireguard : Protocol() {
|
||||
tunnelHandle = -1
|
||||
throw VpnStartException("Protect VPN interface: permission not granted or revoked")
|
||||
}
|
||||
launchStatusJob()
|
||||
}
|
||||
|
||||
private fun launchStatusJob() {
|
||||
Log.d(TAG, "Launch status job")
|
||||
statusJob = scope.launch {
|
||||
while (true) {
|
||||
val lastHandshake = getLastHandshake()
|
||||
Log.v(TAG, "lastHandshake=$lastHandshake")
|
||||
if (lastHandshake == 0L) {
|
||||
delay(1000)
|
||||
continue
|
||||
}
|
||||
if (lastHandshake == -2L || lastHandshake > 0L) state.value = CONNECTED
|
||||
else if (lastHandshake == -1L) state.value = DISCONNECTED
|
||||
statusJob = null
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getLastHandshake(): Long {
|
||||
if (tunnelHandle == -1) {
|
||||
Log.e(TAG, "Trying to get config of a non-existent tunnel")
|
||||
return -1
|
||||
}
|
||||
val config = GoBackend.awgGetConfig(tunnelHandle)
|
||||
if (config == null) {
|
||||
Log.e(TAG, "Failed to get tunnel config")
|
||||
return -2
|
||||
}
|
||||
val lastHandshake = config.lines().find { it.startsWith("last_handshake_time_sec=") }?.substring(24)?.toLong()
|
||||
if (lastHandshake == null) {
|
||||
Log.e(TAG, "Failed to get last_handshake_time_sec")
|
||||
return -2
|
||||
}
|
||||
return lastHandshake
|
||||
}
|
||||
|
||||
override fun stopVpn() {
|
||||
@@ -185,6 +196,8 @@ open class Wireguard : Protocol() {
|
||||
Log.w(TAG, "Tunnel already down")
|
||||
return
|
||||
}
|
||||
statusJob?.cancel()
|
||||
statusJob = null
|
||||
val handleToClose = tunnelHandle
|
||||
tunnelHandle = -1
|
||||
GoBackend.awgTurnOff(handleToClose)
|
||||
|
||||
@@ -770,12 +770,6 @@ ErrorCode ServerController::isUserInSudo(const ServerCredentials &credentials, D
|
||||
|
||||
if (!stdOut.contains("sudo"))
|
||||
return ErrorCode::ServerUserNotInSudo;
|
||||
if (stdOut.contains("command not found"))
|
||||
return ErrorCode::SudoPackageIsNotPreinstalled;
|
||||
if (stdOut.contains("sudoers"))
|
||||
return ErrorCode::ServerUserNotListedInSudoers;
|
||||
if (stdOut.contains("password is required"))
|
||||
return ErrorCode::ServerUserPasswordRequired;
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -56,9 +56,6 @@ namespace amnezia
|
||||
ServerCancelInstallation = 204,
|
||||
ServerUserNotInSudo = 205,
|
||||
ServerPacketManagerError = 206,
|
||||
SudoPackageIsNotPreinstalled = 207,
|
||||
ServerUserNotListedInSudoers = 208,
|
||||
ServerUserPasswordRequired = 209,
|
||||
|
||||
// Ssh connection errors
|
||||
SshRequestDeniedError = 300,
|
||||
|
||||
@@ -21,9 +21,6 @@ QString errorString(ErrorCode code) {
|
||||
case(ErrorCode::ServerCancelInstallation): errorMessage = QObject::tr("Installation canceled by user"); break;
|
||||
case(ErrorCode::ServerUserNotInSudo): errorMessage = QObject::tr("The user does not have permission to use sudo"); break;
|
||||
case(ErrorCode::ServerPacketManagerError): errorMessage = QObject::tr("Server error: Packet manager error"); break;
|
||||
case(ErrorCode::SudoPackageIsNotPreinstalled): errorMessage = QObject::tr("The sudo package is not pre-installed"); break;
|
||||
case(ErrorCode::ServerUserNotListedInSudoers): errorMessage = QObject::tr("The user is not listed in sudoers"); break;
|
||||
case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); break;
|
||||
|
||||
// Libssh errors
|
||||
case(ErrorCode::SshRequestDeniedError): errorMessage = QObject::tr("SSH request was denied"); break;
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
echo $LC_MESSAGES | grep -qE "en_US.UTF-8|C.UTF-8" || export LC_MESSAGES=C.UTF-8;\
|
||||
CUR_USER=$(whoami);\
|
||||
groups $CUR_USER | grep sudo && sudo -nu $CUR_USER sudo -n uname > /dev/null
|
||||
groups $CUR_USER
|
||||
@@ -848,7 +848,6 @@ bool InstallController::updateServiceFromApi(const int serverIndex, const QStrin
|
||||
|
||||
newServerConfig.insert(configKey::apiConfig, newApiConfig);
|
||||
newServerConfig.insert(configKey::authData, authData);
|
||||
newServerConfig.insert(config_key::crc, serverConfig.value(config_key::crc));
|
||||
m_serversModel->editServer(newServerConfig, serverIndex);
|
||||
|
||||
if (reloadServiceConfig) {
|
||||
|
||||
@@ -84,7 +84,7 @@ DrawerType2 {
|
||||
Layout.topMargin: 16
|
||||
|
||||
text: qsTr("Share")
|
||||
imageSource: "qrc:/images/controls/share-2.svg"
|
||||
leftImageSource: "qrc:/images/controls/share-2.svg"
|
||||
|
||||
KeyNavigation.tab: copyConfigTextButton
|
||||
|
||||
@@ -120,7 +120,7 @@ DrawerType2 {
|
||||
borderWidth: 1
|
||||
|
||||
text: qsTr("Copy")
|
||||
imageSource: "qrc:/images/controls/copy.svg"
|
||||
leftImageSource: "qrc:/images/controls/copy.svg"
|
||||
|
||||
Keys.onReturnPressed: { copyConfigTextButton.clicked() }
|
||||
Keys.onEnterPressed: { copyConfigTextButton.clicked() }
|
||||
@@ -143,7 +143,7 @@ DrawerType2 {
|
||||
borderWidth: 1
|
||||
|
||||
text: qsTr("Copy config string")
|
||||
imageSource: "qrc:/images/controls/copy.svg"
|
||||
leftImageSource: "qrc:/images/controls/copy.svg"
|
||||
|
||||
KeyNavigation.tab: showSettingsButton
|
||||
}
|
||||
|
||||
@@ -22,9 +22,10 @@ Button {
|
||||
property int borderWidth: 0
|
||||
property int borderFocusedWidth: 1
|
||||
|
||||
property string imageSource
|
||||
property string leftImageSource
|
||||
property string rightImageSource
|
||||
property string leftImageColor: textColor
|
||||
property string leftImageColor
|
||||
property bool changeLeftImageSize: true
|
||||
|
||||
property bool squareLeftSide: false
|
||||
|
||||
@@ -127,18 +128,23 @@ Button {
|
||||
anchors.centerIn: parent
|
||||
|
||||
Image {
|
||||
Layout.preferredHeight: 20
|
||||
Layout.preferredWidth: 20
|
||||
|
||||
source: root.imageSource
|
||||
visible: root.imageSource === "" ? false : true
|
||||
id: leftImage
|
||||
source: root.leftImageSource
|
||||
visible: root.leftImageSource === "" ? false : true
|
||||
|
||||
layer {
|
||||
enabled: true
|
||||
enabled: leftImageColor !== "" ? true : false
|
||||
effect: ColorOverlay {
|
||||
color: leftImageColor
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (root.changeLeftImageSize) {
|
||||
leftImage.Layout.preferredHeight = 20
|
||||
leftImage.Layout.preferredWidth = 20
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ButtonTextType {
|
||||
|
||||
@@ -14,7 +14,7 @@ Popup {
|
||||
visible: false
|
||||
|
||||
Overlay.modal: Rectangle {
|
||||
color: Qt.rgba(14/255, 14/255, 17/255, 0.8)
|
||||
color: AmneziaStyle.color.translucentMidnightBlack
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
@@ -19,7 +19,7 @@ RadioButton {
|
||||
|
||||
property string textColor: AmneziaStyle.color.midnightBlack
|
||||
|
||||
property string pressedBorderColor: Qt.rgba(251/255, 178/255, 106/255, 0.3)
|
||||
property string pressedBorderColor: AmneziaStyle.color.softGoldenApricot
|
||||
property string selectedBorderColor: AmneziaStyle.color.goldenApricot
|
||||
property string defaultBodredColor: AmneziaStyle.color.transparent
|
||||
property int borderWidth: 0
|
||||
|
||||
@@ -145,6 +145,7 @@ Button {
|
||||
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
hoverEnabled: true
|
||||
enabled: root.enabled
|
||||
|
||||
onEntered: {
|
||||
backgroundRect.color = root.hoveredColor
|
||||
|
||||
@@ -92,7 +92,7 @@ Item {
|
||||
id: background
|
||||
|
||||
anchors.fill: parent
|
||||
color: root.isCollapsed ? AmneziaStyle.color.transparent : Qt.rgba(14/255, 14/255, 17/255, 0.8)
|
||||
color: root.isCollapsed ? AmneziaStyle.color.transparent : AmneziaStyle.color.translucentMidnightBlack
|
||||
|
||||
Behavior on color {
|
||||
PropertyAnimation { duration: 200 }
|
||||
|
||||
@@ -24,7 +24,7 @@ Popup {
|
||||
|
||||
Overlay.modal: Rectangle {
|
||||
visible: root.closeButtonVisible
|
||||
color: Qt.rgba(14/255, 14/255, 17/255, 0.8)
|
||||
color: AmneziaStyle.color.translucentMidnightBlack
|
||||
}
|
||||
|
||||
onOpened: {
|
||||
|
||||
@@ -183,7 +183,7 @@ Item {
|
||||
|
||||
focusPolicy: Qt.NoFocus
|
||||
text: root.buttonText
|
||||
imageSource: root.buttonImageSource
|
||||
leftImageSource: root.buttonImageSource
|
||||
|
||||
anchors.top: content.top
|
||||
anchors.bottom: content.bottom
|
||||
|
||||
@@ -14,7 +14,7 @@ Popup {
|
||||
visible: false
|
||||
|
||||
Overlay.modal: Rectangle {
|
||||
color: Qt.rgba(14/255, 14/255, 17/255, 0.8)
|
||||
color: AmneziaStyle.color.translucentMidnightBlack
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
@@ -22,5 +22,9 @@ QtObject {
|
||||
readonly property color sheerWhite: Qt.rgba(1, 1, 1, 0.12)
|
||||
readonly property color translucentWhite: Qt.rgba(1, 1, 1, 0.08)
|
||||
readonly property color barelyTranslucentWhite: Qt.rgba(1, 1, 1, 0.05)
|
||||
readonly property color translucentMidnightBlack: Qt.rgba(14/255, 14/255, 17/255, 0.8)
|
||||
readonly property color softGoldenApricot: Qt.rgba(251/255, 178/255, 106/255, 0.3)
|
||||
readonly property color mistyGray: Qt.rgba(215/255, 216/255, 219/255, 0.8)
|
||||
readonly property color cloudyGray: Qt.rgba(215/255, 216/255, 219/255, 0.65)
|
||||
}
|
||||
}
|
||||
@@ -98,7 +98,6 @@ PageType {
|
||||
pressedColor: AmneziaStyle.color.sheerWhite
|
||||
disabledColor: AmneziaStyle.color.mutedGray
|
||||
textColor: AmneziaStyle.color.mutedGray
|
||||
leftImageColor: AmneziaStyle.color.transparent
|
||||
borderWidth: 0
|
||||
|
||||
buttonTextLabel.lineHeight: 20
|
||||
@@ -110,7 +109,7 @@ PageType {
|
||||
|
||||
text: isSplitTunnelingEnabled ? qsTr("Split tunneling enabled") : qsTr("Split tunneling disabled")
|
||||
|
||||
imageSource: isSplitTunnelingEnabled ? "qrc:/images/controls/split-tunneling.svg" : ""
|
||||
leftImageSource: isSplitTunnelingEnabled ? "qrc:/images/controls/split-tunneling.svg" : ""
|
||||
rightImageSource: "qrc:/images/controls/chevron-down.svg"
|
||||
|
||||
Keys.onEnterPressed: splitTunnelingButton.clicked()
|
||||
@@ -166,6 +165,7 @@ PageType {
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
spacing: 0
|
||||
|
||||
Component.onCompleted: {
|
||||
drawer.collapsedHeight = collapsed.implicitHeight
|
||||
@@ -267,18 +267,39 @@ PageType {
|
||||
|
||||
RowLayout {
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
Layout.bottomMargin: drawer.isCollapsed ? 44 : ServersModel.isDefaultServerFromApi ? 89 : 44
|
||||
Layout.topMargin: 8
|
||||
Layout.bottomMargin: drawer.isCollapsed ? 44 : ServersModel.isDefaultServerFromApi ? 61 : 16
|
||||
spacing: 0
|
||||
|
||||
Image {
|
||||
Layout.rightMargin: 8
|
||||
visible: source !== ""
|
||||
source: ServersModel.defaultServerImagePathCollapsed
|
||||
}
|
||||
BasicButtonType {
|
||||
enabled: (ServersModel.defaultServerImagePathCollapsed !== "") && drawer.isCollapsed
|
||||
hoverEnabled: enabled
|
||||
|
||||
implicitHeight: 36
|
||||
|
||||
leftPadding: 16
|
||||
rightPadding: 16
|
||||
|
||||
defaultColor: AmneziaStyle.color.transparent
|
||||
hoveredColor: AmneziaStyle.color.translucentWhite
|
||||
pressedColor: AmneziaStyle.color.sheerWhite
|
||||
disabledColor: AmneziaStyle.color.transparent
|
||||
textColor: AmneziaStyle.color.mutedGray
|
||||
|
||||
buttonTextLabel.lineHeight: 16
|
||||
buttonTextLabel.font.pixelSize: 13
|
||||
buttonTextLabel.font.weight: 400
|
||||
|
||||
LabelTextType {
|
||||
id: collapsedServerMenuDescription
|
||||
text: drawer.isCollapsed ? ServersModel.defaultServerDescriptionCollapsed : ServersModel.defaultServerDescriptionExpanded
|
||||
leftImageSource: ServersModel.defaultServerImagePathCollapsed
|
||||
changeLeftImageSize: false
|
||||
|
||||
rightImageSource: hoverEnabled ? "qrc:/images/controls/chevron-down.svg" : ""
|
||||
|
||||
onClicked: {
|
||||
ServersModel.processedIndex = ServersModel.defaultIndex
|
||||
PageController.goToPage(PageEnum.PageSettingsServerInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -316,8 +337,8 @@ PageType {
|
||||
|
||||
rootButtonImageColor: AmneziaStyle.color.midnightBlack
|
||||
rootButtonBackgroundColor: AmneziaStyle.color.paleGray
|
||||
rootButtonBackgroundHoveredColor: Qt.rgba(215, 216, 219, 0.8)
|
||||
rootButtonBackgroundPressedColor: Qt.rgba(215, 216, 219, 0.65)
|
||||
rootButtonBackgroundHoveredColor: AmneziaStyle.color.mistyGray
|
||||
rootButtonBackgroundPressedColor: AmneziaStyle.color.cloudyGray
|
||||
rootButtonHoveredBorderColor: AmneziaStyle.color.transparent
|
||||
rootButtonDefaultBorderColor: AmneziaStyle.color.transparent
|
||||
rootButtonTextTopMargin: 8
|
||||
|
||||
@@ -132,8 +132,8 @@ PageType {
|
||||
implicitHeight: 32
|
||||
|
||||
defaultColor: "transparent"
|
||||
hoveredColor: Qt.rgba(1, 1, 1, 0.08)
|
||||
pressedColor: Qt.rgba(1, 1, 1, 0.12)
|
||||
hoveredColor: AmneziaStyle.color.translucentWhite
|
||||
pressedColor: AmneziaStyle.color.sheerWhite
|
||||
textColor: AmneziaStyle.color.vibrantRed
|
||||
|
||||
text: qsTr("Reload API config")
|
||||
@@ -172,8 +172,8 @@ PageType {
|
||||
implicitHeight: 32
|
||||
|
||||
defaultColor: "transparent"
|
||||
hoveredColor: Qt.rgba(1, 1, 1, 0.08)
|
||||
pressedColor: Qt.rgba(1, 1, 1, 0.12)
|
||||
hoveredColor: AmneziaStyle.color.translucentWhite
|
||||
pressedColor: AmneziaStyle.color.sheerWhite
|
||||
textColor: AmneziaStyle.color.vibrantRed
|
||||
|
||||
text: qsTr("Remove from application")
|
||||
|
||||
@@ -16,83 +16,82 @@ PageType {
|
||||
|
||||
defaultActiveFocusItem: focusItem
|
||||
|
||||
FlickableType {
|
||||
id: fl
|
||||
ColumnLayout {
|
||||
id: header
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
contentHeight: content.height
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
ColumnLayout {
|
||||
id: content
|
||||
spacing: 0
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
Item {
|
||||
id: focusItem
|
||||
KeyNavigation.tab: backButton
|
||||
}
|
||||
|
||||
spacing: 0
|
||||
|
||||
Item {
|
||||
id: focusItem
|
||||
KeyNavigation.tab: backButton
|
||||
}
|
||||
|
||||
BackButtonType {
|
||||
id: backButton
|
||||
Layout.topMargin: 20
|
||||
BackButtonType {
|
||||
id: backButton
|
||||
Layout.topMargin: 20
|
||||
// KeyNavigation.tab: fileButton.rightButton
|
||||
}
|
||||
}
|
||||
|
||||
HeaderType {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 8
|
||||
Layout.rightMargin: 16
|
||||
Layout.leftMargin: 16
|
||||
Layout.bottomMargin: 32
|
||||
HeaderType {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 8
|
||||
Layout.rightMargin: 16
|
||||
Layout.leftMargin: 16
|
||||
Layout.bottomMargin: 16
|
||||
|
||||
headerText: qsTr("VPN by Amnezia")
|
||||
descriptionText: qsTr("Choose a VPN service that suits your needs.")
|
||||
}
|
||||
headerText: qsTr("VPN by Amnezia")
|
||||
descriptionText: qsTr("Choose a VPN service that suits your needs.")
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: containers
|
||||
width: parent.width
|
||||
height: containers.contentItem.height
|
||||
spacing: 16
|
||||
ListView {
|
||||
id: servicesListView
|
||||
anchors.top: header.bottom
|
||||
anchors.right: parent.right
|
||||
anchors.left: parent.left
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.topMargin: 16
|
||||
spacing: 0
|
||||
|
||||
currentIndex: 1
|
||||
interactive: false
|
||||
model: ApiServicesModel
|
||||
currentIndex: 1
|
||||
clip: true
|
||||
model: ApiServicesModel
|
||||
|
||||
delegate: Item {
|
||||
implicitWidth: containers.width
|
||||
implicitHeight: delegateContent.implicitHeight
|
||||
ScrollBar.vertical: ScrollBar {}
|
||||
|
||||
ColumnLayout {
|
||||
id: delegateContent
|
||||
delegate: Item {
|
||||
implicitWidth: servicesListView.width
|
||||
implicitHeight: delegateContent.implicitHeight
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
ColumnLayout {
|
||||
id: delegateContent
|
||||
|
||||
CardWithIconsType {
|
||||
id: card
|
||||
anchors.fill: parent
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: 16
|
||||
Layout.leftMargin: 16
|
||||
CardWithIconsType {
|
||||
id: card
|
||||
|
||||
headerText: name
|
||||
bodyText: cardDescription
|
||||
footerText: price
|
||||
Layout.fillWidth: true
|
||||
Layout.rightMargin: 16
|
||||
Layout.leftMargin: 16
|
||||
Layout.bottomMargin: 16
|
||||
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
headerText: name
|
||||
bodyText: cardDescription
|
||||
footerText: price
|
||||
|
||||
onClicked: {
|
||||
if (isServiceAvailable) {
|
||||
ApiServicesModel.setServiceIndex(index)
|
||||
PageController.goToPage(PageEnum.PageSetupWizardApiServiceInfo)
|
||||
}
|
||||
}
|
||||
rightImageSource: "qrc:/images/controls/chevron-right.svg"
|
||||
|
||||
enabled: isServiceAvailable
|
||||
|
||||
onClicked: {
|
||||
if (isServiceAvailable) {
|
||||
ApiServicesModel.setServiceIndex(index)
|
||||
PageController.goToPage(PageEnum.PageSetupWizardApiServiceInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,6 @@ PageType {
|
||||
KeyNavigation.tab: textKey.textField
|
||||
}
|
||||
|
||||
|
||||
HeaderType {
|
||||
property bool isVisible: SettingsController.getInstallationUuid() !== "" || PageController.isStartPageVisible()
|
||||
|
||||
|
||||
@@ -573,7 +573,7 @@ PageType {
|
||||
visible: accessTypeSelector.currentIndex === 0
|
||||
|
||||
text: qsTr("Share")
|
||||
imageSource: "qrc:/images/controls/share-2.svg"
|
||||
leftImageSource: "qrc:/images/controls/share-2.svg"
|
||||
|
||||
Keys.onTabPressed: lastItemTabClicked(focusItem)
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ PageType {
|
||||
Layout.topMargin: 40
|
||||
|
||||
text: qsTr("Share")
|
||||
imageSource: "qrc:/images/controls/share-2.svg"
|
||||
leftImageSource: "qrc:/images/controls/share-2.svg"
|
||||
|
||||
Keys.onTabPressed: lastItemTabClicked(focusItem)
|
||||
|
||||
|
||||
@@ -19,6 +19,11 @@ date > $LOG_FILE
|
||||
echo "Script started" >> $LOG_FILE
|
||||
sudo killall -9 $APP_NAME 2>> $LOG_FILE
|
||||
|
||||
if command -v steamos-readonly &> /dev/null; then
|
||||
sudo steamos-readonly disable >> $LOG_FILE
|
||||
echo "steamos-readonly disabled" >> $LOG_FILE
|
||||
fi
|
||||
|
||||
if sudo systemctl is-active --quiet $APP_NAME; then
|
||||
sudo systemctl stop $APP_NAME >> $LOG_FILE
|
||||
sudo systemctl disable $APP_NAME >> $LOG_FILE
|
||||
@@ -42,6 +47,11 @@ sudo chmod 555 /usr/share/applications/$APP_NAME.desktop >> $LOG_FILE
|
||||
|
||||
echo "user desktop creation loop ended" >> $LOG_FILE
|
||||
|
||||
if command -v steamos-readonly &> /dev/null; then
|
||||
sudo steamos-readonly enable >> $LOG_FILE
|
||||
echo "steamos-readonly enabled" >> $LOG_FILE
|
||||
fi
|
||||
|
||||
date >> $LOG_FILE
|
||||
echo "Service status:" >> $LOG_FILE
|
||||
sudo systemctl status $APP_NAME >> $LOG_FILE
|
||||
|
||||
@@ -13,6 +13,11 @@ date >> $LOG_FILE
|
||||
echo "Uninstall Script started" >> $LOG_FILE
|
||||
sudo killall -9 $APP_NAME 2>> $LOG_FILE
|
||||
|
||||
if command -v steamos-readonly &> /dev/null; then
|
||||
sudo steamos-readonly disable >> $LOG_FILE
|
||||
echo "steamos-readonly disabled" >> $LOG_FILE
|
||||
fi
|
||||
|
||||
ls /opt/AmneziaVPN/client/lib/* | while IFS=: read -r dir; do
|
||||
sudo unlink $dir >> $LOG_FILE
|
||||
done
|
||||
@@ -59,6 +64,11 @@ if test -f /usr/share/pixmaps/$APP_NAME.png; then
|
||||
|
||||
fi
|
||||
|
||||
if command -v steamos-readonly &> /dev/null; then
|
||||
sudo steamos-readonly enable >> $LOG_FILE
|
||||
echo "steamos-readonly enabled" >> $LOG_FILE
|
||||
fi
|
||||
|
||||
date >> $LOG_FILE
|
||||
echo "Service after uninstall status:" >> $LOG_FILE
|
||||
sudo systemctl status $APP_NAME >> $LOG_FILE
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,8 @@
|
||||
<svg width="208" height="56" viewBox="0 0 208 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="208" height="56" rx="16" fill="#FBB36A"/>
|
||||
<path d="M70.206 13.04H75.466C76.386 13.04 77.226 13.1867 77.986 13.48C78.746 13.7733 79.3927 14.2133 79.926 14.8C80.4593 15.3733 80.8727 16.1 81.166 16.98C81.4593 17.8467 81.606 18.86 81.606 20.02C81.606 21.18 81.4593 22.2 81.166 23.08C80.8727 23.9467 80.4593 24.6733 79.926 25.26C79.3927 25.8333 78.746 26.2667 77.986 26.56C77.226 26.8533 76.386 27 75.466 27H70.206V13.04ZM75.466 24.3C76.3727 24.3 77.086 24.0467 77.606 23.54C78.126 23.0333 78.386 22.22 78.386 21.1V18.94C78.386 17.82 78.126 17.0067 77.606 16.5C77.086 15.9933 76.3727 15.74 75.466 15.74H73.246V24.3H75.466ZM88.2513 27.24C87.478 27.24 86.7847 27.1133 86.1713 26.86C85.5713 26.6067 85.058 26.24 84.6313 25.76C84.218 25.28 83.898 24.7 83.6713 24.02C83.4447 23.34 83.3313 22.58 83.3313 21.74C83.3313 20.9 83.4447 20.14 83.6713 19.46C83.898 18.78 84.218 18.2067 84.6313 17.74C85.058 17.26 85.5713 16.8933 86.1713 16.64C86.7847 16.3867 87.478 16.26 88.2513 16.26C89.0247 16.26 89.7113 16.3867 90.3113 16.64C90.9247 16.8933 91.438 17.26 91.8513 17.74C92.278 18.2067 92.6047 18.78 92.8313 19.46C93.058 20.14 93.1713 20.9 93.1713 21.74C93.1713 22.58 93.058 23.34 92.8313 24.02C92.6047 24.7 92.278 25.28 91.8513 25.76C91.438 26.24 90.9247 26.6067 90.3113 26.86C89.7113 27.1133 89.0247 27.24 88.2513 27.24ZM88.2513 24.9C88.838 24.9 89.2913 24.72 89.6113 24.36C89.9313 24 90.0913 23.4867 90.0913 22.82V20.68C90.0913 20.0133 89.9313 19.5 89.6113 19.14C89.2913 18.78 88.838 18.6 88.2513 18.6C87.6647 18.6 87.2113 18.78 86.8913 19.14C86.5713 19.5 86.4113 20.0133 86.4113 20.68V22.82C86.4113 23.4867 86.5713 24 86.8913 24.36C87.2113 24.72 87.6647 24.9 88.2513 24.9ZM94.0851 16.5H96.9451L97.9651 20.74L98.6851 23.94H98.7651L99.6051 20.74L100.805 16.5H103.505L104.725 20.74L105.585 23.94H105.665L106.385 20.74L107.405 16.5H110.145L107.245 27H104.145L102.865 22.56L102.125 19.84H102.065L101.345 22.56L100.065 27H97.0251L94.0851 16.5ZM111.901 27V16.5H114.861V18.28H114.981C115.168 17.7333 115.495 17.26 115.961 16.86C116.428 16.46 117.075 16.26 117.901 16.26C118.981 16.26 119.795 16.62 120.341 17.34C120.901 18.06 121.181 19.0867 121.181 20.42V27H118.221V20.66C118.221 19.98 118.115 19.48 117.901 19.16C117.688 18.8267 117.308 18.66 116.761 18.66C116.521 18.66 116.288 18.6933 116.061 18.76C115.835 18.8133 115.628 18.9067 115.441 19.04C115.268 19.1733 115.128 19.34 115.021 19.54C114.915 19.7267 114.861 19.9467 114.861 20.2V27H111.901ZM126.756 27C125.742 27 124.996 26.7533 124.516 26.26C124.049 25.7667 123.816 25.0533 123.816 24.12V12.2H126.776V24.7H128.096V27H126.756ZM134.13 27.24C133.357 27.24 132.664 27.1133 132.05 26.86C131.45 26.6067 130.937 26.24 130.51 25.76C130.097 25.28 129.777 24.7 129.55 24.02C129.324 23.34 129.21 22.58 129.21 21.74C129.21 20.9 129.324 20.14 129.55 19.46C129.777 18.78 130.097 18.2067 130.51 17.74C130.937 17.26 131.45 16.8933 132.05 16.64C132.664 16.3867 133.357 16.26 134.13 16.26C134.904 16.26 135.59 16.3867 136.19 16.64C136.804 16.8933 137.317 17.26 137.73 17.74C138.157 18.2067 138.484 18.78 138.71 19.46C138.937 20.14 139.05 20.9 139.05 21.74C139.05 22.58 138.937 23.34 138.71 24.02C138.484 24.7 138.157 25.28 137.73 25.76C137.317 26.24 136.804 26.6067 136.19 26.86C135.59 27.1133 134.904 27.24 134.13 27.24ZM134.13 24.9C134.717 24.9 135.17 24.72 135.49 24.36C135.81 24 135.97 23.4867 135.97 22.82V20.68C135.97 20.0133 135.81 19.5 135.49 19.14C135.17 18.78 134.717 18.6 134.13 18.6C133.544 18.6 133.09 18.78 132.77 19.14C132.45 19.5 132.29 20.0133 132.29 20.68V22.82C132.29 23.4867 132.45 24 132.77 24.36C133.09 24.72 133.544 24.9 134.13 24.9ZM148.919 27C148.386 27 147.939 26.8333 147.579 26.5C147.233 26.1667 147.013 25.72 146.919 25.16H146.799C146.639 25.84 146.286 26.36 145.739 26.72C145.193 27.0667 144.519 27.24 143.719 27.24C142.666 27.24 141.859 26.96 141.299 26.4C140.739 25.84 140.459 25.1 140.459 24.18C140.459 23.0733 140.859 22.2533 141.659 21.72C142.473 21.1733 143.573 20.9 144.959 20.9H146.619V20.24C146.619 19.7333 146.486 19.3333 146.219 19.04C145.953 18.7333 145.506 18.58 144.879 18.58C144.293 18.58 143.826 18.7067 143.479 18.96C143.133 19.2133 142.846 19.5 142.619 19.82L140.859 18.26C141.286 17.6333 141.819 17.1467 142.459 16.8C143.113 16.44 143.993 16.26 145.099 16.26C146.593 16.26 147.713 16.5867 148.459 17.24C149.206 17.8933 149.579 18.8467 149.579 20.1V24.7H150.559V27H148.919ZM144.819 25.18C145.313 25.18 145.733 25.0733 146.079 24.86C146.439 24.6467 146.619 24.3 146.619 23.82V22.58H145.179C144.019 22.58 143.439 22.9733 143.439 23.76V24.06C143.439 24.4467 143.559 24.7333 143.799 24.92C144.039 25.0933 144.379 25.18 144.819 25.18ZM158.986 25.24H158.886C158.806 25.52 158.679 25.7867 158.506 26.04C158.333 26.28 158.119 26.4933 157.866 26.68C157.626 26.8533 157.346 26.9867 157.026 27.08C156.719 27.1867 156.399 27.24 156.066 27.24C154.733 27.24 153.726 26.7733 153.046 25.84C152.366 24.8933 152.026 23.5267 152.026 21.74C152.026 19.9533 152.366 18.5933 153.046 17.66C153.726 16.7267 154.733 16.26 156.066 16.26C156.746 16.26 157.346 16.4467 157.866 16.82C158.399 17.1933 1Line truncated
|
||||
<path opacity="0.8" d="M76.084 45L75.484 43.008H72.688L72.088 45H70.24L73 36.624H75.256L77.98 45H76.084ZM74.104 38.28H74.044L73.12 41.46H75.04L74.104 38.28ZM80.8068 45C80.1988 45 79.7508 44.852 79.4628 44.556C79.1828 44.26 79.0428 43.832 79.0428 43.272V36.12H80.8188V43.62H81.6108V45H80.8068ZM84.8251 45C84.2091 45 83.7411 44.844 83.4211 44.532C83.1091 44.22 82.9531 43.764 82.9531 43.164V40.08H82.0651V38.7H82.5091C82.7491 38.7 82.9131 38.644 83.0011 38.532C83.0891 38.412 83.1331 38.244 83.1331 38.028V36.996H84.7291V38.7H85.9771V40.08H84.7291V43.62H85.8811V45H84.8251ZM89.7919 45.144C89.3119 45.144 88.8839 45.068 88.5079 44.916C88.1319 44.756 87.8119 44.536 87.5479 44.256C87.2919 43.968 87.0959 43.62 86.9599 43.212C86.8319 42.804 86.7679 42.348 86.7679 41.844C86.7679 41.348 86.8319 40.9 86.9599 40.5C87.0879 40.092 87.2759 39.744 87.5239 39.456C87.7799 39.168 88.0919 38.948 88.4599 38.796C88.8279 38.636 89.2479 38.556 89.7199 38.556C90.2399 38.556 90.6839 38.644 91.0519 38.82C91.4279 38.996 91.7319 39.232 91.9639 39.528C92.2039 39.824 92.3759 40.168 92.4799 40.56C92.5919 40.944 92.6479 41.348 92.6479 41.772V42.3H88.6039V42.396C88.6039 42.812 88.7159 43.144 88.9399 43.392C89.1639 43.632 89.5159 43.752 89.9959 43.752C90.3639 43.752 90.6639 43.68 90.8959 43.536C91.1279 43.384 91.3439 43.204 91.5439 42.996L92.4319 44.1C92.1519 44.428 91.7839 44.684 91.3279 44.868C90.8799 45.052 90.3679 45.144 89.7919 45.144ZM89.7559 39.864C89.3959 39.864 89.1119 39.984 88.9039 40.224C88.7039 40.456 88.6039 40.768 88.6039 41.16V41.256H90.8119V41.148C90.8119 40.764 90.7239 40.456 90.5479 40.224C90.3799 39.984 90.1159 39.864 89.7559 39.864ZM93.9022 45V38.7H95.6782V40.068H95.7382C95.7702 39.892 95.8262 39.724 95.9062 39.564C95.9862 39.396 96.0902 39.248 96.2182 39.12C96.3542 38.992 96.5142 38.892 96.6982 38.82C96.8822 38.74 97.0982 38.7 97.3462 38.7H97.6582V40.356H97.2142C96.6942 40.356 96.3062 40.424 96.0502 40.56C95.8022 40.696 95.6782 40.948 95.6782 41.316V45H93.9022ZM98.7538 45V38.7H100.53V39.768H100.602C100.714 39.44 100.91 39.156 101.19 38.916C101.47 38.676 101.858 38.556 102.354 38.556C103.002 38.556 103.49 38.772 103.818 39.204C104.154 39.636 104.322 40.252 104.322 41.052V45H102.546V41.196C102.546 40.788 102.482 40.488 102.354 40.296C102.226 40.096 101.998 39.996 101.67 39.996C101.526 39.996 101.386 40.016 101.25 40.056C101.114 40.088 100.99 40.144 100.878 40.224C100.774 40.304 100.69 40.404 100.626 40.524C100.562 40.636 100.53 40.768 100.53 40.92V45H98.7538ZM110.558 45C110.238 45 109.97 44.9 109.754 44.7C109.546 44.5 109.414 44.232 109.358 43.896H109.286C109.19 44.304 108.978 44.616 108.65 44.832C108.322 45.04 107.918 45.144 107.438 45.144C106.806 45.144 106.322 44.976 105.986 44.64C105.65 44.304 105.482 43.86 105.482 43.308C105.482 42.644 105.722 42.152 106.202 41.832C106.69 41.504 107.35 41.34 108.182 41.34H109.178V40.944C109.178 40.64 109.098 40.4 108.938 40.224C108.778 40.04 108.51 39.948 108.134 39.948C107.782 39.948 107.502 40.024 107.294 40.176C107.086 40.328 106.914 40.5 106.778 40.692L105.722 39.756C105.978 39.38 106.298 39.088 106.682 38.88C107.074 38.664 107.602 38.556 108.266 38.556C109.162 38.556 109.834 38.752 110.282 39.144C110.73 39.536 110.954 40.108 110.954 40.86V43.62H111.542V45H110.558ZM108.098 43.908C108.394 43.908 108.646 43.844 108.854 43.716C109.07 43.588 109.178 43.38 109.178 43.092V42.348H108.314C107.618 42.348 107.27 42.584 107.27 43.056V43.236C107.27 43.468 107.342 43.64 107.486 43.752C107.63 43.856 107.834 43.908 108.098 43.908ZM114.872 45C114.256 45 113.788 44.844 113.468 44.532C113.156 44.22 113 43.764 113 43.164V40.08H112.112V38.7H112.556C112.796 38.7 112.96 38.644 113.048 38.532C113.136 38.412 113.18 38.244 113.18 38.028V36.996H114.776V38.7H116.024V40.08H114.776V43.62H115.928V45H114.872ZM118.146 38.028C117.786 38.028 117.522 37.948 117.354 37.788C117.194 37.62 117.114 37.408 117.114 37.152V36.888C117.114 36.632 117.194 36.424 117.354 36.264C117.522 36.096 117.786 36.012 118.146 36.012C118.506 36.012 118.766 36.096 118.926 36.264C119.094 36.424 119.178 36.632 119.178 36.888V37.152C119.178 37.408 119.094 37.62 118.926 37.788C118.766 37.948 118.506 38.028 118.146 38.028ZM117.258 38.7H119.034V45H117.258V38.7ZM122.035 45L119.971 38.7H121.723L122.503 41.244L123.091 43.524H123.187L123.775 41.244L124.531 38.7H126.211L124.147 45H122.035ZM129.683 45.144C129.203 45.144 128.775 45.068 128.399 44.916C128.023 44.756 127.703 44.536 127.439 44.256C127.183 43.968 126.987 43.62 126.851 43.212C126.723 42.804 126.659 42.348 126.659 41.844C126.659 41.348 126.723 40.9 126.851 40.5C126.979 40.092 127.167 39.744 127.415 39.456C127.671 39.168 127.983 38.948 128.351 38.796C128.719 38.636 129.139 38.556 129.611 38.556C130.131 38.556 130.575 38.644 130.943 38.82C131.319 38.996 131.623 39.232 131.855 39.528C132.095 39.824 132.267 40.168 132.371 40.56C132.483 40.944 132.539 41.348 132.539 41.772V42.3H128.495V42.396C128.495 42.812 128.607 43.144 128.831 43.392C129.055 43.632 129.407 43.752 129.887 43.752C130.255 43.752 130.5Line truncated
|
||||
<path d="M40.625 19.125H46.875V25.375" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M35.418 30.5833L46.8763 19.125" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M43.75 29.5417V35.7917C43.75 36.3442 43.5305 36.8741 43.1398 37.2648C42.7491 37.6555 42.2192 37.875 41.6667 37.875H30.2083C29.6558 37.875 29.1259 37.6555 28.7352 37.2648C28.3445 36.8741 28.125 36.3442 28.125 35.7917V24.3333C28.125 23.7808 28.3445 23.2509 28.7352 22.8602C29.1259 22.4695 29.6558 22.25 30.2083 22.25H36.4583" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,8 @@
|
||||
<svg width="208" height="56" viewBox="0 0 208 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="208" height="56" rx="16" fill="#FBB36A"/>
|
||||
<path d="M70.206 13.04H75.466C76.386 13.04 77.226 13.1867 77.986 13.48C78.746 13.7733 79.3927 14.2133 79.926 14.8C80.4593 15.3733 80.8727 16.1 81.166 16.98C81.4593 17.8467 81.606 18.86 81.606 20.02C81.606 21.18 81.4593 22.2 81.166 23.08C80.8727 23.9467 80.4593 24.6733 79.926 25.26C79.3927 25.8333 78.746 26.2667 77.986 26.56C77.226 26.8533 76.386 27 75.466 27H70.206V13.04ZM75.466 24.3C76.3727 24.3 77.086 24.0467 77.606 23.54C78.126 23.0333 78.386 22.22 78.386 21.1V18.94C78.386 17.82 78.126 17.0067 77.606 16.5C77.086 15.9933 76.3727 15.74 75.466 15.74H73.246V24.3H75.466ZM88.2513 27.24C87.478 27.24 86.7847 27.1133 86.1713 26.86C85.5713 26.6067 85.058 26.24 84.6313 25.76C84.218 25.28 83.898 24.7 83.6713 24.02C83.4447 23.34 83.3313 22.58 83.3313 21.74C83.3313 20.9 83.4447 20.14 83.6713 19.46C83.898 18.78 84.218 18.2067 84.6313 17.74C85.058 17.26 85.5713 16.8933 86.1713 16.64C86.7847 16.3867 87.478 16.26 88.2513 16.26C89.0247 16.26 89.7113 16.3867 90.3113 16.64C90.9247 16.8933 91.438 17.26 91.8513 17.74C92.278 18.2067 92.6047 18.78 92.8313 19.46C93.058 20.14 93.1713 20.9 93.1713 21.74C93.1713 22.58 93.058 23.34 92.8313 24.02C92.6047 24.7 92.278 25.28 91.8513 25.76C91.438 26.24 90.9247 26.6067 90.3113 26.86C89.7113 27.1133 89.0247 27.24 88.2513 27.24ZM88.2513 24.9C88.838 24.9 89.2913 24.72 89.6113 24.36C89.9313 24 90.0913 23.4867 90.0913 22.82V20.68C90.0913 20.0133 89.9313 19.5 89.6113 19.14C89.2913 18.78 88.838 18.6 88.2513 18.6C87.6647 18.6 87.2113 18.78 86.8913 19.14C86.5713 19.5 86.4113 20.0133 86.4113 20.68V22.82C86.4113 23.4867 86.5713 24 86.8913 24.36C87.2113 24.72 87.6647 24.9 88.2513 24.9ZM94.0851 16.5H96.9451L97.9651 20.74L98.6851 23.94H98.7651L99.6051 20.74L100.805 16.5H103.505L104.725 20.74L105.585 23.94H105.665L106.385 20.74L107.405 16.5H110.145L107.245 27H104.145L102.865 22.56L102.125 19.84H102.065L101.345 22.56L100.065 27H97.0251L94.0851 16.5ZM111.901 27V16.5H114.861V18.28H114.981C115.168 17.7333 115.495 17.26 115.961 16.86C116.428 16.46 117.075 16.26 117.901 16.26C118.981 16.26 119.795 16.62 120.341 17.34C120.901 18.06 121.181 19.0867 121.181 20.42V27H118.221V20.66C118.221 19.98 118.115 19.48 117.901 19.16C117.688 18.8267 117.308 18.66 116.761 18.66C116.521 18.66 116.288 18.6933 116.061 18.76C115.835 18.8133 115.628 18.9067 115.441 19.04C115.268 19.1733 115.128 19.34 115.021 19.54C114.915 19.7267 114.861 19.9467 114.861 20.2V27H111.901ZM126.756 27C125.742 27 124.996 26.7533 124.516 26.26C124.049 25.7667 123.816 25.0533 123.816 24.12V12.2H126.776V24.7H128.096V27H126.756ZM134.13 27.24C133.357 27.24 132.664 27.1133 132.05 26.86C131.45 26.6067 130.937 26.24 130.51 25.76C130.097 25.28 129.777 24.7 129.55 24.02C129.324 23.34 129.21 22.58 129.21 21.74C129.21 20.9 129.324 20.14 129.55 19.46C129.777 18.78 130.097 18.2067 130.51 17.74C130.937 17.26 131.45 16.8933 132.05 16.64C132.664 16.3867 133.357 16.26 134.13 16.26C134.904 16.26 135.59 16.3867 136.19 16.64C136.804 16.8933 137.317 17.26 137.73 17.74C138.157 18.2067 138.484 18.78 138.71 19.46C138.937 20.14 139.05 20.9 139.05 21.74C139.05 22.58 138.937 23.34 138.71 24.02C138.484 24.7 138.157 25.28 137.73 25.76C137.317 26.24 136.804 26.6067 136.19 26.86C135.59 27.1133 134.904 27.24 134.13 27.24ZM134.13 24.9C134.717 24.9 135.17 24.72 135.49 24.36C135.81 24 135.97 23.4867 135.97 22.82V20.68C135.97 20.0133 135.81 19.5 135.49 19.14C135.17 18.78 134.717 18.6 134.13 18.6C133.544 18.6 133.09 18.78 132.77 19.14C132.45 19.5 132.29 20.0133 132.29 20.68V22.82C132.29 23.4867 132.45 24 132.77 24.36C133.09 24.72 133.544 24.9 134.13 24.9ZM148.919 27C148.386 27 147.939 26.8333 147.579 26.5C147.233 26.1667 147.013 25.72 146.919 25.16H146.799C146.639 25.84 146.286 26.36 145.739 26.72C145.193 27.0667 144.519 27.24 143.719 27.24C142.666 27.24 141.859 26.96 141.299 26.4C140.739 25.84 140.459 25.1 140.459 24.18C140.459 23.0733 140.859 22.2533 141.659 21.72C142.473 21.1733 143.573 20.9 144.959 20.9H146.619V20.24C146.619 19.7333 146.486 19.3333 146.219 19.04C145.953 18.7333 145.506 18.58 144.879 18.58C144.293 18.58 143.826 18.7067 143.479 18.96C143.133 19.2133 142.846 19.5 142.619 19.82L140.859 18.26C141.286 17.6333 141.819 17.1467 142.459 16.8C143.113 16.44 143.993 16.26 145.099 16.26C146.593 16.26 147.713 16.5867 148.459 17.24C149.206 17.8933 149.579 18.8467 149.579 20.1V24.7H150.559V27H148.919ZM144.819 25.18C145.313 25.18 145.733 25.0733 146.079 24.86C146.439 24.6467 146.619 24.3 146.619 23.82V22.58H145.179C144.019 22.58 143.439 22.9733 143.439 23.76V24.06C143.439 24.4467 143.559 24.7333 143.799 24.92C144.039 25.0933 144.379 25.18 144.819 25.18ZM158.986 25.24H158.886C158.806 25.52 158.679 25.7867 158.506 26.04C158.333 26.28 158.119 26.4933 157.866 26.68C157.626 26.8533 157.346 26.9867 157.026 27.08C156.719 27.1867 156.399 27.24 156.066 27.24C154.733 27.24 153.726 26.7733 153.046 25.84C152.366 24.8933 152.026 23.5267 152.026 21.74C152.026 19.9533 152.366 18.5933 153.046 17.66C153.726 16.7267 154.733 16.26 156.066 16.26C156.746 16.26 157.346 16.4467 157.866 16.82C158.399 17.1933 1Line truncated
|
||||
<path opacity="0.8" d="M70.924 45V36.624H76.48V38.244H72.748V39.96H75.928V41.568H72.748V45H70.924ZM77.4843 45V38.7H79.2603V40.068H79.3203C79.3523 39.892 79.4083 39.724 79.4883 39.564C79.5683 39.396 79.6723 39.248 79.8003 39.12C79.9363 38.992 80.0963 38.892 80.2803 38.82C80.4643 38.74 80.6803 38.7 80.9283 38.7H81.2403V40.356H80.7963C80.2763 40.356 79.8883 40.424 79.6323 40.56C79.3843 40.696 79.2603 40.948 79.2603 41.316V45H77.4843ZM84.8332 45.144C84.3692 45.144 83.9532 45.068 83.5852 44.916C83.2252 44.764 82.9172 44.544 82.6612 44.256C82.4132 43.968 82.2212 43.62 82.0852 43.212C81.9492 42.804 81.8812 42.348 81.8812 41.844C81.8812 41.34 81.9492 40.884 82.0852 40.476C82.2212 40.068 82.4132 39.724 82.6612 39.444C82.9172 39.156 83.2252 38.936 83.5852 38.784C83.9532 38.632 84.3692 38.556 84.8332 38.556C85.2972 38.556 85.7092 38.632 86.0692 38.784C86.4372 38.936 86.7452 39.156 86.9932 39.444C87.2492 39.724 87.4452 40.068 87.5812 40.476C87.7172 40.884 87.7852 41.34 87.7852 41.844C87.7852 42.348 87.7172 42.804 87.5812 43.212C87.4452 43.62 87.2492 43.968 86.9932 44.256C86.7452 44.544 86.4372 44.764 86.0692 44.916C85.7092 45.068 85.2972 45.144 84.8332 45.144ZM84.8332 43.74C85.1852 43.74 85.4572 43.632 85.6492 43.416C85.8412 43.2 85.9372 42.892 85.9372 42.492V41.208C85.9372 40.808 85.8412 40.5 85.6492 40.284C85.4572 40.068 85.1852 39.96 84.8332 39.96C84.4812 39.96 84.2092 40.068 84.0172 40.284C83.8252 40.5 83.7292 40.808 83.7292 41.208V42.492C83.7292 42.892 83.8252 43.2 84.0172 43.416C84.2092 43.632 84.4812 43.74 84.8332 43.74ZM89.0507 45V38.7H90.8267V39.768H90.8987C91.0107 39.432 91.2027 39.148 91.4747 38.916C91.7467 38.676 92.1187 38.556 92.5907 38.556C93.0227 38.556 93.3907 38.664 93.6947 38.88C93.9987 39.096 94.2187 39.412 94.3547 39.828H94.3907C94.4467 39.652 94.5307 39.488 94.6427 39.336C94.7627 39.176 94.9067 39.04 95.0747 38.928C95.2427 38.816 95.4307 38.728 95.6387 38.664C95.8467 38.592 96.0707 38.556 96.3107 38.556C96.9187 38.556 97.3827 38.772 97.7027 39.204C98.0307 39.636 98.1947 40.252 98.1947 41.052V45H96.4187V41.196C96.4187 40.396 96.1307 39.996 95.5547 39.996C95.2907 39.996 95.0507 40.072 94.8347 40.224C94.6187 40.376 94.5107 40.608 94.5107 40.92V45H92.7347V41.196C92.7347 40.396 92.4467 39.996 91.8707 39.996C91.7427 39.996 91.6147 40.016 91.4867 40.056C91.3667 40.088 91.2547 40.144 91.1507 40.224C91.0547 40.304 90.9747 40.404 90.9107 40.524C90.8547 40.636 90.8267 40.768 90.8267 40.92V45H89.0507ZM102.009 38.7H103.725L104.337 41.244L104.769 43.164H104.817L105.321 41.244L106.041 38.7H107.661L108.393 41.244L108.909 43.164H108.957L109.389 41.244L110.001 38.7H111.645L109.905 45H108.045L107.277 42.336L106.833 40.704H106.797L106.365 42.336L105.597 45H103.773L102.009 38.7ZM115.21 45.144C114.73 45.144 114.302 45.068 113.926 44.916C113.55 44.756 113.23 44.536 112.966 44.256C112.71 43.968 112.514 43.62 112.378 43.212C112.25 42.804 112.186 42.348 112.186 41.844C112.186 41.348 112.25 40.9 112.378 40.5C112.506 40.092 112.694 39.744 112.942 39.456C113.198 39.168 113.51 38.948 113.878 38.796C114.246 38.636 114.666 38.556 115.138 38.556C115.658 38.556 116.102 38.644 116.47 38.82C116.846 38.996 117.15 39.232 117.382 39.528C117.622 39.824 117.794 40.168 117.898 40.56C118.01 40.944 118.066 41.348 118.066 41.772V42.3H114.022V42.396C114.022 42.812 114.134 43.144 114.358 43.392C114.582 43.632 114.934 43.752 115.414 43.752C115.782 43.752 116.082 43.68 116.314 43.536C116.546 43.384 116.762 43.204 116.962 42.996L117.85 44.1C117.57 44.428 117.202 44.684 116.746 44.868C116.298 45.052 115.786 45.144 115.21 45.144ZM115.174 39.864C114.814 39.864 114.53 39.984 114.322 40.224C114.122 40.456 114.022 40.768 114.022 41.16V41.256H116.23V41.148C116.23 40.764 116.142 40.456 115.966 40.224C115.798 39.984 115.534 39.864 115.174 39.864ZM119.32 36.12H121.096V39.756H121.156C121.244 39.404 121.444 39.116 121.756 38.892C122.076 38.668 122.44 38.556 122.848 38.556C123.648 38.556 124.252 38.836 124.66 39.396C125.068 39.956 125.272 40.772 125.272 41.844C125.272 42.916 125.068 43.736 124.66 44.304C124.252 44.864 123.648 45.144 122.848 45.144C122.64 45.144 122.444 45.112 122.26 45.048C122.076 44.992 121.908 44.912 121.756 44.808C121.612 44.696 121.488 44.568 121.384 44.424C121.28 44.272 121.204 44.112 121.156 43.944H121.096V45H119.32V36.12ZM122.26 43.704C122.596 43.704 122.872 43.588 123.088 43.356C123.312 43.116 123.424 42.796 123.424 42.396V41.304C123.424 40.904 123.312 40.588 123.088 40.356C122.872 40.116 122.596 39.996 122.26 39.996C121.924 39.996 121.644 40.08 121.42 40.248C121.204 40.408 121.096 40.632 121.096 40.92V42.78C121.096 43.068 121.204 43.296 121.42 43.464C121.644 43.624 121.924 43.704 122.26 43.704ZM128.757 45.144C128.149 45.144 127.637 45.048 127.221 44.856C126.805 44.656 126.433 44.376 126.105 44.016L127.149 42.96C127.373 43.208 127.621 43.404 127.893 43.548C128.165 43.692 128.473 43.764 128.817 43.764C129.169 43.764 129.413 43.712 129.549 43.608C129.685 43.496 129.753 43.348 129.753 43.164C129.753 42.868 129.541 42.692 129.117 42.636LLine truncated
|
||||
<path d="M37.4987 29.5417V37.8751L33.332 33.7084" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M37.5 37.8749L41.6667 33.7083" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M29.5766 31.9052C28.7259 31.161 28.0598 30.2292 27.631 29.1833C27.2022 28.1374 27.0224 27.0062 27.1058 25.8789C27.1893 24.7516 27.5336 23.6592 28.1118 22.6879C28.6899 21.7165 29.4859 20.8929 30.437 20.282C31.388 19.6712 32.4681 19.2898 33.5919 19.1679C34.7157 19.0461 35.8524 19.1873 36.9122 19.5802C37.9721 19.9731 38.9261 20.6071 39.6989 21.432C40.4717 22.2569 41.0422 23.2502 41.3652 24.3334H43.2298C44.2423 24.3332 45.2277 24.661 46.0385 25.2676C46.8492 25.8742 47.4418 26.727 47.7274 27.6985C48.0131 28.6699 47.9765 29.7077 47.6232 30.6566C47.2698 31.6055 46.6187 32.4145 45.7673 32.9625" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
Reference in new issue
Block a user