*
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ * *
+ *******************************************************************************/
+
+package org.amnezia.vpn.shadowsocks.plugin
+
+import android.content.ContentProvider
+import android.content.ContentValues
+import android.database.Cursor
+import android.database.MatrixCursor
+import android.net.Uri
+import android.os.Bundle
+import android.os.ParcelFileDescriptor
+import androidx.core.os.bundleOf
+
+/**
+ * Base class for a native plugin provider. A native plugin provider offers read-only access to files that are required
+ * to run a plugin, such as binary files and other configuration files. To create a native plugin provider, extend this
+ * class, implement the abstract methods, and add it to your manifest like this:
+ *
+ * <manifest>
+ * ...
+ * <application>
+ * ...
+ * <provider android:name="org.amnezia.vpn.shadowsocks.$PLUGIN_ID.BinaryProvider"
+ * android:authorities="org.amnezia.vpn.shadowsocks.plugin.$PLUGIN_ID.BinaryProvider">
+ * <intent-filter>
+ * <category android:name="org.amnezia.vpn.shadowsocks.plugin.ACTION_NATIVE_PLUGIN" />
+ * </intent-filter>
+ * </provider>
+ * ...
+ * </application>
+ *</manifest>
+ */
+abstract class NativePluginProvider : ContentProvider() {
+ override fun getType(p0: Uri): String = "application/x-elf"
+
+ override fun onCreate(): Boolean = true
+
+ /**
+ * Provide all files needed for native plugin.
+ *
+ * @param provider A helper object to use to add files.
+ */
+ protected abstract fun populateFiles(provider: PathProvider)
+
+ override fun query(uri: Uri, projection: Array?, selection: String?, selectionArgs: Array?,
+ sortOrder: String?): Cursor {
+ check(selection == null && selectionArgs == null && sortOrder == null)
+ val result = MatrixCursor(projection)
+ populateFiles(PathProvider(uri, result))
+ return result
+ }
+
+ /**
+ * Returns executable entry absolute path. This is used if plugin is sharing UID with the host.
+ *
+ * Default behavior is throwing UnsupportedOperationException. If you don't wish to use this feature, use the
+ * default behavior.
+ *
+ * @return Absolute path for executable entry.
+ */
+ open fun getExecutable(): String = throw UnsupportedOperationException()
+
+ abstract fun openFile(uri: Uri?): ParcelFileDescriptor
+ override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor {
+ check(mode == "r")
+ return openFile(uri)
+ }
+
+ override fun call(method: String, arg: String?, extras: Bundle?): Bundle? = when (method) {
+ PluginContract.METHOD_GET_EXECUTABLE -> bundleOf(Pair(PluginContract.EXTRA_ENTRY, getExecutable()))
+ else -> super.call(method, arg, extras)
+ }
+
+ // Methods that should not be used
+ override fun insert(p0: Uri, p1: ContentValues?): Uri = throw UnsupportedOperationException()
+ override fun update(p0: Uri, values: ContentValues?, selection: String?, selectionArgs: Array?): Int =
+ throw UnsupportedOperationException()
+ override fun delete(uri: Uri, p1: String?, p2: Array?): Int = throw UnsupportedOperationException()
+}
diff --git a/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PathProvider.kt b/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PathProvider.kt
new file mode 100644
index 00000000..f7ebe1e4
--- /dev/null
+++ b/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PathProvider.kt
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * *
+ * Copyright (C) 2017 by Max Lv *
+ * Copyright (C) 2017 by Mygod Studio *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ * *
+ *******************************************************************************/
+
+package org.amnezia.vpn.shadowsocks.plugin
+
+import android.database.MatrixCursor
+import android.net.Uri
+import java.io.File
+
+/**
+ * Helper class to provide relative paths of files to copy.
+ */
+class PathProvider internal constructor(baseUri: Uri, private val cursor: MatrixCursor) {
+ private val basePath = baseUri.path?.trim('/') ?: ""
+
+ fun addPath(path: String, mode: Int = 0b110100100): PathProvider {
+ val trimmed = path.trim('/')
+ if (trimmed.startsWith(basePath)) cursor.newRow()
+ .add(PluginContract.COLUMN_PATH, trimmed)
+ .add(PluginContract.COLUMN_MODE, mode)
+ return this
+ }
+ fun addTo(file: File, to: String = "", mode: Int = 0b110100100): PathProvider {
+ var sub = to + file.name
+ if (basePath.startsWith(sub)) if (file.isDirectory) {
+ sub += '/'
+ file.listFiles().forEach { addTo(it, sub, mode) }
+ } else addPath(sub, mode)
+ return this
+ }
+ fun addAt(file: File, at: String = "", mode: Int = 0b110100100): PathProvider {
+ if (basePath.startsWith(at))
+ if (file.isDirectory) file.listFiles().forEach { addTo(it, at, mode) } else addPath(at, mode)
+ return this
+ }
+}
diff --git a/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PluginContract.kt b/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PluginContract.kt
new file mode 100644
index 00000000..418e5086
--- /dev/null
+++ b/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PluginContract.kt
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * *
+ * Copyright (C) 2017 by Max Lv *
+ * Copyright (C) 2017 by Mygod Studio *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ * *
+ *******************************************************************************/
+
+package org.amnezia.vpn.shadowsocks.plugin
+
+/**
+ * The contract between the plugin provider and host. Contains definitions for the supported actions, extras, etc.
+ *
+ * This class is written in Java to keep Java interoperability.
+ */
+object PluginContract {
+ /**
+ * ContentProvider Action: Used for NativePluginProvider.
+ *
+ * Constant Value: "org.amnezia.vpn.shadowsocks.plugin.ACTION_NATIVE_PLUGIN"
+ */
+ const val ACTION_NATIVE_PLUGIN = "org.amnezia.vpn.shadowsocks.plugin.ACTION_NATIVE_PLUGIN"
+
+ /**
+ * Activity Action: Used for ConfigurationActivity.
+ *
+ * Constant Value: "org.amnezia.vpn.shadowsocks.plugin.ACTION_CONFIGURE"
+ */
+ const val ACTION_CONFIGURE = "org.amnezia.vpn.shadowsocks.plugin.ACTION_CONFIGURE"
+ /**
+ * Activity Action: Used for HelpActivity or HelpCallback.
+ *
+ * Constant Value: "org.amnezia.vpn.shadowsocks.plugin.ACTION_HELP"
+ */
+ const val ACTION_HELP = "org.amnezia.vpn.shadowsocks.plugin.ACTION_HELP"
+
+ /**
+ * The lookup key for a string that provides the plugin entry binary.
+ *
+ * Example: "/data/data/org.amnezia.vpn.shadowsocks.plugin.obfs_local/lib/libobfs-local.so"
+ *
+ * Constant Value: "org.amnezia.vpn.shadowsocks.plugin.EXTRA_ENTRY"
+ */
+ const val EXTRA_ENTRY = "org.amnezia.vpn.shadowsocks.plugin.EXTRA_ENTRY"
+ /**
+ * The lookup key for a string that provides the options as a string.
+ *
+ * Example: "obfs=http;obfs-host=www.baidu.com"
+ *
+ * Constant Value: "org.amnezia.vpn.shadowsocks.plugin.EXTRA_OPTIONS"
+ */
+ const val EXTRA_OPTIONS = "org.amnezia.vpn.shadowsocks.plugin.EXTRA_OPTIONS"
+ /**
+ * The lookup key for a CharSequence that provides user relevant help message.
+ *
+ * Example: "obfs=|tls> Enable obfuscating: HTTP or TLS (Experimental).
+ * obfs-host= Hostname for obfuscating (Experimental)."
+ *
+ * Constant Value: "org.amnezia.vpn.shadowsocks.plugin.EXTRA_HELP_MESSAGE"
+ */
+ const val EXTRA_HELP_MESSAGE = "org.amnezia.vpn.shadowsocks.plugin.EXTRA_HELP_MESSAGE"
+
+ /**
+ * The metadata key to retrieve plugin id. Required for plugins.
+ *
+ * Constant Value: "org.amnezia.vpn.shadowsocks.plugin.id"
+ */
+ const val METADATA_KEY_ID = "org.amnezia.vpn.shadowsocks.plugin.id"
+ /**
+ * The metadata key to retrieve default configuration. Default value is empty.
+ *
+ * Constant Value: "org.amnezia.vpn.shadowsocks.plugin.default_config"
+ */
+ const val METADATA_KEY_DEFAULT_CONFIG = "org.amnezia.vpn.shadowsocks.plugin.default_config"
+
+ const val METHOD_GET_EXECUTABLE = "shadowsocks:getExecutable"
+
+ /** ConfigurationActivity result: fallback to manual edit mode. */
+ const val RESULT_FALLBACK = 1
+
+ /**
+ * Relative to the file to be copied. This column is required.
+ *
+ * Example: "kcptun", "doc/help.txt"
+ *
+ * Type: String
+ */
+ const val COLUMN_PATH = "path"
+ /**
+ * File mode bits. Default value is "644".
+ *
+ * Example: "755"
+ *
+ * Type: String
+ */
+ const val COLUMN_MODE = "mode"
+
+ /**
+ * The scheme for general plugin actions.
+ */
+ const val SCHEME = "plugin"
+ /**
+ * The authority for general plugin actions.
+ */
+ const val AUTHORITY = "org.amnezia.vpn.shadowsocks"
+}
diff --git a/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PluginOptions.kt b/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PluginOptions.kt
new file mode 100644
index 00000000..a11ffdd0
--- /dev/null
+++ b/client/android/shadowsocks/src/main/java/org/amnezia/vpn/shadowsocks/core/widget/PluginOptions.kt
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * *
+ * Copyright (C) 2017 by Max Lv *
+ * Copyright (C) 2017 by Mygod Studio *
+ * *
+ * This program is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ * *
+ *******************************************************************************/
+
+package org.amnezia.vpn.shadowsocks.plugin
+
+import java.util.*
+
+/**
+ * Helper class for processing plugin options.
+ *
+ * Based on: https://github.com/apache/ant/blob/588ce1f/src/main/org/apache/tools/ant/types/Commandline.java
+ */
+class PluginOptions : HashMap {
+ var id = ""
+
+ constructor() : super()
+ constructor(initialCapacity: Int) : super(initialCapacity)
+ constructor(initialCapacity: Int, loadFactor: Float) : super(initialCapacity, loadFactor)
+
+ private constructor(options: String?, parseId: Boolean) : this() {
+ @Suppress("NAME_SHADOWING")
+ var parseId = parseId
+ if (options.isNullOrEmpty()) return
+ check(options.all { !it.isISOControl() }) { "No control characters allowed." }
+ val tokenizer = StringTokenizer("$options;", "\\=;", true)
+ val current = StringBuilder()
+ var key: String? = null
+ while (tokenizer.hasMoreTokens()) when (val nextToken = tokenizer.nextToken()) {
+ "\\" -> current.append(tokenizer.nextToken())
+ "=" -> if (key == null) {
+ key = current.toString()
+ current.setLength(0)
+ } else current.append(nextToken)
+ ";" -> {
+ if (key != null) {
+ put(key, current.toString())
+ key = null
+ } else if (current.isNotEmpty())
+ if (parseId) id = current.toString() else put(current.toString(), null)
+ current.setLength(0)
+ parseId = false
+ }
+ else -> current.append(nextToken)
+ }
+ }
+
+ constructor(options: String?) : this(options, true)
+ constructor(id: String, options: String?) : this(options, false) {
+ this.id = id
+ }
+
+ /**
+ * Put but if value is null or default, the entry is deleted.
+ *
+ * @return Old value before put.
+ */
+ fun putWithDefault(key: String, value: String?, default: String? = null) =
+ if (value == null || value == default) remove(key) else put(key, value)
+
+ private fun append(result: StringBuilder, str: String) = (0 until str.length)
+ .map { str[it] }
+ .forEach {
+ when (it) {
+ '\\', '=', ';' -> {
+ result.append('\\') // intentionally no break
+ result.append(it)
+ }
+ else -> result.append(it)
+ }
+ }
+
+ fun toString(trimId: Boolean): String {
+ val result = StringBuilder()
+ if (!trimId) if (id.isEmpty()) return "" else append(result, id)
+ for ((key, value) in entries) {
+ if (result.isNotEmpty()) result.append(';')
+ append(result, key)
+ if (value != null) {
+ result.append('=')
+ append(result, value)
+ }
+ }
+ return result.toString()
+ }
+
+ override fun toString(): String = toString(true)
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ return javaClass == other?.javaClass && super.equals(other) && id == (other as PluginOptions).id
+ }
+ override fun hashCode(): Int = Objects.hash(super.hashCode(), id)
+}
diff --git a/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libredsocks.so b/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libredsocks.so
new file mode 100644
index 00000000..0ad92678
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libredsocks.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libss-local.so b/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libss-local.so
new file mode 100644
index 00000000..73d14c58
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libss-local.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libtun2socks.so b/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libtun2socks.so
new file mode 100644
index 00000000..36a37f5c
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/arm64-v8a/libtun2socks.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libredsocks.so b/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libredsocks.so
new file mode 100644
index 00000000..86a75fb6
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libredsocks.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libss-local.so b/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libss-local.so
new file mode 100644
index 00000000..4dc0a3e3
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libss-local.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libtun2socks.so b/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libtun2socks.so
new file mode 100644
index 00000000..cb8ad3b2
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/armeabi-v7a/libtun2socks.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/x86/libredsocks.so b/client/android/shadowsocks/src/main/jniLibs/x86/libredsocks.so
new file mode 100644
index 00000000..20007d0a
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/x86/libredsocks.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/x86/libss-local.so b/client/android/shadowsocks/src/main/jniLibs/x86/libss-local.so
new file mode 100644
index 00000000..cbde0c2c
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/x86/libss-local.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/x86/libtun2socks.so b/client/android/shadowsocks/src/main/jniLibs/x86/libtun2socks.so
new file mode 100644
index 00000000..cc7a7f72
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/x86/libtun2socks.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/x86_64/libredsocks.so b/client/android/shadowsocks/src/main/jniLibs/x86_64/libredsocks.so
new file mode 100644
index 00000000..eaa55875
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/x86_64/libredsocks.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/x86_64/libss-local.so b/client/android/shadowsocks/src/main/jniLibs/x86_64/libss-local.so
new file mode 100644
index 00000000..ceca3e7a
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/x86_64/libss-local.so differ
diff --git a/client/android/shadowsocks/src/main/jniLibs/x86_64/libtun2socks.so b/client/android/shadowsocks/src/main/jniLibs/x86_64/libtun2socks.so
new file mode 100644
index 00000000..bd928f76
Binary files /dev/null and b/client/android/shadowsocks/src/main/jniLibs/x86_64/libtun2socks.so differ
diff --git a/client/android/shadowsocks/src/main/res/drawable/ic_amnezia_round.xml b/client/android/shadowsocks/src/main/res/drawable/ic_amnezia_round.xml
new file mode 100644
index 00000000..32df5ca4
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/drawable/ic_amnezia_round.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/client/android/shadowsocks/src/main/res/drawable/ic_navigation_close.xml b/client/android/shadowsocks/src/main/res/drawable/ic_navigation_close.xml
new file mode 100644
index 00000000..7caff12f
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/drawable/ic_navigation_close.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/client/android/shadowsocks/src/main/res/layout/toolbar_light_dark.xml b/client/android/shadowsocks/src/main/res/layout/toolbar_light_dark.xml
new file mode 100644
index 00000000..005fad06
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/layout/toolbar_light_dark.xml
@@ -0,0 +1,12 @@
+
+
diff --git a/client/android/shadowsocks/src/main/res/raw/china_ip_list.txt b/client/android/shadowsocks/src/main/res/raw/china_ip_list.txt
new file mode 100644
index 00000000..3f995146
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/raw/china_ip_list.txt
@@ -0,0 +1,5215 @@
+1.0.1.0/24
+1.0.2.0/23
+1.0.8.0/21
+1.0.32.0/19
+1.1.0.0/24
+1.1.2.0/23
+1.1.4.0/22
+1.1.8.0/21
+1.1.16.0/20
+1.1.32.0/19
+1.2.0.0/23
+1.2.2.0/24
+1.2.4.0/22
+1.2.8.0/21
+1.2.16.0/20
+1.2.32.0/19
+1.2.64.0/18
+1.3.0.0/16
+1.4.1.0/24
+1.4.2.0/23
+1.4.4.0/22
+1.4.8.0/21
+1.4.16.0/20
+1.4.32.0/19
+1.4.64.0/18
+1.8.0.0/16
+1.10.0.0/21
+1.10.8.0/23
+1.10.11.0/24
+1.10.12.0/22
+1.10.16.0/20
+1.10.32.0/19
+1.10.64.0/18
+1.12.0.0/14
+1.24.0.0/13
+1.45.0.0/16
+1.48.0.0/14
+1.56.0.0/13
+1.68.0.0/14
+1.80.0.0/12
+1.116.0.0/14
+1.180.0.0/14
+1.184.0.0/15
+1.188.0.0/14
+1.192.0.0/13
+1.202.0.0/15
+1.204.0.0/14
+8.128.0.0/10
+8.208.0.0/12
+14.0.0.0/21
+14.0.12.0/22
+14.1.0.0/22
+14.1.24.0/22
+14.1.96.0/22
+14.1.108.0/22
+14.16.0.0/12
+14.102.128.0/22
+14.102.156.0/22
+14.102.180.0/22
+14.103.0.0/16
+14.104.0.0/13
+14.112.0.0/12
+14.130.0.0/15
+14.134.0.0/15
+14.144.0.0/12
+14.192.56.0/21
+14.192.76.0/22
+14.196.0.0/15
+14.204.0.0/15
+14.208.0.0/12
+20.134.160.0/20
+20.139.160.0/20
+27.0.128.0/21
+27.0.160.0/21
+27.0.188.0/22
+27.0.204.0/22
+27.0.208.0/21
+27.8.0.0/13
+27.16.0.0/12
+27.34.232.0/21
+27.36.0.0/14
+27.40.0.0/13
+27.50.40.0/21
+27.50.128.0/17
+27.54.72.0/21
+27.54.152.0/21
+27.54.192.0/18
+27.98.208.0/20
+27.98.224.0/19
+27.99.128.0/17
+27.103.0.0/16
+27.106.128.0/18
+27.106.204.0/22
+27.109.32.0/19
+27.109.124.0/22
+27.112.0.0/18
+27.112.80.0/20
+27.112.112.0/21
+27.113.128.0/18
+27.115.0.0/17
+27.116.44.0/22
+27.121.72.0/21
+27.121.120.0/21
+27.123.232.0/22
+27.128.0.0/15
+27.131.220.0/22
+27.144.0.0/16
+27.148.0.0/14
+27.152.0.0/13
+27.184.0.0/13
+27.192.0.0/11
+27.224.0.0/14
+36.0.0.0/22
+36.0.8.0/21
+36.0.16.0/20
+36.0.32.0/19
+36.0.64.0/18
+36.0.128.0/17
+36.1.0.0/16
+36.4.0.0/14
+36.16.0.0/12
+36.32.0.0/14
+36.36.0.0/16
+36.37.0.0/19
+36.37.36.0/23
+36.37.39.0/24
+36.37.40.0/21
+36.37.48.0/20
+36.40.0.0/13
+36.48.0.0/15
+36.51.0.0/16
+36.56.0.0/13
+36.96.0.0/11
+36.128.0.0/10
+36.192.0.0/11
+36.248.0.0/14
+36.254.0.0/16
+36.255.116.0/22
+36.255.128.0/22
+36.255.164.0/22
+36.255.172.0/22
+36.255.176.0/22
+36.255.220.0/22
+39.0.0.0/24
+39.0.2.0/23
+39.0.4.0/22
+39.0.8.0/21
+39.0.16.0/20
+39.0.32.0/19
+39.0.64.0/18
+39.0.128.0/17
+39.64.0.0/11
+39.96.0.0/13
+39.104.0.0/14
+39.108.0.0/16
+39.109.120.0/23
+39.128.0.0/10
+40.0.176.0/20
+40.0.247.0/24
+40.0.248.0/22
+40.0.252.0/23
+40.0.255.0/24
+40.72.0.0/15
+40.125.128.0/17
+40.126.64.0/18
+40.198.10.0/24
+40.198.16.0/21
+40.198.24.0/23
+40.251.225.0/24
+40.251.227.0/24
+42.0.0.0/22
+42.0.8.0/21
+42.0.16.0/21
+42.0.24.0/22
+42.0.32.0/19
+42.0.128.0/17
+42.1.0.0/19
+42.1.32.0/20
+42.1.48.0/21
+42.1.56.0/22
+42.1.128.0/17
+42.4.0.0/14
+42.48.0.0/13
+42.56.0.0/14
+42.62.0.0/17
+42.62.128.0/19
+42.62.160.0/20
+42.62.180.0/22
+42.62.184.0/21
+42.63.0.0/16
+42.80.0.0/15
+42.83.64.0/20
+42.83.80.0/22
+42.83.88.0/21
+42.83.96.0/19
+42.83.128.0/17
+42.84.0.0/14
+42.88.0.0/13
+42.96.64.0/19
+42.96.96.0/21
+42.96.108.0/22
+42.96.112.0/20
+42.96.128.0/17
+42.97.0.0/16
+42.99.0.0/18
+42.99.64.0/19
+42.99.96.0/20
+42.99.112.0/22
+42.99.120.0/21
+42.100.0.0/14
+42.120.0.0/15
+42.122.0.0/16
+42.123.0.0/19
+42.123.36.0/22
+42.123.40.0/21
+42.123.48.0/20
+42.123.64.0/18
+42.123.128.0/17
+42.128.0.0/12
+42.156.0.0/19
+42.156.36.0/22
+42.156.40.0/21
+42.156.48.0/20
+42.156.64.0/18
+42.156.128.0/17
+42.157.0.0/16
+42.158.0.0/15
+42.160.0.0/12
+42.176.0.0/13
+42.184.0.0/15
+42.186.0.0/16
+42.187.0.0/18
+42.187.64.0/19
+42.187.96.0/20
+42.187.112.0/21
+42.187.120.0/22
+42.187.128.0/17
+42.192.0.0/13
+42.201.0.0/17
+42.202.0.0/15
+42.204.0.0/14
+42.208.0.0/12
+42.224.0.0/12
+42.240.0.0/16
+42.242.0.0/15
+42.244.0.0/14
+42.248.0.0/13
+43.224.12.0/22
+43.224.24.0/22
+43.224.44.0/22
+43.224.52.0/22
+43.224.56.0/22
+43.224.64.0/21
+43.224.72.0/22
+43.224.80.0/22
+43.224.100.0/22
+43.224.144.0/22
+43.224.160.0/22
+43.224.176.0/22
+43.224.184.0/22
+43.224.200.0/21
+43.224.208.0/21
+43.224.216.0/22
+43.224.224.0/22
+43.224.240.0/22
+43.225.76.0/22
+43.225.84.0/22
+43.225.120.0/21
+43.225.140.0/22
+43.225.172.0/22
+43.225.180.0/22
+43.225.208.0/22
+43.225.216.0/21
+43.225.224.0/20
+43.225.240.0/21
+43.225.252.0/22
+43.226.32.0/19
+43.226.64.0/19
+43.226.96.0/20
+43.226.112.0/21
+43.226.120.0/22
+43.226.128.0/18
+43.226.192.0/20
+43.226.208.0/21
+43.226.236.0/22
+43.226.240.0/20
+43.227.0.0/21
+43.227.8.0/22
+43.227.32.0/19
+43.227.64.0/19
+43.227.96.0/21
+43.227.104.0/22
+43.227.136.0/21
+43.227.144.0/22
+43.227.152.0/21
+43.227.160.0/20
+43.227.176.0/21
+43.227.188.0/22
+43.227.192.0/19
+43.227.232.0/22
+43.227.248.0/21
+43.228.0.0/18
+43.228.64.0/21
+43.228.76.0/22
+43.228.100.0/22
+43.228.116.0/22
+43.228.120.0/22
+43.228.132.0/22
+43.228.136.0/22
+43.228.148.0/22
+43.228.152.0/22
+43.228.188.0/22
+43.229.16.0/22
+43.229.40.0/22
+43.229.48.0/22
+43.229.56.0/22
+43.229.96.0/22
+43.229.120.0/22
+43.229.136.0/21
+43.229.144.0/22
+43.229.168.0/21
+43.229.176.0/20
+43.229.192.0/21
+43.229.216.0/21
+43.229.232.0/21
+43.230.20.0/22
+43.230.32.0/22
+43.230.68.0/22
+43.230.72.0/22
+43.230.84.0/22
+43.230.124.0/22
+43.230.136.0/22
+43.230.168.0/22
+43.230.220.0/22
+43.230.224.0/19
+43.231.12.0/22
+43.231.32.0/20
+43.231.80.0/20
+43.231.96.0/20
+43.231.136.0/21
+43.231.144.0/20
+43.231.160.0/20
+43.231.176.0/21
+43.236.0.0/15
+43.238.0.0/16
+43.239.0.0/19
+43.239.32.0/20
+43.239.48.0/22
+43.239.116.0/22
+43.239.120.0/22
+43.239.172.0/22
+43.239.176.0/22
+43.240.0.0/22
+43.240.48.0/22
+43.240.56.0/21
+43.240.68.0/22
+43.240.72.0/21
+43.240.84.0/22
+43.240.124.0/22
+43.240.128.0/21
+43.240.136.0/22
+43.240.156.0/22
+43.240.160.0/19
+43.240.192.0/19
+43.240.236.0/22
+43.240.240.0/20
+43.241.0.0/20
+43.241.16.0/21
+43.241.48.0/22
+43.241.76.0/22
+43.241.80.0/20
+43.241.112.0/22
+43.241.168.0/21
+43.241.176.0/21
+43.241.184.0/22
+43.241.196.0/22
+43.241.208.0/20
+43.241.224.0/20
+43.241.240.0/22
+43.241.248.0/21
+43.242.8.0/21
+43.242.16.0/20
+43.242.44.0/22
+43.242.48.0/20
+43.242.64.0/22
+43.242.72.0/21
+43.242.80.0/20
+43.242.96.0/22
+43.242.144.0/20
+43.242.160.0/21
+43.242.168.0/22
+43.242.180.0/22
+43.242.188.0/22
+43.242.192.0/21
+43.242.204.0/22
+43.242.216.0/21
+43.242.252.0/22
+43.243.4.0/22
+43.243.8.0/21
+43.243.16.0/22
+43.243.24.0/22
+43.243.88.0/22
+43.243.128.0/22
+43.243.136.0/22
+43.243.144.0/21
+43.243.156.0/22
+43.243.168.0/22
+43.243.180.0/22
+43.243.188.0/22
+43.243.228.0/22
+43.243.232.0/22
+43.243.244.0/22
+43.246.0.0/18
+43.246.64.0/19
+43.246.96.0/22
+43.246.112.0/22
+43.246.212.0/22
+43.246.228.0/22
+43.247.4.0/22
+43.247.8.0/22
+43.247.44.0/22
+43.247.48.0/22
+43.247.68.0/22
+43.247.76.0/22
+43.247.84.0/22
+43.247.88.0/21
+43.247.96.0/21
+43.247.108.0/22
+43.247.112.0/22
+43.247.148.0/22
+43.247.152.0/22
+43.247.176.0/20
+43.247.196.0/22
+43.247.200.0/21
+43.247.208.0/20
+43.247.224.0/19
+43.248.0.0/21
+43.248.20.0/22
+43.248.28.0/22
+43.248.48.0/22
+43.248.76.0/22
+43.248.80.0/20
+43.248.96.0/19
+43.248.128.0/20
+43.248.144.0/21
+43.248.176.0/20
+43.248.192.0/20
+43.248.208.0/22
+43.248.228.0/22
+43.248.232.0/22
+43.248.244.0/22
+43.249.0.0/21
+43.249.8.0/22
+43.249.24.0/22
+43.249.120.0/22
+43.249.132.0/22
+43.249.136.0/22
+43.249.144.0/20
+43.249.160.0/21
+43.249.168.0/22
+43.249.192.0/22
+43.249.236.0/22
+43.250.4.0/22
+43.250.12.0/22
+43.250.16.0/21
+43.250.28.0/22
+43.250.32.0/21
+43.250.72.0/22
+43.250.96.0/20
+43.250.112.0/21
+43.250.128.0/22
+43.250.144.0/21
+43.250.160.0/22
+43.250.168.0/21
+43.250.176.0/22
+43.250.200.0/22
+43.250.212.0/22
+43.250.216.0/21
+43.250.236.0/22
+43.250.244.0/22
+43.251.4.0/22
+43.251.8.0/21
+43.251.36.0/22
+43.251.100.0/22
+43.251.116.0/22
+43.251.192.0/22
+43.251.232.0/21
+43.251.244.0/22
+43.252.40.0/22
+43.252.48.0/22
+43.252.56.0/22
+43.252.224.0/22
+43.254.0.0/21
+43.254.8.0/22
+43.254.24.0/22
+43.254.36.0/22
+43.254.44.0/22
+43.254.52.0/22
+43.254.64.0/22
+43.254.72.0/22
+43.254.84.0/22
+43.254.88.0/21
+43.254.100.0/22
+43.254.104.0/22
+43.254.112.0/21
+43.254.128.0/22
+43.254.136.0/21
+43.254.144.0/20
+43.254.168.0/21
+43.254.180.0/22
+43.254.184.0/21
+43.254.192.0/21
+43.254.200.0/22
+43.254.208.0/22
+43.254.220.0/22
+43.254.224.0/20
+43.254.240.0/22
+43.254.248.0/21
+43.255.0.0/21
+43.255.8.0/22
+43.255.16.0/22
+43.255.48.0/22
+43.255.64.0/20
+43.255.84.0/22
+43.255.96.0/22
+43.255.108.0/22
+43.255.144.0/22
+43.255.168.0/22
+43.255.176.0/22
+43.255.184.0/22
+43.255.192.0/22
+43.255.200.0/21
+43.255.208.0/21
+43.255.224.0/21
+43.255.232.0/22
+43.255.244.0/22
+45.40.192.0/18
+45.65.16.0/20
+45.112.132.0/22
+45.112.188.0/22
+45.112.208.0/20
+45.112.228.0/22
+45.112.232.0/21
+45.113.12.0/22
+45.113.16.0/20
+45.113.40.0/22
+45.113.52.0/22
+45.113.56.0/22
+45.113.72.0/22
+45.113.144.0/21
+45.113.168.0/22
+45.113.176.0/22
+45.113.184.0/22
+45.113.200.0/21
+45.113.208.0/20
+45.113.228.0/22
+45.113.240.0/22
+45.113.252.0/22
+45.114.0.0/22
+45.114.12.0/22
+45.114.32.0/22
+45.114.40.0/22
+45.114.52.0/22
+45.114.96.0/22
+45.114.104.0/21
+45.114.124.0/22
+45.114.136.0/22
+45.114.196.0/22
+45.114.200.0/22
+45.114.228.0/22
+45.114.236.0/22
+45.114.252.0/22
+45.115.44.0/22
+45.115.100.0/22
+45.115.120.0/22
+45.115.132.0/22
+45.115.144.0/22
+45.115.156.0/22
+45.115.164.0/22
+45.115.200.0/22
+45.115.212.0/22
+45.115.216.0/22
+45.115.228.0/22
+45.115.236.0/22
+45.115.244.0/22
+45.115.248.0/22
+45.116.12.0/22
+45.116.16.0/21
+45.116.24.0/22
+45.116.32.0/21
+45.116.52.0/22
+45.116.96.0/21
+45.116.140.0/22
+45.116.152.0/22
+45.116.208.0/22
+45.117.8.0/22
+45.117.20.0/22
+45.117.68.0/22
+45.117.124.0/22
+45.117.252.0/22
+45.119.52.0/22
+45.119.60.0/22
+45.119.64.0/21
+45.119.72.0/22
+45.119.104.0/22
+45.119.116.0/22
+45.119.232.0/22
+45.120.100.0/22
+45.120.140.0/22
+45.120.164.0/22
+45.120.220.0/22
+45.120.240.0/22
+45.121.20.0/22
+45.121.52.0/22
+45.121.64.0/21
+45.121.72.0/22
+45.121.92.0/22
+45.121.96.0/22
+45.121.104.0/22
+45.121.172.0/22
+45.121.176.0/22
+45.121.212.0/22
+45.121.240.0/20
+45.122.0.0/19
+45.122.32.0/21
+45.122.40.0/22
+45.122.60.0/22
+45.122.64.0/19
+45.122.96.0/20
+45.122.112.0/21
+45.122.160.0/19
+45.122.192.0/20
+45.122.208.0/21
+45.122.216.0/22
+45.123.28.0/22
+45.123.32.0/21
+45.123.44.0/22
+45.123.48.0/20
+45.123.64.0/20
+45.123.80.0/21
+45.123.88.0/22
+45.123.120.0/22
+45.123.128.0/21
+45.123.136.0/22
+45.123.148.0/22
+45.123.152.0/21
+45.123.164.0/22
+45.123.168.0/21
+45.123.176.0/21
+45.123.184.0/22
+45.123.204.0/22
+45.123.212.0/22
+45.123.224.0/19
+45.124.0.0/22
+45.124.20.0/22
+45.124.28.0/22
+45.124.32.0/21
+45.124.44.0/22
+45.124.68.0/22
+45.124.76.0/22
+45.124.80.0/22
+45.124.100.0/22
+45.124.124.0/22
+45.124.172.0/22
+45.124.176.0/22
+45.124.208.0/22
+45.124.248.0/21
+45.125.12.0/22
+45.125.16.0/22
+45.125.24.0/21
+45.125.32.0/22
+45.125.44.0/22
+45.125.52.0/22
+45.125.56.0/22
+45.125.76.0/22
+45.125.80.0/20
+45.125.96.0/21
+45.125.104.0/22
+45.125.136.0/22
+45.126.48.0/21
+45.126.100.0/22
+45.126.108.0/22
+45.126.112.0/21
+45.126.120.0/22
+45.126.212.0/22
+45.126.220.0/22
+45.127.8.0/21
+45.127.96.0/22
+45.127.116.0/22
+45.127.124.0/22
+45.127.128.0/22
+45.127.144.0/21
+45.127.156.0/22
+45.127.216.0/22
+45.248.8.0/22
+45.248.80.0/21
+45.248.88.0/22
+45.248.96.0/20
+45.248.128.0/21
+45.248.204.0/22
+45.248.208.0/20
+45.248.224.0/19
+45.249.0.0/21
+45.249.12.0/22
+45.249.16.0/20
+45.249.32.0/21
+45.249.92.0/22
+45.249.112.0/22
+45.249.180.0/22
+45.249.188.0/22
+45.249.192.0/20
+45.249.208.0/21
+45.250.12.0/22
+45.250.16.0/22
+45.250.28.0/22
+45.250.32.0/21
+45.250.40.0/22
+45.250.76.0/22
+45.250.80.0/20
+45.250.96.0/22
+45.250.104.0/21
+45.250.112.0/20
+45.250.128.0/20
+45.250.144.0/21
+45.250.152.0/22
+45.250.164.0/22
+45.250.180.0/22
+45.250.184.0/21
+45.250.192.0/22
+45.251.0.0/22
+45.251.8.0/22
+45.251.16.0/21
+45.251.52.0/22
+45.251.84.0/22
+45.251.88.0/21
+45.251.96.0/21
+45.251.120.0/21
+45.251.136.0/21
+45.251.144.0/20
+45.251.160.0/19
+45.251.192.0/19
+45.251.224.0/22
+45.252.0.0/19
+45.252.32.0/20
+45.252.48.0/22
+45.252.60.0/22
+45.252.84.0/22
+45.252.88.0/21
+45.252.96.0/19
+45.252.128.0/19
+45.252.160.0/20
+45.252.176.0/22
+45.252.192.0/19
+45.252.224.0/21
+45.252.232.0/22
+45.253.0.0/18
+45.253.64.0/20
+45.253.80.0/21
+45.253.92.0/22
+45.253.96.0/20
+45.253.112.0/21
+45.253.120.0/22
+45.253.130.0/23
+45.253.132.0/22
+45.253.136.0/21
+45.253.144.0/20
+45.253.160.0/19
+45.253.192.0/18
+45.254.0.0/19
+45.254.40.0/22
+45.254.48.0/20
+45.254.64.0/18
+45.254.128.0/18
+45.254.192.0/19
+45.254.224.0/21
+45.254.236.0/22
+45.254.240.0/22
+45.254.248.0/22
+45.255.0.0/17
+45.255.132.0/22
+45.255.136.0/21
+45.255.144.0/20
+45.255.160.0/19
+45.255.192.0/19
+45.255.224.0/20
+45.255.240.0/21
+45.255.248.0/22
+46.61.179.170/31
+46.248.24.0/23
+47.92.0.0/14
+47.96.0.0/11
+49.4.0.0/14
+49.51.0.0/16
+49.52.0.0/14
+49.64.0.0/11
+49.112.0.0/13
+49.120.0.0/14
+49.128.0.0/24
+49.128.2.0/23
+49.128.4.0/22
+49.140.0.0/15
+49.152.0.0/14
+49.208.0.0/14
+49.220.0.0/14
+49.232.0.0/14
+49.239.0.0/18
+49.239.192.0/18
+49.246.224.0/19
+52.80.0.0/14
+52.94.249.0/27
+52.95.216.104/30
+52.130.0.0/15
+54.222.0.0/15
+54.231.208.0/20
+54.240.224.0/24
+57.92.96.0/20
+58.14.0.0/15
+58.16.0.0/13
+58.24.0.0/15
+58.30.0.0/15
+58.32.0.0/11
+58.65.232.0/21
+58.66.0.0/15
+58.68.128.0/17
+58.82.0.0/17
+58.83.0.0/16
+58.87.64.0/18
+58.99.128.0/17
+58.100.0.0/15
+58.116.0.0/14
+58.128.0.0/13
+58.144.0.0/16
+58.154.0.0/15
+58.192.0.0/11
+58.240.0.0/12
+59.32.0.0/11
+59.64.0.0/12
+59.80.0.0/14
+59.107.0.0/16
+59.108.0.0/14
+59.151.0.0/17
+59.152.16.0/20
+59.152.32.0/21
+59.152.64.0/20
+59.152.112.0/21
+59.153.4.0/22
+59.153.32.0/22
+59.153.60.0/22
+59.153.64.0/21
+59.153.72.0/22
+59.153.92.0/22
+59.153.116.0/22
+59.153.136.0/22
+59.153.152.0/21
+59.153.164.0/22
+59.153.168.0/21
+59.153.176.0/20
+59.153.192.0/22
+59.155.0.0/16
+59.172.0.0/14
+59.191.0.0/17
+59.191.240.0/20
+59.192.0.0/10
+60.0.0.0/11
+60.55.0.0/16
+60.63.0.0/16
+60.160.0.0/11
+60.194.0.0/15
+60.200.0.0/13
+60.208.0.0/12
+60.232.0.0/15
+60.235.0.0/16
+60.245.128.0/17
+60.247.0.0/16
+60.252.0.0/16
+60.253.128.0/17
+60.255.0.0/16
+61.4.80.0/20
+61.4.176.0/20
+61.8.160.0/20
+61.14.4.0/22
+61.14.212.0/22
+61.14.216.0/21
+61.14.240.0/21
+61.28.0.0/17
+61.29.128.0/17
+61.45.128.0/18
+61.45.224.0/20
+61.47.128.0/18
+61.48.0.0/13
+61.87.192.0/18
+61.128.0.0/10
+61.213.145.106/32
+61.232.0.0/14
+61.236.0.0/15
+61.240.0.0/14
+62.234.0.0/16
+64.85.27.0/24
+68.79.0.0/18
+69.230.192.0/18
+69.231.128.0/18
+69.234.192.0/18
+69.235.128.0/18
+71.131.192.0/18
+71.132.0.0/18
+71.136.64.0/18
+71.137.0.0/18
+72.163.248.0/22
+81.68.0.0/14
+82.156.0.0/15
+87.254.207.0/24
+93.183.14.0/24
+93.183.18.0/24
+94.191.0.0/17
+101.0.0.0/22
+101.1.0.0/22
+101.2.172.0/22
+101.4.0.0/14
+101.16.0.0/12
+101.32.0.0/12
+101.48.0.0/15
+101.50.8.0/21
+101.50.56.0/22
+101.52.0.0/16
+101.53.100.0/22
+101.54.0.0/16
+101.55.224.0/21
+101.64.0.0/13
+101.72.0.0/14
+101.76.0.0/15
+101.78.0.0/22
+101.78.32.0/19
+101.80.0.0/12
+101.96.0.0/21
+101.96.8.0/22
+101.96.16.0/20
+101.96.128.0/17
+101.99.96.0/19
+101.101.64.0/19
+101.101.100.0/24
+101.101.102.0/23
+101.101.104.0/21
+101.101.112.0/20
+101.102.64.0/19
+101.102.100.0/23
+101.102.102.0/24
+101.102.104.0/21
+101.102.112.0/20
+101.104.0.0/14
+101.110.64.0/19
+101.110.96.0/20
+101.110.116.0/22
+101.110.120.0/21
+101.120.0.0/14
+101.124.0.0/15
+101.126.0.0/16
+101.128.0.0/22
+101.128.8.0/21
+101.128.16.0/20
+101.128.32.0/19
+101.129.0.0/16
+101.130.0.0/15
+101.132.0.0/14
+101.144.0.0/12
+101.192.0.0/13
+101.200.0.0/15
+101.203.128.0/19
+101.203.160.0/21
+101.203.172.0/22
+101.203.176.0/20
+101.204.0.0/14
+101.224.0.0/13
+101.232.0.0/15
+101.234.64.0/21
+101.234.76.0/22
+101.234.80.0/20
+101.234.96.0/19
+101.236.0.0/14
+101.240.0.0/13
+101.248.0.0/15
+101.251.0.0/22
+101.251.8.0/21
+101.251.16.0/20
+101.251.32.0/19
+101.251.64.0/18
+101.251.128.0/17
+101.252.0.0/15
+101.254.0.0/16
+103.1.8.0/22
+103.1.20.0/22
+103.1.24.0/22
+103.1.72.0/22
+103.1.88.0/22
+103.1.168.0/22
+103.2.108.0/22
+103.2.156.0/22
+103.2.164.0/22
+103.2.200.0/21
+103.2.208.0/21
+103.3.84.0/22
+103.3.88.0/21
+103.3.96.0/19
+103.3.128.0/20
+103.3.148.0/22
+103.3.152.0/21
+103.4.56.0/22
+103.4.168.0/22
+103.4.184.0/22
+103.4.224.0/22
+103.5.36.0/22
+103.5.52.0/22
+103.5.56.0/22
+103.5.152.0/22
+103.5.168.0/22
+103.5.192.0/22
+103.5.252.0/22
+103.6.76.0/22
+103.6.108.0/22
+103.6.120.0/22
+103.6.220.0/22
+103.6.228.0/22
+103.7.4.0/22
+103.7.28.0/22
+103.7.140.0/22
+103.7.212.0/22
+103.7.216.0/21
+103.8.0.0/21
+103.8.8.0/22
+103.8.32.0/22
+103.8.52.0/22
+103.8.68.0/22
+103.8.108.0/22
+103.8.156.0/22
+103.8.200.0/21
+103.8.220.0/22
+103.9.8.0/22
+103.9.24.0/22
+103.9.108.0/22
+103.9.152.0/22
+103.9.192.0/22
+103.9.248.0/21
+103.10.0.0/22
+103.10.16.0/22
+103.10.84.0/22
+103.10.111.0/24
+103.10.140.0/22
+103.11.16.0/22
+103.11.168.0/22
+103.11.180.0/22
+103.12.32.0/22
+103.12.68.0/22
+103.12.92.0/22
+103.12.136.0/22
+103.12.184.0/22
+103.12.232.0/22
+103.13.12.0/22
+103.13.72.0/23
+103.13.124.0/22
+103.13.144.0/22
+103.13.196.0/22
+103.13.220.0/22
+103.13.244.0/22
+103.14.32.0/22
+103.14.84.0/22
+103.14.100.0/22
+103.14.132.0/22
+103.14.136.0/22
+103.14.156.0/22
+103.14.240.0/22
+103.15.4.0/22
+103.15.8.0/22
+103.15.16.0/22
+103.15.96.0/22
+103.15.200.0/22
+103.16.52.0/22
+103.16.80.0/21
+103.16.88.0/22
+103.16.108.0/22
+103.16.124.0/22
+103.17.40.0/22
+103.17.64.0/22
+103.17.120.0/22
+103.17.136.0/22
+103.17.160.0/22
+103.17.204.0/22
+103.17.228.0/22
+103.18.192.0/22
+103.18.208.0/21
+103.18.224.0/22
+103.19.0.0/22
+103.19.12.0/22
+103.19.40.0/21
+103.19.64.0/21
+103.19.72.0/22
+103.19.232.0/22
+103.20.12.0/22
+103.20.32.0/22
+103.20.44.0/22
+103.20.68.0/22
+103.20.112.0/22
+103.20.128.0/22
+103.20.160.0/22
+103.20.248.0/22
+103.21.112.0/21
+103.21.136.0/21
+103.21.176.0/22
+103.21.208.0/22
+103.21.240.0/22
+103.22.0.0/18
+103.22.64.0/19
+103.22.100.0/22
+103.22.104.0/21
+103.22.112.0/20
+103.22.188.0/22
+103.22.228.0/22
+103.22.252.0/22
+103.23.8.0/22
+103.23.56.0/22
+103.23.160.0/21
+103.23.176.0/22
+103.23.228.0/22
+103.24.24.0/22
+103.24.116.0/22
+103.24.128.0/22
+103.24.144.0/22
+103.24.176.0/22
+103.24.184.0/22
+103.24.220.0/22
+103.24.228.0/22
+103.24.248.0/21
+103.25.8.0/23
+103.25.20.0/22
+103.25.24.0/21
+103.25.32.0/21
+103.25.40.0/22
+103.25.48.0/22
+103.25.64.0/21
+103.25.148.0/22
+103.25.156.0/22
+103.25.216.0/22
+103.26.0.0/22
+103.26.64.0/22
+103.26.76.0/22
+103.26.116.0/22
+103.26.132.0/22
+103.26.156.0/22
+103.26.160.0/22
+103.26.228.0/22
+103.26.240.0/22
+103.27.4.0/22
+103.27.12.0/22
+103.27.24.0/22
+103.27.56.0/22
+103.27.96.0/22
+103.27.184.0/22
+103.27.208.0/21
+103.27.240.0/22
+103.28.4.0/22
+103.28.8.0/22
+103.28.184.0/22
+103.28.204.0/22
+103.28.212.0/22
+103.29.16.0/22
+103.29.128.0/21
+103.29.136.0/22
+103.30.20.0/22
+103.30.96.0/22
+103.30.148.0/22
+103.30.200.0/22
+103.30.228.0/22
+103.30.234.0/24
+103.30.236.0/22
+103.31.0.0/22
+103.31.48.0/20
+103.31.64.0/21
+103.31.72.0/24
+103.31.148.0/22
+103.31.160.0/22
+103.31.168.0/22
+103.31.200.0/22
+103.31.236.0/22
+103.32.0.0/15
+103.34.0.0/16
+103.35.0.0/19
+103.35.32.0/20
+103.35.48.0/22
+103.35.104.0/22
+103.35.116.0/22
+103.35.180.0/22
+103.35.200.0/22
+103.35.220.0/22
+103.36.20.0/22
+103.36.28.0/22
+103.36.36.0/22
+103.36.56.0/21
+103.36.64.0/22
+103.36.72.0/22
+103.36.96.0/22
+103.36.132.0/22
+103.36.136.0/22
+103.36.160.0/19
+103.36.192.0/19
+103.36.224.0/20
+103.36.240.0/21
+103.37.0.0/22
+103.37.12.0/22
+103.37.16.0/22
+103.37.24.0/22
+103.37.44.0/22
+103.37.52.0/22
+103.37.56.0/22
+103.37.72.0/22
+103.37.100.0/22
+103.37.104.0/22
+103.37.124.0/22
+103.37.136.0/21
+103.37.144.0/20
+103.37.160.0/21
+103.37.172.0/22
+103.37.176.0/22
+103.37.188.0/22
+103.37.208.0/20
+103.37.248.0/21
+103.38.0.0/22
+103.38.32.0/22
+103.38.40.0/21
+103.38.56.0/22
+103.38.76.0/22
+103.38.84.0/22
+103.38.92.0/22
+103.38.96.0/22
+103.38.116.0/22
+103.38.132.0/22
+103.38.140.0/22
+103.38.220.0/22
+103.38.224.0/21
+103.38.232.0/22
+103.38.252.0/22
+103.39.16.0/22
+103.39.64.0/22
+103.39.88.0/22
+103.39.100.0/22
+103.39.104.0/21
+103.39.160.0/19
+103.39.200.0/21
+103.39.208.0/20
+103.39.224.0/21
+103.39.232.0/22
+103.40.12.0/22
+103.40.16.0/20
+103.40.32.0/20
+103.40.88.0/22
+103.40.100.0/22
+103.40.112.0/22
+103.40.192.0/22
+103.40.212.0/22
+103.40.220.0/22
+103.40.228.0/22
+103.40.232.0/21
+103.40.240.0/20
+103.41.0.0/22
+103.41.16.0/22
+103.41.52.0/22
+103.41.140.0/22
+103.41.148.0/22
+103.41.152.0/22
+103.41.160.0/21
+103.41.220.0/22
+103.41.224.0/21
+103.41.232.0/22
+103.42.8.0/22
+103.42.24.0/21
+103.42.32.0/22
+103.42.64.0/21
+103.42.76.0/22
+103.42.104.0/22
+103.42.180.0/22
+103.42.232.0/22
+103.43.16.0/22
+103.43.26.0/23
+103.43.84.0/22
+103.43.96.0/21
+103.43.104.0/22
+103.43.124.0/22
+103.43.184.0/22
+103.43.192.0/21
+103.43.208.0/22
+103.43.220.0/22
+103.43.224.0/22
+103.43.232.0/22
+103.43.240.0/22
+103.44.56.0/22
+103.44.80.0/22
+103.44.88.0/22
+103.44.120.0/21
+103.44.132.0/22
+103.44.144.0/22
+103.44.152.0/22
+103.44.168.0/22
+103.44.176.0/20
+103.44.192.0/20
+103.44.224.0/22
+103.44.236.0/22
+103.44.240.0/20
+103.45.0.0/18
+103.45.72.0/21
+103.45.80.0/20
+103.45.96.0/19
+103.45.128.0/18
+103.45.192.0/19
+103.45.224.0/22
+103.45.248.0/22
+103.46.0.0/22
+103.46.12.0/22
+103.46.16.0/20
+103.46.32.0/19
+103.46.64.0/18
+103.46.128.0/21
+103.46.136.0/22
+103.46.152.0/21
+103.46.160.0/20
+103.46.176.0/21
+103.46.244.0/22
+103.46.248.0/22
+103.47.4.0/22
+103.47.20.0/22
+103.47.36.0/22
+103.47.40.0/22
+103.47.48.0/22
+103.47.80.0/22
+103.47.96.0/22
+103.47.108.0/22
+103.47.116.0/22
+103.47.120.0/22
+103.47.136.0/21
+103.47.212.0/22
+103.48.20.0/22
+103.48.52.0/22
+103.48.92.0/22
+103.48.144.0/20
+103.48.202.0/23
+103.48.216.0/21
+103.48.224.0/20
+103.48.240.0/21
+103.49.12.0/22
+103.49.20.0/22
+103.49.72.0/21
+103.49.92.0/22
+103.49.96.0/22
+103.49.108.0/22
+103.49.128.0/22
+103.49.176.0/21
+103.49.196.0/22
+103.49.248.0/22
+103.50.36.0/22
+103.50.44.0/22
+103.50.48.0/20
+103.50.64.0/21
+103.50.72.0/22
+103.50.92.0/22
+103.50.108.0/22
+103.50.112.0/20
+103.50.132.0/22
+103.50.136.0/21
+103.50.172.0/22
+103.50.176.0/20
+103.50.192.0/21
+103.50.200.0/22
+103.50.220.0/22
+103.50.224.0/20
+103.50.240.0/21
+103.50.248.0/22
+103.52.40.0/22
+103.52.72.0/21
+103.52.80.0/21
+103.52.96.0/21
+103.52.104.0/22
+103.52.160.0/21
+103.52.172.0/22
+103.52.176.0/22
+103.52.184.0/22
+103.52.196.0/22
+103.53.4.0/22
+103.53.64.0/21
+103.53.92.0/22
+103.53.100.0/22
+103.53.124.0/22
+103.53.128.0/20
+103.53.144.0/22
+103.53.160.0/22
+103.53.180.0/22
+103.53.204.0/22
+103.53.208.0/21
+103.53.216.0/22
+103.53.236.0/22
+103.53.248.0/22
+103.54.8.0/22
+103.54.48.0/22
+103.54.60.0/22
+103.54.160.0/21
+103.54.212.0/22
+103.54.228.0/22
+103.54.240.0/22
+103.55.24.0/22
+103.55.80.0/22
+103.55.120.0/22
+103.55.152.0/22
+103.55.172.0/22
+103.55.204.0/22
+103.55.208.0/22
+103.55.228.0/22
+103.55.236.0/22
+103.55.240.0/22
+103.56.8.0/22
+103.56.16.0/21
+103.56.32.0/22
+103.56.52.0/22
+103.56.56.0/21
+103.56.72.0/21
+103.56.140.0/22
+103.56.152.0/22
+103.56.184.0/22
+103.56.200.0/22
+103.57.12.0/22
+103.57.52.0/22
+103.57.56.0/22
+103.57.76.0/22
+103.57.136.0/22
+103.57.196.0/22
+103.58.24.0/22
+103.58.182.0/23
+103.59.76.0/22
+103.59.100.0/22
+103.59.112.0/20
+103.59.128.0/22
+103.59.148.0/22
+103.59.164.0/22
+103.60.32.0/22
+103.60.44.0/22
+103.60.164.0/22
+103.60.228.0/22
+103.60.236.0/22
+103.61.60.0/22
+103.61.104.0/22
+103.61.140.0/22
+103.61.152.0/21
+103.61.160.0/22
+103.61.172.0/22
+103.61.176.0/22
+103.61.184.0/21
+103.62.24.0/22
+103.62.52.0/22
+103.62.72.0/21
+103.62.80.0/21
+103.62.88.0/22
+103.62.96.0/19
+103.62.128.0/21
+103.62.156.0/22
+103.62.160.0/19
+103.62.192.0/22
+103.62.204.0/22
+103.62.208.0/20
+103.62.224.0/22
+103.63.32.0/19
+103.63.64.0/20
+103.63.80.0/21
+103.63.88.0/22
+103.63.140.0/22
+103.63.144.0/22
+103.63.152.0/22
+103.63.160.0/20
+103.63.176.0/21
+103.63.184.0/22
+103.63.192.0/20
+103.63.208.0/22
+103.63.240.0/20
+103.64.0.0/21
+103.64.24.0/21
+103.64.32.0/19
+103.64.64.0/18
+103.64.140.0/22
+103.64.144.0/22
+103.64.152.0/21
+103.64.160.0/19
+103.64.192.0/18
+103.65.0.0/20
+103.65.16.0/22
+103.65.36.0/22
+103.65.40.0/22
+103.65.48.0/20
+103.65.64.0/19
+103.65.100.0/22
+103.65.104.0/21
+103.65.112.0/20
+103.65.128.0/21
+103.65.136.0/22
+103.65.144.0/20
+103.65.160.0/20
+103.66.32.0/22
+103.66.40.0/22
+103.66.92.0/22
+103.66.108.0/22
+103.66.200.0/22
+103.66.216.0/22
+103.66.240.0/20
+103.67.0.0/21
+103.67.8.0/22
+103.67.40.0/21
+103.67.48.0/20
+103.67.64.0/18
+103.67.128.0/20
+103.67.144.0/21
+103.67.172.0/22
+103.67.192.0/22
+103.67.212.0/22
+103.67.252.0/22
+103.68.64.0/22
+103.68.88.0/22
+103.68.100.0/22
+103.68.128.0/22
+103.68.192.0/22
+103.69.16.0/22
+103.69.116.0/22
+103.69.132.0/22
+103.69.152.0/22
+103.69.212.0/22
+103.70.8.0/22
+103.70.148.0/22
+103.70.184.0/22
+103.70.220.0/22
+103.70.224.0/22
+103.70.236.0/22
+103.70.252.0/22
+103.71.0.0/22
+103.71.32.0/22
+103.71.48.0/22
+103.71.68.0/22
+103.71.72.0/22
+103.71.80.0/21
+103.71.88.0/22
+103.71.120.0/21
+103.71.128.0/22
+103.71.144.0/22
+103.71.196.0/22
+103.71.200.0/22
+103.71.232.0/22
+103.72.12.0/22
+103.72.16.0/20
+103.72.32.0/20
+103.72.48.0/21
+103.72.112.0/20
+103.72.128.0/21
+103.72.144.0/21
+103.72.172.0/22
+103.72.180.0/22
+103.72.224.0/19
+103.73.0.0/19
+103.73.48.0/22
+103.73.88.0/22
+103.73.96.0/22
+103.73.116.0/22
+103.73.120.0/22
+103.73.128.0/20
+103.73.144.0/22
+103.73.168.0/22
+103.73.176.0/22
+103.73.204.0/22
+103.73.208.0/22
+103.73.240.0/21
+103.73.248.0/22
+103.74.24.0/21
+103.74.32.0/20
+103.74.48.0/22
+103.74.56.0/21
+103.74.80.0/22
+103.74.124.0/22
+103.74.148.0/22
+103.74.152.0/21
+103.74.204.0/22
+103.74.232.0/22
+103.75.16.0/22
+103.75.87.0/24
+103.75.88.0/21
+103.75.104.0/21
+103.75.112.0/22
+103.75.120.0/22
+103.75.128.0/22
+103.75.144.0/22
+103.75.152.0/22
+103.75.236.0/24
+103.76.60.0/22
+103.76.64.0/21
+103.76.72.0/22
+103.76.84.0/22
+103.76.92.0/22
+103.76.104.0/22
+103.76.216.0/21
+103.76.224.0/22
+103.77.28.0/22
+103.77.52.0/22
+103.77.56.0/22
+103.77.72.0/22
+103.77.88.0/21
+103.77.132.0/22
+103.77.148.0/22
+103.77.220.0/22
+103.78.56.0/21
+103.78.64.0/21
+103.78.124.0/22
+103.78.172.0/22
+103.78.176.0/22
+103.78.196.0/22
+103.78.228.0/22
+103.79.24.0/21
+103.79.36.0/22
+103.79.40.0/21
+103.79.52.0/22
+103.79.56.0/21
+103.79.64.0/21
+103.79.80.0/21
+103.79.120.0/22
+103.79.136.0/22
+103.79.188.0/22
+103.79.192.0/20
+103.79.208.0/21
+103.79.240.0/22
+103.80.24.0/21
+103.80.44.0/22
+103.80.72.0/22
+103.80.176.0/21
+103.80.184.0/22
+103.80.192.0/22
+103.80.200.0/22
+103.80.232.0/22
+103.81.4.0/22
+103.81.8.0/22
+103.81.16.0/21
+103.81.44.0/22
+103.81.48.0/22
+103.81.96.0/22
+103.81.120.0/22
+103.81.148.0/22
+103.81.164.0/22
+103.81.168.0/22
+103.81.183.0/24
+103.81.184.0/22
+103.81.200.0/22
+103.81.232.0/22
+103.82.52.0/22
+103.82.60.0/22
+103.82.68.0/22
+103.82.84.0/22
+103.82.104.0/22
+103.82.224.0/22
+103.82.236.0/22
+103.83.44.0/22
+103.83.52.0/22
+103.83.60.0/22
+103.83.64.0/22
+103.83.72.0/22
+103.83.112.0/22
+103.83.120.0/22
+103.83.132.0/22
+103.83.180.0/22
+103.84.0.0/22
+103.84.12.0/22
+103.84.16.0/20
+103.84.48.0/22
+103.84.56.0/22
+103.84.64.0/22
+103.84.72.0/22
+103.84.92.0/22
+103.84.108.0/22
+103.84.136.0/22
+103.85.20.0/22
+103.85.24.0/22
+103.85.44.0/22
+103.85.48.0/21
+103.85.56.0/22
+103.85.84.0/22
+103.85.136.0/22
+103.85.144.0/22
+103.85.164.0/22
+103.85.168.0/21
+103.85.176.0/22
+103.85.224.0/22
+103.86.28.0/22
+103.86.32.0/22
+103.86.44.0/22
+103.86.60.0/22
+103.86.68.0/22
+103.86.80.0/21
+103.86.88.0/22
+103.86.129.0/24
+103.86.204.0/22
+103.86.208.0/20
+103.86.224.0/19
+103.87.0.0/21
+103.87.20.0/22
+103.87.32.0/22
+103.87.72.0/22
+103.87.96.0/22
+103.87.132.0/22
+103.87.180.0/22
+103.87.224.0/22
+103.88.4.0/22
+103.88.8.0/21
+103.88.16.0/21
+103.88.32.0/21
+103.88.60.0/22
+103.88.64.0/22
+103.88.72.0/22
+103.88.96.0/21
+103.88.152.0/23
+103.88.164.0/22
+103.88.176.0/22
+103.88.184.0/21
+103.88.212.0/22
+103.89.28.0/22
+103.89.96.0/20
+103.89.112.0/21
+103.89.148.0/22
+103.89.172.0/22
+103.89.184.0/21
+103.89.192.0/19
+103.89.224.0/21
+103.90.52.0/22
+103.90.92.0/22
+103.90.100.0/22
+103.90.104.0/21
+103.90.112.0/20
+103.90.128.0/21
+103.90.152.0/22
+103.90.168.0/22
+103.90.173.0/24
+103.90.176.0/22
+103.90.188.0/22
+103.90.192.0/22
+103.91.36.0/22
+103.91.40.0/22
+103.91.108.0/22
+103.91.152.0/22
+103.91.176.0/22
+103.91.200.0/22
+103.91.208.0/21
+103.91.219.0/24
+103.91.236.0/22
+103.91.252.0/22
+103.92.0.0/20
+103.92.48.0/20
+103.92.64.0/20
+103.92.80.0/22
+103.92.86.0/24
+103.92.88.0/22
+103.92.108.0/22
+103.92.124.0/22
+103.92.128.0/24
+103.92.132.0/22
+103.92.156.0/22
+103.92.164.0/22
+103.92.168.0/21
+103.92.176.0/20
+103.92.192.0/22
+103.92.236.0/22
+103.92.240.0/20
+103.93.0.0/21
+103.93.28.0/22
+103.93.76.0/22
+103.93.84.0/22
+103.93.121.0/24
+103.93.152.0/22
+103.93.180.0/22
+103.93.204.0/22
+103.94.12.0/22
+103.94.20.0/22
+103.94.28.0/22
+103.94.32.0/20
+103.94.72.0/22
+103.94.88.0/22
+103.94.116.0/22
+103.94.160.0/22
+103.94.180.0/22
+103.94.200.0/22
+103.95.28.0/22
+103.95.52.0/22
+103.95.64.0/21
+103.95.88.0/21
+103.95.116.0/22
+103.95.128.0/22
+103.95.136.0/21
+103.95.144.0/22
+103.95.152.0/22
+103.95.207.0/24
+103.95.216.0/21
+103.95.224.0/22
+103.95.236.0/22
+103.95.240.0/20
+103.96.0.0/22
+103.96.8.0/22
+103.96.80.0/22
+103.96.124.0/22
+103.96.136.0/22
+103.96.140.0/24
+103.96.148.0/22
+103.96.152.0/21
+103.96.160.0/19
+103.96.192.0/20
+103.96.208.0/21
+103.96.216.0/22
+103.97.8.0/21
+103.97.16.0/20
+103.97.32.0/21
+103.97.40.0/22
+103.97.56.0/21
+103.97.64.0/21
+103.97.72.0/22
+103.97.80.0/22
+103.97.112.0/21
+103.97.128.0/22
+103.97.144.0/21
+103.97.188.0/22
+103.97.192.0/22
+103.97.224.0/22
+103.97.228.0/23
+103.98.28.0/23
+103.98.40.0/21
+103.98.48.0/22
+103.98.56.0/22
+103.98.80.0/22
+103.98.88.0/21
+103.98.96.0/21
+103.98.124.0/22
+103.98.136.0/21
+103.98.144.0/22
+103.98.164.0/22
+103.98.168.0/22
+103.98.180.0/22
+103.98.196.0/22
+103.98.216.0/21
+103.98.224.0/21
+103.98.232.0/22
+103.98.240.0/20
+103.99.40.0/23
+103.99.52.0/22
+103.99.56.0/21
+103.99.76.0/22
+103.99.104.0/22
+103.99.116.0/22
+103.99.120.0/22
+103.99.132.0/22
+103.99.136.0/21
+103.99.144.0/22
+103.99.152.0/22
+103.99.220.0/22
+103.99.232.0/21
+103.100.0.0/22
+103.100.32.0/22
+103.100.40.0/22
+103.100.48.0/20
+103.100.64.0/21
+103.100.88.0/22
+103.100.116.0/22
+103.100.140.0/22
+103.100.144.0/22
+103.100.236.0/22
+103.100.240.0/22
+103.100.248.0/21
+103.101.4.0/22
+103.101.8.0/21
+103.101.28.0/22
+103.101.60.0/22
+103.101.120.0/21
+103.101.144.0/21
+103.101.153.0/24
+103.101.180.0/22
+103.101.184.0/22
+103.102.76.0/22
+103.102.80.0/22
+103.102.163.0/24
+103.102.168.0/21
+103.102.180.0/22
+103.102.184.0/21
+103.102.192.0/21
+103.102.200.0/22
+103.102.208.0/21
+103.103.12.0/22
+103.103.16.0/22
+103.103.36.0/22
+103.103.68.0/22
+103.103.72.0/22
+103.103.176.0/22
+103.103.188.0/22
+103.103.200.0/21
+103.103.220.0/22
+103.103.224.0/21
+103.103.232.0/22
+103.103.248.0/21
+103.104.0.0/21
+103.104.36.0/22
+103.104.40.0/22
+103.104.64.0/22
+103.104.104.0/22
+103.104.152.0/22
+103.104.168.0/21
+103.104.188.0/22
+103.104.198.0/23
+103.104.252.0/22
+103.105.0.0/21
+103.105.12.0/22
+103.105.16.0/22
+103.105.23.0/24
+103.105.56.0/21
+103.105.116.0/22
+103.105.132.0/22
+103.105.180.0/22
+103.105.184.0/22
+103.105.200.0/21
+103.105.220.0/22
+103.106.36.0/22
+103.106.40.0/21
+103.106.60.0/22
+103.106.68.0/22
+103.106.96.0/22
+103.106.120.0/22
+103.106.128.0/21
+103.106.160.0/22
+103.106.188.0/22
+103.106.196.0/22
+103.106.202.0/23
+103.106.212.0/22
+103.106.244.0/22
+103.106.252.0/22
+103.107.0.0/22
+103.107.8.0/24
+103.107.28.0/22
+103.107.32.0/22
+103.107.44.0/22
+103.107.72.0/22
+103.107.108.0/22
+103.107.164.0/22
+103.107.168.0/22
+103.107.188.0/22
+103.107.192.0/22
+103.107.208.0/20
+103.108.52.0/22
+103.108.64.0/22
+103.108.160.0/21
+103.108.184.0/23
+103.108.188.0/23
+103.108.192.0/21
+103.108.208.0/21
+103.108.224.0/22
+103.108.244.0/22
+103.108.251.0/24
+103.109.20.0/22
+103.109.48.0/22
+103.109.88.0/22
+103.109.106.0/23
+103.109.248.0/22
+103.110.32.0/22
+103.110.80.0/23
+103.110.92.0/22
+103.110.100.0/22
+103.110.116.0/22
+103.110.127.0/24
+103.110.128.0/23
+103.110.131.0/24
+103.110.132.0/22
+103.110.136.0/22
+103.110.152.0/21
+103.110.188.0/22
+103.110.204.0/22
+103.111.38.0/23
+103.111.64.0/22
+103.111.172.0/22
+103.111.252.0/22
+103.112.28.0/22
+103.112.68.0/22
+103.112.72.0/22
+103.112.88.0/21
+103.112.96.0/22
+103.112.108.0/22
+103.112.112.0/21
+103.112.140.0/22
+103.112.172.0/22
+103.112.184.0/22
+103.112.208.0/22
+103.113.4.0/22
+103.113.92.0/22
+103.113.144.0/22
+103.113.220.0/22
+103.113.232.0/21
+103.114.4.0/22
+103.114.28.0/22
+103.114.68.0/22
+103.114.72.0/22
+103.114.100.0/22
+103.114.132.0/22
+103.114.148.0/22
+103.114.156.0/22
+103.114.176.0/22
+103.114.212.0/22
+103.114.236.0/22
+103.114.240.0/22
+103.115.16.0/22
+103.115.40.0/21
+103.115.48.0/20
+103.115.64.0/21
+103.115.92.0/22
+103.115.120.0/22
+103.115.148.0/22
+103.115.204.0/23
+103.115.248.0/22
+103.116.20.0/22
+103.116.40.0/22
+103.116.64.0/22
+103.116.72.0/21
+103.116.92.0/22
+103.116.120.0/22
+103.116.128.0/22
+103.116.132.0/23
+103.116.148.0/22
+103.116.184.0/22
+103.116.206.0/23
+103.116.220.0/22
+103.116.224.0/21
+103.117.16.0/22
+103.117.72.0/22
+103.117.88.0/22
+103.117.132.0/22
+103.117.136.0/22
+103.117.188.0/22
+103.117.220.0/22
+103.118.19.0/24
+103.118.36.0/22
+103.118.52.0/22
+103.118.56.0/21
+103.118.64.0/21
+103.118.72.0/22
+103.118.88.0/22
+103.118.173.0/24
+103.118.192.0/19
+103.118.240.0/20
+103.119.0.0/22
+103.119.12.0/22
+103.119.16.0/22
+103.119.28.0/22
+103.119.44.0/22
+103.119.104.0/22
+103.119.115.0/24
+103.119.156.0/22
+103.119.180.0/22
+103.192.0.0/19
+103.192.48.0/21
+103.192.56.0/22
+103.192.84.0/22
+103.192.88.0/21
+103.192.96.0/20
+103.192.112.0/22
+103.192.128.0/20
+103.192.144.0/22
+103.192.164.0/22
+103.192.188.0/22
+103.192.208.0/21
+103.192.216.0/22
+103.192.252.0/22
+103.193.40.0/21
+103.193.120.0/21
+103.193.140.0/22
+103.193.144.0/21
+103.193.160.0/22
+103.193.188.0/22
+103.193.192.0/22
+103.193.212.0/22
+103.193.216.0/21
+103.193.224.0/20
+103.193.240.0/22
+103.194.16.0/22
+103.194.230.0/23
+103.195.104.0/22
+103.195.112.0/22
+103.195.136.0/22
+103.195.148.0/22
+103.195.152.0/22
+103.195.160.0/22
+103.195.192.0/22
+103.196.60.0/22
+103.196.64.0/22
+103.196.72.0/22
+103.196.88.0/21
+103.196.96.0/22
+103.196.168.0/22
+103.196.185.0/24
+103.196.186.0/23
+103.196.204.0/22
+103.197.180.0/22
+103.197.228.0/22
+103.197.253.0/24
+103.197.254.0/23
+103.198.20.0/22
+103.198.60.0/22
+103.198.64.0/22
+103.198.72.0/22
+103.198.124.0/22
+103.198.156.0/22
+103.198.180.0/22
+103.198.196.0/22
+103.198.200.0/22
+103.198.216.0/21
+103.198.224.0/20
+103.198.240.0/21
+103.199.164.0/22
+103.199.196.0/22
+103.199.228.0/22
+103.199.248.0/21
+103.200.28.0/22
+103.200.32.0/22
+103.200.52.0/22
+103.200.64.0/21
+103.200.136.0/21
+103.200.144.0/20
+103.200.160.0/19
+103.200.192.0/22
+103.200.220.0/22
+103.200.224.0/19
+103.201.0.0/20
+103.201.16.0/21
+103.201.28.0/22
+103.201.32.0/19
+103.201.64.0/22
+103.201.76.0/22
+103.201.80.0/20
+103.201.96.0/20
+103.201.112.0/21
+103.201.120.0/22
+103.201.152.0/21
+103.201.160.0/19
+103.201.192.0/18
+103.202.0.0/19
+103.202.32.0/20
+103.202.56.0/21
+103.202.64.0/18
+103.202.128.0/20
+103.202.144.0/22
+103.202.152.0/21
+103.202.160.0/19
+103.202.192.0/20
+103.202.212.0/22
+103.202.228.0/22
+103.202.236.0/22
+103.202.240.0/20
+103.203.0.0/19
+103.203.32.0/22
+103.203.52.0/22
+103.203.56.0/22
+103.203.96.0/19
+103.203.128.0/22
+103.203.140.0/22
+103.203.164.0/22
+103.203.168.0/22
+103.203.192.0/22
+103.203.200.0/22
+103.203.212.0/22
+103.203.216.0/22
+103.204.24.0/22
+103.204.72.0/22
+103.204.88.0/22
+103.204.112.0/22
+103.204.136.0/21
+103.204.144.0/21
+103.204.152.0/22
+103.204.196.0/22
+103.204.232.0/21
+103.205.4.0/22
+103.205.8.0/22
+103.205.40.0/21
+103.205.52.0/22
+103.205.108.0/22
+103.205.116.0/22
+103.205.120.0/22
+103.205.136.0/22
+103.205.162.0/24
+103.205.188.0/22
+103.205.192.0/21
+103.205.200.0/22
+103.205.236.0/22
+103.205.248.0/21
+103.206.0.0/22
+103.206.44.0/22
+103.206.108.0/22
+103.206.148.0/22
+103.207.48.0/22
+103.207.104.0/22
+103.207.164.0/22
+103.207.184.0/21
+103.207.192.0/20
+103.207.208.0/21
+103.207.220.0/22
+103.207.228.0/22
+103.207.232.0/22
+103.208.12.0/22
+103.208.16.0/22
+103.208.28.0/22
+103.208.40.0/21
+103.208.48.0/22
+103.208.148.0/22
+103.209.112.0/22
+103.209.136.0/22
+103.209.200.0/22
+103.209.208.0/22
+103.209.216.0/22
+103.210.0.0/22
+103.210.20.0/22
+103.210.96.0/22
+103.210.156.0/22
+103.210.160.0/19
+103.210.216.0/22
+103.211.44.0/22
+103.211.96.0/21
+103.211.156.0/22
+103.211.164.0/22
+103.211.168.0/22
+103.211.192.0/22
+103.211.220.0/22
+103.211.224.0/22
+103.211.248.0/22
+103.212.0.0/20
+103.212.32.0/22
+103.212.44.0/22
+103.212.48.0/22
+103.212.84.0/22
+103.212.100.0/22
+103.212.104.0/21
+103.212.148.0/22
+103.212.164.0/22
+103.212.196.0/22
+103.212.200.0/22
+103.212.228.0/22
+103.212.252.0/22
+103.213.40.0/21
+103.213.48.0/20
+103.213.64.0/19
+103.213.96.0/22
+103.213.132.0/22
+103.213.136.0/21
+103.213.144.0/20
+103.213.160.0/19
+103.213.248.0/21
+103.214.32.0/22
+103.214.48.0/22
+103.214.84.0/22
+103.214.168.0/22
+103.214.212.0/22
+103.214.240.0/21
+103.215.28.0/22
+103.215.32.0/21
+103.215.44.0/22
+103.215.48.0/22
+103.215.100.0/22
+103.215.104.0/21
+103.215.116.0/22
+103.215.120.0/22
+103.215.140.0/22
+103.215.184.0/22
+103.215.228.0/22
+103.216.4.0/22
+103.216.8.0/21
+103.216.16.0/20
+103.216.32.0/20
+103.216.64.0/22
+103.216.108.0/22
+103.216.136.0/22
+103.216.152.0/22
+103.216.224.0/21
+103.216.240.0/20
+103.217.0.0/18
+103.217.168.0/22
+103.217.180.0/22
+103.217.184.0/21
+103.217.192.0/20
+103.218.0.0/22
+103.218.8.0/21
+103.218.16.0/21
+103.218.28.0/22
+103.218.32.0/19
+103.218.64.0/19
+103.218.184.0/22
+103.218.192.0/20
+103.218.208.0/21
+103.218.216.0/22
+103.219.24.0/21
+103.219.32.0/21
+103.219.64.0/22
+103.219.84.0/22
+103.219.88.0/21
+103.219.96.0/21
+103.219.176.0/22
+103.219.184.0/22
+103.220.48.0/20
+103.220.64.0/22
+103.220.92.0/22
+103.220.96.0/20
+103.220.116.0/22
+103.220.120.0/21
+103.220.128.0/20
+103.220.144.0/21
+103.220.152.0/22
+103.220.160.0/19
+103.220.192.0/21
+103.220.200.0/22
+103.220.240.0/20
+103.221.0.0/19
+103.221.32.0/20
+103.221.48.0/22
+103.221.88.0/21
+103.221.96.0/19
+103.221.128.0/18
+103.221.192.0/20
+103.222.0.0/20
+103.222.16.0/22
+103.222.24.0/21
+103.222.32.0/19
+103.222.64.0/18
+103.222.128.0/18
+103.222.192.0/19
+103.222.224.0/21
+103.222.232.0/22
+103.222.240.0/21
+103.223.16.0/20
+103.223.32.0/19
+103.223.64.0/18
+103.223.128.0/21
+103.223.140.0/22
+103.223.144.0/20
+103.223.160.0/20
+103.223.176.0/21
+103.223.188.0/22
+103.223.192.0/18
+103.224.0.0/22
+103.224.40.0/21
+103.224.60.0/22
+103.224.80.0/22
+103.224.220.0/22
+103.224.224.0/21
+103.224.232.0/22
+103.225.84.0/22
+103.226.16.0/22
+103.226.40.0/22
+103.226.56.0/21
+103.226.80.0/22
+103.226.116.0/22
+103.226.132.0/22
+103.226.156.0/22
+103.226.180.0/22
+103.226.196.0/22
+103.227.48.0/22
+103.227.72.0/21
+103.227.80.0/22
+103.227.100.0/22
+103.227.120.0/22
+103.227.132.0/22
+103.227.136.0/22
+103.227.196.0/22
+103.227.204.0/22
+103.227.212.0/22
+103.227.228.0/22
+103.228.12.0/22
+103.228.28.0/22
+103.228.68.0/22
+103.228.88.0/22
+103.228.128.0/22
+103.228.136.0/22
+103.228.160.0/22
+103.228.176.0/22
+103.228.204.0/22
+103.228.208.0/22
+103.228.228.0/22
+103.228.232.0/22
+103.229.20.0/22
+103.229.60.0/22
+103.229.136.0/22
+103.229.148.0/22
+103.229.172.0/22
+103.229.212.0/22
+103.229.216.0/21
+103.229.228.0/22
+103.229.236.0/22
+103.229.240.0/22
+103.230.0.0/22
+103.230.28.0/22
+103.230.40.0/21
+103.230.96.0/22
+103.230.196.0/22
+103.230.200.0/21
+103.230.212.0/22
+103.230.236.0/22
+103.231.16.0/21
+103.231.64.0/21
+103.231.144.0/22
+103.231.180.0/22
+103.231.184.0/22
+103.231.244.0/22
+103.232.4.0/22
+103.232.144.0/22
+103.232.188.0/22
+103.232.212.0/22
+103.233.4.0/22
+103.233.44.0/22
+103.233.52.0/22
+103.233.104.0/22
+103.233.128.0/22
+103.233.136.0/22
+103.233.228.0/22
+103.234.0.0/22
+103.234.20.0/22
+103.234.56.0/22
+103.234.124.0/22
+103.234.128.0/22
+103.234.172.0/22
+103.234.180.0/22
+103.234.244.0/22
+103.235.16.0/22
+103.235.48.0/22
+103.235.56.0/21
+103.235.80.0/21
+103.235.128.0/20
+103.235.144.0/21
+103.235.184.0/22
+103.235.192.0/22
+103.235.200.0/22
+103.235.220.0/22
+103.235.224.0/19
+103.236.0.0/18
+103.236.64.0/19
+103.236.96.0/22
+103.236.120.0/22
+103.236.184.0/22
+103.236.220.0/22
+103.236.232.0/22
+103.236.240.0/20
+103.237.0.0/20
+103.237.24.0/21
+103.237.68.0/22
+103.237.88.0/22
+103.237.152.0/22
+103.237.176.0/20
+103.237.192.0/18
+103.238.0.0/21
+103.238.16.0/20
+103.238.32.0/20
+103.238.48.0/21
+103.238.56.0/22
+103.238.88.0/21
+103.238.96.0/22
+103.238.132.0/22
+103.238.140.0/22
+103.238.144.0/22
+103.238.160.0/19
+103.238.196.0/22
+103.238.204.0/22
+103.238.252.0/22
+103.239.0.0/22
+103.239.44.0/22
+103.239.68.0/22
+103.239.96.0/22
+103.239.152.0/21
+103.239.176.0/21
+103.239.184.0/22
+103.239.192.0/21
+103.239.204.0/22
+103.239.208.0/22
+103.239.224.0/22
+103.239.244.0/22
+103.240.16.0/22
+103.240.36.0/22
+103.240.72.0/22
+103.240.84.0/22
+103.240.124.0/22
+103.240.156.0/22
+103.240.172.0/22
+103.240.188.0/22
+103.240.244.0/22
+103.241.12.0/22
+103.241.72.0/22
+103.241.92.0/22
+103.241.96.0/22
+103.241.160.0/22
+103.241.184.0/21
+103.241.220.0/22
+103.242.64.0/22
+103.242.128.0/21
+103.242.160.0/22
+103.242.168.0/21
+103.242.176.0/22
+103.242.200.0/22
+103.242.212.0/22
+103.242.220.0/22
+103.242.240.0/22
+103.243.136.0/22
+103.243.252.0/22
+103.244.16.0/22
+103.244.58.0/23
+103.244.60.0/22
+103.244.64.0/20
+103.244.80.0/21
+103.244.116.0/22
+103.244.164.0/22
+103.244.232.0/22
+103.244.252.0/22
+103.245.23.0/24
+103.245.52.0/22
+103.245.60.0/22
+103.245.80.0/22
+103.245.124.0/22
+103.245.128.0/22
+103.246.8.0/21
+103.246.120.0/21
+103.246.132.0/22
+103.246.152.0/21
+103.247.168.0/21
+103.247.176.0/22
+103.247.200.0/22
+103.247.212.0/22
+103.248.0.0/23
+103.248.64.0/22
+103.248.100.0/22
+103.248.124.0/22
+103.248.152.0/22
+103.248.168.0/22
+103.248.192.0/22
+103.248.212.0/22
+103.248.220.0/22
+103.248.224.0/21
+103.249.8.0/21
+103.249.52.0/22
+103.249.104.0/22
+103.249.128.0/22
+103.249.136.0/22
+103.249.144.0/22
+103.249.164.0/22
+103.249.168.0/21
+103.249.176.0/22
+103.249.188.0/22
+103.249.192.0/22
+103.249.244.0/22
+103.249.252.0/22
+103.250.32.0/22
+103.250.104.0/22
+103.250.124.0/22
+103.250.180.0/22
+103.250.192.0/22
+103.250.216.0/22
+103.250.224.0/22
+103.250.236.0/22
+103.250.248.0/21
+103.251.32.0/21
+103.251.84.0/22
+103.251.96.0/22
+103.251.124.0/22
+103.251.128.0/22
+103.251.160.0/22
+103.251.192.0/22
+103.251.204.0/22
+103.251.236.0/22
+103.251.240.0/22
+103.252.28.0/22
+103.252.36.0/22
+103.252.64.0/22
+103.252.96.0/22
+103.252.104.0/22
+103.252.172.0/22
+103.252.204.0/22
+103.252.208.0/22
+103.252.232.0/22
+103.252.248.0/22
+103.253.4.0/22
+103.253.60.0/22
+103.253.204.0/22
+103.253.220.0/22
+103.253.224.0/22
+103.253.232.0/22
+103.254.8.0/22
+103.254.20.0/22
+103.254.64.0/20
+103.254.112.0/22
+103.254.176.0/22
+103.254.188.0/22
+103.254.196.0/24
+103.254.220.0/22
+103.255.56.0/22
+103.255.68.0/22
+103.255.88.0/21
+103.255.136.0/21
+103.255.184.0/22
+103.255.200.0/22
+103.255.208.0/21
+103.255.228.0/22
+104.166.103.0/24
+104.222.196.0/24
+106.0.0.0/24
+106.0.2.0/23
+106.0.4.0/22
+106.0.8.0/21
+106.0.16.0/20
+106.0.44.0/22
+106.0.64.0/18
+106.2.0.0/15
+106.4.0.0/14
+106.8.0.0/15
+106.11.0.0/16
+106.12.0.0/14
+106.16.0.0/12
+106.32.0.0/12
+106.48.0.0/15
+106.50.0.0/16
+106.52.0.0/14
+106.56.0.0/13
+106.74.0.0/15
+106.80.0.0/12
+106.108.0.0/14
+106.112.0.0/12
+106.224.0.0/12
+107.153.91.0/24
+107.153.92.0/23
+109.71.4.0/24
+109.244.0.0/16
+110.6.0.0/15
+110.16.0.0/14
+110.34.40.0/21
+110.40.0.0/14
+110.44.12.0/22
+110.44.144.0/20
+110.48.0.0/16
+110.51.0.0/16
+110.52.0.0/15
+110.56.0.0/13
+110.64.0.0/15
+110.72.0.0/15
+110.75.0.0/16
+110.76.0.0/18
+110.76.132.0/22
+110.76.156.0/22
+110.76.184.0/22
+110.76.192.0/18
+110.77.0.0/17
+110.80.0.0/13
+110.88.0.0/14
+110.92.68.0/22
+110.93.32.0/19
+110.94.0.0/15
+110.96.0.0/11
+110.152.0.0/14
+110.156.0.0/15
+110.165.32.0/19
+110.166.0.0/15
+110.172.192.0/18
+110.173.0.0/19
+110.173.32.0/20
+110.173.64.0/18
+110.173.192.0/19
+110.176.0.0/12
+110.192.0.0/11
+110.228.0.0/14
+110.232.32.0/19
+110.236.0.0/15
+110.240.0.0/12
+111.0.0.0/10
+111.66.0.0/16
+111.67.192.0/20
+111.68.64.0/19
+111.72.0.0/13
+111.85.0.0/16
+111.91.192.0/19
+111.92.248.0/21
+111.112.0.0/14
+111.116.0.0/15
+111.118.200.0/21
+111.119.64.0/18
+111.119.128.0/19
+111.120.0.0/14
+111.124.0.0/16
+111.126.0.0/15
+111.128.0.0/11
+111.160.0.0/13
+111.170.0.0/16
+111.172.0.0/14
+111.176.0.0/13
+111.186.0.0/15
+111.192.0.0/12
+111.208.0.0/13
+111.221.28.0/24
+111.221.128.0/17
+111.222.0.0/16
+111.223.4.0/22
+111.223.8.0/21
+111.223.16.0/22
+111.223.240.0/22
+111.223.248.0/22
+111.224.0.0/13
+111.235.96.0/19
+111.235.156.0/22
+111.235.160.0/19
+112.0.0.0/10
+112.64.0.0/14
+112.73.0.0/16
+112.74.0.0/15
+112.80.0.0/12
+112.96.0.0/13
+112.109.128.0/17
+112.111.0.0/16
+112.112.0.0/14
+112.116.0.0/15
+112.122.0.0/15
+112.124.0.0/14
+112.128.0.0/14
+112.132.0.0/16
+112.137.48.0/21
+112.192.0.0/14
+112.224.0.0/11
+113.0.0.0/13
+113.8.0.0/15
+113.11.192.0/19
+113.12.0.0/14
+113.16.0.0/15
+113.18.0.0/16
+113.21.232.0/21
+113.24.0.0/14
+113.31.0.0/16
+113.44.0.0/14
+113.48.0.0/14
+113.52.160.0/19
+113.52.228.0/22
+113.54.0.0/15
+113.56.0.0/15
+113.58.0.0/16
+113.59.0.0/17
+113.59.224.0/22
+113.62.0.0/15
+113.64.0.0/10
+113.128.0.0/15
+113.130.96.0/20
+113.130.112.0/21
+113.132.0.0/14
+113.136.0.0/13
+113.194.0.0/15
+113.197.100.0/22
+113.200.0.0/15
+113.202.0.0/16
+113.204.0.0/14
+113.208.96.0/19
+113.208.128.0/17
+113.209.0.0/16
+113.212.0.0/18
+113.212.100.0/22
+113.212.184.0/21
+113.213.0.0/17
+113.214.0.0/15
+113.218.0.0/15
+113.220.0.0/14
+113.224.0.0/12
+113.240.0.0/13
+113.248.0.0/14
+114.28.0.0/16
+114.31.64.0/21
+114.54.0.0/15
+114.60.0.0/14
+114.64.0.0/14
+114.68.0.0/16
+114.79.64.0/18
+114.80.0.0/12
+114.96.0.0/13
+114.104.0.0/14
+114.110.0.0/20
+114.110.64.0/18
+114.111.0.0/19
+114.111.160.0/19
+114.112.0.0/13
+114.132.0.0/16
+114.135.0.0/16
+114.138.0.0/15
+114.141.64.0/21
+114.141.80.0/21
+114.141.128.0/18
+114.196.0.0/15
+114.198.248.0/21
+114.208.0.0/12
+114.224.0.0/11
+115.24.0.0/14
+115.28.0.0/15
+115.31.64.0/20
+115.32.0.0/14
+115.42.56.0/22
+115.44.0.0/14
+115.48.0.0/12
+115.69.64.0/20
+115.84.0.0/18
+115.84.192.0/19
+115.85.192.0/18
+115.100.0.0/14
+115.104.0.0/14
+115.120.0.0/14
+115.124.16.0/20
+115.148.0.0/14
+115.152.0.0/13
+115.166.64.0/19
+115.168.0.0/13
+115.180.0.0/14
+115.187.0.0/20
+115.190.0.0/15
+115.192.0.0/11
+115.224.0.0/12
+116.0.8.0/21
+116.0.24.0/21
+116.1.0.0/16
+116.2.0.0/15
+116.4.0.0/14
+116.8.0.0/14
+116.13.0.0/16
+116.16.0.0/12
+116.50.0.0/20
+116.52.0.0/14
+116.56.0.0/15
+116.58.128.0/20
+116.58.208.0/20
+116.60.0.0/14
+116.66.0.0/17
+116.66.176.0/22
+116.68.136.0/21
+116.68.176.0/21
+116.69.0.0/16
+116.70.0.0/17
+116.76.0.0/14
+116.85.0.0/16
+116.89.144.0/20
+116.89.240.0/22
+116.90.80.0/20
+116.90.184.0/21
+116.95.0.0/16
+116.112.0.0/14
+116.116.0.0/15
+116.128.0.0/10
+116.192.0.0/16
+116.193.16.0/20
+116.193.32.0/19
+116.193.152.0/22
+116.193.164.0/22
+116.193.176.0/21
+116.194.0.0/15
+116.196.0.0/16
+116.197.160.0/21
+116.197.180.0/23
+116.198.0.0/16
+116.199.0.0/17
+116.199.128.0/19
+116.204.0.0/15
+116.206.92.0/22
+116.206.100.0/22
+116.206.176.0/22
+116.207.0.0/16
+116.208.0.0/14
+116.212.160.0/20
+116.213.44.0/22
+116.213.64.0/18
+116.213.128.0/17
+116.214.32.0/19
+116.214.64.0/20
+116.214.128.0/17
+116.215.0.0/16
+116.216.0.0/14
+116.224.0.0/12
+116.242.0.0/15
+116.244.0.0/14
+116.248.0.0/15
+116.251.64.0/18
+116.252.0.0/15
+116.254.104.0/21
+116.254.128.0/17
+116.255.128.0/17
+117.8.0.0/13
+117.21.0.0/16
+117.22.0.0/15
+117.24.0.0/13
+117.32.0.0/13
+117.40.0.0/14
+117.44.0.0/15
+117.48.0.0/14
+117.53.48.0/20
+117.53.176.0/20
+117.57.0.0/16
+117.58.0.0/17
+117.59.0.0/16
+117.60.0.0/14
+117.64.0.0/13
+117.72.0.0/15
+117.74.64.0/19
+117.74.128.0/17
+117.75.0.0/16
+117.76.0.0/14
+117.80.0.0/12
+117.100.0.0/15
+117.103.16.0/20
+117.103.40.0/21
+117.103.72.0/21
+117.103.128.0/20
+117.104.168.0/21
+117.106.0.0/15
+117.112.0.0/13
+117.120.64.0/18
+117.120.128.0/17
+117.121.0.0/17
+117.121.128.0/18
+117.121.192.0/21
+117.122.128.0/17
+117.124.0.0/14
+117.128.0.0/10
+118.24.0.0/15
+118.26.0.0/16
+118.28.0.0/14
+118.64.0.0/15
+118.66.0.0/16
+118.67.112.0/20
+118.72.0.0/13
+118.80.0.0/15
+118.84.0.0/15
+118.88.32.0/19
+118.88.64.0/18
+118.88.128.0/17
+118.89.0.0/16
+118.91.240.0/20
+118.102.16.0/20
+118.102.32.0/21
+118.103.164.0/22
+118.103.168.0/21
+118.103.176.0/22
+118.103.245.0/24
+118.103.246.0/23
+118.107.180.0/22
+118.112.0.0/13
+118.120.0.0/14
+118.124.0.0/15
+118.126.0.0/16
+118.127.128.0/19
+118.132.0.0/14
+118.144.0.0/14
+118.178.0.0/16
+118.180.0.0/14
+118.184.0.0/16
+118.186.0.0/15
+118.188.0.0/16
+118.190.0.0/15
+118.192.0.0/16
+118.193.0.0/20
+118.193.32.0/19
+118.193.64.0/20
+118.193.96.0/19
+118.193.128.0/17
+118.194.0.0/15
+118.196.0.0/14
+118.202.0.0/15
+118.204.0.0/14
+118.212.0.0/15
+118.215.192.0/18
+118.224.0.0/14
+118.228.0.0/15
+118.230.0.0/16
+118.239.0.0/16
+118.242.0.0/16
+118.244.0.0/14
+118.248.0.0/13
+119.0.0.0/15
+119.2.0.0/19
+119.2.128.0/17
+119.3.0.0/16
+119.4.0.0/14
+119.8.0.0/16
+119.10.0.0/17
+119.15.136.0/21
+119.16.0.0/16
+119.18.192.0/20
+119.18.208.0/21
+119.18.224.0/19
+119.19.0.0/16
+119.20.0.0/14
+119.27.64.0/18
+119.27.128.0/17
+119.28.0.0/15
+119.30.48.0/20
+119.31.192.0/19
+119.32.0.0/13
+119.40.0.0/18
+119.40.64.0/20
+119.40.128.0/17
+119.41.0.0/16
+119.42.0.0/19
+119.42.52.0/22
+119.42.128.0/20
+119.42.224.0/19
+119.44.0.0/15
+119.48.0.0/13
+119.57.0.0/16
+119.58.0.0/16
+119.59.128.0/17
+119.60.0.0/15
+119.62.0.0/16
+119.63.32.0/19
+119.75.208.0/20
+119.78.0.0/15
+119.80.0.0/16
+119.82.208.0/20
+119.84.0.0/14
+119.88.0.0/14
+119.96.0.0/13
+119.108.0.0/15
+119.112.0.0/12
+119.128.0.0/12
+119.144.0.0/14
+119.148.160.0/19
+119.151.192.0/18
+119.160.200.0/21
+119.161.120.0/21
+119.161.128.0/17
+119.162.0.0/15
+119.164.0.0/14
+119.176.0.0/12
+119.232.0.0/15
+119.235.128.0/18
+119.248.0.0/14
+119.252.96.0/21
+119.252.240.0/20
+119.253.0.0/16
+119.254.0.0/15
+120.0.0.0/12
+120.24.0.0/14
+120.30.0.0/15
+120.32.0.0/12
+120.48.0.0/15
+120.52.0.0/14
+120.64.0.0/13
+120.72.32.0/19
+120.72.128.0/17
+120.76.0.0/14
+120.80.0.0/13
+120.88.8.0/21
+120.90.0.0/15
+120.92.0.0/16
+120.94.0.0/15
+120.128.0.0/13
+120.136.16.0/21
+120.136.128.0/18
+120.137.0.0/17
+120.143.128.0/19
+120.192.0.0/10
+121.0.8.0/21
+121.0.16.0/20
+121.4.0.0/15
+121.8.0.0/13
+121.16.0.0/12
+121.32.0.0/13
+121.40.0.0/14
+121.46.0.0/18
+121.46.76.0/22
+121.46.128.0/17
+121.47.0.0/16
+121.48.0.0/15
+121.50.8.0/21
+121.51.0.0/16
+121.52.160.0/19
+121.52.208.0/20
+121.52.224.0/19
+121.54.176.0/21
+121.54.188.0/22
+121.55.0.0/18
+121.56.0.0/15
+121.58.0.0/17
+121.58.136.0/21
+121.58.144.0/20
+121.58.160.0/21
+121.59.0.0/16
+121.60.0.0/14
+121.68.0.0/14
+121.76.0.0/15
+121.79.128.0/18
+121.89.0.0/16
+121.100.128.0/17
+121.101.0.0/18
+121.101.208.0/20
+121.192.0.0/13
+121.200.192.0/21
+121.201.0.0/16
+121.204.0.0/14
+121.224.0.0/12
+121.248.0.0/14
+121.255.0.0/16
+122.0.64.0/18
+122.0.128.0/17
+122.4.0.0/14
+122.8.0.0/15
+122.10.128.0/17
+122.11.0.0/17
+122.12.0.0/15
+122.14.0.0/16
+122.48.0.0/16
+122.49.0.0/18
+122.51.0.0/16
+122.64.0.0/11
+122.96.0.0/15
+122.98.144.0/20
+122.98.160.0/21
+122.98.172.0/22
+122.98.176.0/20
+122.98.192.0/21
+122.98.232.0/21
+122.98.240.0/20
+122.102.0.0/20
+122.102.64.0/19
+122.112.0.0/14
+122.119.0.0/16
+122.128.100.0/22
+122.128.120.0/21
+122.136.0.0/13
+122.144.128.0/17
+122.152.192.0/18
+122.156.0.0/14
+122.188.0.0/14
+122.192.0.0/14
+122.198.0.0/16
+122.200.40.0/21
+122.200.64.0/18
+122.201.48.0/20
+122.204.0.0/14
+122.224.0.0/12
+122.240.0.0/13
+122.248.24.0/21
+122.248.48.0/20
+122.255.64.0/21
+123.0.128.0/18
+123.4.0.0/14
+123.8.0.0/13
+123.49.128.0/17
+123.50.160.0/19
+123.52.0.0/14
+123.56.0.0/14
+123.60.0.0/15
+123.62.0.0/16
+123.64.0.0/11
+123.96.0.0/15
+123.98.0.0/17
+123.99.128.0/17
+123.100.0.0/19
+123.100.232.0/24
+123.101.0.0/16
+123.103.0.0/17
+123.108.128.0/20
+123.108.208.0/20
+123.112.0.0/12
+123.128.0.0/13
+123.136.80.0/20
+123.137.0.0/16
+123.138.0.0/15
+123.144.0.0/12
+123.160.0.0/12
+123.176.60.0/22
+123.176.80.0/20
+123.177.0.0/16
+123.178.0.0/15
+123.180.0.0/14
+123.184.0.0/13
+123.196.0.0/15
+123.199.128.0/17
+123.206.0.0/15
+123.232.0.0/14
+123.242.0.0/17
+123.242.192.0/21
+123.244.0.0/14
+123.249.0.0/16
+123.253.0.0/16
+123.254.96.0/21
+124.6.64.0/18
+124.14.0.0/15
+124.16.0.0/15
+124.20.0.0/14
+124.28.192.0/18
+124.29.0.0/17
+124.31.0.0/16
+124.40.112.0/20
+124.40.128.0/18
+124.40.192.0/19
+124.40.240.0/22
+124.42.0.0/16
+124.47.0.0/18
+124.64.0.0/15
+124.66.0.0/17
+124.67.0.0/16
+124.68.0.0/14
+124.72.0.0/13
+124.88.0.0/13
+124.108.8.0/21
+124.108.40.0/21
+124.109.96.0/21
+124.112.0.0/13
+124.126.0.0/15
+124.128.0.0/13
+124.147.128.0/17
+124.150.137.0/24
+124.151.0.0/16
+124.152.0.0/16
+124.156.0.0/16
+124.160.0.0/13
+124.172.0.0/14
+124.192.0.0/15
+124.196.0.0/16
+124.200.0.0/13
+124.220.0.0/14
+124.224.0.0/12
+124.240.0.0/17
+124.240.128.0/18
+124.242.0.0/16
+124.243.192.0/18
+124.248.0.0/17
+124.249.0.0/16
+124.250.0.0/15
+124.254.0.0/18
+125.31.192.0/18
+125.32.0.0/12
+125.58.128.0/17
+125.61.128.0/17
+125.62.0.0/18
+125.64.0.0/11
+125.96.0.0/15
+125.98.0.0/16
+125.104.0.0/13
+125.112.0.0/12
+125.169.0.0/16
+125.171.0.0/16
+125.208.0.0/18
+125.210.0.0/15
+125.213.0.0/17
+125.214.96.0/19
+125.215.0.0/18
+125.216.0.0/13
+125.254.128.0/17
+128.108.0.0/16
+129.28.0.0/16
+129.204.0.0/16
+129.211.0.0/16
+129.223.254.0/24
+129.226.0.0/16
+130.214.218.0/23
+131.228.96.0/24
+132.232.0.0/16
+132.237.134.0/24
+132.237.150.0/24
+134.175.0.0/16
+135.159.208.0/20
+135.244.80.0/20
+137.59.59.0/24
+137.59.88.0/22
+138.32.244.0/22
+139.5.56.0/21
+139.5.80.0/22
+139.5.92.0/22
+139.5.108.0/22
+139.5.128.0/22
+139.5.160.0/22
+139.5.192.0/22
+139.5.204.0/22
+139.5.208.0/21
+139.5.244.0/22
+139.9.0.0/16
+139.129.0.0/16
+139.148.0.0/16
+139.155.0.0/16
+139.159.0.0/16
+139.170.0.0/16
+139.176.0.0/16
+139.183.0.0/16
+139.186.0.0/16
+139.189.0.0/16
+139.196.0.0/14
+139.200.0.0/13
+139.208.0.0/13
+139.217.0.0/16
+139.219.0.0/16
+139.220.0.0/15
+139.224.0.0/16
+139.226.0.0/15
+140.75.0.0/16
+140.101.208.0/24
+140.143.0.0/16
+140.179.0.0/16
+140.205.0.0/16
+140.206.0.0/15
+140.210.0.0/16
+140.224.0.0/16
+140.237.0.0/16
+140.240.0.0/16
+140.242.216.0/24
+140.242.223.0/24
+140.242.224.0/24
+140.243.0.0/16
+140.246.0.0/16
+140.249.0.0/16
+140.250.0.0/16
+140.255.0.0/16
+144.0.0.0/16
+144.7.0.0/16
+144.12.0.0/16
+144.36.146.0/23
+144.48.8.0/21
+144.48.64.0/22
+144.48.88.0/22
+144.48.156.0/22
+144.48.180.0/22
+144.48.184.0/22
+144.48.204.0/22
+144.48.208.0/21
+144.48.220.0/22
+144.48.252.0/22
+144.52.0.0/16
+144.123.0.0/16
+144.211.80.0/24
+144.211.138.0/24
+144.255.0.0/16
+146.56.192.0/18
+146.196.56.0/22
+146.196.68.0/22
+146.196.72.0/22
+146.196.92.0/22
+146.196.112.0/21
+146.196.124.0/22
+146.217.137.0/24
+146.222.79.0/24
+146.222.81.0/24
+146.222.94.0/24
+148.70.0.0/16
+150.0.0.0/16
+150.115.0.0/16
+150.121.0.0/16
+150.122.0.0/16
+150.129.136.0/22
+150.129.192.0/22
+150.129.216.0/22
+150.129.252.0/22
+150.138.0.0/15
+150.223.0.0/16
+150.242.0.0/21
+150.242.8.0/22
+150.242.28.0/22
+150.242.44.0/22
+150.242.48.0/21
+150.242.56.0/22
+150.242.76.0/22
+150.242.80.0/22
+150.242.92.0/22
+150.242.96.0/22
+150.242.112.0/21
+150.242.120.0/22
+150.242.152.0/21
+150.242.160.0/21
+150.242.168.0/22
+150.242.184.0/21
+150.242.192.0/22
+150.242.212.0/22
+150.242.224.0/20
+150.242.240.0/21
+150.242.248.0/22
+150.255.0.0/16
+152.104.128.0/17
+152.136.0.0/16
+153.0.0.0/16
+153.3.0.0/16
+153.34.0.0/15
+153.36.0.0/15
+153.99.0.0/16
+153.101.0.0/16
+153.118.0.0/15
+154.8.128.0/17
+156.107.160.0/24
+156.107.170.0/24
+157.0.0.0/16
+157.18.0.0/16
+157.61.0.0/16
+157.119.0.0/22
+157.119.8.0/21
+157.119.16.0/22
+157.119.28.0/22
+157.119.68.0/22
+157.119.112.0/22
+157.119.132.0/22
+157.119.136.0/21
+157.119.144.0/20
+157.119.160.0/21
+157.119.172.0/22
+157.119.192.0/21
+157.119.240.0/22
+157.119.252.0/22
+157.122.0.0/16
+157.133.186.0/23
+157.133.192.0/21
+157.133.212.0/24
+157.133.236.0/24
+157.148.0.0/16
+157.156.0.0/16
+157.255.0.0/16
+159.75.0.0/16
+159.153.120.0/22
+159.226.0.0/16
+160.19.208.0/21
+160.19.216.0/22
+160.20.48.0/22
+160.62.10.0/24
+160.83.109.0/24
+160.83.110.0/23
+160.202.60.0/22
+160.202.148.0/22
+160.202.152.0/22
+160.202.168.0/22
+160.202.212.0/22
+160.202.216.0/21
+160.202.224.0/19
+160.238.64.0/22
+161.163.0.0/21
+161.163.28.0/23
+161.163.176.0/24
+161.163.178.0/23
+161.163.180.0/22
+161.189.0.0/16
+161.207.0.0/16
+162.14.0.0/16
+162.62.32.0/19
+162.62.64.0/18
+162.62.132.0/22
+162.62.136.0/21
+162.62.144.0/20
+162.62.160.0/19
+162.62.192.0/18
+162.105.0.0/16
+163.0.0.0/16
+163.47.4.0/22
+163.53.0.0/20
+163.53.36.0/22
+163.53.40.0/21
+163.53.48.0/20
+163.53.64.0/22
+163.53.88.0/21
+163.53.96.0/19
+163.53.128.0/21
+163.53.136.0/22
+163.53.160.0/20
+163.53.188.0/22
+163.53.220.0/22
+163.53.236.0/22
+163.53.240.0/22
+163.125.0.0/16
+163.142.0.0/16
+163.177.0.0/16
+163.179.0.0/16
+163.204.0.0/16
+163.244.246.0/24
+164.52.0.0/17
+165.156.30.0/24
+166.111.0.0/16
+167.139.0.0/16
+167.189.0.0/16
+167.220.244.0/22
+168.159.144.0/21
+168.159.152.0/22
+168.159.156.0/23
+168.159.158.0/24
+168.160.0.0/16
+168.230.0.0/24
+170.179.0.0/16
+170.225.224.0/23
+170.252.152.0/21
+171.8.0.0/13
+171.34.0.0/15
+171.36.0.0/14
+171.40.0.0/13
+171.80.0.0/12
+171.104.0.0/13
+171.112.0.0/12
+171.208.0.0/12
+172.81.192.0/18
+175.0.0.0/12
+175.16.0.0/13
+175.24.0.0/14
+175.30.0.0/15
+175.42.0.0/15
+175.44.0.0/16
+175.46.0.0/15
+175.48.0.0/12
+175.64.0.0/11
+175.102.0.0/16
+175.106.128.0/17
+175.111.108.0/22
+175.111.144.0/20
+175.111.160.0/20
+175.111.184.0/22
+175.146.0.0/15
+175.148.0.0/14
+175.152.0.0/14
+175.158.96.0/22
+175.160.0.0/12
+175.176.156.0/22
+175.176.176.0/22
+175.176.188.0/22
+175.176.192.0/22
+175.178.0.0/16
+175.184.128.0/18
+175.185.0.0/16
+175.186.0.0/15
+175.188.0.0/14
+180.76.0.0/14
+180.84.0.0/15
+180.86.0.0/16
+180.88.0.0/14
+180.94.56.0/21
+180.94.96.0/20
+180.94.120.0/21
+180.95.128.0/17
+180.96.0.0/11
+180.129.128.0/17
+180.130.0.0/16
+180.136.0.0/13
+180.148.16.0/21
+180.148.152.0/21
+180.148.216.0/21
+180.148.224.0/19
+180.149.128.0/19
+180.149.236.0/22
+180.150.160.0/19
+180.152.0.0/13
+180.160.0.0/12
+180.178.112.0/21
+180.178.192.0/18
+180.184.0.0/14
+180.188.0.0/17
+180.189.148.0/22
+180.200.252.0/22
+180.201.0.0/16
+180.202.0.0/15
+180.208.0.0/15
+180.210.212.0/22
+180.210.224.0/19
+180.212.0.0/15
+180.222.224.0/19
+180.223.0.0/16
+180.233.0.0/18
+180.233.64.0/19
+180.233.144.0/22
+180.235.64.0/19
+180.235.112.0/22
+180.235.136.0/22
+182.16.144.0/21
+182.16.192.0/19
+182.18.0.0/17
+182.23.184.0/21
+182.23.200.0/21
+182.32.0.0/12
+182.48.96.0/19
+182.49.0.0/16
+182.50.0.0/20
+182.50.112.0/20
+182.51.0.0/16
+182.54.0.0/17
+182.54.244.0/22
+182.61.0.0/16
+182.80.0.0/13
+182.88.0.0/14
+182.92.0.0/16
+182.96.0.0/11
+182.128.0.0/12
+182.144.0.0/13
+182.157.0.0/16
+182.160.64.0/19
+182.174.0.0/15
+182.200.0.0/13
+182.236.128.0/17
+182.237.24.0/21
+182.238.0.0/16
+182.239.0.0/19
+182.240.0.0/13
+182.254.0.0/16
+182.255.36.0/22
+182.255.60.0/22
+183.0.0.0/10
+183.64.0.0/13
+183.78.160.0/21
+183.78.180.0/22
+183.81.172.0/22
+183.81.180.0/22
+183.84.0.0/15
+183.91.128.0/22
+183.91.136.0/21
+183.91.144.0/20
+183.92.0.0/14
+183.128.0.0/11
+183.160.0.0/13
+183.168.0.0/15
+183.170.0.0/16
+183.172.0.0/14
+183.182.0.0/19
+183.184.0.0/13
+183.192.0.0/10
+185.109.236.0/24
+185.252.218.0/23
+188.131.128.0/17
+192.11.23.0/24
+192.11.26.0/24
+192.11.39.0/24
+192.11.236.0/24
+192.23.191.0/24
+192.55.10.0/23
+192.55.40.0/24
+192.55.46.0/24
+192.55.68.0/22
+192.102.204.0/22
+192.124.154.0/24
+192.137.31.0/24
+192.139.135.0/24
+192.139.136.0/24
+192.140.128.0/21
+192.140.136.0/22
+192.140.156.0/22
+192.140.160.0/19
+192.140.192.0/20
+192.140.208.0/21
+192.144.128.0/17
+192.163.11.0/24
+192.232.97.0/24
+193.20.64.0/22
+193.22.14.0/23
+193.112.0.0/16
+194.138.202.0/23
+198.175.100.0/22
+198.208.17.0/24
+199.7.72.0/24
+199.65.192.0/21
+199.244.144.0/24
+202.0.100.0/23
+202.0.122.0/23
+202.0.176.0/22
+202.1.105.0/24
+202.1.106.0/24
+202.3.128.0/23
+202.4.128.0/19
+202.4.252.0/22
+202.5.208.0/21
+202.5.216.0/22
+202.6.6.0/23
+202.6.66.0/23
+202.6.72.0/23
+202.6.87.0/24
+202.6.88.0/23
+202.6.92.0/23
+202.6.103.0/24
+202.6.108.0/24
+202.6.110.0/23
+202.6.114.0/24
+202.6.176.0/20
+202.8.0.0/24
+202.8.2.0/23
+202.8.4.0/23
+202.8.12.0/24
+202.8.24.0/24
+202.8.77.0/24
+202.8.128.0/19
+202.8.192.0/20
+202.9.32.0/24
+202.9.34.0/23
+202.9.48.0/23
+202.9.51.0/24
+202.9.52.0/23
+202.9.54.0/24
+202.9.57.0/24
+202.9.58.0/23
+202.10.64.0/20
+202.10.112.0/20
+202.12.1.0/24
+202.12.2.0/24
+202.12.17.0/24
+202.12.18.0/23
+202.12.72.0/24
+202.12.84.0/23
+202.12.96.0/24
+202.12.98.0/23
+202.12.106.0/24
+202.12.111.0/24
+202.12.116.0/24
+202.14.64.0/23
+202.14.69.0/24
+202.14.73.0/24
+202.14.74.0/23
+202.14.76.0/24
+202.14.78.0/23
+202.14.88.0/24
+202.14.97.0/24
+202.14.104.0/23
+202.14.108.0/23
+202.14.111.0/24
+202.14.114.0/23
+202.14.118.0/23
+202.14.124.0/23
+202.14.127.0/24
+202.14.129.0/24
+202.14.135.0/24
+202.14.136.0/24
+202.14.149.0/24
+202.14.151.0/24
+202.14.157.0/24
+202.14.158.0/23
+202.14.169.0/24
+202.14.170.0/23
+202.14.172.0/22
+202.14.176.0/24
+202.14.184.0/23
+202.14.208.0/23
+202.14.213.0/24
+202.14.219.0/24
+202.14.220.0/24
+202.14.222.0/23
+202.14.225.0/24
+202.14.226.0/23
+202.14.231.0/24
+202.14.235.0/24
+202.14.236.0/22
+202.14.246.0/24
+202.14.251.0/24
+202.20.66.0/24
+202.20.79.0/24
+202.20.87.0/24
+202.20.88.0/23
+202.20.90.0/24
+202.20.94.0/23
+202.20.114.0/24
+202.20.117.0/24
+202.20.120.0/24
+202.20.125.0/24
+202.20.126.0/23
+202.21.48.0/20
+202.21.131.0/24
+202.21.132.0/24
+202.21.141.0/24
+202.21.142.0/24
+202.21.147.0/24
+202.21.148.0/24
+202.21.150.0/23
+202.21.152.0/23
+202.21.154.0/24
+202.21.156.0/24
+202.21.208.0/24
+202.22.248.0/21
+202.27.12.0/24
+202.27.14.0/24
+202.27.136.0/23
+202.36.226.0/24
+202.38.0.0/22
+202.38.8.0/21
+202.38.48.0/20
+202.38.64.0/18
+202.38.128.0/21
+202.38.136.0/23
+202.38.138.0/24
+202.38.140.0/22
+202.38.146.0/23
+202.38.149.0/24
+202.38.150.0/23
+202.38.152.0/22
+202.38.156.0/24
+202.38.158.0/23
+202.38.160.0/23
+202.38.164.0/22
+202.38.168.0/22
+202.38.176.0/23
+202.38.184.0/21
+202.38.192.0/18
+202.40.4.0/23
+202.40.7.0/24
+202.40.15.0/24
+202.40.135.0/24
+202.40.136.0/24
+202.40.140.0/24
+202.40.143.0/24
+202.40.144.0/23
+202.40.150.0/24
+202.40.155.0/24
+202.40.156.0/24
+202.40.158.0/23
+202.40.162.0/24
+202.41.8.0/23
+202.41.11.0/24
+202.41.12.0/23
+202.41.128.0/24
+202.41.130.0/23
+202.41.142.0/24
+202.41.152.0/21
+202.41.192.0/24
+202.41.196.0/22
+202.41.200.0/22
+202.41.240.0/20
+202.43.76.0/22
+202.43.144.0/20
+202.44.16.0/20
+202.44.48.0/22
+202.44.67.0/24
+202.44.74.0/24
+202.44.97.0/24
+202.44.129.0/24
+202.44.132.0/23
+202.44.146.0/23
+202.45.0.0/23
+202.45.2.0/24
+202.45.15.0/24
+202.45.16.0/20
+202.46.16.0/23
+202.46.18.0/24
+202.46.20.0/23
+202.46.32.0/19
+202.46.128.0/24
+202.46.224.0/20
+202.47.82.0/23
+202.47.96.0/20
+202.47.126.0/24
+202.47.128.0/24
+202.47.130.0/23
+202.52.33.0/24
+202.52.34.0/24
+202.52.47.0/24
+202.52.143.0/24
+202.53.140.0/24
+202.53.143.0/24
+202.57.192.0/20
+202.57.212.0/22
+202.57.216.0/22
+202.57.240.0/20
+202.58.0.0/24
+202.58.104.0/22
+202.58.112.0/22
+202.59.0.0/23
+202.59.212.0/22
+202.59.236.0/24
+202.59.240.0/24
+202.60.48.0/21
+202.60.96.0/21
+202.60.112.0/20
+202.60.132.0/22
+202.60.136.0/21
+202.60.144.0/20
+202.61.68.0/22
+202.61.76.0/22
+202.61.88.0/22
+202.61.123.0/24
+202.61.127.0/24
+202.62.112.0/22
+202.62.248.0/22
+202.62.252.0/24
+202.62.255.0/24
+202.63.80.0/20
+202.63.160.0/19
+202.63.248.0/22
+202.63.253.0/24
+202.65.0.0/21
+202.65.8.0/23
+202.65.96.0/20
+202.66.168.0/22
+202.67.0.0/22
+202.69.4.0/22
+202.69.16.0/20
+202.70.0.0/19
+202.70.96.0/20
+202.70.192.0/20
+202.71.32.0/20
+202.72.40.0/21
+202.72.80.0/20
+202.72.112.0/20
+202.73.128.0/22
+202.73.240.0/20
+202.74.8.0/21
+202.74.36.0/24
+202.74.42.0/24
+202.74.52.0/24
+202.74.80.0/20
+202.74.232.0/22
+202.74.254.0/23
+202.75.208.0/20
+202.75.252.0/22
+202.76.247.0/24
+202.76.252.0/22
+202.77.80.0/21
+202.77.92.0/22
+202.78.8.0/21
+202.79.224.0/21
+202.79.248.0/22
+202.80.192.0/20
+202.81.0.0/22
+202.81.176.0/20
+202.83.252.0/22
+202.84.0.0/20
+202.84.16.0/23
+202.84.22.0/24
+202.84.24.0/21
+202.85.208.0/20
+202.86.249.0/24
+202.86.252.0/22
+202.87.80.0/20
+202.88.32.0/22
+202.89.8.0/21
+202.89.96.0/22
+202.89.108.0/22
+202.89.119.0/24
+202.89.232.0/21
+202.90.0.0/22
+202.90.16.0/20
+202.90.37.0/24
+202.90.96.0/19
+202.90.193.0/24
+202.90.196.0/24
+202.90.205.0/24
+202.90.224.0/20
+202.91.0.0/22
+202.91.36.0/22
+202.91.96.0/20
+202.91.128.0/22
+202.91.176.0/20
+202.91.224.0/19
+202.92.0.0/22
+202.92.8.0/21
+202.92.48.0/20
+202.92.252.0/22
+202.93.0.0/22
+202.93.252.0/22
+202.94.0.0/19
+202.94.74.0/24
+202.94.81.0/24
+202.94.92.0/22
+202.95.0.0/19
+202.95.240.0/21
+202.95.252.0/22
+202.96.0.0/12
+202.112.0.0/13
+202.120.0.0/15
+202.122.0.0/21
+202.122.32.0/21
+202.122.64.0/19
+202.122.112.0/20
+202.122.128.0/24
+202.122.132.0/24
+202.123.96.0/20
+202.123.116.0/22
+202.123.120.0/22
+202.124.16.0/21
+202.124.24.0/22
+202.125.107.0/24
+202.125.109.0/24
+202.125.112.0/20
+202.125.176.0/20
+202.127.0.0/21
+202.127.12.0/22
+202.127.16.0/20
+202.127.40.0/21
+202.127.48.0/20
+202.127.112.0/20
+202.127.128.0/19
+202.127.160.0/21
+202.127.192.0/20
+202.127.208.0/23
+202.127.212.0/22
+202.127.216.0/21
+202.127.224.0/19
+202.129.208.0/24
+202.130.0.0/19
+202.130.39.0/24
+202.130.224.0/19
+202.131.16.0/21
+202.131.48.0/20
+202.131.208.0/20
+202.133.32.0/20
+202.134.58.0/24
+202.134.128.0/20
+202.134.208.0/20
+202.136.48.0/20
+202.136.208.0/20
+202.136.224.0/20
+202.136.248.0/22
+202.136.254.0/23
+202.137.231.0/24
+202.140.140.0/22
+202.140.144.0/20
+202.141.160.0/19
+202.142.16.0/20
+202.143.4.0/22
+202.143.16.0/20
+202.143.32.0/20
+202.143.56.0/21
+202.143.100.0/22
+202.143.104.0/22
+202.144.196.0/22
+202.146.160.0/20
+202.146.186.0/24
+202.146.188.0/22
+202.146.196.0/22
+202.146.200.0/21
+202.147.144.0/20
+202.148.32.0/20
+202.148.64.0/18
+202.149.32.0/19
+202.149.160.0/19
+202.149.224.0/19
+202.150.16.0/20
+202.150.32.0/20
+202.150.56.0/22
+202.150.192.0/20
+202.150.224.0/19
+202.151.0.0/22
+202.151.33.0/24
+202.151.128.0/19
+202.152.176.0/20
+202.153.0.0/22
+202.153.7.0/24
+202.153.48.0/20
+202.157.192.0/19
+202.158.160.0/19
+202.158.242.0/24
+202.160.140.0/22
+202.160.156.0/22
+202.160.176.0/20
+202.162.67.0/24
+202.162.75.0/24
+202.164.0.0/20
+202.164.96.0/19
+202.165.96.0/21
+202.165.104.0/22
+202.165.176.0/20
+202.165.208.0/20
+202.165.239.0/24
+202.165.240.0/23
+202.165.243.0/24
+202.165.245.0/24
+202.165.251.0/24
+202.165.252.0/22
+202.166.224.0/19
+202.168.80.0/22
+202.168.128.0/20
+202.168.160.0/19
+202.170.128.0/19
+202.170.216.0/21
+202.170.224.0/19
+202.171.216.0/21
+202.171.232.0/24
+202.171.235.0/24
+202.172.0.0/22
+202.172.7.0/24
+202.173.0.0/22
+202.173.6.0/24
+202.173.8.0/21
+202.173.112.0/22
+202.173.120.0/22
+202.173.224.0/19
+202.174.64.0/20
+202.174.124.0/22
+202.176.224.0/19
+202.179.160.0/20
+202.179.240.0/20
+202.180.128.0/19
+202.180.208.0/21
+202.181.8.0/22
+202.181.28.0/22
+202.181.112.0/20
+202.182.32.0/20
+202.182.192.0/19
+202.189.0.0/18
+202.189.80.0/20
+202.189.184.0/21
+202.191.0.0/24
+202.191.68.0/22
+202.191.72.0/21
+202.191.80.0/20
+202.192.0.0/12
+203.0.4.0/22
+203.0.10.0/23
+203.0.18.0/24
+203.0.24.0/24
+203.0.42.0/23
+203.0.45.0/24
+203.0.46.0/23
+203.0.81.0/24
+203.0.82.0/23
+203.0.90.0/23
+203.0.96.0/23
+203.0.104.0/21
+203.0.114.0/23
+203.0.122.0/24
+203.0.128.0/24
+203.0.130.0/23
+203.0.132.0/22
+203.0.137.0/24
+203.0.142.0/24
+203.0.144.0/24
+203.0.146.0/24
+203.0.148.0/24
+203.0.150.0/23
+203.0.152.0/24
+203.0.177.0/24
+203.0.224.0/24
+203.1.4.0/22
+203.1.18.0/24
+203.1.26.0/23
+203.1.65.0/24
+203.1.66.0/23
+203.1.70.0/23
+203.1.76.0/23
+203.1.90.0/24
+203.1.97.0/24
+203.1.98.0/23
+203.1.100.0/22
+203.1.108.0/24
+203.1.253.0/24
+203.1.254.0/24
+203.2.64.0/21
+203.2.73.0/24
+203.2.112.0/21
+203.2.126.0/23
+203.2.140.0/24
+203.2.150.0/24
+203.2.152.0/22
+203.2.156.0/23
+203.2.160.0/21
+203.2.180.0/23
+203.2.196.0/23
+203.2.209.0/24
+203.2.214.0/23
+203.2.226.0/23
+203.2.229.0/24
+203.2.236.0/23
+203.3.68.0/24
+203.3.72.0/23
+203.3.75.0/24
+203.3.80.0/21
+203.3.96.0/22
+203.3.105.0/24
+203.3.112.0/21
+203.3.120.0/24
+203.3.123.0/24
+203.3.135.0/24
+203.3.139.0/24
+203.3.143.0/24
+203.4.132.0/23
+203.4.134.0/24
+203.4.151.0/24
+203.4.152.0/22
+203.4.174.0/23
+203.4.180.0/24
+203.4.186.0/24
+203.4.205.0/24
+203.4.208.0/22
+203.4.227.0/24
+203.4.230.0/23
+203.5.4.0/23
+203.5.7.0/24
+203.5.8.0/23
+203.5.11.0/24
+203.5.21.0/24
+203.5.22.0/24
+203.5.44.0/24
+203.5.46.0/23
+203.5.52.0/22
+203.5.56.0/23
+203.5.60.0/23
+203.5.114.0/23
+203.5.118.0/24
+203.5.120.0/24
+203.5.172.0/24
+203.5.180.0/23
+203.5.182.0/24
+203.5.185.0/24
+203.5.186.0/24
+203.5.188.0/23
+203.5.190.0/24
+203.5.195.0/24
+203.5.214.0/23
+203.5.218.0/23
+203.6.131.0/24
+203.6.136.0/24
+203.6.138.0/23
+203.6.142.0/24
+203.6.150.0/23
+203.6.157.0/24
+203.6.159.0/24
+203.6.224.0/20
+203.6.248.0/23
+203.7.129.0/24
+203.7.138.0/23
+203.7.147.0/24
+203.7.150.0/23
+203.7.158.0/24
+203.7.192.0/23
+203.7.200.0/24
+203.8.0.0/24
+203.8.8.0/24
+203.8.23.0/24
+203.8.24.0/21
+203.8.70.0/24
+203.8.82.0/24
+203.8.86.0/23
+203.8.91.0/24
+203.8.110.0/23
+203.8.115.0/24
+203.8.166.0/23
+203.8.169.0/24
+203.8.173.0/24
+203.8.184.0/24
+203.8.186.0/23
+203.8.190.0/23
+203.8.192.0/24
+203.8.197.0/24
+203.8.198.0/23
+203.8.203.0/24
+203.8.209.0/24
+203.8.210.0/23
+203.8.212.0/22
+203.8.217.0/24
+203.8.220.0/24
+203.9.32.0/24
+203.9.36.0/23
+203.9.57.0/24
+203.9.63.0/24
+203.9.65.0/24
+203.9.70.0/23
+203.9.72.0/24
+203.9.75.0/24
+203.9.76.0/23
+203.9.96.0/22
+203.9.100.0/23
+203.9.108.0/24
+203.9.158.0/24
+203.10.34.0/24
+203.10.56.0/24
+203.10.74.0/23
+203.10.84.0/22
+203.10.88.0/24
+203.10.95.0/24
+203.10.125.0/24
+203.11.70.0/24
+203.11.76.0/22
+203.11.82.0/24
+203.11.84.0/22
+203.11.100.0/22
+203.11.109.0/24
+203.11.117.0/24
+203.11.122.0/24
+203.11.126.0/24
+203.11.136.0/22
+203.11.141.0/24
+203.11.142.0/23
+203.11.180.0/22
+203.11.208.0/22
+203.12.16.0/24
+203.12.19.0/24
+203.12.24.0/24
+203.12.57.0/24
+203.12.65.0/24
+203.12.66.0/24
+203.12.70.0/23
+203.12.87.0/24
+203.12.88.0/21
+203.12.100.0/23
+203.12.103.0/24
+203.12.114.0/24
+203.12.118.0/24
+203.12.130.0/24
+203.12.137.0/24
+203.12.196.0/22
+203.12.200.0/21
+203.12.211.0/24
+203.12.219.0/24
+203.12.226.0/24
+203.12.240.0/22
+203.13.18.0/24
+203.13.24.0/24
+203.13.44.0/23
+203.13.80.0/21
+203.13.88.0/23
+203.13.92.0/22
+203.13.173.0/24
+203.13.224.0/23
+203.13.227.0/24
+203.13.233.0/24
+203.14.24.0/22
+203.14.33.0/24
+203.14.56.0/24
+203.14.61.0/24
+203.14.62.0/24
+203.14.104.0/24
+203.14.114.0/23
+203.14.118.0/24
+203.14.162.0/24
+203.14.184.0/21
+203.14.192.0/24
+203.14.194.0/23
+203.14.214.0/24
+203.14.231.0/24
+203.14.246.0/24
+203.15.0.0/20
+203.15.20.0/23
+203.15.22.0/24
+203.15.87.0/24
+203.15.88.0/23
+203.15.105.0/24
+203.15.112.0/21
+203.15.130.0/23
+203.15.149.0/24
+203.15.151.0/24
+203.15.156.0/22
+203.15.174.0/24
+203.15.227.0/24
+203.15.232.0/21
+203.15.240.0/23
+203.15.246.0/24
+203.16.10.0/24
+203.16.12.0/23
+203.16.16.0/21
+203.16.27.0/24
+203.16.38.0/24
+203.16.49.0/24
+203.16.50.0/23
+203.16.58.0/24
+203.16.63.0/24
+203.16.133.0/24
+203.16.161.0/24
+203.16.162.0/24
+203.16.186.0/23
+203.16.228.0/24
+203.16.238.0/24
+203.16.240.0/24
+203.16.245.0/24
+203.17.2.0/24
+203.17.18.0/24
+203.17.28.0/24
+203.17.39.0/24
+203.17.56.0/24
+203.17.74.0/23
+203.17.88.0/23
+203.17.136.0/24
+203.17.164.0/24
+203.17.187.0/24
+203.17.190.0/23
+203.17.231.0/24
+203.17.233.0/24
+203.17.248.0/23
+203.17.255.0/24
+203.18.2.0/23
+203.18.4.0/24
+203.18.7.0/24
+203.18.31.0/24
+203.18.37.0/24
+203.18.48.0/23
+203.18.52.0/24
+203.18.72.0/22
+203.18.80.0/23
+203.18.87.0/24
+203.18.100.0/23
+203.18.105.0/24
+203.18.107.0/24
+203.18.110.0/24
+203.18.129.0/24
+203.18.131.0/24
+203.18.132.0/23
+203.18.144.0/24
+203.18.153.0/24
+203.18.199.0/24
+203.18.208.0/24
+203.18.211.0/24
+203.18.215.0/24
+203.19.1.0/24
+203.19.18.0/24
+203.19.24.0/24
+203.19.30.0/24
+203.19.32.0/21
+203.19.41.0/24
+203.19.44.0/23
+203.19.46.0/24
+203.19.58.0/24
+203.19.60.0/23
+203.19.64.0/24
+203.19.68.0/24
+203.19.72.0/24
+203.19.101.0/24
+203.19.111.0/24
+203.19.131.0/24
+203.19.133.0/24
+203.19.144.0/24
+203.19.147.0/24
+203.19.149.0/24
+203.19.156.0/24
+203.19.176.0/24
+203.19.178.0/23
+203.19.208.0/24
+203.19.228.0/22
+203.19.233.0/24
+203.19.242.0/24
+203.19.248.0/23
+203.19.255.0/24
+203.20.17.0/24
+203.20.40.0/23
+203.20.44.0/24
+203.20.48.0/24
+203.20.61.0/24
+203.20.65.0/24
+203.20.84.0/23
+203.20.89.0/24
+203.20.106.0/23
+203.20.115.0/24
+203.20.117.0/24
+203.20.118.0/23
+203.20.122.0/24
+203.20.126.0/23
+203.20.135.0/24
+203.20.136.0/21
+203.20.150.0/24
+203.20.230.0/24
+203.20.232.0/24
+203.20.236.0/24
+203.21.0.0/23
+203.21.2.0/24
+203.21.8.0/24
+203.21.10.0/24
+203.21.18.0/24
+203.21.33.0/24
+203.21.34.0/24
+203.21.41.0/24
+203.21.44.0/24
+203.21.68.0/24
+203.21.82.0/24
+203.21.96.0/22
+203.21.124.0/24
+203.21.136.0/23
+203.21.145.0/24
+203.21.206.0/24
+203.22.24.0/24
+203.22.28.0/23
+203.22.31.0/24
+203.22.68.0/24
+203.22.76.0/24
+203.22.78.0/24
+203.22.84.0/24
+203.22.87.0/24
+203.22.92.0/22
+203.22.99.0/24
+203.22.106.0/24
+203.22.122.0/23
+203.22.131.0/24
+203.22.163.0/24
+203.22.166.0/24
+203.22.170.0/24
+203.22.176.0/21
+203.22.194.0/24
+203.22.242.0/23
+203.22.245.0/24
+203.22.246.0/24
+203.22.252.0/23
+203.23.0.0/24
+203.23.47.0/24
+203.23.61.0/24
+203.23.62.0/23
+203.23.73.0/24
+203.23.85.0/24
+203.23.92.0/22
+203.23.98.0/24
+203.23.107.0/24
+203.23.112.0/24
+203.23.130.0/24
+203.23.140.0/23
+203.23.172.0/24
+203.23.182.0/24
+203.23.186.0/23
+203.23.192.0/24
+203.23.197.0/24
+203.23.198.0/24
+203.23.204.0/22
+203.23.224.0/24
+203.23.226.0/23
+203.23.228.0/22
+203.23.249.0/24
+203.23.251.0/24
+203.24.13.0/24
+203.24.18.0/24
+203.24.27.0/24
+203.24.43.0/24
+203.24.56.0/24
+203.24.58.0/24
+203.24.67.0/24
+203.24.74.0/24
+203.24.79.0/24
+203.24.80.0/23
+203.24.84.0/23
+203.24.86.0/24
+203.24.90.0/24
+203.24.111.0/24
+203.24.112.0/24
+203.24.116.0/24
+203.24.122.0/23
+203.24.145.0/24
+203.24.152.0/23
+203.24.157.0/24
+203.24.161.0/24
+203.24.167.0/24
+203.24.186.0/23
+203.24.199.0/24
+203.24.202.0/24
+203.24.212.0/23
+203.24.217.0/24
+203.24.219.0/24
+203.24.244.0/24
+203.25.19.0/24
+203.25.20.0/23
+203.25.46.0/24
+203.25.48.0/21
+203.25.64.0/23
+203.25.91.0/24
+203.25.99.0/24
+203.25.100.0/24
+203.25.106.0/24
+203.25.131.0/24
+203.25.135.0/24
+203.25.138.0/24
+203.25.147.0/24
+203.25.153.0/24
+203.25.154.0/23
+203.25.164.0/24
+203.25.166.0/24
+203.25.174.0/23
+203.25.180.0/24
+203.25.182.0/24
+203.25.191.0/24
+203.25.199.0/24
+203.25.200.0/24
+203.25.202.0/23
+203.25.208.0/20
+203.25.229.0/24
+203.25.235.0/24
+203.25.236.0/24
+203.25.242.0/24
+203.26.12.0/24
+203.26.34.0/24
+203.26.49.0/24
+203.26.50.0/24
+203.26.55.0/24
+203.26.56.0/23
+203.26.60.0/24
+203.26.65.0/24
+203.26.68.0/24
+203.26.76.0/24
+203.26.80.0/24
+203.26.84.0/24
+203.26.97.0/24
+203.26.102.0/23
+203.26.115.0/24
+203.26.116.0/24
+203.26.129.0/24
+203.26.143.0/24
+203.26.144.0/24
+203.26.148.0/23
+203.26.154.0/24
+203.26.158.0/23
+203.26.161.0/24
+203.26.170.0/24
+203.26.173.0/24
+203.26.176.0/24
+203.26.185.0/24
+203.26.202.0/23
+203.26.210.0/24
+203.26.214.0/24
+203.26.222.0/24
+203.26.224.0/24
+203.26.228.0/24
+203.26.232.0/24
+203.27.0.0/24
+203.27.10.0/24
+203.27.15.0/24
+203.27.16.0/24
+203.27.20.0/24
+203.27.22.0/23
+203.27.40.0/24
+203.27.45.0/24
+203.27.53.0/24
+203.27.65.0/24
+203.27.66.0/24
+203.27.81.0/24
+203.27.88.0/24
+203.27.102.0/24
+203.27.109.0/24
+203.27.117.0/24
+203.27.121.0/24
+203.27.122.0/23
+203.27.125.0/24
+203.27.200.0/24
+203.27.202.0/24
+203.27.233.0/24
+203.27.241.0/24
+203.27.250.0/24
+203.28.10.0/24
+203.28.12.0/24
+203.28.33.0/24
+203.28.34.0/23
+203.28.43.0/24
+203.28.44.0/24
+203.28.54.0/24
+203.28.56.0/24
+203.28.73.0/24
+203.28.74.0/24
+203.28.76.0/24
+203.28.86.0/24
+203.28.88.0/24
+203.28.112.0/24
+203.28.131.0/24
+203.28.136.0/24
+203.28.140.0/24
+203.28.145.0/24
+203.28.165.0/24
+203.28.169.0/24
+203.28.170.0/24
+203.28.178.0/23
+203.28.185.0/24
+203.28.187.0/24
+203.28.196.0/24
+203.28.226.0/23
+203.28.239.0/24
+203.29.2.0/24
+203.29.8.0/23
+203.29.13.0/24
+203.29.14.0/24
+203.29.28.0/24
+203.29.46.0/24
+203.29.57.0/24
+203.29.61.0/24
+203.29.63.0/24
+203.29.69.0/24
+203.29.73.0/24
+203.29.81.0/24
+203.29.90.0/24
+203.29.95.0/24
+203.29.100.0/24
+203.29.103.0/24
+203.29.112.0/24
+203.29.120.0/22
+203.29.182.0/23
+203.29.187.0/24
+203.29.189.0/24
+203.29.190.0/24
+203.29.205.0/24
+203.29.210.0/24
+203.29.217.0/24
+203.29.227.0/24
+203.29.231.0/24
+203.29.233.0/24
+203.29.234.0/24
+203.29.248.0/24
+203.29.254.0/23
+203.30.16.0/23
+203.30.25.0/24
+203.30.27.0/24
+203.30.29.0/24
+203.30.66.0/24
+203.30.81.0/24
+203.30.87.0/24
+203.30.111.0/24
+203.30.121.0/24
+203.30.123.0/24
+203.30.152.0/24
+203.30.156.0/24
+203.30.162.0/24
+203.30.173.0/24
+203.30.175.0/24
+203.30.187.0/24
+203.30.194.0/24
+203.30.217.0/24
+203.30.220.0/24
+203.30.222.0/24
+203.30.232.0/23
+203.30.235.0/24
+203.30.240.0/23
+203.30.246.0/24
+203.30.250.0/23
+203.31.45.0/24
+203.31.46.0/24
+203.31.49.0/24
+203.31.51.0/24
+203.31.54.0/23
+203.31.69.0/24
+203.31.72.0/24
+203.31.80.0/24
+203.31.85.0/24
+203.31.97.0/24
+203.31.105.0/24
+203.31.106.0/24
+203.31.108.0/23
+203.31.124.0/24
+203.31.162.0/24
+203.31.174.0/24
+203.31.177.0/24
+203.31.181.0/24
+203.31.187.0/24
+203.31.189.0/24
+203.31.204.0/24
+203.31.220.0/24
+203.31.222.0/23
+203.31.225.0/24
+203.31.229.0/24
+203.31.248.0/23
+203.31.253.0/24
+203.32.20.0/24
+203.32.48.0/23
+203.32.56.0/24
+203.32.60.0/24
+203.32.62.0/24
+203.32.68.0/23
+203.32.76.0/24
+203.32.81.0/24
+203.32.84.0/23
+203.32.95.0/24
+203.32.102.0/24
+203.32.105.0/24
+203.32.130.0/24
+203.32.133.0/24
+203.32.140.0/24
+203.32.152.0/24
+203.32.186.0/23
+203.32.192.0/24
+203.32.196.0/24
+203.32.203.0/24
+203.32.204.0/23
+203.32.212.0/24
+203.33.4.0/24
+203.33.7.0/24
+203.33.8.0/21
+203.33.21.0/24
+203.33.26.0/24
+203.33.32.0/24
+203.33.63.0/24
+203.33.64.0/24
+203.33.67.0/24
+203.33.68.0/24
+203.33.73.0/24
+203.33.79.0/24
+203.33.100.0/24
+203.33.122.0/24
+203.33.129.0/24
+203.33.131.0/24
+203.33.145.0/24
+203.33.156.0/24
+203.33.158.0/23
+203.33.174.0/24
+203.33.185.0/24
+203.33.200.0/24
+203.33.202.0/23
+203.33.204.0/24
+203.33.206.0/23
+203.33.214.0/23
+203.33.224.0/23
+203.33.226.0/24
+203.33.233.0/24
+203.33.243.0/24
+203.33.250.0/24
+203.34.4.0/24
+203.34.21.0/24
+203.34.27.0/24
+203.34.39.0/24
+203.34.48.0/23
+203.34.54.0/24
+203.34.56.0/23
+203.34.67.0/24
+203.34.69.0/24
+203.34.76.0/24
+203.34.92.0/24
+203.34.106.0/24
+203.34.113.0/24
+203.34.147.0/24
+203.34.150.0/24
+203.34.152.0/23
+203.34.161.0/24
+203.34.162.0/24
+203.34.187.0/24
+203.34.192.0/21
+203.34.204.0/22
+203.34.232.0/24
+203.34.240.0/24
+203.34.242.0/24
+203.34.245.0/24
+203.34.251.0/24
+203.55.2.0/23
+203.55.4.0/24
+203.55.10.0/24
+203.55.13.0/24
+203.55.22.0/24
+203.55.30.0/24
+203.55.93.0/24
+203.55.101.0/24
+203.55.109.0/24
+203.55.110.0/24
+203.55.116.0/23
+203.55.119.0/24
+203.55.128.0/23
+203.55.146.0/23
+203.55.192.0/24
+203.55.196.0/24
+203.55.218.0/23
+203.55.221.0/24
+203.55.224.0/24
+203.56.1.0/24
+203.56.4.0/24
+203.56.12.0/24
+203.56.24.0/24
+203.56.38.0/24
+203.56.40.0/24
+203.56.46.0/24
+203.56.48.0/21
+203.56.68.0/23
+203.56.82.0/23
+203.56.84.0/23
+203.56.95.0/24
+203.56.110.0/24
+203.56.121.0/24
+203.56.161.0/24
+203.56.169.0/24
+203.56.172.0/23
+203.56.175.0/24
+203.56.183.0/24
+203.56.185.0/24
+203.56.187.0/24
+203.56.192.0/24
+203.56.198.0/24
+203.56.201.0/24
+203.56.208.0/23
+203.56.210.0/24
+203.56.214.0/24
+203.56.216.0/24
+203.56.227.0/24
+203.56.228.0/24
+203.56.231.0/24
+203.56.232.0/24
+203.56.240.0/24
+203.56.252.0/24
+203.56.254.0/24
+203.57.5.0/24
+203.57.6.0/24
+203.57.12.0/23
+203.57.28.0/24
+203.57.39.0/24
+203.57.46.0/24
+203.57.58.0/24
+203.57.61.0/24
+203.57.66.0/24
+203.57.69.0/24
+203.57.70.0/23
+203.57.73.0/24
+203.57.90.0/24
+203.57.101.0/24
+203.57.109.0/24
+203.57.123.0/24
+203.57.157.0/24
+203.57.200.0/24
+203.57.202.0/24
+203.57.206.0/24
+203.57.222.0/24
+203.57.224.0/20
+203.57.246.0/23
+203.57.249.0/24
+203.57.253.0/24
+203.57.254.0/23
+203.62.2.0/24
+203.62.131.0/24
+203.62.139.0/24
+203.62.161.0/24
+203.62.197.0/24
+203.62.228.0/22
+203.62.234.0/24
+203.62.246.0/24
+203.65.240.0/22
+203.76.160.0/22
+203.76.168.0/22
+203.76.208.0/21
+203.76.216.0/22
+203.76.240.0/21
+203.77.180.0/22
+203.78.48.0/20
+203.78.156.0/22
+203.79.0.0/20
+203.79.32.0/20
+203.80.4.0/23
+203.80.32.0/20
+203.80.57.0/24
+203.80.129.0/24
+203.80.132.0/22
+203.80.136.0/21
+203.80.144.0/20
+203.81.0.0/21
+203.81.16.0/20
+203.81.244.0/22
+203.82.0.0/23
+203.82.16.0/21
+203.82.112.0/20
+203.82.224.0/20
+203.83.0.0/22
+203.83.8.0/21
+203.83.56.0/21
+203.83.224.0/20
+203.86.0.0/17
+203.86.250.0/24
+203.86.254.0/23
+203.88.32.0/19
+203.88.192.0/19
+203.89.0.0/22
+203.89.8.0/21
+203.89.100.0/22
+203.89.133.0/24
+203.89.136.0/22
+203.89.144.0/24
+203.90.0.0/22
+203.90.8.0/21
+203.90.128.0/18
+203.90.192.0/19
+203.91.1.0/24
+203.91.32.0/19
+203.91.96.0/20
+203.91.120.0/21
+203.92.0.0/22
+203.92.6.0/24
+203.92.160.0/19
+203.93.0.0/16
+203.94.0.0/19
+203.95.0.0/21
+203.95.96.0/19
+203.95.128.0/18
+203.95.200.0/21
+203.95.208.0/22
+203.95.224.0/19
+203.99.8.0/21
+203.99.16.0/20
+203.99.80.0/20
+203.100.32.0/20
+203.100.48.0/21
+203.100.58.0/24
+203.100.60.0/24
+203.100.63.0/24
+203.100.80.0/20
+203.100.96.0/19
+203.100.192.0/20
+203.104.32.0/20
+203.105.96.0/19
+203.105.128.0/19
+203.107.0.0/17
+203.110.160.0/19
+203.110.208.0/20
+203.110.232.0/23
+203.110.234.0/24
+203.114.80.0/20
+203.114.244.0/22
+203.118.192.0/19
+203.118.241.0/24
+203.118.248.0/22
+203.119.24.0/21
+203.119.32.0/22
+203.119.80.0/22
+203.119.85.0/24
+203.119.113.0/24
+203.119.114.0/23
+203.119.116.0/22
+203.119.120.0/21
+203.119.128.0/17
+203.123.58.0/24
+203.128.32.0/19
+203.128.96.0/19
+203.128.128.0/24
+203.128.224.0/21
+203.129.8.0/21
+203.130.32.0/19
+203.132.32.0/19
+203.134.240.0/21
+203.135.96.0/19
+203.135.160.0/20
+203.142.12.0/23
+203.142.219.0/24
+203.142.224.0/19
+203.144.96.0/19
+203.145.0.0/19
+203.148.0.0/18
+203.148.64.0/20
+203.148.80.0/22
+203.148.86.0/23
+203.149.92.0/22
+203.152.64.0/19
+203.152.128.0/19
+203.153.0.0/22
+203.156.192.0/18
+203.158.16.0/21
+203.160.52.0/22
+203.160.104.0/21
+203.160.129.0/24
+203.160.192.0/19
+203.161.0.0/22
+203.161.180.0/24
+203.161.183.0/24
+203.161.192.0/19
+203.166.160.0/19
+203.167.28.0/22
+203.168.0.0/19
+203.170.58.0/23
+203.171.0.0/22
+203.171.208.0/24
+203.171.224.0/20
+203.174.4.0/24
+203.174.6.0/23
+203.174.96.0/19
+203.175.128.0/19
+203.175.192.0/18
+203.176.0.0/18
+203.176.64.0/19
+203.176.168.0/21
+203.184.80.0/20
+203.185.189.0/24
+203.187.160.0/19
+203.189.0.0/23
+203.189.6.0/23
+203.189.112.0/22
+203.189.192.0/19
+203.189.232.0/22
+203.189.240.0/22
+203.190.96.0/20
+203.190.249.0/24
+203.191.0.0/23
+203.191.2.0/24
+203.191.5.0/24
+203.191.7.0/24
+203.191.16.0/20
+203.191.64.0/18
+203.191.133.0/24
+203.191.144.0/20
+203.192.0.0/19
+203.193.224.0/19
+203.194.120.0/21
+203.195.64.0/19
+203.195.112.0/21
+203.195.128.0/17
+203.196.0.0/20
+203.196.28.0/22
+203.201.181.0/24
+203.201.182.0/24
+203.202.236.0/22
+203.205.64.0/19
+203.205.128.0/17
+203.207.64.0/18
+203.207.128.0/17
+203.208.0.0/20
+203.208.16.0/22
+203.208.32.0/19
+203.209.224.0/19
+203.212.0.0/20
+203.212.80.0/20
+203.215.232.0/21
+203.217.164.0/22
+203.222.192.0/20
+203.223.0.0/20
+203.223.16.0/21
+204.55.160.0/24
+204.74.96.0/24
+204.114.176.0/23
+206.219.44.0/23
+206.219.50.0/23
+206.219.52.0/23
+207.89.20.0/24
+210.2.0.0/19
+210.5.0.0/19
+210.5.56.0/21
+210.5.128.0/19
+210.7.56.0/21
+210.12.0.0/15
+210.14.64.0/19
+210.14.112.0/20
+210.14.128.0/17
+210.15.0.0/17
+210.15.128.0/18
+210.16.104.0/22
+210.16.128.0/18
+210.21.0.0/16
+210.22.0.0/16
+210.23.32.0/19
+210.25.0.0/16
+210.26.0.0/15
+210.28.0.0/14
+210.32.0.0/12
+210.51.0.0/16
+210.52.0.0/15
+210.56.192.0/19
+210.72.0.0/14
+210.76.0.0/15
+210.78.0.0/16
+210.79.64.0/18
+210.79.224.0/19
+210.82.0.0/15
+210.87.128.0/18
+210.185.192.0/18
+210.192.96.0/19
+211.64.0.0/13
+211.80.0.0/12
+211.96.0.0/13
+211.136.0.0/13
+211.144.0.0/12
+211.160.0.0/13
+212.64.0.0/17
+212.129.128.0/17
+216.250.108.0/22
+218.0.0.0/11
+218.56.0.0/13
+218.64.0.0/11
+218.96.0.0/14
+218.100.88.0/21
+218.100.96.0/19
+218.100.128.0/17
+218.104.0.0/14
+218.108.0.0/15
+218.185.192.0/19
+218.185.240.0/21
+218.192.0.0/12
+218.240.0.0/13
+218.249.0.0/16
+219.72.0.0/16
+219.82.0.0/16
+219.83.128.0/17
+219.90.68.0/22
+219.90.72.0/21
+219.128.0.0/11
+219.216.0.0/13
+219.224.0.0/12
+219.242.0.0/15
+219.244.0.0/14
+220.101.192.0/18
+220.112.0.0/14
+220.152.128.0/17
+220.154.0.0/15
+220.158.240.0/22
+220.160.0.0/11
+220.192.0.0/12
+220.231.0.0/18
+220.231.128.0/17
+220.232.64.0/18
+220.234.0.0/16
+220.242.0.0/15
+220.247.136.0/21
+220.248.0.0/14
+220.252.0.0/16
+221.0.0.0/13
+221.8.0.0/14
+221.12.0.0/17
+221.12.128.0/18
+221.13.0.0/16
+221.14.0.0/15
+221.122.0.0/15
+221.128.128.0/17
+221.129.0.0/16
+221.130.0.0/15
+221.133.224.0/19
+221.136.0.0/15
+221.172.0.0/14
+221.176.0.0/13
+221.192.0.0/14
+221.196.0.0/15
+221.198.0.0/16
+221.199.0.0/17
+221.199.128.0/18
+221.199.192.0/20
+221.199.224.0/19
+221.200.0.0/13
+221.208.0.0/12
+221.224.0.0/12
+222.16.0.0/12
+222.32.0.0/11
+222.64.0.0/11
+222.125.0.0/16
+222.126.128.0/17
+222.128.0.0/12
+222.160.0.0/14
+222.168.0.0/13
+222.176.0.0/12
+222.192.0.0/11
+222.240.0.0/13
+222.248.0.0/15
+223.0.0.0/12
+223.20.0.0/15
+223.27.184.0/22
+223.29.208.0/22
+223.29.252.0/22
+223.64.0.0/11
+223.96.0.0/12
+223.112.0.0/14
+223.116.0.0/15
+223.120.0.0/13
+223.128.0.0/15
+223.144.0.0/12
+223.160.0.0/14
+223.166.0.0/15
+223.192.0.0/15
+223.198.0.0/15
+223.201.0.0/16
+223.202.0.0/15
+223.208.0.0/13
+223.220.0.0/15
+223.223.176.0/20
+223.223.192.0/20
+223.240.0.0/13
+223.248.0.0/14
+223.252.128.0/17
+223.254.0.0/16
+223.255.0.0/17
+223.255.236.0/22
+223.255.252.0/23
diff --git a/client/android/shadowsocks/src/main/res/strings.xml b/client/android/shadowsocks/src/main/res/strings.xml
new file mode 100644
index 00000000..2d6bc13e
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/strings.xml
@@ -0,0 +1,160 @@
+
+
+ shadowsocks
+ Toggle
+ Send email
+
+
+ Service mode
+ Proxy only
+ VPN
+ Transproxy
+ Share over LAN
+ SOCKS5 proxy port
+ Local DNS port
+ Transproxy port
+
+ Remote DNS
+ %1$s↑\t%2$s↓
+ Sent: \t\t\t\t\t%3$s\t↑\t%1$s\nReceived: \t%4$s\t↓\t%2$s
+ %s/s
+ Check Connectivity
+ Testing…
+ Success: HTTPS handshake took %dms
+ Fail to detect internet connection: %s
+ Internet Unavailable
+ Error code: #%d
+
+
+ Profile Name
+ Server
+ Remote Port
+ Password
+ Encrypt Method
+
+
+ IPv6 Route
+ Redirect IPv6 traffic to remote
+ Metered Hint
+ Hint system to treat VPN as metered
+ Route
+ All
+ Bypass LAN
+ Bypass mainland China
+ Bypass LAN & mainland China
+ GFW List
+ China List
+ Apps VPN mode
+ Configure VPN mode for selected apps
+ On
+ Off
+ Mode
+ Bypass
+ Enable this option to bypass selected apps
+ Auto Connect
+ Enable Shadowsocks on startup
+ Enable Shadowsocks on startup. Recommended to use always-on VPN
+ instead
+ Allow Toggling in Lock Screen
+ Your selected profile information will be less protected
+ Toggling might require ROOT permission
+ Unsupported kernel version: %s < 3.7.1
+ Toggle failed
+ Send DNS over UDP
+ Requires UDP forwarding on server side
+ UDP Fallback
+
+
+ VPN Service
+ Proxy Service
+ Transproxy Service
+ Shadowsocks started.
+ Invalid server name
+ Failed to connect the remote server
+ Stop
+ Shutting down…
+ %s
+ Permission denied to create a VPN service
+ Failed to start VPN service. You might need to reboot your device.
+ No valid profile data found.
+
+
+ Please select a profile
+ Proxy/Password should not be empty
+ Please install a file manager like MiXplorer
+ Connect
+
+
+ Profiles
+ Settings
+ FAQ
+ https://github.com/shadowsocks/shadowsocks-android/blob/master/.github/faq.md
+ About
+ Shadowsocks %s
+ Edit
+ Share
+ Add Profile
+ Apply Settings to All Profiles
+ Export…
+ Export to file…
+ Export to Clipboard
+ Import from Clipboard
+ Import from file…
+ Replace from file…
+ Successfully export!
+ Failed to export.
+ Successfully import!
+ Failed to import.
+
+
+ Profile config
+ Remove
+ Are you sure you want to remove this profile?
+ QR code/NFC
+ Add this Shadowsocks Profile?
+ Scan QR code
+ Manual Settings
+ Camera permission is required for scanning QR code.
+
+ - Removed
+ - %d items removed
+
+ Undo
+
+
+ Start the service
+ Connect to the current server
+ Connect to %s
+ Switch to %s
+ Use the current profile
+
+
+ Connecting…
+ Connected, tap to check connection
+ Not connected
+
+
+ Custom rules
+ Add rule(s)…
+ Subnet or Hostname PCRE pattern
+ Domain name and all its subdomain names
+ URL to online config
+ Edit rule
+ Cleartext HTTP traffic is insecure
+
+
+ Plugin
+ Configure…
+ Disabled
+ Unknown plugin %s
+ Warning: This plugin does not seem to come from a known trusted source.
+ Plugin: %s
+
+
+ Server Settings
+ Feature Settings
+ Changes not saved. Do you want to save?
+ Yes
+ No
+ Apply
+
diff --git a/client/android/shadowsocks/src/main/res/values/arrays.xml b/client/android/shadowsocks/src/main/res/values/arrays.xml
new file mode 100644
index 00000000..62398ca9
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/values/arrays.xml
@@ -0,0 +1,215 @@
+
+
+
+ - RC4-MD5
+ - AES-128-CFB
+ - AES-192-CFB
+ - AES-256-CFB
+ - AES-128-CTR
+ - AES-192-CTR
+ - AES-256-CTR
+ - BF-CFB
+ - CAMELLIA-128-CFB
+ - CAMELLIA-192-CFB
+ - CAMELLIA-256-CFB
+ - SALSA20
+ - CHACHA20
+ - CHACHA20-IETF
+ - AES-128-GCM
+ - AES-192-GCM
+ - AES-256-GCM
+ - CHACHA20-IETF-POLY1305
+ - XCHACHA20-IETF-POLY1305
+
+
+
+ - rc4-md5
+ - aes-128-cfb
+ - aes-192-cfb
+ - aes-256-cfb
+ - aes-128-ctr
+ - aes-192-ctr
+ - aes-256-ctr
+ - bf-cfb
+ - camellia-128-cfb
+ - camellia-192-cfb
+ - camellia-256-cfb
+ - salsa20
+ - chacha20
+ - chacha20-ietf
+ - aes-128-gcm
+ - aes-192-gcm
+ - aes-256-gcm
+ - chacha20-ietf-poly1305
+ - xchacha20-ietf-poly1305
+
+
+
+ - 1.0.0.0/8
+ - 2.0.0.0/7
+ - 4.0.0.0/6
+ - 8.0.0.0/7
+ - 11.0.0.0/8
+ - 12.0.0.0/6
+ - 16.0.0.0/4
+ - 32.0.0.0/3
+ - 64.0.0.0/3
+ - 96.0.0.0/6
+ - 100.0.0.0/10
+ - 100.128.0.0/9
+ - 101.0.0.0/8
+ - 102.0.0.0/7
+ - 104.0.0.0/5
+ - 112.0.0.0/10
+ - 112.64.0.0/11
+ - 112.96.0.0/12
+ - 112.112.0.0/13
+ - 112.120.0.0/14
+ - 112.124.0.0/19
+ - 112.124.32.0/21
+ - 112.124.40.0/22
+ - 112.124.44.0/23
+ - 112.124.46.0/24
+ - 112.124.48.0/20
+ - 112.124.64.0/18
+ - 112.124.128.0/17
+ - 112.125.0.0/16
+ - 112.126.0.0/15
+ - 112.128.0.0/9
+ - 113.0.0.0/8
+ - 114.0.0.0/10
+ - 114.64.0.0/11
+ - 114.96.0.0/12
+ - 114.112.0.0/15
+ - 114.114.0.0/18
+ - 114.114.64.0/19
+ - 114.114.96.0/20
+ - 114.114.112.0/23
+ - 114.114.115.0/24
+ - 114.114.116.0/22
+ - 114.114.120.0/21
+ - 114.114.128.0/17
+ - 114.115.0.0/16
+ - 114.116.0.0/14
+ - 114.120.0.0/13
+ - 114.128.0.0/9
+ - 115.0.0.0/8
+ - 116.0.0.0/6
+ - 120.0.0.0/6
+ - 124.0.0.0/7
+ - 126.0.0.0/8
+ - 128.0.0.0/3
+ - 160.0.0.0/5
+ - 168.0.0.0/8
+ - 169.0.0.0/9
+ - 169.128.0.0/10
+ - 169.192.0.0/11
+ - 169.224.0.0/12
+ - 169.240.0.0/13
+ - 169.248.0.0/14
+ - 169.252.0.0/15
+ - 169.255.0.0/16
+ - 170.0.0.0/7
+ - 172.0.0.0/12
+ - 172.32.0.0/11
+ - 172.64.0.0/10
+ - 172.128.0.0/9
+ - 173.0.0.0/8
+ - 174.0.0.0/7
+ - 176.0.0.0/4
+ - 192.0.0.8/29
+ - 192.0.0.16/28
+ - 192.0.0.32/27
+ - 192.0.0.64/26
+ - 192.0.0.128/25
+ - 192.0.1.0/24
+ - 192.0.3.0/24
+ - 192.0.4.0/22
+ - 192.0.8.0/21
+ - 192.0.16.0/20
+ - 192.0.32.0/19
+ - 192.0.64.0/18
+ - 192.0.128.0/17
+ - 192.1.0.0/16
+ - 192.2.0.0/15
+ - 192.4.0.0/14
+ - 192.8.0.0/13
+ - 192.16.0.0/12
+ - 192.32.0.0/11
+ - 192.64.0.0/12
+ - 192.80.0.0/13
+ - 192.88.0.0/18
+ - 192.88.64.0/19
+ - 192.88.96.0/23
+ - 192.88.98.0/24
+ - 192.88.100.0/22
+ - 192.88.104.0/21
+ - 192.88.112.0/20
+ - 192.88.128.0/17
+ - 192.89.0.0/16
+ - 192.90.0.0/15
+ - 192.92.0.0/14
+ - 192.96.0.0/11
+ - 192.128.0.0/11
+ - 192.160.0.0/13
+ - 192.169.0.0/16
+ - 192.170.0.0/15
+ - 192.172.0.0/14
+ - 192.176.0.0/12
+ - 192.192.0.0/10
+ - 193.0.0.0/8
+ - 194.0.0.0/7
+ - 196.0.0.0/7
+ - 198.0.0.0/12
+ - 198.16.0.0/15
+ - 198.20.0.0/14
+ - 198.24.0.0/13
+ - 198.32.0.0/12
+ - 198.48.0.0/15
+ - 198.50.0.0/16
+ - 198.51.0.0/18
+ - 198.51.64.0/19
+ - 198.51.96.0/22
+ - 198.51.101.0/24
+ - 198.51.102.0/23
+ - 198.51.104.0/21
+ - 198.51.112.0/20
+ - 198.51.128.0/17
+ - 198.52.0.0/14
+ - 198.56.0.0/13
+ - 198.64.0.0/10
+ - 198.128.0.0/9
+ - 199.0.0.0/8
+ - 200.0.0.0/7
+ - 202.0.0.0/8
+ - 203.0.0.0/18
+ - 203.0.64.0/19
+ - 203.0.96.0/20
+ - 203.0.112.0/24
+ - 203.0.114.0/23
+ - 203.0.116.0/22
+ - 203.0.120.0/21
+ - 203.0.128.0/17
+ - 203.1.0.0/16
+ - 203.2.0.0/15
+ - 203.4.0.0/14
+ - 203.8.0.0/13
+ - 203.16.0.0/12
+ - 203.32.0.0/11
+ - 203.64.0.0/10
+ - 203.128.0.0/9
+ - 204.0.0.0/6
+ - 208.0.0.0/4
+
+
+
+ - @string/service_mode_proxy
+ - @string/service_mode_vpn
+ - @string/service_mode_transproxy
+
+
+ - proxy
+ - vpn
+ - transproxy
+
+
\ No newline at end of file
diff --git a/client/android/shadowsocks/src/main/res/values/colors.xml b/client/android/shadowsocks/src/main/res/values/colors.xml
new file mode 100644
index 00000000..b02e47f5
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/values/colors.xml
@@ -0,0 +1,23 @@
+
+
+ #7488A1
+ #388E3C
+ #00C853
+ #CFD8DC
+ #90A4AE
+ #607D8B
+ #546E7A
+ #455A64
+ @color/material_blue_grey_100
+ @color/material_blue_grey_300
+ @color/material_blue_grey_500
+ @color/material_blue_grey_600
+ @color/material_blue_grey_700
+ @color/material_blue_grey_800
+ @color/material_blue_grey_900
+ @color/material_green_a700
+
+ @color/material_primary_500
+ @color/material_primary_700
+ @color/material_primary_500
+
diff --git a/client/android/shadowsocks/src/main/res/values/strings.xml b/client/android/shadowsocks/src/main/res/values/strings.xml
new file mode 100644
index 00000000..898de673
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/values/strings.xml
@@ -0,0 +1,169 @@
+
+
+ shadowsocks
+
+ VPN
+ %s/s
+
+
+ "Switch"
+ "Remote DNS"
+ "Upload: \t%3$s\t↑\t%1$s
+Download: \t%4$s\t↓\t%2$s"
+ "Testing…"
+ "Connection successful: HTTPS handshake delay %d milliseconds"
+ "Failed: %s"
+ "No Internet Connection"
+ "Invalid status code (#%d) "
+
+
+ "Profile name"
+ "Server"
+ "Remote Port"
+ "Password"
+ "Encryption"
+
+
+ "IPv6 routing"
+ "Forward IPv6 traffic to remote server"
+ "Routing"
+ "GFW List"
+ "Proxied VPN"
+ "Allow some apps to bypass VPN"
+ "On"
+ "Bypass"
+ "Bypass selected apps"
+ "Auto connect"
+ "Allow Shadowsocks to start with the system"
+ "Switching may require ROOT permissions"
+ "Unsupported kernel version: %s < 3.7.1"
+ "Using UDP DNS"
+ "Requires remote server to support UDP forwarding"
+
+
+ "Background service has started running. "
+ "Invalid server name"
+ "Unable to connect to remote server"
+ "Stop"
+ "stopping…"
+ "Background service failed to start: %s"
+ "VPN service failed to start. You may need to restart your device."
+ "No valid configuration file found."
+
+
+ "Please select a profile"
+ "The proxy server address and password cannot be empty"
+ "Connect"
+
+
+ "Profiles"
+ "Settings"
+ "FAQ"
+ "About"
+ "Shadowsocks %s"
+ "Edit"
+ "Share"
+ "Add Profile"
+ "Apply settings to all profiles"
+ "Export to clipboard"
+ "Import from clipboard"
+ "Export to clipboard succeeded"
+ "Export to clipboard failed"
+ "Import successful"
+ "Import failed"
+
+
+ "Profile Config"
+ "Delete"
+ "Are you sure you want to delete this profile?"
+ "QR code / NFC"
+ "Add this profile for Shadowsock?"
+ "Scan QR code"
+
+ - "%d items deleted"
+
+ "Undo"
+
+
+ "Start service"
+ "Connect to the current server"
+ "Connect to %s"
+ "Switch to %s"
+ "Use current profile"
+
+
+ "Send: "
+ "Received:"
+
+
+ "connecting…"
+ "Connected, click Test Connection"
+ "Not connected"
+
+
+ "Custom rules"
+ "Add rule…"
+ "Edit rules"
+ "Global"
+ "Bypass LAN addresses"
+ "Bypass mainland China addresses"
+ "Bypass LAN and Mainland China addresses"
+ "Proxy only for mainland China addresses"
+ "Subnet/Domain PCRE Regular Expression"
+ "Domain names and their subdomains"
+
+
+ "Plugin"
+ "Configure…"
+ "Disabled"
+ "Unknown plugin %s"
+ "Warning: This plugin does not appear to be from a known trusted source."
+ "Plugin: %s"
+ "Scanning the QR code requires permission to use the camera."
+
+
+ "VPN service"
+ "Manual setting"
+
+
+ "Advanced options"
+
+
+ "Service mode"
+ "Proxy only"
+ "Transparent proxy"
+ "SOCKS5 proxy port"
+ "local DNS port"
+ "Transparent proxy port"
+ "Proxy mode"
+ "Transparent proxy mode"
+ "Insufficient permission to create VPN service"
+ "Allow Shadowsocks to start with the system, an always-on VPN is recommended"
+ "Allow toggle on lock screen"
+ "The selected configuration information will be less secure"
+ "Online Rules File URL"
+ "Import from file…"
+ "Night Mode"
+ "System"
+ "Auto"
+ "On"
+ "Off"
+ "Send email"
+ "Export…"
+ "Export to file…"
+ "HTTP clear text traffic is not secure"
+ "Share via LAN"
+ "Check connection"
+ "Please install a file manager such as MiXplorer"
+ "Failed to switch"
+ "UDP configuration"
+ "Replace from file…"
+ "Off"
+ "model"
+ "Server settings"
+ "Function settings"
+ "Do you want to save the changes?"
+ "Yes"
+ "No"
+ "Apply"
+
\ No newline at end of file
diff --git a/client/android/shadowsocks/src/main/res/values/styles.xml b/client/android/shadowsocks/src/main/res/values/styles.xml
new file mode 100644
index 00000000..57082012
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/values/styles.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
diff --git a/client/android/shadowsocks/src/main/res/xml/backup_descriptor.xml b/client/android/shadowsocks/src/main/res/xml/backup_descriptor.xml
new file mode 100644
index 00000000..f2b77dc6
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/xml/backup_descriptor.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/client/android/shadowsocks/src/main/res/xml/default_configs.xml b/client/android/shadowsocks/src/main/res/xml/default_configs.xml
new file mode 100644
index 00000000..c98452dd
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/xml/default_configs.xml
@@ -0,0 +1,7 @@
+
+
+
+ proxy_url
+ https://socks123.azureedge.net/get.php
+
+
diff --git a/client/android/shadowsocks/src/main/res/xml/network_security_config.xml b/client/android/shadowsocks/src/main/res/xml/network_security_config.xml
new file mode 100644
index 00000000..c9828fa4
--- /dev/null
+++ b/client/android/shadowsocks/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/client/android/src/org/amnezia/vpn/VPNService.kt b/client/android/src/org/amnezia/vpn/VPNService.kt
index f5097ba4..a1f8550c 100644
--- a/client/android/src/org/amnezia/vpn/VPNService.kt
+++ b/client/android/src/org/amnezia/vpn/VPNService.kt
@@ -6,18 +6,137 @@ package org.amnezia.vpn
import android.content.Context
import android.content.Intent
-import android.os.Build
-import android.os.IBinder
+import android.content.pm.PackageManager
+import android.net.LocalSocket
+import android.net.LocalSocketAddress
+import android.net.Network
import android.net.ProxyInfo
-import android.os.ParcelFileDescriptor
+import android.os.*
+import android.system.ErrnoException
+import android.system.Os
import android.system.OsConstants
import com.wireguard.android.util.SharedLibraryLoader
import com.wireguard.config.*
import com.wireguard.crypto.Key
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import org.amnezia.vpn.shadowsocks.core.Core
+import org.amnezia.vpn.shadowsocks.core.R
+import org.amnezia.vpn.shadowsocks.core.VpnRequestActivity
+import org.amnezia.vpn.shadowsocks.core.acl.Acl
+import org.amnezia.vpn.shadowsocks.core.bg.*
+import org.amnezia.vpn.shadowsocks.core.database.Profile
+import org.amnezia.vpn.shadowsocks.core.database.ProfileManager
+import org.amnezia.vpn.shadowsocks.core.net.ConcurrentLocalSocketListener
+import org.amnezia.vpn.shadowsocks.core.net.DefaultNetworkListener
+import org.amnezia.vpn.shadowsocks.core.net.Subnet
+import org.amnezia.vpn.shadowsocks.core.preference.DataStore
+import org.amnezia.vpn.shadowsocks.core.utils.Key.modeVpn
+import org.amnezia.vpn.shadowsocks.core.utils.printLog
import org.json.JSONObject
+import java.io.Closeable
+import java.io.File
+import java.io.FileDescriptor
+import java.io.IOException
+import android.net.VpnService as BaseVpnService
+
+
+class VPNService : BaseVpnService(), LocalDnsService.Interface {
+
+ override val data = BaseService.Data(this)
+ override val tag: String get() = "VPNService"
+// override fun createNotification(profileName: String): ServiceNotification =
+// ServiceNotification(this, profileName, "service-vpn")
+
+ private var conn: ParcelFileDescriptor? = null
+ private var worker: ProtectWorker? = null
+ private var active = false
+ private var metered = false
+ private var underlyingNetwork: Network? = null
+ set(value) {
+ field = value
+ if (active && Build.VERSION.SDK_INT >= 22) setUnderlyingNetworks(underlyingNetworks)
+ }
+ private val underlyingNetworks
+ get() =
+ // clearing underlyingNetworks makes Android 9+ consider the network to be metered
+ if (Build.VERSION.SDK_INT >= 28 && metered) null else underlyingNetwork?.let {
+ arrayOf(
+ it
+ )
+ }
+
+ val handler = Handler(Looper.getMainLooper())
+ var runnable: Runnable = object : Runnable {
+ override fun run() {
+ if (mProtocol.equals("shadowsocks", true)) {
+ Log.e(tag, "run: -----------------: ${data.state}")
+ when (data.state) {
+ BaseService.State.Connected -> {
+ currentTunnelHandle = 1
+ isUp = true
+ }
+ BaseService.State.Stopped -> {
+ currentTunnelHandle = -1
+ isUp = false
+ }
+ else -> {
+
+ }
+ }
+ }
+ handler.postDelayed(this, 1000L) //wait 4 sec and run again
+ }
+ }
+
+ fun stopTest() {
+ handler.removeCallbacks(runnable)
+ }
+
+ fun startTest() {
+ handler.postDelayed(runnable, 0) //wait 0 ms and run
+ }
+
+ companion object {
+ private const val VPN_MTU = 1500
+ private const val PRIVATE_VLAN4_CLIENT = "172.19.0.1"
+ private const val PRIVATE_VLAN4_ROUTER = "172.19.0.2"
+ private const val PRIVATE_VLAN6_CLIENT = "fdfe:dcba:9876::1"
+ private const val PRIVATE_VLAN6_ROUTER = "fdfe:dcba:9876::2"
+
+ /**
+ * https://android.googlesource.com/platform/prebuilts/runtime/+/94fec32/appcompat/hiddenapi-light-greylist.txt#9466
+ */
+ private val getInt = FileDescriptor::class.java.getDeclaredMethod("getInt$")
+
+ @JvmStatic
+ fun startService(c: Context) {
+ c.applicationContext.startService(
+ Intent(c.applicationContext, VPNService::class.java).apply {
+ putExtra("startOnly", true)
+ })
+ }
+
+ @JvmStatic
+ private external fun wgGetConfig(handle: Int): String?
+
+ @JvmStatic
+ private external fun wgGetSocketV4(handle: Int): Int
+
+ @JvmStatic
+ private external fun wgGetSocketV6(handle: Int): Int
+
+ @JvmStatic
+ private external fun wgTurnOff(handle: Int)
+
+ @JvmStatic
+ private external fun wgTurnOn(ifName: String, tunFd: Int, settings: String): Int
+
+ @JvmStatic
+ private external fun wgVersion(): String?
+ }
-class VPNService : android.net.VpnService() {
- private val tag = "VPNService"
private var mBinder: VPNServiceBinder = VPNServiceBinder(this)
private var mConfig: JSONObject? = null
private var mProtocol: String? = null
@@ -26,7 +145,11 @@ class VPNService : android.net.VpnService() {
private var mbuilder: Builder = Builder()
private var mOpenVPNThreadv3: OpenVPNThreadv3? = null
- private var currentTunnelHandle = -1
+ var currentTunnelHandle = -1
+
+ private var intent: Intent? = null
+ private var flags = 0
+ private var startId = 0
fun init() {
if (mAlreadyInitialised) {
@@ -39,11 +162,18 @@ class VPNService : android.net.VpnService() {
Log.e(tag, "Wireguard Version ${wgVersion()}")
mOpenVPNThreadv3 = OpenVPNThreadv3(this)
mAlreadyInitialised = true
+ }
+ override fun onCreate() {
+ super.onCreate()
+// Log.v(tag, "Aman: onCreate....................")
+// Log.v(tag, "Aman: onCreate....................")
+// Log.v(tag, "Aman: onCreate....................")
+// NotificationUtil.show(this) // Go foreground
}
override fun onUnbind(intent: Intent?): Boolean {
- Log.v(tag, "Got Unbind request")
+ Log.v(tag, "Aman: onUnbind....................")
if (!isUp) {
// If the Qt Client got closed while we were not connected
// we do not need to stay as a foreground service.
@@ -56,9 +186,21 @@ class VPNService : android.net.VpnService() {
* EntryPoint for the Service, gets Called when AndroidController.cpp
* calles bindService. Returns the [VPNServiceBinder] so QT can send Requests to it.
*/
- override fun onBind(intent: Intent?): IBinder? {
- Log.v(tag, "Got Bind request")
- init()
+ override fun onBind(intent: Intent): IBinder {
+ Log.v(tag, "Aman: onBind....................")
+ when (mProtocol) {
+ "shadowsocks" -> {
+ when (intent.action) {
+ SERVICE_INTERFACE -> super.onBind(intent)
+ else -> super.onBind(intent)
+ }
+ startTest()
+ }
+ else -> {
+ init()
+ }
+ }
+
return mBinder
}
@@ -68,11 +210,16 @@ class VPNService : android.net.VpnService() {
* or from Booting the device and having "connect on boot" enabled.
*/
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
+ Log.v(tag, "Aman: onStartCommand....................")
+ this.intent = intent
+ this.flags = flags
+ this.startId = startId
init()
intent?.let {
- if (intent.getBooleanExtra("startOnly", false)) {
+ if (!isUp && intent.getBooleanExtra("startOnly", false)) {
Log.i(tag, "Start only!")
- return super.onStartCommand(intent, flags, startId)
+ return START_REDELIVER_INTENT
+// return super.onStartCommand(intent, flags, startId)
}
}
// This start is from always-on
@@ -82,21 +229,39 @@ class VPNService : android.net.VpnService() {
val lastConfString = prefs.getString("lastConf", "")
if (lastConfString.isNullOrEmpty()) {
// We have nothing to connect to -> Exit
- Log.e(
- tag,
- "VPN service was triggered without defining a Server or having a tunnel"
- )
- return super.onStartCommand(intent, flags, startId)
+ Log.e(tag, "VPN service was triggered without defining a Server or having a tunnel")
+ return super.onStartCommand(intent, flags, startId)
}
this.mConfig = JSONObject(lastConfString)
}
- return super.onStartCommand(intent, flags, startId)
+ mProtocol = mConfig!!.getString("protocol")
+ Log.e(tag, "mProtocol: $mProtocol")
+ if (mProtocol.equals("shadowsocks", true)) {
+ if (DataStore.serviceMode == modeVpn) {
+ if (prepare(this) != null) {
+ startActivity(
+ Intent(
+ this,
+ VpnRequestActivity::class.java
+ ).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ )
+ } else {
+ Log.e(tag, "Else part enter")
+// service?.startListeningForBandwidth(serviceCallback, 1000)
+ Log.e(tag, "test")
+ return super.onStartCommand(intent, flags, startId)
+ }
+ }
+ stopRunner()
+ }
+ return START_REDELIVER_INTENT
}
// Invoked when the application is revoked.
// At this moment, the VPN interface is already deactivated by the system.
override fun onRevoke() {
+ Log.v(tag, "Aman: onRevoke....................")
this.turnOff()
super.onRevoke()
}
@@ -149,6 +314,7 @@ class VPNService : android.net.VpnService() {
}
fun turnOn(json: JSONObject?): Int {
+ Log.v(tag, "Aman: turnOn....................")
if (!checkPermissions()) {
Log.e(tag, "turn on was called without no permissions present!")
isUp = false
@@ -156,20 +322,31 @@ class VPNService : android.net.VpnService() {
}
Log.i(tag, "Permission okay")
mConfig = json!!
+ Log.i(tag, "Config: $mConfig")
mProtocol = mConfig!!.getString("protocol")
+ Log.i(tag, "Protocol: $mProtocol")
when (mProtocol) {
- "openvpn" -> startOpenVpn()
- "wireguard" -> startWireGuard()
+ "openvpn" -> {
+ startOpenVpn()
+ }
+ "wireguard" -> {
+ startWireGuard()
+ }
+ "shadowsocks" -> {
+ startShadowsocks()
+ startTest()
+ }
else -> {
Log.e(tag, "No protocol")
return 0
}
}
- NotificationUtil.show(this) // Go foreground
+ NotificationUtil.show(this)
return 1
}
fun establish(): ParcelFileDescriptor? {
+ Log.v(tag, "Aman: establish....................")
mbuilder.allowFamily(OsConstants.AF_INET)
mbuilder.allowFamily(OsConstants.AF_INET6)
@@ -209,7 +386,9 @@ class VPNService : android.net.VpnService() {
fun addHttpProxy(host: String, port: Int): Boolean {
val proxyInfo = ProxyInfo.buildDirectProxy(host, port)
Log.v(tag, "mbuilder.addHttpProxy($host, $port)")
- mbuilder.setHttpProxy(proxyInfo)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ mbuilder.setHttpProxy(proxyInfo)
+ }
return true
}
@@ -219,19 +398,22 @@ class VPNService : android.net.VpnService() {
}
fun turnOff() {
- Log.v(tag, "Try to disable tunnel")
+ Log.v(tag, "Aman: turnOff....................")
when (mProtocol) {
"wireguard" -> wgTurnOff(currentTunnelHandle)
"openvpn" -> ovpnTurnOff()
+ "shadowsocks" -> {
+ stopRunner(false)
+ stopTest()
+ }
else -> {
Log.e(tag, "No protocol")
}
}
currentTunnelHandle = -1
stopForeground(true)
-
isUp = false
- stopSelf();
+ stopSelf()
}
@@ -338,7 +520,9 @@ class VPNService : android.net.VpnService() {
peerBuilder.addAllowedIp(network)
}
}
- peerBuilder.setEndpoint(InetEndpoint.parse(peerConfig["Endpoint"]))
+ val endpointConfig = peerConfig["Endpoint"]
+ val endpoint = InetEndpoint.parse(endpointConfig)
+ peerBuilder.setEndpoint(endpoint)
peerConfig["PersistentKeepalive"]?.let {
peerBuilder.setPersistentKeepalive(it.toInt())
}
@@ -365,6 +549,97 @@ class VPNService : android.net.VpnService() {
return mConfig!!
}
+ private fun startShadowsocks() {
+ Log.e(tag, "startShadowsocks method enters")
+ if (mConfig != null) {
+ try {
+ Log.e(tag, "Config: $mConfig")
+
+ ProfileManager.clear()
+ val profile = Profile()
+// val iter: Iterator = mConfig!!.keys()
+// while (iter.hasNext()) {
+// val key = iter.next()
+// try {
+// val value: Any = mConfig!!.get(key)
+// Log.i(tag, "startShadowsocks: $key : $value")
+// } catch (e: JSONException) {
+// // Something went wrong!
+// }
+// }
+
+ val shadowsocksConfig = mConfig?.getJSONObject("shadowsocks_config_data")
+
+ if (shadowsocksConfig?.has("name") == true) {
+ profile.name = shadowsocksConfig.getString("name")
+ } else {
+ profile.name = "amnezia"
+ }
+ if (shadowsocksConfig?.has("method") == true) {
+ profile.method = shadowsocksConfig.getString("method").toString()
+ }
+ if (shadowsocksConfig?.has("server") == true) {
+ profile.host = shadowsocksConfig.getString("server").toString()
+ }
+ if (shadowsocksConfig?.has("password") == true) {
+ profile.password = shadowsocksConfig.getString("password").toString()
+ }
+ if (shadowsocksConfig?.has("server_port") == true) {
+ profile.remotePort = shadowsocksConfig.getInt("server_port")
+ }
+// if(mConfig?.has("local_port") == true) {
+// profile. = mConfig?.getInt("local_port")
+// }
+// profile.name = "amnezia"
+// profile.method = "chacha20-ietf-poly1305"
+// profile.host = "de01-ss.sshocean.net"
+// profile.password = "ZTZhN"
+// profile.remotePort = 8388
+
+ profile.proxyApps = false
+ profile.bypass = false
+ profile.metered = false
+ profile.dirty = false
+ profile.ipv6 = true
+
+ DataStore.profileId = ProfileManager.createProfile(profile).id
+ val switchProfile = Core.switchProfile(DataStore.profileId)
+ Log.i(tag, "startShadowsocks: SwitchProfile: $switchProfile")
+ intent?.putExtra("startOnly", false)
+ onStartCommand(
+ intent,
+ flags,
+ startId
+ )
+// startRunner()
+// VpnManager.getInstance().run()
+// VpnManager.getInstance()
+// .setOnStatusChangeListener(object : VpnManager.OnStatusChangeListener {
+// override fun onStatusChanged(state: BaseService.State) {
+// when (state) {
+// BaseService.State.Connected -> {
+// isUp = true
+// }
+// BaseService.State.Stopped -> {
+// isUp = false
+// }
+// else -> {}
+// }
+// }
+//
+// override fun onTrafficUpdated(profileId: Long, stats: TrafficStats) {
+//
+// }
+// })
+//// Core.startService()
+ } catch (e: Exception) {
+ Log.e(tag, "Error in startShadowsocks: $e")
+ }
+ } else {
+ Log.e(tag, "Invalid config file!!")
+ }
+ }
+
private fun startOpenVpn() {
mOpenVPNThreadv3 = OpenVPNThreadv3(this)
Thread({
@@ -374,19 +649,20 @@ class VPNService : android.net.VpnService() {
private fun startWireGuard() {
val wireguard_conf = buildWireugardConfig(mConfig!!)
+ Log.i(tag, "startWireGuard: wireguard_conf : $wireguard_conf")
if (currentTunnelHandle != -1) {
Log.e(tag, "Tunnel already up")
// Turn the tunnel down because this might be a switch
wgTurnOff(currentTunnelHandle)
}
- val wgConfig: String = wireguard_conf!!.toWgUserspaceString()
+ val wgConfig: String = wireguard_conf.toWgUserspaceString()
val builder = Builder()
setupBuilder(wireguard_conf, builder)
- builder.setSession("avpn0")
+ builder.setSession("Amnezia")
builder.establish().use { tun ->
if (tun == null) return
Log.i(tag, "Go backend " + wgVersion())
- currentTunnelHandle = wgTurnOn("avpn0", tun.detachFd(), wgConfig)
+ currentTunnelHandle = wgTurnOn("Amnezia", tun.detachFd(), wgConfig)
}
if (currentTunnelHandle < 0) {
Log.e(tag, "Activation Error Code -> $currentTunnelHandle")
@@ -405,31 +681,163 @@ class VPNService : android.net.VpnService() {
.apply()
}
- companion object {
- @JvmStatic
- fun startService(c: Context) {
- c.applicationContext.startService(
- Intent(c.applicationContext, VPNService::class.java).apply {
- putExtra("startOnly", true)
- })
+ override suspend fun startProcesses() {
+ worker = ProtectWorker().apply { start() }
+ try {
+ Log.i(tag, "startProcesses: ------------------1")
+ super.startProcesses()
+ Log.i(tag, "startProcesses: ------------------2")
+ sendFd(startVpn())
+ Log.i(tag, "startProcesses: ------------------3")
+ } catch (e: Exception) {
+ e.printStackTrace()
}
-
- @JvmStatic
- private external fun wgGetConfig(handle: Int): String?
-
- @JvmStatic
- private external fun wgGetSocketV4(handle: Int): Int
-
- @JvmStatic
- private external fun wgGetSocketV6(handle: Int): Int
-
- @JvmStatic
- private external fun wgTurnOff(handle: Int)
-
- @JvmStatic
- private external fun wgTurnOn(ifName: String, tunFd: Int, settings: String): Int
-
- @JvmStatic
- private external fun wgVersion(): String?
}
+
+ override fun killProcesses(scope: CoroutineScope) {
+ super.killProcesses(scope)
+ active = false
+ scope.launch { DefaultNetworkListener.stop(this) }
+ worker?.shutdown(scope)
+ worker = null
+ conn?.close()
+ conn = null
+ }
+
+ private suspend fun startVpn(): FileDescriptor {
+ val profile = data.proxy!!.profile
+ Log.i(tag, "startVpn: -----------------------1")
+ val builder = Builder()
+ .setConfigureIntent(Core.configureIntent(this))
+ .setSession(profile.formattedName)
+ .setMtu(VPN_MTU)
+ .addAddress(PRIVATE_VLAN4_CLIENT, 30)
+ .addDnsServer(PRIVATE_VLAN4_ROUTER)
+ Log.i(tag, "startVpn: -----------------------2")
+ if (profile.ipv6) {
+ builder.addAddress(PRIVATE_VLAN6_CLIENT, 126)
+ builder.addRoute("::", 0)
+ }
+ Log.i(tag, "startVpn: -----------------------3")
+ val me = packageName
+ if (profile.proxyApps) {
+ profile.individual.split('\n')
+ .filter { it != me }
+ .forEach {
+ try {
+ if (profile.bypass) builder.addDisallowedApplication(it)
+ else builder.addAllowedApplication(it)
+ } catch (ex: PackageManager.NameNotFoundException) {
+ printLog(ex)
+ }
+ }
+ if (profile.bypass) {
+ builder.addDisallowedApplication(me)
+ }
+ } else {
+ builder.addDisallowedApplication(me)
+ }
+ Log.i(tag, "startVpn: -----------------------4")
+ when (profile.route) {
+ Acl.ALL, Acl.BYPASS_CHN, Acl.CUSTOM_RULES -> builder.addRoute("0.0.0.0", 0)
+ else -> {
+ resources.getStringArray(R.array.bypass_private_route).forEach {
+ val subnet = Subnet.fromString(it)!!
+ builder.addRoute(subnet.address.hostAddress, subnet.prefixSize)
+ }
+ builder.addRoute(PRIVATE_VLAN4_ROUTER, 32)
+ }
+ }
+ Log.i(tag, "startVpn: -----------------------5")
+ metered = profile.metered
+ active = true // possible race condition here?
+ Log.i(tag, "startVpn: -----------------------6")
+ builder.setUnderlyingNetworks(underlyingNetworks)
+ Log.i(tag, "startVpn: -----------------------7")
+ val conn = builder.establish() ?: throw NullConnectionException()
+ Log.i(tag, "startVpn: -----------------------8")
+ this.conn = conn
+ Log.i(tag, "startVpn: -----------------------9")
+ val cmd = arrayListOf(
+ File(applicationInfo.nativeLibraryDir, Executable.TUN2SOCKS).absolutePath,
+ "--netif-ipaddr", PRIVATE_VLAN4_ROUTER,
+ "--socks-server-addr", "${DataStore.listenAddress}:${DataStore.portProxy}",
+ "--tunmtu", VPN_MTU.toString(),
+ "--sock-path", "sock_path",
+ "--dnsgw", "127.0.0.1:${DataStore.portLocalDns}",
+ "--loglevel", "warning"
+ )
+ Log.i(tag, "startVpn: -----------------------10")
+ if (profile.ipv6) {
+ cmd += "--netif-ip6addr"
+ cmd += PRIVATE_VLAN6_ROUTER
+ }
+ Log.i(tag, "startVpn: -----------------------11")
+ cmd += "--enable-udprelay"
+ Log.i(tag, "startVpn: -----------------------12")
+ data.processes!!.start(cmd, onRestartCallback = {
+ try {
+ sendFd(conn.fileDescriptor)
+ } catch (e: ErrnoException) {
+ e.printStackTrace()
+ stopRunner(false, e.message)
+ }
+ })
+ Log.i(tag, "startVpn: -----------------------13")
+ return conn.fileDescriptor
+ }
+
+ private suspend fun sendFd(fd: FileDescriptor) {
+ var tries = 0
+ val path = File(Core.deviceStorage.noBackupFilesDir, "sock_path").absolutePath
+ while (true) try {
+ delay(50L shl tries)
+ LocalSocket().use { localSocket ->
+ localSocket.connect(
+ LocalSocketAddress(
+ path,
+ LocalSocketAddress.Namespace.FILESYSTEM
+ )
+ )
+ localSocket.setFileDescriptorsForSend(arrayOf(fd))
+ localSocket.outputStream.write(42)
+ }
+ return
+ } catch (e: IOException) {
+ if (tries > 5) throw e
+ tries += 1
+ }
+ }
+
+
+ private inner class ProtectWorker : ConcurrentLocalSocketListener(
+ "ShadowsocksVpnThread",
+ File(Core.deviceStorage.noBackupFilesDir, "protect_path")
+ ) {
+ override fun acceptInternal(socket: LocalSocket) {
+ socket.inputStream.read()
+ val fd = socket.ancillaryFileDescriptors!!.single()!!
+ CloseableFd(fd).use {
+ socket.outputStream.write(if (underlyingNetwork.let { network ->
+ if (network != null && Build.VERSION.SDK_INT >= 23) try {
+ network.bindSocket(fd)
+ true
+ } catch (e: IOException) {
+ // suppress ENONET (Machine is not on the network)
+ if ((e.cause as? ErrnoException)?.errno != 64) printLog(e)
+ false
+ } else protect(getInt.invoke(fd) as Int)
+ }) 0 else 1)
+ }
+ }
+ }
+
+ inner class NullConnectionException : NullPointerException() {
+ override fun getLocalizedMessage() = getString(R.string.reboot_required)
+ }
+
+ class CloseableFd(val fd: FileDescriptor) : Closeable {
+ override fun close() = Os.close(fd)
+ }
+
}
diff --git a/client/android/src/org/amnezia/vpn/VPNServiceBinder.kt b/client/android/src/org/amnezia/vpn/VPNServiceBinder.kt
index 966ac518..d81d5077 100644
--- a/client/android/src/org/amnezia/vpn/VPNServiceBinder.kt
+++ b/client/android/src/org/amnezia/vpn/VPNServiceBinder.kt
@@ -54,7 +54,7 @@ class VPNServiceBinder(service: VPNService) : Binder() {
val json = buffer?.let { String(it) }
val config = JSONObject(json)
Log.v(tag, "Stored new Tunnel config in Service")
-
+ Log.i(tag, "Config: $config")
if (!mService.checkPermissions()) {
mResumeConfig = config
// The Permission prompt was already
diff --git a/client/android/src/org/amnezia/vpn/qt/AmneziaApp.kt b/client/android/src/org/amnezia/vpn/qt/AmneziaApp.kt
new file mode 100644
index 00000000..7888f6d6
--- /dev/null
+++ b/client/android/src/org/amnezia/vpn/qt/AmneziaApp.kt
@@ -0,0 +1,22 @@
+package org.amnezia.vpn.qt
+
+import android.content.res.Configuration
+import org.amnezia.vpn.shadowsocks.core.Core
+import org.amnezia.vpn.shadowsocks.core.VpnManager
+import org.qtproject.qt5.android.bindings.QtActivity
+import org.qtproject.qt5.android.bindings.QtApplication
+import android.app.Application
+
+class AmneziaApp: Application() {
+
+ override fun onCreate() {
+ super.onCreate()
+ Core.init(this, QtActivity::class)
+ VpnManager.getInstance().init(this)
+ }
+
+ override fun onConfigurationChanged(newConfig: Configuration) {
+ super.onConfigurationChanged(newConfig)
+ Core.updateNotificationChannels()
+ }
+}
\ No newline at end of file
diff --git a/client/android/src/org/amnezia/vpn/qt/VPNActivity.java b/client/android/src/org/amnezia/vpn/qt/VPNActivity.java
index 33ae513e..11d99063 100644
--- a/client/android/src/org/amnezia/vpn/qt/VPNActivity.java
+++ b/client/android/src/org/amnezia/vpn/qt/VPNActivity.java
@@ -17,12 +17,16 @@ public class VPNActivity extends org.qtproject.qt5.android.bindings.QtActivity {
return super.onKeyDown(keyCode, event);
}
+// TODO finalize
+// https://github.com/mozilla-mobile/mozilla-vpn-client/blob/6acff5dd9f072380a04c3fa12e9f3c98dbdd7a26/src/platforms/android/androidvpnactivity.h
@Override
public void onBackPressed() {
+// super.onBackPressed();
try {
if (!handleBackButton()) {
// Move the activity into paused state if back button was pressed
moveTaskToBack(true);
+// finish();
}
} catch (Exception e) {
}
diff --git a/client/android/src/org/amnezia/vpn/qt/VPNApplication.java b/client/android/src/org/amnezia/vpn/qt/VPNApplication.java
index 3131349a..29514633 100644
--- a/client/android/src/org/amnezia/vpn/qt/VPNApplication.java
+++ b/client/android/src/org/amnezia/vpn/qt/VPNApplication.java
@@ -1,18 +1,24 @@
package org.amnezia.vpn.qt;
-import android.app.Activity;
-import android.os.Bundle;
-
-import org.amnezia.vpn.BuildConfig;
+import android.content.res.Configuration;
+import androidx.annotation.NonNull;
+import org.amnezia.vpn.shadowsocks.core.Core;
+import org.amnezia.vpn.shadowsocks.core.VpnManager;
public class VPNApplication extends org.qtproject.qt5.android.bindings.QtApplication {
+ private static VPNApplication instance;
- private static VPNApplication instance;
-
- @Override
- public void onCreate() {
- super.onCreate();
- VPNApplication.instance = this;
- }
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ VPNApplication.instance = this;
+// Core.INSTANCE.init(this, VPNActivity.class);
+// VpnManager.Companion.getInstance().init(this);
+ }
+ @Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+// Core.INSTANCE.updateNotificationChannels();
+ }
}
diff --git a/client/containers/containers_defs.cpp b/client/containers/containers_defs.cpp
index 54721a2e..3313a772 100644
--- a/client/containers/containers_defs.cpp
+++ b/client/containers/containers_defs.cpp
@@ -159,6 +159,7 @@ bool ContainerProps::isSupportedByCurrentPlatform(DockerContainer c)
switch (c) {
case DockerContainer::WireGuard: return true;
case DockerContainer::OpenVpn: return true;
+ case DockerContainer::ShadowSocks: return true;
default: return false;
}
diff --git a/client/core/defs.h b/client/core/defs.h
index bed6b1c3..5845fd3c 100644
--- a/client/core/defs.h
+++ b/client/core/defs.h
@@ -46,7 +46,6 @@ enum ErrorCode
FailedToSaveConfigData,
OpenVpnConfigMissing,
OpenVpnManagementServerError,
- EasyRsaError,
ConfigMissing,
// Distro errors
diff --git a/client/core/errorstrings.cpp b/client/core/errorstrings.cpp
index 23e4e36e..722dd4b4 100644
--- a/client/core/errorstrings.cpp
+++ b/client/core/errorstrings.cpp
@@ -35,10 +35,11 @@ QString errorString(ErrorCode code){
case (FailedToSaveConfigData): return QObject::tr("Failed to save config to disk");
case (OpenVpnConfigMissing): return QObject::tr("OpenVPN config missing");
case (OpenVpnManagementServerError): return QObject::tr("OpenVPN management server error");
- case (EasyRsaError): return QObject::tr("EasyRSA runtime error");
// Distro errors
case (OpenVpnExecutableMissing): return QObject::tr("OpenVPN executable missing");
+ case (ShadowSocksExecutableMissing): return QObject::tr("ShadowSocks (ss-local) executable missing");
+ case (CloakExecutableMissing): return QObject::tr("Cloak (ck-client) executable missing");
case (AmneziaServiceConnectionFailed): return QObject::tr("Amnezia helper service error");
case (OpenSslFailed): return QObject::tr("OpenSSL failed");
diff --git a/client/platforms/ios/MobileUtils.cpp b/client/platforms/ios/MobileUtils.cpp
index 4667cc25..427cf334 100644
--- a/client/platforms/ios/MobileUtils.cpp
+++ b/client/platforms/ios/MobileUtils.cpp
@@ -5,3 +5,4 @@ void MobileUtils::shareText(const QStringList&) {}
void MobileUtils::writeToKeychain(const QString&, const QByteArray &) {}
bool MobileUtils::deleteFromKeychain(const QString& tag) { return false; }
QByteArray MobileUtils::readFromKeychain(const QString&) { return {}; }
+
diff --git a/client/protocols/openvpnovercloakprotocol.cpp b/client/protocols/openvpnovercloakprotocol.cpp
index 01afb4ca..2e9d77e8 100644
--- a/client/protocols/openvpnovercloakprotocol.cpp
+++ b/client/protocols/openvpnovercloakprotocol.cpp
@@ -27,6 +27,10 @@ OpenVpnOverCloakProtocol::~OpenVpnOverCloakProtocol()
ErrorCode OpenVpnOverCloakProtocol::start()
{
+ if (!QFileInfo::exists(cloakExecPath())) {
+ setLastError(ErrorCode::CloakExecutableMissing);
+ return lastError();
+ }
#ifndef Q_OS_IOS
if (Utils::processIsRunning(Utils::executable("ck-client", false))) {
Utils::killProcessByName(Utils::executable("ck-client", false));
@@ -106,6 +110,8 @@ QString OpenVpnOverCloakProtocol::cloakExecPath()
{
#ifdef Q_OS_WIN
return Utils::executable(QString("cloak/ck-client"), true);
+#elif defined Q_OS_LINUX
+ return Utils::usrExecutable("ck-client");
#else
return Utils::executable(QString("/ck-client"), true);
#endif
diff --git a/client/protocols/shadowsocksvpnprotocol.cpp b/client/protocols/shadowsocksvpnprotocol.cpp
index e2465c1f..bc494777 100644
--- a/client/protocols/shadowsocksvpnprotocol.cpp
+++ b/client/protocols/shadowsocksvpnprotocol.cpp
@@ -27,6 +27,13 @@ ShadowSocksVpnProtocol::~ShadowSocksVpnProtocol()
ErrorCode ShadowSocksVpnProtocol::start()
{
+
+ if (!QFileInfo::exists(shadowSocksExecPath())) {
+ setLastError(ErrorCode::ShadowSocksExecutableMissing);
+ return lastError();
+ }
+
+
#ifndef Q_OS_IOS
if (Utils::processIsRunning(Utils::executable("ss-local", false))) {
Utils::killProcessByName(Utils::executable("ss-local", false));
diff --git a/client/scripts/apple_compile.sh b/client/scripts/apple_compile.sh
index 48b438bb..fb44af30 100755
--- a/client/scripts/apple_compile.sh
+++ b/client/scripts/apple_compile.sh
@@ -270,6 +270,6 @@ print G "done."
sed -i '' '/Original<\/string>/d' AmneziaVPN.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
fi
-print Y "Opening in XCode..."
-open AmneziaVPN.xcodeproj
+# print Y "Opening in XCode..."
+# open AmneziaVPN.xcodeproj
print G "All done!"
diff --git a/client/ui/qml/Pages/PageServerContainers.qml b/client/ui/qml/Pages/PageServerContainers.qml
index fb5dd97e..4b05568a 100644
--- a/client/ui/qml/Pages/PageServerContainers.qml
+++ b/client/ui/qml/Pages/PageServerContainers.qml
@@ -1,462 +1,439 @@
-import QtQuick 2.12
-import QtQuick.Controls 2.12
-import QtQuick.Dialogs 1.1
-import QtQuick.Layouts 1.15
-import SortFilterProxyModel 0.2
-import ContainerProps 1.0
-import ProtocolProps 1.0
-import PageEnum 1.0
-import ProtocolEnum 1.0
-import "./"
-import "../Controls"
-import "../Config"
-import "InstallSettings"
-
-PageBase {
- id: root
- page: PageEnum.ServerContainers
- logic: ServerContainersLogic
-
- enabled: ServerContainersLogic.pageEnabled
-
- function resetPage() {
- container_selector.selectedIndex = -1
- }
-
- Connections {
- target: logic
- function onUpdatePage() {
- root.resetPage()
- }
- }
-
- BackButton {
- id: back
- }
- Caption {
- id: caption
- text: container_selector.selectedIndex > 0 ? qsTr("Install new service") : qsTr("Installed services")
- }
-
- SelectContainer {
- id: container_selector
-
- onAboutToHide: {
- pageLoader.focus = true
- }
-
- onContainerSelected: {
- var containerProto = ContainerProps.defaultProtocol(c_index)
-
-
- if (ProtocolProps.defaultPort(containerProto) < 0) {
- tf_port_num.enabled = false
- tf_port_num.text = qsTr("Default")
- }
- else tf_port_num.text = ProtocolProps.defaultPort(containerProto)
-
- cb_port_proto.currentIndex = ProtocolProps.defaultTransportProto(containerProto)
-
- tf_port_num.enabled = ProtocolProps.defaultPortChangeable(containerProto)
- cb_port_proto.enabled = ProtocolProps.defaultTransportProtoChangeable(containerProto)
- }
- }
-
- Column {
- id: c1
- visible: container_selector.selectedIndex > 0
- width: parent.width
- anchors.top: caption.bottom
- anchors.topMargin: 10
-
- Caption {
- font.pixelSize: 22
- text: UiLogic.containerName(container_selector.selectedIndex)
- }
-
- Text {
- width: parent.width
- anchors.topMargin: 10
- padding: 10
-
- font.family: "Lato"
- font.styleName: "normal"
- font.pixelSize: 16
- color: "#181922"
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- wrapMode: Text.Wrap
-
- text: UiLogic.containerDesc(container_selector.selectedIndex)
- }
- }
-
- Rectangle {
- id: frame_settings
- visible: container_selector.selectedIndex > 0
- width: parent.width
- anchors.top: c1.bottom
- anchors.topMargin: 10
-
- border.width: 1
- border.color: "lightgray"
- anchors.bottomMargin: 5
- anchors.horizontalCenter: parent.horizontalCenter
- radius: 2
- Grid {
- id: grid
- visible: container_selector.selectedIndex > 0
- anchors.fill: parent
- columns: 2
- horizontalItemAlignment: Grid.AlignHCenter
- verticalItemAlignment: Grid.AlignVCenter
- topPadding: 5
- leftPadding: 10
- spacing: 5
-
-
- LabelType {
- width: 130
- text: qsTr("Port")
- }
- TextFieldType {
- id: tf_port_num
- width: parent.width - 130 - parent.spacing - parent.leftPadding * 2
- }
- LabelType {
- width: 130
- text: qsTr("Network Protocol")
- }
- ComboBoxType {
- id: cb_port_proto
- width: parent.width - 130 - parent.spacing - parent.leftPadding * 2
- model: [
- qsTr("udp"),
- qsTr("tcp"),
- ]
- }
- }
- }
-
- BlueButtonType {
- id: pb_cancel_add
- visible: container_selector.selectedIndex > 0
-
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: pb_continue_add.top
- anchors.bottomMargin: 20
-
- width: parent.width - 40
- height: 40
- text: qsTr("Cancel")
- font.pixelSize: 16
- onClicked: container_selector.selectedIndex = -1
-
- }
-
- BlueButtonType {
- id: pb_continue_add
- visible: container_selector.selectedIndex > 0
-
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 20
-
- width: parent.width - 40
- height: 40
- text: qsTr("Continue")
- font.pixelSize: 16
- onClicked: {
- let cont = container_selector.selectedIndex
- let tp = ProtocolProps.transportProtoFromString(cb_port_proto.currentText)
- let port = tf_port_num.text
- ServerContainersLogic.onPushButtonContinueClicked(cont, port, tp)
- }
- }
-
-
-
-
-
- Flickable {
- visible: container_selector.selectedIndex <= 0
- clip: true
- width: parent.width
- anchors.top: caption.bottom
- anchors.bottom: pb_add_container.top
- contentHeight: col.height
-
- Column {
- visible: container_selector.selectedIndex <= 0
- id: col
- anchors {
- left: parent.left;
- right: parent.right;
- }
- topPadding: 20
- spacing: 10
-
- Caption {
- id: cap1
- text: qsTr("Installed Protocols and Services")
- font.pixelSize: 20
-
- }
-
- SortFilterProxyModel {
- id: proxyContainersModel
- sourceModel: UiLogic.containersModel
- filters: ValueFilter {
- roleName: "is_installed_role"
- value: true
- }
- }
-
- SortFilterProxyModel {
- id: proxyProtocolsModel
- sourceModel: UiLogic.protocolsModel
- filters: ValueFilter {
- roleName: "is_installed_role"
- value: true
- }
- }
-
-
- ListView {
- id: tb_c
- x: 10
- width: parent.width - 10
- height: tb_c.contentItem.height
- currentIndex: -1
- spacing: 5
- clip: true
- interactive: false
- model: proxyContainersModel
-
- delegate: Item {
- implicitWidth: tb_c.width - 10
- implicitHeight: c_item.height
- Item {
- id: c_item
- width: parent.width
- height: row_container.height + tb_p.height
- anchors.left: parent.left
- Rectangle {
- anchors.top: parent.top
- width: parent.width
- height: 1
- color: "lightgray"
- visible: index !== tb_c.currentIndex
- }
- Rectangle {
- anchors.top: row_container.top
- anchors.bottom: row_container.bottom
- anchors.left: parent.left
- anchors.right: parent.right
-
- color: "#63B4FB"
- visible: index === tb_c.currentIndex
- }
-
- RowLayout {
- id: row_container
- //width: parent.width
- anchors.left: parent.left
- anchors.right: parent.right
-
-// anchors.top: lb_container_name.top
-// anchors.bottom: lb_container_name.bottom
-
- Text {
- id: lb_container_name
- text: name_role
- font.pixelSize: 17
- //font.bold: true
- color: "#100A44"
- topPadding: 5
- bottomPadding: 5
- leftPadding: 10
- verticalAlignment: Text.AlignVCenter
- wrapMode: Text.WordWrap
- Layout.fillWidth: true
-
- MouseArea {
- enabled: col.visible
- anchors.top: lb_container_name.top
- anchors.bottom: lb_container_name.bottom
- anchors.left: parent.left
- anchors.right: parent.right
- propagateComposedEvents: true
- onClicked: {
- if (tb_c.currentIndex === index) tb_c.currentIndex = -1
- else tb_c.currentIndex = index
-
- UiLogic.protocolsModel.setSelectedDockerContainer(proxyContainersModel.mapToSource(index))
- }
- }
- }
-
- ImageButtonType {
- id: button_remove
- visible: index === tb_c.currentIndex
- Layout.alignment: Qt.AlignRight
- checkable: true
- icon.source: "qrc:/images/delete.png"
- implicitWidth: 30
- implicitHeight: 30
-
- checked: default_role
-
- MessageDialog {
- id: dialogRemove
- standardButtons: StandardButton.Yes | StandardButton.Cancel
- title: "AmneziaVPN"
- text: qsTr("Remove container") + " " + name_role + "?" + "\n" + qsTr("This action will erase all data of this container on the server.")
- onAccepted: {
- tb_c.currentIndex = -1
- ServerContainersLogic.onPushButtonRemoveClicked(proxyContainersModel.mapToSource(index))
- }
- }
-
- onClicked: dialogRemove.open()
-
- VisibleBehavior on visible { }
- }
-
- ImageButtonType {
- id: button_share
- visible: index === tb_c.currentIndex
- Layout.alignment: Qt.AlignRight
- icon.source: "qrc:/images/share.png"
- implicitWidth: 30
- implicitHeight: 30
- onClicked: {
- ServerContainersLogic.onPushButtonShareClicked(proxyContainersModel.mapToSource(index))
- }
-
- VisibleBehavior on visible { }
- }
-
- ImageButtonType {
- id: button_default
- visible: service_type_role == ProtocolEnum.Vpn
-
- Layout.alignment: Qt.AlignRight
- checkable: true
- img.source: checked ? "qrc:/images/check.png" : "qrc:/images/uncheck.png"
- implicitWidth: 30
- implicitHeight: 30
-
- checked: default_role
- onClicked: {
- ServerContainersLogic.onPushButtonDefaultClicked(proxyContainersModel.mapToSource(index))
- }
- }
- }
-
-
- ListView {
- id: tb_p
- currentIndex: -1
- visible: index === tb_c.currentIndex
- x: 10
- anchors.top: row_container.bottom
-
- width: parent.width - 40
- height: visible ? tb_p.contentItem.height : 0
-
- spacing: 0
- clip: true
- interactive: false
- model: proxyProtocolsModel
-
- VisibleBehavior on visible { }
-
-
- delegate: Item {
- id: dp_item
-
- implicitWidth: tb_p.width - 10
- implicitHeight: p_item.height
- Item {
- id: p_item
- width: parent.width
- height: lb_protocol_name.height
- anchors.left: parent.left
- Rectangle {
- anchors.top: parent.top
- width: parent.width
- height: 1
- color: "lightgray"
- visible: index !== tb_p.currentIndex
- }
-// Rectangle {
-// anchors.top: lb_protocol_name.top
-// anchors.bottom: lb_protocol_name.bottom
-// width: parent.width
-
-// color: "#63B4FB"
-// visible: index === tb_p.currentIndex
-// }
-
-// Text {
-// id: lb_protocol_name
-// text: name_role
-// font.pixelSize: 16
-// topPadding: 5
-// bottomPadding: 5
-// leftPadding: 10
-// verticalAlignment: Text.AlignVCenter
-// wrapMode: Text.WordWrap
-// }
-
- SettingButtonType {
- id: lb_protocol_name
-
-// anchors.top: lb_protocol_name.top
-// anchors.bottom: lb_protocol_name.bottom
- topPadding: 10
- bottomPadding: 10
- leftPadding: 10
-
- anchors.left: parent.left
-
- width: parent.width
- height: 30
- text: qsTr(name_role + " settings")
- textItem.font.pixelSize: 16
- icon.source: "qrc:/images/settings.png"
- onClicked: {
- tb_p.currentIndex = index
- ServerContainersLogic.onPushButtonProtoSettingsClicked(
- proxyContainersModel.mapToSource(tb_c.currentIndex),
- proxyProtocolsModel.mapToSource(tb_p.currentIndex))
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
-
- BlueButtonType {
- id: pb_add_container
- visible: container_selector.selectedIndex < 0
-
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: parent.bottom
- anchors.topMargin: 10
- anchors.bottomMargin: 20
-
- width: parent.width - 40
- height: 40
- text: qsTr("Install new protocols container")
- font.pixelSize: 16
- onClicked: container_selector.visible ? container_selector.close() : container_selector.open()
-
- }
-}
+import QtQuick 2.12
+import QtQuick.Controls 2.12
+import QtQuick.Dialogs 1.1
+import QtQuick.Layouts 1.15
+import SortFilterProxyModel 0.2
+import ContainerProps 1.0
+import ProtocolProps 1.0
+import PageEnum 1.0
+import ProtocolEnum 1.0
+import "./"
+import "../Controls"
+import "../Config"
+import "InstallSettings"
+
+PageBase {
+ id: root
+ page: PageEnum.ServerContainers
+ logic: ServerContainersLogic
+
+ enabled: ServerContainersLogic.pageEnabled
+
+ function resetPage() {
+ container_selector.selectedIndex = -1
+ }
+
+ Connections {
+ target: logic
+ function onUpdatePage() {
+ root.resetPage()
+ }
+ }
+
+ BackButton {
+ id: back
+ }
+ Caption {
+ id: caption
+ text: container_selector.selectedIndex > 0 ? qsTr("Install new service") : qsTr("Installed services")
+ }
+
+ SelectContainer {
+ id: container_selector
+
+ onAboutToHide: {
+ pageLoader.focus = true
+ }
+
+ onContainerSelected: {
+ var containerProto = ContainerProps.defaultProtocol(c_index)
+
+
+ if (ProtocolProps.defaultPort(containerProto) < 0) {
+ tf_port_num.enabled = false
+ tf_port_num.text = qsTr("Default")
+ }
+ else tf_port_num.text = ProtocolProps.defaultPort(containerProto)
+
+ cb_port_proto.currentIndex = ProtocolProps.defaultTransportProto(containerProto)
+
+ tf_port_num.enabled = ProtocolProps.defaultPortChangeable(containerProto)
+ cb_port_proto.enabled = ProtocolProps.defaultTransportProtoChangeable(containerProto)
+ }
+ }
+
+ Column {
+ id: c1
+ visible: container_selector.selectedIndex > 0
+ width: parent.width
+ anchors.top: caption.bottom
+ anchors.topMargin: 10
+
+ Caption {
+ font.pixelSize: 22
+ text: UiLogic.containerName(container_selector.selectedIndex)
+ }
+
+ Text {
+ width: parent.width
+ anchors.topMargin: 10
+ padding: 10
+
+ font.family: "Lato"
+ font.styleName: "normal"
+ font.pixelSize: 16
+ color: "#181922"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ wrapMode: Text.Wrap
+
+ text: UiLogic.containerDesc(container_selector.selectedIndex)
+ }
+ }
+
+ Rectangle {
+ id: frame_settings
+ visible: container_selector.selectedIndex > 0
+ width: parent.width
+ anchors.top: c1.bottom
+ anchors.topMargin: 10
+
+ border.width: 1
+ border.color: "lightgray"
+ anchors.bottomMargin: 5
+ anchors.horizontalCenter: parent.horizontalCenter
+ radius: 2
+ Grid {
+ id: grid
+ visible: container_selector.selectedIndex > 0
+ anchors.fill: parent
+ columns: 2
+ horizontalItemAlignment: Grid.AlignHCenter
+ verticalItemAlignment: Grid.AlignVCenter
+ topPadding: 5
+ leftPadding: 10
+ spacing: 5
+
+
+ LabelType {
+ width: 130
+ text: qsTr("Port")
+ }
+ TextFieldType {
+ id: tf_port_num
+ width: parent.width - 130 - parent.spacing - parent.leftPadding * 2
+ }
+ LabelType {
+ width: 130
+ text: qsTr("Network Protocol")
+ }
+ ComboBoxType {
+ id: cb_port_proto
+ width: parent.width - 130 - parent.spacing - parent.leftPadding * 2
+ model: [
+ qsTr("udp"),
+ qsTr("tcp"),
+ ]
+ }
+ }
+ }
+
+ BlueButtonType {
+ id: pb_cancel_add
+ visible: container_selector.selectedIndex > 0
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: pb_continue_add.top
+ anchors.bottomMargin: 20
+
+ width: parent.width - 40
+ height: 40
+ text: qsTr("Cancel")
+ font.pixelSize: 16
+ onClicked: container_selector.selectedIndex = -1
+
+ }
+
+ BlueButtonType {
+ id: pb_continue_add
+ visible: container_selector.selectedIndex > 0
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 20
+
+ width: parent.width - 40
+ height: 40
+ text: qsTr("Continue")
+ font.pixelSize: 16
+ onClicked: {
+ let cont = container_selector.selectedIndex
+ let tp = ProtocolProps.transportProtoFromString(cb_port_proto.currentText)
+ let port = tf_port_num.text
+ ServerContainersLogic.onPushButtonContinueClicked(cont, port, tp)
+ }
+ }
+
+
+
+
+
+ Flickable {
+ visible: container_selector.selectedIndex <= 0
+ clip: true
+ width: parent.width
+ anchors.top: caption.bottom
+ anchors.bottom: pb_add_container.top
+ contentHeight: col.height
+
+ Column {
+ visible: container_selector.selectedIndex <= 0
+ id: col
+ anchors {
+ left: parent.left;
+ right: parent.right;
+ }
+ topPadding: 20
+ spacing: 10
+
+ Caption {
+ id: cap1
+ text: qsTr("Installed Protocols and Services")
+ font.pixelSize: 20
+
+ }
+
+ SortFilterProxyModel {
+ id: proxyContainersModel
+ sourceModel: UiLogic.containersModel
+ filters: ValueFilter {
+ roleName: "is_installed_role"
+ value: true
+ }
+ }
+
+ SortFilterProxyModel {
+ id: proxyProtocolsModel
+ sourceModel: UiLogic.protocolsModel
+ filters: ValueFilter {
+ roleName: "is_installed_role"
+ value: true
+ }
+ }
+
+
+ ListView {
+ id: tb_c
+ x: 10
+ width: parent.width - 10
+ height: tb_c.contentItem.height
+ currentIndex: -1
+ spacing: 5
+ clip: true
+ interactive: false
+ model: proxyContainersModel
+
+ delegate: Item {
+ implicitWidth: tb_c.width - 10
+ implicitHeight: c_item.height
+ Item {
+ id: c_item
+ width: parent.width
+ height: row_container.height + tb_p.height
+ anchors.left: parent.left
+ Rectangle {
+ anchors.top: parent.top
+ width: parent.width
+ height: 1
+ color: "lightgray"
+ visible: index !== tb_c.currentIndex
+ }
+ Rectangle {
+ anchors.top: row_container.top
+ anchors.bottom: row_container.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ color: "#63B4FB"
+ visible: index === tb_c.currentIndex
+ }
+
+ RowLayout {
+ id: row_container
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Text {
+ id: lb_container_name
+ text: name_role
+ font.pixelSize: 17
+ color: "#100A44"
+ topPadding: 16
+ bottomPadding: 12
+ leftPadding: 10
+ verticalAlignment: Text.AlignVCenter
+ wrapMode: Text.WordWrap
+ Layout.fillWidth: true
+
+ MouseArea {
+ enabled: col.visible
+ anchors.top: lb_container_name.top
+ anchors.bottom: lb_container_name.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ propagateComposedEvents: true
+ onClicked: {
+ if (tb_c.currentIndex === index) tb_c.currentIndex = -1
+ else tb_c.currentIndex = index
+
+ UiLogic.protocolsModel.setSelectedDockerContainer(proxyContainersModel.mapToSource(index))
+ }
+ }
+ }
+
+ ImageButtonType {
+ id: button_remove
+ visible: index === tb_c.currentIndex
+ Layout.alignment: Qt.AlignRight
+ checkable: true
+ icon.source: "qrc:/images/delete.png"
+ implicitWidth: 30
+ implicitHeight: 30
+
+ checked: default_role
+
+ MessageDialog {
+ id: dialogRemove
+ standardButtons: StandardButton.Yes | StandardButton.Cancel
+ title: "AmneziaVPN"
+ text: qsTr("Remove container") + " " + name_role + "?" + "\n" + qsTr("This action will erase all data of this container on the server.")
+ onAccepted: {
+ tb_c.currentIndex = -1
+ ServerContainersLogic.onPushButtonRemoveClicked(proxyContainersModel.mapToSource(index))
+ }
+ }
+
+ onClicked: dialogRemove.open()
+
+ VisibleBehavior on visible { }
+ }
+
+ ImageButtonType {
+ id: button_share
+ visible: index === tb_c.currentIndex
+ Layout.alignment: Qt.AlignRight
+ icon.source: "qrc:/images/share.png"
+ implicitWidth: 30
+ implicitHeight: 30
+ onClicked: {
+ ServerContainersLogic.onPushButtonShareClicked(proxyContainersModel.mapToSource(index))
+ }
+
+ VisibleBehavior on visible { }
+ }
+
+ ImageButtonType {
+ id: button_default
+ visible: service_type_role == ProtocolEnum.Vpn
+
+ Layout.alignment: Qt.AlignRight
+ checkable: true
+ img.source: checked ? "qrc:/images/check.png" : "qrc:/images/uncheck.png"
+ implicitWidth: 30
+ implicitHeight: 30
+
+ checked: default_role
+ onClicked: {
+ ServerContainersLogic.onPushButtonDefaultClicked(proxyContainersModel.mapToSource(index))
+ }
+ }
+ }
+
+
+ ListView {
+ id: tb_p
+ currentIndex: -1
+ x: 10
+ anchors.top: row_container.bottom
+
+ width: parent.width - 40
+ height: index === tb_c.currentIndex ? tb_p.contentItem.height : 0
+ implicitHeight: height
+
+ spacing: 0
+ clip: true
+ interactive: false
+ model: proxyProtocolsModel
+
+
+ Behavior on height {
+ NumberAnimation {
+ duration: 200
+ }
+ }
+
+ delegate: Item {
+ id: dp_item
+
+ implicitWidth: tb_p.width - 10
+ implicitHeight: p_item.height
+ Item {
+ id: p_item
+ width: parent.width
+ height: lb_protocol_name.height
+ anchors.left: parent.left
+ Rectangle {
+ anchors.top: parent.top
+ width: parent.width
+ height: 1
+ color: "lightgray"
+ visible: index > 0
+ }
+
+ SettingButtonType {
+ id: lb_protocol_name
+ topPadding: 10
+ bottomPadding: 10
+
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+
+ width: parent.width
+ height: 45
+ text: qsTr(name_role + " settings")
+ textItem.font.pixelSize: 16
+ icon.source: "qrc:/images/settings.png"
+ onClicked: {
+ tb_p.currentIndex = index
+ ServerContainersLogic.onPushButtonProtoSettingsClicked(
+ proxyContainersModel.mapToSource(tb_c.currentIndex),
+ proxyProtocolsModel.mapToSource(tb_p.currentIndex))
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ BlueButtonType {
+ id: pb_add_container
+ visible: container_selector.selectedIndex < 0
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ anchors.topMargin: 10
+ anchors.bottomMargin: 20
+
+ width: parent.width - 40
+ height: 40
+ text: qsTr("Install new protocols container")
+ font.pixelSize: 16
+ onClicked: container_selector.visible ? container_selector.close() : container_selector.open()
+
+ }
+}
diff --git a/deploy/build_android.sh b/deploy/build_android.sh
new file mode 100644
index 00000000..9afe49d3
--- /dev/null
+++ b/deploy/build_android.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+echo "Build script started ..."
+
+set -o errexit -o nounset
+
+
+# Hold on to current directory
+PROJECT_DIR=$(pwd)
+DEPLOY_DIR=$PROJECT_DIR/deploy
+
+mkdir -p $DEPLOY_DIR/build
+BUILD_DIR=$DEPLOY_DIR/build
+
+echo "Project dir: ${PROJECT_DIR}"
+echo "Build dir: ${BUILD_DIR}"
+
+APP_NAME=AmneziaVPN
+APP_FILENAME=$APP_NAME.app
+APP_DOMAIN=org.amneziavpn.package
+
+OUT_APP_DIR=$BUILD_DIR/client
+BUNDLE_DIR=$OUT_APP_DIR/$APP_FILENAME
+
+INSTALLER_DATA_DIR=$BUILD_DIR/installer/packages/$APP_DOMAIN/data
+INSTALLER_BUNDLE_DIR=$BUILD_DIR/installer/$APP_FILENAME
+
+PRO_FILE_PATH=$PROJECT_DIR/$APP_NAME.pro
+QMAKE_STASH_FILE=$PROJECT_DIR/.qmake_stash
+
+# Seacrh Qt
+if [ -z "${QT_VERSION+x}" ]; then
+QT_VERSION=5.15.2;
+QT_BIN_DIR=$HOME/Qt/$QT_VERSION/gcc_64/bin
+fi
+
+echo "Using Qt in $QT_BIN_DIR"
+
+
+# Checking env
+$QT_BIN_DIR/qmake -v
+make -v
+gcc -v
+
+# Build App
+echo "Building App..."
+cd $BUILD_DIR
+
+$QT_BIN_DIR/qmake -r -spec android-clang CONFIG+=qtquickcompiler ANDROID_ABIS="armeabi-v7a arm64-v8a x86 x86_64" $PROJECT_DIR/AmneziaVPN.pro
+$ANDROID_NDK_HOME/prebuilt/linux-x86_64/bin/make -j2
+$ANDROID_NDK_HOME/prebuilt/linux-x86_64/bin/make install INSTALL_ROOT=android
+
+
+
+# Build and run tests here
+
+#echo "............Deploy.................."
+
+# TODO possible solution: https://github.com/mhoeher/opentodolist/blob/b8981852e500589851132a02c5a62af9b0ed592c/ci/android-cmake-build.sh
+#$QT_BIN_DIR/androiddeployqt \
+# --output $OUT_APP_DIR \
+# --gradle \
+# --release \
+# --deployment bundled
+
+#cp $OUT_APP_DIR/build/outputs/apk/release/android-build-release-unsigned.apk \
+# OpenTodoList-${ANDROID_ABIS}-${OTL_VERSION}.apk
+
diff --git a/deploy/build_ios.sh b/deploy/build_ios.sh
new file mode 100644
index 00000000..994a96ed
--- /dev/null
+++ b/deploy/build_ios.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+echo "Build script started ..."
+
+set -o errexit -o nounset
+
+# Hold on to current directory
+PROJECT_DIR=$(pwd)
+DEPLOY_DIR=$PROJECT_DIR/deploy
+
+mkdir -p $DEPLOY_DIR/build
+BUILD_DIR=$DEPLOY_DIR/build
+
+echo "Project dir: ${PROJECT_DIR}"
+echo "Build dir: ${BUILD_DIR}"
+
+APP_NAME=AmneziaVPN
+APP_FILENAME=$APP_NAME.app
+APP_DOMAIN=org.amneziavpn.package
+PLIST_NAME=$APP_NAME.plist
+
+OUT_APP_DIR=$BUILD_DIR/client
+BUNDLE_DIR=$OUT_APP_DIR/$APP_FILENAME
+
+PRO_FILE_PATH=$PROJECT_DIR/$APP_NAME.pro
+QMAKE_STASH_FILE=$PROJECT_DIR/.qmake_stash
+
+# Seacrh Qt
+if [ -z "${QT_VERSION+x}" ]; then
+QT_VERSION=5.15.2;
+QIF_VERSION=4.1
+QT_BIN_DIR=$HOME/Qt/$QT_VERSION/ios/bin
+fi
+
+echo "Using Qt in $QT_BIN_DIR"
+
+
+# Checking env
+$QT_BIN_DIR/qmake -v
+
+# Build App
+echo "Building App..."
+cd $PROJECT_DIR/client
+$PROJECT_DIR/client/scripts/apple_compile.sh ios
+
+# Build and run tests here
+
+#echo "............Deploy.................."
+
+
diff --git a/deploy/build_linux.sh b/deploy/build_linux.sh
new file mode 100644
index 00000000..996c758a
--- /dev/null
+++ b/deploy/build_linux.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+echo "Build script started ..."
+
+set -o errexit -o nounset
+
+
+# Hold on to current directory
+PROJECT_DIR=$(pwd)
+DEPLOY_DIR=$PROJECT_DIR/deploy
+
+mkdir -p $DEPLOY_DIR/build
+BUILD_DIR=$DEPLOY_DIR/build
+
+echo "Project dir: ${PROJECT_DIR}"
+echo "Build dir: ${BUILD_DIR}"
+
+APP_NAME=AmneziaVPN
+APP_FILENAME=$APP_NAME.app
+APP_DOMAIN=org.amneziavpn.package
+
+OUT_APP_DIR=$BUILD_DIR/client
+BUNDLE_DIR=$OUT_APP_DIR/$APP_FILENAME
+
+DEPLOY_DATA_DIR=$PROJECT_DIR/deploy/data/linux
+INSTALLER_DATA_DIR=$BUILD_DIR/installer/packages/$APP_DOMAIN/data
+INSTALLER_BUNDLE_DIR=$BUILD_DIR/installer/$APP_FILENAME
+
+PRO_FILE_PATH=$PROJECT_DIR/$APP_NAME.pro
+QMAKE_STASH_FILE=$PROJECT_DIR/.qmake_stash
+
+# Seacrh Qt
+if [ -z "${QT_VERSION+x}" ]; then
+QT_VERSION=5.15.2;
+QIF_VERSION=4.1
+QT_BIN_DIR=$HOME/Qt/$QT_VERSION/gcc_64/bin
+QIF_BIN_DIR=$QT_BIN_DIR/../../../Tools/QtInstallerFramework/$QIF_VERSION/bin
+fi
+
+echo "Using Qt in $QT_BIN_DIR"
+echo "Using QIF in $QIF_BIN_DIR"
+
+
+# Checking env
+$QT_BIN_DIR/qmake -v
+make -v
+gcc -v
+
+# Build App
+echo "Building App..."
+cd $BUILD_DIR
+
+$QT_BIN_DIR/qmake $PROJECT_DIR/AmneziaVPN.pro 'CONFIG+=release CONFIG+=x86_64'
+make
+
+# Build and run tests here
+
+#echo "............Deploy.................."
+
+
diff --git a/deploy/build_macos.sh b/deploy/build_macos.sh
index 9d321a2f..09dd85f7 100755
--- a/deploy/build_macos.sh
+++ b/deploy/build_macos.sh
@@ -3,6 +3,13 @@ echo "Build script started ..."
set -o errexit -o nounset
+while getopts n: flag
+do
+ case "${flag}" in
+ n) NOTARIZE_APP=1;;
+ esac
+done
+
# Hold on to current directory
PROJECT_DIR=$(pwd)
DEPLOY_DIR=$PROJECT_DIR/deploy
@@ -20,12 +27,14 @@ PLIST_NAME=$APP_NAME.plist
OUT_APP_DIR=$BUILD_DIR/client
BUNDLE_DIR=$OUT_APP_DIR/$APP_FILENAME
+
DEPLOY_DATA_DIR=$PROJECT_DIR/deploy/data/macos
INSTALLER_DATA_DIR=$BUILD_DIR/installer/packages/$APP_DOMAIN/data
+INSTALLER_BUNDLE_DIR=$BUILD_DIR/installer/$APP_FILENAME
PRO_FILE_PATH=$PROJECT_DIR/$APP_NAME.pro
QMAKE_STASH_FILE=$PROJECT_DIR/.qmake_stash
-DMG_FILENAME=$PROJECT_DIR/${APP_NAME}_unsigned.dmg
+DMG_FILENAME=$PROJECT_DIR/${APP_NAME}.dmg
# Seacrh Qt
if [ -z "${QT_VERSION+x}" ]; then
@@ -62,64 +71,97 @@ echo "Packaging ..."
#cd $DEPLOY_DIR
-$QT_BIN_DIR/macdeployqt $OUT_APP_DIR/$APP_FILENAME -always-overwrite
+$QT_BIN_DIR/macdeployqt $OUT_APP_DIR/$APP_FILENAME -always-overwrite -qmldir=$PROJECT_DIR
cp -av $BUILD_DIR/service/server/$APP_NAME-service.app/Contents/macOS/$APP_NAME-service $BUNDLE_DIR/Contents/macOS
cp -Rv $PROJECT_DIR/deploy/data/macos/* $BUNDLE_DIR/Contents/macOS
+rm -f $BUNDLE_DIR/Contents/macOS/post_install.sh $BUNDLE_DIR/Contents/macOS/post_uninstall.sh
if [ "${MAC_CERT_PW+x}" ]; then
-CERTIFICATE_P12=$DEPLOY_DIR/PrivacyTechAppleCertDeveloperId.p12
-WWDRCA=$DEPLOY_DIR/WWDRCA.cer
-KEYCHAIN=amnezia.build.keychain
-TEMP_PASS=tmp_pass
+ CERTIFICATE_P12=$DEPLOY_DIR/PrivacyTechAppleCertDeveloperId.p12
+ WWDRCA=$DEPLOY_DIR/WWDRCA.cer
+ KEYCHAIN=amnezia.build.keychain
+ TEMP_PASS=tmp_pass
-security create-keychain -p $TEMP_PASS $KEYCHAIN || true
-security default-keychain -s $KEYCHAIN
-security unlock-keychain -p $TEMP_PASS $KEYCHAIN
+ security create-keychain -p $TEMP_PASS $KEYCHAIN || true
+ security default-keychain -s $KEYCHAIN
+ security unlock-keychain -p $TEMP_PASS $KEYCHAIN
-security default-keychain
-security list-keychains
+ security default-keychain
+ security list-keychains
-security import $WWDRCA -k $KEYCHAIN -T /usr/bin/codesign || true
-security import $CERTIFICATE_P12 -k $KEYCHAIN -P $MAC_CERT_PW -T /usr/bin/codesign || true
+ security import $WWDRCA -k $KEYCHAIN -T /usr/bin/codesign || true
+ security import $CERTIFICATE_P12 -k $KEYCHAIN -P $MAC_CERT_PW -T /usr/bin/codesign || true
-security set-key-partition-list -S apple-tool:,apple: -k $TEMP_PASS $KEYCHAIN
-security find-identity -p codesigning
+ security set-key-partition-list -S apple-tool:,apple: -k $TEMP_PASS $KEYCHAIN
+ security find-identity -p codesigning
-/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $BUNDLE_DIR
-/usr/bin/codesign --verify -vvvv $BUNDLE_DIR || true
-spctl -a -vvvv $BUNDLE_DIR || true
+ echo "Signing App bundle..."
+ /usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $BUNDLE_DIR
+ /usr/bin/codesign --verify -vvvv $BUNDLE_DIR || true
+ spctl -a -vvvv $BUNDLE_DIR || true
+ if [ "${NOTARIZE_APP+x}" ]; then
+ echo "Notatizing App bundle..."
+ /usr/bin/ditto -c -k --keepParent $BUNDLE_DIR $PROJECT_DIR/Bundle_to_notarize.zip
+ xcrun altool --notarize-app -f $PROJECT_DIR/Bundle_to_notarize.zip -t osx --primary-bundle-id "$APP_DOMAIN" -u "$APPLE_DEV_EMAIL" -p $APPLE_DEV_PASSWORD
+ rm $PROJECT_DIR/Bundle_to_notarize.zip
+ sleep 600
+ xcrun stapler staple $BUNDLE_DIR
+ xcrun stapler validate $BUNDLE_DIR
+ spctl -a -vvvv $BUNDLE_DIR || true
+ fi
fi
-
+echo "Packaging installer..."
mkdir -p $INSTALLER_DATA_DIR
cp -av $PROJECT_DIR/deploy/installer $BUILD_DIR
cp -av $DEPLOY_DATA_DIR/post_install.sh $INSTALLER_DATA_DIR/post_install.sh
cp -av $DEPLOY_DATA_DIR/post_uninstall.sh $INSTALLER_DATA_DIR/post_uninstall.sh
cp -av $DEPLOY_DATA_DIR/$PLIST_NAME $INSTALLER_DATA_DIR/$PLIST_NAME
-rm -f $BUNDLE_DIR/Contents/macOS/post_install.sh $BUNDLE_DIR/Contents/macOS/post_uninstall.sh
chmod a+x $INSTALLER_DATA_DIR/post_install.sh $INSTALLER_DATA_DIR/post_uninstall.sh
cd $BUNDLE_DIR
tar czf $INSTALLER_DATA_DIR/$APP_NAME.tar.gz ./
-cd $BUILD_DIR/installer
-$QIF_BIN_DIR/binarycreator --offline-only -v -c config/macos.xml -p packages -f $APP_FILENAME
+echo "Building installer..."
+$QIF_BIN_DIR/binarycreator --offline-only -v -c $BUILD_DIR/installer/config/macos.xml -p $BUILD_DIR/installer/packages -f $INSTALLER_BUNDLE_DIR
+
if [ "${MAC_CERT_PW+x}" ]; then
-/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $APP_FILENAME
+ echo "Signing installer bundle..."
+ security unlock-keychain -p $TEMP_PASS $KEYCHAIN
+ /usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $INSTALLER_BUNDLE_DIR
+ /usr/bin/codesign --verify -vvvv $INSTALLER_BUNDLE_DIR || true
+
+ if [ "${NOTARIZE_APP+x}" ]; then
+ echo "Notatizing installer bundle..."
+ /usr/bin/ditto -c -k --keepParent $INSTALLER_BUNDLE_DIR $PROJECT_DIR/Installer_bundle_to_notarize.zip
+ xcrun altool --notarize-app -f $PROJECT_DIR/Installer_bundle_to_notarize.zip -t osx --primary-bundle-id "$APP_DOMAIN" -u "$APPLE_DEV_EMAIL" -p $APPLE_DEV_PASSWORD
+ rm $PROJECT_DIR/Installer_bundle_to_notarize.zip
+ sleep 600
+ xcrun stapler staple $INSTALLER_BUNDLE_DIR
+ xcrun stapler validate $INSTALLER_BUNDLE_DIR
+ spctl -a -vvvv $INSTALLER_BUNDLE_DIR || true
+ fi
fi
-hdiutil create -volname $APP_NAME -srcfolder $APP_NAME.app -ov -format UDZO $DMG_FILENAME
+echo "Building DMG installer..."
+hdiutil create -volname $APP_NAME -srcfolder $BUILD_DIR/installer/$APP_NAME.app -ov -format UDZO $DMG_FILENAME
if [ "${MAC_CERT_PW+x}" ]; then
-/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $DMG_FILENAME
-/usr/bin/codesign --verify -vvvv $DMG_FILENAME || true
-spctl -a -vvvv $DMG_FILENAME || true
-#xcrun altool --notarize-app -f $DMG_FILENAME -t osx --primary-bundle-id $APP_DOMAIN -u $APPLE_DEV_EMAIL -p $APPLE_DEV_PASSWORD
-#xcrun stapler staple $DMG_FILENAME
-#xcrun stapler validate $DMG_FILENAME
+ echo "Signing DMG installer..."
+ security unlock-keychain -p $TEMP_PASS $KEYCHAIN
+ /usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $DMG_FILENAME
+ /usr/bin/codesign --verify -vvvv $DMG_FILENAME || true
+
+ if [ "${NOTARIZE_APP+x}" ]; then
+ echo "Notatizing DMG installer..."
+ xcrun altool --notarize-app -f $DMG_FILENAME -t osx --primary-bundle-id $APP_DOMAIN -u $APPLE_DEV_EMAIL -p $APPLE_DEV_PASSWORD
+ sleep 600
+ xcrun stapler staple $DMG_FILENAME
+ xcrun stapler validate $DMG_FILENAME
+ fi
fi
echo "Finished, artifact is $DMG_FILENAME"
diff --git a/deploy/build_macos_notarized.sh b/deploy/build_macos_notarized.sh
deleted file mode 100755
index 2133286b..00000000
--- a/deploy/build_macos_notarized.sh
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/bin/bash
-echo "Build script started ..."
-
-set -o errexit -o nounset
-
-# Hold on to current directory
-PROJECT_DIR=$(pwd)
-DEPLOY_DIR=$PROJECT_DIR/deploy
-
-mkdir -p $DEPLOY_DIR/build
-BUILD_DIR=$DEPLOY_DIR/build
-
-echo "Project dir: ${PROJECT_DIR}"
-echo "Build dir: ${BUILD_DIR}"
-
-APP_NAME=AmneziaVPN
-APP_FILENAME=$APP_NAME.app
-APP_DOMAIN=org.amneziavpn.package
-PLIST_NAME=$APP_NAME.plist
-
-OUT_APP_DIR=$BUILD_DIR/client
-BUNDLE_DIR=$OUT_APP_DIR/$APP_FILENAME
-
-DEPLOY_DATA_DIR=$PROJECT_DIR/deploy/data/macos
-INSTALLER_DATA_DIR=$BUILD_DIR/installer/packages/$APP_DOMAIN/data
-INSTALLER_BUNDLE_DIR=$BUILD_DIR/installer/$APP_FILENAME
-
-PRO_FILE_PATH=$PROJECT_DIR/$APP_NAME.pro
-QMAKE_STASH_FILE=$PROJECT_DIR/.qmake_stash
-DMG_FILENAME=$PROJECT_DIR/${APP_NAME}_unsigned.dmg
-
-# Seacrh Qt
-if [ -z "${QT_VERSION+x}" ]; then
-QT_VERSION=5.15.2;
-QIF_VERSION=4.1
-QT_BIN_DIR=$HOME/Qt/$QT_VERSION/clang_64/bin
-QIF_BIN_DIR=$QT_BIN_DIR/../../../Tools/QtInstallerFramework/$QIF_VERSION/bin
-fi
-
-echo "Using Qt in $QT_BIN_DIR"
-echo "Using QIF in $QIF_BIN_DIR"
-
-
-# Checking env
-$QT_BIN_DIR/qmake -v
-make -v
-clang -v
-
-# Build App
-echo "Building App..."
-cd $BUILD_DIR
-
-$QT_BIN_DIR/qmake $PROJECT_DIR/AmneziaVPN.pro 'CONFIG+=release CONFIG+=x86_64'
-make -j `sysctl -n hw.ncpu`
-
-# Build and run tests here
-
-echo "____________________________________"
-echo "............Deploy.................."
-echo "____________________________________"
-
-# Package
-echo "Packaging ..."
-
-#cd $DEPLOY_DIR
-
-$QT_BIN_DIR/macdeployqt $OUT_APP_DIR/$APP_FILENAME -always-overwrite -qmldir=$PROJECT_DIR
-cp -av $BUILD_DIR/service/server/$APP_NAME-service.app/Contents/macOS/$APP_NAME-service $BUNDLE_DIR/Contents/macOS
-cp -Rv $PROJECT_DIR/deploy/data/macos/* $BUNDLE_DIR/Contents/macOS
-rm -f $BUNDLE_DIR/Contents/macOS/post_install.sh $BUNDLE_DIR/Contents/macOS/post_uninstall.sh
-
-if [ "${MAC_CERT_PW+x}" ]; then
-
-CERTIFICATE_P12=$DEPLOY_DIR/PrivacyTechAppleCertDeveloperId.p12
-WWDRCA=$DEPLOY_DIR/WWDRCA.cer
-KEYCHAIN=amnezia.build.keychain
-TEMP_PASS=tmp_pass
-
-security create-keychain -p $TEMP_PASS $KEYCHAIN || true
-security default-keychain -s $KEYCHAIN
-security unlock-keychain -p $TEMP_PASS $KEYCHAIN
-
-security default-keychain
-security list-keychains
-
-security import $WWDRCA -k $KEYCHAIN -T /usr/bin/codesign || true
-security import $CERTIFICATE_P12 -k $KEYCHAIN -P $MAC_CERT_PW -T /usr/bin/codesign || true
-
-security set-key-partition-list -S apple-tool:,apple: -k $TEMP_PASS $KEYCHAIN
-security find-identity -p codesigning
-
-echo "Signing App bundle..."
-/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $BUNDLE_DIR
-/usr/bin/codesign --verify -vvvv $BUNDLE_DIR || true
-spctl -a -vvvv $BUNDLE_DIR || true
-
-echo "Notatizing App bundle..."
-/usr/bin/ditto -c -k --keepParent $BUNDLE_DIR $PROJECT_DIR/Bundle_to_notarize.zip
-xcrun altool --notarize-app -f $PROJECT_DIR/Bundle_to_notarize.zip -t osx --primary-bundle-id "$APP_DOMAIN" -u "$APPLE_DEV_EMAIL" -p $APPLE_DEV_PASSWORD
-rm $PROJECT_DIR/Bundle_to_notarize.zip
-sleep 600
-xcrun stapler staple $BUNDLE_DIR
-xcrun stapler validate $BUNDLE_DIR
-spctl -a -vvvv $BUNDLE_DIR || true
-
-fi
-
-echo "Packaging installer..."
-mkdir -p $INSTALLER_DATA_DIR
-cp -av $PROJECT_DIR/deploy/installer $BUILD_DIR
-cp -av $DEPLOY_DATA_DIR/post_install.sh $INSTALLER_DATA_DIR/post_install.sh
-cp -av $DEPLOY_DATA_DIR/post_uninstall.sh $INSTALLER_DATA_DIR/post_uninstall.sh
-cp -av $DEPLOY_DATA_DIR/$PLIST_NAME $INSTALLER_DATA_DIR/$PLIST_NAME
-
-chmod a+x $INSTALLER_DATA_DIR/post_install.sh $INSTALLER_DATA_DIR/post_uninstall.sh
-
-cd $BUNDLE_DIR
-tar czf $INSTALLER_DATA_DIR/$APP_NAME.tar.gz ./
-
-echo "Building installer..."
-$QIF_BIN_DIR/binarycreator --offline-only -v -c $BUILD_DIR/installer/config/macos.xml -p $BUILD_DIR/installer/packages -f $INSTALLER_BUNDLE_DIR
-
-if [ "${MAC_CERT_PW+x}" ]; then
-echo "Signing installer bundle..."
-security unlock-keychain -p $TEMP_PASS $KEYCHAIN
-/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $INSTALLER_BUNDLE_DIR
-/usr/bin/codesign --verify -vvvv $INSTALLER_BUNDLE_DIR || true
-
-echo "Notatizing installer bundle..."
-/usr/bin/ditto -c -k --keepParent $INSTALLER_BUNDLE_DIR $PROJECT_DIR/Installer_bundle_to_notarize.zip
-xcrun altool --notarize-app -f $PROJECT_DIR/Installer_bundle_to_notarize.zip -t osx --primary-bundle-id "$APP_DOMAIN" -u "$APPLE_DEV_EMAIL" -p $APPLE_DEV_PASSWORD
-rm $PROJECT_DIR/Installer_bundle_to_notarize.zip
-sleep 600
-xcrun stapler staple $INSTALLER_BUNDLE_DIR
-xcrun stapler validate $INSTALLER_BUNDLE_DIR
-spctl -a -vvvv $INSTALLER_BUNDLE_DIR || true
-
-fi
-
-echo "Building DMG installer..."
-hdiutil create -volname $APP_NAME -srcfolder $BUILD_DIR/installer/$APP_NAME.app -ov -format UDZO $DMG_FILENAME
-
-if [ "${MAC_CERT_PW+x}" ]; then
-echo "Signing DMG installer..."
-security unlock-keychain -p $TEMP_PASS $KEYCHAIN
-/usr/bin/codesign --deep --force --verbose --timestamp -o runtime --sign "Developer ID Application: Privacy Technologies OU (X7UJ388FXK)" $DMG_FILENAME
-/usr/bin/codesign --verify -vvvv $DMG_FILENAME || true
-
-echo "Notatizing DMG installer..."
-xcrun altool --notarize-app -f $DMG_FILENAME -t osx --primary-bundle-id $APP_DOMAIN -u $APPLE_DEV_EMAIL -p $APPLE_DEV_PASSWORD
-sleep 600
-xcrun stapler staple $DMG_FILENAME
-xcrun stapler validate $DMG_FILENAME
-
-fi
-
-echo "Finished, artifact is $DMG_FILENAME"
-
-# restore keychain
-security default-keychain -s login.keychain
diff --git a/deploy/data/linux/AmneziaVPN.desktop b/deploy/data/linux/AmneziaVPN.desktop
new file mode 100755
index 00000000..d89252c0
--- /dev/null
+++ b/deploy/data/linux/AmneziaVPN.desktop
@@ -0,0 +1,10 @@
+#!/usr/bin/env xdg-open
+[Desktop Entry]
+Type=Application
+Name=AmneziaVPN client
+Version=2.0.10
+Comment=Client of your self-hosted VPN
+Exec=AmneziaVPN
+Icon=/usr/share/pixmaps/AmneziaVPN_Logo.png
+Categories=Network;Qt;Security;
+Terminal=false
diff --git a/deploy/data/linux/service/AmneziaVPN.service b/deploy/data/linux/AmneziaVPN.service
similarity index 59%
rename from deploy/data/linux/service/AmneziaVPN.service
rename to deploy/data/linux/AmneziaVPN.service
index e20e1c1c..5e7753e0 100755
--- a/deploy/data/linux/service/AmneziaVPN.service
+++ b/deploy/data/linux/AmneziaVPN.service
@@ -7,8 +7,7 @@ StartLimitIntervalSec=0
Type=simple
Restart=always
RestartSec=1
-ExecStart=/opt/AmneziaVPN/service/bin/AmneziaVPN-service
-Environment="LD_LIBRARY_PATH=/opt/AmneziaVPN/client/lib/"
+ExecStart=/opt/AmneziaVPN/service/AmneziaVPN-service.sh
[Install]
WantedBy=multi-user.target
diff --git a/deploy/data/linux/AmneziaVPN_build.desktop b/deploy/data/linux/AmneziaVPN_build.desktop
deleted file mode 100755
index 65b43491..00000000
--- a/deploy/data/linux/AmneziaVPN_build.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env xdg-open
-[Desktop Entry]
-Type=Application
-Name=AmneziaVPN client
-Comment=AmneziaVPN client
-Exec=AmneziaVPN
-Icon=AmneziaVPN_Logo.png
-Categories=VPN
diff --git a/deploy/data/linux/client/AmneziaVPN.desktop b/deploy/data/linux/client/AmneziaVPN.desktop
deleted file mode 100755
index 65b43491..00000000
--- a/deploy/data/linux/client/AmneziaVPN.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env xdg-open
-[Desktop Entry]
-Type=Application
-Name=AmneziaVPN client
-Comment=AmneziaVPN client
-Exec=AmneziaVPN
-Icon=AmneziaVPN_Logo.png
-Categories=VPN
diff --git a/deploy/data/linux/client/AmneziaVPN.sh b/deploy/data/linux/client/AmneziaVPN.sh
index 79f8a34b..fc3ca450 100755
--- a/deploy/data/linux/client/AmneziaVPN.sh
+++ b/deploy/data/linux/client/AmneziaVPN.sh
@@ -5,8 +5,6 @@
#
# ####################################################################
#
-# All variables has the CQT_ prefix
-# BIN_PATH - are releative path to executable files of a deployed distribution.
# LIB_PATH - are releative path to libraryes of a deployed distribution.
# QML_PATH - are releative path to qml libraryes of a deployed distribution.
# PLUGIN_PATH - are releative path to qt plugins of a deployed distribution.
@@ -20,7 +18,6 @@
# ####################################################################
BASE_DIR=$(dirname "$(readlink -f "$0")")
-export PATH="$BASE_DIR"/bin/:$PATH
export LD_LIBRARY_PATH="$BASE_DIR"/lib/:"$BASE_DIR":$LD_LIBRARY_PATH
export QML_IMPORT_PATH="$BASE_DIR"/qml/:$QML_IMPORT_PATH
export QML2_IMPORT_PATH="$BASE_DIR"/qml/:$QML2_IMPORT_PATH
diff --git a/deploy/data/linux/client/bin/openssl-easyrsa.cnf b/deploy/data/linux/client/bin/openssl-easyrsa.cnf
deleted file mode 100755
index 5c4fc79e..00000000
--- a/deploy/data/linux/client/bin/openssl-easyrsa.cnf
+++ /dev/null
@@ -1,138 +0,0 @@
-# For use with Easy-RSA 3.0+ and OpenSSL or LibreSSL
-
-####################################################################
-[ ca ]
-default_ca = CA_default # The default ca section
-
-####################################################################
-[ CA_default ]
-
-dir = $ENV::EASYRSA_PKI # Where everything is kept
-certs = $dir # Where the issued certs are kept
-crl_dir = $dir # Where the issued crl are kept
-database = $dir/index.txt # database index file.
-new_certs_dir = $dir/certs_by_serial # default place for new certs.
-
-certificate = $dir/ca.crt # The CA certificate
-serial = $dir/serial # The current serial number
-crl = $dir/crl.pem # The current CRL
-private_key = $dir/private/ca.key # The private key
-RANDFILE = $dir/.rand # private random number file
-
-x509_extensions = basic_exts # The extensions to add to the cert
-
-# This allows a V2 CRL. Ancient browsers don't like it, but anything Easy-RSA
-# is designed for will. In return, we get the Issuer attached to CRLs.
-crl_extensions = crl_ext
-
-default_days = $ENV::EASYRSA_CERT_EXPIRE # how long to certify for
-default_crl_days= $ENV::EASYRSA_CRL_DAYS # how long before next CRL
-default_md = $ENV::EASYRSA_DIGEST # use public key default MD
-preserve = no # keep passed DN ordering
-
-# This allows to renew certificates which have not been revoked
-unique_subject = no
-
-# A few different ways of specifying how similar the request should look
-# For type CA, the listed attributes must be the same, and the optional
-# and supplied fields are just that :-)
-policy = policy_anything
-
-# For the 'anything' policy, which defines allowed DN fields
-[ policy_anything ]
-countryName = optional
-stateOrProvinceName = optional
-localityName = optional
-organizationName = optional
-organizationalUnitName = optional
-commonName = supplied
-name = optional
-emailAddress = optional
-
-####################################################################
-# Easy-RSA request handling
-# We key off $DN_MODE to determine how to format the DN
-[ req ]
-default_bits = $ENV::EASYRSA_KEY_SIZE
-default_keyfile = privkey.pem
-default_md = $ENV::EASYRSA_DIGEST
-distinguished_name = $ENV::EASYRSA_DN
-x509_extensions = easyrsa_ca # The extensions to add to the self signed cert
-
-# A placeholder to handle the $EXTRA_EXTS feature:
-#%EXTRA_EXTS% # Do NOT remove or change this line as $EXTRA_EXTS support requires it
-
-####################################################################
-# Easy-RSA DN (Subject) handling
-
-# Easy-RSA DN for cn_only support:
-[ cn_only ]
-commonName = Common Name (eg: your user, host, or server name)
-commonName_max = 64
-commonName_default = $ENV::EASYRSA_REQ_CN
-
-# Easy-RSA DN for org support:
-[ org ]
-countryName = Country Name (2 letter code)
-countryName_default = $ENV::EASYRSA_REQ_COUNTRY
-countryName_min = 2
-countryName_max = 2
-
-stateOrProvinceName = State or Province Name (full name)
-stateOrProvinceName_default = $ENV::EASYRSA_REQ_PROVINCE
-
-localityName = Locality Name (eg, city)
-localityName_default = $ENV::EASYRSA_REQ_CITY
-
-0.organizationName = Organization Name (eg, company)
-0.organizationName_default = $ENV::EASYRSA_REQ_ORG
-
-organizationalUnitName = Organizational Unit Name (eg, section)
-organizationalUnitName_default = $ENV::EASYRSA_REQ_OU
-
-commonName = Common Name (eg: your user, host, or server name)
-commonName_max = 64
-commonName_default = $ENV::EASYRSA_REQ_CN
-
-emailAddress = Email Address
-emailAddress_default = $ENV::EASYRSA_REQ_EMAIL
-emailAddress_max = 64
-
-####################################################################
-# Easy-RSA cert extension handling
-
-# This section is effectively unused as the main script sets extensions
-# dynamically. This core section is left to support the odd usecase where
-# a user calls openssl directly.
-[ basic_exts ]
-basicConstraints = CA:FALSE
-subjectKeyIdentifier = hash
-authorityKeyIdentifier = keyid,issuer:always
-
-# The Easy-RSA CA extensions
-[ easyrsa_ca ]
-
-# PKIX recommendations:
-
-subjectKeyIdentifier=hash
-authorityKeyIdentifier=keyid:always,issuer:always
-
-# This could be marked critical, but it's nice to support reading by any
-# broken clients who attempt to do so.
-basicConstraints = CA:true
-
-# Limit key usage to CA tasks. If you really want to use the generated pair as
-# a self-signed cert, comment this out.
-keyUsage = cRLSign, keyCertSign
-
-# nsCertType omitted by default. Let's try to let the deprecated stuff die.
-# nsCertType = sslCA
-
-# CRL extensions.
-[ crl_ext ]
-
-# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
-
-# issuerAltName=issuer:copy
-authorityKeyIdentifier=keyid:always,issuer:always
-
diff --git a/deploy/data/linux/client/share/applications/AmneziaVPN.desktop b/deploy/data/linux/client/share/applications/AmneziaVPN.desktop
new file mode 100755
index 00000000..d89252c0
--- /dev/null
+++ b/deploy/data/linux/client/share/applications/AmneziaVPN.desktop
@@ -0,0 +1,10 @@
+#!/usr/bin/env xdg-open
+[Desktop Entry]
+Type=Application
+Name=AmneziaVPN client
+Version=2.0.10
+Comment=Client of your self-hosted VPN
+Exec=AmneziaVPN
+Icon=/usr/share/pixmaps/AmneziaVPN_Logo.png
+Categories=Network;Qt;Security;
+Terminal=false
diff --git a/deploy/data/linux/client/share/applications/AmneziaVPN_build.desktop b/deploy/data/linux/client/share/applications/AmneziaVPN_build.desktop
deleted file mode 100755
index 65b43491..00000000
--- a/deploy/data/linux/client/share/applications/AmneziaVPN_build.desktop
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env xdg-open
-[Desktop Entry]
-Type=Application
-Name=AmneziaVPN client
-Comment=AmneziaVPN client
-Exec=AmneziaVPN
-Icon=AmneziaVPN_Logo.png
-Categories=VPN
diff --git a/deploy/data/linux/client/translations/qtbase_ar.qm b/deploy/data/linux/client/translations/qtbase_ar.qm
deleted file mode 100755
index 32861b81..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_ar.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_bg.qm b/deploy/data/linux/client/translations/qtbase_bg.qm
deleted file mode 100755
index faeb1676..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_bg.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_ca.qm b/deploy/data/linux/client/translations/qtbase_ca.qm
deleted file mode 100755
index 20b751d4..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_ca.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_cs.qm b/deploy/data/linux/client/translations/qtbase_cs.qm
deleted file mode 100755
index 459ef266..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_cs.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_da.qm b/deploy/data/linux/client/translations/qtbase_da.qm
deleted file mode 100755
index 4ede24b4..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_da.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_de.qm b/deploy/data/linux/client/translations/qtbase_de.qm
deleted file mode 100755
index 4a4c988e..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_de.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_en.qm b/deploy/data/linux/client/translations/qtbase_en.qm
deleted file mode 100755
index be651eed..00000000
--- a/deploy/data/linux/client/translations/qtbase_en.qm
+++ /dev/null
@@ -1 +0,0 @@
-<¸dÊÍ!¿`¡½Ý
\ No newline at end of file
diff --git a/deploy/data/linux/client/translations/qtbase_es.qm b/deploy/data/linux/client/translations/qtbase_es.qm
deleted file mode 100755
index 1a131578..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_es.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_fi.qm b/deploy/data/linux/client/translations/qtbase_fi.qm
deleted file mode 100755
index 934aecdd..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_fi.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_fr.qm b/deploy/data/linux/client/translations/qtbase_fr.qm
deleted file mode 100755
index 009fb5a4..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_fr.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_gd.qm b/deploy/data/linux/client/translations/qtbase_gd.qm
deleted file mode 100755
index 3fe3841c..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_gd.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_he.qm b/deploy/data/linux/client/translations/qtbase_he.qm
deleted file mode 100755
index 95ed0c70..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_he.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_hu.qm b/deploy/data/linux/client/translations/qtbase_hu.qm
deleted file mode 100755
index e4920a63..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_hu.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_it.qm b/deploy/data/linux/client/translations/qtbase_it.qm
deleted file mode 100755
index a0205781..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_it.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_ja.qm b/deploy/data/linux/client/translations/qtbase_ja.qm
deleted file mode 100755
index 9cf6069e..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_ja.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_ko.qm b/deploy/data/linux/client/translations/qtbase_ko.qm
deleted file mode 100755
index 20e4661c..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_ko.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_lv.qm b/deploy/data/linux/client/translations/qtbase_lv.qm
deleted file mode 100755
index f88a761f..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_lv.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_pl.qm b/deploy/data/linux/client/translations/qtbase_pl.qm
deleted file mode 100755
index 28d4d8fe..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_pl.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_ru.qm b/deploy/data/linux/client/translations/qtbase_ru.qm
deleted file mode 100755
index c1a22864..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_ru.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_sk.qm b/deploy/data/linux/client/translations/qtbase_sk.qm
deleted file mode 100755
index 55a377e9..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_sk.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_tr.qm b/deploy/data/linux/client/translations/qtbase_tr.qm
deleted file mode 100755
index 3d289bb4..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_tr.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_uk.qm b/deploy/data/linux/client/translations/qtbase_uk.qm
deleted file mode 100755
index 21a30389..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_uk.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtbase_zh_TW.qm b/deploy/data/linux/client/translations/qtbase_zh_TW.qm
deleted file mode 100755
index 62052980..00000000
Binary files a/deploy/data/linux/client/translations/qtbase_zh_TW.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_bg.qm b/deploy/data/linux/client/translations/qtdeclarative_bg.qm
deleted file mode 100755
index 7e49f829..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_bg.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_da.qm b/deploy/data/linux/client/translations/qtdeclarative_da.qm
deleted file mode 100755
index 0dabc6b3..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_da.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_de.qm b/deploy/data/linux/client/translations/qtdeclarative_de.qm
deleted file mode 100755
index ed7bd249..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_de.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_en.qm b/deploy/data/linux/client/translations/qtdeclarative_en.qm
deleted file mode 100755
index be651eed..00000000
--- a/deploy/data/linux/client/translations/qtdeclarative_en.qm
+++ /dev/null
@@ -1 +0,0 @@
-<¸dÊÍ!¿`¡½Ý
\ No newline at end of file
diff --git a/deploy/data/linux/client/translations/qtdeclarative_es.qm b/deploy/data/linux/client/translations/qtdeclarative_es.qm
deleted file mode 100755
index da67b7f7..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_es.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_fi.qm b/deploy/data/linux/client/translations/qtdeclarative_fi.qm
deleted file mode 100755
index cdd21cd8..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_fi.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_fr.qm b/deploy/data/linux/client/translations/qtdeclarative_fr.qm
deleted file mode 100755
index 22705a63..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_fr.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_hu.qm b/deploy/data/linux/client/translations/qtdeclarative_hu.qm
deleted file mode 100755
index c554a4fd..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_hu.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_ja.qm b/deploy/data/linux/client/translations/qtdeclarative_ja.qm
deleted file mode 100755
index ff73ef1c..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_ja.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_ko.qm b/deploy/data/linux/client/translations/qtdeclarative_ko.qm
deleted file mode 100755
index 0b38a861..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_ko.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_lv.qm b/deploy/data/linux/client/translations/qtdeclarative_lv.qm
deleted file mode 100755
index 7e88b0dc..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_lv.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_pl.qm b/deploy/data/linux/client/translations/qtdeclarative_pl.qm
deleted file mode 100755
index 0fbf88f3..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_pl.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_ru.qm b/deploy/data/linux/client/translations/qtdeclarative_ru.qm
deleted file mode 100755
index 57b513fc..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_ru.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_sk.qm b/deploy/data/linux/client/translations/qtdeclarative_sk.qm
deleted file mode 100755
index d6d21ad0..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_sk.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_tr.qm b/deploy/data/linux/client/translations/qtdeclarative_tr.qm
deleted file mode 100755
index 57179ea7..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_tr.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtdeclarative_uk.qm b/deploy/data/linux/client/translations/qtdeclarative_uk.qm
deleted file mode 100755
index 4730edd4..00000000
Binary files a/deploy/data/linux/client/translations/qtdeclarative_uk.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_ar.qm b/deploy/data/linux/client/translations/qtmultimedia_ar.qm
deleted file mode 100755
index 8422ab3b..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_ar.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_bg.qm b/deploy/data/linux/client/translations/qtmultimedia_bg.qm
deleted file mode 100755
index d3bd8251..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_bg.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_ca.qm b/deploy/data/linux/client/translations/qtmultimedia_ca.qm
deleted file mode 100755
index 145a5c64..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_ca.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_cs.qm b/deploy/data/linux/client/translations/qtmultimedia_cs.qm
deleted file mode 100755
index 106a5e4d..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_cs.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_da.qm b/deploy/data/linux/client/translations/qtmultimedia_da.qm
deleted file mode 100755
index 93247328..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_da.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_de.qm b/deploy/data/linux/client/translations/qtmultimedia_de.qm
deleted file mode 100755
index 257aa5de..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_de.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_en.qm b/deploy/data/linux/client/translations/qtmultimedia_en.qm
deleted file mode 100755
index be651eed..00000000
--- a/deploy/data/linux/client/translations/qtmultimedia_en.qm
+++ /dev/null
@@ -1 +0,0 @@
-<¸dÊÍ!¿`¡½Ý
\ No newline at end of file
diff --git a/deploy/data/linux/client/translations/qtmultimedia_es.qm b/deploy/data/linux/client/translations/qtmultimedia_es.qm
deleted file mode 100755
index fe500a09..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_es.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_fi.qm b/deploy/data/linux/client/translations/qtmultimedia_fi.qm
deleted file mode 100755
index 2a391971..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_fi.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_fr.qm b/deploy/data/linux/client/translations/qtmultimedia_fr.qm
deleted file mode 100755
index da412e89..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_fr.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_hu.qm b/deploy/data/linux/client/translations/qtmultimedia_hu.qm
deleted file mode 100755
index 9437a8ad..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_hu.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_it.qm b/deploy/data/linux/client/translations/qtmultimedia_it.qm
deleted file mode 100755
index c1060bfb..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_it.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_ja.qm b/deploy/data/linux/client/translations/qtmultimedia_ja.qm
deleted file mode 100755
index 87af0b9b..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_ja.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_ko.qm b/deploy/data/linux/client/translations/qtmultimedia_ko.qm
deleted file mode 100755
index a48156e4..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_ko.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_pl.qm b/deploy/data/linux/client/translations/qtmultimedia_pl.qm
deleted file mode 100755
index 09f3a4af..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_pl.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_ru.qm b/deploy/data/linux/client/translations/qtmultimedia_ru.qm
deleted file mode 100755
index d6baa83b..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_ru.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_sk.qm b/deploy/data/linux/client/translations/qtmultimedia_sk.qm
deleted file mode 100755
index b9638b53..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_sk.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_tr.qm b/deploy/data/linux/client/translations/qtmultimedia_tr.qm
deleted file mode 100755
index 5c2646f7..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_tr.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_uk.qm b/deploy/data/linux/client/translations/qtmultimedia_uk.qm
deleted file mode 100755
index 501246e2..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_uk.qm and /dev/null differ
diff --git a/deploy/data/linux/client/translations/qtmultimedia_zh_TW.qm b/deploy/data/linux/client/translations/qtmultimedia_zh_TW.qm
deleted file mode 100755
index fb4a9f82..00000000
Binary files a/deploy/data/linux/client/translations/qtmultimedia_zh_TW.qm and /dev/null differ
diff --git a/deploy/data/linux/post_install.sh b/deploy/data/linux/post_install.sh
index 12e7421a..f69de3d5 100755
--- a/deploy/data/linux/post_install.sh
+++ b/deploy/data/linux/post_install.sh
@@ -25,31 +25,20 @@ if sudo systemctl is-active --quiet $APP_NAME; then
sudo rm -rf /etc/systemd/system/$APP_NAME.service >> $LOG_FILE
fi
-sudo chmod +x $APP_PATH/client/bin/easyrsa >> $LOG_FILE
-sudo chmod --- $APP_PATH/client/bin/update-resolv-conf.sh
-sudo chmod +rx $APP_PATH/client/bin/update-resolv-conf.sh
+sudo chmod -R a-w $APP_PATH/
-sudo cp $APP_PATH/service/$APP_NAME.service /etc/systemd/system/ >> $LOG_FILE
+sudo cp $APP_PATH/$APP_NAME.service /etc/systemd/system/ >> $LOG_FILE
sudo systemctl start $APP_NAME >> $LOG_FILE
sudo systemctl enable $APP_NAME >> $LOG_FILE
-sudo ln -s $APP_PATH/client/$APP_NAME.sh /usr/sbin/$APP_NAME >> $LOG_FILE
-
+sudo chmod 555 $APP_PATH/client/$APP_NAME.sh >> $LOG_FILE
+sudo ln -s $APP_PATH/client/$APP_NAME.sh /usr/local/sbin/$APP_NAME >> $LOG_FILE
+sudo ln -s $APP_PATH/client/$APP_NAME.sh /usr/local/bin/$APP_NAME >> $LOG_FILE
echo "user desktop creation loop started" >> $LOG_FILE
-getent passwd {1000..6000} | while IFS=: read -r name password uid gid gecos home shell; do
- echo "name: $name"
- if ! test -f /home/$name/.icons; then
- mkdir /home/$name/.icons/ >> $LOG_FILE
- fi
+sudo cp $APP_PATH/$APP_NAME.desktop /usr/share/applications/ >> $LOG_FILE
+sudo chmod 555 /usr/share/applications/$APP_NAME.desktop >> $LOG_FILE
- cp -f $APP_PATH/client/share/icons/AmneziaVPN_Logo.png /home/$name/.icons/ >> $LOG_FILE
- cp $APP_PATH/client/$APP_NAME.desktop /home/$name/Desktop/ >> $LOG_FILE
-
- sudo chown $name:$name /home/$name/.local/share/gvfs-metadata/home* >> $LOG_FILE
- sudo -u $name dbus-launch gio set /home/$name/Desktop/AmneziaVPN.desktop "metadata::trusted" yes >> $LOG_FILE
- sudo chown $name:$name /home/$name/Desktop/AmneziaVPN.desktop >> $LOG_FILE
-done
echo "user desktop creation loop ended" >> $LOG_FILE
date >> $LOG_FILE
diff --git a/deploy/data/linux/post_uninstall.sh b/deploy/data/linux/post_uninstall.sh
index acf09028..029bb7cf 100755
--- a/deploy/data/linux/post_uninstall.sh
+++ b/deploy/data/linux/post_uninstall.sh
@@ -29,47 +29,30 @@ if test -f /etc/systemd/system/$APP_NAME.service; then
sudo rm -rf /etc/systemd/system/$APP_NAME.service >> $LOG_FILE
fi
-if test -f /usr/bin/$APP_NAME; then
- sudo rm -rf /usr/sbin/$APP_NAME >> $LOG_FILE
-fi
-
if test -f $APP_PATH; then
sudo rm -rf $APP_PATH >> $LOG_FILE
fi
if test -f /usr/sbin/$APP_NAME; then
- sudo rm -rf /usr/sbin/$APP_NAME >> $LOG_FILE
+ sudo rm -f /usr/sbin/$APP_NAME >> $LOG_FILE
fi
-if test -f /usr/sbin/$APP_NAME-service; then
- sudo rm -rf /usr/sbin/$APP_NAME-service >> $LOG_FILE
+if test -f /usr/bin/$APP_NAME; then
+ sudo rm -f /usr/bin/$APP_NAME >> $LOG_FILE
fi
-getent passwd {1000..6000} | while IFS=: read -r name password uid gid gecos home shell; do
- if test -f /home/$name/Desktop/$APP_NAME\ client.desktop; then
- sudo rm -rf /home/$name/Desktop/$APP_NAME\ client.desktop >> $LOG_FILE
- fi
+if test -f /usr/local/bin/$APP_NAME; then
+ sudo rm -f /usr/local/bin/$APP_NAME >> $LOG_FILE
+fi
- if test -f /home/$name/Desktop/$APP_NAME.desktop; then
- sudo rm -rf /home/$name/Desktop/$APP_NAME.desktop >> $LOG_FILE
- fi
+if test -f /usr/local/sbin/$APP_NAME; then
+ sudo rm -f /usr/local/sbin/$APP_NAME >> $LOG_FILE
+fi
- if test -f /home/$name/.config/$APP_NAME.ORG; then
- sudo rm -rf /home/$name/.config/$APP_NAME.ORG >> $LOG_FILE
- fi
+if test -f /usr/share/applications/$APP_NAME.desktop; then
+ sudo rm -f /usr/share/applications/$APP_NAME.desktop >> $LOG_FILE
- if test -f /home/$name/.local/share/$APP_NAME.ORG; then
- sudo rm -rf /home/$name/.local/share/$APP_NAME.ORG >> $LOG_FILE
- fi
-
- if test -f /home/$name/.local/share/$APP_NAME; then
- sudo rm -rf /home/$name/.local/share/$APP_NAME >> $LOG_FILE
- fi
-
- if test -f /home/$name/.icons/AmneziaVPN_Logo.png; then
- sudo rm -rf /home/$name/.icons/AmneziaVPN_Logo.png >> $LOG_FILE
- fi
-done
+fi
date >> $LOG_FILE
echo "Service after uninstall status:" >> $LOG_FILE
diff --git a/deploy/data/linux/service/AmneziaVPN-service.sh b/deploy/data/linux/service/AmneziaVPN-service.sh
index 8d162263..6b0497b3 100755
--- a/deploy/data/linux/service/AmneziaVPN-service.sh
+++ b/deploy/data/linux/service/AmneziaVPN-service.sh
@@ -5,8 +5,6 @@
#
# ####################################################################
#
-# All variables has the CQT_ prefix
-# BIN_PATH - are releative path to executable files of a deployed distribution.
# LIB_PATH - are releative path to libraryes of a deployed distribution.
# QML_PATH - are releative path to qml libraryes of a deployed distribution.
# PLUGIN_PATH - are releative path to qt plugins of a deployed distribution.
@@ -20,7 +18,6 @@
# ####################################################################
BASE_DIR=$(dirname "$(readlink -f "$0")")
-export PATH="$BASE_DIR"/bin/:$PATH
export LD_LIBRARY_PATH="$BASE_DIR"/lib/:"$BASE_DIR":$LD_LIBRARY_PATH
export QML_IMPORT_PATH="$BASE_DIR"/qml/:$QML_IMPORT_PATH
export QML2_IMPORT_PATH="$BASE_DIR"/qml/:$QML2_IMPORT_PATH
diff --git a/deploy/data/linux/service/share/applications/AmneziaVPN_build.desktop b/deploy/data/linux/service/share/applications/AmneziaVPN_build.desktop
deleted file mode 100755
index a4336e6b..00000000
--- a/deploy/data/linux/service/share/applications/AmneziaVPN_build.desktop
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env xdg-open
-[Desktop Entry]
-Type=Application
-Name=AmneziaVPN service
-Comment=AmneziaVPN service
-Exec=AmneziaVPN-service
-Categories=VPN
diff --git a/deploy/data/linux/service/translations/qt_ar.qm b/deploy/data/linux/service/translations/qt_ar.qm
deleted file mode 100755
index 1e9227a1..00000000
Binary files a/deploy/data/linux/service/translations/qt_ar.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_bg.qm b/deploy/data/linux/service/translations/qt_bg.qm
deleted file mode 100755
index dcec255a..00000000
Binary files a/deploy/data/linux/service/translations/qt_bg.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_ca.qm b/deploy/data/linux/service/translations/qt_ca.qm
deleted file mode 100755
index 0b798e5a..00000000
Binary files a/deploy/data/linux/service/translations/qt_ca.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_cs.qm b/deploy/data/linux/service/translations/qt_cs.qm
deleted file mode 100755
index 3ab5ca70..00000000
Binary files a/deploy/data/linux/service/translations/qt_cs.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_da.qm b/deploy/data/linux/service/translations/qt_da.qm
deleted file mode 100755
index 67564968..00000000
Binary files a/deploy/data/linux/service/translations/qt_da.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_de.qm b/deploy/data/linux/service/translations/qt_de.qm
deleted file mode 100755
index 9c8e9b49..00000000
Binary files a/deploy/data/linux/service/translations/qt_de.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_en.qm b/deploy/data/linux/service/translations/qt_en.qm
deleted file mode 100755
index 9dad8dff..00000000
Binary files a/deploy/data/linux/service/translations/qt_en.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_es.qm b/deploy/data/linux/service/translations/qt_es.qm
deleted file mode 100755
index 82012dac..00000000
Binary files a/deploy/data/linux/service/translations/qt_es.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_fi.qm b/deploy/data/linux/service/translations/qt_fi.qm
deleted file mode 100755
index 2548cca1..00000000
Binary files a/deploy/data/linux/service/translations/qt_fi.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_fr.qm b/deploy/data/linux/service/translations/qt_fr.qm
deleted file mode 100755
index 8353f0a9..00000000
Binary files a/deploy/data/linux/service/translations/qt_fr.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_gd.qm b/deploy/data/linux/service/translations/qt_gd.qm
deleted file mode 100755
index fd7eecdb..00000000
Binary files a/deploy/data/linux/service/translations/qt_gd.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_he.qm b/deploy/data/linux/service/translations/qt_he.qm
deleted file mode 100755
index e15d45e5..00000000
Binary files a/deploy/data/linux/service/translations/qt_he.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_hu.qm b/deploy/data/linux/service/translations/qt_hu.qm
deleted file mode 100755
index b51bd1a3..00000000
Binary files a/deploy/data/linux/service/translations/qt_hu.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_it.qm b/deploy/data/linux/service/translations/qt_it.qm
deleted file mode 100755
index 0d9d17d3..00000000
Binary files a/deploy/data/linux/service/translations/qt_it.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_ja.qm b/deploy/data/linux/service/translations/qt_ja.qm
deleted file mode 100755
index 74409b1a..00000000
Binary files a/deploy/data/linux/service/translations/qt_ja.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_ko.qm b/deploy/data/linux/service/translations/qt_ko.qm
deleted file mode 100755
index a46b8a0b..00000000
Binary files a/deploy/data/linux/service/translations/qt_ko.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_lv.qm b/deploy/data/linux/service/translations/qt_lv.qm
deleted file mode 100755
index c1dbfbd2..00000000
Binary files a/deploy/data/linux/service/translations/qt_lv.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_pl.qm b/deploy/data/linux/service/translations/qt_pl.qm
deleted file mode 100755
index 0909204f..00000000
Binary files a/deploy/data/linux/service/translations/qt_pl.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_ru.qm b/deploy/data/linux/service/translations/qt_ru.qm
deleted file mode 100755
index 791bfc41..00000000
Binary files a/deploy/data/linux/service/translations/qt_ru.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_sk.qm b/deploy/data/linux/service/translations/qt_sk.qm
deleted file mode 100755
index 215d2340..00000000
Binary files a/deploy/data/linux/service/translations/qt_sk.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_uk.qm b/deploy/data/linux/service/translations/qt_uk.qm
deleted file mode 100755
index 88c43620..00000000
Binary files a/deploy/data/linux/service/translations/qt_uk.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qt_zh_TW.qm b/deploy/data/linux/service/translations/qt_zh_TW.qm
deleted file mode 100755
index 051b516a..00000000
Binary files a/deploy/data/linux/service/translations/qt_zh_TW.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_ar.qm b/deploy/data/linux/service/translations/qtbase_ar.qm
deleted file mode 100755
index 32861b81..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_ar.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_bg.qm b/deploy/data/linux/service/translations/qtbase_bg.qm
deleted file mode 100755
index faeb1676..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_bg.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_ca.qm b/deploy/data/linux/service/translations/qtbase_ca.qm
deleted file mode 100755
index 20b751d4..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_ca.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_cs.qm b/deploy/data/linux/service/translations/qtbase_cs.qm
deleted file mode 100755
index 459ef266..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_cs.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_da.qm b/deploy/data/linux/service/translations/qtbase_da.qm
deleted file mode 100755
index 4ede24b4..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_da.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_de.qm b/deploy/data/linux/service/translations/qtbase_de.qm
deleted file mode 100755
index 4a4c988e..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_de.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_en.qm b/deploy/data/linux/service/translations/qtbase_en.qm
deleted file mode 100755
index be651eed..00000000
--- a/deploy/data/linux/service/translations/qtbase_en.qm
+++ /dev/null
@@ -1 +0,0 @@
-<¸dÊÍ!¿`¡½Ý
\ No newline at end of file
diff --git a/deploy/data/linux/service/translations/qtbase_es.qm b/deploy/data/linux/service/translations/qtbase_es.qm
deleted file mode 100755
index 1a131578..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_es.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_fi.qm b/deploy/data/linux/service/translations/qtbase_fi.qm
deleted file mode 100755
index 934aecdd..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_fi.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_fr.qm b/deploy/data/linux/service/translations/qtbase_fr.qm
deleted file mode 100755
index 009fb5a4..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_fr.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_gd.qm b/deploy/data/linux/service/translations/qtbase_gd.qm
deleted file mode 100755
index 3fe3841c..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_gd.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_he.qm b/deploy/data/linux/service/translations/qtbase_he.qm
deleted file mode 100755
index 95ed0c70..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_he.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_hu.qm b/deploy/data/linux/service/translations/qtbase_hu.qm
deleted file mode 100755
index e4920a63..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_hu.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_it.qm b/deploy/data/linux/service/translations/qtbase_it.qm
deleted file mode 100755
index a0205781..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_it.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_ja.qm b/deploy/data/linux/service/translations/qtbase_ja.qm
deleted file mode 100755
index 9cf6069e..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_ja.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_ko.qm b/deploy/data/linux/service/translations/qtbase_ko.qm
deleted file mode 100755
index 20e4661c..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_ko.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_lv.qm b/deploy/data/linux/service/translations/qtbase_lv.qm
deleted file mode 100755
index f88a761f..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_lv.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_pl.qm b/deploy/data/linux/service/translations/qtbase_pl.qm
deleted file mode 100755
index 28d4d8fe..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_pl.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_ru.qm b/deploy/data/linux/service/translations/qtbase_ru.qm
deleted file mode 100755
index c1a22864..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_ru.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_sk.qm b/deploy/data/linux/service/translations/qtbase_sk.qm
deleted file mode 100755
index 55a377e9..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_sk.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_tr.qm b/deploy/data/linux/service/translations/qtbase_tr.qm
deleted file mode 100755
index 3d289bb4..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_tr.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_uk.qm b/deploy/data/linux/service/translations/qtbase_uk.qm
deleted file mode 100755
index 21a30389..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_uk.qm and /dev/null differ
diff --git a/deploy/data/linux/service/translations/qtbase_zh_TW.qm b/deploy/data/linux/service/translations/qtbase_zh_TW.qm
deleted file mode 100755
index 62052980..00000000
Binary files a/deploy/data/linux/service/translations/qtbase_zh_TW.qm and /dev/null differ
diff --git a/deploy/data/macos/post_install.sh b/deploy/data/macos/post_install.sh
index 7ca643fc..acd3f93f 100755
--- a/deploy/data/macos/post_install.sh
+++ b/deploy/data/macos/post_install.sh
@@ -14,6 +14,9 @@ fi
tar xzf $APP_PATH/$APP_NAME.tar.gz -C $APP_PATH
rm -f $APP_PATH/$APP_NAME.tar.gz
+sudo chmod -R a-w $APP_PATH/
+sudo chown -R root $APP_PATH/
+sudo chgrp -R wheel $APP_PATH/
rm -rf $LOG_FOLDER
mkdir -p $LOG_FOLDER
diff --git a/deploy/install-qt.sh b/deploy/install-qt.sh
deleted file mode 100644
index f7c3d256..00000000
--- a/deploy/install-qt.sh
+++ /dev/null
@@ -1,335 +0,0 @@
-#!/usr/bin/env bash
-#############################################################################
-##
-## Copyright (C) 2019 Richard Weickelt.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qbs.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-set -eu
-
-function help() {
- cat <
- Root directory where to install the components.
- Maps to C:/Qt on Windows, /opt/Qt on Linux, /usr/local/Qt on Mac
- by default.
-
- -f, --force
- Force download and do not attempt to re-use an existing installation.
-
- --host
- The host operating system. Can be one of linux_x64, mac_x64,
- windows_x86. Auto-detected by default.
-
- --target
- The desired target platform. Can be one of desktop, android, ios.
- The default value is desktop.
-
- --toolchain
- The toolchain that has been used to build the binaries.
- Possible values depend on --host and --target, respectively:
-
- linux_x64
- android
- any, android_armv7, android_arm64_v8a
- desktop
- gcc_64 (default)
-
- mac_x64
- android
- any, android_armv7, android_arm64_v8a
- desktop
- clang_64 (default),
- ios
- ios
-
- windows_x86
- android
- any, android_armv7, android_arm64_v8a
- desktop
- win64_mingw73, win64_msvc2017_64 (default)
-
- --version
- The desired Qt version. Currently supported are all versions
- above 5.9.0.
-
-EOF
-}
-
-TARGET_PLATFORM=desktop
-COMPONENTS=
-VERSION=
-FORCE_DOWNLOAD=false
-MD5_TOOL=md5sum
-
-case "$OSTYPE" in
- *linux*)
- HOST_OS=linux_x64
- INSTALL_DIR=/opt/Qt
- TOOLCHAIN=gcc_64
- ;;
- *darwin*)
- HOST_OS=mac_x64
- INSTALL_DIR=/usr/local/Qt
- TOOLCHAIN=clang_64
- MD5_TOOL="md5 -r"
- ;;
- msys)
- HOST_OS=windows_x86
- INSTALL_DIR=/c/Qt
- TOOLCHAIN=win64_msvc2015_64
- ;;
- *)
- HOST_OS=
- INSTALL_DIR=
- ;;
-esac
-
-while [ $# -gt 0 ]; do
- case "$1" in
- --directory|-d)
- INSTALL_DIR="$2"
- shift
- ;;
- --force|-f)
- FORCE_DOWNLOAD=true
- ;;
- --host)
- HOST_OS="$2"
- shift
- ;;
- --target)
- TARGET_PLATFORM="$2"
- shift
- ;;
- --toolchain)
- TOOLCHAIN=$(echo $2 | tr '[A-Z]' '[a-z]')
- shift
- ;;
- --version)
- VERSION="$2"
- shift
- ;;
- --help|-h)
- help
- exit 0
- ;;
- *)
- COMPONENTS="${COMPONENTS} $1"
- ;;
- esac
- shift
-done
-
-if [ -z "${HOST_OS}" ]; then
- echo "No --host specified or auto-detection failed." >&2
- exit 1
-fi
-
-if [ -z "${INSTALL_DIR}" ]; then
- echo "No --directory specified or auto-detection failed." >&2
- exit 1
-fi
-
-if [ -z "${VERSION}" ]; then
- echo "No --version specified." >&2
- exit 1
-fi
-
-if [ -z "${COMPONENTS}" ]; then
- echo "No components specified." >&2
- exit 1
-fi
-
-case "$TARGET_PLATFORM" in
- android)
- ;;
- ios)
- ;;
- desktop)
- ;;
- *)
- echo "Error: TARGET_PLATFORM=${TARGET_PLATFORM} is not valid." >&2
- exit 1
- ;;
-esac
-
-HASH=$(echo "${OSTYPE} ${TARGET_PLATFORM} ${TOOLCHAIN} ${VERSION} ${INSTALL_DIR}" | ${MD5_TOOL} | head -c 16)
-HASH_FILEPATH="${INSTALL_DIR}/${HASH}.manifest"
-INSTALLATION_IS_VALID=false
-if ! ${FORCE_DOWNLOAD} && [ -f "${HASH_FILEPATH}" ]; then
- INSTALLATION_IS_VALID=true
- while read filepath; do
- if [ ! -e "${filepath}" ]; then
- INSTALLATION_IS_VALID=false
- break
- fi
- done <"${HASH_FILEPATH}"
-fi
-
-if ${INSTALLATION_IS_VALID}; then
- echo "Already installed. Skipping download." >&2
- exit 0
-fi
-
-DOWNLOAD_DIR=`mktemp -d 2>/dev/null || mktemp -d -t 'install-qt'`
-
-#
-# The repository structure is a mess. Try different URL variants
-#
-function compute_url(){
- local COMPONENT=$1
- local CURL="curl -s -L"
- local BASE_URL="http://download.qt.io/online/qtsdkrepository/${HOST_OS}/${TARGET_PLATFORM}"
- local ANDROID_ARCH=$(echo ${TOOLCHAIN##android_})
-
- if [[ "${COMPONENT}" =~ "qtcreator" ]]; then
-
- SHORT_VERSION=${VERSION%??}
- BASE_URL="http://download.qt.io/official_releases/qtcreator"
- REMOTE_PATH="${SHORT_VERSION}/${VERSION}/installer_source/${HOST_OS}/qtcreator.7z"
- echo "${BASE_URL}/${REMOTE_PATH}"
- return 0
-
- else
- REMOTE_BASES=(
- # New repository format (>=6.0.0)
- "qt6_${VERSION//./}/qt.qt6.${VERSION//./}.${TOOLCHAIN}"
- "qt6_${VERSION//./}_${ANDROID_ARCH}/qt.qt6.${VERSION//./}.${TOOLCHAIN}"
- "qt6_${VERSION//./}_${ANDROID_ARCH}/qt.qt6.${VERSION//./}.${COMPONENT}.${TOOLCHAIN}"
- # New repository format (>=5.9.6)
- "qt5_${VERSION//./}/qt.qt5.${VERSION//./}.${TOOLCHAIN}"
- "qt5_${VERSION//./}/qt.qt5.${VERSION//./}.${COMPONENT}.${TOOLCHAIN}"
- # Multi-abi Android since 5.14
- "qt5_${VERSION//./}/qt.qt5.${VERSION//./}.${TARGET_PLATFORM}"
- "qt5_${VERSION//./}/qt.qt5.${VERSION//./}.${COMPONENT}.${TARGET_PLATFORM}"
- # Older repository format (<5.9.0)
- "qt5_${VERSION//./}/qt.${VERSION//./}.${TOOLCHAIN}"
- "qt5_${VERSION//./}/qt.${VERSION//./}.${COMPONENT}.${TOOLCHAIN}"
- )
-
- for REMOTE_BASE in ${REMOTE_BASES[*]}; do
- REMOTE_PATH="$(${CURL} ${BASE_URL}/${REMOTE_BASE}/ | grep -o -E "[[:alnum:]_.\-]*7z" | grep "${COMPONENT}" | tail -1)"
- if [ ! -z "${REMOTE_PATH}" ]; then
- echo "${BASE_URL}/${REMOTE_BASE}/${REMOTE_PATH}"
- return 0
- fi
- done
- fi
-
- echo "Could not determine a remote URL for ${COMPONENT} with version ${VERSION}">&2
- exit 1
-}
-
-mkdir -p ${INSTALL_DIR}
-rm -f "${HASH_FILEPATH}"
-
-for COMPONENT in ${COMPONENTS}; do
-
- URL="$(compute_url ${COMPONENT})"
- echo "Downloading ${COMPONENT} ${URL}..." >&2
- curl --progress-bar -L -o ${DOWNLOAD_DIR}/package.7z ${URL} >&2
- 7z x -y -o${INSTALL_DIR} ${DOWNLOAD_DIR}/package.7z >/dev/null
- 7z l -ba -slt -y ${DOWNLOAD_DIR}/package.7z | tr '\\' '/' | sed -n -e "s|^Path\ =\ |${INSTALL_DIR}/|p" >> "${HASH_FILEPATH}"
- rm -f ${DOWNLOAD_DIR}/package.7z
-
- #
- # conf file is needed for qmake
- #
- if [ "${COMPONENT}" == "qtbase" ]; then
- if [[ "${TOOLCHAIN}" =~ "win64_mingw" ]]; then
- SUBDIR="${TOOLCHAIN/win64_/}_64"
- elif [[ "${TOOLCHAIN}" =~ "win32_mingw" ]]; then
- SUBDIR="${TOOLCHAIN/win32_/}_32"
- elif [[ "${TOOLCHAIN}" =~ "win64_msvc" ]]; then
- SUBDIR="${TOOLCHAIN/win64_/}"
- elif [[ "${TOOLCHAIN}" =~ "win32_msvc" ]]; then
- SUBDIR="${TOOLCHAIN/win32_/}"
- elif [[ "${TOOLCHAIN}" =~ "any" ]] && [[ "${TARGET_PLATFORM}" == "android" ]]; then
- SUBDIR="android"
- else
- SUBDIR="${TOOLCHAIN}"
- fi
-
- if [ "${TARGET_PLATFORM}" == "android" ] && [ ! "${QT_VERSION}" \< "6.0.0" ]; then
- CONF_FILE="${INSTALL_DIR}/${VERSION}/${SUBDIR}/bin/target_qt.conf"
- sed -i "s|target|../$TOOLCHAIN|g" "${CONF_FILE}"
- sed -i "/HostPrefix/ s|$|gcc_64|g" "${CONF_FILE}"
- ANDROID_QMAKE_FILE="${INSTALL_DIR}/${VERSION}/${SUBDIR}/bin/qmake"
- QMAKE_FILE="${INSTALL_DIR}/${VERSION}/gcc_64/bin/qmake"
- sed -i "s|\/home\/qt\/work\/install\/bin\/qmake|$QMAKE_FILE|g" "${ANDROID_QMAKE_FILE}"
- else
- CONF_FILE="${INSTALL_DIR}/${VERSION}/${SUBDIR}/bin/qt.conf"
- echo "[Paths]" > ${CONF_FILE}
- echo "Prefix = .." >> ${CONF_FILE}
- fi
-
- # Adjust the license to be able to run qmake
- # sed with -i requires intermediate file on Mac OS
- PRI_FILE="${INSTALL_DIR}/${VERSION}/${SUBDIR}/mkspecs/qconfig.pri"
- sed -i.bak 's/Enterprise/OpenSource/g' "${PRI_FILE}"
- sed -i.bak 's/licheck.*//g' "${PRI_FILE}"
- rm "${PRI_FILE}.bak"
-
- # Print the directory so that the caller can
- # adjust the PATH variable.
- echo $(dirname "${CONF_FILE}")
- elif [[ "${COMPONENT}" =~ "qtcreator" ]]; then
- if [ "${HOST_OS}" == "mac_x64" ]; then
- echo "${INSTALL_DIR}/Qt Creator.app/Contents/MacOS"
- else
- echo "${INSTALL_DIR}/bin"
- fi
- fi
-
-done
diff --git a/deploy/macos.sh b/deploy/macos.sh
deleted file mode 100755
index 5bb14f5d..00000000
--- a/deploy/macos.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/bash -ex
-
-
-QT_BIN_DIR='/Users/admin/Qt/5.14.2/clang_64/bin'
-QIF_BIN_DIR='/Users/admin/Qt/Tools/QtInstallerFramework/4.0/bin'
-
-APP_NAME=AmneziaVPN
-APP_FILENAME=$APP_NAME.app
-APP_DOMAIN=org.amneziavpn.package
-PLIST_NAME=$APP_NAME.plist
-
-LAUNCH_DIR=$(pwd)
-TOP_DIR=$LAUNCH_DIR/..
-RELEASE_DIR=$TOP_DIR/../$APP_NAME-build
-OUT_APP_DIR=$RELEASE_DIR/client/release
-BUNDLE_DIR=$OUT_APP_DIR/$APP_FILENAME
-DEPLOY_DATA_DIR=$LAUNCH_DIR/data/macos
-INSTALLER_DATA_DIR=$RELEASE_DIR/installer/packages/$APP_DOMAIN/data
-
-PRO_FILE_PATH=$TOP_DIR/$APP_NAME.pro
-QMAKE_STASH_FILE=$TOP_DIR/.qmake_stash
-TARGET_FILENAME=$TOP_DIR/$APP_NAME.dmg
-
-cleanBuild()
-{
- rm -rf $RELEASE_DIR
- rm -rf $QMAKE_STASH_FILE
-}
-
-
-cleanBuild
-
-cd $TOP_DIR
-$QT_BIN_DIR/qmake $PRO_FILE_PATH 'CONFIG+=release CONFIG+=x86_64'
-make -j `sysctl -n hw.ncpu`
-
-$QT_BIN_DIR/macdeployqt $OUT_APP_DIR/$APP_FILENAME -always-overwrite
-cp -av $RELEASE_DIR/server/release/$APP_NAME-service.app/Contents/macOS/$APP_NAME-service $BUNDLE_DIR/Contents/macOS
-cp -Rv $LAUNCH_DIR/data/macos/* $BUNDLE_DIR/Contents/macOS
-
-mkdir -p $INSTALLER_DATA_DIR
-cp -av $LAUNCH_DIR/installer $RELEASE_DIR
-cp -av $DEPLOY_DATA_DIR/post_install.sh $INSTALLER_DATA_DIR/post_install.sh
-cp -av $DEPLOY_DATA_DIR/post_uninstall.sh $INSTALLER_DATA_DIR/post_uninstall.sh
-cp -av $DEPLOY_DATA_DIR/$PLIST_NAME $INSTALLER_DATA_DIR/$PLIST_NAME
-
-rm -f $BUNDLE_DIR/Contents/macOS/post_install.sh $BUNDLE_DIR/Contents/macOS/post_uninstall.sh
-chmod a+x $INSTALLER_DATA_DIR/post_install.sh $INSTALLER_DATA_DIR/post_uninstall.sh
-
-cd $BUNDLE_DIR
-tar czf $INSTALLER_DATA_DIR/$APP_NAME.tar.gz ./
-
-cd $RELEASE_DIR/installer
-$QIF_BIN_DIR/binarycreator --offline-only -v -c config/macos.xml -p packages -f $APP_NAME
-hdiutil create -volname $APP_NAME -srcfolder $APP_NAME.app -ov -format UDZO $TARGET_FILENAME
-
-cleanBuild
-
-cd $LAUNCH_DIR
-
-echo "Finished, see $APP_NAME.dmg in '$TOP_DIR'"