Compare commits

..

136 Commits

Author SHA1 Message Date
r4sas 06f337f717 2.54.0
Android CI / build (push) Has been cancelled
Android CI / build-binary (push) Has been cancelled
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-10-06 21:16:58 +00:00
orignal cb322c6467 update i2pd
Android CI / build (push) Has been cancelled
Android CI / build-binary (push) Has been cancelled
2024-08-30 12:41:04 -04:00
orignal cae2700b20 removed dependency from boost::date_time and boost::filesystem 2024-08-30 12:33:21 -04:00
r4sas 9203ba68a7 update boost submodule
Android CI / build (push) Has been cancelled
Android CI / build-binary (push) Has been cancelled
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-08-05 20:29:18 +00:00
r4sas 440b565c4b 2.53.1
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-08-05 20:10:55 +00:00
r4sas ed54b2692b update README build section
Android CI / build (push) Has been cancelled
Android CI / build-binary (push) Has been cancelled
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-07-29 23:44:15 +00:00
r4sas 503f8a003e revert switching from JNI to binary
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-07-29 23:26:17 +00:00
nonlin-lin-chaos-order-etc-etal 8347c04fb1 Remove copying of subscriptions.txt. Fix #74
Android CI / build (push) Has been cancelled
Android CI / build-binary (push) Has been cancelled
2024-07-25 17:20:34 +03:00
r4sas c912f81429 2.53.0
Android CI / build (push) Has been cancelled
Android CI / build-binary (push) Has been cancelled
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-07-23 19:12:25 +00:00
r4sas 27cdad53ba update README, add libraries rebuild skip flag
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-07-23 19:02:05 +00:00
r4sas 734693ba94 move submodules, delete jni, remove ndkBuild from gradle
Android CI / build (push) Has been cancelled
Android CI / build-binary (push) Has been cancelled
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-07-21 20:15:07 +00:00
r4sas 031c536945 [chore] update i2pd to 2.53.0, change build script
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-07-21 19:23:54 +00:00
nonlin-lin-chaos-order-etc-etal 988940f50a Try to fix #50 (#76)
* Fix foreground notification
* Trying to fix app quit
* Remove unsupported UI items
* Remove misleading exceptions
* Set Unix exec bit on build scripts
* Revamp processAssets point to be launched
* Corrected logic of daemon status events
* Fix double I2PActivity.onCreate call hangup
* Fix exception processing @ processAssets
2024-07-21 20:44:19 +03:00
r4sas 8dba5a00e5 [i18n] pull updates
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-05-13 21:19:33 +00:00
r4sas c74235a279 2.52.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-05-13 21:13:50 +00:00
r4sas ca3ef80981 [gha] update workflow
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-04-07 09:17:05 +00:00
r4sas 8f56a56927 2.51.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2024-04-07 08:52:44 +00:00
wipedlifepotato cf5fe2e948 Perferences (#66) 2024-04-07 11:34:30 +03:00
R4SAS 938a85bc3c 2.50.2
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-01-11 05:19:41 +00:00
R4SAS 226c7e20e3 2.50.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-12-18 18:41:08 +00:00
r4sas 57f255cde2 2.49.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2023-09-18 18:34:33 +00:00
r4sas f3d71465d7 2.48.0.1
Signed-off-by: r4sas <r4sas@i2pmail.org>
2023-06-17 19:41:23 +00:00
r4sas 0ec2f1ae51 update OpenSSL to 1.1.1u
Signed-off-by: r4sas <r4sas@i2pmail.org>
2023-06-17 19:07:48 +00:00
R4SAS 96e217c1ee 2.48.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-06-12 17:15:24 +03:00
R4SAS e2f7391c5a i18n: update translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-06-12 17:13:03 +03:00
R4SAS 64696efbb6 ci: update checkout action
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-06-03 18:09:40 +03:00
R4SAS 94b784564e ci: fix sdkmanager command
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-06-03 17:46:06 +03:00
R4SAS 65b615ad45 ci: use preisntalled jdk
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-06-03 17:41:46 +03:00
R4SAS 5d1fa20733 ci: update workflow
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-06-03 17:38:19 +03:00
R4SAS 8f4b462a83 trunk build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-06-03 16:48:02 +03:00
r4sas be0d652875 2.47.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2023-03-12 01:22:17 +00:00
R4SAS c7bdaac061 2.46.1
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-02-24 12:35:50 +00:00
R4SAS 3b7f9b511f [i18n] add/update fastlane descriptions
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-02-16 14:57:45 +00:00
R4SAS 9bf0a7b787 2.46.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-02-16 14:45:21 +00:00
R4SAS 2d2662fe63 [i18n] update, add Portuguese
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-02-16 14:44:28 +00:00
r4sas 97abcc661f 2.45.1
Signed-off-by: r4sas <r4sas@i2pmail.org>
2023-01-11 22:59:51 +00:00
R4SAS 8a791c45c2 [readme] add release singing fingerprint info
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-01-08 21:22:49 +03:00
R4SAS 4334fd4bdb 2.45.0.2
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-01-08 20:16:24 +03:00
R4SAS f0132e9847 fix permissions asker activity start on some android 11+ devices
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-01-08 20:14:17 +03:00
R4SAS 06b567d910 2.45.0.1
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-01-07 15:01:54 +00:00
R4SAS dd17608af9 fix permissions API level
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-01-07 17:38:18 +03:00
R4SAS 2e10678278 add MANAGE_EXTERNAL_STORAGE permission for API 30+
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2023-01-07 17:33:10 +03:00
r4sas 8132dbde08 2.45.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2023-01-04 19:29:28 +00:00
r4sas f2ee4e5ea0 [i18n] add Czech translation
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-12-18 22:04:44 +00:00
r4sas 57fef00c48 trunk build, ndk r23c, target 32
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-12-18 21:26:14 +00:00
r4sas b003a07f1b 2.44.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-11-20 19:18:42 +00:00
R4SAS 3b328d7f7c [i18n] pull translation updates
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-11-20 08:20:48 +03:00
R4SAS f2b7ae1ada [jni] disable stack protector
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-11-20 08:20:47 +03:00
R4SAS fce1dc98d0 [i18n] pull translation updates
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-11-20 08:20:46 +03:00
r4sas 5d86c53204 fastlane: add icon
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-11-03 19:26:21 +00:00
r4sas a88037692f update submodules
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-11-03 19:25:54 +00:00
R4SAS 67a98991d0 fix binary build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-09-18 11:45:05 +03:00
R4SAS a3cddc954d fix typo
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-09-18 11:11:39 +03:00
R4SAS a36131b1bc [i2pd] update to trunk, fix build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-09-18 10:57:27 +03:00
R4SAS e0a2d6f015 [i18n] add translations from crowdin
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-09-04 22:39:26 +03:00
R4SAS a411f9132f [i18n] add Ukrainian translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-08-24 11:29:03 +03:00
R4SAS e2dfde17bf 2.43.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-08-21 23:13:06 +03:00
R4SAS 447407483d switch to i2pd 2.43.0, pull translations updates
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-08-21 23:07:44 +03:00
r4sas e925b58239 [i2pd] update to trunk
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-08-19 19:32:10 +00:00
r4sas 1a4e0c02de [i2pd] update to trunk
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-08-14 10:36:37 +00:00
r4sas b0f8bf87ba [i18n] fix translation directory name
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-08-09 19:06:18 +00:00
r4sas 99fc0992f2 [i18n] add Simplified Chinese translation
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-08-09 18:21:23 +00:00
r4sas e27534dbbe [i2pd] enable ssu2 by default and disable ssu
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-08-09 18:16:51 +00:00
r4sas 8abfd1f5fb [i2pd] update to trunk
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-08-09 18:14:58 +00:00
R4SAS 6c162bc689 [i2pd] update to trunk
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-07-10 01:27:39 +03:00
R4SAS a61012f72d switch to openssl 1.1.1q
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-07-10 01:25:34 +03:00
R4SAS 2bdb97db0f remove unused READ_PHONE_STATE permission
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-07-10 01:21:32 +03:00
r4sas d72e3aeea6 2.42.1
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-05-25 16:31:56 +00:00
R4SAS a82a4cc211 2.42.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-22 21:21:22 +03:00
R4SAS 063173e546 [boost] update paths for binary build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-22 14:04:09 +03:00
R4SAS cc14c7e6c2 [boost] do not make copy, use builder output directory
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-22 13:41:42 +03:00
R4SAS 61846ef57b update boost-for-android submodule
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-19 13:17:15 +03:00
R4SAS 063b416bf1 update readme
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-19 13:08:36 +03:00
R4SAS 470cc90b6a Make possible to build on Windows with MSYS2
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-19 13:02:13 +03:00
r4sas b0204a59ea rework libraries building scripts, output paths, remove rename usage
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-05-18 04:20:07 +00:00
R4SAS ef5f7a1d95 switch openssl to 1.1.1o
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-17 21:29:00 +03:00
R4SAS 82897ccb93 bump i2pd
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-15 11:50:57 +03:00
R4SAS 97f0490fdf pull french translation from crowdin
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-15 11:22:48 +03:00
R4SAS d1c6ecb850 test build
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-05-15 10:46:31 +03:00
R4SAS 2a4fa8c036 fix script paths
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-29 15:29:27 +03:00
R4SAS 8debf9fc73 use bash in script
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-29 14:44:30 +03:00
R4SAS 8e2e80ea5d [gha] build binaries package
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-29 13:04:51 +03:00
R4SAS 3dbb4e9759 binary pack: fix paths
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-29 12:57:20 +03:00
R4SAS 0ead601868 add binary pack script
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-29 12:55:28 +03:00
R4SAS 9b4ee8447a update README
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-13 13:47:35 +03:00
R4SAS 7611296f63 update changelog
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-13 12:54:00 +03:00
R4SAS b63dbb5223 update i2pd assets
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-13 12:50:31 +03:00
R4SAS ed985c6082 add fastlane uzbek translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-13 03:26:50 +03:00
R4SAS 8bdb77b4cf add uzbek translation
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-13 03:00:30 +03:00
R4SAS d57a241d6e move log messages, add 2.41.0.1 changelog
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-09 21:06:24 +03:00
R4SAS ae3016e4b7 change version code, log levels, stopping message
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-09 20:45:09 +03:00
R4SAS 4be1d99e8f set datadir in daemon before init
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-09 20:11:16 +03:00
R4SAS 578a97f549 fix JNI string release before executing C++ functions, update gradle to 7.1.3
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-09 01:11:53 +03:00
R4SAS 21a7200b34 [gha] use ndk 21.4.7075529
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-06 22:29:29 +03:00
R4SAS 84636050c6 update i2pd to trunk
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-06 22:25:26 +03:00
R4SAS f363c10040 fix assets unpack when not required
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-04-06 22:24:42 +03:00
R4SAS 67fb27a6ce remove unused settings activity code, fix calling on 4.4
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-03-31 01:49:20 +03:00
R4SAS c62429513f add minimal preferences layout
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-03-30 20:50:34 +03:00
R4SAS 1b09291b84 [gha] upload artifacts to separate archives
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-03-30 04:52:54 +03:00
R4SAS c74b3f7ff0 [gha] use jdk 1.11
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-03-30 04:49:52 +03:00
R4SAS 75d444f374 rework main ui, change theme, remove unused code
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-03-30 03:58:16 +03:00
r4sas ba6fb5bbb9 switch boost to 1.74.0, ndk to 21.4.7075529
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-03-29 20:28:19 +00:00
Oğuz Ersen 4c0cc3f637 add turkish translation 2022-02-27 18:31:17 +03:00
r4sas c345816030 [gha] add binary build
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-02-21 20:19:55 +00:00
r4sas 4ee4f94c18 2.41.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-02-20 14:49:02 +00:00
R4SAS b4fbfa782e [i2pd] update to trunk
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-02-16 16:28:36 +03:00
R4SAS 328502fd19 add pre-2.41.0 changelog
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-02-16 16:24:19 +03:00
R4SAS 45fd6b619c [i2pd] update to trunk
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-02-16 16:24:19 +03:00
r4sas e8ca0c20c5 fix typo
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-02-08 19:47:55 +00:00
r4sas 245a8c09b2 readme: cmake 3.18.1
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-02-08 19:31:06 +00:00
r4sas 0191d6a228 update libraries, add binary build files
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-02-08 19:29:39 +00:00
R4SAS 1a686fe979 update to trunk, enable stack-protector
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-02-07 23:05:22 +03:00
Poussinou 8fa3121a90 Update README.md (#35) 2022-02-03 22:39:56 +03:00
R4SAS 92324f84b0 [fastlane] fix typo
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-02-02 21:38:57 +03:00
R4SAS d14589f944 test logo usage with mipmap and pre-rendered icon
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-01-30 02:40:31 +03:00
R4SAS 8938481432 test logo usage with mipmap and pre-rendered icon
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-01-30 01:54:44 +03:00
R4SAS 140161d453 Update README.md 2022-01-29 17:51:20 +03:00
r4sas 24f9be058a switch i2pd to trunk
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-01-28 12:28:50 +00:00
r4sas 98f3cae415 forward openssl build log to file
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-01-28 11:40:39 +00:00
r4sas cb8095f939 suppress deprecation warnings
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-01-28 11:10:34 +00:00
r4sas ec003b9971 revert target to 29
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-01-28 11:02:34 +00:00
r4sas 3513053d37 update gradlew, gh action
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-01-28 10:41:57 +00:00
r4sas 5b2d7f39ae modify build flags to reduce output
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-01-28 10:08:54 +00:00
r4sas 8b91fc0198 [gha] switch to r23b
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-01-28 09:37:54 +00:00
r4sas d6bfbc954d switch target to 31, boost to 1.78.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2022-01-28 09:26:31 +00:00
R4SAS 292a67d1be [fastlane] add russian description
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-01-28 05:13:28 +03:00
R4SAS c85c4fb6c1 [jni] switch to build from sources (#32) 2022-01-27 17:39:30 +03:00
r4sas d9bbe52238 2.40.0
Signed-off-by: r4sas <r4sas@i2pmail.org>
2021-11-28 03:00:39 +00:00
R4SAS de53cd0e75 update addressbook
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2021-11-28 04:51:58 +03:00
R4SAS 921054e204 2.39.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2021-08-23 18:38:17 +03:00
r4sas e9597df4e7 [jni] update openssl to 1.1.1k
Signed-off-by: r4sas <r4sas@i2pmail.org>
2021-05-31 18:08:02 +00:00
R4SAS eef59d9052 add i2pd multilingual support
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2021-05-28 00:25:35 +03:00
nonlin-lin-chaos-order-etc-etal 80830ac712 Update I2PDActivity.java (#24) 2021-05-21 11:08:30 +03:00
R4SAS 3a91d05c8c 2.38.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2021-05-17 17:37:05 +03:00
R4SAS 24649306c1 upload license 2021-04-25 19:17:35 +03:00
R4SAS 8dfa0e5bcb fix start on API lesser 21
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2021-03-17 12:40:52 +03:00
147 changed files with 3400 additions and 2551 deletions
+52 -14
View File
@@ -6,25 +6,63 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Setup JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Setup Android SDK
uses: maxim-lobanov/setup-android-tools@v1
with:
packages: |
build-tools;28.0.3
platforms;android-29
ndk;20.0.5594570
cache: true
- name: Install GNU C++ compiler
run: |
sudo apt-get update
sudo apt-get install -y g++
- name: Switch to JDK 11
run: export JAVA_HOME=$JAVA_HOME_11_X64
- name: Install required Android SDK packages
run: $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "cmake;3.22.1" "ndk;23.2.8568313"
- name: Build required modules
run: |
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.2.8568313
pushd binary/jni
./build.sh
popd
- name: Build with Gradle
run: ./gradlew --no-daemon assembleDebug
- name: Upload artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: android-apks
path: app/build/outputs/apk/debug/*.apk
build-binary:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Install GNU C++ compiler
run: |
sudo apt-get update
sudo apt-get install -y g++
- name: Switch to JDK 11
run: export JAVA_HOME=$JAVA_HOME_11_X64
- name: Install required Android SDK packages
run: $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "cmake;3.22.1" "ndk;23.2.8568313"
- name: Build binary with NDK
run: |
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.2.8568313
pushd binary/jni
./build.sh -b
popd
- name: Create package with built binaries
run: |
pushd contrib/binary_pack
./build-archive
popd
- name: Upload binaries archive
uses: actions/upload-artifact@v4
with:
name: android-binaries
path: binary/libs/*
- name: Upload binaries package
uses: actions/upload-artifact@v4
with:
name: android-binaries-pack
path: contrib/binary_pack/i2pd_*_android_binary.zip
-1
View File
@@ -10,7 +10,6 @@ obj
.externalNativeBuild
ant.properties
local.properties
build.sh
android.iml
build
*.iml
+12 -13
View File
@@ -1,17 +1,16 @@
[submodule "android-ifaddrs"]
path = binary/jni/android-ifaddrs
url = https://github.com/PurpleI2P/android-ifaddrs.git
[submodule "i2pd"]
path = app/jni/i2pd
path = binary/jni/i2pd
url = https://github.com/PurpleI2P/i2pd.git
branch = openssl
[submodule "boost"]
path = app/jni/boost
url = https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
branch = boost-1_72_0
[submodule "openssl"]
path = app/jni/openssl
url = https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
[submodule "miniupnp"]
path = app/jni/miniupnp
url = https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
[submodule "android-ifaddrs"]
path = app/jni/android-ifaddrs
url = https://github.com/PurpleI2P/android-ifaddrs.git
path = binary/jni/miniupnp
url = https://github.com/miniupnp/miniupnp.git
[submodule "openssl"]
path = binary/jni/openssl
url = https://github.com/openssl/openssl.git
[submodule "boost"]
path = binary/jni/boost
url = https://github.com/moritz-wundke/Boost-for-Android.git
+27
View File
@@ -0,0 +1,27 @@
Copyright (c) 2013-2021, The PurpleI2P Project
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of
conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used
to endorse or promote products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+70 -7
View File
@@ -1,19 +1,82 @@
[![GitHub release](https://img.shields.io/github/release/PurpleI2P/i2pd-android.svg?label=latest%20release)](https://github.com/PurpleI2P/i2pd-android/releases/latest)
[![License](https://img.shields.io/github/license/PurpleI2P/i2pd-android.svg)](https://github.com/PurpleI2P/i2pd-android/blob/openssl/LICENSE)
[![Android CI](https://github.com/PurpleI2P/i2pd-android/actions/workflows/android.yml/badge.svg)](https://github.com/PurpleI2P/i2pd-android/actions/workflows/android.yml)
# i2pd android
### Install OpenJDK, gradle 5.1+ (6.8.3 has been tested and is working ok), download Android SDK and NDK r21e
This repository contains Android application sources of i2pd
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
alt="Get it on F-Droid"
height="80">](https://f-droid.org/packages/org.purplei2p.i2pd/)
## How to build
### Install g++, OpenJDK 11+, gradle 5.1+
```bash
sudo apt-get install g++ openjdk-11-jdk gradle
```
If your system provides gradle with version < 5.1, download it from gradle homepage:
https://gradle.org/install/
### Download and prepare Android SDK for building
Android SDK Available here:
https://developer.android.com/studio#downloads
https://developer.android.com/ndk/
Download Android SDK, unpack it to temporary directory `/tmp/anrdoid-sdk` and install it (in `/opt/android-sdk` for example) with required packages
```bash
mkdir /tmp/android-sdk
cd /tmp/android-sdk
wget https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
unzip commandlinetools-linux-8092744_latest.zip
# install required tools
./cmdline-tools/bin/sdkmanager --sdk_root=/opt/android-sdk "build-tools;33.0.1" "cmake;3.22.1" "ndk;23.2.8568313"
```
### Clone repository with submodules
git clone --recurse-submodules https://github.com/PurpleI2P/i2pd-android.git
```bash
git clone --recurse-submodules https://github.com/PurpleI2P/i2pd-android.git
cd i2pd-android
```
### Compile application
export ANDROID_SDK_ROOT=/opt/android-sdk
export ANDROID_NDK_HOME=/opt/android-ndk-r21e
gradle clean assembleDebug
```bash
# if you are not using Java 11 by default:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export ANDROID_HOME=/opt/android-sdk
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.2.8568313
pushd binary/jni
./build.sh -d
popd
gradle clean assembleDebug
```
You will find APKs in `app/build/outputs/apk`
### Building on Windows
For building on Windows you must use MSYS2 with `mingw64` or `ucrt64` shell and preinstalled `gcc` ( package `mingw-w64-x86_64-gcc` or `mingw-w64-ucrt-x86_64-gcc`).
Java 11 can be downloaded from [jdk.java.com](https://jdk.java.net/java-se-ri/11)
Download Android SDK command line tools for Windows, unpack and install it replacing `--sdk_root=` path.
`ANDROID_HOME` variable must point to SDK using linux-way path, like `/c/dev/android-sdk` when SDK installed to `C:\dev\android-sdk`.
Gradle can be called with `./gradlew` command inside project root, or you can install it using `pacman` and call `gradle` like on linux.
## Release signing
Current releases signed with certificate fingerprint (SHA-256):
`FC:C3:C7:34:9E:22:6A:77:B3:70:46:BB:00:FD:04:BB:A5:30:32:21:01:F8:62:F3:6D:8C:3D:B0:EB:B6:35:20`
+28 -13
View File
@@ -3,22 +3,36 @@ plugins {
}
dependencies {
implementation 'androidx.core:core:1.3.2'
implementation 'androidx.core:core:1.9.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
// implementation 'org.ini4j:ini4j:0.5.4'
implementation 'org.apache.commons:commons-configuration2:2.9.0'
}
configurations {
all{
//exclude group: 'commons-logging', module: 'commons-logging'
//exclude group: 'org.apache.httpcomponents'
exclude module: 'httpclient'
}
}
android {
compileSdkVersion 29
lintOptions {
// Not so a good way
disable 'DuplicatePlatformClasses'
}
compileSdkVersion 33
defaultConfig {
applicationId "org.purplei2p.i2pd"
targetSdkVersion 29
minSdkVersion 14
versionCode 23700
versionName "2.37.0"
setProperty("archivesBaseName", archivesBaseName + "-" + versionName)
vectorDrawables.useSupportLibrary = true
targetSdkVersion 33
// TODO: 24?
minSdkVersion 16
versionCode 2540000
versionName "2.54.0"
archivesBaseName += "-$versionName"
ndkVersion "23.2.8568313"
ndk {
abiFilters "armeabi-v7a"
@@ -29,8 +43,8 @@ android {
externalNativeBuild {
ndkBuild {
arguments "NDK_MODULE_PATH:=${rootProject.projectDir}/app/jni"
arguments "-j3"
arguments "NDK_MODULE_PATH:=${rootProject.projectDir}/binary/jni"
arguments "-j${Runtime.getRuntime().availableProcessors()}"
}
}
}
@@ -71,9 +85,10 @@ android {
}
compileOptions {
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
namespace 'org.purplei2p.i2pd'
}
ext.abiCodes = ['armeabi-v7a': 1, 'x86': 2, 'arm64-v8a': 3, 'x86_64': 4]
+16 -29
View File
@@ -2,11 +2,9 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := i2pd
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(DAEMON_SRC_PATH)
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(LANG_SRC_PATH) $(DAEMON_SRC_PATH)
LOCAL_STATIC_LIBRARIES := \
boost_system \
boost_date_time \
boost_filesystem \
boost_program_options \
crypto \
ssl \
@@ -16,62 +14,51 @@ LOCAL_LDLIBS := -lz
LOCAL_SRC_FILES := \
DaemonAndroid.cpp \
i2pd_android.cpp \
$(IFADDRS_PATH)/ifaddrs.c \
$(IFADDRS_PATH)/ifaddrs.cpp \
$(IFADDRS_PATH)/bionic_netlink.cpp \
$(wildcard $(LIB_SRC_PATH)/*.cpp) \
$(wildcard $(LIB_CLIENT_SRC_PATH)/*.cpp) \
$(wildcard $(LANG_SRC_PATH)/*.cpp) \
$(DAEMON_SRC_PATH)/Daemon.cpp \
$(DAEMON_SRC_PATH)/UPnP.cpp \
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
$(DAEMON_SRC_PATH)/I2PControl.cpp
$(DAEMON_SRC_PATH)/I2PControl.cpp \
$(DAEMON_SRC_PATH)/I2PControlHandlers.cpp
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_system
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_date_time
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_filesystem
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_program_options
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1d-clang/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1d-clang/include
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1d-clang/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1d-clang/include
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
LOCAL_STATIC_LIBRARIES := crypto
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := miniupnpc
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc-2.1/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc-2.1/include
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
+7 -6
View File
@@ -4,19 +4,20 @@ APP_STL := c++_static
# Enable c++17 extensions in source code
APP_CPPFLAGS += -std=c++17 -fexceptions -frtti
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP -Wno-deprecated-declarations
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
APP_CPPFLAGS += -DANDROID_ARM7A
endif
BOOST_PATH = $(NDK_MODULE_PATH)/boost
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
MINIUPNP_PATH = $(NDK_MODULE_PATH)/miniupnp
IFADDRS_PATH = $(NDK_MODULE_PATH)/android-ifaddrs
BOOST_PATH = $(NDK_MODULE_PATH)/boost
MINIUPNP_PATH = $(NDK_MODULE_PATH)/miniupnp
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
# don't change me
I2PD_SRC_PATH = $(NDK_MODULE_PATH)/i2pd
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd
LIB_CLIENT_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd_client
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon
LANG_SRC_PATH = $(I2PD_SRC_PATH)/i18n
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon
+33 -123
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -16,139 +16,49 @@
#include "FS.h"
#include "DaemonAndroid.h"
#include "Daemon.h"
#include "I18N.h"
namespace i2p
{
namespace android
{
/* Worker::Worker (DaemonAndroidImpl& daemon):
m_Daemon (daemon)
{
}
void Worker::startDaemon()
{
Log.d(TAG"Performing daemon start...");
m_Daemon.start();
Log.d(TAG"Daemon started.");
emit resultReady();
}
void Worker::restartDaemon()
{
Log.d(TAG"Performing daemon restart...");
m_Daemon.restart();
Log.d(TAG"Daemon restarted.");
emit resultReady();
}
void Worker::stopDaemon() {
Log.d(TAG"Performing daemon stop...");
m_Daemon.stop();
Log.d(TAG"Daemon stopped.");
emit resultReady();
}
Controller::Controller(DaemonAndroidImpl& daemon):
m_Daemon (daemon)
{
Worker *worker = new Worker (m_Daemon);
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &Controller::startDaemon, worker, &Worker::startDaemon);
connect(this, &Controller::stopDaemon, worker, &Worker::stopDaemon);
connect(this, &Controller::restartDaemon, worker, &Worker::restartDaemon);
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
workerThread.start();
}
Controller::~Controller()
{
Log.d(TAG"Closing and waiting for daemon worker thread...");
workerThread.quit();
workerThread.wait();
Log.d(TAG"Waiting for daemon worker thread finished.");
if(m_Daemon.isRunning())
{
Log.d(TAG"Stopping the daemon...");
m_Daemon.stop();
Log.d(TAG"Stopped the daemon.");
}
}
*/
std::string dataDir = "";
std::string language = "";
DaemonAndroidImpl::DaemonAndroidImpl ()
//:
/*mutex(nullptr), */
//m_IsRunning(false),
//m_RunningChangedCallback(nullptr)
{
}
DaemonAndroidImpl::~DaemonAndroidImpl ()
{
//delete mutex;
}
bool DaemonAndroidImpl::init(int argc, char* argv[])
{
//mutex=new QMutex(QMutex::Recursive);
//setRunningCallback(0);
//m_IsRunning=false;
// make sure assets are ready before proceed
i2p::fs::DetectDataDir(dataDir, false);
int numAttempts = 0;
do
{
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
numAttempts++;
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
}
while (numAttempts <= 10); // 10 seconds max
return Daemon.init(argc,argv);
return Daemon.init(argc, argv);
}
void DaemonAndroidImpl::start()
{
//QMutexLocker locker(mutex);
//setRunning(true);
Daemon.start();
}
void DaemonAndroidImpl::stop()
{
//QMutexLocker locker(mutex);
Daemon.stop();
//setRunning(false);
}
void DaemonAndroidImpl::restart()
{
//QMutexLocker locker(mutex);
stop();
start();
}
/*
void DaemonAndroidImpl::setRunningCallback(runningChangedCallback cb)
void DaemonAndroidImpl::setDataDir(std::string path)
{
m_RunningChangedCallback = cb;
Daemon.setDataDir(path);
}
bool DaemonAndroidImpl::isRunning()
{
return m_IsRunning;
}
void DaemonAndroidImpl::setRunning(bool newValue)
{
bool oldValue = m_IsRunning;
if(oldValue!=newValue)
{
m_IsRunning = newValue;
if(m_RunningChangedCallback)
m_RunningChangedCallback();
}
}
*/
static DaemonAndroidImpl daemon;
static char* argv[1]={strdup("tmp")};
/**
@@ -159,36 +69,32 @@ namespace android
{
try
{
//int result;
{
//Log.d(TAG"Initialising the daemon...");
bool daemonInitSuccess = daemon.init(1,argv);
// make sure assets are ready before proceed
i2p::fs::DetectDataDir(dataDir, false);
int numAttempts = 0;
do
{
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
numAttempts++;
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
}
while (numAttempts <= 10); // 10 seconds max
// Set application directory
daemon.setDataDir(dataDir);
bool daemonInitSuccess = daemon.init(1, argv);
if(!daemonInitSuccess)
{
//QMessageBox::critical(0, "Error", "Daemon init failed");
return "Daemon init failed";
}
//Log.d(TAG"Initialised, creating the main window...");
//MainWindow w;
//Log.d(TAG"Before main window.show()...");
//w.show ();
{
//i2p::qt::Controller daemonQtController(daemon);
//Log.d(TAG"Starting the daemon...");
//emit daemonQtController.startDaemon();
//daemon.start ();
//Log.d(TAG"Starting GUI event loop...");
//result = app.exec();
//daemon.stop ();
daemon.start();
}
// Set webconsole language from application
i2p::i18n::SetLanguage(language);
daemon.start();
}
//QMessageBox::information(&w, "Debug", "demon stopped");
//Log.d(TAG"Exiting the application");
//return result;
}
catch (boost::exception& ex)
{
@@ -219,10 +125,14 @@ namespace android
dataDir = jdataDir;
}
std::string
GetDataDir(void)
std::string GetDataDir(void)
{
return dataDir;
}
}
void SetLanguage(std::string jlanguage)
{
language = jlanguage;
}
}
}
+13 -59
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -22,77 +22,31 @@ namespace android
DaemonAndroidImpl ();
~DaemonAndroidImpl ();
//typedef void (*runningChangedCallback)();
/**
* @return success
*/
bool init(int argc, char* argv[]);
void start();
void stop();
void restart();
//void setRunningCallback(runningChangedCallback cb);
//bool isRunning();
private:
//void setRunning(bool running);
private:
//QMutex* mutex;
//bool m_IsRunning;
//runningChangedCallback m_RunningChangedCallback;
bool init (int argc, char* argv[]);
void start ();
void stop ();
void restart ();
void setDataDir (std::string path);
};
/**
* returns "ok" if daemon init failed
* returns errinfo if daemon initialized and started okay
*/
std::string start();
std::string start ();
// stops the daemon
void stop();
void stop ();
// set datadir received from jni
void SetDataDir(std::string jdataDir);
void SetDataDir (std::string jdataDir);
// get datadir
std::string GetDataDir(void);
/*
class Worker : public QObject
{
Q_OBJECT
public:
Worker (DaemonAndroidImpl& daemon);
private:
DaemonAndroidImpl& m_Daemon;
public slots:
void startDaemon();
void restartDaemon();
void stopDaemon();
signals:
void resultReady();
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller(DaemonAndroidImpl& daemon);
~Controller();
private:
DaemonAndroidImpl& m_Daemon;
public slots:
void handleResults(){}
signals:
void startDaemon();
void stopDaemon();
void restartDaemon();
};
*/
std::string GetDataDir (void);
// set webconsole language
void SetLanguage (std::string jlanguage);
}
}
Submodule app/jni/boost deleted from 93de5720b8
Submodule app/jni/i2pd deleted from 436a3e7f54
+37 -23
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -56,9 +56,10 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
(JNIEnv *env, jclass clazz) {
return env->NewStringUTF(i2p::android::start().c_str());
}
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
(JNIEnv *env, jclass clazz) {
return env->NewStringUTF( i2p::android::GetDataDir().c_str() );
return env->NewStringUTF(i2p::android::GetDataDir().c_str());
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
@@ -89,31 +90,12 @@ JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setDataDir
(JNIEnv *env, jclass clazz, jstring jdataDir) {
/*
// Method 1: convert UTF-16 jstring to std::string (https://stackoverflow.com/a/41820336)
const jclass stringClass = env->GetObjectClass(jdataDir);
const jmethodID getBytes = env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B");
const jbyteArray stringJbytes = (jbyteArray) env->CallObjectMethod(jdataDir, getBytes, env->NewStringUTF("UTF-8"));
size_t length = (size_t) env->GetArrayLength(stringJbytes);
jbyte* pBytes = env->GetByteArrayElements(stringJbytes, NULL);
std::string dataDir = std::string((char *)pBytes, length);
env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT);
env->DeleteLocalRef(stringJbytes);
env->DeleteLocalRef(stringClass); */
// Method 2: get string chars and make char array.
auto dataDir = env->GetStringUTFChars(jdataDir, NULL);
env->ReleaseStringUTFChars(jdataDir, dataDir);
// Set DataDir
i2p::android::SetDataDir(dataDir);
env->ReleaseStringUTFChars(jdataDir, dataDir);
}
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_GetTransitTunnelsCount
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getTransitTunnelsCount
(JNIEnv *env, jclass clazz) {
return i2p::tunnel::tunnels.CountTransitTunnels();
}
@@ -125,3 +107,35 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr
std::string result = "http://" + httpAddr + ":" + std::to_string(httpPort) + "/";
return env->NewStringUTF(result.c_str());
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage
(JNIEnv *env, jclass clazz, jstring jlanguage) {
auto language = env->GetStringUTFChars(jlanguage, NULL);
i2p::android::SetLanguage(language);
env->ReleaseStringUTFChars(jlanguage, language);
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getHTTPProxyState
(JNIEnv *, jclass) {
return i2p::client::context.GetHttpProxy () ? true : false;
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSOCKSProxyState
(JNIEnv *, jclass) {
return i2p::client::context.GetSocksProxy() ? true : false;
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getBOBState
(JNIEnv *, jclass) {
return i2p::client::context.GetBOBCommandChannel() ? true : false;
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSAMState
(JNIEnv *, jclass) {
return i2p::client::context.GetSAMBridge() ? true : false;
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getI2CPState
(JNIEnv *, jclass) {
return i2p::client::context.GetI2CPServer() ? true : false;
}
Submodule app/jni/openssl deleted from 98d7f124a1
+30 -16
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -15,44 +15,58 @@
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_purplei2p_i2pd_I2PD_JNI
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startAcceptingTunnels
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_reloadTunnelsConfigs
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
(JNIEnv * env, jclass clazz, jboolean isConnected);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_reloadTunnelsConfigs
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setDataDir
(JNIEnv *env, jclass clazz, jstring jdataDir);
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_GetTransitTunnelsCount
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage
(JNIEnv *env, jclass clazz, jstring jlanguage);
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getTransitTunnelsCount
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
(JNIEnv *, jclass);
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getHTTPProxyState
(JNIEnv *, jclass);
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSOCKSProxyState
(JNIEnv *, jclass);
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getBOBState
(JNIEnv *, jclass);
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSAMState
(JNIEnv *, jclass) ;
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getI2CPState
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
(JNIEnv * env, jclass clazz, jboolean isConnected);
#ifdef __cplusplus
}
#endif
+34 -12
View File
@@ -1,26 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.purplei2p.i2pd"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_logo"
android:icon="@mipmap/logo"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
android:theme="@android:style/Theme.DeviceDefault"
android:usesCleartextTraffic="true">
<service
android:name=".I2PdQSTileService"
android:exported="true"
android:label="I2Pd"
android:icon="@drawable/ic_logo"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
<receiver
android:enabled="true"
android:name="org.purplei2p.i2pd.receivers.BootUpReceiver"
@@ -40,15 +53,17 @@
<receiver
android:name=".NetworkStateChangeReceiver"
android:label="NetworkChangeReceiver" >
android:label="NetworkChangeReceiver"
android:exported="true" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"
tools:ignore="BatteryLife" />
</intent-filter>
</receiver>
<activity
android:name=".I2PDPermsAskerActivity"
android:label="@string/app_name">
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@@ -56,11 +71,12 @@
</activity>
<activity
android:name=".I2PDActivity"
android:label="@string/app_name" />
android:name=".I2PDActivity" />
<service
android:name=".ForegroundService"
android:exported="false"
android:stopWithTask="false"
android:enabled="true" />
<activity
@@ -71,5 +87,11 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="org.purplei2p.i2pd.I2PDPermsAskerActivity" />
</activity>
<activity
android:name=".MainPreferenceActivity"
android:label="Settings"
>
</activity>
</application>
</manifest>
+282 -159
View File
@@ -1,127 +1,169 @@
0gitnick.i2p,xpw6ynhbxxuqsr6spcnfiyvuhvimm3jg7uti2oqv3jlh76j532oa
0pl.i2p,gd7qe2pu2jwqabz4zcf3wwablrzym7p6qswczoapkm5oa5ouuaua
102chan.i2p,xxu3lso4h2rh6wmrxiou3ax7r7la7x6dhoepnku3jvrlwp35pefq
2ch.i2p,suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq
2channel.i2p,wirxk4kulmd7v6qmttltnu5nx2vtchzvrg7ewocejrvdjcaiv5sq
0xff.i2p,apo53zid3xe7rewxjw7whdym2rmyowsj7jeoiwrl5zlmf7oqrxwq
0xpaste.i2p,oyfcxkrmrnaplu24aobv7s36hm3vyxszlbees4hl6kpk6izwa5da
111.i2p,s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
333.i2p,ctvfe2fimcsdfxmzmd42brnbf7ceenwrbroyjx3wzah5eudjyyza
600chan.i2p,ncogytpxyaqnu5au4yc6oeiiaidhjcxfsr6cyebcsfki2p3ih7ea
7i3.i2p,y4gh4ocvlsxnyjgqbdlqb6eeff4a4e62wbzuewd3ralagyopzb4q
aaa.i2p,zzhy7rumzzgxzodvgu4xz324nekbbccphegweukj4cm6nrbpg4oa
CrustyIRC.i2p,4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
aaoth.i2p,aaoth5tidbhizgerysxlfrqmg5t7jzb76zt6lattwjj3up524qwa
abdlandrubbernetwork.i2p,asnpognglrcx34l5vywatfkoaashziedfylun4w6cf5wue5gujca
acetone.i2p,tzwfy3dnqtm4wuofmcp3gcb5qjcytri635ei7kw7yrl6n3ul5n2a
agoradesk.i2p,ztqnvu7c35jyoqmfjyymqggjpyky6z3tlgewk2qgbgcmcyl4ecta
albatcats.i2p,ilgg7nbtofvgzrpl6kenxugfdsgi3apu6sgilmqi5rhpolnauyga
agentoocat.i2p,voanmdeayaccgaxumtehvxxiv4sdscsixoxsqmhh7nfwhusrvfaa
algorithm.i2p,algout6clo74ywqtjyemehnf4bzhegpju5yvi6zdcfszso7iirka
aliensarehere.i2p,6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
alphabay.i2p,tnaefzkcnhryeusi7hdpqujqiqmnbtah3dmjcg3gvezohunjuxbq
amogus.i2p,udcjqqoo7mc54ephxnhzaxdwtqxsgxjzvh4wr4boope6vyr4mrhq
animal.i2p,5iedafy32swqq4t2wcmjb4fvg3onscng7ct7wb237jkvrclaftla
anongw.i2p,owrnciwubb3f3dctvlmnaknb6tjdxtlzvv7klocb45mmhievdjhq
anonroms.i2p,w2sgx2i5n4uxtqjgekckxnhhpymigpn5lmgdaujyzib6sxq7j4cq
anonyradio.i2p,cbobsax3rhoyjbk7ii2nd2fnl5bxh3x7bbearokyxgvmudn7o5bq
anothermusic.i2p,p5mhrtnjfyonumqjzkzxakxais4fjtjgappvoioztqehaii4smpq
apophis.i2p,aybax36xssplylkueyy3szi3n2spd7mgxcmzbawapg3vxznwlkda
apt.idk.i2p,s7qemnncvmy5zs3khd6qzlcnsvtu6drnkeae4r3yyc7akuzuqiia
aqua.i2p,xqwrqfuoae43grkmzs63sw5upathbjerid3ch4bhskle3bibeqba
arav.i2p,t42fkp6zp5dfqywantq3zp427ig3q2onrmfv246tyaztpg4ckb5a
archaicbinarybbs.i2p,t7o2tw36cffedgfr6kahewpkrntofnliuapji2e4rucl3os55epa
archiv.tutorials.i2p,lldr2miowq6353fxy44pnxfk37d6yn2f6kaivzecbmvvnnf5exyq
archlinux.i2p,5ms4k3cn5dx53b46hqgwogigsjhtinuf4g6fdr6pplkldi5vjcxa
ardor-wallet.i2p,tm23k5ny3umhf6vf3kghnnwacli5zywq5wrr3xcqowbcofuyr4gq
arf.i2p,o46lsq4u7udxg3qqlidrmpj4lb4nr7ldxmbb2x53nftndaeyxqeq
azathabar.i2p,v35rwae5zb6fcgd7phzkireghtuen43umi7l5yvahm7ezkqg5uwq
bandura-yacy.i2p,e4t4yer7o6dbttk4xmpsfd56vhuse5upksgjqejnrvrdz35ia2qq
bandura.i2p,n6eqyu6glmtgt544ys43ggrozhpiw7biyrelrvmkmg7llfcjwm4a
bbs.i2p,7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua
ben.i2p,kaqe5l6s2hojtgaaoinn4ucktnc4ixvneldy32ft7zdokncc73sa
bellingcat.i2p,nk6hd2mzzoieui22xzcdiz7i2irp7gel3qscwanuqzstkdxqxp3a
bentasker.i2p,gdncgijky3xvocpkq6xqk5uda4vsnvzuk7ke7jrvxnvyjwkq35iq
bible4u.i2p,xs6lr2g5jiaajtb3nkno2zmy34eipitrggooxb7wtey7uko7bqmq
bitlox.i2p,lqw5khxcdntlv3u4vhn53upcqirplvnc4etjlmoytrzs66ytettq
black.i2p,sjwueu62qpe6dtv5b322k3f23fl4uz3w6qe6wcrwauiwpnymypfq
bitchan.i2p,waycuw2c27ruakfblkf5tcegwmt3ot445dlfoypil6bzmm4yxg7a
blackexchange.i2p,ztgr5kghkyn43fhhkuycroxgfti6cojo3vg4wdd3usqonyvrla5q
blackgnu.i2p,hskxmtmwqnmq7pnxzntlwt36ew4nuqzmwhzbqjo233ncfoaj7mpa
blawg.i2p,uq5hbw7bplczde3pbugbxnvtqbjjdba6wfggpvbmaghuwoulputq
blog.raccoondad.i2p,ouc5i7xknchig3qdtkoydoeg2oqe354roxkjrrwzuzjcqr4xpvna
blog.tinlans.i2p,ylkch2nkrwehakx4z6wiyjbeqwlgasknukdkex6r6yq4xusrjnda
blog.torproject.i2p,woelslt2oh4dn5wlxfmpjggyyu6l7ntgk3rngrooldn57x4kduma
bobross.i2p,54y7lkvndr3fa4c4fw6e5udfx37dkrh4wbdjvxbwapertwz2vtqq
boerse.i2p,7633w56hd53sesr6b532r5qlbdnvyl5bnvama6ign6xryaxol4rq
bofh.i2p,auvuinzogu6gc4pwsgbjijuszxgcjygciu2wy53pfz7mo5nfpc5a
bonobonet.acetone.i2p,keihicq2fcfooqvdqtufjpigg3ge5mw5mjdpdnxy5utazrqkcnxa
boran.i2p,boranyzcefxqw2ktndemy3npt4zhetpp6edldtlym2ap7n5azt5a
boxs.i2p,owm3fy2t5vwbxowk5gsshihkwjfknqq7y4ylbeyhvzta7r3ybrpq
bote.i2p,bhjhc3lsdqzoyhxwzyrd63kvyg4br6n2337d74blyintae66mr2a
braindead.i2p,braindsku6jnpmnaats2cu2qzax4pga6dwhx436kxanpxgx2pcyq
burntout.i2p,lkep3fd7tjvxrs25crr2c3jy7xm4s7bqiua5r327zgpw37sgyerq
brick.i2p,lfeip77mf2j75izalrenv2aft5h3mfwauqqu3nqdmoq5ldwwsvga
bridges.torproject.i2p,2tiwhibsjvys63t43xncar6y52dy3dpct6edglenhzlalmyirb2a
bublik.i2p,npx6e6trk37ovoxzk3j3yoh5huenh24avbmsgeroiejkuzb2vo6q
bugfuzz.i2p,ubszn4gsf22vga67rvzzlg4qj2bfcq6o52fmxz46xruawqm6z7rq
bunkerfiles.i2p,lyrhscn2hfe6mjn7jo3titioitfzcy7x23hhkksydin6ildsgxiq
bunkerirc.i2p,mdt7h4zsbwafsikg3r4iiqh5wriaisznjj5d3f3lyeahipudsxoq
bunkertreffinfo.i2p,ow4q3pdfdwofiqb4btopg5ou734w32k3z4hoiinsezg5zkzdlq6a
bytepay.i2p,7amc4ztwkzu3cgsaaaw3223ohuihn5hlsqc6gpf2rxdyptdkyugq
ca.i2pd.i2p,u5safmawcxj5vlrdtqrsqbsndkr5cfenpicgg5euu4xqm73yicba
cathugger.i2p,vq43xjjcnejqpzfprws5qzrea2siieshu4tglpdepql2w3w3bpba
cake.i2p,hpdbe6o6qqqqvgygbcznssat46kybsm7rcauofqaoly4ajdi2jeq
calculator.i2p,itj23yb325dma24i4qpnhuwrz26hzpps6izkaf3mowavtvoznnva
cantonese.i2p,3r3d43jejiezwb6daqgtk23ccs4jm3bvkhxwwwnpymvjn2aymriq
carvet.i2p,r5ukmkit6n3ztitar6clfc6te3o3235ys4jdbiugnkvzmfurxbnq
cbs.i2p,u3lp7wazvq6opodzwjg5sc5w5kwxehmxd4wcdpt4s4j2k4dx4apq
chudo.i2p,iaublzhzc4ssa3rcrjbdigautm66mslt6g2sninugagiarl4at3q
ci.idk.i2p,antkos5hjxraxduyewoo4qwwr6vyceiggd562nctvmtpnfjsuqlq
closedshop.i2p,6fg67mbw2okopzyonsck4bsy3cy7l2fame56uiysr2cezhjhzdbq
cobalt.idk.i2p,m63cbwomq4e4q6df3n6idnuveqa4yastxnls6kacseuutrp5um4q
chaox.i2p,6bcqgkedaq2krrhvidjlmdsoltmzuwaqtrafycfzbc56h5swumoq
cheapeth.i2p,x6pq4h33wu6txj6vvpgywrgew2y6cwzs5l63w726paqsvogeqdra
chmok.i2p,w7eqh6nndwk4yr5vxtbnvizgsg776vamwingijetnnqojrzjxm3q
chungus.i2p,ot7kljg7js4iedtsxl7es4wnynvxxyyaravier2dqkxmr7wsdzxa
cipherlist.i2p,gbm4kiotqjqmklwsp3qibdtn7mhatjsyeebbb5zxwjlp6w22fuga
citrus.i2p,citrusogkieyk3hleilk5scb5a64jdzoogi5wjv35klrvmqsh5ma
cloaca.i2p,pnsyl5plmmwuqfvpg36cbvvhe6mpoy2j5zzemfb5sfbpvklyozta
co.i2p,3mvo5eifcwplcsoubtvqkzdahwo2sdhfygfdde7lj2glybk4q22q
coffeejazz.i2p,mrt55kugqimzxeittpwwjwznejs3b3zxcfht3hp6dlujetyqh5ua
coldhell.i2p,z2kerfik5dzqd2kj74cuhhtptkrizsblc5nm6ke2gcnj5mnwgwja
community.i2p,64luakopnvffchxnibn3d2p7uqxixtyuallfqfgifkkcmfcrczxa
community.torproject.i2p,wmw22z5c24b35hlepzc2g6k3cpcg44rcg46qdwfo5heiplv7m4ca
contact.i2p,rn5hqxierph4eegft3hiiqkgn2zyyfgj2c6pq75bkahl3pu5shvq
costeira.i2p,abhty5xlmnyab2kqdxcd56352kcescxoux3p6dbqdrghggyygnxa
crypto.i2p,vffax5jzewwv6pfim55hvhqyynafkygdalvzoqd74lkib3hla3ta
cs.i2p,kzaeunogz6s75ptgy6ifjzwwy75xdfenenswvrczd7mewxgrad5a
d73.i2p,uf6madmg2fv7uo25cjnvzpimd6iflsrozyemuypleyz46mxbyreq
darklibrary.i2p,ynv2cgboxkpcyap6hqnbycgj4khyxppxuqjbidkdfhjifkzwdhfa
darknetnow.i2p,gkx3o5fy7mv7l4psqqnhp35d5iun7rt3soci6ylf3rgb7a5a655q
darknut.i2p,2mk37gtvpk2i63o6vl7vna4dr46rqexxetupgn5efuuins7x3qya
cyberchef.i2p,5k22kdukxkobertlyheal5aro32gls6nhgktneq3mtrracubt2bq
cyberia.i2p,3jrfzgnetbjwnyrua5jpyeqk7gb6dgfw3hu5q6lyggnwqhrury5q
darknetbible.i2p,lcaocuhvocje2gociyyuiip5sxhbgmkvaicbm6g6axtflf5wc6pa
darknetdaily.i2p,gehxh3zlns3ezyuc35bszc42hdr4g5uzasexzyrqfxwcwkeiulia
darknethub.i2p,tnh5bp4si7x47vhwk6njtimbbk77gai3abkfh2gz2dhml46uu3uq
darkrealm.i2p,gbh4eerxdsph7etxsxznfhvmuiz54trlkenakqep343u4xcoekzq
darktech.i2p,nlkpudgmmgsdiemnbehq5llymdmxp6tn4rzjuse7nhvavr2kgkga
dashninja.i2p,dzjzoefy7fx57h5xkdknikvfv3ckbxu2bx5wryn6taud343g2jma
datagrip.i2p,ajreyxslv6lijap2hykp3uvnnsca6fyvax76u2w6n3vexngkif4a
dcherukhin.i2p,qa4boq364ndjdgow4kadycr5vvch7hofzblcqangh3nobzvyew7a
dead.i2p,7ko27dxvicr2sezvykkrfiktlghx5y5onup3f2bas5ipocy6ibvq
deavmi.i2p,t4cvvenniup6dcdlu2ehdycos5r3luccfemwd6hhvyqv5zd6obgq
ddosecrets.i2p,vyhw7t7fbj7nghx3oe4y5komczeb5egnhuvlslpkqupaymnhtlka
deavmi.i2p,fh5r3hlkkwh7udtjeqmekmq4qd62jnjqmnqob5hm3ndiuo6lauza
deepwebradio.i2p,2nait2gdeozkgf6gyhzjfij6mwldwkxxwcvtxobb4b5q5cvtm5la
def2.i2p,cepsrw27kdegwo7ihzouwvgcvw2obswwjs23ollgj7hk2yrce3da
def3.i2p,xbf3ots2purqun7orn72ypkpjmrzbfrkj3u654zfe77hbrbow6la
def4.i2p,yyzdq4fwwmnlojp23drfpfqujln2vcjozjrfzfeuriuqzdq7g4mq
det.i2p,y6d4fs3rpqrctuv77ltfajf5m4tl4kzcu7rtwhxgiohylfxxow4q
diasporg.i2p,edvccoobtjukjgw2os5eetywanbb2mpag5aknkrpia5qx2koksua
diffyq.i2p,hkjvyuc3asswxa7uxyalrnpqab4lyvzriu2rsq6jbjc2kaoabghq
digcitlab.i2p,gijabxlt4ox2mblh2nfxnds6u4mlsdeoonizknbdksl7klmbpvoq
dickinass.i2p,5x55ucmwxf2fvrcboapylnrcwdvunlokq5c7mnofno3bkrlqltza
digitalsr.i2p,ldavoapfhoqpxvihdsdjjo3phlt5ujkgkzigzbesab3g42rwvbpq
discuss.i2p,wrnowoalzz5mquzaygmcrm4feuqco5gsxyn42fizbqjaprtdx5gq
dist.torproject.i2p,pbhgoronppg7tq3dssnwmhzkbrscbvtmy3d5pmar5hyhnqwjj46q
diva.i2p,auoqibfnyujhcht4v3nzahpqztwlyomesfywltuls5bqqi3nd3ka
dlms.i2p,krsbxsaw3lnb6ctdpydygm2gqobjcpm4pf367ddo5hylbscnynmq
dns.chudo.i2p,zzfmtnnmacop3xvpznc4c2jfvk226wpep2gaoanja3gfzf3ih7xq
dosje.i2p,ir2ky5ejx4f646l4fsnug22gj4frn6jzlg7fgboudf2n5b4gdj3q
dreadpiratessociety.i2p,fbdd4syj2v52x5zord67av2xclmjsg6bc6xdvrqmvqkyd3whij6q
dropbox.i2p,omax2s5n4mzvymidpuxp2yqknf23asvu54uon6cxl6gdrlblnuiq
dumpteam.i2p,2fwlpuouwxlk2nj4xklvm43m52tqyhqnu2fcfiuv7clvf3wd5nwa
dnl.i2p,4pjdhyaot4kktjathgjmom4ykfccezyezasbtvgdtmar2b76cpqa
dns.acetone.i2p,dnsgzxkak4zlrrs5tfh42ob57iley4xrp7srrltn2j2yl2ynbiaq
donate.torproject.i2p,crxdz4n5viyy46upbd4amlzxcinkea7hwj3mkiudrw3nkpnfv42q
donotafraid.i2p,w6jq5xsixmolxvh5xtxaqolary2nmx5n4orc5bilc2j7ejcytgfa
drommedaris.i2p,2cth2loujyjvouft5z7cr2ajdv7r46tdxxew5xoqwpprucd7nf2a
dysfinis.i2p,6dhhk2azkdqd4zt2azsmnxddhooiztnaxgz6ft5sbusb5a4vonva
e-reading.i2p,z54dnry6rxtmzcg7e6y3qtsig5yf5fmehuvakcg5wnuahx3iafuq
e8.i2p,5spb6cl4ffallahbaj2yadag2zgyuciouhz2rdcnyjcf5phqcu4a
easygpg2.i2p,bwxry5alzx5ihgrd3glah4eotddblzhalvpheppnw4zcajzqoora
ebooks.i2p,bvpy6xf6ivyws6mshhqmdmr36pruh2hvoceznzeag52mpu647nzq
ebuild.agentoocat.i2p,lu56romn7lp6ggjtofbwwsaee6kcfonci2ezi5jb5nyo3vdo7vkq
echo.idk.i2p,63sgpiu6f33arldcxkbjsn3jgf6asyx3onjmz6j6gsk7hgbiehkq
eddysblog.i2p,ieac3ub4g5sy3wuhsbqfembnpp7f3a37xgcx537ytzsmgfzexnbq
epub-eepsite.i2p,yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa
exch.i2p,vsyjsbbf2pyggtilpqwqnhgcc7mymjxblamarmxe5hmbxaxvcndq
fa.i2p,6n6p3aj6xqhevfojj36dixwbl4reopkhymxmatz7ai5sroh75rka
elefteria.i2p,f5s6jvekhmq7aj77xmgm7jwnw2f75ci275togqya76urm745zpdq
eleven.i2p,n2er74vsv7szwvsbsukd2lwhz5epedws7eqwahsmxy65agvjizzq
elgoog.i2p,z6hrgkg2ajmuzlrddjlffrgctx7x7fkipm6c4hdzmohyn5wkr4ya
elvn.i2p,vwjtedtgyokakyxgfeoavg535bxe7ymdvfbdwsq4iqngljqtqi3a
equwal.i2p,j7zqkvkokxmpkbqrgrkkjym4j7kzuipko4qdujdjbxnrp3qj6ooa
esperanto.i2p,2yryi2eb72hnxavjpfot7paiminbzgv5w6fv4sl5wez55ventdeq
explorer.gostcoin.i2p,ktoacmumifddtqdw6ewns3szxths2hq2fat2o7xnwq4y3auga3za
fabrice.i2p,fabricexhumxqngfziy4xkao5m5ez27jpih4chtmigg46eu7rroa
false.i2p,77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
fantasy-worlds.i2p,62a4xcyyhvfrcq2bkckb7ia37fmrssrgx467tlkxp32fjpq577wq
fido.r4sas.i2p,i522xmu63hfbaw2k54cthffcoqmeao6urjyq3jg4hddf6wf57p3q
flapflap.i2p,y53ceza7iji2vq3oa7om64whzakt6nnzksaqhmkqiisk5tvqk56q
flibs.i2p,ocdm33e3h5tdml3yyholj4objdwsrhlugfqjnqgdkslmgdzb6b3a
forum.idk.i2p,bg7kaiqjcqqeuuwb5nyo3ptcp5dgza7mihtizwqtnz2itombg6da
forum.rus.i2p,zd37rfivydhkiyvau27qxwzmerlzbqtthsa5ohtcww62zrygjaga
files.arav.i2p,gajftpr47ze6ao7e3q2tb5xmcqneyaczu4edzvwwg2qzmnernpka
fileshare.linuxfarm.i2p,rrx4hxejr4pod3tqrkj5ckzuauwy2aqsfvpiac2tkebp2iuv5qla
fishsticks.i2p,btjbfuh2wav3c7bkjqylgatbkvqaireemvsvxwetkrifuvfa35da
flibusta.i2p,zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq
forbiddenhistory.i2p,nlduiogwtutni5nwf5kbuekrqf3ymqmkor3hughjkckz7tvruhva
fourth.i2p,2cq65hjlt7nnl7mctthj7oejlgep7nh7gmqc6bnbflxw2ti4bxxa
freefallheavens.i2p,7etudb75nhe6vxslitptjlwrnbybdshvzxnweuiepsxbbkkxy5ka
freenet-inproxy.bandura.i2p,rblg2sajac7winv4mgvnkfh2fa3nt2zxfvxfiybj76okpwdrt45a
freehaven.i2p,y4giqqrbcb4xit5gp4y6njypupfklfdr74lfi424seenf7usjvza
freifunkmobi.bandura.i2p,5shuxvx52e3qszylwn4w7qst4siap3latyap3ff7nfnpjgllkcea
fresh.i2p,jii6utg6ubwxgls6jegu24ifrroo4qzbcizjfft2bemodp4k2i6a
frontlinedefenders.i2p,pshxfoeefj67oj4jwjh3cqiztmrgcpsbuttclnc6fiwvv42p6inq
fs.i2p,ah4r4vzunzfa67atljlbrdgtg3zak5esh7ablpm6xno6fhqij35q
fsoc.i2p,vaqc4jm2trq7lx2kkglve7rkzxhhaptcwwl32uicx4ehf5k3hx6q
fuka.i2p,e3aanmaobvwopjrmrnuqvrkr36gyubrv6f2lyygh5brku3ufwrsa
fuck-rkn.i2p,qmlmnhr3ul2lmuu4fjf43kmk6hf3dzsuxv5xu77vwys36xwuu4sa
fxruby.i2p,lqhdnr2pvp2igu5e2cxichboqzcgypvrbooynzgkmoze3xae6qkq
garden.i2p,qkk2dqx6nocycgt3vinsoc76cxkb4jreybcpgz3fcps2dbe4rowq
galacticreststop.i2p,uln6c2abwfzneakdz7dkfmdifwrjr3r53jvkmq6mxrjt2vflvbrq
gedanken.i2p,kw6isjbs66uf7576fbb3aniokxtrpqmbegf4tf3xskg2bmrjci7a
geekcode.i2p,hzmyzxa6jzag67zcqxhicydusdev77byf2qoyxjxhsrtkce4qiqa
gfap.i2p,yasbny2ndcpofprdbtv7dxdtshbebyydjv5zlnwy54gii6xnlmqa
ginnegappen.i2p,kbhfkzx5jeqhfgss4xixnf4cb3jpuo432l3hxc32feelcmnr3yja
git.agentoocat.i2p,5ihrbnmcoewaax5kxsghnmxh6p6srufhmo5pqkybdwuz4yj7efja
git.apophis.i2p,apep7dtwnuom6b7li6jirhrsygxgcdqb5svqpq6mh2rpindrzp2a
git.arav.i2p,p5nkflgogwv4esy3ainup6mgurpugmdyufizhuufauznreyvprsa
git.community.i2p,giteabolfdejtdzblkooalqei6jr67imiugmhtsh6ocw4hlj5a4q
git.i2p,giteayof3hpwkfnwnryy6l4qhq3cwdzqlr72jokzbkc6ol43mypa
git.idk.i2p,7qeve4v2chmjdqlwpa3vl7aojf3nodbku7vepnjwrsxljzqipz6a
git.qorg11.i2p,jf2mrxlbqsct67fces34x6kwbbnmlx6o7gd6g4knqk36soa6efqq
git.repo.i2p,vsd2vtgtuua2vwqsal2mpmxm2b2cpn3qzmqjoeumrrw2p4aot7uq
git.varikvalefor.i2p,6sqxtpnpqqnlqbdxu7dadmorrffnpe3evbz5zye4y5kvljkzkbra
gitssh.idk.i2p,g6u4vqiuy6bdc3dbu6a7gmi3ip45sqwgtbgrr6uupqaaqfyztrka
gopher.anonroms.i2p,wqfhyrnpknap3ushsck3ih3r7inz6uoqlr3u3ktwvejur3bejqha
glue.idk.i2p,ykbx7chmkivx3idmxd3lu2jc5w4wtlps4r3md57wszhk5w7jykyq
gostcoin.i2p,4gzcllfxktrqzv3uys5k4vgkzbth4gqednwhfpt755yivm3davuq
gusion.i2p,4qyfdhizjixe2psu7wcvqufix5wlijocehpb2futurcmlhlktrta
h0p3.i2p,k5fppzxc3bwoz2mjc7q37jojbrxo6vtprac3dzrk4wapv7irr4iq
hacking.i2p,uvxiknnzaxtcijzagp5xuweua2ctghmjfubqdufxilvnkajhezaq
hagen.i2p,e2t6rqd2ysbvs53t5nnaf7drllkgk6kfriq3lfuz6mip6xfg644q
harbour.i2p,zohxpycufzcslwb2dgdkfo75flahkl2q7n57ciqjooqia75ybada
hardenedbsd.i2p,6ebmdsir52bi3q4wfwug7ylouoq6gdafl3wyy6ccfmpffijhtoca
heaven.i2p,y6ejpmln3j2jvf4omb4ptyo2idognputhrccph74yn6eghkpxyhq
heckyel.i2p,lars7whelqo6fp2jzkzrx7aziq7dwiygkixgjarjjc6n3gnlslra
heligoland.i2p,gzrjm62ektpqjfsem3r3kwvg6zpjvvhvpjvwfxkm2ay4zu7sp6oq
hgit.i2p,ny4ev7me2y2ibfi37mykakwvf2jhnl7lfql4etaiykjiwtd735pa
hiddenbooru.i2p,zma5du344hy2ip5xcu6xmt4c7dgibnlv5jm4c2fre5nxv44sln3q
hiddenchan.i2p,6y4tltjdgqwfdcz6tqwc7dxhhuradop2vejatisu64nwjzh5tuwa
hiddenwiki.i2p,2iz3nkopz6fxbzlcjq3ofligi7mwdseuj4ndzqljogyvsggh6dvq
hisdarkmaterials.i2p,qcf3vxllflqfsbvxjlypfxsx36g5srknxnhpyz3ph5bcxdjawraq
homosexualchan.i2p,suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq
horo.i2p,vrxh2vbqsfvh2utnt3ighimu4vrgla2mfpwksipkjsguv5vewhdq
hopjoy.i2p,3wifx34yzdnj5vw3zu3kmqyz57tvlypmdnnyalqjdcaqrege6bpa
hotline.i2p,6cczi27iuxkm3aivazaemzltdqgh42ljzurqp43uclbz2lid2uqq
hp-net.bandura.i2p,z2ufexrgrxry37y4vs5hted35ygpleskfcs2enanl53hmlpzlqhq
hq.postman.i2p,7ewjvbcwgah57n64cwbsxqai7eutqofkesuxfsuhfheijivdjqra
http-false.telegram.i2p,77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
i2p-epub-eepsite.i2p,yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa
hungryewok.i2p,to3afquvmrmk4kvozisb562elb2hdka6hwk6oeud32m6h2qtkcqa
i2chan2.i2p,rqd4efol6ooxukq2jj6toml2s7uutj3kbkl6k7kfm7vpmmt2k4fq
i2p-mirror.bandura.i2p,aq7r54ebou47b533y5seiod7dc3aeycucevl2pqvphnjhjwblr6q
i2p-projekt.i2p,udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna
i2pd.i2p,4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa
i2pdocs.str4d.i2p,yfvbtrhjac3jutdsqzugog6mbz3jtyhpwovrt2mqc5mzv534y7cq
i2peek-a-boo.i2p,qgv64klyy4tgk4ranaznet5sjgi7ccsrawtjx3j5tvekvvfl67aa
i2pforum.i2p,tmipbl5d7ctnz3cib4yd2yivlrssrtpmuuzyqdpqkelzmnqllhda
i2pjump.i2p,2mwcgdjvfvd3xwumzqzqntual3l57h3zo7lwdmkjboeraudpkyka
@@ -130,221 +172,302 @@ i2pnews.i2p,tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq
i2podisy.i2p,3c2jzypzjpxuq2ncr3wn3swn5d4isxlulqgccb6oq5f6zylcrvcq
i2pseed.bandura.i2p,2bpbnalf76ktxzhfekkwcklmo45xzedi5em5bdoyedrhw5bhvtia
i2psurvey.i2p,pemwrlamhiiv74ok4kwoo4eqwzzjshp4q7ir3nlh4jfnt4zjncia
i2ptimes.i2p,563tjwihw2ql5q2kl7d7md7ywedpapoqgkxgazkz4gmlrb2flqbq
i2ptorrents.i2p,yt2qxe6nq3meofloobawy6nlnmu5pxkobqjyspdngfrasd5v7bca
i2pwiki.bandura.i2p,isbf7tzeyrutnd5rvmjpqaohe7cz6onqgci2wvbuyfwc62w74r3q
i2pyacy.bandura.i2p,owy6s5xlkf4zsrwwpemvoru6x6qmrye2pe3v4v3dncvcrzix3fiq
i2speed.i2p,532c5r6ra6rcf2mvfgtlcxbn3lpplybwxul4xsg3ps64dlx73fga
i2search.i2p,cpgupqyhxamjfgdd3qk5ux673qomu3o5kqszvq6fwuigzifkxzta
ibft.i2p,ds36spqcf7dnj46in5vfnbbwcbjpslo6aafkdrkc47a2oq3zvtta
identiguy.i2p,3mzmrus2oron5fxptw7hw2puho3bnqmw2hqy7nw64dsrrjwdilva
idk.i2p,b2o47zwxqjbn7jj37yqkmvbmci7kqubwgxu3umqid7cexmc7xudq
ilcosmista.i2p,6u2rfuq3cyeb7ytjzjxgbfa73ipzpzen5wx3tihyast2f2oeo24q
ilita.i2p,isxls447iuumsb35pq5r3di6xrxr2igugvshqwhi5hj5gvhwvqba
inclib.i2p,ux6prousphswf56bym7yo7kst4ybh45y2z2wrnw7dujmrz56hq4q
in.i2p,r5vbv2akbp6txy5amkftia757klgdy44s6cglqhmstpg65xycyjq
infocon.i2p,ic7rentjh6ilzz6p5kveiuyzov534ksfcexmpeniyallzf5in67a
infoserver.i2p,jd3agbakybnhfvkeoxrx7t33iln6suzomv3kxkxf77j7rkonch6q
infox.i2p,qoz4bwrtnicqyxemrxubdc65uojrqn2iem6v55b6xmxzdmfzcvlq
inr.i2p,joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq
instantexchange.i2p,5wiyndm44bysev22kxvczxt37p6o6qroiqykytrvn2yzi55aqfxq
invisible-internet.i2p,jnpykdpp46zenz4p64eb3opadl5g42dls3rurk2cvq6a3g3rvbvq
insecurities.i2p,4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
ioannism.i2p,g2246vc2tq64rmomwe47v3jnbpz3b3ec2wrrhadukj7lxmwd5aoa
irc.acetone.i2p,qyzbrdw26ejjdjzsrcmq5h3ggdzk6cq5xynrgee5t5q73gq545yq
irc.coldhell.i2p,d4b3dcqt32yq55b6ct6f4rsib5svzgwkfz4klfczuz7e4p2v6rkq
irc.crustyirc.i2p,4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
irc.echelon.i2p,ez2czsvej5p3z5bquue5q3thujcodfze7ptybctqhnqc7hms5uzq
irc.ilita.i2p,5xeoyfvtddmo5k3kxzv7b3d5risil6333ntqrr3yvx3yubz5tk3a
irc.kobomy.i2p,2j75o23f3hhpebthdiuzevjo3sphmok4jbr5yrtmwav64v2hzuqq
irc.nerds.i2p,nlqhsdd5a7hanjea33mwizg5ixh3xcv5dczufpf3qcfpo6tx4esa
irc.postman.i2p,hhcy7zznltay2tzwdvtd37g2inptemz3hk5zmxyi57d3sxgxbseq
irc.r4sas.i2p,hodhusp73gltozgrnianlbploon3rrvhrzfn5mf2g46o7aaau5la
irc.rpi.i2p,ppqu4shst5hfjn6jgxyragcanyxurhmof7jdrxag5srpeobevh5q
irc.welterde.i2p,424n5ty6bryfsn3m3buckx4njs4vaw2qch7drfdq32btsyycbflq
ircs.nerds.i2p,w4d6hj3q7eyfrkb3kcy7rox2fdjzywypvmyrudtf2q4gdzs2qlhq
isitup.i2p,xk6ypey2az23vtdkitjxvanlshztmjs2ekd6sp77m4obszf6ocfq
isotoxin.i2p,wue3ycaccf4texikza3fh6p5yrmtgnooisuypnepo5mo67lmpcqq
itphx.i2p,zwu2erk3wtyxlcbmd73kmxcirjghdkk4lpupy3xcavpm3qbob4da
ivorytower.i2p,fpwrfvidfexsz7dspofkwtkmmizm7lyralfz5kvykffk7gubvxsq
javadoc.skank.i2p,us3amyq3emvm6rcxmrar3o3uoiifnafijgseho4dxdsjgonfyaxq
javascript.i2p,idxpwvskkaq3pssrnqpxmiilgeqwf7d2hf5xpusossqz6r2nudva
jikx.i2p,aazr55itvyns4lwppvx5njyx5tjdwemw4w6jbmpegdunznod2ieq
jwebcache.i2p,xdffxnxtjd6ji2zig3cgva7igvl2tiapyjoc7ylbzwqhxudbmvfa
jbo.varikvalefor.i2p,3flbkdhahkgq47s7vytubh3v4vk3lyqgwwh6dd2k5szqlrivdmta
jdj.i2p,mqxhou4icts5tmoq7ndz56sb2ox4s2atzm2urmyn2ndrj2dzzguq
jimkiebs.i2p,epqxjestvatyv2ala7iqbm45elnecqecz2zmpoklzvekwjapu45q
k1773r.i2p,zam7u6vslhemddz347uusuzjdk5wma4h5hcmcqlng4ybbpdbjhnq
kallist.i2p,rpoqwcozn4pdxz7bp2vxsl7vfibpbccsymfuxg3c7v7yj3um4bta
karamba.i2p,g2lizyuyzms7m6gv24pzege5zapbinxfd2dzbaha6k246pl2xu3q
kelvinchan.i2p,6s72dyf6jwlvk2u455lksvcs5r7deafc3iniwo5kp4ssm777noma
keys.dlms.i2p,znl2swe5pez65qxrr2s2s4lmdfky6mnppvh3p5j6suuiovymhjtq
keys.echelon.i2p,mwfpkdmjur5ytq4og36ym3ychinv36b2a57f4rmgqmtrwepq3fva
kibykarni.i2p,xowcvzbeq72slpbrwmjl3zy6xkrkb2ncctpkkskeqts63vedtg7a
kill-9.i2p,3i3bbs2zfabyleqxcqueeegakutrtk3hbxmvbtkrgwvetlmity4q
kislitsa.i2p,khceo3smaxtng2tnuicmcbhdnkk2j6myi4nkigcux76qh3aabdhq
kkk.i2p,kukluxklanib666d73z5fyeyb6vnystmvvreaodhjf73rhl4wxva
knijka.i2p,knjkodsakcxihwk5w5new76hibywia5zqcgoqgjttzsausnd22oa
kobomy.i2p,f2m5wb6iotejsdhimqunkggw2pbboozd6vcha3xi37zjsecya2ua
kuna.i2p,bwzbe3pn3g2oqce6grxocaqgw6p2oleiddsgrm7d3fms3cw44izq
kohlchan.i2p,kohlchanvn6vtsujobyw4pt5naaszmxqutd5hsdatmxfe2qaqhya
korol4ik.i2p,mr3z5lggdppc3yw2r2egstpg33ga2wfocmozac6kjmhhfk3asm2q
kurator.i2p,sp3umnyofy5ytixbqcue4jrpxixccgnrxtiuvhg6juep5s5lrs6q
kycklingar.i2p,gctswdhp4447yibxfbqg3uq2bvx63qjeqnaoaux75zw73leakyva
latinum.i2p,n64izx6kyu3xv6yvc45mvpswlq4txbkc5y2okjwyoseb5lmzxoea
lbt.i2p,5uhjsgyca6ggdvwjjwf67bcmalpbxitopupjpygtahxvkwlh5mzq
ledechaine.i2p,7s4vtwkvxvmigj3r4zrc7s5ajdeqtris4qnj3n35cuuvuzkpgqsq
legalcases.i2p,tms2ibdkp67ddj5ez6l4zwvw33jdpz5tmavv3kpjdcpavfh7np4q
legwork.i2p,cuss2sgthm5wfipnnztrjdvtaczb22hnmr2ohnaqqqz3jf6ubf3a
libertor.i2p,7gajvk4dnnob6wlkoo2zcws7nor3gunvoi7ofalcps5lc76wruuq
lihai2333.i2p,maxh5bc5hom4g7udes2m4uy3lfocrqkmcy2m4mvkqca7ktoe43qq
lenczewski.i2p,7uypwo47x4vnryoz25vwisu5jpyhz7pcdvnfzvopww3wxc7wiiia
libreddit.i2p,libr7vbp7i3lsvqwy5aqgql44uxaufawi5yrloh3x7sezubsoaba
limak.i2p,jzoxeuuqt6wo55pvt4uh7o5i47oyadrvhyjli4hidqldhihu6lna
linuxfarm.i2p,br3njhezhzx7mcv25nrxkrwu5g553xp4oyavsjhfa7jwmzyp3q5q
lists.i2p2.i2p,vmfwbic2brek2ez223j6fc6bl5mmouzqvbsch45msvyyzih3iqua
lm.i2p,yeyar743vuwmm6fpgf3x6bzmj7fxb5uxhuoxx4ea76wqssdi4f3q
lodikon.i2p,u3f67staiwhqxpacya3clmvurdwd2kp7qcthzhstqnhrmlwc2g4a
lnxcloud.i2p,wryxsgqp3xl7fuohijmxlugrndtp2vixqlt2obpgriwt3fpdjn6q
lockdown.bnet.i2p,vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
lockdown.i2p,vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
lolicat.i2p,2mvlbpgzlawdxqv3zlcgcje475kv35ow2itpztjpdqegbtjpvbda
lolicatgirls.i2p,pjhlh4h7zn3slglx46ffob5ifcccrcqr5dzbyyueh3wd6a6bizra
longseason.i2p,ighnngssgd6p4kyrec6m556rasvbtx5xe7bsyxol4lie2dibi4da
losinka.i2p,r2z2tcs6eguevoxlkrmpkcanuwgnsit2o45svnwaer3wq4v76hrq
lyoko.i2p,afuuortfaqejkesne272krqvmafn65mhls6nvcwv3t7l2ic2p4kq
lytor.i2p,ezjrtucwkkf3xgssjtq6tr27hz4zhbkobr4zjnl3x4jrwy7f7m6q
man.i2p,progskxxt44tlefm5uc4jqseanlhgbbkjyz4g3nvjjzbvhhp342q
lucas.i2p,hcb6j5indzeqfyerq4igx45xgruijbs433mh22ye4osoxkxhumwq
lunach.i2p,m27cpx55hqhcfjz4u62tiynjtzqdw4s3kanxdgluuthnndiquoeq
madaidans-insecurities.i2p,4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
mail.i2p,mail4okikc3tknhn2tfyqzq7mxgzltqg2tw5v5frtzkcsm45zdra
major.acetone.i2p,majorivqe4wud5ksadgfycdkgqsesqbbnw4hpgcqfixy4sm77f4q
major.i2p,majorwsiehucyqfqbw3g2on3xqq2pwrwdd6hhyludqqr6ct7xdoa
mapwiki.i2p,p2lufcvbzq3smirs7ijwds3y34cxzchveogb4jflbpmk5pzy3wqa
marenostrum.i2p,tlrae2xdtewfb262daw6ygm5nz5vusc7rbiefpndubjk4jvh5roq
masterdestroyer.i2p,yp2g7frk3ze5ljaxbmhmh6hhda3rmpwmpianozi6or2uzqzdur7q
masflam.i2p,ucvzbekxpbzfizwndx4bgsj5bjbygdu4vc3xukiseiw5bvatxivq
mattermost.i2p,x5oovnhnuli5fnwtgkbd5z5jvrvdvprqyuofywx6uoxkk4bie6ya
mayvaneday.i2p,zli2qsg54w7y42vgw4xxlnj4nktcpg7xp33yjxkp33sjafvznbwa
maza.i2p,wiigkmy5je5ox4byjt7z7fh4btojbixbmfv4chnzqoovmgnvdpoa
mdleom.i2p,ggucqf2jmtfxcw7us5sts3x7u2qljseocfzlhzebfpihkyvhcqfa
metager.i2p,4zdcetlcp3tdg5h23gd3aeyzbvodepid7a6mb3w4qvxkdnm2by6q
metrics.i2p,z45ieamhex2ihqv7oowk5fz4qq47rbvxhhhbaaiinpajbhuevtpq
mhatta.i2p,o4rsxdeepfrnncsnjq675xogp5v5qkbfgbt6ooqeyfvlifobrjxq
miyoisomix.i2p,rtv5ufhxasszywdh3oelqrc4yg4kirtirglub4h3mwovwig624eq
minecraft.reloaded.i2p,qs5ihihltxhhfi6wesihgbvoaurqxgdpxgmwnmsk5d5beabtvmvq
minecraftlog.i2p,vu2v5xnfk4ivrcmjx4fvofzts7fj47jcq23zfpg6ajj6p3ytt3hq
mk16de.bandura.i2p,rrllz7nkoeaydqzc5tqdexbfpkvensi26nqg3ly3cxrm5qt6m5sq
monerod.i2p,fjvlhyxejnssd5yjxqvom6nooqjdrhd43umxnzw33h2nqzhza5qa
moneroauth.i2p,kt6uh4z24tendrol5zbm4wv4apq4nbv4w7k5vcguvbpg3alrqyxa
moneroexplorer.i2p,je4vbduigce7pgjivvo26d4abn3u5mfsos5zemp3a75xzcv7nm4q
monerujo.i2p,puri6y5dtwh6zr4u77ep6ozatun6iz7v4wai2dzxppz7654corlq
mosbot.i2p,5bhmrp43mjwlzf4x64xgdrkwmw4luvng6eq5waa663a7vnkp732a
mooks.i2p,6txhjmnxnrjku4cmdwtyacjzhwythc7l5euqaxieyrc4vjotqwzq
mosfet.i2p,s5ynkgagndmpxpf2kmnenv4x72io664gzd2x3qef54ilammnte3q
mtn.i2p-projekt.i2p,f52x5fp6uhq53f5zle5d6rq5un34xgmxgazvilvmzcby37xcmsfa
mtn.i2p2.i2p,l6kuhtmgvbp57d7jwalj5nksi6nr4gfzbz4oit62lxgipb3llt5a
mtproxy.ilita.i2p,vxxfipsygx6jpz57pmb3d3mjgsk5ls2idxeo2bffs3yp62muyq7q
mucats.i2p,4vjquedemoznbsva4j6wnr7hyms5k3gwucmxgcnwcwweontbcrha
mumble.acetone.i2p,plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa
muwire.i2p,c3r6by4k4kzbx7yvq36u5rieuymshuq2pebo3dzs6oovpzn52uoa
nekochan.i2p,dszr2z2swmeczeao2bqgop6fyh34jw5baeiybsavwtihllwa5qwq
neodome.i2p,5hkhjehj3ct2pvcah7dcylwef2oti3xij5myxbv3pd7rocio5vkq
neoniet.i2p,jf32pdnofckjvedni77vjt26m6opzzz6ocpkpxof4fptzym56raq
nekit.i2p,axis6zcqacv7le2ms5xqaerecuk3jyrijifrstvxl3or5g5n4ova
nekofiles.i2p,rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
nerds.i2p,5wpwlbka4wj74rrnwbieopppgtivbqxljznl3bs542mxtvjz7ffq
netbsd.i2p,jjz5ajknu5rku4p6xb6i5xwjnp3nd6c3jwi2qnzbpaodyf7g2lja
nethack.idk.i2p,zcojbufszefu5bfht5cem3zlhfvv5y3jzpzbaccu3ehje4d7pb2a
news-i2pn.i2p,wwcqkwfo5yhe6uribv5tzylk25j5hkdk6gdnyftzd3k7dawlzwca
news.neodome.i2p,trhwcnygfkeqjj6g4xhmrdp4gsjqsye47lsxshbmwbten4ywt5oq
nitter.i2p,axd6uavsstsrvstva4mzlzh4ct76rc6zdug3nxdgeitrzczhzf4q
normal.i2p,j5fex634r2altzb3kjvu35qekt2r3hgsqzg5qxoy7dp53heu5pma
newsxml.idk.i2p,dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka
nexus.i2p,6uz2ihv4avlfhui5eyrisw7yx2t5mclxyl6blwjgw7zc5q4j3isa
nitter.skank.i2p,l2aoqvwkq2prrv53cbk4k2ilxw5s2fc7eo2rjunnixp2hrv3iwda
nntp.txtcon.i2p,nntpsqgdoky2fuctc2hc6vuls2b4okxpkocic2eo66uup3dtaq7q
notbob.i2p,nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a
notochina.i2p,h3xsjhfyf4wah4sou3gepzibetdntrmiax3zl3x7ozyjv5krakaa
novabbs.i2p,bicoankyijabtj2nlwzjmr4mamybr6bgc6xclpvsgzaaalzhhola
nsa.i2p,nsetvbclpomqxfcit4mghn6z7vdhnza6jdzczby4crnto32uykga
nullchan.i2p,nullz2mkp7znirlcersxpk7qmkmgcc6u3yhe462p2qkpxsdb3mja
nvspc.i2p,anlncoi2fzbsadbujidqmtji7hshfw3nrkqvbgdleepbxx3d5xra
obmen.i2p,vodkv54jaetjw7q2t2iethc4cbi4gjdrmw2ovfmr43mcybt7ekxa
ol.i2p,bnb46culzbssz6aipcjkuytanflz6dtndyhmlaxn3pfiv6zqrohq
onelon.i2p,irkvgdnlc6tidoqomre4qr7q4w4qcjfyvbovatgyolk6d4uvcyha
omitracker.i2p,a5ruhsktpdhfk5w46i6yf6oqovgdlyzty7ku6t5yrrpf4qedznjq
openbsd.i2p,ahwlj76krc5do77pibighi2frqmfccpezyiqfmiernvivwomgvuq
opentracker.dg2.i2p,w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa
opentracker.r4sas.i2p,punzipidirfqspstvzpj6gb4tkuykqp6quurj6e23bgxcxhdoe7q
opentracker.skank.i2p,by7luzwhx733fhc5ug2o75dcaunblq2ztlshzd7qvptaoa73nqua
outproxy-tor.meeh.i2p,77igjr2pbg73ox5ngqy5ohzvrnur3ezqcogtl4vpuqtrcl3irsqq
outproxy.bandura.i2p,smaie7bxvpy53iiabfxkhmsjtqs7vzjcr5xxsysjbbobunwrav2q
p4bl0.i2p,lkgdfm4w6e2kkjhcdzr4ahhz26s3aunhrn6t2or436o73qh4z7ga
outproxy.purokishi.i2p,nieasaidj7wy5nammqf4f7zzcdafi4apygwn5qwscpn4pq34hqia
p2p-node.i2p,e7uvwnpkzbn5zdwr76ujlhym4lk5pfkqhvfwivt3mszx7l4lpj7q
packages.i2p,2gbnylztt42dgpjh5r5tmy6oxm5xag6qv4femnbbqbpza4l2l6ja
pagwin.i2p,qggplwxvsvctsdzgld2shfyjlokfoxur3pkfapygs26i4hwawfga
panzerradio.i2p,rawdhtmxzynf5mhrpyhnbjqqxswidr6gvvcbbt4hbpjuv5jebw7q
password.i2p,knmjkeabbhudejkikbzhhjqsb4r77o45vkdhve6d254quttfx3wa
paste.idk.i2p,qvgktychvlbmqwnoqgz2siuna7f5w764wgkbqcwogipfjzf3ksva
paste.r4sas.i2p,csen43keji3qiw6uobsgzysxyjd225g6446ylq5uuz6ur2glkzaa
pay.privex.i2p,cz25423yahhbd2wavtwupsbcbdg6wkn5vvh3466hbmmrzlu4wxyq
pharos.i2p,vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
pharoz.i2p,vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
photosarchive.bentasker.i2p,w4lnfcg2chbkwigogba7q3o5pgtq2baip7z3z4afaj65axhyc5ca
phreeroma.i2p,44fu2fhq6q36re2xqnkuievdfsroi5xchgbowkqib6ekak3ynm6q
pizda666.i2p,bczoowsc6ik7a4mya45qnlq5n6c6llpd5ni3u67r4r4drgohyira
pizdabol.i2p,5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
planet.i2p,pztcztaklof7s4me2vgtdddzesnunvk55zke6oz5e77ci3qk64yq
pleroma.pluralitynet.i2p,22wwp4s4n4sre45cj72zrfcdqcelpga65yrt6jlgahehxtbg2vzq
pluralitynet.i2p,yphtn6ponyelopqiccm3nfznoc34byroack4z33lvi54gyfeuawq
play-it.i2p,oxt7gdu663baue7lugdmgxqkmtrfdy2izluneqdrpv4pfslxjlta
pocketlint.i2p,pocketzsq4r4fef2bw57sn4paufjh5dw75azu5sr4hk2qwdvucsa
podger.i2p,56pcmc4rxmtzs6ojvszpiqmh47et3m6amh7kfszp4wbvz2jbpnya
polistern.i2p,ztqi2zewgtifrg4efs6eyxxi5www27ymley3aiz4obhulbnszlva
pomoyka.i2p,omt56v4jxa4hurbwk44vqbbcwn3eavuynyc24c25cy7grucjh24q
pool.gostcoin.i2p,m4f4k3eeaj7otbc254ccj7d5hivguqgnohwelkibr4ddk43qhywa
pop.postman.i2p,i7vd76psp3oyocljiqkoyz7fpr4fy2xq2asclf7qih6k57aj5xrq
portal.webhosting.i2p,bflwwtclsmmrimszczoafdrdzw6m7bszkggv4qs5e4aymghoxsja
pravtor.i2p,2sr27o5x2v2pyqro7wl5nl6krrsbizwrzsky5y7pkohwh24gn6xq
porest.i2p,46l7beij4rerlbuj7xmcngarlkhlpgaztywrleiwagjuiipcebbq
privacy-handbuch.i2p,3cccw3cxxghkalgichofulid36ekwplv3stubvfot522mwxcnu5q
privatebin.i2p,e7qy5kc7ivqtnrbdn5ymx5nmbdedlrjkdchqmmkhud4ockrime5a
privetalena.i2p,alenabivbkqo2xoikterpsc3gquqzacxfef6usbifrez5ioegjjq
privex.i2p,omgulpderyhggjbaksgcccvjk76yvbp5rsnm4uos2mqfe5iv765q
programthink.i2p,programygfltn24q6foacm5gbuo3z2geub2k2k366llx3bph4ula
project-future.i2p,ivqynpfwxzl746gxf376lxqvgktql2lqshzwnwjk2twut6xq7xta
projectmayhem2012-086.i2p,ehkjj4ptsagxlo27wpv4a5dk4zxqf4kg4p6fh35xrlz4y6mhe4eq
proof-of-loss.i2p,ofhehzoj5p4khpkookxb63tmqvrmcxaapgb3v3nm7kd5wjgebs4a
prophetgram.i2p,cufuwm75gjpt3svl4wjmo6r4zjv6eqyjdpiuqfckgb5aqqdbgyvq
psv.i2p,pmzcuml2oi2ok2h5i6cepcyxxjrughzgliai6hzspdlyt2bucy7a
psy.i2p,s3elzoj3wo6v6wqu5ehd56vevpz2vrhhjc5m6mxoazicrl43y62q
psychonaut.i2p,laf5nvzn4wz7ndgtdysmhvebpyjo3fkth7i4z4c2kp7su3wi6e2a
psyco.i2p,eoilbrgyaiikxzdtmk2zeoalteupjrvcu3ui23p4wvfqo25bb73q
pt.i2p,umbkgg3nhvgunyiwo2odfo3ufbdijb2ofg5eha6nyd4ymp4yitna
pubsub.i2p,kse52thhz4srsf2ibw7zj6ua27df5a2u5gnqgf5jxwvranbw6mpa
pull.git.repo.i2p,3so7htzxzz6h46qvjm3fbd735zl3lrblerlj2xxybhobublcv67q
purokishi.i2p,ia55kcrvskaitnxegirubvderl4vhva6bwkiducbkma4scy2rhca
purplechan.i2p,tyiwxpgs7syjvz3cha3uckaxgondtiktlsvriebyy4qmzgbaj3gq
push.git.repo.i2p,jef4g5vxnqybm4zpouum3lzbl6ti6456q57nbyj5kfyldkempm3a
pvsur.i2p,pvsurxi2hz2n45kfrj5b3ny6ko4ipj2u2piftjen44npkpnbwh6q
qorg11.i2p,ivusryc5mfrroomm6s5no4badevf7djzlgzlwarce33no2bsyi3q
quest.idk.i2p,k6stkvw3jr6of4j5g3pu34jowfpl4k4jiqih3yozhcvinkok56aa
r4sas.i2p,2gafixvoztrndawkmhfxamci5lgd3urwnilxqmlo6ittu552cndq
raccoondad.i2p,utoagugf3imr6mpjsithhnpvvvyehsnebisovn6kqn4vma6va3ca
radio.arav.i2p,plkybcgxt4cdanot75cy3pbnqlbqcsrib2fmrpsnug4bqphqvfda
radio.idk.i2p,gqla6svl56uazumw2a56rzmvfmcr6fb57bm5kpbb6oibqi6o66gq
radio.nerds.i2p,tpbfxyluryodtfxdpwsfvw7fl35p5ezrjk3tlcv2atlmc4fl2ctq
radio.r4sas.i2p,cv72xsje5ihg6e24atitmhyk2cbml6eggi6b6fjfh2vgw62gdpla
radioliberty.i2p,libertyx5gywnmn4snrr2fborvugmthl2x5vf3rh43v3744kmpwa
radioplayer.i2p,5tmr7qghx5eecoyvi77rsy7fqxeoyqcdpvg5wasoitn6ywkyobbq
raklet.i2p,j3vnnihngp3ti2trktoxlyblltjn6gxscbmasb5zun5pdndkxkoq
ramble.i2p,smv3cryi3n7d5ll7xpvlhstubi5yj4dadeltyrdwdr4onwd2jvvq
rambler.i2p,czptodzrdjjzff6jukipd2xv3pdjfg3gv53m6bsaoaab5fyr7zmq
ransack.i2p,mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq
realsite.i2p,ffacpzudiclaqh6fkck7ungeacfoafvijduhmwvnmp6e4jridhta
rebel.i2p,nch2arl45crkyk6bklyk2hrdwjf5nztyxdtoshy6llhwqgxho5jq
redzara.i2p,ty7bt62rw5ryvk44dd3v5sua6c7wnbpxxqb6v4dohajmwmezi7va
recipebook.bentasker.i2p,ajagzagm5uyc2oac32ycx42znnatejliqorbk3y66xt25guxnh2q
reg.i2p,shx5vqsw7usdaunyzr2qmes2fq37oumybpudrd4jjj4e4vk4uusa
reg.rus.i2p,k2r2wda4eavt4hoq5hptprqfmixusirq3gi5bl3z2pqzcd6felwa
reichsmarket.i2p,2uj4xomizi75swws7q5icmnavekb2w2ws2wlcqtyltde7pgymraq
reloaded.i2p,wxbh2yq5twqinsw3ztjogqovvdd6h6j5uxeg3lh53x4w7klzv3tq
repo.i2p,uxe3lqueuuyklel23sf5h25zwgqgjwsofrqchhnptd5y6pedzbxa
repo.i2pd.i2p,ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
repo.r4sas.i2p,ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
retrobbs-nntp.i2p,fkyzl24oxcxvjzkx74t3533x7qjketzmvzk6bwn3d6hj5t7hlw6q
retrobbs.i2p,mnn77stihntxdoade3ca2vcf456w6vhhvdsfepdvq5qggikvprxq
retrobbs2.i2p,ejff7jtyaus37slkwgeqrrcmyhpj26carp7n27f5h6s5vlbeiy6q
rfocke.i2p,pphesm2icsbqi7uzsmxpgyy4kc22b3cdpb4uwplkkjmupexva7dq
ricycal.i2p,tfkz7rgqh6rwvlo2veftw4why2dej3gztiglzfqfvykyzak2syxa
rideronthestorm.i2p,xrdc2qc7quhumhglpbcuiqxr42nuffv4xj4a73jbr4ygepitibqq
rpi.i2p,56p5qxsrvo5ereibevetw2qbj5bronmos7wxunku27g2s4kpbnlq
rslight.i2p,bitag46q3465nylvzuikfwjcj7ewi4gjkjtvuxhn73f6vsxffyiq
rss.i2p,j7qbshtyaxwiuzkshduwqqq35ctb4cnfjvd2pnbjn3ugmblemsza
rsync.anonroms.i2p,4q6llvjjpgncu6wbol2rqq24ksrtscu5njj65jjovqlsxounxbdq
ru.i2p,m7fqktjgtmsb3x7bvfrdx4tf7htnhytnz5qi2ujjcnph33u3hnja
rufurus.i2p,7msryymfdta3ssyz34qur6gi4jyfkvca5iyfmnceviipwu7g2wca
rus.i2p,gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga
rvklein.i2p,pzbqr2s25zpgbwiz22nc7hzxlusqxwhpxrsmln63y6fd45whnjcq
sdmr.i2p,o2vtbbcddamtqqomtf7wbkzzkh2xovt23lc6np7qtxbuv6vtul6q
searx.heckyel.i2p,bbttsspdeozbfvmjm3ewnbwpot2fkhhk63w54ytptbyokazkydea
secure.thetinhat.i2p,4q3qyzgz3ub5npbmt3vqqege5lg4zy62rhbgage4lpvnujwfpala
rus.azathabar.i2p,6gp6ykan6ovr7p6dln56msvmdk6nrtvzoypz5dbhkkt4bdnryjna
rutor.i2p,rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
ryona.i2p,mzt45ux3budteuxz2b4xkwnphgspgljuwp3rxm3d2yr2sij6wopq
s01.nullchan.i2p,mirrooeo34iokdgf3wno4ubx6x6uj7f2pqyjmmrvtg4m4parvguq
salama.i2p,4uoef63gv2sg6dtqmom5oypt6taypklekvlejfox56eiylprzrmq
samainu.i2p,zlwgylqmlx6wxwnxf3mx64jl6yp6wv4sjeiidqw7k3n2wh2m46pa
satoshivision.i2p,rn5c533w5baghskquu3gtqlehwjkstzzbk5chbc5qhivsz3a3nqq
scamdemia.i2p,fdkiv7o4kzaikwkw6hbn7iedidp25lv6eo7yeyeqxai3jz7mrvzq
scanner.linuxfarm.i2p,kojzsg33v2zxwqp3twpqzfvflaeoxgzxrl3douf2x7xv27ggfnaa
secret-site.i2p,p6hbhjgdv2e6gyydrqh2ztl6onxnyilmj4ts7d7aj3uqssr7vvfq
securityinabox.i2p,np3agu3ekd3isrzqzvsw4llwlr3hg5xbw7n7a23n2zfvhhm4e7iq
serien.i2p,3z5k3anbbk32thinvwcy4g5al7dmb75fagcm3zgh4rzrt3maphda
sftp.anonroms.i2p,uozfd7ttkhjsofmgs7lfcy4pgngs4yp7kvnbhnppebjumgbjhjla
seven.i2p,anqf44jmf7kby2qcvcx7gug6nuyansdu4msdbnp5kojom27rrm7a
shadowwiki.i2p,63gxkfc4hlcbxrdoepw2i2hyxai5qkxmi636ag3y7sf5tq3imoya
share-les-miquelots.i2p,uxwha4jswnt6jrznj7yhfwldfilvyasnjruimmbylbvq5qykpbpq
sharefile.i2p,o7jgnp7bubzdn7mxfqmghn3lzsjtpgkbnpjjsn6ddevqbchz3rta
shoieq3.i2p,3fjk4nfk3mccch4hdreghnyijcvovsi3yucjz3qzj5sxngqk5j6q
shota.i2p,75xxnc5hkeg7a3z5re4cpybbxt7te3p2krgrrgoka4hib2nr7k4q
silkr0adrel0aded.i2p,rdqt2xxpsc5tzj7gjvcrpi7jea5gtbetgx7w2npobveg5teatdvq
silkroadreloaded.i2p,hyn3mwmyeovcn2paujxur2eury2ufqpoahvbbqshfoggljn25tra
skank.i2p,qiii4iqrj3fwv4ucaji2oykcvsob75jviycv3ghw7dhzxg2kq53q
smtp.postman.i2p,3nrunsrgeo6grhx6y6vsx7vibm5vabtockdbys3sqdmj6vha7k5q
solr.chudo.i2p,utl2ds5vztfomjgerohvxrgaq3g6zrspyku4s35knfmu4rihhgxq
snippets.bentasker.i2p,vgduvgxudaceslvwlvtda6b4csobvczygcqpklm3yeuke2zgvcaa
speed-test.i2p,7lk5mgyi2knhqjjwjeiiuwlrn2rs2s577e7jh7z5rmbe2s6qkjpq
spirech.i2p,labhopl3kd3eo7cj7kqa6nkwpczc2qj52i37jky77ugqazy7dmna
spoika.i2p,u7uyxhgikc5ifj73oz6yedpy5pvtynbqo3n7rk5qyy5h5yhz4wbq
sportloto.i2p,sportloto4cqlq6uhzzvgsgd7rcsfu6mqtk7wp6zmzqwcpflbsdq
spyware.i2p,36j7itgqmnbinh3ortujakkvqdrbhlqu4b2qcwb46mue3dpzxqfq
srr.i2p,t6vdyn5sbtorn3bp6i7ndnv4lmxhk4qnqmyqlaxykdhcwatchlza
ssh.vimarsha.i2p,zttfrujqde5ddndps4stdspvro3khawdhcdgf73pae4i7dnvv4ea
stats.i2p,kqypgjpjwrphnzebod5ev3ts2vtii6e5tntrg4rnfijqc7rypldq
status.str4d.i2p,ycyyjo3psqbo45nuz243xvgvwnmzlanzqbzxv3kh6gyjztv7425q
streams.darkrealm.i2p,ud3gcmvysjch4lbjr2khmhqpf7r2x5if4q43xkqdptl4k7lc4muq
svong.i2p,wlamzgxjc4k67fn2c2pdems2dzfq3hkdbbt3n7ela7p2wp3pew6a
support.i2p,supportpwqa4cc7q43hb67tgd3dvntrwsy6725iufahm7kiluysq
support.torproject.i2p,6r7j6jlbrxb35k32zktopvr3w3pidm2baymwol33hq7xmy2sqm3a
syndie-project.i2p,xa63tpfoaqt3zru2ehxjjfbpadwj4ha6qsdvtcqtyr3b7hmt4iaq
syndie.echelon.i2p,vwrl2qmcif722fdkn3ldxcgz76df5cq4qypbndzthxwgmykyewta
tabak.i2p,y5o2vwb6kart7ivpnbpk4yte3i7kf2dsx7fy3i6w7htqtxhmbzia
t-ru.i2p,bkhuehxydyprxpd4372h4boyluardjogyuff5p5l3u7syguavz5a
tahoeserve.i2p,yhs7tsjeznxdenmdho5gjmk755wtredfzipb5t272oi5otipfkoa
tails.i2p,5d7sl23h4uer4czjdtlomkb6ykeiss6vqkxzausp6f6gmty2plaa
takipsizad.i2p,ufkhvmacngokfufxinfkdvfmbpvwvog5vrjiavw5zv32jnekcxia
talk.community.i2p,talkakxfa6ihzn2mbzar6q5chdtkpnjp633w3tarul2bb6tfmoua
talks.i2p,v45dmrrbjg3ucrazgl3t2tktyjajo7gvfexhmbdos3pi5kfuocaa
teddit.i2p,k62ptris7p72aborr4zoanee7xai6wguucveptwgxs5vbgt7qzpq
telegram.i2p,i6jow7hymogz2s42xq62gqgej2zdm4xtnmpc6vjcwktdxpdoupja
term99.linuxfarm.i2p,dg3mso5klqqgcngalxdh5yvkwv56ou7yotsqxw3twneojytiehra
tesla.i2p,em2x6bwsbelqfvlgypcywwoov2rib7mvxiy775dmpfs76m4zcdtq
testbox.i2p,voa7ebdulhpcsupz4zqeyikdjztyhiutgvyri4qxqapistjwptbq
testmk16de.bandura.i2p,gbdgvcv6wkwctls3tdx4ljmzo4zry3awrr37rkvrxcwg7jzjoyra
textboard.i2p,7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua
texterochtankar.i2p,woqimbz4v2synkwyif65izfz2t4gbfbqjrai2ic5ok5qhnvmfszq
testshark.i2p,u64ropzplqkncdmi4wcknqehjqudxb6elyut2k44ocvgx7ilpgia
thealiensarehere.i2p,6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
theyosh.i2p,5m7ygxhcdyfa3kx3wfjbbunk4pjey7a5zr5lnfb3upgjbhanrita
thinking-wiki.i2p,feuemwevbvwpnyefpkpet2ign7wvnjww6dhhzis6tobkfh7ybxsq
thornworld.i2p,vinz4ygmodxarocntyjlfwk2wjpvzndlf4hxss2w2t3fk52oplva
tmp.heckyel.i2p,v67szhqv7r2hm65lk7s2r4aqchswtfanove2p3ca746dg7nqwvoa
tome.i2p,qktkxwawgixrm5lzofnj5n24zspbnzxy4pvjm7uvaxvmgwrsuvgq
torrents.chudo.i2p,5ooemze55xiicrlvzjmz3il23dpo4fz5iqr7hmzrygdepan5m3lq
tosios.idk.i2p,4mfy2ggcynt5xjkrdstwju2cqicayq7tg5bcb6o575wvab2div7a
tictactoe.i2p,cbr6sya637smfifq2hxj3kzqw5yv7aws2uknmi6ln45r65xej4aa
tmpsend.i2p,r2al7m32cg2ypjcny627wkoiyanrasmorub2wqla3y6gn6rwzzvq
tomasgl.i2p,tyiu7xok7hvzymxtgg62rjz7mvzr3bryq4i7ii7gudncogn2lpfa
torch.i2p,vdpmmcq4ysca5rdczr5lqohjtaf5togdy5itoos54s6nn6xqox3a
torproject.i2p,torprojaxvxevo4c5qvor3ywgasxkubs5ukazrpq3qcxed6lgbrq
torque.i2p,hc3mefp6cq2btwmmjl76atgtftzswu774dyv4a3qkl34wn4g6vta
trac.i2p2.i2p,i43xzkihpdq34f2jlmtgiyyay5quafg5rebog7tk7xil2c6kbyoa
tracker.chudo.i2p,swhb5i7wcjcohmus3gbt3w6du6pmvl3isdvxvepuhdxxkfbzao6q
tracker.lodikon.i2p,q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
tracker.sartorius.i2p,a5ijwlahghzstkkb2dr6kxnhlaasoot4gjkl2sx5f7ecudhjdf3a
tracker2.lodikon.i2p,q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
tracker2.postman.i2p,6a4kxkg5wp33p25qqhgwl6sj4yh4xuf5b3p3qldwgclebchm3eea
traditio.i2p,wkpjjloylf6jopu2itgpktr45t2xvpjijxilxd5tq4i7wkqgwhhq
triplechan.i2p,blrplscno3ecqb5ihhg73kufmypydjlv4r4gqiajftup5wmcdwna
trypanom.i2p,tgv5acj4khwvr6t44cmryohybd2e5o2kndysnzae6qwcr4hzda3q
translate.idk.i2p,g2l2zr4moqsk2bec346i5tfd2o22cozm5b2k4ifdhbcayazoz2ea
ts.i2p,nebcjgfx3f7q4wzihqmguwcdeopaf7f6wyk2dojw4bcuku472zxq
tube.i2p,vipzc556nzjraiqsk5xwvyhz54fvtqt3vrepdarat3zsj4a6eypq
tumbach.i2p,u6pciacxnpbsq7nwc3tgutywochfd6aysgayijr7jxzoysgxklvq
tutorials.i2p,zy37tq6ynucp3ufoyeegswqjaeofmj57cpm5ecd7nbanh2h6f2ja
tv.i2p,znccrkhtgz4wqceyofwsqdsraqhdtteqzrag53lgmp6rhkutuy6q
uk.i2p,vydbychnep3mzkzhg43ptewp242issy47whamfbxodc4ma6wc63a
unodice.i2p,fukkqcornjsfn2ggd2h4cgeitu4dbin7hymp5xf6zypwzif2pcoq
w.i2p,j2xorlcb3qxubnthzqu7lt4fvxqn63it4ikwmze55yjkzeeampuq
wallet.gostcoin.i2p,reuvum7lgetglafn72chypesvto773oy53zumagrpigkckybrwda
txtcon.i2p,txtcons5lrayl7bq7zsk2mt24clocassid3kh2rvyd3rd2xeklpq
tymcz.i2p,pyog2x6v3eyna5pdr765osut52tpbmaheyi5atbqfaixmcq4dp7q
ukrainews.i2p,2bocbwrmakg252kicblp5i42feao7qpcw3xppms2i5oevkgelpsa
umbra.i2p,xunb4chkeo5xxpfkwrkaqb5etmqpp4ddgvcmy7qkvtxhk5ihck2q
unqueued.i2p,3gvn4kwd7z74jxc2sn4ucx52dpvpscxbzjluux3ul4t3eu5g64xq
upload.arav.i2p,a5txjx3gjrnw6do4zr66wpwlayxt3dg7kb43wbr3fjp53mkfkbdq
vanity-eth.i2p,6djvwwd3mtozyqhpuyvcwqkje5fk3rbxqbgqgdlr32b6hvdqeq5a
varikvalefor.i2p,yn7ovvjf4nhf7hhk6qqph7utcoce4f2j325rfeuyapw3emlqfqna
vimarsha.i2p,ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
vps.webhosting.i2p,kfqflh2y36jzp26vloaptqpgwtvw4qtz232wv53xxbggkydhpkaq
walker.i2p,5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
wbnet.i2p,2deeocx7jmrbmjxcpkxecw7yy2z7ybzwz5i6mg3ska3p3d2dx45q
web.telegram.i2p,re6cgwg2yrkgaixlqvt5ufajbb3w42fsldlq7k5brpvnd5gp6x5a
webcam.i2p,fhrkpj4iscrg6etgdlteseoed37q2ph7cizclgpabgcbnaq6g24a
webhosting.i2p,hxqjbkpn5fxnmurlab6oluyqf3dd2xnxszeawn4ak2s4rpjnfheq
webirc.coldhell.i2p,k2d6bius63w3g35j32dn66fssqwbnyvegx6w6pl5mdeojpp4rjba
wiki.i2p-projekt.i2p,b2rpg7xtzwwfvtorfkrc3m7h222qbobnklra7g4oqhfjx64k2voa
wiki.ilita.i2p,r233yskmowqe4od4he4b37wydr5fqzvj3z77v5fdei2etp2kg34a
wikiless.i2p,x33lx4h6d7h6xs4eiqwhvaxn3ea5gn2ifmu3jobnvuvn4k4aej7a
wikimirror.i2p,2bhh73qhuwjkznnnzjfgo4buo7xy5l4ubhzt3oh23adksscx6gmq
wlm.i2p,nigg3rveztrkpzoimq4z46pvbtml27mfhadt7n5bvl3pzzyzefxa
woah.i2p,yh2eixirhlhvp7exrtalcwgeirg3fxi2vnumsbp7w6tily5oiwwq
wopen.i2p,xvedtnzz3kpwpir23zyr3exrhkrn3267harw7gcjvp25yceyokza
www.i2p2.i2p,rjxwbsw4zjhv4zsplma6jmf5nr24e4ymvvbycd3swgiinbvg7oga
www.imule.i2p,657xcllunctawyjtar5kgh3wpt6z4l7ba6mmam5rf7hev5w2lsvq
worcester.i2p,5jtgpuzaabxyhahvbmokb3oeh2lwzpiiqlrg3w7kyyg63lzkwabq
wordle.i2p,games3kuxvadv3y6tfowiynk2cnbuokrn2guvhkigqulmrvfnyla
www.infoserver.i2p,fq7xhxkdcauhwn4loufcadiiy24zbei25elnup33a3gfrdzrtlyq
xadmpp.i2p,jb67tnpn67i3pwcuf45rtwu7gq6nkrs72iznhnakpkdzb6dkgfmq
xd.i2p,jynrjzdp5qajf2jsdif6bgpijuk72zmuiohq3o7omeksw4pdgejq
xeha.i2p,oartgetziabrdemxctowp7bbeggc7ktmj7tr4qgk5y5jcz4prbtq
xmpp.chudo.i2p,gppd6rx5jkutmt637odkbxh4tjqxy63i4amyhllqn424yt7pd2hq
xinku.i2p,xlsmgjin444ccqu7ff5taoov7hecasdyg53keatpbr2qrvgmzvuq
xmpp.ilita.i2p,2dpg43zlfophx5jo4xeqc6cx3zm4x3tfdoinbfuzychf5lwn3dhq
xmpp.pubsub.i2p,yxbp3sn2x5t6k7hcxsg4njmaxjomr2wvh4xeldxjlij3ms3sikgq
xmpp.reloaded.i2p,hioylmlm3lf3qgp2ncmym3igx6eyytlwioeq2fip4cwpzjtyxfuq
xmpp.rpi.i2p,3yv65pfwiwfuv4ciwtx34clqps6o2mc3vtyltcbqdkcki6untbca
xmpp.xadmpp.i2p,s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
xmpp2.reloaded.i2p,ufeplugqot5e22kottvejlw7yq24kynw5v5faulehc6n2zs62ura
xmrnode.i2p,moneroti7lckp4hjrqckoq5cfi2apuyxia42sp5x7tkbzjfwqfiq
xmrradio.i2p,olwxvhwaq422rcrlmvh6wgrdczyfyeag645du4cwncutqblkfmaq
xn--80ahmijpip2p.i2p,assist2a3jsikp7ufmzpa56mlflhi5kmoack5dm6ua5x2hbgckua
xn--hallchen-q4a.i2p,h5c4idxoweambtqajx3ecpu4iw425mfzckb4rrcvftrr7d2utfgq
xn--n3h.i2p,6a5bfeil667ksrdgg5hx5x2dse2v6ovnsng3r2k5gp5tb4z67egq
xotc.i2p,gqgvzum3xdgtaahkjfw3layb33vjrucmw5btyhrppm463cz3c5oq
xn--r2beng6b4e.i2p,ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
xsden.i2p,4dofwhzlkz3k3sedwzs2sx2fudq3jfvaygffc6kp6hsawmfmz6qa
xx.i2p,a7hrmb4kbftyk4ovr2la6azi7vjfqwt2zlckos4svoaclqu52j6a
yacy.idk.i2p,7ccyylqqxnyexz2acn3nqjdlwqmd5pororbovrarar2dkw3ddrbq
yellowonion.i2p,7l4kgsyatdmntck22i27oui3llftjim33ydav7kdew6ewfqvjzfa
yggdrasil.acetone.i2p,tlfhgwzn4v5nlm2or5uy4leqmjbl5bncgcopbqnmcr4hbk3zrvqq
yoitsu.i2p,yaaqmj55lsi5c5nukf4hsrift2zslnqkbcghwvjlaqayidtyctwa
ytlibre.heckyel.i2p,lfrh5ionyyqcqktuhtcnt3tshmvfwh2j5dldntiahxt7xe7xnojq
yggdrasil.i2p,7hhvvtephitji3ibz4vhbapj4rikoppd5324yttp6k35gkqgri3q
yggnet.i2p,deyg5puthy6tc44j56ee2zxv3wu36vlmgxjyz2zoc63w66l5ksua
yourdomain.i2p,witqoik7gjzywta5nss5m6dvialeciismabksrukcvpfdpe6aqha
yt2mp3.i2p,7ai77u54gxta2ry326amfq4ugiqgcxd4r663nmxtswcwezyxsbzq
zab.i2p,n4xen5sohufgjhv327ex4qra77f4tpqohlcyoa3atoboknzqazeq
zeronet.i2p,fe6pk5sibhkr64veqxkfochdfptehyxrrbs3edwjs5ckjbjn4bna
zog.i2p,7su4pwd7xicqu44rd36g2a3zjlsv2k6otommnh7ztjpyixyozq2a
znc.str4d.i2p,ufkajv3stxpxlwgwwb2ae6oixdjircnbwog77qxpxv7nt67rpcxq
zx.i2p,4ru5b25ixgz2wt2aqskbr2iflv42gt6ta6qet7rv4et5rh2kq6fq
zzz.i2p,lhbd7ojcaiofbfku7ixh47qj537g572zmhdc4oilvugzxdpdghua
1 0gitnick.i2p 0xff.i2p xpw6ynhbxxuqsr6spcnfiyvuhvimm3jg7uti2oqv3jlh76j532oa apo53zid3xe7rewxjw7whdym2rmyowsj7jeoiwrl5zlmf7oqrxwq
2 0pl.i2p 0xpaste.i2p gd7qe2pu2jwqabz4zcf3wwablrzym7p6qswczoapkm5oa5ouuaua oyfcxkrmrnaplu24aobv7s36hm3vyxszlbees4hl6kpk6izwa5da
3 102chan.i2p 111.i2p xxu3lso4h2rh6wmrxiou3ax7r7la7x6dhoepnku3jvrlwp35pefq s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
2ch.i2p suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq
2channel.i2p wirxk4kulmd7v6qmttltnu5nx2vtchzvrg7ewocejrvdjcaiv5sq
4 333.i2p 333.i2p ctvfe2fimcsdfxmzmd42brnbf7ceenwrbroyjx3wzah5eudjyyza ctvfe2fimcsdfxmzmd42brnbf7ceenwrbroyjx3wzah5eudjyyza
5 600chan.i2p CrustyIRC.i2p ncogytpxyaqnu5au4yc6oeiiaidhjcxfsr6cyebcsfki2p3ih7ea 4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
6 7i3.i2p aaoth.i2p y4gh4ocvlsxnyjgqbdlqb6eeff4a4e62wbzuewd3ralagyopzb4q aaoth5tidbhizgerysxlfrqmg5t7jzb76zt6lattwjj3up524qwa
aaa.i2p zzhy7rumzzgxzodvgu4xz324nekbbccphegweukj4cm6nrbpg4oa
7 abdlandrubbernetwork.i2p abdlandrubbernetwork.i2p asnpognglrcx34l5vywatfkoaashziedfylun4w6cf5wue5gujca asnpognglrcx34l5vywatfkoaashziedfylun4w6cf5wue5gujca
8 acetone.i2p acetone.i2p tzwfy3dnqtm4wuofmcp3gcb5qjcytri635ei7kw7yrl6n3ul5n2a tzwfy3dnqtm4wuofmcp3gcb5qjcytri635ei7kw7yrl6n3ul5n2a
9 agoradesk.i2p agentoocat.i2p ztqnvu7c35jyoqmfjyymqggjpyky6z3tlgewk2qgbgcmcyl4ecta voanmdeayaccgaxumtehvxxiv4sdscsixoxsqmhh7nfwhusrvfaa
10 albatcats.i2p algorithm.i2p ilgg7nbtofvgzrpl6kenxugfdsgi3apu6sgilmqi5rhpolnauyga algout6clo74ywqtjyemehnf4bzhegpju5yvi6zdcfszso7iirka
11 aliensarehere.i2p 6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
12 alphabay.i2p tnaefzkcnhryeusi7hdpqujqiqmnbtah3dmjcg3gvezohunjuxbq
13 amogus.i2p udcjqqoo7mc54ephxnhzaxdwtqxsgxjzvh4wr4boope6vyr4mrhq
14 animal.i2p animal.i2p 5iedafy32swqq4t2wcmjb4fvg3onscng7ct7wb237jkvrclaftla 5iedafy32swqq4t2wcmjb4fvg3onscng7ct7wb237jkvrclaftla
anongw.i2p owrnciwubb3f3dctvlmnaknb6tjdxtlzvv7klocb45mmhievdjhq
anonroms.i2p w2sgx2i5n4uxtqjgekckxnhhpymigpn5lmgdaujyzib6sxq7j4cq
15 anonyradio.i2p anonyradio.i2p cbobsax3rhoyjbk7ii2nd2fnl5bxh3x7bbearokyxgvmudn7o5bq cbobsax3rhoyjbk7ii2nd2fnl5bxh3x7bbearokyxgvmudn7o5bq
16 anothermusic.i2p p5mhrtnjfyonumqjzkzxakxais4fjtjgappvoioztqehaii4smpq
17 apophis.i2p aybax36xssplylkueyy3szi3n2spd7mgxcmzbawapg3vxznwlkda
18 apt.idk.i2p apt.idk.i2p s7qemnncvmy5zs3khd6qzlcnsvtu6drnkeae4r3yyc7akuzuqiia s7qemnncvmy5zs3khd6qzlcnsvtu6drnkeae4r3yyc7akuzuqiia
19 aqua.i2p xqwrqfuoae43grkmzs63sw5upathbjerid3ch4bhskle3bibeqba
20 arav.i2p t42fkp6zp5dfqywantq3zp427ig3q2onrmfv246tyaztpg4ckb5a
21 archaicbinarybbs.i2p archaicbinarybbs.i2p t7o2tw36cffedgfr6kahewpkrntofnliuapji2e4rucl3os55epa t7o2tw36cffedgfr6kahewpkrntofnliuapji2e4rucl3os55epa
22 archiv.tutorials.i2p archiv.tutorials.i2p lldr2miowq6353fxy44pnxfk37d6yn2f6kaivzecbmvvnnf5exyq lldr2miowq6353fxy44pnxfk37d6yn2f6kaivzecbmvvnnf5exyq
23 archlinux.i2p archlinux.i2p 5ms4k3cn5dx53b46hqgwogigsjhtinuf4g6fdr6pplkldi5vjcxa 5ms4k3cn5dx53b46hqgwogigsjhtinuf4g6fdr6pplkldi5vjcxa
24 ardor-wallet.i2p azathabar.i2p tm23k5ny3umhf6vf3kghnnwacli5zywq5wrr3xcqowbcofuyr4gq v35rwae5zb6fcgd7phzkireghtuen43umi7l5yvahm7ezkqg5uwq
arf.i2p o46lsq4u7udxg3qqlidrmpj4lb4nr7ldxmbb2x53nftndaeyxqeq
25 bandura-yacy.i2p bandura-yacy.i2p e4t4yer7o6dbttk4xmpsfd56vhuse5upksgjqejnrvrdz35ia2qq e4t4yer7o6dbttk4xmpsfd56vhuse5upksgjqejnrvrdz35ia2qq
26 bandura.i2p bandura.i2p n6eqyu6glmtgt544ys43ggrozhpiw7biyrelrvmkmg7llfcjwm4a n6eqyu6glmtgt544ys43ggrozhpiw7biyrelrvmkmg7llfcjwm4a
27 bbs.i2p bellingcat.i2p 7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua nk6hd2mzzoieui22xzcdiz7i2irp7gel3qscwanuqzstkdxqxp3a
28 ben.i2p bentasker.i2p kaqe5l6s2hojtgaaoinn4ucktnc4ixvneldy32ft7zdokncc73sa gdncgijky3xvocpkq6xqk5uda4vsnvzuk7ke7jrvxnvyjwkq35iq
29 bible4u.i2p bible4u.i2p xs6lr2g5jiaajtb3nkno2zmy34eipitrggooxb7wtey7uko7bqmq xs6lr2g5jiaajtb3nkno2zmy34eipitrggooxb7wtey7uko7bqmq
30 bitlox.i2p bitchan.i2p lqw5khxcdntlv3u4vhn53upcqirplvnc4etjlmoytrzs66ytettq waycuw2c27ruakfblkf5tcegwmt3ot445dlfoypil6bzmm4yxg7a
31 black.i2p blackexchange.i2p sjwueu62qpe6dtv5b322k3f23fl4uz3w6qe6wcrwauiwpnymypfq ztgr5kghkyn43fhhkuycroxgfti6cojo3vg4wdd3usqonyvrla5q
32 blackgnu.i2p hskxmtmwqnmq7pnxzntlwt36ew4nuqzmwhzbqjo233ncfoaj7mpa
33 blawg.i2p uq5hbw7bplczde3pbugbxnvtqbjjdba6wfggpvbmaghuwoulputq
34 blog.raccoondad.i2p ouc5i7xknchig3qdtkoydoeg2oqe354roxkjrrwzuzjcqr4xpvna
35 blog.tinlans.i2p blog.tinlans.i2p ylkch2nkrwehakx4z6wiyjbeqwlgasknukdkex6r6yq4xusrjnda ylkch2nkrwehakx4z6wiyjbeqwlgasknukdkex6r6yq4xusrjnda
36 blog.torproject.i2p woelslt2oh4dn5wlxfmpjggyyu6l7ntgk3rngrooldn57x4kduma
37 bobross.i2p 54y7lkvndr3fa4c4fw6e5udfx37dkrh4wbdjvxbwapertwz2vtqq
38 boerse.i2p boerse.i2p 7633w56hd53sesr6b532r5qlbdnvyl5bnvama6ign6xryaxol4rq 7633w56hd53sesr6b532r5qlbdnvyl5bnvama6ign6xryaxol4rq
39 bofh.i2p bofh.i2p auvuinzogu6gc4pwsgbjijuszxgcjygciu2wy53pfz7mo5nfpc5a auvuinzogu6gc4pwsgbjijuszxgcjygciu2wy53pfz7mo5nfpc5a
40 bonobonet.acetone.i2p bonobonet.acetone.i2p keihicq2fcfooqvdqtufjpigg3ge5mw5mjdpdnxy5utazrqkcnxa keihicq2fcfooqvdqtufjpigg3ge5mw5mjdpdnxy5utazrqkcnxa
41 boran.i2p bote.i2p boranyzcefxqw2ktndemy3npt4zhetpp6edldtlym2ap7n5azt5a bhjhc3lsdqzoyhxwzyrd63kvyg4br6n2337d74blyintae66mr2a
boxs.i2p owm3fy2t5vwbxowk5gsshihkwjfknqq7y4ylbeyhvzta7r3ybrpq
42 braindead.i2p braindead.i2p braindsku6jnpmnaats2cu2qzax4pga6dwhx436kxanpxgx2pcyq braindsku6jnpmnaats2cu2qzax4pga6dwhx436kxanpxgx2pcyq
43 burntout.i2p brick.i2p lkep3fd7tjvxrs25crr2c3jy7xm4s7bqiua5r327zgpw37sgyerq lfeip77mf2j75izalrenv2aft5h3mfwauqqu3nqdmoq5ldwwsvga
44 bridges.torproject.i2p 2tiwhibsjvys63t43xncar6y52dy3dpct6edglenhzlalmyirb2a
45 bublik.i2p npx6e6trk37ovoxzk3j3yoh5huenh24avbmsgeroiejkuzb2vo6q
46 bugfuzz.i2p ubszn4gsf22vga67rvzzlg4qj2bfcq6o52fmxz46xruawqm6z7rq
47 bunkerfiles.i2p lyrhscn2hfe6mjn7jo3titioitfzcy7x23hhkksydin6ildsgxiq
48 bunkerirc.i2p mdt7h4zsbwafsikg3r4iiqh5wriaisznjj5d3f3lyeahipudsxoq
49 bunkertreffinfo.i2p ow4q3pdfdwofiqb4btopg5ou734w32k3z4hoiinsezg5zkzdlq6a
50 bytepay.i2p 7amc4ztwkzu3cgsaaaw3223ohuihn5hlsqc6gpf2rxdyptdkyugq
51 ca.i2pd.i2p ca.i2pd.i2p u5safmawcxj5vlrdtqrsqbsndkr5cfenpicgg5euu4xqm73yicba u5safmawcxj5vlrdtqrsqbsndkr5cfenpicgg5euu4xqm73yicba
52 cathugger.i2p cake.i2p vq43xjjcnejqpzfprws5qzrea2siieshu4tglpdepql2w3w3bpba hpdbe6o6qqqqvgygbcznssat46kybsm7rcauofqaoly4ajdi2jeq
53 calculator.i2p itj23yb325dma24i4qpnhuwrz26hzpps6izkaf3mowavtvoznnva
54 cantonese.i2p 3r3d43jejiezwb6daqgtk23ccs4jm3bvkhxwwwnpymvjn2aymriq
55 carvet.i2p r5ukmkit6n3ztitar6clfc6te3o3235ys4jdbiugnkvzmfurxbnq
56 cbs.i2p cbs.i2p u3lp7wazvq6opodzwjg5sc5w5kwxehmxd4wcdpt4s4j2k4dx4apq u3lp7wazvq6opodzwjg5sc5w5kwxehmxd4wcdpt4s4j2k4dx4apq
57 chudo.i2p chaox.i2p iaublzhzc4ssa3rcrjbdigautm66mslt6g2sninugagiarl4at3q 6bcqgkedaq2krrhvidjlmdsoltmzuwaqtrafycfzbc56h5swumoq
58 ci.idk.i2p cheapeth.i2p antkos5hjxraxduyewoo4qwwr6vyceiggd562nctvmtpnfjsuqlq x6pq4h33wu6txj6vvpgywrgew2y6cwzs5l63w726paqsvogeqdra
59 closedshop.i2p chmok.i2p 6fg67mbw2okopzyonsck4bsy3cy7l2fame56uiysr2cezhjhzdbq w7eqh6nndwk4yr5vxtbnvizgsg776vamwingijetnnqojrzjxm3q
60 cobalt.idk.i2p chungus.i2p m63cbwomq4e4q6df3n6idnuveqa4yastxnls6kacseuutrp5um4q ot7kljg7js4iedtsxl7es4wnynvxxyyaravier2dqkxmr7wsdzxa
61 cipherlist.i2p gbm4kiotqjqmklwsp3qibdtn7mhatjsyeebbb5zxwjlp6w22fuga
62 citrus.i2p citrusogkieyk3hleilk5scb5a64jdzoogi5wjv35klrvmqsh5ma
63 cloaca.i2p pnsyl5plmmwuqfvpg36cbvvhe6mpoy2j5zzemfb5sfbpvklyozta
64 co.i2p 3mvo5eifcwplcsoubtvqkzdahwo2sdhfygfdde7lj2glybk4q22q
65 coffeejazz.i2p mrt55kugqimzxeittpwwjwznejs3b3zxcfht3hp6dlujetyqh5ua
66 coldhell.i2p coldhell.i2p z2kerfik5dzqd2kj74cuhhtptkrizsblc5nm6ke2gcnj5mnwgwja z2kerfik5dzqd2kj74cuhhtptkrizsblc5nm6ke2gcnj5mnwgwja
67 community.i2p community.i2p 64luakopnvffchxnibn3d2p7uqxixtyuallfqfgifkkcmfcrczxa 64luakopnvffchxnibn3d2p7uqxixtyuallfqfgifkkcmfcrczxa
68 community.torproject.i2p wmw22z5c24b35hlepzc2g6k3cpcg44rcg46qdwfo5heiplv7m4ca
69 contact.i2p rn5hqxierph4eegft3hiiqkgn2zyyfgj2c6pq75bkahl3pu5shvq
70 costeira.i2p costeira.i2p abhty5xlmnyab2kqdxcd56352kcescxoux3p6dbqdrghggyygnxa abhty5xlmnyab2kqdxcd56352kcescxoux3p6dbqdrghggyygnxa
71 crypto.i2p cyberchef.i2p vffax5jzewwv6pfim55hvhqyynafkygdalvzoqd74lkib3hla3ta 5k22kdukxkobertlyheal5aro32gls6nhgktneq3mtrracubt2bq
72 cs.i2p cyberia.i2p kzaeunogz6s75ptgy6ifjzwwy75xdfenenswvrczd7mewxgrad5a 3jrfzgnetbjwnyrua5jpyeqk7gb6dgfw3hu5q6lyggnwqhrury5q
73 d73.i2p darknetbible.i2p uf6madmg2fv7uo25cjnvzpimd6iflsrozyemuypleyz46mxbyreq lcaocuhvocje2gociyyuiip5sxhbgmkvaicbm6g6axtflf5wc6pa
74 darklibrary.i2p darknetdaily.i2p ynv2cgboxkpcyap6hqnbycgj4khyxppxuqjbidkdfhjifkzwdhfa gehxh3zlns3ezyuc35bszc42hdr4g5uzasexzyrqfxwcwkeiulia
75 darknetnow.i2p darknethub.i2p gkx3o5fy7mv7l4psqqnhp35d5iun7rt3soci6ylf3rgb7a5a655q tnh5bp4si7x47vhwk6njtimbbk77gai3abkfh2gz2dhml46uu3uq
darknut.i2p 2mk37gtvpk2i63o6vl7vna4dr46rqexxetupgn5efuuins7x3qya
76 darkrealm.i2p darkrealm.i2p gbh4eerxdsph7etxsxznfhvmuiz54trlkenakqep343u4xcoekzq gbh4eerxdsph7etxsxznfhvmuiz54trlkenakqep343u4xcoekzq
77 darktech.i2p nlkpudgmmgsdiemnbehq5llymdmxp6tn4rzjuse7nhvavr2kgkga
78 dashninja.i2p dashninja.i2p dzjzoefy7fx57h5xkdknikvfv3ckbxu2bx5wryn6taud343g2jma dzjzoefy7fx57h5xkdknikvfv3ckbxu2bx5wryn6taud343g2jma
79 datagrip.i2p ajreyxslv6lijap2hykp3uvnnsca6fyvax76u2w6n3vexngkif4a
80 dcherukhin.i2p dcherukhin.i2p qa4boq364ndjdgow4kadycr5vvch7hofzblcqangh3nobzvyew7a qa4boq364ndjdgow4kadycr5vvch7hofzblcqangh3nobzvyew7a
81 dead.i2p ddosecrets.i2p 7ko27dxvicr2sezvykkrfiktlghx5y5onup3f2bas5ipocy6ibvq vyhw7t7fbj7nghx3oe4y5komczeb5egnhuvlslpkqupaymnhtlka
82 deavmi.i2p deavmi.i2p t4cvvenniup6dcdlu2ehdycos5r3luccfemwd6hhvyqv5zd6obgq fh5r3hlkkwh7udtjeqmekmq4qd62jnjqmnqob5hm3ndiuo6lauza
83 deepwebradio.i2p deepwebradio.i2p 2nait2gdeozkgf6gyhzjfij6mwldwkxxwcvtxobb4b5q5cvtm5la 2nait2gdeozkgf6gyhzjfij6mwldwkxxwcvtxobb4b5q5cvtm5la
def2.i2p cepsrw27kdegwo7ihzouwvgcvw2obswwjs23ollgj7hk2yrce3da
def3.i2p xbf3ots2purqun7orn72ypkpjmrzbfrkj3u654zfe77hbrbow6la
def4.i2p yyzdq4fwwmnlojp23drfpfqujln2vcjozjrfzfeuriuqzdq7g4mq
84 det.i2p det.i2p y6d4fs3rpqrctuv77ltfajf5m4tl4kzcu7rtwhxgiohylfxxow4q y6d4fs3rpqrctuv77ltfajf5m4tl4kzcu7rtwhxgiohylfxxow4q
85 diasporg.i2p diasporg.i2p edvccoobtjukjgw2os5eetywanbb2mpag5aknkrpia5qx2koksua edvccoobtjukjgw2os5eetywanbb2mpag5aknkrpia5qx2koksua
86 diffyq.i2p dickinass.i2p hkjvyuc3asswxa7uxyalrnpqab4lyvzriu2rsq6jbjc2kaoabghq 5x55ucmwxf2fvrcboapylnrcwdvunlokq5c7mnofno3bkrlqltza
87 digcitlab.i2p digitalsr.i2p gijabxlt4ox2mblh2nfxnds6u4mlsdeoonizknbdksl7klmbpvoq ldavoapfhoqpxvihdsdjjo3phlt5ujkgkzigzbesab3g42rwvbpq
88 discuss.i2p wrnowoalzz5mquzaygmcrm4feuqco5gsxyn42fizbqjaprtdx5gq
89 dist.torproject.i2p pbhgoronppg7tq3dssnwmhzkbrscbvtmy3d5pmar5hyhnqwjj46q
90 diva.i2p diva.i2p auoqibfnyujhcht4v3nzahpqztwlyomesfywltuls5bqqi3nd3ka auoqibfnyujhcht4v3nzahpqztwlyomesfywltuls5bqqi3nd3ka
91 dlms.i2p dnl.i2p krsbxsaw3lnb6ctdpydygm2gqobjcpm4pf367ddo5hylbscnynmq 4pjdhyaot4kktjathgjmom4ykfccezyezasbtvgdtmar2b76cpqa
92 dns.chudo.i2p dns.acetone.i2p zzfmtnnmacop3xvpznc4c2jfvk226wpep2gaoanja3gfzf3ih7xq dnsgzxkak4zlrrs5tfh42ob57iley4xrp7srrltn2j2yl2ynbiaq
93 dosje.i2p donate.torproject.i2p ir2ky5ejx4f646l4fsnug22gj4frn6jzlg7fgboudf2n5b4gdj3q crxdz4n5viyy46upbd4amlzxcinkea7hwj3mkiudrw3nkpnfv42q
94 dreadpiratessociety.i2p donotafraid.i2p fbdd4syj2v52x5zord67av2xclmjsg6bc6xdvrqmvqkyd3whij6q w6jq5xsixmolxvh5xtxaqolary2nmx5n4orc5bilc2j7ejcytgfa
95 dropbox.i2p drommedaris.i2p omax2s5n4mzvymidpuxp2yqknf23asvu54uon6cxl6gdrlblnuiq 2cth2loujyjvouft5z7cr2ajdv7r46tdxxew5xoqwpprucd7nf2a
96 dumpteam.i2p dysfinis.i2p 2fwlpuouwxlk2nj4xklvm43m52tqyhqnu2fcfiuv7clvf3wd5nwa 6dhhk2azkdqd4zt2azsmnxddhooiztnaxgz6ft5sbusb5a4vonva
97 e-reading.i2p z54dnry6rxtmzcg7e6y3qtsig5yf5fmehuvakcg5wnuahx3iafuq
98 e8.i2p e8.i2p 5spb6cl4ffallahbaj2yadag2zgyuciouhz2rdcnyjcf5phqcu4a 5spb6cl4ffallahbaj2yadag2zgyuciouhz2rdcnyjcf5phqcu4a
99 easygpg2.i2p easygpg2.i2p bwxry5alzx5ihgrd3glah4eotddblzhalvpheppnw4zcajzqoora bwxry5alzx5ihgrd3glah4eotddblzhalvpheppnw4zcajzqoora
100 ebooks.i2p ebooks.i2p bvpy6xf6ivyws6mshhqmdmr36pruh2hvoceznzeag52mpu647nzq bvpy6xf6ivyws6mshhqmdmr36pruh2hvoceznzeag52mpu647nzq
101 ebuild.agentoocat.i2p lu56romn7lp6ggjtofbwwsaee6kcfonci2ezi5jb5nyo3vdo7vkq
102 echo.idk.i2p echo.idk.i2p 63sgpiu6f33arldcxkbjsn3jgf6asyx3onjmz6j6gsk7hgbiehkq 63sgpiu6f33arldcxkbjsn3jgf6asyx3onjmz6j6gsk7hgbiehkq
103 eddysblog.i2p eddysblog.i2p ieac3ub4g5sy3wuhsbqfembnpp7f3a37xgcx537ytzsmgfzexnbq ieac3ub4g5sy3wuhsbqfembnpp7f3a37xgcx537ytzsmgfzexnbq
104 epub-eepsite.i2p elefteria.i2p yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa f5s6jvekhmq7aj77xmgm7jwnw2f75ci275togqya76urm745zpdq
105 exch.i2p eleven.i2p vsyjsbbf2pyggtilpqwqnhgcc7mymjxblamarmxe5hmbxaxvcndq n2er74vsv7szwvsbsukd2lwhz5epedws7eqwahsmxy65agvjizzq
106 fa.i2p elgoog.i2p 6n6p3aj6xqhevfojj36dixwbl4reopkhymxmatz7ai5sroh75rka z6hrgkg2ajmuzlrddjlffrgctx7x7fkipm6c4hdzmohyn5wkr4ya
107 elvn.i2p vwjtedtgyokakyxgfeoavg535bxe7ymdvfbdwsq4iqngljqtqi3a
108 equwal.i2p j7zqkvkokxmpkbqrgrkkjym4j7kzuipko4qdujdjbxnrp3qj6ooa
109 esperanto.i2p 2yryi2eb72hnxavjpfot7paiminbzgv5w6fv4sl5wez55ventdeq
110 explorer.gostcoin.i2p ktoacmumifddtqdw6ewns3szxths2hq2fat2o7xnwq4y3auga3za
111 fabrice.i2p fabricexhumxqngfziy4xkao5m5ez27jpih4chtmigg46eu7rroa
112 false.i2p false.i2p 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
113 fantasy-worlds.i2p fantasy-worlds.i2p 62a4xcyyhvfrcq2bkckb7ia37fmrssrgx467tlkxp32fjpq577wq 62a4xcyyhvfrcq2bkckb7ia37fmrssrgx467tlkxp32fjpq577wq
114 fido.r4sas.i2p fido.r4sas.i2p i522xmu63hfbaw2k54cthffcoqmeao6urjyq3jg4hddf6wf57p3q i522xmu63hfbaw2k54cthffcoqmeao6urjyq3jg4hddf6wf57p3q
115 flapflap.i2p files.arav.i2p y53ceza7iji2vq3oa7om64whzakt6nnzksaqhmkqiisk5tvqk56q gajftpr47ze6ao7e3q2tb5xmcqneyaczu4edzvwwg2qzmnernpka
116 flibs.i2p fileshare.linuxfarm.i2p ocdm33e3h5tdml3yyholj4objdwsrhlugfqjnqgdkslmgdzb6b3a rrx4hxejr4pod3tqrkj5ckzuauwy2aqsfvpiac2tkebp2iuv5qla
117 forum.idk.i2p fishsticks.i2p bg7kaiqjcqqeuuwb5nyo3ptcp5dgza7mihtizwqtnz2itombg6da btjbfuh2wav3c7bkjqylgatbkvqaireemvsvxwetkrifuvfa35da
118 forum.rus.i2p flibusta.i2p zd37rfivydhkiyvau27qxwzmerlzbqtthsa5ohtcww62zrygjaga zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq
119 forbiddenhistory.i2p nlduiogwtutni5nwf5kbuekrqf3ymqmkor3hughjkckz7tvruhva
120 fourth.i2p 2cq65hjlt7nnl7mctthj7oejlgep7nh7gmqc6bnbflxw2ti4bxxa
121 freefallheavens.i2p freefallheavens.i2p 7etudb75nhe6vxslitptjlwrnbybdshvzxnweuiepsxbbkkxy5ka 7etudb75nhe6vxslitptjlwrnbybdshvzxnweuiepsxbbkkxy5ka
122 freenet-inproxy.bandura.i2p freehaven.i2p rblg2sajac7winv4mgvnkfh2fa3nt2zxfvxfiybj76okpwdrt45a y4giqqrbcb4xit5gp4y6njypupfklfdr74lfi424seenf7usjvza
123 freifunkmobi.bandura.i2p freifunkmobi.bandura.i2p 5shuxvx52e3qszylwn4w7qst4siap3latyap3ff7nfnpjgllkcea 5shuxvx52e3qszylwn4w7qst4siap3latyap3ff7nfnpjgllkcea
124 fresh.i2p frontlinedefenders.i2p jii6utg6ubwxgls6jegu24ifrroo4qzbcizjfft2bemodp4k2i6a pshxfoeefj67oj4jwjh3cqiztmrgcpsbuttclnc6fiwvv42p6inq
125 fs.i2p fs.i2p ah4r4vzunzfa67atljlbrdgtg3zak5esh7ablpm6xno6fhqij35q ah4r4vzunzfa67atljlbrdgtg3zak5esh7ablpm6xno6fhqij35q
126 fsoc.i2p fuck-rkn.i2p vaqc4jm2trq7lx2kkglve7rkzxhhaptcwwl32uicx4ehf5k3hx6q qmlmnhr3ul2lmuu4fjf43kmk6hf3dzsuxv5xu77vwys36xwuu4sa
fuka.i2p e3aanmaobvwopjrmrnuqvrkr36gyubrv6f2lyygh5brku3ufwrsa
127 fxruby.i2p fxruby.i2p lqhdnr2pvp2igu5e2cxichboqzcgypvrbooynzgkmoze3xae6qkq lqhdnr2pvp2igu5e2cxichboqzcgypvrbooynzgkmoze3xae6qkq
128 garden.i2p galacticreststop.i2p qkk2dqx6nocycgt3vinsoc76cxkb4jreybcpgz3fcps2dbe4rowq uln6c2abwfzneakdz7dkfmdifwrjr3r53jvkmq6mxrjt2vflvbrq
129 gedanken.i2p gedanken.i2p kw6isjbs66uf7576fbb3aniokxtrpqmbegf4tf3xskg2bmrjci7a kw6isjbs66uf7576fbb3aniokxtrpqmbegf4tf3xskg2bmrjci7a
130 geekcode.i2p hzmyzxa6jzag67zcqxhicydusdev77byf2qoyxjxhsrtkce4qiqa
131 gfap.i2p yasbny2ndcpofprdbtv7dxdtshbebyydjv5zlnwy54gii6xnlmqa
132 ginnegappen.i2p ginnegappen.i2p kbhfkzx5jeqhfgss4xixnf4cb3jpuo432l3hxc32feelcmnr3yja kbhfkzx5jeqhfgss4xixnf4cb3jpuo432l3hxc32feelcmnr3yja
133 git.agentoocat.i2p 5ihrbnmcoewaax5kxsghnmxh6p6srufhmo5pqkybdwuz4yj7efja
134 git.apophis.i2p apep7dtwnuom6b7li6jirhrsygxgcdqb5svqpq6mh2rpindrzp2a
135 git.arav.i2p p5nkflgogwv4esy3ainup6mgurpugmdyufizhuufauznreyvprsa
136 git.community.i2p giteabolfdejtdzblkooalqei6jr67imiugmhtsh6ocw4hlj5a4q
137 git.i2p giteayof3hpwkfnwnryy6l4qhq3cwdzqlr72jokzbkc6ol43mypa
138 git.idk.i2p git.idk.i2p 7qeve4v2chmjdqlwpa3vl7aojf3nodbku7vepnjwrsxljzqipz6a 7qeve4v2chmjdqlwpa3vl7aojf3nodbku7vepnjwrsxljzqipz6a
139 git.qorg11.i2p jf2mrxlbqsct67fces34x6kwbbnmlx6o7gd6g4knqk36soa6efqq
140 git.repo.i2p vsd2vtgtuua2vwqsal2mpmxm2b2cpn3qzmqjoeumrrw2p4aot7uq
141 git.varikvalefor.i2p 6sqxtpnpqqnlqbdxu7dadmorrffnpe3evbz5zye4y5kvljkzkbra
142 gitssh.idk.i2p gitssh.idk.i2p g6u4vqiuy6bdc3dbu6a7gmi3ip45sqwgtbgrr6uupqaaqfyztrka g6u4vqiuy6bdc3dbu6a7gmi3ip45sqwgtbgrr6uupqaaqfyztrka
143 gopher.anonroms.i2p glue.idk.i2p wqfhyrnpknap3ushsck3ih3r7inz6uoqlr3u3ktwvejur3bejqha ykbx7chmkivx3idmxd3lu2jc5w4wtlps4r3md57wszhk5w7jykyq
144 gostcoin.i2p gostcoin.i2p 4gzcllfxktrqzv3uys5k4vgkzbth4gqednwhfpt755yivm3davuq 4gzcllfxktrqzv3uys5k4vgkzbth4gqednwhfpt755yivm3davuq
145 gusion.i2p gusion.i2p 4qyfdhizjixe2psu7wcvqufix5wlijocehpb2futurcmlhlktrta 4qyfdhizjixe2psu7wcvqufix5wlijocehpb2futurcmlhlktrta
146 h0p3.i2p h0p3.i2p k5fppzxc3bwoz2mjc7q37jojbrxo6vtprac3dzrk4wapv7irr4iq k5fppzxc3bwoz2mjc7q37jojbrxo6vtprac3dzrk4wapv7irr4iq
147 hacking.i2p uvxiknnzaxtcijzagp5xuweua2ctghmjfubqdufxilvnkajhezaq
148 hagen.i2p hagen.i2p e2t6rqd2ysbvs53t5nnaf7drllkgk6kfriq3lfuz6mip6xfg644q e2t6rqd2ysbvs53t5nnaf7drllkgk6kfriq3lfuz6mip6xfg644q
149 harbour.i2p zohxpycufzcslwb2dgdkfo75flahkl2q7n57ciqjooqia75ybada
150 hardenedbsd.i2p 6ebmdsir52bi3q4wfwug7ylouoq6gdafl3wyy6ccfmpffijhtoca
151 heaven.i2p heaven.i2p y6ejpmln3j2jvf4omb4ptyo2idognputhrccph74yn6eghkpxyhq y6ejpmln3j2jvf4omb4ptyo2idognputhrccph74yn6eghkpxyhq
heckyel.i2p lars7whelqo6fp2jzkzrx7aziq7dwiygkixgjarjjc6n3gnlslra
heligoland.i2p gzrjm62ektpqjfsem3r3kwvg6zpjvvhvpjvwfxkm2ay4zu7sp6oq
hgit.i2p ny4ev7me2y2ibfi37mykakwvf2jhnl7lfql4etaiykjiwtd735pa
152 hiddenbooru.i2p hiddenbooru.i2p zma5du344hy2ip5xcu6xmt4c7dgibnlv5jm4c2fre5nxv44sln3q zma5du344hy2ip5xcu6xmt4c7dgibnlv5jm4c2fre5nxv44sln3q
153 hiddenchan.i2p hiddenchan.i2p 6y4tltjdgqwfdcz6tqwc7dxhhuradop2vejatisu64nwjzh5tuwa 6y4tltjdgqwfdcz6tqwc7dxhhuradop2vejatisu64nwjzh5tuwa
154 hiddenwiki.i2p 2iz3nkopz6fxbzlcjq3ofligi7mwdseuj4ndzqljogyvsggh6dvq
155 hisdarkmaterials.i2p hisdarkmaterials.i2p qcf3vxllflqfsbvxjlypfxsx36g5srknxnhpyz3ph5bcxdjawraq qcf3vxllflqfsbvxjlypfxsx36g5srknxnhpyz3ph5bcxdjawraq
156 homosexualchan.i2p hopjoy.i2p suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq 3wifx34yzdnj5vw3zu3kmqyz57tvlypmdnnyalqjdcaqrege6bpa
horo.i2p vrxh2vbqsfvh2utnt3ighimu4vrgla2mfpwksipkjsguv5vewhdq
157 hotline.i2p hotline.i2p 6cczi27iuxkm3aivazaemzltdqgh42ljzurqp43uclbz2lid2uqq 6cczi27iuxkm3aivazaemzltdqgh42ljzurqp43uclbz2lid2uqq
158 hp-net.bandura.i2p hp-net.bandura.i2p z2ufexrgrxry37y4vs5hted35ygpleskfcs2enanl53hmlpzlqhq z2ufexrgrxry37y4vs5hted35ygpleskfcs2enanl53hmlpzlqhq
159 hq.postman.i2p hq.postman.i2p 7ewjvbcwgah57n64cwbsxqai7eutqofkesuxfsuhfheijivdjqra 7ewjvbcwgah57n64cwbsxqai7eutqofkesuxfsuhfheijivdjqra
160 http-false.telegram.i2p http-false.telegram.i2p 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
161 i2p-epub-eepsite.i2p hungryewok.i2p yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa to3afquvmrmk4kvozisb562elb2hdka6hwk6oeud32m6h2qtkcqa
162 i2chan2.i2p rqd4efol6ooxukq2jj6toml2s7uutj3kbkl6k7kfm7vpmmt2k4fq
163 i2p-mirror.bandura.i2p i2p-mirror.bandura.i2p aq7r54ebou47b533y5seiod7dc3aeycucevl2pqvphnjhjwblr6q aq7r54ebou47b533y5seiod7dc3aeycucevl2pqvphnjhjwblr6q
164 i2p-projekt.i2p i2p-projekt.i2p udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna
165 i2pd.i2p i2pd.i2p 4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa 4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa
166 i2pdocs.str4d.i2p yfvbtrhjac3jutdsqzugog6mbz3jtyhpwovrt2mqc5mzv534y7cq
167 i2peek-a-boo.i2p i2peek-a-boo.i2p qgv64klyy4tgk4ranaznet5sjgi7ccsrawtjx3j5tvekvvfl67aa qgv64klyy4tgk4ranaznet5sjgi7ccsrawtjx3j5tvekvvfl67aa
168 i2pforum.i2p i2pforum.i2p tmipbl5d7ctnz3cib4yd2yivlrssrtpmuuzyqdpqkelzmnqllhda tmipbl5d7ctnz3cib4yd2yivlrssrtpmuuzyqdpqkelzmnqllhda
169 i2pjump.i2p i2pjump.i2p 2mwcgdjvfvd3xwumzqzqntual3l57h3zo7lwdmkjboeraudpkyka 2mwcgdjvfvd3xwumzqzqntual3l57h3zo7lwdmkjboeraudpkyka
172 i2podisy.i2p i2podisy.i2p 3c2jzypzjpxuq2ncr3wn3swn5d4isxlulqgccb6oq5f6zylcrvcq 3c2jzypzjpxuq2ncr3wn3swn5d4isxlulqgccb6oq5f6zylcrvcq
173 i2pseed.bandura.i2p i2pseed.bandura.i2p 2bpbnalf76ktxzhfekkwcklmo45xzedi5em5bdoyedrhw5bhvtia 2bpbnalf76ktxzhfekkwcklmo45xzedi5em5bdoyedrhw5bhvtia
174 i2psurvey.i2p i2psurvey.i2p pemwrlamhiiv74ok4kwoo4eqwzzjshp4q7ir3nlh4jfnt4zjncia pemwrlamhiiv74ok4kwoo4eqwzzjshp4q7ir3nlh4jfnt4zjncia
175 i2ptimes.i2p 563tjwihw2ql5q2kl7d7md7ywedpapoqgkxgazkz4gmlrb2flqbq
176 i2ptorrents.i2p yt2qxe6nq3meofloobawy6nlnmu5pxkobqjyspdngfrasd5v7bca
177 i2pwiki.bandura.i2p i2pwiki.bandura.i2p isbf7tzeyrutnd5rvmjpqaohe7cz6onqgci2wvbuyfwc62w74r3q isbf7tzeyrutnd5rvmjpqaohe7cz6onqgci2wvbuyfwc62w74r3q
178 i2pyacy.bandura.i2p i2pyacy.bandura.i2p owy6s5xlkf4zsrwwpemvoru6x6qmrye2pe3v4v3dncvcrzix3fiq owy6s5xlkf4zsrwwpemvoru6x6qmrye2pe3v4v3dncvcrzix3fiq
179 i2speed.i2p i2search.i2p 532c5r6ra6rcf2mvfgtlcxbn3lpplybwxul4xsg3ps64dlx73fga cpgupqyhxamjfgdd3qk5ux673qomu3o5kqszvq6fwuigzifkxzta
180 ibft.i2p ds36spqcf7dnj46in5vfnbbwcbjpslo6aafkdrkc47a2oq3zvtta
181 identiguy.i2p identiguy.i2p 3mzmrus2oron5fxptw7hw2puho3bnqmw2hqy7nw64dsrrjwdilva 3mzmrus2oron5fxptw7hw2puho3bnqmw2hqy7nw64dsrrjwdilva
182 idk.i2p idk.i2p b2o47zwxqjbn7jj37yqkmvbmci7kqubwgxu3umqid7cexmc7xudq b2o47zwxqjbn7jj37yqkmvbmci7kqubwgxu3umqid7cexmc7xudq
183 ilcosmista.i2p ilcosmista.i2p 6u2rfuq3cyeb7ytjzjxgbfa73ipzpzen5wx3tihyast2f2oeo24q 6u2rfuq3cyeb7ytjzjxgbfa73ipzpzen5wx3tihyast2f2oeo24q
184 ilita.i2p ilita.i2p isxls447iuumsb35pq5r3di6xrxr2igugvshqwhi5hj5gvhwvqba isxls447iuumsb35pq5r3di6xrxr2igugvshqwhi5hj5gvhwvqba
185 inclib.i2p in.i2p ux6prousphswf56bym7yo7kst4ybh45y2z2wrnw7dujmrz56hq4q r5vbv2akbp6txy5amkftia757klgdy44s6cglqhmstpg65xycyjq
186 infocon.i2p ic7rentjh6ilzz6p5kveiuyzov534ksfcexmpeniyallzf5in67a
187 infoserver.i2p infoserver.i2p jd3agbakybnhfvkeoxrx7t33iln6suzomv3kxkxf77j7rkonch6q jd3agbakybnhfvkeoxrx7t33iln6suzomv3kxkxf77j7rkonch6q
188 infox.i2p qoz4bwrtnicqyxemrxubdc65uojrqn2iem6v55b6xmxzdmfzcvlq
189 inr.i2p inr.i2p joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq
190 instantexchange.i2p insecurities.i2p 5wiyndm44bysev22kxvczxt37p6o6qroiqykytrvn2yzi55aqfxq 4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
191 invisible-internet.i2p ioannism.i2p jnpykdpp46zenz4p64eb3opadl5g42dls3rurk2cvq6a3g3rvbvq g2246vc2tq64rmomwe47v3jnbpz3b3ec2wrrhadukj7lxmwd5aoa
192 irc.acetone.i2p irc.acetone.i2p qyzbrdw26ejjdjzsrcmq5h3ggdzk6cq5xynrgee5t5q73gq545yq qyzbrdw26ejjdjzsrcmq5h3ggdzk6cq5xynrgee5t5q73gq545yq
193 irc.coldhell.i2p d4b3dcqt32yq55b6ct6f4rsib5svzgwkfz4klfczuz7e4p2v6rkq
194 irc.crustyirc.i2p 4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
195 irc.echelon.i2p irc.echelon.i2p ez2czsvej5p3z5bquue5q3thujcodfze7ptybctqhnqc7hms5uzq ez2czsvej5p3z5bquue5q3thujcodfze7ptybctqhnqc7hms5uzq
196 irc.ilita.i2p irc.ilita.i2p 5xeoyfvtddmo5k3kxzv7b3d5risil6333ntqrr3yvx3yubz5tk3a 5xeoyfvtddmo5k3kxzv7b3d5risil6333ntqrr3yvx3yubz5tk3a
197 irc.kobomy.i2p irc.nerds.i2p 2j75o23f3hhpebthdiuzevjo3sphmok4jbr5yrtmwav64v2hzuqq nlqhsdd5a7hanjea33mwizg5ixh3xcv5dczufpf3qcfpo6tx4esa
198 irc.postman.i2p irc.postman.i2p hhcy7zznltay2tzwdvtd37g2inptemz3hk5zmxyi57d3sxgxbseq hhcy7zznltay2tzwdvtd37g2inptemz3hk5zmxyi57d3sxgxbseq
199 irc.r4sas.i2p irc.r4sas.i2p hodhusp73gltozgrnianlbploon3rrvhrzfn5mf2g46o7aaau5la hodhusp73gltozgrnianlbploon3rrvhrzfn5mf2g46o7aaau5la
200 irc.rpi.i2p irc.rpi.i2p ppqu4shst5hfjn6jgxyragcanyxurhmof7jdrxag5srpeobevh5q ppqu4shst5hfjn6jgxyragcanyxurhmof7jdrxag5srpeobevh5q
201 irc.welterde.i2p ircs.nerds.i2p 424n5ty6bryfsn3m3buckx4njs4vaw2qch7drfdq32btsyycbflq w4d6hj3q7eyfrkb3kcy7rox2fdjzywypvmyrudtf2q4gdzs2qlhq
202 isitup.i2p isitup.i2p xk6ypey2az23vtdkitjxvanlshztmjs2ekd6sp77m4obszf6ocfq xk6ypey2az23vtdkitjxvanlshztmjs2ekd6sp77m4obszf6ocfq
203 isotoxin.i2p isotoxin.i2p wue3ycaccf4texikza3fh6p5yrmtgnooisuypnepo5mo67lmpcqq wue3ycaccf4texikza3fh6p5yrmtgnooisuypnepo5mo67lmpcqq
204 itphx.i2p itphx.i2p zwu2erk3wtyxlcbmd73kmxcirjghdkk4lpupy3xcavpm3qbob4da zwu2erk3wtyxlcbmd73kmxcirjghdkk4lpupy3xcavpm3qbob4da
205 ivorytower.i2p ivorytower.i2p fpwrfvidfexsz7dspofkwtkmmizm7lyralfz5kvykffk7gubvxsq fpwrfvidfexsz7dspofkwtkmmizm7lyralfz5kvykffk7gubvxsq
206 javadoc.skank.i2p us3amyq3emvm6rcxmrar3o3uoiifnafijgseho4dxdsjgonfyaxq
207 javascript.i2p javascript.i2p idxpwvskkaq3pssrnqpxmiilgeqwf7d2hf5xpusossqz6r2nudva idxpwvskkaq3pssrnqpxmiilgeqwf7d2hf5xpusossqz6r2nudva
208 jikx.i2p jbo.varikvalefor.i2p aazr55itvyns4lwppvx5njyx5tjdwemw4w6jbmpegdunznod2ieq 3flbkdhahkgq47s7vytubh3v4vk3lyqgwwh6dd2k5szqlrivdmta
209 jwebcache.i2p jdj.i2p xdffxnxtjd6ji2zig3cgva7igvl2tiapyjoc7ylbzwqhxudbmvfa mqxhou4icts5tmoq7ndz56sb2ox4s2atzm2urmyn2ndrj2dzzguq
210 jimkiebs.i2p epqxjestvatyv2ala7iqbm45elnecqecz2zmpoklzvekwjapu45q
211 k1773r.i2p k1773r.i2p zam7u6vslhemddz347uusuzjdk5wma4h5hcmcqlng4ybbpdbjhnq zam7u6vslhemddz347uusuzjdk5wma4h5hcmcqlng4ybbpdbjhnq
212 kallist.i2p karamba.i2p rpoqwcozn4pdxz7bp2vxsl7vfibpbccsymfuxg3c7v7yj3um4bta g2lizyuyzms7m6gv24pzege5zapbinxfd2dzbaha6k246pl2xu3q
213 kelvinchan.i2p kelvinchan.i2p 6s72dyf6jwlvk2u455lksvcs5r7deafc3iniwo5kp4ssm777noma 6s72dyf6jwlvk2u455lksvcs5r7deafc3iniwo5kp4ssm777noma
keys.dlms.i2p znl2swe5pez65qxrr2s2s4lmdfky6mnppvh3p5j6suuiovymhjtq
214 keys.echelon.i2p keys.echelon.i2p mwfpkdmjur5ytq4og36ym3ychinv36b2a57f4rmgqmtrwepq3fva mwfpkdmjur5ytq4og36ym3ychinv36b2a57f4rmgqmtrwepq3fva
kibykarni.i2p xowcvzbeq72slpbrwmjl3zy6xkrkb2ncctpkkskeqts63vedtg7a
215 kill-9.i2p kill-9.i2p 3i3bbs2zfabyleqxcqueeegakutrtk3hbxmvbtkrgwvetlmity4q 3i3bbs2zfabyleqxcqueeegakutrtk3hbxmvbtkrgwvetlmity4q
216 kislitsa.i2p kislitsa.i2p khceo3smaxtng2tnuicmcbhdnkk2j6myi4nkigcux76qh3aabdhq khceo3smaxtng2tnuicmcbhdnkk2j6myi4nkigcux76qh3aabdhq
217 kkk.i2p kukluxklanib666d73z5fyeyb6vnystmvvreaodhjf73rhl4wxva
218 knijka.i2p knijka.i2p knjkodsakcxihwk5w5new76hibywia5zqcgoqgjttzsausnd22oa knjkodsakcxihwk5w5new76hibywia5zqcgoqgjttzsausnd22oa
219 kobomy.i2p kohlchan.i2p f2m5wb6iotejsdhimqunkggw2pbboozd6vcha3xi37zjsecya2ua kohlchanvn6vtsujobyw4pt5naaszmxqutd5hsdatmxfe2qaqhya
220 kuna.i2p korol4ik.i2p bwzbe3pn3g2oqce6grxocaqgw6p2oleiddsgrm7d3fms3cw44izq mr3z5lggdppc3yw2r2egstpg33ga2wfocmozac6kjmhhfk3asm2q
221 kurator.i2p sp3umnyofy5ytixbqcue4jrpxixccgnrxtiuvhg6juep5s5lrs6q
222 kycklingar.i2p kycklingar.i2p gctswdhp4447yibxfbqg3uq2bvx63qjeqnaoaux75zw73leakyva gctswdhp4447yibxfbqg3uq2bvx63qjeqnaoaux75zw73leakyva
latinum.i2p n64izx6kyu3xv6yvc45mvpswlq4txbkc5y2okjwyoseb5lmzxoea
223 lbt.i2p lbt.i2p 5uhjsgyca6ggdvwjjwf67bcmalpbxitopupjpygtahxvkwlh5mzq 5uhjsgyca6ggdvwjjwf67bcmalpbxitopupjpygtahxvkwlh5mzq
224 ledechaine.i2p 7s4vtwkvxvmigj3r4zrc7s5ajdeqtris4qnj3n35cuuvuzkpgqsq
225 legalcases.i2p tms2ibdkp67ddj5ez6l4zwvw33jdpz5tmavv3kpjdcpavfh7np4q
226 legwork.i2p legwork.i2p cuss2sgthm5wfipnnztrjdvtaczb22hnmr2ohnaqqqz3jf6ubf3a cuss2sgthm5wfipnnztrjdvtaczb22hnmr2ohnaqqqz3jf6ubf3a
227 libertor.i2p lenczewski.i2p 7gajvk4dnnob6wlkoo2zcws7nor3gunvoi7ofalcps5lc76wruuq 7uypwo47x4vnryoz25vwisu5jpyhz7pcdvnfzvopww3wxc7wiiia
228 lihai2333.i2p libreddit.i2p maxh5bc5hom4g7udes2m4uy3lfocrqkmcy2m4mvkqca7ktoe43qq libr7vbp7i3lsvqwy5aqgql44uxaufawi5yrloh3x7sezubsoaba
229 limak.i2p jzoxeuuqt6wo55pvt4uh7o5i47oyadrvhyjli4hidqldhihu6lna
230 linuxfarm.i2p linuxfarm.i2p br3njhezhzx7mcv25nrxkrwu5g553xp4oyavsjhfa7jwmzyp3q5q br3njhezhzx7mcv25nrxkrwu5g553xp4oyavsjhfa7jwmzyp3q5q
231 lists.i2p2.i2p lnxcloud.i2p vmfwbic2brek2ez223j6fc6bl5mmouzqvbsch45msvyyzih3iqua wryxsgqp3xl7fuohijmxlugrndtp2vixqlt2obpgriwt3fpdjn6q
232 lm.i2p lockdown.bnet.i2p yeyar743vuwmm6fpgf3x6bzmj7fxb5uxhuoxx4ea76wqssdi4f3q vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
233 lodikon.i2p lockdown.i2p u3f67staiwhqxpacya3clmvurdwd2kp7qcthzhstqnhrmlwc2g4a vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
234 lolicat.i2p 2mvlbpgzlawdxqv3zlcgcje475kv35ow2itpztjpdqegbtjpvbda
235 lolicatgirls.i2p lolicatgirls.i2p pjhlh4h7zn3slglx46ffob5ifcccrcqr5dzbyyueh3wd6a6bizra pjhlh4h7zn3slglx46ffob5ifcccrcqr5dzbyyueh3wd6a6bizra
236 longseason.i2p longseason.i2p ighnngssgd6p4kyrec6m556rasvbtx5xe7bsyxol4lie2dibi4da ighnngssgd6p4kyrec6m556rasvbtx5xe7bsyxol4lie2dibi4da
237 losinka.i2p lucas.i2p r2z2tcs6eguevoxlkrmpkcanuwgnsit2o45svnwaer3wq4v76hrq hcb6j5indzeqfyerq4igx45xgruijbs433mh22ye4osoxkxhumwq
238 lyoko.i2p lunach.i2p afuuortfaqejkesne272krqvmafn65mhls6nvcwv3t7l2ic2p4kq m27cpx55hqhcfjz4u62tiynjtzqdw4s3kanxdgluuthnndiquoeq
239 lytor.i2p madaidans-insecurities.i2p ezjrtucwkkf3xgssjtq6tr27hz4zhbkobr4zjnl3x4jrwy7f7m6q 4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
240 man.i2p mail.i2p progskxxt44tlefm5uc4jqseanlhgbbkjyz4g3nvjjzbvhhp342q mail4okikc3tknhn2tfyqzq7mxgzltqg2tw5v5frtzkcsm45zdra
241 major.acetone.i2p majorivqe4wud5ksadgfycdkgqsesqbbnw4hpgcqfixy4sm77f4q
242 major.i2p majorwsiehucyqfqbw3g2on3xqq2pwrwdd6hhyludqqr6ct7xdoa
243 mapwiki.i2p p2lufcvbzq3smirs7ijwds3y34cxzchveogb4jflbpmk5pzy3wqa
244 marenostrum.i2p marenostrum.i2p tlrae2xdtewfb262daw6ygm5nz5vusc7rbiefpndubjk4jvh5roq tlrae2xdtewfb262daw6ygm5nz5vusc7rbiefpndubjk4jvh5roq
245 masterdestroyer.i2p masflam.i2p yp2g7frk3ze5ljaxbmhmh6hhda3rmpwmpianozi6or2uzqzdur7q ucvzbekxpbzfizwndx4bgsj5bjbygdu4vc3xukiseiw5bvatxivq
246 mattermost.i2p mattermost.i2p x5oovnhnuli5fnwtgkbd5z5jvrvdvprqyuofywx6uoxkk4bie6ya x5oovnhnuli5fnwtgkbd5z5jvrvdvprqyuofywx6uoxkk4bie6ya
247 mayvaneday.i2p mayvaneday.i2p zli2qsg54w7y42vgw4xxlnj4nktcpg7xp33yjxkp33sjafvznbwa zli2qsg54w7y42vgw4xxlnj4nktcpg7xp33yjxkp33sjafvznbwa
248 maza.i2p wiigkmy5je5ox4byjt7z7fh4btojbixbmfv4chnzqoovmgnvdpoa
249 mdleom.i2p mdleom.i2p ggucqf2jmtfxcw7us5sts3x7u2qljseocfzlhzebfpihkyvhcqfa ggucqf2jmtfxcw7us5sts3x7u2qljseocfzlhzebfpihkyvhcqfa
250 metager.i2p 4zdcetlcp3tdg5h23gd3aeyzbvodepid7a6mb3w4qvxkdnm2by6q
251 metrics.i2p z45ieamhex2ihqv7oowk5fz4qq47rbvxhhhbaaiinpajbhuevtpq
252 mhatta.i2p mhatta.i2p o4rsxdeepfrnncsnjq675xogp5v5qkbfgbt6ooqeyfvlifobrjxq o4rsxdeepfrnncsnjq675xogp5v5qkbfgbt6ooqeyfvlifobrjxq
253 miyoisomix.i2p minecraft.reloaded.i2p rtv5ufhxasszywdh3oelqrc4yg4kirtirglub4h3mwovwig624eq qs5ihihltxhhfi6wesihgbvoaurqxgdpxgmwnmsk5d5beabtvmvq
254 minecraftlog.i2p vu2v5xnfk4ivrcmjx4fvofzts7fj47jcq23zfpg6ajj6p3ytt3hq
255 mk16de.bandura.i2p mk16de.bandura.i2p rrllz7nkoeaydqzc5tqdexbfpkvensi26nqg3ly3cxrm5qt6m5sq rrllz7nkoeaydqzc5tqdexbfpkvensi26nqg3ly3cxrm5qt6m5sq
256 monerod.i2p moneroauth.i2p fjvlhyxejnssd5yjxqvom6nooqjdrhd43umxnzw33h2nqzhza5qa kt6uh4z24tendrol5zbm4wv4apq4nbv4w7k5vcguvbpg3alrqyxa
257 moneroexplorer.i2p je4vbduigce7pgjivvo26d4abn3u5mfsos5zemp3a75xzcv7nm4q
258 monerujo.i2p monerujo.i2p puri6y5dtwh6zr4u77ep6ozatun6iz7v4wai2dzxppz7654corlq puri6y5dtwh6zr4u77ep6ozatun6iz7v4wai2dzxppz7654corlq
259 mosbot.i2p mooks.i2p 5bhmrp43mjwlzf4x64xgdrkwmw4luvng6eq5waa663a7vnkp732a 6txhjmnxnrjku4cmdwtyacjzhwythc7l5euqaxieyrc4vjotqwzq
260 mosfet.i2p mosfet.i2p s5ynkgagndmpxpf2kmnenv4x72io664gzd2x3qef54ilammnte3q s5ynkgagndmpxpf2kmnenv4x72io664gzd2x3qef54ilammnte3q
261 mtn.i2p-projekt.i2p mtn.i2p-projekt.i2p f52x5fp6uhq53f5zle5d6rq5un34xgmxgazvilvmzcby37xcmsfa f52x5fp6uhq53f5zle5d6rq5un34xgmxgazvilvmzcby37xcmsfa
mtn.i2p2.i2p l6kuhtmgvbp57d7jwalj5nksi6nr4gfzbz4oit62lxgipb3llt5a
262 mtproxy.ilita.i2p mtproxy.ilita.i2p vxxfipsygx6jpz57pmb3d3mjgsk5ls2idxeo2bffs3yp62muyq7q vxxfipsygx6jpz57pmb3d3mjgsk5ls2idxeo2bffs3yp62muyq7q
mucats.i2p 4vjquedemoznbsva4j6wnr7hyms5k3gwucmxgcnwcwweontbcrha
263 mumble.acetone.i2p mumble.acetone.i2p plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa
264 muwire.i2p muwire.i2p c3r6by4k4kzbx7yvq36u5rieuymshuq2pebo3dzs6oovpzn52uoa c3r6by4k4kzbx7yvq36u5rieuymshuq2pebo3dzs6oovpzn52uoa
265 nekochan.i2p nekit.i2p dszr2z2swmeczeao2bqgop6fyh34jw5baeiybsavwtihllwa5qwq axis6zcqacv7le2ms5xqaerecuk3jyrijifrstvxl3or5g5n4ova
266 neodome.i2p nekofiles.i2p 5hkhjehj3ct2pvcah7dcylwef2oti3xij5myxbv3pd7rocio5vkq rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
267 neoniet.i2p nerds.i2p jf32pdnofckjvedni77vjt26m6opzzz6ocpkpxof4fptzym56raq 5wpwlbka4wj74rrnwbieopppgtivbqxljznl3bs542mxtvjz7ffq
268 netbsd.i2p jjz5ajknu5rku4p6xb6i5xwjnp3nd6c3jwi2qnzbpaodyf7g2lja
269 nethack.idk.i2p zcojbufszefu5bfht5cem3zlhfvv5y3jzpzbaccu3ehje4d7pb2a
270 news-i2pn.i2p news-i2pn.i2p wwcqkwfo5yhe6uribv5tzylk25j5hkdk6gdnyftzd3k7dawlzwca wwcqkwfo5yhe6uribv5tzylk25j5hkdk6gdnyftzd3k7dawlzwca
271 news.neodome.i2p newsxml.idk.i2p trhwcnygfkeqjj6g4xhmrdp4gsjqsye47lsxshbmwbten4ywt5oq dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka
272 nitter.i2p nexus.i2p axd6uavsstsrvstva4mzlzh4ct76rc6zdug3nxdgeitrzczhzf4q 6uz2ihv4avlfhui5eyrisw7yx2t5mclxyl6blwjgw7zc5q4j3isa
273 normal.i2p nitter.skank.i2p j5fex634r2altzb3kjvu35qekt2r3hgsqzg5qxoy7dp53heu5pma l2aoqvwkq2prrv53cbk4k2ilxw5s2fc7eo2rjunnixp2hrv3iwda
274 nntp.txtcon.i2p nntpsqgdoky2fuctc2hc6vuls2b4okxpkocic2eo66uup3dtaq7q
275 notbob.i2p notbob.i2p nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a
276 notochina.i2p h3xsjhfyf4wah4sou3gepzibetdntrmiax3zl3x7ozyjv5krakaa
277 novabbs.i2p novabbs.i2p bicoankyijabtj2nlwzjmr4mamybr6bgc6xclpvsgzaaalzhhola bicoankyijabtj2nlwzjmr4mamybr6bgc6xclpvsgzaaalzhhola
278 nsa.i2p nsa.i2p nsetvbclpomqxfcit4mghn6z7vdhnza6jdzczby4crnto32uykga nsetvbclpomqxfcit4mghn6z7vdhnza6jdzczby4crnto32uykga
279 nullchan.i2p nullz2mkp7znirlcersxpk7qmkmgcc6u3yhe462p2qkpxsdb3mja
280 nvspc.i2p nvspc.i2p anlncoi2fzbsadbujidqmtji7hshfw3nrkqvbgdleepbxx3d5xra anlncoi2fzbsadbujidqmtji7hshfw3nrkqvbgdleepbxx3d5xra
281 obmen.i2p obmen.i2p vodkv54jaetjw7q2t2iethc4cbi4gjdrmw2ovfmr43mcybt7ekxa vodkv54jaetjw7q2t2iethc4cbi4gjdrmw2ovfmr43mcybt7ekxa
282 ol.i2p ol.i2p bnb46culzbssz6aipcjkuytanflz6dtndyhmlaxn3pfiv6zqrohq bnb46culzbssz6aipcjkuytanflz6dtndyhmlaxn3pfiv6zqrohq
283 onelon.i2p omitracker.i2p irkvgdnlc6tidoqomre4qr7q4w4qcjfyvbovatgyolk6d4uvcyha a5ruhsktpdhfk5w46i6yf6oqovgdlyzty7ku6t5yrrpf4qedznjq
284 openbsd.i2p ahwlj76krc5do77pibighi2frqmfccpezyiqfmiernvivwomgvuq
285 opentracker.dg2.i2p opentracker.dg2.i2p w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa
286 opentracker.r4sas.i2p punzipidirfqspstvzpj6gb4tkuykqp6quurj6e23bgxcxhdoe7q
287 opentracker.skank.i2p by7luzwhx733fhc5ug2o75dcaunblq2ztlshzd7qvptaoa73nqua
288 outproxy-tor.meeh.i2p outproxy-tor.meeh.i2p 77igjr2pbg73ox5ngqy5ohzvrnur3ezqcogtl4vpuqtrcl3irsqq 77igjr2pbg73ox5ngqy5ohzvrnur3ezqcogtl4vpuqtrcl3irsqq
289 outproxy.bandura.i2p outproxy.bandura.i2p smaie7bxvpy53iiabfxkhmsjtqs7vzjcr5xxsysjbbobunwrav2q smaie7bxvpy53iiabfxkhmsjtqs7vzjcr5xxsysjbbobunwrav2q
290 p4bl0.i2p outproxy.purokishi.i2p lkgdfm4w6e2kkjhcdzr4ahhz26s3aunhrn6t2or436o73qh4z7ga nieasaidj7wy5nammqf4f7zzcdafi4apygwn5qwscpn4pq34hqia
291 p2p-node.i2p e7uvwnpkzbn5zdwr76ujlhym4lk5pfkqhvfwivt3mszx7l4lpj7q
292 packages.i2p packages.i2p 2gbnylztt42dgpjh5r5tmy6oxm5xag6qv4femnbbqbpza4l2l6ja 2gbnylztt42dgpjh5r5tmy6oxm5xag6qv4femnbbqbpza4l2l6ja
293 pagwin.i2p qggplwxvsvctsdzgld2shfyjlokfoxur3pkfapygs26i4hwawfga
294 panzerradio.i2p rawdhtmxzynf5mhrpyhnbjqqxswidr6gvvcbbt4hbpjuv5jebw7q
295 password.i2p password.i2p knmjkeabbhudejkikbzhhjqsb4r77o45vkdhve6d254quttfx3wa knmjkeabbhudejkikbzhhjqsb4r77o45vkdhve6d254quttfx3wa
296 paste.idk.i2p paste.idk.i2p qvgktychvlbmqwnoqgz2siuna7f5w764wgkbqcwogipfjzf3ksva qvgktychvlbmqwnoqgz2siuna7f5w764wgkbqcwogipfjzf3ksva
297 paste.r4sas.i2p paste.r4sas.i2p csen43keji3qiw6uobsgzysxyjd225g6446ylq5uuz6ur2glkzaa csen43keji3qiw6uobsgzysxyjd225g6446ylq5uuz6ur2glkzaa
pay.privex.i2p cz25423yahhbd2wavtwupsbcbdg6wkn5vvh3466hbmmrzlu4wxyq
298 pharos.i2p pharos.i2p vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
299 pharoz.i2p pharoz.i2p vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
300 photosarchive.bentasker.i2p w4lnfcg2chbkwigogba7q3o5pgtq2baip7z3z4afaj65axhyc5ca
301 phreeroma.i2p 44fu2fhq6q36re2xqnkuievdfsroi5xchgbowkqib6ekak3ynm6q
302 pizda666.i2p bczoowsc6ik7a4mya45qnlq5n6c6llpd5ni3u67r4r4drgohyira
303 pizdabol.i2p pizdabol.i2p 5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa 5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
304 planet.i2p planet.i2p pztcztaklof7s4me2vgtdddzesnunvk55zke6oz5e77ci3qk64yq pztcztaklof7s4me2vgtdddzesnunvk55zke6oz5e77ci3qk64yq
305 pleroma.pluralitynet.i2p play-it.i2p 22wwp4s4n4sre45cj72zrfcdqcelpga65yrt6jlgahehxtbg2vzq oxt7gdu663baue7lugdmgxqkmtrfdy2izluneqdrpv4pfslxjlta
306 pluralitynet.i2p pocketlint.i2p yphtn6ponyelopqiccm3nfznoc34byroack4z33lvi54gyfeuawq pocketzsq4r4fef2bw57sn4paufjh5dw75azu5sr4hk2qwdvucsa
307 podger.i2p podger.i2p 56pcmc4rxmtzs6ojvszpiqmh47et3m6amh7kfszp4wbvz2jbpnya 56pcmc4rxmtzs6ojvszpiqmh47et3m6amh7kfszp4wbvz2jbpnya
308 polistern.i2p ztqi2zewgtifrg4efs6eyxxi5www27ymley3aiz4obhulbnszlva
309 pomoyka.i2p pomoyka.i2p omt56v4jxa4hurbwk44vqbbcwn3eavuynyc24c25cy7grucjh24q omt56v4jxa4hurbwk44vqbbcwn3eavuynyc24c25cy7grucjh24q
310 pool.gostcoin.i2p pool.gostcoin.i2p m4f4k3eeaj7otbc254ccj7d5hivguqgnohwelkibr4ddk43qhywa m4f4k3eeaj7otbc254ccj7d5hivguqgnohwelkibr4ddk43qhywa
311 pop.postman.i2p pop.postman.i2p i7vd76psp3oyocljiqkoyz7fpr4fy2xq2asclf7qih6k57aj5xrq i7vd76psp3oyocljiqkoyz7fpr4fy2xq2asclf7qih6k57aj5xrq
312 portal.webhosting.i2p porest.i2p bflwwtclsmmrimszczoafdrdzw6m7bszkggv4qs5e4aymghoxsja 46l7beij4rerlbuj7xmcngarlkhlpgaztywrleiwagjuiipcebbq
313 pravtor.i2p privacy-handbuch.i2p 2sr27o5x2v2pyqro7wl5nl6krrsbizwrzsky5y7pkohwh24gn6xq 3cccw3cxxghkalgichofulid36ekwplv3stubvfot522mwxcnu5q
314 privatebin.i2p privatebin.i2p e7qy5kc7ivqtnrbdn5ymx5nmbdedlrjkdchqmmkhud4ockrime5a e7qy5kc7ivqtnrbdn5ymx5nmbdedlrjkdchqmmkhud4ockrime5a
315 privetalena.i2p programthink.i2p alenabivbkqo2xoikterpsc3gquqzacxfef6usbifrez5ioegjjq programygfltn24q6foacm5gbuo3z2geub2k2k366llx3bph4ula
privex.i2p omgulpderyhggjbaksgcccvjk76yvbp5rsnm4uos2mqfe5iv765q
316 project-future.i2p project-future.i2p ivqynpfwxzl746gxf376lxqvgktql2lqshzwnwjk2twut6xq7xta ivqynpfwxzl746gxf376lxqvgktql2lqshzwnwjk2twut6xq7xta
317 projectmayhem2012-086.i2p proof-of-loss.i2p ehkjj4ptsagxlo27wpv4a5dk4zxqf4kg4p6fh35xrlz4y6mhe4eq ofhehzoj5p4khpkookxb63tmqvrmcxaapgb3v3nm7kd5wjgebs4a
318 prophetgram.i2p cufuwm75gjpt3svl4wjmo6r4zjv6eqyjdpiuqfckgb5aqqdbgyvq
319 psv.i2p psv.i2p pmzcuml2oi2ok2h5i6cepcyxxjrughzgliai6hzspdlyt2bucy7a pmzcuml2oi2ok2h5i6cepcyxxjrughzgliai6hzspdlyt2bucy7a
320 psy.i2p psy.i2p s3elzoj3wo6v6wqu5ehd56vevpz2vrhhjc5m6mxoazicrl43y62q s3elzoj3wo6v6wqu5ehd56vevpz2vrhhjc5m6mxoazicrl43y62q
321 psychonaut.i2p laf5nvzn4wz7ndgtdysmhvebpyjo3fkth7i4z4c2kp7su3wi6e2a
322 psyco.i2p psyco.i2p eoilbrgyaiikxzdtmk2zeoalteupjrvcu3ui23p4wvfqo25bb73q eoilbrgyaiikxzdtmk2zeoalteupjrvcu3ui23p4wvfqo25bb73q
pt.i2p umbkgg3nhvgunyiwo2odfo3ufbdijb2ofg5eha6nyd4ymp4yitna
323 pubsub.i2p pubsub.i2p kse52thhz4srsf2ibw7zj6ua27df5a2u5gnqgf5jxwvranbw6mpa kse52thhz4srsf2ibw7zj6ua27df5a2u5gnqgf5jxwvranbw6mpa
324 pull.git.repo.i2p 3so7htzxzz6h46qvjm3fbd735zl3lrblerlj2xxybhobublcv67q
325 purokishi.i2p purokishi.i2p ia55kcrvskaitnxegirubvderl4vhva6bwkiducbkma4scy2rhca ia55kcrvskaitnxegirubvderl4vhva6bwkiducbkma4scy2rhca
326 purplechan.i2p tyiwxpgs7syjvz3cha3uckaxgondtiktlsvriebyy4qmzgbaj3gq
327 push.git.repo.i2p jef4g5vxnqybm4zpouum3lzbl6ti6456q57nbyj5kfyldkempm3a
328 pvsur.i2p pvsurxi2hz2n45kfrj5b3ny6ko4ipj2u2piftjen44npkpnbwh6q
329 qorg11.i2p qorg11.i2p ivusryc5mfrroomm6s5no4badevf7djzlgzlwarce33no2bsyi3q ivusryc5mfrroomm6s5no4badevf7djzlgzlwarce33no2bsyi3q
quest.idk.i2p k6stkvw3jr6of4j5g3pu34jowfpl4k4jiqih3yozhcvinkok56aa
330 r4sas.i2p r4sas.i2p 2gafixvoztrndawkmhfxamci5lgd3urwnilxqmlo6ittu552cndq 2gafixvoztrndawkmhfxamci5lgd3urwnilxqmlo6ittu552cndq
331 raccoondad.i2p utoagugf3imr6mpjsithhnpvvvyehsnebisovn6kqn4vma6va3ca
332 radio.arav.i2p plkybcgxt4cdanot75cy3pbnqlbqcsrib2fmrpsnug4bqphqvfda
333 radio.idk.i2p gqla6svl56uazumw2a56rzmvfmcr6fb57bm5kpbb6oibqi6o66gq
334 radio.nerds.i2p tpbfxyluryodtfxdpwsfvw7fl35p5ezrjk3tlcv2atlmc4fl2ctq
335 radio.r4sas.i2p radio.r4sas.i2p cv72xsje5ihg6e24atitmhyk2cbml6eggi6b6fjfh2vgw62gdpla cv72xsje5ihg6e24atitmhyk2cbml6eggi6b6fjfh2vgw62gdpla
336 radioliberty.i2p libertyx5gywnmn4snrr2fborvugmthl2x5vf3rh43v3744kmpwa
337 radioplayer.i2p 5tmr7qghx5eecoyvi77rsy7fqxeoyqcdpvg5wasoitn6ywkyobbq
338 raklet.i2p j3vnnihngp3ti2trktoxlyblltjn6gxscbmasb5zun5pdndkxkoq
339 ramble.i2p ramble.i2p smv3cryi3n7d5ll7xpvlhstubi5yj4dadeltyrdwdr4onwd2jvvq smv3cryi3n7d5ll7xpvlhstubi5yj4dadeltyrdwdr4onwd2jvvq
rambler.i2p czptodzrdjjzff6jukipd2xv3pdjfg3gv53m6bsaoaab5fyr7zmq
340 ransack.i2p ransack.i2p mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq
341 realsite.i2p realsite.i2p ffacpzudiclaqh6fkck7ungeacfoafvijduhmwvnmp6e4jridhta ffacpzudiclaqh6fkck7ungeacfoafvijduhmwvnmp6e4jridhta
342 rebel.i2p recipebook.bentasker.i2p nch2arl45crkyk6bklyk2hrdwjf5nztyxdtoshy6llhwqgxho5jq ajagzagm5uyc2oac32ycx42znnatejliqorbk3y66xt25guxnh2q
redzara.i2p ty7bt62rw5ryvk44dd3v5sua6c7wnbpxxqb6v4dohajmwmezi7va
343 reg.i2p reg.i2p shx5vqsw7usdaunyzr2qmes2fq37oumybpudrd4jjj4e4vk4uusa shx5vqsw7usdaunyzr2qmes2fq37oumybpudrd4jjj4e4vk4uusa
reg.rus.i2p k2r2wda4eavt4hoq5hptprqfmixusirq3gi5bl3z2pqzcd6felwa
344 reichsmarket.i2p reichsmarket.i2p 2uj4xomizi75swws7q5icmnavekb2w2ws2wlcqtyltde7pgymraq 2uj4xomizi75swws7q5icmnavekb2w2ws2wlcqtyltde7pgymraq
345 reloaded.i2p wxbh2yq5twqinsw3ztjogqovvdd6h6j5uxeg3lh53x4w7klzv3tq
346 repo.i2p uxe3lqueuuyklel23sf5h25zwgqgjwsofrqchhnptd5y6pedzbxa
347 repo.i2pd.i2p ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
348 repo.r4sas.i2p repo.r4sas.i2p ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
retrobbs-nntp.i2p fkyzl24oxcxvjzkx74t3533x7qjketzmvzk6bwn3d6hj5t7hlw6q
349 retrobbs.i2p retrobbs.i2p mnn77stihntxdoade3ca2vcf456w6vhhvdsfepdvq5qggikvprxq mnn77stihntxdoade3ca2vcf456w6vhhvdsfepdvq5qggikvprxq
350 retrobbs2.i2p retrobbs2.i2p ejff7jtyaus37slkwgeqrrcmyhpj26carp7n27f5h6s5vlbeiy6q ejff7jtyaus37slkwgeqrrcmyhpj26carp7n27f5h6s5vlbeiy6q
rfocke.i2p pphesm2icsbqi7uzsmxpgyy4kc22b3cdpb4uwplkkjmupexva7dq
ricycal.i2p tfkz7rgqh6rwvlo2veftw4why2dej3gztiglzfqfvykyzak2syxa
rideronthestorm.i2p xrdc2qc7quhumhglpbcuiqxr42nuffv4xj4a73jbr4ygepitibqq
351 rpi.i2p rpi.i2p 56p5qxsrvo5ereibevetw2qbj5bronmos7wxunku27g2s4kpbnlq 56p5qxsrvo5ereibevetw2qbj5bronmos7wxunku27g2s4kpbnlq
352 rslight.i2p rslight.i2p bitag46q3465nylvzuikfwjcj7ewi4gjkjtvuxhn73f6vsxffyiq bitag46q3465nylvzuikfwjcj7ewi4gjkjtvuxhn73f6vsxffyiq
rss.i2p j7qbshtyaxwiuzkshduwqqq35ctb4cnfjvd2pnbjn3ugmblemsza
rsync.anonroms.i2p 4q6llvjjpgncu6wbol2rqq24ksrtscu5njj65jjovqlsxounxbdq
ru.i2p m7fqktjgtmsb3x7bvfrdx4tf7htnhytnz5qi2ujjcnph33u3hnja
353 rufurus.i2p rufurus.i2p 7msryymfdta3ssyz34qur6gi4jyfkvca5iyfmnceviipwu7g2wca 7msryymfdta3ssyz34qur6gi4jyfkvca5iyfmnceviipwu7g2wca
354 rus.i2p rus.azathabar.i2p gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga 6gp6ykan6ovr7p6dln56msvmdk6nrtvzoypz5dbhkkt4bdnryjna
355 rvklein.i2p rutor.i2p pzbqr2s25zpgbwiz22nc7hzxlusqxwhpxrsmln63y6fd45whnjcq rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
356 sdmr.i2p ryona.i2p o2vtbbcddamtqqomtf7wbkzzkh2xovt23lc6np7qtxbuv6vtul6q mzt45ux3budteuxz2b4xkwnphgspgljuwp3rxm3d2yr2sij6wopq
357 searx.heckyel.i2p s01.nullchan.i2p bbttsspdeozbfvmjm3ewnbwpot2fkhhk63w54ytptbyokazkydea mirrooeo34iokdgf3wno4ubx6x6uj7f2pqyjmmrvtg4m4parvguq
358 secure.thetinhat.i2p salama.i2p 4q3qyzgz3ub5npbmt3vqqege5lg4zy62rhbgage4lpvnujwfpala 4uoef63gv2sg6dtqmom5oypt6taypklekvlejfox56eiylprzrmq
359 samainu.i2p zlwgylqmlx6wxwnxf3mx64jl6yp6wv4sjeiidqw7k3n2wh2m46pa
360 satoshivision.i2p rn5c533w5baghskquu3gtqlehwjkstzzbk5chbc5qhivsz3a3nqq
361 scamdemia.i2p fdkiv7o4kzaikwkw6hbn7iedidp25lv6eo7yeyeqxai3jz7mrvzq
362 scanner.linuxfarm.i2p kojzsg33v2zxwqp3twpqzfvflaeoxgzxrl3douf2x7xv27ggfnaa
363 secret-site.i2p p6hbhjgdv2e6gyydrqh2ztl6onxnyilmj4ts7d7aj3uqssr7vvfq
364 securityinabox.i2p np3agu3ekd3isrzqzvsw4llwlr3hg5xbw7n7a23n2zfvhhm4e7iq
365 serien.i2p serien.i2p 3z5k3anbbk32thinvwcy4g5al7dmb75fagcm3zgh4rzrt3maphda 3z5k3anbbk32thinvwcy4g5al7dmb75fagcm3zgh4rzrt3maphda
366 sftp.anonroms.i2p seven.i2p uozfd7ttkhjsofmgs7lfcy4pgngs4yp7kvnbhnppebjumgbjhjla anqf44jmf7kby2qcvcx7gug6nuyansdu4msdbnp5kojom27rrm7a
367 shadowwiki.i2p 63gxkfc4hlcbxrdoepw2i2hyxai5qkxmi636ag3y7sf5tq3imoya
368 share-les-miquelots.i2p uxwha4jswnt6jrznj7yhfwldfilvyasnjruimmbylbvq5qykpbpq
369 sharefile.i2p sharefile.i2p o7jgnp7bubzdn7mxfqmghn3lzsjtpgkbnpjjsn6ddevqbchz3rta o7jgnp7bubzdn7mxfqmghn3lzsjtpgkbnpjjsn6ddevqbchz3rta
370 shoieq3.i2p shoieq3.i2p 3fjk4nfk3mccch4hdreghnyijcvovsi3yucjz3qzj5sxngqk5j6q 3fjk4nfk3mccch4hdreghnyijcvovsi3yucjz3qzj5sxngqk5j6q
371 shota.i2p 75xxnc5hkeg7a3z5re4cpybbxt7te3p2krgrrgoka4hib2nr7k4q
372 silkr0adrel0aded.i2p rdqt2xxpsc5tzj7gjvcrpi7jea5gtbetgx7w2npobveg5teatdvq
373 silkroadreloaded.i2p hyn3mwmyeovcn2paujxur2eury2ufqpoahvbbqshfoggljn25tra
374 skank.i2p skank.i2p qiii4iqrj3fwv4ucaji2oykcvsob75jviycv3ghw7dhzxg2kq53q qiii4iqrj3fwv4ucaji2oykcvsob75jviycv3ghw7dhzxg2kq53q
375 smtp.postman.i2p smtp.postman.i2p 3nrunsrgeo6grhx6y6vsx7vibm5vabtockdbys3sqdmj6vha7k5q 3nrunsrgeo6grhx6y6vsx7vibm5vabtockdbys3sqdmj6vha7k5q
376 solr.chudo.i2p snippets.bentasker.i2p utl2ds5vztfomjgerohvxrgaq3g6zrspyku4s35knfmu4rihhgxq vgduvgxudaceslvwlvtda6b4csobvczygcqpklm3yeuke2zgvcaa
377 speed-test.i2p 7lk5mgyi2knhqjjwjeiiuwlrn2rs2s577e7jh7z5rmbe2s6qkjpq
378 spirech.i2p labhopl3kd3eo7cj7kqa6nkwpczc2qj52i37jky77ugqazy7dmna
379 spoika.i2p spoika.i2p u7uyxhgikc5ifj73oz6yedpy5pvtynbqo3n7rk5qyy5h5yhz4wbq u7uyxhgikc5ifj73oz6yedpy5pvtynbqo3n7rk5qyy5h5yhz4wbq
380 sportloto.i2p sportloto.i2p sportloto4cqlq6uhzzvgsgd7rcsfu6mqtk7wp6zmzqwcpflbsdq sportloto4cqlq6uhzzvgsgd7rcsfu6mqtk7wp6zmzqwcpflbsdq
381 spyware.i2p spyware.i2p 36j7itgqmnbinh3ortujakkvqdrbhlqu4b2qcwb46mue3dpzxqfq 36j7itgqmnbinh3ortujakkvqdrbhlqu4b2qcwb46mue3dpzxqfq
382 srr.i2p t6vdyn5sbtorn3bp6i7ndnv4lmxhk4qnqmyqlaxykdhcwatchlza
383 ssh.vimarsha.i2p zttfrujqde5ddndps4stdspvro3khawdhcdgf73pae4i7dnvv4ea
384 stats.i2p stats.i2p kqypgjpjwrphnzebod5ev3ts2vtii6e5tntrg4rnfijqc7rypldq kqypgjpjwrphnzebod5ev3ts2vtii6e5tntrg4rnfijqc7rypldq
385 status.str4d.i2p ycyyjo3psqbo45nuz243xvgvwnmzlanzqbzxv3kh6gyjztv7425q
386 streams.darkrealm.i2p streams.darkrealm.i2p ud3gcmvysjch4lbjr2khmhqpf7r2x5if4q43xkqdptl4k7lc4muq ud3gcmvysjch4lbjr2khmhqpf7r2x5if4q43xkqdptl4k7lc4muq
387 svong.i2p support.i2p wlamzgxjc4k67fn2c2pdems2dzfq3hkdbbt3n7ela7p2wp3pew6a supportpwqa4cc7q43hb67tgd3dvntrwsy6725iufahm7kiluysq
388 support.torproject.i2p 6r7j6jlbrxb35k32zktopvr3w3pidm2baymwol33hq7xmy2sqm3a
389 syndie-project.i2p syndie-project.i2p xa63tpfoaqt3zru2ehxjjfbpadwj4ha6qsdvtcqtyr3b7hmt4iaq xa63tpfoaqt3zru2ehxjjfbpadwj4ha6qsdvtcqtyr3b7hmt4iaq
390 syndie.echelon.i2p syndie.echelon.i2p vwrl2qmcif722fdkn3ldxcgz76df5cq4qypbndzthxwgmykyewta vwrl2qmcif722fdkn3ldxcgz76df5cq4qypbndzthxwgmykyewta
391 tabak.i2p t-ru.i2p y5o2vwb6kart7ivpnbpk4yte3i7kf2dsx7fy3i6w7htqtxhmbzia bkhuehxydyprxpd4372h4boyluardjogyuff5p5l3u7syguavz5a
392 tahoeserve.i2p tahoeserve.i2p yhs7tsjeznxdenmdho5gjmk755wtredfzipb5t272oi5otipfkoa yhs7tsjeznxdenmdho5gjmk755wtredfzipb5t272oi5otipfkoa
393 tails.i2p 5d7sl23h4uer4czjdtlomkb6ykeiss6vqkxzausp6f6gmty2plaa
394 takipsizad.i2p ufkhvmacngokfufxinfkdvfmbpvwvog5vrjiavw5zv32jnekcxia
395 talk.community.i2p talkakxfa6ihzn2mbzar6q5chdtkpnjp633w3tarul2bb6tfmoua
396 talks.i2p v45dmrrbjg3ucrazgl3t2tktyjajo7gvfexhmbdos3pi5kfuocaa
397 teddit.i2p k62ptris7p72aborr4zoanee7xai6wguucveptwgxs5vbgt7qzpq
398 telegram.i2p telegram.i2p i6jow7hymogz2s42xq62gqgej2zdm4xtnmpc6vjcwktdxpdoupja i6jow7hymogz2s42xq62gqgej2zdm4xtnmpc6vjcwktdxpdoupja
399 term99.linuxfarm.i2p dg3mso5klqqgcngalxdh5yvkwv56ou7yotsqxw3twneojytiehra
400 tesla.i2p em2x6bwsbelqfvlgypcywwoov2rib7mvxiy775dmpfs76m4zcdtq
401 testbox.i2p voa7ebdulhpcsupz4zqeyikdjztyhiutgvyri4qxqapistjwptbq
402 testmk16de.bandura.i2p testmk16de.bandura.i2p gbdgvcv6wkwctls3tdx4ljmzo4zry3awrr37rkvrxcwg7jzjoyra gbdgvcv6wkwctls3tdx4ljmzo4zry3awrr37rkvrxcwg7jzjoyra
403 textboard.i2p testshark.i2p 7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua u64ropzplqkncdmi4wcknqehjqudxb6elyut2k44ocvgx7ilpgia
404 texterochtankar.i2p thealiensarehere.i2p woqimbz4v2synkwyif65izfz2t4gbfbqjrai2ic5ok5qhnvmfszq 6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
405 theyosh.i2p theyosh.i2p 5m7ygxhcdyfa3kx3wfjbbunk4pjey7a5zr5lnfb3upgjbhanrita 5m7ygxhcdyfa3kx3wfjbbunk4pjey7a5zr5lnfb3upgjbhanrita
thinking-wiki.i2p feuemwevbvwpnyefpkpet2ign7wvnjww6dhhzis6tobkfh7ybxsq
406 thornworld.i2p thornworld.i2p vinz4ygmodxarocntyjlfwk2wjpvzndlf4hxss2w2t3fk52oplva vinz4ygmodxarocntyjlfwk2wjpvzndlf4hxss2w2t3fk52oplva
407 tmp.heckyel.i2p tictactoe.i2p v67szhqv7r2hm65lk7s2r4aqchswtfanove2p3ca746dg7nqwvoa cbr6sya637smfifq2hxj3kzqw5yv7aws2uknmi6ln45r65xej4aa
408 tome.i2p tmpsend.i2p qktkxwawgixrm5lzofnj5n24zspbnzxy4pvjm7uvaxvmgwrsuvgq r2al7m32cg2ypjcny627wkoiyanrasmorub2wqla3y6gn6rwzzvq
409 torrents.chudo.i2p tomasgl.i2p 5ooemze55xiicrlvzjmz3il23dpo4fz5iqr7hmzrygdepan5m3lq tyiu7xok7hvzymxtgg62rjz7mvzr3bryq4i7ii7gudncogn2lpfa
410 tosios.idk.i2p torch.i2p 4mfy2ggcynt5xjkrdstwju2cqicayq7tg5bcb6o575wvab2div7a vdpmmcq4ysca5rdczr5lqohjtaf5togdy5itoos54s6nn6xqox3a
411 torproject.i2p torprojaxvxevo4c5qvor3ywgasxkubs5ukazrpq3qcxed6lgbrq
412 torque.i2p hc3mefp6cq2btwmmjl76atgtftzswu774dyv4a3qkl34wn4g6vta
413 trac.i2p2.i2p trac.i2p2.i2p i43xzkihpdq34f2jlmtgiyyay5quafg5rebog7tk7xil2c6kbyoa i43xzkihpdq34f2jlmtgiyyay5quafg5rebog7tk7xil2c6kbyoa
tracker.chudo.i2p swhb5i7wcjcohmus3gbt3w6du6pmvl3isdvxvepuhdxxkfbzao6q
tracker.lodikon.i2p q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
tracker.sartorius.i2p a5ijwlahghzstkkb2dr6kxnhlaasoot4gjkl2sx5f7ecudhjdf3a
tracker2.lodikon.i2p q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
414 tracker2.postman.i2p tracker2.postman.i2p 6a4kxkg5wp33p25qqhgwl6sj4yh4xuf5b3p3qldwgclebchm3eea 6a4kxkg5wp33p25qqhgwl6sj4yh4xuf5b3p3qldwgclebchm3eea
415 traditio.i2p translate.idk.i2p wkpjjloylf6jopu2itgpktr45t2xvpjijxilxd5tq4i7wkqgwhhq g2l2zr4moqsk2bec346i5tfd2o22cozm5b2k4ifdhbcayazoz2ea
416 triplechan.i2p ts.i2p blrplscno3ecqb5ihhg73kufmypydjlv4r4gqiajftup5wmcdwna nebcjgfx3f7q4wzihqmguwcdeopaf7f6wyk2dojw4bcuku472zxq
417 trypanom.i2p tube.i2p tgv5acj4khwvr6t44cmryohybd2e5o2kndysnzae6qwcr4hzda3q vipzc556nzjraiqsk5xwvyhz54fvtqt3vrepdarat3zsj4a6eypq
418 tumbach.i2p tumbach.i2p u6pciacxnpbsq7nwc3tgutywochfd6aysgayijr7jxzoysgxklvq u6pciacxnpbsq7nwc3tgutywochfd6aysgayijr7jxzoysgxklvq
419 tutorials.i2p tutorials.i2p zy37tq6ynucp3ufoyeegswqjaeofmj57cpm5ecd7nbanh2h6f2ja zy37tq6ynucp3ufoyeegswqjaeofmj57cpm5ecd7nbanh2h6f2ja
420 tv.i2p txtcon.i2p znccrkhtgz4wqceyofwsqdsraqhdtteqzrag53lgmp6rhkutuy6q txtcons5lrayl7bq7zsk2mt24clocassid3kh2rvyd3rd2xeklpq
421 uk.i2p tymcz.i2p vydbychnep3mzkzhg43ptewp242issy47whamfbxodc4ma6wc63a pyog2x6v3eyna5pdr765osut52tpbmaheyi5atbqfaixmcq4dp7q
422 unodice.i2p ukrainews.i2p fukkqcornjsfn2ggd2h4cgeitu4dbin7hymp5xf6zypwzif2pcoq 2bocbwrmakg252kicblp5i42feao7qpcw3xppms2i5oevkgelpsa
423 w.i2p umbra.i2p j2xorlcb3qxubnthzqu7lt4fvxqn63it4ikwmze55yjkzeeampuq xunb4chkeo5xxpfkwrkaqb5etmqpp4ddgvcmy7qkvtxhk5ihck2q
424 wallet.gostcoin.i2p unqueued.i2p reuvum7lgetglafn72chypesvto773oy53zumagrpigkckybrwda 3gvn4kwd7z74jxc2sn4ucx52dpvpscxbzjluux3ul4t3eu5g64xq
425 upload.arav.i2p a5txjx3gjrnw6do4zr66wpwlayxt3dg7kb43wbr3fjp53mkfkbdq
426 vanity-eth.i2p 6djvwwd3mtozyqhpuyvcwqkje5fk3rbxqbgqgdlr32b6hvdqeq5a
427 varikvalefor.i2p yn7ovvjf4nhf7hhk6qqph7utcoce4f2j325rfeuyapw3emlqfqna
428 vimarsha.i2p ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
429 vps.webhosting.i2p kfqflh2y36jzp26vloaptqpgwtvw4qtz232wv53xxbggkydhpkaq
430 walker.i2p 5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
431 wbnet.i2p 2deeocx7jmrbmjxcpkxecw7yy2z7ybzwz5i6mg3ska3p3d2dx45q
432 web.telegram.i2p web.telegram.i2p re6cgwg2yrkgaixlqvt5ufajbb3w42fsldlq7k5brpvnd5gp6x5a re6cgwg2yrkgaixlqvt5ufajbb3w42fsldlq7k5brpvnd5gp6x5a
webcam.i2p fhrkpj4iscrg6etgdlteseoed37q2ph7cizclgpabgcbnaq6g24a
433 webhosting.i2p webhosting.i2p hxqjbkpn5fxnmurlab6oluyqf3dd2xnxszeawn4ak2s4rpjnfheq hxqjbkpn5fxnmurlab6oluyqf3dd2xnxszeawn4ak2s4rpjnfheq
434 webirc.coldhell.i2p k2d6bius63w3g35j32dn66fssqwbnyvegx6w6pl5mdeojpp4rjba
435 wiki.i2p-projekt.i2p wiki.i2p-projekt.i2p b2rpg7xtzwwfvtorfkrc3m7h222qbobnklra7g4oqhfjx64k2voa b2rpg7xtzwwfvtorfkrc3m7h222qbobnklra7g4oqhfjx64k2voa
436 wiki.ilita.i2p wiki.ilita.i2p r233yskmowqe4od4he4b37wydr5fqzvj3z77v5fdei2etp2kg34a r233yskmowqe4od4he4b37wydr5fqzvj3z77v5fdei2etp2kg34a
437 wikiless.i2p x33lx4h6d7h6xs4eiqwhvaxn3ea5gn2ifmu3jobnvuvn4k4aej7a
438 wikimirror.i2p 2bhh73qhuwjkznnnzjfgo4buo7xy5l4ubhzt3oh23adksscx6gmq
439 wlm.i2p wlm.i2p nigg3rveztrkpzoimq4z46pvbtml27mfhadt7n5bvl3pzzyzefxa nigg3rveztrkpzoimq4z46pvbtml27mfhadt7n5bvl3pzzyzefxa
440 woah.i2p yh2eixirhlhvp7exrtalcwgeirg3fxi2vnumsbp7w6tily5oiwwq
441 wopen.i2p wopen.i2p xvedtnzz3kpwpir23zyr3exrhkrn3267harw7gcjvp25yceyokza xvedtnzz3kpwpir23zyr3exrhkrn3267harw7gcjvp25yceyokza
442 www.i2p2.i2p worcester.i2p rjxwbsw4zjhv4zsplma6jmf5nr24e4ymvvbycd3swgiinbvg7oga 5jtgpuzaabxyhahvbmokb3oeh2lwzpiiqlrg3w7kyyg63lzkwabq
443 www.imule.i2p wordle.i2p 657xcllunctawyjtar5kgh3wpt6z4l7ba6mmam5rf7hev5w2lsvq games3kuxvadv3y6tfowiynk2cnbuokrn2guvhkigqulmrvfnyla
444 www.infoserver.i2p www.infoserver.i2p fq7xhxkdcauhwn4loufcadiiy24zbei25elnup33a3gfrdzrtlyq fq7xhxkdcauhwn4loufcadiiy24zbei25elnup33a3gfrdzrtlyq
445 xadmpp.i2p jb67tnpn67i3pwcuf45rtwu7gq6nkrs72iznhnakpkdzb6dkgfmq
446 xd.i2p jynrjzdp5qajf2jsdif6bgpijuk72zmuiohq3o7omeksw4pdgejq
447 xeha.i2p xeha.i2p oartgetziabrdemxctowp7bbeggc7ktmj7tr4qgk5y5jcz4prbtq oartgetziabrdemxctowp7bbeggc7ktmj7tr4qgk5y5jcz4prbtq
448 xmpp.chudo.i2p xinku.i2p gppd6rx5jkutmt637odkbxh4tjqxy63i4amyhllqn424yt7pd2hq xlsmgjin444ccqu7ff5taoov7hecasdyg53keatpbr2qrvgmzvuq
449 xmpp.ilita.i2p 2dpg43zlfophx5jo4xeqc6cx3zm4x3tfdoinbfuzychf5lwn3dhq
450 xmpp.pubsub.i2p yxbp3sn2x5t6k7hcxsg4njmaxjomr2wvh4xeldxjlij3ms3sikgq
451 xmpp.reloaded.i2p hioylmlm3lf3qgp2ncmym3igx6eyytlwioeq2fip4cwpzjtyxfuq
452 xmpp.rpi.i2p xmpp.rpi.i2p 3yv65pfwiwfuv4ciwtx34clqps6o2mc3vtyltcbqdkcki6untbca 3yv65pfwiwfuv4ciwtx34clqps6o2mc3vtyltcbqdkcki6untbca
453 xmpp.xadmpp.i2p s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
454 xmpp2.reloaded.i2p ufeplugqot5e22kottvejlw7yq24kynw5v5faulehc6n2zs62ura
455 xmrnode.i2p xmrnode.i2p moneroti7lckp4hjrqckoq5cfi2apuyxia42sp5x7tkbzjfwqfiq moneroti7lckp4hjrqckoq5cfi2apuyxia42sp5x7tkbzjfwqfiq
456 xmrradio.i2p olwxvhwaq422rcrlmvh6wgrdczyfyeag645du4cwncutqblkfmaq
457 xn--80ahmijpip2p.i2p assist2a3jsikp7ufmzpa56mlflhi5kmoack5dm6ua5x2hbgckua
458 xn--hallchen-q4a.i2p xn--hallchen-q4a.i2p h5c4idxoweambtqajx3ecpu4iw425mfzckb4rrcvftrr7d2utfgq h5c4idxoweambtqajx3ecpu4iw425mfzckb4rrcvftrr7d2utfgq
459 xn--n3h.i2p xn--r2beng6b4e.i2p 6a5bfeil667ksrdgg5hx5x2dse2v6ovnsng3r2k5gp5tb4z67egq ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
460 xotc.i2p xsden.i2p gqgvzum3xdgtaahkjfw3layb33vjrucmw5btyhrppm463cz3c5oq 4dofwhzlkz3k3sedwzs2sx2fudq3jfvaygffc6kp6hsawmfmz6qa
461 xx.i2p a7hrmb4kbftyk4ovr2la6azi7vjfqwt2zlckos4svoaclqu52j6a
462 yacy.idk.i2p yacy.idk.i2p 7ccyylqqxnyexz2acn3nqjdlwqmd5pororbovrarar2dkw3ddrbq 7ccyylqqxnyexz2acn3nqjdlwqmd5pororbovrarar2dkw3ddrbq
463 yellowonion.i2p 7l4kgsyatdmntck22i27oui3llftjim33ydav7kdew6ewfqvjzfa
464 yggdrasil.acetone.i2p yggdrasil.acetone.i2p tlfhgwzn4v5nlm2or5uy4leqmjbl5bncgcopbqnmcr4hbk3zrvqq tlfhgwzn4v5nlm2or5uy4leqmjbl5bncgcopbqnmcr4hbk3zrvqq
465 yoitsu.i2p yggdrasil.i2p yaaqmj55lsi5c5nukf4hsrift2zslnqkbcghwvjlaqayidtyctwa 7hhvvtephitji3ibz4vhbapj4rikoppd5324yttp6k35gkqgri3q
466 ytlibre.heckyel.i2p yggnet.i2p lfrh5ionyyqcqktuhtcnt3tshmvfwh2j5dldntiahxt7xe7xnojq deyg5puthy6tc44j56ee2zxv3wu36vlmgxjyz2zoc63w66l5ksua
467 yourdomain.i2p witqoik7gjzywta5nss5m6dvialeciismabksrukcvpfdpe6aqha
468 yt2mp3.i2p 7ai77u54gxta2ry326amfq4ugiqgcxd4r663nmxtswcwezyxsbzq
469 zab.i2p zab.i2p n4xen5sohufgjhv327ex4qra77f4tpqohlcyoa3atoboknzqazeq n4xen5sohufgjhv327ex4qra77f4tpqohlcyoa3atoboknzqazeq
470 zeronet.i2p zeronet.i2p fe6pk5sibhkr64veqxkfochdfptehyxrrbs3edwjs5ckjbjn4bna fe6pk5sibhkr64veqxkfochdfptehyxrrbs3edwjs5ckjbjn4bna
471 zog.i2p znc.str4d.i2p 7su4pwd7xicqu44rd36g2a3zjlsv2k6otommnh7ztjpyixyozq2a ufkajv3stxpxlwgwwb2ae6oixdjircnbwog77qxpxv7nt67rpcxq
472 zx.i2p 4ru5b25ixgz2wt2aqskbr2iflv42gt6ta6qet7rv4et5rh2kq6fq
473 zzz.i2p zzz.i2p lhbd7ojcaiofbfku7ixh47qj537g572zmhdc4oilvugzxdpdghua lhbd7ojcaiofbfku7ixh47qj537g572zmhdc4oilvugzxdpdghua
+1
View File
@@ -0,0 +1 @@
../../../../binary/jni/i2pd/contrib/certificates
@@ -1,13 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIB6jCCAY+gAwIBAgIJAPeWi4iUKLBJMAoGCCqGSM49BAMCMHoxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEPMA0GA1UECwwGZmFtaWx5MSAwHgYDVQQDDBdnb3N0Y29p
bi5mYW1pbHkuaTJwLm5ldDAeFw0xNzA4MDExMzQ4MzdaFw0yNzA3MzAxMzQ4Mzda
MHoxCzAJBgNVBAYTAlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNV
BAoMFUkyUCBBbm9ueW1vdXMgTmV0d29yazEPMA0GA1UECwwGZmFtaWx5MSAwHgYD
VQQDDBdnb3N0Y29pbi5mYW1pbHkuaTJwLm5ldDBZMBMGByqGSM49AgEGCCqGSM49
AwEHA0IABC+9iIYumUNnsqKbnTluHimV8OdGvo7yeGxuqhfNNB2b3jvbFJ81scgH
dsZtMQmUxgKM5nH+NQJMoCxHhSlRy2QwCgYIKoZIzj0EAwIDSQAwRgIhANNh7mOp
nBBPRh2a/ipG1VYS0d+mNjSrpz8xWcG3CXPLAiEAjM5MTfv9sOJ74PeZVhFZ02w4
vhgyZCeLJ57f123Lm1A=
-----END CERTIFICATE-----
@@ -1,13 +0,0 @@
-----BEGIN CERTIFICATE-----
MIICCjCCAa2gAwIBAgIEfT9YJTAMBggqhkjOPQQDAgUAMHkxCzAJBgNVBAYTAlhY
MQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBBbm9ueW1v
dXMgTmV0d29yazEPMA0GA1UECxMGZmFtaWx5MR8wHQYDVQQDExZpMnAtZGV2LmZh
bWlseS5pMnAubmV0MB4XDTE1MTIwOTIxNDIzM1oXDTI1MTIwODIxNDIzM1oweTEL
MAkGA1UEBhMCWFgxCzAJBgNVBAgTAlhYMQswCQYDVQQHEwJYWDEeMBwGA1UEChMV
STJQIEFub255bW91cyBOZXR3b3JrMQ8wDQYDVQQLEwZmYW1pbHkxHzAdBgNVBAMT
FmkycC1kZXYuZmFtaWx5LmkycC5uZXQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC
AAR7FPSglYrxeSPzv74A1fTwjajZWV0TljqEMBS/56juZQB/7xOwrsHFHA0eEEF9
dTH64wx3lhV/9sh/stwPU2MToyEwHzAdBgNVHQ4EFgQUQh4uRP1aaX8TJX5dljrS
CeFNjcAwDAYIKoZIzj0EAwIFAANJADBGAiEAhXlEKGCjJ4urpi2db3OIMl9pB+9t
M+oVtAqBamWvVBICIQDBaIqfwLzFameO5ULgGRMysKQkL0O5mH6xo910YQV8jQ==
-----END CERTIFICATE-----
@@ -1,13 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIB6TCCAY+gAwIBAgIJAI7G9MXxh7OjMAoGCCqGSM49BAMCMHoxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEPMA0GA1UECwwGZmFtaWx5MSAwHgYDVQQDDBdpMnBkLWRl
di5mYW1pbHkuaTJwLm5ldDAeFw0xNjAyMjAxNDE2MzhaFw0yNjAyMTcxNDE2Mzha
MHoxCzAJBgNVBAYTAlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNV
BAoMFUkyUCBBbm9ueW1vdXMgTmV0d29yazEPMA0GA1UECwwGZmFtaWx5MSAwHgYD
VQQDDBdpMnBkLWRldi5mYW1pbHkuaTJwLm5ldDBZMBMGByqGSM49AgEGCCqGSM49
AwEHA0IABMlWL3loKVOfsA8Rm91QR53Il69mQiaB7n3rUhfPkJb9MYc1S4198azE
iSnNZSXicKDPIifaCgvONmbACzElHc8wCgYIKoZIzj0EAwIDSAAwRQIgYWmSFuai
TJvVrlB5RlbiiNFCEootjWP8BFM3t/yFeaQCIQDkg4xcQIRGTHhjrCsxmlz9KcRF
G+eIF+ATfI93nPseLw==
-----END CERTIFICATE-----
@@ -1,12 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIBwTCCAWigAwIBAgIJAOZBC10+/38EMAkGByqGSM49BAEwZzELMAkGA1UEBhMC
QVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdp
dHMgUHR5IEx0ZDEgMB4GA1UEAwwXbWNhMi1pMnAuZmFtaWx5LmkycC5uZXQwHhcN
MTYwMzI4MjIwMjMxWhcNMjYwMzI2MjIwMjMxWjBnMQswCQYDVQQGEwJBVTETMBEG
A1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkg
THRkMSAwHgYDVQQDDBdtY2EyLWkycC5mYW1pbHkuaTJwLm5ldDBZMBMGByqGSM49
AgEGCCqGSM49AwEHA0IABNNyfzJr/rMSUeWliVBbJHRF2+qMypOlHEZ9m1nNATVX
64OhuyuVCmbF9R3oDkcZZJQQK1ovXd/EsbAIWDI8K/gwCQYHKoZIzj0EAQNIADBF
AiEApmv2tvMwzlvPjHJG1/5aXOSjYWw2s4ETeGt4abWPQkACIBbF3RuCHuzg+KN8
N0n9hAJztAqhRCdG3hilxF4fbVLp
-----END CERTIFICATE-----
@@ -1,12 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIBxDCCAWmgAwIBAgIJAJnJIdKHYwWcMAoGCCqGSM49BAMCMGcxCzAJBgNVBAYT
AkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRn
aXRzIFB0eSBMdGQxIDAeBgNVBAMMF3ZvbGF0aWxlLmZhbWlseS5pMnAubmV0MB4X
DTE2MDQyNjE1MjAyNloXDTI2MDQyNDE1MjAyNlowZzELMAkGA1UEBhMCQVUxEzAR
BgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5
IEx0ZDEgMB4GA1UEAwwXdm9sYXRpbGUuZmFtaWx5LmkycC5uZXQwWTATBgcqhkjO
PQIBBggqhkjOPQMBBwNCAARf6LBfbbfL6HInvC/4wAGaN3rj0eeLE/OdBpA93R3L
s8EUp0YTEJHWPo9APiKMmAwQSsMJfjhNrbp+UWEnnx2LMAoGCCqGSM49BAMCA0kA
MEYCIQDpQu2KPV5G1JOFLoZvdj+rcvEnjxM/FxkaqikwkVx8FAIhANP7DkUal+GT
SuiCtcqM4QyIBsfsCJBWEMzovft164Bo
-----END CERTIFICATE-----
@@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIEctG1gDANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQYWNldG9uZUBtYWls
LmkycDAeFw0yMTAxMjUxMDMyMjBaFw0zMTAxMjMxMDMyMjBaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBhY2V0b25lQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwqF/BRRmvZ54
5XArgxbytDi7m7MDjFE/whUADruHj/9jXGCxE8DDiiKTt3yhfakV0SNo5xk7AMD+
wqiSNC5JCHTm18gd2M4cQLIaOVRqucLLge4XVgk2WPX6OT98wfxh7mqA3wlSdEpj
dY3Txtkf7VfZLicG76/RBtLFW3aBdsn63hZaQqZE4x/5MJyPVZx59+lys5RmMi0o
LpXJy4HOu1/Gl1iKDJoI/ARFG3y7uP/B+ZtZBitJetTs0HcqycnNJq0tVZf2HiGF
JNy67AL4foxNYPXP6QsvXvp6LRpGANaBCkFCBlriSF+x1zO2H3uAkRnuLYXuKIfB
HudejTp4R57VgZGiHYoawHaF17FVAApue9G8O82XYECjhET35B9yFoOBHTvaMxLU
CKrmayH8KMQon95mfe1qpoO3/YDa8DCxkjAfjdtytat7nt2pGZMH6/cLJxcFiofh
RtRVvb+omv/X12j/6iCFrwP4NvBnAZsa736igbjpyee5n+CSyYxd9cJkRX1vQVk7
WFSqL58Pz+g6CKJmdMPvqNOfUQ6mieBeejmx35B4pLzLcoNxw8R3O1+I2l4dg042
dEydKRQNwdzOec4jYwnKR40iwIyZxpchXWGRbBdyF5RQCbIIo60QBJlfXMJ2svan
q5lYIeWeY3mlODXu4KH4K09y10KT8FsCAwEAAaMhMB8wHQYDVR0OBBYEFMh+DoIL
APNiu2o+6I9A49joNYQuMA0GCSqGSIb3DQEBDQUAA4ICAQBFeOJi0rmkqN5/E3IB
nE2x4mUeLI82tUcN2D3Yu8J81vy4DnH+oMRQFDtYEHW5pfirRmgSZ7MQwYQnqWLp
iTE7SyCxlqGrmVsYp7PzfS1pUT2QeWPtsNYUDdraG0Zr9BkIGB60VMhjMSa9WUrj
lbchzr6E/j/EsEOE7IK08JxIDKCDZM2LLwis4tAM6tmiylkMf2RlUBIRBs1TCO+q
x3yByttNE2P4nQyQVQpjc1qsaOMvJvbxun37dwo+oTQy+hwkA86BWTDRYdN3xwOk
OfAOtlX6zM/wCKMN0ZRnjZoh59ZCn4JXokt3IjZ4n8qJOuJFRKeKGmGeKA8uaGW8
ih5tdB99Gu5Z8LOT1FxAJKwQBn5My0JijPoMit4B0WKNC8hy2zc2YvNfflu1ZRj5
wF4E5ktbtT/LWFSoRPas/GFS8wSXk/kbSB0ArDcRRszb3JHqbALmSQxngz3rfwb3
SHwQIIg956gjMDueEX5CrGrMqigiK53b9fqtpghUrHDsqtEXqeImpAY65PX1asqo
metDNuETHF7XrAjP7TGJfnrYQyeK90iS7j1G68ScBGkKY2nsTnFoXkSk5s5D338E
SUzPaOlh91spmkVY6gQTVQ7BakADBHw+zBgDA1gBN/4JPvgN36hquj63+aG1cKy3
3ZUnv2ipo2fpr69NtuBnutK6gw==
-----END CERTIFICATE-----
@@ -1,35 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIGAzCCA+ugAwIBAgIRAJNGLpTSm2U3GjXmFkjT/0cwDQYJKoZIhvcNAQELBQAw
dzELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxIDAeBgNVBAMM
F2NyZWF0aXZlY293cGF0QG1haWwuaTJwMB4XDTE3MDUyNjE5NDQzOVoXDTI3MDUy
NjE5NDQzOVowdzELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJY
WDEeMBwGA1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAx
IDAeBgNVBAMMF2NyZWF0aXZlY293cGF0QG1haWwuaTJwMIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAo3XP4JToVbfM5e4GxyAqzu2DJV7ohpzlLqMLyz/9
XgZ7ipctNoxVZytoaNgMeAHInJn5OhUC4D+emsgsLJqFjnb2pxf6v45sRZLBMieb
wJlxUmskucpTXwDwuHBk/s3xmH4IluadmzwiCMyycQFH/CNXmu5bonAuZ075rT1Q
a8W0vb8eSfNYXn+FKQBROqsL5Ep+iJM6FX+oWMxJPk/zNluIu9qTdZL7Fts2+ObP
X5WLE4Dtot57vMI2Tg3fjnpgvk3ynQjacS8+CBEbvA/j32PBS1mQB+ebl56CQTBv
glHrXiNdp24TAwy8mwWHknhpt4cvRXOJGZphSVNRYFVk0vv7CTjmQg6WOBGD+d/P
cosvyKxQz4WUSmtaKUftgCBdnemeM7BppZv2URflEOY6Uv3f9xlEC6yVEzSaa2Md
tG6XRkDyupWCBFwmSm1uS+SXXhxAQGn3eMXPFA1XkwNnZtmM9kvSVt34FBE231oN
4oM7rE3ZDyTocZw7cv7bl8idmqsLXDTSFn5Q2iLwvw6ZeTenk8qHrq9kVH1UVE2l
31iKDNdGQkkVcnTWYfiqriwGLpTqbeD/8n9OBgCke1TiKQzP1o66nhkGJTiiRLFK
A8rlSpqBcjGbXDs/X+Ote9MrCxE089eCqN51kzDeQ4Yvy8gDOTBPGEhBLirx+3pp
yWkCAwEAAaOBiTCBhjAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0lBBYwFAYIKwYBBQUH
AwIGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wIAYDVR0OBBkEF2NyZWF0aXZl
Y293cGF0QG1haWwuaTJwMCIGA1UdIwQbMBmAF2NyZWF0aXZlY293cGF0QG1haWwu
aTJwMA0GCSqGSIb3DQEBCwUAA4ICAQCYzeYyPYhW+/SZSfpDl6JTzXy8S6NG+yjq
pcinxaIF4XFoXLwWD3uHR4jgpU750mhHJjpGIaltZjFaqLbqtysbqb0vdShyaK/n
Td4CXrNBvEHvLI6DZyDX4BcDlhCI7/dMCSHXwFIhRHhYSnTsJO32BdP5DsUUAlSW
G0FlEEWjlxcdRwIITv70cFNlNOqJeyvtk9DPT+nEzssKWxVZcqN4GK8dvQVWgL91
8uzrcAYpAEQfmkKzsGmV4v5gWumLZmnzc24hUhVsHhIph4HAmjPMFCppI1tgiwg7
fH71MYB8b9KBJKipkLdAL292mDLS4G3MGQwMbcjnTyIqOktmyyj/1CorZAKqBtzu
Qyo7z8FM2pd5nzk7QDx/vsJ4bNAYvVu7titDW5mv5JDoQcp2uDVGePlonX3I8iFx
CqKFzGHiR0EU8oWw0Pqf+y2rEV4L74agmUR7VbA+/ovz0UnDUoXIynSwpK7Kfo8D
B7ky9RnmsxJX6TXaMVW06IlYuwIUsAWbMhKvdXbGZur5VVi1ZY1/HgZZnoXejzCe
w3mMl6movkcA0noDXQ+eauUDHjktrVUJdZKYvZNjfnz2rB+MI5wB/hzeBv4KuYFE
oTFt8SwTzs0joM4c7RomTxc+QFe832SvjPAnxQn17qSjD8z4c7Ako6sCKvpdBSDm
Hz8KWVkHZg==
-----END CERTIFICATE-----
@@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIESg3kkzANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEZMBcGA1UEAwwQZWNoZWxvbkBtYWls
LmkycDAeFw0xNDA3MzExNjQ3MDJaFw0yNDA3MzAxNjQ3MDJaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRkwFwYDVQQDDBBlY2hlbG9uQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmcEgLwwhzLNe
XLOMSrhwB8hWpOhfjo4s6S/wjBtjjUc8nI3D0hSn3HY26p0rvcvNEWexPUpPULmC
exGkU463nu7PiFONiORI1eJAiUFHibRiaA7Wboyo38pO73KirwjG07Y+Ua0jp+HS
+4FQ/I/9H/bPplReTOU/6hmRbgQ69U8nE68HzZHQxP68yVJ2rPHSXMPhF4R1h0G1
1mCAT+TgTsnwHNGF77XHJnY4/M4e2cgycEZjZow36C3t2mNDVkMgF19QQeb9WmLR
zREn3nq9BJqHpUkn9yWw0kKXTZSds+7UxESfzf3BzK0+hky2fh5H+qbYAo2lz4yj
81MXTAu+4RRkg4DBLlF+2dkclhwQLxxzvkRC6tPkn5i33Yltg7EfzA9IoQ05potJ
I+iOcF+aStfFgFj9u3B5UkcF4P0cH1QD3c6BK4hIezQYqRoPly1gHqg+XdwjG/dr
4as7HA9FTz3p2E8nClpIC1x3hfgwAdfd29aeBxO1WW/z99iMF7TBAF+u5T86XEW1
WpknqCbTli36yJ8a5fPWxZHrryBRJT5yLxejjFeadtutBSwljiVFq+Y38VqwFivq
VLiBt7IxAsZ8iilgfnnnAvBH6chWfSKb4H7kB4TJvDiV96QmmvoEaWYNHZozMhyK
tO3b5w+xqbJXyCLA3Q75jD0km76hjcECAwEAAaMhMB8wHQYDVR0OBBYEFAHQcAam
QRS/EUhuCSr9pB4Ux0rYMA0GCSqGSIb3DQEBDQUAA4ICAQBq1+1QLmgLAjrTg3tb
4XKgAVICQRoBDNUEobQg3pYeUX9eFNya2RxNljuvYpwT80ilGMPOXcjddmr5ngiK
dbGRcuuJk9MPEHtPaPT3+JJlvKQ3B3g2wva2Wz2OAyLZUGQs389K4nTbwh4QF0n2
aHFL8BHiD62hiKnCoNaW4ZovUNNvOxo9lMyAiaFU2gqQNcdad8hP9EAllbvbxDx9
Tjww2UbwQUIHS9rna4Tlu+f0hDXTWIutc2A51W2fJCb7L3+lYO7Wv55ND/WtryLZ
XpMp27+MpuEnN3kQmz/l9R0hIJsWc/x9GQkjm5wEaIZEyTtenqwRKGmVCtAj0Pgv
jn1L3/lWmrNq+OZHb/QeyfKtA3nXfQKVmT98ewQiK/S5i1xIAXCJPytOD887b/o1
cdurTmCiZMwgiQ+HLJqCg3MDa5mvKqRkRdZXfE6aQWEcSbpAhpV15R17q7L+Fg0W
shLSNucxyGNU8PjiC/nOmqfqUiPiMltJjPmscxBLim8foyxjakC4+6N6m+Jzgznj
PocBehFAfKYj66XEwzIBN7Z2uuXoYH9YptkocFjTzvchcryVulDWZ4FWxreUMhpM
4oyjjhSB4tB9clXlwMqg577q3D6Ms0zLTqsztyPN3zr6jGev3jpVq7Q1GOlciHPv
JNJOWTH/Vas1W6XlwGcOOAARTQ==
-----END CERTIFICATE-----
@@ -1,34 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIF3TCCA8WgAwIBAgIRAKye34BRrKyQN6kMVPHddykwDQYJKoZIhvcNAQELBQAw
dzELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxIDAeBgNVBAMM
F2hhbmtoaWxsMTk1ODBAZ21haWwuY29tMB4XDTIwMDUwNzA1MDkxMFoXDTMwMDUw
NzA1MDkxMFowdzELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJY
WDEeMBwGA1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAx
IDAeBgNVBAMMF2hhbmtoaWxsMTk1ODBAZ21haWwuY29tMIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEA5Vt7c0SeUdVkcXXEYe3M9LmCTUyiCv/PHF2Puys6
8luLH8lO0U/pQ4j703kFKK7s4rV65jVpGNncjHWbfSCNevvs6VcbAFoo7oJX7Yjt
5+Z4oU1g7JG86feTwU6pzfFjAs0RO2lNq2L8AyLYKWOnPsVrmuGYl2c6N5WDzTxA
Et66IudfGsppTv7oZkgX6VNUMioV8tCjBTLaPCkSfyYKBX7r6ByHY86PflhFgYES
zIB92Ma75YFtCB0ktCM+o6d7wmnt10Iy4I6craZ+z7szCDRF73jhf3Vk7vGzb2cN
aCfr2riwlRJBaKrLJP5m0dGf5RdhviMgxc6JAgkN7Ius5lkxO/p3OSy5co0DrMJ7
lvwdZ2hu0dnO75unTt6ImR4RQ90Sqj7MUdorKR/8FcYEo+twBV8cV3s9kjuO5jxV
g976Q+GD3zDoixiege3W5UT4ff/Anm4mJpE5PKbNuO+KUjk6WA4B1PeudkEcxkO4
tQYy0aBzfjeyENee9otd4TgN1epY4wlHIORCa3HUFmFZd9VZMQcxwv7c47wl2kc9
Cv1L6Nae78wRzRu2CHD8zWhq+tv5q7Md2eRd3mFPI09ljsOgG2TQv6300WvHvI5M
enNdjYjLqOTRCzUJ2Jst4BZsvDxjWYkHsSZc1UORzm2LQmh2bJvbhC3m81qANGw6
ZhcCAwEAAaNkMGIwDgYDVR0PAQH/BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMC
BggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCAGA1UdDgQZBBdoYW5raGlsbDE5
NTgwQGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAgEAVtMF7lrgkDLTNXlavI7h
HJqFxFHjmxPk3iu2Qrgwk302Gowqg5NjVVamT20cXeuJaUa6maTTHzDyyCai3+3e
roaosGxZQRpRf5/RBz2yhdEPLZBV9IqxGgIxvCWNqNIYB1SNk00rwC4q5heW1me0
EsOK4Mw5IbS2jUjbi9E5th781QDj91elwltghxwtDvpE2vzAJwmxwwBhjySGsKfq
w8SBZOxN+Ih5/IIpDnYGNoN1LSkJnBVGSkjY6OpstuJRIPYWl5zX5tJtYdaxiD+8
qNbFHBIZ5WrktMopJ3QJJxHdERyK6BFYYSzX/a1gO7woOFCkx8qMCsVzfcE/z1pp
JxJvshT32hnrKZ6MbZMd9JpTFclQ62RV5tNs3FPP3sbDsFtKBUtj87SW7XsimHbZ
OrWlPacSnQDbOoV5TfDDCqWi4PW2EqzDsDcg+Lc8EnBRIquWcAox2+4zmcQI29wO
C1TUpMT5o/wGyL/i9pf6GuTbH0D+aYukULropgSrK57EALbuvqnN3vh5l2QlX/rM
+7lCKsGCNLiJFXb0m6l/B9CC1947XVEbpMEAC/80Shwxl/UB+mKFpJxcNLFtPXzv
FYv2ixarBPbJx/FclOO8G91QC4ZhAKbsVZn5HPMSgtZe+xWM1r0/UJVChsMTafpd
CCOJyu3XtyzFf+tAeixOnuQ=
-----END CERTIFICATE-----
@@ -1,33 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFxzCCA6+gAwIBAgIQZfqn0yiJL3dGgCjeOeWS6DANBgkqhkiG9w0BAQsFADBw
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEZMBcGA1UEAwwQ
aG90dHVuYUBtYWlsLmkycDAeFw0xNjExMDkwMzE1MzJaFw0yNjExMDkwMzE1MzJa
MHAxCzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgxHjAcBgNV
BAoTFUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRkwFwYDVQQD
DBBob3R0dW5hQG1haWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
AgEA21Bfgcc9VVH4l2u1YvYlTw2OPUyQb16X2IOW0PzdsUO5W78Loueu974BkiKi
84lQZanLr0OwEopdfutGc6gegSLmwaWx5YCG5uwpLOPkDiObfX+nptH6As/B1cn+
mzejYdVKRnWd7EtHW0iseSsILBK1YbGw4AGpXJ8k18DJSzUt2+spOkpBW6XqectN
8y2JDSTns8yiNxietVeRN/clolDXT9ZwWHkd+QMHTKhgl3Uz1knOffU0L9l4ij4E
oFgPfQo8NL63kLM24hF1hM/At7XvE4iOlObFwPXE+H5EGZpT5+A7Oezepvd/VMzM
tCJ49hM0OlR393tKFONye5GCYeSDJGdPEB6+rBptpRrlch63tG9ktpCRrg2wQWgC
e3aOE1xVRrmwiTZ+jpfsOCbZrrSA/C4Bmp6AfGchyHuDGGkRU/FJwa1YLJe0dkWG
ITLWeh4zeVuAS5mctdv9NQ5wflSGz9S8HjsPBS5+CDOFHh4cexXRG3ITfk6aLhuY
KTMlkIO4SHKmnwAvy1sFlsqj6PbfVjpHPLg625fdNxBpe57TLxtIdBB3C7ccQSRW
+UG6Cmbcmh80PbsSR132NLMlzLhbaOjxeCWWJRo6cLuHBptAFMNwqsXt8xVf9M0N
NdJoKUmblyvjnq0N8aMEqtQ1uGMTaCB39cutHQq+reD/uzsCAwEAAaNdMFswDgYD
VR0PAQH/BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNV
HRMBAf8EBTADAQH/MBkGA1UdDgQSBBBob3R0dW5hQG1haWwuaTJwMA0GCSqGSIb3
DQEBCwUAA4ICAQCibFV8t4pajP176u3jx31x1kgqX6Nd+0YFARPZQjq99kUyoZer
GyHGsMWgM281RxiZkveHxR7Hm7pEd1nkhG3rm+d7GdJ2p2hujr9xUvl0zEqAAqtm
lkYI6uJ13WBjFc9/QuRIdeIeSUN+eazSXNg2nJhoV4pF9n2Q2xDc9dH4GWO93cMX
JPKVGujT3s0b7LWsEguZBPdaPW7wwZd902Cg/M5fE1hZQ8/SIAGUtylb/ZilVeTS
spxWP1gX3NT1SSvv0s6oL7eADCgtggWaMxEjZhi6WMnPUeeFY8X+6trkTlnF9+r/
HiVvvzQKrPPtB3j1xfQCAF6gUKN4iY+2AOExv4rl/l+JJbPhpd/FuvD8AVkLMZ8X
uPe0Ew2xv30cc8JjGDzQvoSpBmVTra4f+xqH+w8UEmxnx97Ye2aUCtnPykACnFte
oT97K5052B1zq+4fu4xaHZnEzPYVK5POzOufNLPgciJsWrR5GDWtHd+ht/ZD37+b
+j1BXpeBWUBQgluFv+lNMVNPJxc2OMELR1EtEwXD7mTuuUEtF5Pi63IerQ5LzD3G
KBvXhMB0XhpE6WG6pBwAvkGf5zVv/CxClJH4BQbdZwj9HYddfEQlPl0z/XFR2M0+
9/8nBfGSPYIt6KeHBCeyQWTdE9gqSzMwTMFsennXmaT8gyc7eKqKF6adqw==
-----END CERTIFICATE-----
@@ -1,33 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFvjCCA6agAwIBAgIQIDtv8tGMh0FyB2w5XjfZxTANBgkqhkiG9w0BAQsFADBt
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEWMBQGA1UEAwwN
aWdvckBub3ZnLm5ldDAeFw0xNzA3MjQxODI4NThaFw0yNzA3MjQxODI4NThaMG0x
CzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgxHjAcBgNVBAoT
FUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRYwFAYDVQQDDA1p
Z29yQG5vdmcubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxst4
cam3YibBtQHGPCPX13uRQti56U3XZytSZntaKrUFmJxjt41Q/mOy3KYo+lBvhfDF
x3tWKjgP9LJOJ28zvddFhZVNxqZRjcnAoPuSOVCw88g01D9OAasKF11hCfdxZP6h
vGm8WCnjD8KPcYFxJC4HJUiFeProAwuTzEAESTRk4CAQe3Ie91JspuqoLUc5Qxlm
w5QpjnjfZY4kaVHmZDKGIZDgNIt5v85bu4pWwZ6O+o90xQqjxvjyz/xccIec3sHw
MHJ8h8ZKMokCKEJTaRWBvdeNXki7nf3gUy/3GjYQlzo0Nxk/Hw4svPcA+eL0AYiy
Jn83bIB5VToW2zYUdV4u3qHeAhEg8Y7HI0kKcSUGm9AQXzbzP8YCHxi0sbb0GAJy
f1Xf3XzoPfT64giD8ReUHhwKpyMB6uvG/NfWSZAzeAO/NT7DAwXpKIVQdkVdqy8b
mvHvjf9/kWKOirA2Nygf3r79Vbg2mqbYC/b63XI9hheU689+O7qyhTEhNz+11X0d
Zax7UPrLrwOeB9TNfEnztsmrHNdv2n+KcOO2o11Wvz2nHP9g+dgwoZSD1ZEpFzWP
0sD5knKLwAL/64qLlAQ1feqW7hMr80IADcKjLSODkIDIIGm0ksXqEzTjz1JzbRDq
jUjq7EAlkw3G69rv1gHxIntllJRQidAqecyWHOMCAwEAAaNaMFgwDgYDVR0PAQH/
BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8E
BTADAQH/MBYGA1UdDgQPBA1pZ29yQG5vdmcubmV0MA0GCSqGSIb3DQEBCwUAA4IC
AQADyPaec28qc1HQtAV5dscJr47k92RTfvan+GEgIwyQDHZQm38eyTb05xipQCdk
5ruUDFXLB5qXXFJKUbQM6IpaktmWDJqk4Zn+1nGbtFEbKgrF55pd63+NQer5QW9o
3+dGj0eZJa3HX5EBkd2r7j2LFuB6uxv3r/xiTeHaaflCnsmyDLfb7axvYhyEzHQS
AUi1bR+ln+dXewdtuojqc1+YmVGDgzWZK2T0oOz2E21CpZUDiP3wv9QfMaotLEal
zECnbhS++q889inN3GB4kIoN6WpPpeYtTV+/r7FLv9+KUOV1s2z6mxIqC5wBFhZs
0Sr1kVo8hB/EW/YYhDp99LoAOjIO6nn1h+qttfzBYr6C16j+8lGK2A12REJ4LiUQ
cQI/0zTjt2C8Ns6ueNzMLQN1Mvmlg1Z8wIB7Az7jsIbY2zFJ0M5qR5VJveTj33K4
4WSbC/zMWOBYHTVBvGmc6JGhu5ZUTZ+mWP7QfimGu+tdhvtrybFjE9ROIE/4yFr6
GkxEyt0UY87TeKXJ/3KygvkMwdvqGWiZhItb807iy99+cySujtbGfF2ZXYGjBXVW
dJOVRbyGQkHh6lrWHQM4ntBv4x+5QA+OAan5PBF3tcDx1vefPx+asYslbOXpzII5
qhvoQxuRs6j5jsVFG6RdsKNeQAt87Mb2u2zK2ZakMdyD1w==
-----END CERTIFICATE-----
@@ -1,34 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFzTCCA7WgAwIBAgIQCnVoosrOolXsY+bR5kByeTANBgkqhkiG9w0BAQsFADBy
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEbMBkGA1UEAwwS
bGF6eWdyYXZ5QG1haWwuaTJwMB4XDTE2MTIyNzE1NDEzNloXDTI2MTIyNzE1NDEz
NlowcjELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwG
A1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGzAZBgNV
BAMMEmxhenlncmF2eUBtYWlsLmkycDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAN3q+0nUzz9+CBSoXUNf8K6kIc9zF+OP1NVBmOu3zTtkcEnhTtoDNXeU
EV8DhlBhEACbPomA+szQ5zp3O3OYQc2NV50S7KKqlfn5LBBE3BL2grTeBxUMysDd
0TlpxcHKwaog4TZtkHxeNO94F1vgeOkOnlpCQ6H3cMkPEGG3zu1A1ccgPiYO838/
HNMkSF//VZJLOfPe1vmn9xTB7wZ0DLpEh12QZGg3irA+QDX5zy6Ffl+/Lp+L4tXT
uPZUaC6CL6EABX4DvQcFrOtiWfkbi/ROgYCeTrYw1XbDHfPc+MBxGo1bX7JjnD0o
mFFvo+PjxvWDmCad2TaITh6DwGEeWKu8NtJAyaO5p1ntauuWGB5Xzua4aMmIy7GT
esHQkhW+5IooM0R5bZI8/KXo4Bj52bX5qv+oBiExc6PUUTLWyjoWHb7fKdddwGfc
lUfniV/fw7/9ysIkQZcXLDCXR6O/nH9aGDZ7bxHedw4/LxAXYPfNojb5j7ZVa65o
PWD5xuQfbE+95DdbnKjcjYiam4kjApe7YPwOhtoRJYSGAkrpIMfzFxCXgjTsi3Kw
Ov+sYmBvWBK4ROWQZTgHei3x4FpAGWHCAeTeeQGKmWQ8tT7ZklWD9fBm3J/KXo7I
WCxRW9oedItyqbRuAGxqaoaGSk6TtPVjyPIUExDp1dr4p1nM1TOLAgMBAAGjXzBd
MA4GA1UdDwEB/wQEAwIChDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
DwYDVR0TAQH/BAUwAwEB/zAbBgNVHQ4EFAQSbGF6eWdyYXZ5QG1haWwuaTJwMA0G
CSqGSIb3DQEBCwUAA4ICAQA2fei/JajeQ7Rn0Hu3IhgF9FDXyxDfcS9Kp+gHE56A
50VOtOcvAQabi/+lt5DqkiBwanj0Ti/ydFRyEmPo45+fUfFuCgXcofro8PGGqFEz
rZGtknH/0hiGfhLR9yQXY8xFS4yvLZvuIcTHa9QPJg3tB9KeYQzF91NQVb5XAyE7
O3RvollADTV31Xbhxjb7lgra6ff9dZQJE6xtlSk/mnhILjlW80+iPKuj3exBgbJv
ktiR4ZT4xjh1ZgNJX5br86MZrhyyyGWwHWHS0e443eSrrmAPD69zxsfvhoikRX1z
tDz0zB70DwS4pSbVrFuWaIAcbg36vWO8tYPBzV8iBB/tBTURGJjv6Q0EoI5GHmJi
LOhU3B6xublv8Tcoc3tgMqI9STnWROtTiCS6LsWNSXhVpIZqvaiOEtPN4HyL33sf
j5rfPq76gKrTloeLnwLGq0Rs94ScffYkBap3fQ/ALb87LQcwSN4EkObur5pcd7TS
qNdanvCGK8v1UYVzH4l9jekPGsM5euohwAkIl1kZ6+tqGY/MTa7HwTTQyLDTco1t
sPy6neN46+H5DYHADyU5H2G39Kk3WcLmPtfxlPDM6e73+47fJkXnmiaWM0Lrt80y
Enng6bFGMZH01ZsqBk09H+Uswv8h7k69q9uWAS95KE0omCMVtIpoPZXTnRhe6mBC
+g==
-----END CERTIFICATE-----
@@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFiTCCA3GgAwIBAgIEY2XeQjANBgkqhkiG9w0BAQ0FADB1MQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxHjAcBgNVBAcMFUkyUCBBbm9ueW1vdXMgTmV0d29yazEL
MAkGA1UECgwCWFgxDDAKBgNVBAsMA0kyUDEeMBwGA1UEAwwVcjRzYXMtcmVzZWVk
QG1haWwuaTJwMB4XDTE3MDYyMjEwNTQ1NFoXDTI3MDYyMDEwNTQ1NFowdTELMAkG
A1UEBhMCWFgxCzAJBgNVBAgMAlhYMR4wHAYDVQQHDBVJMlAgQW5vbnltb3VzIE5l
dHdvcmsxCzAJBgNVBAoMAlhYMQwwCgYDVQQLDANJMlAxHjAcBgNVBAMMFXI0c2Fz
LXJlc2VlZEBtYWlsLmkycDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
ANgsj5LhF4uGG4RDueShqYQZsG5Rz6XUAtK9sVGFdmdJTDZirUMZcCGCGZP/Harz
QaZU9EYxOCztnpLCQksSCpdRsij56MURS0tW/1x7LHIDUOi911Of57jgIHH+3E5n
6tuRxEk6J/9Ji3PI+89kl0sPKMVFMyKkINprVTA5zr/keyYEG0p6HSEYYiJkQH78
8uoOCAmlk9mxkJFb+zviCk6jsYwdH+ofD6Lw5ueOlYUbeZ9Nd7jfSdf20XM7ofIw
W2COtsbq3J7vNrQJMV7HkHxVx/7OqmjQF02OahZFZREVZqbHpL501iTn9Iqd5qKq
IsxYjk7ZnP4UUCBk8NOU5TuWsy0qNw+TJDI9s55Fi4KPtXWf47HIl6CdpM5y/D5L
eufCojSwPKlrD6x9gTyJdBggBZRIyplXdKffo/95hUhEkv86yfsVVR7Gu1uy0O8T
Gtb8Da/oi5eEZBHWonLVicLPei5jeo+1gbR09PQ6s41uMZlOhMe4RSgiIQj/7UVo
ffKdl1MPNKr1u2fgVj8kxqg8ZivWKQ2taEgimU2EkQcNcE96M9yQlNNpNvqSAQVk
wYXlHt0AN6A1A8u1pItxaTwXnbmx+OBJZoKl4ZQeaC8wtKjTgAgVXp+g5iot2gir
LjxCRx1WLG1c8vRg1W8CDZII8Swc8EWpMhI+0hPv7/4/AgMBAAGjITAfMB0GA1Ud
DgQWBBTN5sKbrNzwE8sgMGDekfOPgX8/JDANBgkqhkiG9w0BAQ0FAAOCAgEAjLaB
bHqvFTs0ikAtesk9r8+8XVIsP5FR57zZCek2vxkHcCQWw8Uqs3ndInRX4FirKSLT
WRb4aSwFCkrmwueecTpXN/RBC+fZj+POCfdILEsA+FGreAM2q5ZXv/Q0jyIXOXEM
+KL0JZXnNS0/dqR3IYbC7f39CL6Sf40gRGTwTWWGg3KnynoS0v1zQcZLTMhHBD2X
tgdIPbroq9t4gXa7Dhm0egYfQOI/7re2wiZT7UWVVwEpYqKf6JApFHa1nNOFMrLF
45JHQIHArkoxpQdfSe9HBoyJiB5vz398rHZeqbJaF3PIg9rxWWY/NvvOVuIk8U5z
0jExhg29a88B32U7ndvQJqIuGiQghzCiLxC/y1+wAdpeDSbD3OAOHqplvMj3BUn9
yhDSLSjtfBJjnXKxtEcWLR0edHCGEk5mAcL7q1WNxDpxaICwGGpNZN53CtFx7amb
egYil448DmiqoQTCTE9pBz8YjwiVfCYLYv17O0NJyYM9Efy/wL3rFlsPJniWHMuH
imZybVU4ukjvfOZ+LY4COTwz6w4sfA7a+i+2mOynC7eKX8Yg6i1nXlcY1Z8ykNgi
7B3kz1T/DV56CIm6QUWtepfuKTYq4C6QrBBIXLk1d5g95aWA21u1LRqNZ9GLH+eA
gfvIm7v+cELj8a53EQY0LafzZqNC5kQAp916coU=
-----END CERTIFICATE-----
@@ -1,34 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIQWjHyC+NRh3emuuAwcEnKSjANBgkqhkiG9w0BAQsFADB0
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEdMBsGA1UEAwwU
cmVzZWVkQGRpdmEuZXhjaGFuZ2UwHhcNMjAwNjA5MDUzNjQ1WhcNMzAwNjA5MDUz
NjQ1WjB0MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4w
HAYDVQQKExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEdMBsG
A1UEAwwUcmVzZWVkQGRpdmEuZXhjaGFuZ2UwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQC6BJGeMEgoXk9dlzKVfmwHrT2VpwTT+wRJvh3eAM746u4uDT2y
NPHXhdGcQ9dRRZ63T98IshWCwOmWSlm1kdWkmKkVVb93GUoMQ3gziCi0apLJMAau
gEu/sPCbORS2dPsQeAPW2eIsJO7dSjTRiQAuquW//NcIXG4gnxDA52lgke1BvpKr
83SJlCrqECAy6OKtZ49yn75CqmPPWFn0b/E8bxruN5ffeipTTospvdEtT41gXUqk
hOz3k8ang+QTWiP//jOjk31KXZ2dbh0LOlNJOvRxCqQmBZafNxxCR4DH8RewfPlL
qOiOJVzbLSP9RjqPLwnny5BOjbLWXcaybN5Qv2Pyd4mKtN3EpqBwRu7VnzXpsuuG
gRbxNmfKJ/vBEGrZAHAxi0NkHHEEne3B7pPDc2dVZHOfTfCu31m9uDHZ4eHEsNOJ
SJRiGjq74l0chCSlBGLrD1Y9LPyqadjdwuB9bzM0tMFC1wPflanQCflhhnEzAfbN
BaU2GRXo/I1UCDW/dH1FIkqEe61eMW1Lwqr5tdlrUpdr5VIddTyNJRBJogbZ+HZE
8mcoJW2lXRAkYi7KEm4b4EQNe7sbRNTF0j+fAJ+3ZOZ3O3SMHss6ignlSa+giVim
VvL+Joc6wpSzxpeNPf6m82cEO/UvifFYeOC9TpiRriSt+vvgQVzQtfQ+fQIDAQAB
o2EwXzAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF
BwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHJlc2VlZEBkaXZhLmV4Y2hh
bmdlMA0GCSqGSIb3DQEBCwUAA4ICAQCFGOb1dHlwjmgFHEER6oMiGWl1mI3Hb7GX
NNI6QUhZQ+iEWGYtsOTk3Q8xejL8t6AG/ZLXfZviLIJXZc5XZfPXk0ezDSC2cYxQ
ZAyYPw2dRP14brI86sCSqNAFIax/U5SM3zXhCbBiTfaEoBPfDpvKjx+VliaITUnc
sHTRn+C5ID5M8cZIqUSGECPEMU/bDtuRNJLTKYaJ98yXtYuS2CWsMEM4o0GGcnYQ
5HOZT/lbbwfq1Ks7IyJpeIpRaS5qckGcfgkxFY4eGujDuaFeWC+HCIh9RzBJrqZR
73Aly4Pyu7Jjg8xCCf9MswDjtqAjEHgWCmRLWL7p3H6cPipFKNMY6yomYZl5urE7
q6DUAZFKwPqlZpyeaY4/SVvaHTxuPp7484s3db4kPhdmuQS/DOB/7d+cn/S580Vy
ALqlFQjtjLEaT16upceAV0gYktDInE6Rtym/OsqilrtYks/Sc0GROSz8lJhDDWbr
W3t92muSXDh0rYrEUYWl+xl1gSTpbIP75zzU+cUr1E/qlRY9qZn66FsJpOuN0I0q
UXsQS/bPDcA+IW48Hd9LfO9gtTWZslwFTimjEvQ2nJAnUlUQP6OfuPUKHoYX/CwY
2LCN8+pv2bKPDVHvp0lf6xrbbZNvFtzfR0G3AprZjYpuu2XgjVB5nJnwmbH74b9w
LD8d2z2Lgg==
-----END CERTIFICATE-----
@@ -1,31 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFVDCCAzwCCQC2r1XWYtqtAzANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMRMwEQYDVQQKDApQdXJwbGUgSTJQ
MQ0wCwYDVQQLDARJMlBEMR8wHQYJKoZIhvcNAQkBFhBvcmlnbmFsQG1haWwuaTJw
MB4XDTE1MDIyMjEzNTgxOFoXDTI1MDIxOTEzNTgxOFowbDELMAkGA1UEBhMCWFgx
CzAJBgNVBAgMAlhYMQswCQYDVQQHDAJYWDETMBEGA1UECgwKUHVycGxlIEkyUDEN
MAsGA1UECwwESTJQRDEfMB0GCSqGSIb3DQEJARYQb3JpZ25hbEBtYWlsLmkycDCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALp3D/gdvFjrMm+IE8tHZCWE
hQ6Pp0CCgCGDBC3WQFLqR98bqVPl4UwRG/MKY/LY7Woai06JNmGcpfw0LMoNnHxT
bvKtDRe/8kQdhdLHhgIkWKSbMvTAl7uUdV6FzsPgDR0x7scoFVWEhkF0wfmzGF2V
yr/WCBQejFPu69z03m5tRQ8Xjp2txWV45RawUmFu50bgbZvLCSLfTkIvxmfJzgPN
pJ3sPa/g7TBZl2uEiAu4uaEKvTuuzStOWCGgFaHYFVlTfFXTvmhFMqHfaidtzrlu
H35WGrmIWTDl6uGPC5QkSppvkj73rDj5aEyPzWMz5DN3YeECoVSchN+OJJCM6m7+
rLFYXghVEp2h+T9O1GBRfcHlQ2E3CrWWvxhmK8dfteJmd501dyNX2paeuIg/aPFO
54/8m2r11uyF29hgY8VWLdXtqvwhKuK36PCzofEwDp9QQX8GRsEV4pZTrn4bDhGo
kb9BF7TZTqtL3uyiRmIyBXrNNiYlA1Xm4fyKRtxl0mrPaUXdgdnCt3KxOAJ8WM2B
7L/kk9U8C/nexHbMxIZfTap49XcUg5dxSO9kOBosIOcCUms8sAzBPDV2tWAByhYF
jI/Tutbd3F0+fvcmTcIFOlGbOxKgO2SfwXjv/44g/3LMK6IAMFB9UOc8KhnnJP0f
uAHvMXn1ahRs4pM1VizLAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAIOxdaXT+wfu
nv/+1hy5T4TlRMNNsuj79ROcy6Mp+JwMG50HjTc0qTlXh8C7nHybDJn4v7DA+Nyn
RxT0J5I+Gqn+Na9TaC9mLeX/lwe8/KomyhBWxjrsyWj1V6v/cLO924S2rtcfzMDm
l3SFh9YHM1KF/R9N1XYBwtMzr3bupWDnE1yycYp1F4sMLr5SMzMQ0svQpQEM2/y5
kly8+eUzryhm+ag9x1686uEG5gxhQ1eHQoZEaClHUOsV+28+d5If7cqcYx9Hf5Tt
CiVjJQzdxBF+6GeiJtKxnLtevqlkbyIJt6Cm9/7YIy/ovRGF2AKSYN6oCwmZQ6i1
8nRnFq5zE7O94m+GXconWZxy0wVqA6472HThMi7S+Tk/eLYen2ilGY+KCb9a0FH5
5MOuWSoJZ8/HfW2VeQmL8EjhWm5F2ybg28wgXK4BOGR3jQi03Fsc+AFidnWxSKo0
aiJoPgOsfyu8/fnCcAi07kSmjzUKIWskApgcpGQLNXHFK9mtg7+VA8esRnfLlKtP
tJf+nNAPY1sqHfGBzh7WWGWal5RGHF5nEm3ta3oiFF5sMKCJ6C87zVwFkEcRytGC
xOGmiG1O1RPrO5NG7rZUaQ4y1OKl2Y1H+nGONzZ3mvoAOvxEq6JtUnU2kZscpPlk
fpeOSDoGBYJGbIpzDreBDhxaZrwGq36k
-----END CERTIFICATE-----
+6 -2
View File
@@ -12,7 +12,7 @@ loglevel = none
ipv4 = true
ipv6 = false
# ssu = true
ssu = false
bandwidth = L
# share = 100
@@ -23,6 +23,10 @@ bandwidth = L
[ntcp2]
enabled = true
[ssu2]
enabled = true
published = true
[http]
enabled = true
address = 127.0.0.1
@@ -63,7 +67,7 @@ enabled = false
# port = 7656
[precomputation]
elgamal = true
elgamal = false
[upnp]
enabled = true
-4
View File
@@ -1,4 +0,0 @@
http://reg.i2p/hosts.txt
http://identiguy.i2p/hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
http://i2p-projekt.i2p/hosts.txt
@@ -10,6 +10,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.Locale;
import android.annotation.TargetApi;
import android.content.res.AssetManager;
@@ -28,9 +29,11 @@ public class DaemonWrapper {
private static final String TAG = "i2pd";
private final AssetManager assetManager;
private final ConnectivityManager connectivityManager;
private String i2pdpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd/";
private String i2pdpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd";
private boolean assetsCopied;
private static final String appLocale = Locale.getDefault().getDisplayLanguage(Locale.ENGLISH).toLowerCase(); // lower-case system language (like "english")
public interface StateUpdateListener {
void daemonStateUpdate(State oldValue, State newValue);
}
@@ -82,13 +85,12 @@ public class DaemonWrapper {
}
public int getTransitTunnelsCount() {
return I2PD_JNI.GetTransitTunnelsCount();
return I2PD_JNI.getTransitTunnelsCount();
}
public enum State {
uninitialized(R.string.uninitialized),
starting(R.string.starting),
jniLibraryLoaded(R.string.jniLibraryLoaded),
startedOkay(R.string.startedOkay),
startFailed(R.string.startFailed),
gracefulShutdownInProgress(R.string.gracefulShutdownInProgress),
@@ -126,7 +128,7 @@ public class DaemonWrapper {
private String daemonStartResult = "N/A";
private void fireStateUpdate1(State oldValue, State newValue) {
Log.i(TAG, "daemon state change: " + state);
Log.d(TAG, "daemon state change: " + state);
for (StateUpdateListener listener : stateUpdateListeners) {
try {
listener.daemonStateUpdate(oldValue, newValue);
@@ -150,7 +152,7 @@ public class DaemonWrapper {
public void changeDataDir(String dataDir, Boolean updateAssets) {
I2PD_JNI.setDataDir(dataDir);
if( updateAssets ) processAssets();
if (updateAssets) processAssets();
//ToDo: move old dir to new dir?
}
@@ -165,7 +167,6 @@ public class DaemonWrapper {
} catch (Throwable tr) {
Log.e(TAG, "", tr);
}
setState(State.stopped);
}
}
@@ -175,8 +176,7 @@ public class DaemonWrapper {
try {
processAssets();
I2PD_JNI.loadLibraries();
setState(State.jniLibraryLoaded);
registerNetworkCallback();
//registerNetworkCallback();
} catch (Throwable tr) {
lastThrowable = tr;
setState(State.startFailed);
@@ -184,7 +184,11 @@ public class DaemonWrapper {
}
try {
synchronized (DaemonWrapper.this) {
I2PD_JNI.setDataDir(i2pdpath);//(Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd");
I2PD_JNI.setDataDir(i2pdpath); // (Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd");
Log.i(TAG, "setting webconsole language to " + appLocale);
I2PD_JNI.setLanguage(appLocale);
daemonStartResult = I2PD_JNI.startDaemon();
if ("ok".equals(daemonStartResult)) {
setState(State.startedOkay);
@@ -199,65 +203,57 @@ public class DaemonWrapper {
}
private void processAssets() {
if (!assetsCopied) {
try {
assetsCopied = true;
File holderFile = new File(i2pdpath, "assets.ready");
String versionName = BuildConfig.VERSION_NAME; // here will be app version, like 2.XX.XX
StringBuilder text = new StringBuilder();
Log.d(TAG, "checking assets");
File holderFile = new File(i2pdpath, "assets.ready");
String versionName = BuildConfig.VERSION_NAME; // here will be app version, like 2.XX.XX
StringBuilder text = new StringBuilder();
if (holderFile.exists()) {
try { // if holder file exists, read assets version string
FileReader fileReader = new FileReader(holderFile);
if (holderFile.exists()) {
try { // if holder file exists, read assets version string
FileReader fileReader = new FileReader(holderFile);
try {
BufferedReader br = new BufferedReader(fileReader);
try {
BufferedReader br = new BufferedReader(fileReader);
try {
String line;
try {
String line;
while ((line = br.readLine()) != null) {
text.append(line);
}
}finally {
try {
br.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
} finally {
try {
fileReader.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
while ((line = br.readLine()) != null) {
text.append(line);
}
}finally {
try {
br.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
} finally {
try {
fileReader.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
// if version differs from current app version or null, try to delete certificates folder
if (!text.toString().contains(versionName))
try {
boolean deleteResult = holderFile.delete();
if (!deleteResult)
Log.e(TAG, "holderFile.delete() returned " + deleteResult + ", absolute path='" + holderFile.getAbsolutePath() + "'");
File certPath = new File(i2pdpath, "certificates");
deleteRecursive(certPath);
}
catch (Throwable tr) {
Log.e(TAG, "", tr);
}
// if version differs from current app version or null, try to delete certificates folder
if (!text.toString().contains(versionName)) {
try {
boolean deleteResult = holderFile.delete();
if (!deleteResult)
Log.e(TAG, "holderFile.delete() returned " + deleteResult + ", absolute path='" + holderFile.getAbsolutePath() + "'");
File certPath = new File(i2pdpath, "certificates");
deleteRecursive(certPath);
// copy assets. If processed file exists, it won't be overwritten
copyAsset("addressbook");
copyAsset("certificates");
copyAsset("tunnels.d");
copyAsset("i2pd.conf");
copyAsset("subscriptions.txt");
copyAsset("tunnels.conf");
// update holder file about successful copying
@@ -305,7 +301,7 @@ public class DaemonWrapper {
// Make the directory.
File dir = new File(i2pdpath, path);
boolean result = dir.mkdirs();
Log.d(TAG, "dir.mkdirs() returned " + result);
Log.d(TAG, "dir.mkdirs() returned " + result + " for " + dir);
// Recurse on the contents.
for (String entry : contents) {
@@ -354,7 +350,7 @@ public class DaemonWrapper {
}
boolean deleteResult = fileOrDirectory.delete();
if (!deleteResult)
Log.e(TAG, "fileOrDirectory.delete() returned " + deleteResult + ", absolute path='" + fileOrDirectory.getAbsolutePath() + "'");
Log.d(TAG, "fileOrDirectory.delete() returned " + deleteResult + ", absolute path='" + fileOrDirectory.getAbsolutePath() + "'");
}
private void registerNetworkCallback(){
@@ -376,14 +372,14 @@ public class DaemonWrapper {
public void onAvailable(Network network) {
super.onAvailable(network);
I2PD_JNI.onNetworkStateChanged(true);
Log.i(TAG, "NetworkCallback.onAvailable");
Log.d(TAG, "NetworkCallback.onAvailable");
}
@Override
public void onLost(Network network) {
super.onLost(network);
I2PD_JNI.onNetworkStateChanged(false);
Log.i(TAG, " NetworkCallback.onLost");
Log.d(TAG, " NetworkCallback.onLost");
}
}
}
@@ -1,5 +1,7 @@
package org.purplei2p.i2pd;
import static android.app.PendingIntent.FLAG_IMMUTABLE;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@@ -84,7 +86,7 @@ public class ForegroundService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("ForegroundService", "Received start id " + startId + ": " + intent);
Log.d("ForegroundService", "Received start id " + startId + ": " + intent);
return START_STICKY;
}
@@ -139,19 +141,19 @@ public class ForegroundService extends Service {
// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, I2PDActivity.class), 0);
new Intent(this, I2PDActivity.class),
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? FLAG_IMMUTABLE : 0);
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
String channelId = Build.VERSION.SDK_INT >= 26 ? createNotificationChannel() : "";
String channelId = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? createNotificationChannel() : "";
// Set the info for the views that show in the notification panel.
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId)
.setOngoing(true)
.setSmallIcon(R.drawable.ic_notification_icon); // the status icon
if (Build.VERSION.SDK_INT >= 16)
builder = builder.setPriority(Notification.PRIORITY_DEFAULT);
if (Build.VERSION.SDK_INT >= 21)
builder = builder.setPriority(Notification.PRIORITY_DEFAULT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
builder = builder.setCategory(Notification.CATEGORY_SERVICE);
Notification notification = builder
.setTicker(text) // the status text
@@ -20,6 +20,7 @@ import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Build;
import android.os.Environment;
import android.os.IBinder;
import android.os.PowerManager;
import android.preference.PreferenceManager;
@@ -27,8 +28,7 @@ import android.provider.Settings;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
@@ -37,19 +37,20 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import static android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS;
import static org.purplei2p.i2pd.DaemonWrapper.State.startedOkay;
import static org.purplei2p.i2pd.DaemonWrapper.State.starting;
import static org.purplei2p.i2pd.DaemonWrapper.State.stopped;
public class I2PDActivity extends Activity {
private static final String TAG = "i2pdActvt";
private static final int MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
public static final int GRACEFUL_DELAY_MILLIS = 10 * 60 * 1000;
public static final String PACKAGE_URI_SCHEME = "package:";
private Button enableButton;
private Button disableButton;
private TextView textView;
private CheckBox HTTPProxyState;
private CheckBox SOCKSProxyState;
private CheckBox BOBState;
private CheckBox SAMState;
private CheckBox I2CPState;
private static volatile DaemonWrapper daemon;
@@ -65,15 +66,23 @@ public class I2PDActivity extends Activity {
try {
if (textView == null)
return;
Throwable tr = daemon.getLastThrowable();
if (tr != null) {
textView.setText(throwableToString(tr));
return;
}
DaemonWrapper.State state = daemon.getState();
if(state == startedOkay){
disableButton.setVisibility(View.VISIBLE);
if (daemon.isStartedOkay()) {
HTTPProxyState.setChecked(I2PD_JNI.getHTTPProxyState());
SOCKSProxyState.setChecked(I2PD_JNI.getSOCKSProxyState());
BOBState.setChecked(I2PD_JNI.getBOBState());
SAMState.setChecked(I2PD_JNI.getSAMState());
I2CPState.setChecked(I2PD_JNI.getI2CPState());
}
String startResultStr = DaemonWrapper.State.startFailed.equals(state) ? String.format(": %s", daemon.getDaemonStartResult()) : "";
String graceStr = DaemonWrapper.State.gracefulShutdownInProgress.equals(state) ? String.format(": %s %s", formatGraceTimeRemaining(), getText(R.string.remaining)) : "";
textView.setText(String.format("%s%s%s", getText(state.getStatusStringResourceId()), startResultStr, graceStr));
@@ -99,12 +108,17 @@ public class I2PDActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
enableButton = findViewById(R.id.enableButton);
disableButton = findViewById(R.id.disableButton);
textView = (TextView) findViewById(R.id.textView);
startService(new Intent(this, ForegroundService.class));
textView = (TextView) findViewById(R.id.appStatusText);
HTTPProxyState = (CheckBox) findViewById(R.id.service_httpproxy_box);
SOCKSProxyState = (CheckBox) findViewById(R.id.service_socksproxy_box);
BOBState = (CheckBox) findViewById(R.id.service_bob_box);
SAMState = (CheckBox) findViewById(R.id.service_sam_box);
I2CPState = (CheckBox) findViewById(R.id.service_i2cp_box);
if (daemon == null) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
daemon = new DaemonWrapper(getAssets(), connectivityManager);
@@ -113,30 +127,17 @@ public class I2PDActivity extends Activity {
daemon.addStateChangeListener(daemonStateUpdatedListener);
daemonStateUpdatedListener.daemonStateUpdate(DaemonWrapper.State.uninitialized, daemon.getState());
enableButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if( daemon.getState() != startedOkay && daemon.getState() != starting ){
daemon.stopDaemon();
daemon.startDaemon();
disableButton.setVisibility(View.VISIBLE);
}
}
});
disableButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if( daemon.getState() != stopped ){
daemon.stopDaemon();
disableButton.setVisibility(View.INVISIBLE);
}
}
});
// request permissions
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if(!Environment.isExternalStorageManager()) {
Log.e(TAG, "MANAGE_EXTERNAL_STORAGE perm declined, stopping i2pd");
i2pdStop();
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
}
}
@@ -164,8 +165,13 @@ public class I2PDActivity extends Activity {
//cancelGracefulStop0();
try {
doUnbindService();
} catch (IllegalArgumentException ex) {
Log.e(TAG, "throwable caught and ignored", ex);
if (ex.getMessage().startsWith("Service not registered: " + org.purplei2p.i2pd.I2PDActivity.class.getName())) {
Log.i(TAG, "Service not registered exception seems to be normal, not a bug it seems.");
}
} catch (Throwable tr) {
Log.e(TAG, "", tr);
Log.e(TAG, "throwable caught and ignored", tr);
}
}
@@ -174,11 +180,10 @@ public class I2PDActivity extends Activity {
{
if (requestCode == MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
Log.e(TAG, "WR_EXT_STORAGE perm granted");
Log.w(TAG, "WR_EXT_STORAGE perm granted");
else {
Log.e(TAG, "WR_EXT_STORAGE perm declined, stopping i2pd");
i2pdStop();
//TODO must work w/o this perm, ask orignal
}
}
}
@@ -294,7 +299,7 @@ public class I2PDActivity extends Activity {
return true;
case R.id.action_start_webview:
if( daemon.getState() == startedOkay)
if(daemon.isStartedOkay())
startActivity(new Intent(getApplicationContext(), WebConsoleActivity.class));
else
Toast.makeText(this,"I2Pd not was started!", Toast.LENGTH_SHORT).show();
@@ -319,21 +324,22 @@ public class I2PDActivity extends Activity {
}
private void onReloadTunnelsConfig() {
Log.d(TAG, "reloading tunnels");
Log.i(TAG, "reloading tunnels");
daemon.reloadTunnelsConfigs();
Toast.makeText(this, R.string.tunnels_reloading, Toast.LENGTH_SHORT).show();
}
private void i2pdStop() {
cancelGracefulStop0();
Log.i(TAG, "stopping");
textView.setText(getText(R.string.stopping));
new Thread(() -> {
Log.d(TAG, "stopping");
try {
daemon.stopDaemon();
} catch (Throwable tr) {
Log.e(TAG, "", tr);
}
quit(); //TODO make menu items for starting i2pd. On my Android, I need to reboot the OS to restart i2pd.
quit();
}, "stop").start();
}
@@ -348,10 +354,10 @@ public class I2PDActivity extends Activity {
Toast.makeText(this, R.string.graceful_stop_is_already_in_progress, Toast.LENGTH_SHORT).show();
return;
}
Log.i(TAG, "graceful stopping");
Toast.makeText(this, R.string.graceful_stop_is_in_progress, Toast.LENGTH_SHORT).show();
new Thread(() -> {
try {
Log.d(TAG, "graceful stopping");
if (daemon.isStartedOkay()) {
daemon.stopAcceptingTunnels();
long gracefulStopAtMillis;
@@ -371,9 +377,9 @@ public class I2PDActivity extends Activity {
private void cancelGracefulStop()
{
cancelGracefulStop0();
Log.i(TAG, "canceling graceful stop");
new Thread(() -> {
try {
Log.d(TAG, "canceling graceful stop");
if (daemon.isStartedOkay()) {
daemon.startAcceptingTunnels();
runOnUiThread(() -> Toast.makeText(this, R.string.shutdown_canceled, Toast.LENGTH_SHORT).show());
@@ -390,7 +396,7 @@ public class I2PDActivity extends Activity {
gracefulQuitTimerOld.cancel();
if (daemon.getTransitTunnelsCount() <= 0) { // no tunnels left
Log.d(TAG, "no transit tunnels left, stopping");
Log.i(TAG, "no transit tunnels left, stopping");
i2pdStop();
return;
}
@@ -436,7 +442,7 @@ public class I2PDActivity extends Activity {
@SuppressLint("BatteryLife")
private void openBatteryOptimizationDialogIfNeeded() {
boolean questionEnabled = getPreferences().getBoolean(getBatteryOptimizationPreferenceKey(), true);
Log.i(TAG, "BATT_OPTIM_questionEnabled==" + questionEnabled);
Log.d(TAG, "BATT_OPTIM_questionEnabled==" + questionEnabled);
if (!isKnownIgnoringBatteryOptimizations()
&& android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M
&& questionEnabled) {
@@ -466,14 +472,14 @@ public class I2PDActivity extends Activity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
final PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
if (pm == null) {
Log.i(TAG, "BATT_OPTIM: POWER_SERVICE==null");
Log.d(TAG, "BATT_OPTIM: POWER_SERVICE==null");
return false;
}
boolean ignoring = pm.isIgnoringBatteryOptimizations(getPackageName());
Log.i(TAG, "BATT_OPTIM: ignoring==" + ignoring);
Log.d(TAG, "BATT_OPTIM: ignoring==" + ignoring);
return ignoring;
} else {
Log.i(TAG, "BATT_OPTIM: old SDK version==" + Build.VERSION.SDK_INT);
Log.d(TAG, "BATT_OPTIM: old SDK version==" + Build.VERSION.SDK_INT);
return false;
}
}
@@ -4,7 +4,11 @@ import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@@ -16,6 +20,7 @@ import java.lang.reflect.Method;
public class I2PDPermsAskerActivity extends Activity {
private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 0;
private static final int PERMISSION_MANAGE_EXTERNAL_STORAGE = 0;
private Button button_request_write_ext_storage_perms;
private TextView textview_retry;
@@ -24,7 +29,7 @@ public class I2PDPermsAskerActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//if less than Android 6, no runtime perms req system present
if (android.os.Build.VERSION.SDK_INT < 23) {
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
startMainActivity();
return;
}
@@ -48,57 +53,66 @@ public class I2PDPermsAskerActivity extends Activity {
textview_retry.setVisibility(TextView.GONE);
button_request_write_ext_storage_perms.setVisibility(Button.GONE);
Method methodCheckPermission;
Method method_shouldShowRequestPermissionRationale;
Method method_requestPermissions;
try {
methodCheckPermission = getClass().getMethod("checkSelfPermission", String.class);
method_shouldShowRequestPermissionRationale =
getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
method_requestPermissions =
getClass().getMethod("requestPermissions", String[].class, int.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
Integer resultObj;
try {
resultObj = (Integer) methodCheckPermission.invoke(
this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Throwable e) {
throw new RuntimeException(e);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if(!Environment.isExternalStorageManager()) {
showExplanation();
} else {
startMainActivity();
}
} else {
Method methodCheckPermission;
Method method_shouldShowRequestPermissionRationale;
Method method_requestPermissions;
if (resultObj != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
Boolean aBoolean;
try {
aBoolean = (Boolean) method_shouldShowRequestPermissionRationale.invoke(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
methodCheckPermission = getClass().getMethod("checkSelfPermission", String.class);
method_shouldShowRequestPermissionRationale =
getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
method_requestPermissions =
getClass().getMethod("requestPermissions", String[].class, int.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
if (aBoolean) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
Integer resultObj;
showExplanation();
} else {
// No explanation needed, we can request the permission.
try {
resultObj = (Integer) methodCheckPermission.invoke(
this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Throwable e) {
throw new RuntimeException(e);
}
if (resultObj != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
Boolean aBoolean;
try {
method_requestPermissions.invoke(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_WRITE_EXTERNAL_STORAGE);
aBoolean = (Boolean) method_shouldShowRequestPermissionRationale.invoke(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} else startMainActivity();
if (aBoolean) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
showExplanation();
} else {
// No explanation needed, we can request the permission.
try {
method_requestPermissions.invoke(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} else startMainActivity();
}
}
@Override
@@ -136,6 +150,7 @@ public class I2PDPermsAskerActivity extends Activity {
}
private static final int SHOW_EXPLANATION_REQUEST = 1; // The request code
private static final int APP_STORAGE_ACCESS_REQUEST_CODE = 2;
private void showExplanation() {
Intent intent = new Intent(this, I2PDPermsExplanationActivity.class);
@@ -144,11 +159,14 @@ public class I2PDPermsAskerActivity extends Activity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == SHOW_EXPLANATION_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// Request the permission
super.onActivityResult(requestCode, resultCode, data);
// Check which request we're responding to and make sure the request was successful
if (requestCode == SHOW_EXPLANATION_REQUEST && resultCode == RESULT_OK) {
// Request the permission
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Intent intentManageAccess = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID));
startActivityForResult(intentManageAccess, APP_STORAGE_ACCESS_REQUEST_CODE);
} else {
Method method_requestPermissions;
try {
method_requestPermissions =
@@ -163,9 +181,21 @@ public class I2PDPermsAskerActivity extends Activity {
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
finish(); //close the app
}
} else if (requestCode == APP_STORAGE_ACCESS_REQUEST_CODE && resultCode == RESULT_OK) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
startMainActivity();
} else {
textview_retry.setText(R.string.permDenied);
textview_retry.setVisibility(TextView.VISIBLE);
button_request_write_ext_storage_perms.setVisibility(Button.VISIBLE);
finish();
}
} else {
finish(); // close the app
}
}
}
}
@@ -3,33 +3,33 @@ package org.purplei2p.i2pd;
public class I2PD_JNI {
public static native String getABICompiledWith();
public static void loadLibraries() {
System.loadLibrary("i2pd");
}
/**
* returns error info if failed
* returns "ok" if daemon initialized and started okay
*/
public static native String startDaemon();
//should only be called after startDaemon() success
public static native void stopDaemon();
public static native void stopAcceptingTunnels();
public static native void startAcceptingTunnels();
public static native void stopAcceptingTunnels();
public static native void reloadTunnelsConfigs();
public static native void onNetworkStateChanged(boolean isConnected);
public static native void setDataDir(String jdataDir);
public static native void setLanguage(String jlanguage);
public static native int GetTransitTunnelsCount();
public static native int getTransitTunnelsCount();
public static native String getWebConsAddr();
public static void loadLibraries() {
//System.loadLibrary("c++_shared");
System.loadLibrary("i2pd");
}
public static native String getDataDir();
public static native boolean getHTTPProxyState();
public static native boolean getSOCKSProxyState();
public static native boolean getBOBState();
public static native boolean getSAMState();
public static native boolean getI2CPState();
public static native void onNetworkStateChanged(boolean isConnected);
}
@@ -0,0 +1,56 @@
package org.purplei2p.i2pd;
import android.content.Intent;
import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import android.util.Log;
import android.annotation.TargetApi;
import android.os.Build;
@TargetApi(Build.VERSION_CODES.N)
public class I2PdQSTileService extends TileService {
private static final String TAG = "MyQSTileService";
@Override
public void onClick() {
super.onClick();
Log.d(TAG, "Tile clicked.");
try {
// Add the FLAG_ACTIVITY_NEW_TASK flag
Intent intent = new Intent(this, I2PDActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityAndCollapse(intent);
} catch (Exception e) {
Log.e(TAG, "Error starting ForegroundService", e);
}
}
@Override
public void onStartListening() {
super.onStartListening();
Log.d(TAG, "Tile started listening.");
}
@Override
public void onStopListening() {
super.onStopListening();
Log.d(TAG, "Tile stopped listening.");
}
@Override
public void onTileAdded() {
super.onTileAdded();
Log.d(TAG, "Tile added.");
}
@Override
public void onTileRemoved() {
super.onTileRemoved();
Log.d(TAG, "Tile removed.");
}
}
@@ -0,0 +1,459 @@
package org.purplei2p.i2pd;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import android.util.Log;
import java.io.File;
import org.apache.commons.configuration2.INIConfiguration;
import java.io.StringWriter;
import java.io.Writer;
import java.nio.file.*;
public class MainPreferenceActivity extends PreferenceActivity {
private Boolean isOldConfigExists = false;
public static final String CONFIG_FILE_PATH = "/sdcard/i2pd/i2pd.conf";
private static final String OLD_FILE_PREFIX= "__old";
boolean isOldConfigExists()
{
try {
return new File(CONFIG_FILE_PATH + OLD_FILE_PREFIX).exists();
}catch(Exception e) { return false; }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_i2pd);
INIConfiguration properties = readConfiguration();
// backup old configuration.
if (!isOldConfigExists)
{
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (Files.exists(Paths.get(CONFIG_FILE_PATH))) {
Files.copy(Paths.get(CONFIG_FILE_PATH), Paths.get(CONFIG_FILE_PATH + OLD_FILE_PREFIX));
}
} // if build ...
} catch (IOException e) {
e.printStackTrace();
}
}
// delete empty sections
{
writeConfiguration(properties);
}
// Main Categoryре
ListPreference logLevel = (ListPreference) findPreference("logLevelPreference");
logLevel.setValue(properties.getString("log", "info"));
logLevel.setOnPreferenceChangeListener((preference, newValue) -> {
// Modify properties
//properties.setProperty("log", (String) newValue);
// Save modified properties
//writeConfiguration(properties);
writeConfiguration(properties, "log", (String) newValue);
return true;
});
CheckBoxPreference ipv4Enable = (CheckBoxPreference) findPreference("ipv4EnablePreference");
boolean ipv4Enabled = Boolean.parseBoolean(properties.getString("ipv4", "true")); // "true" - значение по умолчанию, если ключ отсутствует
ipv4Enable.setChecked(ipv4Enabled);
ipv4Enable.setOnPreferenceChangeListener((preference, newValue) -> {
// Modify properties
// Convert Object to boolean
boolean newValueBoolean = (boolean) newValue;
//properties.setProperty("ipv4", String.valueOf(newValueBoolean)); // assuming "ipv4" is the key
// Save modified properties
writeConfiguration(properties, "ipv4", String.valueOf(newValueBoolean));
return true;
});
CheckBoxPreference ipv6Enable = (CheckBoxPreference) findPreference("ipv6EnablePreference");
boolean ipv6Enabled = Boolean.parseBoolean(properties.getString("ipv6", "false"));
ipv6Enable.setChecked(ipv6Enabled);
ipv6Enable.setOnPreferenceChangeListener((preference, newValue) -> {
// Modify properties
// Convert Object to boolean
boolean newValueBoolean = (boolean) newValue;
//properties.setProperty("ipv6", String.valueOf(newValueBoolean)); // assuming "ipv4" is the key
// Save modified properties
writeConfiguration(properties, "ipv6", String.valueOf(newValueBoolean));
return true;
});
// Example for portPreference (EditTextPreference)
EditTextPreference portPreference = (EditTextPreference) findPreference("portPreference");
String portValue = properties.getString("port", "auto");
portPreference.setText(portValue);
portPreference.setOnPreferenceChangeListener((preference, newValue) -> {
// Modify properties
/*Properties properties = readProperties();
// Convert Object to String (assuming "port" is the key)
String newValueString = newValue.toString();
properties.setProperty("port", newValueString);
// Save modified properties
writeProperties(properties);*/
Toast.makeText(MainPreferenceActivity.this, "For security reasons, changes are not allowed. If you really want this, open the config.", Toast.LENGTH_SHORT).show();
return true;
});
// Example for bandwidthPreference (ListPreference)
ListPreference bandwidthPreference = (ListPreference) findPreference("bandwidthPreference");
String bandwidthValue = properties.getString("bandwidth", "L");
bandwidthPreference.setValue(bandwidthValue);
bandwidthPreference.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
//properties.setProperty("bandwidth", newValueString);
writeConfiguration(properties, "bandwidth", newValueString);
return true;
});
// Example for noTransitPreference (CheckBoxPreference)
CheckBoxPreference noTransitPreference = (CheckBoxPreference) findPreference("noTransitPreference");
boolean noTransitPreferenceEnabled = Boolean.parseBoolean(properties.getString("notransit", "false"));
noTransitPreference.setChecked(noTransitPreferenceEnabled);
noTransitPreference.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
//properties.setProperty("notransit", String.valueOf(newValueBoolean));
writeConfiguration(properties, "notransit", String.valueOf(newValueBoolean));
return true;
});
CheckBoxPreference floodfillPreference = (CheckBoxPreference) findPreference("floodfillPreference");
boolean floodfillPreferenceEnabled = Boolean.parseBoolean(properties.getString("floodfill", "false"));
floodfillPreference.setChecked(floodfillPreferenceEnabled);
floodfillPreference.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
//properties.setProperty("floodfill", String.valueOf(newValueBoolean));
writeConfiguration(properties, "floodfill", String.valueOf(newValueBoolean));
return true;
});
// ^^^ general
// vvv not general (sections name)
CheckBoxPreference ssuPreference = (CheckBoxPreference) findPreference("ssuPreference");
boolean ssuPreferenceEnabled = Boolean.parseBoolean(properties.getString("ssu2.enabled", "true"));
ssuPreference.setChecked(ssuPreferenceEnabled);
ssuPreference.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("ssu2.enabled", String.valueOf(newValueBoolean));
writeConfiguration(properties);
return true; // Allow the change
});
// NTCP2 Category
CheckBoxPreference ntcp2Enable = (CheckBoxPreference) findPreference("ntcp2EnablePreference");
boolean ntcp2EnabledPreference = Boolean.parseBoolean(properties.getString("ntcp2.enabled", "true"));
ntcp2Enable.setChecked(ntcp2EnabledPreference);
ntcp2Enable.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("ntcp2.enabled", String.valueOf(newValueBoolean));
writeConfiguration(properties);
return true; // Allow the change
});
CheckBoxPreference ntcp2Publish = (CheckBoxPreference) findPreference("ntcp2PublishPreference");
boolean ntcp2PublishEnabledPreference = Boolean.parseBoolean(properties.getString("ntcp2.published", "true"));
ntcp2Publish.setChecked(ntcp2EnabledPreference);
ntcp2Publish.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("ntcp2.published", String.valueOf(newValueBoolean));
writeConfiguration(properties);
return true; // Allow the change
});
// Web Console Category
CheckBoxPreference webConsoleEnable = (CheckBoxPreference) findPreference("webConsoleEnablePreference");
boolean webConsoleEnableValue = Boolean.parseBoolean(properties.getString("http.enabled", "false"));
webConsoleEnable.setChecked(webConsoleEnableValue);
webConsoleEnable.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("http.enabled", String.valueOf(newValueBoolean));
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference webConsoleAddress = (EditTextPreference) findPreference("webConsoleAddressPreference");
String webConsoleAddressValue = properties.getString("http.address", "127.0.0.1");
webConsoleAddress.setText(webConsoleAddressValue);
webConsoleAddress.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("http.address", newValueString);
writeConfiguration(properties);
return true;
});
EditTextPreference webConsolePort = (EditTextPreference) findPreference("webConsolePortPreference");
String webConsolePortValue = properties.getString("http.port", "7070");
webConsolePort.setText(webConsolePortValue);
webConsolePort.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("http.port", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
CheckBoxPreference webConsoleAuth = (CheckBoxPreference) findPreference("webConsoleAuthPreference");
boolean webConsoleAuthValue = Boolean.parseBoolean(properties.getString("http.auth", "false"));
webConsoleAuth.setChecked(webConsoleAuthValue);
webConsoleAuth.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("http.auth", String.valueOf(newValueBoolean));
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference webConsoleUser = (EditTextPreference) findPreference("webConsoleUserPreference");
String webConsoleUserValue = properties.getString("http.user", "user");
webConsoleUser.setText(webConsoleUserValue);
webConsoleUser.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("http.user", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference webConsolePassword = (EditTextPreference) findPreference("webConsolePasswordPreference");
String webConsolePasswordValue = properties.getString("http.pass", "pass");
webConsolePassword.setText(webConsolePasswordValue);
webConsolePassword.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("http.pass", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
// HTTP Proxy Category
CheckBoxPreference httpProxyEnable = (CheckBoxPreference) findPreference("httpProxyEnablePreference");
boolean httpProxyEnabled = Boolean.parseBoolean(properties.getString("httpproxy.enabled", "true"));
httpProxyEnable.setChecked(httpProxyEnabled);
httpProxyEnable.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("httpproxy.enabled", String.valueOf(newValueBoolean));
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference httpProxyAddress = (EditTextPreference) findPreference("httpProxyAddressPreference");
String httpProxyAddressValue = properties.getString("httpproxy.address", "127.0.0.1");
httpProxyAddress.setText(httpProxyAddressValue);
httpProxyAddress.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("httpproxy.address", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference httpProxyPort = (EditTextPreference) findPreference("httpProxyPortPreference");
String httpProxyPortValue = properties.getString("httpproxy.port", "4444");
httpProxyPort.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("httpproxy.port", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference httpProxyKeys = (EditTextPreference) findPreference("httpProxyKeysPreference");
String httpProxyKeyValue = properties.getString("httpproxy.keys", "transient");
httpProxyKeys.setText(httpProxyKeyValue);
httpProxyKeys.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("httpproxy.keys", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
// SOCKS Proxy Category
CheckBoxPreference socksProxyEnable = (CheckBoxPreference) findPreference("socksProxyEnablePreference");
boolean socksProxyEnabled = Boolean.parseBoolean(properties.getString("socksproxy.enabled", "true"));
socksProxyEnable.setChecked(socksProxyEnabled);
socksProxyEnable.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("socksproxy.enabled", String.valueOf(newValueBoolean));
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference socksProxyAddress = (EditTextPreference) findPreference("socksProxyAddressPreference");
String socksProxyAddressValue = properties.getString("socksproxy.address", "127.0.0.1");
socksProxyAddress.setText(socksProxyAddressValue);
socksProxyAddress.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("socksproxy.address", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference socksProxyPort = (EditTextPreference) findPreference("socksProxyPortPreference");
String socksProxyPortValue = properties.getString("socksproxy.port", "4447");
socksProxyPort.setText(socksProxyPortValue);
socksProxyPort.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("socksproxy.port", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference socksProxyKeys = (EditTextPreference) findPreference("socksProxyKeysPreference");
String socksProxyKeysValue = properties.getString("socksproxy.keys", "transient");
socksProxyKeys.setText(socksProxyKeysValue);
socksProxyKeys.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("socksproxy.keys", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
// SAM Category
CheckBoxPreference samEnable = (CheckBoxPreference) findPreference("samEnablePreference");
boolean samEnableValue = Boolean.parseBoolean(properties.getString("sam.enabled", "true"));
samEnable.setChecked(samEnableValue);
samEnable.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("sam.enabled", String.valueOf(newValueBoolean));
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference samAddress = (EditTextPreference) findPreference("samAddressPreference");
String samAddressValue = properties.getString("sam.address", "127.0.0.1");
samAddress.setText(samAddressValue);
samAddress.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("sam.address", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference samPort = (EditTextPreference) findPreference("samPortPreference");
String samPortValue = properties.getString("sam.port", "7656");
samPort.setText(samPortValue);
samPort.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("sam.port", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
// UPnP Category
CheckBoxPreference upnpEnable = (CheckBoxPreference) findPreference("upnpEnablePreference");
boolean upnpEnableValue = Boolean.parseBoolean(properties.getString("upnp.enabled", "true"));
upnpEnable.setChecked(upnpEnableValue);
upnpEnable.setOnPreferenceChangeListener((preference, newValue) -> {
boolean newValueBoolean = (boolean) newValue;
properties.setProperty("upnp.enabled", String.valueOf(newValueBoolean));
// Save modified properties
writeConfiguration(properties);
return true;
});
EditTextPreference upnpForwardName = (EditTextPreference) findPreference("upnpForwardNamePreference");
String upnpForwardNameValue = properties.getString("upnp.name", "I2Pd");
upnpForwardName.setText(upnpForwardNameValue);
upnpForwardName.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("upnp.name", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
// Limits Category
EditTextPreference transitTunnelEdit = (EditTextPreference) findPreference("transitTunnelPreference");
String transitTunnelValue = properties.getString("limits.transittunnels", "3000");
transitTunnelEdit.setText(transitTunnelValue);
transitTunnelEdit.setOnPreferenceChangeListener((preference, newValue) -> {
String newValueString = newValue.toString();
properties.setProperty("limits.transittunnels", newValueString);
// Save modified properties
writeConfiguration(properties);
return true;
});
}
/*
private Properties readProperties() {
if (isOldConfigExists) {
Toast.makeText(this, oldConfigErrMsg, Toast.LENGTH_SHORT).show();
}
Properties properties = new Properties();
try (FileReader reader = new FileReader(CONFIG_FILE_PATH)) {
properties.load(reader);
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
*/
/*
private void writeProperties(Properties properties) {
if (isOldConfigExists) {
Toast.makeText(this, oldConfigErrMsg, Toast.LENGTH_SHORT).show();
} else {
try (FileWriter writer = new FileWriter(CONFIG_FILE_PATH)) {
properties.store(writer, "Updated properties");
} catch (IOException e) {
e.printStackTrace();
}
}
}*/
private INIConfiguration readConfiguration() {
INIConfiguration iniConfiguration = new INIConfiguration();
try (FileReader reader = new FileReader(CONFIG_FILE_PATH)) {
iniConfiguration.read(reader);
} catch (Exception e) {
e.printStackTrace();
}
return iniConfiguration;
}
private void writeConfiguration(INIConfiguration iniConfiguration)
{
writeConfiguration(iniConfiguration, "", "");
}
private void writeConfiguration(INIConfiguration iniConfiguration, String option, String value) {
try (FileWriter writer = new FileWriter(CONFIG_FILE_PATH)) {
StringWriter stringWriter = new StringWriter();
iniConfiguration.write(stringWriter);
String configFileContent = stringWriter.toString();
// Удаление пустых секций из строки конфигурации
String regexEmptySections = "(\\[\\w+\\]\\n(\\n|$)|\\[\\w+\\](\\z|\\Z))";
configFileContent = configFileContent.replaceAll(regexEmptySections, "");
// Если указана опция для перемещения
if (!option.isEmpty()) {
Log.d("configFileContent","option is not empty");
String optionPattern = option + "\\s+?=\\s+?\\w+"; // Паттерн для поиска опции с присваиванием в начале строки
Log.d("confiFileContent","config File contains option");
if (configFileContent.contains(option)) configFileContent = configFileContent.replaceAll(optionPattern, ""); // Удаляем первое вхождение
Log.d("confiFileContent", option);
Log.d("confiFileContent", value);
Log.d("confiFileContent","Add on start line");
configFileContent = option + "=" + value + "\n" + configFileContent;
}
Log.d("configFileContent", configFileContent);
writer.write(configFileContent);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -21,7 +21,7 @@ public class NetworkStateChangeReceiver extends BroadcastReceiver {
I2PD_JNI.onNetworkStateChanged(isConnected);
} catch (Throwable tr) {
Log.d(TAG, "", tr);
Log.e(TAG, "", tr);
}
}
}
@@ -10,23 +10,27 @@ import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;
import java.io.File;
import java.util.List;
import java.util.Objects;
import org.purplei2p.i2pd.iniedotr.IniEditor;
//import org.purplei2p.i2pd.iniedotr.IniEditor;
public class SettingsActivity extends Activity {
protected IniEditor iniedit = new IniEditor();
private String dataDir = DaemonWrapper.getDataDir();//for inieditor
private String TAG = "i2pdSrvcSettings";
private File cacheDir;
public static String onBootFileName="/onBoot"; // just file, empty, if exist the do autostart, if not then no.
public static String onBootFileName = "/onBoot"; // just file, empty, if exist the do autostart, if not then no.
//https://gist.github.com/chandruark/3165a5ee3452f2b9ec7736cf1b4c5ea6
private void addAutoStartupswitch() {
private void addAutoStartupSwitch() {
try {
Intent intent = new Intent();
@@ -54,7 +58,7 @@ public class SettingsActivity extends Activity {
}
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (list.size() > 0) {
if (list.size() > 0) {
startActivity(intent);
}
} catch (Exception e) {
@@ -62,6 +66,7 @@ public class SettingsActivity extends Activity {
}
}
//@Override
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -71,38 +76,59 @@ public class SettingsActivity extends Activity {
Uri.parse("package:" + getPackageName())
);
startActivityForResult(intent, 232);
} else {
//Permission Granted-System will work
}
}
}
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
cacheDir = getApplicationContext().getCacheDir();
setContentView(R.layout.activity_settings);
Objects.requireNonNull(getActionBar()).setDisplayHomeAsUpEnabled(true);
Switch autostart_switch = findViewById(R.id.autostart_enable);
File onBoot= new File( cacheDir.getAbsolutePath()+onBootFileName);
Button openPreferences = findViewById(R.id.OpenPreferences);
cacheDir = getApplicationContext().getCacheDir();
File onBoot = new File(cacheDir.getAbsolutePath() + onBootFileName);
openPreferences.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SettingsActivity.this, MainPreferenceActivity.class);
startActivity(intent);
}
});
autostart_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// do something, the isChecked will be
// true if the switch is in the On position
if(isChecked){
if( !onBoot.exists() ) {
if (isChecked) {
if (!onBoot.exists()) {
requestPermission();
addAutoStartupswitch();
addAutoStartupSwitch();
try {
if( !onBoot.createNewFile()) Log.d(TAG, "Cant create new wile on: "+onBoot.getAbsolutePath());
if (!onBoot.createNewFile())
Log.d(TAG, "Cant create new wile on: "+onBoot.getAbsolutePath());
} catch (Exception e) {
Log.d(TAG, "error: " + e.toString());
Log.e(TAG, "error: " + e.toString());
}
}
}else{
if( onBoot.exists() )
} else {
if (onBoot.exists())
onBoot.delete();
}
}
});
if(onBoot.exists()) autostart_switch.setChecked(true);
if(onBoot.exists())
autostart_switch.setChecked(true);
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
return true;
}
return false;
}
}
@@ -8,7 +8,6 @@ import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import java.util.Objects;
public class WebConsoleActivity extends Activity {
@@ -22,7 +21,7 @@ public class WebConsoleActivity extends Activity {
Objects.requireNonNull(getActionBar()).setDisplayHomeAsUpEnabled(true);
webView = (WebView) findViewById(R.id.webview1);
webView = (WebView) findViewById(R.id.webconsole);
webView.setWebViewClient(new WebViewClient());
final WebSettings webSettings = webView.getSettings();
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -1,8 +1,8 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="512dp"
android:height="512dp"
android:width="128dp"
android:height="128dp"
android:viewportWidth="135.46666"
android:viewportHeight="135.46667">
android:viewportHeight="135.46666">
<path
android:pathData="m94.809,2.625 l0.329,0.016 -0.167,0.593 -0.705,-0.171 -0.005,0.302 -0.532,-0.166 -0.167,-0.703 0.143,-0.461 0.533,0.145 0.288,-0.211 0.445,0.236zM92.7,3.347l0,0.142c0,0.832 0.734,1.566 1.566,1.566l0.57,0c0.636,0 1.566,-0.738 1.566,-1.281l0,-0.712c0,-0.903 -0.907,-1.566 -1.851,-1.566 -0.873,0 -1.851,0.978 -1.851,1.851z"
android:fillColor="#F1E726"/>
@@ -1,6 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="256dp"
android:height="256dp"
android:width="48dp"
android:height="48dp"
android:viewportWidth="67.73333"
android:viewportHeight="67.73333">
<path
@@ -12,5 +12,5 @@
android:pathData="m28.237,32.0881c-0.9786,-3.1408 -6.8193,-4.4264 -15.1199,-4.7737 4.1351,5.531 8.9609,7.9108 15.1199,4.7737zM50.159,23.3911c-10.3414,-0.137 -15.6448,2.2441 -14.2333,7.982 5.5091,-0.8369 9.979,-4.1522 14.2333,-7.982zM16.6812,21.3597c2.6043,2.2517 5.2086,4.0418 7.8132,4.5568 5.297,1.7061 5.6425,5.3779 5.281,9.3305v9.3306c-0.3217,3.4969 1.857,4.0152 3.1473,2.4946 0.6986,-0.8231 2.1465,-1.8057 3.3777,-1.9377 1.8931,-0.2029 3.3969,-0.1184 2.3733,-3.2692m-5.5705,0.5424c-0.0241,-4.2433 -0.0482,-8.4866 -0.0725,-12.73M16.6089,18.3219C26.541,27.559 30.9945,26.1085 34.7671,17.0923 39.72,5.2558 49.1877,4.4588 57.1215,16.3689m-9.4048,26.7619c-4.9696,6.6991 -9.1786,18.741 -16.8254,11.1857 -1.9968,-1.9727 -1.9672,-2.5199 -8.2055,-7.6415 2.5469,1.5209 4.8048,3.3307 7.6407,4.5628 0.8114,0.3309 1.3047,0.033 2.4566,0.6863 1.0397,0.5898 1.771,0.6068 2.5286,0 1.4062,-1.1262 2.4482,-1.0302 4.6963,-1.8421 3.5633,-1.2868 5.1391,-4.634 7.7087,-6.9512zM8.1259,22.5676C3.4362,7.1294 12.9037,3.0612 19.9981,9.8293 27.2253,16.7242 28.7593,18.3597 33.8971,8.5266 42.533,-8.0016 62.8223,3.3724 60.8266,22.2781 59.1064,38.5756 55.219,53.2975 47.3619,61.7957 41.2802,68.3735 35.1735,68.7337 30.4224,62.9537 25.8932,58.755 22.0663,53.7378 18.695,48.1889 15.3714,45.2618 12.7532,40.0624 11.1664,31.5422ZM33.3926,50.5808c0.1014,-0.4791 -0.0722,-4.2248 1.5204,-0.0957m1.5285,14.3353c-2.607,-2.3561 2.1116,-3.9639 1.4121,-0.4185M53.8771,36.4639C54.0218,43.6533 51.5124,52.1936 47.7962,57.4531M42.4392,40.3723c6.1774,-3.3295 9.073,-2.4125 8.687,2.7503M15.2932,40.8065c1.5452,3.6162 6.1047,4.1223 9.4827,-1.3028M10.0255,21.7213C9.1816,8.2922 13.3214,6.1141 21.0941,16.9476 25.1871,22.652 28.8678,23.6838 32.6692,15.3563 39.433,0.5392 50.2361,1.582 57.2465,12.0746M33.682,24.2528c6.4671,-11.5489 12.2697,-16.0091 17.0008,-9.0411"
android:strokeWidth="1.32291663"
android:fillColor="#00000000"
android:strokeColor="#1f1a17"/>
android:strokeColor="#FFFFFF"/>
</vector>
+101 -41
View File
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
@@ -10,17 +11,19 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:id="@+id/mainLogo"
android:layout_width="match_parent"
android:layout_height="140dp"
android:src="@drawable/ic_logo" />
android:contentDescription="@string/app_name"
android:src="@drawable/ic_logo"
tools:ignore="ImageContrastCheck" />
<TextView
android:id="@+id/textViewDesc1"
style="@android:style/Widget.Holo.Light.TextView.SpinnerItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -31,7 +34,6 @@
android:textStyle="bold" />
<TextView
android:id="@+id/textViewDesc2"
style="@android:style/Widget.Holo.Light.TextView.SpinnerItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -45,51 +47,109 @@
android:layout_width="match_parent"
android:layout_height="@dimen/margin_medium" />
<LinearLayout
<TextView
android:id="@+id/appStatusText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:gravity="center_horizontal"
android:textAppearance="@android:style/TextAppearance.Large"
android:textColor="#DFDFDF" />
<RelativeLayout
android:layout_height="wrap_content"
<Space
android:layout_width="match_parent"
android:layout_height="@dimen/margin_medium" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/services"
android:textAppearance="@android:style/TextAppearance.Medium"
android:textColor="#DFDFDF" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<TableRow
android:layout_width="match_parent"
android:layout_gravity="center">
android:layout_height="match_parent"
android:gravity="center_horizontal">
<Button
android:id="@+id/enableButton"
style="@android:style/Widget.Button.Inset"
android:layout_width="@dimen/margin_huge"
android:layout_height="@dimen/margin_huge"
android:layout_centerInParent="true"
android:background="@android:drawable/presence_offline"
android:longClickable="true" />
<CheckBox
android:id="@+id/service_httpproxy_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_http_proxy"
android:textAppearance="@android:style/TextAppearance.Small"
android:textColor="#DFDFDF" />
<Button
android:id="@+id/disableButton"
style="@android:style/Widget.Button.Inset"
android:layout_width="@dimen/margin_huge"
android:layout_height="@dimen/margin_huge"
android:layout_centerInParent="true"
android:background="@android:drawable/presence_online"
android:longClickable="true"
android:visibility="invisible" />
</TableRow>
</RelativeLayout>
<Space
android:layout_width="wrap_content"
android:layout_height="@dimen/margin_medium" />
<TextView
android:id="@+id/textView"
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="#DFDFDF"
android:textSize="18sp" />
android:layout_height="match_parent"
android:gravity="center_horizontal">
</LinearLayout>
<CheckBox
android:id="@+id/service_socksproxy_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_socks_proxy"
android:textAppearance="@android:style/TextAppearance.Small"
android:textColor="#DFDFDF" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<CheckBox
android:id="@+id/service_bob_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_bob"
android:textAppearance="@android:style/TextAppearance.Small"
android:textColor="#DFDFDF" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<CheckBox
android:id="@+id/service_sam_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_sam"
android:textAppearance="@android:style/TextAppearance.Small"
android:textColor="#DFDFDF" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<CheckBox
android:id="@+id/service_i2cp_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_i2cp"
android:textAppearance="@android:style/TextAppearance.Small"
android:textColor="#DFDFDF" />
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
</ScrollView>
+16 -5
View File
@@ -3,8 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/margin_medium"
android:orientation="vertical"
android:padding="@dimen/margin_medium"
tools:context=".SettingsActivity">
<TextView
@@ -21,15 +21,26 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:textOff="@string/disabled"
android:textOn="@string/enabled"
android:text="@string/autostart_enabled" />
android:text="@string/autostart_enabled"
tools:ignore="TouchTargetSizeCheck" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?android:attr/listDivider" />
<!--
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/OpenPreferences"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/OpenPreferences" />
</LinearLayout>
<!--
<TextView
android:id="@+id/settings_section2"
android:layout_width="match_parent"
@@ -11,7 +11,7 @@
android:id="@+id/swipe">
<WebView
android:id="@+id/webview1"
android:id="@+id/webconsole"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
+1
View File
@@ -25,6 +25,7 @@
android:title="@string/action_graceful_stop" />
<item
android:id="@+id/action_settings"
android:orderInCategory="95"
android:title="@string/action_settings" />
<item
android:id="@+id/action_stop"
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Síť bez hranic</string>
<string name="action_start">Začít</string>
<string name="action_stop">Zastavit</string>
<string name="action_exit">Odejít</string>
<string name="action_graceful_stop">Hladké vypnutí</string>
<string name="action_cancel_graceful_stop">Zrušit hladké vypnutí</string>
<string name="action_reload_tunnels_config">Znovu načíst tunely</string>
<string name="action_start_webview">Otevřít webovou konzoli</string>
<string name="action_settings">Nastavení</string>
<string name="graceful_stop_is_already_in_progress">Hladké vypnutí již probíhá</string>
<string name="graceful_stop_is_in_progress">Hladké vypnutí právě probíhá</string>
<string name="gracefulShutdownInProgress">Hladké vypnutí právě probíhá</string>
<string name="already_stopped">Již zastaveno</string>
<string name="uninitialized">Aplikace se inicializuje...</string>
<string name="starting">Aplikace se zapíná...</string>
<string name="jniLibraryLoaded">JNI knihovny načteny</string>
<string name="startedOkay">Aplikace spuštěna</string>
<string name="startFailed">Spuštění se nezdrařilo</string>
<string name="stopped">Aplikace zastavena</string>
<string name="stopping">Aplikace se vypíná...</string>
<string name="remaining">zbývá</string>
<string name="services">Vnitřní služby</string>
<string name="services_http_proxy">HTTP Proxy</string>
<string name="services_socks_proxy">SOCKS5 Proxy</string>
<string name="title_activity_i2_pdperms_asker_prompt">Výzva</string>
<string name="permDenied">Oprávnění k zápisu na SD kartu bylo zamítnuto. Abyste mohli pokračovat, je třeba toto oprávnění povolit</string>
<string name="permRequired">Pro zápis klíčů a dalších souborů do I2PD složky na SD kartu je vyžadován přístup k SD kartě.</string>
<string name="retryPermRequest">Opakovat žádost o oprávnění k zápisu na SD kartu</string>
<string name="menu_item_battery_optimizations_str">Optimalizace baterie</string>
<string name="battery_optimizations_enabled">Optimalizace baterie je zapnutá</string>
<string name="battery_optimizations_enabled_explained">Váš Android dělá na I2PD náročné optimalizace baterie, což by mohlo vést k uzavření I2PD služby bez jediného důvodu.\nDoporučuje se povolit vypnutí optimalizace baterie.</string>
<string name="battery_optimizations_enabled_dialog">Váš Android dělá na I2PD náročné optimalizace baterie, což by mohlo vést k uzavření I2PD služby bez jediného důvodu.\n\nNyní budete požádáni o zakázání této optimalizace.</string>
<string name="continue_str">Pokračovat</string>
<string name="device_does_not_support_disabling_battery_optimizations">Vaše verze Androidu nepodporuje vypnutí optimalizace baterie</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Vaše verze Android OS nepodporuje zobrazování dialogových oken pro optimalizaci baterie pro aplikace.</string>
<string name="shutdown_canceled">Plánované vypnutí zrušeno</string>
<string name="tunnels_reloading">Obnovuji konfiguraci tunelů...</string>
<string name="settings_section0">Základní nastavení</string>
<string name="settings_section_tunnels">Tunely</string>
<string name="autostart_enabled">Spustit při spuštění systému</string>
<string name="add_tunnel_button">Přidat tunel</string>
<string name="add_tunnel">Správa tunelů</string>
<string name="del_tunnel_button">Smazat tunel</string>
</resources>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Red sin fronteras</string>
<string name="action_start">Iniciar</string>
<string name="action_stop">Detener</string>
<string name="action_exit">Salir</string>
<string name="action_graceful_stop">Parar con gracia</string>
<string name="action_cancel_graceful_stop">Cancelar parada con gracia</string>
<string name="action_reload_tunnels_config">Recargar túneles</string>
<string name="action_start_webview">Abrir Consola Web</string>
<string name="action_settings">Ajustes</string>
<string name="graceful_stop_is_already_in_progress">La parada con gracia ya se ha iniciado</string>
<string name="graceful_stop_is_in_progress">La parada con gracia está en proceso</string>
<string name="gracefulShutdownInProgress">Apagado con gracia en proceso</string>
<string name="already_stopped">Ya se ha parado</string>
<string name="uninitialized">Inicializando aplicación...</string>
<string name="starting">Iniciando aplicación...</string>
<string name="jniLibraryLoaded">Bibliotecas JNI cargadas</string>
<string name="startedOkay">Aplicación iniciada</string>
<string name="startFailed">Error al iniciar</string>
<string name="stopped">Aplicación detenida</string>
<string name="stopping">Deteniendo aplicación...</string>
<string name="remaining">restantes</string>
<string name="services">Servicios internos</string>
<string name="services_http_proxy">Proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Permiso</string>
<string name="permDenied">Permiso de escribir a la tarjeta SD denegado, necesitas permitirlo para continuar</string>
<string name="permRequired">Se requiere acceso de escritura de la tarjeta SD para escribir las claves y otros archivos en la carpeta I2PD de la tarjeta SD.</string>
<string name="retryPermRequest">Preguntar permisos de escritura de tarjeta SD de nuevo</string>
<string name="menu_item_battery_optimizations_str">Optimizaciones de Batería</string>
<string name="battery_optimizations_enabled">Optimizaciones de batería activadas</string>
<string name="battery_optimizations_enabled_explained">Tu Android está realizando optimizaciones de batería importantes en I2PD que pueden ocasionar que el servicio se cierre sin razón.\nEs recomendable que desactives esas optimizaciones de batería.</string>
<string name="battery_optimizations_enabled_dialog">Tu Android estáTu Android está realizando optimizaciones de batería importantes en I2PD que pueden ocasionar que el servicio se cierre sin razón.\n\nSe te pedirá que las desactives.</string>
<string name="continue_str">Continuar</string>
<string name="device_does_not_support_disabling_battery_optimizations">Tu versión de Android no soporta desactivar las optimizaciones de batería</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Tu versión de S.O Android no soporta desactivar optimizaciones de batería para ciertas aplicaciones.</string>
<string name="shutdown_canceled">Apagado planeado cancelado</string>
<string name="tunnels_reloading">Recargando configuración de túneles...</string>
<string name="settings_section0">Ajustes comunes</string>
<string name="settings_section_tunnels">Túneles</string>
<string name="autostart_enabled">Iniciar al arrancar</string>
<string name="add_tunnel_button">Añadir túnel</string>
<string name="add_tunnel">Gestión de túneles</string>
<string name="del_tunnel_button">Borrar túnel</string>
</resources>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Réseau sans frontières</string>
<string name="action_start">Démarrer</string>
<string name="action_stop">Arrêter</string>
<string name="action_exit">Quitter</string>
<string name="action_graceful_stop">Arrêt gracieux</string>
<string name="action_cancel_graceful_stop">Annuler l\'arrêt gracieux</string>
<string name="action_reload_tunnels_config">Actualiser les tunnels</string>
<string name="action_start_webview">Ouvrir console web</string>
<string name="action_settings">Paramètres</string>
<string name="graceful_stop_is_already_in_progress">Arrêt gracieux déjà en cours</string>
<string name="graceful_stop_is_in_progress">Arrêt gracieux en cours</string>
<string name="gracefulShutdownInProgress">Fermeture gracieuse en cours</string>
<string name="already_stopped">Déjà arrêté</string>
<string name="uninitialized">Initialisation de l\'application...</string>
<string name="starting">Démarrage de l\'application...</string>
<string name="jniLibraryLoaded">Librairies JNI chargées</string>
<string name="startedOkay">Application démarrée</string>
<string name="startFailed">Démarrage échoué</string>
<string name="stopped">Application arrêtée</string>
<string name="stopping">Arrêt de l\'application...</string>
<string name="remaining">restant</string>
<string name="services">Services internes</string>
<string name="services_http_proxy">Proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Message</string>
<string name="permDenied">Permission d\'écrire sur la carte SD refusée, vous devez autoriser pour continuer</string>
<string name="permRequired">La permission d\'écrire sur la carte SD est requise pour écrire les clés et autres fichiers dans le dossier I2PD sur la carte SD.</string>
<string name="retryPermRequest">Réessayer de demander la permission d\'écrire sur la carte SD</string>
<string name="menu_item_battery_optimizations_str">Optimisations de la pile</string>
<string name="battery_optimizations_enabled">Optimisations de la pile activées</string>
<string name="battery_optimizations_enabled_explained">Votre Android fait de l\'optimisation de pile importante pour I2PD et ceci peut mener à l\'arrêt du daemon sans aucune autre raison.\nIl est recommandé d\'autoriser la désactivation de cette optimisation de pile.</string>
<string name="battery_optimizations_enabled_dialog">Votre Android fait de l\'optimisation de pile importante pour I2PD et ceci peut mener à l\'arrêt du daemon sans aucune autre raison.\n\nVous allez maintenant vous faire demander d\'autoriser la désactivation de cette optimisation.</string>
<string name="continue_str">Continuer</string>
<string name="device_does_not_support_disabling_battery_optimizations">Votre version d\'Android ne supporte pas la désactivation de l\'optimisation de pile</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Votre version d\'Android ne supporte pas l\'affichage du dialogue de l\'optimisation de pile pour les applications.</string>
<string name="shutdown_canceled">Fermeture planifiée annulée</string>
<string name="tunnels_reloading">Actualisation de la configuration des tunnels...</string>
<string name="settings_section0">Paramètres généraux</string>
<string name="settings_section_tunnels">Tunnels</string>
<string name="autostart_enabled">Lancer au démarrage</string>
<string name="add_tunnel_button">Ajouter tunnel</string>
<string name="add_tunnel">Gestion des tunnels</string>
<string name="del_tunnel_button">Supprimer tunnel</string>
</resources>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Rete senza confini</string>
<string name="action_start">Avvia</string>
<string name="action_stop">Arresta</string>
<string name="action_exit">Esci</string>
<string name="action_graceful_stop">Interruzione controllata</string>
<string name="action_cancel_graceful_stop">Annulla interruzione controllata</string>
<string name="action_reload_tunnels_config">Ricarica i tunnel</string>
<string name="action_start_webview">Apri la console web</string>
<string name="action_settings">Impostazioni</string>
<string name="graceful_stop_is_already_in_progress">L\'interruzione controllata è già in corso</string>
<string name="graceful_stop_is_in_progress">L\'interruzione controllata è in corso</string>
<string name="gracefulShutdownInProgress">Interruzione controllata in corso</string>
<string name="already_stopped">Già interrotto</string>
<string name="uninitialized">Inizializzazione dell\'applicazione...</string>
<string name="starting">L\'applicazione si sta avviando...</string>
<string name="jniLibraryLoaded">Caricate le librerie JNI</string>
<string name="startedOkay">Applicazione avviata</string>
<string name="startFailed">Avvio fallito</string>
<string name="stopped">Applicazione arrestata</string>
<string name="stopping">Applicazione in arresto...</string>
<string name="remaining">rimanenti</string>
<string name="services">Servizi interni</string>
<string name="services_http_proxy">Proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Messaggio</string>
<string name="permDenied">Permesso di scrittura scheda SD negato, è necessario consentirlo per continuare</string>
<string name="permRequired">L\'accesso in scrittura della scheda SD è richiesto per scrivare le chiavi e gli altri file nella cartella I2PD sulla scheda SD.</string>
<string name="retryPermRequest">Riprova a richiedere il permesso di scrittura sulla scheda SD</string>
<string name="menu_item_battery_optimizations_str">Ottimizzazione batteria</string>
<string name="battery_optimizations_enabled">Ottimizzazione batteria abilitata</string>
<string name="battery_optimizations_enabled_explained">Il tuo dispositivo Android sta eseguendo alcune pesanti ottimizzazioni della batteria su I2PD che potrebbero comportare l\'arresto di quest\'ultimo senza alcun motivo.\nSi raccomanda di consentire a I2PD di disabilitare queste ottimizzazioni della batteria.</string>
<string name="battery_optimizations_enabled_dialog">Il tuo dispositivo Android sta eseguendo alcune pesanti ottimizzazioni della batteria su I2PD che potrebbero comportare l\'arresto di quest\'ultimo senza alcun motivo.\n\nOra verrà richiesto di disabilitare queste ottimizzazioni della batteria.</string>
<string name="continue_str">Continua</string>
<string name="device_does_not_support_disabling_battery_optimizations">La versione del tuo dispositivo Android non supporta l\'esclusione delle ottimizzazioni della batteria</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">La versione del tuo dispositivo Android non supporta la visualizzazione della finestra di dialogo per l\'ottimizzazione della batteria per le applicazioni.</string>
<string name="shutdown_canceled">Arresto programmato annullato</string>
<string name="tunnels_reloading">Ricaricando le configurazioni dei tunnel...</string>
<string name="settings_section0">Impostazioni generali</string>
<string name="settings_section_tunnels">Tunnel</string>
<string name="autostart_enabled">Avvia all\'accensione</string>
<string name="add_tunnel_button">Aggiungi tunnel</string>
<string name="add_tunnel">Gestione tunnel</string>
<string name="del_tunnel_button">Elimina tunnel</string>
</resources>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Sieć bez granic</string>
<string name="action_start">Rozpocznij</string>
<string name="action_stop">Zatrzymaj</string>
<string name="action_exit">Wyjdź</string>
<string name="action_graceful_stop">Łagodne zatrzymanie</string>
<string name="action_cancel_graceful_stop">Anuluj łagodne zatrzymanie</string>
<string name="action_reload_tunnels_config">Załaduj ponownie tunele</string>
<string name="action_start_webview">Otwórz konsolę Web</string>
<string name="action_settings">Ustawienia</string>
<string name="graceful_stop_is_already_in_progress">Łagodne zatrzymanie jest już w toku</string>
<string name="graceful_stop_is_in_progress">Łagodne zatrzymanie w toku</string>
<string name="gracefulShutdownInProgress">Łagodne wyłączenie w toku</string>
<string name="already_stopped">Już zatrzymano</string>
<string name="uninitialized">Inicjowanie aplikacji...</string>
<string name="starting">Uruchamianie aplikacji...</string>
<string name="jniLibraryLoaded">Wczytano biblioteki JNI</string>
<string name="startedOkay">Aplikacja rozpoczęta</string>
<string name="startFailed">Start nie powiódł się</string>
<string name="stopped">Aplikacja zatrzymana</string>
<string name="stopping">Zatrzymywanie aplikacji...</string>
<string name="remaining">pozostało</string>
<string name="services">Usługi wewnętrzne</string>
<string name="services_http_proxy">Serwer proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Informacja</string>
<string name="permDenied">Odmowa uprawnienia do zapisu karty SD, musisz zezwolić na kontynuowanie</string>
<string name="permRequired">Dostęp do zapisu karty SD jest wymagany do zapisywania kluczy i innych plików w folderze I2PD na karcie SD.</string>
<string name="retryPermRequest">Spróbuj ponownie poprosić o uprawnienia do zapisu karty SD</string>
<string name="menu_item_battery_optimizations_str">Optymalizacja baterii</string>
<string name="battery_optimizations_enabled">Optymalizacje zużycia baterii włączone</string>
<string name="battery_optimizations_enabled_explained">Twój Android wykonuje ciężkie optymalizacje baterii na I2PD, co może doprowadzić do zamknięcia demona bez żadnego innego powodu.\nZaleca się wyłączenie optymalizacji baterii.</string>
<string name="battery_optimizations_enabled_dialog">Twój Android wykonuje ciężkie optymalizacje baterii na I2PD, co może doprowadzić do zamknięcia demona bez żadnego innego powodu.\n\nZostaniesz teraz poproszony o zezwolenie na ich wyłączenie.</string>
<string name="continue_str">Kontynuuj</string>
<string name="device_does_not_support_disabling_battery_optimizations">Twoja wersja Androida nie obsługuje rezygnacji z optymalizacji baterii</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Twoja wersja Android OS nie obsługuje wyświetlania okna dialogowego optymalizacji baterii dla aplikacji.</string>
<string name="shutdown_canceled">Anulowano planowane wyłączenie</string>
<string name="tunnels_reloading">Przeładowywanie konfiguracji tuneli...</string>
<string name="settings_section0">Ustawienia ogólne</string>
<string name="settings_section_tunnels">Tunele</string>
<string name="autostart_enabled">Uruchom przy starcie systemu</string>
<string name="add_tunnel_button">Dodaj tunel</string>
<string name="add_tunnel">Zarządzanie tunelami</string>
<string name="del_tunnel_button">Usuń tunel</string>
</resources>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Rede sem fronteiras</string>
<string name="action_start">Iniciar</string>
<string name="action_stop">Parar</string>
<string name="action_exit">Sair</string>
<string name="action_graceful_stop">Saída Graciosa</string>
<string name="action_cancel_graceful_stop">Cancelar Saída Graciosa</string>
<string name="action_reload_tunnels_config">Recarregar túneis</string>
<string name="action_start_webview">Abrir o Web Console</string>
<string name="action_settings">Configurações</string>
<string name="graceful_stop_is_already_in_progress">Saída Graciosa já está em progresso</string>
<string name="graceful_stop_is_in_progress">Saída Graciosa em progresso</string>
<string name="gracefulShutdownInProgress">Desligamento gracioso em progresso</string>
<string name="already_stopped">Já parou</string>
<string name="uninitialized">Iniciando aplicação...</string>
<string name="starting">Iniciando aplicação...</string>
<string name="jniLibraryLoaded">Bibliotecas JNI carregadas</string>
<string name="startedOkay">Aplicação iniciada</string>
<string name="startFailed">Inicialização falhou</string>
<string name="stopped">Aplicação parou</string>
<string name="stopping">Parando aplicação...</string>
<string name="remaining">restando</string>
<string name="services">Serviços internos</string>
<string name="services_http_proxy">Proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Permissão</string>
<string name="permDenied">Permissão de escrita no cartão SD foi negada, você precisa permitir isso para continuar</string>
<string name="permRequired">Permissão de escrita no cartão SD é necessária para gravar as chaves e outros arquivos na pasta do I2PD no cartão SD.</string>
<string name="retryPermRequest">Tente novamente solicitar a permissão de escrita no cartão SD</string>
<string name="menu_item_battery_optimizations_str">Otimizações da Bateria</string>
<string name="battery_optimizations_enabled">Otimizações da bateria ativadas</string>
<string name="battery_optimizations_enabled_explained">O seu sistema está realizando fortes otimizações de uso de bateria pelo I2PD que podem levar a fechamentos inesperados do serviço.\nÉ recomendando desativar estas otimizações.</string>
<string name="battery_optimizations_enabled_dialog">O seu sistema está realizando fortes otimizações de uso de bateria pelo I2PD que podem levar a fechamentos inesperados do serviço.\n\nVocê será solicitado a desativá-las.</string>
<string name="continue_str">Continuar</string>
<string name="device_does_not_support_disabling_battery_optimizations">A sua versão do Android não suporta a opção de não usar otimizações de bateria</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">A versão do seu sistema Android não suporta mostrar a caixa de diálogo para otimizações de bateria para aplicativos.</string>
<string name="shutdown_canceled">Desligamento planejado cancelado</string>
<string name="tunnels_reloading">Recarregando configurações dos túneis...</string>
<string name="settings_section0">Configurações comuns</string>
<string name="settings_section_tunnels">Túneis</string>
<string name="autostart_enabled">Iniciar no boot</string>
<string name="add_tunnel_button">Adicionar túnel</string>
<string name="add_tunnel">Gerenciamento de túneis</string>
<string name="del_tunnel_button">Exclui túnel</string>
</resources>
+11 -20
View File
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_description">Invisible Internet Protocol:</string>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Сеть без границ</string>
<string name="action_start">Запустить</string>
<string name="action_stop">Остановить</string>
<string name="action_exit">Выход</string>
@@ -11,25 +9,25 @@
<string name="action_reload_tunnels_config">Перезагрузить туннели</string>
<string name="action_start_webview">Открыть Веб Консоль</string>
<string name="action_settings">Настройки</string>
<string name="graceful_stop_is_already_in_progress">Корректная остановка уже запущена</string>
<string name="graceful_stop_is_in_progress">Корректная остановка запущена</string>
<string name="gracefulShutdownInProgress">Корректная остановка запущена</string>
<string name="already_stopped">Уже остановлено</string>
<string name="uninitialized">Приложение инициализируется</string>
<string name="starting">Приложение запускается</string>
<string name="uninitialized">Приложение инициализируется...</string>
<string name="starting">Приложение запускается...</string>
<string name="jniLibraryLoaded">Загружены JNI библиотеки</string>
<string name="startedOkay">Приложение запущено</string>
<string name="startFailed">Запуск не удался</string>
<string name="stopped">Приложение было остановлено</string>
<string name="stopping">Остановка приложения...</string>
<string name="remaining">осталось</string>
<string name="services">Внутренние сервисы</string>
<string name="services_http_proxy">HTTP Прокси</string>
<string name="services_socks_proxy">SOCKS5 Прокси</string>
<string name="title_activity_i2_pdperms_asker_prompt">Запрос</string>
<string name="permDenied">Права для записи на SD карту отклонены, вам необходимо предоставить их для продолжения</string>
<string name="permRequired">Права на запись на SD карту необходимы для записи ключей и других файлов в папку I2PD на внутренней памяти.</string>
<string name="retryPermRequest">Повторить запрос прав на запись на SD карту</string>
<string name="menu_item_battery_optimizations_str">Оптимизации аккумулятора</string>
<string name="battery_optimizations_enabled">Оптимизации аккумулятора включены</string>
<string name="battery_optimizations_enabled_explained">Ваша операционная система осуществляет оптимизации расхода аккумулятора, которые могут приводить к выгрузке I2PD из памяти и прекращению его работы с целью сэкономить заряд аккумулятора.\nРекомендуется отключить эти оптимизации.</string>
@@ -37,20 +35,13 @@
<string name="continue_str">Продолжить</string>
<string name="device_does_not_support_disabling_battery_optimizations">Ваша версия Андроид не поддерживает отключение оптимизаций аккумулятора</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Ваша версия Андроид не поддерживает показ диалога об оптимизациях аккумулятора для приложений.</string>
<string name="shutdown_canceled">Плановая остановка отменена</string>
<string name="tunnels_reloading">Перезагрузка конфигурации туннелей...</string>
<string name="autostart_enabled">Запуск после загрузки телефона</string>
<string name="settings_section0">Основные настройки</string>
<string name="settings_section_tunnels">Туннели</string>
<string name="add_tunnel_button">Добавить</string>
<string name="autostart_enabled">Запуск после загрузки телефона</string>
<string name="add_tunnel_button">Добавить туннель</string>
<string name="add_tunnel">Управление туннелями</string>
<string name="del_tunnel_button">Удалить</string>
<string name="enabled">Вкл</string>
<string name="disabled">Выкл</string>
<string name="del_tunnel_button">Удалить туннель</string>
<string name="OpenPreferences">Открыть основные настройки</string>
</resources>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Sınırları olmayan ağ</string>
<string name="action_start">Başlat</string>
<string name="action_stop">Durdur</string>
<string name="action_exit">Çık</string>
<string name="action_graceful_stop">Düzgün durdur</string>
<string name="action_cancel_graceful_stop">Düzgün durdurmayı İptal Et</string>
<string name="action_reload_tunnels_config">Tünelleri yeniden yükle</string>
<string name="action_start_webview">Web Konsolunu Aç</string>
<string name="action_settings">Ayarlar</string>
<string name="graceful_stop_is_already_in_progress">Düzgün durdurma zaten devam ediyor</string>
<string name="graceful_stop_is_in_progress">Düzgün durdurma devam ediyor</string>
<string name="gracefulShutdownInProgress">Düzgün kapatma devam ediyor</string>
<string name="already_stopped">Zaten durduruldu</string>
<string name="uninitialized">Uygulama ilk ayarları yapılıyor...</string>
<string name="starting">Uygulama başlatılıyor...</string>
<string name="jniLibraryLoaded">JNI kütüphaneleri yüklendi</string>
<string name="startedOkay">Uygulama başlatıldı</string>
<string name="startFailed">Başlatılamadı</string>
<string name="stopped">Uygulama durduruldu</string>
<string name="stopping">Uygulama durduruluyor...</string>
<string name="remaining">kalan</string>
<string name="services">İç servisler</string>
<string name="services_http_proxy">HTTP Proxy</string>
<string name="services_socks_proxy">SOCKS5 Proxy</string>
<string name="title_activity_i2_pdperms_asker_prompt">Bilgi</string>
<string name="permDenied">SD karta yazma izni reddedildi, devam etmek için buna izin vermeniz gerekiyor</string>
<string name="permRequired">Anahtarları ve diğer dosyaları SD karttaki I2PD klasörüne yazmak için SD karta yazma erişimi gereklidir.</string>
<string name="retryPermRequest">SD karta yazma izinlerini istemeyi yeniden dene</string>
<string name="menu_item_battery_optimizations_str">Pil İyileştirmeleri</string>
<string name="battery_optimizations_enabled">Pil iyileştirmeleri etkin</string>
<string name="battery_optimizations_enabled_explained">Android aygıtınız, I2PD üzerinde başka bir neden olmaksızın arka plan programının kapanmasına neden olabilecek bazı ağır pil iyileştirmeleri yapıyor.\nBu pil iyileştirmelerinin devre dışı bırakılmasına izin verilmesi tavsiye edilir.</string>
<string name="battery_optimizations_enabled_dialog">Android aygıtınız, I2PD üzerinde başka bir neden olmaksızın arka plan programının kapanmasına neden olabilecek bazı ağır pil iyileştirmeleri yapıyor.\n\nŞimdi bunları devre dışı bırakmaya izin vermeniz istenecek.</string>
<string name="continue_str">Devam et</string>
<string name="device_does_not_support_disabling_battery_optimizations">Android sürümünüz pil iyileştirmelerini devre dışı bırakmayı desteklemiyor</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Android işletim sistemi sürümünüz, uygulamalar için pil iyileştirmeleri iletişim kutusunun gösterilmesini desteklemiyor.</string>
<string name="shutdown_canceled">Zamanlanan kapatma iptal edildi</string>
<string name="tunnels_reloading">Tünel yapılandırması yeniden yükleniyor...</string>
<string name="settings_section0">Ortak ayarlar</string>
<string name="settings_section_tunnels">Tüneller</string>
<string name="autostart_enabled">Önyüklemede başlat</string>
<string name="add_tunnel_button">Tünel ekle</string>
<string name="add_tunnel">Tünel yönetimi</string>
<string name="del_tunnel_button">Tünelis is</string>
</resources>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Мережа без кордонів</string>
<string name="action_start">Почати</string>
<string name="action_stop">Зупинити</string>
<string name="action_exit">Вийти</string>
<string name="action_graceful_stop">Плавна зупинка</string>
<string name="action_cancel_graceful_stop">Скасувати плавну зупинку</string>
<string name="action_reload_tunnels_config">Перезавантажити тунелі</string>
<string name="action_start_webview">Відкрити веб-консоль</string>
<string name="action_settings">Налаштування</string>
<string name="graceful_stop_is_already_in_progress">Плавна зупинка вже виконується</string>
<string name="graceful_stop_is_in_progress">Плавна зупинка у процесі</string>
<string name="gracefulShutdownInProgress">Виконується плавне завершення</string>
<string name="already_stopped">Вже зупинено</string>
<string name="uninitialized">Додаток запускається...</string>
<string name="starting">Додаток запускається...</string>
<string name="jniLibraryLoaded">Завантажено бібліотеки JNI</string>
<string name="startedOkay">Запуск додатку</string>
<string name="startFailed">Не вдалося запустити</string>
<string name="stopped">Додаток зупинено</string>
<string name="stopping">Додаток зупиняється...</string>
<string name="remaining">залишилось</string>
<string name="services">Внутрішні служби</string>
<string name="services_http_proxy">Проксі HTTP</string>
<string name="services_socks_proxy">Проксі SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Запит</string>
<string name="permDenied">Дозвіл на запис до SD-карти відхилений, Вам необхідно дозволити для продовження</string>
<string name="permRequired">Для запису ключів та інших файлів до теки I2PD на SD-карті потрібен доступ до передачі даних на SD-карті.</string>
<string name="retryPermRequest">Повторити запит на запис до SD-карти</string>
<string name="menu_item_battery_optimizations_str">Оптимізація батареї</string>
<string name="battery_optimizations_enabled">Оптимізацію батареї ввімкнено</string>
<string name="battery_optimizations_enabled_explained">Ваш Android виконує деякі складні оптимізації використання заряду на I2PD, які можуть призвести до встановлення демонів без будь-яких інших причин.\nРекомендується дозволити вимкнення цих оптимізації використання акумулятора.</string>
<string name="battery_optimizations_enabled_dialog">Ваш Android виконує деякі складні оптимізації використання заряду на I2PD, які можуть призвести до встановлення демонів без будь-яких інших причин.\n\nРекомендується дозволити вимкнення цих оптимізації використання акумулятора.</string>
<string name="continue_str">Далі</string>
<string name="device_does_not_support_disabling_battery_optimizations">Ваш пристрій не підтримує відключення оптимізації батареї</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Ваша версія ОС Android не підтримує відображення діалогу для оптимізації заряду акумулятора для програм.</string>
<string name="shutdown_canceled">Плановане завершення скасоване</string>
<string name="tunnels_reloading">Перезавантаження налаштувань тунелів...</string>
<string name="settings_section0">Загальні налаштування</string>
<string name="settings_section_tunnels">Тунелі</string>
<string name="autostart_enabled">Автозапуск</string>
<string name="add_tunnel_button">Додайте тунель</string>
<string name="add_tunnel">Керування тунелями</string>
<string name="del_tunnel_button">Видалити тунель</string>
</resources>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Chegarasiz tarmoq</string>
<string name="action_start">Boshlash</string>
<string name="action_stop">To\'xtatish</string>
<string name="action_exit">Chiqish</string>
<string name="action_graceful_stop">Yumshoq to\'xtatish</string>
<string name="action_cancel_graceful_stop">Yumshoq to\'xtatish bekor qilish</string>
<string name="action_reload_tunnels_config">Tunnellarni qayta yuklash</string>
<string name="action_start_webview">Veb-konsolni ochish</string>
<string name="action_settings">Sozlamalar</string>
<string name="graceful_stop_is_already_in_progress">Yumshoq to\'xtatish allaqachon amalga oshirilmoqda</string>
<string name="graceful_stop_is_in_progress">Yumshoq to\'xtatish amalga oshirilmoqda</string>
<string name="gracefulShutdownInProgress">Yumshoq to\'xtatish amalga oshirilmoqda</string>
<string name="already_stopped">Allaqachon to\'xtatilgan</string>
<string name="uninitialized">Ilova ishga tushiriladi...</string>
<string name="starting">Ilova ishga tushmoqda...</string>
<string name="jniLibraryLoaded">JNI kutubxonalari yuklangan</string>
<string name="startedOkay">Ilova ishga tushirildi</string>
<string name="startFailed">Ishga tushirish muvaffaqiyatsiz tugadi</string>
<string name="stopped">Ilova toʻxtatildi</string>
<string name="stopping">Ilova toʻxtatilmoqda...</string>
<string name="remaining">qoldi</string>
<string name="services">Ichki xizmatlar</string>
<string name="services_http_proxy">HTTP proksi</string>
<string name="services_socks_proxy">SOCKS5 proksi</string>
<string name="title_activity_i2_pdperms_asker_prompt">So\'rov</string>
<string name="permDenied">SD kartaga yozish ruxsati rad etildi, buni davom ettirishga ruxsat berishingiz kerak</string>
<string name="permRequired">Kalitlarni va boshqa fayllarni SD-kartadagi I2PD jildiga yozish uchun SD kartaga yozish huquqi talab qilinadi.</string>
<string name="retryPermRequest">Endi sizdan ularni o\'chirishga ruxsat berish so\'raladi</string>
<string name="menu_item_battery_optimizations_str">Batareyani optimallashtirish</string>
<string name="battery_optimizations_enabled">Batareya optimallashtirishi yoqilgan</string>
<string name="battery_optimizations_enabled_explained">Sizning Androidingiz I2PD-da batareyani kuchli optimallashtirishni amalga oshirmoqda, bu boshqa sababsiz demonning yopilishiga olib kelishi mumkin.\nUshbu batareyani optimallashtirishni o\'chirishga ruxsat berish tavsiya etiladi.</string>
<string name="battery_optimizations_enabled_dialog">Sizning Androidingiz I2PD-da batareyani kuchli optimallashtirishni amalga oshirmoqda, bu boshqa sababsiz demonning yopilishiga olib kelishi mumkin.\n\nEndi sizdan ularni o\'chirishga ruxsat berish so\'raladi.</string>
<string name="continue_str">Davom etish</string>
<string name="device_does_not_support_disabling_battery_optimizations">Sizning Android versiyangiz batareyani optimallashtirishdan voz kechishni qo\'llab-quvvatlamaydi</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Sizning Android OS versiyangiz ilovalar uchun batareyani optimallashtirish dialogini ko\'rsatishni qo\'llab-quvvatlamaydi.</string>
<string name="shutdown_canceled">Rejalashtirilgan yumshoq o\'chirish bekor qilindi</string>
<string name="tunnels_reloading">Tunnellar konfiguratsiyalari qayta yuklanmoqda...</string>
<string name="settings_section0">Umumiy sozlamalar</string>
<string name="settings_section_tunnels">Tunnellar</string>
<string name="autostart_enabled">Avtomatik ishga tushirish</string>
<string name="add_tunnel_button">Tunnelni qo\'shish</string>
<string name="add_tunnel">Tunnellarni boshqarish</string>
<string name="del_tunnel_button">Tunnelni o\'chirish</string>
</resources>
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">网络无国界</string>
<string name="action_start">开始运行</string>
<string name="action_stop">停止运行</string>
<string name="action_exit">退出</string>
<string name="action_graceful_stop">平滑关闭</string>
<string name="action_cancel_graceful_stop">取消平滑关闭</string>
<string name="action_reload_tunnels_config">重新加载隧道</string>
<string name="action_start_webview">打开网页控制台</string>
<string name="action_settings">设置</string>
<string name="graceful_stop_is_already_in_progress">平滑退出已在进行...</string>
<string name="graceful_stop_is_in_progress">正在平滑退出</string>
<string name="gracefulShutdownInProgress">正在平滑关闭 剩余时间:</string>
<string name="already_stopped">已停止</string>
<string name="uninitialized">I2Pd 正在初始化...</string>
<string name="starting">I2Pd 正在启动...</string>
<string name="jniLibraryLoaded">已加载Java本地接口库</string>
<string name="startedOkay">I2Pd 已启动</string>
<string name="startFailed">I2Pd 启动失败</string>
<string name="stopped">I2Pd 已停止运行</string>
<string name="stopping">I2Pd 正在停止运行...</string>
<string name="remaining">分钟</string>
<string name="services">内部服务</string>
<string name="services_http_proxy">HTTP 代理</string>
<string name="services_socks_proxy">SOCKS5 代理</string>
<string name="title_activity_i2_pdperms_asker_prompt">需要权限</string>
<string name="permDenied">无法获得 SD 卡写入权限,你需要允许它以继续</string>
<string name="permRequired">需要SD卡写入权限才能将密钥和其他文件写入SD卡上的 I2PD 文件夹中。</string>
<string name="retryPermRequest">尝试重新获取储存权限</string>
<string name="menu_item_battery_optimizations_str">电池优化</string>
<string name="battery_optimizations_enabled">电池优化已启用</string>
<string name="battery_optimizations_enabled_explained">您的安卓设备正在对 I2Pd 使用严格的电池优化策略,这可能导致I2Pd无缘无故停止运行。\n建议关闭电池优化。</string>
<string name="battery_optimizations_enabled_dialog">您的安卓设备正在对 I2Pd 进行严格的电池优化,这可能导致守护进程无缘无故停止运行。\n\n请点击继续以关闭电池优化。</string>
<string name="continue_str">继续</string>
<string name="device_does_not_support_disabling_battery_optimizations">您设备的 Android 版本不支持关闭电池优化</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">您设备的 Android 版本不支持打开电池优化的界面。</string>
<string name="shutdown_canceled">计划关闭已取消</string>
<string name="tunnels_reloading">正在重新加载隧道配置...</string>
<string name="settings_section0">通用设置</string>
<string name="settings_section_tunnels">隧道</string>
<string name="autostart_enabled">开机自启</string>
<string name="add_tunnel_button">添加隧道</string>
<string name="add_tunnel">隧道管理</string>
<string name="del_tunnel_button">删除隧道</string>
</resources>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="pref_bandwidth_limit_flags">
<item>L</item>
<item>O</item>
<item>P</item>
<item>X</item>
</string-array>
<string-array name="pref_loglevel">
<item>none</item>
<item>error</item>
<item>warn</item>
<item>info</item>
<item>debug</item>
</string-array>
</resources>
+15 -8
View File
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name" translatable="false">i2pd</string>
<string name="app_description">Invisible Internet Protocol:</string>
<string name="app_description" translatable="false">Invisible Internet Protocol:</string>
<string name="app_description2">Network without borders</string>
<string name="action_start">Start</string>
<string name="action_stop">Stop</string>
<string name="action_exit">Exit</string>
<string name="action_graceful_stop">Graceful Stop</string>
<string name="action_cancel_graceful_stop">Cancel Graceful Stop</string>
<string name="action_graceful_stop">Graceful stop</string>
<string name="action_cancel_graceful_stop">Cancel Graceful stop</string>
<string name="action_reload_tunnels_config">Reload tunnels</string>
<string name="action_start_webview">Open Web Console</string>
<string name="action_settings">Settings</string>
@@ -18,15 +18,23 @@
<string name="gracefulShutdownInProgress">Graceful shutdown in progress</string>
<string name="already_stopped">Already stopped</string>
<string name="uninitialized">Application initializing</string>
<string name="starting">Application starting</string>
<string name="uninitialized">Application initializing...</string>
<string name="starting">Application starting...</string>
<string name="jniLibraryLoaded">Loaded JNI libraries</string>
<string name="startedOkay">Application Started</string>
<string name="startedOkay">Application started</string>
<string name="startFailed">Start failed</string>
<string name="stopped">Application stopped</string>
<string name="stopping">Application stopping...</string>
<string name="remaining">remaining</string>
<string name="ok" translatable="false">OK</string>
<string name="services">Internal services</string>
<string name="services_http_proxy">HTTP Proxy</string>
<string name="services_socks_proxy">SOCKS5 Proxy</string>
<string name="services_bob" translatable="false">BOB</string>
<string name="services_sam" translatable="false">SAM</string>
<string name="services_i2cp" translatable="false">I2CP</string>
<string name="title_activity_i2_pdperms_asker_prompt">Prompt</string>
<string name="permDenied">SD card write permission denied, you need to allow this to continue</string>
<string name="permRequired">SD card write access is required to write the keys and other files to the I2PD folder on SD card.</string>
@@ -52,7 +60,6 @@
<string name="add_tunnel">Tunnels management</string>
<string name="del_tunnel_button">Delete tunnel</string>
<string name="enabled">On</string>
<string name="disabled">Off</string>
<string name="OpenPreferences">Open i2pd settings</string>
</resources>
+218
View File
@@ -0,0 +1,218 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Main">
<ListPreference
android:id="@+id/LogLevel"
android:defaultValue="1"
android:entries="@array/pref_loglevel"
android:entryValues="@array/pref_loglevel"
android:key="logLevelPreference"
android:summary="Logging level to file. Use 'none' to reduce memory usage"
android:title="Log level" />
<CheckBoxPreference
android:id="@+id/IPV4Enable"
android:defaultValue="true"
android:key="ipv4EnablePreference"
android:title="IPv4" />
<CheckBoxPreference
android:id="@+id/IPV6Enable"
android:defaultValue="false"
android:key="ipv6EnablePreference"
android:title="IPv6" />
<EditTextPreference
android:id="@+id/Port"
android:defaultValue="auto"
android:key="portPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
<ListPreference
android:id="@+id/BandWithType"
android:entries="@array/pref_bandwidth_limit_flags"
android:entryValues="@array/pref_bandwidth_limit_flags"
android:key="bandwidthPreference"
android:summary="Bandwidth limit for transit traffic"
android:title="Bandwidth" />
<CheckBoxPreference
android:id="@+id/NoTransitCheckbox"
android:defaultValue="false"
android:key="noTransitPreference"
android:summary="Disable transit"
android:title="No transit" />
<CheckBoxPreference
android:id="@+id/FloodfillCheckBox"
android:defaultValue="false"
android:key="floodfillPreference"
android:summary="Uses more battery"
android:title="Floodfill" />
<CheckBoxPreference
android:id="@+id/SSUCheckBox"
android:defaultValue="true"
android:key="ssuPreference"
android:title="SSU" />
</PreferenceCategory>
<PreferenceCategory android:title="NTCP2">
<CheckBoxPreference
android:id="@+id/NTCP2Checkbox"
android:defaultValue="true"
android:key="ntcp2EnablePreference"
android:title="Enable" />
<CheckBoxPreference
android:id="@+id/NTCPPublishCheckbox"
android:defaultValue="true"
android:key="ntcp2PublishPreference"
android:summary="Disable to make unable to connect to your device"
android:title="Publish" />
</PreferenceCategory>
<PreferenceCategory android:title="Web Console">
<CheckBoxPreference
android:id="@+id/WebConsoleEnableCheckbox"
android:defaultValue="true"
android:key="webConsoleEnablePreference"
android:title="Enable" />
<EditTextPreference
android:id="@+id/WebConsoleIPText"
android:defaultValue="127.0.0.1"
android:key="webConsoleAddressPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Address" />
<EditTextPreference
android:id="@+id/WebConsolePortText"
android:defaultValue="7070"
android:key="webConsolePortPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
<CheckBoxPreference
android:id="@+id/WebConsoleUseAuthCheckbox"
android:defaultValue="false"
android:key="webConsoleAuthPreference"
android:summary="Use HTTP authorization to access Web Console"
android:title="Authorization" />
<EditTextPreference
android:id="@+id/WebConsoleUser"
android:defaultValue="Default value"
android:key="webConsoleUserPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="User" />
<EditTextPreference
android:id="@+id/WebConsoleUserPassword"
android:defaultValue="Default value"
android:key="webConsolePasswordPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Password" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/services_http_proxy">
<CheckBoxPreference
android:id="@+id/EnableHTTPProxy"
android:defaultValue="true"
android:key="httpProxyEnablePreference"
android:title="Enable" />
<EditTextPreference
android:id="@+id/HTTPProxyHost"
android:defaultValue="127.0.0.1"
android:key="httpProxyAddressPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Address" />
<EditTextPreference
android:id="@+id/HTTPProxyPort"
android:defaultValue="4444"
android:key="httpProxyPortPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
<EditTextPreference
android:id="@+id/HTTPProxyKeys"
android:defaultValue="transient"
android:key="httpProxyKeysPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Keys" />
</PreferenceCategory>
<PreferenceCategory android:title="SOCKS Proxy">
<CheckBoxPreference
android:id="@+id/SocksProxyEnableCheckbox"
android:defaultValue="false"
android:key="socksProxyEnablePreference"
android:title="Enable" />
<EditTextPreference
android:id="@+id/SocksProxyHost"
android:defaultValue="127.0.0.1"
android:key="socksProxyAddressPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Address" />
<EditTextPreference
android:id="@+id/SocksProxyPort"
android:defaultValue="4447"
android:key="socksProxyPortPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
<EditTextPreference
android:id="@+id/SocksProxyKey"
android:defaultValue="transient"
android:key="socksProxyKeysPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Keys" />
</PreferenceCategory>
<PreferenceCategory android:title="SAM">
<CheckBoxPreference
android:id="@+id/SAMEnable"
android:defaultValue="false"
android:key="samEnablePreference"
android:title="Enable" />
<EditTextPreference
android:id="@+id/SAMHost"
android:defaultValue="127.0.0.1"
android:key="samAddressPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Address" />
<EditTextPreference
android:id="@+id/SAMPort"
android:defaultValue="7656"
android:key="samPortPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
</PreferenceCategory>
<PreferenceCategory android:title="UPnP">
<CheckBoxPreference
android:id="@+id/UPnPEnable"
android:defaultValue="false"
android:key="upnpEnablePreference"
android:title="Enable" />
<EditTextPreference
android:id="@+id/UPnPForwardName"
android:defaultValue="I2Pd"
android:key="upnpForwardNamePreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Forwarding name" />
</PreferenceCategory>
<PreferenceCategory android:title="Limits">
<EditTextPreference
android:id="@+id/TransitTunnelEdit"
android:defaultValue="3000"
android:key="transitTunnelPreference"
android:selectAllOnFocus="true"
android:singleLine="true"
android:summary="Limit possible built transit tunnels"
android:title="Transit tunnels" />
</PreferenceCategory>
</PreferenceScreen>
+80
View File
@@ -0,0 +1,80 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := i2pd
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(LANG_SRC_PATH) $(DAEMON_SRC_PATH)
LOCAL_STATIC_LIBRARIES := \
boost_system \
boost_date_time \
boost_filesystem \
boost_program_options \
crypto \
ssl \
miniupnpc
LOCAL_LDLIBS := -lz
LOCAL_SRC_FILES := \
$(IFADDRS_PATH)/ifaddrs.cpp \
$(IFADDRS_PATH)/bionic_netlink.cpp \
$(wildcard $(LIB_SRC_PATH)/*.cpp) \
$(wildcard $(LIB_CLIENT_SRC_PATH)/*.cpp) \
$(wildcard $(LANG_SRC_PATH)/*.cpp) \
$(DAEMON_SRC_PATH)/UnixDaemon.cpp \
$(DAEMON_SRC_PATH)/Daemon.cpp \
$(DAEMON_SRC_PATH)/UPnP.cpp \
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
$(DAEMON_SRC_PATH)/I2PControl.cpp \
$(DAEMON_SRC_PATH)/I2PControlHandlers.cpp \
$(DAEMON_SRC_PATH)/i2pd.cpp \
include $(BUILD_EXECUTABLE)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_system
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_date_time
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_filesystem
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_program_options
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
LOCAL_STATIC_LIBRARIES := crypto
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := miniupnpc
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
+34
View File
@@ -0,0 +1,34 @@
APP_ABI += all
#APP_ABI += arm64-v8a
#APP_ABI += armeabi-v7a
#APP_ABI += x86_64
#APP_ABI += x86
APP_PLATFORM := android-16
#APP_PLATFORM := android-21
NDK_TOOLCHAIN_VERSION := clang
APP_STL := c++_static
# Enable c++17 extensions in source code
APP_CPPFLAGS += -std=c++17 -fexceptions -frtti
APP_CPPFLAGS += -DANDROID_BINARY -DANDROID -D__ANDROID__ -DUSE_UPNP -Wno-deprecated-declarations
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
APP_CPPFLAGS += -DANDROID_ARM7A
endif
APP_LDFLAGS += -fPIE
IFADDRS_PATH = $(NDK_MODULE_PATH)/android-ifaddrs
BOOST_PATH = $(NDK_MODULE_PATH)/boost
MINIUPNP_PATH = $(NDK_MODULE_PATH)/miniupnp
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
# don't change me
I2PD_SRC_PATH = $(NDK_MODULE_PATH)/i2pd
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd
LIB_CLIENT_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd_client
LANG_SRC_PATH = $(I2PD_SRC_PATH)/i18n
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon
+1
Submodule binary/jni/boost added at 7daeea9727
+94
View File
@@ -0,0 +1,94 @@
#!/bin/bash
# https://stackoverflow.com/a/246128
SOURCE="${0}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
# Checking Android SDK
if [ -z "$ANDROID_HOME" -a "$ANDROID_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_HOME is empty. Run 'export ANDROID_HOME=[PATH_TO_SDK]'\033[0m"
exit
fi
# Checking Android NDK
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit 1
fi
_NDK_OPTS="-j `nproc` NDK_MODULE_PATH=$DIR"
help()
{
echo "Syntax: $(basename "$SOURCE") [-m|d|s|h|v]"
echo "Options:"
echo "b Build binary."
echo "d Debug build."
echo "s Strip binaries."
echo "x Skip libraries rebuild."
echo "v Verbose NDK output."
echo "h Print this Help."
echo
}
while getopts ":dbsvxh" option; do
case $option in
d) # debug build
_NDK_OPTS="$_NDK_OPTS NDK_DEBUG=1"
;;
b) # build binary
_BINARY=1
;;
s) # strip binaries
_STRIP=1
;;
x) # skip libraries rebuild
_SKIP_LIBS=1
;;
v) # verbose output
_NDK_OPTS="$_NDK_OPTS V=1 NDK_LOG=1"
;;
h) # display help
help
exit;;
\?) # Invalid option
echo "Error: Invalid option. Use $(basename "$SOURCE") -h for help"
exit;;
esac
done
# Building
if [ -z "$_SKIP_LIBS" ]; then
echo "Building boost..."
./build_boost.sh
echo "Building openssl..."
./build_openssl.sh
echo "Building miniupnpc..."
./build_miniupnpc.sh
fi
if [ ! -z "$_BINARY" ]; then
echo "Building i2pd..."
$ANDROID_NDK_HOME/ndk-build $_NDK_OPTS
fi
echo "Processing binaries (if requested)..."
pushd $DIR/../libs > /dev/null
for xarch in $(ls .); do
if [ ! -z "$_STRIP" ]; then
$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip -s $xarch/i2pd
fi
if [ ! -z "$_MODULE" ]; then
mv $xarch/i2pd $xarch/libi2pd.so
fi
done
popd > /dev/null
echo "Compilation finished"
+80
View File
@@ -0,0 +1,80 @@
#!/bin/bash
set -e
BOOST_VERSION=1.78.0
BOOST_LIBS=date_time,filesystem,program_options,system
function build_one {
echo "Configuring and building..."
CXXFLAGS="-std=c++14" \
NCPU=$(nproc) \
./build-android.sh \
--boost=$BOOST_VERSION \
--arch=$CPU \
--target-version=$API \
--with-libraries=$BOOST_LIBS \
--layout=system \
$ANDROID_NDK_HOME
}
function checkPreRequisites {
if ! [ -d "boost" ] || ! [ "$(ls -A boost)" ]; then
echo -e "\033[31mFailed! Submodule 'boost' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
function build {
for arg in "$@"; do
case "$arg" in
x86_64)
API=21
TARGET=x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
build_one
;;
x86)
API=16
CPU=x86
build_one
;;
arm)
API=16
CPU=armeabi-v7a
build_one
;;
all)
API=16
build_one
;;
*)
;;
esac
done
}
checkPreRequisites
cd boost
# disable verbose output
sed -i -E -e 's/d\+2/d\+0/' build-android.sh
sed -i -E -e 's/\"23\.1\"\|\"25\.0\"/\"23\.1\"\|\"23\.2\"\|\"25\.0\"/' build-android.sh
if (( $# == 0 )); then
build all
else
build $@
fi
+92
View File
@@ -0,0 +1,92 @@
#!/bin/bash
set -e
CMAKE_VERSION=3.22.1
function build_one {
mkdir -p build out/$CPU
cd build
cmake \
-G "Unix Makefiles" \
-DUPNPC_BUILD_SHARED=False \
-DUPNPC_BUILD_TESTS=False \
-DUPNPC_BUILD_SAMPLE=False \
-DANDROID_NATIVE_API_LEVEL=$API \
-DANDROID_ABI=$CPU \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_NDK=$ANDROID_NDK_HOME \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
-DCMAKE_INSTALL_PREFIX=../out/$CPU \
..
echo "Building..."
cmake --build . -- libminiupnpc-static
make install
cd ..
rm -rf build
}
function checkPreRequisites {
if ! [ -d "miniupnp" ] || ! [ "$(ls -A miniupnp)" ]; then
echo -e "\033[31mFailed! Submodule 'miniupnp' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_HOME" -a "$ANDROID_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_HOME is empty. Run 'export ANDROID_HOME=[PATH_TO_SDK]'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
function build {
for arg in "$@"; do
case "$arg" in
x86_64)
API=21
CPU=x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
build_one
;;
arm)
API=16
CPU=armeabi-v7a
build_one
;;
x86)
API=16
CPU=x86
build_one
;;
*)
;;
esac
done
}
checkPreRequisites
cd miniupnp/miniupnpc
rm -rf build out
# add cmake from Android SDK to PATH
PATH=$ANDROID_HOME/cmake/$CMAKE_VERSION/bin:$PATH
if (( $# == 0 )); then
build x86_64 arm64 arm x86
else
build $@
fi
+93
View File
@@ -0,0 +1,93 @@
#!/bin/bash
set -e
HOST_OS=`uname -a`
function build_one {
mkdir -p out/$CPU
echo "Configuring OpenSSL for $CPU..."
./Configure \
--prefix="$PWD/out/$CPU" \
$TARGET \
no-shared \
no-tests \
-D__ANDROID_API__=$API \
-Wno-macro-redefined
echo "Building OpenSSL for $CPU..."
make -j $(nproc) > out/build.log
make install_sw >> out/build.log
make clean
}
function checkPreRequisites {
if ! [ -d "openssl" ] || ! [ "$(ls -A openssl)" ]; then
echo -e "\033[31mFailed! Submodule 'openssl' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
function build {
for arg in "$@"; do
case "$arg" in
x86_64)
API=21
CPU=x86_64
TARGET=android-x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
TARGET=android-arm64
build_one
;;
arm)
API=16
CPU=armeabi-v7a
TARGET=android-arm
build_one
;;
x86)
API=16
CPU=x86
TARGET=android-x86
build_one
;;
*)
;;
esac
done
}
checkPreRequisites
cd openssl
rm -rf out
if [[ "$HOST_OS" == *"_NT-"* ]]; then
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH
else
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
fi
if [[ -f 'Makefile' ]]; then
make clean
fi
if (( $# == 0 )); then
build x86_64 arm64 arm x86
else
build $@
fi
+1
Submodule binary/jni/i2pd added at 905c6debf2
Submodule binary/jni/miniupnp added at 6576eb611b
Submodule binary/jni/openssl added at e04bd3433f
View File
+3 -3
View File
@@ -1,17 +1,17 @@
buildscript {
repositories {
jcenter()
mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.android.tools.build:gradle:7.3.1'
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}
+2
View File
@@ -0,0 +1,2 @@
archive
i2pd_*_android_binary.zip
+53
View File
@@ -0,0 +1,53 @@
#!/bin/bash
# Copyright (c) 2013-2022, The PurpleI2P Project
#
# This file is part of Purple i2pd project and licensed under BSD3
#
# See full license text in LICENSE file at top of project tree
GITDESC=$(git describe --tags)
declare -A ABILIST=(
["armeabi-v7a"]="armv7l"
["arm64-v8a"]="aarch64"
["x86"]="x86"
["x86_64"]="x86_64"
)
# Remove old files and archives
if [ -d "archive" ]; then
rm -r archive
fi
if [ -f "../i2pd_*_android_binary.zip" ]; then
rm i2pd_*_android_binary.zip
fi
# Prepare files for package
mkdir archive
if [ ! -d "../../binary/libs/" ]; then
echo "Prebuilt binaries folder is not found. Have you built them?"
exit 1
fi
for ABI in "${!ABILIST[@]}"; do
if [ -f "../../binary/libs/${ABI}/i2pd" ]; then
cp ../../binary/libs/${ABI}/i2pd archive/i2pd-${ABILIST[$ABI]}
fi
done
cp i2pd archive/i2pd
cp -rH ../../app/src/main/assets/certificates archive/
cp -rH ../../app/src/main/assets/tunnels.d archive/
cp -H ../../app/src/main/assets/i2pd.conf archive/
cp -H ../../app/src/main/assets/tunnels.conf archive/
# Compress files
cd archive
zip -r6 ../i2pd_${GITDESC}_android_binary.zip .
# Remove temporary folder
cd ..
rm -r archive
+33
View File
@@ -0,0 +1,33 @@
#!/bin/sh
# Copyright (c) 2013-2020, The PurpleI2P Project
#
# This file is part of Purple i2pd project and licensed under BSD3
#
# See full license text in LICENSE file at top of project tree
#
# That script written for use with Termux.
# https://stackoverflow.com/a/246128
SOURCE="${0}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
arch=$(uname -m)
screenfind=$(which screen)
if [ -z $screenfind ]; then
echo "Can't find 'screen' installed. That script needs it!";
exit 1;
fi
if [ -z i2pd-$arch ]; then
echo "Can't find i2pd binary for your architecture.";
exit 1;
fi
screen -AmdS i2pd ./i2pd-$arch --datadir=$DIR
@@ -0,0 +1,9 @@
<b>I2P</b> (Invisible Internet Protocol) je univerzální anonymní síťová vrstva.
Veškerá komunikace přes I2P je anonymní a end-to-end šifrována, účastníci neodhalí své skutečné IP adresy.
<b>I2P klient</b> je software používaný pro vytváření a používání anonymních I2P sítí.
Tyto sítě se běžně používají pro anonymní aplikace typu peer-to-peer (sdílení souborů, kryptoměny) a anonymní aplikace typu klient-server (webové stránky, instantní messengery, chat-servery).
<b>I2P</b> umožňuje lidem z celého světa komunikovat a sdílet informace bez omezení.
Pro více informací o <b>I2P</b> si můžete přečíst <a href="https://en.m.wikipedia.org/wiki/I2P">článek na Wikipedii</a>.
@@ -0,0 +1 @@
Kompletní C++ implementace I2P klienta
@@ -0,0 +1,2 @@
* Updated codebase to 2.38.0
* Fix launch on devices with API < 21
@@ -0,0 +1 @@
* Updated codebase to 2.39.0
@@ -0,0 +1,2 @@
* Updated codebase to 2.40.0
* Disabled Network state changes listener (sometimes android not sends notifications, so application thinks that internet is not available)
@@ -0,0 +1,6 @@
* Updated codebase to 2.41.0
* Switch to minSdkVersion 16, ndk 23.1.7779620, gradlew 6.9.2
* Build required modules from source instead of using prebuilt
* Add mipmap icon for compatability with old Android
* Fix crash on start when ifaddrs was called (with meshnets.yggdrasil=true for example)
* Use TCP/IP socket for I2CP instead unix socket
@@ -0,0 +1,12 @@
* Updated codebase to 2.41.0-85-g2f10decf
* Revert to ndk 21.4.7075529, boost 1.74.0
* Switch to androidx.core 1.6.0, gradle 7.1.3, gradlew 7.2
* Add internal services (not user-defined tunnels) status on main page
* Add return button on settings page
* Add turkish translation
* Add uzbek translation
* Fix datadir and locale detection and passing of them to daemon
* Fix getting datadir from daemon
* Fix assets overwriting when they already extracted
* Removed Start/Stop button on main page
* Change application theme to Default (from Holo)
@@ -0,0 +1,3 @@
* Updated codebase to 2.42.0
* Switch to OpenSSL 1.1.1o
* Added French translation
@@ -0,0 +1 @@
* Updated codebase to 2.42.1
@@ -0,0 +1,5 @@
* Updated codebase to 2.43.0
* Remove unused READ_PHONE_STATE permission
* Switch to OpenSSL 1.1.1q
* Added Simplified Chinese translation
* Disable SSU and enable SSU2 for new installations

Some files were not shown because too many files have changed in this diff Show More