From c0e1e45b72e55d598a117b972f1b575bdd5d2d12 Mon Sep 17 00:00:00 2001
From: kr328 <kr328app@outlook.com>
Date: Sun, 12 Sep 2021 00:39:59 +0800
Subject: [PATCH] Refactor: refactor clash core building

---
 .gitignore                                    |   4 +
 .gitmodules                                   |   4 +-
 core/build.gradle.kts                         |   7 +-
 .../golang/core/foss => foss/golang/clash}    |   0
 core/src/foss/golang/go.mod                   |  34 ++++++
 core/src/foss/golang/go.sum                   | 114 ++++++++++++++++++
 core/src/foss/golang/main.go                  |   5 +
 core/src/main/golang/go.mod                   |  30 -----
 core/src/main/golang/go.sum                   | 114 ------------------
 core/src/main/golang/native/all/imports.go    |  15 +++
 core/src/main/golang/{ => native}/app.go      |   3 +-
 core/src/main/golang/{ => native}/app/app.go  |   0
 .../main/golang/{ => native}/app/content.go   |   0
 core/src/main/golang/{ => native}/app/dns.go  |   0
 core/src/main/golang/{ => native}/app/tun.go  |   3 +-
 core/src/main/golang/{ => native}/app/ui.go   |   0
 core/src/main/golang/{ => native}/bridge.c    |   0
 core/src/main/golang/{ => native}/bridge.h    |   0
 .../main/golang/{ => native}/common/path.go   |   0
 core/src/main/golang/{ => native}/config.go   |   2 +-
 .../golang/{ => native}/config/defaults.go    |   0
 .../main/golang/{ => native}/config/fetch.go  |   7 +-
 .../main/golang/{ => native}/config/load.go   |   3 +-
 .../golang/{ => native}/config/override.go    |   0
 .../golang/{ => native}/config/process.go     |   4 +-
 .../{ => native}/config/provider_open.go      |   0
 .../{ => native}/config/provider_premium.go   |   0
 core/src/main/golang/{ => native}/debug.go    |   0
 .../main/golang/{ => native}/delegate/init.go |  15 ++-
 core/src/main/golang/{ => native}/log.go      |   0
 core/src/main/golang/{ => native}/main.go     |   6 +-
 .../golang/{ => native}/platform/limit.go     |   0
 .../golang/{ => native}/platform/procfs.go    |   0
 core/src/main/golang/{ => native}/proxy.go    |   4 +-
 .../main/golang/{ => native}/proxy/http.go    |   0
 core/src/main/golang/{ => native}/trace.c     |   0
 core/src/main/golang/{ => native}/trace.h     |   0
 core/src/main/golang/{ => native}/tun.go      |   6 +-
 core/src/main/golang/{ => native}/tun/dns.go  |   0
 core/src/main/golang/{ => native}/tun/link.go |   0
 core/src/main/golang/{ => native}/tun/tcp.go  |   0
 core/src/main/golang/{ => native}/tun/tun.go  |   0
 core/src/main/golang/{ => native}/tun/udp.go  |   0
 core/src/main/golang/{ => native}/tunnel.go   |   4 +-
 .../main/golang/{ => native}/tunnel/conn.go   |   0
 .../{ => native}/tunnel/connectivity.go       |   0
 .../main/golang/{ => native}/tunnel/geoip.go  |   0
 .../golang/{ => native}/tunnel/providers.go   |   0
 .../{ => native}/tunnel/providers_premium.go  |   0
 .../golang/{ => native}/tunnel/proxies.go     |   3 +-
 .../main/golang/{ => native}/tunnel/state.go  |   0
 .../golang/{ => native}/tunnel/statistic.go   |   0
 .../golang/{ => native}/tunnel/suspend.go     |   0
 core/src/main/golang/{ => native}/utils.go    |   0
 .../core/premium => premium/golang/clash}     |   0
 core/src/premium/golang/go.mod                |  34 ++++++
 core/src/premium/golang/go.sum                | 114 ++++++++++++++++++
 core/src/premium/golang/main.go               |   3 +
 settings.gradle.kts                           |   2 +-
 59 files changed, 360 insertions(+), 180 deletions(-)
 rename core/src/{main/golang/core/foss => foss/golang/clash} (100%)
 create mode 100644 core/src/foss/golang/go.mod
 create mode 100644 core/src/foss/golang/go.sum
 create mode 100644 core/src/foss/golang/main.go
 create mode 100644 core/src/main/golang/native/all/imports.go
 rename core/src/main/golang/{ => native}/app.go (97%)
 rename core/src/main/golang/{ => native}/app/app.go (100%)
 rename core/src/main/golang/{ => native}/app/content.go (100%)
 rename core/src/main/golang/{ => native}/app/dns.go (100%)
 rename core/src/main/golang/{ => native}/app/tun.go (97%)
 rename core/src/main/golang/{ => native}/app/ui.go (100%)
 rename core/src/main/golang/{ => native}/bridge.c (100%)
 rename core/src/main/golang/{ => native}/bridge.h (100%)
 rename core/src/main/golang/{ => native}/common/path.go (100%)
 rename core/src/main/golang/{ => native}/config.go (98%)
 rename core/src/main/golang/{ => native}/config/defaults.go (100%)
 rename core/src/main/golang/{ => native}/config/fetch.go (95%)
 rename core/src/main/golang/{ => native}/config/load.go (99%)
 rename core/src/main/golang/{ => native}/config/override.go (100%)
 rename core/src/main/golang/{ => native}/config/process.go (99%)
 rename core/src/main/golang/{ => native}/config/provider_open.go (100%)
 rename core/src/main/golang/{ => native}/config/provider_premium.go (100%)
 rename core/src/main/golang/{ => native}/debug.go (100%)
 rename core/src/main/golang/{ => native}/delegate/init.go (79%)
 rename core/src/main/golang/{ => native}/log.go (100%)
 rename core/src/main/golang/{ => native}/main.go (89%)
 rename core/src/main/golang/{ => native}/platform/limit.go (100%)
 rename core/src/main/golang/{ => native}/platform/procfs.go (100%)
 rename core/src/main/golang/{ => native}/proxy.go (90%)
 rename core/src/main/golang/{ => native}/proxy/http.go (100%)
 rename core/src/main/golang/{ => native}/trace.c (100%)
 rename core/src/main/golang/{ => native}/trace.h (100%)
 rename core/src/main/golang/{ => native}/tun.go (97%)
 rename core/src/main/golang/{ => native}/tun/dns.go (100%)
 rename core/src/main/golang/{ => native}/tun/link.go (100%)
 rename core/src/main/golang/{ => native}/tun/tcp.go (100%)
 rename core/src/main/golang/{ => native}/tun/tun.go (100%)
 rename core/src/main/golang/{ => native}/tun/udp.go (100%)
 rename core/src/main/golang/{ => native}/tunnel.go (98%)
 rename core/src/main/golang/{ => native}/tunnel/conn.go (100%)
 rename core/src/main/golang/{ => native}/tunnel/connectivity.go (100%)
 rename core/src/main/golang/{ => native}/tunnel/geoip.go (100%)
 rename core/src/main/golang/{ => native}/tunnel/providers.go (100%)
 rename core/src/main/golang/{ => native}/tunnel/providers_premium.go (100%)
 rename core/src/main/golang/{ => native}/tunnel/proxies.go (99%)
 rename core/src/main/golang/{ => native}/tunnel/state.go (100%)
 rename core/src/main/golang/{ => native}/tunnel/statistic.go (100%)
 rename core/src/main/golang/{ => native}/tunnel/suspend.go (100%)
 rename core/src/main/golang/{ => native}/utils.go (100%)
 rename core/src/{main/golang/core/premium => premium/golang/clash} (100%)
 create mode 100644 core/src/premium/golang/go.mod
 create mode 100644 core/src/premium/golang/go.sum
 create mode 100644 core/src/premium/golang/main.go

diff --git a/.gitignore b/.gitignore
index d229b98d..982d8135 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,10 @@ gradle-app.setting
 !/.idea/codeStyles
 /core/src/main/golang/.idea/*
 !/core/src/main/golang/.idea/codeStyles
+/core/src/foss/golang/.idea/*
+!/core/src/foss/golang/.idea/codeStyles
+/core/src/premium/golang/.idea/*
+!/core/src/premium/golang/.idea/codeStyles
 
 # KeyStore
 *.keystore
diff --git a/.gitmodules b/.gitmodules
index 02cbb04e..30d550f2 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,6 @@
 [submodule "clash-foss"]
-	path = core/src/main/golang/core/foss
+	path = core/src/foss/golang/clash
 	url = https://github.com/Kr328/clash.git
 [submodule "clash-premium"]
-	path = core/src/main/golang/core/premium
+	path = core/src/premium/golang/clash
 	url = https://github.com/Kr328/clash.git
diff --git a/core/build.gradle.kts b/core/build.gradle.kts
index ab9f0dcf..deb30171 100644
--- a/core/build.gradle.kts
+++ b/core/build.gradle.kts
@@ -19,14 +19,15 @@ golang {
     sourceSets {
         create("foss") {
             tags.set(listOf("foss"))
+            srcDir.set(file("src/foss/golang"))
         }
         create("premium") {
             tags.set(listOf("premium"))
-            moduleFile.set("go.premium.mod")
+            srcDir.set(file("src/premium/golang"))
         }
         all {
             fileName.set("libclash.so")
-            srcDir.set(file("src/main/golang"))
+            packageName.set("cfa/native")
         }
     }
 }
@@ -36,7 +37,7 @@ android {
         all {
             externalNativeBuild {
                 cmake {
-                    arguments("-DGO_SOURCE:STRING=${golang.sourceSets.getByName(name).srcDir.asFile.get()}")
+                    arguments("-DGO_SOURCE:STRING=${file("src/main/golang/native")}")
                     arguments("-DGO_OUTPUT:STRING=${GolangPlugin.outputDirOf(project, null, null)}")
                     arguments("-DFLAVOR_NAME:STRING=$name")
                 }
diff --git a/core/src/main/golang/core/foss b/core/src/foss/golang/clash
similarity index 100%
rename from core/src/main/golang/core/foss
rename to core/src/foss/golang/clash
diff --git a/core/src/foss/golang/go.mod b/core/src/foss/golang/go.mod
new file mode 100644
index 00000000..9616d9df
--- /dev/null
+++ b/core/src/foss/golang/go.mod
@@ -0,0 +1,34 @@
+module foss
+
+go 1.17
+
+require cfa v0.0.0
+
+require (
+	cfa/blob v0.0.0 // indirect
+	github.com/Dreamacro/clash v0.0.0 // indirect
+	github.com/Dreamacro/go-shadowsocks2 v0.1.7 // indirect
+	github.com/dlclark/regexp2 v1.4.0 // indirect
+	github.com/gofrs/uuid v4.0.0+incompatible // indirect
+	github.com/gorilla/websocket v1.4.2 // indirect
+	github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac // indirect
+	github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1 // indirect
+	github.com/miekg/dns v1.1.43 // indirect
+	github.com/oschwald/geoip2-golang v1.5.0 // indirect
+	github.com/oschwald/maxminddb-golang v1.8.0 // indirect
+	github.com/sirupsen/logrus v1.8.1 // indirect
+	github.com/u-root/uio v0.0.0-20210528114334-82958018845c // indirect
+	go.uber.org/atomic v1.9.0 // indirect
+	golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
+	golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f // indirect
+	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
+	golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 // indirect
+	golang.org/x/text v0.3.6 // indirect
+	gopkg.in/yaml.v2 v2.4.0 // indirect
+)
+
+replace cfa => ../../main/golang
+
+replace github.com/Dreamacro/clash => ./clash
+
+replace cfa/blob => ../../../build/intermediates/golang_blob
diff --git a/core/src/foss/golang/go.sum b/core/src/foss/golang/go.sum
new file mode 100644
index 00000000..38710577
--- /dev/null
+++ b/core/src/foss/golang/go.sum
@@ -0,0 +1,114 @@
+github.com/Dreamacro/go-shadowsocks2 v0.1.7 h1:8CtbE1HoPPMfrQZGXmlluq6dO2lL31W6WRRE8fabc4Q=
+github.com/Dreamacro/go-shadowsocks2 v0.1.7/go.mod h1:8p5G4cAj5ZlXwUR+Ww63gfSikr8kvw8uw3TDwLAJpUc=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
+github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
+github.com/fanliao/go-promise v0.0.0-20141029170127-1890db352a72/go.mod h1:PjfxuH4FZdUyfMdtBio2lsRr1AKEaVPwelzuHuh8Lqc=
+github.com/go-chi/chi/v5 v5.0.4/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
+github.com/go-chi/cors v1.2.0/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
+github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns=
+github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
+github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714/go.mod h1:2Goc3h8EklBH5mspfHFxBnEoURQCGzQQH1ga9Myjvis=
+github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac h1:IO6EfdRnPhxgKOsk9DbewdtQZHKZKnGlW7QCUttvNys=
+github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac/go.mod h1:h+MxyHxRg9NH3terB1nfRIUaQEcI0XOVkdR9LNBlp8E=
+github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw=
+github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ=
+github.com/jsimonetti/rtnetlink v0.0.0-20201009170750-9c6f07d100c1/go.mod h1:hqoO/u39cqLeBLebZ8fWdE96O7FxrAsRYhnVOdgHxok=
+github.com/jsimonetti/rtnetlink v0.0.0-20201110080708-d2c240429e6c/go.mod h1:huN4d1phzjhlOsNIjFsw2SVRbwIHj3fJDMEU2SDPTmg=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1 h1:NJ5NyPHIok6hqdELvrI4bps5lLyfJtFmm0K4c9CB/WM=
+github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1/go.mod h1:JFkXLCpLkNVvLMRkq3gexTlRHfzbqcP5HfFOoq5Mj+g=
+github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7/go.mod h1:U6ZQobyTjI/tJyq2HG+i/dfSoFUt8/aZCM+GKtmFk/Y=
+github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA=
+github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M=
+github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY=
+github.com/mdlayher/netlink v1.1.1/go.mod h1:WTYpFb/WTvlRJAyKhZL5/uy69TDDpHHu2VZmb2XgV7o=
+github.com/mdlayher/raw v0.0.0-20190606142536-fef19f00fc18/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
+github.com/mdlayher/raw v0.0.0-20191009151244-50f2db8cc065/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
+github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg=
+github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
+github.com/oschwald/geoip2-golang v1.5.0 h1:igg2yQIrrcRccB1ytFXqBfOHCjXWIoMv85lVJ1ONZzw=
+github.com/oschwald/geoip2-golang v1.5.0/go.mod h1:xdvYt5xQzB8ORWFqPnqMwZpCpgNagttWdoZLlJQzg7s=
+github.com/oschwald/maxminddb-golang v1.8.0 h1:Uh/DSnGoxsyp/KYbY1AuP0tYEwfs0sCph9p/UMXK/Hk=
+github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/u-root/uio v0.0.0-20210528114334-82958018845c h1:BFvcl34IGnw8yvJi8hlqLFo9EshRInwWBs2M5fGWzQA=
+github.com/u-root/uio v0.0.0-20210528114334-82958018845c/go.mod h1:LpEX5FO/cB+WF4TYGY1V5qktpaZLkKkSegbr0V4eYXA=
+go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
+go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
+golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190419010253-1f3472d942ba/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f h1:w6wWR0H+nyVpbSAQbzVEIACVyr/h8l/BEkY6Sokc7Eg=
+golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190418153312-f0ce4c0180be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606122018-79a91cf218c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 h1:GkvMjFtXUmahfDtashnc1mnrCtuBVcwse5QV2lUk/tI=
+golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/core/src/foss/golang/main.go b/core/src/foss/golang/main.go
new file mode 100644
index 00000000..1ac67cbf
--- /dev/null
+++ b/core/src/foss/golang/main.go
@@ -0,0 +1,5 @@
+package golang
+
+import (
+	_ "cfa/native/all"
+)
diff --git a/core/src/main/golang/go.mod b/core/src/main/golang/go.mod
index 8436c94a..3af9c1ce 100644
--- a/core/src/main/golang/go.mod
+++ b/core/src/main/golang/go.mod
@@ -1,33 +1,3 @@
 module cfa
 
 go 1.17
-
-require (
-	cfa/blob v0.0.0 // local generated
-	github.com/Dreamacro/clash v0.0.0 // local
-	github.com/dlclark/regexp2 v1.4.0
-	github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1
-	github.com/miekg/dns v1.1.43
-	github.com/oschwald/geoip2-golang v1.5.0
-	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
-	gopkg.in/yaml.v2 v2.4.0
-)
-
-require (
-	github.com/Dreamacro/go-shadowsocks2 v0.1.7 // indirect
-	github.com/gofrs/uuid v4.0.0+incompatible // indirect
-	github.com/gorilla/websocket v1.4.2 // indirect
-	github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac // indirect
-	github.com/oschwald/maxminddb-golang v1.8.0 // indirect
-	github.com/sirupsen/logrus v1.8.1 // indirect
-	github.com/u-root/uio v0.0.0-20210528114334-82958018845c // indirect
-	go.uber.org/atomic v1.9.0 // indirect
-	golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
-	golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f // indirect
-	golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 // indirect
-	golang.org/x/text v0.3.6 // indirect
-)
-
-replace github.com/Dreamacro/clash => ./core/foss
-
-replace cfa/blob => ../../../build/intermediates/golang_blob
diff --git a/core/src/main/golang/go.sum b/core/src/main/golang/go.sum
index 38710577..e69de29b 100644
--- a/core/src/main/golang/go.sum
+++ b/core/src/main/golang/go.sum
@@ -1,114 +0,0 @@
-github.com/Dreamacro/go-shadowsocks2 v0.1.7 h1:8CtbE1HoPPMfrQZGXmlluq6dO2lL31W6WRRE8fabc4Q=
-github.com/Dreamacro/go-shadowsocks2 v0.1.7/go.mod h1:8p5G4cAj5ZlXwUR+Ww63gfSikr8kvw8uw3TDwLAJpUc=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
-github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
-github.com/fanliao/go-promise v0.0.0-20141029170127-1890db352a72/go.mod h1:PjfxuH4FZdUyfMdtBio2lsRr1AKEaVPwelzuHuh8Lqc=
-github.com/go-chi/chi/v5 v5.0.4/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
-github.com/go-chi/cors v1.2.0/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
-github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns=
-github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
-github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
-github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714/go.mod h1:2Goc3h8EklBH5mspfHFxBnEoURQCGzQQH1ga9Myjvis=
-github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac h1:IO6EfdRnPhxgKOsk9DbewdtQZHKZKnGlW7QCUttvNys=
-github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac/go.mod h1:h+MxyHxRg9NH3terB1nfRIUaQEcI0XOVkdR9LNBlp8E=
-github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw=
-github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ=
-github.com/jsimonetti/rtnetlink v0.0.0-20201009170750-9c6f07d100c1/go.mod h1:hqoO/u39cqLeBLebZ8fWdE96O7FxrAsRYhnVOdgHxok=
-github.com/jsimonetti/rtnetlink v0.0.0-20201110080708-d2c240429e6c/go.mod h1:huN4d1phzjhlOsNIjFsw2SVRbwIHj3fJDMEU2SDPTmg=
-github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
-github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1 h1:NJ5NyPHIok6hqdELvrI4bps5lLyfJtFmm0K4c9CB/WM=
-github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1/go.mod h1:JFkXLCpLkNVvLMRkq3gexTlRHfzbqcP5HfFOoq5Mj+g=
-github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7/go.mod h1:U6ZQobyTjI/tJyq2HG+i/dfSoFUt8/aZCM+GKtmFk/Y=
-github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA=
-github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M=
-github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY=
-github.com/mdlayher/netlink v1.1.1/go.mod h1:WTYpFb/WTvlRJAyKhZL5/uy69TDDpHHu2VZmb2XgV7o=
-github.com/mdlayher/raw v0.0.0-20190606142536-fef19f00fc18/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
-github.com/mdlayher/raw v0.0.0-20191009151244-50f2db8cc065/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
-github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg=
-github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
-github.com/oschwald/geoip2-golang v1.5.0 h1:igg2yQIrrcRccB1ytFXqBfOHCjXWIoMv85lVJ1ONZzw=
-github.com/oschwald/geoip2-golang v1.5.0/go.mod h1:xdvYt5xQzB8ORWFqPnqMwZpCpgNagttWdoZLlJQzg7s=
-github.com/oschwald/maxminddb-golang v1.8.0 h1:Uh/DSnGoxsyp/KYbY1AuP0tYEwfs0sCph9p/UMXK/Hk=
-github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
-github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/u-root/uio v0.0.0-20210528114334-82958018845c h1:BFvcl34IGnw8yvJi8hlqLFo9EshRInwWBs2M5fGWzQA=
-github.com/u-root/uio v0.0.0-20210528114334-82958018845c/go.mod h1:LpEX5FO/cB+WF4TYGY1V5qktpaZLkKkSegbr0V4eYXA=
-go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
-go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
-golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190419010253-1f3472d942ba/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f h1:w6wWR0H+nyVpbSAQbzVEIACVyr/h8l/BEkY6Sokc7Eg=
-golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190418153312-f0ce4c0180be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606122018-79a91cf218c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 h1:GkvMjFtXUmahfDtashnc1mnrCtuBVcwse5QV2lUk/tI=
-golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/core/src/main/golang/native/all/imports.go b/core/src/main/golang/native/all/imports.go
new file mode 100644
index 00000000..7d5fcd4c
--- /dev/null
+++ b/core/src/main/golang/native/all/imports.go
@@ -0,0 +1,15 @@
+package all
+
+import (
+	_ "cfa/native/app"
+	_ "cfa/native/common"
+	_ "cfa/native/config"
+	_ "cfa/native/delegate"
+	_ "cfa/native/platform"
+	_ "cfa/native/proxy"
+	_ "cfa/native/tun"
+	_ "cfa/native/tunnel"
+
+	_ "golang.org/x/sync/semaphore"
+	_ "github.com/Dreamacro/clash/log"
+)
diff --git a/core/src/main/golang/app.go b/core/src/main/golang/native/app.go
similarity index 97%
rename from core/src/main/golang/app.go
rename to core/src/main/golang/native/app.go
index 09282d66..a2b5342b 100644
--- a/core/src/main/golang/app.go
+++ b/core/src/main/golang/native/app.go
@@ -7,8 +7,7 @@ import (
 	"errors"
 	"unsafe"
 
-	"cfa/app"
-
+	"cfa/native/app"
 	"github.com/Dreamacro/clash/log"
 )
 
diff --git a/core/src/main/golang/app/app.go b/core/src/main/golang/native/app/app.go
similarity index 100%
rename from core/src/main/golang/app/app.go
rename to core/src/main/golang/native/app/app.go
diff --git a/core/src/main/golang/app/content.go b/core/src/main/golang/native/app/content.go
similarity index 100%
rename from core/src/main/golang/app/content.go
rename to core/src/main/golang/native/app/content.go
diff --git a/core/src/main/golang/app/dns.go b/core/src/main/golang/native/app/dns.go
similarity index 100%
rename from core/src/main/golang/app/dns.go
rename to core/src/main/golang/native/app/dns.go
diff --git a/core/src/main/golang/app/tun.go b/core/src/main/golang/native/app/tun.go
similarity index 97%
rename from core/src/main/golang/app/tun.go
rename to core/src/main/golang/native/app/tun.go
index 2c777b2f..14c05994 100644
--- a/core/src/main/golang/app/tun.go
+++ b/core/src/main/golang/native/app/tun.go
@@ -1,10 +1,11 @@
 package app
 
 import (
-	"cfa/platform"
 	"net"
 	"strings"
 	"syscall"
+
+	"cfa/native/platform"
 )
 
 var markSocketImpl func(fd int)
diff --git a/core/src/main/golang/app/ui.go b/core/src/main/golang/native/app/ui.go
similarity index 100%
rename from core/src/main/golang/app/ui.go
rename to core/src/main/golang/native/app/ui.go
diff --git a/core/src/main/golang/bridge.c b/core/src/main/golang/native/bridge.c
similarity index 100%
rename from core/src/main/golang/bridge.c
rename to core/src/main/golang/native/bridge.c
diff --git a/core/src/main/golang/bridge.h b/core/src/main/golang/native/bridge.h
similarity index 100%
rename from core/src/main/golang/bridge.h
rename to core/src/main/golang/native/bridge.h
diff --git a/core/src/main/golang/common/path.go b/core/src/main/golang/native/common/path.go
similarity index 100%
rename from core/src/main/golang/common/path.go
rename to core/src/main/golang/native/common/path.go
diff --git a/core/src/main/golang/config.go b/core/src/main/golang/native/config.go
similarity index 98%
rename from core/src/main/golang/config.go
rename to core/src/main/golang/native/config.go
index 2f90c469..f1e41606 100644
--- a/core/src/main/golang/config.go
+++ b/core/src/main/golang/native/config.go
@@ -7,7 +7,7 @@ import (
 	"runtime"
 	"unsafe"
 
-	"cfa/config"
+	"cfa/native/config"
 )
 
 type remoteValidCallback struct {
diff --git a/core/src/main/golang/config/defaults.go b/core/src/main/golang/native/config/defaults.go
similarity index 100%
rename from core/src/main/golang/config/defaults.go
rename to core/src/main/golang/native/config/defaults.go
diff --git a/core/src/main/golang/config/fetch.go b/core/src/main/golang/native/config/fetch.go
similarity index 95%
rename from core/src/main/golang/config/fetch.go
rename to core/src/main/golang/native/config/fetch.go
index 281df3db..065623bf 100644
--- a/core/src/main/golang/config/fetch.go
+++ b/core/src/main/golang/native/config/fetch.go
@@ -11,8 +11,7 @@ import (
 	"runtime"
 	"time"
 
-	"cfa/app"
-
+	app2 "cfa/native/app"
 	"github.com/Dreamacro/clash/component/dialer"
 )
 
@@ -40,7 +39,7 @@ func openUrl(url string) (io.ReadCloser, error) {
 		return nil, err
 	}
 
-	request.Header.Set("User-Agent", "ClashForAndroid/"+app.VersionName())
+	request.Header.Set("User-Agent", "ClashForAndroid/"+app2.VersionName())
 
 	response, err := client.Do(request)
 	if err != nil {
@@ -51,7 +50,7 @@ func openUrl(url string) (io.ReadCloser, error) {
 }
 
 func openContent(url string) (io.ReadCloser, error) {
-	return app.OpenContent(url)
+	return app2.OpenContent(url)
 }
 
 func fetch(url *U.URL, file string) error {
diff --git a/core/src/main/golang/config/load.go b/core/src/main/golang/native/config/load.go
similarity index 99%
rename from core/src/main/golang/config/load.go
rename to core/src/main/golang/native/config/load.go
index b11c6ea3..85812f7c 100644
--- a/core/src/main/golang/config/load.go
+++ b/core/src/main/golang/native/config/load.go
@@ -8,8 +8,7 @@ import (
 
 	"gopkg.in/yaml.v2"
 
-	"cfa/app"
-
+	"cfa/native/app"
 	"github.com/Dreamacro/clash/constant"
 	"github.com/Dreamacro/clash/log"
 
diff --git a/core/src/main/golang/config/override.go b/core/src/main/golang/native/config/override.go
similarity index 100%
rename from core/src/main/golang/config/override.go
rename to core/src/main/golang/native/config/override.go
diff --git a/core/src/main/golang/config/process.go b/core/src/main/golang/native/config/process.go
similarity index 99%
rename from core/src/main/golang/config/process.go
rename to core/src/main/golang/native/config/process.go
index 1b55d765..114d0cb9 100644
--- a/core/src/main/golang/config/process.go
+++ b/core/src/main/golang/native/config/process.go
@@ -7,10 +7,10 @@ import (
 	"strings"
 	"time"
 
-	"github.com/Dreamacro/clash/log"
 	"github.com/dlclark/regexp2"
 
-	"cfa/common"
+	"cfa/native/common"
+	"github.com/Dreamacro/clash/log"
 
 	"github.com/Dreamacro/clash/config"
 	"github.com/Dreamacro/clash/dns"
diff --git a/core/src/main/golang/config/provider_open.go b/core/src/main/golang/native/config/provider_open.go
similarity index 100%
rename from core/src/main/golang/config/provider_open.go
rename to core/src/main/golang/native/config/provider_open.go
diff --git a/core/src/main/golang/config/provider_premium.go b/core/src/main/golang/native/config/provider_premium.go
similarity index 100%
rename from core/src/main/golang/config/provider_premium.go
rename to core/src/main/golang/native/config/provider_premium.go
diff --git a/core/src/main/golang/debug.go b/core/src/main/golang/native/debug.go
similarity index 100%
rename from core/src/main/golang/debug.go
rename to core/src/main/golang/native/debug.go
diff --git a/core/src/main/golang/delegate/init.go b/core/src/main/golang/native/delegate/init.go
similarity index 79%
rename from core/src/main/golang/delegate/init.go
rename to core/src/main/golang/native/delegate/init.go
index 902bb540..536079ec 100644
--- a/core/src/main/golang/delegate/init.go
+++ b/core/src/main/golang/native/delegate/init.go
@@ -6,9 +6,8 @@ import (
 
 	"cfa/blob"
 
-	"cfa/app"
-	"cfa/platform"
-
+	app2 "cfa/native/app"
+	"cfa/native/platform"
 	"github.com/Dreamacro/clash/component/process"
 	"github.com/Dreamacro/clash/log"
 
@@ -22,8 +21,8 @@ var errBlocked = errors.New("blocked")
 func Init(home, versionName string, platformVersion int) {
 	mmdb.LoadFromBytes(blob.GeoipDatabase)
 	constant.SetHomeDir(home)
-	app.ApplyVersionName(versionName)
-	app.ApplyPlatformVersion(platformVersion)
+	app2.ApplyVersionName(versionName)
+	app2.ApplyPlatformVersion(platformVersion)
 
 	process.DefaultPackageNameResolver = func(metadata *constant.Metadata) (string, error) {
 		src, dst := metadata.RawSrcAddr, metadata.RawDstAddr
@@ -32,8 +31,8 @@ func Init(home, versionName string, platformVersion int) {
 			return "", process.ErrInvalidNetwork
 		}
 
-		uid := app.QuerySocketUid(metadata.RawSrcAddr, metadata.RawDstAddr)
-		pkg := app.QueryAppByUid(uid)
+		uid := app2.QuerySocketUid(metadata.RawSrcAddr, metadata.RawDstAddr)
+		pkg := app2.QueryAppByUid(uid)
 
 		log.Debugln("[PKG] %s --> %s by %d[%s]", metadata.SourceAddress(), metadata.RemoteAddress(), uid, pkg)
 
@@ -46,7 +45,7 @@ func Init(home, versionName string, platformVersion int) {
 		}
 
 		return conn.Control(func(fd uintptr) {
-			app.MarkSocket(int(fd))
+			app2.MarkSocket(int(fd))
 		})
 	}
 }
diff --git a/core/src/main/golang/log.go b/core/src/main/golang/native/log.go
similarity index 100%
rename from core/src/main/golang/log.go
rename to core/src/main/golang/native/log.go
diff --git a/core/src/main/golang/main.go b/core/src/main/golang/native/main.go
similarity index 89%
rename from core/src/main/golang/main.go
rename to core/src/main/golang/native/main.go
index f04888a8..92933398 100644
--- a/core/src/main/golang/main.go
+++ b/core/src/main/golang/native/main.go
@@ -10,9 +10,9 @@ import "C"
 import (
 	"runtime"
 
-	"cfa/config"
-	"cfa/delegate"
-	"cfa/tunnel"
+	"cfa/native/config"
+	"cfa/native/delegate"
+	"cfa/native/tunnel"
 
 	"github.com/Dreamacro/clash/log"
 )
diff --git a/core/src/main/golang/platform/limit.go b/core/src/main/golang/native/platform/limit.go
similarity index 100%
rename from core/src/main/golang/platform/limit.go
rename to core/src/main/golang/native/platform/limit.go
diff --git a/core/src/main/golang/platform/procfs.go b/core/src/main/golang/native/platform/procfs.go
similarity index 100%
rename from core/src/main/golang/platform/procfs.go
rename to core/src/main/golang/native/platform/procfs.go
diff --git a/core/src/main/golang/proxy.go b/core/src/main/golang/native/proxy.go
similarity index 90%
rename from core/src/main/golang/proxy.go
rename to core/src/main/golang/native/proxy.go
index ce41ec33..bd2b090d 100644
--- a/core/src/main/golang/proxy.go
+++ b/core/src/main/golang/native/proxy.go
@@ -3,7 +3,9 @@ package main
 //#include "bridge.h"
 import "C"
 
-import "cfa/proxy"
+import (
+	"cfa/native/proxy"
+)
 
 //export startHttp
 func startHttp(listenAt C.c_string) *C.char {
diff --git a/core/src/main/golang/proxy/http.go b/core/src/main/golang/native/proxy/http.go
similarity index 100%
rename from core/src/main/golang/proxy/http.go
rename to core/src/main/golang/native/proxy/http.go
diff --git a/core/src/main/golang/trace.c b/core/src/main/golang/native/trace.c
similarity index 100%
rename from core/src/main/golang/trace.c
rename to core/src/main/golang/native/trace.c
diff --git a/core/src/main/golang/trace.h b/core/src/main/golang/native/trace.h
similarity index 100%
rename from core/src/main/golang/trace.h
rename to core/src/main/golang/native/trace.h
diff --git a/core/src/main/golang/tun.go b/core/src/main/golang/native/tun.go
similarity index 97%
rename from core/src/main/golang/tun.go
rename to core/src/main/golang/native/tun.go
index e0a5859e..42d798ee 100644
--- a/core/src/main/golang/tun.go
+++ b/core/src/main/golang/native/tun.go
@@ -7,10 +7,10 @@ import (
 	"context"
 	"unsafe"
 
-	"cfa/app"
-	"cfa/tun"
-
 	"golang.org/x/sync/semaphore"
+
+	"cfa/native/app"
+	"cfa/native/tun"
 )
 
 type remoteTun struct {
diff --git a/core/src/main/golang/tun/dns.go b/core/src/main/golang/native/tun/dns.go
similarity index 100%
rename from core/src/main/golang/tun/dns.go
rename to core/src/main/golang/native/tun/dns.go
diff --git a/core/src/main/golang/tun/link.go b/core/src/main/golang/native/tun/link.go
similarity index 100%
rename from core/src/main/golang/tun/link.go
rename to core/src/main/golang/native/tun/link.go
diff --git a/core/src/main/golang/tun/tcp.go b/core/src/main/golang/native/tun/tcp.go
similarity index 100%
rename from core/src/main/golang/tun/tcp.go
rename to core/src/main/golang/native/tun/tcp.go
diff --git a/core/src/main/golang/tun/tun.go b/core/src/main/golang/native/tun/tun.go
similarity index 100%
rename from core/src/main/golang/tun/tun.go
rename to core/src/main/golang/native/tun/tun.go
diff --git a/core/src/main/golang/tun/udp.go b/core/src/main/golang/native/tun/udp.go
similarity index 100%
rename from core/src/main/golang/tun/udp.go
rename to core/src/main/golang/native/tun/udp.go
diff --git a/core/src/main/golang/tunnel.go b/core/src/main/golang/native/tunnel.go
similarity index 98%
rename from core/src/main/golang/tunnel.go
rename to core/src/main/golang/native/tunnel.go
index e5631eb2..a24735d1 100644
--- a/core/src/main/golang/tunnel.go
+++ b/core/src/main/golang/native/tunnel.go
@@ -6,8 +6,8 @@ import "C"
 import (
 	"unsafe"
 
-	"cfa/app"
-	"cfa/tunnel"
+	"cfa/native/app"
+	"cfa/native/tunnel"
 )
 
 //export queryTunnelState
diff --git a/core/src/main/golang/tunnel/conn.go b/core/src/main/golang/native/tunnel/conn.go
similarity index 100%
rename from core/src/main/golang/tunnel/conn.go
rename to core/src/main/golang/native/tunnel/conn.go
diff --git a/core/src/main/golang/tunnel/connectivity.go b/core/src/main/golang/native/tunnel/connectivity.go
similarity index 100%
rename from core/src/main/golang/tunnel/connectivity.go
rename to core/src/main/golang/native/tunnel/connectivity.go
diff --git a/core/src/main/golang/tunnel/geoip.go b/core/src/main/golang/native/tunnel/geoip.go
similarity index 100%
rename from core/src/main/golang/tunnel/geoip.go
rename to core/src/main/golang/native/tunnel/geoip.go
diff --git a/core/src/main/golang/tunnel/providers.go b/core/src/main/golang/native/tunnel/providers.go
similarity index 100%
rename from core/src/main/golang/tunnel/providers.go
rename to core/src/main/golang/native/tunnel/providers.go
diff --git a/core/src/main/golang/tunnel/providers_premium.go b/core/src/main/golang/native/tunnel/providers_premium.go
similarity index 100%
rename from core/src/main/golang/tunnel/providers_premium.go
rename to core/src/main/golang/native/tunnel/providers_premium.go
diff --git a/core/src/main/golang/tunnel/proxies.go b/core/src/main/golang/native/tunnel/proxies.go
similarity index 99%
rename from core/src/main/golang/tunnel/proxies.go
rename to core/src/main/golang/native/tunnel/proxies.go
index 97d2c2d7..44d9b3ed 100644
--- a/core/src/main/golang/tunnel/proxies.go
+++ b/core/src/main/golang/native/tunnel/proxies.go
@@ -4,9 +4,10 @@ import (
 	"sort"
 	"strings"
 
-	"github.com/Dreamacro/clash/adapter"
 	"github.com/dlclark/regexp2"
 
+	"github.com/Dreamacro/clash/adapter"
+
 	"github.com/Dreamacro/clash/adapter/outboundgroup"
 	C "github.com/Dreamacro/clash/constant"
 	"github.com/Dreamacro/clash/constant/provider"
diff --git a/core/src/main/golang/tunnel/state.go b/core/src/main/golang/native/tunnel/state.go
similarity index 100%
rename from core/src/main/golang/tunnel/state.go
rename to core/src/main/golang/native/tunnel/state.go
diff --git a/core/src/main/golang/tunnel/statistic.go b/core/src/main/golang/native/tunnel/statistic.go
similarity index 100%
rename from core/src/main/golang/tunnel/statistic.go
rename to core/src/main/golang/native/tunnel/statistic.go
diff --git a/core/src/main/golang/tunnel/suspend.go b/core/src/main/golang/native/tunnel/suspend.go
similarity index 100%
rename from core/src/main/golang/tunnel/suspend.go
rename to core/src/main/golang/native/tunnel/suspend.go
diff --git a/core/src/main/golang/utils.go b/core/src/main/golang/native/utils.go
similarity index 100%
rename from core/src/main/golang/utils.go
rename to core/src/main/golang/native/utils.go
diff --git a/core/src/main/golang/core/premium b/core/src/premium/golang/clash
similarity index 100%
rename from core/src/main/golang/core/premium
rename to core/src/premium/golang/clash
diff --git a/core/src/premium/golang/go.mod b/core/src/premium/golang/go.mod
new file mode 100644
index 00000000..5720089c
--- /dev/null
+++ b/core/src/premium/golang/go.mod
@@ -0,0 +1,34 @@
+module premium
+
+go 1.17
+
+require cfa v0.0.0
+
+require (
+	cfa/blob v0.0.0 // indirect
+	github.com/Dreamacro/clash v0.0.0 // indirect
+	github.com/Dreamacro/go-shadowsocks2 v0.1.7 // indirect
+	github.com/dlclark/regexp2 v1.4.0 // indirect
+	github.com/gofrs/uuid v4.0.0+incompatible // indirect
+	github.com/gorilla/websocket v1.4.2 // indirect
+	github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac // indirect
+	github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1 // indirect
+	github.com/miekg/dns v1.1.43 // indirect
+	github.com/oschwald/geoip2-golang v1.5.0 // indirect
+	github.com/oschwald/maxminddb-golang v1.8.0 // indirect
+	github.com/sirupsen/logrus v1.8.1 // indirect
+	github.com/u-root/uio v0.0.0-20210528114334-82958018845c // indirect
+	go.uber.org/atomic v1.9.0 // indirect
+	golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
+	golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f // indirect
+	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
+	golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 // indirect
+	golang.org/x/text v0.3.6 // indirect
+	gopkg.in/yaml.v2 v2.4.0 // indirect
+)
+
+replace cfa => ../../main/golang
+
+replace github.com/Dreamacro/clash => ./clash
+
+replace cfa/blob => ../../../build/intermediates/golang_blob
diff --git a/core/src/premium/golang/go.sum b/core/src/premium/golang/go.sum
new file mode 100644
index 00000000..38710577
--- /dev/null
+++ b/core/src/premium/golang/go.sum
@@ -0,0 +1,114 @@
+github.com/Dreamacro/go-shadowsocks2 v0.1.7 h1:8CtbE1HoPPMfrQZGXmlluq6dO2lL31W6WRRE8fabc4Q=
+github.com/Dreamacro/go-shadowsocks2 v0.1.7/go.mod h1:8p5G4cAj5ZlXwUR+Ww63gfSikr8kvw8uw3TDwLAJpUc=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
+github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
+github.com/fanliao/go-promise v0.0.0-20141029170127-1890db352a72/go.mod h1:PjfxuH4FZdUyfMdtBio2lsRr1AKEaVPwelzuHuh8Lqc=
+github.com/go-chi/chi/v5 v5.0.4/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
+github.com/go-chi/cors v1.2.0/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
+github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns=
+github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
+github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714/go.mod h1:2Goc3h8EklBH5mspfHFxBnEoURQCGzQQH1ga9Myjvis=
+github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac h1:IO6EfdRnPhxgKOsk9DbewdtQZHKZKnGlW7QCUttvNys=
+github.com/insomniacslk/dhcp v0.0.0-20210827173440-b95caade3eac/go.mod h1:h+MxyHxRg9NH3terB1nfRIUaQEcI0XOVkdR9LNBlp8E=
+github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw=
+github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ=
+github.com/jsimonetti/rtnetlink v0.0.0-20201009170750-9c6f07d100c1/go.mod h1:hqoO/u39cqLeBLebZ8fWdE96O7FxrAsRYhnVOdgHxok=
+github.com/jsimonetti/rtnetlink v0.0.0-20201110080708-d2c240429e6c/go.mod h1:huN4d1phzjhlOsNIjFsw2SVRbwIHj3fJDMEU2SDPTmg=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1 h1:NJ5NyPHIok6hqdELvrI4bps5lLyfJtFmm0K4c9CB/WM=
+github.com/kr328/tun2socket-lwip v0.0.0-20210911023118-0b4947e2a9c1/go.mod h1:JFkXLCpLkNVvLMRkq3gexTlRHfzbqcP5HfFOoq5Mj+g=
+github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7/go.mod h1:U6ZQobyTjI/tJyq2HG+i/dfSoFUt8/aZCM+GKtmFk/Y=
+github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA=
+github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M=
+github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY=
+github.com/mdlayher/netlink v1.1.1/go.mod h1:WTYpFb/WTvlRJAyKhZL5/uy69TDDpHHu2VZmb2XgV7o=
+github.com/mdlayher/raw v0.0.0-20190606142536-fef19f00fc18/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
+github.com/mdlayher/raw v0.0.0-20191009151244-50f2db8cc065/go.mod h1:7EpbotpCmVZcu+KCX4g9WaRNuu11uyhiW7+Le1dKawg=
+github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg=
+github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
+github.com/oschwald/geoip2-golang v1.5.0 h1:igg2yQIrrcRccB1ytFXqBfOHCjXWIoMv85lVJ1ONZzw=
+github.com/oschwald/geoip2-golang v1.5.0/go.mod h1:xdvYt5xQzB8ORWFqPnqMwZpCpgNagttWdoZLlJQzg7s=
+github.com/oschwald/maxminddb-golang v1.8.0 h1:Uh/DSnGoxsyp/KYbY1AuP0tYEwfs0sCph9p/UMXK/Hk=
+github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/u-root/uio v0.0.0-20210528114334-82958018845c h1:BFvcl34IGnw8yvJi8hlqLFo9EshRInwWBs2M5fGWzQA=
+github.com/u-root/uio v0.0.0-20210528114334-82958018845c/go.mod h1:LpEX5FO/cB+WF4TYGY1V5qktpaZLkKkSegbr0V4eYXA=
+go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
+go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
+golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190419010253-1f3472d942ba/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f h1:w6wWR0H+nyVpbSAQbzVEIACVyr/h8l/BEkY6Sokc7Eg=
+golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190418153312-f0ce4c0180be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606122018-79a91cf218c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 h1:GkvMjFtXUmahfDtashnc1mnrCtuBVcwse5QV2lUk/tI=
+golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/core/src/premium/golang/main.go b/core/src/premium/golang/main.go
new file mode 100644
index 00000000..5dc62150
--- /dev/null
+++ b/core/src/premium/golang/main.go
@@ -0,0 +1,3 @@
+package main
+
+import _ "cfa/native/all"
diff --git a/settings.gradle.kts b/settings.gradle.kts
index b2cccde5..f1a55269 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -17,7 +17,7 @@ dependencyResolutionManagement {
             val agp = "7.0.2"
             val ksp = "1.5.30-1.0.0-beta09"
             val kotlin = "1.5.30"
-            val golang = "1.0.2"
+            val golang = "1.0.3"
             val coroutine = "1.5.0"
             val coreKtx = "1.5.0"
             val activity = "1.2.3"
-- 
GitLab