{"id":502943,"date":"2026-11-12T16:05:27","date_gmt":"2026-11-12T13:05:27","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=502943"},"modified":"2026-11-12T16:05:27","modified_gmt":"2026-11-12T13:05:27","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=502943","title":{"rendered":"\u0422\u0440\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0434\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430: Xray-core \u0432\u043d\u0443\u0442\u0440\u0438 Android-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Kotlin Multiplatform"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042f \u0434\u0435\u043b\u0430\u044e SHIFROM \u2014 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u0441\u043a\u0432\u043e\u0437\u043d\u044b\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Kotlin Multiplatform, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440-\u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u043e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u0430 \u043f\u0440\u043e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u043f\u0440\u043e\u0449\u0435 \u043d\u0430 \u0432\u0438\u0434: \u043a\u0430\u043a \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0432\u044f\u0437\u044c \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0435\u0441\u043b\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0435. \u041f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 Alpha 2, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 \u043d\u0435\u0442; \u043d\u0430 GitHub \u043b\u0435\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f APK \u043e\u0442 Alpha 1. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f (X3DH, Double Ratchet \u0438 Sealed Sender \u043f\u043e\u0432\u0435\u0440\u0445 libsodium) \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u0430\u0443\u0434\u0438\u0442. \u041f\u0435\u0440\u0432\u044b\u043c \u0438\u0434\u0451\u0442 Android; \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f iOS \u0438 \u0432\u0435\u0431\u0430 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e, \u043d\u043e \u0441\u0440\u043e\u043a\u043e\u0432 \u043d\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e. \u0412\u0441\u0451 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b, \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e.<\/p>\n<h3>\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0438 \u0440\u0435\u0436\u0438\u043c\u044b<\/h3>\n<p>\u0423 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u0434\u0438\u043d \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u043e\u0439\u0442\u0438 \u0434\u043e \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u044f\u043c\u043e\u0439 WebSocket \u043f\u043e\u0432\u0435\u0440\u0445 TLS \u2014 \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u043f\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0435 \u0438 \u0431\u0430\u0442\u0430\u0440\u0435\u0435;<\/p>\n<\/li>\n<li>\n<p>WebSocket \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 Xray-core;<\/p>\n<\/li>\n<li>\n<p>WebSocket \u0447\u0435\u0440\u0435\u0437 onion-\u0441\u0435\u0440\u0432\u0438\u0441 Tor \u2014 \u0441\u0430\u043c\u044b\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>Xray \u0438 Tor \u0437\u0434\u0435\u0441\u044c \u2014 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0439, \u0433\u0434\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0438\u043b\u0438 \u043e\u0431\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 REST, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442, \u043e \u043d\u0435\u0439 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442. \u041e\u043d \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438, \u0430 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0434\u0430\u0451\u0442 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0420\u0435\u0436\u0438\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0426\u0435\u043f\u043e\u0447\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u043e \u0432\u0441\u0451<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Standard (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u044f\u043c\u043e\u0439 \u2192 Xray \u2192 Tor<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Private<\/p>\n<\/td>\n<td>\n<p align=\"left\">Xray \u2192 Tor<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Ghost<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e\u043b\u044c\u043a\u043e Tor<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0448\u0438\u0431\u043a\u0430, \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Ghost \u043d\u0435 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430: \u0435\u0441\u043b\u0438 Tor \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u0430 \u043d\u0435 \u0442\u0438\u0445\u043e \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>Go \u0432\u043d\u0443\u0442\u0440\u0438 Kotlin-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/h3>\n<p>Xray-core \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Go. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0442\u043e\u0440\u043e\u0435: libXray \u2014 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Xray, \u043a\u043e\u0442\u043e\u0440\u0443\u044e gomobile \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432 JNI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/libgojni.so\" rel=\"noopener nofollow\"><code>libgojni.so<\/code><\/a> \u0441 \u0442\u043e\u043d\u043a\u0438\u043c Java-\u0441\u043b\u043e\u0435\u043c. \u041d\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043d\u0438 \u043c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430.<\/p>\n<p>\u041f\u0440\u0438\u0447\u0438\u043d \u0442\u0440\u0438.<\/p>\n<p><strong>\u041e\u0434\u0438\u043d \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b.<\/strong> \u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u2014 \u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0437\u0430 \u0436\u0438\u0437\u043d\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c: \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0443\u043f\u0430\u043b \u0438\u043b\u0438 \u0431\u044b\u043b \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u0442\u044c \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044f\u0434\u0440\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e.<\/p>\n<p><strong>Foreground-\u0441\u0435\u0440\u0432\u0438\u0441.<\/strong> \u0423 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c foreground-\u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0436\u0438\u0432\u044b\u043c. Xray \u0436\u0438\u0432\u0451\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e, \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p><strong>\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/strong> \u0421 Android 10 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <a href=\"https:\/\/developer.android.com\/about\/versions\/10\/behavior-changes-10#execute-permission\" rel=\"noopener nofollow\">\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430<\/a>, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0432\u0438\u0434\u043e\u043c <code>.so<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0437 <code>nativeLibraryDir<\/code>. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <code>System.loadLibrary<\/code>, \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0445\u0438\u0449\u0440\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0426\u0435\u043d\u0430 \u2014 \u0440\u0430\u0437\u043c\u0435\u0440. \u041e\u0434\u043d\u0430 <a href=\"http:\/\/libgojni.so\" rel=\"noopener nofollow\"><code>libgojni.so<\/code><\/a> \u0432\u0435\u0441\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 45 \u041c\u0411, \u0430 ABI \u0447\u0435\u0442\u044b\u0440\u0435: arm64-v8a, armeabi-v7a, x86 \u0438 x86_64. \u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043e\u043d\u0438 \u043b\u0435\u0436\u0430\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438, jar \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438 <code>.so<\/code> \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u043d\u0435 \u043e\u0434\u043d\u0438\u043c <code>.aar<\/code>. Android Gradle Plugin \u043d\u0435 \u0434\u0430\u0451\u0442 \u0432\u043b\u043e\u0436\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 <code>.aar<\/code> \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 AAR (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <code>hasLocalAarDeps<\/code>), \u0430 \u043c\u043e\u0434\u0443\u043b\u044c <code>:shared:core:xray<\/code> \u0441\u0430\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 AAR.<\/p>\n<p>\u0421\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b Kotlin Multiplatform \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 expect\/actual. \u0412 <code>commonMain<\/code> \u043b\u0435\u0436\u0430\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>XrayService<\/code> \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, <code>androidMain<\/code> \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 libXray, \u0430 <code>jvmMain<\/code> \u2014 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 <code>Off<\/code>, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u0435\u0437 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043b\u044f iOS \u043d\u0443\u0436\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 gomobile, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 macOS. \u0415\u0451 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442.<\/p>\n<h3>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 SOCKS5 \u0438 \u043f\u043e\u0440\u0442 10808<\/h3>\n<p>\u042f\u0434\u0440\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 SOCKS5-\u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u043d\u0430 <code>127.0.0.1<\/code>, \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (OkHttp \u043f\u043e\u0434 Ktor) \u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043a\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438. \u041f\u0430\u0440\u043e\u043b\u044f \u0443 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0442: \u043e\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0435\u0442\u043b\u0435\u0432\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043b\u0443\u0448\u0430\u043b\u0430 \u043f\u043e\u0440\u0442 10808, \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u0434\u043b\u044f Xray-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0432\u0435\u0436\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u0434\u0430\u043b\u0430 \u0441 <code>bind: address already in use<\/code>: \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0443\u0436\u0435 \u0434\u0435\u0440\u0436\u0430\u043b\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c SOCKS-\u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435\u043c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0440\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u041e\u0421. \u042f \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e <code>ServerSocket<\/code> \u043a <code>127.0.0.1<\/code> \u0441 \u043f\u043e\u0440\u0442\u043e\u043c 0, \u0447\u0438\u0442\u0430\u044e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e \u0441\u043e\u043a\u0435\u0442 \u0438 \u043e\u0442\u0434\u0430\u044e \u043d\u043e\u043c\u0435\u0440 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 Xray. \u041c\u0435\u0436\u0434\u0443 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u0435\u0441\u0442\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0433\u043e\u043d\u043a\u0438. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0430\u043a \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0440\u0442 \u0437\u0430\u043d\u043e\u0432\u043e. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u043e\u043c\u0435\u0440 \u0435\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>Ready<\/code>, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430: libXray \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0443\u0441\u043f\u0435\u0445, \u0445\u043e\u0442\u044f \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u0440\u0451\u0441\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:<\/p>\n<pre><code class=\"kotlin\">if (!LibXray.getXrayState()) {    error(\"runXrayFromJSON returned success but getXrayState() is false (port collision?)\")}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p><code><em>shared\/core\/xray\/src\/androidMain\/kotlin\/phantom\/core\/xray\/<\/em><\/code><a href=\"http:\/\/XrayServiceFactory.android\" rel=\"noopener nofollow\"><code><em>XrayServiceFactory.android<\/em><\/code><\/a><code><em>.kt<\/em><\/code><\/p>\n<h3>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/h3>\n<p>\u0423 \u044f\u0434\u0440\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<pre><code class=\"kotlin\">sealed class XrayState {    data object Off : XrayState()    data object Starting : XrayState()    data class Ready(val socksPort: Int) : XrayState()    data class Failed(val message: String) : XrayState()}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code><em>shared\/core\/xray\/src\/commonMain\/kotlin\/phantom\/core\/xray\/XrayState.kt<\/em><\/code><em>, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0443\u0431\u0440\u0430\u043d\u044b<\/em><\/p>\n<p>\u041d\u0430\u0440\u0443\u0436\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a <code>StateFlow<\/code>. <code>start()<\/code> \u0438 <code>stop()<\/code> \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u044b \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c: libXray \u043d\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443, \u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u044f\u0434\u0440\u0430 \u0432\u0435\u0440\u043d\u0443\u043b \u0431\u044b \u043e\u0448\u0438\u0431\u043a\u0443 \u0438 \u0441\u043b\u043e\u043c\u0430\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <code>Failed<\/code>. \u041f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430, \u043a\u0430\u043a \u0443 Tor, \u043d\u0435\u0442: <code>runXrayFromJSON<\/code> \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u0434\u043d\u044f\u0442\u044b \u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0435 \u0443\u0434\u0430\u043b\u0441\u044f.<\/p>\n<p>\u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0438 \u0442\u0451\u043f\u043b\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e. \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, DNS \u0438 \u043f\u0435\u0440\u0432\u043e\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435, \u043d\u0430 \u043c\u043e\u0451\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u0434\u043e 30 \u0441\u0435\u043a\u0443\u043d\u0434. \u0422\u0451\u043f\u043b\u044b\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u042d\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p>\u042d\u0442\u0438 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0447\u0443\u0442\u044c \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u0438 \u043c\u043d\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430. \u0427\u0435\u0440\u043d\u043e\u0432\u0438\u043a \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0434\u0430\u0432\u0430\u043b \u043e\u0434\u0438\u043d \u0431\u044e\u0434\u0436\u0435\u0442 \u0432 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u043c\u0435\u0441\u0442\u0435, \u0438 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043e\u0431\u0440\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u044b \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u044f\u0434\u0440\u043e \u043f\u0440\u043e\u0441\u043d\u0451\u0442\u0441\u044f. \u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0441\u043f\u043b\u044b\u043b\u0430 \u043d\u0430 \u0440\u0435\u0432\u044c\u044e \u0434\u043e \u0441\u043b\u0438\u044f\u043d\u0438\u044f, \u0438 \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u0431\u044e\u0434\u0436\u0435\u0442 \u043d\u0430 \u0434\u0432\u0430.<\/p>\n<h3>\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432: \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c<\/h3>\n<p><code>TransportManager<\/code> \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430. \u0414\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f <code>Ready<\/code> \u0438 \u043f\u043e\u0440\u0442\u0430 SOCKS \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>GET \/health<\/code> \u043a \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0443. \u041e\u0442\u0432\u0435\u0442 200 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0445\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 (\u0438 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u2014 \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435).<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u043e\u0442\u043a\u0430\u0437\u0435 \u043f\u043e\u0433\u0430\u0441\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c, \u0431\u0440\u043e\u0441\u0438\u0442\u044c <code>NoTransportReachableException<\/code> \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u043e\u043f\u044b\u0442\u043e\u043a.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0432\u043e\u0439 OkHttp-\u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u043b\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c WebSocket. <code>\/health<\/code> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0431\u0435\u0437 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0435\u0451 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c.<\/p>\n<p>\u0411\u044e\u0434\u0436\u0435\u0442\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043a\u0438\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0430\u0440\u0448\u0440\u0443\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u043f\u0443\u0441\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0422\u0430\u0439\u043c\u0430\u0443\u0442 HTTP-\u0432\u044b\u0437\u043e\u0432\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u044f\u043c\u043e\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\">10 \u0441, \u0434\u0432\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441 \u043f\u0430\u0443\u0437\u043e\u0439 400 \u043c\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">25 \u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Xray<\/p>\n<\/td>\n<td>\n<p align=\"left\">30 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">20 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">30 \u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Tor<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043c\u0438\u043d\u0443\u0442\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">60 \u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">90 \u0441<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u042d\u0442\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u043e\u0432, \u0430 \u043d\u0435 \u043e\u0431\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a. \u0414\u043b\u044f Xray 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 <code>Ready<\/code> \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0441\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0434\u0451\u0442 \u0434\u043e \u043d\u0438\u0445. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443 \u0442\u043e\u0436\u0435 \u0438\u0434\u0451\u0442 \u0441\u0432\u0435\u0440\u0445 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u0432.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044f \u0434\u0432\u0430\u0436\u0434\u044b \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u0434\u043d\u044f\u043b \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u043b\u044f Xray \u0434\u043e 20 \u0441\u0435\u043a\u0443\u043d\u0434, \u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 <code>withTimeout<\/code> \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f 10-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u043c, \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u043b\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u043d\u044c\u0448\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u043b \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b. \u041f\u043e\u0442\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0443 OkHttp \u043a\u0440\u043e\u043c\u0435 <code>callTimeout<\/code> \u0435\u0441\u0442\u044c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b \u043d\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e 10 \u0441\u0435\u043a\u0443\u043d\u0434. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0430\u0434\u0430\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 10,07 \u0441 \u0441 <code>SocketTimeoutException<\/code>, \u0445\u043e\u0442\u044f \u0432 \u043b\u043e\u0433\u0435 \u0441\u0442\u043e\u044f\u043b\u043e 20 000 \u043c\u0441. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 OkHttp \u0440\u0430\u0432\u043d\u044b <code>callTimeout<\/code>, \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0430\u0441 \u043f\u043e\u0432\u0435\u0440\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e (\u0443 Xray 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u043e\u0442\u0438\u0432 20, \u0443 Tor 90 \u043f\u0440\u043e\u0442\u0438\u0432 60, \u0443 \u043f\u0440\u044f\u043c\u043e\u0433\u043e 25 \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u0432\u0443\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u043f\u043e 10), \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u00ab\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e\u00bb \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>\u0423\u0440\u043e\u043a \u043f\u0440\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e: ADR-020 \u0434\u043e\u043b\u0433\u043e \u043e\u0431\u0435\u0449\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 5 \u0441\u0435\u043a\u0443\u043d\u0434. \u0412 \u043a\u043e\u0434\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 <code>PROBE_TIMEOUT_MS = 5000<\/code> \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0443\u0442\u044c \u0434\u0430\u0432\u043d\u043e \u0436\u0438\u043b \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u044b\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f, \u044f \u0432\u0435\u0440\u044e \u043a\u043e\u0434\u0443 \u0438 \u043f\u0440\u0430\u0432\u043b\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u2014 \u0434\u043b\u044f ADR-020 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439.<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043c\u0435\u043d\u044b. \u0418\u0441\u0442\u0451\u043a\u0448\u0438\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0442\u043a\u0430\u0437 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0438\u0434\u0451\u0442 \u0434\u0430\u043b\u044c\u0448\u0435. \u041e\u0442\u043c\u0435\u043d\u0430 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0440\u0435\u0436\u0438\u043c\u0430, \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434 \u0446\u0435\u043b\u0438\u043a\u043e\u043c\u00bb. <code>TimeoutCancellationException<\/code> \u0432 Kotlin \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 <code>CancellationException<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>catch<\/code> \u0434\u043b\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043e\u0431\u044f\u0437\u0430\u043d \u0441\u0442\u043e\u044f\u0442\u044c \u0432\u044b\u0448\u0435 <code>catch<\/code> \u0434\u043b\u044f \u043e\u0442\u043c\u0435\u043d\u044b, \u0438\u043d\u0430\u0447\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043e\u0431\u0440\u044b\u0432\u0430\u043b \u0431\u044b \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443.<\/p>\n<h3>\u041f\u0430\u043c\u044f\u0442\u044c \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438 \u043a\u043e\u0433\u0434\u0430. \u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 24 \u0447\u0430\u0441\u0430 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0430 \u043b\u044e\u0431\u043e\u0439 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0438 \u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0435\u0433\u043e \u043f\u0435\u0440\u0432\u044b\u043c. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043b\u043e\u0432\u0443\u0448\u043a\u0430. \u041d\u0430 Wi-Fi \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u0431\u043e\u0439, \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0443\u0442\u044c \u0438 Xray \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442, \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 Tor, \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f Tor. \u0421\u0435\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0440\u043e\u0431\u0443\u0435\u0442\u0441\u044f Tor, \u043e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442, \u0430 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0443\u0442\u044c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u0418 \u0442\u0430\u043a \u043f\u043e \u043a\u0440\u0443\u0433\u0443: \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 Tor \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u0442\u0430\u0432\u0438\u043b\u043e \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 24 \u0447\u0430\u0441\u0430 \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0443\u0441\u043f\u0435\u0445\u0430, \u0438 \u043b\u043e\u0432\u0443\u0448\u043a\u0430 \u043c\u043e\u0433\u043b\u0430 \u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435 \u0441\u0443\u0442\u043e\u043a. \u042f \u043f\u043e\u0439\u043c\u0430\u043b \u044d\u0442\u043e \u0432 \u0442\u0435\u0441\u0442\u0435: \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 Wi-Fi, \u0433\u0434\u0435 \u043d\u0430\u043a\u0430\u043d\u0443\u043d\u0435 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0441\u0440\u0430\u0437\u0443 \u0443\u0448\u0451\u043b \u0432 Tor.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0438:<\/p>\n<pre><code class=\"kotlin\">private fun onSuccess(kind: TransportKind, strategy: TransportStrategy) {    val primary = strategy.chain.first()    if (kind == primary) {        preferences.lastWorkingTransport = kind        preferences.lastSuccessAt = nowMs()    } else {        preferences.lastWorkingTransport = null        preferences.lastSuccessAt = null    }    preferences.transportFailureCount = 0}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><code><em>shared\/core\/transport\/src\/commonMain\/kotlin\/phantom\/core\/transport\/TransportManager.kt<\/em><\/code><em>, \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0431\u0440\u0430\u043d\u043e<\/em><\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0442\u043e\u0442, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u043d \u0440\u0435\u0436\u0438\u043c\u043e\u043c (\u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f VPN, \u043e \u043d\u0451\u043c \u043d\u0438\u0436\u0435), \u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043d\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f. \u041f\u0440\u0438 \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0439 \u0441\u043c\u0435\u043d\u0435 \u0441\u0435\u0442\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0442\u043e\u0436\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f. ADR-020 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u2014 \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u043b \u043e\u0442 \u043a\u043e\u0434\u0430, \u0438 \u0442\u0430 \u0436\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0430 \u0435\u0433\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430.<\/p>\n<h3>\u041a\u043e\u0433\u0434\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e<\/h3>\n<p>\u041f\u0440\u043e\u0445\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u043c \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0435 foreground-\u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0441\u043c\u0435\u043d\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u0438 \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0439 \u0441\u043c\u0435\u043d\u0435 \u0441\u0435\u0442\u0438. \u0417\u043d\u0430\u0447\u0438\u043c\u043e\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u0441\u043c\u0435\u043d\u0430: \u0441\u0435\u0442\u044c \u043f\u0440\u043e\u043f\u0430\u043b\u0430 \u0438\u043b\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c, Wi-Fi \u0441\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0438\u043b\u0438 \u0438\u0441\u0447\u0435\u0437 VPN, \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0444\u043b\u0430\u0433 <code>NET_CAPABILITY_VALIDATED<\/code>. \u041c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0430\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 5 \u0441\u0435\u043a\u0443\u043d\u0434. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 \u0441\u0435\u0442\u044c \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f: \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0445\u043e\u0434 \u0438\u0434\u0451\u0442 \u0441\u0440\u0430\u0437\u0443, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0441\u0442\u0440\u044f\u043b\u043e \u0431\u044b \u043d\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 VPN, \u043c\u0430\u0440\u0448\u0440\u0443\u0442 Xray \u0438\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043d\u0438 \u0440\u0430\u0437\u0443 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0434\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430. \u0422\u0440\u0430\u0444\u0438\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438 \u0442\u0430\u043a \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 VPN. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434 VPN \u0440\u0435\u0436\u0438\u043c Private \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0441 Tor. \u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0430, \u0430 \u043d\u0435 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u0443\u0441\u043f\u0435\u0445 Tor \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0421\u043c\u0435\u043d\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u2014 \u0441\u0430\u043c\u043e\u0435 \u0442\u043e\u043d\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0434\u0451\u0442 \u043e\u0434\u043d\u043e\u0439 \u043d\u0435\u043e\u0442\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 (<code>NonCancellable<\/code>): \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u044c REST-\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0437\u0430\u043a\u0440\u044b\u0442\u044c WebSocket, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0449\u0451 \u0438\u0434\u0451\u0442, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0433\u0430\u0441\u0438\u0442\u044c Xray \u0438 Tor. \u0414\u0432\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<ul>\n<li>\n<p>\u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0435 \u0434\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c. \u041f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0434\u043e\u0441\u044b\u043b\u043a\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430, \u0430 \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u043d\u0435\u0442: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u044d\u0442\u043e\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u0443\u0445\u043e\u0434\u044f\u0442 \u043d\u043e\u0432\u044b\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e\u043c\u043d\u0438\u0442 \u044d\u043f\u043e\u0445\u0443 \u0440\u0435\u0436\u0438\u043c\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0447\u0430\u043b\u0441\u044f, \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u044d\u043f\u043e\u0445\u0430 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c. \u0421\u0432\u0435\u0440\u043a\u0430 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u2014 \u043e\u0434\u043d\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f. \u0418\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u0445\u043e\u0434, \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u0439 \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435, \u043c\u043e\u0433 \u0431\u044b \u043f\u0440\u043e\u0441\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430 Ghost \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u044f\u043c\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u0433\u0430\u0441\u044f\u0442\u0441\u044f, \u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u043c.<\/p>\n<\/li>\n<\/ul>\n<h3>REST \u043a\u0430\u043a \u0437\u0430\u043f\u0430\u0441\u043d\u043e\u0439 \u043f\u0443\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438<\/h3>\n<p>\u041f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a\u0438\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c \u0434\u043e\u0439\u0442\u0438 \u0434\u043e \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0430. \u041d\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0430\u0439\u0434\u0435\u043d, \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435 WebSocket \u043f\u0440\u043e\u0448\u043b\u043e, \u0430 \u0444\u0440\u0435\u0439\u043c\u044b \u043f\u043e\u0442\u043e\u043c \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c REST \u043f\u043e\u0432\u0435\u0440\u0445 \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430: \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043e\u043f\u0440\u043e\u0441 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445. \u041a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043c\u0435\u0436\u0434\u0443 WebSocket \u0438 REST \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0420\u0435\u0436\u0438\u043c\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0441 \u0442\u0440\u0435\u043c\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p><code>WsActive<\/code> \u2014 \u0432\u0441\u0451 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 WebSocket, \u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d;<\/p>\n<\/li>\n<li>\n<p><code>RestActive<\/code> \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0438 \u043e\u043f\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 REST;<\/p>\n<\/li>\n<li>\n<p><code>WsCandidate<\/code> \u2014 \u0441\u043e\u043a\u0435\u0442 \u0435\u0441\u0442\u044c, \u043d\u043e \u0435\u0449\u0451 \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u043e\u043f\u0440\u043e\u0441 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0432 <code>RestActive<\/code> \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 <code>WsActive<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438: \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430. \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 REST \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u043f\u044f\u0442\u0438 \u0440\u0430\u0437 \u0441 \u043f\u0430\u0443\u0437\u0430\u043c\u0438 1, 3, 8, 20 \u0438 60 \u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 <code>Idempotency-Key<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0443\u0431\u043b\u0438.<\/p>\n<p>\u0414\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044e WebSocket \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0439, \u0430 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0446\u0435\u043f\u043e\u0447\u043a\u0438. \u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433 \u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434, \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f: \u043f\u0438\u0448\u0435\u0442 \u0432 \u043b\u043e\u0433, \u043a\u043e\u0433\u0434\u0430 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0431\u044b, \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 \u0448\u0443\u043c: \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0444\u043e\u043d \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u0432\u0430 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043f\u0438\u043d\u0433\u0430 \u0437\u0430 \u0441\u0435\u043c\u044c \u043c\u0438\u043d\u0443\u0442, \u0438 \u043f\u043e\u0440\u043e\u0433-\u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u00ab\u0434\u0432\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0437\u0430 \u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442\u00bb \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u0431\u044b \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0441\u0435\u0442\u0438.<\/p>\n<h3>\u0427\u0442\u043e \u0432\u0438\u0434\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c<\/h3>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0434\u043d\u043e \u0432 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0438 foreground-\u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u0422\u0435\u043a\u0441\u0442\u044b \u0438\u0437 \u0440\u0443\u0441\u0441\u043a\u043e\u0439 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0445\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 {\u043c\u0430\u0440\u0448\u0440\u0443\u0442}\u2026 \u00b7 {\u0440\u0435\u0436\u0438\u043c}<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0447\u0435\u0440\u0435\u0437 {\u043c\u0430\u0440\u0448\u0440\u0443\u0442} \u00b7 {\u0440\u0435\u0436\u0438\u043c}<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 REST<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0447\u0435\u0440\u0435\u0437 {\u043c\u0430\u0440\u0448\u0440\u0443\u0442} \u00b7 \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u00b7 {\u0440\u0435\u0436\u0438\u043c}<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">WebSocket \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0447\u0435\u0440\u0435\u0437 {\u043c\u0430\u0440\u0448\u0440\u0443\u0442} \u00b7 \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u00b7 {\u0440\u0435\u0436\u0438\u043c}<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u043e\u0442\u043a\u0430\u0437\u0430\u043b\u043e \u0432\u0441\u0451<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u043e\u043c (\u043f\u043e\u043f\u044b\u0442\u043e\u043a: N) \u00b7 {\u0440\u0435\u0436\u0438\u043c}<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u043b\u044f Tor \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0449\u0451 \u0441\u0442\u0430\u0434\u0438\u044e \u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0430 \u043f\u0440\u0438 \u0435\u0433\u043e \u043e\u0442\u043a\u0430\u0437\u0435 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u0438<\/h3>\n<p>Xray-core \u0438 \u0435\u0433\u043e TLS-\u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0434 MPL-2.0, libXray \u2014 \u043f\u043e\u0434 MIT, SHIFROM \u2014 \u043f\u043e\u0434 AGPL-3.0-or-later. MPL \u2014 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043a\u043e\u043f\u0438\u043b\u0435\u0444\u0442: MPL-\u0444\u0430\u0439\u043b\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 MPL, \u0430 \u0440\u0430\u0431\u043e\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d\u0438 \u0432\u0445\u043e\u0434\u044f\u0442, \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u043e\u0439 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0437\u044f\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 MPL-\u0447\u0430\u0441\u0442\u0438.<\/p>\n<p>\u0412 \u043f\u043e\u043b\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 MPL-2.0 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Exhibit B \u2014 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u00ab\u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e \u0441\u043e \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u043c\u0438 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\u043c\u0438\u00bb. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0440\u0430\u0437 \u043e\u043d\u0430 \u0435\u0441\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 LICENSE, \u0442\u043e \u0441 GPL-\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e\u043c Xray \u043d\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a: \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0430\u0432\u0442\u043e\u0440 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u043b \u0435\u0451 \u043a \u0441\u0432\u043e\u0438\u043c \u0444\u0430\u0439\u043b\u0430\u043c, \u0430 \u0432 \u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Xray-core, \u0447\u0442\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0435\u0451 \u043d\u0435\u0442 \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u041e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u044f\u043c\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 <a href=\"https:\/\/www.mozilla.org\/en-US\/MPL\/2.0\/FAQ\/\" rel=\"noopener nofollow\">FAQ Mozilla \u043f\u043e MPL 2.0<\/a> (\u0432\u043e\u043f\u0440\u043e\u0441 25), \u0430 AGPL-3.0 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0445 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0439 \u0441\u0430\u043c\u043e\u0439 MPL.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 Xray, \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0435\u0449\u0451 \u0442\u0440\u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0430 Go-\u043c\u043e\u0434\u0443\u043b\u0435\u0439: MIT, BSD, Apache-2.0, \u0434\u0432\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e\u0434 GPL-3.0-or-later \u0438 \u043e\u0434\u0438\u043d \u043f\u043e\u0434 LGPL-3.0 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438. \u0422\u043e\u0447\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u044f \u0432\u0437\u044f\u043b \u0438\u0437 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u2014 Go \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0442\u0443\u0434\u0430 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435, \u0438 <code>go version -m <\/code><a href=\"http:\/\/libgojni.so\" rel=\"noopener nofollow\"><code>libgojni.so<\/code><\/a> \u0438\u0445 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442. \u0422\u0435\u043a\u0441\u0442\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0439 \u0432\u0441\u0435\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0432 <code>third_party\/libxray\/<\/code>.<\/p>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0443 \u043c\u0435\u043d\u044f \u043a\u043e\u043d\u0441\u0435\u0440\u0432\u0430\u0442\u0438\u0432\u043d\u0430\u044f: \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 Xray \u044f \u043d\u0435 \u043c\u0435\u043d\u044f\u044e, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0433\u043e upstream. \u042d\u0442\u043e \u043c\u043e\u0451 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0430 \u043d\u0435 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435: \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0439 \u044f \u043d\u0430\u043c\u0435\u0442\u0438\u043b \u0434\u043e Beta.<\/p>\n<p>JNI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 workflow \u0432 GitHub Actions, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e: \u0442\u0443\u043b\u0447\u0435\u0439\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0430 libXray \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e.<\/p>\n<ul>\n<li>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442 XTLS\/libXray \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435 (\u0432\u0435\u0442\u043a\u0430, \u0442\u0435\u0433 \u0438\u043b\u0438 SHA) \u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0445\u0435\u0448 \u043a\u043e\u043c\u043c\u0438\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u0440\u0451\u0442 \u0432\u0435\u0440\u0441\u0438\u044e Go \u0438\u0437 <code>go.mod<\/code> \u0441\u0430\u043c\u043e\u0433\u043e libXray.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0430\u0432\u0438\u0442 NDK r27c: libXray \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043b\u0438\u043d\u043a\u0435\u0440\u0443 <code>max-page-size=16384<\/code>, \u0430 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 NDK r26 \u0438\u043b\u0438 \u043d\u043e\u0432\u0435\u0435 \u0438 \u0434\u0430\u0451\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u0434 16-\u041a\u0411 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 Play Console \u0434\u043b\u044f Android 15+.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0434\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u0432 <code>.aar<\/code> \u043d\u0435\u0442 <code>.so<\/code> \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 ABI: \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u0434\u0430\u043b \u0431\u044b <code>UnsatisfiedLinkError<\/code> \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 <code>.aar<\/code> \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u043c, \u0430 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e \u0435\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 SHA.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041a\u0430\u043a \u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u043f\u043e\u043b\u0435\u0432\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<\/h3>\n<p>\u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043b\u0435\u0436\u0438\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432. \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435: \u0435\u0441\u043b\u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043d\u0438 \u0432 README. \u041e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0433\u043e\u043d. \u0412 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445 \u0434\u0430\u0442\u0430, \u043a\u043e\u043c\u043c\u0438\u0442, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0432\u0435\u0440\u0441\u0438\u044f Android, \u0441\u0435\u0442\u044c, \u0442\u0438\u043f \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 VPN, \u043c\u0430\u0440\u0448\u0440\u0443\u0442, \u0442\u0435\u0441\u0442, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u0435\u0441\u0442\u0430, \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u0441\u0442\u043e\u0438\u0442 <code>not recorded<\/code>, \u0430 \u043d\u0435 \u0440\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f: \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0434\u043e\u0433\u0430\u0434\u043a\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0445\u0443\u0436\u0435 \u0447\u0435\u0441\u0442\u043d\u043e\u0439 \u0434\u044b\u0440\u044b. \u041f\u0440\u043e\u0432\u0430\u043b\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u0443\u0441\u043f\u0435\u0445\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u043e\u043d, \u0433\u0434\u0435 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f WebSocket \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u044b \u0442\u0435\u0440\u044f\u043b\u0438\u0441\u044c.<\/p>\n<p>\u0412\u0441\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b \u0434\u0435\u043b\u0430\u043b \u044f \u0441\u0430\u043c: \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u044b\u0439 Android-\u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u0438\u043d\u043e\u0433\u0434\u0430 \u0432 \u043f\u0430\u0440\u0435 \u0441 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c. \u042d\u0442\u043e \u043d\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a. \u041e\u0434\u0438\u043d \u043f\u0440\u043e\u0433\u043e\u043d \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0442\u043e\u0442 \u0440\u0430\u0437, \u0438 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u041f\u0440\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442 Xray \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430: \u043f\u0440\u0438\u0451\u043c\u043e\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d, \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e \u043a\u043e\u043d\u0446\u0430, PASS, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u0430 \u043d\u0435\u0442. \u0412 ADR-019 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0433\u043e\u043d \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u00abproduction-validated\u00bb. \u041f\u043e\u0437\u0436\u0435 \u044f \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u0440\u044f\u043c\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435: \u044d\u0442\u043e \u0431\u044b\u043b \u043f\u0440\u0438\u0451\u043c\u043e\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0438 \u0432 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c, \u0430 \u043d\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u0438 \u043d\u0435 \u0432\u0441\u0435\u043e\u0431\u0449\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u0436\u043d\u0438\u043c, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043a\u0430.<\/p>\n<p>\u0427\u0435\u0433\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0441\u0430\u043c\u0430:<\/p>\n<ul>\n<li>\n<p>\u043e\u0434\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0432\u0435\u0440\u0441\u0438\u044f Android \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0438\u0433\u0434\u0435, \u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0430 \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u043b\u0430\u0441\u044c, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 Xray \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0433\u043e\u043d \u0431\u0435\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u0430, \u0430 WebSocket \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u043d\u043e \u0432 \u043f\u043e\u043b\u0435 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0438 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0451\u043b \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u0442\u044c \u0438 \u043f\u043b\u0430\u043d \u0438\u0437 \u0432\u043e\u0441\u044c\u043c\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438: \u0441\u043c\u0435\u043d\u0430 \u0441\u0435\u0442\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430, \u0441\u043c\u0435\u043d\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, Ghost \u0431\u0435\u0437 Tor, \u043e\u0442\u043a\u0430\u0437 \u0432\u0441\u0435\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u041f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u043f\u043e \u043d\u0435\u043c\u0443 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430 \u043d\u0435\u0433\u043e \u043d\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0441\u044c.<\/p>\n<h3>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435<\/h3>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 Xray, \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 Android, \u043f\u0440\u0438\u0447\u0451\u043c \u0441 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439, \u0437\u0430\u043c\u0435\u0440\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u0441\u0431\u043e\u0440\u043a\u0430 \u044f\u0434\u0440\u0430 \u043f\u043e\u0434 iOS. \u0414\u0430\u0442 \u0443 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0442.<\/p>\n<hr\/>\n<p>\u041a\u043e\u0434, ADR \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u2014 \u043d\u0430 <a href=\"http:\/\/github.com\/LiudvigVladislav\/SHIFROM\" rel=\"noopener nofollow\">github.com\/LiudvigVladislav\/SHIFROM<\/a>, \u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u2014 \u043d\u0430 <a href=\"http:\/\/shifrom.com\" rel=\"noopener nofollow\">shifrom.com<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1107152\/\">https:\/\/habr.com\/ru\/articles\/1107152\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u042f \u0434\u0435\u043b\u0430\u044e SHIFROM \u2014 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u0441\u043a\u0432\u043e\u0437\u043d\u044b\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Kotlin Multiplatform, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440-\u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u0440\u043e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u0430 \u043f\u0440\u043e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u043f\u0440\u043e\u0449\u0435 \u043d\u0430 \u0432\u0438\u0434: \u043a\u0430\u043a \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0432\u044f\u0437\u044c \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0435\u0441\u043b\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0435. \u041f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 Alpha 2, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 \u043d\u0435\u0442; \u043d\u0430 GitHub \u043b\u0435\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f APK \u043e\u0442 Alpha 1. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f (X3DH, Double Ratchet \u0438 Sealed Sender \u043f\u043e\u0432\u0435\u0440\u0445 libsodium) \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u0430\u0443\u0434\u0438\u0442. \u041f\u0435\u0440\u0432\u044b\u043c \u0438\u0434\u0451\u0442 Android; \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043b\u044f iOS \u0438 \u0432\u0435\u0431\u0430 \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e, \u043d\u043e \u0441\u0440\u043e\u043a\u043e\u0432 \u043d\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e. \u0412\u0441\u0451 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b, \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e.\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0438 \u0440\u0435\u0436\u0438\u043c\u044b\u0423 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u0434\u0438\u043d \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u043e\u0439\u0442\u0438 \u0434\u043e \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0430:\u043f\u0440\u044f\u043c\u043e\u0439 WebSocket \u043f\u043e\u0432\u0435\u0440\u0445 TLS \u2014 \u0441\u0430\u043c\u044b\u0439 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u043f\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0435 \u0438 \u0431\u0430\u0442\u0430\u0440\u0435\u0435;WebSocket \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 Xray-core;WebSocket \u0447\u0435\u0440\u0435\u0437 onion-\u0441\u0435\u0440\u0432\u0438\u0441 Tor \u2014 \u0441\u0430\u043c\u044b\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0430.Xray \u0438 Tor \u0437\u0434\u0435\u0441\u044c \u2014 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0439, \u0433\u0434\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0438\u043b\u0438 \u043e\u0431\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 REST, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442, \u043e \u043d\u0435\u0439 \u043d\u0438\u0436\u0435.\u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442. \u041e\u043d \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438, \u0430 \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u0434\u0430\u0451\u0442 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443:\u0420\u0435\u0436\u0438\u043c\u0426\u0435\u043f\u043e\u0447\u043a\u0430\u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u043e \u0432\u0441\u0451Standard (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)\u043f\u0440\u044f\u043c\u043e\u0439 \u2192 Xray \u2192 Tor\u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0438PrivateXray \u2192 Tor\u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0438Ghost\u0442\u043e\u043b\u044c\u043a\u043e Tor\u043e\u0448\u0438\u0431\u043a\u0430, \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442Ghost \u043d\u0435 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430: \u0435\u0441\u043b\u0438 Tor \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u0430 \u043d\u0435 \u0442\u0438\u0445\u043e \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438.Go \u0432\u043d\u0443\u0442\u0440\u0438 Kotlin-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430Xray-core \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Go. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0442\u043e\u0440\u043e\u0435: libXray \u2014 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Xray, \u043a\u043e\u0442\u043e\u0440\u0443\u044e gomobile \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432 JNI-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 libgojni.so \u0441 \u0442\u043e\u043d\u043a\u0438\u043c Java-\u0441\u043b\u043e\u0435\u043c. \u041d\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043d\u0438 \u043c\u0435\u0436\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043d\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430.\u041f\u0440\u0438\u0447\u0438\u043d \u0442\u0440\u0438.\u041e\u0434\u0438\u043d \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u2014 \u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0437\u0430 \u0436\u0438\u0437\u043d\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c: \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0443\u043f\u0430\u043b \u0438\u043b\u0438 \u0431\u044b\u043b \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u0442\u044c \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044f\u0434\u0440\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e.Foreground-\u0441\u0435\u0440\u0432\u0438\u0441. \u0423 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c foreground-\u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0436\u0438\u0432\u044b\u043c. Xray \u0436\u0438\u0432\u0451\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e, \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0421 Android 10 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0432\u0438\u0434\u043e\u043c .so \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0437 nativeLibraryDir. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 System.loadLibrary, \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0445\u0438\u0449\u0440\u0435\u043d\u0438\u0439.\u0426\u0435\u043d\u0430 \u2014 \u0440\u0430\u0437\u043c\u0435\u0440. \u041e\u0434\u043d\u0430 libgojni.so \u0432\u0435\u0441\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 45 \u041c\u0411, \u0430 ABI \u0447\u0435\u0442\u044b\u0440\u0435: arm64-v8a, armeabi-v7a, x86 \u0438 x86_64. \u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043e\u043d\u0438 \u043b\u0435\u0436\u0430\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438, jar \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438 .so \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u043d\u0435 \u043e\u0434\u043d\u0438\u043c .aar. Android Gradle Plugin \u043d\u0435 \u0434\u0430\u0451\u0442 \u0432\u043b\u043e\u0436\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 .aar \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 AAR (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 hasLocalAarDeps), \u0430 \u043c\u043e\u0434\u0443\u043b\u044c :shared:core:xray \u0441\u0430\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 AAR.\u0421\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b Kotlin Multiplatform \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 expect\/actual. \u0412 commonMain \u043b\u0435\u0436\u0430\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 XrayService \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, androidMain \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 libXray, \u0430 jvmMain \u2014 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 Off, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u0435\u0437 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043b\u044f iOS \u043d\u0443\u0436\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 gomobile, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 macOS. \u0415\u0451 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442.\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 SOCKS5 \u0438 \u043f\u043e\u0440\u0442 10808\u042f\u0434\u0440\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 SOCKS5-\u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u043d\u0430 127.0.0.1, \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (OkHttp \u043f\u043e\u0434 Ktor) \u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043a\u0430\u043a \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438. \u041f\u0430\u0440\u043e\u043b\u044f \u0443 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0442: \u043e\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0435\u0442\u043b\u0435\u0432\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043b\u0443\u0448\u0430\u043b\u0430 \u043f\u043e\u0440\u0442 10808, \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u0434\u043b\u044f Xray-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0432\u0435\u0436\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u0434\u0430\u043b\u0430 \u0441 bind: address already in use: \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0443\u0436\u0435 \u0434\u0435\u0440\u0436\u0430\u043b\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c SOCKS-\u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0435\u043c.\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0440\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u041e\u0421. \u042f \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e ServerSocket \u043a 127.0.0.1 \u0441 \u043f\u043e\u0440\u0442\u043e\u043c 0, \u0447\u0438\u0442\u0430\u044e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e \u0441\u043e\u043a\u0435\u0442 \u0438 \u043e\u0442\u0434\u0430\u044e \u043d\u043e\u043c\u0435\u0440 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 Xray. \u041c\u0435\u0436\u0434\u0443 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u0435\u0441\u0442\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0433\u043e\u043d\u043a\u0438. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0430\u043a \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0440\u0442 \u0437\u0430\u043d\u043e\u0432\u043e. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u043e\u043c\u0435\u0440 \u0435\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Ready, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443.\u0412\u0442\u043e\u0440\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430: libXray \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0443\u0441\u043f\u0435\u0445, \u0445\u043e\u0442\u044f \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u0440\u0451\u0441\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430:if (!LibXray.getXrayState()) {    error(&#171;runXrayFromJSON returned success but getXrayState() is false (port collision?)&#187;)}shared\/core\/xray\/src\/androidMain\/kotlin\/phantom\/core\/xray\/XrayServiceFactory.android.kt\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0423 \u044f\u0434\u0440\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f:sealed class XrayState {    data object Off : XrayState()    data object Starting : XrayState()    data class Ready(val socksPort: Int) : XrayState()    data class Failed(val message: String) : XrayState()}shared\/core\/xray\/src\/commonMain\/kotlin\/phantom\/core\/xray\/XrayState.kt, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0443\u0431\u0440\u0430\u043d\u044b\u041d\u0430\u0440\u0443\u0436\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a StateFlow. start() \u0438 stop() \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u044b \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c: libXray \u043d\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443, \u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u044f\u0434\u0440\u0430 \u0432\u0435\u0440\u043d\u0443\u043b \u0431\u044b \u043e\u0448\u0438\u0431\u043a\u0443 \u0438 \u0441\u043b\u043e\u043c\u0430\u043b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 Failed. \u041f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430, \u043a\u0430\u043a \u0443 Tor, \u043d\u0435\u0442: runXrayFromJSON \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u0434\u043d\u044f\u0442\u044b \u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0435 \u0443\u0434\u0430\u043b\u0441\u044f.\u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0438 \u0442\u0451\u043f\u043b\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e. \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, DNS \u0438 \u043f\u0435\u0440\u0432\u043e\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u0435, \u043d\u0430 \u043c\u043e\u0451\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u0434\u043e 30 \u0441\u0435\u043a\u0443\u043d\u0434. \u0422\u0451\u043f\u043b\u044b\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u042d\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0438\u0437 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.\u042d\u0442\u0438 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0447\u0443\u0442\u044c \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u0438 \u043c\u043d\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430. \u0427\u0435\u0440\u043d\u043e\u0432\u0438\u043a \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0434\u0430\u0432\u0430\u043b \u043e\u0434\u0438\u043d \u0431\u044e\u0434\u0436\u0435\u0442 \u0432 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u043c\u0435\u0441\u0442\u0435, \u0438 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043e\u0431\u0440\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u044b \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u044f\u0434\u0440\u043e \u043f\u0440\u043e\u0441\u043d\u0451\u0442\u0441\u044f. \u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0441\u043f\u043b\u044b\u043b\u0430 \u043d\u0430 \u0440\u0435\u0432\u044c\u044e \u0434\u043e \u0441\u043b\u0438\u044f\u043d\u0438\u044f, \u0438 \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u0431\u044e\u0434\u0436\u0435\u0442 \u043d\u0430 \u0434\u0432\u0430.\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432: \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044cTransportManager \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0442\u0430\u043a:\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430. \u0414\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e.\u0414\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f Ready \u0438 \u043f\u043e\u0440\u0442\u0430 SOCKS \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a.\u0427\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c GET \/health \u043a \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440\u0443. \u041e\u0442\u0432\u0435\u0442 200 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442.\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0445\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 (\u0438 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u2014 \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435).\u041f\u0440\u0438 \u043e\u0442\u043a\u0430\u0437\u0435 \u043f\u043e\u0433\u0430\u0441\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443.\u0415\u0441\u043b\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c, \u0431\u0440\u043e\u0441\u0438\u0442\u044c NoTransportReachableException \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u043e\u043f\u044b\u0442\u043e\u043a.\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0432\u043e\u0439 OkHttp-\u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u043b\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c WebSocket. \/health \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0431\u0435\u0437 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0435\u0451 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c.\u0411\u044e\u0434\u0436\u0435\u0442\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043a\u0438\u0435:\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0417\u0430\u043f\u0443\u0441\u043a\u0422\u0430\u0439\u043c\u0430\u0443\u0442 HTTP-\u0432\u044b\u0437\u043e\u0432\u0430\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\u041f\u0440\u044f\u043c\u043e\u0439\u201410 \u0441, \u0434\u0432\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441 \u043f\u0430\u0443\u0437\u043e\u0439 400 \u043c\u044125 \u0441Xray30 \u044120 \u044130 \u0441Tor\u043c\u0438\u043d\u0443\u0442\u044b60 \u044190 \u0441\u042d\u0442\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u043e\u0432, \u0430 \u043d\u0435 \u043e\u0431\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043b\u043e\u043a. \u0414\u043b\u044f Xray 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 Ready \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0441\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0434\u0451\u0442 \u0434\u043e \u043d\u0438\u0445. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443 \u0442\u043e\u0436\u0435 \u0438\u0434\u0451\u0442 \u0441\u0432\u0435\u0440\u0445 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u0432.\u041d\u0430 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044f \u0434\u0432\u0430\u0436\u0434\u044b \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u0434\u043d\u044f\u043b \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u043b\u044f Xray \u0434\u043e 20 \u0441\u0435\u043a\u0443\u043d\u0434, \u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 withTimeout \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f 10-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u043c, \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043a\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u043b\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u043d\u044c\u0448\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u043b \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b. \u041f\u043e\u0442\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0443 OkHttp \u043a\u0440\u043e\u043c\u0435 callTimeout \u0435\u0441\u0442\u044c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b \u043d\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e 10 \u0441\u0435\u043a\u0443\u043d\u0434. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0430\u0434\u0430\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 10,07 \u0441 \u0441 SocketTimeoutException, \u0445\u043e\u0442\u044f \u0432 \u043b\u043e\u0433\u0435 \u0441\u0442\u043e\u044f\u043b\u043e 20 000 \u043c\u0441. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 OkHttp \u0440\u0430\u0432\u043d\u044b callTimeout, \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0430\u0441 \u043f\u043e\u0432\u0435\u0440\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e (\u0443 Xray 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u043e\u0442\u0438\u0432 20, \u0443 Tor 90 \u043f\u0440\u043e\u0442\u0438\u0432 60, \u0443 \u043f\u0440\u044f\u043c\u043e\u0433\u043e 25 \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u0432\u0443\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u043f\u043e 10), \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u00ab\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e\u00bb \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043a\u043e\u0434\u0435.\u0423\u0440\u043e\u043a \u043f\u0440\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e: ADR-020 \u0434\u043e\u043b\u0433\u043e \u043e\u0431\u0435\u0449\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 5 \u0441\u0435\u043a\u0443\u043d\u0434. \u0412 \u043a\u043e\u0434\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 PROBE_TIMEOUT_MS = 5000 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0443\u0442\u044c \u0434\u0430\u0432\u043d\u043e \u0436\u0438\u043b \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u044b\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f, \u044f \u0432\u0435\u0440\u044e \u043a\u043e\u0434\u0443 \u0438 \u043f\u0440\u0430\u0432\u043b\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u2014 \u0434\u043b\u044f ADR-020 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439.\u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043c\u0435\u043d\u044b. \u0418\u0441\u0442\u0451\u043a\u0448\u0438\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0442\u043a\u0430\u0437 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0438\u0434\u0451\u0442 \u0434\u0430\u043b\u044c\u0448\u0435. \u041e\u0442\u043c\u0435\u043d\u0430 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0440\u0435\u0436\u0438\u043c\u0430, \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434 \u0446\u0435\u043b\u0438\u043a\u043e\u043c\u00bb. TimeoutCancellationException \u0432 Kotlin \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 CancellationException, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 catch \u0434\u043b\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043e\u0431\u044f\u0437\u0430\u043d \u0441\u0442\u043e\u044f\u0442\u044c \u0432\u044b\u0448\u0435 catch \u0434\u043b\u044f \u043e\u0442\u043c\u0435\u043d\u044b, \u0438\u043d\u0430\u0447\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043e\u0431\u0440\u044b\u0432\u0430\u043b \u0431\u044b \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443.\u041f\u0430\u043c\u044f\u0442\u044c \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438 \u043a\u043e\u0433\u0434\u0430. \u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 24 \u0447\u0430\u0441\u0430 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u0438.\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0430 \u043b\u044e\u0431\u043e\u0439 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0438 \u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0435\u0433\u043e \u043f\u0435\u0440\u0432\u044b\u043c. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043b\u043e\u0432\u0443\u0448\u043a\u0430. \u041d\u0430 Wi-Fi \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u0431\u043e\u0439, \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0443\u0442\u044c \u0438 Xray \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442, \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 Tor, \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f Tor. \u0421\u0435\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0440\u043e\u0431\u0443\u0435\u0442\u0441\u044f Tor, \u043e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442, \u0430 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0443\u0442\u044c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u0418 \u0442\u0430\u043a \u043f\u043e \u043a\u0440\u0443\u0433\u0443: \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 Tor \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u0442\u0430\u0432\u0438\u043b\u043e \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 24 \u0447\u0430\u0441\u0430 \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0443\u0441\u043f\u0435\u0445\u0430, \u0438 \u043b\u043e\u0432\u0443\u0448\u043a\u0430 \u043c\u043e\u0433\u043b\u0430 \u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435 \u0441\u0443\u0442\u043e\u043a. \u042f \u043f\u043e\u0439\u043c\u0430\u043b \u044d\u0442\u043e \u0432 \u0442\u0435\u0441\u0442\u0435: \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 Wi-Fi, \u0433\u0434\u0435 \u043d\u0430\u043a\u0430\u043d\u0443\u043d\u0435 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0441\u0440\u0430\u0437\u0443 \u0443\u0448\u0451\u043b \u0432 Tor.\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0438:private fun onSuccess(kind: TransportKind, strategy: TransportStrategy) {    val primary = strategy.chain.first()    if (kind == primary) {        preferences.lastWorkingTransport = kind        preferences.lastSuccessAt = nowMs()    } else {        preferences.lastWorkingTransport = null        preferences.lastSuccessAt = null    }    preferences.transportFailureCount = 0}shared\/core\/transport\/src\/commonMain\/kotlin\/phantom\/core\/transport\/TransportManager.kt, \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0431\u0440\u0430\u043d\u043e\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0442\u043e\u0442, \u0447\u0442\u043e \u0437\u0430\u0434\u0430\u043d \u0440\u0435\u0436\u0438\u043c\u043e\u043c (\u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f VPN, \u043e \u043d\u0451\u043c \u043d\u0438\u0436\u0435), \u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043d\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f. \u041f\u0440\u0438 \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0439 \u0441\u043c\u0435\u043d\u0435 \u0441\u0435\u0442\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0442\u043e\u0436\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f. ADR-020 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u2014 \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0435&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-502943","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/502943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=502943"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/502943\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=502943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=502943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=502943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}