diff --git a/beszel-agent/Makefile b/beszel-agent/Makefile index 11cf30ac1..d7adfbe2f 100644 --- a/beszel-agent/Makefile +++ b/beszel-agent/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=beszel-agent PKG_VERSION:=0.18.7 -PKG_RELEASE:=4 +PKG_RELEASE:=5 ifeq ($(ARCH),aarch64) PKG_ARCH:=arm64 @@ -45,7 +45,11 @@ endef define Build/Compile if command -v upx >/dev/null 2>&1; then \ - upx --best --lzma $(PKG_BUILD_DIR)/beszel-agent || true; \ + if [ "$(BESZEL_GOARCH)" = "mips" ] || [ "$(BESZEL_GOARCH)" = "mipsle" ]; then \ + echo "Skipping UPX compression for MIPS architectures (prevents execution hang)..."; \ + else \ + upx --best --lzma $(PKG_BUILD_DIR)/beszel-agent || true; \ + fi; \ fi endef diff --git a/luci-app-openclash/Makefile b/luci-app-openclash/Makefile index 857f4619b..74665060c 100644 --- a/luci-app-openclash/Makefile +++ b/luci-app-openclash/Makefile @@ -1,21 +1,50 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.47.075 -PKG_RELEASE:=3 +PKG_VERSION:=0.47.097 +PKG_RELEASE:=4 PKG_MAINTAINER:=vernesong PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) include $(INCLUDE_DIR)/package.mk +define Package/$(PKG_NAME)/config + config PACKAGE_kmod-inet-diag + default y if PACKAGE_$(PKG_NAME) + + config PACKAGE_luci-compat + default y if PACKAGE_$(PKG_NAME) + + config PACKAGE_kmod-nft-tproxy + default y if PACKAGE_firewall4 + + config PACKAGE_kmod-ipt-nat + default y if ! PACKAGE_firewall4 + + config PACKAGE_iptables-mod-tproxy + default y if ! PACKAGE_firewall4 + + config PACKAGE_iptables-mod-extra + default y if ! PACKAGE_firewall4 + + config PACKAGE_dnsmasq_full_ipset + default y if ! PACKAGE_firewall4 + + config PACKAGE_dnsmasq_full_nftset + default y if PACKAGE_firewall4 + + config PACKAGE_ipset + default y if ! PACKAGE_firewall4 +endef + define Package/$(PKG_NAME) CATEGORY:=LuCI SUBMENU:=3. Applications TITLE:=LuCI support for clash PKGARCH:=all - DEPENDS:=+luci-compat +dnsmasq-full +bash +curl +ca-bundle +ip-full +ruby \ - +ruby-yaml +kmod-inet-diag +kmod-nft-tproxy +kmod-tun +unzip + DEPENDS:=+dnsmasq-full +bash +curl +ca-bundle +ip-full \ + +ruby +ruby-yaml +kmod-tun +unzip MAINTAINER:=vernesong endef @@ -124,7 +153,8 @@ define Package/$(PKG_NAME)/postrm uci -q delete ucitrack.@openclash[-1] uci -q commit ucitrack } - rm -rf /tmp/luci-* + rm -rf /tmp/luci-indexcache /tmp/luci-indexcache.* /var/luci-indexcache /var/luci-indexcache.* >/dev/null 2>&1 + rm -rf /tmp/luci-modulecache /var/luci-modulecache >/dev/null 2>&1 exit 0 endef diff --git a/luci-app-openclash/luasrc/controller/openclash.lua b/luci-app-openclash/luasrc/controller/openclash.lua index b6673ac2f..28050f09d 100644 --- a/luci-app-openclash/luasrc/controller/openclash.lua +++ b/luci-app-openclash/luasrc/controller/openclash.lua @@ -665,8 +665,12 @@ function get_sub_url(filename) string.gsub(s.url, '[^\n]+', function(w) table.insert(info_tb, w) end) end if #info_tb == 1 then - local url, _ = parse_url_with_name(info_tb[1], filename) - sub_url = url + local url, name = parse_url_with_name(info_tb[1], filename) + if url ~= info_tb[1] then + table.insert(providers, {name = name, url = url}) + else + sub_url = url + end elseif #info_tb > 1 then for _, raw in ipairs(info_tb) do local url, name = parse_url_with_name(raw, filename) @@ -798,7 +802,7 @@ function sub_info_get() if #providers_data == 0 then if not url_result then - luci.http.status(400, "Subscription information not found") + luci.http.status(500, "Subscription information not found") return end end @@ -841,7 +845,7 @@ function action_switch_rule_mode() mode = luci.http.formvalue("rule_mode") if not mode then - luci.http.status(400, "Missing parameters") + luci.http.status(500, "Missing parameters") return end @@ -1098,7 +1102,7 @@ end function action_default_dashboard() local default_dashboard = luci.http.formvalue("name") if not default_dashboard or (default_dashboard ~= "Dashboard" and default_dashboard ~= "Yacd" and default_dashboard ~= "Metacubexd" and default_dashboard ~= "Zashboard") then - luci.http.status(400, "Set Failed") + luci.http.status(500, "Set Failed") return end if not fs.isdirectory("/usr/share/openclash/ui/" .. string.lower(default_dashboard)) then @@ -1644,6 +1648,13 @@ function rename_file() uci:set("openclash", s[".name"], "name", fs.filename(new_file_name)) end end) + + uci:foreach("openclash", "subscribe_info", + function(s) + if s.name == fs.filename(old_file_name) and fs.filename(new_file_name) ~= new_file_name then + uci:set("openclash", s[".name"], "name", fs.filename(new_file_name)) + end + end) uci:foreach("openclash", "groups", function(s) @@ -2073,114 +2084,101 @@ function action_myip_check() luci.http.write_json(result) end -function action_website_check() - local domain = luci.http.formvalue("domain") - local result = { - success = false, - response_time = 0, - error = "" - } +function latency_test(addr) + local result = { success = false, response_time = 0, error = "" } - if not domain then + if not addr then result.error = "Missing domain parameter" - luci.http.prepare_content("application/json") - luci.http.write_json(result) - return + return result end - local test_domain = domain - local test_url - - if test_domain:match("^https?://") then - test_domain = test_domain:gsub("^https?://([^/]+)/?.*$", "%1") + if addr:match("^https?://") then + addr = addr:gsub("^https?://([^/]+)/?.*$", "%1") end - if domain == "https://raw.githubusercontent.com/" or test_domain == "raw.githubusercontent.com" then - test_url = "https://raw.githubusercontent.com/vernesong/OpenClash/dev/img/logo.png" + local urls = {} + if addr == "raw.githubusercontent.com" then + table.insert(urls, "https://raw.githubusercontent.com/vernesong/OpenClash/dev/img/logo.png") else - test_url = "https://" .. test_domain .. "/favicon.ico" + table.insert(urls, "https://" .. addr .. "/favicon.ico") end - local cmd = string.format( - 'curl -sL -m 5 --connect-timeout 3 --retry 2 -w "%%{http_code},%%{time_total},%%{time_connect},%%{time_appconnect}" "%s" -o /dev/null 2>/dev/null', - test_url - ) + table.insert(urls, "https://" .. addr) - local output = luci.sys.exec(cmd) + for i, test_url in ipairs(urls) do + local cmd = string.format( + 'curl -sI -m 5 --connect-timeout 3 --retry 2 -w "%%{http_code},%%{time_total},%%{time_connect},%%{time_appconnect}" "%s" -o /dev/null 2>/dev/null', + test_url + ) - if output and output ~= "" then - local http_code, time_total, time_connect, time_appconnect = output:match("(%d+),([%d%.]+),([%d%.]+),([%d%.]+)") + local output = luci.sys.exec(cmd) + if output and output ~= "" then + local http_code, time_total, time_connect, time_appconnect = + output:match("(%d+),([%d%.]+),([%d%.]+),([%d%.]+)") - if http_code and tonumber(http_code) then - local code = tonumber(http_code) - local response_time = 0 - if time_appconnect and tonumber(time_appconnect) and tonumber(time_appconnect) > 0 then - response_time = math.floor(tonumber(time_appconnect) * 1000) - elseif time_connect and tonumber(time_connect) then - response_time = math.floor(tonumber(time_connect) * 1000) - else - response_time = math.floor((tonumber(time_total) or 0) * 1000) + if not http_code then + http_code, time_total, time_appconnect = output:match("(%d+),([%d%.]+),([%d%.]+)") + time_connect = nil end - if code >= 200 and code < 400 then - result.success = true - result.response_time = response_time - elseif code == 403 or code == 404 then - result.success = true - result.response_time = response_time - else - local fallback_url - if domain == "https://raw.githubusercontent.com/" or test_domain == "raw.githubusercontent.com" then - fallback_url = "https://raw.githubusercontent.com/vernesong/OpenClash/dev/img/logo.png" + if http_code and tonumber(http_code) then + local code = tonumber(http_code) + local response_time = 0 + + if time_appconnect and tonumber(time_appconnect) and tonumber(time_appconnect) > 0 then + response_time = math.floor(tonumber(time_appconnect) * 1000) + elseif time_connect and tonumber(time_connect) and tonumber(time_connect) > 0 then + response_time = math.floor(tonumber(time_connect) * 1000) else - fallback_url = "https://" .. test_domain .. "/" + response_time = math.floor((tonumber(time_total) or 0) * 1000) end - local fallback_cmd = string.format( - 'curl -sI -m 5 --connect-timeout 3 -w "%%{http_code},%%{time_total},%%{time_appconnect}" "%s" -o /dev/null 2>/dev/null', - fallback_url - ) - local fallback_output = luci.sys.exec(fallback_cmd) - if fallback_output and fallback_output ~= "" then - local fb_code, fb_total, fb_appconnect = fallback_output:match("(%d+),([%d%.]+),([%d%.]+)") - if fb_code and tonumber(fb_code) then - local fb_code_num = tonumber(fb_code) - local fb_response_time = 0 - if fb_appconnect and tonumber(fb_appconnect) and tonumber(fb_appconnect) > 0 then - fb_response_time = math.floor(tonumber(fb_appconnect) * 1000) - else - fb_response_time = math.floor((tonumber(fb_total) or 0) * 1000) - end - - if fb_code_num >= 200 and fb_code_num < 400 then - result.success = true - result.response_time = fb_response_time - elseif fb_code_num == 403 or fb_code_num == 404 then - result.success = true - result.response_time = fb_response_time - else - result.success = false - result.error = "HTTP " .. fb_code_num - result.response_time = fb_response_time - end - else - result.success = false - result.error = "Connection failed" - end + if (code >= 200 and code < 400) or code == 403 or code == 404 then + result.success = true + result.response_time = response_time + return result else + if i == #urls then + result.success = false + result.error = "HTTP " .. code + result.response_time = response_time + return result + end + end + else + if i == #urls then result.success = false - result.error = "Connection failed" + result.error = "Invalid response" + return result end end else - result.success = false - result.error = "Invalid response" + if i == #urls then + result.success = false + result.error = "No response" + return result + end end - else - result.success = false - result.error = "No response" end + return result +end + +function action_website_check() + local domain = luci.http.formvalue("domain") + + if not domain then + luci.http.prepare_content("application/json") + luci.http.write_json({ + success = false, + response_time = 0, + error = "Missing domain parameter" + }) + return + end + + local result = latency_test(domain) + luci.http.prepare_content("application/json") luci.http.write_json(result) end @@ -2257,7 +2255,7 @@ function action_switch_oc_setting() local value = luci.http.formvalue("value") if not setting or not value then - luci.http.status(400, "Missing parameters") + luci.http.status(500, "Missing parameters") return end @@ -2455,9 +2453,16 @@ function action_switch_oc_setting() uci:set("openclash", "@overwrite[0]", "enable_respect_rules", tonumber(value)) uci:commit("openclash") elseif setting == "oversea" then + oversea_v6_setting = fs.uci_get_config("config", "ipv6_enable") or "0" + if oversea_v6_setting ~= "0" then + uci:set("openclash", "config", "china_ip6_route", value) + end uci:set("openclash", "config", "china_ip_route", value) uci:commit("openclash") if is_running() then + if oversea_v6_setting ~= "0" then + uci:set("openclash", "@overwrite[0]", "china_ip6_route", value) + end uci:set("openclash", "@overwrite[0]", "china_ip_route", value) uci:commit("openclash") luci.sys.exec("/etc/init.d/openclash restart >/dev/null 2>&1 &") @@ -2490,7 +2495,7 @@ function action_switch_oc_setting() end uci:commit("openclash") else - luci.http.status(400, "Invalid setting") + luci.http.status(500, "Invalid setting") return end @@ -2910,14 +2915,14 @@ function action_oc_action() local config_file = luci.http.formvalue("config_file") if not action then - luci.http.status(400, "Missing action parameter") + luci.http.status(500, "Missing action parameter") return end if config_file and config_file ~= "" then local config_path = "/etc/openclash/config/" .. config_file if not fs.access(config_path) then - luci.http.status(404, "Config file not found") + luci.http.status(500, "Config file not found") return end @@ -2952,7 +2957,7 @@ function action_oc_action() luci.sys.call("ps | grep openclash | grep -v grep | awk '{print $1}' | xargs -r kill -9 >/dev/null 2>&1") luci.sys.call("/etc/init.d/openclash restart >/dev/null 2>&1") else - luci.http.status(400, "Invalid action parameter") + luci.http.status(500, "Invalid action parameter") return end @@ -3111,7 +3116,7 @@ function action_config_file_read() local config_file = luci.http.formvalue("config_file") if not config_file then - luci.http.status(400, "Missing config_file parameter") + luci.http.status(500, "Missing config_file parameter") return end @@ -3202,12 +3207,12 @@ function action_config_file_save() end if not config_file then - luci.http.status(400, "Missing config_file parameter") + luci.http.status(500, "Missing config_file parameter") return end if not content then - luci.http.status(400, "Missing content parameter") + luci.http.status(500, "Missing content parameter") return end @@ -3323,7 +3328,7 @@ end function action_add_subscription() local name = luci.http.formvalue("name") local address = luci.http.formvalue("address") - local sub_ua = luci.http.formvalue("sub_ua") or "clash.meta" + local sub_ua = luci.http.formvalue("sub_ua") or "clash-verge/v2.4.5" local sub_convert = luci.http.formvalue("sub_convert") or "0" local convert_address = luci.http.formvalue("convert_address") or "" local template = luci.http.formvalue("template") or "" @@ -3351,9 +3356,10 @@ function action_add_subscription() local is_valid_url = false if sub_convert == "1" then - if string.find(address, "^https?://") and not string.find(address, "\n") and not string.find(address, "|") then - is_valid_url = true - elseif string.find(address, "\n") or string.find(address, "|") then + local prefixed_http_pattern = "^[^,%s]+,https?://.+" + local encoded_prefixed_http_pattern = "^[^%%%s]+%%2[Cc]https?%%3[Aa]%%2[Ff]%%2[Ff].+" + + if string.find(address, "\n") or string.find(address, "|") then local links = {} if string.find(address, "\n") then for line in address:gmatch("[^\n]+") do @@ -3367,15 +3373,20 @@ function action_add_subscription() for _, link in ipairs(links) do if link and link ~= "" then - if string.find(link, "^https?://") or string.find(link, "^[a-zA-Z]+://") then + if string.find(link, "^https?://") + or string.find(link, "^[a-zA-Z]+://") + or string.find(link, prefixed_http_pattern) + or string.find(link, encoded_prefixed_http_pattern) then is_valid_url = true break end end end else - if string.find(address, "^[a-zA-Z]+://") and - not string.find(address, "\n") and not string.find(address, "|") then + if string.find(address, "^https?://") + or string.find(address, "^[a-zA-Z]+://") + or string.find(address, prefixed_http_pattern) + or string.find(address, encoded_prefixed_http_pattern) then is_valid_url = true end end @@ -3467,9 +3478,7 @@ function action_add_subscription() end end if #params > 0 then - for i, param in ipairs(params) do - uci:set_list("openclash", section_id, "custom_params", param) - end + uci:set_list("openclash", section_id, "custom_params", params) end end @@ -3483,9 +3492,7 @@ function action_add_subscription() end end if #keywords > 0 then - for i, kw in ipairs(keywords) do - uci:set_list("openclash", section_id, "keyword", kw) - end + uci:set_list("openclash", section_id, "keyword", keywords) end end @@ -3499,9 +3506,7 @@ function action_add_subscription() end end if #ex_keywords > 0 then - for i, ex_kw in ipairs(ex_keywords) do - uci:set_list("openclash", section_id, "ex_keyword", ex_kw) - end + uci:set_list("openclash", section_id, "ex_keyword", ex_keywords) end end @@ -3530,6 +3535,16 @@ end function action_upload_overwrite() local upload = luci.http.formvalue("config_file") local filename = luci.http.formvalue("filename") + local config_values = {} + local raw_config = luci.http.formvalue("config") or "" + if raw_config ~= "" then + for line in raw_config:gmatch("[^\n]+") do + local config_value = line:match("^%s*(.-)%s*$") + if config_value and config_value ~= "" then + table.insert(config_values, config_value) + end + end + end local enable = luci.http.formvalue("enable") local order = luci.http.formvalue("order") luci.http.prepare_content("application/json") @@ -3575,6 +3590,10 @@ function action_upload_overwrite() uci:foreach("openclash", "config_overwrite", function(s) if s.name == section_name then found = true + uci:delete("openclash", s[".name"], "config") + if #config_values > 0 then + uci:set_list("openclash", s[".name"], "config", config_values) + end if s.enable == nil or (s.enable ~= nil and enable ~= nil) then if enable == nil then enable = 0 @@ -3600,6 +3619,10 @@ function action_upload_overwrite() local sid = uci:add("openclash", "config_overwrite") uci:set("openclash", sid, "name", section_name) uci:set("openclash", sid, "type", "file") + uci:delete("openclash", sid, "config") + if #config_values > 0 then + uci:set_list("openclash", sid, "config", config_values) + end if enable ~= nil then uci:set("openclash", sid, "enable", tostring(enable)) else @@ -3657,8 +3680,22 @@ function action_overwrite_subscribe_info() local result = {} uci:foreach("openclash", "config_overwrite", function(s) if s.name then + local config_value = "" + if s.config then + local config_list = {} + for _, item in ipairs(s.config) do + if item and item ~= "" then + table.insert(config_list, tostring(item)) + end + end + if #config_list > 0 then + config_value = config_list + end + end + result[s.name] = { url = s.url or "", + config = config_value, update_days = s.update_days or "", update_hour = s.update_hour or "", order = tonumber(s.order) or 0, @@ -3673,7 +3710,7 @@ function action_overwrite_subscribe_info() return elseif method == "POST" then if not section_name then - luci.http.status(400, "Missing filename") + luci.http.status(500, "Missing filename") return end local url = luci.http.formvalue("url") or "" @@ -3681,6 +3718,16 @@ function action_overwrite_subscribe_info() local update_hour = luci.http.formvalue("update_hour") or "" local order = luci.http.formvalue("order") local param = luci.http.formvalue("param") or "" + local config_values = {} + local raw_config = luci.http.formvalue("config") or "" + if raw_config ~= "" then + for line in raw_config:gmatch("[^\n]+") do + local config_value = line:match("^%s*(.-)%s*$") + if config_value and config_value ~= "" then + table.insert(config_values, config_value) + end + end + end typ = luci.http.formvalue("type") or typ or "file" local enable = luci.http.formvalue("enable") @@ -3713,6 +3760,10 @@ function action_overwrite_subscribe_info() if s.name == old_section_name then uci:set("openclash", s[".name"], "name", section_name) uci:set("openclash", s[".name"], "url", url) + uci:delete("openclash", s[".name"], "config") + if #config_values > 0 then + uci:set_list("openclash", s[".name"], "config", config_values) + end uci:set("openclash", s[".name"], "update_days", update_days) uci:set("openclash", s[".name"], "update_hour", update_hour) uci:set("openclash", s[".name"], "type", typ) @@ -3754,6 +3805,10 @@ function action_overwrite_subscribe_info() uci:foreach("openclash", "config_overwrite", function(s) if s.name == section_name then uci:set("openclash", s[".name"], "url", url) + uci:delete("openclash", s[".name"], "config") + if #config_values > 0 then + uci:set_list("openclash", s[".name"], "config", config_values) + end uci:set("openclash", s[".name"], "update_days", update_days) uci:set("openclash", s[".name"], "update_hour", update_hour) uci:set("openclash", s[".name"], "type", typ) @@ -3785,6 +3840,10 @@ function action_overwrite_subscribe_info() local sid = uci:add("openclash", "config_overwrite") uci:set("openclash", sid, "name", section_name) uci:set("openclash", sid, "url", url) + uci:delete("openclash", sid, "config") + if #config_values > 0 then + uci:set_list("openclash", sid, "config", config_values) + end uci:set("openclash", sid, "update_days", update_days) uci:set("openclash", sid, "update_hour", update_hour) uci:set("openclash", sid, "type", typ) @@ -3835,7 +3894,7 @@ function action_overwrite_subscribe_info() luci.http.write_json({status="success"}) return else - luci.http.status(405, "Method Not Allowed") + luci.http.status(500, "Method Not Allowed") end end @@ -3923,7 +3982,7 @@ end function action_get_subscribe_data() local filename = luci.http.formvalue("filename") if not filename then - luci.http.status(400, "Bad Request") + luci.http.status(500, "Bad Request") return end @@ -3941,7 +4000,7 @@ end function action_get_subscribe_info_data() local filename = luci.http.formvalue("filename") if not filename then - luci.http.status(400, "Bad Request") + luci.http.status(500, "Bad Request") return end luci.http.prepare_content("application/json") diff --git a/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua b/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua index c84e00bcb..6af01b288 100644 --- a/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua +++ b/luci-app-openclash/luasrc/model/cbi/openclash/config-overwrite.lua @@ -11,7 +11,7 @@ local datatype = require "luci.cbi.datatypes" -- 优化 CBI UI(新版 LuCI 专用) local function optimize_cbi_ui() - luci.http.write([[ + HTTP.write([[ - \ No newline at end of file + diff --git a/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm b/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm index f84e04969..b7f0d50a6 100644 --- a/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm +++ b/luci-app-openclash/luasrc/view/openclash/sub_info_show.htm @@ -789,9 +789,9 @@ function sub_info_refresh_<%=idname%>(force) { var save_info = (localStorage.getItem("sub_info_<%=filename%>")) ? JSON.parse(localStorage.getItem("sub_info_<%=filename%>")) : null; var shouldFetchNew = true; - if (save_info && !force) { + if (!force) { dispaly_progressbar('<%=idname%>', save_info); - if (save_info.get_time) { + if (save_info && save_info.get_time) { var currentTime = Math.floor(Date.now() / 1000); var cacheTime = parseInt(save_info.get_time); var timeDiff = currentTime - cacheTime; @@ -803,12 +803,6 @@ function sub_info_refresh_<%=idname%>(force) { } } - if (retry_<%=idname%> >= 3) { - localStorage.removeItem("sub_info_<%=filename%>"); - retry_<%=idname%> = 0; - shouldFetchNew = false; - } - if (!shouldFetchNew) { s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>(false)", 60000*15); return; @@ -821,9 +815,9 @@ function sub_info_refresh_<%=idname%>(force) { XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "sub_info_get")%>', {filename: "<%=filename%>"}, function(x, status) { var needsErrorHandling = false; - if (x && x.status == 200 && status.providers) { + if (x && x.status == 200 && status.providers.length > 0) { var save_info_length = (save_info && save_info.providers) ? save_info.providers.length : 0; - var newProvidersLength = (status && status.providers) ? status.providers.length : 0; + var newProvidersLength = status.providers.length; if (save_info_length !== newProvidersLength && save_info_length > newProvidersLength) { needsErrorHandling = true; } @@ -839,8 +833,13 @@ function sub_info_refresh_<%=idname%>(force) { if (needsErrorHandling && retry_<%=idname%> <= 2) { retry_<%=idname%>++; - s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>(false)", 15000); + s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>(false)", 5000); } else { + retry_<%=idname%> = 0; + dispaly_progressbar('<%=idname%>', status); + if (status && status.providers) { + localStorage.setItem("sub_info_<%=filename%>", JSON.stringify(status)); + } s_<%=idname%> = setTimeout("sub_info_refresh_<%=idname%>(false)", 60000*15); }; }); diff --git a/luci-app-openclash/luasrc/view/openclash/switch_dashboard.htm b/luci-app-openclash/luasrc/view/openclash/switch_dashboard.htm index 84a94bb04..63c580802 100644 --- a/luci-app-openclash/luasrc/view/openclash/switch_dashboard.htm +++ b/luci-app-openclash/luasrc/view/openclash/switch_dashboard.htm @@ -1,148 +1,110 @@ <%+cbi/valueheader%> -
- <%:Collecting data...%> -
-
- -
-
- +
+
<%:Collecting data...%>
+
+ +
+
+ +
-<%+cbi/valuefooter%> \ No newline at end of file +<%+cbi/valuefooter%> diff --git a/luci-app-openclash/luasrc/view/openclash/tblsection.htm b/luci-app-openclash/luasrc/view/openclash/tblsection.htm index b12b66ee5..7bda4304c 100644 --- a/luci-app-openclash/luasrc/view/openclash/tblsection.htm +++ b/luci-app-openclash/luasrc/view/openclash/tblsection.htm @@ -51,11 +51,9 @@ else end end -local cfg_name -if os.getenv("PATH_INFO") then - local cfg_path = string.match(os.getenv("PATH_INFO"), "/config/(.+)$") - cfg_name = cfg_path and string.match(cfg_path, "([^/]+)$") or nil -end +local file_path = fs.get_file_path_from_request() +local cfg_name = (file_path and fs.basename(file_path)) or nil + if not cfg_name and uci:get("openclash", "config", "config_path") then cfg_name = fs.basename(uci:get("openclash", "config", "config_path")) end @@ -392,7 +390,13 @@ local sectiontype = "_"..self.config.."_"..string.match(self.sectiontype, "[%w_] <%- end %> alt="<%:Edit%>" title="<%:Edit%>" /> <%- end; if self.addremove then -%> - + <%- if file_path then -%> + + <%- else -%> + + <%- end -%> <%- end -%> <%- end -%> @@ -503,7 +507,6 @@ local sectiontype = "_"..self.config.."_"..string.match(self.sectiontype, "[%w_] } localStorage.setItem("id<%=sectiontype%>",'cbi-<%=self.config%>-<%=self.sectiontype%>'); - return true; }; function onload<%=sectiontype%>() { diff --git a/luci-app-openclash/po/es/openclash.es.po b/luci-app-openclash/po/es/openclash.es.po index e688b2cec..37a219645 100644 --- a/luci-app-openclash/po/es/openclash.es.po +++ b/luci-app-openclash/po/es/openclash.es.po @@ -1592,77 +1592,29 @@ msgstr "Error al descargar la lista CIDR de China (IPv4); inténtalo más tarde. msgid "Chnroute6 Cidr List Update Error, Please Try Again Later..." msgstr "Error al descargar la lista CIDR de China (IPv6); inténtalo más tarde." -msgid "Start Downloading GeoSite Database..." -msgstr "Iniciando descarga de la base de datos GeoSite..." +msgid "Download Failed: HTML Response Detected, Abort Update..." +msgstr "Descarga fallida: respuesta HTML detectada, aborto de la actualización..." -msgid "GeoSite Database Download Success, Check Updated..." -msgstr "GeoSite descargado correctamente, comprobando actualizaciones..." +msgid "Download Failed: File Size Too Small, Abort Update..." +msgstr "Descarga fallida: el archivo es demasiado pequeño, aborto de la actualización..." -msgid "GeoSite Database Has Been Updated, Starting To Replace The Old Version..." -msgstr "GeoSite tiene una nueva versión; iniciando reemplazo..." +msgid "Download Success, Check Updated..." +msgstr "Descarga correcta, comprobando actualizaciones..." -msgid "GeoSite Database Update Successful!" -msgstr "Base de datos GeoSite actualizada correctamente." +msgid "Has Been Updated, Starting To Replace The Old Version..." +msgstr "Tiene nueva versión; iniciando reemplazo..." -msgid "Updated GeoSite Database No Change, Do Nothing..." -msgstr "GeoSite no presenta cambios; operación detenida." +msgid "Update Successful!" +msgstr "Actualizado correctamente." -msgid "GeoSite Database Update Error, Please Try Again Later..." -msgstr "Error al descargar GeoSite; inténtalo más tarde." +msgid "No Change, Do Nothing..." +msgstr "Sin cambios, no hacer nada..." -msgid "Start Downloading GeoIP Dat..." -msgstr "Iniciando descarga de GeoIP Dat..." +msgid "Update Error, Please Try Again Later..." +msgstr "Error al actualizar; inténtalo más tarde..." -msgid "GeoIP Dat Download Success, Check Updated..." -msgstr "GeoIP Dat descargado correctamente, comprobando actualizaciones..." - -msgid "GeoIP Dat Has Been Updated, Starting To Replace The Old Version..." -msgstr "GeoIP Dat tiene una nueva versión; iniciando reemplazo..." - -msgid "GeoIP Dat Update Successful!" -msgstr "GeoIP Dat actualizado correctamente." - -msgid "Updated GeoIP Dat No Change, Do Nothing..." -msgstr "GeoIP Dat no presenta cambios; operación detenida." - -msgid "GeoIP Dat Update Error, Please Try Again Later..." -msgstr "Error al descargar GeoIP Dat; inténtalo más tarde." - -msgid "Start Downloading Geoip Database..." -msgstr "Iniciando descarga de la base de datos GEOIP..." - -msgid "Geoip Database Download Success, Check Updated..." -msgstr "GEOIP descargado correctamente, comprobando actualizaciones..." - -msgid "Geoip Database Has Been Updated, Starting To Replace The Old Version..." -msgstr "GEOIP tiene una nueva versión; iniciando reemplazo..." - -msgid "Geoip Database Update Successful!" -msgstr "Base de datos GEOIP actualizada correctamente." - -msgid "Updated Geoip Database No Change, Do Nothing..." -msgstr "GEOIP no presenta cambios; operación detenida." - -msgid "Geoip Database Update Error, Please Try Again Later..." -msgstr "Error al descargar GEOIP; inténtalo más tarde." - -msgid "Start Downloading Geo ASN Database..." -msgstr "Iniciando descarga de la base de datos GEO ASN..." - -msgid "Geo ASN Database Download Success, Check Updated..." -msgstr "GEO ASN descargado correctamente, comprobando actualizaciones..." - -msgid "Geo ASN Database Has Been Updated, Starting To Replace The Old Version..." -msgstr "GEO ASN tiene una nueva versión; iniciando reemplazo..." - -msgid "Geo ASN Database Update Successful!" -msgstr "Base de datos GEO ASN actualizada correctamente." - -msgid "Updated Geo ASN Database No Change, Do Nothing..." -msgstr "GEO ASN no presenta cambios; operación detenida." - -msgid "Geo ASN Database Update Error, Please Try Again Later..." -msgstr "Error al descargar GEO ASN; inténtalo más tarde." +msgid "Start Downloading Database..." +msgstr "Iniciando descarga de la base de datos..." msgid "Start Getting" msgstr "Iniciando obtención de" @@ -1955,6 +1907,9 @@ msgstr "No se pudo analizar el archivo de configuración," msgid "Edit Provider Path Failed," msgstr "Fallo al modificar la ruta del proveedor," +msgid "Edit Provider CDN Failed," +msgstr "Fallo al modificar la CDN del proveedor," + msgid "Edit URL-Test Group Tolerance Option Failed," msgstr "Fallo al modificar la tolerancia del grupo URL-Test," @@ -2111,77 +2066,11 @@ msgstr "Filtro de regiones" msgid "Unlock Nodes Filter" msgstr "Filtro de nodos desbloqueados" -msgid "Start Auto Select Proxy For Netflix Unlock..." -msgstr "Iniciando selección automática de nodo para Netflix..." +msgid "Start Auto Select Unlock Proxy For" +msgstr "Iniciando selección automática de nodo" -msgid "Start Auto Select Proxy For Disney Plus Unlock..." -msgstr "Iniciando selección automática de nodo para Disney Plus..." - -msgid "Start Auto Select Proxy For HBO Max Unlock..." -msgstr "Iniciando selección automática de nodo para HBO Max..." - -msgid "Start Auto Select Proxy For YouTube Premium Unlock..." -msgstr "Iniciando selección automática de nodo para YouTube Premium..." - -msgid "Start Auto Select Proxy For TVB Anywhere+ Unlock..." -msgstr "Iniciando selección automática de nodo para TVB Anywhere+..." - -msgid "Start Auto Select Proxy For Amazon Prime Video Unlock..." -msgstr "Iniciando selección automática de nodo para Amazon Prime Video..." - -msgid "Start Auto Select Proxy For DAZN Unlock..." -msgstr "Iniciando selección automática de nodo para DAZN..." - -msgid "Start Auto Select Proxy For Paramount Plus Unlock..." -msgstr "Iniciando selección automática de nodo para Paramount Plus..." - -msgid "Start Auto Select Proxy For Discovery Plus Unlock..." -msgstr "Iniciando selección automática de nodo para Discovery Plus..." - -msgid "Start Auto Select Proxy For Bilibili Unlock..." -msgstr "Iniciando selección automática de nodo para Bilibili..." - -msgid "Start Auto Select Proxy For Google Not CN Unlock..." -msgstr "Iniciando selección automática de nodo para Google fuera de China..." - -msgid "Start Auto Select Proxy For OpenAI Unlock..." -msgstr "Iniciando selección automática de nodo para OpenAI..." - -msgid "Netflix Group:" -msgstr "Grupo de Netflix:" - -msgid "Disney Plus Group:" -msgstr "Grupo de Disney Plus:" - -msgid "HBO Max Group:" -msgstr "Grupo de HBO Max:" - -msgid "TVB Anywhere+ Group:" -msgstr "Grupo de TVB Anywhere+:" - -msgid "Amazon Prime Video Group:" -msgstr "Grupo de Amazon Prime Video:" - -msgid "YouTube Premium Group:" -msgstr "Grupo de YouTube Premium:" - -msgid "DAZN Group:" -msgstr "Grupo de DAZN:" - -msgid "Paramount Plus Group:" -msgstr "Grupo de Paramount Plus:" - -msgid "Discovery Plus Group:" -msgstr "Grupo de Discovery Plus:" - -msgid "Bilibili Group:" -msgstr "Grupo de Bilibili:" - -msgid "Google Group:" -msgstr "Grupo de Google:" - -msgid "OpenAI Group:" -msgstr "Grupo de OpenAI:" +msgid "Group:" +msgstr "Grupo:" msgid "full support" msgstr "desbloqueo completo" @@ -2666,8 +2555,8 @@ msgstr "Inicio de TUN fallido; intentando reiniciar..." msgid "Core Start Failed, Please Check The Log Infos!" msgstr "Fallo al iniciar el núcleo. Revisa el registro de núcleo." -msgid "Core Status Abnormal, Please Check The Log Infos!" -msgstr "Estado del núcleo anómalo. Consulta el registro de núcleo." +msgid "Core Initial Configuration Timeout, Please Check The Log Infos!" +msgstr "Tiempo de espera agotado en la configuración inicial del núcleo, ¡consulta la información del registro!" msgid "Forced Sniff Pure IP Connections" msgstr "Forzar sniffing de conexiones IP puras" @@ -2720,18 +2609,6 @@ msgstr "Habilita reglas por proceso (solo para procesos del router). Si no está msgid "Enable Process Rule" msgstr "Activar reglas por proceso" -msgid "Because there is a port range" -msgstr "Debido a que existe un rango de puertos" - -msgid "in the firewall rule settings" -msgstr "en la configuración del firewall" - -msgid "auto bypassing may cause the normal connection of the client not to reach the core, if necessary, please add your own in the access control!" -msgstr "el bypass automático puede impedir que conexiones legítimas lleguen al núcleo. Añade reglas manuales si es necesario." - -msgid "Start Add Port Bypassing Rules For Firewall Redirect and Firewall Rules..." -msgstr "Añadiendo reglas de bypass de puertos para redirecciones de firewall..." - msgid "DNS Hijacking Mode is Dnsmasq Redirect..." msgstr "Modo de secuestro DNS: redirección Dnsmasq..." @@ -3773,6 +3650,12 @@ msgstr "Editar información de módulo" msgid "Subscription" msgstr "Suscripción" +msgid "HTTP Module" +msgstr "Módulo HTTP" + +msgid "File Module" +msgstr "Módulo de archivo" + msgid "Overwrite Module" msgstr "Módulo de sobrescritura" @@ -3834,4 +3717,28 @@ msgid "Serial Number" msgstr "Número de serie" msgid "Set Custom Overwrite Script Failed," -msgstr "Fallo al ejecutar el script de sobrescritura personalizado," \ No newline at end of file +msgstr "Fallo al ejecutar el script de sobrescritura personalizado," + +msgid "Load YAML Override Block" +msgstr "Cargar bloque de sobrescritura YAML" + +msgid "Invalid YAML Override format, skipped..." +msgstr "Formato de sobrescritura YAML no válido, omitido..." + +msgid "Parse YAML Override failed:" +msgstr "Error al analizar bloque de sobrescritura YAML:" + +msgid "YAML overwrite failed:" +msgstr "Error en la sobrescritura YAML:" + +msgid "files selected" +msgstr "archivos seleccionados" + +msgid "Global User-Agent" +msgstr "Agente de usuario global" + +msgid "depended package reinstalling..." +msgstr "reinstalando paquete dependiente..." + +msgid "failed to install, please try to install it manually..." +msgstr "no se pudo instalar; por favor, intenta instalarlo manualmente." \ No newline at end of file diff --git a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index 20b753766..ea2bca174 100644 --- a/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -1590,77 +1590,29 @@ msgstr "大陆 IP 白名单下载失败,请检查网络或稍后再试..." msgid "Chnroute6 Cidr List Update Error, Please Try Again Later..." msgstr "大陆 IPv6 白名单下载失败,请检查网络或稍后再试..." -msgid "Start Downloading GeoSite Database..." -msgstr "开始下载 GeoSite 数据库..." +msgid "Download Failed: HTML Response Detected, Abort Update..." +msgstr "下载失败:检测到 HTML 响应(可能为 CDN 错误页面),终止更新..." -msgid "GeoSite Database Download Success, Check Updated..." -msgstr "GeoSite 数据库下载成功,检查数据库版本是否更新..." +msgid "Download Failed: File Size Too Small, Abort Update..." +msgstr "下载失败:文件大小过小(可能被截断),终止更新..." -msgid "GeoSite Database Has Been Updated, Starting To Replace The Old Version..." -msgstr "GeoSite 数据库版本有更新,开始替换数据库版本..." +msgid "Download Success, Check Updated..." +msgstr "下载成功,检查数据库是否已更新..." -msgid "GeoSite Database Update Successful!" -msgstr "GeoSite 数据库更新成功!" +msgid "Has Been Updated, Starting To Replace The Old Version..." +msgstr "有新版本,开始替换旧版本..." -msgid "Updated GeoSite Database No Change, Do Nothing..." -msgstr "GeoSite 数据库版本没有更新,停止继续操作..." +msgid "Update Successful!" +msgstr "更新成功!" -msgid "GeoSite Database Update Error, Please Try Again Later..." -msgstr "GeoSite 数据库下载失败,请检查网络或稍后再试..." +msgid "No Change, Do Nothing..." +msgstr "无变化,停止操作..." -msgid "Start Downloading GeoIP Dat..." -msgstr "开始下载 GeoIP Dat 数据库..." +msgid "Update Error, Please Try Again Later..." +msgstr "更新失败,请稍后再试..." -msgid "GeoIP Dat Download Success, Check Updated..." -msgstr "GeoIP Dat 数据库下载成功,检查数据库版本是否更新..." - -msgid "GeoIP Dat Has Been Updated, Starting To Replace The Old Version..." -msgstr "GeoIP Dat 数据库版本有更新,开始替换数据库版本..." - -msgid "GeoIP Dat Update Successful!" -msgstr "GeoIP Dat 数据库更新成功!" - -msgid "Updated GeoIP Dat No Change, Do Nothing..." -msgstr "GeoIP Dat 数据库版本没有更新,停止继续操作..." - -msgid "GeoIP Dat Update Error, Please Try Again Later..." -msgstr "GeoIP Dat 数据库下载失败,请检查网络或稍后再试..." - -msgid "Start Downloading Geoip Database..." -msgstr "开始下载 GEOIP 数据库..." - -msgid "Geoip Database Download Success, Check Updated..." -msgstr "GEOIP 数据库下载成功,检查数据库版本是否更新..." - -msgid "Geoip Database Has Been Updated, Starting To Replace The Old Version..." -msgstr "GEOIP 数据库版本有更新,开始替换数据库版本..." - -msgid "Geoip Database Update Successful!" -msgstr "GEOIP 数据库更新成功!" - -msgid "Updated Geoip Database No Change, Do Nothing..." -msgstr "GEOIP 数据库版本没有更新,停止继续操作..." - -msgid "Geoip Database Update Error, Please Try Again Later..." -msgstr "GEOIP 数据库下载失败,请检查网络或稍后再试..." - -msgid "Start Downloading Geo ASN Database..." -msgstr "开始下载 GEO ASN 数据库..." - -msgid "Geo ASN Database Download Success, Check Updated..." -msgstr "GEO ASN 数据库下载成功,检查数据库版本是否更新..." - -msgid "Geo ASN Database Has Been Updated, Starting To Replace The Old Version..." -msgstr "GEO ASN 数据库版本有更新,开始替换数据库版本..." - -msgid "Geo ASN Database Update Successful!" -msgstr "GEO ASN 数据库更新成功!" - -msgid "Updated Geo ASN Database No Change, Do Nothing..." -msgstr "GEO ASN 数据库版本没有更新,停止继续操作..." - -msgid "Geo ASN Database Update Error, Please Try Again Later..." -msgstr "GEO ASN 数据库下载失败,请检查网络或稍后再试..." +msgid "Start Downloading Database..." +msgstr "开始下载数据库..." msgid "Start Getting" msgstr "开始获取" @@ -1953,6 +1905,9 @@ msgstr "配置文件解析失败," msgid "Edit Provider Path Failed," msgstr "修改集路径失败," +msgid "Edit Provider CDN Failed," +msgstr "修改集 CDN 地址失败," + msgid "Edit URL-Test Group Tolerance Option Failed," msgstr "修改 URL-Test 策略组容忍值失败," @@ -2109,77 +2064,11 @@ msgstr "解锁区域筛选" msgid "Unlock Nodes Filter" msgstr "解锁节点筛选" -msgid "Start Auto Select Proxy For Netflix Unlock..." -msgstr "开始自动选择(检测)Netflix 解锁节点..." +msgid "Start Auto Select Unlock Proxy For" +msgstr "开始自动选择(检测)解锁节点" -msgid "Start Auto Select Proxy For Disney Plus Unlock..." -msgstr "开始自动选择(检测)Disney Plus 解锁节点..." - -msgid "Start Auto Select Proxy For HBO Max Unlock..." -msgstr "开始自动选择(检测)HBO Max 解锁节点..." - -msgid "Start Auto Select Proxy For YouTube Premium Unlock..." -msgstr "开始自动选择(检测)YouTube Premium 解锁节点..." - -msgid "Start Auto Select Proxy For TVB Anywhere+ Unlock..." -msgstr "开始自动选择(检测)TVB Anywhere+ 解锁节点..." - -msgid "Start Auto Select Proxy For Amazon Prime Video Unlock..." -msgstr "开始自动选择(检测)Amazon Prime Video 解锁节点..." - -msgid "Start Auto Select Proxy For DAZN Unlock..." -msgstr "开始自动选择(检测)DAZN 解锁节点..." - -msgid "Start Auto Select Proxy For Paramount Plus Unlock..." -msgstr "开始自动选择(检测)Paramount Plus 解锁节点..." - -msgid "Start Auto Select Proxy For Discovery Plus Unlock..." -msgstr "开始自动选择(检测)Discovery Plus 解锁节点..." - -msgid "Start Auto Select Proxy For Bilibili Unlock..." -msgstr "开始自动选择(检测)Bilibili 解锁节点..." - -msgid "Start Auto Select Proxy For Google Not CN Unlock..." -msgstr "开始自动选择(检测)Google 非送中节点..." - -msgid "Start Auto Select Proxy For OpenAI Unlock..." -msgstr "开始自动选择(检测)OpenAI 解锁节点..." - -msgid "Netflix Group:" -msgstr "Netflix 策略组:" - -msgid "Disney Plus Group:" -msgstr "Disney Plus 策略组:" - -msgid "HBO Max Group:" -msgstr "HBO Max 策略组:" - -msgid "TVB Anywhere+ Group:" -msgstr "TVB Anywhere+ 策略组:" - -msgid "Amazon Prime Video Group:" -msgstr "Amazon Prime Video 策略组:" - -msgid "YouTube Premium Group:" -msgstr "YouTube Premium 策略组:" - -msgid "DAZN Group:" -msgstr "DAZN 策略组:" - -msgid "Paramount Plus Group:" -msgstr "Paramount Plus 策略组:" - -msgid "Discovery Plus Group:" -msgstr "Discovery Plus 策略组:" - -msgid "Bilibili Group:" -msgstr "Bilibili 策略组:" - -msgid "Google Group:" -msgstr "Google 策略组:" - -msgid "OpenAI Group:" -msgstr "OpenAI 策略组:" +msgid "Group:" +msgstr "策略组:" msgid "full support" msgstr "完整解锁" @@ -2437,7 +2326,7 @@ msgid "Geodata Loader Mode" msgstr "Geodata 数据加载方式" msgid "Memconservative" -msgstr "小内存模式" +msgstr "低内存模式" msgid "Standard" msgstr "标准模式" @@ -2664,8 +2553,8 @@ msgstr "TUN 接口启动失败,尝试重启内核..." msgid "Core Start Failed, Please Check The Log Infos!" msgstr "内核启动失败,请查看《内核日志》排查失败原因!" -msgid "Core Status Abnormal, Please Check The Log Infos!" -msgstr "内核状态异常,请查看《内核日志》排查异常原因!" +msgid "Core Initial Configuration Timeout, Please Check The Log Infos!" +msgstr "内核加载配置超时,请查看《内核日志》排查原因!" msgid "Forced Sniff Pure IP Connections" msgstr "强制探测(嗅探)所有纯 IP 的连接" @@ -2718,18 +2607,6 @@ msgstr "是否启用进程规则,仅能匹配路由器自身进程,在路由 msgid "Enable Process Rule" msgstr "启用进程规则" -msgid "Because there is a port range" -msgstr "因为端口范围" - -msgid "in the firewall rule settings" -msgstr "存在于防火墙规则设置" - -msgid "auto bypassing may cause the normal connection of the client not to reach the core, if necessary, please add your own in the access control!" -msgstr "自动绕过后可能造成客户端的正常连接无法到达内核,如有需要,请在插件设置-来源流量访问控制中自行添加!" - -msgid "Start Add Port Bypassing Rules For Firewall Redirect and Firewall Rules..." -msgstr "正在根据防火墙端口转发和防火墙通信规则添加端口绕过规则..." - msgid "DNS Hijacking Mode is Dnsmasq Redirect..." msgstr "DNS 劫持模式为 Dnsmasq 转发..." @@ -3780,6 +3657,12 @@ msgstr "编辑模块信息" msgid "Subscription" msgstr "订阅" +msgid "HTTP Module" +msgstr "远程模块" + +msgid "File Module" +msgstr "本地模块" + msgid "Overwrite Module" msgstr "覆写模块" @@ -3841,4 +3724,28 @@ msgid "Serial Number" msgstr "序号" msgid "Set Custom Overwrite Script Failed," -msgstr "自定义覆写命令执行失败," \ No newline at end of file +msgstr "自定义覆写命令执行失败," + +msgid "Load YAML Override Block" +msgstr "加载 YAML 覆写模块" + +msgid "Invalid YAML Override format, skipped..." +msgstr "无效的 YAML 覆写格式,跳过..." + +msgid "Parse YAML Override failed:" +msgstr "YAML 覆写模块解析失败:" + +msgid "YAML overwrite failed:" +msgstr "YAML 覆写模块执行失败:" + +msgid "files selected" +msgstr "配置已选择" + +msgid "Global User-Agent" +msgstr "全局 User-Agent" + +msgid "depended package reinstalling..." +msgstr "依赖正在重新安装..." + +msgid "failed to install, please try to install it manually..." +msgstr "依赖安装失败,请重试手动安装..." diff --git a/luci-app-openclash/root/etc/init.d/openclash b/luci-app-openclash/root/etc/init.d/openclash index a645662e0..a1f67bef2 100755 --- a/luci-app-openclash/root/etc/init.d/openclash +++ b/luci-app-openclash/root/etc/init.d/openclash @@ -17,6 +17,7 @@ USE_PROCD=1 . $IPKG_INSTROOT/usr/share/openclash/ruby.sh . $IPKG_INSTROOT/usr/share/openclash/log.sh . $IPKG_INSTROOT/usr/share/openclash/uci.sh +. $IPKG_INSTROOT/usr/share/openclash/openclash_curl.sh [ -f /etc/openwrt_release ] && { FW4=$(command -v fw4) @@ -43,25 +44,19 @@ add_cron() { [ "$(tail -n1 /etc/crontabs/root | wc -l)" -eq 0 ] && [ -n "$(cat /etc/crontabs/root 2>/dev/null)" ] && echo >> /etc/crontabs/root [ -z "$(grep "openclash.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci_get_config "auto_update")" -eq 1 ] && [ "$(uci_get_config "config_auto_update_mode")" -ne 1 ] && echo "0 $(uci_get_config "auto_update_time" || 1) * * $(uci_get_config "config_update_week_time" || 0) /usr/share/openclash/openclash.sh" >> $CRON_FILE + [ "$(uci_get_config "auto_update")" -eq 1 ] && [ "$(uci_get_config "config_auto_update_mode")" -ne 1 ] && echo "0 $(uci_get_config "auto_update_time" || 1) * * $(uci_get_config "config_update_week_time" || 0) /usr/share/openclash/openclash.sh #openclash-cron-task" >> $CRON_FILE } - [ -z "$(grep "openclash_ipdb.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci_get_config "geo_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "geo_update_day_time" || 1) * * $(uci_get_config "geo_update_week_time" || 0) /usr/share/openclash/openclash_ipdb.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_geosite.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci_get_config "geosite_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "geosite_update_day_time" || 1) * * $(uci_get_config "geosite_update_week_time" || 0) /usr/share/openclash/openclash_geosite.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_geoip.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci_get_config "geoip_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "geoip_update_day_time" || 1) * * $(uci_get_config "geoip_update_week_time" || 0) /usr/share/openclash/openclash_geoip.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_geoasn.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci_get_config "geoasn_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "geoasn_update_day_time" || 1) * * $(uci_get_config "geoasn_update_week_time" || 0) /usr/share/openclash/openclash_geoasn.sh" >> $CRON_FILE + [ -z "$(grep "openclash_geo.sh" "$CRON_FILE" 2>/dev/null)" ] && { + [ "$(uci_get_config "geo_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "geo_update_day_time" || 1) * * $(uci_get_config "geo_update_week_time" || 0) /usr/share/openclash/openclash_geo.sh ipdb #openclash-cron-task" >> $CRON_FILE + [ "$(uci_get_config "geosite_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "geosite_update_day_time" || 1) * * $(uci_get_config "geosite_update_week_time" || 0) /usr/share/openclash/openclash_geo.sh geosite #openclash-cron-task" >> $CRON_FILE + [ "$(uci_get_config "geoip_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "geoip_update_day_time" || 1) * * $(uci_get_config "geoip_update_week_time" || 0) /usr/share/openclash/openclash_geo.sh geoip #openclash-cron-task" >> $CRON_FILE + [ "$(uci_get_config "geoasn_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "geoasn_update_day_time" || 1) * * $(uci_get_config "geoasn_update_week_time" || 0) /usr/share/openclash/openclash_geo.sh geoasn #openclash-cron-task" >> $CRON_FILE } [ -z "$(grep "openclash_chnroute.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci_get_config "chnr_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "chnr_update_day_time" || 1) * * $(uci_get_config "chnr_update_week_time" || 0) /usr/share/openclash/openclash_chnroute.sh" >> $CRON_FILE + [ "$(uci_get_config "chnr_auto_update")" -eq 1 ] && echo "0 $(uci_get_config "chnr_update_day_time" || 1) * * $(uci_get_config "chnr_update_week_time" || 0) /usr/share/openclash/openclash_chnroute.sh #openclash-cron-task" >> $CRON_FILE } [ -z "$(grep "/etc/init.d/openclash" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci_get_config "auto_restart")" -eq 1 ] && echo "0 $(uci_get_config "auto_restart_day_time" || 1) * * $(uci_get_config "auto_restart_week_time" || 0) /etc/init.d/openclash restart" >> $CRON_FILE + [ "$(uci_get_config "auto_restart")" -eq 1 ] && echo "0 $(uci_get_config "auto_restart_day_time" || 1) * * $(uci_get_config "auto_restart_week_time" || 0) /etc/init.d/openclash restart #openclash-cron-task" >> $CRON_FILE } config_load "openclash" @@ -73,13 +68,7 @@ add_cron() del_cron() { - sed -i '/openclash.sh/d' $CRON_FILE - sed -i '/openclash_ipdb.sh/d' $CRON_FILE - sed -i '/openclash_geoip.sh/d' $CRON_FILE - sed -i '/openclash_geosite.sh/d' $CRON_FILE - sed -i '/openclash_geoasn.sh/d' $CRON_FILE - sed -i '/openclash_chnroute.sh/d' $CRON_FILE - sed -i '/\/etc\/init.d\/openclash/d' $CRON_FILE + sed -i '/#openclash-cron-task/d' $CRON_FILE sed -i '/#openclash-overwrite-download/d' $CRON_FILE /etc/init.d/cron restart } >/dev/null 2>&1 @@ -93,7 +82,7 @@ save_dnsmasq_server() { } set_dnsmasq_server() { - if [ -z "$1" ] || [ "$1" == "127.0.0.1#${dns_port}" ]; then + if [ -z "$1" ] || [ "$1" == "127.0.0.1#${dns_port}" ]; then return fi @@ -113,10 +102,10 @@ load_ip_route_pass() { if [ "$china_ip_route" != "0" ] || [ "$disable_udp_quic" = "1" ]; then if [ "$enable_redirect_dns" != "2" ]; then mkdir -p ${DNSMASQ_CONF_DIR} - awk '!/^$/&&!/^#/&&!/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("'${settype}'=/%s/'${nftflag}'china_ip_route_pass'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list >>${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute_pass.conf + awk '!/^$/&&!/^#/&&!/(^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("'${settype}'=/%s/'${nftflag}'china_ip_route_pass'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list >>${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute_pass.conf for ip in $(uci_get_config "china_ip_route_pass"); do [ -z "$ip" ] && continue - echo "$ip" | awk '!/^$/&&!/^#/&&!/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("'${settype}'=/%s/'${nftflag}'china_ip_route_pass'" "'\n",$0)}' + echo "$ip" | awk '!/^$/&&!/^#/&&!/(^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("'${settype}'=/%s/'${nftflag}'china_ip_route_pass'" "'\n",$0)}' done >>${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute_pass.conf fi fi @@ -153,10 +142,10 @@ load_ip_route_pass() { if [ "$china_ip_route" != "0" ] || [ "$disable_udp_quic" = "1" ]; then if [ "$enable_redirect_dns" != "2" ]; then mkdir -p ${DNSMASQ_CONF_DIR} - awk '!/^$/&&!/^#/&&!/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("ipset=/%s/china_ip_route_pass'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list >>${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute_pass.conf + awk '!/^$/&&!/^#/&&!/(^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("ipset=/%s/china_ip_route_pass'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list >>${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute_pass.conf for ip in $(uci_get_config "china_ip_route_pass"); do [ -z "$ip" ] && continue - echo "$ip" | awk '!/^$/&&!/^#/&&!/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("ipset=/%s/china_ip_route_pass'" "'\n",$0)}' + echo "$ip" | awk '!/^$/&&!/^#/&&!/(^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("ipset=/%s/china_ip_route_pass'" "'\n",$0)}' done >>${DNSMASQ_CONF_DIR}/dnsmasq_openclash_chnroute_pass.conf fi fi @@ -217,11 +206,11 @@ change_dns() { if [ "$1" -eq 1 ] && [ "$ipv6_dns" -eq 1 ] && [ -n "$(ip6tables -t mangle -L 2>&1 | grep -o 'Chain')" ]; then #dnsmasq answer ipv6 uci -q set openclash.config.dnsmasq_filter_aaaa="$(uci -q get dhcp.@dnsmasq[0].filter_aaaa)" - uci -q set dhcp.@dnsmasq[0].filter_aaaa=0 - uci -q set openclash.config.filter_aaaa_dns=1 - else - uci -q set openclash.config.filter_aaaa_dns=0 - fi + uci -q set dhcp.@dnsmasq[0].filter_aaaa=0 + uci -q set openclash.config.filter_aaaa_dns=1 + else + uci -q set openclash.config.filter_aaaa_dns=0 + fi uci -q commit dhcp uci -q commit openclash @@ -710,24 +699,25 @@ check_core_status() ip_="ip -6" fi - #wait 120s most for tun interface start - while ( [ -n "$(pidof clash)" ] && [ -z "$($ip_ route list |grep utun)" ] && [ "$TUN_WAIT" -le 120 ] ) + #wait 300s most for core start + while ( [ -n "$(pidof clash)" ] && [ -z "$($ip_ route list |grep utun)" ] && [ "$TUN_WAIT" -le 300 ] ) do $ip_ link set utun up let TUN_WAIT++ sleep 1 done - if [ -n "$(pidof clash)" ] && [ -z "$($ip_ route list |grep utun)" ] && [ "$TUN_WAIT" -gt 120 ]; then + if [ -n "$(pidof clash)" ] && [ -z "$($ip_ route list |grep utun)" ] && [ "$TUN_WAIT" -gt 300 ]; then while ( [ -n "$(pidof clash)" ] && [ -z "$($ip_ route list |grep utun)" ] && [ "$TUN_RESTART" -le 3 ] ) do LOG_WARN "TUN Interface Start Failed, Try to Restart Again..." start_run_core - sleep 120 let TUN_RESTART++ + sleep 300 done if [ -n "$(pidof clash)" ] && [ -z "$($ip_ route list |grep utun)" ] && [ "$TUN_RESTART" -gt 3 ]; then - LOG_WARN "TUN Interface Start Failed, Please Check The Dependence or Try to Restart Again!" + LOG_ERROR "TUN Interface Start Failed, Please Check The Dependence or Try to Restart Again!" + LOG_ERROR "Core Initial Configuration Timeout, Please Check The Log Infos!" start_fail fi fi @@ -750,7 +740,7 @@ check_core_status() fi else reg4='^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$' - while ( [ -n "$(pidof clash)" ] && [ "$CORE_HTTP_CODE" != "200" ] && [ "$TUN_WAIT" -le 120 ] && [ -n "$(echo ${lan_ip} | grep -Eo ${reg4})" ] ) + while ( [ -n "$(pidof clash)" ] && [ "$CORE_HTTP_CODE" != "200" ] && [ "$TUN_WAIT" -le 300 ] && [ -n "$(echo ${lan_ip} | grep -Eo ${reg4})" ] ) do CORE_HTTP_CODE=$(curl -m 5 -o /dev/null -s -w '%{http_code}' -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XGET http://${lan_ip}:${cn_port}/group) let TUN_WAIT++ @@ -758,9 +748,10 @@ check_core_status() done if [ -z "$(echo ${lan_ip} | grep -Eo ${reg4})" ]; then LOG_ERROR "LAN IP Address Get Error, Please Check The LAN Interface Setting or Choose the Correct Interface in the Setting!" + start_fail fi - if [ "$CORE_HTTP_CODE" != "200" ]; then - LOG_ERROR "Core Status Abnormal, Please Check The Log Infos!" + if [ -n "$(pidof clash)" ] && [ "$CORE_HTTP_CODE" != "200" ]; then + LOG_ERROR "Core Initial Configuration Timeout, Please Check The Log Infos!" start_fail fi fi @@ -881,13 +872,21 @@ upnp_exclude() ipv6_suffix_to_nft_format() { local ipv6_with_prefix="$1" - if [[ "$ipv6_with_prefix" =~ / ]] || [ -n "$(echo ${ipv6_with_prefix} | grep '/')" ]; then - local suffix="${ipv6_with_prefix%%/*}" - local prefix="${ipv6_with_prefix##*/}" - echo "& $prefix == $suffix" - else - echo "$ipv6_with_prefix" + + if ! echo "$ipv6_with_prefix" | grep -q '/'; then + echo "{ $ipv6_with_prefix }" + return fi + + local addr="${ipv6_with_prefix%%/*}" + local suffix="${ipv6_with_prefix##*/}" + + if echo "$suffix" | grep -qE '^[0-9]+$'; then + echo "${addr}/${suffix}" + return + fi + + echo "& ${suffix} == ${addr}" } 2>/dev/null firewall_lan_ac_traffic() @@ -1094,332 +1093,6 @@ firewall_lan_ac_traffic() fi } -firewall_rule_exclude() -{ - local section="$1" - local name src dest dest_port dest_ip proto target enabled family - - config_get "name" "$section" "name" "" - config_get "src" "$section" "src" "" - config_get "dest" "$section" "dest" "" - config_get "dest_port" "$section" "dest_port" "" - config_get "dest_ip" "$section" "dest_ip" "" - config_get "proto" "$section" "proto" "" - config_get "target" "$section" "target" "" - config_get "enabled" "$section" "enabled" "" - config_get "family" "$section" "family" "" - - nft_ipv6=$(ipv6_suffix_to_nft_format "$dest_ip") - - if [ a"$target" != aACCEPT ] || [ a"$enabled" == a0 ]; then - return - fi - - local e_udp=false - local e_tcp=false - for p in $proto; do - if [ $p == tcp ]; then e_tcp=true; fi - if [ $p == udp ]; then e_udp=true; fi - if [ $p == all ]; then e_tcp=true; e_udp=true; fi - done - - if [ -z "$proto" ]; then e_tcp=true; e_udp=true; fi - - if ! $e_udp && ! $e_tcp ; then - return - fi - - if [ -n "$(echo $dest_port |grep -E '\-|\:' 2>/dev/null)" ]; then - LOG_WARN "Because there is a port range【$dest_port】in the firewall rule settings【$name】auto bypassing may cause the normal connection of the client not to reach the core, if necessary, please add your own in the access control!" - return - fi - - if [ -n "$FW4" ]; then - dest_ip=$(echo $dest_ip |sed "s/ /,/g" 2>/dev/null) - - if [ -z "$family" ] || [ "$family" == "ipv4" ]; then - if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then - for i in $dest_port; do - if $e_tcp ; then - nft insert rule inet fw4 openclash_output position 0 meta nfproto {ipv4} tcp sport "$i" counter return - if [ -z "$dest_ip" ]; then - nft insert rule inet fw4 openclash position 0 meta nfproto {ipv4} tcp sport "$i" counter return - else - nft insert rule inet fw4 openclash position 0 ip saddr { "$dest_ip" } tcp sport "$i" counter return - fi - fi - if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} udp sport "$i" counter return - if [ -z "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle position 0 meta nfproto {ipv4} udp sport "$i" counter return - else - nft insert rule inet fw4 openclash_mangle position 0 ip saddr { "$dest_ip" } udp sport "$i" counter return - fi - fi - done - elif [ "$en_mode_tun" -eq 1 ]; then - for i in $dest_port; do - if $e_tcp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} tcp sport "$i" counter return - if [ -z "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle position 0 meta nfproto {ipv4} tcp sport "$i" counter return - else - nft insert rule inet fw4 openclash_mangle position 0 ip saddr { "$dest_ip" } tcp sport "$i" counter return - fi - fi - if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 meta nfproto {ipv4} udp sport "$i" counter return - if [ -z "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle position 0 meta nfproto {ipv4} udp sport "$i" counter return - else - nft insert rule inet fw4 openclash_mangle position 0 ip saddr { "$dest_ip" } udp sport "$i" counter return - fi - fi - done - fi - fi - - if [ "$ipv6_enable" -eq 1 ]; then - if [ -z "$family" ] || [ "$family" == "ipv6" ]; then - for i in $dest_port; do - if $e_tcp ; then - if [ -z "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle_v6 position 0 meta nfproto {ipv6} tcp sport "$i" counter return - nft insert rule inet fw4 openclash_v6 position 0 meta nfproto {ipv6} tcp sport "$i" counter return - else - if [[ "$dest_ip" =~ , ]] || [ -n "$(echo ${dest_ip} | grep ',')" ]; then - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr { "$dest_ip" } tcp sport "$i" counter return - nft insert rule inet fw4 openclash_v6 position 0 ip6 saddr { "$dest_ip" } tcp sport "$i" counter return - else - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr "$nft_ipv6" tcp sport "$i" counter return - nft insert rule inet fw4 openclash_v6 position 0 ip6 saddr "$nft_ipv6" tcp sport "$i" counter return - fi - fi - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} tcp sport "$i" counter return - nft insert rule inet fw4 openclash_output_v6 position 0 meta nfproto {ipv6} tcp sport "$i" counter return - fi - if $e_udp ; then - if [ -z "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle_v6 position 0 meta nfproto {ipv6} udp sport "$i" counter return - else - if [[ "$dest_ip" =~ , ]] || [ -n "$(echo ${dest_ip} | grep ',')" ]; then - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr { "$dest_ip" } udp sport "$i" counter return - else - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr "$nft_ipv6" udp sport "$i" counter return - fi - fi - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 meta nfproto {ipv6} udp sport "$i" counter return - fi - done - fi - fi - - else - dest_port=$(echo $dest_port |sed "s/-/:/g" 2>/dev/null) - dest_ip=$(echo $dest_ip |sed "s/ /,/g" 2>/dev/null) - - if [ -z "$family" ] || [ "$family" == "ipv4" ]; then - if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then - for i in $dest_port; do - if $e_tcp ; then - iptables -t nat -I openclash_output -p tcp --sport "$i" -j RETURN - if [ -z "$dest_ip" ]; then - iptables -t nat -I openclash -p tcp --sport "$i" -j RETURN - else - iptables -t nat -I openclash -p tcp -s "$dest_ip" --sport "$i" -j RETURN - fi - fi - if $e_udp ; then - iptables -t mangle -I openclash_output -p udp --sport "$i" -j RETURN - if [ -z "$dest_ip" ]; then - iptables -t mangle -I openclash -p udp --sport "$i" -j RETURN - else - iptables -t mangle -I openclash -p udp -s "$dest_ip" --sport "$i" -j RETURN - fi - fi - done - elif [ "$en_mode_tun" -eq 1 ]; then - for i in $dest_port; do - if $e_tcp ; then - iptables -t mangle -I openclash_output -p tcp --sport "$i" -j RETURN - if [ -z "$dest_ip" ]; then - iptables -t mangle -I openclash -p tcp --sport "$i" -j RETURN - else - iptables -t mangle -I openclash -p tcp -s "$dest_ip" --sport "$i" -j RETURN - fi - fi - if $e_udp ; then - iptables -t mangle -I openclash_output -p udp --sport "$i" -j RETURN - if [ -z "$dest_ip" ]; then - iptables -t mangle -I openclash -p udp --sport "$i" -j RETURN - else - iptables -t mangle -I openclash -p udp -s "$dest_ip" --sport "$i" -j RETURN - fi - fi - done - fi - fi - - if [ "$ipv6_enable" -eq 1 ]; then - if [ -z "$family" ] || [ "$family" == "ipv6" ]; then - for i in $dest_port; do - if $e_tcp ; then - if [ -z "$dest_ip" ]; then - ip6tables -t mangle -I openclash -p tcp --sport "$i" -j RETURN - ip6tables -t nat -I openclash -p tcp --sport "$i" -j RETURN - else - ip6tables -t mangle -I openclash -s "$dest_ip" -p tcp --sport "$i" -j RETURN - ip6tables -t nat -I openclash -s "$dest_ip" -p tcp --sport "$i" -j RETURN - fi - ip6tables -t mangle -I openclash_output -p tcp --sport "$i" -j RETURN - ip6tables -t nat -I openclash_output -p tcp --sport "$i" -j RETURN - fi - if $e_udp ; then - if [ -z "$dest_ip" ]; then - ip6tables -t mangle -I openclash -p udp --sport "$i" -j RETURN - else - ip6tables -t mangle -I openclash -s "$dest_ip" -p udp --sport "$i" -j RETURN - fi - ip6tables -t mangle -I openclash_output -p udp --sport "$i" -j RETURN - fi - done - fi - fi - fi -} >/dev/null 2>&1 - -firewall_redirect_exclude() -{ - local section="$1" - local name src_dport dest_port dest_ip proto enabled - config_get "name" "$section" "name" "" - config_get "src_dport" "$section" "src_dport" "" - config_get "dest_port" "$section" "dest_port" "" - config_get "dest_ip" "$section" "dest_ip" "" - config_get "proto" "$section" "proto" "" - config_get "enabled" "$section" "enabled" "" - - if [ -z "$src_dport" ] || [ a"$enabled" == a0 ]; then - return - fi - - if [ -n "$(echo $dest_port |grep -E '\-|\:' 2>/dev/null)" ]; then - LOG_WARN "Because there is a port range【$dest_port】in the firewall rule settings【$name】auto bypassing may cause the normal connection of the client not to reach the core, if necessary, please add your own in the access control!" - return - fi - - local e_udp=false - local e_tcp=false - for p in $proto; do - if [ $p == tcp ]; then e_tcp=true; fi - if [ $p == udp ]; then e_udp=true; fi - if [ $p == all ]; then e_tcp=true; e_udp=true; fi - done - - if [ -z "$proto" ]; then e_tcp=true; e_udp=true; fi - - if ! $e_udp && ! $e_tcp ; then - return - fi - - if [ -n "$FW4" ]; then - if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then - if $e_tcp ; then - nft insert rule inet fw4 openclash_output position 0 ip saddr { "$dest_ip" } tcp sport "$dest_port" counter return - fi - if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 ip saddr { "$dest_ip" } udp sport "$dest_port" counter return - if [ -n "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle position 0 ip saddr { "$dest_ip" } udp sport "$dest_port" counter return - fi - fi - elif [ "$en_mode_tun" -eq 1 ]; then - if $e_tcp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 ip saddr { "$dest_ip" } tcp sport "$dest_port" counter return - if [ -n "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle position 0 ip saddr { "$dest_ip" } tcp sport "$dest_port" counter return - fi - fi - if $e_udp ; then - nft insert rule inet fw4 openclash_mangle_output position 0 ip saddr { "$dest_ip" } udp sport "$dest_port" counter return - if [ -n "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle position 0 ip saddr { "$dest_ip" } udp sport "$dest_port" counter return - fi - fi - fi - - if [ "$ipv6_enable" -eq 1 ]; then - if $e_tcp ; then - if [ -n "$dest_ip" ]; then - if [ "$ipv6_mode" -eq 1 ] || [ "$ipv6_mode" -eq 3 ]; then - nft insert rule inet fw4 openclash_v6 position 0 ip6 saddr { "$dest_ip" } tcp sport "$dest_port" counter return - nft insert rule inet fw4 openclash_output_v6 position 0 ip6 saddr { "$dest_ip" } tcp sport "$dest_port" counter return - else - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr { "$dest_ip" } tcp sport "$dest_port" counter return - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 ip6 saddr { "$dest_ip" } tcp sport "$dest_port" counter return - fi - fi - fi - if $e_udp ; then - if [ -n "$dest_ip" ]; then - nft insert rule inet fw4 openclash_mangle_v6 position 0 ip6 saddr { "$dest_ip" } udp sport "$dest_port" counter return - nft insert rule inet fw4 openclash_mangle_output_v6 position 0 ip6 saddr { "$dest_ip" } udp sport "$dest_port" counter return - fi - fi - fi - else - dest_port=$(echo $dest_port |sed "s/-/:/g" 2>/dev/null) - dest_ip=$(echo $dest_ip |sed "s/ /,/g" 2>/dev/null) - [ -n "$dest_ip" ] && dest_ip="-s ${dest_ip}" - - if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 2 ]; then - if $e_tcp ; then - iptables -t nat -I openclash_output "$dest_ip" -p tcp --sport "$dest_port" -j RETURN - fi - if $e_udp ; then - iptables -t mangle -I openclash_output "$dest_ip" -p udp --sport "$dest_port" -j RETURN - if [ -n "$dest_ip" ]; then - iptables -t mangle -I openclash "$dest_ip" -p udp --sport "$dest_port" -j RETURN - fi - fi - elif [ "$en_mode_tun" -eq 1 ]; then - if $e_tcp ; then - iptables -t mangle -I openclash_output -p tcp "$dest_ip" --sport "$dest_port" -j RETURN - if [ -n "$dest_ip" ]; then - iptables -t mangle -I openclash -p tcp "$dest_ip" --sport "$dest_port" -j RETURN - fi - fi - if $e_udp ; then - iptables -t mangle -I openclash_output -p udp "$dest_ip" --sport "$dest_port" -j RETURN - if [ -n "$dest_ip" ]; then - iptables -t mangle -I openclash -p udp "$dest_ip" --sport "$dest_port" -j RETURN - fi - fi - fi - - if [ "$ipv6_enable" -eq 1 ] && [ -n "$(ip6tables -t mangle -L 2>&1 | grep -o 'Chain')" ]; then - if $e_tcp ; then - if [ -n "$dest_ip" ]; then - if [ "$ipv6_mode" -eq 1 ] || [ "$ipv6_mode" -eq 3 ]; then - ip6tables -t nat -I openclash -p tcp "$dest_ip" --sport "$dest_port" -j RETURN - ip6tables -t nat -I openclash_output -p tcp "$dest_ip" --sport "$dest_port" -j RETURN - else - ip6tables -t mangle -I openclash -p tcp "$dest_ip" --sport "$dest_port" -j RETURN - ip6tables -t mangle -I openclash_output -p tcp "$dest_ip" --sport "$dest_port" -j RETURN - fi - fi - - fi - if $e_udp ; then - if [ -n "$dest_ip" ]; then - ip6tables -t mangle -I openclash -p udp "$dest_ip" --sport "$dest_port" -j RETURN - ip6tables -t mangle -I openclash_output -p udp "$dest_ip" --sport "$dest_port" -j RETURN - fi - fi - fi - fi -} >/dev/null 2>&1 - set_firewall() { @@ -1451,7 +1124,7 @@ if [ -n "$common_ports" ] && [ "$common_ports" != "0" ]; then fi case $enable_redirect_dns in - "1") + "1") LOG_TIP "DNS Hijacking Mode is Dnsmasq Redirect..." ;; "2") @@ -2337,10 +2010,10 @@ if [ -z "$FW4" ]; then if [ "$enable_redirect_dns" != "2" ]; then echo "create china_ip_route_pass hash:net family inet hashsize 1024 maxelem 1000000" >/tmp/openclash_china_ip_route_pass.list - awk '!/^$/&&!/^#/&&/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("add china_ip_route_pass %s'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list >>/tmp/openclash_china_ip_route_pass.list + awk '!/^$/&&!/^#/&&/(^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("add china_ip_route_pass %s'" "'\n",$0)}' /etc/openclash/custom/openclash_custom_chnroute_pass.list >>/tmp/openclash_china_ip_route_pass.list for ip in $(uci_get_config "china_ip_route_pass"); do [ -z "$ip" ] && continue - echo "$ip" | awk '!/^$/&&!/^#/&&/(^([1-9]|1[0-9]|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[1-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("add china_ip_route_pass %s'" "'\n",$0)}' + echo "$ip" | awk '!/^$/&&!/^#/&&/(^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])((\/[0-9][0-9])?)$/{printf("add china_ip_route_pass %s'" "'\n",$0)}' done >>/tmp/openclash_china_ip_route_pass.list 2>/dev/null ipset -! flush china_ip_route_pass ipset -! restore /dev/null 2>&1" + cron_cmd="$cron source /usr/share/openclash/openclash_curl.sh && DOWNLOAD_FILE_CURL \"$url\" \"/etc/openclash/overwrite/$name\" \"/etc/openclash/overwrite/$name\"" if [ "$restart_flag" = "1" ]; then - cron_cmd="$cron_cmd && /etc/init.d/openclash restart" + cron_cmd="$cron_cmd && [ \"\$?\" -eq 0 ] && /etc/init.d/openclash restart" fi cron_cmd="$cron_cmd #openclash-overwrite-download" @@ -3284,6 +2953,26 @@ check_type() { esac } +overwrite_config_match_check() +{ + local section="$1" name config + config_get "name" "$section" "name" "" + config_get "config" "$section" "config" "" + + [ -z "$name" ] || [ "$name" != "$2" ] || [ -z "$config" ] && return + + config_list_foreach "$section" "config" overwrite_config_match_item +} + +overwrite_config_match_item() +{ + local config_path_item="$1" + + [ -z "$config_path_item" ] && return + [ "$config_path_item" = "all" ] && OVERWRITE_CONFIG_MATCHED=1 && return + [ "$config_path_item" = "$(uci_get_config "config_path")" ] && OVERWRITE_CONFIG_MATCHED=1 +} + overwrite_file() { clear_overwrite_set @@ -3298,101 +2987,102 @@ overwrite_file() EOF allowed_keys_types="\ - CONFIG_FILE:string \ - CORE_TYPE:string \ - LAN_INTERFACE_NAME:string \ - INTERFACE_NAME:string \ - CN_PORT:int \ - DA_PASSWORD:string \ - PROXY_PORT:int \ - TPROXY_PORT:int \ - HTTP_PORT:int \ - SOCKS_PORT:int \ - MIXED_PORT:int \ - DNS_PORT:int \ - ENABLE_REDIRECT_DNS:int_bool \ - ENABLE_CUSTOM_DNS:int_bool \ - APPEND_DEFAULT_DNS:int_bool \ - APPEND_WAN_DNS:int_bool \ - STORE_FAKEIP:int_bool \ - CUSTOM_FAKEIP_FILTER:int_bool \ - CUSTOM_FAKEIP_FILTER_MODE:string \ - FAKEIP_RANGE:string \ - FAKEIP_RANGE6:string \ - ENABLE_RESPECT_RULES:int_bool \ - CUSTOM_NAME_POLICY:int_bool \ - CUSTOM_HOST:int_bool \ - CUSTOM_FALLBACK_FILTER:int_bool \ - IPV6_ENABLE:int_bool \ - IPV6_DNS:int_bool \ - IPV6_MODE:int \ - ENABLE_V6_UDP_PROXY:int_bool \ - EN_MODE:string \ - ENABLE_UDP_PROXY:int_bool \ - DISABLE_UDP_QUIC:int_bool \ - ROUTER_SELF_PROXY:int_bool \ - STACK_TYPE:string \ - PROXY_MODE:string \ - INTRANET_ALLOWED:int_bool \ - INTRANET_ALLOWED_WAN_NAME:string \ - BYPASS_GATEWAY_COMPATIBLE:int_bool \ - COMMON_PORTS:string \ - CHINA_IP_ROUTE:int \ - CHINA_IP6_ROUTE:int \ - CHNR_AUTO_UPDATE:int_bool \ - CHNR_UPDATE_WEEK_TIME:string \ - CHNR_UPDATE_DAY_TIME:string \ - CHNR_CUSTOM_URL:string \ - CHNR6_CUSTOM_URL:string \ - CHINA_IP_ROUTE_PASS:string \ - CHINA_IP6_ROUTE_PASS:string \ - ENABLE_META_SNIFFER:int_bool \ - ENABLE_META_SNIFFER_CUSTOM:int_bool \ - ENABLE_META_SNIFFER_PURE_IP:int_bool \ - ENABLE_TCP_CONCURRENT:int_bool \ - FIND_PROCESS_MODE:string \ - ENABLE_UNIFIED_DELAY:int_bool \ - ENABLE_RULE_PROXY:int_bool \ - ENABLE_CUSTOM_CLASH_RULES:int_bool \ - TOLERANCE:int \ - URLTEST_INTERVAL_MOD:int \ - URLTEST_ADDRESS_MOD:string \ - GITHUB_ADDRESS_MOD:string \ - AUTO_SMART_SWITCH:int_bool \ - SMART_ENABLE_LGBM:int_bool \ - SMART_POLICY_PRIORITY:string \ - SMART_COLLECT:int_bool \ - SMART_COLLECT_SIZE:int \ - SMART_COLLECT_RATE:string \ - SMART_PREFER_ASN:int_bool \ - LGBM_AUTO_UPDATE:int_bool \ - LGBM_UPDATE_INTERVAL:int \ - LGBM_CUSTOM_URL:string \ - ENABLE_GEOIP_DAT:int_bool \ - GEODATA_LOADER:string \ - GEO_AUTO_UPDATE:int_bool \ - GEO_UPDATE_WEEK_TIME:string \ - GEO_UPDATE_DAY_TIME:string \ - GEO_CUSTOM_URL:string \ - GEOIP_AUTO_UPDATE:int_bool \ - GEOIP_UPDATE_WEEK_TIME:string \ - GEOIP_UPDATE_DAY_TIME:string \ - GEOIP_CUSTOM_URL:string \ - GEOSITE_AUTO_UPDATE:int_bool \ - GEOSITE_UPDATE_WEEK_TIME:string \ - GEOSITE_UPDATE_DAY_TIME:string \ - GEOSITE_CUSTOM_URL:string \ - GEOASN_AUTO_UPDATE:int_bool \ - GEOASN_UPDATE_WEEK_TIME:string \ - GEOASN_UPDATE_DAY_TIME:string \ - GEOASN_CUSTOM_URL:string \ - SMALL_FLASH_MEMORY:int_bool \ - DISABLE_QUIC_GO_GSO:int_bool \ - DELAY_START:int \ - SKIP_PROXY_ADDRESS:int_bool \ - SUB_INFO_URL:string \ - DOWNLOAD_FILE:string \ - RESTART:bool \ + APPEND_DEFAULT_DNS:int_bool \ + APPEND_WAN_DNS:int_bool \ + AUTO_SMART_SWITCH:int_bool \ + BYPASS_GATEWAY_COMPATIBLE:int_bool \ + CHINA_IP_ROUTE:int \ + CHINA_IP_ROUTE_PASS:string \ + CHINA_IP6_ROUTE:int \ + CHINA_IP6_ROUTE_PASS:string \ + CHNR_AUTO_UPDATE:int_bool \ + CHNR_CUSTOM_URL:string \ + CHNR6_CUSTOM_URL:string \ + CHNR_UPDATE_DAY_TIME:string \ + CHNR_UPDATE_WEEK_TIME:string \ + COMMON_PORTS:string \ + CONFIG_FILE:string \ + CORE_TYPE:string \ + CN_PORT:int \ + CUSTOM_FALLBACK_FILTER:int_bool \ + CUSTOM_FAKEIP_FILTER:int_bool \ + CUSTOM_FAKEIP_FILTER_MODE:string \ + CUSTOM_HOST:int_bool \ + CUSTOM_NAME_POLICY:int_bool \ + DA_PASSWORD:string \ + DELAY_START:int \ + DISABLE_QUIC_GO_GSO:int_bool \ + DISABLE_UDP_QUIC:int_bool \ + DNS_PORT:int \ + DOWNLOAD_FILE:string \ + EN_MODE:string \ + ENABLE_CUSTOM_CLASH_RULES:int_bool \ + ENABLE_CUSTOM_DNS:int_bool \ + ENABLE_GEOIP_DAT:int_bool \ + ENABLE_META_SNIFFER:int_bool \ + ENABLE_META_SNIFFER_CUSTOM:int_bool \ + ENABLE_META_SNIFFER_PURE_IP:int_bool \ + ENABLE_REDIRECT_DNS:int_bool \ + ENABLE_RESPECT_RULES:int_bool \ + ENABLE_RULE_PROXY:int_bool \ + ENABLE_TCP_CONCURRENT:int_bool \ + ENABLE_UDP_PROXY:int_bool \ + ENABLE_UNIFIED_DELAY:int_bool \ + ENABLE_V6_UDP_PROXY:int_bool \ + FIND_PROCESS_MODE:string \ + FAKEIP_RANGE:string \ + FAKEIP_RANGE6:string \ + GEOASN_AUTO_UPDATE:int_bool \ + GEOASN_CUSTOM_URL:string \ + GEOASN_UPDATE_DAY_TIME:string \ + GEOASN_UPDATE_WEEK_TIME:int \ + GEO_CUSTOM_URL:string \ + GEODATA_LOADER:string \ + GEOIP_AUTO_UPDATE:int_bool \ + GEOIP_CUSTOM_URL:string \ + GEOIP_UPDATE_DAY_TIME:int \ + GEOIP_UPDATE_WEEK_TIME:int \ + GEO_AUTO_UPDATE:int_bool \ + GEO_UPDATE_DAY_TIME:string \ + GEO_UPDATE_WEEK_TIME:int \ + GEOSITE_AUTO_UPDATE:int_bool \ + GEOSITE_CUSTOM_URL:string \ + GEOSITE_UPDATE_DAY_TIME:string \ + GEOSITE_UPDATE_WEEK_TIME:int \ + GITHUB_ADDRESS_MOD:string \ + GLOBAL_UA:string \ + HTTP_PORT:int \ + INTRANET_ALLOWED:int_bool \ + INTRANET_ALLOWED_WAN_NAME:string \ + INTERFACE_NAME:string \ + IPV6_DNS:int_bool \ + IPV6_ENABLE:int_bool \ + IPV6_MODE:int \ + LAN_INTERFACE_NAME:string \ + LGBM_AUTO_UPDATE:int_bool \ + LGBM_CUSTOM_URL:string \ + LGBM_UPDATE_INTERVAL:int \ + MIXED_PORT:int \ + PROXY_MODE:string \ + PROXY_PORT:int \ + ROUTER_SELF_PROXY:int_bool \ + SMART_COLLECT:int_bool \ + SMART_COLLECT_RATE:string \ + SMART_COLLECT_SIZE:int \ + SMART_ENABLE_LGBM:int_bool \ + SMART_POLICY_PRIORITY:string \ + SMART_PREFER_ASN:int_bool \ + SKIP_PROXY_ADDRESS:int_bool \ + SMALL_FLASH_MEMORY:int_bool \ + SOCKS_PORT:int \ + STACK_TYPE:string \ + STORE_FAKEIP:int_bool \ + SUB_INFO_URL:string \ + TOLERANCE:int \ + TPROXY_PORT:int \ + URLTEST_ADDRESS_MOD:string \ + URLTEST_INTERVAL_MOD:int \ + RESTART:bool \ " allowed_keys_list=$(echo "$allowed_keys_types" | tr ' ' '\n' | cut -d: -f1) @@ -3412,7 +3102,11 @@ EOF name=$(echo "$entry" | cut -d'|' -f2) sid=$(echo "$entry" | cut -d'|' -f3) enabled_flag=$(echo "$entry" | cut -d'|' -f4) + OVERWRITE_CONFIG_MATCHED=0 + config_load "openclash" + config_foreach overwrite_config_match_check "config_overwrite" "$name" + [ "$OVERWRITE_CONFIG_MATCHED" -eq 0 ] && continue [ "$enabled_flag" != "1" ] && continue [ -z "$name" ] && continue @@ -3444,14 +3138,16 @@ EOF in_general=0 in_overwrite=0 + in_yaml=0 download_file_lines="" while IFS= read -r line || [ -n "$line" ]; do trimmed=$(printf "%s" "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') case "$trimmed" in - "[General]"*) in_general=1; in_overwrite=0; continue;; - "[Overwrite]"*) in_general=0; in_overwrite=1; continue;; - "["*"]"*) in_general=0; in_overwrite=0; continue;; + "[General]"*) in_general=1; in_overwrite=0; in_yaml=0; continue;; + "[Overwrite]"*) in_general=0; in_overwrite=1; in_yaml=0; continue;; + "[YAML]"*) in_general=0; in_overwrite=0; in_yaml=1; continue;; + "["*"]"*) in_general=0; in_overwrite=0; in_yaml=0; continue;; esac [ -z "$trimmed" ] && continue echo "$trimmed" | grep -qE '^[#;]' && continue @@ -3461,13 +3157,16 @@ EOF key_u=$(printf "%s" "$key" | tr 'a-z' 'A-Z' | tr -d ' ') if printf "%s" "$key_u" | grep -q "^DOWNLOAD_FILE$"; then download_file_lines="${download_file_lines} -${trimmed}" + ${trimmed}" fi fi done < "$file" download_failed=0 - echo "$download_file_lines" | sed '/^$/d' | while IFS= read -r trimmed; do + download_file_lines_tmp="/tmp/openclash_download_file_lines.$$" + printf "%s\n" "$download_file_lines" | sed '/^$/d' > "$download_file_lines_tmp" + + while IFS= read -r trimmed; do key=$(printf "%s" "$trimmed" | awk -F'=' '{gsub(/[[:space:]]+$/,"",$1); print $1}' | sed 's/[[:space:]]*$//;s/ //g') val=$(echo "$trimmed" | sed 's/^[^=]*=[[:space:]]*//') key_u=$(printf "%s" "$key" | tr 'a-z' 'A-Z' | tr -d ' ') @@ -3491,20 +3190,13 @@ ${trimmed}" LOG_TIP "DOWNLOAD FILE for【Download Job => file: $file, url: $url, path: $path, ua: ${ua:-null}, force: ${force:-false}】" if command -v curl >/dev/null 2>&1; then if [ -n "$ua" ]; then - curl -fsSL -m 30 -H "User-Agent: $ua" "$url" -o "$path" >/dev/null 2>&1 + DOWNLOAD_FILE_CURL "$url" "$path" "$path" "$ua" else - curl -fsSL -m 30 "$url" -o "$path" >/dev/null 2>&1 - fi - rc=$? - else - if [ -n "$ua" ]; then - wget -T 30 --user-agent="$ua" -qO "$path" "$url" >/dev/null 2>&1 - else - wget -T 30 -qO "$path" "$url" >/dev/null 2>&1 + DOWNLOAD_FILE_CURL "$url" "$path" "$path" fi rc=$? fi - if [ $rc -ne 0 ] && [ ! -f "$path" ]; then + if [ $rc -eq 1 ] || [ ! -f "$path" ]; then LOG_ERROR "DOWNLOAD FILE failed for【Download Job => file: $file, url: $url, path: $path】" download_failed=1 break @@ -3514,29 +3206,34 @@ ${trimmed}" LOG_TIP "Add Cron for【Cron Job => time: $cron, url: $url, path: $path, restart: ${restart:-false}】" if ! grep -q "$url" $CRON_FILE 2>/dev/null; then if [ -n "$ua" ]; then - cron_cmd="$cron curl -fsSL -m 30 -H \"User-Agent: $ua\" \"$url\" -o \"$path\" >/dev/null 2>&1" + cron_cmd="$cron source /usr/share/openclash/openclash_curl.sh && DOWNLOAD_FILE_CURL \"$url\" \"$path\" \"$path\" \"$ua\"" else - cron_cmd="$cron curl -fsSL -m 30 \"$url\" -o \"$path\" >/dev/null 2>&1" + cron_cmd="$cron source /usr/share/openclash/openclash_curl.sh && DOWNLOAD_FILE_CURL \"$url\" \"$path\" \"$path\"" fi if [ "$restart" = "1" ] || [ "$restart" = "true" ]; then - cron_cmd="$cron_cmd && /etc/init.d/openclash restart" + cron_cmd="$cron_cmd && [ \"\$?\" -eq 0 ] && /etc/init.d/openclash restart" fi cron_cmd="$cron_cmd #openclash-overwrite-download" echo "$cron_cmd" >> $CRON_FILE fi fi - done + done < "$download_file_lines_tmp" + + rm -f "$download_file_lines_tmp" [ "$download_failed" -eq 1 ] && continue in_general=0 in_overwrite=0 + in_yaml=0 + yaml_content="" while IFS= read -r line || [ -n "$line" ]; do trimmed=$(printf "%s" "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') case "$trimmed" in - "[General]"*) in_general=1; in_overwrite=0; continue;; - "[Overwrite]"*) in_general=0; in_overwrite=1; continue;; - "["*"]"*) in_general=0; in_overwrite=0; continue;; + "[General]"*) in_general=1; in_overwrite=0; in_yaml=0; continue;; + "[Overwrite]"*) in_general=0; in_overwrite=1; in_yaml=0; continue;; + "[YAML]"*) in_general=0; in_overwrite=0; in_yaml=1; continue;; + "["*"]"*) in_general=0; in_overwrite=0; in_yaml=0; continue;; esac [ -z "$trimmed" ] && continue echo "$trimmed" | grep -qE '^[#;]' && continue @@ -3581,8 +3278,6 @@ ${trimmed}" val_key=$(eval "echo \"$val_clean\"") if check_type "$key_u" "$val_clean"; then uci -q set openclash.@overwrite[0]."$key_l"="$val_key" - else - LOG_WARN "skip General key type error【General Key => $name: $key_u, value: $val_key】" fi else LOG_WARN "skip General key not allowed【General Key => $name: $key_u】" @@ -3595,14 +3290,53 @@ ${trimmed}" else LOG_WARN "skip invalid Overwrite command【Ruby Script => $name: $trimmed】" fi + elif [ "$in_yaml" -eq 1 ]; then + yaml_content="${yaml_content}$(eval "echo \"$line\"")"$'\n' fi done < "$file" + if [ -n "$yaml_content" ]; then + LOG_TIP "Load YAML Override Block【YAML Block => $name】" + + cat >> "$overwrite_script" <<'EOF' +ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " + # YAML Override Block Processing + begin + yaml_override_content = <<-'YAML_CONTENT' +EOF + + echo "$yaml_content" >> "$overwrite_script" + + cat >> "$overwrite_script" <<'EOF' + YAML_CONTENT + + begin + yaml_data = YAML.load(yaml_override_content) + + if yaml_data.is_a?(Hash) + Value = YAML.load_file('$CONFIG_FILE') + Overwrite_Value = YAML.overwrite(Value, yaml_data) + File.open('$CONFIG_FILE', 'w') do |f| + YAML.dump(Overwrite_Value, f) + end + else + YAML.LOG_WARN('Invalid YAML Override format, skipped...') + end + rescue => e + YAML.LOG_ERROR('Parse YAML Override failed:【%s】' % [e.message]) + end + rescue => e + YAML.LOG_ERROR('Parse YAML Override failed:【%s】' % [e.message]) + end +" >> $LOG_FILE 2>&1 +EOF + fi + cat >> "$overwrite_script" <<'EOF' if [ -f "/tmp/yaml_openclash_ruby_parts/$OPENCLASH_OVERWRITE_SID" ]; then ruby_code=$(cat "/tmp/yaml_openclash_ruby_parts/$OPENCLASH_OVERWRITE_SID") ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " - Value = YAML.load_file('$CONFIG_FILE'); + Value = YAML.load_file('$CONFIG_FILE') threads = [] $ruby_code threads.each(&:join) @@ -3670,7 +3404,12 @@ get_config() else fakeip_range6=$(uci_get_config "fakeip_range6") fi - [ -z "$fakeip_range6" ] && fakeip_range6="fdfe:dcba:9876::1/64" + if [ -z "$fakeip_range6" ]; then + fakeip_range6="fdfe:dcba:9876::1/64" + fake_ip_range6_enable=0 + else + fake_ip_range6_enable=1 + fi lan_interface_name=$(uci_get_config "lan_interface_name" || echo 0) if [ "$lan_interface_name" = "0" ]; then @@ -3722,6 +3461,7 @@ get_config() geoip_custom_url=$(uci_get_config "geoip_custom_url" || echo 0) geosite_custom_url=$(uci_get_config "geosite_custom_url" || echo 0) geoasn_custom_url=$(uci_get_config "geoasn_custom_url" || echo 0) + global_ua=$(uci_get_config "global_ua" || echo 0) auto_smart_switch=$(uci_get_config "auto_smart_switch" || echo 0) lgbm_auto_update=$(uci_get_config "lgbm_auto_update" || echo 0) lgbm_custom_url=$(uci_get_config "lgbm_custom_url" || echo "https://github.com/vernesong/mihomo/releases/download/LightGBM-Model/Model.bin") @@ -3742,7 +3482,7 @@ start_service() enable=$(uci_get_config "enable") [ "$enable" != "1" ] && LOG_WARN "OpenClash Now Disabled, Need Start From Luci Page, Exit..." && SLOG_CLEAN && exit 0 - if /etc/init.d/openclash status >/dev/null 2>&1; then + if procd_running "openclash" >/dev/null; then LOG_TIP "OpenClash Already Running, Exit..." exit 0 fi @@ -3772,7 +3512,8 @@ start_service() "$find_process_mode" "$fakeip_range" "$ipv6_mode" "$stack_type_v6" "$enable_unified_delay"\ "$enable_respect_rules" "$custom_fakeip_filter_mode" "$iptables_compat" "$disable_quic_go_gso" "$cors_allow"\ "$geo_custom_url" "$geoip_custom_url" "$geosite_custom_url" "$geoasn_custom_url"\ - "$lgbm_auto_update" "$lgbm_custom_url" "$lgbm_update_interval" "$smart_collect" "$smart_collect_size" "$fakeip_range6" + "$lgbm_auto_update" "$lgbm_custom_url" "$lgbm_update_interval" "$smart_collect" "$smart_collect_size"\ + "$fakeip_range6" "$fake_ip_range6_enable" "$global_ua" /usr/share/openclash/yml_rules_change.sh \ "$enable_custom_clash_rules" "$TMP_CONFIG_FILE"\ @@ -3810,6 +3551,37 @@ start_service() done fi fi + + #provider path + ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " + begin + threads = [] + Value = YAML.load_file('$TMP_CONFIG_FILE') + provider_configs = {'proxy-providers' => 'proxy_provider', 'rule-providers' => 'rule_provider'} + provider_configs.each do |provider_type, path_prefix| + if Value.key?(provider_type) && Value[provider_type].is_a?(Hash) + Value[provider_type].each do |name, config| + threads << Thread.new { + begin + path_val = config['path'] + if path_val && !path_val.to_s.match?(%r{^\./#{Regexp.escape(path_prefix)}/}) + config['path'] = File.join('.', path_prefix, File.basename(path_val.to_s)) + elsif (path_val.nil? || path_val.to_s == '') && config['type'].to_s == 'http' + config['path'] = File.join('.', path_prefix, name.to_s) + end + rescue => e + YAML.LOG_ERROR('Edit Provider Path Failed,【%s】' % [e.message]) + end + } + end + end + end + threads.each(&:join) + File.open('$TMP_CONFIG_FILE', 'w') { |f| YAML.dump(Value, f) } + rescue Exception => e + YAML.LOG_ERROR('Edit Provider Path Failed,【%s】' % [e.message]) + end + " >> $LOG_FILE 2>&1 else LOG_OUT "Step 3: Quick Start Mode, Skip Modify The Config File..." fi @@ -3835,7 +3607,7 @@ start_service() stop_service() { - enable=$(uci_get_config "enable") + get_config LOG_TIP "OpenClash Stoping..." LOG_OUT "Step 1: Backup The Current Groups State..." @@ -3857,6 +3629,12 @@ stop_service() done # prevent respawn during stopping procd_kill "openclash" + for i in $(seq 1 10); do + procd_running "openclash" >/dev/null && sleep 1 || break + done + if procd_running "openclash" >/dev/null; then + kill -9 $(pidof clash) 2>/dev/null || true + fi LOG_OUT "Step 4: Restart Dnsmasq..." revert_dnsmasq @@ -3877,6 +3655,7 @@ stop_service() del_cron clear_overwrite_set + rm -rf /tmp/openclash_jobs rm -rf /tmp/yaml_* } >/dev/null 2>&1 @@ -3885,7 +3664,6 @@ stop_service() revert_dnsmasq() { - get_config redirect_dns=$(uci_get_config "redirect_dns") dnsmasq_server=$(uci_get_config "dnsmasq_server") dnsmasq_noresolv=$(uci_get_config "dnsmasq_noresolv") @@ -3903,20 +3681,20 @@ restart() echo "OpenClash Restart..." LOG_TIP "OpenClash Restart..." check_run_quick - stop + stop_service start } start_watchdog() { procd_open_instance "openclash-watchdog" - procd_set_param command "/usr/share/openclash/openclash_watchdog.sh" - procd_close_instance + procd_set_param command "/usr/share/openclash/openclash_watchdog.sh" + procd_close_instance } reload_service() { - enable=$(uci_get_config "enable") + get_config MAX_RELOAD=10 if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "firewall" ]; then #sleep for avoiding system unready @@ -3943,14 +3721,12 @@ reload_service() LOG_OUT "【${CUR_RELOAD_NUM}/$MAX_RELOAD】Reload OpenClash Firewall Rules..." revert_firewall do_run_mode - get_config check_core_status & fi if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "manual" ]; then LOG_OUT "Manually Reload Firewall Rules..." revert_firewall do_run_mode - get_config check_core_status & fi if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "revert" ]; then @@ -3960,7 +3736,6 @@ reload_service() fi if pidof clash >/dev/null && [ "$enable" == "1" ] && [ "$1" == "restore" ]; then do_run_mode - get_config # used for config subscribe, not background for avoiding system unready check_core_status fi @@ -3968,12 +3743,11 @@ reload_service() boot() { - delay_start=$(uci_get_config "delay_start" || echo 0) - enable=$(uci_get_config "enable") - if [ "$delay_start" -gt 0 ] && [ "$enable" == "1" ]; then - LOG_OUT "Enable Delay Start, OpenClash Will Start After【$delay_start】Seconds..." - sleep "$delay_start" - fi - restart -} - + delay_start=$(uci_get_config "delay_start" || echo 0) + enable=$(uci_get_config "enable") + if [ "$delay_start" -gt 0 ] && [ "$enable" == "1" ]; then + LOG_OUT "Enable Delay Start, OpenClash Will Start After【$delay_start】Seconds..." + sleep "$delay_start" + fi + restart +} \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/Country.mmdb b/luci-app-openclash/root/etc/openclash/Country.mmdb index 7ba139d20..7a9273add 100644 Binary files a/luci-app-openclash/root/etc/openclash/Country.mmdb and b/luci-app-openclash/root/etc/openclash/Country.mmdb differ diff --git a/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset b/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset index 936f8a9dd..c42682bee 100644 --- a/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset +++ b/luci-app-openclash/root/etc/openclash/china_ip6_route.ipset @@ -1,473 +1,130 @@ -2001:250::/35 -2001:250:2000::/35 -2001:250:4000::/34 -2001:250:8000::/33 -2001:251::/32 -2001:252::/32 -2001:253::/32 -2001:254::/32 -2001:255::/32 -2001:256::/32 -2001:7fa:5::/48 -2001:7fa:10::/48 +2001:250::/30 +2001:254::/31 +2001:256:100::/48 +2001:678:53c::/48 2001:c68::/32 2001:cc0::/32 2001:da8::/32 -2001:da9::/32 -2001:daa::/32 +2001:daa:1::/48 +2001:daa:2::/47 +2001:daa:4::/47 +2001:daa:6::/48 2001:dc7::/32 2001:dd8:1::/48 -2001:dd8:5::/48 -2001:dd8:1a::/48 2001:dd9::/48 -2001:df0:423::/48 -2001:df0:9c0::/48 -2001:df0:1bc0::/48 -2001:df0:25c0::/48 -2001:df0:26c0::/48 -2001:df0:2e00::/48 -2001:df0:2e80::/48 -2001:df0:59c0::/48 -2001:df0:85c0::/48 -2001:df0:9d40::/48 -2001:df0:ac40::/48 -2001:df0:bf80::/48 -2001:df0:d880::/48 -2001:df0:f8c0::/48 -2001:df1:c80::/48 -2001:df1:2b40::/48 -2001:df1:4580::/48 -2001:df1:5280::/48 -2001:df1:5b80::/48 -2001:df1:5fc0::/48 -2001:df1:6180::/48 -2001:df1:61c0::/48 -2001:df1:a100::/48 -2001:df1:c900::/48 -2001:df1:d180::/48 -2001:df1:da00::/48 -2001:df1:f480::/48 -2001:df1:fd80::/48 -2001:df2:80::/48 -2001:df2:5780::/48 -2001:df2:8bc0::/48 -2001:df2:a580::/48 -2001:df2:c240::/48 -2001:df2:d4c0::/48 -2001:df3:1480::/48 -2001:df3:15c0::/48 -2001:df3:2a80::/48 -2001:df3:3a80::/48 -2001:df3:7440::/48 -2001:df3:77c0::/48 -2001:df3:9a40::/48 -2001:df3:a680::/48 -2001:df3:b380::/48 -2001:df3:c380::/48 -2001:df3:c680::/48 -2001:df3:d0c0::/48 -2001:df3:d880::/48 -2001:df3:ed80::/48 -2001:df3:ef80::/48 -2001:df4:880::/48 -2001:df4:d80::/48 -2001:df4:1880::/48 -2001:df4:2780::/48 -2001:df4:2e80::/48 -2001:df4:3d80::/48 -2001:df4:4b80::/48 -2001:df4:4d80::/48 -2001:df4:a1c0::/48 -2001:df4:a680::/48 -2001:df4:a980::/48 -2001:df4:c180::/48 -2001:df4:c580::/48 -2001:df4:c780::/48 -2001:df4:e140::/48 -2001:df5:2080::/48 -2001:df5:5f80::/48 -2001:df5:7800::/48 -2001:df6:100::/48 -2001:df6:3d00::/48 -2001:df6:5d00::/48 -2001:df6:6800::/48 -2001:df6:f400::/48 -2001:df7:1480::/48 -2001:df7:2b80::/48 -2001:df7:6600::/48 -2001:df7:e580::/48 -2001:e08::/32 -2001:e18::/32 -2001:e80::/32 -2001:e88::/32 -2001:f38::/32 -2001:f88::/32 -2001:4438::/32 -2001:4510::/29 -2400:1040::/32 +2001:df5:4740::/48 +2001:df6:40::/48 +2001:4510:400::/40 +2001:4510:1480::/41 +2001:4511:1480::/41 2400:1160::/32 -2400:12c0::/32 -2400:1340::/32 -2400:1380::/32 -2400:15c0::/32 -2400:1640::/32 -2400:16c0::/32 -2400:1740::/32 -2400:17c0::/32 -2400:1840::/32 -2400:18c0::/32 -2400:1940::/32 -2400:19a0::/32 -2400:19c0::/32 -2400:1a40::/32 -2400:1ac0::/32 -2400:1b40::/32 -2400:1cc0::/32 -2400:1d40::/32 -2400:1dc0::/32 -2400:1e40::/32 -2400:1ec0::/32 -2400:1f40::/32 -2400:1fc0::/32 -2400:3040::/32 -2400:3140::/32 -2400:3160::/32 -2400:31c0::/32 2400:3200::/32 -2400:3280::/32 -2400:32c0::/32 -2400:3340::/32 -2400:33c0::/32 -2400:3440::/32 -2400:34c0::/32 -2400:3540::/32 -2400:35c0::/32 -2400:3600::/32 -2400:3640::/32 -2400:3660::/32 -2400:36c0::/32 -2400:38c0::/32 -2400:39c0::/32 -2400:3a00::/32 -2400:3a40::/32 -2400:3b40::/32 -2400:3c40::/32 -2400:3cc0::/32 -2400:3e00::/32 -2400:3f40::/32 -2400:3f60::/32 -2400:3fc0::/32 -2400:4440::/32 -2400:44c0::/32 -2400:4540::/32 -2400:4600::/32 -2400:4640::/32 -2400:46c0::/32 -2400:4920::/32 -2400:4bc0::/32 -2400:4e00::/32 -2400:4e40::/32 -2400:5080::/32 -2400:5280::/32 -2400:5400::/32 -2400:5580::/32 -2400:55c0::/32 -2400:55e0::/32 -2400:5600::/32 -2400:5640::/32 -2400:56c0::/32 -2400:57c0::/32 -2400:5840::/32 +2400:5280:f803::/48 2400:5a00::/32 -2400:5a40::/32 -2400:5a60::/32 -2400:5ac0::/32 -2400:5b40::/32 -2400:5bc0::/32 -2400:5c40::/32 -2400:5c80::/32 -2400:5cc0::/32 -2400:5e20::/32 -2400:5e80::/32 -2400:5ee0::/32 -2400:5f60::/32 -2400:5fc0::/32 +2400:5a60:2::/48 2400:6000::/32 -2400:6040::/32 -2400:60c0::/32 -2400:61c0::/32 -2400:6200::/32 2400:6600::/32 -2400:6640::/32 -2400:66a0::/32 -2400:66c0::/32 -2400:66e0::/32 -2400:6740::/32 -2400:67a0::/32 -2400:67c0::/32 -2400:6840::/32 -2400:68c0::/32 -2400:6940::/32 -2400:69c0::/32 -2400:6a00::/32 -2400:6a40::/32 -2400:6ac0::/32 -2400:6b40::/32 -2400:6bc0::/32 -2400:6c40::/32 -2400:6cc0::/32 -2400:6d40::/32 -2400:6da0::/32 -2400:6dc0::/32 -2400:6e00::/32 -2400:6e40::/32 -2400:6e60::/32 -2400:6ec0::/32 -2400:6f40::/32 -2400:6f80::/32 -2400:6fc0::/32 -2400:7040::/32 -2400:70a0::/32 +2400:6e60:1301::/48 2400:7100::/32 -2400:7140::/32 -2400:71c0::/32 -2400:7200::/32 -2400:7240::/32 -2400:72c0::/32 -2400:72e0::/32 -2400:7340::/32 -2400:73c0::/32 2400:73e0::/32 -2400:7440::/32 -2400:74c0::/32 -2400:7540::/32 -2400:75a0::/28 -2400:75c0::/32 -2400:7640::/32 -2400:7680::/32 -2400:76c0::/32 -2400:7740::/32 -2400:77c0::/32 -2400:79c0::/32 -2400:7ac0::/32 -2400:7ae0::/32 -2400:7bc0::/32 -2400:7f80::/32 -2400:7fc0::/32 -2400:8080::/32 +2400:75aa::/32 +2400:7fc0::/40 +2400:7fc0:220::/44 +2400:7fc0:240::/44 +2400:7fc0:2a0::/44 +2400:7fc0:2c0::/44 +2400:7fc0:4000::/40 +2400:7fc0:4100::/48 +2400:7fc0:6000::/40 +2400:7fc0:8000::/36 +2400:7fc0:a000::/36 +2400:7fc0:bb00::/40 +2400:7fc0:c000::/36 2400:8200::/32 -2400:82c0::/32 -2400:8580::/32 -2400:8600::/32 -2400:86a0::/32 -2400:86e0::/32 -2400:8780::/32 -2400:87c0::/32 -2400:8840::/32 -2400:8920::/32 -2400:8980::/32 -2400:89c0::/32 -2400:8be0::/32 -2400:8ce0::/32 -2400:8e00::/32 -2400:8e60::/32 -2400:8f00::/32 -2400:8f60::/32 -2400:8fc0::/32 -2400:9020::/32 -2400:9040::/32 -2400:9340::/32 -2400:93e0::/32 -2400:9520::/32 -2400:9580::/32 -2400:95c0::/32 -2400:95e0::/32 -2400:9600::/32 +2400:89c0:1010::/44 +2400:89c0:1050::/46 +2400:89c0:1130::/44 +2400:89c0:1150::/48 +2400:89c0:2100::/48 +2400:89c0:2200::/48 +2400:89c0:3010::/44 +2400:89c0:6000::/48 +2400:89c0:6100::/48 +2400:8fc0:571::/48 +2400:9020:f010::/46 +2400:9380:8001::/48 +2400:9380:8003::/48 +2400:9380:8021::/48 +2400:9380:8040::/48 +2400:9380:8140::/48 +2400:9380:8201::/48 +2400:9380:8301::/48 +2400:9380:9001::/48 +2400:9380:9009::/48 +2400:9380:9020::/47 +2400:9380:9050::/47 +2400:9380:9060::/48 +2400:9380:9071::/48 +2400:9380:9080::/47 +2400:9380:90b1::/48 +2400:9380:90b2::/47 +2400:9380:90b4::/46 +2400:9380:9121::/48 +2400:9380:9220::/47 +2400:9380:9250::/47 +2400:9380:9260::/48 +2400:9380:9271::/48 +2400:9380:9280::/47 +2400:9380:92b1::/48 +2400:9380:92b2::/47 +2400:9380:92b4::/46 +2400:9580::/48 +2400:95e0::/48 +2400:9600:8800::/48 2400:9620::/32 -2400:98c0::/32 -2400:9960::/32 -2400:99e0::/32 -2400:9a00::/32 -2400:9ca0::/32 -2400:9e00::/32 -2400:a040::/32 -2400:a320::/32 -2400:a380::/32 -2400:a420::/32 -2400:a480::/32 -2400:a5a0::/32 -2400:a6a0::/32 -2400:a780::/32 -2400:a860::/32 -2400:a8a0::/32 -2400:a8c0::/32 -2400:a900::/32 -2400:a980::/32 -2400:a981::/32 -2400:a982::/31 -2400:a984::/30 -2400:a9a0::/32 -2400:abc0::/32 -2400:ae00::/32 +2400:a860:1::/48 +2400:a860:2::/47 +2400:a860:4::/47 +2400:a860:6::/48 +2400:a980::/29 +2400:ae00:1981::/48 2400:b200::/32 -2400:b2c0::/32 -2400:b500::/32 2400:b600::/32 -2400:b620::/32 -2400:b6c0::/32 -2400:b700::/32 -2400:b9a0::/32 -2400:b9c0::/32 -2400:ba00::/32 -2400:ba40::/32 -2400:ba41::/32 -2400:bac0::/32 -2400:be00::/32 -2400:bf00::/32 -2400:c200::/32 -2400:c380::/32 -2400:c840::/32 -2400:c8c0::/32 -2400:c940::/32 -2400:c9c0::/32 -2400:ca40::/32 -2400:cac0::/32 -2400:cb40::/32 -2400:cb80::/32 -2400:cbc0::/32 -2400:cc40::/32 -2400:cc80::/32 -2400:ccc0::/32 -2400:cd40::/32 -2400:cda0::/32 -2400:cdc0::/32 -2400:ce00::/32 -2400:ce40::/32 -2400:cf40::/32 -2400:cfc0::/32 -2400:d0a0::/32 -2400:d0c0::/32 -2400:d100::/32 -2400:d160::/32 -2400:d1c0::/32 -2400:d200::/32 -2400:d300::/32 -2400:d440::/32 -2400:d600::/32 -2400:d6a0::/32 -2400:d6c0::/32 -2400:d720::/32 -2400:d780::/32 -2400:d7a0::/32 +2400:b700::/48 +2400:be00::/48 +2400:cb80:e2e::/47 +2400:cb80:e30::/44 +2400:cb80:e40::/44 2400:da00::/32 -2400:da60::/32 2400:dd00::/28 -2400:dd40::/32 -2400:dda0::/32 -2400:de00::/32 -2400:de80::/32 -2400:dee0::/32 -2400:e0c0::/32 2400:e680::/32 -2400:e7e0::/32 -2400:e880::/32 -2400:ebc0::/32 -2400:ed60::/32 -2400:eda0::/32 -2400:edc0::/32 2400:ee00::/32 -2400:eec0::/32 -2400:ef40::/32 -2400:f480::/32 -2400:f5c0::/32 2400:f6e0::/32 2400:f720::/32 -2400:f7c0::/32 -2400:f840::/32 -2400:f860::/32 -2400:f980::/32 -2400:fac0::/32 -2400:fb40::/32 -2400:fb60::/32 -2400:fbc0::/32 -2400:fc40::/32 -2400:fcc0::/32 2400:fe00::/32 -2401:20::/32 -2401:60::/32 -2401:80::/32 -2401:140::/32 -2401:1c0::/32 -2401:540::/32 -2401:620::/32 -2401:7c0::/32 +2401:20::/40 +2401:20:1330::/46 2401:800::/32 -2401:9c0::/32 -2401:a00::/32 -2401:a40::/32 -2401:ac0::/32 -2401:b40::/32 -2401:ba0::/32 -2401:bc0::/32 -2401:c40::/32 -2401:cc0::/32 -2401:d40::/32 -2401:e00::/32 -2401:1000::/32 2401:1160::/32 -2401:11a0::/32 -2401:11c0::/32 -2401:1200::/32 -2401:12c0::/32 +2401:1200::/48 2401:1320::/32 -2401:15c0::/32 -2401:18c0::/32 -2401:18e0::/28 -2401:1940::/32 -2401:19c0::/32 -2401:1a40::/32 -2401:1ac0::/32 -2401:1c60::/32 -2401:1ce0::/32 2401:1d40::/32 -2401:1da0::/32 -2401:1dc0::/32 -2401:1de0::/32 -2401:1e00::/32 -2401:1ec0::/32 -2401:1f40::/32 -2401:2040::/32 -2401:2080::/32 -2401:23c0::/32 -2401:2600::/32 2401:2780::/32 -2401:2980::/32 -2401:2a00::/32 -2401:2b40::/32 +2401:2a00:f000::/43 2401:2e00::/32 -2401:2e20::/32 -2401:3100::/32 -2401:3380::/32 -2401:33c0::/32 -2401:3440::/32 -2401:3480::/32 -2401:34a0::/32 -2401:34a1::/32 -2401:34c0::/32 -2401:3640::/32 -2401:3780::/32 +2401:3480::/36 +2401:3480:2000::/48 +2401:3480:3000::/36 +2401:34a0::/31 2401:3800::/32 2401:3880::/32 2401:3980::/32 -2401:3a00::/32 2401:3a80::/32 2401:3b80::/32 -2401:3c20::/32 2401:3c80::/32 2401:3d80::/32 2401:3e80::/32 2401:3f80::/32 -2401:4080::/32 2401:4180::/32 2401:4280::/32 2401:4380::/32 @@ -477,1553 +134,1438 @@ 2401:4780::/32 2401:4880::/32 2401:4a80::/32 -2401:4b00::/32 -2401:4f80::/32 -2401:5180::/32 -2401:5680::/32 -2401:58a0::/32 -2401:5960::/32 -2401:59c0::/32 -2401:5b40::/32 -2401:5c20::/32 -2401:5c60::/32 -2401:5c80::/32 -2401:5fa0::/32 -2401:70e0::/32 -2401:7180::/32 -2401:71c0::/32 -2401:7240::/32 -2401:7320::/32 -2401:7340::/32 -2401:7360::/32 -2401:73a0::/32 -2401:7580::/32 -2401:7660::/32 -2401:7680::/32 +2401:5560:1000::/48 +2401:5c20:10::/48 +2401:71c0::/48 +2401:7660::/48 2401:7700::/32 -2401:7780::/32 -2401:77e0::/32 -2401:7820::/32 -2401:7880::/32 -2401:78e0::/32 -2401:7980::/32 -2401:7a00::/32 -2401:7a80::/32 -2401:7b80::/32 -2401:7bc0::/32 -2401:7c80::/32 -2401:7cc0::/32 -2401:7ce0::/32 2401:7d40::/32 -2401:7d80::/32 -2401:7e00::/32 -2401:7f80::/32 -2401:8200::/32 -2401:82c0::/32 -2401:8380::/32 -2401:8540::/32 -2401:8600::/32 -2401:8680::/32 -2401:8720::/32 -2401:87e0::/32 -2401:8820::/31 -2401:8840::/32 -2401:8be0::/32 -2401:8d00::/32 -2401:8da0::/32 -2401:8f40::/32 -2401:8fc0::/32 -2401:90a0::/32 -2401:9260::/32 -2401:92a0::/32 -2401:92e0::/32 -2401:9340::/32 -2401:95e0::/32 -2401:9600::/32 -2401:96c0::/32 -2401:96e0::/32 -2401:9720::/32 -2401:9740::/32 -2401:97a0::/32 -2401:98c0::/32 -2401:9a00::/32 -2401:9ac0::/32 -2401:9b20::/31 -2401:9b40::/32 -2401:9b60::/32 -2401:9bc0::/32 -2401:9ca0::/32 -2401:9d20::/32 -2401:9dc0::/32 -2401:9e20::/32 -2401:9e40::/32 -2401:9f80::/32 -2401:9fa0::/32 -2401:a140::/32 -2401:a180::/32 -2401:a2e0::/32 -2401:a340::/32 -2401:a3a0::/32 -2401:a3c0::/32 -2401:a4c0::/32 -2401:a4e0::/32 -2401:a540::/32 -2401:a5c0::/32 -2401:a620::/32 -2401:a640::/32 -2401:a6e0::/32 -2401:a720::/32 -2401:a940::/32 -2401:a980::/32 -2401:a9a0::/32 -2401:aa00::/32 -2401:aa20::/32 -2401:aa40::/32 -2401:ab60::/32 -2401:aba0::/32 -2401:acc0::/32 -2401:ad40::/32 -2401:adc0::/32 -2401:afa0::/32 -2401:b040::/32 +2401:8be0::/48 +2401:8d00::/47 +2401:8d00:3::/48 +2401:8d00:4::/48 +2401:8d00:7::/48 +2401:8d00:8::/47 +2401:8d00:b::/48 +2401:8d00:c::/48 +2401:8d00:f::/48 +2401:8d00:12::/48 +2401:9a00::/44 +2401:9a00:10::/46 +2401:a140:1::/48 2401:b180::/32 -2401:b220::/32 -2401:b340::/32 -2401:b360::/32 -2401:b400::/32 -2401:b480::/32 -2401:b4c0::/32 -2401:b4e0::/32 -2401:b540::/32 -2401:b580::/32 -2401:b5a0::/32 -2401:b600::/32 +2401:b400::/45 +2401:b400:8::/47 +2401:b400:11::/48 +2401:b400:14::/48 +2401:b400:16::/47 +2401:b400:20::/47 2401:b680::/32 -2401:b6c0::/32 -2401:b6e0::/32 -2401:b7c0::/32 -2401:b940::/32 -2401:ba00::/32 -2401:ba40::/32 -2401:bb20::/32 -2401:bb80::/32 -2401:bc60::/31 -2401:bd60::/32 -2401:bda0::/32 2401:be00::/32 -2401:bf20::/32 -2401:c020::/32 -2401:c200::/32 -2401:c540::/32 -2401:c600::/32 -2401:c640::/32 -2401:c6c0::/32 -2401:c840::/32 -2401:c8c0::/32 +2401:c020:6::/48 +2401:c020:8::/47 +2401:c020:14::/48 2401:ca00::/32 -2401:ca20::/32 2401:cb80::/32 -2401:cbe0::/32 2401:cc00::/32 -2401:cc60::/32 2401:ce00::/32 -2401:cf40::/32 -2401:cfc0::/32 -2401:cfe0::/32 -2401:d060::/32 -2401:d0c0::/32 -2401:d0e0::/32 -2401:d140::/32 -2401:d180::/32 -2401:d2c0::/32 -2401:d340::/32 -2401:d420::/32 +2401:d0e0:3::/48 +2401:d180::/46 +2401:d180:10::/47 +2401:d180:111::/48 +2401:d180:2120::/48 2401:d780::/32 -2401:d7e0::/32 -2401:d8e0::/32 -2401:d920::/28 -2401:da00::/32 -2401:dbe0::/32 -2401:dd20::/32 -2401:dd60::/32 -2401:dde0::/32 +2401:d920::/48 2401:de00::/32 -2401:dfe0::/32 -2401:e020::/32 -2401:e080::/32 -2401:e0c0::/32 -2401:e140::/32 -2401:e240::/32 -2401:e2c0::/32 -2401:e340::/32 -2401:e360::/32 -2401:e620::/32 -2401:e840::/32 -2401:e8c0::/32 -2401:e940::/32 -2401:e9c0::/32 2401:ec00::/32 -2401:ec40::/32 -2401:f300::/32 -2401:f7c0::/32 -2401:fa80::/32 -2401:fb80::/32 -2401:fc80::/32 -2401:ffc0::/32 -2402:440::/32 -2402:5c0::/32 -2402:840::/32 -2402:e00::/32 -2402:fc0::/32 -2402:1000::/32 +2401:f860:7::/48 +2401:f860:b::/48 +2401:f860:85::/48 +2401:f860:88::/47 +2401:f860:90::/48 +2401:f860:92::/47 +2401:f860:94::/48 +2401:f860:97::/48 +2401:f860:f6::/48 +2401:f860:100::/40 +2401:fa00:40::/43 +2402:840:d000::/46 +2402:840:e000::/46 +2402:840:f000::/38 +2402:c60::/48 2402:1440::/32 -2402:14c0::/32 -2402:1600::/32 -2402:1740::/32 -2402:19c0::/32 -2402:1ec0::/32 -2402:1f80::/32 +2402:18a0::/32 2402:2000::/32 -2402:2280::/32 -2402:2440::/32 -2402:24c0::/32 -2402:2540::/32 -2402:2640::/32 -2402:2a00::/32 -2402:2b80::/32 -2402:2bc0::/32 -2402:2d00::/32 -2402:2d80::/32 -2402:2e80::/32 -2402:2f40::/32 -2402:3040::/32 -2402:3140::/32 -2402:3180::/32 -2402:31c0::/32 -2402:3240::/32 -2402:33c0::/32 -2402:39c0::/32 -2402:3a40::/32 -2402:3ac0::/32 +2402:2e60::/39 +2402:34e0::/32 +2402:36e0::/44 2402:3c00::/32 -2402:3e00::/32 -2402:3ec0::/32 -2402:3f80::/32 -2402:4140::/32 -2402:42c0::/32 -2402:4340::/32 -2402:43c0::/32 -2402:4440::/32 -2402:4500::/32 -2402:4540::/32 -2402:4a00::/32 -2402:4a40::/32 -2402:4a80::/32 -2402:4ac0::/32 +2402:3f80:1400::/40 +2402:4440:9000::/39 +2402:4440:9200::/48 +2402:4440:9400::/48 +2402:4440:9600::/48 +2402:4440:9800::/48 +2402:4440:9810::/48 +2402:4440:9900::/48 +2402:4440:9a00::/48 +2402:4440:9b00::/48 +2402:4440:9c00::/48 +2402:4440:9d00::/48 +2402:4440:9e00::/48 +2402:4440:a000::/39 +2402:4440:a800::/46 +2402:4440:a810::/46 2402:4b80::/32 -2402:4bc0::/32 -2402:4c40::/32 -2402:4d80::/32 2402:4e00::/32 -2402:4ec0::/32 -2402:4f80::/32 -2402:5180::/32 -2402:52c0::/32 -2402:5340::/32 -2402:5880::/32 -2402:5940::/32 -2402:59c0::/32 -2402:5a40::/32 -2402:5b40::/32 -2402:5bc0::/32 -2402:5d00::/32 -2402:5e00::/32 2402:5e40::/32 2402:5ec0::/32 -2402:5f40::/32 -2402:6280::/32 -2402:62c0::/32 -2402:64c0::/32 -2402:66c0::/32 -2402:6740::/32 -2402:67c0::/32 -2402:6a00::/32 -2402:6b40::/32 -2402:6bc0::/32 -2402:6e00::/32 2402:6e80::/32 -2402:6f40::/32 -2402:6fc0::/32 +2402:6f40::/48 +2402:6f40:2::/47 +2402:6fc0::/48 2402:7040::/32 -2402:7080::/32 -2402:70c0::/32 -2402:7140::/32 -2402:71c0::/32 -2402:7240::/32 -2402:72c0::/32 -2402:7540::/32 -2402:75c0::/32 -2402:7740::/32 -2402:7d00::/32 -2402:7d80::/32 -2402:8180::/32 -2402:8300::/32 -2402:8380::/32 -2402:85c0::/32 -2402:8800::/32 -2402:8840::/32 -2402:8900::/32 -2402:8940::/32 -2402:89c0::/32 -2402:8b40::/32 +2402:7d80::/48 +2402:7d80:240::/48 +2402:7d80:8888::/48 2402:8bc0::/32 -2402:8cc0::/32 -2402:8d40::/32 -2402:8f40::/32 -2402:8f80::/32 -2402:9240::/32 -2402:92c0::/32 -2402:93c0::/32 -2402:9440::/32 -2402:9480::/32 -2402:94c0::/32 -2402:9580::/32 -2402:95c0::/32 -2402:9680::/32 -2402:96c0::/32 -2402:9840::/32 -2402:98c0::/32 -2402:9940::/32 +2402:92c0::/48 +2402:93c0::/48 +2402:93c0:20::/48 +2402:93c0:100::/48 2402:9a80::/32 -2402:9b80::/32 -2402:9f80::/32 -2402:9fc0::/32 -2402:a080::/32 -2402:a180::/32 2402:a200::/32 -2402:a240::/32 -2402:a280::/32 -2402:a380::/32 -2402:a3c0::/32 -2402:a640::/32 -2402:a680::/32 -2402:a6c0::/32 -2402:a840::/32 -2402:a880::/32 -2402:aa80::/32 -2402:ab80::/32 -2402:ae00::/32 -2402:ae40::/32 -2402:aec0::/32 -2402:af80::/32 -2402:afc0::/32 -2402:b080::/32 -2402:b200::/32 -2402:b440::/32 -2402:b6c0::/32 -2402:b880::/32 -2402:b8c0::/32 -2402:b940::/32 -2402:b980::/32 -2402:ba80::/32 -2402:bac0::/32 -2402:bbc0::/32 -2402:bf80::/32 -2402:c280::/32 -2402:c3c0::/32 -2402:c5c0::/32 -2402:c9c0::/32 -2402:cc40::/32 -2402:cf00::/32 -2402:cf40::/32 -2402:d040::/32 -2402:d140::/32 -2402:d2c0::/32 -2402:d300::/32 +2402:b8c0:6::/48 +2402:b8c0:86::/48 +2402:b8c0:106::/48 +2402:b8c0:186::/48 2402:d340::/32 -2402:d380::/32 -2402:d5c0::/32 -2402:d6c0::/32 -2402:d740::/32 -2402:d780::/32 -2402:d880::/32 -2402:d980::/32 -2402:da40::/32 -2402:db40::/32 -2402:dcc0::/32 -2402:de40::/32 -2402:dec0::/32 -2402:df40::/32 -2402:dfc0::/32 -2402:e040::/32 -2402:e0c0::/32 -2402:e140::/32 -2402:e2c0::/32 -2402:e3c0::/32 +2402:db40:5100::/48 +2402:db40:5f00::/46 +2402:dfc0::/44 +2402:dfc0:50::/44 2402:e480::/32 -2402:e540::/32 -2402:e680::/32 2402:e740::/32 -2402:e780::/32 2402:e7c0::/32 -2402:e880::/32 -2402:e980::/32 -2402:eb80::/32 -2402:ec80::/32 -2402:ed80::/32 +2402:e880::/48 2402:ef40::/32 -2402:ef80::/32 2402:f000::/32 -2402:f140::/32 -2402:f480::/32 -2402:f540::/32 -2402:f580::/32 -2402:f740::/32 -2402:f780::/32 -2402:f8c0::/32 -2402:f980::/32 -2402:f9c0::/32 -2402:fac0::/32 -2402:fcc0::/32 -2402:ff40::/32 -2402:ffc0::/32 +2402:f140:ff00::/46 +2402:f140:ff04::/48 +2402:f140:ff10::/46 +2402:f140:ff14::/48 +2402:f8c0::/42 2403:600::/32 -2403:700::/32 -2403:7c0::/32 -2403:800::/31 -2403:980::/32 -2403:a80::/32 -2403:b80::/32 2403:c80::/32 -2403:d40::/32 -2403:d80::/32 -2403:e80::/32 -2403:f00::/32 -2403:f40::/32 -2403:f80::/32 -2403:fc0::/32 -2403:1180::/32 -2403:1340::/32 -2403:1440::/32 -2403:1580::/32 -2403:16c0::/32 -2403:17c0::/32 -2403:1980::/32 -2403:1a40::/32 -2403:1b80::/32 -2403:1c80::/32 -2403:1d80::/32 -2403:1dc0::/32 -2403:1e80::/32 -2403:1ec0::/32 -2403:1f80::/32 -2403:2040::/32 -2403:2080::/32 -2403:2180::/32 -2403:2240::/32 -2403:2280::/32 -2403:2380::/32 -2403:2440::/32 -2403:24c0::/32 -2403:2580::/32 -2403:25c0::/32 -2403:2680::/32 -2403:2740::/32 -2403:2780::/32 -2403:28c0::/32 -2403:2940::/32 -2403:2a00::/32 -2403:2a40::/32 -2403:2ac0::/32 +2403:1b80::/48 +2403:1ec0:1200::/48 +2403:1ec0:1400::/48 +2403:1ec0:1600::/48 +2403:1ec0:1610::/48 +2403:2040::/48 2403:2b40::/32 -2403:2bc0::/32 -2403:2cc0::/32 -2403:2f40::/32 -2403:2fc0::/32 -2403:3040::/32 -2403:30c0::/32 2403:3140::/32 -2403:3280::/32 -2403:32c0::/32 -2403:3380::/32 -2403:3480::/32 -2403:3580::/32 -2403:3640::/32 -2403:3680::/32 -2403:36c0::/32 -2403:3740::/32 -2403:3780::/32 -2403:37c0::/32 -2403:3840::/32 -2403:3880::/32 -2403:38c0::/32 -2403:3940::/32 -2403:3980::/32 -2403:39c0::/32 -2403:3a40::/32 -2403:3b40::/32 -2403:3b80::/32 -2403:3bc0::/32 -2403:3c40::/32 -2403:3c80::/32 -2403:3cc0::/32 -2403:3d40::/32 -2403:3d80::/32 -2403:3dc0::/32 -2403:3e80::/32 -2403:3ec0::/32 -2403:3f80::/32 -2403:4080::/32 -2403:4180::/32 -2403:4240::/32 -2403:4280::/32 +2403:4280::/47 2403:4300::/32 -2403:4380::/32 -2403:4580::/32 -2403:4680::/32 -2403:4780::/32 -2403:4840::/32 -2403:4880::/32 -2403:4980::/32 -2403:4a40::/32 -2403:4a80::/32 -2403:4b40::/32 -2403:4b80::/32 -2403:4c80::/32 -2403:4cc0::/32 -2403:4d80::/32 -2403:4ec0::/32 -2403:5040::/32 -2403:5080::/32 -2403:5280::/32 -2403:5380::/32 -2403:54c0::/32 -2403:5540::/32 -2403:5580::/32 -2403:5640::/32 -2403:5780::/32 -2403:58c0::/32 -2403:5980::/32 -2403:5a80::/32 -2403:5b40::/32 -2403:5b80::/32 -2403:5c80::/32 -2403:5d80::/32 -2403:5e40::/32 -2403:5e80::/32 -2403:5ec0::/32 -2403:5f80::/32 -2403:5fc0::/32 -2403:6080::/32 -2403:6180::/32 -2403:6280::/32 -2403:62c0::/32 -2403:6380::/32 -2403:6580::/32 -2403:6680::/32 -2403:6740::/32 -2403:6780::/32 -2403:6880::/32 -2403:6980::/32 +2403:4c80::/48 +2403:5c80::/48 +2403:6740::/48 2403:6a00::/32 -2403:6c80::/32 -2403:6d40::/32 -2403:6d80::/32 -2403:6e80::/32 -2403:6f40::/32 -2403:6fc0::/32 -2403:7040::/32 -2403:7080::/32 -2403:7180::/32 -2403:7280::/32 -2403:7380::/32 -2403:7480::/32 -2403:7540::/32 2403:7580::/32 -2403:76c0::/32 -2403:7700::/32 -2403:7840::/32 -2403:78c0::/32 -2403:7a80::/32 -2403:7b00::/32 -2403:7d80::/32 -2403:7e80::/32 -2403:7f80::/32 -2403:8080::/32 -2403:8180::/32 -2403:8280::/32 -2403:8380::/32 -2403:83c0::/32 -2403:8480::/32 -2403:8580::/32 -2403:8880::/32 -2403:8900::/32 -2403:8980::/32 -2403:8a40::/32 -2403:8a80::/32 -2403:8b00::/32 -2403:8b80::/32 +2403:8080:101::/48 2403:8c00::/32 -2403:8c80::/32 -2403:8d00::/32 -2403:8d80::/32 -2403:9080::/32 -2403:9180::/32 -2403:9280::/32 -2403:9380::/32 -2403:9480::/32 -2403:9580::/32 -2403:9680::/32 -2403:9780::/32 -2403:9880::/32 -2403:9a80::/32 -2403:9ac0::/32 -2403:9b00::/32 -2403:9b40::/32 -2403:9b80::/32 -2403:9c80::/32 -2403:9d00::/32 -2403:9d80::/32 -2403:9e40::/32 -2403:9e80::/32 -2403:9ec0::/32 -2403:9f80::/32 -2403:a100::/32 -2403:a140::/32 +2403:9b00:2000::/48 +2403:9b00:2400::/48 +2403:9b00:6000::/48 +2403:a100::/48 +2403:a140:10::/48 +2403:a140:100::/40 2403:a200::/32 -2403:a300::/32 -2403:a480::/32 -2403:a580::/32 -2403:a680::/32 -2403:a6c0::/32 -2403:a780::/32 -2403:a880::/32 -2403:a940::/32 -2403:a980::/32 -2403:a9c0::/32 -2403:aa40::/32 -2403:aa80::/32 -2403:ab80::/32 2403:ac00::/32 -2403:af80::/32 -2403:b080::/32 -2403:b180::/32 -2403:b280::/32 -2403:b380::/32 2403:b400::/32 -2403:b480::/32 -2403:b580::/32 -2403:b680::/32 -2403:b780::/32 -2403:b880::/32 -2403:b980::/32 -2403:ba40::/32 -2403:c040::/32 -2403:c080::/32 -2403:c100::/32 -2403:c140::/32 -2403:c180::/32 -2403:c3c0::/32 -2403:c440::/32 -2403:c480::/32 -2403:c4c0::/32 2403:c980::/32 -2403:cdc0::/32 -2403:cec0::/32 -2403:cf80::/32 -2403:d080::/32 -2403:d180::/32 -2403:d280::/32 -2403:d2c0::/32 -2403:d380::/32 2403:d400::/32 -2403:d440::/32 -2403:d480::/32 -2403:d580::/32 -2403:d680::/32 -2403:d780::/32 -2403:d7c0::/32 -2403:d880::/32 -2403:d980::/32 -2403:d9c0::/32 -2403:da80::/32 -2403:dac0::/32 -2403:db00::/32 -2403:db80::/32 -2403:dc80::/32 -2403:dd80::/32 -2403:de80::/32 -2403:df80::/32 -2403:e080::/32 -2403:e180::/32 -2403:e280::/32 -2403:e300::/32 -2403:e480::/32 -2403:e500::/32 -2403:e580::/32 -2403:e640::/32 -2403:e680::/32 -2403:e700::/32 -2403:e780::/32 -2403:e7c0::/32 -2403:e880::/32 -2403:e980::/32 -2403:ea80::/32 -2403:eac0::/32 -2403:eb80::/32 -2403:ec80::/32 -2403:ed00::/32 -2403:ed40::/32 -2403:ed80::/32 -2403:ee80::/32 -2403:ef80::/32 -2403:f080::/32 -2403:f100::/32 -2403:f180::/32 -2403:f240::/32 -2403:f280::/32 -2403:f300::/32 -2403:f380::/32 -2403:f4c0::/32 -2403:f580::/32 -2403:f740::/32 -2403:f8c0::/32 -2403:f980::/32 -2403:fb00::/32 -2403:fb80::/32 -2403:fc40::/32 -2403:fe40::/32 -2403:fe80::/32 -2403:fec0::/32 -2403:ff80::/32 -2403:ffc0::/32 -2403:ffc1::/32 -2404:100::/32 -2404:158::/32 -2404:240::/32 -2404:280::/32 -2404:440::/32 -2404:480::/32 -2404:680::/32 -2404:a80::/32 -2404:b80::/32 -2404:bc0::/32 -2404:c40::/32 -2404:d80::/32 -2404:f00::/32 -2404:f80::/32 -2404:1080::/32 -2404:10c0::/32 -2404:1180::/32 -2404:14c0::/32 -2404:1880::/32 +2403:e7c0:3::/48 +2403:f4c0::/48 +2403:ffc0:1100::/40 +2403:ffc0:1200::/39 +2404:bc0:1::/48 +2404:bc0:4000::/43 +2404:bc0:4100::/43 +2404:bc0:4200::/43 +2404:bc0:4300::/44 +2404:bc0:4400::/43 +2404:bc0:4500::/43 +2404:bc0:4620::/44 +2404:bc0:4f00::/43 +2404:1c40:503::/48 2404:1c80::/32 -2404:1cc0::/32 -2404:1d80::/32 -2404:1e80::/32 -2404:1f40::/32 -2404:21c0::/32 -2404:30c0::/32 -2404:3140::/32 -2404:31c0::/32 -2404:3240::/32 -2404:32c0::/32 -2404:3300::/32 -2404:3340::/32 -2404:3480::/32 -2404:35c0::/32 -2404:3640::/32 -2404:36c0::/32 -2404:3700::/32 -2404:3740::/32 -2404:37c0::/32 -2404:3840::/32 -2404:3940::/32 -2404:3bc0::/32 -2404:3c40::/32 -2404:3f40::/32 -2404:4080::/32 -2404:41c0::/32 -2404:4540::/32 -2404:4740::/32 -2404:4bc0::/32 -2404:4d00::/32 +2404:2280:105::/48 +2404:2280:106::/47 +2404:2280:109::/48 +2404:2280:10a::/47 +2404:2280:10d::/48 +2404:2280:10f::/48 +2404:2280:112::/47 +2404:2280:115::/48 +2404:2280:116::/47 +2404:2280:11a::/47 +2404:2280:11c::/46 +2404:2280:125::/48 +2404:2280:126::/47 +2404:2280:128::/46 +2404:2280:12e::/48 +2404:2280:130::/48 +2404:2280:134::/48 +2404:2280:136::/47 +2404:2280:138::/48 +2404:2280:13b::/48 +2404:2280:13c::/47 +2404:2280:142::/48 +2404:2280:147::/48 +2404:2280:14f::/48 +2404:2280:150::/48 +2404:2280:154::/46 +2404:2280:159::/48 +2404:2280:15d::/48 +2404:2280:15e::/47 +2404:2280:160::/48 +2404:2280:170::/48 +2404:2280:177::/48 +2404:2280:17a::/47 +2404:2280:17c::/46 +2404:2280:180::/47 +2404:2280:183::/48 +2404:2280:187::/48 +2404:2280:18a::/47 +2404:2280:18c::/46 +2404:2280:190::/48 +2404:2280:193::/48 +2404:2280:196::/48 +2404:2280:198::/45 +2404:2280:1a4::/46 +2404:2280:1a8::/47 +2404:2280:1b0::/48 +2404:2280:1b2::/48 +2404:2280:1b4::/46 +2404:2280:1b8::/47 +2404:2280:1ba::/48 +2404:2280:1bf::/48 +2404:2280:1c1::/48 +2404:2280:1c2::/47 +2404:2280:1c4::/46 +2404:2280:1c8::/48 +2404:2280:1cb::/48 +2404:2280:1cc::/48 +2404:2280:1cf::/48 +2404:2280:1d0::/47 +2404:2280:1d3::/48 +2404:2280:1d4::/48 +2404:2280:1d6::/47 +2404:2280:1d8::/45 +2404:2280:1e0::/45 +2404:2280:1e8::/46 +2404:2280:1ec::/47 +2404:2280:1ee::/48 +2404:2280:1f0::/45 +2404:2280:1f8::/46 +2404:2280:1fe::/48 +2404:2280:201::/48 +2404:2280:202::/47 +2404:2280:204::/46 +2404:2280:208::/46 +2404:2280:20c::/47 +2404:2280:20e::/48 +2404:2280:210::/46 +2404:2280:214::/48 +2404:2280:217::/48 +2404:2280:218::/46 +2404:2280:21d::/48 +2404:2280:21e::/48 +2404:2280:221::/48 +2404:2280:226::/47 +2404:2280:259::/48 +2404:2280:25a::/47 +2404:2280:25c::/48 +2404:2280:265::/48 +2404:2280:266::/47 +2404:2280:268::/45 +2404:2280:270::/45 +2404:2280:278::/47 +2404:2280:27b::/48 +2404:2280:27c::/46 +2404:2280:282::/47 +2404:2280:284::/47 +2404:2280:288::/46 +2404:2280:28c::/48 +2404:2280:291::/48 +2404:2280:292::/48 +2404:2280:296::/47 +2404:2280:298::/46 +2404:2280:29c::/47 +2404:2280:2a0::/47 +2404:2280:2a4::/46 +2404:2280:2a9::/48 +2404:2280:2aa::/48 +2404:2280:2ad::/48 +2404:2280:2ae::/47 +2404:2280:2b1::/48 +2404:2280:2b2::/47 +2404:2280:2b5::/48 +2404:2280:2b6::/47 +2404:2280:2b8::/47 +2404:2280:2ba::/48 +2404:2280:2bc::/46 +2404:2280:2c2::/47 +2404:2280:2c5::/48 +2404:2280:2c9::/48 +2404:2280:2ca::/47 +2404:2280:2cd::/48 +2404:2280:2cf::/48 +2404:2280:2df::/48 +2404:2280:2f1::/48 +2404:2280:2f8::/48 +2404:3700::/48 2404:4dc0::/32 -2404:51c0::/32 -2404:5640::/32 -2404:5a80::/32 -2404:5b00::/32 -2404:5d00::/32 -2404:6000::/32 -2404:6100::/32 -2404:6380::/32 -2404:6500::/32 -2404:65c0::/32 -2404:6a40::/32 -2404:6f80::/32 -2404:7100::/32 -2404:7180::/32 -2404:71c0::/32 -2404:7240::/32 -2404:74c0::/32 +2404:6380::/48 +2404:6380:1000::/48 +2404:6380:8001::/48 +2404:6500:dcb3::/48 +2404:7180:a000::/48 +2404:7180:a010::/48 +2404:7180:aa00::/48 +2404:7180:aa10::/48 +2404:7180:b001::/48 +2404:7180:b002::/48 +2404:7180:b010::/48 +2404:7180:c001::/48 +2404:7180:c002::/48 +2404:7180:c011::/48 +2404:7180:c012::/48 +2404:7180:f000::/48 +2404:7180:f010::/48 +2404:7240::/33 2404:7600::/32 -2404:7740::/32 2404:7940::/32 -2404:7d00::/32 -2404:8040::/32 -2404:80c0::/32 -2404:8140::/32 -2404:81c0::/32 -2404:8480::/32 -2404:8580::/32 -2404:8700::/32 -2404:8880::/32 -2404:8a80::/32 -2404:8b00::/32 -2404:8dc0::/32 -2404:9340::/32 -2404:9b80::/32 -2404:9c80::/32 -2404:a000::/32 -2404:a080::/32 -2404:a0c0::/32 -2404:a180::/32 -2404:a240::/32 -2404:a740::/32 -2404:b100::/32 -2404:b340::/32 -2404:b3c0::/32 -2404:b440::/32 -2404:b4c0::/32 -2404:b900::/32 -2404:bbc0::/32 -2404:bc40::/32 -2404:c1c0::/32 -2404:c240::/32 -2404:c2c0::/32 +2404:8d02:28c8::/48 +2404:8d02:4881::/48 +2404:c2c0::/40 +2404:c2c0:240::/44 +2404:c2c0:280::/44 +2404:c2c0:2c0::/44 +2404:c2c0:501::/48 +2404:c2c0:4000::/40 +2404:c2c0:4100::/48 +2404:c2c0:6000::/40 +2404:c2c0:8000::/36 +2404:c2c0:bb00::/40 +2404:c2c0:c000::/36 2404:c300::/32 -2404:c3c0::/32 -2404:c440::/32 -2404:c4c0::/32 -2404:c540::/32 -2404:c5c0::/32 -2404:c640::/32 -2404:c940::/32 -2404:c9c0::/32 -2404:cd00::/32 -2404:d040::/32 -2404:d080::/32 -2404:d140::/32 -2404:d280::/32 -2404:d3c0::/32 -2404:d640::/32 -2404:d6c0::/32 -2404:d7c0::/32 -2404:d840::/32 -2404:dd80::/32 -2404:df00::/32 -2404:e280::/32 -2404:e540::/32 -2404:e5c0::/32 -2404:e780::/32 -2404:e880::/32 +2404:c940::/48 +2404:e280::/47 2404:e8c0::/32 -2404:eb80::/32 -2404:ec40::/32 -2404:ecc0::/32 -2404:edc0::/32 -2404:f040::/32 -2404:f4c0::/32 -2404:f7c0::/32 -2405:80::/32 -2405:480::/32 -2405:580::/32 -2405:680::/32 -2405:6c0::/32 -2405:780::/32 -2405:880::/32 -2405:940::/32 -2405:980::/32 -2405:9c0::/32 -2405:a80::/32 -2405:b80::/32 -2405:c80::/32 -2405:d80::/32 -2405:e80::/32 -2405:f80::/32 -2405:1080::/32 -2405:1180::/32 -2405:1280::/32 -2405:1380::/32 -2405:1480::/32 -2405:1580::/32 -2405:1680::/32 -2405:18c0::/32 -2405:1c80::/32 -2405:1d80::/32 -2405:1e80::/32 -2405:1f80::/32 -2405:1fc0::/32 -2405:2080::/32 -2405:2180::/32 -2405:2280::/32 -2405:2340::/32 -2405:2380::/32 -2405:2480::/32 -2405:24c0::/32 -2405:2580::/32 -2405:2680::/32 -2405:2780::/32 -2405:2880::/32 -2405:2980::/32 -2405:2a80::/32 -2405:2b80::/32 -2405:2bc0::/32 -2405:2c80::/32 -2405:2d80::/32 -2405:2e80::/32 -2405:2ec0::/32 -2405:2f40::/32 -2405:2f80::/32 -2405:3140::/32 -2405:31c0::/32 -2405:37c0::/32 -2405:3880::/32 -2405:3980::/32 -2405:39c0::/32 -2405:3a80::/32 -2405:3ac0::/32 -2405:3b00::/32 -2405:3b80::/32 -2405:3bc0::/32 -2405:3c40::/32 -2405:3c80::/32 -2405:3d80::/32 -2405:3e80::/32 -2405:3f40::/32 -2405:3f80::/32 -2405:4080::/32 -2405:4140::/32 -2405:4180::/32 -2405:41c0::/32 -2405:4280::/32 -2405:4380::/32 -2405:4480::/32 -2405:44c0::/32 -2405:4540::/32 -2405:4580::/32 -2405:4680::/32 -2405:4780::/32 -2405:4880::/32 -2405:4980::/32 -2405:4a80::/32 -2405:4b80::/32 -2405:4d40::/32 -2405:4e80::/32 -2405:4f80::/32 -2405:5080::/32 -2405:5180::/32 -2405:5240::/32 -2405:5280::/32 -2405:52c0::/32 -2405:5380::/32 -2405:5480::/32 -2405:5580::/32 -2405:5680::/32 -2405:5780::/32 -2405:57c0::/32 -2405:5880::/32 -2405:5980::/32 -2405:5a80::/32 -2405:5b80::/32 -2405:5c80::/32 -2405:5cc0::/32 -2405:5d40::/32 -2405:5d80::/32 -2405:5dc0::/32 -2405:5e80::/32 -2405:5f80::/32 -2405:6080::/32 -2405:6180::/32 -2405:6200::/32 -2405:66c0::/32 -2405:6880::/32 -2405:68c0::/32 -2405:6940::/32 -2405:69c0::/32 -2405:6a80::/32 -2405:6b80::/32 -2405:6c80::/32 -2405:6d80::/32 -2405:6e80::/32 -2405:6f00::/32 -2405:6f80::/32 -2405:7040::/32 -2405:7080::/32 -2405:7180::/32 -2405:7240::/32 -2405:7280::/32 -2405:7380::/32 -2405:7480::/32 -2405:7580::/32 -2405:7680::/32 -2405:7780::/32 -2405:7880::/32 -2405:78c0::/32 -2405:7980::/32 -2405:79c0::/32 -2405:7a80::/32 -2405:7b80::/32 -2405:7c80::/32 -2405:7d40::/32 -2405:7f40::/32 -2405:7fc0::/32 +2404:f4c0:f000::/44 +2405:6c0:2::/48 +2405:6c0:4::/48 +2405:1480:1000::/48 +2405:1480:2000::/48 +2405:1480:3000::/47 +2405:1640:6::/48 +2405:3140:11::/48 +2405:3140:21::/48 +2405:3140:31::/48 +2405:68c0:21::/48 +2405:6940::/48 +2405:6f00:c101::/48 +2405:6f00:c102::/48 +2405:6f00:c170::/47 +2405:6f00:c602::/48 +2405:7040:6000::/47 +2405:78c0:6e00::/43 2405:8280::/32 -2405:8480::/32 -2405:84c0::/32 -2405:8580::/32 -2405:8680::/32 -2405:8780::/32 -2405:8880::/32 -2405:8980::/32 2405:8a40::/32 -2405:8a80::/32 -2405:8ac0::/32 -2405:8b80::/32 -2405:8c80::/32 -2405:8d80::/32 -2405:8e80::/32 -2405:8f80::/32 -2405:9080::/32 -2405:9180::/32 -2405:9280::/32 -2405:9300::/32 -2405:9340::/32 -2405:9380::/32 -2405:93c0::/32 -2405:9480::/32 -2405:94c0::/32 -2405:9580::/32 -2405:9680::/32 -2405:9700::/32 -2405:9780::/32 -2405:97c0::/32 -2405:9880::/32 -2405:9900::/32 -2405:9980::/32 -2405:99c0::/32 -2405:9a80::/32 -2405:9b00::/32 -2405:9b80::/32 -2405:9bc0::/32 -2405:9e00::/32 -2405:a240::/32 -2405:a3c0::/32 -2405:a500::/32 -2405:a680::/32 -2405:a900::/32 -2405:a980::/32 -2405:aa80::/32 -2405:ab00::/32 +2405:a900:ffee::/48 +2405:a900:fffe::/48 2405:ad00::/32 -2405:af00::/32 -2405:b100::/32 -2405:b300::/32 2405:b7c0::/32 -2405:b880::/32 -2405:b980::/32 -2405:bb00::/32 -2405:bd00::/32 -2405:bd80::/32 -2405:bdc0::/32 -2405:be80::/32 -2405:bf00::/32 -2405:c040::/32 -2405:c280::/32 -2405:c380::/32 -2405:c480::/32 -2405:c500::/32 -2405:c580::/32 -2405:c680::/32 -2405:c780::/32 -2405:c880::/32 -2405:c980::/32 -2405:ca80::/32 -2405:cb80::/32 -2405:cc80::/32 -2405:cd80::/32 -2405:ce80::/32 -2405:d280::/32 -2405:d4c0::/32 -2405:d700::/32 -2405:d740::/32 2405:d900::/32 -2405:df40::/32 2405:e000::/32 -2405:e040::/32 -2405:e1c0::/32 -2405:e600::/32 -2405:ed40::/32 -2405:ef40::/30 -2405:f340::/32 -2405:f3c0::/32 -2405:f580::/32 -2405:f6c0::/32 2405:f940::/32 -2405:fdc0::/32 -2405:fe80::/32 -2405:ff80::/32 -2406:40::/32 -2406:80::/32 -2406:c0::/32 -2406:140::/32 2406:280::/32 -2406:440::/32 -2406:4c0::/32 -2406:7c0::/32 -2406:840::/32 -2406:880::/32 -2406:8c0::/32 -2406:d80::/32 -2406:e80::/32 -2406:f80::/32 -2406:1080::/32 -2406:1100::/32 -2406:1180::/32 -2406:1280::/32 -2406:1380::/32 -2406:1480::/32 -2406:1580::/32 -2406:15c0::/32 -2406:1680::/32 -2406:1780::/32 -2406:1880::/32 -2406:1980::/32 -2406:1a80::/32 -2406:1b80::/32 -2406:1c80::/32 -2406:1d80::/32 -2406:1e40::/32 -2406:1e80::/32 -2406:1f80::/32 -2406:2080::/32 -2406:2640::/32 +2406:840:1::/48 +2406:840:2::/48 +2406:840:7::/48 +2406:840:10::/45 +2406:840:20::/48 +2406:840:44::/48 +2406:840:46::/48 +2406:840:78::/47 +2406:840:80::/47 +2406:840:90::/48 +2406:840:100::/47 +2406:840:103::/48 +2406:840:110::/48 +2406:840:2e0::/48 +2406:840:380::/48 +2406:840:3c2::/48 +2406:840:3e0::/48 +2406:840:410::/47 +2406:840:420::/48 +2406:840:480::/48 +2406:840:540::/48 +2406:840:680::/48 +2406:840:6c1::/48 +2406:840:710::/48 +2406:840:800::/46 +2406:840:806::/48 +2406:840:841::/48 +2406:840:842::/48 +2406:840:860::/48 +2406:840:880::/47 +2406:840:882::/48 +2406:840:a10::/48 +2406:840:a31::/48 +2406:840:c02::/48 +2406:840:c60::/48 +2406:840:cb8::/48 +2406:840:cc2::/48 +2406:840:1000::/47 +2406:840:1800::/48 +2406:840:2380::/48 +2406:840:2800::/48 +2406:840:2880::/47 +2406:840:3800::/48 +2406:840:4100::/47 +2406:840:43e0::/47 +2406:840:4800::/47 +2406:840:4880::/47 +2406:840:5100::/47 +2406:840:5800::/47 +2406:840:5860::/47 +2406:840:5880::/47 +2406:840:5c00::/47 +2406:840:8100::/40 +2406:840:9200::/40 +2406:840:9600::/44 +2406:840:9620::/44 +2406:840:9680::/44 +2406:840:9700::/40 +2406:840:9804::/46 +2406:840:981a::/48 +2406:840:981c::/46 +2406:840:9962::/47 +2406:840:9966::/48 +2406:840:996c::/48 +2406:840:9970::/44 +2406:840:e080::/44 +2406:840:e0cf::/48 +2406:840:e0e0::/46 +2406:840:e0e4::/47 +2406:840:e0e8::/48 +2406:840:e10f::/48 +2406:840:e14f::/48 +2406:840:e260::/48 +2406:840:e280::/44 +2406:840:e301::/48 +2406:840:e302::/48 +2406:840:e304::/48 +2406:840:e306::/48 +2406:840:e330::/44 +2406:840:e57e::/48 +2406:840:e600::/44 +2406:840:e620::/47 +2406:840:e80f::/48 +2406:840:eb01::/48 +2406:840:eb02::/47 +2406:840:eb04::/47 +2406:840:eb07::/48 +2406:840:eb08::/48 +2406:840:eb0b::/48 +2406:840:eb80::/42 +2406:840:ee40::/47 +2406:840:ee44::/48 +2406:840:ee4b::/48 +2406:840:ee4d::/48 +2406:840:eee5::/48 +2406:840:f0a1::/48 +2406:840:f0aa::/48 +2406:840:f380::/44 +2406:840:f401::/48 +2406:840:f402::/48 +2406:840:f44f::/48 +2406:840:f680::/44 +2406:840:f889::/48 +2406:840:fa01::/48 +2406:840:fa60::/44 +2406:840:fc10::/44 +2406:840:fc20::/43 +2406:840:fc40::/42 +2406:840:fc90::/44 +2406:840:fca0::/43 +2406:840:fcd0::/48 +2406:840:fd40::/43 +2406:840:fd60::/48 +2406:840:fd66::/47 +2406:840:fd70::/48 +2406:840:fd76::/47 +2406:840:fd80::/48 +2406:840:fd86::/47 +2406:840:fd90::/47 +2406:840:fd92::/48 +2406:840:fd9f::/48 +2406:840:fda0::/48 +2406:840:fda5::/48 +2406:840:fda6::/47 +2406:840:fdb0::/48 +2406:840:fdb5::/48 +2406:840:fdb6::/47 +2406:840:fdc0::/48 +2406:840:fdc5::/48 +2406:840:fdc6::/47 +2406:840:fe51::/48 +2406:840:fe73::/48 +2406:840:fe90::/46 +2406:840:fe94::/48 +2406:840:fe96::/47 +2406:840:fe98::/46 +2406:840:fe9d::/48 +2406:840:fe9e::/48 +2406:840:fea2::/47 +2406:840:fea4::/46 +2406:840:fea8::/48 +2406:840:feaa::/47 +2406:840:feac::/46 +2406:840:fec0::/48 +2406:840:fec2::/47 +2406:840:fec4::/48 +2406:840:feca::/47 +2406:840:fece::/47 +2406:840:fed1::/48 +2406:840:fed3::/48 +2406:840:fed4::/48 +2406:840:fed8::/48 +2406:840:fedb::/48 +2406:840:fedc::/48 +2406:840:feed::/48 +2406:840:fef2::/47 +2406:840:fef4::/46 +2406:840:fef8::/45 +2406:1080::/48 +2406:1e40:f012::/47 2406:2700::/32 -2406:2780::/32 -2406:2880::/32 -2406:2980::/32 -2406:2a80::/32 -2406:2b80::/32 -2406:2c40::/32 -2406:2c80::/32 -2406:2d80::/32 -2406:2e80::/32 -2406:2f80::/32 -2406:3080::/32 -2406:3180::/32 -2406:31c0::/32 -2406:3280::/32 -2406:3300::/32 2406:3340::/32 -2406:3380::/32 -2406:3440::/32 -2406:3480::/32 -2406:34c0::/32 -2406:3580::/32 -2406:3640::/32 -2406:3680::/32 -2406:3700::/32 -2406:3780::/32 -2406:3880::/32 -2406:3980::/32 -2406:39c0::/32 -2406:3ac0::/32 -2406:3d80::/32 -2406:3e80::/32 -2406:3f80::/32 -2406:4080::/32 -2406:40c0::/32 -2406:4180::/32 -2406:4280::/32 -2406:42c0::/32 -2406:4340::/32 -2406:4380::/32 -2406:43c0::/32 -2406:4480::/32 -2406:4500::/32 -2406:4680::/32 -2406:4b80::/32 -2406:4c80::/32 -2406:4d00::/32 -2406:4d80::/32 -2406:4e80::/32 -2406:4f00::/32 -2406:4f80::/32 -2406:5080::/32 -2406:50c0::/32 -2406:5180::/32 -2406:5280::/32 +2406:3640:1::/48 +2406:4440:f000::/44 +2406:4d00::/48 2406:52c0::/32 -2406:5340::/32 -2406:5380::/32 -2406:5480::/32 -2406:5580::/32 -2406:5680::/32 -2406:5780::/32 -2406:5840::/32 -2406:5880::/32 -2406:5940::/32 -2406:5980::/32 -2406:5a40::/32 -2406:5ac0::/32 -2406:5b40::/32 -2406:5d80::/32 -2406:5e80::/32 -2406:5f80::/32 -2406:6080::/32 +2406:5340:6666::/48 +2406:5340:8888::/48 2406:6100::/32 -2406:6180::/32 -2406:61c0::/30 -2406:61c4::/30 -2406:6280::/32 -2406:6300::/32 -2406:6340::/32 -2406:6380::/32 -2406:6480::/32 -2406:6500::/32 -2406:6580::/32 -2406:65c0::/32 -2406:6640::/32 -2406:6680::/32 -2406:6780::/32 -2406:6880::/32 -2406:6980::/32 -2406:6a80::/32 -2406:6b80::/32 -2406:6bc0::/32 -2406:6c80::/32 -2406:6d80::/32 -2406:6e80::/32 -2406:6f80::/32 -2406:7080::/32 -2406:7280::/32 -2406:7380::/32 -2406:7480::/32 -2406:7580::/32 -2406:7680::/32 -2406:7780::/32 -2406:7880::/32 -2406:7980::/32 -2406:7a80::/32 -2406:7b80::/32 -2406:7c80::/32 -2406:7d00::/32 -2406:7d80::/32 -2406:7e80::/32 -2406:7f80::/32 -2406:7fc0::/32 -2406:8080::/32 -2406:8180::/32 -2406:8280::/32 -2406:8380::/32 -2406:8480::/32 -2406:8500::/32 -2406:8580::/32 -2406:8780::/32 -2406:8880::/32 -2406:8980::/32 -2406:8a80::/32 -2406:8b80::/32 -2406:8c80::/32 -2406:8d80::/32 -2406:8e80::/32 -2406:8f40::/32 -2406:8f80::/32 -2406:9180::/32 -2406:9200::/32 -2406:9380::/32 -2406:9480::/32 -2406:94c0::/32 -2406:9780::/32 -2406:9d80::/32 -2406:9e40::/32 -2406:9e80::/32 -2406:9f80::/32 -2406:a080::/32 -2406:a180::/32 -2406:a280::/32 -2406:a380::/32 -2406:a480::/32 -2406:a580::/32 -2406:a680::/32 -2406:a780::/32 -2406:a7c0::/32 -2406:a880::/32 -2406:a8c0::/32 -2406:a980::/32 -2406:aa80::/32 -2406:aac0::/32 -2406:ab80::/32 -2406:ac80::/32 -2406:acc0::/32 -2406:ad40::/32 -2406:ad80::/32 -2406:ae80::/32 -2406:af80::/32 -2406:b080::/32 -2406:b640::/32 -2406:b880::/32 -2406:b980::/32 -2406:ba80::/32 -2406:bb80::/32 -2406:bc80::/32 -2406:bd40::/32 -2406:bd80::/32 -2406:bdc0::/32 -2406:be80::/32 -2406:bf80::/32 -2406:c080::/32 -2406:c180::/32 -2406:c280::/32 -2406:c340::/32 -2406:c480::/32 -2406:c580::/32 -2406:c680::/32 -2406:c780::/32 -2406:c880::/32 -2406:c900::/32 -2406:c980::/32 -2406:ca80::/32 -2406:cac0::/32 -2406:cb80::/32 -2406:cc80::/32 -2406:cd80::/32 -2406:ce80::/32 -2406:cf00::/32 -2406:cf01::/32 -2406:cf02::/31 -2406:cf80::/32 -2406:d080::/32 -2406:d140::/32 -2406:d180::/32 -2406:d280::/32 -2406:d2c0::/32 -2406:d380::/32 -2406:d440::/32 -2406:d480::/32 -2406:d580::/32 -2406:d680::/32 -2406:d780::/32 -2406:d880::/32 -2406:d980::/32 -2406:db80::/32 -2406:dc80::/32 -2406:dd00::/32 -2406:dd80::/32 -2406:de80::/32 -2406:df80::/32 -2406:e080::/32 -2406:e180::/32 -2406:e2c0::/32 -2406:e380::/32 +2406:8880::/48 +2406:b640:100::/48 +2406:b640:4100::/48 +2406:cac0::/40 +2406:cac0:200::/40 +2406:cf00::/48 +2406:cf00:1000::/43 +2406:d440:100::/43 +2406:d440:200::/43 +2406:d440:300::/43 +2406:d440:ff00::/48 +2406:d440:ffff::/48 2406:e3c0::/32 -2406:e500::/32 -2406:e580::/32 -2406:e680::/32 -2406:e780::/32 -2406:e8c0::/32 -2406:ea40::/28 -2406:f280::/32 -2406:f300::/32 -2406:f4c0::/32 -2406:f7c0::/32 -2406:f980::/32 -2406:fc80::/32 -2406:fd80::/32 -2406:fe80::/32 -2406:ff00::/32 -2407:480::/32 -2407:580::/32 -2407:cc0::/32 -2407:f40::/32 -2407:17c0::/32 -2407:1900::/32 -2407:1d00::/32 -2407:2280::/32 -2407:2380::/32 -2407:23c0::/32 -2407:2780::/32 -2407:2840::/32 -2407:2ac0::/32 -2407:31c0::/32 -2407:3340::/32 -2407:3540::/32 -2407:3700::/32 -2407:3740::/32 +2406:e500::/33 +2407:23c0::/48 +2407:2840::/48 2407:37c0::/32 -2407:3900::/32 -2407:3f40::/32 -2407:43c0::/32 -2407:4440::/32 -2407:4580::/32 -2407:4680::/32 -2407:4740::/32 -2407:4880::/32 2407:4980::/32 -2407:4a80::/32 -2407:4c80::/32 -2407:4d80::/32 -2407:4e80::/32 -2407:4f00::/32 2407:5380::/32 -2407:53c0::/32 -2407:5500::/32 -2407:5780::/32 -2407:5840::/32 -2407:6040::/32 -2407:6580::/32 -2407:6c40::/32 -2407:7680::/32 -2407:7780::/32 -2407:7880::/32 -2407:7980::/32 -2407:7c80::/32 -2407:7d00::/32 -2407:7d80::/32 -2407:7e80::/32 -2407:8880::/32 -2407:8b80::/32 -2407:8f40::/32 -2407:9080::/32 -2407:9180::/32 -2407:94c0::/32 -2407:9680::/32 -2407:9980::/32 -2407:9b40::/32 -2407:9bc0::/32 +2407:6c40:1100::/48 +2407:6c40:1210::/48 +2407:6c40:1500::/48 +2407:6c40:1600::/40 +2407:8f40:2::/48 2407:9f00::/32 -2407:9f80::/32 -2407:a040::/32 -2407:a640::/32 -2407:a7c0::/32 -2407:a880::/32 -2407:a940::/32 2407:ad80::/32 2407:ae80::/32 -2407:af80::/32 -2407:b080::/32 -2407:b180::/32 -2407:b280::/32 -2407:b380::/32 -2407:b580::/32 -2407:b680::/32 -2407:b780::/32 -2407:b880::/32 -2407:b980::/32 -2407:ba00::/32 -2407:ba80::/32 -2407:bb80::/32 +2407:b380:8000::/48 2407:bc00::/32 -2407:bc80::/32 -2407:bd80::/32 -2407:bdc0::/32 -2407:be80::/32 -2407:bf80::/32 -2407:c080::/32 -2407:c380::/32 -2407:c400::/32 -2407:c480::/32 -2407:c580::/32 -2407:c680::/32 -2407:c780::/32 -2407:c880::/32 -2407:c900::/32 -2407:c980::/32 -2407:cb80::/32 -2407:cc80::/32 -2407:cd80::/32 -2407:ce80::/32 -2407:cf00::/32 -2407:cf80::/32 -2407:d480::/32 -2407:d580::/32 -2407:d680::/32 -2407:d780::/32 -2407:d7c0::/32 -2407:d880::/32 -2407:d8c0::/32 -2407:d980::/32 +2407:c080::/35 +2407:c080:4000::/37 +2407:c080:5000::/37 +2407:c080:6000::/36 +2407:c080:8000::/36 2407:d9c0::/32 -2407:da80::/32 -2407:db80::/32 -2407:dc80::/32 -2407:dd80::/32 -2407:de80::/32 -2407:df80::/32 -2407:dfc0::/32 -2407:e080::/32 -2407:e180::/32 -2407:e280::/32 -2407:e380::/32 -2407:e480::/32 -2407:e580::/32 -2407:e680::/32 -2407:e780::/32 -2407:e800::/32 -2407:ea80::/32 -2407:eb80::/32 -2407:ec40::/32 -2407:ec80::/32 -2407:ecc0::/32 -2407:ed80::/32 -2407:ee80::/32 -2407:ef80::/32 -2407:f080::/32 -2407:f180::/32 -2407:f280::/32 -2407:f380::/32 -2407:f480::/32 -2407:f580::/32 -2407:f680::/32 -2407:f780::/32 -2407:f880::/32 -2407:f980::/32 -2407:fa80::/32 -2407:fb80::/32 -2407:fc80::/32 -2407:fd80::/32 2408:4000::/22 -2408:6000::/24 -2408:8000::/22 -2408:8400::/22 -2408:8800::/21 -2409:2000::/21 -2409:6000::/20 +2408:8000::/48 +2408:8000:2::/47 +2408:8000:1000::/36 +2408:8000:2000::/35 +2408:8000:4000::/34 +2408:8000:8000::/33 +2408:8001::/32 +2408:8020::/30 +2408:8024::/31 +2408:8026::/32 +2408:802a:8000::/33 +2408:802c::/32 +2408:803e::/32 +2408:8056::/32 +2408:805c::/30 +2408:8060::/33 +2408:80c2::/33 +2408:80c5::/33 +2408:80ca::/33 +2408:80ca:8000::/34 +2408:80da::/33 +2408:80da:8000::/34 +2408:80e0:4000::/34 +2408:80e0:8000::/33 +2408:80e2::/33 +2408:80e9:4000::/34 +2408:80ea:4000::/34 +2408:80ea:8000::/33 +2408:80f0:4000::/34 +2408:80f0:8000::/33 +2408:80f1::/42 +2408:80f1:40::/43 +2408:80f1:70::/44 +2408:80f1:80::/41 +2408:80f1:100::/43 +2408:80f1:120::/44 +2408:80f1:160::/43 +2408:80f1:180::/43 +2408:80f1:1b0::/44 +2408:80f1:1c0::/43 +2408:80f1:1e0::/44 +2408:80f1:200::/40 +2408:80f5:4000::/34 +2408:80f9:4000::/34 +2408:80fa:4000::/34 +2408:80fa:8000::/33 +2408:8120:1::/48 +2408:8120:2::/48 +2408:8120:7000::/36 +2408:8140:2000::/48 +2408:815f:e000::/35 +2408:8181::/40 +2408:8181:6000::/40 +2408:8181:8000::/40 +2408:8181:a000::/40 +2408:8181:a220::/44 +2408:8181:e000::/40 +2408:8182:6000::/40 +2408:8182:c000::/40 +2408:8183:4000::/40 +2408:8183:8000::/40 +2408:81a2:2000::/35 +2408:81a2:4000::/35 +2408:81a3:6000::/35 +2408:81a3:c800::/48 +2408:81a3:ca66::/48 +2408:8206::/31 +2408:8208::/29 +2408:8210::/30 +2408:8214::/31 +2408:821a::/31 +2408:8220::/31 +2408:8226::/32 +2408:822a::/31 +2408:822e::/31 +2408:8230::/29 +2408:8238::/31 +2408:823c::/31 +2408:8240::/32 +2408:8244::/30 +2408:8248::/30 +2408:824c::/32 +2408:824e::/31 +2408:8250::/30 +2408:8254::/32 +2408:8256::/31 +2408:8258::/30 +2408:825c::/31 +2408:825f::/32 +2408:8260::/32 +2408:8262::/31 +2408:8264::/31 +2408:8266::/32 +2408:826a::/32 +2408:826c::/30 +2408:8270::/32 +2408:8274::/30 +2408:8278::/31 +2408:827a::/32 +2408:8306::/31 +2408:8308::/30 +2408:8310::/30 +2408:832a::/32 +2408:832e::/31 +2408:8330::/30 +2408:8338::/32 +2408:8340::/32 +2408:8344::/30 +2408:8348::/30 +2408:834e::/31 +2408:8350::/30 +2408:8354::/32 +2408:8356::/31 +2408:8358::/30 +2408:8360::/30 +2408:8364::/31 +2408:836c::/30 +2408:8374::/30 +2408:8378::/31 +2408:837a::/32 +2408:8406:100::/41 +2408:8406:180::/42 +2408:8406:d00::/41 +2408:8406:d80::/42 +2408:8406:1900::/41 +2408:8406:1980::/42 +2408:8406:2500::/41 +2408:8406:2580::/42 +2408:8406:3100::/41 +2408:8406:3180::/42 +2408:8406:3d00::/41 +2408:8406:3d80::/42 +2408:8406:4900::/41 +2408:8406:4980::/42 +2408:8406:5500::/41 +2408:8406:5580::/42 +2408:8406:6100::/41 +2408:8406:6180::/42 +2408:8406:6d00::/41 +2408:8406:6d80::/42 +2408:8406:7900::/41 +2408:8406:7980::/42 +2408:8406:8500::/41 +2408:8406:8580::/42 +2408:8406:9100::/41 +2408:8406:9180::/42 +2408:8406:9d00::/41 +2408:8406:9d80::/42 +2408:8406:a900::/41 +2408:8406:a980::/42 +2408:8406:b500::/41 +2408:8406:b580::/42 +2408:8407:500::/42 +2408:8409::/40 +2408:8409:100::/41 +2408:8409:1a0::/43 +2408:8409:1c0::/42 +2408:8409:200::/42 +2408:8409:c00::/40 +2408:8409:d00::/41 +2408:8409:da0::/43 +2408:8409:dc0::/42 +2408:8409:e00::/42 +2408:8409:1800::/40 +2408:8409:1900::/41 +2408:8409:19a0::/43 +2408:8409:19c0::/42 +2408:8409:1a00::/42 +2408:8409:2400::/40 +2408:8409:2500::/41 +2408:8409:25a0::/43 +2408:8409:25c0::/42 +2408:8409:2600::/42 +2408:8409:3000::/40 +2408:8409:3100::/41 +2408:8409:31a0::/43 +2408:8409:31c0::/42 +2408:8409:3200::/42 +2408:8409:3c00::/40 +2408:8409:3d00::/41 +2408:8409:3da0::/43 +2408:8409:3dc0::/42 +2408:8409:3e00::/42 +2408:8409:4800::/40 +2408:8409:4900::/41 +2408:8409:49a0::/43 +2408:8409:49c0::/42 +2408:8409:4a00::/42 +2408:8409:5400::/40 +2408:8409:5500::/41 +2408:8409:55a0::/43 +2408:8409:55c0::/42 +2408:8409:5600::/42 +2408:8409:6000::/40 +2408:8409:6100::/41 +2408:8409:61a0::/43 +2408:8409:61c0::/42 +2408:8409:6200::/42 +2408:8409:6c00::/40 +2408:8409:6d00::/41 +2408:8409:6da0::/43 +2408:8409:6dc0::/42 +2408:8409:6e00::/42 +2408:8409:7800::/40 +2408:8409:7900::/41 +2408:8409:79a0::/43 +2408:8409:79c0::/42 +2408:8409:7a00::/42 +2408:8409:8400::/40 +2408:8409:8500::/41 +2408:8409:85a0::/43 +2408:8409:85c0::/42 +2408:8409:8600::/42 +2408:8409:9000::/40 +2408:8409:9100::/41 +2408:8409:91a0::/43 +2408:8409:91c0::/42 +2408:8409:9200::/42 +2408:8409:9c00::/40 +2408:8409:9d00::/41 +2408:8409:9da0::/43 +2408:8409:9dc0::/42 +2408:8409:9e00::/42 +2408:8409:a800::/40 +2408:8409:a900::/41 +2408:8409:a9a0::/43 +2408:8409:a9c0::/42 +2408:8409:aa00::/42 +2408:8409:b400::/40 +2408:8409:b500::/41 +2408:8409:b5a0::/43 +2408:8409:b5c0::/42 +2408:8409:b600::/42 +2408:840c::/40 +2408:840c:200::/40 +2408:840c:d00::/40 +2408:840c:f00::/40 +2408:840c:1a00::/40 +2408:840c:1c00::/40 +2408:840c:2700::/40 +2408:840c:2900::/40 +2408:840c:3400::/40 +2408:840c:3600::/40 +2408:840c:4e00::/40 +2408:840c:5000::/40 +2408:840c:5b00::/40 +2408:840c:5d00::/40 +2408:840c:6800::/40 +2408:840c:6a00::/40 +2408:840c:7500::/40 +2408:840c:7700::/40 +2408:840c:8200::/40 +2408:840c:8400::/40 +2408:840c:8f00::/40 +2408:840c:9100::/40 +2408:840c:9c00::/40 +2408:840c:9e00::/40 +2408:840c:a900::/40 +2408:840c:ab00::/40 +2408:840c:b600::/40 +2408:840c:b800::/40 +2408:840c:c300::/40 +2408:840c:c500::/40 +2408:840c:d000::/40 +2408:840c:d200::/40 +2408:840c:dd00::/40 +2408:840c:de00::/40 +2408:840d::/42 +2408:840d:200::/42 +2408:840d:400::/42 +2408:840d:440::/43 +2408:840d:600::/42 +2408:840d:d00::/42 +2408:840d:f00::/42 +2408:840d:1100::/42 +2408:840d:1140::/43 +2408:840d:1300::/42 +2408:840d:1a00::/42 +2408:840d:1c00::/42 +2408:840d:1e00::/42 +2408:840d:1e40::/43 +2408:840d:2000::/42 +2408:840d:2700::/42 +2408:840d:2900::/42 +2408:840d:2b00::/42 +2408:840d:2b40::/43 +2408:840d:2d00::/42 +2408:840d:3400::/42 +2408:840d:3600::/42 +2408:840d:3800::/42 +2408:840d:3840::/43 +2408:840d:3a00::/42 +2408:840d:4e00::/42 +2408:840d:5000::/42 +2408:840d:5200::/42 +2408:840d:5240::/43 +2408:840d:5400::/42 +2408:840d:5b00::/42 +2408:840d:5d00::/42 +2408:840d:5f00::/42 +2408:840d:5f40::/43 +2408:840d:6100::/42 +2408:840d:6800::/42 +2408:840d:6a00::/42 +2408:840d:6c00::/42 +2408:840d:6c40::/43 +2408:840d:6e00::/42 +2408:840d:7500::/42 +2408:840d:7700::/42 +2408:840d:7900::/42 +2408:840d:7940::/43 +2408:840d:7b00::/42 +2408:840d:8200::/42 +2408:840d:8400::/42 +2408:840d:8600::/42 +2408:840d:8640::/43 +2408:840d:8800::/42 +2408:840d:8f00::/42 +2408:840d:9100::/42 +2408:840d:9300::/42 +2408:840d:9340::/43 +2408:840d:9500::/42 +2408:840d:9c00::/42 +2408:840d:9e00::/42 +2408:840d:a000::/42 +2408:840d:a040::/43 +2408:840d:a200::/42 +2408:840d:a900::/42 +2408:840d:ab00::/42 +2408:840d:ad00::/42 +2408:840d:ad40::/43 +2408:840d:af00::/42 +2408:840d:b600::/42 +2408:840d:b800::/42 +2408:840d:ba00::/42 +2408:840d:ba40::/43 +2408:840d:bc00::/42 +2408:840d:c300::/42 +2408:840d:c500::/42 +2408:840d:c700::/42 +2408:840d:c740::/43 +2408:840d:c900::/42 +2408:840d:d000::/42 +2408:840d:d200::/42 +2408:840d:d400::/42 +2408:840d:d440::/43 +2408:840d:d600::/42 +2408:840d:dd00::/42 +2408:840d:de00::/42 +2408:840e:dd00::/40 +2408:840e:de00::/40 +2408:840f:1e0::/46 +2408:840f:1e4::/47 +2408:8410::/30 +2408:8414::/31 +2408:8417::/32 +2408:8418::/32 +2408:841a::/31 +2408:841c::/31 +2408:841e::/32 +2408:8420::/31 +2408:8422::/32 +2408:8426::/31 +2408:842a::/31 +2408:842c::/32 +2408:842e::/32 +2408:8430::/31 +2408:8434::/30 +2408:8438::/31 +2408:843c::/30 +2408:8440::/31 +2408:8444::/30 +2408:8448::/32 +2408:844b::/32 +2408:844c::/30 +2408:8452::/31 +2408:8454::/32 +2408:8456::/31 +2408:8458::/30 +2408:845c::/31 +2408:8460::/30 +2408:8464::/31 +2408:8466::/32 +2408:8469::/32 +2408:846a::/31 +2408:846c::/30 +2408:8470::/31 +2408:8474::/30 +2408:8478::/31 +2408:847a::/32 +2408:84e1::/32 +2408:84e2::/31 +2408:84e4::/30 +2408:84e9::/32 +2408:84eb::/32 +2408:84ec::/30 +2408:84f0::/28 +2408:856c::/31 +2408:8606::/31 +2408:8608::/29 +2408:8610::/30 +2408:8614::/31 +2408:861a::/31 +2408:861c::/32 +2408:8620::/31 +2408:8624::/31 +2408:8626::/32 +2408:862a::/31 +2408:862d::/32 +2408:862e::/31 +2408:8630::/29 +2408:8638::/31 +2408:863c::/31 +2408:8640::/32 +2408:8642::/32 +2408:8644::/30 +2408:8648::/31 +2408:864c::/32 +2408:864e::/31 +2408:8650::/30 +2408:8656::/31 +2408:8658::/30 +2408:865c::/31 +2408:865f::/32 +2408:8660::/32 +2408:8662::/31 +2408:8664::/31 +2408:8666::/32 +2408:866a::/31 +2408:866c::/30 +2408:8670::/32 +2408:8674::/30 +2408:8678::/31 +2408:867a::/32 +2408:8706::/31 +2408:8708::/29 +2408:8710::/30 +2408:8719::/32 +2408:871a::/31 +2408:8720::/30 +2408:8726::/32 +2408:872b::/32 +2408:872f::/32 +2408:8730::/30 +2408:8734::/31 +2408:8736::/32 +2408:8738::/32 +2408:873c::/31 +2408:8740::/32 +2408:8742::/32 +2408:8744::/30 +2408:8748::/29 +2408:8752::/32 +2408:8756::/31 +2408:8758::/30 +2408:875c::/32 +2408:8760::/32 +2408:8762::/31 +2408:8764::/31 +2408:8766::/32 +2408:8768::/32 +2408:876a::/32 +2408:876c::/30 +2408:8770::/32 +2408:8772::/31 +2408:8774::/32 +2408:8776::/31 +2408:8778::/31 +2408:877a::/32 +2408:877c::/30 +2408:8806::/42 +2408:8806:40::/43 +2408:880c::/30 +2408:8810::/30 +2408:8814::/31 +2408:8818::/31 +2408:882c::/32 +2408:883a::/32 +2408:8844::/43 +2408:8856::/31 +2408:8858::/30 +2408:8862::/31 +2408:8864::/31 +2408:8866::/32 +2408:886e::/31 +2408:8872::/32 +2408:8878::/31 +2408:887e::/32 +2408:8906:20::/44 +2408:8906:40::/43 +2408:8907:9000::/44 +2408:890c::/31 +2408:8912::/31 +2408:8914::/30 +2408:891c::/32 +2408:8920::/32 +2408:8924::/32 +2408:892c::/32 +2408:8936::/32 +2408:893a::/32 +2408:8940::/32 +2408:8948::/32 +2408:894c::/32 +2408:894e::/32 +2408:8956::/31 +2408:8958::/30 +2408:8962::/31 +2408:8964::/31 +2408:8966::/32 +2408:896c::/32 +2408:896e::/31 +2408:8972::/32 +2408:8978::/30 +2408:897e::/32 +2408:8a00:c000::/36 +2408:8a00:d000::/37 +2408:8a00:e000::/35 +2408:8a01::/36 +2408:8a02:b110::/44 +2408:8a02:b120::/44 +2408:8a04:8000::/36 +2408:8a04:e000::/40 +2408:8a05:6000::/35 +2408:8a05:8000::/36 +2408:8a06::/47 +2408:8a06:100::/47 +2408:8a21:4000::/35 +2408:8a22:a000::/37 +2408:8a23:4000::/34 +2408:8a24:4000::/34 +2408:8a26:c000::/34 +2408:8a27:4000::/35 +2409:2000::/31 +2409:2002::/32 +2409:2003::/47 +2409:27fa::/48 +2409:27fa:f000::/48 +2409:27fb::/48 +2409:27fc::/48 +2409:27fe::/33 2409:8000::/20 -240a:2000::/24 -240a:4000::/21 -240a:6000::/24 -240a:8000::/21 +240a:2000::/40 +240a:2001:100::/40 +240a:2001:1000::/36 +240a:4002:1b00::/40 +240a:4010:8000::/33 +240a:4020:83a::/48 +240a:4020:883a::/48 +240a:4021:83a::/48 +240a:4021:883a::/48 +240a:4080:8000::/35 +240a:4084:2000::/35 +240a:4088:a000::/35 +240a:408c:2000::/35 +240a:4090:50::/48 +240a:4090:120::/48 +240a:4090:250::/48 +240a:4090:1000::/39 +240a:4090:1200::/40 +240a:4090:2010::/48 +240a:4090:2041::/48 +240a:4090:2061::/48 +240a:4090:3000::/39 +240a:4090:3200::/40 +240a:4090:5000::/39 +240a:4090:5200::/40 +240a:4090:7000::/39 +240a:4090:7200::/40 +240a:4090:8000::/34 +240a:4093::/35 +240a:4094:2000::/35 +240a:409c:2000::/35 +240a:40a4:2000::/35 +240a:40a8:8000::/35 +240a:40ac:2000::/35 +240a:40b0:83a::/48 +240a:40b0:283a::/48 +240a:40b0:483a::/48 +240a:40b0:683a::/48 +240a:40c0:8000::/43 +240a:40c0:8200::/48 +240a:40c0:8240::/48 +240a:40c0:a000::/43 +240a:40c0:c000::/43 +240a:40c0:e000::/43 +240a:40c1::/43 +240a:40c1:2000::/43 +240a:40c1:4000::/43 +240a:40c1:6000::/43 +240a:40c1:8000::/43 +240a:40c1:a000::/43 +240a:40c1:c000::/43 +240a:40c1:e000::/43 +240a:40c2::/43 +240a:40c2:2000::/43 +240a:40c2:4000::/43 +240a:40c2:6000::/43 +240a:40c2:8000::/43 +240a:40c2:a000::/43 +240a:40c2:c000::/43 +240a:40c2:e000::/43 +240a:40c3::/43 +240a:40c3:2000::/43 +240a:40c3:4000::/43 +240a:40c3:6000::/43 +240a:40c3:8000::/43 +240a:40c3:a000::/43 +240a:40c3:c000::/43 +240a:40c3:c200::/48 +240a:40c3:c240::/48 +240a:40c3:e000::/43 +240a:40c4::/43 +240a:40c4:2000::/43 +240a:40c4:4000::/43 +240a:4172::/31 +240a:4180::/31 +240a:41b0::/34 +240a:41b8:8800::/40 +240a:41b8:a000::/40 +240a:41b8:d400::/40 +240a:41b8:e400::/40 +240a:41d6::/31 +240a:41f2::/31 +240a:4208::/30 +240a:4224:9000::/44 +240a:4224:a000::/44 +240a:4224:c000::/44 +240a:4224:d000::/44 +240a:4224:e000::/44 +240a:4225:1000::/44 +240a:4225:3000::/44 +240a:4230::/31 +240a:4242::/31 +240a:4280::/26 +240a:42c0::/27 +240a:42e0::/28 +240a:42f0::/29 +240a:42f8::/30 +240a:6001::/48 240a:a000::/20 240a:c000::/20 -240b:2000::/22 -240b:6000::/20 -240b:8000::/21 -240b:a000::/25 -240b:e000::/26 -240c::/28 +240b:e001::/32 +240b:e002::/31 +240b:e004::/30 +240b:e008::/29 +240b:e010::/32 240c:4000::/22 -240c:8000::/21 240c:c000::/20 240d:4000::/21 -240d:8000::/24 -240e::/24 -240e:100::/24 -240e:200::/23 -240e:400::/22 -240e:800::/21 -240e:1000::/20 -240e:2000::/19 -240f:4000::/24 -240f:8000::/24 -240f:c000::/24 \ No newline at end of file +240e::/20 +2602:f46d:6::/48 +2602:f92a:a46d::/48 +2602:f92a:a46f::/48 +2602:f92a:a474::/48 +2602:f92a:a47d::/48 +2602:f9ba:10c::/48 +2602:f9f6:400::/47 +2602:f9f6:402::/48 +2602:f9f6:450::/48 +2602:faa8:700::/44 +2602:fbda:600::/48 +2602:fbda:610::/48 +2602:fbda:620::/48 +2602:fbda:660::/44 +2605:9d80:8001::/48 +2605:9d80:8011::/48 +2605:9d80:8021::/48 +2605:9d80:8031::/48 +2605:9d80:8041::/48 +2605:9d80:8081::/48 +2605:9d80:9003::/48 +2605:9d80:9013::/48 +2605:9d80:9023::/48 +2605:9d80:9033::/48 +2605:9d80:9042::/48 +2605:9d80:9071::/48 +2605:9d80:9092::/48 +2804:1e48:9001::/48 +2804:1e48:9002::/48 +2a01:e281:a400::/48 +2a01:e281:a410::/44 +2a04:3e00:1002::/48 +2a04:f580:8010::/47 +2a04:f580:8090::/48 +2a04:f580:8210::/47 +2a04:f580:8290::/48 +2a04:f580:9010::/48 +2a04:f580:9012::/47 +2a04:f580:9020::/48 +2a04:f580:9030::/48 +2a04:f580:9040::/48 +2a04:f580:9050::/48 +2a04:f580:9060::/48 +2a04:f580:9070::/48 +2a04:f580:9080::/48 +2a04:f580:9210::/48 +2a04:f580:9212::/47 +2a04:f580:9220::/48 +2a04:f580:9230::/48 +2a04:f580:9240::/48 +2a04:f580:9250::/48 +2a04:f580:9260::/48 +2a04:f580:9270::/48 +2a04:f580:9280::/48 +2a04:f580:9290::/48 +2a05:1085::/32 +2a05:1087::/32 +2a06:3600:e000::/40 +2a06:3600:fb00::/40 +2a06:3600:fc00::/38 +2a06:3605::/32 +2a06:3606::/31 +2a06:a005:260::/43 +2a06:a005:280::/43 +2a06:a005:2a0::/44 +2a07:54c1:2200::/47 +2a07:54c1:2203::/48 +2a07:54c1:2205::/48 +2a0a:d680:a10::/48 +2a0a:d680:a31::/48 +2a0a:d680:8100::/47 +2a0a:d681:e000::/40 +2a0a:d681:fb00::/40 +2a0a:d681:fc00::/38 +2a0b:4340:90::/48 +2a0b:4340:97::/48 +2a0c:9a40:89c0::/48 +2a0c:b641:570::/47 +2a0c:b641:573::/48 +2a0d:c7c7:400::/38 +2a0e:aa06::/40 +2a0e:aa06:400::/44 +2a0e:aa06:440::/48 +2a0e:aa06:490::/44 +2a0e:aa06:4e0::/44 +2a0e:aa07:f0d0::/46 +2a0e:aa07:f0d4::/47 +2a0e:aa07:f0d8::/48 +2a0e:aa07:f0de::/47 +2a0e:b107:740::/44 +2a0e:b107:da0::/44 +2a0e:b107:14a0::/44 +2a0e:b107:1522::/48 +2a0e:b107:2440::/44 +2a0f:1cc5:14::/46 +2a0f:1cc5:1f::/48 +2a0f:1cc5:110::/44 +2a0f:1cc5:130::/44 +2a0f:1cc5:140::/44 +2a0f:1cc5:600::/47 +2a0f:1cc5:603::/48 +2a0f:1cc5:642::/48 +2a0f:1cc5:645::/48 +2a0f:1cc5:661::/48 +2a0f:1cc5:662::/48 +2a0f:1cc5:6a0::/48 +2a0f:1cc5:a00::/48 +2a0f:1cc5:f00::/46 +2a0f:1cc5:f04::/47 +2a0f:1cc5:f06::/48 +2a0f:1cc5:f09::/48 +2a0f:1cc5:fff::/48 +2a0f:1cc5:1600::/44 +2a0f:1cc5:1c00::/47 +2a0f:1cc5:1c02::/48 +2a0f:1cc5:1c30::/48 +2a0f:1cc5:1cc0::/48 +2a0f:1cc5:1d10::/47 +2a0f:1cc5:1d14::/48 +2a0f:1cc5:2000::/40 +2a0f:1cc5:2510::/44 +2a0f:1cc5:2520::/44 +2a0f:1cc5:2600::/41 +2a0f:1cc5:2680::/42 +2a0f:1cc5:2d01::/48 +2a0f:1cc5:2d03::/48 +2a0f:1cc5:3200::/45 +2a0f:1cc5:3208::/47 +2a0f:1cc5:3222::/48 +2a0f:1cc6:b110::/47 +2a0f:1cc6:b210::/47 +2a0f:1cc6:b212::/48 +2a0f:2706::/32 +2a0f:7803:e300::/40 +2a0f:85c1:bfe::/48 +2a0f:9400:6110::/48 +2a10:ccc0:cc1::/48 +2a10:ccc0:cc2::/48 +2a10:ccc0:ccc::/48 +2a12:cb41:200::/40 +2a12:cb46::/36 +2a12:cb46:6000::/44 +2a12:cb47:ffff::/48 +2a13:1800::/48 +2a13:1800:10::/48 +2a13:1800:80::/44 +2a13:1800:300::/44 +2a13:1801:180::/43 +2a13:1801:200::/44 +2a13:1802::/43 +2a13:8c87::/32 +2a13:a5c3:f000::/40 +2a13:a5c3:ff50::/44 +2a13:a5c5::/48 +2a13:b487:1200::/42 +2a14:67c1:70::/48 +2a14:67c1:74::/48 +2a14:67c1:b500::/47 +2a14:67c1:b511::/48 +2a14:67c1:b514::/48 +2a14:67c1:b530::/44 +2a14:67c1:b561::/48 +2a14:67c1:b563::/48 +2a14:67c1:b578::/48 +2a14:67c1:b586::/47 +2a14:67c1:b588::/47 +2a14:67c1:b590::/48 +2a14:67c1:b599::/48 +2a14:67c1:b5e0::/44 +2a14:67c2:519::/48 +2a14:67c3:c0::/48 +2a14:67c3:190::/47 +2a14:67c3:1100::/47 +2a14:67c3:6668::/45 +2a14:7580:740::/44 +2a14:7580:d00::/43 +2a14:7580:d20::/46 +2a14:7580:d41::/48 +2a14:7580:d42::/47 +2a14:7580:dff::/48 +2a14:7580:fffa::/48 +2a14:7581:ffb::/48 +2a14:7581:3814::/48 +2a14:7581:3818::/47 +2a14:7583:f224::/48 +2a14:7583:f228::/48 +2a14:7583:f22c::/48 +2a14:7583:f244::/48 +2a14:7583:f264::/48 +2a14:7583:f268::/48 +2a14:7583:f300::/46 +2a14:7583:f304::/47 +2a14:7583:f306::/48 +2a14:7583:f411::/48 +2a14:7583:f4f0::/48 +2a14:7583:f4f4::/48 +2a14:7583:f4fe::/48 +2a14:7583:f701::/48 +2a14:7583:f703::/48 +2a14:7583:f704::/46 +2a14:7583:f708::/46 +2a14:7583:f70c::/48 +2a14:7583:f743::/48 +2a14:7583:f744::/48 +2a14:7583:f764::/48 +2a14:7586:6100::/47 +2a14:7586:6103::/48 +2a14:7586:6104::/48 +2a14:7586:6107::/48 +2a14:7586:6110::/48 +2a14:7586:6300::/44 +2a14:7dc0:506::/48 +2c0f:f7a8:8011::/48 +2c0f:f7a8:8050::/48 +2c0f:f7a8:805f::/48 +2c0f:f7a8:8150::/48 +2c0f:f7a8:815f::/48 +2c0f:f7a8:8211::/48 +2c0f:f7a8:9020::/48 +2c0f:f7a8:9041::/48 +2c0f:f7a8:9211::/48 +2c0f:f7a8:9220::/48 \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/china_ip_route.ipset b/luci-app-openclash/root/etc/openclash/china_ip_route.ipset index a1b135d11..56ec7169c 100644 --- a/luci-app-openclash/root/etc/openclash/china_ip_route.ipset +++ b/luci-app-openclash/root/etc/openclash/china_ip_route.ipset @@ -1,1631 +1,620 @@ -1.0.1.0/24 -1.0.2.0/23 -1.0.8.0/21 -1.0.32.0/19 -1.1.0.0/24 -1.1.2.0/23 -1.1.4.0/22 1.1.8.0/24 -1.1.9.0/24 -1.1.10.0/23 -1.1.12.0/22 -1.1.16.0/20 -1.1.32.0/19 -1.2.0.0/23 -1.2.2.0/24 1.2.4.0/24 -1.2.5.0/24 -1.2.6.0/23 -1.2.8.0/24 -1.2.9.0/24 -1.2.10.0/23 -1.2.12.0/22 -1.2.16.0/20 -1.2.32.0/19 -1.2.64.0/18 -1.3.0.0/16 -1.4.1.0/24 -1.4.2.0/23 -1.4.4.0/24 -1.4.5.0/24 -1.4.6.0/23 -1.4.8.0/21 -1.4.16.0/20 -1.4.32.0/19 -1.4.64.0/18 -1.8.0.0/16 -1.10.0.0/21 -1.10.8.0/23 -1.10.11.0/24 -1.10.12.0/22 -1.10.16.0/20 -1.10.32.0/19 -1.10.64.0/18 +1.8.1.0/24 +1.8.8.0/24 1.12.0.0/14 1.24.0.0/13 1.45.0.0/16 -1.48.0.0/15 -1.50.0.0/16 -1.51.0.0/16 +1.48.0.0/14 1.56.0.0/13 1.68.0.0/14 1.80.0.0/13 1.88.0.0/14 -1.92.0.0/15 +1.92.0.0/16 1.94.0.0/15 1.116.0.0/15 -1.118.0.0/16 1.119.0.0/17 -1.119.128.0/17 +1.119.128.0/18 +1.119.192.0/20 +1.119.208.0/22 1.180.0.0/14 1.184.0.0/15 1.188.0.0/14 1.192.0.0/13 1.202.0.0/15 1.204.0.0/14 -14.0.0.0/21 -14.0.12.0/22 -14.1.0.0/22 -14.1.24.0/22 -14.1.96.0/22 -14.1.108.0/22 +5.10.138.0/23 +5.10.140.0/24 +5.10.143.0/24 +8.25.82.0/24 +8.38.121.0/24 +8.45.52.0/24 +8.45.176.0/24 +8.48.85.0/24 +8.128.4.0/22 +8.128.32.0/19 +8.128.64.0/19 +8.128.96.0/20 +8.129.0.0/16 +8.130.0.0/15 +8.132.0.0/14 +8.136.0.0/13 +8.144.0.0/14 +8.148.0.0/19 +8.148.36.0/22 +8.148.40.0/22 +8.148.64.0/18 +8.148.128.0/17 +8.149.0.0/16 +8.150.0.0/20 +8.150.16.0/21 +8.150.64.0/23 +8.152.0.0/13 +8.160.0.0/15 +8.162.0.0/18 +8.162.64.0/19 +8.163.0.0/16 +8.164.0.0/14 +8.168.0.0/15 14.16.0.0/12 -14.102.128.0/22 -14.102.156.0/22 -14.102.180.0/22 14.103.0.0/16 14.104.0.0/13 14.112.0.0/12 -14.130.0.0/15 14.134.0.0/15 14.144.0.0/12 -14.192.60.0/22 -14.192.76.0/22 -14.196.0.0/15 14.204.0.0/15 14.208.0.0/12 -27.0.128.0/22 +16.2.142.0/23 +23.26.67.0/24 +23.161.8.0/24 +23.162.120.0/24 +27.0.128.0/24 +27.0.130.0/23 27.0.132.0/22 -27.0.160.0/22 -27.0.164.0/22 -27.0.188.0/22 +27.0.160.0/21 27.0.204.0/22 -27.0.208.0/22 -27.0.212.0/22 +27.0.208.0/21 27.8.0.0/13 27.16.0.0/12 -27.34.232.0/21 27.36.0.0/14 27.40.0.0/13 -27.50.40.0/21 27.50.128.0/17 -27.54.72.0/21 -27.54.152.0/21 -27.54.192.0/18 -27.98.208.0/20 27.98.224.0/19 -27.99.128.0/17 -27.103.0.0/16 -27.106.128.0/18 27.106.204.0/22 -27.109.32.0/19 27.109.124.0/22 -27.112.0.0/18 -27.112.80.0/20 -27.112.112.0/22 -27.112.116.0/22 -27.113.128.0/18 +27.112.0.0/21 27.115.0.0/17 -27.116.44.0/22 -27.121.72.0/21 -27.121.120.0/21 27.128.0.0/15 -27.131.220.0/22 27.144.0.0/16 27.148.0.0/14 27.152.0.0/13 27.184.0.0/13 27.192.0.0/11 27.224.0.0/14 -36.0.0.0/22 -36.0.8.0/21 -36.0.16.0/20 -36.0.32.0/19 -36.0.64.0/18 -36.0.128.0/17 +31.56.124.0/24 36.1.0.0/16 36.4.0.0/14 36.16.0.0/12 36.32.0.0/14 36.36.0.0/16 -36.37.0.0/19 -36.37.36.0/23 -36.37.39.0/24 -36.37.40.0/21 -36.37.48.0/20 36.40.0.0/13 36.48.0.0/15 -36.50.226.0/23 -36.50.254.0/23 -36.51.0.0/16 +36.50.226.0/24 +36.51.224.0/23 +36.51.226.0/24 +36.51.248.0/24 +36.51.253.0/24 +36.51.254.0/24 36.56.0.0/13 -36.96.0.0/11 +36.96.0.0/12 +36.112.0.0/15 +36.114.0.0/16 36.128.0.0/10 -36.192.0.0/11 +36.192.0.0/16 +36.206.0.0/16 +36.212.0.0/15 +36.214.0.0/16 +36.221.0.0/17 36.248.0.0/14 -36.254.0.0/16 36.255.116.0/22 36.255.128.0/22 -36.255.164.0/22 -36.255.172.0/22 -36.255.176.0/22 -39.0.0.0/24 -39.0.2.0/23 -39.0.4.0/22 -39.0.8.0/21 -39.0.16.0/20 -39.0.32.0/19 -39.0.64.0/18 -39.0.128.0/17 +36.255.164.0/24 +38.84.220.0/24 +38.95.118.0/23 +38.95.121.0/24 +38.95.122.0/23 +38.95.124.0/22 +38.105.24.0/24 +38.105.26.0/23 +38.105.28.0/22 +38.134.56.0/24 +38.134.58.0/23 +38.247.24.0/22 +38.247.32.0/23 +38.247.35.0/24 +38.247.36.0/22 39.64.0.0/11 39.96.0.0/13 39.104.0.0/14 39.108.0.0/16 +39.125.80.0/24 39.128.0.0/10 40.72.0.0/15 40.125.128.0/17 40.126.64.0/18 40.162.0.0/16 -42.0.0.0/22 -42.0.8.0/21 -42.0.16.0/21 -42.0.24.0/22 -42.0.32.0/19 -42.0.128.0/17 -42.1.0.0/19 -42.1.32.0/20 -42.1.48.0/21 -42.1.56.0/22 -42.1.128.0/17 42.4.0.0/14 42.48.0.0/15 -42.50.0.0/16 42.51.0.0/16 42.52.0.0/14 42.56.0.0/14 42.62.0.0/17 -42.62.128.0/19 -42.62.160.0/20 -42.62.180.0/22 -42.62.184.0/21 42.63.0.0/16 42.80.0.0/15 -42.83.64.0/20 -42.83.80.0/22 -42.83.88.0/21 -42.83.96.0/19 -42.83.128.0/17 +42.83.128.0/22 +42.83.132.0/23 +42.83.134.0/24 +42.83.144.0/22 +42.83.189.0/24 +42.83.190.0/24 +42.83.200.0/23 42.84.0.0/14 42.88.0.0/13 -42.96.64.0/19 -42.96.96.0/21 -42.96.108.0/22 -42.96.112.0/20 42.96.128.0/17 42.97.0.0/16 42.99.0.0/18 -42.99.64.0/19 -42.99.96.0/20 -42.99.112.0/22 -42.99.120.0/21 42.100.0.0/14 42.120.0.0/15 42.122.0.0/16 -42.123.0.0/19 -42.123.36.0/22 -42.123.40.0/21 -42.123.48.0/20 42.123.64.0/18 -42.123.128.0/17 -42.128.0.0/12 -42.156.0.0/19 -42.156.36.0/22 -42.156.40.0/21 -42.156.48.0/20 -42.156.64.0/18 42.156.128.0/17 -42.157.0.0/16 -42.158.0.0/16 -42.159.0.0/16 -42.160.0.0/12 +42.157.128.0/21 +42.157.160.0/19 +42.157.192.0/21 +42.158.0.0/15 42.176.0.0/13 42.184.0.0/15 42.186.0.0/16 -42.187.0.0/18 -42.187.64.0/19 -42.187.96.0/20 -42.187.112.0/21 42.187.120.0/22 42.187.128.0/17 42.192.0.0/15 -42.194.0.0/21 -42.194.8.0/22 -42.194.12.0/22 -42.194.16.0/20 -42.194.32.0/19 -42.194.64.0/18 +42.194.12.0/24 42.194.128.0/17 -42.195.0.0/16 -42.196.0.0/14 -42.201.0.0/17 +42.199.240.0/22 +42.201.32.0/19 +42.201.64.0/21 +42.201.72.0/22 +42.201.76.0/23 42.202.0.0/15 -42.204.0.0/14 -42.208.0.0/12 42.224.0.0/12 -42.240.0.0/17 +42.240.0.0/21 +42.240.8.0/22 +42.240.12.0/23 +42.240.16.0/23 +42.240.20.0/22 +42.240.48.0/24 42.240.128.0/17 42.242.0.0/15 42.244.0.0/14 -42.248.0.0/13 +42.248.0.0/15 +43.102.128.0/21 +43.102.136.0/22 +43.102.144.0/20 +43.109.0.0/22 +43.109.4.0/23 +43.109.7.0/24 +43.109.8.0/23 +43.109.10.0/24 +43.109.12.0/22 +43.109.16.0/22 +43.109.21.0/24 +43.109.22.0/24 +43.109.24.0/23 +43.109.26.0/24 +43.109.28.0/24 +43.109.30.0/23 +43.109.32.0/23 +43.109.34.0/24 +43.109.37.0/24 +43.109.38.0/23 +43.109.40.0/22 +43.109.44.0/23 +43.109.46.0/24 +43.109.48.0/23 +43.109.51.0/24 +43.109.52.0/22 +43.109.57.0/24 +43.109.58.0/23 +43.109.60.0/22 +43.109.64.0/22 +43.109.68.0/23 +43.109.70.0/24 +43.109.72.0/23 +43.109.76.0/22 +43.109.83.0/24 +43.109.84.0/22 +43.109.88.0/22 +43.109.93.0/24 +43.109.94.0/24 +43.109.96.0/23 +43.109.100.0/23 +43.109.102.0/24 +43.109.105.0/24 +43.109.107.0/24 +43.109.111.0/24 +43.109.112.0/24 +43.109.114.0/23 +43.109.116.0/23 +43.109.134.0/23 +43.109.146.0/24 +43.109.148.0/24 +43.109.162.0/23 +43.109.167.0/24 43.136.0.0/13 -43.144.0.0/13 -43.176.0.0/12 -43.192.0.0/15 -43.194.0.0/16 -43.195.0.0/16 -43.196.0.0/15 +43.144.0.0/15 +43.176.0.0/14 +43.180.0.0/16 +43.192.0.0/16 +43.193.0.0/18 +43.193.64.0/23 +43.194.0.0/20 +43.194.16.0/24 +43.195.0.0/20 +43.196.0.0/16 43.224.12.0/22 43.224.24.0/22 -43.224.44.0/22 -43.224.52.0/22 +43.224.52.0/23 43.224.56.0/22 -43.224.64.0/22 -43.224.68.0/22 -43.224.72.0/22 43.224.80.0/22 -43.224.100.0/22 -43.224.144.0/22 -43.224.160.0/22 -43.224.176.0/22 -43.224.184.0/22 -43.224.200.0/22 -43.224.204.0/22 -43.224.208.0/22 -43.224.212.0/22 -43.224.216.0/22 -43.224.240.0/22 +43.224.240.0/24 43.225.76.0/22 -43.225.84.0/22 +43.225.84.0/23 +43.225.87.0/24 43.225.120.0/22 -43.225.172.0/22 43.225.180.0/22 43.225.208.0/22 43.225.216.0/22 -43.225.220.0/22 -43.225.224.0/22 -43.225.228.0/22 -43.225.232.0/22 -43.225.236.0/22 -43.225.240.0/22 -43.225.244.0/22 -43.225.252.0/22 -43.226.32.0/22 -43.226.36.0/22 -43.226.40.0/22 -43.226.44.0/22 -43.226.48.0/22 -43.226.52.0/22 -43.226.56.0/22 -43.226.60.0/22 -43.226.64.0/22 -43.226.68.0/22 -43.226.72.0/22 -43.226.76.0/22 -43.226.80.0/22 -43.226.84.0/22 -43.226.88.0/22 -43.226.92.0/22 -43.226.96.0/22 -43.226.100.0/22 -43.226.104.0/22 -43.226.108.0/22 -43.226.112.0/22 -43.226.116.0/22 -43.226.120.0/22 -43.226.128.0/22 -43.226.132.0/22 -43.226.136.0/22 -43.226.140.0/22 -43.226.144.0/22 -43.226.148.0/22 -43.226.152.0/22 -43.226.156.0/22 -43.226.160.0/22 +43.225.255.0/24 +43.226.32.0/19 +43.226.64.0/20 +43.226.112.0/21 +43.226.128.0/19 43.226.164.0/22 -43.226.168.0/22 -43.226.172.0/22 -43.226.176.0/22 -43.226.180.0/22 -43.226.184.0/22 -43.226.188.0/22 -43.226.192.0/22 -43.226.196.0/22 -43.226.200.0/22 -43.226.204.0/22 -43.226.208.0/22 -43.226.212.0/22 43.226.236.0/22 -43.226.240.0/22 -43.226.244.0/22 -43.226.248.0/22 -43.226.252.0/22 -43.227.0.0/22 -43.227.4.0/22 -43.227.8.0/22 -43.227.32.0/22 -43.227.36.0/22 -43.227.40.0/22 -43.227.44.0/22 -43.227.48.0/22 -43.227.52.0/22 -43.227.56.0/22 -43.227.60.0/22 -43.227.64.0/22 -43.227.68.0/22 -43.227.72.0/22 -43.227.76.0/22 -43.227.80.0/22 -43.227.84.0/22 -43.227.88.0/22 -43.227.92.0/22 -43.227.96.0/22 -43.227.100.0/22 +43.227.56.0/21 +43.227.64.0/21 +43.227.80.0/20 43.227.104.0/22 -43.227.136.0/22 43.227.140.0/22 -43.227.144.0/22 -43.227.152.0/22 -43.227.156.0/22 -43.227.160.0/22 -43.227.164.0/22 -43.227.168.0/22 -43.227.172.0/22 -43.227.176.0/22 -43.227.180.0/22 -43.227.188.0/22 -43.227.192.0/22 -43.227.196.0/22 -43.227.200.0/22 -43.227.204.0/22 -43.227.208.0/22 -43.227.212.0/22 -43.227.216.0/22 -43.227.220.0/22 -43.227.232.0/22 -43.227.248.0/22 +43.227.152.0/21 +43.227.160.0/20 +43.227.176.0/21 +43.227.192.0/19 43.227.252.0/22 -43.228.0.0/22 -43.228.4.0/22 -43.228.8.0/22 -43.228.12.0/22 -43.228.16.0/22 -43.228.20.0/22 -43.228.24.0/22 -43.228.28.0/22 -43.228.32.0/22 +43.228.0.0/19 43.228.36.0/22 -43.228.40.0/22 -43.228.44.0/22 -43.228.48.0/22 -43.228.52.0/22 -43.228.56.0/22 -43.228.60.0/22 -43.228.64.0/22 -43.228.68.0/22 +43.228.40.0/21 +43.228.48.0/20 +43.228.64.0/21 43.228.76.0/22 -43.228.100.0/22 43.228.116.0/22 -43.228.120.0/22 -43.228.132.0/22 -43.228.136.0/22 -43.228.148.0/22 -43.228.152.0/22 -43.228.188.0/22 43.228.204.0/22 43.228.240.0/22 -43.229.40.0/22 43.229.48.0/22 -43.229.56.0/22 -43.229.96.0/22 -43.229.136.0/22 -43.229.140.0/22 -43.229.144.0/22 -43.229.168.0/22 -43.229.172.0/22 -43.229.176.0/22 -43.229.180.0/22 43.229.184.0/22 -43.229.188.0/22 -43.229.192.0/22 -43.229.196.0/22 43.229.216.0/22 -43.229.220.0/22 -43.229.232.0/22 -43.229.236.0/22 -43.230.20.0/22 -43.230.32.0/22 -43.230.68.0/22 43.230.72.0/22 -43.230.124.0/22 -43.230.136.0/22 -43.230.220.0/22 -43.230.224.0/22 -43.230.228.0/22 -43.230.232.0/22 -43.230.236.0/22 -43.230.240.0/22 -43.230.244.0/22 -43.230.248.0/22 -43.230.252.0/22 +43.230.221.0/24 +43.230.222.0/23 43.231.32.0/22 -43.231.36.0/22 -43.231.40.0/22 -43.231.44.0/22 -43.231.80.0/22 -43.231.84.0/22 -43.231.88.0/22 -43.231.92.0/22 -43.231.96.0/22 -43.231.100.0/22 -43.231.104.0/22 -43.231.108.0/22 -43.231.136.0/22 -43.231.140.0/22 -43.231.144.0/22 -43.231.148.0/22 -43.231.152.0/22 -43.231.156.0/22 -43.231.160.0/22 -43.231.164.0/22 +43.231.41.0/24 +43.231.46.0/23 +43.231.96.0/20 +43.231.144.0/20 +43.231.160.0/21 43.231.168.0/22 -43.231.172.0/22 -43.231.176.0/22 -43.231.180.0/22 -43.236.0.0/22 -43.236.4.0/22 -43.236.8.0/22 -43.236.12.0/22 -43.236.16.0/22 -43.236.20.0/22 -43.236.24.0/22 -43.236.28.0/22 -43.236.32.0/22 -43.236.36.0/22 -43.236.40.0/22 -43.236.44.0/22 -43.236.48.0/22 -43.236.52.0/22 -43.236.56.0/22 -43.236.60.0/22 -43.236.64.0/22 -43.236.68.0/22 -43.236.72.0/22 -43.236.76.0/22 -43.236.80.0/22 -43.236.84.0/22 -43.236.88.0/22 -43.236.92.0/22 -43.236.96.0/22 -43.236.100.0/22 -43.236.104.0/22 -43.236.108.0/22 -43.236.112.0/22 -43.236.116.0/22 -43.236.120.0/22 -43.236.124.0/22 -43.236.128.0/22 -43.236.132.0/22 -43.236.136.0/22 -43.236.140.0/22 -43.236.144.0/22 -43.236.148.0/22 -43.236.152.0/22 -43.236.156.0/22 -43.236.160.0/22 -43.236.164.0/22 -43.236.168.0/22 -43.236.172.0/22 -43.236.176.0/22 -43.236.180.0/22 -43.236.184.0/22 -43.236.188.0/22 -43.236.192.0/22 -43.236.196.0/22 -43.236.200.0/22 -43.236.204.0/22 -43.236.208.0/22 -43.236.212.0/22 -43.236.216.0/22 -43.236.220.0/22 -43.236.224.0/22 -43.236.228.0/22 -43.236.232.0/22 -43.236.236.0/22 -43.236.240.0/22 -43.236.244.0/22 -43.236.248.0/22 -43.236.252.0/22 -43.237.0.0/22 -43.237.4.0/22 -43.237.8.0/22 -43.237.12.0/22 -43.237.16.0/22 -43.237.20.0/22 -43.237.24.0/22 -43.237.28.0/22 -43.237.32.0/22 -43.237.36.0/22 -43.237.40.0/22 -43.237.44.0/22 -43.237.48.0/22 -43.237.52.0/22 -43.237.56.0/22 -43.237.60.0/22 -43.237.64.0/22 -43.237.68.0/22 -43.237.72.0/22 -43.237.76.0/22 -43.237.80.0/22 -43.237.84.0/22 -43.237.88.0/22 -43.237.92.0/22 -43.237.96.0/22 -43.237.100.0/22 -43.237.104.0/22 -43.237.108.0/22 -43.237.112.0/22 -43.237.116.0/22 -43.237.120.0/22 -43.237.124.0/22 -43.237.128.0/22 -43.237.132.0/22 -43.237.136.0/22 -43.237.140.0/22 -43.237.144.0/22 -43.237.148.0/22 -43.237.152.0/22 -43.237.156.0/22 -43.237.160.0/22 -43.237.164.0/22 -43.237.168.0/22 -43.237.172.0/22 -43.237.176.0/22 -43.237.180.0/22 -43.237.184.0/22 -43.237.188.0/22 -43.237.192.0/22 -43.237.200.0/22 -43.237.204.0/22 -43.237.208.0/22 -43.237.212.0/22 -43.237.216.0/22 -43.237.220.0/22 -43.237.224.0/22 -43.237.228.0/22 -43.237.232.0/22 -43.237.236.0/22 -43.237.240.0/22 -43.237.244.0/22 -43.237.248.0/22 -43.237.252.0/22 -43.238.0.0/22 -43.238.4.0/22 -43.238.8.0/22 -43.238.12.0/22 -43.238.16.0/22 -43.238.20.0/22 -43.238.24.0/22 -43.238.28.0/22 -43.238.32.0/22 -43.238.36.0/22 -43.238.40.0/22 -43.238.44.0/22 -43.238.48.0/22 -43.238.52.0/22 -43.238.56.0/22 -43.238.60.0/22 -43.238.64.0/22 -43.238.68.0/22 -43.238.72.0/22 -43.238.76.0/22 -43.238.80.0/22 -43.238.84.0/22 -43.238.88.0/22 -43.238.92.0/22 -43.238.96.0/22 -43.238.100.0/22 -43.238.104.0/22 -43.238.108.0/22 -43.238.112.0/22 -43.238.116.0/22 -43.238.120.0/22 -43.238.124.0/22 -43.238.128.0/22 -43.238.132.0/22 -43.238.136.0/22 -43.238.140.0/22 -43.238.144.0/22 -43.238.148.0/22 -43.238.152.0/22 -43.238.156.0/22 -43.238.160.0/22 -43.238.164.0/22 -43.238.168.0/22 -43.238.172.0/22 -43.238.176.0/22 -43.238.180.0/22 -43.238.184.0/22 -43.238.188.0/22 -43.238.192.0/22 -43.238.196.0/22 -43.238.200.0/22 -43.238.204.0/22 -43.238.208.0/22 -43.238.212.0/22 -43.238.216.0/22 -43.238.220.0/22 -43.238.224.0/22 -43.238.228.0/22 -43.238.232.0/22 -43.238.236.0/22 -43.238.240.0/22 -43.238.244.0/22 -43.238.248.0/22 -43.238.252.0/22 -43.239.0.0/22 -43.239.4.0/22 -43.239.8.0/21 -43.239.16.0/22 -43.239.20.0/22 -43.239.24.0/22 -43.239.28.0/22 -43.239.32.0/22 -43.239.36.0/22 -43.239.40.0/22 -43.239.44.0/22 -43.239.48.0/22 -43.239.116.0/22 43.239.120.0/22 -43.239.172.0/22 -43.239.176.0/22 +43.239.172.0/24 43.240.0.0/22 -43.240.56.0/22 -43.240.60.0/22 -43.240.68.0/22 +43.240.56.0/21 43.240.72.0/22 -43.240.76.0/22 -43.240.84.0/22 43.240.124.0/22 43.240.128.0/22 -43.240.132.0/22 +43.240.133.0/24 43.240.136.0/22 -43.240.144.0/22 43.240.156.0/22 -43.240.160.0/22 -43.240.164.0/22 -43.240.168.0/22 -43.240.172.0/22 -43.240.176.0/22 -43.240.180.0/22 -43.240.184.0/22 -43.240.188.0/22 -43.240.192.0/22 -43.240.196.0/22 -43.240.200.0/22 +43.240.192.0/21 +43.240.200.0/23 +43.240.202.0/24 43.240.204.0/22 -43.240.208.0/22 -43.240.212.0/22 -43.240.216.0/22 -43.240.220.0/22 -43.240.240.0/22 -43.240.244.0/22 -43.240.248.0/22 -43.240.252.0/22 -43.241.0.0/22 -43.241.4.0/22 -43.241.8.0/22 -43.241.12.0/22 +43.240.216.0/21 43.241.16.0/22 -43.241.20.0/22 43.241.48.0/22 43.241.76.0/22 -43.241.80.0/22 -43.241.84.0/22 -43.241.88.0/22 -43.241.92.0/22 -43.241.112.0/22 -43.241.168.0/22 -43.241.172.0/22 -43.241.176.0/22 43.241.180.0/22 -43.241.184.0/22 -43.241.208.0/22 -43.241.212.0/22 -43.241.216.0/22 -43.241.220.0/22 -43.241.224.0/22 -43.241.228.0/22 -43.241.232.0/22 -43.241.236.0/22 +43.241.208.0/20 +43.241.224.0/20 43.241.240.0/22 -43.241.248.0/22 -43.241.252.0/22 -43.242.8.0/22 -43.242.12.0/22 -43.242.16.0/21 -43.242.24.0/22 -43.242.28.0/22 -43.242.48.0/22 -43.242.52.0/22 -43.242.56.0/22 -43.242.60.0/22 -43.242.64.0/22 43.242.72.0/22 -43.242.76.0/22 -43.242.80.0/22 43.242.84.0/22 -43.242.88.0/22 -43.242.92.0/22 43.242.96.0/22 -43.242.144.0/22 -43.242.148.0/22 -43.242.152.0/22 -43.242.156.0/22 -43.242.160.0/22 +43.242.152.0/21 43.242.164.0/22 -43.242.168.0/22 43.242.180.0/22 -43.242.188.0/22 -43.242.192.0/22 -43.242.196.0/22 +43.242.192.0/21 43.242.204.0/22 -43.242.216.0/22 -43.242.220.0/22 43.242.252.0/22 43.243.4.0/22 -43.243.8.0/22 43.243.12.0/22 43.243.16.0/22 43.243.88.0/22 43.243.128.0/22 43.243.136.0/22 -43.243.144.0/22 43.243.148.0/22 43.243.156.0/22 -43.243.180.0/22 43.243.228.0/22 43.243.232.0/22 43.243.244.0/22 -43.246.0.0/22 -43.246.4.0/22 -43.246.8.0/22 -43.246.12.0/22 -43.246.16.0/22 -43.246.20.0/22 -43.246.24.0/22 -43.246.28.0/22 -43.246.32.0/22 -43.246.36.0/22 -43.246.40.0/22 -43.246.44.0/22 -43.246.48.0/22 -43.246.52.0/22 -43.246.56.0/22 -43.246.60.0/22 -43.246.64.0/22 -43.246.68.0/22 -43.246.72.0/22 -43.246.76.0/22 -43.246.80.0/22 -43.246.84.0/22 -43.246.88.0/22 -43.246.92.0/22 -43.246.96.0/22 -43.246.112.0/22 -43.246.228.0/22 -43.247.4.0/22 -43.247.8.0/22 -43.247.44.0/22 -43.247.48.0/22 +43.247.4.0/24 43.247.68.0/22 -43.247.76.0/22 43.247.84.0/22 43.247.88.0/22 -43.247.92.0/22 -43.247.96.0/22 43.247.100.0/22 -43.247.108.0/22 -43.247.112.0/22 -43.247.148.0/22 -43.247.152.0/22 -43.247.176.0/22 -43.247.180.0/22 -43.247.184.0/22 -43.247.188.0/22 +43.247.176.0/20 43.247.196.0/22 -43.247.200.0/22 -43.247.204.0/22 -43.247.208.0/22 -43.247.212.0/22 -43.247.216.0/22 -43.247.220.0/22 -43.247.224.0/22 -43.247.228.0/22 -43.247.232.0/22 -43.247.236.0/22 -43.247.240.0/22 43.247.244.0/22 43.247.248.0/22 -43.247.252.0/22 43.248.0.0/22 -43.248.4.0/22 -43.248.20.0/22 -43.248.28.0/22 43.248.48.0/22 43.248.76.0/22 -43.248.80.0/22 -43.248.84.0/22 -43.248.88.0/22 -43.248.92.0/22 -43.248.96.0/22 -43.248.100.0/22 -43.248.104.0/22 +43.248.96.0/21 43.248.108.0/22 -43.248.112.0/22 -43.248.116.0/22 -43.248.120.0/22 -43.248.124.0/22 -43.248.128.0/22 -43.248.132.0/22 -43.248.136.0/22 -43.248.140.0/22 -43.248.144.0/22 -43.248.148.0/22 -43.248.176.0/22 -43.248.180.0/22 -43.248.184.0/22 -43.248.188.0/22 -43.248.192.0/22 -43.248.196.0/22 -43.248.200.0/22 -43.248.204.0/22 -43.248.208.0/22 -43.248.228.0/22 +43.248.112.0/21 +43.248.128.0/20 +43.248.184.0/21 +43.248.192.0/20 43.248.232.0/22 43.248.244.0/22 -43.249.4.0/22 -43.249.120.0/22 -43.249.132.0/22 43.249.136.0/22 43.249.144.0/22 -43.249.148.0/22 -43.249.152.0/22 -43.249.156.0/22 -43.249.160.0/22 -43.249.164.0/22 43.249.168.0/22 43.249.192.0/22 43.249.236.0/22 43.250.4.0/22 -43.250.12.0/22 -43.250.16.0/22 -43.250.20.0/22 -43.250.28.0/22 43.250.32.0/22 -43.250.36.0/22 -43.250.72.0/22 43.250.96.0/22 -43.250.100.0/22 -43.250.104.0/22 -43.250.108.0/22 43.250.112.0/22 -43.250.116.0/22 -43.250.128.0/22 43.250.144.0/22 -43.250.148.0/22 -43.250.160.0/22 43.250.168.0/22 -43.250.172.0/22 -43.250.176.0/22 -43.250.180.0/23 43.250.200.0/22 -43.250.212.0/22 -43.250.216.0/22 -43.250.220.0/22 43.250.236.0/22 43.250.244.0/22 43.251.4.0/22 -43.251.8.0/22 43.251.36.0/22 -43.251.100.0/22 -43.251.116.0/22 -43.251.192.0/22 43.251.232.0/22 -43.251.236.0/22 43.251.244.0/22 -43.252.48.0/22 -43.252.56.0/22 +43.252.48.0/24 43.254.0.0/22 -43.254.4.0/22 43.254.8.0/22 43.254.24.0/22 -43.254.36.0/22 43.254.44.0/22 43.254.52.0/22 -43.254.64.0/22 -43.254.72.0/22 -43.254.84.0/22 43.254.88.0/22 -43.254.92.0/22 43.254.100.0/22 -43.254.104.0/22 -43.254.112.0/22 +43.254.104.0/23 +43.254.106.0/24 43.254.116.0/22 -43.254.128.0/22 43.254.136.0/22 -43.254.140.0/22 -43.254.144.0/22 -43.254.148.0/22 -43.254.152.0/22 -43.254.156.0/22 -43.254.168.0/22 -43.254.172.0/22 -43.254.180.0/22 -43.254.184.0/22 -43.254.188.0/22 +43.254.140.0/23 +43.254.144.0/20 +43.254.168.0/21 43.254.192.0/22 -43.254.196.0/22 43.254.200.0/22 -43.254.208.0/22 43.254.220.0/22 -43.254.224.0/22 -43.254.228.0/22 -43.254.232.0/22 -43.254.236.0/22 +43.254.224.0/20 43.254.240.0/22 -43.254.248.0/22 -43.254.252.0/22 +43.254.248.0/21 43.255.0.0/22 -43.255.4.0/22 -43.255.8.0/22 -43.255.16.0/22 -43.255.48.0/22 -43.255.64.0/22 43.255.68.0/22 -43.255.72.0/22 -43.255.76.0/22 43.255.84.0/22 43.255.96.0/22 -43.255.144.0/22 -43.255.176.0/22 43.255.184.0/22 43.255.192.0/22 43.255.200.0/22 -43.255.204.0/22 -43.255.208.0/22 43.255.212.0/22 -43.255.224.0/22 -43.255.228.0/22 -43.255.232.0/22 -43.255.244.0/22 +43.255.224.0/21 +44.30.120.0/24 +44.31.28.0/24 +44.31.43.0/24 +44.31.212.0/24 +44.31.216.0/24 +44.32.69.0/24 +44.32.191.0/24 +45.9.11.0/24 +45.12.82.0/24 45.40.192.0/18 -45.65.16.0/22 45.65.20.0/22 45.65.24.0/22 -45.65.28.0/22 -45.112.132.0/22 -45.112.188.0/22 -45.112.208.0/22 -45.112.212.0/22 -45.112.216.0/22 -45.112.220.0/22 -45.112.228.0/22 +45.82.239.0/24 +45.86.73.0/24 45.112.232.0/22 -45.112.236.0/22 -45.113.12.0/22 -45.113.16.0/22 45.113.20.0/22 45.113.24.0/22 -45.113.28.0/22 45.113.40.0/22 -45.113.52.0/22 -45.113.56.0/22 -45.113.72.0/22 -45.113.144.0/22 -45.113.148.0/22 -45.113.168.0/22 -45.113.176.0/22 -45.113.184.0/22 45.113.200.0/22 -45.113.204.0/22 -45.113.208.0/22 -45.113.212.0/22 -45.113.216.0/22 -45.113.220.0/22 -45.113.240.0/22 -45.113.252.0/22 -45.114.0.0/22 -45.114.32.0/22 -45.114.40.0/22 -45.114.52.0/22 -45.114.96.0/22 -45.114.124.0/22 -45.114.136.0/22 -45.114.196.0/22 -45.114.200.0/22 -45.114.228.0/22 -45.114.252.0/22 +45.113.206.0/24 45.115.44.0/22 -45.115.100.0/22 -45.115.120.0/22 -45.115.132.0/22 45.115.144.0/22 -45.115.156.0/22 45.115.164.0/22 45.115.200.0/22 -45.115.212.0/22 -45.115.228.0/22 -45.115.236.0/22 -45.115.244.0/22 -45.115.248.0/22 -45.116.16.0/22 -45.116.24.0/22 45.116.32.0/22 -45.116.36.0/22 45.116.52.0/22 -45.116.96.0/22 45.116.100.0/22 45.116.140.0/22 45.116.152.0/22 45.116.208.0/22 45.117.8.0/22 -45.117.20.0/22 45.117.68.0/22 -45.117.124.0/22 -45.117.252.0/22 -45.119.52.0/22 45.119.60.0/22 -45.119.64.0/22 -45.119.68.0/22 -45.119.72.0/22 -45.119.104.0/22 +45.119.64.0/21 +45.119.104.0/23 45.119.116.0/22 -45.119.232.0/22 45.120.100.0/22 -45.120.140.0/22 45.120.164.0/22 -45.120.240.0/22 -45.121.52.0/22 -45.121.64.0/22 -45.121.68.0/22 -45.121.72.0/22 -45.121.92.0/22 -45.121.96.0/22 -45.121.172.0/22 -45.121.176.0/22 -45.121.212.0/22 -45.121.240.0/22 -45.121.244.0/22 -45.121.248.0/22 -45.121.252.0/22 -45.122.0.0/22 -45.122.4.0/22 -45.122.8.0/22 -45.122.12.0/22 -45.122.16.0/22 -45.122.20.0/22 -45.122.24.0/22 -45.122.28.0/22 -45.122.32.0/22 -45.122.36.0/22 -45.122.40.0/22 -45.122.60.0/22 -45.122.64.0/22 -45.122.68.0/22 -45.122.72.0/22 -45.122.76.0/22 -45.122.80.0/22 -45.122.84.0/22 -45.122.88.0/22 -45.122.92.0/22 -45.122.96.0/21 -45.122.104.0/22 -45.122.108.0/22 -45.122.112.0/22 -45.122.116.0/22 -45.122.160.0/22 -45.122.164.0/22 -45.122.168.0/22 -45.122.172.0/22 -45.122.176.0/22 -45.122.180.0/22 -45.122.184.0/22 -45.122.188.0/22 -45.122.192.0/22 -45.122.196.0/22 -45.122.200.0/22 -45.122.204.0/22 -45.122.208.0/22 -45.122.212.0/22 -45.122.216.0/22 -45.123.28.0/22 -45.123.32.0/22 -45.123.36.0/22 -45.123.44.0/22 -45.123.48.0/22 -45.123.52.0/22 -45.123.56.0/22 -45.123.60.0/22 -45.123.64.0/22 -45.123.68.0/22 -45.123.72.0/22 -45.123.76.0/22 -45.123.80.0/22 -45.123.84.0/22 -45.123.88.0/22 -45.123.120.0/22 +45.120.243.0/24 +45.121.52.0/24 +45.121.55.0/24 45.123.128.0/22 -45.123.132.0/22 -45.123.136.0/22 -45.123.148.0/22 -45.123.152.0/22 -45.123.156.0/22 -45.123.164.0/22 -45.123.168.0/22 -45.123.172.0/22 -45.123.176.0/22 -45.123.180.0/22 -45.123.184.0/22 -45.123.204.0/22 -45.123.212.0/22 -45.123.224.0/22 -45.123.228.0/22 -45.123.232.0/22 -45.123.236.0/22 -45.123.240.0/22 -45.123.244.0/22 -45.123.248.0/22 -45.123.252.0/22 -45.124.0.0/22 +45.123.168.0/21 +45.123.176.0/21 45.124.20.0/22 -45.124.28.0/22 -45.124.32.0/22 -45.124.36.0/22 -45.124.44.0/22 45.124.68.0/22 45.124.76.0/22 45.124.80.0/22 -45.124.100.0/22 45.124.124.0/22 -45.124.172.0/22 -45.124.176.0/22 -45.124.208.0/22 -45.124.248.0/22 -45.125.16.0/22 -45.125.24.0/22 45.125.44.0/22 -45.125.52.0/22 45.125.56.0/22 -45.125.76.0/22 -45.125.80.0/22 -45.125.84.0/22 -45.125.88.0/22 -45.125.92.0/22 -45.125.96.0/22 -45.125.100.0/22 -45.125.136.0/22 -45.126.48.0/22 -45.126.52.0/22 -45.126.100.0/22 -45.126.108.0/22 45.126.112.0/22 -45.126.116.0/22 45.126.120.0/22 -45.126.212.0/22 -45.126.220.0/22 -45.127.8.0/22 -45.127.12.0/22 -45.127.128.0/22 -45.127.144.0/22 -45.127.148.0/22 -45.127.156.0/22 -45.127.216.0/22 +45.127.129.0/24 +45.127.144.0/21 +45.137.97.0/24 +45.146.82.0/24 45.248.8.0/22 -45.248.80.0/22 -45.248.84.0/22 -45.248.88.0/22 -45.248.96.0/22 -45.248.100.0/22 -45.248.104.0/22 -45.248.108.0/22 -45.248.128.0/22 -45.248.132.0/22 +45.248.108.0/23 +45.248.110.0/24 45.248.204.0/22 -45.248.208.0/22 -45.248.212.0/22 -45.248.216.0/22 -45.248.220.0/22 -45.248.224.0/22 -45.248.228.0/22 -45.248.232.0/22 -45.248.236.0/22 -45.248.240.0/22 -45.248.244.0/22 -45.248.248.0/22 -45.248.252.0/22 -45.249.0.0/22 -45.249.4.0/22 -45.249.12.0/22 -45.249.16.0/22 -45.249.20.0/22 -45.249.24.0/22 -45.249.28.0/22 -45.249.32.0/22 -45.249.36.0/22 -45.249.112.0/22 -45.249.188.0/22 -45.249.192.0/22 -45.249.196.0/22 -45.249.200.0/22 -45.249.204.0/22 -45.249.208.0/22 45.249.212.0/22 -45.250.12.0/22 -45.250.16.0/22 45.250.28.0/22 -45.250.32.0/22 -45.250.36.0/22 +45.250.32.0/21 45.250.40.0/22 -45.250.76.0/22 -45.250.80.0/22 -45.250.84.0/22 -45.250.88.0/22 -45.250.92.0/22 -45.250.96.0/22 -45.250.104.0/22 -45.250.108.0/22 -45.250.112.0/22 -45.250.116.0/22 -45.250.120.0/22 -45.250.124.0/22 -45.250.128.0/22 -45.250.132.0/22 -45.250.136.0/22 -45.250.140.0/22 -45.250.144.0/22 -45.250.148.0/22 -45.250.152.0/22 -45.250.164.0/22 -45.250.180.0/22 +45.250.152.0/23 +45.250.180.0/23 45.250.184.0/22 -45.250.188.0/22 -45.250.192.0/22 -45.251.0.0/22 +45.250.188.0/24 45.251.8.0/22 -45.251.16.0/22 45.251.20.0/22 -45.251.52.0/22 -45.251.84.0/22 -45.251.88.0/22 -45.251.92.0/22 -45.251.96.0/22 -45.251.100.0/22 +45.251.88.0/21 +45.251.96.0/21 45.251.120.0/22 -45.251.124.0/22 -45.251.136.0/22 -45.251.140.0/22 -45.251.144.0/22 -45.251.148.0/22 -45.251.152.0/22 -45.251.156.0/22 -45.251.160.0/22 -45.251.164.0/22 -45.251.168.0/22 -45.251.172.0/22 -45.251.176.0/22 -45.251.180.0/22 -45.251.184.0/22 -45.251.188.0/22 -45.251.192.0/22 -45.251.196.0/22 -45.251.200.0/22 -45.251.204.0/22 -45.251.208.0/22 -45.251.212.0/22 -45.251.216.0/22 -45.251.220.0/22 -45.251.224.0/22 -45.251.240.0/22 45.252.0.0/22 -45.252.4.0/22 -45.252.8.0/22 -45.252.12.0/22 -45.252.16.0/22 -45.252.20.0/22 -45.252.24.0/22 -45.252.28.0/22 -45.252.32.0/22 -45.252.36.0/22 -45.252.40.0/22 -45.252.44.0/22 45.252.48.0/22 -45.252.84.0/22 -45.252.88.0/22 -45.252.92.0/22 -45.252.96.0/22 -45.252.100.0/22 45.252.104.0/22 -45.252.108.0/22 -45.252.112.0/22 -45.252.116.0/22 -45.252.120.0/22 -45.252.124.0/22 -45.252.128.0/22 -45.252.132.0/22 -45.252.136.0/22 -45.252.140.0/22 -45.252.144.0/22 -45.252.148.0/22 -45.252.152.0/22 -45.252.156.0/22 -45.252.160.0/22 -45.252.164.0/22 -45.252.168.0/22 -45.252.172.0/22 -45.252.176.0/22 -45.252.192.0/22 -45.252.196.0/22 -45.252.200.0/22 -45.252.204.0/22 -45.252.208.0/22 -45.252.212.0/22 -45.252.216.0/22 -45.252.220.0/22 -45.252.224.0/22 -45.252.228.0/22 -45.252.232.0/22 -45.253.0.0/22 -45.253.4.0/22 -45.253.8.0/22 -45.253.12.0/22 -45.253.16.0/22 -45.253.20.0/22 45.253.24.0/22 -45.253.28.0/22 -45.253.32.0/22 -45.253.36.0/22 -45.253.40.0/22 -45.253.44.0/22 -45.253.48.0/22 -45.253.52.0/22 -45.253.56.0/22 +45.253.32.0/24 45.253.60.0/22 -45.253.64.0/22 -45.253.68.0/22 -45.253.72.0/22 -45.253.76.0/22 -45.253.80.0/22 -45.253.84.0/22 -45.253.92.0/22 -45.253.96.0/22 -45.253.100.0/22 -45.253.104.0/22 -45.253.108.0/22 -45.253.112.0/22 -45.253.116.0/22 -45.253.120.0/22 +45.253.96.0/20 +45.253.112.0/21 45.253.132.0/22 -45.253.136.0/22 -45.253.140.0/22 -45.253.144.0/22 -45.253.148.0/22 -45.253.152.0/22 -45.253.156.0/22 -45.253.160.0/22 -45.253.164.0/22 -45.253.168.0/22 -45.253.172.0/22 -45.253.176.0/22 -45.253.180.0/22 -45.253.184.0/22 -45.253.188.0/22 -45.253.192.0/22 -45.253.196.0/22 -45.253.200.0/22 -45.253.204.0/22 -45.253.208.0/22 -45.253.212.0/22 -45.253.216.0/22 -45.253.220.0/22 -45.253.224.0/22 -45.253.228.0/22 -45.253.232.0/22 -45.253.236.0/22 +45.253.136.0/21 +45.253.144.0/20 +45.253.160.0/19 +45.253.192.0/19 +45.253.224.0/20 45.253.240.0/22 -45.253.244.0/22 -45.254.0.0/22 -45.254.4.0/22 45.254.8.0/22 -45.254.12.0/22 -45.254.16.0/22 45.254.20.0/22 -45.254.24.0/22 -45.254.28.0/22 -45.254.40.0/22 -45.254.48.0/22 -45.254.52.0/22 -45.254.56.0/22 -45.254.60.0/22 -45.254.64.0/22 -45.254.68.0/22 -45.254.72.0/22 -45.254.76.0/22 -45.254.80.0/22 -45.254.84.0/22 -45.254.88.0/22 -45.254.92.0/22 -45.254.96.0/22 -45.254.100.0/22 -45.254.104.0/22 -45.254.108.0/22 -45.254.112.0/22 -45.254.116.0/22 -45.254.120.0/22 -45.254.124.0/22 -45.254.128.0/22 -45.254.132.0/22 -45.254.136.0/22 -45.254.140.0/22 -45.254.144.0/22 -45.254.148.0/22 -45.254.152.0/22 -45.254.156.0/22 -45.254.160.0/22 -45.254.164.0/22 -45.254.168.0/22 -45.254.172.0/22 -45.254.176.0/22 -45.254.180.0/22 -45.254.184.0/22 -45.254.188.0/22 -45.254.192.0/22 -45.254.196.0/22 -45.254.200.0/22 -45.254.204.0/22 -45.254.208.0/22 -45.254.212.0/22 -45.254.216.0/22 -45.254.220.0/22 -45.254.224.0/22 -45.254.228.0/22 -45.254.236.0/22 -45.254.240.0/22 -45.254.248.0/22 -45.255.0.0/22 -45.255.4.0/22 -45.255.8.0/22 -45.255.12.0/22 -45.255.16.0/22 -45.255.20.0/22 -45.255.24.0/22 -45.255.28.0/22 -45.255.32.0/22 -45.255.36.0/22 -45.255.40.0/22 -45.255.44.0/22 -45.255.48.0/22 -45.255.52.0/22 -45.255.56.0/22 -45.255.60.0/22 -45.255.64.0/22 -45.255.68.0/22 -45.255.72.0/22 -45.255.76.0/22 -45.255.80.0/22 -45.255.84.0/22 -45.255.88.0/22 -45.255.92.0/22 -45.255.96.0/22 -45.255.100.0/22 -45.255.104.0/22 -45.255.108.0/22 -45.255.112.0/22 -45.255.116.0/22 -45.255.120.0/22 -45.255.124.0/22 -45.255.132.0/22 -45.255.136.0/22 -45.255.140.0/22 -45.255.144.0/22 -45.255.148.0/22 +45.254.48.0/23 +45.254.50.0/24 +45.254.64.0/20 45.255.152.0/22 -45.255.156.0/22 -45.255.160.0/22 -45.255.164.0/22 -45.255.168.0/22 -45.255.172.0/22 -45.255.176.0/22 -45.255.180.0/22 -45.255.184.0/22 -45.255.188.0/22 -45.255.192.0/22 -45.255.196.0/22 -45.255.200.0/22 -45.255.204.0/22 -45.255.208.0/22 -45.255.212.0/22 -45.255.216.0/22 -45.255.220.0/22 -45.255.224.0/22 -45.255.228.0/22 -45.255.232.0/22 -45.255.236.0/22 -45.255.240.0/22 -45.255.244.0/22 -45.255.248.0/22 +46.37.112.0/24 +47.89.91.0/24 +47.89.121.0/24 47.92.0.0/14 -47.96.0.0/11 -49.4.0.0/14 -49.51.0.0/16 +47.96.0.0/12 +47.112.0.0/13 +47.120.0.0/14 +47.246.0.0/22 +47.246.4.0/24 +47.246.6.0/23 +47.246.8.0/24 +47.246.12.0/23 +47.246.15.0/24 +47.246.20.0/24 +47.246.22.0/23 +47.246.24.0/24 +47.246.26.0/24 +47.246.28.0/22 +47.246.36.0/22 +47.246.41.0/24 +47.246.42.0/23 +47.246.44.0/23 +47.246.46.0/24 +47.246.48.0/23 +47.246.50.0/24 +47.246.57.0/24 +47.246.60.0/22 +47.246.64.0/24 +49.4.0.0/18 +49.4.64.0/19 +49.4.96.0/20 +49.4.112.0/21 +49.4.120.0/22 +49.4.124.0/23 +49.4.126.0/24 +49.4.128.0/22 +49.7.0.0/16 49.52.0.0/14 49.64.0.0/11 49.112.0.0/13 49.120.0.0/14 -49.128.0.0/24 -49.128.2.0/23 -49.128.4.0/22 49.140.0.0/15 -49.152.0.0/14 -49.208.0.0/15 -49.210.0.0/15 -49.220.0.0/14 +49.208.0.0/14 +49.221.26.0/23 +49.221.64.0/19 +49.221.128.0/19 49.232.0.0/14 -49.239.0.0/18 49.239.192.0/18 -49.246.224.0/19 +50.114.121.0/24 52.80.0.0/15 -52.82.0.0/15 +52.82.0.0/17 +52.82.128.0/23 +52.82.131.0/24 +52.82.132.0/24 +52.82.134.0/23 +52.82.136.0/24 +52.82.144.0/23 +52.82.148.0/22 +52.82.160.0/21 +52.82.170.0/23 +52.82.172.0/22 +52.82.176.0/21 +52.82.184.0/23 +52.82.187.0/24 +52.82.188.0/23 +52.82.190.0/24 +52.82.192.0/18 +52.83.0.0/16 52.130.0.0/15 -54.222.0.0/15 -57.176.0.0/15 -58.14.0.0/15 -58.16.0.0/16 -58.17.0.0/17 -58.17.128.0/17 -58.18.0.0/16 -58.19.0.0/16 -58.20.0.0/16 -58.21.0.0/16 -58.22.0.0/15 +54.222.0.0/19 +54.222.32.0/21 +54.222.45.0/24 +54.222.46.0/23 +54.222.48.0/21 +54.222.57.0/24 +54.222.60.0/22 +54.222.64.0/23 +54.222.70.0/23 +54.222.72.0/21 +54.222.80.0/21 +54.222.88.0/22 +54.222.96.0/23 +54.222.100.0/22 +54.222.104.0/21 +54.222.112.0/22 +54.222.116.0/23 +54.222.128.0/17 +54.223.0.0/16 +58.16.0.0/13 58.24.0.0/15 58.30.0.0/15 -58.32.0.0/13 -58.40.0.0/15 -58.42.0.0/16 -58.43.0.0/16 -58.44.0.0/14 -58.48.0.0/13 -58.56.0.0/15 -58.58.0.0/16 -58.59.0.0/17 -58.59.128.0/17 -58.60.0.0/14 -58.65.232.0/21 -58.66.0.0/15 -58.68.128.0/17 -58.82.0.0/17 -58.83.0.0/17 -58.83.128.0/17 +58.32.0.0/11 +58.67.128.0/17 +58.68.236.0/24 +58.68.247.0/24 +58.82.0.0/22 +58.83.0.0/16 58.87.64.0/18 58.99.128.0/17 58.100.0.0/15 @@ -1633,216 +622,130 @@ 58.128.0.0/13 58.144.0.0/16 58.154.0.0/15 -58.192.0.0/15 -58.194.0.0/15 -58.196.0.0/15 -58.198.0.0/15 -58.200.0.0/13 -58.208.0.0/12 -58.240.0.0/15 -58.242.0.0/15 -58.244.0.0/15 -58.246.0.0/15 -58.248.0.0/13 +58.192.0.0/11 +58.240.0.0/12 59.32.0.0/13 59.40.0.0/15 59.42.0.0/16 -59.43.0.0/16 59.44.0.0/14 -59.48.0.0/16 -59.49.0.0/17 -59.49.128.0/17 -59.50.0.0/16 -59.51.0.0/17 -59.51.128.0/17 -59.52.0.0/14 -59.56.0.0/14 -59.60.0.0/15 -59.62.0.0/15 -59.64.0.0/14 -59.68.0.0/14 -59.72.0.0/15 -59.74.0.0/15 -59.76.0.0/16 -59.77.0.0/16 -59.78.0.0/15 -59.80.0.0/15 -59.82.0.0/15 +59.48.0.0/12 +59.64.0.0/12 +59.80.0.0/17 +59.81.8.0/23 +59.81.40.0/23 +59.81.46.0/24 +59.81.64.0/23 +59.81.82.0/23 +59.81.94.0/23 +59.81.102.0/23 +59.81.104.0/22 +59.82.0.0/17 +59.82.128.0/19 +59.83.192.0/19 +59.83.224.0/21 +59.83.232.0/22 59.107.0.0/17 -59.107.128.0/17 -59.108.0.0/15 -59.110.0.0/15 +59.108.0.0/16 +59.110.0.0/16 +59.111.0.0/20 +59.111.17.0/24 +59.111.18.0/23 +59.111.21.0/24 +59.111.22.0/24 +59.111.24.0/21 +59.111.32.0/24 +59.111.35.0/24 +59.111.36.0/24 +59.111.40.0/21 +59.111.64.0/19 +59.111.96.0/21 +59.111.104.0/23 +59.111.107.0/24 +59.111.109.0/24 +59.111.111.0/24 +59.111.112.0/21 +59.111.128.0/20 +59.111.144.0/24 +59.111.152.0/21 +59.111.160.0/21 +59.111.168.0/22 +59.111.173.0/24 +59.111.175.0/24 +59.111.178.0/23 +59.111.181.0/24 +59.111.182.0/23 +59.111.190.0/24 +59.111.192.0/23 +59.111.198.0/23 +59.111.203.0/24 +59.111.205.0/24 +59.111.211.0/24 +59.111.214.0/24 +59.111.224.0/21 +59.111.232.0/23 +59.111.236.0/24 +59.111.238.0/23 +59.111.240.0/22 +59.111.244.0/24 +59.111.248.0/21 59.151.0.0/17 -59.152.16.0/22 -59.152.20.0/22 -59.152.24.0/22 -59.152.28.0/22 -59.152.32.0/22 -59.152.36.0/22 -59.152.64.0/22 -59.152.68.0/22 -59.152.72.0/22 -59.152.76.0/22 -59.152.112.0/22 -59.152.116.0/22 -59.153.4.0/22 +59.152.36.0/24 +59.152.38.0/23 +59.153.4.0/23 59.153.32.0/22 -59.153.60.0/22 -59.153.64.0/22 -59.153.68.0/22 -59.153.72.0/22 59.153.92.0/22 -59.153.116.0/22 -59.153.136.0/22 -59.153.152.0/22 59.153.164.0/22 -59.153.168.0/22 -59.153.172.0/22 -59.153.176.0/22 -59.153.180.0/22 -59.153.184.0/22 -59.153.188.0/22 -59.153.192.0/22 -59.155.0.0/16 -59.172.0.0/15 -59.174.0.0/15 +59.153.168.0/24 +59.172.0.0/14 59.191.0.0/17 -59.192.0.0/10 -60.0.0.0/13 -60.8.0.0/15 -60.10.0.0/16 -60.11.0.0/16 -60.12.0.0/16 -60.13.0.0/18 -60.13.64.0/18 -60.13.128.0/17 -60.14.0.0/15 -60.16.0.0/13 -60.24.0.0/14 -60.28.0.0/15 -60.30.0.0/16 -60.31.0.0/16 -60.55.0.0/16 +59.252.0.0/16 +60.0.0.0/11 60.63.0.0/16 -60.160.0.0/15 -60.162.0.0/15 -60.164.0.0/15 -60.166.0.0/15 -60.168.0.0/13 -60.176.0.0/12 +60.160.0.0/11 60.194.0.0/15 -60.200.0.0/14 -60.204.0.0/16 -60.205.0.0/16 -60.206.0.0/15 -60.208.0.0/13 -60.216.0.0/15 -60.218.0.0/15 -60.220.0.0/14 -60.232.0.0/15 +60.200.0.0/24 +60.204.0.0/14 +60.208.0.0/12 +60.232.0.0/16 60.235.0.0/16 60.245.128.0/17 60.247.0.0/16 60.252.0.0/16 60.253.128.0/17 60.255.0.0/16 -61.4.80.0/22 -61.4.84.0/22 -61.4.88.0/21 -61.4.176.0/20 -61.8.160.0/20 -61.14.212.0/22 -61.14.216.0/22 -61.14.220.0/22 -61.14.240.0/22 -61.14.244.0/22 -61.28.0.0/20 -61.28.16.0/20 -61.28.32.0/19 -61.28.64.0/18 +61.4.80.0/23 +61.28.20.0/24 +61.28.22.0/24 +61.28.49.0/24 +61.28.108.0/24 +61.28.112.0/20 61.29.128.0/18 -61.29.192.0/19 -61.29.224.0/20 -61.29.240.0/22 -61.29.248.0/22 -61.45.128.0/18 -61.45.224.0/20 61.47.128.0/18 -61.48.0.0/14 -61.52.0.0/15 -61.54.0.0/16 -61.55.0.0/16 +61.48.0.0/13 61.87.192.0/18 -61.128.0.0/15 -61.130.0.0/15 -61.132.0.0/16 -61.133.0.0/17 -61.133.128.0/17 -61.134.0.0/18 -61.134.64.0/19 -61.134.96.0/19 -61.134.128.0/18 -61.134.192.0/18 -61.135.0.0/16 -61.136.0.0/18 -61.136.64.0/18 -61.136.128.0/17 -61.137.0.0/17 -61.137.128.0/17 -61.138.0.0/18 -61.138.64.0/18 -61.138.128.0/18 -61.138.192.0/18 -61.139.0.0/17 -61.139.128.0/18 -61.139.192.0/18 -61.140.0.0/14 -61.144.0.0/14 -61.148.0.0/15 -61.150.0.0/15 -61.152.0.0/16 -61.153.0.0/16 -61.154.0.0/15 -61.156.0.0/16 -61.157.0.0/16 -61.158.0.0/17 -61.158.128.0/17 -61.159.0.0/18 -61.159.64.0/18 -61.159.128.0/17 -61.160.0.0/16 -61.161.0.0/18 -61.161.64.0/18 -61.161.128.0/17 -61.162.0.0/16 -61.163.0.0/16 -61.164.0.0/16 -61.165.0.0/16 -61.166.0.0/16 -61.167.0.0/16 -61.168.0.0/16 -61.169.0.0/16 -61.170.0.0/15 -61.172.0.0/14 -61.176.0.0/16 -61.177.0.0/16 -61.178.0.0/16 -61.179.0.0/16 -61.180.0.0/17 -61.180.128.0/17 -61.181.0.0/16 -61.182.0.0/16 -61.183.0.0/16 -61.184.0.0/14 -61.188.0.0/16 -61.189.0.0/17 -61.189.128.0/17 -61.190.0.0/15 +61.128.0.0/10 61.232.0.0/14 -61.236.0.0/15 -61.240.0.0/14 +61.236.80.0/20 +61.236.96.0/20 +61.236.112.0/21 +61.237.0.0/16 +61.240.0.0/16 +61.241.0.0/17 +61.241.128.0/18 +61.241.192.0/19 +61.242.0.0/15 +62.72.171.0/24 62.234.0.0/16 +63.140.0.0/24 +63.140.3.0/24 +66.102.240.0/21 +66.102.248.0/22 +66.102.252.0/24 +66.102.254.0/23 68.79.0.0/18 +69.163.104.0/24 +69.163.106.0/24 +69.163.123.0/24 69.230.192.0/18 69.231.128.0/18 69.234.192.0/18 @@ -1851,3635 +754,1242 @@ 71.132.0.0/18 71.136.64.0/18 71.137.0.0/18 +78.105.182.0/23 +79.133.176.0/24 81.68.0.0/14 +81.173.18.0/23 +81.173.20.0/22 +81.173.28.0/24 +82.38.7.0/24 82.156.0.0/15 +85.149.221.0/24 +87.76.221.0/24 +87.76.222.0/24 +93.95.117.0/24 94.191.0.0/17 -101.0.0.0/22 101.1.0.0/22 101.2.172.0/22 101.4.0.0/14 101.16.0.0/12 101.33.128.0/17 101.34.0.0/15 -101.36.0.0/18 -101.36.64.0/19 +101.36.64.0/20 101.36.128.0/17 101.37.0.0/16 -101.38.0.0/15 -101.40.0.0/15 +101.39.0.0/16 +101.40.0.0/16 101.42.0.0/15 -101.48.0.0/15 -101.50.8.0/22 -101.50.12.0/22 +101.49.148.0/23 +101.49.206.0/23 +101.49.208.0/24 +101.49.212.0/24 +101.50.8.0/21 101.50.56.0/22 -101.52.0.0/16 +101.52.4.0/24 +101.52.6.0/24 +101.52.68.0/22 +101.52.112.0/21 +101.52.124.0/22 +101.52.128.0/20 +101.52.200.0/21 +101.52.212.0/22 +101.52.216.0/21 +101.52.232.0/23 +101.52.236.0/22 +101.52.240.0/20 101.53.100.0/22 -101.54.0.0/16 -101.55.224.0/21 101.64.0.0/13 101.72.0.0/14 101.76.0.0/15 101.78.0.0/22 -101.78.32.0/19 101.80.0.0/12 -101.96.0.0/21 -101.96.8.0/22 -101.96.16.0/20 -101.96.128.0/17 -101.99.96.0/19 -101.101.64.0/19 -101.101.100.0/24 -101.101.102.0/23 -101.101.104.0/21 -101.101.112.0/20 -101.102.64.0/19 -101.102.100.0/23 -101.102.102.0/24 -101.102.104.0/21 -101.102.112.0/20 -101.104.0.0/14 -101.110.64.0/19 -101.110.96.0/20 -101.110.116.0/22 -101.110.120.0/21 -101.120.0.0/14 -101.124.0.0/15 -101.126.0.0/16 +101.96.10.0/23 +101.96.128.0/23 +101.96.130.0/24 +101.96.132.0/23 +101.96.134.0/24 +101.96.142.0/23 +101.96.144.0/20 +101.96.192.0/18 +101.104.144.0/20 +101.104.160.0/20 +101.106.0.0/19 +101.124.0.0/16 +101.125.0.0/22 +101.125.4.0/23 +101.125.6.0/24 +101.125.130.0/24 +101.125.250.0/23 +101.125.252.0/22 +101.126.0.0/18 +101.126.64.0/19 +101.126.96.0/20 +101.126.128.0/19 +101.126.172.0/22 +101.126.176.0/20 +101.126.192.0/19 +101.126.228.0/22 +101.126.232.0/21 +101.126.240.0/20 101.128.0.0/22 -101.128.8.0/21 -101.128.16.0/20 -101.128.32.0/19 101.129.0.0/16 -101.130.0.0/15 -101.132.0.0/14 +101.132.0.0/15 101.144.0.0/12 -101.192.0.0/14 -101.196.0.0/16 101.197.0.0/16 -101.198.0.0/15 +101.198.0.0/22 +101.198.4.0/24 +101.198.160.0/19 +101.198.192.0/19 +101.199.48.0/20 +101.199.112.0/24 +101.199.128.0/23 +101.199.196.0/22 +101.199.252.0/22 101.200.0.0/15 -101.203.128.0/19 -101.203.160.0/21 101.203.172.0/22 -101.203.176.0/20 101.204.0.0/14 101.224.0.0/13 -101.232.0.0/15 -101.234.64.0/21 101.234.76.0/22 -101.234.80.0/20 -101.234.96.0/19 -101.236.0.0/14 +101.236.0.0/16 +101.237.0.0/19 +101.237.33.0/24 +101.237.34.0/23 +101.237.36.0/22 +101.237.40.0/24 +101.237.128.0/20 101.240.0.0/14 -101.244.0.0/16 -101.245.0.0/16 -101.246.0.0/15 +101.245.0.0/17 +101.245.128.0/20 +101.245.144.0/22 +101.245.152.0/21 +101.245.160.0/20 +101.246.172.0/22 +101.246.176.0/20 101.248.0.0/15 101.251.0.0/22 -101.251.8.0/21 -101.251.16.0/20 -101.251.32.0/19 -101.251.64.0/18 -101.251.128.0/17 +101.251.80.0/20 +101.251.128.0/19 +101.251.160.0/20 +101.251.176.0/22 +101.251.192.0/18 101.252.0.0/15 -101.254.0.0/16 +101.254.0.0/20 +101.254.32.0/19 +101.254.64.0/18 +101.254.128.0/17 103.1.8.0/22 103.1.20.0/22 -103.1.24.0/22 -103.1.72.0/22 -103.1.88.0/22 103.1.168.0/22 103.2.108.0/22 -103.2.156.0/22 -103.2.164.0/22 -103.2.188.0/23 -103.2.200.0/22 -103.2.204.0/22 103.2.208.0/22 -103.2.212.0/22 -103.3.84.0/22 -103.3.88.0/22 -103.3.92.0/22 103.3.96.0/22 -103.3.100.0/22 -103.3.104.0/22 -103.3.108.0/22 -103.3.112.0/22 -103.3.116.0/22 -103.3.120.0/22 -103.3.124.0/22 +103.3.112.0/20 103.3.128.0/22 -103.3.132.0/22 -103.3.136.0/22 -103.3.140.0/22 -103.3.148.0/22 -103.3.152.0/22 -103.3.156.0/22 +103.3.136.0/21 +103.3.152.0/21 103.4.56.0/22 -103.4.168.0/22 -103.4.184.0/22 -103.4.224.0/22 -103.5.36.0/22 -103.5.52.0/22 -103.5.56.0/22 -103.5.152.0/22 -103.5.168.0/22 -103.5.192.0/22 -103.5.252.0/22 -103.6.76.0/22 -103.6.108.0/22 +103.5.52.0/24 +103.5.192.0/23 +103.5.194.0/24 103.6.220.0/22 -103.6.228.0/22 -103.7.28.0/22 103.7.140.0/22 -103.7.212.0/22 -103.7.216.0/22 -103.7.220.0/22 -103.8.0.0/22 -103.8.4.0/22 -103.8.8.0/22 103.8.32.0/22 103.8.52.0/22 103.8.68.0/22 -103.8.108.0/22 -103.8.156.0/22 -103.8.200.0/22 -103.8.204.0/22 103.8.220.0/22 103.9.8.0/22 -103.9.24.0/22 -103.9.108.0/22 -103.9.152.0/22 -103.9.248.0/22 103.9.252.0/22 103.10.0.0/22 -103.10.16.0/22 103.10.84.0/22 -103.10.140.0/22 -103.11.16.0/22 -103.11.168.0/22 -103.11.180.0/22 -103.12.32.0/22 -103.12.92.0/22 103.12.98.0/23 -103.12.136.0/22 103.12.184.0/22 103.12.232.0/22 -103.13.12.0/22 -103.13.124.0/22 -103.13.144.0/22 -103.13.196.0/22 +103.13.12.0/24 103.13.244.0/22 -103.14.84.0/22 -103.14.100.0/22 103.14.132.0/22 103.14.136.0/22 -103.14.156.0/22 -103.14.240.0/22 103.15.4.0/22 -103.15.8.0/22 -103.15.16.0/22 103.15.96.0/22 -103.15.200.0/22 -103.16.52.0/22 -103.16.80.0/22 -103.16.84.0/22 -103.16.88.0/22 -103.16.108.0/22 103.16.124.0/22 103.17.40.0/22 -103.17.64.0/22 -103.17.120.0/22 -103.17.136.0/22 -103.17.160.0/22 -103.17.204.0/22 103.17.228.0/22 -103.18.186.0/23 -103.18.192.0/22 -103.18.206.0/23 -103.18.208.0/22 -103.18.212.0/22 -103.18.224.0/22 -103.19.12.0/22 -103.19.40.0/22 -103.19.44.0/22 -103.19.50.0/23 +103.19.46.0/23 103.19.64.0/22 -103.19.68.0/22 -103.19.72.0/22 103.19.232.0/22 -103.20.12.0/22 103.20.32.0/22 -103.20.44.0/22 -103.20.68.0/22 103.20.112.0/22 103.20.128.0/22 103.20.160.0/22 103.20.248.0/22 -103.21.98.0/23 -103.21.102.0/23 -103.21.112.0/22 103.21.116.0/22 -103.21.136.0/22 103.21.140.0/22 103.21.176.0/22 -103.21.208.0/22 -103.21.240.0/22 -103.22.0.0/22 -103.22.4.0/22 -103.22.8.0/22 -103.22.12.0/22 -103.22.16.0/22 -103.22.20.0/22 -103.22.24.0/22 -103.22.28.0/22 -103.22.32.0/22 -103.22.36.0/22 -103.22.40.0/22 -103.22.44.0/22 -103.22.48.0/22 -103.22.52.0/22 -103.22.56.0/22 -103.22.60.0/22 -103.22.64.0/22 -103.22.68.0/22 -103.22.72.0/22 -103.22.76.0/22 -103.22.80.0/22 -103.22.84.0/22 -103.22.88.0/22 -103.22.92.0/22 -103.22.100.0/22 -103.22.104.0/22 -103.22.108.0/22 -103.22.112.0/22 -103.22.116.0/22 -103.22.120.0/22 -103.22.124.0/22 103.22.188.0/22 -103.22.228.0/22 103.22.252.0/22 103.23.8.0/22 -103.23.56.0/22 103.23.160.0/22 -103.23.164.0/22 -103.23.176.0/22 -103.23.228.0/22 -103.24.24.0/22 103.24.116.0/22 -103.24.128.0/22 -103.24.144.0/22 103.24.176.0/22 -103.24.184.0/22 -103.24.220.0/22 103.24.228.0/22 -103.24.252.0/22 -103.25.8.0/23 103.25.20.0/22 103.25.24.0/22 -103.25.28.0/22 -103.25.32.0/22 103.25.36.0/22 -103.25.40.0/22 -103.25.48.0/22 -103.25.64.0/22 -103.25.68.0/22 -103.25.148.0/22 -103.25.156.0/22 -103.25.216.0/22 +103.25.64.0/23 +103.25.156.0/24 103.26.0.0/22 103.26.64.0/22 103.26.76.0/22 -103.26.132.0/22 -103.26.156.0/22 -103.26.160.0/22 -103.26.228.0/22 -103.26.240.0/22 103.27.4.0/22 -103.27.12.0/22 103.27.24.0/22 -103.27.56.0/22 -103.27.96.0/22 -103.27.184.0/22 -103.27.212.0/22 103.27.240.0/22 -103.28.4.0/22 -103.28.8.0/22 -103.28.184.0/22 +103.28.8.0/24 103.28.204.0/22 103.28.212.0/22 103.29.16.0/22 103.29.24.0/23 -103.29.29.0/24 -103.29.128.0/22 -103.29.132.0/22 103.29.136.0/22 -103.29.236.0/23 -103.30.20.0/22 -103.30.96.0/22 -103.30.104.0/23 -103.30.106.0/23 -103.30.148.0/22 -103.30.200.0/22 -103.30.228.0/22 -103.30.236.0/22 -103.31.0.0/22 +103.30.148.0/24 +103.30.151.0/24 103.31.48.0/22 -103.31.52.0/22 -103.31.56.0/22 -103.31.60.0/22 -103.31.64.0/22 -103.31.68.0/22 -103.31.148.0/22 -103.31.160.0/22 -103.31.168.0/22 103.31.200.0/22 -103.31.236.0/22 -103.31.242.0/23 -103.32.0.0/22 -103.32.4.0/22 -103.32.8.0/22 -103.32.12.0/22 -103.32.16.0/22 -103.32.20.0/22 -103.32.24.0/22 -103.32.28.0/22 -103.32.32.0/22 -103.32.36.0/22 -103.32.40.0/22 -103.32.44.0/22 -103.32.48.0/22 -103.32.52.0/22 -103.32.56.0/22 -103.32.60.0/22 -103.32.64.0/22 -103.32.68.0/22 -103.32.72.0/22 -103.32.76.0/22 -103.32.80.0/22 -103.32.84.0/22 -103.32.88.0/22 -103.32.92.0/22 -103.32.96.0/22 -103.32.100.0/22 -103.32.104.0/22 -103.32.108.0/22 -103.32.112.0/22 -103.32.116.0/22 -103.32.120.0/22 -103.32.124.0/22 -103.32.128.0/22 -103.32.132.0/22 -103.32.136.0/22 -103.32.140.0/22 -103.32.144.0/22 -103.32.148.0/22 -103.32.152.0/22 -103.32.156.0/22 -103.32.160.0/22 -103.32.164.0/22 -103.32.168.0/22 -103.32.172.0/22 -103.32.176.0/22 -103.32.180.0/22 -103.32.184.0/22 -103.32.188.0/22 -103.32.192.0/22 -103.32.196.0/22 -103.32.200.0/22 -103.32.204.0/22 -103.32.208.0/22 -103.32.212.0/22 -103.32.216.0/22 -103.32.220.0/22 -103.32.224.0/22 -103.32.228.0/22 -103.32.232.0/22 -103.32.236.0/22 -103.32.240.0/22 -103.32.244.0/22 -103.32.248.0/22 -103.32.252.0/22 -103.33.0.0/22 -103.33.4.0/22 -103.33.8.0/22 -103.33.12.0/22 -103.33.16.0/22 -103.33.20.0/22 -103.33.24.0/22 -103.33.28.0/22 -103.33.32.0/22 -103.33.36.0/22 -103.33.40.0/22 -103.33.44.0/22 -103.33.48.0/22 -103.33.52.0/22 -103.33.56.0/22 -103.33.60.0/22 -103.33.64.0/22 -103.33.68.0/22 -103.33.72.0/22 -103.33.76.0/22 -103.33.80.0/22 -103.33.84.0/22 -103.33.88.0/22 -103.33.92.0/22 -103.33.96.0/22 -103.33.100.0/22 -103.33.104.0/22 -103.33.108.0/22 -103.33.112.0/22 -103.33.116.0/22 -103.33.120.0/22 -103.33.124.0/22 -103.33.128.0/22 -103.33.132.0/22 -103.33.136.0/22 -103.33.140.0/22 -103.33.144.0/22 -103.33.148.0/22 -103.33.152.0/22 -103.33.156.0/22 -103.33.160.0/22 -103.33.164.0/22 -103.33.168.0/22 -103.33.172.0/22 -103.33.176.0/22 -103.33.180.0/22 -103.33.184.0/22 -103.33.188.0/22 -103.33.192.0/22 -103.33.196.0/22 -103.33.200.0/22 -103.33.204.0/22 -103.33.208.0/22 -103.33.212.0/22 -103.33.216.0/22 -103.33.220.0/22 -103.33.224.0/22 -103.33.228.0/22 -103.33.232.0/22 -103.33.236.0/22 -103.33.240.0/22 -103.33.244.0/22 -103.33.248.0/22 -103.33.252.0/22 -103.34.0.0/22 -103.34.4.0/22 -103.34.8.0/22 -103.34.12.0/22 -103.34.16.0/22 -103.34.20.0/22 -103.34.24.0/22 -103.34.28.0/22 -103.34.32.0/22 -103.34.36.0/22 -103.34.40.0/22 -103.34.44.0/22 -103.34.48.0/22 -103.34.52.0/22 -103.34.56.0/22 -103.34.60.0/22 -103.34.64.0/22 -103.34.68.0/22 -103.34.72.0/22 -103.34.76.0/22 -103.34.80.0/22 -103.34.84.0/22 -103.34.88.0/22 -103.34.92.0/22 -103.34.96.0/22 -103.34.100.0/22 -103.34.104.0/22 -103.34.108.0/22 -103.34.112.0/22 -103.34.116.0/22 -103.34.120.0/22 -103.34.124.0/22 -103.34.128.0/22 -103.34.132.0/22 -103.34.136.0/22 -103.34.140.0/22 -103.34.144.0/22 -103.34.148.0/22 -103.34.152.0/22 -103.34.156.0/22 -103.34.160.0/22 -103.34.164.0/22 -103.34.168.0/22 -103.34.172.0/22 -103.34.176.0/22 -103.34.180.0/22 -103.34.184.0/22 -103.34.188.0/22 -103.34.192.0/22 -103.34.196.0/22 -103.34.200.0/22 -103.34.204.0/22 -103.34.208.0/22 -103.34.212.0/22 -103.34.216.0/22 -103.34.220.0/22 -103.34.224.0/22 -103.34.228.0/22 -103.34.232.0/22 -103.34.236.0/22 -103.34.240.0/22 -103.34.244.0/22 -103.34.248.0/22 -103.34.252.0/22 -103.35.0.0/22 -103.35.4.0/22 -103.35.8.0/22 -103.35.12.0/22 -103.35.16.0/22 -103.35.20.0/22 -103.35.24.0/22 -103.35.28.0/22 -103.35.32.0/22 -103.35.36.0/22 -103.35.40.0/22 -103.35.44.0/22 -103.35.48.0/22 103.35.104.0/22 -103.35.116.0/22 -103.35.180.0/22 -103.35.220.0/22 103.36.28.0/22 103.36.36.0/22 -103.36.56.0/22 103.36.60.0/22 -103.36.64.0/22 -103.36.72.0/22 103.36.96.0/22 103.36.132.0/22 103.36.136.0/22 -103.36.160.0/22 103.36.164.0/22 -103.36.168.0/22 -103.36.172.0/22 -103.36.176.0/22 -103.36.180.0/22 -103.36.184.0/22 -103.36.188.0/22 -103.36.192.0/22 -103.36.196.0/22 -103.36.200.0/22 -103.36.204.0/22 +103.36.168.0/21 +103.36.192.0/20 103.36.208.0/22 -103.36.212.0/22 -103.36.216.0/22 103.36.220.0/22 -103.36.224.0/22 -103.36.228.0/22 -103.36.232.0/22 -103.36.236.0/22 -103.36.240.0/22 -103.36.244.0/22 103.37.12.0/22 103.37.16.0/22 -103.37.24.0/22 103.37.44.0/22 -103.37.52.0/22 -103.37.56.0/22 103.37.72.0/22 103.37.100.0/22 -103.37.104.0/22 -103.37.136.0/22 -103.37.140.0/22 -103.37.144.0/22 -103.37.148.0/22 -103.37.152.0/22 -103.37.156.0/22 -103.37.160.0/22 -103.37.164.0/22 +103.37.136.0/21 +103.37.144.0/20 +103.37.160.0/21 103.37.172.0/22 -103.37.176.0/22 -103.37.188.0/22 -103.37.208.0/22 -103.37.212.0/22 -103.37.216.0/21 -103.37.252.0/22 -103.38.0.0/22 -103.38.32.0/22 103.38.40.0/22 -103.38.44.0/22 -103.38.56.0/22 103.38.76.0/22 103.38.84.0/22 -103.38.92.0/22 -103.38.96.0/22 +103.38.92.0/23 103.38.116.0/22 -103.38.132.0/22 -103.38.140.0/22 103.38.224.0/22 -103.38.228.0/22 103.38.232.0/22 +103.38.252.0/23 103.39.64.0/22 -103.39.88.0/22 -103.39.100.0/22 -103.39.104.0/22 -103.39.160.0/22 -103.39.164.0/22 -103.39.168.0/22 -103.39.172.0/22 -103.39.176.0/22 -103.39.180.0/22 -103.39.184.0/22 -103.39.188.0/22 -103.39.200.0/22 -103.39.204.0/22 -103.39.208.0/22 -103.39.212.0/22 -103.39.216.0/22 -103.39.220.0/22 -103.39.224.0/22 -103.39.228.0/22 +103.39.200.0/21 +103.39.208.0/20 +103.39.224.0/21 103.39.232.0/22 103.40.12.0/22 -103.40.16.0/22 -103.40.20.0/22 -103.40.24.0/22 -103.40.28.0/22 -103.40.32.0/22 -103.40.36.0/22 -103.40.40.0/22 -103.40.44.0/22 -103.40.88.0/22 -103.40.158.0/23 +103.40.173.0/24 103.40.174.0/23 103.40.192.0/22 -103.40.212.0/22 -103.40.220.0/22 -103.40.228.0/22 103.40.232.0/22 -103.40.236.0/22 -103.40.240.0/22 -103.40.244.0/22 -103.40.248.0/22 -103.40.252.0/22 +103.40.240.0/20 103.41.0.0/22 -103.41.16.0/22 -103.41.52.0/22 103.41.116.0/22 -103.41.140.0/22 -103.41.148.0/22 -103.41.152.0/22 -103.41.160.0/22 103.41.164.0/22 -103.41.220.0/22 -103.41.224.0/22 -103.41.228.0/22 -103.41.232.0/22 +103.41.232.0/23 103.42.8.0/22 -103.42.24.0/22 -103.42.28.0/22 -103.42.32.0/22 -103.42.64.0/22 -103.42.68.0/22 103.42.76.0/22 -103.42.104.0/22 -103.42.180.0/22 -103.42.232.0/22 -103.43.16.0/22 -103.43.84.0/22 -103.43.96.0/22 -103.43.100.0/22 -103.43.104.0/22 -103.43.124.0/22 -103.43.132.0/22 +103.43.132.0/24 +103.43.134.0/23 103.43.184.0/22 -103.43.192.0/22 -103.43.196.0/22 -103.43.208.0/22 -103.43.220.0/22 -103.43.224.0/22 -103.43.240.0/22 +103.43.240.0/23 103.44.56.0/22 103.44.80.0/22 -103.44.120.0/22 -103.44.124.0/22 -103.44.132.0/22 103.44.144.0/22 103.44.168.0/22 103.44.176.0/22 -103.44.180.0/22 -103.44.184.0/22 -103.44.188.0/22 -103.44.192.0/22 -103.44.196.0/22 -103.44.200.0/22 -103.44.204.0/22 -103.44.224.0/22 103.44.236.0/22 -103.44.240.0/22 -103.44.244.0/22 -103.44.248.0/22 -103.44.252.0/22 -103.45.0.0/22 -103.45.4.0/22 -103.45.8.0/22 -103.45.12.0/22 -103.45.16.0/22 -103.45.20.0/22 -103.45.24.0/22 -103.45.28.0/22 -103.45.32.0/22 -103.45.36.0/22 -103.45.40.0/22 -103.45.44.0/22 -103.45.48.0/22 -103.45.52.0/22 -103.45.56.0/22 -103.45.60.0/22 -103.45.72.0/22 -103.45.76.0/22 -103.45.80.0/22 -103.45.84.0/22 -103.45.88.0/22 -103.45.92.0/22 -103.45.96.0/22 -103.45.100.0/22 -103.45.104.0/22 -103.45.108.0/22 -103.45.112.0/22 -103.45.116.0/22 -103.45.120.0/22 -103.45.124.0/22 -103.45.128.0/22 -103.45.132.0/22 -103.45.136.0/22 -103.45.140.0/22 -103.45.144.0/22 -103.45.148.0/22 -103.45.152.0/22 -103.45.156.0/22 +103.44.240.0/20 +103.45.72.0/21 +103.45.128.0/19 103.45.160.0/22 -103.45.164.0/22 -103.45.168.0/22 +103.45.168.0/23 +103.45.171.0/24 103.45.172.0/22 -103.45.176.0/22 -103.45.180.0/22 -103.45.184.0/22 -103.45.188.0/22 -103.45.192.0/22 -103.45.196.0/22 -103.45.200.0/22 -103.45.204.0/22 -103.45.208.0/22 -103.45.212.0/22 -103.45.216.0/22 -103.45.220.0/22 -103.45.224.0/22 +103.45.176.0/20 103.45.248.0/22 -103.46.0.0/22 103.46.12.0/22 -103.46.16.0/22 -103.46.20.0/22 -103.46.24.0/22 -103.46.28.0/22 -103.46.32.0/22 -103.46.36.0/22 -103.46.40.0/22 -103.46.44.0/22 -103.46.48.0/22 -103.46.52.0/22 -103.46.56.0/22 -103.46.60.0/22 -103.46.64.0/22 -103.46.68.0/22 -103.46.72.0/22 -103.46.76.0/22 -103.46.80.0/22 -103.46.84.0/22 -103.46.88.0/22 -103.46.92.0/22 -103.46.96.0/22 -103.46.100.0/22 -103.46.104.0/22 -103.46.108.0/22 -103.46.112.0/22 -103.46.116.0/22 -103.46.120.0/22 -103.46.124.0/22 -103.46.128.0/22 -103.46.132.0/22 +103.46.16.0/20 +103.46.32.0/19 +103.46.64.0/18 +103.46.128.0/21 103.46.136.0/22 -103.46.152.0/22 -103.46.156.0/22 -103.46.160.0/22 -103.46.164.0/22 103.46.168.0/22 -103.46.172.0/22 -103.46.176.0/22 -103.46.180.0/22 -103.46.244.0/22 -103.46.248.0/22 -103.47.4.0/22 -103.47.20.0/22 -103.47.36.0/22 -103.47.40.0/22 103.47.48.0/22 103.47.80.0/22 -103.47.96.0/22 -103.47.108.0/22 -103.47.116.0/22 -103.47.120.0/22 -103.47.136.0/22 -103.47.140.0/22 -103.47.212.0/22 -103.48.52.0/22 -103.48.92.0/22 -103.48.148.0/22 -103.48.152.0/22 -103.48.156.0/22 -103.48.202.0/23 -103.48.216.0/22 -103.48.220.0/22 -103.48.224.0/22 -103.48.228.0/22 -103.48.232.0/22 -103.48.236.0/22 -103.48.240.0/22 -103.48.244.0/22 +103.48.232.0/23 +103.48.235.0/24 103.49.12.0/22 -103.49.20.0/22 -103.49.72.0/22 -103.49.76.0/22 -103.49.96.0/22 103.49.108.0/22 -103.49.176.0/22 -103.49.180.0/22 -103.49.196.0/22 -103.50.36.0/22 -103.50.44.0/22 -103.50.48.0/22 -103.50.52.0/22 -103.50.56.0/22 -103.50.60.0/22 -103.50.64.0/22 -103.50.68.0/22 -103.50.72.0/22 -103.50.108.0/22 -103.50.112.0/22 -103.50.116.0/22 -103.50.120.0/22 -103.50.124.0/22 -103.50.132.0/22 -103.50.136.0/22 -103.50.140.0/22 -103.50.172.0/22 -103.50.176.0/22 -103.50.180.0/22 -103.50.184.0/22 -103.50.188.0/22 -103.50.192.0/22 -103.50.196.0/22 -103.50.200.0/22 -103.50.220.0/22 -103.50.224.0/22 -103.50.228.0/22 -103.50.232.0/22 -103.50.236.0/22 -103.50.240.0/22 -103.50.244.0/22 -103.50.248.0/22 -103.51.62.0/23 -103.52.40.0/22 -103.52.72.0/22 -103.52.76.0/22 -103.52.80.0/22 -103.52.84.0/22 -103.52.96.0/22 103.52.100.0/22 -103.52.104.0/22 -103.52.160.0/22 -103.52.164.0/22 103.52.172.0/22 103.52.176.0/22 -103.52.184.0/22 103.52.196.0/22 -103.53.64.0/22 -103.53.68.0/22 -103.53.92.0/22 -103.53.100.0/22 103.53.124.0/22 -103.53.128.0/22 -103.53.132.0/22 -103.53.136.0/22 -103.53.140.0/22 -103.53.144.0/22 -103.53.180.0/22 -103.53.204.0/22 -103.53.208.0/22 -103.53.212.0/22 -103.53.236.0/22 -103.53.248.0/22 -103.54.8.0/22 +103.53.208.0/24 +103.53.211.0/24 103.54.48.0/22 -103.54.160.0/22 -103.54.164.0/22 -103.54.212.0/22 -103.54.240.0/22 -103.55.80.0/22 -103.55.120.0/22 -103.55.152.0/22 103.55.172.0/22 -103.55.204.0/22 -103.55.208.0/22 103.55.228.0/22 -103.55.236.0/22 -103.56.8.0/22 -103.56.16.0/22 -103.56.20.0/22 -103.56.32.0/22 -103.56.56.0/22 103.56.60.0/22 -103.56.72.0/22 103.56.76.0/22 -103.56.94.0/23 103.56.100.0/22 103.56.104.0/22 -103.56.140.0/22 103.56.152.0/22 103.56.184.0/22 -103.56.200.0/22 103.57.12.0/22 -103.57.52.0/22 -103.57.56.0/22 -103.57.76.0/22 -103.57.136.0/22 -103.57.196.0/22 -103.58.24.0/22 -103.59.76.0/22 -103.59.100.0/22 -103.59.112.0/22 -103.59.116.0/22 -103.59.120.0/22 +103.57.136.0/23 +103.57.139.0/24 +103.59.112.0/21 103.59.124.0/22 -103.59.128.0/22 -103.59.148.0/22 -103.59.164.0/22 +103.59.148.0/23 +103.59.151.0/24 103.59.168.0/23 -103.60.32.0/22 -103.60.44.0/22 103.60.164.0/22 -103.60.228.0/22 +103.60.228.0/23 103.60.236.0/22 103.61.60.0/22 -103.61.104.0/22 -103.61.140.0/22 -103.61.152.0/22 -103.61.156.0/22 -103.61.160.0/22 -103.61.172.0/22 -103.61.176.0/22 +103.61.104.0/23 +103.61.153.0/24 +103.61.154.0/23 103.61.188.0/22 -103.62.24.0/22 -103.62.52.0/22 -103.62.72.0/22 -103.62.76.0/22 -103.62.80.0/22 -103.62.84.0/22 -103.62.88.0/22 -103.62.96.0/22 -103.62.100.0/22 -103.62.104.0/22 -103.62.108.0/22 -103.62.112.0/22 -103.62.116.0/22 -103.62.120.0/22 -103.62.124.0/22 -103.62.128.0/22 -103.62.132.0/22 -103.62.156.0/22 -103.62.160.0/22 -103.62.164.0/22 -103.62.168.0/22 -103.62.172.0/22 -103.62.176.0/22 -103.62.180.0/22 -103.62.184.0/22 -103.62.188.0/22 -103.62.192.0/22 -103.62.204.0/22 -103.62.208.0/22 -103.62.212.0/22 -103.62.216.0/22 -103.62.220.0/22 -103.62.224.0/22 -103.63.32.0/22 -103.63.36.0/22 -103.63.40.0/22 -103.63.44.0/22 -103.63.48.0/22 -103.63.52.0/22 -103.63.56.0/22 -103.63.60.0/22 -103.63.64.0/22 -103.63.68.0/22 -103.63.72.0/22 -103.63.76.0/22 -103.63.80.0/22 -103.63.84.0/22 -103.63.88.0/22 -103.63.140.0/22 -103.63.144.0/22 -103.63.152.0/22 -103.63.160.0/22 -103.63.164.0/22 -103.63.168.0/22 -103.63.172.0/22 -103.63.176.0/22 -103.63.180.0/22 -103.63.184.0/22 -103.63.192.0/22 -103.63.196.0/22 -103.63.200.0/22 -103.63.204.0/22 -103.63.208.0/22 -103.63.240.0/22 +103.62.88.0/23 +103.63.160.0/20 +103.63.176.0/21 103.63.244.0/22 -103.63.248.0/22 -103.63.252.0/22 -103.64.0.0/22 -103.64.4.0/22 -103.64.24.0/22 -103.64.28.0/22 -103.64.32.0/22 -103.64.36.0/22 -103.64.40.0/22 -103.64.44.0/22 -103.64.48.0/22 -103.64.52.0/22 -103.64.56.0/22 -103.64.60.0/22 -103.64.64.0/22 -103.64.68.0/22 -103.64.72.0/22 -103.64.76.0/22 -103.64.80.0/22 -103.64.84.0/22 -103.64.88.0/22 -103.64.92.0/22 -103.64.96.0/22 -103.64.100.0/22 -103.64.104.0/22 -103.64.108.0/22 -103.64.112.0/22 -103.64.116.0/22 -103.64.120.0/22 -103.64.124.0/22 +103.64.24.0/21 103.64.140.0/22 103.64.144.0/22 -103.64.152.0/22 -103.64.156.0/22 -103.64.160.0/22 -103.64.164.0/22 -103.64.168.0/22 -103.64.172.0/22 -103.64.176.0/22 -103.64.180.0/22 -103.64.184.0/22 -103.64.188.0/22 -103.64.192.0/22 -103.64.196.0/22 -103.64.200.0/22 -103.64.204.0/22 -103.64.208.0/22 -103.64.212.0/22 -103.64.216.0/22 -103.64.220.0/22 -103.64.224.0/22 -103.64.228.0/22 -103.64.232.0/22 -103.64.236.0/22 -103.64.240.0/22 -103.64.244.0/22 -103.64.248.0/22 -103.64.252.0/22 -103.65.0.0/22 -103.65.4.0/22 +103.64.152.0/21 +103.64.208.0/21 103.65.8.0/22 -103.65.12.0/22 -103.65.16.0/22 -103.65.36.0/22 -103.65.40.0/22 -103.65.48.0/22 -103.65.52.0/22 -103.65.56.0/22 -103.65.60.0/22 -103.65.64.0/22 -103.65.68.0/22 -103.65.72.0/22 -103.65.76.0/22 -103.65.80.0/22 -103.65.84.0/22 -103.65.88.0/22 -103.65.92.0/22 -103.65.100.0/22 -103.65.104.0/22 -103.65.108.0/22 -103.65.112.0/22 -103.65.144.0/22 -103.65.148.0/22 -103.65.152.0/22 -103.65.156.0/22 -103.65.160.0/22 -103.65.164.0/22 -103.65.168.0/22 -103.65.172.0/22 -103.65.204.0/23 -103.65.206.0/23 103.65.224.0/23 103.66.32.0/22 -103.66.40.0/22 -103.66.92.0/22 -103.66.108.0/22 -103.66.200.0/22 -103.66.216.0/22 -103.66.240.0/22 -103.66.244.0/22 -103.66.248.0/22 -103.66.252.0/22 -103.67.0.0/22 -103.67.4.0/22 -103.67.8.0/22 -103.67.52.0/23 -103.67.100.0/22 -103.67.104.0/22 -103.67.108.0/22 -103.67.112.0/22 -103.67.116.0/22 -103.67.120.0/22 -103.67.124.0/22 -103.67.128.0/22 -103.67.132.0/22 -103.67.136.0/22 -103.67.140.0/22 -103.67.144.0/22 -103.67.148.0/22 -103.67.172.0/22 -103.67.192.0/22 -103.67.212.0/22 -103.67.252.0/22 -103.68.64.0/22 -103.68.88.0/22 -103.68.100.0/22 103.68.128.0/22 -103.68.192.0/22 103.69.16.0/22 -103.69.62.0/23 -103.69.116.0/22 103.70.8.0/22 -103.70.14.0/23 -103.70.148.0/22 -103.70.220.0/22 -103.70.224.0/22 -103.70.236.0/22 -103.70.252.0/22 -103.71.0.0/22 -103.71.48.0/22 103.71.68.0/22 -103.71.72.0/22 -103.71.80.0/22 -103.71.84.0/22 -103.71.88.0/22 -103.71.120.0/22 -103.71.124.0/22 -103.71.128.0/22 -103.71.144.0/22 -103.71.196.0/22 -103.71.200.0/22 +103.71.200.0/23 +103.71.202.0/24 103.71.232.0/22 -103.72.12.0/22 -103.72.16.0/22 -103.72.20.0/22 -103.72.24.0/22 -103.72.28.0/22 -103.72.32.0/22 -103.72.36.0/22 -103.72.40.0/22 -103.72.44.0/22 -103.72.48.0/22 -103.72.52.0/22 -103.72.112.0/22 -103.72.116.0/22 -103.72.120.0/22 -103.72.124.0/22 -103.72.128.0/22 -103.72.132.0/22 -103.72.148.0/22 -103.72.172.0/22 -103.72.180.0/22 -103.72.224.0/22 -103.72.228.0/22 -103.72.232.0/22 -103.72.236.0/22 -103.72.240.0/22 -103.72.244.0/22 -103.72.248.0/22 -103.72.252.0/22 -103.73.0.0/22 -103.73.4.0/22 -103.73.8.0/22 -103.73.12.0/22 -103.73.16.0/22 -103.73.20.0/22 -103.73.24.0/22 -103.73.28.0/22 -103.73.48.0/22 +103.72.113.0/24 +103.72.172.0/24 +103.73.48.0/24 103.73.116.0/22 -103.73.120.0/22 -103.73.128.0/22 -103.73.132.0/22 -103.73.136.0/22 -103.73.140.0/22 +103.73.136.0/21 103.73.144.0/22 -103.73.168.0/22 -103.73.176.0/22 +103.73.158.0/24 103.73.204.0/22 -103.73.208.0/22 -103.73.240.0/22 -103.73.244.0/22 -103.73.248.0/22 -103.74.24.0/22 -103.74.28.0/22 -103.74.32.0/22 -103.74.36.0/22 -103.74.40.0/22 -103.74.44.0/22 +103.74.24.0/21 103.74.48.0/22 -103.74.56.0/22 -103.74.60.0/22 103.74.80.0/22 -103.74.124.0/22 -103.74.148.0/22 -103.74.152.0/22 -103.74.156.0/22 -103.74.204.0/22 -103.74.232.0/22 -103.75.82.0/23 -103.75.88.0/22 -103.75.92.0/22 103.75.104.0/22 -103.75.108.0/22 -103.75.112.0/22 -103.75.120.0/22 -103.75.128.0/22 -103.75.144.0/22 103.75.152.0/22 -103.75.236.0/24 103.76.60.0/22 -103.76.64.0/22 -103.76.68.0/22 -103.76.72.0/22 -103.76.92.0/22 -103.76.216.0/22 103.76.220.0/22 103.76.224.0/22 103.77.28.0/22 -103.77.52.0/22 -103.77.56.0/22 -103.77.72.0/22 -103.77.88.0/22 -103.77.92.0/22 103.77.132.0/22 -103.77.148.0/22 -103.77.220.0/22 -103.78.56.0/22 103.78.60.0/22 -103.78.64.0/22 -103.78.68.0/22 -103.78.124.0/22 -103.78.172.0/22 -103.78.176.0/22 -103.78.196.0/22 +103.78.126.0/23 103.78.228.0/22 103.79.24.0/22 -103.79.28.0/22 -103.79.36.0/22 -103.79.40.0/22 -103.79.44.0/22 -103.79.56.0/22 -103.79.60.0/22 -103.79.64.0/22 -103.79.68.0/22 -103.79.80.0/22 -103.79.84.0/22 -103.79.136.0/22 -103.79.188.0/22 -103.79.192.0/22 -103.79.196.0/22 103.79.200.0/22 -103.79.204.0/22 -103.79.208.0/22 -103.79.212.0/22 -103.79.228.0/23 -103.80.28.0/22 -103.80.44.0/22 -103.80.72.0/22 -103.80.176.0/22 -103.80.180.0/22 -103.80.184.0/22 -103.80.192.0/22 -103.80.200.0/22 -103.80.232.0/22 +103.79.228.0/24 103.81.4.0/22 -103.81.8.0/22 -103.81.16.0/22 -103.81.20.0/22 -103.81.44.0/22 103.81.48.0/22 -103.81.96.0/22 -103.81.120.0/22 -103.81.148.0/22 -103.81.164.0/22 -103.81.168.0/22 -103.81.183.0/24 -103.81.184.0/22 +103.81.123.0/24 103.81.200.0/22 -103.81.232.0/22 -103.82.52.0/22 -103.82.60.0/22 -103.82.68.0/22 -103.82.84.0/22 -103.82.104.0/22 103.82.224.0/22 -103.82.236.0/22 103.83.44.0/22 -103.83.52.0/22 -103.83.60.0/22 103.83.64.0/22 103.83.72.0/22 -103.83.112.0/22 -103.83.120.0/22 -103.83.180.0/22 -103.84.0.0/22 -103.84.12.0/22 -103.84.16.0/22 -103.84.20.0/22 -103.84.24.0/22 -103.84.28.0/22 -103.84.48.0/22 -103.84.64.0/22 -103.84.72.0/22 -103.84.136.0/22 103.84.170.0/23 -103.85.20.0/22 -103.85.24.0/22 -103.85.44.0/22 -103.85.48.0/22 103.85.84.0/22 -103.85.136.0/22 -103.85.144.0/22 +103.85.147.0/24 103.85.164.0/22 -103.85.168.0/22 -103.85.172.0/22 +103.85.168.0/21 103.85.176.0/22 -103.85.186.0/23 -103.85.224.0/22 -103.86.28.0/22 -103.86.32.0/22 -103.86.60.0/22 -103.86.80.0/22 -103.86.84.0/22 -103.86.204.0/22 -103.86.208.0/22 -103.86.212.0/22 -103.86.216.0/22 -103.86.220.0/22 -103.86.224.0/22 -103.86.228.0/22 -103.86.232.0/22 -103.86.236.0/22 -103.86.240.0/22 -103.86.244.0/22 -103.86.248.0/22 -103.86.252.0/22 -103.87.0.0/22 -103.87.4.0/22 -103.87.20.0/22 -103.87.32.0/22 -103.87.96.0/22 -103.87.132.0/22 103.87.180.0/22 -103.87.224.0/22 -103.88.4.0/22 -103.88.8.0/22 -103.88.12.0/22 -103.88.16.0/22 -103.88.20.0/22 -103.88.32.0/22 -103.88.36.0/22 -103.88.60.0/22 +103.88.32.0/21 103.88.64.0/22 -103.88.72.0/22 103.88.96.0/22 -103.88.164.0/22 -103.88.212.0/22 -103.89.28.0/22 -103.89.96.0/22 -103.89.100.0/22 -103.89.104.0/22 -103.89.108.0/22 -103.89.112.0/22 -103.89.116.0/22 -103.89.148.0/22 -103.89.172.0/22 -103.89.184.0/22 -103.89.188.0/22 -103.89.192.0/22 -103.89.196.0/22 -103.89.200.0/22 -103.89.204.0/22 -103.89.208.0/22 -103.89.212.0/22 -103.89.216.0/22 -103.89.220.0/22 -103.89.224.0/22 -103.89.228.0/22 -103.90.51.0/24 -103.90.52.0/22 +103.89.184.0/21 +103.89.192.0/19 +103.89.224.0/21 103.90.56.0/23 103.90.92.0/22 -103.90.100.0/22 -103.90.104.0/22 -103.90.108.0/22 -103.90.112.0/22 -103.90.116.0/22 -103.90.120.0/22 -103.90.124.0/22 -103.90.128.0/22 -103.90.132.0/22 103.90.152.0/22 -103.90.168.0/22 -103.90.173.0/24 103.90.176.0/22 103.90.188.0/22 -103.90.192.0/22 -103.91.36.0/22 -103.91.40.0/22 -103.91.108.0/22 -103.91.112.0/23 -103.91.138.0/23 -103.91.152.0/22 103.91.176.0/22 -103.91.200.0/22 103.91.208.0/22 -103.91.212.0/22 -103.91.236.0/22 -103.91.252.0/22 -103.92.0.0/22 -103.92.4.0/22 -103.92.8.0/22 -103.92.12.0/22 -103.92.48.0/22 -103.92.52.0/22 -103.92.56.0/22 -103.92.60.0/22 -103.92.64.0/22 -103.92.68.0/22 -103.92.72.0/22 -103.92.76.0/22 -103.92.80.0/22 -103.92.86.0/24 103.92.88.0/22 -103.92.108.0/22 -103.92.124.0/22 -103.92.132.0/22 -103.92.156.0/22 -103.92.164.0/22 -103.92.168.0/22 -103.92.172.0/22 -103.92.176.0/22 -103.92.180.0/22 -103.92.184.0/22 -103.92.188.0/22 -103.92.192.0/22 -103.92.236.0/22 -103.92.240.0/22 -103.92.244.0/22 -103.92.248.0/22 -103.92.252.0/22 -103.93.0.0/22 -103.93.4.0/22 -103.93.28.0/22 -103.93.84.0/22 -103.93.142.0/23 -103.93.152.0/22 103.93.180.0/22 103.93.204.0/22 103.94.12.0/22 -103.94.20.0/22 -103.94.28.0/22 -103.94.32.0/22 -103.94.36.0/22 -103.94.40.0/22 -103.94.44.0/22 -103.94.72.0/22 -103.94.88.0/22 -103.94.116.0/22 -103.94.160.0/22 103.94.200.0/22 -103.95.52.0/22 103.95.68.0/22 -103.95.88.0/22 -103.95.92.0/22 -103.95.128.0/22 -103.95.136.0/22 -103.95.140.0/22 -103.95.144.0/22 -103.95.152.0/22 -103.95.216.0/22 -103.95.220.0/22 -103.95.224.0/22 -103.95.236.0/22 -103.95.240.0/22 -103.95.244.0/22 -103.95.248.0/22 103.95.252.0/22 -103.96.0.0/22 103.96.8.0/22 -103.96.124.0/22 -103.96.136.0/22 -103.96.140.0/24 -103.96.152.0/22 -103.96.156.0/22 -103.96.160.0/22 -103.96.164.0/22 -103.96.168.0/22 -103.96.172.0/22 -103.96.176.0/22 -103.96.180.0/22 -103.96.184.0/22 -103.96.188.0/22 -103.96.192.0/22 -103.96.196.0/22 -103.96.200.0/22 -103.96.204.0/22 -103.96.208.0/22 -103.96.212.0/22 -103.96.216.0/22 +103.96.214.0/23 103.96.224.0/23 -103.97.8.0/22 -103.97.12.0/22 -103.97.16.0/20 -103.97.32.0/22 -103.97.36.0/22 -103.97.40.0/22 -103.97.56.0/22 -103.97.60.0/22 -103.97.64.0/22 -103.97.68.0/22 -103.97.72.0/22 -103.97.80.0/22 -103.97.112.0/22 -103.97.116.0/22 -103.97.128.0/22 +103.97.60.0/24 +103.97.112.0/23 103.97.144.0/22 -103.97.148.0/22 -103.97.188.0/22 -103.97.192.0/22 -103.97.228.0/23 -103.98.0.0/23 -103.98.28.0/23 -103.98.40.0/22 103.98.44.0/22 -103.98.48.0/22 -103.98.56.0/22 -103.98.80.0/22 -103.98.88.0/22 103.98.92.0/22 103.98.96.0/22 -103.98.100.0/22 -103.98.124.0/22 -103.98.136.0/22 -103.98.140.0/22 -103.98.144.0/22 -103.98.164.0/22 -103.98.168.0/22 -103.98.180.0/22 -103.98.196.0/22 -103.98.216.0/22 +103.98.125.0/24 +103.98.127.0/24 103.98.220.0/22 -103.98.224.0/22 -103.98.228.0/22 -103.98.232.0/22 -103.98.240.0/22 -103.98.244.0/22 -103.98.248.0/22 +103.98.248.0/23 +103.98.251.0/24 103.98.252.0/22 -103.99.40.0/23 -103.99.52.0/22 -103.99.56.0/22 -103.99.60.0/22 -103.99.76.0/22 103.99.104.0/22 -103.99.116.0/22 -103.99.120.0/22 -103.99.152.0/22 -103.99.220.0/22 -103.99.232.0/22 -103.99.236.0/22 -103.100.0.0/22 -103.100.32.0/22 -103.100.40.0/22 -103.100.48.0/22 -103.100.52.0/22 -103.100.56.0/22 -103.100.60.0/22 103.100.64.0/22 -103.100.68.0/22 -103.100.88.0/22 -103.100.116.0/22 -103.100.144.0/22 -103.100.236.0/22 -103.100.240.0/22 -103.100.248.0/22 -103.100.252.0/22 -103.101.8.0/22 -103.101.12.0/22 -103.101.60.0/22 -103.101.120.0/22 -103.101.124.0/22 -103.101.144.0/22 -103.101.148.0/22 +103.101.124.0/23 103.101.180.0/22 -103.101.184.0/22 -103.102.76.0/22 -103.102.80.0/22 -103.102.168.0/22 -103.102.172.0/22 -103.102.180.0/22 -103.102.184.0/22 -103.102.188.0/22 -103.102.192.0/22 103.102.196.0/22 103.102.200.0/22 -103.102.208.0/22 -103.102.212.0/22 -103.103.12.0/22 -103.103.16.0/22 -103.103.36.0/22 -103.103.72.0/22 -103.103.188.0/22 -103.103.200.0/22 -103.103.204.0/22 -103.103.220.0/22 -103.103.224.0/21 -103.103.232.0/22 -103.103.248.0/21 -103.104.0.0/21 -103.104.36.0/22 -103.104.40.0/22 -103.104.64.0/22 -103.104.104.0/22 -103.104.152.0/22 -103.104.188.0/22 -103.104.198.0/23 +103.102.213.0/24 +103.102.214.0/24 +103.103.12.0/24 +103.103.36.0/24 +103.104.155.0/24 103.104.252.0/22 103.105.0.0/22 -103.105.4.0/22 103.105.12.0/22 -103.105.16.0/22 -103.105.23.0/24 103.105.60.0/22 -103.105.116.0/22 -103.105.132.0/22 103.105.180.0/22 103.105.184.0/22 -103.105.200.0/22 -103.105.204.0/22 +103.105.200.0/23 +103.105.202.0/24 103.105.220.0/22 103.106.36.0/22 -103.106.40.0/22 -103.106.44.0/22 -103.106.60.0/22 -103.106.68.0/22 -103.106.96.0/22 -103.106.120.0/22 -103.106.128.0/22 -103.106.132.0/22 -103.106.160.0/22 -103.106.196.0/22 -103.106.202.0/23 -103.106.212.0/22 103.106.252.0/22 103.107.0.0/22 -103.107.28.0/22 -103.107.32.0/22 -103.107.44.0/22 -103.107.72.0/22 -103.107.108.0/22 -103.107.164.0/22 -103.107.168.0/22 103.107.188.0/22 -103.107.192.0/22 -103.107.208.0/22 -103.107.212.0/22 -103.107.216.0/22 -103.107.220.0/22 -103.108.52.0/22 -103.108.160.0/22 -103.108.164.0/22 -103.108.192.0/22 -103.108.196.0/22 -103.108.208.0/22 -103.108.212.0/22 -103.108.224.0/22 -103.108.244.0/22 +103.107.216.0/21 +103.108.244.0/24 +103.108.247.0/24 103.109.20.0/22 -103.109.48.0/22 -103.109.88.0/22 -103.109.106.0/23 -103.109.248.0/22 -103.110.92.0/22 -103.110.116.0/22 103.110.132.0/22 103.110.136.0/22 -103.110.152.0/22 -103.110.156.0/22 -103.110.188.0/22 -103.110.204.0/22 -103.111.64.0/22 +103.111.64.0/24 103.111.172.0/22 -103.111.252.0/22 -103.112.28.0/22 -103.112.68.0/22 -103.112.72.0/22 -103.112.88.0/22 -103.112.92.0/22 -103.112.108.0/22 -103.112.112.0/22 -103.112.116.0/22 -103.112.140.0/22 -103.112.172.0/22 -103.112.184.0/22 103.113.4.0/22 -103.113.92.0/22 -103.113.144.0/22 -103.113.220.0/22 -103.113.232.0/22 -103.113.236.0/22 -103.114.4.0/22 -103.114.28.0/22 -103.114.68.0/22 -103.114.72.0/22 103.114.100.0/22 -103.114.132.0/22 -103.114.148.0/22 -103.114.156.0/22 -103.114.176.0/22 -103.114.212.0/22 +103.114.212.0/23 103.114.236.0/22 -103.114.240.0/22 -103.115.16.0/22 -103.115.40.0/22 -103.115.44.0/22 -103.115.48.0/22 -103.115.52.0/22 -103.115.56.0/22 -103.115.60.0/22 -103.115.64.0/22 -103.115.68.0/22 103.115.92.0/22 103.115.120.0/22 -103.115.148.0/22 103.115.248.0/22 -103.116.40.0/22 -103.116.64.0/22 -103.116.72.0/22 -103.116.76.0/22 +103.116.76.0/23 +103.116.78.0/24 103.116.92.0/22 -103.116.120.0/22 -103.116.128.0/22 +103.116.120.0/23 +103.116.123.0/24 103.116.138.0/23 -103.116.148.0/22 -103.116.184.0/22 -103.116.206.0/23 -103.116.220.0/22 -103.116.224.0/22 -103.116.228.0/22 103.117.16.0/22 -103.117.72.0/22 -103.117.88.0/22 -103.117.136.0/22 -103.117.188.0/22 103.117.220.0/22 103.118.52.0/22 -103.118.56.0/22 103.118.60.0/22 -103.118.64.0/22 -103.118.68.0/22 -103.118.72.0/22 -103.118.88.0/22 -103.118.173.0/24 -103.118.192.0/22 -103.118.196.0/22 -103.118.200.0/22 -103.118.204.0/22 -103.118.208.0/22 -103.118.212.0/22 -103.118.216.0/22 -103.118.220.0/22 -103.118.240.0/22 -103.118.244.0/22 -103.118.248.0/22 -103.118.252.0/22 -103.119.0.0/22 -103.119.12.0/22 -103.119.16.0/22 -103.119.28.0/22 -103.119.104.0/22 -103.119.115.0/24 -103.119.156.0/22 -103.119.180.0/22 -103.119.200.0/22 -103.119.224.0/22 -103.120.52.0/22 103.120.72.0/22 103.120.88.0/22 -103.120.96.0/22 -103.120.100.0/22 -103.120.140.0/22 103.120.196.0/22 103.120.224.0/22 103.121.52.0/22 -103.121.92.0/22 -103.121.160.0/22 -103.121.164.0/22 +103.121.164.0/23 +103.121.166.0/24 103.121.250.0/24 -103.121.252.0/22 103.122.48.0/22 -103.122.176.0/22 -103.122.192.0/22 -103.122.240.0/22 -103.123.4.0/22 -103.123.56.0/22 -103.123.88.0/22 -103.123.92.0/22 -103.123.116.0/22 -103.123.176.0/22 -103.123.200.0/22 -103.123.204.0/22 -103.123.208.0/22 -103.123.212.0/22 -103.124.24.0/22 -103.124.48.0/22 -103.124.64.0/22 -103.124.212.0/22 -103.124.216.0/22 -103.125.20.0/22 -103.125.44.0/22 -103.125.132.0/22 -103.125.164.0/22 -103.125.196.0/22 +103.123.4.0/23 103.125.236.0/22 -103.125.248.0/22 -103.126.0.0/22 -103.126.16.0/22 -103.126.44.0/22 -103.126.100.0/22 +103.126.1.0/24 103.126.124.0/22 -103.126.128.0/22 -103.126.132.0/22 -103.126.208.0/22 -103.130.132.0/22 -103.130.160.0/22 -103.130.228.0/22 -103.131.20.0/22 -103.131.36.0/22 +103.130.160.0/23 103.131.138.0/23 103.131.152.0/22 103.131.168.0/22 -103.131.176.0/22 -103.131.224.0/22 -103.131.228.0/22 -103.131.240.0/22 103.132.22.0/23 -103.132.60.0/22 -103.132.64.0/20 -103.132.80.0/22 -103.132.104.0/21 -103.132.112.0/21 -103.132.120.0/22 -103.132.160.0/22 -103.132.164.0/22 -103.132.188.0/22 -103.132.208.0/22 -103.132.212.0/22 -103.132.234.0/23 -103.133.12.0/22 -103.133.40.0/22 -103.133.128.0/22 -103.133.136.0/22 -103.133.176.0/22 -103.133.232.0/22 -103.134.196.0/22 -103.134.232.0/23 -103.135.80.0/22 -103.135.124.0/22 -103.135.148.0/22 -103.135.156.0/22 +103.132.212.0/23 +103.133.128.0/23 103.135.160.0/22 -103.135.164.0/22 -103.135.176.0/22 -103.135.184.0/22 -103.135.192.0/22 +103.135.164.0/23 +103.135.192.0/23 +103.135.195.0/24 103.135.196.0/22 -103.135.236.0/22 -103.136.128.0/22 -103.136.232.0/22 -103.137.58.0/23 +103.135.236.0/24 103.137.60.0/24 -103.137.76.0/22 -103.137.136.0/23 -103.137.180.0/22 -103.137.236.0/22 -103.138.2.0/23 -103.138.12.0/23 -103.138.80.0/22 -103.138.134.0/23 -103.138.156.0/23 -103.138.208.0/23 -103.138.220.0/23 -103.138.248.0/23 -103.139.0.0/23 -103.139.2.0/23 -103.139.22.0/23 -103.139.92.0/23 -103.139.113.0/24 -103.139.134.0/23 -103.139.136.0/23 103.139.172.0/23 -103.139.204.0/23 103.139.212.0/23 -103.140.8.0/23 103.140.14.0/23 -103.140.126.0/23 -103.140.140.0/23 -103.140.144.0/23 -103.140.152.0/23 -103.140.192.0/23 -103.140.228.0/23 103.141.10.0/23 -103.141.58.0/23 -103.141.128.0/23 -103.141.186.0/23 -103.141.242.0/23 -103.142.28.0/23 -103.142.58.0/23 103.142.82.0/23 103.142.96.0/23 -103.142.102.0/23 -103.142.122.0/23 -103.142.128.0/23 -103.142.140.0/23 -103.142.154.0/23 -103.142.156.0/23 -103.142.172.0/23 -103.142.180.0/23 -103.142.186.0/23 -103.142.190.0/23 -103.142.220.0/23 -103.142.230.0/24 103.142.234.0/23 -103.142.238.0/23 -103.142.248.0/23 -103.143.16.0/23 -103.143.18.0/23 -103.143.74.0/23 -103.143.120.0/23 -103.143.124.0/23 -103.143.132.0/23 -103.143.134.0/23 -103.143.174.0/23 +103.143.16.0/22 103.143.228.0/23 -103.144.40.0/23 -103.144.52.0/23 103.144.66.0/23 -103.144.70.0/23 -103.144.72.0/23 -103.144.136.0/23 -103.144.148.0/23 +103.144.70.0/24 103.144.158.0/23 -103.144.240.0/23 -103.145.38.0/23 103.145.42.0/23 -103.145.60.0/23 -103.145.72.0/23 -103.145.86.0/23 -103.145.92.0/23 -103.145.94.0/23 -103.145.98.0/23 -103.145.106.0/23 -103.145.188.0/23 -103.145.190.0/23 -103.146.72.0/23 -103.146.90.0/23 -103.146.124.0/23 103.146.126.0/23 -103.146.138.0/23 -103.146.230.0/23 -103.146.236.0/23 -103.146.252.0/23 -103.147.12.0/23 -103.147.124.0/23 -103.147.198.0/23 -103.147.206.0/23 -103.148.174.0/23 -103.149.6.0/23 -103.149.17.0/24 -103.149.44.0/23 -103.149.110.0/23 -103.149.132.0/23 -103.149.144.0/23 -103.149.156.0/23 -103.149.181.0/24 -103.149.210.0/23 -103.149.214.0/23 -103.149.220.0/23 -103.149.242.0/23 -103.149.244.0/23 -103.149.246.0/23 -103.149.248.0/23 +103.147.124.0/24 +103.149.242.0/24 +103.149.244.0/22 103.150.10.0/23 103.150.24.0/23 -103.150.66.0/23 -103.150.72.0/23 -103.150.122.0/23 -103.150.126.0/23 -103.150.128.0/23 -103.150.130.0/23 -103.150.146.0/23 103.150.164.0/23 -103.150.172.0/23 -103.150.180.0/23 -103.150.200.0/23 -103.150.210.0/23 -103.150.214.0/23 -103.150.216.0/23 -103.150.244.0/23 -103.151.4.0/23 -103.151.44.0/23 -103.151.138.0/23 -103.151.142.0/23 103.151.148.0/23 -103.151.150.0/23 -103.151.158.0/23 -103.151.206.0/23 -103.151.216.0/23 -103.151.228.0/23 -103.152.14.0/23 -103.152.24.0/23 103.152.28.0/23 -103.152.30.0/23 103.152.56.0/23 103.152.76.0/23 -103.152.98.0/23 -103.152.112.0/23 -103.152.120.0/23 -103.152.122.0/23 -103.152.152.0/23 -103.152.168.0/23 -103.152.170.0/23 103.152.186.0/23 -103.152.190.0/23 -103.152.192.0/23 -103.152.200.0/23 -103.152.208.0/23 -103.152.224.0/23 -103.152.226.0/23 -103.152.246.0/23 -103.152.250.0/23 -103.153.4.0/23 -103.153.36.0/23 -103.153.100.0/23 -103.153.114.0/23 -103.153.122.0/23 -103.153.128.0/23 -103.153.132.0/23 -103.153.138.0/23 -103.153.146.0/23 -103.153.160.0/23 -103.154.18.0/23 +103.152.224.0/24 103.154.30.0/23 -103.154.32.0/23 -103.154.40.0/23 -103.154.66.0/23 +103.154.41.0/24 103.154.162.0/23 -103.154.164.0/23 -103.154.168.0/23 -103.154.242.0/23 -103.155.14.0/23 -103.155.16.0/23 -103.155.34.0/23 -103.155.48.0/23 103.155.76.0/23 -103.155.100.0/23 -103.155.110.0/23 -103.155.120.0/23 -103.155.214.0/23 -103.155.248.0/23 -103.156.28.0/23 103.156.68.0/23 -103.156.78.0/23 -103.156.104.0/23 -103.156.158.0/23 103.156.174.0/23 103.156.186.0/23 -103.156.228.0/23 -103.157.30.0/23 -103.157.138.0/23 -103.157.174.0/23 -103.157.212.0/23 -103.157.234.0/23 -103.157.254.0/23 103.158.0.0/23 -103.158.8.0/23 -103.158.16.0/23 103.158.74.0/23 -103.158.190.0/23 -103.158.200.0/23 -103.158.224.0/23 -103.159.80.0/23 -103.159.122.0/23 103.159.124.0/23 -103.159.134.0/23 -103.159.142.0/23 -103.160.32.0/23 -103.160.34.0/23 -103.160.112.0/23 -103.160.114.0/23 -103.160.244.0/23 -103.160.254.0/23 -103.161.14.0/23 -103.161.102.0/23 -103.161.138.0/23 -103.161.208.0/23 103.161.220.0/23 103.161.254.0/23 103.162.10.0/23 -103.162.32.0/23 -103.162.116.0/23 -103.163.28.0/23 -103.163.32.0/23 103.163.46.0/23 -103.163.74.0/23 -103.163.180.0/23 -103.164.4.0/23 -103.164.32.0/23 -103.164.40.0/23 -103.164.42.0/23 -103.164.64.0/23 -103.164.76.0/23 -103.164.178.0/23 -103.165.44.0/23 -103.165.52.0/23 -103.165.82.0/23 +103.163.180.0/24 +103.164.32.0/24 103.165.110.0/23 -103.166.20.0/23 -103.166.50.0/23 -103.166.52.0/23 -103.166.54.0/23 -103.166.84.0/23 -103.166.138.0/23 -103.167.0.0/23 -103.167.36.0/23 -103.167.100.0/23 -103.168.98.0/23 -103.168.170.0/23 103.169.50.0/23 103.169.62.0/23 -103.169.108.0/23 -103.169.162.0/23 -103.169.202.0/23 -103.169.216.0/23 103.170.4.0/23 -103.170.72.0/23 -103.170.134.0/23 -103.170.210.0/23 103.170.212.0/23 -103.171.32.0/23 -103.171.166.0/23 -103.171.214.0/23 -103.172.32.0/23 -103.172.160.0/23 -103.172.191.0/24 -103.173.102.0/23 -103.173.182.0/23 -103.173.184.0/23 103.174.94.0/23 -103.175.14.0/23 -103.175.98.0/23 -103.175.114.0/23 -103.175.118.0/23 -103.176.52.0/23 -103.176.222.0/23 -103.176.244.0/23 +103.175.197.0/24 103.177.28.0/23 -103.177.44.0/23 -103.177.70.0/23 -103.177.136.0/23 -103.177.162.0/23 -103.178.56.0/23 -103.178.240.0/23 -103.179.76.0/23 103.179.78.0/23 -103.180.108.0/23 -103.180.226.0/23 -103.181.164.0/23 -103.181.234.0/23 -103.183.26.0/23 +103.181.234.0/24 103.183.66.0/23 103.183.122.0/23 103.183.124.0/23 103.184.46.0/23 -103.184.60.0/23 -103.185.78.0/23 -103.185.80.0/23 -103.185.228.0/23 103.186.4.0/23 103.186.108.0/23 -103.186.112.0/23 -103.186.136.0/23 -103.186.158.0/23 -103.186.162.0/23 -103.186.228.0/23 103.189.92.0/23 -103.189.140.0/23 -103.189.152.0/23 103.189.154.0/23 -103.190.20.0/23 -103.190.71.0/24 -103.190.104.0/23 -103.190.116.0/23 103.190.118.0/23 103.190.122.0/23 -103.191.102.0/23 +103.191.102.0/24 103.191.242.0/23 103.192.0.0/22 -103.192.4.0/22 -103.192.8.0/22 -103.192.12.0/22 -103.192.16.0/22 -103.192.20.0/22 -103.192.24.0/22 -103.192.28.0/22 -103.192.48.0/22 -103.192.52.0/22 -103.192.56.0/22 -103.192.84.0/22 -103.192.88.0/22 -103.192.92.0/22 -103.192.96.0/22 -103.192.100.0/22 -103.192.104.0/22 -103.192.108.0/22 -103.192.112.0/22 -103.192.128.0/22 +103.192.8.0/21 +103.192.16.0/20 103.192.132.0/22 -103.192.136.0/22 -103.192.140.0/22 -103.192.144.0/22 -103.192.164.0/22 103.192.188.0/22 -103.192.208.0/22 -103.192.212.0/22 -103.192.216.0/22 +103.192.208.0/21 103.192.252.0/22 -103.193.40.0/22 -103.193.44.0/22 -103.193.120.0/22 -103.193.140.0/22 -103.193.160.0/22 103.193.188.0/22 103.193.192.0/22 -103.193.212.0/22 -103.193.216.0/22 -103.193.220.0/22 -103.193.224.0/22 -103.193.228.0/22 -103.193.232.0/22 -103.193.236.0/22 -103.194.16.0/22 -103.195.104.0/22 -103.195.112.0/22 -103.195.148.0/22 -103.195.152.0/22 -103.195.160.0/22 -103.196.64.0/22 -103.196.72.0/22 -103.196.88.0/22 -103.196.92.0/22 -103.196.96.0/22 -103.196.168.0/22 -103.196.204.0/22 +103.196.64.0/24 +103.196.88.0/21 103.197.0.0/22 -103.197.180.0/22 103.197.228.0/22 -103.198.20.0/22 103.198.60.0/22 -103.198.64.0/22 -103.198.72.0/22 103.198.124.0/22 -103.198.156.0/22 -103.198.180.0/22 -103.198.196.0/22 -103.198.216.0/22 -103.198.220.0/22 -103.198.224.0/22 -103.198.228.0/22 -103.198.232.0/22 -103.198.236.0/22 -103.198.240.0/22 +103.198.180.0/23 +103.198.216.0/21 +103.198.224.0/20 103.198.244.0/22 -103.199.164.0/22 -103.199.196.0/22 -103.199.228.0/22 -103.199.248.0/22 -103.199.252.0/22 -103.200.52.0/22 -103.200.64.0/22 -103.200.68.0/22 -103.200.136.0/22 -103.200.140.0/22 -103.200.144.0/22 -103.200.148.0/22 -103.200.152.0/22 -103.200.156.0/22 -103.200.160.0/22 -103.200.164.0/22 -103.200.168.0/22 -103.200.172.0/22 -103.200.176.0/22 -103.200.180.0/22 -103.200.184.0/22 -103.200.188.0/22 -103.200.192.0/22 +103.200.136.0/21 +103.200.144.0/21 103.200.220.0/22 -103.200.224.0/22 -103.200.228.0/22 -103.200.232.0/22 -103.200.236.0/22 -103.200.240.0/22 -103.200.244.0/22 -103.200.248.0/22 -103.200.252.0/22 -103.201.0.0/22 -103.201.4.0/22 -103.201.8.0/22 -103.201.12.0/22 -103.201.16.0/22 -103.201.20.0/22 -103.201.28.0/22 -103.201.32.0/22 -103.201.36.0/22 -103.201.40.0/22 -103.201.44.0/22 -103.201.48.0/22 -103.201.52.0/22 -103.201.56.0/22 -103.201.60.0/22 -103.201.64.0/22 -103.201.76.0/22 -103.201.80.0/22 -103.201.84.0/22 -103.201.88.0/22 -103.201.92.0/22 -103.201.96.0/22 -103.201.100.0/22 -103.201.104.0/22 -103.201.108.0/22 -103.201.112.0/22 -103.201.116.0/22 -103.201.120.0/22 -103.201.152.0/22 -103.201.156.0/22 -103.201.160.0/22 -103.201.164.0/22 -103.201.168.0/22 -103.201.172.0/22 -103.201.176.0/22 -103.201.180.0/22 -103.201.184.0/22 -103.201.188.0/22 -103.201.192.0/22 -103.201.196.0/22 -103.201.200.0/22 -103.201.204.0/22 -103.201.208.0/22 -103.201.212.0/22 -103.201.216.0/22 -103.201.220.0/22 -103.201.224.0/22 -103.201.228.0/22 -103.201.232.0/22 -103.201.236.0/22 -103.201.240.0/22 -103.201.244.0/22 -103.201.248.0/22 -103.201.252.0/22 -103.202.0.0/22 -103.202.4.0/22 -103.202.8.0/22 -103.202.12.0/22 -103.202.16.0/22 -103.202.20.0/22 -103.202.24.0/22 -103.202.28.0/22 -103.202.32.0/22 -103.202.36.0/22 -103.202.40.0/22 -103.202.44.0/22 -103.202.56.0/22 -103.202.60.0/22 -103.202.64.0/22 -103.202.68.0/22 -103.202.72.0/22 -103.202.76.0/22 -103.202.80.0/22 -103.202.84.0/22 -103.202.88.0/22 +103.200.224.0/24 +103.201.192.0/24 +103.202.0.0/19 +103.202.32.0/20 103.202.92.0/22 -103.202.96.0/22 -103.202.100.0/22 -103.202.104.0/22 -103.202.108.0/22 +103.202.96.0/20 103.202.112.0/22 -103.202.116.0/22 -103.202.120.0/22 -103.202.124.0/22 -103.202.128.0/22 -103.202.132.0/22 -103.202.136.0/22 -103.202.140.0/22 +103.202.120.0/21 +103.202.128.0/20 103.202.144.0/22 -103.202.152.0/22 -103.202.156.0/22 -103.202.160.0/22 -103.202.164.0/22 -103.202.168.0/22 -103.202.172.0/22 -103.202.176.0/22 -103.202.180.0/22 -103.202.184.0/22 -103.202.188.0/22 -103.202.192.0/22 -103.202.196.0/22 -103.202.200.0/21 -103.202.212.0/22 -103.202.228.0/22 -103.202.236.0/22 -103.202.240.0/22 -103.202.244.0/22 -103.202.248.0/22 -103.202.252.0/22 -103.203.0.0/22 -103.203.4.0/22 -103.203.8.0/22 -103.203.12.0/22 -103.203.16.0/22 -103.203.20.0/22 -103.203.24.0/22 -103.203.28.0/22 -103.203.32.0/22 -103.203.56.0/22 103.203.96.0/22 -103.203.100.0/22 -103.203.104.0/22 -103.203.108.0/22 -103.203.112.0/22 -103.203.116.0/22 -103.203.120.0/22 -103.203.124.0/22 -103.203.128.0/22 103.203.140.0/22 -103.203.164.0/22 -103.203.168.0/22 -103.203.192.0/22 -103.203.200.0/22 -103.203.212.0/22 103.203.216.0/22 -103.204.24.0/22 103.204.72.0/22 -103.204.88.0/22 -103.204.112.0/22 -103.204.136.0/22 -103.204.140.0/22 -103.204.144.0/22 -103.204.148.0/22 -103.204.152.0/22 -103.204.196.0/22 -103.204.216.0/23 -103.204.232.0/22 -103.204.236.0/22 103.205.4.0/22 -103.205.8.0/22 -103.205.40.0/22 -103.205.44.0/22 -103.205.52.0/22 -103.205.108.0/22 -103.205.116.0/22 -103.205.120.0/22 -103.205.136.0/22 -103.205.162.0/24 103.205.188.0/22 103.205.192.0/22 -103.205.196.0/22 -103.205.200.0/22 -103.205.236.0/22 -103.205.248.0/22 103.205.252.0/22 -103.206.0.0/22 -103.206.44.0/22 -103.206.148.0/22 -103.207.48.0/22 -103.207.104.0/22 -103.207.184.0/22 -103.207.188.0/22 -103.207.192.0/22 -103.207.196.0/22 -103.207.200.0/22 -103.207.204.0/22 -103.207.208.0/22 -103.207.212.0/22 -103.207.220.0/22 103.207.228.0/22 -103.207.232.0/22 103.208.12.0/22 -103.208.16.0/22 -103.208.28.0/22 -103.208.40.0/22 -103.208.44.0/22 103.208.48.0/22 103.209.112.0/22 103.209.136.0/22 -103.209.200.0/22 -103.209.208.0/22 -103.209.216.0/22 -103.210.96.0/22 -103.210.156.0/22 103.210.160.0/22 -103.210.164.0/22 -103.210.168.0/22 -103.210.172.0/22 -103.210.176.0/22 -103.210.180.0/22 -103.210.184.0/22 -103.210.188.0/22 -103.210.216.0/22 +103.210.170.0/23 103.211.44.0/22 -103.211.96.0/22 -103.211.156.0/22 -103.211.164.0/22 -103.211.194.0/23 103.211.220.0/22 -103.211.224.0/22 -103.211.248.0/22 -103.212.0.0/22 +103.212.1.0/24 +103.212.2.0/24 103.212.4.0/22 -103.212.8.0/22 103.212.12.0/22 -103.212.44.0/22 -103.212.48.0/22 -103.212.84.0/22 -103.212.100.0/22 -103.212.108.0/22 -103.212.148.0/22 -103.212.164.0/22 -103.212.196.0/22 -103.212.200.0/22 -103.212.228.0/22 -103.212.252.0/22 -103.213.40.0/22 -103.213.44.0/22 -103.213.48.0/22 -103.213.52.0/22 -103.213.56.0/22 +103.212.48.0/23 +103.212.109.0/24 +103.213.48.0/21 103.213.60.0/22 103.213.64.0/19 103.213.96.0/22 103.213.132.0/22 -103.213.136.0/22 -103.213.140.0/22 -103.213.144.0/22 +103.213.144.0/23 103.213.148.0/22 -103.213.152.0/22 -103.213.156.0/22 103.213.160.0/19 -103.213.196.0/23 -103.213.198.0/23 -103.213.226.0/23 -103.213.232.0/23 103.214.48.0/22 -103.214.84.0/22 -103.214.212.0/22 -103.214.240.0/22 -103.214.244.0/22 -103.215.28.0/22 -103.215.32.0/22 103.215.36.0/22 -103.215.44.0/22 -103.215.48.0/22 -103.215.100.0/22 -103.215.108.0/22 -103.215.116.0/22 -103.215.120.0/22 +103.215.44.0/24 103.215.140.0/22 103.216.4.0/22 -103.216.8.0/22 -103.216.12.0/22 -103.216.16.0/22 -103.216.20.0/22 -103.216.24.0/22 -103.216.28.0/22 -103.216.32.0/22 -103.216.36.0/22 -103.216.40.0/22 -103.216.44.0/22 -103.216.64.0/22 -103.216.108.0/22 103.216.136.0/22 103.216.152.0/22 -103.216.156.0/23 -103.216.224.0/22 -103.216.228.0/22 -103.216.240.0/22 -103.216.244.0/22 -103.216.248.0/22 -103.216.252.0/22 -103.217.0.0/22 -103.217.4.0/22 -103.217.8.0/22 -103.217.12.0/22 -103.217.16.0/22 -103.217.20.0/22 -103.217.24.0/22 -103.217.28.0/22 -103.217.32.0/22 -103.217.36.0/22 -103.217.40.0/22 -103.217.44.0/22 -103.217.48.0/22 -103.217.52.0/22 -103.217.56.0/22 -103.217.60.0/22 -103.217.168.0/22 -103.217.180.0/22 -103.217.184.0/22 -103.217.188.0/22 -103.217.192.0/22 -103.217.196.0/22 -103.217.200.0/22 -103.217.204.0/22 -103.218.8.0/22 -103.218.12.0/22 -103.218.16.0/22 -103.218.20.0/22 -103.218.28.0/22 -103.218.32.0/22 -103.218.36.0/22 -103.218.40.0/22 -103.218.44.0/22 -103.218.48.0/22 -103.218.52.0/22 -103.218.56.0/22 -103.218.60.0/22 -103.218.64.0/22 -103.218.68.0/22 -103.218.72.0/22 -103.218.76.0/22 -103.218.80.0/22 -103.218.84.0/22 -103.218.88.0/22 -103.218.92.0/22 -103.218.178.0/23 -103.218.192.0/22 -103.218.196.0/22 -103.218.200.0/22 -103.218.204.0/22 -103.218.208.0/22 -103.218.212.0/22 +103.216.252.0/24 +103.217.184.0/21 +103.217.192.0/20 103.218.216.0/22 -103.219.24.0/22 -103.219.28.0/22 -103.219.32.0/22 -103.219.36.0/22 -103.219.64.0/22 -103.219.84.0/22 -103.219.88.0/22 -103.219.92.0/22 -103.219.96.0/22 -103.219.100.0/22 +103.219.24.0/21 +103.219.32.0/21 +103.219.85.0/24 +103.219.92.0/24 +103.219.100.0/23 103.219.176.0/22 103.219.184.0/22 -103.220.48.0/22 103.220.52.0/22 -103.220.56.0/22 -103.220.60.0/22 +103.220.56.0/21 103.220.64.0/22 103.220.92.0/22 -103.220.96.0/22 -103.220.100.0/22 -103.220.104.0/22 -103.220.108.0/22 -103.220.116.0/22 -103.220.120.0/22 103.220.124.0/22 -103.220.128.0/22 -103.220.132.0/22 -103.220.136.0/22 -103.220.140.0/22 -103.220.144.0/22 -103.220.148.0/22 -103.220.152.0/22 -103.220.160.0/22 -103.220.164.0/22 -103.220.168.0/22 -103.220.172.0/22 -103.220.176.0/22 -103.220.180.0/22 -103.220.184.0/22 -103.220.188.0/22 -103.220.192.0/22 -103.220.196.0/22 -103.220.200.0/22 +103.220.128.0/19 +103.220.160.0/21 103.220.240.0/22 -103.220.244.0/22 -103.220.248.0/22 -103.220.252.0/22 -103.221.0.0/22 -103.221.4.0/22 -103.221.8.0/22 -103.221.12.0/22 -103.221.16.0/22 -103.221.20.0/22 -103.221.24.0/22 -103.221.28.0/22 -103.221.32.0/22 -103.221.36.0/22 -103.221.40.0/22 -103.221.44.0/22 -103.221.48.0/22 -103.221.88.0/22 -103.221.92.0/22 -103.221.96.0/22 -103.221.100.0/22 -103.221.104.0/22 -103.221.108.0/22 -103.221.112.0/22 -103.221.116.0/22 -103.221.120.0/22 -103.221.124.0/22 -103.221.128.0/22 -103.221.132.0/22 -103.221.136.0/22 103.221.140.0/22 -103.221.144.0/22 -103.221.148.0/22 -103.221.152.0/22 -103.221.156.0/22 -103.221.160.0/22 -103.221.164.0/22 -103.221.168.0/22 -103.221.172.0/22 -103.221.176.0/22 -103.221.180.0/22 -103.221.184.0/22 -103.221.188.0/22 -103.221.192.0/22 -103.221.196.0/22 -103.221.200.0/22 -103.221.204.0/22 -103.222.0.0/22 -103.222.4.0/22 -103.222.8.0/22 -103.222.12.0/22 -103.222.16.0/22 -103.222.24.0/22 -103.222.28.0/22 -103.222.32.0/22 -103.222.36.0/22 +103.222.33.0/24 103.222.40.0/22 -103.222.44.0/22 -103.222.48.0/22 -103.222.52.0/22 -103.222.56.0/22 -103.222.60.0/22 -103.222.64.0/22 -103.222.68.0/22 -103.222.72.0/22 -103.222.76.0/22 -103.222.80.0/22 -103.222.84.0/22 -103.222.88.0/22 -103.222.92.0/22 -103.222.96.0/22 -103.222.100.0/22 -103.222.104.0/22 -103.222.108.0/22 -103.222.112.0/22 -103.222.116.0/22 -103.222.120.0/22 -103.222.124.0/22 -103.222.128.0/22 -103.222.132.0/22 -103.222.136.0/22 -103.222.140.0/22 -103.222.144.0/22 -103.222.148.0/22 -103.222.152.0/22 -103.222.156.0/22 -103.222.160.0/22 -103.222.164.0/22 -103.222.168.0/22 -103.222.172.0/22 -103.222.176.0/22 -103.222.180.0/22 +103.222.176.0/21 103.222.184.0/22 -103.222.188.0/22 -103.222.192.0/22 -103.222.196.0/22 -103.222.200.0/22 -103.222.204.0/22 -103.222.208.0/22 -103.222.212.0/22 103.222.216.0/22 -103.222.220.0/22 -103.222.224.0/22 -103.222.228.0/22 -103.222.232.0/22 -103.222.240.0/22 -103.222.244.0/22 -103.223.16.0/22 -103.223.20.0/22 -103.223.24.0/22 -103.223.28.0/22 -103.223.32.0/22 -103.223.36.0/22 -103.223.40.0/22 -103.223.44.0/22 -103.223.48.0/22 -103.223.52.0/22 -103.223.56.0/22 -103.223.60.0/22 -103.223.64.0/22 -103.223.68.0/22 -103.223.72.0/22 -103.223.76.0/22 -103.223.80.0/22 -103.223.84.0/22 -103.223.88.0/22 -103.223.92.0/22 -103.223.96.0/22 -103.223.100.0/22 -103.223.104.0/22 -103.223.108.0/22 -103.223.112.0/22 -103.223.116.0/22 -103.223.120.0/22 -103.223.124.0/22 -103.223.128.0/22 103.223.132.0/22 -103.223.140.0/22 -103.223.144.0/22 -103.223.148.0/22 -103.223.152.0/22 -103.223.156.0/22 -103.223.160.0/22 -103.223.164.0/22 -103.223.168.0/22 -103.223.172.0/22 -103.223.176.0/22 -103.223.180.0/22 -103.223.188.0/22 -103.223.192.0/22 -103.223.196.0/22 -103.223.200.0/22 -103.223.204.0/22 -103.223.208.0/22 -103.223.212.0/22 -103.223.216.0/22 -103.223.220.0/22 -103.223.224.0/22 -103.223.228.0/22 -103.223.232.0/22 -103.223.236.0/22 -103.223.240.0/22 -103.223.244.0/22 -103.223.248.0/22 -103.223.252.0/22 -103.224.0.0/22 -103.224.40.0/22 -103.224.44.0/22 -103.224.60.0/22 -103.224.80.0/22 +103.223.144.0/20 103.224.220.0/22 -103.224.224.0/22 -103.224.228.0/22 103.224.232.0/22 -103.225.18.0/24 -103.225.84.0/22 -103.226.16.0/22 -103.226.40.0/22 -103.226.56.0/22 -103.226.60.0/22 -103.226.80.0/22 -103.226.116.0/23 -103.226.132.0/22 -103.226.156.0/22 -103.226.180.0/22 -103.226.196.0/22 -103.227.48.0/22 -103.227.72.0/22 +103.226.57.0/24 103.227.76.0/22 103.227.80.0/22 -103.227.100.0/22 103.227.120.0/22 -103.227.132.0/22 103.227.136.0/22 -103.227.196.0/22 -103.227.204.0/22 -103.227.212.0/22 103.227.228.0/22 -103.228.12.0/22 -103.228.88.0/22 103.228.136.0/22 103.228.160.0/22 -103.228.176.0/22 -103.228.204.0/22 +103.228.204.0/23 103.228.208.0/22 103.228.228.0/22 -103.228.232.0/22 -103.229.20.0/22 -103.229.60.0/22 -103.229.136.0/22 103.229.148.0/22 103.229.172.0/22 103.229.212.0/22 -103.229.216.0/22 -103.229.220.0/22 -103.229.228.0/22 +103.229.216.0/21 103.229.236.0/22 -103.229.240.0/22 -103.230.0.0/22 -103.230.28.0/22 -103.230.44.0/22 -103.230.96.0/22 103.230.110.0/23 -103.230.128.0/23 -103.230.196.0/22 103.230.200.0/22 -103.230.204.0/22 103.230.212.0/22 103.230.236.0/22 -103.231.16.0/22 -103.231.20.0/22 -103.231.64.0/22 -103.231.68.0/22 -103.231.180.0/22 -103.231.184.0/22 -103.231.244.0/22 -103.232.4.0/22 +103.231.16.0/24 +103.231.64.0/21 103.232.144.0/22 103.232.166.0/23 -103.232.188.0/22 -103.232.212.0/22 103.233.4.0/22 -103.233.44.0/22 103.233.52.0/22 -103.233.104.0/22 103.233.128.0/22 -103.233.136.0/22 +103.233.136.0/24 +103.233.138.0/24 103.233.162.0/23 -103.233.178.0/23 -103.233.228.0/22 -103.234.0.0/22 103.234.20.0/22 103.234.56.0/22 -103.234.128.0/22 -103.234.172.0/22 -103.234.180.0/22 -103.234.244.0/22 -103.235.48.0/22 -103.235.56.0/22 -103.235.60.0/22 -103.235.80.0/22 -103.235.84.0/22 +103.234.128.0/23 +103.234.131.0/24 +103.235.85.0/24 103.235.100.0/22 -103.235.128.0/22 -103.235.132.0/22 103.235.136.0/22 -103.235.140.0/22 -103.235.144.0/22 -103.235.148.0/22 -103.235.184.0/22 -103.235.192.0/22 -103.235.200.0/22 +103.235.144.0/24 103.235.220.0/22 -103.235.224.0/22 -103.235.228.0/22 -103.235.232.0/22 -103.235.236.0/22 -103.235.240.0/22 -103.235.244.0/22 -103.235.248.0/22 -103.235.252.0/22 -103.236.0.0/22 -103.236.4.0/22 -103.236.8.0/22 -103.236.12.0/22 -103.236.16.0/22 -103.236.20.0/22 -103.236.24.0/22 -103.236.28.0/22 -103.236.32.0/22 -103.236.36.0/22 -103.236.40.0/22 -103.236.44.0/22 -103.236.48.0/22 +103.235.224.0/19 103.236.52.0/22 -103.236.56.0/22 -103.236.60.0/22 -103.236.64.0/22 -103.236.68.0/22 -103.236.72.0/22 -103.236.76.0/22 -103.236.80.0/22 -103.236.84.0/22 -103.236.88.0/22 -103.236.92.0/22 +103.236.56.0/21 +103.236.64.0/19 103.236.96.0/22 -103.236.116.0/23 103.236.120.0/22 -103.236.184.0/22 -103.236.220.0/22 -103.236.232.0/22 -103.236.240.0/22 103.236.244.0/22 -103.236.248.0/22 -103.236.252.0/22 -103.237.0.0/22 -103.237.4.0/22 +103.236.248.0/21 103.237.8.0/22 -103.237.12.0/22 -103.237.24.0/22 -103.237.28.0/22 -103.237.68.0/22 -103.237.88.0/22 -103.237.92.0/23 -103.237.152.0/22 -103.237.176.0/22 -103.237.180.0/22 -103.237.184.0/22 -103.237.188.0/22 -103.237.192.0/22 -103.237.196.0/22 -103.237.200.0/22 -103.237.204.0/22 -103.237.208.0/22 -103.237.212.0/22 -103.237.216.0/22 -103.237.220.0/22 -103.237.224.0/22 -103.237.228.0/22 -103.237.232.0/22 -103.237.236.0/22 -103.237.240.0/22 -103.237.244.0/22 -103.237.248.0/22 -103.237.252.0/22 -103.238.0.0/22 -103.238.4.0/22 +103.237.28.0/23 +103.237.176.0/20 +103.237.192.0/19 +103.237.224.0/20 +103.237.240.0/21 +103.237.248.0/23 +103.238.0.0/21 103.238.16.0/22 -103.238.20.0/22 -103.238.24.0/22 -103.238.28.0/22 -103.238.32.0/22 -103.238.36.0/22 -103.238.40.0/22 -103.238.44.0/22 -103.238.48.0/22 +103.238.48.0/24 103.238.52.0/22 -103.238.56.0/22 -103.238.88.0/22 -103.238.92.0/22 -103.238.96.0/22 +103.238.96.0/23 +103.238.98.0/24 103.238.132.0/22 -103.238.140.0/22 103.238.144.0/22 -103.238.152.0/23 103.238.160.0/22 -103.238.164.0/22 -103.238.168.0/22 -103.238.172.0/22 -103.238.176.0/22 103.238.180.0/22 -103.238.184.0/22 -103.238.188.0/22 -103.238.196.0/22 +103.238.184.0/21 103.238.204.0/22 -103.238.252.0/22 -103.239.0.0/22 -103.239.44.0/22 103.239.68.0/22 103.239.152.0/22 -103.239.156.0/22 -103.239.180.0/22 -103.239.184.0/22 +103.239.184.0/23 +103.239.186.0/24 103.239.192.0/22 -103.239.196.0/22 103.239.204.0/22 -103.239.208.0/22 103.239.224.0/22 103.239.244.0/22 103.240.16.0/22 103.240.36.0/22 -103.240.42.0/23 -103.240.72.0/22 103.240.84.0/22 103.240.124.0/22 -103.240.172.0/22 -103.240.188.0/22 -103.240.200.0/23 -103.240.202.0/23 103.240.244.0/22 -103.241.12.0/22 -103.241.72.0/22 -103.241.92.0/22 -103.241.96.0/22 -103.241.160.0/22 -103.241.172.0/23 -103.241.184.0/22 -103.241.188.0/22 -103.241.220.0/22 -103.242.64.0/22 -103.242.128.0/22 -103.242.132.0/22 -103.242.160.0/22 -103.242.168.0/22 +103.241.95.0/24 +103.242.128.0/24 +103.242.130.0/24 +103.242.168.0/23 103.242.172.0/22 -103.242.176.0/22 -103.242.200.0/22 103.242.212.0/22 -103.242.220.0/22 -103.242.240.0/22 103.243.136.0/22 103.243.252.0/22 -103.244.16.0/22 -103.244.26.0/23 -103.244.58.0/23 -103.244.60.0/22 +103.244.59.0/24 103.244.64.0/22 -103.244.68.0/22 -103.244.72.0/22 -103.244.76.0/22 103.244.80.0/22 -103.244.84.0/22 -103.244.116.0/22 -103.244.164.0/22 103.244.232.0/22 -103.244.252.0/22 103.245.23.0/24 -103.245.24.0/23 -103.245.52.0/22 -103.245.60.0/22 -103.245.80.0/22 -103.245.124.0/22 103.245.128.0/22 -103.246.8.0/22 -103.246.12.0/22 -103.246.120.0/22 -103.246.124.0/22 -103.246.132.0/22 103.246.152.0/22 -103.246.156.0/22 103.247.168.0/22 -103.247.172.0/22 103.247.176.0/22 103.247.191.0/24 -103.247.200.0/22 -103.247.212.0/22 -103.248.0.0/23 -103.248.64.0/22 -103.248.100.0/22 -103.248.124.0/22 103.248.152.0/22 -103.248.168.0/22 -103.248.192.0/22 -103.248.212.0/22 103.248.224.0/22 -103.249.8.0/22 -103.249.12.0/22 103.249.52.0/22 -103.249.104.0/22 -103.249.128.0/22 -103.249.136.0/22 -103.249.144.0/22 -103.249.164.0/22 -103.249.168.0/22 -103.249.172.0/22 -103.249.176.0/22 -103.249.188.0/22 -103.249.192.0/22 +103.249.136.0/24 103.249.244.0/22 103.249.252.0/22 103.250.32.0/22 103.250.104.0/22 -103.250.124.0/22 -103.250.180.0/22 103.250.192.0/22 103.250.216.0/22 -103.250.224.0/22 -103.250.236.0/22 -103.250.248.0/22 -103.250.252.0/22 +103.250.248.0/21 103.251.32.0/22 103.251.84.0/22 103.251.96.0/22 103.251.124.0/22 -103.251.128.0/22 103.251.160.0/22 -103.251.192.0/22 -103.251.204.0/22 +103.251.204.0/23 +103.251.207.0/24 103.251.240.0/22 -103.252.28.0/22 103.252.36.0/22 -103.252.64.0/22 -103.252.96.0/22 -103.252.104.0/22 103.252.172.0/22 -103.252.204.0/22 -103.252.208.0/22 -103.252.232.0/22 103.252.248.0/22 -103.253.4.0/22 103.253.60.0/22 103.253.204.0/22 -103.253.220.0/22 -103.253.224.0/22 103.253.232.0/22 -103.254.8.0/22 -103.254.20.0/22 -103.254.64.0/22 103.254.68.0/22 -103.254.72.0/22 103.254.76.0/22 103.254.112.0/22 -103.254.176.0/22 103.254.188.0/22 -103.254.196.0/24 -103.254.220.0/22 -103.255.56.0/22 103.255.68.0/22 -103.255.88.0/22 103.255.92.0/22 -103.255.136.0/22 103.255.140.0/22 -103.255.184.0/22 103.255.200.0/22 -103.255.208.0/23 -103.255.212.0/22 -103.255.228.0/22 -106.0.0.0/24 -106.0.2.0/23 +104.192.108.0/23 +104.192.110.0/24 106.0.4.0/22 -106.0.8.0/21 -106.0.16.0/20 -106.0.44.0/22 -106.0.64.0/18 -106.2.0.0/15 +106.2.37.0/24 +106.2.40.0/23 +106.2.42.0/24 +106.2.45.0/24 +106.2.46.0/23 +106.2.48.0/23 +106.2.51.0/24 +106.2.52.0/22 +106.2.56.0/22 +106.2.62.0/23 +106.2.64.0/20 +106.2.81.0/24 +106.2.82.0/23 +106.2.89.0/24 +106.2.92.0/22 +106.2.96.0/24 +106.2.100.0/22 +106.2.104.0/21 +106.2.112.0/21 +106.2.124.0/22 +106.2.128.0/19 +106.2.224.0/24 +106.2.232.0/21 +106.3.0.0/19 +106.3.32.0/20 +106.3.80.0/22 +106.3.88.0/21 +106.3.96.0/22 +106.3.128.0/19 +106.3.192.0/20 +106.3.208.0/21 +106.3.224.0/21 106.4.0.0/14 106.8.0.0/15 106.11.0.0/16 -106.12.0.0/14 -106.16.0.0/12 +106.12.0.0/17 +106.12.128.0/18 +106.12.192.0/19 +106.12.224.0/20 +106.12.240.0/21 +106.12.250.0/23 +106.12.252.0/23 +106.12.254.0/24 +106.13.0.0/16 +106.14.0.0/15 +106.16.0.0/14 106.32.0.0/12 -106.48.0.0/15 -106.50.0.0/16 +106.48.16.0/21 106.52.0.0/14 -106.56.0.0/13 +106.56.0.0/14 +106.60.0.0/15 +106.62.0.0/16 +106.63.0.0/17 106.74.0.0/16 -106.75.0.0/16 -106.80.0.0/12 +106.75.0.0/17 +106.75.128.0/18 +106.75.208.0/20 +106.75.224.0/19 +106.80.0.0/13 +106.88.0.0/14 +106.92.0.0/16 106.108.0.0/14 -106.112.0.0/13 -106.120.0.0/13 -106.224.0.0/12 +106.112.0.0/12 +106.224.0.0/14 +106.228.0.0/15 +106.230.0.0/16 +108.165.168.0/24 +108.165.240.0/24 109.244.0.0/16 110.6.0.0/15 110.16.0.0/14 -110.34.40.0/22 -110.34.44.0/22 -110.40.0.0/14 -110.44.12.0/22 -110.44.144.0/20 -110.48.0.0/16 +110.40.0.0/24 +110.40.13.0/24 +110.40.14.0/23 +110.40.16.0/24 +110.40.128.0/17 +110.41.0.0/16 +110.42.0.0/15 110.51.0.0/16 110.52.0.0/15 110.56.0.0/13 110.64.0.0/15 110.72.0.0/15 -110.75.0.0/17 -110.75.128.0/19 -110.75.160.0/19 -110.75.192.0/18 -110.76.0.0/19 -110.76.32.0/19 -110.76.132.0/22 +110.75.0.0/16 +110.76.0.0/18 110.76.156.0/22 110.76.184.0/22 110.76.192.0/18 110.77.0.0/17 110.80.0.0/13 110.88.0.0/14 -110.92.68.0/22 -110.93.32.0/19 -110.94.0.0/15 -110.96.0.0/11 +110.94.0.0/17 +110.96.0.0/16 +110.100.0.0/16 +110.112.0.0/15 +110.114.0.0/16 +110.115.128.0/17 +110.116.0.0/16 +110.120.0.0/16 +110.124.0.0/16 +110.125.128.0/17 110.152.0.0/14 110.156.0.0/15 -110.165.32.0/19 110.166.0.0/15 -110.172.192.0/18 -110.173.0.0/19 +110.172.200.0/21 +110.173.8.0/21 +110.173.16.0/20 110.173.32.0/20 -110.173.64.0/19 -110.173.96.0/19 110.173.192.0/19 -110.176.0.0/13 -110.184.0.0/13 -110.192.0.0/11 +110.176.0.0/12 +110.199.0.0/16 +110.203.0.0/23 +110.211.0.0/16 +110.218.0.0/15 110.228.0.0/14 -110.232.32.0/19 110.236.0.0/15 110.240.0.0/12 111.0.0.0/10 -111.66.0.0/16 -111.67.192.0/20 -111.68.64.0/19 111.72.0.0/13 111.85.0.0/16 -111.92.248.0/22 -111.92.252.0/22 -111.112.0.0/15 -111.114.0.0/15 +111.112.0.0/14 111.116.0.0/15 111.118.200.0/21 -111.119.64.0/18 -111.119.128.0/19 111.120.0.0/14 111.124.0.0/16 111.126.0.0/15 -111.128.0.0/11 +111.128.0.0/16 +111.132.0.0/16 +111.142.0.0/15 +111.144.0.0/14 +111.148.0.0/16 +111.149.0.0/24 111.160.0.0/13 111.170.0.0/16 111.172.0.0/14 111.176.0.0/13 111.186.0.0/15 111.192.0.0/12 -111.208.0.0/14 +111.208.121.0/24 +111.208.254.0/24 +111.210.0.0/20 +111.210.16.0/24 +111.211.192.0/18 111.212.0.0/14 111.221.28.0/24 111.221.128.0/17 111.222.0.0/16 -111.223.4.0/22 -111.223.8.0/22 111.223.12.0/22 -111.223.16.0/22 -111.223.240.0/22 -111.223.248.0/22 111.224.0.0/14 -111.228.0.0/14 -111.235.96.0/19 +111.228.0.0/18 +111.229.0.0/16 +111.230.0.0/15 111.235.156.0/22 -111.235.160.0/19 +111.235.160.0/22 +111.235.164.0/23 +111.235.168.0/22 +111.235.172.0/23 +111.235.174.0/24 +111.235.178.0/23 +111.235.180.0/23 +111.235.182.0/24 112.0.0.0/10 -112.64.0.0/15 -112.66.0.0/15 -112.73.0.0/16 -112.74.0.0/15 -112.80.0.0/13 -112.88.0.0/13 -112.96.0.0/15 -112.98.0.0/15 -112.100.0.0/14 +112.64.0.0/14 +112.73.96.0/19 +112.74.0.0/16 +112.80.0.0/12 +112.96.0.0/13 112.109.128.0/17 112.111.0.0/16 112.112.0.0/14 112.116.0.0/15 112.122.0.0/15 112.124.0.0/14 -112.128.0.0/14 112.132.0.0/16 -112.137.48.0/21 112.192.0.0/14 112.224.0.0/11 113.0.0.0/13 113.8.0.0/15 -113.11.192.0/19 113.12.0.0/14 113.16.0.0/15 113.18.0.0/16 -113.21.232.0/22 -113.21.236.0/22 +113.21.232.0/21 113.24.0.0/14 -113.31.0.0/16 -113.44.0.0/14 -113.48.0.0/14 -113.52.160.0/19 -113.52.228.0/22 +113.31.96.0/19 +113.31.144.0/20 +113.31.160.0/19 +113.31.192.0/18 +113.44.0.0/16 +113.45.0.0/18 +113.45.64.0/19 +113.45.96.0/22 +113.45.102.0/23 +113.45.104.0/21 +113.45.112.0/22 +113.45.120.0/22 +113.45.128.0/17 +113.46.0.0/16 +113.47.0.0/18 +113.47.64.0/19 +113.47.96.0/21 +113.47.104.0/22 +113.47.110.0/24 +113.47.112.0/20 +113.47.128.0/18 +113.47.200.0/21 +113.47.216.0/21 +113.47.232.0/21 +113.47.240.0/20 +113.48.48.0/20 +113.48.127.0/24 +113.48.224.0/20 +113.49.0.0/19 +113.50.0.0/20 +113.50.32.0/24 +113.50.48.0/20 +113.50.64.0/20 113.54.0.0/15 113.56.0.0/15 113.58.0.0/16 113.59.0.0/17 113.59.224.0/22 113.62.0.0/15 -113.64.0.0/11 -113.96.0.0/12 -113.112.0.0/13 -113.120.0.0/13 +113.64.0.0/10 113.128.0.0/15 113.130.96.0/20 113.130.112.0/21 113.132.0.0/14 113.136.0.0/13 -113.192.40.0/23 -113.192.56.0/23 113.194.0.0/15 -113.197.100.0/22 +113.197.101.0/24 +113.197.103.0/24 +113.197.104.0/23 113.200.0.0/15 -113.202.0.0/16 113.204.0.0/14 -113.208.96.0/19 -113.208.128.0/17 -113.209.0.0/16 -113.212.0.0/18 -113.212.88.0/22 -113.212.100.0/22 -113.212.184.0/21 -113.213.0.0/17 +113.208.112.0/21 +113.209.128.0/17 +113.213.0.0/18 +113.213.64.0/19 +113.213.96.0/20 113.214.0.0/15 113.218.0.0/15 113.220.0.0/14 113.224.0.0/12 113.240.0.0/13 113.248.0.0/14 -114.28.0.0/16 -114.31.64.0/22 -114.31.68.0/22 -114.54.0.0/15 +114.28.68.0/22 +114.28.72.0/21 +114.28.128.0/18 +114.28.248.0/21 +114.55.0.0/16 114.60.0.0/14 -114.64.0.0/14 -114.68.0.0/16 -114.79.64.0/18 +114.64.0.0/16 +114.66.0.0/18 +114.66.64.0/24 +114.66.72.0/21 +114.66.80.0/23 +114.66.236.0/22 +114.66.240.0/20 +114.67.16.0/21 +114.67.48.0/24 +114.67.57.0/24 +114.67.58.0/24 +114.67.60.0/23 +114.67.62.0/24 +114.67.64.0/18 +114.67.128.0/17 114.80.0.0/12 114.96.0.0/13 114.104.0.0/14 114.110.0.0/20 -114.110.64.0/18 -114.111.0.0/19 -114.111.160.0/19 -114.112.0.0/14 -114.116.0.0/16 -114.117.0.0/17 -114.117.128.0/17 -114.118.0.0/16 -114.119.0.0/17 -114.119.192.0/21 -114.119.200.0/22 +114.110.96.0/22 +114.111.0.0/23 +114.111.16.0/20 +114.111.191.0/24 +114.112.4.0/23 +114.112.24.0/21 +114.112.32.0/19 +114.112.64.0/19 +114.112.96.0/21 +114.112.104.0/22 +114.112.136.0/21 +114.112.144.0/21 +114.112.200.0/21 +114.112.208.0/20 +114.113.63.0/24 +114.113.64.0/22 +114.113.80.0/22 +114.113.84.0/24 +114.113.88.0/21 +114.113.96.0/19 +114.113.144.0/20 +114.113.196.0/22 +114.113.200.0/24 +114.113.203.0/24 +114.113.208.0/21 +114.113.221.0/24 +114.113.223.0/24 +114.113.224.0/20 +114.114.112.0/21 +114.115.0.0/16 +114.116.0.0/15 +114.118.0.0/17 +114.119.10.0/24 +114.119.32.0/24 +114.119.117.0/24 +114.119.119.0/24 114.119.204.0/22 -114.119.208.0/20 -114.119.224.0/19 114.132.0.0/16 -114.134.184.0/22 -114.134.188.0/23 114.135.0.0/16 114.138.0.0/15 -114.141.64.0/21 -114.141.80.0/22 -114.141.84.0/22 114.141.128.0/18 -114.142.136.0/21 +114.142.142.0/23 114.196.0.0/15 -114.198.248.0/21 -114.208.0.0/14 -114.212.0.0/15 -114.214.0.0/16 -114.215.0.0/16 +114.212.0.0/14 114.216.0.0/13 -114.224.0.0/12 -114.240.0.0/12 +114.224.0.0/11 115.24.0.0/14 115.28.0.0/15 115.31.64.0/22 -115.31.68.0/22 -115.31.72.0/22 -115.31.76.0/22 -115.32.0.0/14 -115.42.56.0/22 +115.32.0.0/19 +115.32.32.0/20 +115.32.52.0/22 +115.32.56.0/21 +115.32.64.0/19 +115.32.104.0/21 +115.32.120.0/21 +115.32.128.0/19 +115.33.0.0/19 +115.33.64.0/18 +115.33.128.0/20 115.44.0.0/15 115.46.0.0/16 -115.47.0.0/16 115.48.0.0/12 -115.69.64.0/20 115.84.0.0/18 115.85.192.0/18 -115.100.0.0/14 -115.104.0.0/14 -115.120.0.0/14 +115.102.0.0/16 +115.120.0.0/17 +115.120.128.0/20 +115.120.144.0/23 +115.120.148.0/22 +115.120.152.0/21 +115.120.176.0/20 +115.120.192.0/18 115.124.16.0/20 115.148.0.0/14 -115.152.0.0/15 -115.154.0.0/15 -115.156.0.0/15 -115.158.0.0/16 -115.159.0.0/16 -115.166.64.0/19 +115.152.0.0/13 115.168.0.0/14 -115.172.0.0/14 -115.180.0.0/15 -115.182.0.0/16 -115.183.0.0/16 -115.187.0.0/22 -115.187.4.0/22 -115.187.8.0/22 -115.187.12.0/22 -115.190.0.0/15 +115.172.32.0/21 +115.172.46.0/23 +115.173.0.0/19 +115.175.0.0/18 +115.175.64.0/19 +115.175.96.0/21 +115.175.104.0/22 +115.175.108.0/23 +115.175.110.0/24 +115.175.112.0/20 +115.175.128.0/17 +115.180.0.0/17 +115.182.0.0/15 +115.190.0.0/16 +115.191.0.0/18 +115.191.64.0/20 115.192.0.0/11 115.224.0.0/12 -116.0.8.0/21 -116.0.24.0/21 +116.0.89.0/24 116.1.0.0/16 116.2.0.0/15 116.4.0.0/14 116.8.0.0/14 116.13.0.0/16 116.16.0.0/12 -116.50.0.0/20 116.52.0.0/14 116.56.0.0/15 -116.58.128.0/20 -116.58.208.0/20 -116.60.0.0/14 -116.66.0.0/17 -116.68.136.0/22 -116.68.140.0/22 -116.68.176.0/22 -116.68.180.0/22 -116.69.0.0/16 -116.70.0.0/17 +116.58.208.0/24 +116.62.0.0/15 +116.66.36.0/24 +116.66.48.0/23 +116.66.53.0/24 +116.66.54.0/23 +116.66.98.0/24 +116.66.123.0/24 +116.68.136.0/21 +116.68.176.0/21 +116.70.64.0/18 116.76.0.0/15 -116.78.0.0/15 +116.78.0.0/16 116.85.0.0/16 -116.89.144.0/20 -116.89.240.0/22 116.90.80.0/20 -116.90.184.0/21 116.95.0.0/16 116.112.0.0/14 116.116.0.0/15 -116.128.0.0/10 +116.128.128.0/18 +116.128.200.0/21 +116.128.208.0/20 +116.128.224.0/19 +116.129.0.0/16 +116.130.0.0/15 +116.132.0.0/15 +116.135.0.0/16 +116.136.0.0/13 +116.144.0.0/14 +116.148.0.0/15 +116.153.0.0/16 +116.154.0.0/15 +116.162.0.0/16 +116.163.0.0/18 +116.165.0.0/16 +116.167.0.0/16 +116.168.0.0/14 +116.172.64.0/18 +116.172.128.0/17 +116.174.0.0/15 +116.176.0.0/14 +116.181.0.0/16 +116.182.0.0/16 116.192.0.0/16 -116.193.16.0/20 -116.193.32.0/19 -116.193.164.0/22 -116.193.176.0/21 -116.194.0.0/15 -116.196.0.0/17 -116.196.128.0/18 -116.196.192.0/18 -116.197.160.0/22 -116.197.164.0/22 -116.198.0.0/16 +116.193.16.0/23 +116.193.18.0/24 +116.196.0.0/21 +116.196.8.0/22 +116.196.12.0/23 +116.196.64.0/18 +116.196.129.0/24 +116.196.130.0/23 +116.196.132.0/22 +116.196.136.0/21 +116.196.144.0/21 +116.196.152.0/22 +116.196.156.0/23 +116.196.176.0/21 +116.196.192.0/21 +116.196.218.0/23 +116.196.220.0/22 +116.197.160.0/21 +116.198.0.0/18 +116.198.64.0/21 +116.198.72.0/22 +116.198.80.0/21 +116.198.96.0/19 +116.198.144.0/20 +116.198.160.0/20 +116.198.176.0/21 +116.198.192.0/18 116.199.0.0/17 -116.199.128.0/19 116.204.0.0/17 -116.204.132.0/22 116.205.0.0/16 116.207.0.0/16 116.208.0.0/14 -116.212.160.0/20 -116.213.44.0/22 -116.213.64.0/18 -116.213.128.0/17 116.214.32.0/19 -116.214.64.0/20 -116.214.128.0/17 -116.215.0.0/16 -116.216.0.0/14 +116.214.128.0/22 +116.214.132.0/23 +116.214.134.0/24 +116.218.0.0/18 +116.218.64.0/19 +116.218.128.0/20 +116.218.144.0/21 116.224.0.0/12 -116.242.0.0/15 -116.244.0.0/15 +116.242.0.0/16 116.246.0.0/15 116.248.0.0/15 -116.251.64.0/18 116.252.0.0/15 -116.254.104.0/22 -116.254.108.0/22 -116.254.128.0/17 +116.254.104.0/21 116.255.128.0/17 117.8.0.0/13 117.21.0.0/16 @@ -5488,60 +1998,90 @@ 117.32.0.0/13 117.40.0.0/14 117.44.0.0/15 -117.48.0.0/14 -117.53.48.0/20 -117.53.176.0/20 +117.48.0.0/18 +117.48.64.0/19 +117.48.112.0/20 +117.48.128.0/19 +117.48.160.0/20 +117.48.192.0/20 +117.48.216.0/21 +117.48.224.0/20 +117.50.0.0/16 +117.51.128.0/19 +117.51.160.0/23 +117.51.168.0/21 117.57.0.0/16 -117.58.0.0/17 117.59.0.0/16 117.60.0.0/14 117.64.0.0/13 -117.72.0.0/15 +117.72.0.0/23 +117.72.8.0/21 +117.72.16.0/23 +117.72.24.0/21 +117.72.32.0/19 +117.72.64.0/18 +117.72.144.0/20 +117.72.160.0/19 +117.72.192.0/19 +117.72.240.0/21 +117.72.248.0/22 +117.72.255.0/24 +117.73.0.0/20 +117.73.16.0/21 +117.73.252.0/22 117.74.64.0/20 -117.74.80.0/20 -117.74.128.0/17 -117.75.0.0/16 -117.76.0.0/14 +117.74.128.0/21 +117.74.136.0/22 +117.78.0.0/18 +117.79.80.0/20 +117.79.128.0/21 +117.79.144.0/20 +117.79.160.0/21 +117.79.224.0/20 +117.79.241.0/24 +117.79.242.0/24 117.80.0.0/12 -117.100.0.0/15 -117.103.16.0/20 -117.103.40.0/21 -117.103.72.0/21 -117.103.128.0/20 -117.104.168.0/21 117.106.0.0/15 117.112.0.0/13 -117.120.64.0/18 -117.120.128.0/17 -117.121.0.0/17 -117.121.128.0/18 -117.121.192.0/21 -117.122.128.0/17 -117.124.0.0/14 +117.121.132.0/22 +117.122.192.0/18 +117.124.98.0/24 +117.124.231.0/24 +117.124.232.0/22 +117.124.236.0/23 +117.124.240.0/22 +117.124.244.0/24 +117.124.246.0/24 +117.126.0.0/16 117.128.0.0/10 118.24.0.0/15 -118.26.0.0/19 118.26.32.0/22 -118.26.40.0/21 -118.26.48.0/21 -118.26.56.0/21 -118.26.64.0/19 +118.26.48.0/22 +118.26.64.0/23 +118.26.68.0/23 +118.26.72.0/22 118.26.96.0/21 -118.26.112.0/21 -118.26.120.0/21 +118.26.116.0/22 +118.26.120.0/24 +118.26.126.0/23 118.26.128.0/22 -118.26.133.0/24 -118.26.134.0/23 -118.26.136.0/21 +118.26.136.0/22 118.26.160.0/20 -118.26.188.0/22 -118.26.192.0/18 -118.28.0.0/15 -118.30.0.0/16 -118.31.0.0/16 -118.64.0.0/15 -118.66.0.0/16 -118.67.112.0/20 +118.26.192.0/24 +118.26.194.0/23 +118.26.197.0/24 +118.26.198.0/23 +118.26.200.0/21 +118.26.208.0/20 +118.26.224.0/19 +118.30.0.0/15 +118.64.0.0/21 +118.64.248.0/21 +118.65.0.0/21 +118.66.112.0/23 +118.66.184.0/24 +118.66.224.0/20 +118.66.248.0/21 118.72.0.0/13 118.80.0.0/15 118.84.0.0/15 @@ -5549,509 +2089,641 @@ 118.88.64.0/18 118.88.128.0/17 118.89.0.0/16 -118.91.240.0/20 118.102.16.0/20 -118.102.32.0/21 118.103.164.0/22 -118.103.168.0/22 -118.103.172.0/22 -118.103.176.0/22 118.112.0.0/13 118.120.0.0/14 118.124.0.0/15 -118.126.0.0/16 -118.127.128.0/19 +118.126.32.0/19 +118.126.64.0/18 +118.126.140.0/23 +118.126.142.0/24 118.132.0.0/14 -118.144.0.0/14 +118.144.0.0/16 +118.145.0.0/19 +118.145.32.0/20 +118.145.64.0/19 +118.145.96.0/20 +118.145.112.0/21 +118.145.128.0/19 +118.145.160.0/21 +118.145.176.0/20 +118.145.192.0/18 118.178.0.0/16 118.180.0.0/14 -118.184.0.0/17 118.184.128.0/17 -118.186.0.0/15 -118.188.0.0/16 +118.186.0.0/19 +118.186.32.0/24 +118.186.34.0/23 +118.186.36.0/22 +118.186.56.0/21 +118.186.64.0/21 +118.186.80.0/20 +118.186.96.0/20 +118.186.112.0/21 +118.186.128.0/18 +118.186.208.0/21 +118.186.240.0/21 +118.187.0.0/18 +118.187.64.0/19 +118.187.254.0/23 +118.188.18.0/23 +118.188.20.0/22 +118.188.24.0/23 118.190.0.0/16 118.191.0.0/21 118.191.8.0/22 118.191.12.0/24 -118.191.16.0/21 -118.191.64.0/20 -118.191.80.0/22 -118.191.128.0/19 -118.191.176.0/20 -118.191.192.0/20 +118.191.128.0/22 +118.191.152.0/24 +118.191.192.0/23 118.191.208.0/24 -118.191.216.0/22 +118.191.216.0/24 118.191.223.0/24 118.191.224.0/24 -118.191.240.0/20 -118.192.0.0/16 -118.193.0.0/21 -118.193.8.0/21 -118.193.48.0/21 +118.191.240.0/23 +118.191.248.0/23 +118.191.250.0/24 +118.192.20.0/24 +118.192.64.0/23 +118.192.67.0/24 +118.192.68.0/23 +118.192.70.0/24 118.193.96.0/19 -118.193.128.0/17 -118.194.0.0/17 -118.194.128.0/18 -118.194.192.0/19 -118.194.224.0/22 +118.194.32.0/19 +118.194.134.0/23 +118.194.164.0/22 118.194.240.0/21 -118.195.0.0/17 -118.195.128.0/17 -118.196.0.0/14 +118.195.0.0/16 +118.196.0.0/16 +118.197.0.0/18 +118.197.64.0/19 118.202.0.0/15 -118.204.0.0/14 -118.212.0.0/16 -118.213.0.0/16 -118.215.192.0/18 -118.224.0.0/14 +118.204.0.0/17 +118.212.0.0/15 +118.215.192.0/19 118.228.0.0/15 118.230.0.0/16 118.239.0.0/16 -118.242.0.0/16 -118.244.0.0/14 +118.242.0.0/22 +118.242.16.0/22 +118.242.24.0/22 +118.242.32.0/22 +118.242.40.0/24 +118.244.0.0/21 +118.244.128.0/17 +118.247.0.0/16 118.248.0.0/13 119.0.0.0/15 -119.2.0.0/19 119.2.128.0/17 119.3.0.0/16 119.4.0.0/14 -119.10.0.0/17 -119.15.136.0/21 -119.16.0.0/16 -119.18.192.0/20 +119.15.136.0/23 +119.15.140.0/23 119.18.208.0/21 -119.18.224.0/20 -119.18.240.0/20 -119.19.0.0/16 -119.20.0.0/14 -119.27.64.0/18 -119.27.128.0/19 +119.18.224.0/24 +119.18.226.0/24 +119.18.237.0/24 +119.18.239.0/24 +119.23.0.0/16 119.27.160.0/19 -119.27.192.0/18 -119.28.0.0/15 -119.30.48.0/20 +119.28.28.0/24 +119.29.0.0/16 119.31.192.0/19 -119.32.0.0/14 +119.32.0.0/15 +119.34.0.0/16 119.36.0.0/16 -119.37.0.0/17 -119.37.128.0/18 -119.37.192.0/18 -119.38.0.0/17 -119.38.128.0/18 -119.38.192.0/20 -119.38.208.0/20 -119.38.224.0/19 +119.37.0.0/23 +119.37.2.0/24 +119.37.12.0/24 +119.37.192.0/21 +119.38.0.0/21 +119.38.192.0/19 119.39.0.0/16 -119.40.0.0/18 +119.40.41.0/24 119.40.64.0/20 119.40.128.0/17 119.41.0.0/16 119.42.0.0/19 -119.42.128.0/21 119.42.136.0/21 119.42.224.0/19 -119.44.0.0/15 +119.44.0.0/22 +119.44.4.0/23 +119.44.7.0/24 +119.44.8.0/22 +119.44.12.0/24 +119.44.16.0/22 +119.44.20.0/23 +119.44.23.0/24 +119.44.24.0/22 +119.44.28.0/23 +119.44.45.0/24 +119.44.46.0/24 +119.44.50.0/23 +119.44.52.0/24 +119.44.56.0/21 +119.44.192.0/24 +119.44.200.0/24 +119.44.205.0/24 +119.44.208.0/22 +119.44.212.0/23 +119.44.214.0/24 +119.44.217.0/24 +119.44.218.0/23 +119.44.220.0/22 +119.44.224.0/20 +119.44.253.0/24 +119.44.254.0/23 +119.45.0.0/16 119.48.0.0/13 -119.57.0.0/16 -119.58.0.0/16 -119.59.128.0/17 -119.60.0.0/16 -119.61.0.0/16 +119.57.0.0/21 +119.57.8.0/23 +119.57.12.0/24 +119.57.16.0/21 +119.57.25.0/24 +119.57.28.0/22 +119.57.32.0/21 +119.57.44.0/22 +119.57.51.0/24 +119.57.52.0/22 +119.57.56.0/21 +119.57.64.0/19 +119.57.96.0/22 +119.57.100.0/23 +119.57.102.0/24 +119.57.112.0/20 +119.57.132.0/22 +119.57.136.0/21 +119.57.160.0/20 +119.57.190.0/23 +119.57.246.0/23 +119.57.248.0/21 +119.60.0.0/15 119.62.0.0/16 -119.63.32.0/19 119.75.208.0/20 119.78.0.0/15 -119.80.0.0/16 -119.82.208.0/20 +119.80.0.0/21 +119.80.8.0/22 +119.80.160.0/23 +119.80.162.0/24 +119.80.192.0/21 +119.80.200.0/22 +119.80.240.0/22 +119.80.248.0/21 119.84.0.0/14 -119.88.0.0/14 +119.88.128.0/17 +119.90.32.0/19 +119.91.0.0/16 119.96.0.0/13 119.108.0.0/15 -119.112.0.0/13 -119.120.0.0/13 +119.112.0.0/12 119.128.0.0/12 119.144.0.0/14 119.148.160.0/20 -119.148.176.0/20 -119.151.192.0/18 -119.160.200.0/21 119.161.120.0/22 -119.161.124.0/22 -119.161.128.0/17 +119.161.124.0/24 +119.161.183.0/24 119.162.0.0/15 119.164.0.0/14 119.176.0.0/12 -119.232.0.0/16 -119.233.0.0/17 119.233.128.0/17 -119.235.128.0/18 +119.235.128.0/24 +119.235.130.0/24 +119.235.136.0/24 +119.235.138.0/24 +119.235.143.0/24 +119.235.144.0/23 +119.235.151.0/24 +119.235.160.0/23 +119.235.167.0/24 +119.235.185.0/24 119.248.0.0/14 -119.252.96.0/21 -119.252.240.0/20 -119.253.0.0/16 -119.254.0.0/15 +119.253.0.0/20 +119.253.32.0/19 +119.253.64.0/19 +119.253.249.0/24 +119.253.252.0/24 +119.254.0.0/16 +119.255.63.0/24 +119.255.128.0/17 120.0.0.0/12 120.24.0.0/14 -120.30.0.0/16 -120.31.0.0/16 -120.32.0.0/13 -120.40.0.0/14 -120.44.0.0/15 -120.46.0.0/16 -120.47.0.0/16 -120.48.0.0/15 -120.52.0.0/16 -120.53.0.0/16 -120.54.0.0/15 -120.64.0.0/14 +120.31.66.0/23 +120.31.68.0/22 +120.31.128.0/20 +120.31.144.0/24 +120.32.0.0/12 +120.48.0.0/16 +120.49.0.0/17 +120.49.192.0/18 +120.52.0.0/15 +120.55.0.0/16 +120.65.0.0/16 120.68.0.0/14 120.72.32.0/19 -120.72.128.0/17 +120.72.160.0/24 +120.72.162.0/23 +120.72.164.0/22 +120.72.168.0/24 +120.72.170.0/23 +120.72.172.0/23 +120.72.174.0/24 +120.72.177.0/24 +120.72.178.0/24 +120.72.180.0/24 +120.72.182.0/23 +120.72.184.0/22 +120.72.188.0/23 +120.72.190.0/24 120.76.0.0/14 120.80.0.0/13 -120.88.8.0/21 -120.90.0.0/15 -120.92.0.0/16 -120.94.0.0/16 -120.95.0.0/16 -120.128.0.0/14 -120.132.0.0/17 +120.92.0.0/17 +120.92.128.0/18 +120.92.192.0/19 +120.92.224.0/20 +120.94.0.0/15 +120.131.0.0/19 +120.131.88.0/21 +120.131.124.0/22 +120.132.0.0/18 +120.132.64.0/19 +120.132.96.0/20 +120.132.112.0/24 +120.132.116.0/22 +120.132.120.0/21 120.132.128.0/17 120.133.0.0/16 120.134.0.0/15 -120.136.16.0/22 -120.136.20.0/22 -120.136.128.0/18 -120.137.0.0/17 -120.143.128.0/19 +120.136.16.0/21 +120.136.128.0/21 +120.136.140.0/22 +120.136.144.0/20 +120.136.160.0/20 +120.136.176.0/21 +120.136.184.0/22 +120.136.188.0/23 +120.136.190.0/24 120.192.0.0/10 -121.0.8.0/21 121.0.16.0/20 121.4.0.0/15 121.8.0.0/13 -121.16.0.0/13 -121.24.0.0/14 -121.28.0.0/15 -121.30.0.0/16 -121.31.0.0/16 +121.16.0.0/12 121.32.0.0/14 -121.36.0.0/16 -121.37.0.0/16 -121.38.0.0/15 +121.36.0.0/15 +121.39.255.0/24 121.40.0.0/14 -121.46.0.0/18 -121.46.76.0/22 -121.46.128.0/17 +121.46.0.0/19 +121.46.128.0/21 +121.46.141.0/24 +121.46.192.0/21 +121.46.200.0/22 +121.46.224.0/20 +121.46.244.0/22 +121.46.248.0/22 +121.46.252.0/23 +121.46.254.0/24 121.47.0.0/16 121.48.0.0/15 -121.50.8.0/21 121.51.0.0/16 121.52.160.0/19 121.52.208.0/20 121.52.224.0/19 -121.54.176.0/21 -121.54.188.0/22 121.55.0.0/18 121.56.0.0/15 121.58.0.0/17 -121.58.136.0/21 -121.58.144.0/20 -121.58.160.0/21 -121.59.0.0/16 +121.58.156.0/22 +121.59.4.0/22 +121.59.8.0/21 +121.59.160.0/20 +121.59.255.0/24 121.60.0.0/14 -121.68.0.0/14 +121.69.0.0/16 +121.70.0.0/17 121.76.0.0/15 -121.79.128.0/18 +121.79.131.0/24 +121.79.132.0/24 +121.79.134.0/23 121.89.0.0/16 121.91.104.0/21 -121.100.128.0/17 -121.101.0.0/18 -121.101.208.0/20 -121.192.0.0/16 -121.193.0.0/16 -121.194.0.0/15 -121.196.0.0/14 -121.200.192.0/21 -121.201.0.0/16 +121.192.0.0/13 +121.201.0.0/17 121.204.0.0/14 121.224.0.0/12 121.248.0.0/14 121.255.0.0/16 122.0.64.0/18 -122.0.128.0/17 122.4.0.0/14 -122.8.0.0/17 -122.8.192.0/18 122.9.0.0/16 -122.10.128.0/22 -122.10.132.0/23 +122.10.133.0/24 122.10.136.0/23 -122.10.164.0/22 -122.10.168.0/21 -122.10.176.0/20 -122.10.192.0/22 -122.10.200.0/21 -122.10.208.0/21 -122.10.216.0/22 -122.10.228.0/22 -122.10.232.0/21 -122.10.240.0/22 -122.11.0.0/17 -122.12.0.0/16 +122.11.32.0/19 122.13.0.0/16 -122.14.0.0/17 -122.14.128.0/18 +122.14.44.0/22 +122.14.62.0/24 122.14.192.0/18 122.48.0.0/16 -122.49.0.0/18 +122.49.8.0/21 +122.49.16.0/20 +122.49.32.0/20 122.51.0.0/16 -122.64.0.0/11 +122.64.0.0/16 +122.70.0.0/15 +122.72.3.0/24 +122.72.16.0/24 +122.72.38.0/24 +122.72.57.0/24 +122.72.112.0/24 +122.84.0.0/16 +122.90.0.0/16 +122.91.0.0/17 +122.94.0.0/16 122.96.0.0/15 -122.102.0.0/20 122.102.64.0/20 -122.102.80.0/20 -122.112.0.0/18 -122.112.64.0/18 -122.112.128.0/17 -122.113.0.0/16 +122.112.0.0/22 +122.112.32.0/19 +122.112.132.0/22 +122.112.136.0/21 +122.112.144.0/20 +122.112.160.0/19 +122.112.192.0/18 122.114.0.0/16 -122.115.0.0/17 -122.115.128.0/19 -122.115.160.0/19 -122.115.192.0/19 -122.115.224.0/19 -122.119.0.0/16 -122.128.100.0/22 -122.128.120.0/21 +122.115.0.0/20 +122.115.32.0/19 +122.115.224.0/20 +122.119.4.0/23 +122.119.12.0/22 +122.119.20.0/22 +122.119.24.0/23 +122.119.26.0/24 +122.119.32.0/24 +122.119.50.0/24 +122.119.73.0/24 +122.119.96.0/23 +122.119.110.0/23 +122.119.112.0/23 +122.119.114.0/24 +122.119.120.0/24 +122.119.122.0/24 +122.119.124.0/23 +122.119.129.0/24 +122.119.147.0/24 +122.119.160.0/23 +122.119.172.0/24 +122.119.180.0/22 +122.119.190.0/24 +122.119.224.0/22 +122.119.232.0/23 +122.119.236.0/24 +122.119.253.0/24 122.136.0.0/13 -122.144.128.0/17 +122.144.128.0/20 +122.144.144.0/23 +122.144.147.0/24 +122.144.152.0/23 +122.144.156.0/23 +122.144.161.0/24 +122.144.164.0/22 +122.144.168.0/22 +122.144.172.0/23 +122.144.178.0/23 +122.144.180.0/22 +122.144.192.0/21 +122.144.200.0/22 +122.144.206.0/23 +122.144.208.0/23 +122.144.211.0/24 +122.144.212.0/22 +122.144.216.0/21 +122.144.232.0/22 +122.144.236.0/23 +122.144.240.0/24 +122.144.248.0/23 122.152.192.0/18 122.156.0.0/14 122.188.0.0/14 122.192.0.0/14 -122.198.0.0/16 -122.200.40.0/22 -122.200.44.0/22 -122.200.64.0/18 -122.201.48.0/20 +122.200.40.0/21 +122.200.68.0/23 +122.200.78.0/24 +122.200.82.0/24 +122.200.84.0/23 +122.200.86.0/24 +122.200.92.0/23 +122.200.104.0/22 +122.200.120.0/22 +122.200.124.0/24 122.204.0.0/14 122.224.0.0/12 122.240.0.0/13 -122.248.24.0/21 -122.248.48.0/20 -122.255.64.0/21 -123.0.128.0/18 +122.248.48.0/21 +122.248.56.0/22 123.4.0.0/14 123.8.0.0/13 -123.49.128.0/17 -123.50.160.0/19 +123.49.192.0/23 +123.49.194.0/24 +123.49.231.0/24 +123.49.232.0/24 +123.49.240.0/24 +123.49.242.0/23 +123.49.245.0/24 123.52.0.0/14 123.56.0.0/15 -123.58.0.0/20 -123.58.16.0/20 -123.58.32.0/19 -123.58.64.0/19 +123.58.0.0/19 +123.58.32.0/23 +123.58.34.0/24 +123.58.36.0/24 +123.58.38.0/23 +123.58.40.0/21 +123.58.48.0/24 +123.58.50.0/24 +123.58.53.0/24 +123.58.54.0/23 +123.58.56.0/23 +123.58.59.0/24 +123.58.60.0/22 +123.58.64.0/24 123.58.96.0/19 -123.58.128.0/18 -123.58.224.0/20 -123.58.240.0/20 +123.58.160.0/20 +123.58.180.0/24 +123.58.182.0/23 +123.58.184.0/24 +123.58.186.0/23 +123.58.188.0/22 +123.58.224.0/19 123.59.0.0/16 -123.60.0.0/16 -123.61.0.0/16 -123.62.0.0/16 -123.64.0.0/11 +123.60.0.0/15 +123.64.0.0/15 +123.66.0.0/16 +123.77.0.0/16 +123.82.0.0/17 +123.83.128.0/17 +123.88.0.0/15 +123.90.0.0/16 123.96.0.0/15 -123.98.0.0/17 -123.99.128.0/17 -123.100.0.0/19 +123.99.192.0/18 123.101.0.0/16 -123.103.0.0/17 +123.103.0.0/20 +123.103.16.0/21 +123.103.24.0/22 +123.103.28.0/23 +123.103.30.0/24 +123.103.40.0/21 +123.103.48.0/20 +123.103.64.0/18 123.108.88.0/23 -123.108.128.0/20 -123.108.208.0/20 +123.108.208.0/22 +123.108.212.0/23 +123.108.220.0/22 123.112.0.0/12 123.128.0.0/13 -123.136.80.0/20 -123.137.0.0/16 123.138.0.0/15 -123.144.0.0/14 -123.148.0.0/16 -123.149.0.0/16 -123.150.0.0/15 -123.152.0.0/13 -123.160.0.0/14 -123.164.0.0/14 -123.168.0.0/14 -123.172.0.0/15 -123.174.0.0/15 -123.176.60.0/22 -123.176.80.0/20 +123.144.0.0/12 +123.160.0.0/12 123.177.0.0/16 123.178.0.0/15 123.180.0.0/14 -123.184.0.0/14 -123.188.0.0/14 -123.196.0.0/15 -123.199.128.0/17 +123.184.0.0/13 +123.196.112.0/20 123.206.0.0/15 123.232.0.0/14 -123.242.0.0/17 -123.242.192.0/22 -123.242.196.0/22 +123.242.192.0/21 123.244.0.0/14 -123.249.0.0/16 -123.253.240.0/22 -123.254.96.0/22 -123.254.100.0/22 -124.6.64.0/18 -124.14.0.0/15 +123.249.0.0/17 +123.253.224.0/23 +123.253.226.0/24 +123.254.96.0/21 +124.14.1.0/24 +124.14.2.0/23 +124.14.5.0/24 +124.14.7.0/24 +124.14.8.0/21 +124.14.16.0/21 +124.14.64.0/18 +124.14.224.0/19 124.16.0.0/15 -124.20.0.0/16 -124.21.0.0/20 -124.21.16.0/20 -124.21.32.0/19 -124.21.64.0/18 -124.21.128.0/17 124.22.0.0/15 124.28.192.0/18 124.29.0.0/17 124.31.0.0/16 -124.40.112.0/20 124.40.128.0/18 -124.40.192.0/19 -124.40.240.0/22 124.42.0.0/17 -124.42.128.0/17 124.47.0.0/18 124.64.0.0/15 124.66.0.0/17 124.67.0.0/16 -124.68.0.0/15 -124.70.0.0/15 -124.72.0.0/16 -124.73.0.0/16 -124.74.0.0/15 -124.76.0.0/14 -124.88.0.0/16 -124.89.0.0/17 -124.89.128.0/17 -124.90.0.0/15 -124.92.0.0/14 -124.108.8.0/21 -124.108.40.0/21 -124.109.96.0/21 -124.112.0.0/15 -124.114.0.0/15 -124.116.0.0/16 -124.117.0.0/16 -124.118.0.0/15 +124.70.0.0/16 +124.71.0.0/17 +124.71.128.0/18 +124.71.192.0/19 +124.71.224.0/20 +124.71.250.0/24 +124.72.0.0/13 +124.88.0.0/13 +124.112.0.0/13 124.126.0.0/15 124.128.0.0/13 -124.147.128.0/17 -124.150.137.0/24 124.151.0.0/16 124.152.0.0/16 -124.160.0.0/16 -124.161.0.0/16 -124.162.0.0/16 -124.163.0.0/16 -124.164.0.0/14 +124.160.0.0/13 124.172.0.0/15 -124.174.0.0/15 +124.174.0.0/16 124.192.0.0/15 -124.196.0.0/16 -124.200.0.0/13 +124.196.12.0/23 +124.196.25.0/24 +124.196.26.0/23 +124.196.28.0/24 +124.196.30.0/23 +124.196.32.0/23 +124.196.40.0/22 +124.196.48.0/22 +124.196.52.0/23 +124.196.55.0/24 +124.196.56.0/23 +124.196.58.0/24 +124.196.66.0/24 +124.196.72.0/24 +124.196.77.0/24 +124.196.80.0/22 +124.196.84.0/23 +124.200.0.0/16 +124.201.0.0/17 +124.202.0.0/16 +124.203.176.0/20 +124.204.0.0/14 124.220.0.0/14 -124.224.0.0/16 -124.225.0.0/16 -124.226.0.0/15 -124.228.0.0/14 -124.232.0.0/15 -124.234.0.0/15 -124.236.0.0/14 +124.224.0.0/12 124.240.0.0/17 124.240.128.0/18 -124.242.0.0/16 124.243.192.0/18 -124.248.0.0/17 -124.249.0.0/16 +124.248.64.0/18 124.250.0.0/15 124.254.0.0/18 -125.31.192.0/18 -125.32.0.0/16 -125.33.0.0/16 -125.34.0.0/16 -125.35.0.0/17 -125.35.128.0/17 -125.36.0.0/14 -125.40.0.0/13 +125.24.253.0/24 +125.32.0.0/12 125.58.128.0/17 -125.61.128.0/17 125.62.0.0/18 -125.64.0.0/13 -125.72.0.0/16 -125.73.0.0/16 -125.74.0.0/15 -125.76.0.0/17 -125.76.128.0/17 -125.77.0.0/16 -125.78.0.0/15 -125.80.0.0/13 -125.88.0.0/13 -125.96.0.0/15 -125.98.0.0/16 +125.64.0.0/11 +125.98.122.0/23 +125.98.128.0/17 125.104.0.0/13 125.112.0.0/12 -125.169.0.0/16 125.171.0.0/16 -125.208.0.0/18 -125.210.0.0/16 -125.211.0.0/16 -125.213.0.0/17 +125.208.0.0/19 +125.208.32.0/20 +125.208.49.0/24 +125.210.0.0/15 +125.213.32.0/20 125.214.96.0/19 -125.215.0.0/18 -125.216.0.0/15 -125.218.0.0/16 -125.219.0.0/16 -125.220.0.0/15 -125.222.0.0/15 -125.254.128.0/18 -125.254.192.0/18 +125.215.36.0/23 +125.215.40.0/24 +125.215.44.0/23 +125.215.48.0/24 +125.215.52.0/23 +125.215.54.0/24 +125.216.0.0/13 +125.254.128.0/19 +125.254.160.0/20 +125.254.176.0/21 +125.254.184.0/22 +125.254.188.0/23 +125.254.190.0/24 128.108.0.0/16 129.28.0.0/16 129.204.0.0/16 129.211.0.0/16 132.232.0.0/16 +132.237.134.0/24 134.175.0.0/16 -137.59.59.0/24 -137.59.88.0/22 -139.5.56.0/22 +138.252.72.0/23 139.5.60.0/22 -139.5.80.0/22 -139.5.92.0/22 -139.5.108.0/22 -139.5.128.0/22 -139.5.160.0/22 -139.5.192.0/22 -139.5.204.0/22 -139.5.212.0/22 -139.5.244.0/22 -139.9.0.0/16 +139.9.0.0/17 +139.9.128.0/18 +139.9.192.0/19 +139.9.224.0/20 +139.9.240.0/21 +139.9.248.0/22 139.129.0.0/16 139.148.0.0/16 139.155.0.0/16 -139.159.0.0/16 +139.159.0.0/19 +139.159.32.0/20 +139.159.96.0/20 +139.159.112.0/22 +139.159.132.0/22 +139.159.136.0/21 +139.159.144.0/20 +139.159.160.0/19 +139.159.192.0/18 139.170.0.0/16 -139.176.0.0/16 -139.183.0.0/16 139.186.0.0/16 139.189.0.0/16 -139.196.0.0/14 +139.196.0.0/16 +139.198.0.0/15 139.200.0.0/13 139.208.0.0/13 139.217.0.0/16 139.219.0.0/16 -139.220.0.0/15 +139.220.128.0/17 139.224.0.0/16 139.226.0.0/15 140.75.0.0/16 @@ -6059,8 +2731,15 @@ 140.179.0.0/16 140.205.0.0/16 140.206.0.0/15 -140.210.0.0/17 -140.210.128.0/17 +140.210.0.0/24 +140.210.4.0/22 +140.210.8.0/21 +140.210.16.0/20 +140.210.32.0/22 +140.210.64.0/18 +140.210.128.0/19 +140.210.192.0/19 +140.210.224.0/20 140.224.0.0/16 140.237.0.0/16 140.240.0.0/16 @@ -6069,77 +2748,60 @@ 140.249.0.0/16 140.250.0.0/16 140.255.0.0/16 -142.70.0.0/16 -142.86.0.0/16 +143.20.246.0/24 143.64.0.0/16 144.0.0.0/16 -144.7.0.0/16 +144.7.0.0/17 144.12.0.0/16 +144.36.146.0/23 144.48.64.0/22 -144.48.88.0/22 -144.48.156.0/22 -144.48.180.0/22 -144.48.184.0/22 -144.48.204.0/22 -144.48.208.0/22 144.48.212.0/22 -144.48.220.0/22 -144.48.252.0/22 144.52.0.0/16 +144.79.10.0/23 +144.79.54.0/23 +144.79.70.0/23 144.123.0.0/16 +144.225.186.0/24 144.255.0.0/16 +145.14.71.0/24 +145.14.72.0/22 +145.14.81.0/24 +145.14.82.0/24 +145.14.84.0/24 +145.14.86.0/24 +145.14.88.0/24 +145.14.90.0/24 +146.19.167.0/24 +146.19.236.0/24 146.56.192.0/18 146.196.56.0/22 146.196.68.0/22 -146.196.72.0/22 -146.196.92.0/22 -146.196.112.0/22 -146.196.116.0/22 -146.196.124.0/22 +146.196.112.0/21 +146.222.79.0/24 +146.222.81.0/24 +146.222.94.0/24 +147.78.132.0/22 148.70.0.0/16 -149.41.0.0/16 -150.0.0.0/16 -150.115.0.0/16 -150.121.0.0/16 -150.122.0.0/16 150.129.136.0/22 150.129.192.0/22 150.129.252.0/22 150.138.0.0/15 150.158.0.0/16 150.223.0.0/16 -150.242.0.0/22 -150.242.4.0/22 -150.242.8.0/22 -150.242.28.0/22 -150.242.44.0/22 -150.242.48.0/22 -150.242.52.0/22 150.242.56.0/22 150.242.76.0/22 150.242.80.0/22 -150.242.92.0/22 150.242.96.0/22 -150.242.112.0/22 -150.242.116.0/22 150.242.120.0/22 -150.242.152.0/22 -150.242.156.0/22 -150.242.160.0/22 -150.242.164.0/22 +150.242.156.0/23 150.242.168.0/22 150.242.184.0/22 -150.242.188.0/22 -150.242.192.0/22 -150.242.212.0/22 -150.242.224.0/22 150.242.232.0/22 -150.242.236.0/22 -150.242.240.0/22 +150.242.238.0/23 150.242.244.0/22 150.242.248.0/22 -150.248.0.0/16 150.255.0.0/16 +151.247.148.0/23 152.104.128.0/17 152.136.0.0/16 153.0.0.0/16 @@ -6150,323 +2812,363 @@ 153.101.0.0/16 153.118.0.0/15 154.8.128.0/17 +154.72.42.0/24 +154.72.44.0/24 +154.72.47.0/24 +154.91.158.0/23 +155.102.0.0/23 +155.102.2.0/24 +155.102.4.0/23 +155.102.8.0/21 +155.102.16.0/22 +155.102.20.0/24 +155.102.22.0/23 +155.102.24.0/24 +155.102.26.0/23 +155.102.28.0/22 +155.102.32.0/21 +155.102.40.0/23 +155.102.43.0/24 +155.102.44.0/22 +155.102.48.0/20 +155.102.64.0/23 +155.102.67.0/24 +155.102.68.0/23 +155.102.70.0/24 +155.102.74.0/23 +155.102.77.0/24 +155.102.79.0/24 +155.102.91.0/24 +155.102.92.0/22 +155.102.96.0/22 +155.102.100.0/23 +155.102.110.0/23 +155.102.112.0/21 +155.102.120.0/23 +155.102.127.0/24 +155.102.128.0/22 +155.102.132.0/23 +155.102.135.0/24 +155.102.136.0/21 +155.102.144.0/20 +155.102.160.0/21 +155.102.168.0/23 +155.102.171.0/24 +155.102.173.0/24 +155.102.174.0/23 +155.102.176.0/21 +155.102.184.0/23 +155.102.193.0/24 +155.102.194.0/23 +155.102.196.0/23 +155.102.198.0/24 +155.102.201.0/24 +155.102.202.0/24 +155.102.204.0/22 +155.102.208.0/21 +155.102.216.0/22 +155.102.220.0/23 +155.102.223.0/24 +155.102.224.0/19 +155.126.176.0/23 +156.59.108.0/24 +156.107.160.0/23 +156.107.170.0/24 +156.107.179.0/24 +156.107.181.0/24 +156.237.104.0/23 +156.242.5.0/24 157.0.0.0/16 -157.10.34.0/23 -157.10.36.0/23 157.10.112.0/23 -157.10.118.0/23 -157.10.130.0/23 -157.10.218.0/23 -157.10.220.0/23 -157.10.246.0/23 -157.15.74.0/23 157.15.94.0/23 -157.15.100.0/23 -157.15.102.0/23 157.15.104.0/23 -157.15.200.0/23 157.18.0.0/16 -157.20.33.0/24 -157.20.136.0/23 -157.20.194.0/23 157.20.246.0/23 157.61.0.0/16 -157.66.42.0/23 -157.66.70.0/23 -157.66.88.0/23 -157.66.90.0/23 -157.66.92.0/23 -157.66.94.0/23 157.66.164.0/23 -157.66.244.0/23 -157.119.8.0/22 -157.119.12.0/22 -157.119.16.0/22 157.119.28.0/22 -157.119.132.0/22 -157.119.136.0/22 -157.119.140.0/22 -157.119.144.0/22 -157.119.148.0/22 -157.119.152.0/22 -157.119.156.0/22 -157.119.160.0/22 -157.119.164.0/22 157.119.172.0/22 -157.119.192.0/22 -157.119.196.0/22 -157.119.240.0/22 157.119.252.0/22 157.122.0.0/16 157.148.0.0/16 157.156.0.0/16 +157.254.231.0/24 157.255.0.0/16 -158.60.0.0/16 -158.79.0.0/16 158.140.252.0/22 159.27.0.0/16 159.75.0.0/16 159.226.0.0/16 160.19.76.0/23 -160.19.82.0/23 -160.19.208.0/22 -160.19.212.0/22 -160.19.216.0/22 -160.20.16.0/23 +160.19.208.0/23 +160.19.210.0/24 160.20.18.0/23 -160.20.48.0/22 -160.20.130.0/23 -160.22.58.0/23 -160.22.82.0/23 -160.22.148.0/23 -160.22.188.0/23 -160.22.224.0/23 -160.22.230.0/23 +160.22.188.0/24 160.22.244.0/23 -160.22.246.0/23 -160.25.10.0/23 -160.25.12.0/23 -160.25.20.0/23 160.25.194.0/23 -160.30.40.0/23 -160.30.148.0/23 -160.30.150.0/23 -160.30.194.0/23 -160.30.196.0/23 -160.30.198.0/23 160.30.230.0/23 -160.187.223.0/24 -160.187.252.0/23 -160.187.254.0/23 -160.191.0.0/23 -160.191.104.0/23 -160.191.110.0/23 -160.202.60.0/22 -160.202.148.0/22 +160.83.110.0/24 +160.191.0.0/24 160.202.152.0/22 -160.202.168.0/22 160.202.212.0/22 -160.202.216.0/22 -160.202.220.0/22 -160.202.224.0/22 -160.202.228.0/22 -160.202.232.0/22 -160.202.236.0/22 -160.202.240.0/22 -160.202.244.0/22 -160.202.248.0/22 -160.202.252.0/22 +160.202.224.0/19 160.250.14.0/23 -160.250.16.0/23 -160.250.18.0/23 -160.250.24.0/23 160.250.84.0/23 -160.250.90.0/23 160.250.102.0/23 -160.250.104.0/23 -160.250.140.0/24 -160.250.160.0/23 -160.250.170.0/23 -160.250.214.0/23 -160.250.252.0/23 -161.120.0.0/16 +161.163.0.0/21 +161.163.28.0/23 161.189.0.0/16 161.207.0.0/16 -161.248.20.0/23 -161.248.42.0/23 -161.248.84.0/23 -161.248.92.0/23 -161.248.108.0/23 -161.248.110.0/23 -161.248.112.0/23 -161.248.136.0/23 162.14.0.0/16 162.105.0.0/16 +162.128.248.0/24 163.0.0.0/16 +163.5.53.0/24 +163.5.79.0/24 +163.5.166.0/24 163.47.4.0/22 -163.53.0.0/22 -163.53.4.0/22 -163.53.8.0/22 -163.53.12.0/22 -163.53.36.0/22 -163.53.40.0/22 163.53.44.0/22 -163.53.48.0/22 -163.53.52.0/22 -163.53.56.0/22 163.53.60.0/22 -163.53.64.0/22 -163.53.88.0/22 -163.53.92.0/22 -163.53.96.0/22 -163.53.100.0/22 -163.53.104.0/22 -163.53.108.0/22 -163.53.112.0/22 -163.53.116.0/22 -163.53.120.0/22 -163.53.124.0/22 +163.53.88.0/21 163.53.128.0/22 -163.53.132.0/22 -163.53.136.0/22 -163.53.160.0/22 -163.53.164.0/22 163.53.168.0/22 -163.53.172.0/22 -163.53.188.0/22 -163.53.240.0/22 +163.61.178.0/23 +163.61.202.0/23 +163.61.214.0/23 163.125.0.0/16 163.142.0.0/16 163.177.0.0/16 163.179.0.0/16 +163.181.0.0/23 +163.181.2.0/24 +163.181.15.0/24 +163.181.16.0/22 +163.181.22.0/23 +163.181.25.0/24 +163.181.26.0/24 +163.181.32.0/21 +163.181.40.0/24 +163.181.42.0/24 +163.181.44.0/22 +163.181.48.0/21 +163.181.56.0/22 +163.181.60.0/23 +163.181.63.0/24 +163.181.66.0/23 +163.181.69.0/24 +163.181.71.0/24 +163.181.72.0/23 +163.181.74.0/24 +163.181.77.0/24 +163.181.78.0/23 +163.181.80.0/22 +163.181.85.0/24 +163.181.87.0/24 +163.181.88.0/23 +163.181.90.0/24 +163.181.92.0/24 +163.181.94.0/23 +163.181.97.0/24 +163.181.99.0/24 +163.181.100.0/22 +163.181.104.0/22 +163.181.108.0/24 +163.181.110.0/23 +163.181.112.0/23 +163.181.116.0/23 +163.181.118.0/24 +163.181.120.0/22 +163.181.126.0/23 +163.181.128.0/23 +163.181.131.0/24 +163.181.132.0/23 +163.181.135.0/24 +163.181.136.0/21 +163.181.144.0/20 +163.181.160.0/24 +163.181.162.0/23 +163.181.164.0/22 +163.181.168.0/21 +163.181.176.0/21 +163.181.184.0/22 +163.181.188.0/24 +163.181.190.0/23 +163.181.192.0/23 +163.181.196.0/22 +163.181.200.0/21 +163.181.209.0/24 +163.181.210.0/23 +163.181.212.0/22 +163.181.216.0/21 +163.181.224.0/23 +163.181.228.0/22 +163.181.232.0/23 +163.181.234.0/24 +163.181.236.0/22 +163.181.241.0/24 +163.181.242.0/23 +163.181.244.0/22 +163.181.248.0/21 163.204.0.0/16 +163.223.72.0/23 +163.223.173.0/24 +163.223.178.0/23 +163.227.40.0/23 163.228.0.0/16 -164.52.0.0/17 +163.244.246.0/24 +165.101.70.0/24 +165.101.208.0/23 166.111.0.0/16 167.139.0.0/16 167.189.0.0/16 167.220.244.0/22 -168.160.0.0/16 -170.179.0.0/16 +168.160.0.0/17 +168.160.152.0/24 +168.160.158.0/23 +168.160.160.0/21 +168.160.168.0/24 +168.160.224.0/19 +170.33.98.0/24 171.8.0.0/13 171.34.0.0/15 171.36.0.0/14 -171.40.0.0/13 -171.80.0.0/14 -171.84.0.0/14 -171.88.0.0/13 +171.40.0.0/14 +171.44.0.0/16 +171.80.0.0/12 171.104.0.0/13 -171.112.0.0/14 -171.116.0.0/14 -171.120.0.0/13 +171.112.0.0/12 171.208.0.0/12 172.81.192.0/18 +174.136.239.0/24 175.0.0.0/12 175.16.0.0/13 -175.24.0.0/16 -175.25.0.0/16 -175.26.0.0/16 +175.24.0.0/15 175.27.0.0/16 175.30.0.0/15 175.42.0.0/15 175.44.0.0/16 175.46.0.0/15 -175.48.0.0/12 -175.64.0.0/11 -175.102.0.0/16 -175.106.128.0/17 -175.111.144.0/22 -175.111.148.0/22 -175.111.152.0/22 -175.111.156.0/22 -175.111.160.0/22 -175.111.164.0/22 -175.111.168.0/22 -175.111.172.0/22 -175.111.184.0/22 +175.102.0.0/19 +175.102.128.0/20 +175.102.144.0/21 +175.102.152.0/24 +175.102.178.0/23 +175.102.180.0/22 +175.102.184.0/22 +175.102.188.0/23 +175.102.190.0/24 +175.102.196.0/24 175.146.0.0/15 175.148.0.0/14 175.152.0.0/14 -175.158.96.0/22 175.160.0.0/12 -175.176.156.0/22 -175.176.176.0/22 -175.176.188.0/22 175.178.0.0/16 175.184.128.0/18 175.185.0.0/16 175.186.0.0/15 -175.188.0.0/14 -180.76.0.0/16 +175.188.188.0/22 +175.190.24.0/21 +175.190.126.0/23 +178.219.5.0/24 +180.76.16.0/20 +180.76.32.0/19 +180.76.64.0/18 +180.76.128.0/17 180.77.0.0/16 180.78.0.0/15 180.84.0.0/15 -180.86.0.0/16 -180.88.0.0/14 -180.94.56.0/21 -180.94.96.0/20 -180.94.120.0/22 -180.94.124.0/22 +180.88.96.0/19 +180.88.128.0/18 +180.89.56.0/22 +180.89.60.0/23 +180.89.64.0/19 +180.91.192.0/20 180.95.128.0/17 180.96.0.0/11 180.129.128.0/17 180.130.0.0/16 180.136.0.0/13 -180.148.16.0/21 -180.148.152.0/21 -180.148.216.0/21 -180.148.224.0/19 180.149.128.0/19 -180.150.160.0/19 +180.150.176.0/20 180.152.0.0/13 180.160.0.0/12 -180.178.112.0/22 -180.178.116.0/22 -180.178.192.0/18 -180.184.0.0/15 -180.186.0.0/16 -180.187.0.0/16 -180.188.0.0/17 -180.189.148.0/22 +180.178.208.0/20 +180.178.224.0/21 +180.178.232.0/22 +180.178.248.0/21 +180.184.0.0/21 +180.184.8.0/23 +180.184.14.0/24 +180.184.16.0/24 +180.184.24.0/21 +180.184.32.0/19 +180.184.64.0/18 +180.184.128.0/20 +180.184.144.0/21 +180.184.152.0/22 +180.184.160.0/20 +180.184.176.0/21 +180.184.184.0/22 +180.184.190.0/23 +180.184.192.0/18 +180.186.38.0/23 +180.186.40.0/22 +180.186.44.0/24 +180.188.16.0/20 +180.188.32.0/20 180.200.252.0/22 180.201.0.0/16 -180.202.0.0/15 +180.203.0.0/22 +180.203.4.0/24 180.208.0.0/15 180.210.212.0/22 -180.210.224.0/19 180.212.0.0/15 -180.222.224.0/19 -180.223.0.0/16 180.233.0.0/18 -180.233.64.0/19 -180.233.144.0/22 -180.235.64.0/19 -180.235.112.0/22 -182.16.144.0/22 -182.16.148.0/22 -182.16.192.0/19 -182.18.0.0/17 -182.23.184.0/21 -182.23.200.0/21 +180.235.64.0/21 +180.235.72.0/23 +182.18.5.0/24 +182.18.32.0/19 +182.18.72.0/21 +182.18.80.0/20 +182.18.96.0/19 182.32.0.0/12 -182.48.96.0/19 -182.49.0.0/16 -182.50.0.0/20 +182.48.96.0/20 +182.48.112.0/21 +182.50.8.0/21 182.50.112.0/20 -182.51.0.0/16 +182.51.114.0/23 +182.51.116.0/23 +182.51.118.0/24 +182.51.122.0/23 +182.51.124.0/24 182.54.0.0/17 -182.54.244.0/22 -182.61.0.0/16 -182.80.0.0/14 -182.84.0.0/14 +182.61.0.0/18 +182.61.128.0/19 +182.61.192.0/22 +182.61.200.0/21 +182.61.208.0/20 +182.61.224.0/19 +182.80.0.0/13 182.88.0.0/14 182.92.0.0/16 -182.96.0.0/12 -182.112.0.0/12 +182.96.0.0/11 182.128.0.0/12 182.144.0.0/13 182.157.0.0/16 -182.160.64.0/19 182.174.0.0/15 182.200.0.0/13 -182.236.128.0/17 -182.237.24.0/22 -182.237.28.0/22 -182.238.0.0/16 -182.239.0.0/19 182.240.0.0/13 182.254.0.0/16 -182.255.60.0/22 183.0.0.0/10 183.64.0.0/13 -183.78.160.0/22 -183.78.164.0/22 183.78.180.0/22 -183.81.172.0/22 183.81.180.0/22 183.84.0.0/15 -183.91.128.0/22 -183.91.136.0/21 +183.91.39.0/24 +183.91.40.0/21 +183.91.48.0/21 +183.91.56.0/24 +183.91.61.0/24 +183.91.63.0/24 183.91.144.0/20 183.92.0.0/14 183.128.0.0/11 @@ -6474,1376 +3176,197 @@ 183.168.0.0/15 183.170.0.0/16 183.172.0.0/14 -183.182.0.0/19 183.184.0.0/13 183.192.0.0/10 +185.39.51.0/24 +185.75.173.0/24 +185.75.174.0/24 188.131.128.0/17 -192.51.188.0/24 -192.55.46.0/23 -192.55.68.0/22 -192.102.204.0/22 -192.124.154.0/24 -192.140.128.0/22 -192.140.132.0/22 -192.140.136.0/22 -192.140.156.0/22 -192.140.160.0/22 -192.140.164.0/22 -192.140.168.0/22 -192.140.172.0/22 -192.140.176.0/22 -192.140.180.0/22 -192.140.184.0/22 -192.140.188.0/22 -192.140.192.0/22 -192.140.196.0/22 -192.140.200.0/22 -192.140.204.0/22 -192.140.208.0/22 -192.140.212.0/22 +192.140.160.0/19 +192.140.208.0/21 192.144.128.0/17 -192.197.113.0/24 +192.163.11.0/24 +192.232.97.0/24 193.112.0.0/16 -193.119.0.0/19 -198.175.100.0/22 -199.212.57.0/24 -202.0.100.0/23 -202.0.122.0/23 -202.0.176.0/22 -202.3.128.0/23 +193.233.49.0/24 +194.127.229.0/24 +194.138.202.0/23 +194.138.245.0/24 +194.231.140.0/24 +198.23.195.0/24 +198.208.17.0/24 +198.208.19.0/24 +198.208.30.0/24 +198.208.61.0/24 +198.208.63.0/24 +198.208.67.0/24 +198.208.112.0/23 +199.182.239.0/24 +199.244.144.0/24 202.4.128.0/19 202.4.252.0/22 -202.5.208.0/22 -202.5.212.0/22 -202.5.216.0/22 -202.6.6.0/23 -202.6.66.0/23 -202.6.72.0/23 -202.6.87.0/24 -202.6.88.0/23 -202.6.92.0/23 -202.6.103.0/24 -202.6.108.0/24 -202.6.110.0/23 -202.6.114.0/24 -202.6.176.0/20 -202.8.0.0/24 -202.8.2.0/23 -202.8.4.0/23 -202.8.12.0/24 -202.8.24.0/24 -202.8.77.0/24 -202.8.120.0/22 -202.8.128.0/19 -202.8.192.0/20 -202.9.32.0/24 -202.9.34.0/23 -202.9.48.0/23 -202.9.51.0/24 -202.9.52.0/23 -202.9.54.0/24 -202.9.57.0/24 -202.9.58.0/23 -202.10.64.0/20 -202.10.112.0/22 -202.10.116.0/22 -202.10.120.0/22 -202.10.124.0/22 -202.12.1.0/24 -202.12.2.0/24 -202.12.17.0/24 -202.12.18.0/24 -202.12.72.0/24 -202.12.84.0/23 -202.12.96.0/24 -202.12.98.0/23 -202.12.106.0/24 -202.12.111.0/24 -202.12.116.0/24 -202.14.64.0/23 -202.14.69.0/24 -202.14.73.0/24 -202.14.74.0/23 -202.14.76.0/24 -202.14.78.0/23 -202.14.88.0/24 -202.14.97.0/24 -202.14.104.0/23 -202.14.108.0/23 -202.14.111.0/24 -202.14.114.0/23 -202.14.118.0/23 -202.14.124.0/23 -202.14.127.0/24 -202.14.129.0/24 -202.14.135.0/24 -202.14.136.0/24 -202.14.149.0/24 -202.14.151.0/24 -202.14.157.0/24 -202.14.158.0/23 -202.14.169.0/24 -202.14.170.0/23 -202.14.172.0/22 -202.14.176.0/24 -202.14.184.0/23 -202.14.208.0/23 -202.14.213.0/24 -202.14.219.0/24 -202.14.220.0/24 -202.14.222.0/23 -202.14.225.0/24 -202.14.226.0/23 -202.14.231.0/24 +202.6.202.0/23 202.14.235.0/24 202.14.236.0/23 202.14.238.0/24 -202.14.239.0/24 -202.14.246.0/24 -202.14.251.0/24 -202.20.66.0/24 -202.20.79.0/24 -202.20.87.0/24 -202.20.88.0/23 -202.20.90.0/24 -202.20.94.0/23 -202.20.114.0/24 -202.20.117.0/24 -202.20.120.0/24 -202.20.125.0/24 -202.20.126.0/24 -202.20.127.0/24 -202.21.48.0/22 -202.21.52.0/22 -202.21.56.0/22 -202.21.60.0/22 -202.21.131.0/24 -202.21.132.0/24 -202.21.141.0/24 -202.21.142.0/24 -202.21.147.0/24 -202.21.148.0/24 -202.21.150.0/23 -202.21.152.0/23 -202.21.154.0/24 -202.21.156.0/24 -202.22.248.0/22 -202.22.252.0/22 -202.27.12.0/24 -202.27.14.0/24 -202.27.136.0/23 -202.36.226.0/24 -202.38.0.0/23 202.38.2.0/23 202.38.8.0/21 -202.38.48.0/20 -202.38.64.0/19 -202.38.96.0/19 +202.38.64.0/18 202.38.128.0/23 -202.38.130.0/23 202.38.132.0/23 202.38.134.0/24 -202.38.135.0/24 -202.38.136.0/23 202.38.140.0/23 -202.38.142.0/23 -202.38.146.0/23 -202.38.149.0/24 -202.38.150.0/23 202.38.152.0/23 -202.38.154.0/23 -202.38.156.0/24 -202.38.158.0/23 202.38.164.0/22 -202.38.168.0/23 -202.38.170.0/24 -202.38.176.0/23 202.38.184.0/21 202.38.192.0/18 -202.40.4.0/23 -202.40.7.0/24 -202.40.15.0/24 -202.40.135.0/24 -202.40.136.0/24 -202.40.140.0/24 -202.40.143.0/24 -202.40.144.0/23 -202.40.150.0/24 -202.40.155.0/24 -202.40.156.0/24 -202.40.158.0/23 -202.40.162.0/24 -202.41.8.0/23 -202.41.11.0/24 -202.41.12.0/23 -202.41.128.0/24 -202.41.130.0/23 202.41.152.0/21 -202.41.192.0/24 -202.41.196.0/22 -202.41.200.0/22 -202.41.240.0/20 -202.43.76.0/22 -202.43.144.0/20 -202.44.16.0/20 -202.44.48.0/22 -202.44.67.0/24 -202.44.74.0/24 -202.44.97.0/24 -202.44.129.0/24 -202.44.132.0/23 -202.44.146.0/23 -202.45.0.0/23 -202.45.2.0/24 -202.45.15.0/24 -202.45.16.0/20 -202.46.16.0/23 -202.46.18.0/24 -202.46.20.0/23 -202.46.32.0/19 -202.46.128.0/24 -202.46.224.0/20 -202.47.82.0/23 -202.47.96.0/22 -202.47.100.0/22 -202.47.104.0/22 -202.47.108.0/22 -202.47.126.0/24 -202.47.128.0/24 -202.47.130.0/23 -202.52.33.0/24 -202.52.34.0/24 -202.52.47.0/24 -202.52.143.0/24 -202.53.140.0/24 -202.53.143.0/24 -202.57.192.0/22 +202.41.241.0/24 +202.41.242.0/23 +202.41.244.0/22 +202.41.248.0/21 +202.46.224.0/22 +202.46.228.0/23 +202.46.232.0/23 +202.47.104.0/21 +202.55.0.0/19 +202.57.192.0/24 202.57.196.0/22 -202.57.200.0/22 -202.57.204.0/22 -202.57.212.0/22 -202.57.216.0/22 -202.57.240.0/20 -202.58.0.0/24 -202.58.104.0/22 -202.58.112.0/22 -202.59.0.0/24 -202.59.1.0/24 -202.59.212.0/22 -202.59.236.0/24 -202.59.240.0/24 -202.60.48.0/21 -202.60.96.0/21 +202.57.200.0/23 +202.57.204.0/23 +202.59.213.0/24 +202.59.214.0/23 202.60.112.0/20 202.60.132.0/22 -202.60.136.0/21 -202.60.144.0/20 -202.61.68.0/22 -202.61.76.0/22 202.61.88.0/22 -202.61.123.0/24 -202.61.127.0/24 202.62.112.0/22 -202.62.248.0/22 -202.62.252.0/24 -202.62.255.0/24 -202.63.80.0/24 -202.63.81.0/24 -202.63.82.0/23 -202.63.84.0/22 -202.63.88.0/21 -202.63.160.0/19 -202.63.248.0/22 -202.63.253.0/24 -202.65.0.0/21 -202.65.8.0/23 -202.65.96.0/22 -202.65.100.0/22 -202.65.104.0/22 -202.65.108.0/22 -202.66.168.0/22 -202.67.0.0/22 -202.69.4.0/22 +202.63.160.0/20 +202.65.96.0/24 +202.67.3.0/24 +202.69.4.0/23 202.69.16.0/20 -202.70.0.0/19 -202.70.96.0/20 -202.70.192.0/20 -202.71.32.0/22 -202.71.36.0/22 -202.71.40.0/22 -202.71.44.0/22 -202.72.40.0/21 -202.72.80.0/20 -202.72.112.0/22 -202.72.116.0/22 -202.72.120.0/22 -202.72.124.0/22 +202.72.112.0/20 202.73.128.0/22 -202.73.240.0/22 -202.73.244.0/22 -202.73.248.0/22 -202.73.252.0/22 -202.74.8.0/21 -202.74.36.0/24 -202.74.42.0/24 -202.74.52.0/24 -202.74.80.0/20 -202.74.254.0/23 +202.73.240.0/20 202.75.208.0/20 202.75.252.0/22 -202.76.252.0/22 -202.77.80.0/21 -202.77.92.0/22 -202.78.8.0/21 -202.79.224.0/21 -202.79.248.0/22 -202.80.192.0/21 -202.80.200.0/21 -202.81.0.0/22 -202.81.176.0/22 -202.81.180.0/22 -202.81.184.0/22 -202.81.188.0/22 -202.83.252.0/22 -202.84.0.0/22 -202.84.4.0/22 -202.84.8.0/21 -202.84.16.0/23 -202.84.22.0/24 -202.84.24.0/21 +202.80.192.0/22 +202.81.176.0/20 +202.84.17.0/24 202.85.208.0/20 -202.86.249.0/24 -202.86.252.0/22 -202.87.80.0/20 -202.88.32.0/22 -202.89.8.0/21 202.89.96.0/22 -202.89.108.0/22 -202.89.119.0/24 202.89.232.0/21 -202.90.16.0/22 202.90.20.0/22 -202.90.24.0/22 -202.90.28.0/22 -202.90.37.0/24 -202.90.96.0/22 -202.90.100.0/22 -202.90.104.0/22 -202.90.108.0/22 -202.90.112.0/20 -202.90.193.0/24 -202.90.196.0/24 -202.90.205.0/24 -202.90.224.0/21 -202.90.232.0/21 -202.91.0.0/22 -202.91.96.0/20 -202.91.176.0/20 -202.91.224.0/19 -202.92.8.0/21 -202.92.48.0/20 -202.92.252.0/22 +202.90.96.0/20 +202.91.176.0/21 +202.91.184.0/23 +202.91.186.0/24 +202.91.190.0/23 +202.91.224.0/20 +202.91.240.0/21 +202.91.248.0/22 202.93.252.0/22 -202.94.74.0/24 -202.94.81.0/24 -202.94.92.0/22 -202.95.240.0/21 -202.96.0.0/18 -202.96.64.0/21 -202.96.72.0/21 -202.96.80.0/20 -202.96.96.0/21 -202.96.104.0/21 -202.96.112.0/20 -202.96.128.0/21 -202.96.136.0/21 -202.96.144.0/20 -202.96.160.0/21 -202.96.168.0/21 -202.96.176.0/20 -202.96.192.0/21 -202.96.200.0/21 -202.96.208.0/20 -202.96.224.0/21 -202.96.232.0/21 -202.96.240.0/20 -202.97.0.0/21 -202.97.8.0/21 -202.97.16.0/20 -202.97.32.0/19 -202.97.64.0/19 -202.97.96.0/20 -202.97.112.0/20 -202.97.128.0/18 -202.97.192.0/19 -202.97.224.0/21 -202.97.232.0/21 -202.97.240.0/20 -202.98.0.0/21 -202.98.8.0/21 -202.98.16.0/20 -202.98.32.0/21 -202.98.40.0/21 -202.98.48.0/20 -202.98.64.0/19 -202.98.96.0/21 -202.98.104.0/21 -202.98.112.0/20 -202.98.128.0/19 -202.98.160.0/21 -202.98.168.0/21 -202.98.176.0/20 -202.98.192.0/21 -202.98.200.0/21 -202.98.208.0/20 -202.98.224.0/21 -202.98.232.0/21 -202.98.240.0/20 -202.99.0.0/18 -202.99.64.0/19 -202.99.96.0/21 -202.99.104.0/21 -202.99.112.0/20 -202.99.128.0/19 -202.99.160.0/21 -202.99.168.0/21 -202.99.176.0/20 -202.99.192.0/21 -202.99.200.0/21 -202.99.208.0/20 -202.99.224.0/21 -202.99.232.0/21 -202.99.240.0/20 -202.100.0.0/21 -202.100.8.0/21 -202.100.16.0/20 -202.100.32.0/19 -202.100.64.0/21 -202.100.72.0/21 -202.100.80.0/20 -202.100.96.0/21 -202.100.104.0/21 -202.100.112.0/20 -202.100.128.0/21 -202.100.136.0/21 -202.100.144.0/20 -202.100.160.0/21 -202.100.168.0/21 -202.100.176.0/20 -202.100.192.0/21 -202.100.200.0/21 -202.100.208.0/20 -202.100.224.0/19 -202.101.0.0/18 -202.101.64.0/19 -202.101.96.0/19 -202.101.128.0/18 -202.101.192.0/19 -202.101.224.0/21 -202.101.232.0/21 -202.101.240.0/20 -202.102.0.0/19 -202.102.32.0/19 -202.102.64.0/18 -202.102.128.0/21 -202.102.136.0/21 -202.102.144.0/20 -202.102.160.0/19 -202.102.192.0/21 -202.102.200.0/21 -202.102.208.0/20 -202.102.224.0/21 -202.102.232.0/21 -202.102.240.0/20 -202.103.0.0/21 -202.103.8.0/21 -202.103.16.0/20 -202.103.32.0/19 -202.103.64.0/19 -202.103.96.0/21 -202.103.104.0/21 -202.103.112.0/20 -202.103.128.0/18 -202.103.192.0/19 -202.103.224.0/21 -202.103.232.0/21 -202.103.240.0/20 -202.104.0.0/15 -202.106.0.0/16 -202.107.0.0/17 -202.107.128.0/17 -202.108.0.0/16 -202.109.0.0/16 -202.110.0.0/18 -202.110.64.0/18 -202.110.128.0/18 -202.110.192.0/18 +202.95.0.0/19 +202.96.0.0/13 +202.104.0.0/14 +202.108.0.0/15 +202.110.0.0/16 202.111.0.0/17 -202.111.128.0/19 -202.111.160.0/19 -202.111.192.0/18 -202.112.0.0/16 -202.113.0.0/20 -202.113.16.0/20 -202.113.32.0/19 -202.113.64.0/18 -202.113.128.0/18 -202.113.192.0/19 -202.113.224.0/20 -202.113.240.0/20 -202.114.0.0/19 -202.114.32.0/19 -202.114.64.0/18 -202.114.128.0/17 -202.115.0.0/19 -202.115.32.0/19 -202.115.64.0/18 -202.115.128.0/17 -202.116.0.0/19 -202.116.32.0/20 -202.116.48.0/20 -202.116.64.0/19 -202.116.96.0/19 -202.116.128.0/17 -202.117.0.0/18 -202.117.64.0/18 -202.117.128.0/17 -202.118.0.0/19 -202.118.32.0/19 -202.118.64.0/18 -202.118.128.0/17 -202.119.0.0/19 -202.119.32.0/19 -202.119.64.0/20 -202.119.80.0/20 -202.119.96.0/19 -202.119.128.0/17 -202.120.0.0/18 -202.120.64.0/18 -202.120.128.0/17 -202.121.0.0/16 -202.122.0.0/21 +202.111.128.0/18 +202.111.192.0/19 +202.111.230.0/24 +202.111.240.0/23 +202.111.242.0/24 +202.111.244.0/22 +202.111.248.0/24 +202.112.0.0/13 +202.120.0.0/15 202.122.32.0/21 -202.122.64.0/19 202.122.112.0/21 -202.122.120.0/21 -202.122.132.0/24 -202.123.96.0/20 -202.123.116.0/22 +202.123.96.0/24 +202.123.98.0/24 +202.123.106.0/23 +202.123.108.0/24 +202.123.110.0/23 202.123.120.0/22 -202.124.16.0/21 -202.124.24.0/22 -202.125.107.0/24 -202.125.109.0/24 -202.125.112.0/20 202.125.176.0/20 -202.127.0.0/23 -202.127.2.0/24 -202.127.3.0/24 -202.127.4.0/24 -202.127.5.0/24 -202.127.6.0/23 +202.127.0.0/21 202.127.12.0/22 202.127.16.0/20 202.127.40.0/21 -202.127.48.0/20 -202.127.112.0/20 -202.127.128.0/20 +202.127.48.0/23 202.127.144.0/20 -202.127.192.0/23 -202.127.194.0/23 -202.127.196.0/22 202.127.200.0/21 -202.127.212.0/22 202.127.216.0/21 202.127.224.0/19 -202.129.208.0/24 202.130.0.0/19 -202.130.39.0/24 -202.130.224.0/19 -202.131.16.0/21 -202.131.48.0/20 -202.131.208.0/20 -202.133.32.0/20 -202.134.58.0/24 -202.134.128.0/20 -202.134.208.0/22 -202.134.212.0/22 -202.134.216.0/22 -202.134.220.0/22 +202.130.224.0/20 +202.130.240.0/21 202.136.48.0/20 -202.136.208.0/20 -202.136.224.0/20 -202.136.248.0/22 -202.137.231.0/24 +202.136.72.0/23 +202.136.208.0/21 +202.136.216.0/23 +202.136.218.0/24 +202.136.220.0/24 +202.136.222.0/23 +202.136.255.0/24 202.140.140.0/22 -202.140.144.0/22 -202.140.148.0/22 -202.140.152.0/22 -202.140.156.0/22 202.141.160.0/19 202.142.16.0/20 -202.143.4.0/22 -202.143.16.0/20 -202.143.32.0/20 -202.143.56.0/21 +202.143.16.0/23 202.143.100.0/22 -202.143.104.0/22 -202.144.196.0/22 -202.146.160.0/20 -202.146.184.0/23 -202.146.186.0/24 -202.146.188.0/22 -202.146.196.0/22 -202.146.200.0/21 -202.147.144.0/20 -202.148.32.0/20 -202.148.64.0/19 202.148.96.0/19 -202.149.32.0/19 -202.149.160.0/19 202.149.224.0/19 202.150.16.0/20 -202.150.32.0/20 -202.150.56.0/22 -202.150.192.0/20 -202.150.224.0/19 -202.151.0.0/22 -202.151.33.0/24 -202.151.128.0/19 -202.152.176.0/20 -202.153.0.0/22 -202.153.7.0/24 202.153.48.0/20 -202.157.192.0/19 202.158.160.0/19 -202.158.242.0/24 202.160.140.0/22 -202.160.156.0/22 -202.160.176.0/20 -202.162.67.0/24 -202.162.75.0/24 202.164.0.0/20 -202.164.96.0/19 -202.165.176.0/20 -202.165.208.0/20 -202.165.239.0/24 -202.165.240.0/23 -202.165.243.0/24 -202.165.245.0/24 -202.165.251.0/24 -202.165.252.0/22 -202.166.224.0/19 -202.168.80.0/22 -202.168.128.0/22 -202.168.132.0/22 -202.168.136.0/22 -202.168.140.0/22 -202.168.160.0/20 -202.168.176.0/20 +202.168.160.0/19 202.170.128.0/19 202.170.216.0/21 -202.170.224.0/19 -202.171.216.0/21 -202.171.232.0/24 -202.171.235.0/24 -202.172.0.0/22 -202.172.7.0/24 -202.173.0.0/22 -202.173.6.0/24 -202.173.8.0/21 -202.173.112.0/22 +202.173.8.0/22 +202.173.14.0/23 202.173.224.0/19 -202.174.64.0/20 -202.174.124.0/22 -202.176.224.0/19 -202.179.160.0/22 -202.179.164.0/22 -202.179.168.0/22 -202.179.172.0/22 202.179.240.0/20 -202.180.128.0/19 -202.180.208.0/21 -202.181.8.0/22 -202.181.28.0/22 -202.181.112.0/20 -202.182.32.0/20 -202.182.192.0/19 -202.189.0.0/18 -202.189.80.0/20 -202.189.184.0/21 -202.191.0.0/24 -202.191.68.0/22 -202.191.72.0/21 -202.191.80.0/20 -202.192.0.0/13 -202.200.0.0/14 -202.204.0.0/14 -203.0.4.0/22 -203.0.10.0/23 -203.0.18.0/24 -203.0.24.0/24 -203.0.42.0/23 -203.0.45.0/24 -203.0.46.0/23 -203.0.81.0/24 -203.0.82.0/23 -203.0.90.0/23 -203.0.96.0/23 +202.181.28.0/24 +202.181.120.0/21 +202.189.3.0/24 +202.189.4.0/22 +202.189.8.0/21 +202.189.16.0/20 +202.189.32.0/20 +202.189.48.0/22 +202.192.0.0/12 203.0.104.0/21 -203.0.114.0/23 -203.0.122.0/24 -203.0.128.0/24 -203.0.130.0/23 -203.0.132.0/22 -203.0.137.0/24 -203.0.142.0/24 -203.0.144.0/24 -203.0.146.0/24 -203.0.148.0/24 -203.0.150.0/23 -203.0.152.0/24 -203.0.177.0/24 -203.0.224.0/24 -203.1.4.0/22 -203.1.18.0/24 -203.1.26.0/23 -203.1.65.0/24 -203.1.66.0/23 -203.1.70.0/23 -203.1.76.0/23 -203.1.90.0/24 -203.1.97.0/24 -203.1.98.0/23 -203.1.100.0/22 -203.1.108.0/24 -203.1.253.0/24 -203.1.254.0/24 203.2.64.0/21 -203.2.73.0/24 203.2.112.0/21 -203.2.126.0/23 -203.2.140.0/24 -203.2.150.0/24 -203.2.152.0/22 -203.2.156.0/23 203.2.160.0/21 -203.2.180.0/23 -203.2.196.0/23 -203.2.209.0/24 -203.2.214.0/23 -203.2.226.0/23 -203.2.229.0/24 -203.2.236.0/23 -203.3.68.0/24 -203.3.72.0/23 -203.3.75.0/24 203.3.80.0/21 -203.3.96.0/22 -203.3.105.0/24 203.3.112.0/21 -203.3.120.0/24 -203.3.123.0/24 -203.3.135.0/24 -203.3.139.0/24 -203.3.143.0/24 -203.4.132.0/23 -203.4.134.0/24 -203.4.151.0/24 -203.4.152.0/22 -203.4.174.0/23 -203.4.180.0/24 -203.4.186.0/24 -203.4.205.0/24 -203.4.208.0/22 -203.4.227.0/24 -203.4.230.0/23 -203.5.4.0/23 -203.5.7.0/24 -203.5.8.0/23 -203.5.11.0/24 -203.5.21.0/24 -203.5.22.0/24 -203.5.44.0/24 -203.5.46.0/23 -203.5.52.0/22 -203.5.56.0/23 -203.5.60.0/23 -203.5.114.0/23 -203.5.118.0/24 -203.5.120.0/24 -203.5.172.0/24 -203.5.180.0/23 -203.5.182.0/24 -203.5.185.0/24 -203.5.186.0/24 -203.5.188.0/23 -203.5.190.0/24 -203.5.195.0/24 -203.5.214.0/23 -203.5.218.0/23 -203.6.131.0/24 -203.6.136.0/24 -203.6.138.0/23 -203.6.142.0/24 -203.6.150.0/23 -203.6.157.0/24 -203.6.159.0/24 203.6.224.0/20 -203.6.248.0/23 -203.7.129.0/24 -203.7.138.0/23 -203.7.147.0/24 -203.7.150.0/23 -203.7.158.0/24 -203.7.192.0/23 -203.7.200.0/24 -203.8.0.0/24 -203.8.8.0/24 -203.8.23.0/24 -203.8.70.0/24 -203.8.82.0/24 -203.8.86.0/23 -203.8.91.0/24 -203.8.110.0/23 -203.8.115.0/24 -203.8.166.0/23 -203.8.169.0/24 -203.8.173.0/24 -203.8.184.0/24 -203.8.186.0/23 -203.8.190.0/23 -203.8.192.0/24 -203.8.197.0/24 -203.8.198.0/23 -203.8.203.0/24 -203.8.209.0/24 -203.8.210.0/23 -203.8.212.0/22 -203.8.217.0/24 -203.8.220.0/24 -203.9.32.0/24 -203.9.36.0/23 -203.9.57.0/24 -203.9.63.0/24 -203.9.65.0/24 -203.9.70.0/23 -203.9.72.0/24 -203.9.75.0/24 -203.9.76.0/23 -203.9.96.0/22 -203.9.100.0/23 -203.9.108.0/24 -203.9.158.0/24 -203.10.34.0/24 -203.10.56.0/24 -203.10.74.0/23 -203.10.84.0/22 -203.10.88.0/24 -203.10.95.0/24 -203.10.125.0/24 -203.11.70.0/24 -203.11.76.0/22 -203.11.82.0/24 -203.11.84.0/22 -203.11.100.0/22 -203.11.109.0/24 -203.11.117.0/24 -203.11.122.0/24 -203.11.126.0/24 -203.11.136.0/22 -203.11.141.0/24 -203.11.142.0/23 -203.11.180.0/22 -203.11.208.0/22 -203.12.16.0/24 -203.12.19.0/24 -203.12.24.0/24 -203.12.57.0/24 -203.12.65.0/24 -203.12.66.0/24 -203.12.70.0/23 -203.12.87.0/24 -203.12.100.0/23 -203.12.103.0/24 -203.12.114.0/24 -203.12.118.0/24 -203.12.130.0/24 -203.12.137.0/24 -203.12.196.0/22 -203.12.211.0/24 -203.12.219.0/24 -203.12.226.0/24 -203.12.240.0/22 -203.13.18.0/24 -203.13.24.0/24 -203.13.44.0/23 -203.13.88.0/23 -203.13.92.0/22 -203.13.173.0/24 -203.13.224.0/23 -203.13.227.0/24 -203.13.233.0/24 -203.14.24.0/22 -203.14.33.0/24 -203.14.56.0/24 -203.14.61.0/24 -203.14.62.0/24 -203.14.104.0/24 -203.14.114.0/23 -203.14.118.0/24 -203.14.162.0/24 -203.14.192.0/24 -203.14.194.0/23 -203.14.214.0/24 -203.14.231.0/24 -203.14.246.0/24 +203.8.25.0/24 +203.8.30.0/24 +203.12.91.0/24 +203.12.93.0/24 +203.13.81.0/24 203.15.0.0/20 -203.15.20.0/23 -203.15.22.0/24 -203.15.87.0/24 -203.15.88.0/23 -203.15.105.0/24 -203.15.112.0/21 -203.15.130.0/23 -203.15.149.0/24 -203.15.151.0/24 -203.15.156.0/22 -203.15.174.0/24 -203.15.227.0/24 -203.15.232.0/21 -203.15.240.0/23 -203.15.246.0/24 -203.16.10.0/24 -203.16.12.0/23 -203.16.16.0/21 -203.16.27.0/24 -203.16.38.0/24 -203.16.49.0/24 -203.16.50.0/23 -203.16.58.0/24 -203.16.63.0/24 -203.16.133.0/24 -203.16.161.0/24 -203.16.162.0/24 -203.16.186.0/23 -203.16.228.0/24 -203.16.238.0/24 -203.16.240.0/24 -203.16.245.0/24 -203.17.2.0/24 -203.17.18.0/24 -203.17.28.0/24 -203.17.39.0/24 -203.17.56.0/24 -203.17.74.0/23 -203.17.88.0/23 -203.17.136.0/24 -203.17.164.0/24 -203.17.187.0/24 -203.17.190.0/23 -203.17.231.0/24 -203.17.233.0/24 -203.17.248.0/24 -203.17.249.0/24 -203.17.255.0/24 -203.18.2.0/23 -203.18.4.0/24 -203.18.7.0/24 -203.18.31.0/24 -203.18.37.0/24 -203.18.48.0/23 -203.18.52.0/24 -203.18.72.0/22 -203.18.80.0/23 -203.18.87.0/24 -203.18.100.0/23 -203.18.105.0/24 -203.18.107.0/24 -203.18.110.0/24 -203.18.129.0/24 -203.18.131.0/24 -203.18.132.0/23 -203.18.144.0/24 -203.18.153.0/24 -203.18.199.0/24 -203.18.208.0/24 -203.18.211.0/24 -203.18.215.0/24 -203.19.1.0/24 -203.19.18.0/24 -203.19.24.0/24 -203.19.30.0/24 -203.19.32.0/21 -203.19.41.0/24 -203.19.44.0/23 -203.19.46.0/24 -203.19.58.0/24 -203.19.60.0/23 -203.19.64.0/24 -203.19.68.0/24 -203.19.72.0/24 -203.19.101.0/24 -203.19.111.0/24 -203.19.131.0/24 -203.19.133.0/24 -203.19.144.0/24 -203.19.147.0/24 -203.19.149.0/24 -203.19.156.0/24 -203.19.176.0/24 -203.19.178.0/23 -203.19.208.0/24 -203.19.228.0/22 -203.19.233.0/24 -203.19.242.0/24 -203.19.248.0/23 -203.19.255.0/24 -203.20.17.0/24 -203.20.40.0/23 -203.20.44.0/24 -203.20.48.0/24 -203.20.61.0/24 -203.20.65.0/24 -203.20.84.0/23 -203.20.89.0/24 -203.20.106.0/23 -203.20.115.0/24 -203.20.117.0/24 -203.20.118.0/23 -203.20.122.0/24 -203.20.126.0/23 -203.20.135.0/24 -203.20.136.0/21 -203.20.150.0/24 -203.20.230.0/24 -203.20.232.0/24 -203.20.236.0/24 -203.21.0.0/23 -203.21.2.0/24 -203.21.8.0/24 -203.21.10.0/24 -203.21.18.0/24 -203.21.33.0/24 -203.21.34.0/24 -203.21.41.0/24 -203.21.44.0/24 -203.21.68.0/24 -203.21.82.0/24 -203.21.96.0/22 -203.21.124.0/24 -203.21.136.0/23 -203.21.145.0/24 -203.21.206.0/24 -203.22.24.0/24 -203.22.28.0/23 -203.22.31.0/24 -203.22.68.0/24 -203.22.76.0/24 -203.22.78.0/24 -203.22.84.0/24 -203.22.87.0/24 -203.22.92.0/22 -203.22.99.0/24 -203.22.106.0/24 -203.22.122.0/23 -203.22.131.0/24 -203.22.163.0/24 -203.22.166.0/24 -203.22.170.0/24 -203.22.176.0/21 -203.22.194.0/24 -203.22.242.0/23 -203.22.245.0/24 -203.22.246.0/24 -203.22.252.0/23 -203.23.0.0/24 -203.23.47.0/24 -203.23.61.0/24 -203.23.62.0/23 -203.23.73.0/24 -203.23.85.0/24 -203.23.92.0/22 -203.23.98.0/24 -203.23.107.0/24 -203.23.112.0/24 -203.23.130.0/24 -203.23.140.0/23 -203.23.172.0/24 -203.23.182.0/24 -203.23.186.0/23 -203.23.192.0/24 -203.23.197.0/24 -203.23.198.0/24 -203.23.204.0/22 -203.23.224.0/24 -203.23.226.0/23 -203.23.228.0/22 -203.23.249.0/24 -203.23.251.0/24 -203.24.13.0/24 -203.24.18.0/24 -203.24.27.0/24 -203.24.43.0/24 -203.24.56.0/24 -203.24.58.0/24 -203.24.67.0/24 -203.24.74.0/24 -203.24.79.0/24 -203.24.80.0/23 -203.24.84.0/23 -203.24.86.0/24 -203.24.90.0/24 -203.24.111.0/24 -203.24.112.0/24 -203.24.116.0/24 -203.24.122.0/23 -203.24.145.0/24 -203.24.152.0/23 -203.24.157.0/24 -203.24.161.0/24 -203.24.167.0/24 -203.24.186.0/23 -203.24.199.0/24 -203.24.202.0/24 -203.24.212.0/23 -203.24.217.0/24 -203.24.219.0/24 -203.24.244.0/24 -203.25.19.0/24 -203.25.20.0/23 -203.25.46.0/24 -203.25.48.0/21 -203.25.64.0/23 -203.25.91.0/24 -203.25.99.0/24 -203.25.100.0/24 -203.25.106.0/24 -203.25.131.0/24 -203.25.135.0/24 -203.25.138.0/24 -203.25.147.0/24 -203.25.153.0/24 -203.25.154.0/23 -203.25.164.0/24 -203.25.166.0/24 -203.25.174.0/23 -203.25.180.0/24 -203.25.182.0/24 -203.25.191.0/24 -203.25.199.0/24 -203.25.200.0/24 -203.25.202.0/23 +203.25.52.0/24 203.25.208.0/20 -203.25.229.0/24 -203.25.235.0/24 -203.25.236.0/24 -203.25.242.0/24 -203.26.12.0/24 -203.26.34.0/24 -203.26.49.0/24 -203.26.50.0/24 -203.26.55.0/24 -203.26.56.0/23 -203.26.60.0/24 -203.26.65.0/24 -203.26.68.0/24 -203.26.76.0/24 -203.26.80.0/24 -203.26.84.0/24 -203.26.97.0/24 -203.26.102.0/23 -203.26.115.0/24 -203.26.116.0/24 -203.26.129.0/24 -203.26.143.0/24 -203.26.144.0/24 -203.26.148.0/23 -203.26.154.0/24 -203.26.158.0/23 -203.26.170.0/24 -203.26.173.0/24 -203.26.176.0/24 -203.26.185.0/24 -203.26.202.0/23 -203.26.210.0/24 -203.26.214.0/24 -203.26.222.0/24 -203.26.224.0/24 -203.26.228.0/24 -203.26.232.0/24 -203.27.0.0/24 -203.27.10.0/24 -203.27.15.0/24 -203.27.16.0/24 -203.27.20.0/24 -203.27.22.0/23 -203.27.40.0/24 -203.27.45.0/24 -203.27.53.0/24 -203.27.65.0/24 -203.27.66.0/24 -203.27.81.0/24 -203.27.88.0/24 -203.27.102.0/24 -203.27.109.0/24 -203.27.117.0/24 -203.27.121.0/24 -203.27.122.0/23 -203.27.125.0/24 -203.27.200.0/24 -203.27.202.0/24 -203.27.233.0/24 -203.27.241.0/24 -203.27.250.0/24 -203.28.10.0/24 -203.28.12.0/24 -203.28.33.0/24 -203.28.34.0/23 -203.28.43.0/24 -203.28.44.0/24 -203.28.54.0/24 -203.28.56.0/24 -203.28.73.0/24 -203.28.74.0/24 -203.28.76.0/24 -203.28.86.0/24 -203.28.88.0/24 -203.28.112.0/24 -203.28.131.0/24 -203.28.136.0/24 -203.28.140.0/24 -203.28.145.0/24 -203.28.165.0/24 -203.28.169.0/24 -203.28.170.0/24 -203.28.178.0/23 -203.28.185.0/24 -203.28.187.0/24 -203.28.196.0/24 -203.28.226.0/23 -203.28.239.0/24 -203.29.2.0/24 -203.29.8.0/23 -203.29.13.0/24 -203.29.14.0/24 -203.29.28.0/24 -203.29.46.0/24 -203.29.57.0/24 -203.29.61.0/24 -203.29.63.0/24 -203.29.69.0/24 -203.29.73.0/24 -203.29.81.0/24 -203.29.90.0/24 -203.29.95.0/24 -203.29.100.0/24 -203.29.103.0/24 -203.29.112.0/24 -203.29.120.0/22 -203.29.182.0/23 -203.29.187.0/24 -203.29.189.0/24 -203.29.190.0/24 -203.29.205.0/24 -203.29.210.0/24 -203.29.217.0/24 -203.29.227.0/24 -203.29.231.0/24 -203.29.233.0/24 -203.29.234.0/24 -203.29.248.0/24 -203.29.254.0/23 -203.30.16.0/23 -203.30.25.0/24 -203.30.27.0/24 -203.30.29.0/24 -203.30.66.0/24 -203.30.81.0/24 -203.30.87.0/24 -203.30.111.0/24 -203.30.121.0/24 -203.30.123.0/24 -203.30.152.0/24 -203.30.156.0/24 -203.30.162.0/24 -203.30.173.0/24 -203.30.175.0/24 -203.30.187.0/24 -203.30.194.0/24 -203.30.217.0/24 -203.30.220.0/24 -203.30.222.0/24 -203.30.232.0/23 -203.30.235.0/24 -203.30.240.0/23 -203.30.246.0/24 -203.30.250.0/23 -203.31.45.0/24 -203.31.46.0/24 -203.31.49.0/24 -203.31.51.0/24 -203.31.54.0/23 -203.31.69.0/24 -203.31.72.0/24 -203.31.80.0/24 -203.31.85.0/24 -203.31.97.0/24 -203.31.105.0/24 -203.31.106.0/24 -203.31.108.0/23 -203.31.124.0/24 -203.31.162.0/24 -203.31.174.0/24 -203.31.177.0/24 -203.31.181.0/24 -203.31.187.0/24 -203.31.189.0/24 -203.31.204.0/24 -203.31.220.0/24 -203.31.222.0/23 -203.31.225.0/24 -203.31.229.0/24 -203.31.248.0/23 -203.31.253.0/24 -203.32.20.0/24 203.32.48.0/23 -203.32.56.0/24 -203.32.60.0/24 -203.32.62.0/24 203.32.68.0/23 -203.32.76.0/24 -203.32.81.0/24 203.32.84.0/23 -203.32.95.0/24 -203.32.102.0/24 -203.32.105.0/24 -203.32.130.0/24 -203.32.133.0/24 -203.32.140.0/24 -203.32.152.0/24 -203.32.186.0/23 -203.32.192.0/24 -203.32.196.0/24 203.32.203.0/24 203.32.204.0/23 203.32.212.0/24 203.33.4.0/24 203.33.7.0/24 -203.33.8.0/21 203.33.21.0/24 203.33.26.0/24 203.33.32.0/24 203.33.63.0/24 203.33.64.0/24 203.33.67.0/24 -203.33.68.0/24 -203.33.73.0/24 -203.33.79.0/24 -203.33.100.0/24 -203.33.122.0/24 -203.33.129.0/24 -203.33.131.0/24 203.33.145.0/24 203.33.156.0/24 203.33.158.0/23 @@ -7851,15 +3374,10 @@ 203.33.185.0/24 203.33.200.0/24 203.33.202.0/23 -203.33.204.0/24 203.33.206.0/23 203.33.214.0/23 203.33.224.0/23 203.33.226.0/24 -203.33.233.0/24 -203.33.243.0/24 -203.33.250.0/24 -203.34.4.0/24 203.34.21.0/24 203.34.27.0/24 203.34.39.0/24 @@ -7877,9 +3395,6 @@ 203.34.152.0/23 203.34.161.0/24 203.34.162.0/24 -203.34.187.0/24 -203.34.192.0/21 -203.34.204.0/22 203.34.232.0/24 203.34.240.0/24 203.34.242.0/24 @@ -7911,7 +3426,6 @@ 203.56.38.0/24 203.56.40.0/24 203.56.46.0/24 -203.56.48.0/21 203.56.68.0/23 203.56.82.0/23 203.56.84.0/23 @@ -7932,9 +3446,7 @@ 203.56.210.0/24 203.56.214.0/24 203.56.216.0/24 -203.56.227.0/24 203.56.228.0/24 -203.56.231.0/24 203.56.232.0/24 203.56.240.0/24 203.56.252.0/24 @@ -7961,708 +3473,749 @@ 203.57.206.0/24 203.57.222.0/24 203.57.224.0/20 -203.57.246.0/23 203.57.249.0/24 -203.57.253.0/24 203.57.254.0/23 203.62.2.0/24 203.62.131.0/24 203.62.139.0/24 -203.62.161.0/24 -203.62.197.0/24 -203.62.228.0/22 -203.62.234.0/24 -203.62.246.0/24 -203.76.160.0/22 -203.76.168.0/22 -203.76.208.0/22 -203.76.212.0/22 +203.65.240.0/22 +203.76.208.0/21 203.76.216.0/22 203.76.240.0/22 -203.76.244.0/22 -203.77.180.0/22 203.78.48.0/20 -203.78.156.0/22 -203.79.0.0/20 -203.79.32.0/20 -203.80.4.0/23 -203.80.32.0/20 +203.79.0.0/23 203.80.57.0/24 -203.80.129.0/24 -203.80.132.0/22 -203.80.136.0/21 203.80.144.0/20 -203.81.0.0/21 -203.81.16.0/20 -203.81.244.0/22 203.82.0.0/23 -203.82.16.0/21 -203.82.112.0/22 -203.82.116.0/22 -203.82.120.0/22 -203.82.124.0/22 -203.82.224.0/22 -203.82.228.0/22 -203.82.232.0/22 -203.82.236.0/22 -203.83.0.0/22 -203.83.8.0/22 -203.83.12.0/22 203.83.56.0/21 203.83.224.0/20 203.86.0.0/19 -203.86.32.0/19 -203.86.64.0/20 -203.86.80.0/20 -203.86.96.0/19 -203.86.250.0/24 +203.86.43.0/24 +203.86.44.0/23 +203.86.48.0/23 +203.86.51.0/24 +203.86.52.0/22 +203.86.60.0/23 +203.86.62.0/24 +203.86.64.0/19 +203.86.112.0/24 203.86.254.0/23 203.88.32.0/19 203.88.192.0/19 -203.89.8.0/21 -203.89.100.0/22 -203.89.133.0/24 -203.89.136.0/22 -203.89.144.0/24 -203.90.8.0/22 -203.90.12.0/22 -203.90.128.0/19 -203.90.160.0/19 +203.90.128.0/18 203.90.192.0/19 203.91.32.0/19 -203.91.96.0/20 203.91.120.0/21 -203.92.0.0/22 -203.92.6.0/24 -203.92.160.0/19 -203.93.0.0/22 -203.93.4.0/22 -203.93.8.0/24 -203.93.9.0/24 -203.93.10.0/23 -203.93.12.0/22 -203.93.16.0/20 -203.93.32.0/19 -203.93.64.0/18 -203.93.128.0/21 -203.93.136.0/22 -203.93.140.0/24 -203.93.141.0/24 -203.93.142.0/23 -203.93.144.0/20 -203.93.160.0/19 -203.93.192.0/18 -203.94.0.0/22 -203.94.4.0/22 -203.94.8.0/21 -203.94.16.0/20 -203.95.0.0/21 -203.95.96.0/20 -203.95.112.0/20 -203.95.128.0/18 -203.95.200.0/22 -203.95.204.0/22 -203.95.208.0/22 -203.95.224.0/19 -203.99.8.0/21 -203.99.16.0/20 -203.99.80.0/20 -203.100.32.0/20 -203.100.48.0/21 -203.100.58.0/24 -203.100.60.0/24 -203.100.63.0/24 -203.100.80.0/20 -203.100.96.0/19 +203.93.0.0/18 +203.93.64.0/19 +203.93.96.0/20 +203.93.117.0/24 +203.93.120.0/21 +203.93.128.0/19 +203.93.160.0/20 +203.93.208.0/20 +203.93.224.0/19 +203.94.0.0/19 +203.95.0.0/23 +203.95.2.0/24 +203.95.4.0/22 +203.95.128.0/23 +203.99.20.0/22 +203.99.24.0/21 +203.100.92.0/22 203.100.192.0/20 203.104.32.0/20 -203.105.96.0/19 -203.105.128.0/19 -203.107.0.0/17 +203.107.1.0/24 +203.107.2.0/24 +203.107.6.0/24 +203.107.13.0/24 +203.107.20.0/22 +203.107.24.0/24 +203.107.26.0/23 +203.107.28.0/22 +203.107.32.0/19 +203.107.72.0/21 +203.107.80.0/21 +203.107.96.0/23 +203.107.116.0/22 203.110.160.0/19 203.110.208.0/20 203.110.232.0/23 203.110.234.0/24 -203.114.80.0/22 -203.114.84.0/22 -203.114.88.0/22 -203.114.92.0/22 203.114.244.0/22 -203.118.192.0/19 -203.118.241.0/24 203.118.248.0/22 -203.119.24.0/21 -203.119.32.0/22 -203.119.80.0/22 -203.119.85.0/24 -203.119.113.0/24 +203.119.25.0/24 +203.119.26.0/23 +203.119.28.0/22 +203.119.33.0/24 +203.119.80.0/24 +203.119.83.0/24 203.119.114.0/23 -203.119.116.0/22 -203.119.120.0/21 -203.119.128.0/17 -203.123.58.0/24 -203.128.32.0/19 -203.128.96.0/19 -203.128.224.0/21 -203.129.8.0/21 -203.130.32.0/19 +203.119.128.0/19 +203.119.160.0/24 +203.119.168.0/21 +203.119.176.0/20 +203.119.192.0/18 +203.129.12.0/22 +203.130.32.0/22 +203.130.40.0/21 203.132.32.0/19 -203.134.240.0/21 -203.135.96.0/20 -203.135.112.0/20 -203.135.160.0/20 -203.142.219.0/24 -203.142.224.0/19 -203.144.96.0/19 -203.145.0.0/19 +203.135.96.0/19 203.148.0.0/18 203.148.64.0/20 -203.148.80.0/22 203.148.86.0/23 -203.149.92.0/22 203.152.64.0/19 -203.152.128.0/19 -203.153.0.0/22 203.156.192.0/18 -203.158.16.0/21 -203.160.52.0/22 -203.160.104.0/21 203.160.129.0/24 203.160.192.0/19 -203.161.0.0/22 -203.161.180.0/24 -203.161.183.0/24 -203.161.192.0/19 -203.166.160.0/19 -203.167.28.0/22 +203.166.160.0/22 +203.166.165.0/24 +203.166.166.0/24 +203.166.172.0/24 +203.166.177.0/24 +203.166.186.0/23 +203.166.188.0/23 +203.166.191.0/24 203.168.0.0/19 203.170.58.0/23 -203.171.0.0/22 -203.171.208.0/24 -203.171.224.0/20 203.174.4.0/24 -203.174.6.0/24 -203.174.7.0/24 203.174.96.0/19 203.175.128.0/19 -203.175.192.0/18 -203.176.0.0/18 -203.176.64.0/19 -203.176.168.0/21 -203.184.80.0/20 -203.185.189.0/24 +203.176.92.0/22 +203.176.168.0/24 +203.176.170.0/24 203.187.160.0/19 203.189.0.0/23 203.189.6.0/23 -203.189.112.0/22 +203.189.113.0/24 +203.189.115.0/24 203.189.192.0/19 203.189.240.0/22 -203.190.96.0/20 -203.190.249.0/24 +203.190.100.0/23 203.191.0.0/23 -203.191.2.0/24 -203.191.5.0/24 -203.191.7.0/24 -203.191.16.0/20 -203.191.64.0/18 -203.191.133.0/24 203.191.144.0/21 -203.191.152.0/21 -203.192.0.0/19 +203.192.1.0/24 +203.192.2.0/23 +203.192.4.0/22 +203.192.8.0/21 +203.192.16.0/24 +203.192.24.0/23 203.193.224.0/19 -203.194.120.0/21 +203.194.122.0/23 +203.194.124.0/24 203.195.64.0/19 -203.195.112.0/21 +203.195.113.0/24 +203.195.114.0/24 +203.195.118.0/23 203.195.128.0/17 203.196.0.0/21 -203.196.8.0/21 -203.196.28.0/22 -203.201.181.0/24 -203.201.182.0/24 -203.202.236.0/22 -203.205.64.0/19 -203.205.128.0/17 -203.207.64.0/20 -203.207.80.0/21 -203.207.88.0/22 -203.207.92.0/22 -203.207.96.0/20 +203.202.236.0/23 +203.207.64.0/19 +203.207.96.0/21 +203.207.104.0/22 203.207.112.0/20 203.207.128.0/18 203.207.192.0/21 -203.207.200.0/21 +203.207.200.0/22 203.207.208.0/20 203.207.224.0/19 203.208.32.0/19 203.209.224.0/19 203.212.0.0/20 -203.212.80.0/20 -203.215.232.0/21 -203.217.164.0/22 -203.223.16.0/21 -204.52.191.0/24 -210.2.0.0/20 -210.2.16.0/20 +203.212.80.0/23 +203.215.232.0/23 +203.215.236.0/24 +203.223.21.0/24 +204.14.76.0/24 +204.235.241.0/24 +206.109.75.0/24 +210.2.0.0/23 +210.2.4.0/24 210.5.0.0/19 210.5.56.0/21 -210.5.128.0/20 -210.5.144.0/20 -210.7.56.0/22 -210.7.60.0/22 -210.12.0.0/18 -210.12.64.0/18 -210.12.128.0/18 -210.12.192.0/18 -210.13.0.0/18 -210.13.64.0/18 -210.13.128.0/17 -210.14.64.0/19 +210.5.128.0/19 +210.12.0.0/16 +210.13.0.0/17 +210.13.192.0/19 +210.13.224.0/24 +210.13.227.0/24 +210.13.230.0/23 +210.13.232.0/24 +210.13.236.0/23 +210.13.238.0/24 +210.13.240.0/20 +210.14.64.0/20 +210.14.80.0/22 +210.14.84.0/24 +210.14.90.0/23 +210.14.92.0/22 210.14.112.0/20 210.14.128.0/19 -210.14.160.0/19 -210.14.192.0/19 -210.14.224.0/19 -210.15.0.0/19 -210.15.32.0/19 -210.15.64.0/19 -210.15.96.0/19 -210.15.128.0/18 -210.16.104.0/22 -210.16.128.0/18 +210.14.192.0/18 +210.15.0.0/17 +210.16.160.0/19 210.21.0.0/17 -210.21.128.0/17 -210.22.0.0/16 -210.23.32.0/19 +210.21.192.0/18 +210.22.0.0/19 +210.22.32.0/22 +210.22.48.0/20 +210.22.64.0/18 +210.22.128.0/17 210.25.0.0/16 210.26.0.0/15 210.28.0.0/14 -210.32.0.0/14 -210.36.0.0/14 -210.40.0.0/13 +210.32.0.0/12 +210.48.136.0/21 210.51.0.0/16 -210.52.0.0/18 -210.52.64.0/18 -210.52.128.0/17 -210.53.0.0/17 -210.53.128.0/17 -210.56.192.0/19 +210.52.0.0/15 210.72.0.0/17 -210.72.128.0/19 -210.72.160.0/19 -210.72.192.0/18 -210.73.0.0/19 -210.73.32.0/19 -210.73.64.0/18 -210.73.128.0/17 -210.74.0.0/19 -210.74.32.0/19 -210.74.64.0/19 -210.74.96.0/19 -210.74.128.0/19 -210.74.160.0/19 -210.74.192.0/18 -210.75.0.0/17 -210.75.128.0/19 -210.75.160.0/19 -210.75.192.0/19 -210.75.224.0/19 -210.76.0.0/19 -210.76.32.0/19 -210.76.64.0/18 -210.76.128.0/18 +210.72.128.0/18 +210.72.192.0/19 +210.72.224.0/20 +210.72.240.0/21 +210.73.0.0/17 +210.73.128.0/18 +210.73.192.0/22 +210.73.204.0/24 +210.73.208.0/20 +210.73.224.0/19 +210.74.0.0/20 +210.74.35.0/24 +210.74.36.0/23 +210.74.38.0/24 +210.74.40.0/22 +210.74.44.0/23 +210.74.47.0/24 +210.74.64.0/23 +210.74.107.0/24 +210.74.108.0/23 +210.74.128.0/18 +210.74.224.0/19 +210.75.0.0/18 +210.75.96.0/19 +210.75.192.0/18 +210.76.0.0/18 +210.76.64.0/19 +210.76.160.0/19 210.76.192.0/19 -210.76.224.0/19 -210.77.0.0/19 -210.77.32.0/19 +210.77.0.0/18 210.77.64.0/19 -210.77.96.0/19 -210.77.128.0/17 -210.78.0.0/19 -210.78.32.0/19 -210.78.64.0/18 -210.78.128.0/19 -210.78.160.0/19 -210.78.192.0/18 -210.79.64.0/18 +210.77.128.0/19 +210.77.176.0/20 +210.77.192.0/18 +210.78.128.0/24 +210.78.134.0/23 +210.78.139.0/24 +210.78.144.0/23 210.79.224.0/19 210.82.0.0/15 -210.87.72.0/23 -210.87.114.0/23 -210.87.128.0/20 -210.87.144.0/20 -210.87.160.0/19 +210.87.128.0/18 210.185.192.0/18 -210.192.96.0/19 -211.64.0.0/14 -211.68.0.0/15 -211.70.0.0/15 -211.80.0.0/16 -211.81.0.0/16 -211.82.0.0/16 -211.83.0.0/16 -211.84.0.0/15 -211.86.0.0/15 -211.88.0.0/16 -211.89.0.0/16 -211.90.0.0/15 -211.92.0.0/15 -211.94.0.0/15 -211.96.0.0/15 +210.192.96.0/20 +210.192.116.0/22 +210.192.120.0/21 +211.64.0.0/13 +211.80.0.0/13 +211.88.0.0/15 +211.90.0.0/17 +211.90.128.0/18 +211.90.192.0/20 +211.90.216.0/21 +211.90.224.0/19 +211.91.0.0/18 +211.91.64.0/19 +211.91.96.0/20 +211.91.120.0/21 +211.91.128.0/18 +211.91.216.0/21 +211.91.224.0/19 +211.92.0.0/17 +211.92.128.0/18 +211.92.192.0/19 +211.92.224.0/20 +211.92.244.0/22 +211.93.0.0/17 +211.93.128.0/20 +211.93.144.0/21 +211.93.160.0/19 +211.93.192.0/21 +211.93.200.0/23 +211.93.204.0/22 +211.93.211.0/24 +211.93.212.0/23 +211.93.224.0/19 +211.94.37.0/24 +211.94.64.0/18 +211.94.128.0/17 +211.95.0.0/17 +211.95.128.0/19 +211.95.192.0/18 +211.96.0.0/16 +211.97.0.0/17 +211.97.128.0/19 +211.97.160.0/21 +211.97.176.0/20 +211.97.192.0/18 211.98.0.0/16 -211.99.0.0/18 -211.99.64.0/19 -211.99.96.0/19 -211.99.128.0/17 -211.100.0.0/16 +211.99.8.0/21 +211.99.16.0/23 +211.99.24.0/21 +211.99.32.0/19 +211.99.64.0/18 +211.99.128.0/18 +211.99.192.0/19 +211.100.0.0/17 +211.100.192.0/20 +211.100.224.0/19 211.101.0.0/18 -211.101.64.0/18 -211.101.128.0/17 -211.102.0.0/16 -211.103.0.0/17 -211.103.128.0/17 -211.136.0.0/14 -211.140.0.0/15 -211.142.0.0/17 -211.142.128.0/17 -211.143.0.0/16 -211.144.0.0/15 +211.101.192.0/20 +211.101.232.0/21 +211.101.240.0/21 +211.102.80.0/20 +211.102.128.0/18 +211.102.192.0/23 +211.102.208.0/20 +211.102.240.0/21 +211.102.248.0/24 +211.103.0.0/16 +211.136.0.0/13 +211.144.9.0/24 +211.144.10.0/24 +211.144.12.0/22 +211.144.16.0/24 +211.144.18.0/23 +211.144.20.0/24 +211.144.22.0/24 +211.144.24.0/24 +211.144.27.0/24 +211.144.28.0/23 +211.144.32.0/19 +211.144.64.0/19 +211.144.96.0/23 +211.144.100.0/22 +211.144.104.0/22 +211.144.108.0/23 +211.144.110.0/24 +211.144.112.0/24 +211.144.114.0/23 +211.144.118.0/23 +211.144.120.0/21 +211.144.128.0/19 +211.144.192.0/18 +211.145.0.0/18 +211.145.64.0/20 211.146.0.0/16 -211.147.0.0/17 +211.147.0.0/18 +211.147.64.0/19 211.147.128.0/18 -211.147.192.0/20 211.147.208.0/20 211.147.224.0/19 -211.148.0.0/14 -211.152.0.0/15 -211.154.0.0/16 -211.155.0.0/18 -211.155.64.0/19 -211.155.96.0/19 -211.155.128.0/17 -211.156.0.0/18 -211.156.64.0/20 -211.156.80.0/20 -211.156.96.0/19 +211.148.0.0/18 +211.148.128.0/17 +211.149.128.0/17 +211.150.0.0/18 +211.150.64.0/19 +211.150.98.0/24 +211.150.100.0/23 +211.150.114.0/23 +211.150.122.0/24 +211.150.124.0/23 +211.150.128.0/24 +211.151.0.0/16 +211.152.0.0/17 +211.152.192.0/22 +211.152.196.0/23 +211.152.208.0/20 +211.153.0.0/16 +211.154.0.0/19 +211.154.64.0/19 +211.154.128.0/17 +211.155.16.0/20 +211.155.32.0/19 +211.155.80.0/20 +211.155.108.0/22 +211.155.112.0/20 +211.155.128.0/19 +211.155.160.0/20 +211.155.176.0/22 +211.155.184.0/21 +211.155.224.0/21 +211.155.232.0/22 +211.155.236.0/24 +211.155.240.0/20 +211.156.0.0/19 211.156.128.0/19 -211.156.160.0/20 211.156.176.0/20 -211.156.192.0/18 -211.157.0.0/16 -211.158.0.0/15 -211.160.0.0/14 -211.164.0.0/15 +211.156.192.0/20 +211.156.208.0/21 +211.156.216.0/22 +211.156.220.0/23 +211.156.223.0/24 +211.157.0.0/19 +211.157.96.0/19 +211.157.128.0/18 +211.157.192.0/20 +211.157.219.0/24 +211.157.222.0/24 +211.157.224.0/19 +211.158.0.0/16 +211.159.64.0/21 +211.159.128.0/17 +211.160.0.0/22 +211.160.4.0/23 +211.160.8.0/22 +211.160.14.0/23 +211.160.16.0/21 +211.160.24.0/22 +211.160.28.0/23 +211.160.36.0/23 +211.160.46.0/23 +211.160.62.0/23 +211.160.72.0/21 +211.160.80.0/20 +211.160.112.0/23 +211.160.115.0/24 +211.160.120.0/24 +211.160.160.0/19 +211.160.194.0/23 +211.160.196.0/24 +211.160.202.0/23 +211.160.204.0/23 +211.160.240.0/20 +211.161.0.0/20 +211.161.24.0/22 +211.161.32.0/20 +211.161.60.0/23 +211.161.62.0/24 +211.161.97.0/24 +211.161.101.0/24 +211.161.102.0/23 +211.161.120.0/21 +211.161.192.0/22 +211.161.203.0/24 +211.161.209.0/24 +211.161.221.0/24 +211.161.224.0/20 +211.162.0.0/21 +211.162.64.0/20 +211.162.119.0/24 +211.162.120.0/21 +211.162.200.0/22 +211.165.0.0/16 211.166.0.0/16 -211.167.0.0/17 +211.167.64.0/18 211.167.128.0/19 -211.167.160.0/20 211.167.176.0/20 -211.167.192.0/18 +211.167.224.0/19 212.64.0.0/17 212.129.128.0/17 -218.0.0.0/16 -218.1.0.0/16 -218.2.0.0/15 -218.4.0.0/15 -218.6.0.0/16 -218.7.0.0/16 -218.8.0.0/15 -218.10.0.0/16 -218.11.0.0/16 -218.12.0.0/16 -218.13.0.0/16 -218.14.0.0/15 -218.16.0.0/14 -218.20.0.0/16 -218.21.0.0/17 -218.21.128.0/17 -218.22.0.0/15 -218.24.0.0/15 -218.26.0.0/16 -218.27.0.0/16 -218.28.0.0/15 -218.30.0.0/15 -218.56.0.0/14 -218.60.0.0/15 -218.62.0.0/17 -218.62.128.0/17 -218.63.0.0/16 -218.64.0.0/15 -218.66.0.0/16 -218.67.0.0/17 -218.67.128.0/17 -218.68.0.0/15 -218.70.0.0/15 -218.72.0.0/14 -218.76.0.0/15 -218.78.0.0/15 -218.80.0.0/14 -218.84.0.0/14 -218.88.0.0/13 -218.96.0.0/15 -218.98.0.0/17 -218.98.128.0/18 -218.98.192.0/19 -218.98.224.0/19 -218.99.0.0/16 +218.0.0.0/11 +218.56.0.0/13 +218.64.0.0/11 +218.96.0.0/24 +218.96.64.0/22 +218.96.104.0/22 +218.96.108.0/23 +218.96.126.0/23 +218.96.128.0/24 +218.96.241.0/24 +218.96.244.0/24 +218.96.255.0/24 +218.97.0.0/17 +218.97.160.0/19 +218.97.192.0/19 +218.97.240.0/20 +218.98.0.0/18 +218.98.96.0/21 +218.98.104.0/22 +218.98.108.0/23 +218.98.111.0/24 +218.98.112.0/20 +218.98.160.0/24 +218.98.176.0/22 +218.98.180.0/23 +218.98.182.0/24 +218.98.192.0/24 218.100.88.0/21 -218.100.96.0/19 -218.100.128.0/17 -218.104.0.0/17 -218.104.128.0/19 -218.104.160.0/19 -218.104.192.0/21 -218.104.200.0/21 -218.104.208.0/20 -218.104.224.0/19 -218.105.0.0/16 -218.106.0.0/15 -218.108.0.0/16 -218.109.0.0/16 -218.185.192.0/19 +218.104.0.0/15 +218.106.0.0/16 +218.107.0.0/18 +218.107.128.0/17 +218.108.0.0/15 218.185.240.0/21 -218.192.0.0/16 -218.193.0.0/16 -218.194.0.0/16 -218.195.0.0/16 -218.196.0.0/14 -218.200.0.0/14 -218.204.0.0/15 -218.206.0.0/15 -218.240.0.0/14 -218.244.0.0/18 -218.244.64.0/19 -218.244.96.0/19 -218.244.128.0/17 -218.245.0.0/16 -218.246.0.0/15 +218.192.0.0/12 +218.240.0.0/18 +218.240.128.0/19 +218.240.160.0/21 +218.240.168.0/22 +218.240.176.0/20 +218.241.16.0/21 +218.241.24.0/22 +218.241.96.0/20 +218.241.112.0/22 +218.241.116.0/23 +218.241.118.0/24 +218.241.121.0/24 +218.241.122.0/23 +218.241.124.0/22 +218.241.128.0/17 +218.242.0.0/16 +218.244.0.0/19 +218.244.44.0/22 +218.244.49.0/24 +218.244.52.0/23 +218.244.55.0/24 +218.244.56.0/23 +218.244.58.0/24 +218.244.128.0/18 +218.244.192.0/20 +218.244.224.0/19 +218.245.0.0/17 +218.246.0.0/19 +218.246.32.0/22 +218.246.48.0/22 +218.246.64.0/18 +218.246.160.0/19 +218.246.192.0/19 +218.247.0.0/18 +218.247.128.0/17 218.249.0.0/16 219.72.0.0/16 219.82.0.0/16 -219.83.128.0/17 -219.90.68.0/22 -219.90.72.0/22 -219.90.76.0/22 +219.83.160.0/19 219.128.0.0/12 219.144.0.0/14 -219.148.0.0/16 -219.149.0.0/17 -219.149.128.0/18 -219.149.192.0/18 -219.150.0.0/19 -219.150.32.0/19 -219.150.64.0/19 -219.150.96.0/20 -219.150.112.0/20 -219.150.128.0/17 -219.151.0.0/19 -219.151.32.0/19 -219.151.64.0/18 +219.148.0.0/15 +219.150.0.0/16 +219.151.0.0/18 219.151.128.0/17 -219.152.0.0/15 -219.154.0.0/15 +219.152.0.0/14 219.156.0.0/15 -219.158.0.0/17 +219.158.0.0/19 +219.158.32.0/20 +219.158.58.0/23 +219.158.60.0/22 +219.158.96.0/19 219.158.128.0/17 -219.159.0.0/18 -219.159.64.0/18 -219.159.128.0/17 -219.216.0.0/15 -219.218.0.0/15 -219.220.0.0/16 -219.221.0.0/16 -219.222.0.0/15 -219.224.0.0/15 -219.226.0.0/16 -219.227.0.0/16 -219.228.0.0/15 -219.230.0.0/15 -219.232.0.0/14 -219.236.0.0/15 -219.238.0.0/15 +219.159.0.0/16 +219.216.0.0/13 +219.224.0.0/13 +219.232.0.0/17 +219.232.144.0/24 +219.232.160.0/19 +219.232.192.0/19 +219.233.0.0/16 +219.234.80.0/20 +219.234.96.0/19 +219.234.128.0/17 +219.235.0.0/20 +219.235.32.0/19 +219.235.64.0/18 +219.235.128.0/19 +219.235.192.0/23 +219.235.207.0/24 +219.235.224.0/22 +219.235.228.0/23 +219.235.233.0/24 +219.235.234.0/24 +219.235.237.0/24 +219.235.251.0/24 +219.235.252.0/24 +219.235.255.0/24 +219.236.0.0/14 219.242.0.0/15 219.244.0.0/14 220.101.192.0/18 -220.112.0.0/14 -220.152.128.0/17 -220.154.0.0/16 -220.155.0.0/16 -220.158.240.0/22 -220.160.0.0/11 -220.192.0.0/15 -220.194.0.0/15 -220.196.0.0/14 -220.200.0.0/13 +220.112.0.0/22 +220.112.8.0/24 +220.112.40.0/21 +220.112.50.0/23 +220.112.52.0/23 +220.112.54.0/24 +220.112.194.0/24 +220.112.196.0/24 +220.112.200.0/21 +220.113.0.0/19 +220.113.32.0/20 +220.113.96.0/21 +220.113.150.0/23 +220.113.152.0/23 +220.113.154.0/24 +220.114.250.0/23 +220.154.0.0/20 +220.154.16.0/22 +220.154.64.0/20 +220.154.80.0/22 +220.154.128.0/20 +220.154.147.0/24 +220.160.0.0/12 +220.176.0.0/14 +220.180.0.0/16 +220.181.0.0/17 +220.181.128.0/20 +220.181.144.0/24 +220.181.148.0/22 +220.181.152.0/21 +220.181.160.0/19 +220.182.0.0/18 +220.184.0.0/13 +220.192.0.0/16 +220.193.0.0/17 +220.194.0.0/16 +220.195.0.0/17 +220.195.128.0/19 +220.195.192.0/18 +220.196.0.0/16 +220.197.0.0/17 +220.197.160.0/19 +220.197.192.0/18 +220.198.0.0/15 +220.200.0.0/17 +220.200.128.0/20 +220.200.148.0/22 +220.200.152.0/21 +220.200.160.0/19 +220.200.192.0/18 +220.201.0.0/16 +220.202.0.0/16 +220.203.0.0/17 +220.203.128.0/18 +220.203.216.0/23 +220.203.220.0/22 +220.203.224.0/19 +220.205.0.0/16 +220.206.192.0/22 +220.207.0.0/22 +220.207.80.0/20 +220.207.176.0/22 +220.207.184.0/22 +220.207.254.0/23 220.231.0.0/18 220.231.128.0/17 220.232.64.0/18 220.234.0.0/16 -220.242.0.0/15 -220.247.136.0/21 -220.248.0.0/14 -220.252.0.0/16 -221.0.0.0/15 -221.2.0.0/16 -221.3.0.0/17 -221.3.128.0/17 -221.4.0.0/16 -221.5.0.0/17 -221.5.128.0/17 -221.6.0.0/16 -221.7.0.0/19 -221.7.32.0/19 -221.7.64.0/19 -221.7.96.0/19 -221.7.128.0/17 -221.8.0.0/15 -221.10.0.0/16 -221.11.0.0/17 -221.11.128.0/18 -221.11.192.0/19 -221.11.224.0/19 +220.242.180.0/24 +220.243.128.0/18 +220.248.0.0/16 +220.249.0.0/17 +220.249.128.0/18 +220.249.192.0/19 +220.249.240.0/20 +220.250.0.0/17 +221.0.0.0/13 +221.8.0.0/14 221.12.0.0/17 221.12.128.0/18 -221.13.0.0/18 -221.13.64.0/19 -221.13.96.0/19 -221.13.128.0/17 +221.13.0.0/16 221.14.0.0/15 -221.122.0.0/15 -221.128.128.0/17 +221.122.0.0/16 +221.123.0.0/24 +221.123.112.0/20 +221.123.128.0/17 221.129.0.0/16 221.130.0.0/15 -221.133.224.0/19 -221.136.0.0/16 +221.133.225.0/24 +221.133.226.0/24 +221.133.228.0/22 +221.133.232.0/23 +221.133.235.0/24 +221.133.244.0/23 221.137.0.0/16 -221.172.0.0/14 +221.172.0.0/16 +221.174.0.0/16 221.176.0.0/13 -221.192.0.0/15 -221.194.0.0/16 -221.195.0.0/16 +221.192.0.0/14 221.196.0.0/15 221.198.0.0/16 -221.199.0.0/19 -221.199.32.0/20 -221.199.48.0/20 -221.199.64.0/18 +221.199.0.0/17 221.199.128.0/18 221.199.192.0/20 221.199.224.0/19 -221.200.0.0/14 -221.204.0.0/15 -221.206.0.0/16 -221.207.0.0/18 -221.207.64.0/18 -221.207.128.0/17 -221.208.0.0/14 -221.212.0.0/16 -221.213.0.0/16 -221.214.0.0/15 -221.216.0.0/13 -221.224.0.0/13 -221.232.0.0/14 -221.236.0.0/15 -221.238.0.0/16 -221.239.0.0/17 -221.239.128.0/17 -222.16.0.0/15 -222.18.0.0/15 -222.20.0.0/15 -222.22.0.0/16 -222.23.0.0/16 -222.24.0.0/15 -222.26.0.0/15 -222.28.0.0/14 -222.32.0.0/11 -222.64.0.0/13 -222.72.0.0/15 -222.74.0.0/16 -222.75.0.0/16 -222.76.0.0/14 -222.80.0.0/15 -222.82.0.0/16 -222.83.0.0/17 -222.83.128.0/17 -222.84.0.0/16 -222.85.0.0/17 -222.85.128.0/17 -222.86.0.0/15 -222.88.0.0/15 -222.90.0.0/15 -222.92.0.0/14 +221.200.0.0/13 +221.208.0.0/12 +221.224.0.0/12 +222.16.0.0/12 +222.35.0.0/16 +222.42.115.0/24 +222.44.0.0/15 +222.49.128.0/17 +222.50.0.0/16 +222.59.128.0/17 +222.64.0.0/11 222.125.0.0/16 222.126.128.0/17 -222.128.0.0/14 -222.132.0.0/14 -222.136.0.0/13 -222.160.0.0/15 -222.162.0.0/16 -222.163.0.0/19 -222.163.32.0/19 -222.163.64.0/18 -222.163.128.0/17 -222.168.0.0/15 -222.170.0.0/15 -222.172.0.0/17 -222.172.128.0/17 -222.173.0.0/16 -222.174.0.0/15 -222.176.0.0/13 -222.184.0.0/13 -222.192.0.0/14 -222.196.0.0/15 -222.198.0.0/16 -222.199.0.0/16 -222.200.0.0/14 -222.204.0.0/15 -222.206.0.0/15 -222.208.0.0/13 -222.216.0.0/15 -222.218.0.0/16 -222.219.0.0/16 -222.220.0.0/15 -222.222.0.0/15 +222.128.0.0/12 +222.160.0.0/14 +222.168.0.0/13 +222.176.0.0/12 +222.192.0.0/11 222.240.0.0/13 -222.248.0.0/16 -222.249.0.0/17 -222.249.128.0/19 -222.249.160.0/20 -222.249.176.0/20 -222.249.192.0/18 -223.0.0.0/15 +222.248.0.0/15 +223.0.1.0/24 +223.0.2.0/24 +223.0.8.0/22 +223.0.12.0/23 +223.0.15.0/24 +223.0.16.0/24 +223.0.30.0/24 +223.0.40.0/23 +223.0.126.0/24 223.2.0.0/15 223.4.0.0/14 223.8.0.0/13 -223.20.0.0/15 223.27.184.0/22 -223.29.208.0/22 -223.29.252.0/22 -223.64.0.0/11 -223.96.0.0/12 -223.112.0.0/14 -223.116.0.0/15 -223.120.128.0/17 -223.121.128.0/17 -223.123.128.0/17 -223.124.0.0/14 +223.64.0.0/10 223.128.0.0/15 223.144.0.0/12 -223.160.0.0/14 +223.160.0.0/20 +223.160.16.0/21 +223.160.112.0/20 +223.160.128.0/22 +223.160.134.0/23 +223.160.136.0/21 +223.160.144.0/20 +223.160.160.0/19 +223.160.192.0/19 +223.160.224.0/21 +223.160.232.0/22 +223.160.236.0/23 +223.161.194.0/23 +223.161.196.0/22 +223.161.200.0/21 +223.161.208.0/20 +223.161.224.0/19 223.166.0.0/15 223.192.0.0/15 223.198.0.0/15 -223.201.0.0/16 -223.202.0.0/15 -223.208.0.0/14 -223.212.0.0/15 -223.214.0.0/15 +223.202.0.0/24 +223.202.67.0/24 +223.202.131.0/24 +223.202.132.0/24 +223.202.134.0/23 +223.202.211.0/24 +223.202.212.0/24 +223.203.3.0/24 +223.203.9.0/24 +223.203.96.0/24 +223.203.100.0/24 +223.210.0.0/19 +223.210.48.0/22 +223.212.0.0/14 223.220.0.0/15 -223.223.176.0/21 -223.223.184.0/21 +223.223.176.0/20 223.223.192.0/20 223.240.0.0/13 223.248.0.0/14 -223.252.128.0/17 -223.254.0.0/16 -223.255.0.0/17 +223.252.194.0/24 +223.252.199.0/24 +223.252.200.0/23 +223.252.202.0/24 +223.252.205.0/24 +223.252.209.0/24 +223.252.210.0/23 +223.252.212.0/24 +223.252.214.0/23 +223.252.221.0/24 +223.252.222.0/24 223.255.236.0/22 223.255.252.0/23 \ No newline at end of file diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list index 72145a1eb..f57e62174 100644 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list +++ b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list @@ -1,3 +1,21 @@ +rule-providers: +## google: +## type: http +## path: ./rule1.yaml +## url: "https://raw.githubusercontent.com/../Google.yaml" +## interval: 600 +## proxy: DIRECT +## behavior: classical +## format: yaml +## size-limit: 0 +## header: +## User-Agent: +## - "mihomo/1.18.3" +## Authorization: +## - 'token 1231231' +## payload: +## - 'DOMAIN-SUFFIX,google.com' + rules: ##- PROCESS-NAME,curl,DIRECT #匹配路由自身进程(curl直连) ##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组) diff --git a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list index 59812f294..1da48c0b5 100644 --- a/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list +++ b/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list @@ -1,3 +1,20 @@ +rule-providers: +## google: +## type: http +## path: ./rule1.yaml +## url: "https://raw.githubusercontent.com/../Google.yaml" +## interval: 600 +## proxy: DIRECT +## behavior: classical +## format: yaml +## size-limit: 0 +## header: +## User-Agent: +## - "mihomo/1.18.3" +## Authorization: +## - 'token 1231231' +## payload: +## - 'DOMAIN-SUFFIX,google.com' rules: ##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组) ##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组) diff --git a/luci-app-openclash/root/etc/openclash/overwrite/default b/luci-app-openclash/root/etc/openclash/overwrite/default index 3be9b3783..2f9ffa2fd 100644 --- a/luci-app-openclash/root/etc/openclash/overwrite/default +++ b/luci-app-openclash/root/etc/openclash/overwrite/default @@ -73,7 +73,6 @@ # ENABLE_TCP_CONCURRENT (启用 TCP 并发, 0: 插件不覆写, 1: 启用) # FIND_PROCESS_MODE (进程查找模式, 0: 插件不覆写, off: 关闭, always, strict) -# GLOBAL_CLIENT_FINGERPRINT (全局客户端指纹, none/random/chrome/firefox/safari/ios/android/edge/360/qq/0: 插件不覆写) # ENABLE_UNIFIED_DELAY (启用统一延迟计算, 0: 插件不覆写, 1: 启用) # ENABLE_RULE_PROXY (仅代理命中规则流量, 0: 禁用, 1: 启用) @@ -117,6 +116,7 @@ # GEOASN_CUSTOM_URL (GeoASN 数据自定义更新地址, URL or default) # --- 其它功能 --- +# GLOBAL_UA (全局 User-Agent, 0:不覆写,或具体 UA) # SMALL_FLASH_MEMORY (小闪存模式, 0: 禁用, 1: 启用) # DISABLE_QUIC_GO_GSO (禁用 QUIC GO GSO, 0: 插件不覆写, 1: 启用) # DELAY_START (延时启动, 0: 禁用 or 秒数) @@ -209,6 +209,298 @@ #指定展示订阅信息的 URL 地址 #SUB_INFO_URL = https://default-demo.yaml +# ========================================================== +# ==== 以下为 YAML 块覆写示例 ==== +# ========================================================== +# YAML 覆写块识别标记 +# [YAML] + +# ---------------------------------------------------------- +# 操作符速查表: +# key → 默认合并(Hash 递归合并,其他直接覆盖) +# key! → 强制覆盖整个值 +# key+ → 数组后置追加 +# +key → 数组前置插入 +# key- → 数组差集删除 / 非数组则删除该键 +# key* → 批量条件更新(需配合 where/set) +# 后缀 → 同上(+, !, *, -),适用于键名含特殊字符时 +# + → 数组前置插入,适用于键名含特殊字符时 +# ---------------------------------------------------------- + +# 1. 默认合并 - 合并哈希键值,键不存在则添加,Hash 值递归合并 +# 示例:修改 dns.enable 并添加新键 +# dns: +# enable: true +# cache-algorithm: lru + +# 示例:直接替换标量值 +# mixed-port: 10802 +# allow-lan: false + +# 示例:合并 tun 配置(仅修改指定字段,其余保留) +# tun: +# enable: true +# stack: gvisor + +# ---------------------------------------------------------- + +# 2. 强制覆盖 (key!) - 强制替换整个值,不做递归合并 +# 示例:替换整个 dns.fake-ip-filter 数组 +# dns: +# fake-ip-filter!: +# - '*.lan' +# - 'new.domain.com' + +# 示例:强制覆盖整个 rules 数组 +# rules!: +# - DOMAIN-SUFFIX,example.com,DIRECT +# - MATCH,PROXY + +# 示例:使用 <> 强制覆盖整个 dns 配置(键名含特殊字符时) +# !: +# enable: false +# nameserver: +# - '114.114.114.114' + +# ---------------------------------------------------------- + +# 3. 数组后置 (key+) - 将新元素追加到数组末尾 +# 示例:向 dns.nameserver 末尾追加 DNS +# dns: +# nameserver+: +# - '1.1.1.1' +# - '8.8.8.8' + +# 示例:向 rules 末尾追加规则 +# rules+: +# - DOMAIN-SUFFIX,example.com,REJECT + +# 示例:使用 <> 后置 +# dns: +# +: +# - '8.8.8.8' + +# ---------------------------------------------------------- + +# 4. 数组前置 (+key / +) - 将新元素插入到数组开头 +# 示例:向 dns.nameserver 开头插入 DNS +# dns: +# +nameserver: +# - '223.5.5.5' +# - '119.29.29.29' + +# 示例:向 rules 开头插入规则(优先匹配) +# +rules: +# - DOMAIN-SUFFIX,priority.com,DIRECT + +# 示例:使用 +<> 前置插入(键名含特殊字符时) +# dns: +# +: +# - '119.29.29.29' + +# ---------------------------------------------------------- + +# 5. 数组删除 (key-) - 从数组中移除指定元素,非数组则删除整个键 +# 示例:从 dns.nameserver 中移除指定 DNS +# dns: +# nameserver-: +# - '8.8.8.8' +# - '8.8.4.4' + +# 示例:从 rules 中移除指定规则 +# rules-: +# - DOMAIN-SUFFIX,old.com,REJECT + +# 示例:删除整个键(值为 null/~ 或空) +# dns: +# cache-algorithm-: + +# ---------------------------------------------------------- + +# 6. 批量条件更新 (key*) - 按 where 条件匹配集合元素,用 set 子句更新 +# +# 支持的集合类型: +# - 数组(元素为 Hash 或 String) +# - Hash(值为 Hash) +# +# where 条件支持: +# - 普通值相等: type: select +# - 正则匹配: name: '/^HK/' +# - 数组包含: proxies: ['proxy1'] (检查数组是否包含所有指定元素) +# - Hash 键匹配: key: 'some-key' (仅用于 Hash 类型集合) +# - 字符串匹配: value: 'some-string' (仅用于字符串数组) +# +# set 子句支持的操作符(同顶层操作符): +# field → 直接覆盖该字段 +# field! → 强制覆盖该字段 +# field+ → 数组后置追加 +# +field → 数组前置插入 +# field- → 数组差集删除 / 非数组则删除该键 +# value → 替换字符串数组中的匹配项 +# value: ~ → 删除字符串数组中的匹配项 +# key: ~ → 删除 Hash 中的匹配键(仅 Hash 集合) +# key-: → 同上 + +# 示例:按 type 匹配,替换 proxy-groups 的 proxies +# proxy-groups*: +# where: +# type: select +# set: +# proxies: +# - 'new-proxy1' +# - 'new-proxy2' + +# 示例:按 type 匹配,向 proxies 末尾追加节点 +# proxy-groups*: +# where: +# type: select +# set: +# proxies+: +# - 'new-proxy3' + +# 示例:按 type 匹配,向 proxies 开头插入节点 +# proxy-groups*: +# where: +# type: url-test +# set: +# +proxies: +# - 'new-proxy1' + +# 示例:按 type 匹配,从 proxies 中移除指定节点 +# proxy-groups*: +# where: +# type: select +# set: +# proxies-: +# - 'old-proxy1' +# - 'old-proxy2' + +# 示例:使用数组包含条件(proxies 中必须包含指定元素才匹配) +# proxy-groups*: +# where: +# type: select +# proxies: +# - 'old-proxy1' +# set: +# proxies: +# - 'new-proxy1' +# - 'new-proxy2' + +# 示例:使用正则匹配 name 字段 +# proxy-groups*: +# where: +# name: '/^HK/' +# set: +# +proxies: +# - 'hk-new-proxy' + +# 示例:删除 proxy-groups 中某个字段(set value 为 null/~) +# proxy-groups*: +# where: +# name: Proxy +# set: +# icon-: + +# 示例:按 type 匹配修改 proxies 中 socks5 节点端口 +# proxies*: +# where: +# type: socks5 +# set: +# port: 1080 + +# 示例:更新 hosts Hash 中的指定键 +# hosts*: +# where: +# key: '*.mihomo.dev' +# set: +# '*.mihomo.dev': '::1' + +# 示例:删除 hosts Hash 中的匹配键 +# hosts*: +# where: +# key: '*.old.dev' +# set: +# key-: + +# 示例:替换字符串数组中的匹配项 +# rules*: +# where: +# value: 'DOMAIN-SUFFIX,old.com,REJECT' +# set: +# value: 'DOMAIN-SUFFIX,new.com,DIRECT' + +# 示例:使用正则匹配并删除字符串数组中的规则 +# rules*: +# where: +# value: '/,REJECT$/' +# set: +# value: + +# 示例:删除 fake-ip-filter 中的指定项 +# dns: +# fake-ip-filter*: +# where: +# value: '+.localhost.ptlogin2.qq.com' +# set: +# value: + +# 示例:使用 <> 批量更新 +# *: +# where: +# type: url-test +# set: +# interval: 300 + +# ---------------------------------------------------------- + +# 7. 组合操作 - 在同一块内同时使用多个操作符 +# 示例:同时前置和后置追加 DNS(必须写在同一 dns 块内) +# dns: +# nameserver+: +# - '1.0.0.1' +# +nameserver: +# - '119.29.29.29' + +# 示例:同时删除旧 DNS 并前置插入新 DNS +# dns: +# nameserver-: +# - '8.8.8.8' +# +nameserver: +# - '223.5.5.5' + +# ---------------------------------------------------------- + +# 8. 语法补充 - 适用于键名含特殊字符时 +# 后缀支持:+(后置)、-(删除)、!(强制覆盖)、*(批量更新),空串为默认合并 +# 前置插入请使用 + 写法(前缀形式) + +# 示例:使用 <> 后置追加 +# dns: +# +: +# - '8.8.8.8' + +# 示例:使用 <> 删除数组元素 +# dns: +# -: +# - '8.8.8.8' + +# 示例:使用 <> 强制覆盖 +# dns: +# !: +# - '114.114.114.114' + +# 示例:使用 <> 批量更新(等同于 key*) +# *: +# where: +# type: url-test +# set: +# interval: 300 + +# 示例:使用 +<> 前置插入(键名含特殊字符时的前置写法) +# dns: +# +: +# - '119.29.29.29' + # ========================================================== # ==== 以下为仅修改插件设置示例 ==== # ========================================================== diff --git a/luci-app-openclash/root/etc/openclash/rule_provider/oc-cn-domain.mrs b/luci-app-openclash/root/etc/openclash/rule_provider/oc-cn-domain.mrs new file mode 100644 index 000000000..06ac5111d Binary files /dev/null and b/luci-app-openclash/root/etc/openclash/rule_provider/oc-cn-domain.mrs differ diff --git a/luci-app-openclash/root/etc/uci-defaults/luci-openclash b/luci-app-openclash/root/etc/uci-defaults/luci-openclash index c32e44430..0f830a1eb 100644 --- a/luci-app-openclash/root/etc/uci-defaults/luci-openclash +++ b/luci-app-openclash/root/etc/uci-defaults/luci-openclash @@ -174,8 +174,10 @@ if [ -f "/tmp/openclash.bak" ]; then cp -rf "/tmp/openclash/." "/etc/openclash/" >/dev/null 2>&1 #ui if [ -d "/tmp/openclash_ui/" ]; then - rm -rf "/usr/share/openclash/ui/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_ui/." "/usr/share/openclash/ui/" >/dev/null 2>&1 + if [ -d "/tmp/openclash_ui/metacubexd/" ] || [ -d "/tmp/openclash_ui/zashboard/" ] || [ -d "/tmp/openclash_ui/yacd/" ] || [ -d "/tmp/openclash_ui/dashboard/" ]; then + rm -rf "/usr/share/openclash/ui/" >/dev/null 2>&1 + cp -rf "/tmp/openclash_ui/." "/usr/share/openclash/ui/" >/dev/null 2>&1 + fi rm -rf "/tmp/openclash_ui/" >/dev/null 2>&1 fi #pac @@ -264,6 +266,6 @@ sed -i '/.*kB maximum content size*/c\export let HTTP_MAX_CONTENT = 1024*10240; /etc/init.d/uhttpd restart >/dev/null 2>&1 -rm -f /tmp/luci-indexcache >/dev/null 2>&1 -rm -f /tmp/luci-indexcache.* >/dev/null 2>&1 +rm -rf /tmp/luci-indexcache /tmp/luci-indexcache.* /var/luci-indexcache /var/luci-indexcache.* >/dev/null 2>&1 +rm -rf /tmp/luci-modulecache /var/luci-modulecache >/dev/null 2>&1 exit 0 diff --git a/luci-app-openclash/root/usr/share/openclash/YAML.rb b/luci-app-openclash/root/usr/share/openclash/YAML.rb index a816dfbcb..03090e28a 100644 --- a/luci-app-openclash/root/usr/share/openclash/YAML.rb +++ b/luci-app-openclash/root/usr/share/openclash/YAML.rb @@ -1,119 +1,457 @@ module YAML - class << self - alias_method :load, :unsafe_load if YAML.respond_to? :unsafe_load - alias_method :original_dump, :dump - alias_method :original_load_file, :load_file - end + class << self + alias_method :load, :unsafe_load if YAML.respond_to? :unsafe_load + alias_method :original_dump, :dump + alias_method :original_load_file, :load_file + end - def self.LOG(info) - puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " [Info] " + "#{info}" - end + def self.LOG(info) + puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " [Info] " + "#{info}" + end - def self.LOG_ERROR(info) - puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " [Error] " + "#{info}" - end + def self.LOG_ERROR(info) + puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " [Error] " + "#{info}" + end - def self.LOG_WARN(info) - puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " [Warning] " + "#{info}" - end + def self.LOG_WARN(info) + puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " [Warning] " + "#{info}" + end - def self.LOG_TIP(info) - puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " [Tip] " + "#{info}" - end + def self.LOG_TIP(info) + puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " [Tip] " + "#{info}" + end - # Keep `short-id` as string before YAML parsing so leading zeros are preserved. - # This is required for REALITY short-id values like `00000000`. - def self.load_file(filename, *args, **kwargs) - yaml_content = File.read(filename) - processed_content = fix_short_id_quotes(yaml_content) + def self.load_file(filename, *args, **kwargs) + yaml_content = File.read(filename) + processed_content = fix_short_id_quotes(yaml_content) - if kwargs.empty? - load(processed_content, *args) - else - load(processed_content, *args, **kwargs) - end - end + load(processed_content, *args, **kwargs) + end - def self.dump(obj, io = nil, **options) - begin - if io.nil? - yaml_content = original_dump(obj, **options) - fix_short_id_quotes(yaml_content) - elsif io.respond_to?(:write) - require 'stringio' - temp_io = StringIO.new - original_dump(obj, temp_io, **options) - yaml_content = temp_io.string - processed_content = fix_short_id_quotes(yaml_content) - io.write(processed_content) - io - else - yaml_content = original_dump(obj, io, **options) - fix_short_id_quotes(yaml_content) - end - rescue => e - LOG_ERROR("Write file failed:【%s】" % [e.message]) - nil - end - end + def self.dump(obj, io = nil, **options) + begin + yaml_content = original_dump(obj, **options) + processed = fix_short_id_quotes(yaml_content) + if io.nil? + processed + elsif io.respond_to?(:write) + io.write(processed) + io + else + processed + end + rescue => e + LOG_ERROR("Write file failed:【%s】" % [e.message]) + nil + end + end - private + private - SHORT_ID_REGEX = /^(\s*)short-id:\s*(.*)$/ - LIST_ITEM_REGEX = /^(\s*)-\s*(.*)$/ - KEY_REGEX = /^(\s*)([a-zA-Z0-9_-]+):\s*(.*)$/ - QUOTED_VALUE_REGEX = /^["'].*["']$/ + # fix_short_id_quotes: + # Purpose: ensure YAML `short-id` values are emitted with the intended + # representation when dumping or re-writing YAML files. + # Behavior: + # - Non-null, non-empty scalar `short-id` values (and items inside + # `short-id` sequences) are written as double-quoted strings. + # - Empty strings are preserved as empty quoted strings ("" remains ""). + # - Null values are preserved and may be emitted explicitly (e.g. `! ""). + # Lastly, use gsub to clean up any `! ""` tags + # Examples: + # Input: short-id: 00000000 -> Output: short-id: "00000000" + # Input: short-id: "" -> Output: short-id: "" + # Input: short-id: "abc123" -> Output: short-id: "abc123" + # Input: short-id: "1600e237" -> Output: short-id: "1600e237" + # Input: short-id: null -> Output: short-id: "" - # Inline map support, e.g. reality-opts: { ..., short-id: 00000000 } - INLINE_SHORT_ID_REGEX = /(short-id:\s*)(?!["'\[])([^\s,"'{}\[\]\n\r]+)(?=\s*(?:[,}\]\n\r]|$))/m.freeze + def self.fix_short_id_quotes(yaml_content) + return yaml_content unless yaml_content.include?('short-id:') - def self.fix_short_id_quotes(yaml_content) - return yaml_content unless yaml_content.include?('short-id:') + begin + stream = Psych.parse_stream(yaml_content) - begin - # First, normalize inline-map style unquoted short-id. - processed = yaml_content.gsub(INLINE_SHORT_ID_REGEX) do - "#{$1}\"#{$2}\"" - end + traverse = lambda do |node| + case node + when Psych::Nodes::Mapping + children = node.children || [] + i = 0 + while i < children.length + key = children[i] + val = children[i + 1] + if key.is_a?(Psych::Nodes::Scalar) && key.value == 'short-id' + if val.is_a?(Psych::Nodes::Scalar) + is_null_scalar = (val.tag == 'tag:yaml.org,2002:null') || (val.tag == '!!null') || (val.value =~ /^\s*(~|null|NULL|Null)\s*$/) + unless is_null_scalar + val.tag = nil + val.style = defined?(Psych::Nodes::Scalar::DOUBLE_QUOTED) ? Psych::Nodes::Scalar::DOUBLE_QUOTED : 2 + end + elsif val.is_a?(Psych::Nodes::Sequence) + val.children.each do |child| + if child.is_a?(Psych::Nodes::Scalar) + is_null_child = (child.tag == 'tag:yaml.org,2002:null') || (child.tag == '!!null') || (child.value =~ /^\s*(~|null|NULL|Null)\s*$/) + unless is_null_child + child.tag = nil + child.style = defined?(Psych::Nodes::Scalar::DOUBLE_QUOTED) ? Psych::Nodes::Scalar::DOUBLE_QUOTED : 2 + end + end + end + end + else + traverse.call(key) if key.respond_to?(:children) + traverse.call(val) if val.respond_to?(:children) + end + i += 2 + end + when Psych::Nodes::Sequence + (node.children || []).each { |c| traverse.call(c) } + when Psych::Nodes::Document, Psych::Nodes::Stream + (node.children || []).each { |c| traverse.call(c) } + else + if node.respond_to?(:children) + (node.children || []).each { |c| traverse.call(c) } + end + end + end - lines = processed.lines - short_id_indices = lines.each_index.select { |i| lines[i] =~ SHORT_ID_REGEX } - short_id_indices.each do |short_id_index| - line = lines[short_id_index] - if line =~ SHORT_ID_REGEX - indent = $1 - value = $2.strip - if value.empty? - (short_id_index + 1...lines.size).each do |i| - line = lines[i] - next if line.strip.empty? - if line[/^\s*/].length <= short_id_indent_len - break - end - if line =~ LIST_ITEM_REGEX - indent = $1 - value = $2.strip - if value =~ KEY_REGEX - break - end - if value !~ QUOTED_VALUE_REGEX - lines[i] = "#{indent}- \"#{value}\"\n" - end - elsif line =~ KEY_REGEX - break - end - end - else - if value !~ QUOTED_VALUE_REGEX - lines[short_id_index] = "#{indent}short-id: \"#{value}\"\n" - end - end - end - end - lines.join - rescue => e - LOG_ERROR("Fix short-id values type failed:【%s】" % [e.message]) - yaml_content - end - end -end + stream.children.each do |doc_node| + if doc_node.is_a?(Psych::Nodes::Document) + traverse.call(doc_node.root) if doc_node.root + end + end + + if stream.respond_to?(:to_yaml) + processed_yaml = stream.to_yaml + processed_yaml = processed_yaml.gsub(/^([ \t]*short-id:\s*)!\s*/, "\\1") + processed_yaml + else + yaml_content + end + rescue => e + LOG_ERROR("Fix short-id values type failed:【%s】" % [e.message]) + yaml_content + end + end + + def self.overwrite(base, override) + return override if base.nil? + return base if override.nil? + + current_key = nil + current_operation = nil + + begin + case override + when Hash + result = base.is_a?(Hash) ? base.dup : {} + + override.each do |key, value| + current_key = key + processed_key, operation = parse_key(key) + current_operation = operation + + applied = apply_operation(result[processed_key], value, operation) + if applied.equal?(DELETED_SENTINEL) + result.delete(processed_key) + else + result[processed_key] = applied + end + end + + result + else + override + end + rescue => e + LOG_ERROR("YAML overwrite failed:【key: %s, operation: %s, error: %s】" % [current_key, current_operation, e.message]) + base + end + end + + private + + def self.parse_key(key) + key_str = key.to_s + + # + + if key_str.start_with?('+<') && key_str.include?('>') + close_idx = key_str.index('>') + inner_key = key_str[2...close_idx] + return inner_key, :prepend_array + end + + # suffix + if key_str.start_with?('<') && key_str.include?('>') + close_idx = key_str.index('>') + inner_key = key_str[1...close_idx] + suffix = key_str[(close_idx + 1)..-1] + return inner_key, determine_operation(suffix) + end + + # 前缀 +key + if key_str.start_with?('+') + return key_str[1..-1], :prepend_array + end + + # 尾部(支持 +, !, *, -) + if key_str =~ /^(.*?)([+!*\-])$/ + return Regexp.last_match(1), determine_operation(Regexp.last_match(2)) + end + + [key_str, :merge] + end + + def self.determine_operation(suffix) + case suffix + when '+' + :append_array + when '-' + :delete + when '!' + :force_overwrite + when '*' + :batch_update + else + :merge + end + end + + def self.match_value(target, condition) + return false if target.nil? || condition.nil? + + begin + if condition.is_a?(String) && condition.start_with?('/') && condition.end_with?('/') + pattern = condition[1...-1] + regexp = Regexp.new(pattern) + if target.is_a?(Array) + target.any? { |item| item.to_s =~ regexp } + else + target.to_s =~ regexp + end + elsif condition.is_a?(Array) && target.is_a?(Array) + condition.all? { |c| target.include?(c) } + else + target == condition + end + rescue => e + LOG_ERROR("YAML overwrite failed:【(match value) => target: %s, condition: %s, error: %s】" % [target, condition, e.message]) + false + end + end + + def self.deep_dup(obj) + case obj + when Array + obj.map { |x| deep_dup(x) } + when Hash + obj.transform_values { |v| deep_dup(v) } + else + obj.dup rescue obj + end + end + + def self.merge_hash(base, value, prepend: false) + if prepend + result = {} + + value.each do |k, v| + if base.key?(k) + result[k] = apply_operation(base[k], v, :merge) + else + result[k] = deep_dup(v) + end + end + + base.each do |k, v| + result[k] = deep_dup(v) unless result.key?(k) + end + + result + else + result = deep_dup(base) + + value.each do |k, v| + if result.key?(k) + result[k] = apply_operation(result[k], v, :merge) + else + result[k] = deep_dup(v) + end + end + + result + end + end + + def self.delete_from_hash(base, value) + result = deep_dup(base) + + case value + when Array + value.each { |k| result.delete(k) } + when Hash + value.each do |k, v| + if v.nil? || v == true + result.delete(k) + elsif result[k].is_a?(Hash) && v.is_a?(Hash) + nested = apply_operation(result[k], v, :delete) + if nested.equal?(DELETED_SENTINEL) + result.delete(k) + else + result[k] = nested + end + else + result.delete(k) + end + end + else + result.delete(value) + end + + result + end + + DELETED_SENTINEL = Object.new.freeze + + def self.apply_operation(base, value, operation) + case operation + when :delete + if base.is_a?(Array) && value.is_a?(Array) + base - value + elsif base.is_a?(Array) && !value.nil? + base - [value] + elsif base.is_a?(Hash) + delete_from_hash(base, value) + else + DELETED_SENTINEL + end + when :force_overwrite + deep_dup(value) + when :prepend_array + if base.is_a?(Array) && value.is_a?(Array) + (deep_dup(value) + base).uniq + elsif base.is_a?(Hash) && value.is_a?(Hash) + merge_hash(base, value, prepend: true) + else + deep_dup(value) + end + when :append_array + if base.is_a?(Array) && value.is_a?(Array) + base_dup = base.dup + deep_dup(value).each { |v| base_dup.delete(v) } + base_dup + deep_dup(value) + elsif base.is_a?(Hash) && value.is_a?(Hash) + merge_hash(base, value, prepend: false) + else + deep_dup(value) + end + when :batch_update + batch_update_items(base, value) + when :merge + if base.is_a?(Hash) && value.is_a?(Hash) + overwrite(base, value) + elsif value.nil? + base + else + deep_dup(value) + end + else + deep_dup(value) + end + end + + def self.apply_set_fields(item, set_values) + keys_to_delete = [] + + set_values.each do |k, v| + processed_key, operation = parse_key(k) + result = apply_operation(item[processed_key], v, operation) + if result.equal?(DELETED_SENTINEL) + keys_to_delete << processed_key + else + item[processed_key] = result + end + end + + keys_to_delete.each { |k| item.delete(k) } + end + + def self.match_item(item, where_conditions, key = nil) + where_conditions.all? do |k, v| + if k == 'key' && !key.nil? + match_value(key, v) + elsif item.is_a?(Hash) + match_value(item[k] || item[k.to_s], v) + elsif item.is_a?(String) && k == 'value' + match_value(item, v) + else + false + end + end + end + + def self.batch_update_items(collection, update_spec) + return collection unless update_spec.is_a?(Hash) + + begin + where_conditions = update_spec['where'] || {} + set_values = update_spec['set'] || {} + + if collection.is_a?(Array) + result = collection.dup + delete_indices = [] + + result.each_with_index do |item, index| + match = match_item(item, where_conditions) + + if match + if item.is_a?(Hash) + apply_set_fields(item, set_values) + elsif item.is_a?(String) && set_values.key?('value') + new_value = set_values['value'] + if new_value.nil? + delete_indices << index + else + result[index] = deep_dup(new_value) + end + end + end + end + + delete_indices.reverse_each { |i| result.delete_at(i) } + result + elsif collection.is_a?(Hash) + if where_conditions.any? { |k, _| k != 'key' } && + match_item(collection, where_conditions) + result = collection.dup + apply_set_fields(result, set_values) + result + else + result = collection.dup + keys_to_delete = [] + + result.each do |key, value| + next unless value.is_a?(Hash) + match = match_item(value, where_conditions, key) + + if match + if set_values.key?('key-') || (set_values.key?('key') && set_values['key'].nil?) + keys_to_delete << key + else + apply_set_fields(value, set_values) + end + end + end + + keys_to_delete.each { |k| result.delete(k) } + result + end + elsif collection.nil? + nil + else + collection + end + rescue => e + LOG_ERROR("YAML overwrite failed:【(batch update) => update_spec: %s, error: %s】" % [update_spec, e.message]) + collection + end + end +end \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash.sh b/luci-app-openclash/root/usr/share/openclash/openclash.sh index 58a85325c..227148371 100755 --- a/luci-app-openclash/root/usr/share/openclash/openclash.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash.sh @@ -86,17 +86,6 @@ DOWNLOAD_RESULT=$? config_cus_up() { - if [ -z "$CONFIG_PATH" ]; then - for file_name in /etc/openclash/config/* - do - if [ -f "$file_name" ]; then - CONFIG_PATH=$file_name - break - fi - done - uci -q set openclash.config.config_path="$CONFIG_PATH" - uci commit openclash - fi if [ -z "$subscribe_url_param" ]; then if [ -n "$key_match_param" ] || [ -n "$key_ex_match_param" ]; then LOG_OUT "Config File【$name】Start Picking Nodes..." @@ -192,6 +181,10 @@ config_su_check() mv "$CFG_FILE" "$CONFIG_FILE" 2>/dev/null LOG_OUT "Config File【$name】Update Successful!" fi + if [ -z "$CONFIG_PATH" ]; then + uci -q set openclash.config.config_path="$CONFIG_FILE" + uci commit openclash + fi if [ "$CONFIG_FILE" == "$CONFIG_PATH" ]; then restart=1 fi @@ -335,13 +328,13 @@ sub_info_get() config_get "udp" "$section" "udp" "" config_get "skip_cert_verify" "$section" "skip_cert_verify" "" config_get "sort" "$section" "sort" "" - config_get "convert_address" "$section" "convert_address" "" + config_get "convert_address" "$section" "convert_address" "https://api.asailor.org/sub" config_get "template" "$section" "template" "" config_get "node_type" "$section" "node_type" "" config_get "rule_provider" "$section" "rule_provider" "" config_get "custom_template_url" "$section" "custom_template_url" "" config_get "de_ex_keyword" "$section" "de_ex_keyword" "" - config_get "sub_ua" "$section" "sub_ua" "clash.meta" + config_get "sub_ua" "$section" "sub_ua" "clash-verge/v2.4.5" CONFIG_FILE="/etc/openclash/config/$name.yaml" CFG_FILE="/tmp/$name.yaml" diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_curl.sh b/luci-app-openclash/root/usr/share/openclash/openclash_curl.sh index c9c22b22a..a5ffe84ba 100755 --- a/luci-app-openclash/root/usr/share/openclash/openclash_curl.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_curl.sh @@ -74,7 +74,7 @@ DOWNLOAD_FILE_CURL() { fi else CURL_OUTPUT=$(curl -w "\n%{http_code}" -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 -H "User-Agent: ${DOWNLOAD_UA}" "$DOWNLOAD_URL" -o "$DOWNLOAD_PATH" 2>&1) - EXIR_CODE=${PIPESTATUS[0]} + EXIR_CODE=$? HTTP_CODE=$(echo "$CURL_OUTPUT" | tail -n1) if [ "$EXIR_CODE" -ne 0 ] || [ "$HTTP_CODE" -ne 200 ]; then diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_geo.sh b/luci-app-openclash/root/usr/share/openclash/openclash_geo.sh new file mode 100755 index 000000000..020e44986 --- /dev/null +++ b/luci-app-openclash/root/usr/share/openclash/openclash_geo.sh @@ -0,0 +1,179 @@ +#!/bin/bash +. /usr/share/openclash/openclash_ps.sh +. /usr/share/openclash/log.sh +. /usr/share/openclash/openclash_curl.sh +. /usr/share/openclash/uci.sh + +set_lock() { + exec 888>"/tmp/lock/openclash_update_databases.lock" 2>/dev/null + flock -x 888 2>/dev/null +} + +del_lock() { + flock -u 888 2>/dev/null + rm -rf "/tmp/lock/openclash_update_databases.lock" 2>/dev/null +} + +set_lock +inc_job_counter + +small_flash_memory=$(uci_get_config "small_flash_memory") +github_address_mod=$(uci_get_config "github_address_mod" || echo 0) +restart=0 + +update_one() { + local type="$1" + local custom_key="$2" + local tmpfile="$3" + local path="$4" + local name="$5" + local min_size=10240 + local download_url="" + + local custom_url=$(uci_get_config "$custom_key") + + if [ "$small_flash_memory" != "1" ]; then + mkdir -p /etc/openclash + else + mkdir -p /tmp/etc/openclash + fi + + case "$type" in + geoip) + if [ -z "$custom_url" ]; then + if [ "$github_address_mod" != "0" ]; then + if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then + download_url="${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat" + else + download_url="${github_address_mod}https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" + fi + else + download_url="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" + fi + else + download_url="$custom_url" + fi + ;; + geosite) + if [ -z "$custom_url" ]; then + if [ "$github_address_mod" != "0" ]; then + if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then + download_url="${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat" + else + download_url="${github_address_mod}https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" + fi + else + download_url="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" + fi + else + download_url="$custom_url" + fi + ;; + geoasn) + if [ -z "$custom_url" ]; then + if [ "$github_address_mod" != "0" ]; then + if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then + download_url="${github_address_mod}gh/xishang0128/geoip@release/GeoLite2-ASN.mmdb" + else + download_url="${github_address_mod}https://github.com/xishang0128/geoip/releases/latest/download/GeoLite2-ASN.mmdb" + fi + else + download_url="https://github.com/xishang0128/geoip/releases/latest/download/GeoLite2-ASN.mmdb" + fi + else + download_url="$custom_url" + fi + ;; + ipdb) + if [ -z "$custom_url" ]; then + if [ "$github_address_mod" != "0" ]; then + if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then + download_url="${github_address_mod}gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb" + else + download_url="${github_address_mod}https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb" + fi + else + download_url="https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb" + fi + else + download_url="$custom_url" + fi + ;; + *) + return 1 + ;; + esac + + LOG_OUT "【$name】Start Downloading Database..." + + DOWNLOAD_FILE_CURL "$download_url" "/tmp/$tmpfile" "$path" + DOWNLOAD_RESULT=$? + if [ "$DOWNLOAD_RESULT" -eq 0 ] && [ -s "/tmp/$tmpfile" ]; then + if head -c 512 "/tmp/$tmpfile" | grep -qiE "/dev/null | awk '{print $1}' || echo "$min_size") -lt "$min_size" ]; then + LOG_OUT "【$name】Download Failed: File Size Too Small, Abort Update..." + rm -rf "/tmp/$tmpfile" + else + LOG_OUT "【$name】Download Success, Check Updated..." + cmp -s "/tmp/$tmpfile" "$path" + if [ "$?" -ne 0 ]; then + LOG_OUT "【$name】Has Been Updated, Starting To Replace The Old Version..." + case "$type" in + geoip) + rm -rf "/etc/openclash/geoip.dat" + ;; + geosite) + rm -rf "/etc/openclash/geosite.dat" + ;; + geoasn) + rm -rf "/etc/openclash/GeoLite2-ASN.mmdb" + ;; + esac + mv "/tmp/$tmpfile" "$path" >/dev/null 2>&1 + LOG_OUT "【$name】Update Successful!" + restart=1 + else + LOG_OUT "【$name】No Change, Do Nothing..." + fi + fi + elif [ "$DOWNLOAD_RESULT" -eq 2 ]; then + LOG_OUT "【$name】No Change, Do Nothing..." + else + LOG_OUT "【$name】Update Error, Please Try Again Later..." + fi + + rm -rf "/tmp/$tmpfile" >/dev/null 2>&1 +} + +case "$1" in + all) + update_one geoip "geoip_custom_url" "GeoIP.dat" "/etc/openclash/GeoIP.dat" "GeoIP.dat" + update_one geosite "geosite_custom_url" "GeoSite.dat" "/etc/openclash/GeoSite.dat" "GeoSite.dat" + update_one geoasn "geoasn_custom_url" "GeoLite2-ASN.mmdb" "/etc/openclash/ASN.mmdb" "ASN.mmdb" + update_one ipdb "geo_custom_url" "Country.mmdb" "/etc/openclash/Country.mmdb" "Country.mmdb" + ;; + geoip) + update_one geoip "geoip_custom_url" "GeoIP.dat" "/etc/openclash/GeoIP.dat" "GeoIP.dat" + ;; + geosite) + update_one geosite "geosite_custom_url" "GeoSite.dat" "/etc/openclash/GeoSite.dat" "GeoSite.dat" + ;; + geoasn) + update_one geoasn "geoasn_custom_url" "GeoLite2-ASN.mmdb" "/etc/openclash/ASN.mmdb" "ASN.mmdb" + ;; + ipdb) + update_one ipdb "geo_custom_url" "Country.mmdb" "/etc/openclash/Country.mmdb" "Country.mmdb" + ;; + *) + echo "Usage: $0 {all|geoip|geosite|geoasn|ipdb}" + del_lock + dec_job_counter_and_restart "$restart" + exit 1 + ;; +esac + +SLOG_CLEAN +dec_job_counter_and_restart "$restart" +del_lock diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_geoasn.sh b/luci-app-openclash/root/usr/share/openclash/openclash_geoasn.sh deleted file mode 100755 index 0665d21b6..000000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_geoasn.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/log.sh -. /usr/share/openclash/openclash_curl.sh -. /usr/share/openclash/uci.sh - -set_lock() { - exec 874>"/tmp/lock/openclash_geoasn.lock" 2>/dev/null - flock -x 874 2>/dev/null -} - -del_lock() { - flock -u 874 2>/dev/null - rm -rf "/tmp/lock/openclash_geoasn.lock" 2>/dev/null -} - -set_lock -inc_job_counter - -small_flash_memory=$(uci_get_config "small_flash_memory") -GEOASN_CUSTOM_URL=$(uci_get_config "geoasn_custom_url") -github_address_mod=$(uci_get_config "github_address_mod" || echo 0) -restart=0 - -if [ "$small_flash_memory" != "1" ]; then - geoasn_path="/etc/openclash/ASN.mmdb" - mkdir -p /etc/openclash -else - geoasn_path="/tmp/etc/openclash/ASN.mmdb" - mkdir -p /tmp/etc/openclash -fi -LOG_OUT "Start Downloading Geo ASN Database..." -if [ -z "$GEOASN_CUSTOM_URL" ]; then - if [ "$github_address_mod" != "0" ]; then - if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then - DOWNLOAD_URL="${github_address_mod}gh/xishang0128/geoip@release/GeoLite2-ASN.mmdb" - else - DOWNLOAD_URL="${github_address_mod}https://github.com/xishang0128/geoip/releases/latest/download/GeoLite2-ASN.mmdb" - fi - else - DOWNLOAD_URL="https://github.com/xishang0128/geoip/releases/latest/download/GeoLite2-ASN.mmdb" - fi -else - DOWNLOAD_URL=$GEOASN_CUSTOM_URL -fi -DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "/tmp/GeoLite2-ASN.mmdb" "$geoasn_path" -DOWNLOAD_RESULT=$? -if [ "$DOWNLOAD_RESULT" -eq 0 ] && [ -s "/tmp/GeoLite2-ASN.mmdb" ]; then - LOG_OUT "Geo ASN Database Download Success, Check Updated..." - cmp -s /tmp/GeoLite2-ASN.mmdb "$geoasn_path" - if [ "$?" -ne "0" ]; then - LOG_OUT "Geo ASN Database Has Been Updated, Starting To Replace The Old Version..." - rm -rf "/etc/openclash/GeoLite2-ASN.mmdb" - mv /tmp/GeoLite2-ASN.mmdb "$geoasn_path" >/dev/null 2>&1 - LOG_OUT "Geo ASN Database Update Successful!" - restart=1 - else - LOG_OUT "Updated Geo ASN Database No Change, Do Nothing..." - fi -elif [ "$DOWNLOAD_RESULT" -eq 2 ]; then - LOG_OUT "Updated Geo ASN Database No Change, Do Nothing..." -else - LOG_OUT "Geo ASN Database Update Error, Please Try Again Later..." -fi - -rm -rf /tmp/GeoLite2-ASN.mmdb >/dev/null 2>&1 - -SLOG_CLEAN -dec_job_counter_and_restart "$restart" -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_geoip.sh b/luci-app-openclash/root/usr/share/openclash/openclash_geoip.sh deleted file mode 100755 index b7df09906..000000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_geoip.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/log.sh -. /usr/share/openclash/openclash_curl.sh -. /usr/share/openclash/uci.sh - -set_lock() { - exec 873>"/tmp/lock/openclash_geoip.lock" 2>/dev/null - flock -x 873 2>/dev/null -} - -del_lock() { - flock -u 873 2>/dev/null - rm -rf "/tmp/lock/openclash_geoip.lock" 2>/dev/null -} - -set_lock -inc_job_counter - -small_flash_memory=$(uci_get_config "small_flash_memory") -GEOIP_CUSTOM_URL=$(uci_get_config "geoip_custom_url") -github_address_mod=$(uci_get_config "github_address_mod" || echo 0) -restart=0 - -if [ "$small_flash_memory" != "1" ]; then - geoip_path="/etc/openclash/GeoIP.dat" - mkdir -p /etc/openclash -else - geoip_path="/tmp/etc/openclash/GeoIP.dat" - mkdir -p /tmp/etc/openclash -fi -LOG_OUT "Start Downloading GeoIP Dat..." -if [ -z "$GEOIP_CUSTOM_URL" ]; then - if [ "$github_address_mod" != "0" ]; then - if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then - DOWNLOAD_URL="${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat" - else - DOWNLOAD_URL="${github_address_mod}https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" - fi - else - DOWNLOAD_URL="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" - fi -else - DOWNLOAD_URL=$GEOIP_CUSTOM_URL -fi -DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "/tmp/GeoIP.dat" "$geoip_path" -DOWNLOAD_RESULT=$? -if [ "$DOWNLOAD_RESULT" -eq 0 ] && [ -s "/tmp/GeoIP.dat" ]; then - LOG_OUT "GeoIP Dat Download Success, Check Updated..." - cmp -s /tmp/GeoIP.dat "$geoip_path" - if [ "$?" -ne "0" ]; then - LOG_OUT "GeoIP Dat Has Been Updated, Starting To Replace The Old Version..." - rm -rf "/etc/openclash/geoip.dat" - mv /tmp/GeoIP.dat "$geoip_path" >/dev/null 2>&1 - LOG_OUT "GeoIP Dat Update Successful!" - restart=1 - else - LOG_OUT "Updated GeoIP Dat No Change, Do Nothing..." - fi -elif [ "$DOWNLOAD_RESULT" -eq 2 ]; then - LOG_OUT "Updated GeoIP Dat No Change, Do Nothing..." -else - LOG_OUT "GeoIP Dat Update Error, Please Try Again Later..." -fi - -rm -rf /tmp/GeoIP.dat >/dev/null 2>&1 - -SLOG_CLEAN -dec_job_counter_and_restart "$restart" -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_geosite.sh b/luci-app-openclash/root/usr/share/openclash/openclash_geosite.sh deleted file mode 100755 index 7a70977da..000000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_geosite.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/log.sh -. /usr/share/openclash/openclash_curl.sh -. /usr/share/openclash/uci.sh - -set_lock() { - exec 874>"/tmp/lock/openclash_geosite.lock" 2>/dev/null - flock -x 874 2>/dev/null -} - -del_lock() { - flock -u 874 2>/dev/null - rm -rf "/tmp/lock/openclash_geosite.lock" 2>/dev/null -} - -set_lock -inc_job_counter - -small_flash_memory=$(uci_get_config "small_flash_memory") -GEOSITE_CUSTOM_URL=$(uci_get_config "geosite_custom_url") -github_address_mod=$(uci_get_config "github_address_mod" || echo 0) -restart=0 - -if [ "$small_flash_memory" != "1" ]; then - geosite_path="/etc/openclash/GeoSite.dat" - mkdir -p /etc/openclash -else - geosite_path="/tmp/etc/openclash/GeoSite.dat" - mkdir -p /tmp/etc/openclash -fi -LOG_OUT "Start Downloading GeoSite Database..." -if [ -z "$GEOSITE_CUSTOM_URL" ]; then - if [ "$github_address_mod" != "0" ]; then - if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then - DOWNLOAD_URL="${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat" - else - DOWNLOAD_URL="${github_address_mod}https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" - fi - else - DOWNLOAD_URL="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" - fi -else - DOWNLOAD_URL=$GEOSITE_CUSTOM_URL -fi -DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "/tmp/GeoSite.dat" "$geosite_path" -DOWNLOAD_RESULT=$? -if [ "$DOWNLOAD_RESULT" -eq 0 ] && [ -s "/tmp/GeoSite.dat" ]; then - LOG_OUT "GeoSite Database Download Success, Check Updated..." - cmp -s /tmp/GeoSite.dat "$geosite_path" - if [ "$?" -ne "0" ]; then - LOG_OUT "GeoSite Database Has Been Updated, Starting To Replace The Old Version..." - rm -rf "/etc/openclash/geosite.dat" - mv /tmp/GeoSite.dat "$geosite_path" >/dev/null 2>&1 - LOG_OUT "GeoSite Database Update Successful!" - restart=1 - else - LOG_OUT "Updated GeoSite Database No Change, Do Nothing..." - fi -elif [ "$DOWNLOAD_RESULT" -eq 2 ]; then - LOG_OUT "Updated GeoSite Database No Change, Do Nothing..." -else - LOG_OUT "GeoSite Database Update Error, Please Try Again Later..." -fi - -rm -rf /tmp/GeoSite.dat >/dev/null 2>&1 - -SLOG_CLEAN -dec_job_counter_and_restart "$restart" -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh b/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh deleted file mode 100755 index 4f534c903..000000000 --- a/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/log.sh -. /usr/share/openclash/openclash_curl.sh -. /usr/share/openclash/uci.sh - -set_lock() { - exec 880>"/tmp/lock/openclash_ipdb.lock" 2>/dev/null - flock -x 880 2>/dev/null -} - -del_lock() { - flock -u 880 2>/dev/null - rm -rf "/tmp/lock/openclash_ipdb.lock" 2>/dev/null -} - -set_lock -inc_job_counter - -small_flash_memory=$(uci_get_config "small_flash_memory") -GEOIP_CUSTOM_URL=$(uci_get_config "geo_custom_url") -github_address_mod=$(uci_get_config "github_address_mod" || echo 0) -restart=0 - -if [ "$small_flash_memory" != "1" ]; then - geoip_path="/etc/openclash/Country.mmdb" - mkdir -p /etc/openclash -else - geoip_path="/tmp/etc/openclash/Country.mmdb" - mkdir -p /tmp/etc/openclash -fi -LOG_OUT "Start Downloading Geoip Database..." -if [ -z "$GEOIP_CUSTOM_URL" ]; then - if [ "$github_address_mod" != "0" ]; then - if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then - DOWNLOAD_URL="${github_address_mod}gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb" - else - DOWNLOAD_URL="${github_address_mod}https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb" - fi - else - DOWNLOAD_URL="https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb" - fi -else - DOWNLOAD_URL=$GEOIP_CUSTOM_URL -fi -DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "/tmp/Country.mmdb" "$geoip_path" -DOWNLOAD_RESULT=$? -if [ "$DOWNLOAD_RESULT" -eq 0 ] && [ -s "/tmp/Country.mmdb" ]; then - LOG_OUT "Geoip Database Download Success, Check Updated..." - cmp -s /tmp/Country.mmdb "$geoip_path" - if [ "$?" -ne 0 ]; then - LOG_OUT "Geoip Database Has Been Updated, Starting To Replace The Old Version..." - mv /tmp/Country.mmdb "$geoip_path" >/dev/null 2>&1 - LOG_OUT "Geoip Database Update Successful!" - restart=1 - else - LOG_OUT "Updated Geoip Database No Change, Do Nothing..." - fi -elif [ "$DOWNLOAD_RESULT" -eq 2 ]; then - LOG_OUT "Updated Geoip Database No Change, Do Nothing..." -else - LOG_OUT "Geoip Database Update Error, Please Try Again Later..." -fi - -rm -rf /tmp/Country.mmdb >/dev/null 2>&1 - -SLOG_CLEAN -dec_job_counter_and_restart "$restart" -del_lock \ No newline at end of file diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua b/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua index 04b8fa82c..c1d7d4bf8 100644 --- a/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua +++ b/luci-app-openclash/root/usr/share/openclash/openclash_streaming_unlock.lua @@ -46,7 +46,7 @@ function unlock_auto_select() local no_old_region_unlock = {} local full_support_list = {} local fallback_select = {} - local gorup_i18 = "Group:" + local gorup_i18 = "【"..type.."】Group:" local no_group_find = "failed to search based on keywords and automatically obtain the group, please confirm the validity of the regex!" local full_support_no_area = "full support" local full_support = "full support, area:" @@ -119,6 +119,10 @@ function unlock_auto_select() key_group = FS.uci_get_config("config", "stream_auto_select_group_key_google_not_cn") or "google|谷歌" elseif type == "OpenAI" then key_group = FS.uci_get_config("config", "stream_auto_select_group_key_openai") or "OpenAI|ChatGPT" + elseif type == "Claude" then + key_group = FS.uci_get_config("config", "stream_auto_select_group_key_claude") or "Claude" + elseif type == "Gemini" then + key_group = FS.uci_get_config("config", "stream_auto_select_group_key_gemini") or "Gemini" end if not key_group then key_group = type end else @@ -148,9 +152,9 @@ function unlock_auto_select() --test now proxy region = proxy_unlock_test() if table_include(groups, now_name) then - now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..group_show.."】" + now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..group_show.."】" else - now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..group_show.." ➟ "..now_name.."】" + now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..group_show.." ➟ "..now_name.."】" end if status ~= 2 and status ~= 4 then region = proxy_unlock_test() @@ -244,7 +248,7 @@ function unlock_auto_select() end end if #(value.all) == 0 then - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..no_nodes_filter) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..no_nodes_filter) break end --loop proxy test @@ -274,16 +278,16 @@ function unlock_auto_select() end end if #(proxies) == 0 then - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..group_show.."】"..no_nodes_filter) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..group_show.."】"..no_nodes_filter) break end for p = 1, #(proxies) do proxy = proxies[p] if table_include(groups, proxy) then group_now = get_group_now(info, proxy) - now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..group_show.." ➟ "..group_now.."】" + now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..group_show.." ➟ "..group_now.."】" else - now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..group_show.." ➟ "..proxy.."】" + now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..group_show.." ➟ "..proxy.."】" end --skip tested proxy while true do @@ -303,7 +307,7 @@ function unlock_auto_select() table.insert(full_support_list, {value.all[i], group_name, proxy, region}) if not all_test then print(now..full_support.."【"..region.."】") - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..proxy.."】"..area_i18.."【"..region.."】") + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_success.."【"..proxy.."】"..area_i18.."【"..region.."】") else print(now..full_support.."【"..region.."】") end @@ -312,7 +316,7 @@ function unlock_auto_select() table.insert(full_support_list, {value.all[i], group_name, proxy}) if not all_test then print(now..full_support_no_area) - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..proxy.."】") + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_success.."【"..proxy.."】") else print(now..full_support_no_area) end @@ -372,16 +376,16 @@ function unlock_auto_select() end region = proxy_unlock_test() if table_include(groups, now_name) then - now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..group_show.."】" + now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..group_show.."】" else - now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..group_show.." ➟ "..now_name.."】" + now = os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..group_show.." ➟ "..now_name.."】" end if status == 2 then if region ~= "" then table.insert(full_support_list, {value.all[i], group_name, value.all[i], region}) if not all_test then print(now..full_support.."【"..region.."】") - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, now_name).."】"..area_i18.."【"..region.."】") + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, now_name).."】"..area_i18.."【"..region.."】") else print(now..full_support.."【"..region.."】") end @@ -390,7 +394,7 @@ function unlock_auto_select() table.insert(full_support_list, {value.all[i], group_name, value.all[i]}) if not all_test then print(now..full_support_no_area) - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, now_name).."】") + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, now_name).."】") else print(now..full_support_no_area) end @@ -469,24 +473,24 @@ function unlock_auto_select() group_now = group_now .. area_i18 .. "【"..v[4].."】" end if #full_support_list > 0 then - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_all_full_support..group_now) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_all_full_support..group_now) elseif #no_old_region_unlock > 0 then if not all_test then - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_success_no_old_region..group_now) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_success_no_old_region..group_now) else - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_all_no_old_region..group_now) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_all_no_old_region..group_now) end elseif #other_region_unlock > 0 then if not all_test then - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_faild_other_region..group_now) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_faild_other_region..group_now) else - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_all_other_region..group_now) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_all_other_region..group_now) end else if not all_test then - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_faild..group_now) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_faild..group_now) else - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_all_faild..group_now) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_all_faild..group_now) end end close_connections() @@ -499,7 +503,7 @@ function unlock_auto_select() else group_now = value.name.." ➟ "..proxy_default end - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_faild.."【"..group_now.."】") + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_faild.."【"..group_now.."】") end end elseif #nodes_filter(get_group_now(info, value.name), info) ~= 0 then @@ -509,12 +513,12 @@ function unlock_auto_select() if not all_test then print(now..full_support.."【"..region.."】") end - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, value.name).."】"..area_i18.."【"..region.."】") + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, value.name).."】"..area_i18.."【"..region.."】") else if not all_test then print(now..full_support_no_area) end - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, value.name).."】") + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..value.name.."】"..select_success.."【"..get_group_now(info, value.name).."】") end if not all_test then break @@ -548,7 +552,7 @@ function unlock_auto_select() if status == 2 and not all_test then break end end if not group_match and not auto_get_group then - print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..type.." "..gorup_i18.."【"..key_group.."】"..no_group_find) + print(os.date("%Y-%m-%d %H:%M:%S").." [Info] "..gorup_i18.."【"..key_group.."】"..no_group_find) end --write cache FS.writefile(unlock_cache_file, JSON.stringify(unlock_cache_info)) @@ -817,6 +821,10 @@ function nodes_filter(t, info) regex = FS.uci_get_config("config", "stream_auto_select_node_key_google_not_cn") or "" elseif type == "OpenAI" then regex = FS.uci_get_config("config", "stream_auto_select_node_key_openai") or "" + elseif type == "Claude" then + regex = FS.uci_get_config("config", "stream_auto_select_node_key_claude") or "" + elseif type == "Gemini" then + regex = FS.uci_get_config("config", "stream_auto_select_node_key_gemini") or "" end if class_type(t) == "table" then @@ -877,6 +885,10 @@ function proxy_unlock_test() region = google_not_cn_test() elseif type == "OpenAI" then region = openai_unlock_test() + elseif type == "Claude" then + region = claude_unlock_test() + elseif type == "Gemini" then + region = gemini_unlock_test() end return region end @@ -908,6 +920,10 @@ function auto_get_policy_group(passwd, ip, port) SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://timeline.google.com &') elseif type == "OpenAI" then SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://chatgpt.com/ &') + elseif type == "Claude" then + SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://claude.ai/ &') + elseif type == "Gemini" then + SYS.call('curl -sL -m 5 --limit-rate 1k -o /dev/null https://gemini.google.com/ &') end os.execute("sleep 1") con = SYS.exec(string.format('curl -sL -m 5 --retry 2 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://%s:%s/connections', passwd, ip, port)) @@ -976,6 +992,16 @@ function auto_get_policy_group(passwd, ip, port) auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] break end + elseif type == "Claude" then + if string.match(con.connections[i].metadata.host, "claude%.ai") then + auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] + break + end + elseif type == "Gemini" then + if string.match(con.connections[i].metadata.host, "gemini%.google%.com") then + auto_get_group = con.connections[i].chains[#(con.connections[i].chains)] + break + end end end end @@ -1571,6 +1597,82 @@ function openai_unlock_test() return region end +function claude_unlock_test() + status = 0 + local url = "https://claude.ai/" + local region_url = "https://claude.ai/cdn-cgi/trace" + local regex = FS.uci_get_config("config", "stream_auto_select_region_key_claude") or "" + local region = "" + local old_region = get_old_region() + local old_regex = get_old_regex() + local data = SYS.exec(string.format("curl -sIL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url)) + if data then + if string.find(data, "App unavailable in region") then + status = 1 + else + status = 2 + local region_data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, region_url)) + if region_data and string.match(region_data, "loc=%a+") then + region = string.upper(string.sub(string.match(region_data, "loc=%a+"), 5, -1)) + if not datamatch(region, regex) then + status = 3 + elseif old_regex ~= regex and not all_test then + status = 2 + elseif old_region ~= "" and region ~= old_region and not all_test then + status = 4 + end + if status == 2 and not all_test and region ~= old_region then + write_cache(type, "old_region", region) + end + if status == 2 and not all_test and regex ~= old_regex then + write_cache(type, "old_regex", regex) + end + end + end + end + return region +end + +function gemini_unlock_test() + status = 0 + local url = "https://gemini.google.com/" + local regex = FS.uci_get_config("config", "stream_auto_select_region_key_gemini") or "" + local region = "" + local old_region = get_old_region() + local old_regex = get_old_regex() + local data = SYS.exec(string.format("curl -sL --connect-timeout 5 -m 5 --speed-time 5 --speed-limit 1 --retry 2 -H 'Accept-Language: en' -H 'Content-Type: application/json' -H 'User-Agent: %s' '%s'", UA, url)) + if not data or string.sub(data, 1, 4) == "curl" then + status = 1 + return region + end + + if string.find(data, "45631641,null,true", 1, true) then + local cc = string.match(data, ',2,1,200,"([A-Z][A-Z][A-Z])"') + if cc and cc ~= "" then + region = cc + end + status = 2 + if region ~= "" then + if not datamatch(region, regex) then + status = 3 + elseif old_regex ~= regex and not all_test then + status = 2 + elseif old_region ~= "" and region ~= old_region and not all_test then + status = 4 + end + if status == 2 and not all_test and region ~= old_region then + write_cache(type, "old_region", region) + end + if status == 2 and not all_test and regex ~= old_regex then + write_cache(type, "old_regex", regex) + end + end + else + status = 1 + end + return region +end + function network_test() local test_url1 = "https://www.gstatic.com/generate_204" local test_url2 = "https://cp.cloudflare.com/generate_204" diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_update.sh b/luci-app-openclash/root/usr/share/openclash/openclash_update.sh index ca95522bb..bd7fffd74 100755 --- a/luci-app-openclash/root/usr/share/openclash/openclash_update.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_update.sh @@ -16,7 +16,6 @@ del_lock() { set_lock inc_job_counter -restart=0 if [ -n "$1" ] && [ "$1" != "one_key_update" ]; then /usr/share/openclash/openclash_version.sh "$1" 2>/dev/null @@ -29,7 +28,7 @@ fi if [ ! -f "/tmp/openclash_last_version" ]; then LOG_ERROR "Failed to get version information, please try again later..." SLOG_CLEAN - dec_job_counter_and_restart "$restart" + dec_job_counter_and_restart "0" del_lock exit 0 fi @@ -57,7 +56,7 @@ LAST_VER=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |sed "s/^v//g" |tr -d "\n") if [ -x "/bin/opkg" ]; then OP_CV=$(rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F 'Version: ' '{print $2}' 2>/dev/null) elif [ -x "/usr/bin/apk" ]; then - OP_CV=$(apk list luci-app-openclash 2>/dev/null|grep 'installed' | grep -oE '[0-9]+(\.[0-9]+)*' | head -1 2>/dev/null) + OP_CV=$(apk list luci-app-openclash 2>/dev/null|grep "installed" | grep -oE '[0-9]+(\.[0-9]+)*' | head -1 2>/dev/null) fi OP_LV=$(sed -n 1p "$LAST_OPVER" 2>/dev/null |sed "s/^v//g" |tr -d "\n") RELEASE_BRANCH=$(uci_get_config "release_branch" || echo "master") @@ -69,14 +68,12 @@ if [ "$1" = "one_key_update" ]; then LOG_TIP "If the download fails, try setting the CDN in Overwrite Settings - General Settings - Github Address Modify Options" fi if [ -n "$2" ]; then - /usr/share/openclash/openclash_core.sh "Meta" "$1" "$2" >/dev/null 2>&1 & + /usr/share/openclash/openclash_core.sh "Meta" "$1" "$2" >/dev/null 2>&1 github_address_mod="$2" else - /usr/share/openclash/openclash_core.sh "Meta" "$1" >/dev/null 2>&1 & + /usr/share/openclash/openclash_core.sh "Meta" "$1" >/dev/null 2>&1 github_address_mod=0 fi - - wait else if [ "$github_address_mod" = "0" ]; then LOG_TIP "If the download fails, try setting the CDN in Overwrite Settings - General Settings - Github Address Modify Options" @@ -175,9 +172,8 @@ if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && version_compare "$OP_CV" "$OP_LV" && [ elif [ -x "/usr/bin/apk" ]; then LOG_ERROR "【OpenClash - v$LAST_VER】Pre update test failed after 3 attempts, the file is saved in /tmp/openclash.apk, please try to update manually with【apk add -q --force-overwrite --clean-protected --allow-untrusted /tmp/openclash.apk】" fi - SLOG_CLEAN - dec_job_counter_and_restart "$restart" + dec_job_counter_and_restart "0" del_lock exit 0 fi @@ -191,8 +187,8 @@ if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && version_compare "$OP_CV" "$OP_LV" && [ LOG_ERROR "【OpenClash - v$LAST_VER】Download Failed after 3 attempts, please check the network or try again later!" rm -rf /tmp/openclash.ipk >/dev/null 2>&1 rm -rf /tmp/openclash.apk >/dev/null 2>&1 + dec_job_counter_and_restart "0" SLOG_CLEAN - dec_job_counter_and_restart "$restart" del_lock exit 0 fi @@ -200,9 +196,8 @@ if [ -n "$OP_CV" ] && [ -n "$OP_LV" ] && version_compare "$OP_CV" "$OP_LV" && [ done cat > /tmp/openclash_update.sh <<"EOF" #!/bin/sh -START_LOG="/tmp/openclash_start.log" -LOG_FILE="/tmp/openclash.log" -LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") +. /usr/share/openclash/log.sh +. /usr/share/openclash/openclash_ps.sh UPDATE_LOCK="/tmp/lock/openclash_update_install.lock" mkdir -p /tmp/lock @@ -224,27 +219,6 @@ fi trap 'del_update_lock; exit' INT TERM EXIT -LOG_ERROR() -{ - if [ -n "${1}" ]; then - echo -e "${1}" > $START_LOG - echo -e "${LOGTIME} [Error] ${1}" >> $LOG_FILE - fi -} - -LOG_TIP() -{ - if [ -n "${1}" ]; then - echo -e "${1}" > $START_LOG - echo -e "${LOGTIME} [Tip] ${1}" >> $LOG_FILE - fi -} - -SLOG_CLEAN() -{ - echo "" > $START_LOG -} - check_install_success() { local target_version="$1" @@ -253,7 +227,7 @@ check_install_success() if [ -x "/bin/opkg" ]; then current_version=$(rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F 'Version: ' '{print $2}' 2>/dev/null) elif [ -x "/usr/bin/apk" ]; then - current_version=$(apk list luci-app-openclash 2>/dev/null|grep 'installed' | grep -oE '[0-9]+(\.[0-9]+)*' | head -1 2>/dev/null) + current_version=$(apk list luci-app-openclash 2>/dev/null |grep "installed" | grep -oE '[0-9]+(\.[0-9]+)*' | head -1 2>/dev/null) fi if [ -n "$current_version" ] && [ "$current_version" = "$target_version" ]; then @@ -266,41 +240,39 @@ check_install_success() install_missing_packages() { local installed_before="$1" - if [ -x "/bin/opkg" ]; then + if [ -n "$installed_before" ]; then for pkg in $installed_before; do - if ! opkg status "$pkg" >/dev/null 2>&1; then - local retry_count=0 - local max_retries=3 - while [ $retry_count -lt $max_retries ]; do - retry_count=$((retry_count + 1)) + local retry_count=0 + local max_retries=3 + if [ -x "/bin/opkg" ]; then + if opkg status "$pkg" >/dev/null 2>&1; then + continue + fi + elif [ -x "/usr/bin/apk" ]; then + if apk list "$pkg" |grep "installed" >/dev/null 2>&1; then + continue + fi + fi + + LOG_TIP "【$pkg】depended package reinstalling..." + + while [ $retry_count -lt $max_retries ]; do + retry_count=$((retry_count + 1)) + if [ -x "/bin/opkg" ]; then opkg install "$pkg" - if [ $? -eq 0 ]; then - break - else - if [ $retry_count -lt $max_retries ]; then - sleep 2 - fi - fi - done - fi - done - elif [ -x "/usr/bin/apk" ]; then - for pkg in $installed_before; do - if ! apk info "$pkg" >/dev/null 2>&1; then - local retry_count=0 - local max_retries=3 - while [ $retry_count -lt $max_retries ]; do - retry_count=$((retry_count + 1)) + elif [ -x "/usr/bin/apk" ]; then apk add "$pkg" - if [ $? -eq 0 ]; then - break + fi + if [ $? -eq 0 ]; then + break + else + if [ $retry_count -lt $max_retries ]; then + sleep 2 else - if [ $retry_count -lt $max_retries ]; then - sleep 2 - fi + LOG_ERROR "【$pkg】failed to install, please try to install it manually..." fi - done - fi + fi + done done fi } @@ -324,7 +296,7 @@ while [ $install_retry_count -lt $max_install_retries ]; do opkg install /tmp/openclash.ipk elif [ -x "/usr/bin/apk" ]; then for pkg in $packages_to_check; do - if apk info "$pkg" >/dev/null 2>&1; then + if apk list "$pkg" |grep "installed" >/dev/null 2>&1; then installed_before="$installed_before $pkg" fi done @@ -357,9 +329,9 @@ else elif [ -x "/usr/bin/apk" ]; then LOG_ERROR "OpenClash update failed after 3 attempts, the file is saved in /tmp/openclash.apk, please try to update manually with【apk add -q --force-overwrite --clean-protected --allow-untrusted /tmp/openclash.apk】" fi - SLOG_CLEAN fi - +dec_job_counter_and_restart "0" +SLOG_CLEAN del_update_lock EOF chmod 4755 /tmp/openclash_update.sh @@ -367,6 +339,8 @@ EOF if [ ! -f "/tmp/openclash_update.sh" ] || [ ! -s "/tmp/openclash_update.sh" ] || [ ! -x "/tmp/openclash_update.sh" ]; then LOG_ERROR "Failed to create update script!" rm -rf /tmp/openclash_update.sh + dec_job_counter_and_restart "0" + SLOG_CLEAN del_lock exit 1 fi @@ -405,8 +379,8 @@ else else LOG_TIP "OpenClash has not been updated, stop continuing!" fi + dec_job_counter_and_restart "0" SLOG_CLEAN - dec_job_counter_and_restart "$restart" fi del_lock diff --git a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh index daef03354..8ffb52035 100755 --- a/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh +++ b/luci-app-openclash/root/usr/share/openclash/openclash_watchdog.sh @@ -5,20 +5,10 @@ . /usr/share/openclash/uci.sh LOG_FILE="/tmp/openclash.log" -CONFIG_FILE="/etc/openclash/$(uci_get_config "config_path" |awk -F '/' '{print $5}' 2>/dev/null)" -ipv6_enable=$(uci_get_config "ipv6_enable" || echo 0) -enable_redirect_dns=$(uci_get_config "enable_redirect_dns") -dns_port=$(uci_get_config "dns_port") -disable_masq_cache=$(uci_get_config "disable_masq_cache") -cfg_update_interval=$(uci_get_config "config_update_interval" || echo 60) -log_size=$(uci_get_config "log_size" || echo 1024) -router_self_proxy=$(uci_get_config "router_self_proxy" || echo 1) -stream_auto_select_interval=$(uci_get_config "stream_auto_select_interval" || echo 30) -skip_proxy_address=$(uci_get_config "skip_proxy_address" || echo 0) -CFG_UPDATE_INT=1 +CFG_UPDATE_INT=0 SKIP_PROXY_ADDRESS=1 SKIP_PROXY_ADDRESS_INTERVAL=30 -STREAM_AUTO_SELECT=1 +STREAM_AUTO_SELECT=0 FIREWALL_RELOAD=0 MAX_FIREWALL_RELOAD=3 FW4=$(command -v fw4) @@ -155,11 +145,20 @@ end" 2>/dev/null >> $LOG_FILE while :; do + CONFIG_FILE="/etc/openclash/$(uci_get_config "config_path" |awk -F '/' '{print $5}' 2>/dev/null)" + ipv6_enable=$(uci_get_config "ipv6_enable" || echo 0) + enable_redirect_dns=$(uci_get_config "enable_redirect_dns") + dns_port=$(uci_get_config "dns_port") + disable_masq_cache=$(uci_get_config "disable_masq_cache") + log_size=$(uci_get_config "log_size" || echo 1024) + router_self_proxy=$(uci_get_config "router_self_proxy" || echo 1) + skip_proxy_address=$(uci_get_config "skip_proxy_address" || echo 0) + cfg_update=$(uci_get_config "auto_update") cfg_update_mode=$(uci_get_config "config_auto_update_mode") - cfg_update_interval_now=$(uci_get_config "config_update_interval" || echo 60) + cfg_update_interval=$(uci_get_config "config_update_interval" || echo 60) stream_auto_select=$(uci_get_config "stream_auto_select" || echo 0) - stream_auto_select_interval_now=$(uci_get_config "stream_auto_select_interval" || echo 30) + stream_auto_select_interval=$(uci_get_config "stream_auto_select_interval" || echo 30) stream_auto_select_netflix=$(uci_get_config "stream_auto_select_netflix" || echo 0) stream_auto_select_disney=$(uci_get_config "stream_auto_select_disney" || echo 0) stream_auto_select_hbo_max=$(uci_get_config "stream_auto_select_hbo_max" || echo 0) @@ -172,6 +171,8 @@ do stream_auto_select_bilibili=$(uci_get_config "stream_auto_select_bilibili" || echo 0) stream_auto_select_google_not_cn=$(uci_get_config "stream_auto_select_google_not_cn" || echo 0) stream_auto_select_openai=$(uci_get_config "stream_auto_select_openai" || echo 0) + stream_auto_select_claude=$(uci_get_config "stream_auto_select_claude" || echo 0) + stream_auto_select_gemini=$(uci_get_config "stream_auto_select_gemini" || echo 0) upnp_lease_file=$(uci -q get upnpd.config.upnp_lease_file) #wait for core start complete @@ -362,66 +363,72 @@ fi ## 配置文件循环更新 if [ "$cfg_update" -eq 1 ] && [ "$cfg_update_mode" -eq 1 ]; then - [ "$cfg_update_interval" -ne "$cfg_update_interval_now" ] && CFG_UPDATE_INT=0 && cfg_update_interval="$cfg_update_interval_now" if [ "$CFG_UPDATE_INT" -ne 0 ]; then - [ "$(expr "$CFG_UPDATE_INT" % "$cfg_update_interval_now")" -eq 0 ] && /usr/share/openclash/openclash.sh + [ "$(expr "$CFG_UPDATE_INT" % "$cfg_update_interval")" -eq 0 ] && /usr/share/openclash/openclash.sh fi CFG_UPDATE_INT=$(expr "$CFG_UPDATE_INT" + 1) fi ##STREAMING_UNLOCK_CHECK if [ "$stream_auto_select" -eq 1 ] && [ "$router_self_proxy" -eq 1 ]; then - [ "$stream_auto_select_interval" -ne "$stream_auto_select_interval_now" ] && STREAM_AUTO_SELECT=1 && stream_auto_select_interval="$stream_auto_select_interval_now" if [ "$STREAM_AUTO_SELECT" -ne 0 ]; then - if [ "$(expr "$STREAM_AUTO_SELECT" % "$stream_auto_select_interval_now")" -eq 0 ] || [ "$STREAM_AUTO_SELECT" -eq 1 ]; then + if [ "$(expr "$STREAM_AUTO_SELECT" % "$stream_auto_select_interval")" -eq 0 ] || [ "$STREAM_AUTO_SELECT" -eq 1 ]; then if [ "$stream_auto_select_netflix" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For Netflix Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【Netflix】..." /usr/share/openclash/openclash_streaming_unlock.lua "Netflix" >> $LOG_FILE fi if [ "$stream_auto_select_disney" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For Disney Plus Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【Disney Plus】..." /usr/share/openclash/openclash_streaming_unlock.lua "Disney Plus" >> $LOG_FILE fi if [ "$stream_auto_select_google_not_cn" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For Google Not CN Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【Google Not CN】..." /usr/share/openclash/openclash_streaming_unlock.lua "Google" >> $LOG_FILE fi if [ "$stream_auto_select_ytb" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For YouTube Premium Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【YouTube Premium】..." /usr/share/openclash/openclash_streaming_unlock.lua "YouTube Premium" >> $LOG_FILE fi if [ "$stream_auto_select_prime_video" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For Amazon Prime Video Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【Amazon Prime Video】..." /usr/share/openclash/openclash_streaming_unlock.lua "Amazon Prime Video" >> $LOG_FILE fi if [ "$stream_auto_select_hbo_max" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For HBO Max Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【HBO Max】..." /usr/share/openclash/openclash_streaming_unlock.lua "HBO Max" >> $LOG_FILE fi if [ "$stream_auto_select_tvb_anywhere" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For TVB Anywhere+ Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【TVB Anywhere+】..." /usr/share/openclash/openclash_streaming_unlock.lua "TVB Anywhere+" >> $LOG_FILE fi if [ "$stream_auto_select_dazn" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For DAZN Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【DAZN】..." /usr/share/openclash/openclash_streaming_unlock.lua "DAZN" >> $LOG_FILE fi if [ "$stream_auto_select_paramount_plus" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For Paramount Plus Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【Paramount Plus】..." /usr/share/openclash/openclash_streaming_unlock.lua "Paramount Plus" >> $LOG_FILE fi if [ "$stream_auto_select_discovery_plus" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For Discovery Plus Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【Discovery Plus】..." /usr/share/openclash/openclash_streaming_unlock.lua "Discovery Plus" >> $LOG_FILE fi if [ "$stream_auto_select_bilibili" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For Bilibili Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【Bilibili】..." /usr/share/openclash/openclash_streaming_unlock.lua "Bilibili" >> $LOG_FILE fi if [ "$stream_auto_select_openai" -eq 1 ]; then - LOG_TIP "Start Auto Select Proxy For OpenAI Unlock..." + LOG_TIP "Start Auto Select Unlock Proxy For【OpenAI】..." /usr/share/openclash/openclash_streaming_unlock.lua "OpenAI" >> $LOG_FILE fi + if [ "$stream_auto_select_claude" -eq 1 ]; then + LOG_TIP "Start Auto Select Unlock Proxy For【Claude】..." + /usr/share/openclash/openclash_streaming_unlock.lua "Claude" >> $LOG_FILE + fi + if [ "$stream_auto_select_gemini" -eq 1 ]; then + LOG_TIP "Start Auto Select Unlock Proxy For【Gemini】..." + /usr/share/openclash/openclash_streaming_unlock.lua "Gemini" >> $LOG_FILE + fi fi fi STREAM_AUTO_SELECT=$(expr "$STREAM_AUTO_SELECT" + 1) diff --git a/luci-app-openclash/root/usr/share/openclash/res/default.yaml b/luci-app-openclash/root/usr/share/openclash/res/default.yaml index 644b81ff3..581df244d 100644 --- a/luci-app-openclash/root/usr/share/openclash/res/default.yaml +++ b/luci-app-openclash/root/usr/share/openclash/res/default.yaml @@ -672,6 +672,7 @@ proxies: # socks5 grpc-opts: grpc-service-name: "example" # grpc-user-agent: "grpc-go/1.36.0" + # ping-interval: 0 # 默认关闭,单位为秒 # ip-version: ipv4 # vless @@ -762,6 +763,7 @@ proxies: # socks5 grpc-opts: grpc-service-name: "grpc" # grpc-user-agent: "grpc-go/1.36.0" + # ping-interval: 0 # 默认关闭,单位为秒 reality-opts: public-key: CrrQSjAG_YkHLwvM2M-7XkKJilgL5upBKCp0od0tLhE @@ -790,6 +792,69 @@ proxies: # socks5 # v2ray-http-upgrade: false # v2ray-http-upgrade-fast-open: false + - name: "vless-xhttp" + type: vless + server: server + port: 443 + uuid: uuid + udp: true + tls: true + network: xhttp + alpn: + - h2 + # ech-opts: ... + # reality-opts: ... + # skip-cert-verify: false + # fingerprint: ... + # certificate: ... + # private-key: ... + servername: xxx.com + client-fingerprint: chrome + encryption: "" + xhttp-opts: + path: "/" + host: xxx.com + # mode: "stream-one" # Available: "stream-one", "stream-up" or "packet-up" + # headers: + # X-Forwarded-For: "" + # no-grpc-header: false + # x-padding-bytes: "100-1000" + # reuse-settings: # aka XMUX + # max-connections: "16-32" + # max-concurrency: "0" + # c-max-reuse-times: "0" + # h-max-request-times: "600-900" + # h-max-reusable-secs: "1800-3000" + # download-settings: + # ## xhttp part + # path: "/" + # host: xxx.com + # headers: + # X-Forwarded-For: "" + # no-grpc-header: false + # x-padding-bytes: "100-1000" + # reuse-settings: # aka XMUX + # max-connections: "16-32" + # max-concurrency: "0" + # c-max-reuse-times: "0" + # h-max-request-times: "600-900" + # h-max-reusable-secs: "1800-3000" + # ## proxy part + # server: server + # port: 443 + # tls: true + # alpn: + # - h2 + # ech-opts: ... + # reality-opts: ... + # skip-cert-verify: false + # fingerprint: ... + # certificate: ... + # private-key: ... + # servername: xxx.com + # client-fingerprint: chrome + + # Trojan - name: "trojan" type: trojan @@ -833,6 +898,7 @@ proxies: # socks5 grpc-opts: grpc-service-name: "example" # grpc-user-agent: "grpc-go/1.36.0" + # ping-interval: 0 # 默认关闭,单位为秒 - name: trojan-ws server: server @@ -1080,6 +1146,8 @@ proxies: # socks5 # multiplexing: MULTIPLEXING_LOW # 如果想开启 0-RTT 握手,请设置为 HANDSHAKE_NO_WAIT,否则请设置为 HANDSHAKE_STANDARD。默认值为 HANDSHAKE_STANDARD # handshake-mode: HANDSHAKE_STANDARD + # 一个 base64 字符串用于微调网络行为 + # traffic-pattern: "" # sudoku - name: sudoku @@ -1090,15 +1158,17 @@ proxies: # socks5 aead-method: chacha20-poly1305 # 可选:chacha20-poly1305、aes-128-gcm、none(不建议;且 enable-pure-downlink=false 时不可用) padding-min: 2 # 最小填充率(0-100) padding-max: 7 # 最大填充率(0-100,必须 >= padding-min) - table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy 前者全ascii映射,后者保证熵值(汉明1)低于3 - # custom-table: xpxvvpvv # 可选,自定义字节布局,必须包含2个x、2个p、4个v,可随意组合。启用此处则需配置`table-type`为`prefer_entropy` - # custom-tables: ["xpxvvpvv", "vxpvxvvp"] # 可选,自定义字节布局列表(x/v/p),用于 xvp 模式轮换;非空时覆盖 custom-table - http-mask: true # 是否启用http掩码 - # http-mask-mode: legacy # 可选:legacy(默认)、stream(split-stream)、poll、auto(先 stream 再 poll);stream/poll/auto 支持走 CDN/反代 - # http-mask-tls: true # 可选:仅在 http-mask-mode 为 stream/poll/auto 时生效;true 强制 https;false 强制 http(不会根据端口自动推断) - # http-mask-host: "" # 可选:覆盖 Host/SNI(支持 example.com 或 example.com:443);仅在 http-mask-mode 为 stream/poll/auto 时生效 - # path-root: "" # 可选:HTTP 隧道端点一级路径前缀(双方需一致),例如 "aabbcc" 或 "/aabbcc/" => /aabbcc/session、/aabbcc/stream、/aabbcc/api/v1/upload - # http-mask-multiplex: off # 可选:off(默认)、auto(复用底层 HTTP 连接,减少建链 RTT)、on(Sudoku mux 单隧道多目标;仅在 http-mask-mode=stream/poll/auto 生效) + table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy、up_ascii_down_entropy、up_entropy_down_ascii + # custom-table: xpxvvpvv # 可选,自定义字节布局,必须包含2个x、2个p、4个v,可随意组合;只对 entropy 方向生效 + # custom-tables: ["xpxvvpvv", "vxpvxvvp"] # 可选,自定义字节布局列表(x/v/p),非空时覆盖 custom-table + # 推荐:使用 httpmask 对象统一管理 HTTPMask 相关字段: + httpmask: + disable: false # true 禁用所有 HTTP 伪装/隧道 + mode: legacy # 可选:legacy(默认)、stream(split-stream)、poll、auto(先 stream 再 poll)、ws(WebSocket 隧道) + # tls: true # 可选:按需开启 HTTPS/WSS + # host: "" # 可选:覆盖 Host/SNI(支持 example.com 或 example.com:443);仅在 mode 为 stream/poll/auto/ws 时生效 + # path-root: "" # 可选:HTTP 隧道端点一级路径前缀(双方需一致),例如 "aabbcc" 或 "/aabbcc/" => /aabbcc/session、/aabbcc/stream、/aabbcc/api/v1/upload、/aabbcc/ws + # multiplex: "off" # 可选字符串:off(默认)、auto(复用底层 HTTP 连接,减少建链 RTT)、on(Sudoku mux 单隧道多目标;仅在 mode=stream/poll/auto 生效;ws 强制 off) enable-pure-downlink: false # 可选:false=带宽优化下行(更快,要求 aead-method != none);true=纯 Sudoku 下行 # anytls @@ -1118,6 +1188,23 @@ proxies: # socks5 # - http/1.1 # skip-cert-verify: true + # trusttunnel + - name: trusttunnel + type: trusttunnel + server: 1.2.3.4 + port: 443 + username: username + password: password + # client-fingerprint: chrome + health-check: true + udp: true + # sni: "example.com" + # alpn: + # - h2 + # skip-cert-verify: true + # quic: true # 默认为false + # congestion-controller: bbr + # dns 出站会将请求劫持到内部 dns 模块,所有请求均在内部处理 - name: "dns-out" type: dns @@ -1555,6 +1642,12 @@ listeners: flow: xtls-rprx-vision # ws-path: "/" # 如果不为空则开启 websocket 传输层 # grpc-service-name: "GunService" # 如果不为空则开启 grpc 传输层 + # xhttp-config: # 如果不为空则开启 xhttp 传输层 + # path: "/" + # host: "" + # mode: auto # Available: "stream-one", "stream-up" or "packet-up" + # no-sse-header: false + # sc-stream-up-server-secs: "20-80" # ------------------------- # vless encryption服务端配置: # (原生外观 / 只 XOR 公钥 / 全随机数。1-RTT 每次下发随机 300 到 600 秒的 ticket 以便 0-RTT 复用 / 只允许 1-RTT) @@ -1631,6 +1724,8 @@ listeners: users: username1: password1 username2: password2 + # 一个 base64 字符串用于微调网络行为 + # traffic-pattern: "" - name: sudoku-in-1 type: sudoku @@ -1640,14 +1735,18 @@ listeners: aead-method: chacha20-poly1305 # 可选:chacha20-poly1305、aes-128-gcm、none(不建议;且 enable-pure-downlink=false 时不可用) padding-min: 1 # 最小填充率(0-100) padding-max: 15 # 最大填充率(0-100,必须 >= padding-min) - table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy 前者全ascii映射,后者保证熵值(汉明1)低于3 - # custom-table: xpxvvpvv # 可选,自定义字节布局,必须包含2个x、2个p、4个v,可随意组合。启用此处则需配置`table-type`为`prefer_entropy` - # custom-tables: ["xpxvvpvv", "vxpvxvvp"] # 可选,自定义字节布局列表(x/v/p),用于 xvp 模式轮换;非空时覆盖 custom-table + table-type: prefer_ascii # 可选值:prefer_ascii、prefer_entropy、up_ascii_down_entropy、up_entropy_down_ascii + # custom-table: xpxvvpvv # 可选,自定义字节布局,必须包含2个x、2个p、4个v,可随意组合;只对 entropy 方向生效 + # custom-tables: ["xpxvvpvv", "vxpvxvvp"] # 可选,自定义字节布局列表(x/v/p),用于多表轮换;非空时覆盖 custom-table handshake-timeout: 5 # 可选(秒) enable-pure-downlink: false # 可选:false=带宽优化下行(更快,要求 aead-method != none);true=纯 Sudoku 下行 - disable-http-mask: false # 可选:禁用 http 掩码/隧道(默认为 false) - # http-mask-mode: legacy # 可选:legacy(默认)、stream(split-stream)、poll、auto(先 stream 再 poll);stream/poll/auto 支持走 CDN/反代 - # path-root: "" # 可选:HTTP 隧道端点一级路径前缀(双方需一致),例如 "aabbcc" 或 "/aabbcc/" => /aabbcc/session、/aabbcc/stream、/aabbcc/api/v1/upload + # 推荐:使用 httpmask 对象统一管理 HTTPMask 相关字段: + httpmask: + disable: false # true 禁用所有 HTTP 伪装/隧道 + mode: legacy # 可选:legacy(默认)、stream(split-stream)、poll、auto(先 stream 再 poll)、ws(WebSocket 隧道) + # path-root: "" # 可选:HTTP 隧道端点一级路径前缀(双方需一致),例如 "aabbcc" 或 "/aabbcc/" => /aabbcc/session、/aabbcc/stream、/aabbcc/api/v1/upload、/aabbcc/ws + # + # fallback: "127.0.0.1:80" # 可选:用于可连接请求的回落转发,可与其他服务共端口 @@ -1734,6 +1833,30 @@ listeners: # masquerade: http://127.0.0.1:8080 #作为反向代理 # masquerade: https://127.0.0.1:8080 #作为反向代理 + - name: trusttunnel-in-1 + type: trusttunnel + port: 10821 # 支持使用ports格式,例如200,302 or 200,204,401-429,501-503 + listen: 0.0.0.0 + # rule: sub-rule-name1 # 默认使用 rules,如果未找到 sub-rule 则直接使用 rules + # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错) + users: + - username: 1 + password: 9d0cb9d0-964f-4ef6-897d-6c6b3ccf9e68 + certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径 + private-key: ./server.key # 证书对应的私钥 PEM 格式,或者私钥路径 + network: ["tcp", "udp"] # http2+http3 + congestion-controller: bbr + # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空 + # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify" + # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径 + # 如果填写则开启ech(可由 mihomo generate ech-keypair <明文域名> 生成) + # ech-key: | + # -----BEGIN ECH KEYS----- + # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzK + # madSJjYQIf9o1N5GXjkW4DEEeb17qMxHdwMdNnwADAABAAEAAQACAAEAAwAIdGVz + # dC5jb20AAA== + # -----END ECH KEYS----- + # 注意,listeners中的tun仅提供给高级用户使用,普通用户应使用顶层配置中的tun - name: tun-in-1 type: tun diff --git a/luci-app-openclash/root/usr/share/openclash/yml_change.sh b/luci-app-openclash/root/usr/share/openclash/yml_change.sh index 2af99b64d..2fd73ce0f 100755 --- a/luci-app-openclash/root/usr/share/openclash/yml_change.sh +++ b/luci-app-openclash/root/usr/share/openclash/yml_change.sh @@ -41,7 +41,7 @@ if [ "$1" = "fake-ip" ] && [ "$enable_redirect_dns" != "2" ]; then awk -v mode="$fake_ip_filter_mode" ' !/^$/ && !/^#/ { # 跳过IPv4和IPv6地址 - if ($0 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/ || $0 ~ /:/) { + if ($0 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(\/[0-9]+)?$/ || $0 ~ /:/) { next } if (mode == "blacklist") { @@ -185,7 +185,7 @@ set_disable_qtype() yml_dns_get() { local section="$1" regex='^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$' - local enabled port type ip group dns_type dns_address interface specific_group node_resolve http3 ecs_subnet ecs_override disable_qtype_param + local enabled port type ip group dns_type dns_address interface specific_group node_resolve direct_nameserver http3 skip_cert_verify ecs_subnet ecs_override disable_qtype_param disable_qtype disable_ipv4 disable_ipv6 disable_reuse config_get_bool "enabled" "$section" "enabled" "1" [ "$enabled" = "0" ] && return @@ -378,6 +378,8 @@ begin smart_collect = '${44}' == '1' smart_collect_size = '${45}' fake_ip_range6 = '${46}' + fake_ip_range6_enable = '${47}' == '1' + global_ua = '${48}' default_dashboard = '$default_dashboard' yacd_type = '$yacd_type' dashboard_type = '$dashboard_type' @@ -408,6 +410,7 @@ begin Value['external-controller'] = '0.0.0.0:' + controller_port Value['secret'] = secret Value['bind-address'] = '*' + Value['global-ua'] = global_ua if global_ua != '0' Value['external-ui'] = '/usr/share/openclash/ui' Value['external-ui-name'] = default_dashboard case default_dashboard @@ -480,7 +483,7 @@ begin else Value['dns']['enhanced-mode'] = 'fake-ip' Value['dns']['fake-ip-range'] = fake_ip_range - if Value['dns']['ipv6'] + if Value['dns']['ipv6'] and fake_ip_range6_enable Value['dns']['fake-ip-range6'] = fake_ip_range6 end end @@ -657,14 +660,13 @@ begin end if fake_ip_mode == 'fake-ip' && (china_ip_route || china_ip6_route) filter_mode = Value.dig('dns', 'fake-ip-filter-mode') - filters = Value.dig('dns', 'fake-ip-filter') || [] - deleted_filters = filters.select { |f| f =~ /(geosite:?|rule-set:?).*(@cn|:cn|,cn|:china)/i } if filter_mode == 'blacklist' || filter_mode.nil? - if !deleted_filters.any? - (Value['dns']['fake-ip-filter'] ||= []) << 'geosite:cn' - YAML.LOG_TIP('Because Need Ensure Bypassing IP Option Work, Added The Fake-IP-Filter Rule【geosite:cn】...') - end - else + filter_rule = 'rule-set:oc-cn-domain' + (Value['dns']['fake-ip-filter'] ||= []) << filter_rule + end + if filter_mode == 'whitelist' + filters = Value.dig('dns', 'fake-ip-filter') || [] + deleted_filters = filters.select { |f| f =~ /(geosite:?|rule-set:?).*(@cn|:cn|,cn|:china)/i } if deleted_filters.any? Value['dns']['fake-ip-filter'] -= deleted_filters deleted_filters.each do |f| @@ -673,8 +675,14 @@ begin end end if filter_mode == 'rule' - (Value['dns']['fake-ip-filter'] ||= []).unshift('GEOSITE,cn,real-ip') - YAML.LOG_TIP('Because Need Ensure Bypassing IP Option Work, Added The Fake-IP-Filter Rule【GEOSITE,cn,real-ip】...') + filter_rule = 'RULE-SET,oc-cn-domain,real-ip' + (Value['dns']['fake-ip-filter'] ||= []).unshift(filter_rule) + end + Value['dns']['fake-ip-filter'].uniq! + if filter_mode != 'whitelist' + rule_set_hash = {'rule-providers+'=>{'oc-cn-domain'=>{'type'=>'http', 'interval'=>43200, 'behavior'=>'domain', 'format'=>'mrs', 'url'=>'https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/cn.mrs', 'path'=> './rule_provider/oc-cn-domain.mrs'}}} + Value = YAML.overwrite(Value, rule_set_hash) + YAML.LOG_TIP('Because Need Ensure Bypassing IP Option Work, Added The Fake-IP-Filter Rule【%s】...' % [filter_rule]) end end rescue Exception => e diff --git a/luci-app-openclash/root/usr/share/openclash/yml_proxys_get.sh b/luci-app-openclash/root/usr/share/openclash/yml_proxys_get.sh index 6a622522d..ca720cca0 100755 --- a/luci-app-openclash/root/usr/share/openclash/yml_proxys_get.sh +++ b/luci-app-openclash/root/usr/share/openclash/yml_proxys_get.sh @@ -592,7 +592,7 @@ ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " }; end; - #Mieru + #Mieru if x['type'] == 'mieru' then threads << Thread.new{ #port-range @@ -1138,6 +1138,19 @@ ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " uci_commands << uci_set + 'reality_short_id=\"' + x['reality-opts']['short-id'].to_s + '\"' end end + if x.key?('encryption') then + uci_commands << uci_set + 'vless_encryption=\"' + x['encryption'].to_s + '\"' + end + elsif x['network'].to_s == 'xhttp' + uci_commands << uci_set + 'obfs_vless=xhttp' + if x.key?('xhttp-opts') then + if x['xhttp-opts'].key?('path') then + uci_commands << uci_set + 'xhttp_opts_path=\"' + x['xhttp-opts']['path'].to_s + '\"' + end + if x['xhttp-opts'].key?('host') then + uci_commands << uci_set + 'xhttp_opts_host=\"' + x['xhttp-opts']['host'].to_s + '\"' + end + end end end }; @@ -1424,6 +1437,132 @@ ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " }; end; + if x['type'] == 'masque' then + threads << Thread.new{ + #private-key + if x.key?('private-key') then + uci_commands << uci_set + 'masque_private_key=\"' + x['private-key'].to_s + '\"' + end + }; + + threads << Thread.new{ + #public-key + if x.key?('public-key') then + uci_commands << uci_set + 'masque_public_key=\"' + x['public-key'].to_s + '\"' + end + }; + + threads << Thread.new{ + #ip + if x.key?('ip') then + uci_commands << uci_set + 'masque_ip=\"' + x['ip'].to_s + '\"' + end + }; + + threads << Thread.new{ + #ipv6 + if x.key?('ipv6') then + uci_commands << uci_set + 'masque_ipv6=\"' + x['ipv6'].to_s + '\"' + end + }; + + threads << Thread.new{ + #mtu + if x.key?('mtu') then + uci_commands << uci_set + 'masque_mtu=\"' + x['mtu'].to_s + '\"' + end + }; + + threads << Thread.new{ + #remote-dns-resolve + if x.key?('remote-dns-resolve') then + uci_commands << uci_set + 'masque_remote_dns_resolve=\"' + x['remote-dns-resolve'].to_s + '\"' + end + }; + + threads << Thread.new{ + #dns + if x.key?('dns') then + dns = uci_del + 'dns >/dev/null 2>&1' + system(dns) + x['dns'].each{ + |x| + uci_commands << uci_add + 'masque_dns=\"' + x.to_s + '\"' + } + end + }; + end; + + if x['type'] == 'trusttunnel' then + threads << Thread.new{ + #username + if x.key?('username') then + uci_commands << uci_set + 'trusttunnel_username=\"' + x['username'].to_s + '\"' + end + }; + + threads << Thread.new{ + #password + if x.key?('password') then + uci_commands << uci_set + 'trusttunnel_password=\"' + x['password'].to_s + '\"' + end + }; + + threads << Thread.new{ + #health-check + if x.key?('health-check') then + uci_commands << uci_set + 'trusttunnel_health_check=\"' + x['health-check'].to_s + '\"' + end + }; + + threads << Thread.new{ + #quic + if x.key?('quic') then + uci_commands << uci_set + 'trusttunnel_quic=\"' + x['quic'].to_s + '\"' + end + }; + + threads << Thread.new{ + #congestion-controller + if x.key?('congestion-controller') then + uci_commands << uci_set + 'trusttunnel_congestion_controller=\"' + x['congestion-controller'].to_s + '\"' + end + }; + + #alpn + threads << Thread.new{ + if x.key?('alpn') then + alpn = uci_del + 'alpn >/dev/null 2>&1' + system(alpn) + x['alpn'].each{ + |x| + uci_commands << uci_add + 'alpn=\"' + x.to_s + '\"' + } + end + }; + + #sni + threads << Thread.new{ + if x.key?('sni') then + uci_commands << uci_set + 'sni=\"' + x['sni'].to_s + '\"' + end + }; + + #skip-cert-verify + threads << Thread.new{ + if x.key?('skip-cert-verify') then + uci_commands << uci_set + 'skip_cert_verify=\"' + x['skip-cert-verify'].to_s + '\"' + end + }; + + #client_fingerprint + threads << Thread.new{ + if x.key?('client-fingerprint') then + uci_commands << uci_set + 'client_fingerprint=\"' + x['client-fingerprint'].to_s + '\"' + end + }; + end; + #加入策略组 threads << Thread.new{ #加入策略组 diff --git a/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh b/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh index 7ec1a9e7b..969a65a38 100755 --- a/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh +++ b/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh @@ -186,135 +186,6 @@ yml_servers_set() config_get "name" "$section" "name" "" config_get "server" "$section" "server" "" config_get "port" "$section" "port" "" - config_get "dialer_proxy" "$section" "dialer_proxy" "" - config_get "cipher" "$section" "cipher" "" - config_get "cipher_ssr" "$section" "cipher_ssr" "" - config_get "password" "$section" "password" "" - config_get "securitys" "$section" "securitys" "" - config_get "udp" "$section" "udp" "" - config_get "obfs" "$section" "obfs" "" - config_get "obfs_ssr" "$section" "obfs_ssr" "" - config_get "obfs_param" "$section" "obfs_param" "" - config_get "obfs_vmess" "$section" "obfs_vmess" "" - config_get "obfs_trojan" "$section" "obfs_trojan" "" - config_get "protocol" "$section" "protocol" "" - config_get "protocol_param" "$section" "protocol_param" "" - config_get "host" "$section" "host" "" - config_get "mux" "$section" "mux" "" - config_get "custom" "$section" "custom" "" - config_get "tls" "$section" "tls" "" - config_get "skip_cert_verify" "$section" "skip_cert_verify" "" - config_get "path" "$section" "path" "" - config_get "alterId" "$section" "alterId" "" - config_get "uuid" "$section" "uuid" "" - config_get "auth_name" "$section" "auth_name" "" - config_get "auth_pass" "$section" "auth_pass" "" - config_get "psk" "$section" "psk" "" - config_get "obfs_snell" "$section" "obfs_snell" "" - config_get "snell_version" "$section" "snell_version" "" - config_get "sni" "$section" "sni" "" - config_get "alpn" "$section" "alpn" "" - config_get "http_path" "$section" "http_path" "" - config_get "keep_alive" "$section" "keep_alive" "" - config_get "servername" "$section" "servername" "" - config_get "h2_path" "$section" "h2_path" "" - config_get "h2_host" "$section" "h2_host" "" - config_get "grpc_service_name" "$section" "grpc_service_name" "" - config_get "ws_opts_path" "$section" "ws_opts_path" "" - config_get "ws_opts_headers" "$section" "ws_opts_headers" "" - config_get "max_early_data" "$section" "max_early_data" "" - config_get "early_data_header_name" "$section" "early_data_header_name" "" - config_get "trojan_ws_path" "$section" "trojan_ws_path" "" - config_get "trojan_ws_headers" "$section" "trojan_ws_headers" "" - config_get "interface_name" "$section" "interface_name" "" - config_get "routing_mark" "$section" "routing_mark" "" - config_get "obfs_vless" "$section" "obfs_vless" "" - config_get "vless_flow" "$section" "vless_flow" "" - config_get "http_headers" "$section" "http_headers" "" - config_get "hysteria_protocol" "$section" "hysteria_protocol" "" - config_get "hysteria2_protocol" "$section" "hysteria2_protocol" "" - config_get "hysteria_up" "$section" "hysteria_up" "" - config_get "hysteria_down" "$section" "hysteria_down" "" - config_get "hysteria_alpn" "$section" "hysteria_alpn" "" - config_get "hysteria_obfs" "$section" "hysteria_obfs" "" - config_get "hysteria_auth" "$section" "hysteria_auth" "" - config_get "hysteria_auth_str" "$section" "hysteria_auth_str" "" - config_get "hysteria_ca" "$section" "hysteria_ca" "" - config_get "hysteria_ca_str" "$section" "hysteria_ca_str" "" - config_get "recv_window_conn" "$section" "recv_window_conn" "" - config_get "recv_window" "$section" "recv_window" "" - config_get "disable_mtu_discovery" "$section" "disable_mtu_discovery" "" - config_get "initial_stream_receive_window" "$section" "initial_stream_receive_window" "" - config_get "max_stream_receive_window" "$section" "max_stream_receive_window" "" - config_get "initial_connection_receive_window" "$section" "initial_connection_receive_window" "" - config_get "max_connection_receive_window" "$section" "max_connection_receive_window" "" - config_get "xudp" "$section" "xudp" "" - config_get "packet_encoding" "$section" "packet_encoding" "" - config_get "global_padding" "$section" "global_padding" "" - config_get "authenticated_length" "$section" "authenticated_length" "" - config_get "wg_ip" "$section" "wg_ip" "" - config_get "wg_ipv6" "$section" "wg_ipv6" "" - config_get "private_key" "$section" "private_key" "" - config_get "public_key" "$section" "public_key" "" - config_get "preshared_key" "$section" "preshared_key" "" - config_get "wg_dns" "$section" "wg_dns" "" - config_get "public_key" "$section" "public_key" "" - config_get "preshared_key" "$section" "preshared_key" "" - config_get "wg_mtu" "$section" "wg_mtu" "" - config_get "tc_ip" "$section" "tc_ip" "" - config_get "tc_token" "$section" "tc_token" "" - config_get "tc_uuid" "$section" "tc_uuid" "" - config_get "tc_password" "$section" "tc_password" "" - config_get "udp_relay_mode" "$section" "udp_relay_mode" "" - config_get "congestion_controller" "$section" "congestion_controller" "" - config_get "tc_alpn" "$section" "tc_alpn" "" - config_get "disable_sni" "$section" "disable_sni" "" - config_get "reduce_rtt" "$section" "reduce_rtt" "" - config_get "heartbeat_interval" "$section" "heartbeat_interval" "" - config_get "request_timeout" "$section" "request_timeout" "" - config_get "max_udp_relay_packet_size" "$section" "max_udp_relay_packet_size" "" - config_get "fast_open" "$section" "fast_open" "" - config_get "fingerprint" "$section" "fingerprint" "" - config_get "ports" "$section" "ports" "" - config_get "hop_interval" "$section" "hop_interval" "" - config_get "max_open_streams" "$section" "max_open_streams" "" - config_get "obfs_password" "$section" "obfs_password" "" - config_get "packet_addr" "$section" "packet_addr" "" - config_get "client_fingerprint" "$section" "client_fingerprint" "" - config_get "ip_version" "$section" "ip_version" "" - config_get "tfo" "$section" "tfo" "" - config_get "udp_over_tcp" "$section" "udp_over_tcp" "" - config_get "reality_public_key" "$section" "reality_public_key" "" - config_get "reality_short_id" "$section" "reality_short_id" "" - config_get "obfs_version_hint" "$section" "obfs_version_hint" "" - config_get "obfs_restls_script" "$section" "obfs_restls_script" "" - config_get "multiplex" "$section" "multiplex" "" - config_get "multiplex_protocol" "$section" "multiplex_protocol" "" - config_get "multiplex_max_connections" "$section" "multiplex_max_connections" "" - config_get "multiplex_min_streams" "$section" "multiplex_min_streams" "" - config_get "multiplex_max_streams" "$section" "multiplex_max_streams" "" - config_get "multiplex_padding" "$section" "multiplex_padding" "" - config_get "multiplex_statistic" "$section" "multiplex_statistic" "" - config_get "multiplex_only_tcp" "$section" "multiplex_only_tcp" "" - config_get "other_parameters" "$section" "other_parameters" "" - config_get "hysteria_obfs_password" "$section" "hysteria_obfs_password" "" - config_get "port_range" "$section" "port_range" "" - config_get "username" "$section" "username" "" - config_get "transport" "$section" "transport" "TCP" - config_get "multiplexing" "$section" "multiplexing" "MULTIPLEXING_LOW" - config_get "private_key" "$section" "private_key" "" - config_get "private_key_passphrase" "$section" "private_key_passphrase" "" - config_get "host_key" "$section" "host_key" "" - config_get "host_key_algorithms" "$section" "host_key_algorithms" "" - config_get "idle_session_check_interval" "$section" "idle_session_check_interval" "" - config_get "idle_session_timeout" "$section" "idle_session_timeout" "" - config_get "min_idle_session" "$section" "min_idle_session" "" - config_get "sudoku_key" "$section" "sudoku_key" "" - config_get "aead_method" "$section" "aead_method" "none" - config_get "padding_min" "$section" "padding_min" "" - config_get "padding_max" "$section" "padding_max" "" - config_get "table_type" "$section" "table_type" "prefer_ascii" - config_get "http_mask" "$section" "http_mask" "true" if [ "$enabled" = "0" ]; then return @@ -336,11 +207,12 @@ yml_servers_set() return fi - if [ -z "$password" ]; then - if [ "$type" = "ss" ] || [ "$type" = "trojan" ] || [ "$type" = "ssr" ]; then - return - fi - fi + if [ "$type" = "ss" ] || [ "$type" = "trojan" ] || [ "$type" = "ssr" ]; then + config_get "password" "$section" "password" "" + if [ -z "$password" ]; then + return + fi + fi if [ ! -z "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then return @@ -364,59 +236,27 @@ yml_servers_set() fi LOG_OUT "Start Writing【$CONFIG_NAME - $type - $name】Proxy To Config File..." - if [ "$obfs" != "none" ] && [ -n "$obfs" ]; then - if [ "$obfs" = "websocket" ]; then - obfss="plugin: v2ray-plugin" - elif [ "$obfs" = "shadow-tls" ]; then - obfss="plugin: shadow-tls" - elif [ "$obfs" = "restls" ]; then - obfss="plugin: restls" - else - obfss="plugin: obfs" - fi - else - obfss="" - fi - - if [ "$obfs_vless" = "ws" ]; then - obfs_vless="network: ws" - fi - - if [ "$obfs_vless" = "grpc" ]; then - obfs_vless="network: grpc" - fi - - if [ "$obfs_vless" = "tcp" ]; then - obfs_vless="network: tcp" - fi - - if [ "$obfs_vmess" = "websocket" ]; then - obfs_vmess="network: ws" - fi - - if [ "$obfs_vmess" = "http" ]; then - obfs_vmess="network: http" - fi - - if [ "$obfs_vmess" = "h2" ]; then - obfs_vmess="network: h2" - fi - - if [ "$obfs_vmess" = "grpc" ]; then - obfs_vmess="network: grpc" - fi - - if [ ! -z "$custom" ] && [ "$type" = "vmess" ]; then - custom="Host: \"$custom\"" - fi - - if [ ! -z "$path" ]; then - if [ "$type" != "vmess" ]; then - path="path: \"$path\"" - elif [ "$obfs_vmess" = "network: ws" ]; then - path="ws-path: \"$path\"" - fi - fi + config_get "dialer_proxy" "$section" "dialer_proxy" "" + config_get "udp" "$section" "udp" "" + config_get "skip_cert_verify" "$section" "skip_cert_verify" "" + config_get "tls" "$section" "tls" "" + config_get "sni" "$section" "sni" "" + config_get "alpn" "$section" "alpn" "" + config_get "fingerprint" "$section" "fingerprint" "" + config_get "client_fingerprint" "$section" "client_fingerprint" "" + config_get "ip_version" "$section" "ip_version" "" + config_get "tfo" "$section" "tfo" "" + config_get "multiplex" "$section" "multiplex" "" + config_get "multiplex_protocol" "$section" "multiplex_protocol" "" + config_get "multiplex_max_connections" "$section" "multiplex_max_connections" "" + config_get "multiplex_min_streams" "$section" "multiplex_min_streams" "" + config_get "multiplex_max_streams" "$section" "multiplex_max_streams" "" + config_get "multiplex_padding" "$section" "multiplex_padding" "" + config_get "multiplex_statistic" "$section" "multiplex_statistic" "" + config_get "multiplex_only_tcp" "$section" "multiplex_only_tcp" "" + config_get "interface_name" "$section" "interface_name" "" + config_get "routing_mark" "$section" "routing_mark" "" + config_get "other_parameters" "$section" "other_parameters" "" if [ "$client_fingerprint" = "none" ]; then client_fingerprint="" @@ -428,6 +268,35 @@ yml_servers_set() #ss if [ "$type" = "ss" ]; then + config_get "cipher" "$section" "cipher" "" + config_get "obfs" "$section" "obfs" "" + config_get "host" "$section" "host" "" + config_get "mux" "$section" "mux" "" + config_get "custom" "$section" "custom" "" + config_get "path" "$section" "path" "" + config_get "obfs_password" "$section" "obfs_password" "" + config_get "obfs_version_hint" "$section" "obfs_version_hint" "" + config_get "obfs_restls_script" "$section" "obfs_restls_script" "" + config_get "udp_over_tcp" "$section" "udp_over_tcp" "" + + if [ "$obfs" != "none" ] && [ -n "$obfs" ]; then + if [ "$obfs" = "websocket" ]; then + obfss="plugin: v2ray-plugin" + elif [ "$obfs" = "shadow-tls" ]; then + obfss="plugin: shadow-tls" + elif [ "$obfs" = "restls" ]; then + obfss="plugin: restls" + else + obfss="plugin: obfs" + fi + else + obfss="" + fi + + if [ ! -z "$path" ]; then + path="path: \"$path\"" + fi + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -528,6 +397,12 @@ fi #ssr if [ "$type" = "ssr" ]; then + config_get "cipher_ssr" "$section" "cipher_ssr" "" + config_get "obfs_ssr" "$section" "obfs_ssr" "" + config_get "protocol" "$section" "protocol" "" + config_get "obfs_param" "$section" "obfs_param" "" + config_get "protocol_param" "$section" "protocol_param" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -557,6 +432,48 @@ fi #vmess if [ "$type" = "vmess" ]; then + config_get "uuid" "$section" "uuid" "" + config_get "alterId" "$section" "alterId" "" + config_get "securitys" "$section" "securitys" "" + config_get "xudp" "$section" "xudp" "" + config_get "packet_encoding" "$section" "packet_encoding" "" + config_get "global_padding" "$section" "global_padding" "" + config_get "authenticated_length" "$section" "authenticated_length" "" + config_get "servername" "$section" "servername" "" + config_get "obfs_vmess" "$section" "obfs_vmess" "" + config_get "custom" "$section" "custom" "" + config_get "path" "$section" "path" "" + config_get "ws_opts_path" "$section" "ws_opts_path" "" + config_get "ws_opts_headers" "$section" "ws_opts_headers" "" + config_get "max_early_data" "$section" "max_early_data" "" + config_get "early_data_header_name" "$section" "early_data_header_name" "" + config_get "http_path" "$section" "http_path" "" + config_get "keep_alive" "$section" "keep_alive" "" + config_get "h2_path" "$section" "h2_path" "" + config_get "h2_host" "$section" "h2_host" "" + config_get "grpc_service_name" "$section" "grpc_service_name" "" + + if [ "$obfs_vmess" = "websocket" ]; then + obfs_vmess="network: ws" + fi + if [ "$obfs_vmess" = "http" ]; then + obfs_vmess="network: http" + fi + if [ "$obfs_vmess" = "h2" ]; then + obfs_vmess="network: h2" + fi + if [ "$obfs_vmess" = "grpc" ]; then + obfs_vmess="network: grpc" + fi + + if [ ! -z "$custom" ]; then + custom="Host: \"$custom\"" + fi + + if [ ! -z "$path" ] && [ "$obfs_vmess" = "network: ws" ]; then + path="ws-path: \"$path\"" + fi + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -702,6 +619,11 @@ fi #anytls if [ "$type" = "anytls" ]; then + config_get "password" "$section" "password" "" + config_get "idle_session_check_interval" "$section" "idle_session_check_interval" "" + config_get "idle_session_timeout" "$section" "idle_session_timeout" "" + config_get "min_idle_session" "$section" "min_idle_session" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -758,6 +680,11 @@ fi #Mieru if [ "$type" = "mieru" ]; then + config_get "port_range" "$section" "port_range" "" + config_get "username" "$section" "username" "" + config_get "transport" "$section" "transport" "TCP" + config_get "multiplexing" "$section" "multiplexing" "MULTIPLEXING_LOW" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -788,6 +715,21 @@ fi #Tuic if [ "$type" = "tuic" ]; then + config_get "tc_ip" "$section" "tc_ip" "" + config_get "tc_token" "$section" "tc_token" "" + config_get "tc_uuid" "$section" "tc_uuid" "" + config_get "tc_password" "$section" "tc_password" "" + config_get "udp_relay_mode" "$section" "udp_relay_mode" "" + config_get "congestion_controller" "$section" "congestion_controller" "" + config_get "tc_alpn" "$section" "tc_alpn" "" + config_get "disable_sni" "$section" "disable_sni" "" + config_get "reduce_rtt" "$section" "reduce_rtt" "" + config_get "fast_open" "$section" "fast_open" "" + config_get "heartbeat_interval" "$section" "heartbeat_interval" "" + config_get "request_timeout" "$section" "request_timeout" "" + config_get "max_udp_relay_packet_size" "$section" "max_udp_relay_packet_size" "" + config_get "max_open_streams" "$section" "max_open_streams" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -874,6 +816,14 @@ fi #WireGuard if [ "$type" = "wireguard" ]; then + config_get "wg_ip" "$section" "wg_ip" "" + config_get "wg_ipv6" "$section" "wg_ipv6" "" + config_get "private_key" "$section" "private_key" "" + config_get "public_key" "$section" "public_key" "" + config_get "preshared_key" "$section" "preshared_key" "" + config_get "wg_dns" "$section" "wg_dns" "" + config_get "wg_mtu" "$section" "wg_mtu" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -905,7 +855,7 @@ cat >> "$SERVER_FILE" <<-EOF preshared-key: "$preshared_key" EOF fi - if [ -n "$preshared_key" ]; then + if [ -n "$wg_dns" ]; then cat >> "$SERVER_FILE" <<-EOF dns: EOF @@ -925,6 +875,22 @@ fi #hysteria if [ "$type" = "hysteria" ]; then + config_get "hysteria_protocol" "$section" "hysteria_protocol" "" + config_get "hysteria_up" "$section" "hysteria_up" "" + config_get "hysteria_down" "$section" "hysteria_down" "" + config_get "hysteria_alpn" "$section" "hysteria_alpn" "" + config_get "hysteria_obfs" "$section" "hysteria_obfs" "" + config_get "hysteria_auth" "$section" "hysteria_auth" "" + config_get "hysteria_auth_str" "$section" "hysteria_auth_str" "" + config_get "hysteria_ca" "$section" "hysteria_ca" "" + config_get "hysteria_ca_str" "$section" "hysteria_ca_str" "" + config_get "recv_window_conn" "$section" "recv_window_conn" "" + config_get "recv_window" "$section" "recv_window" "" + config_get "disable_mtu_discovery" "$section" "disable_mtu_discovery" "" + config_get "fast_open" "$section" "fast_open" "" + config_get "ports" "$section" "ports" "" + config_get "hop_interval" "$section" "hop_interval" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1029,6 +995,22 @@ fi #hysteria2 if [ "$type" = "hysteria2" ]; then + config_get "password" "$section" "password" "" + config_get "hysteria_up" "$section" "hysteria_up" "" + config_get "hysteria_down" "$section" "hysteria_down" "" + config_get "hysteria_alpn" "$section" "hysteria_alpn" "" + config_get "hysteria_obfs" "$section" "hysteria_obfs" "" + config_get "hysteria_obfs_password" "$section" "hysteria_obfs_password" "" + config_get "hysteria_ca" "$section" "hysteria_ca" "" + config_get "hysteria_ca_str" "$section" "hysteria_ca_str" "" + config_get "initial_stream_receive_window" "$section" "initial_stream_receive_window" "" + config_get "max_stream_receive_window" "$section" "max_stream_receive_window" "" + config_get "initial_connection_receive_window" "$section" "initial_connection_receive_window" "" + config_get "max_connection_receive_window" "$section" "max_connection_receive_window" "" + config_get "ports" "$section" "ports" "" + config_get "hysteria2_protocol" "$section" "hysteria2_protocol" "" + config_get "hop_interval" "$section" "hop_interval" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1096,7 +1078,7 @@ EOF fi if [ -n "$max_stream_receive_window" ]; then cat >> "$SERVER_FILE" <<-EOF - max_stream_receive_window: "$max_stream_receive_window" + max-stream-receive-window: "$max_stream_receive_window" EOF fi if [ -n "$initial_connection_receive_window" ]; then @@ -1133,6 +1115,35 @@ fi #vless if [ "$type" = "vless" ]; then + config_get "uuid" "$section" "uuid" "" + config_get "xudp" "$section" "xudp" "" + config_get "packet_addr" "$section" "packet_addr" "" + config_get "packet_encoding" "$section" "packet_encoding" "" + config_get "servername" "$section" "servername" "" + config_get "obfs_vless" "$section" "obfs_vless" "" + config_get "ws_opts_path" "$section" "ws_opts_path" "" + config_get "ws_opts_headers" "$section" "ws_opts_headers" "" + config_get "grpc_service_name" "$section" "grpc_service_name" "" + config_get "reality_public_key" "$section" "reality_public_key" "" + config_get "reality_short_id" "$section" "reality_short_id" "" + config_get "vless_flow" "$section" "vless_flow" "" + config_get "xhttp_opts_path" "$section" "xhttp_opts_path" "" + config_get "xhttp_opts_host" "$section" "xhttp_opts_host" "" + config_get "vless_encryption" "$section" "vless_encryption" "" + + if [ "$obfs_vless" = "ws" ]; then + obfs_vless="network: ws" + fi + if [ "$obfs_vless" = "grpc" ]; then + obfs_vless="network: grpc" + fi + if [ "$obfs_vless" = "tcp" ]; then + obfs_vless="network: tcp" + fi + if [ "$obfs_vless" = "xhttp" ]; then + obfs_vless="network: xhttp" + fi + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1232,6 +1243,11 @@ EOF if [ ! -z "$vless_flow" ]; then cat >> "$SERVER_FILE" <<-EOF flow: "$vless_flow" +EOF + fi + if [ -n "$vless_encryption" ]; then +cat >> "$SERVER_FILE" <<-EOF + encryption: "$vless_encryption" EOF fi if [ -n "$reality_public_key" ] || [ -n "$reality_short_id" ]; then @@ -1247,6 +1263,21 @@ EOF if [ -n "$reality_short_id" ]; then cat >> "$SERVER_FILE" <<-EOF short-id: "$reality_short_id" +EOF + fi + fi + if [ "$obfs_vless" = "network: xhttp" ]; then +cat >> "$SERVER_FILE" <<-EOF + xhttp-opts: +EOF + if [ -n "$xhttp_opts_path" ]; then +cat >> "$SERVER_FILE" <<-EOF + path: "$xhttp_opts_path" +EOF + fi + if [ -n "$xhttp_opts_host" ]; then +cat >> "$SERVER_FILE" <<-EOF + host: "$xhttp_opts_host" EOF fi fi @@ -1276,6 +1307,13 @@ fi #ssh if [ "$type" = "ssh" ]; then + config_get "auth_name" "$section" "auth_name" "" + config_get "auth_pass" "$section" "auth_pass" "" + config_get "private_key" "$section" "private_key" "" + config_get "private_key_passphrase" "$section" "private_key_passphrase" "" + config_get "host_key" "$section" "host_key" "" + config_get "host_key_algorithms" "$section" "host_key_algorithms" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1318,6 +1356,9 @@ fi #socks5 if [ "$type" = "socks5" ]; then + config_get "auth_name" "$section" "auth_name" "" + config_get "auth_pass" "$section" "auth_pass" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1358,6 +1399,10 @@ fi #http if [ "$type" = "http" ]; then + config_get "auth_name" "$section" "auth_name" "" + config_get "auth_pass" "$section" "auth_pass" "" + config_get "http_headers" "$section" "http_headers" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1399,6 +1444,11 @@ fi #trojan if [ "$type" = "trojan" ]; then + config_get "grpc_service_name" "$section" "grpc_service_name" "" + config_get "obfs_trojan" "$section" "obfs_trojan" "" + config_get "trojan_ws_path" "$section" "trojan_ws_path" "" + config_get "trojan_ws_headers" "$section" "trojan_ws_headers" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1467,6 +1517,11 @@ fi #snell if [ "$type" = "snell" ]; then + config_get "psk" "$section" "psk" "" + config_get "snell_version" "$section" "snell_version" "" + config_get "obfs_snell" "$section" "obfs_snell" "" + config_get "host" "$section" "host" "" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1490,6 +1545,13 @@ fi #Sudoku if [ "$type" = "sudoku" ]; then + config_get "sudoku_key" "$section" "sudoku_key" "" + config_get "aead_method" "$section" "aead_method" "none" + config_get "padding_min" "$section" "padding_min" "" + config_get "padding_max" "$section" "padding_max" "" + config_get "table_type" "$section" "table_type" "prefer_ascii" + config_get "http_mask" "$section" "http_mask" "true" + cat >> "$SERVER_FILE" <<-EOF - name: "$name" type: $type @@ -1528,6 +1590,132 @@ EOF fi fi +#MASQUE +if [ "$type" = "masque" ]; then + config_get "masque_private_key" "$section" "masque_private_key" "" + config_get "masque_public_key" "$section" "masque_public_key" "" + config_get "masque_ip" "$section" "masque_ip" "" + config_get "masque_ipv6" "$section" "masque_ipv6" "" + config_get "masque_mtu" "$section" "masque_mtu" "" + config_get "masque_remote_dns_resolve" "$section" "masque_remote_dns_resolve" "" + config_get "masque_dns" "$section" "masque_dns" "" + +cat >> "$SERVER_FILE" <<-EOF + - name: "$name" + type: $type + server: "$server" + port: $port +EOF + if [ -n "$masque_private_key" ]; then +cat >> "$SERVER_FILE" <<-EOF + private-key: "$masque_private_key" +EOF + fi + if [ -n "$masque_public_key" ]; then +cat >> "$SERVER_FILE" <<-EOF + public-key: "$masque_public_key" +EOF + fi + if [ -n "$masque_ip" ]; then +cat >> "$SERVER_FILE" <<-EOF + ip: "$masque_ip" +EOF + fi + if [ -n "$masque_ipv6" ]; then +cat >> "$SERVER_FILE" <<-EOF + ipv6: "$masque_ipv6" +EOF + fi + if [ -n "$masque_mtu" ]; then +cat >> "$SERVER_FILE" <<-EOF + mtu: $masque_mtu +EOF + fi + if [ -n "$masque_remote_dns_resolve" ]; then +cat >> "$SERVER_FILE" <<-EOF + remote-dns-resolve: $masque_remote_dns_resolve +EOF + fi + if [ ! -z "$udp" ]; then +cat >> "$SERVER_FILE" <<-EOF + udp: $udp +EOF + fi + if [ ! -z "$masque_dns" ]; then +cat >> "$SERVER_FILE" <<-EOF + dns: +EOF + config_list_foreach "$section" "masque_dns" set_alpn + fi +fi + +#TrustTunnel +if [ "$type" = "trusttunnel" ]; then + config_get "trusttunnel_username" "$section" "trusttunnel_username" "" + config_get "trusttunnel_password" "$section" "trusttunnel_password" "" + config_get "trusttunnel_health_check" "$section" "trusttunnel_health_check" "" + config_get "trusttunnel_quic" "$section" "trusttunnel_quic" "" + config_get "trusttunnel_congestion_controller" "$section" "trusttunnel_congestion_controller" "" + +cat >> "$SERVER_FILE" <<-EOF + - name: "$name" + type: $type + server: "$server" + port: $port +EOF + if [ -n "$trusttunnel_username" ]; then +cat >> "$SERVER_FILE" <<-EOF + username: "$trusttunnel_username" +EOF + fi + if [ -n "$trusttunnel_password" ]; then +cat >> "$SERVER_FILE" <<-EOF + password: "$trusttunnel_password" +EOF + fi + if [ -n "$trusttunnel_health_check" ]; then +cat >> "$SERVER_FILE" <<-EOF + health-check: $trusttunnel_health_check +EOF + fi + if [ -n "$trusttunnel_quic" ]; then +cat >> "$SERVER_FILE" <<-EOF + quic: $trusttunnel_quic +EOF + fi + if [ -n "$trusttunnel_congestion_controller" ]; then +cat >> "$SERVER_FILE" <<-EOF + congestion-controller: "$trusttunnel_congestion_controller" +EOF + fi + if [ -n "$client_fingerprint" ]; then +cat >> "$SERVER_FILE" <<-EOF + client-fingerprint: "$client_fingerprint" +EOF + fi + if [ -n "$udp" ]; then +cat >> "$SERVER_FILE" <<-EOF + udp: $udp +EOF + fi + if [ -n "$sni" ]; then +cat >> "$SERVER_FILE" <<-EOF + sni: "$sni" +EOF + fi + if [ ! -z "$alpn" ]; then +cat >> "$SERVER_FILE" <<-EOF + alpn: +EOF + config_list_foreach "$section" "alpn" set_alpn + fi + if [ ! -z "$skip_cert_verify" ]; then +cat >> "$SERVER_FILE" <<-EOF + skip-cert-verify: $skip_cert_verify +EOF + fi +fi + #ip_version if [ ! -z "$ip_version" ]; then cat >> "$SERVER_FILE" <<-EOF diff --git a/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh b/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh index f0bb09f12..cf3d06ef0 100755 --- a/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh +++ b/luci-app-openclash/root/usr/share/openclash/yml_rules_change.sh @@ -21,6 +21,9 @@ yml_other_set() begin thread_pool = []; + # GEOIP replace + geoip_pattern = /GEOIP,([A-Za-z]{2}),([^,]+)(,.*)?/; + match_pattern = /(^MATCH.*|^FINAL.*)/; thread_pool << Thread.new{ #BT/P2P DIRECT Rules begin @@ -102,10 +105,6 @@ yml_other_set() end; end; - # GEOIP replace - geoip_pattern = /GEOIP,([A-Za-z]{2}),([^,]+)(,.*)?/; - match_pattern = /(^MATCH.*|^FINAL.*)/; - Value['rules'].to_a.collect!{|x| x.to_s.gsub(geoip_pattern, 'GEOIP,\1,DIRECT\3').gsub(match_pattern, 'MATCH,DIRECT') }; @@ -136,6 +135,18 @@ yml_other_set() { file: '/etc/openclash/custom/openclash_custom_rules_2.list', position: 'bottom' } ]; + # 在开始对 custom_files 进行插入之前,记录当前 rules 中 GEOIP、MATCH、DST-PORT,80 的原始规则文本(锚点) + anchors_orig = {} + if Value.has_key?('rules') and not Value['rules'].to_a.empty? then + anchors_orig[:dst80_rule] = Value['rules'].grep(/DST-PORT,80/).last + anchors_orig[:match_rule] = Value['rules'].grep(match_pattern).first + anchors_orig[:geo_rule] = Value['rules'].grep(geoip_pattern).first + else + anchors_orig[:dst80_rule] = nil + anchors_orig[:match_rule] = nil + anchors_orig[:geo_rule] = nil + end; + custom_files.each{|file_info| if File::exist?(file_info[:file]) then custom_data = YAML.load_file(file_info[:file]); @@ -150,6 +161,13 @@ yml_other_set() [] end; + rule_providers_array = case custom_data.class.to_s + when 'Hash' + custom_data['rule-providers'].to_a if custom_data['rule-providers'].class.to_s == 'Hash' + else + [] + end; + next unless rules_array; ipv4_regex = /^(\d{1,3}\.){3}\d{1,3}$/; @@ -157,9 +175,10 @@ yml_other_set() cidr_regex = /\/\d+$/; rule_suffix_regex = /^no-resolve$|^src$/; + ip_rule_types = ['IP-CIDR', 'IP-CIDR6', 'SRC-IP-CIDR', 'SRC-IP-CIDR6', 'IP-SUFFIX', 'SRC-IP-SUFFIX']; transformed_rules = rules_array.map{|x| parts = x.split(','); - if parts.length >= 2 then + if parts.length >= 2 && ip_rule_types.include?(parts[0].strip.upcase) then ip_part = parts[1].strip; if ip_part !~ cidr_regex then # IPv4 @@ -194,11 +213,15 @@ yml_other_set() if file_info[:position] == 'top' then valid_rules.reverse.each{|x| Value['rules'].insert(0,x)}; else - if Value['rules'].grep(/GEOIP/)[0].nil? or Value['rules'].grep(/GEOIP/)[0].empty? then - ruby_add_index = Value['rules'].index(Value['rules'].grep(/DST-PORT,80/).last); - ruby_add_index ||= Value['rules'].index(Value['rules'].grep(/(MATCH|FINAL)/).first); - else - ruby_add_index = Value['rules'].index(Value['rules'].grep(/GEOIP/).first); + ruby_add_index = nil; + if anchors_orig[:dst80_rule] + ruby_add_index = Value['rules'].rindex(anchors_orig[:dst80_rule]) + end; + if ruby_add_index.nil? and anchors_orig[:match_rule] + ruby_add_index = Value['rules'].rindex(anchors_orig[:match_rule]) + end; + if ruby_add_index.nil? and anchors_orig[:geo_rule] + ruby_add_index = Value['rules'].rindex(anchors_orig[:geo_rule]) end; ruby_add_index ||= -1; @@ -209,6 +232,11 @@ yml_other_set() else Value['rules'] = valid_rules.uniq; end; + + if rule_providers_array and not rule_providers_array.empty? then + Value['rule-providers'] ||= {}; + Value['rule-providers'] = Value['rule-providers'].merge!(custom_data['rule-providers']); + end; end; }; @@ -256,19 +284,13 @@ yml_other_set() thread_pool << Thread.new{ threads = []; - #provider path + #provider CDN begin provider_configs = {'proxy-providers' => 'proxy_provider', 'rule-providers' => 'rule_provider'}; provider_configs.each do |provider_type, path_prefix| - if Value.key?(provider_type) then + if Value.key?(provider_type) && Value[provider_type].is_a?(Hash) then Value[provider_type].each{|name, config| threads << Thread.new { - if config['path'] and not config['path'] =~ /.\/#{path_prefix}\/*/ then - config['path'] = './'+path_prefix+'/'+File.basename(config['path']); - elsif not config['path'] and config['type'] == 'http' then - config['path'] = './'+path_prefix+'/'+name; - end; - # CDN if '$github_address_mod' != '0' and config['url'] then if config['url'] =~ /^https:\/\/raw.githubusercontent.com/ then @@ -293,12 +315,12 @@ yml_other_set() end; end; rescue Exception => e - YAML.LOG_ERROR('Edit Provider Path Failed,【' + e.message + '】'); + YAML.LOG_ERROR('Edit Provider CDN Failed,【' + e.message + '】'); end; # tolerance begin - if '$tolerance' != '0' and Value.key?('proxy-groups') then + if '$tolerance' != '0' and Value.key?('proxy-groups') and Value['proxy-groups'].is_a?(Array) then Value['proxy-groups'].each{|group| threads << Thread.new { if group['type'] == 'url-test' then @@ -314,7 +336,7 @@ yml_other_set() # URL-Test interval begin if '$urltest_interval_mod' != '0' then - if Value.key?('proxy-groups') then + if Value.key?('proxy-groups') and Value['proxy-groups'].is_a?(Array) then Value['proxy-groups'].each{|group| threads << Thread.new { if ['url-test', 'fallback', 'load-balance', 'smart'].include?(group['type']) then @@ -349,7 +371,7 @@ yml_other_set() }; }; end; - if Value.key?('proxy-groups') then + if Value.key?('proxy-groups') and Value['proxy-groups'].is_a?(Array) then Value['proxy-groups'].each{|group| threads << Thread.new { if ['url-test', 'fallback', 'load-balance', 'smart'].include?(group['type']) then @@ -365,7 +387,7 @@ yml_other_set() # smart auto switch begin - if ('${8}' == '1' or '${9}' == '1' or '${11}' != '0' or '${12}' != '0' or '${12}' == '1' or '${13}' == '1') and Value.key?('proxy-groups') then + if ('${8}' == '1' or '${9}' == '1' or '${11}' != '0' or '${12}' != '0' or '${12}' == '1' or '${13}' == '1') and Value.key?('proxy-groups') and Value['proxy-groups'].is_a?(Array) then Value['proxy-groups'].each{|group| threads << Thread.new { if '${8}' == '1' and ['url-test', 'load-balance'].include?(group['type']) then diff --git a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/js-yaml.min.js b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/js-yaml.min.js index bdd8eef54..8e7f7664e 100644 --- a/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/js-yaml.min.js +++ b/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/js-yaml.min.js @@ -1,2 +1,2 @@ -/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jsyaml={})}(this,(function(e){"use strict";function t(e){return null==e}var n={isNothing:t,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:t(e)?[]:[e]},repeat:function(e,t){var n,i="";for(n=0;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var c=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,o=[0],c=[],s=-1;i=r.exec(e.buffer);)c.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=o.length-2);s<0&&(s=o.length-1);var u,p,f="",d=Math.min(e.line+t.linesAfter,c.length).toString().length,h=t.maxLength-(t.indent+d+3);for(u=1;u<=t.linesBefore&&!(s-u<0);u++)p=a(e.buffer,o[s-u],c[s-u],e.position-(o[s]-o[s-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f;for(p=a(e.buffer,o[s],c[s],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(s+u>=c.length);u++)p=a(e.buffer,o[s+u],c[s+u],e.position-(o[s]-o[s+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n";return f.replace(/\n$/,"")},s=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"];var p=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===s.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function f(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)})),n[t]=e})),n}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[];if(e instanceof p)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var i=Object.create(d.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit"),i.compiledExplicit=f(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),x=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var I=/^[-+]?[0-9]+e/;var S=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!x.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0";return i=e.toString(10),I.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),O=b.extend({implicit:[A,v,C,S]}),j=O,T=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var F=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==T.exec(e)||null!==N.exec(e))},construct:function(e){var t,n,i,r,o,a,l,c,s=0,u=null;if(null===(t=T.exec(e))&&(t=N.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(s=t[7].slice(0,3);s.length<3;)s+="0";s=+s}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),c=new Date(Date.UTC(n,i,r,o,a,l,s)),u&&c.setTime(c.getTime()-u),c},instanceOf:Date,represent:function(e){return e.toISOString()}});var E=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var L=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=M;for(n=0;n64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=M,a=0,l=[];for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=M;for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),_=Object.prototype.hasOwnProperty,D=Object.prototype.toString;var U=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],l=e;for(t=0,n=l.length;t>10),56320+(e-65536&1023))}for(var ie=new Array(256),re=new Array(256),oe=0;oe<256;oe++)ie[oe]=te(oe)?1:0,re[oe]=te(oe);function ae(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||K,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function le(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=c(n),new o(t,n)}function ce(e,t){throw le(e,t)}function se(e,t){e.onWarning&&e.onWarning.call(null,le(e,t))}var ue={YAML:function(e,t,n){var i,r,o;null!==e.version&&ce(e,"duplication of %YAML directive"),1!==n.length&&ce(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&ce(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&ce(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&se(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&ce(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],G.test(i)||ce(e,"ill-formed tag handle (first argument) of the TAG directive"),P.call(e.tagMap,i)&&ce(e,'there is a previously declared suffix for "'+i+'" tag handle'),V.test(r)||ce(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(t){ce(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function pe(e,t,n,i){var r,o,a,l;if(t1&&(e.result+=n.repeat("\n",t-1))}function be(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,ce(e,"tab characters must not be used in indentation")),45===i)&&z(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,ge(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,we(e,t,3,!1,!0),a.push(e.result),ge(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)ce(e,"bad indentation of a sequence entry");else if(e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,c=e.position),we(e,t,4,!0,r)&&(y?g=e.result:m=e.result),y||(de(e,f,d,h,g,m,a,l,c),h=g=m=null),ge(e,!0,-1),s=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==s)ce(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===o?ce(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?ce(e,"repeat of an indentation width identifier"):(p=t+o-1,u=!0)}if(Q(a)){do{a=e.input.charCodeAt(++e.position)}while(Q(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!J(a)&&0!==a)}for(;0!==a;){for(he(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),J(a))f++;else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=ee(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:ce(e,"expected hexadecimal character");e.result+=ne(o),e.position++}else ce(e,"unknown escape sequence");n=i=e.position}else J(l)?(pe(e,n,i,!0),ye(e,ge(e,!1,t)),n=i=e.position):e.position===e.lineStart&&me(e)?ce(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}ce(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!z(i)&&!X(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&ce(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),P.call(e.anchorMap,n)||ce(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result;if(z(u=e.input.charCodeAt(e.position))||X(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(z(i=e.input.charCodeAt(e.position+1))||n&&X(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(z(i=e.input.charCodeAt(e.position+1))||n&&X(i))break}else if(35===u){if(z(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&me(e)||n&&X(u))break;if(J(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s;break}}a&&(pe(e,r,o,!1),ye(e,e.line-l),r=o=e.position,a=!1),Q(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return pe(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||ce(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===g&&(y=c&&be(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&ce(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&ce(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ce(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function ke(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&ce(e,"directive name must not be less than one character in length");0!==r;){for(;Q(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!J(r));break}if(J(r))break;for(t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&he(e),P.call(ue,n)?ue[n](e,n,i):se(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):a&&ce(e,"directives end mark is expected"),we(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&H.test(e.input.slice(o,e.position))&&se(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&me(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function Re(e){return/^\n* /.test(e)}function Be(e,t,n,i,r,o,a,l){var c,s,u=0,p=null,f=!1,d=!1,h=-1!==i,g=-1,m=De(s=Ye(e,0))&&s!==Oe&&!_e(s)&&45!==s&&63!==s&&58!==s&&44!==s&&91!==s&&93!==s&&123!==s&&125!==s&&35!==s&&38!==s&&42!==s&&33!==s&&124!==s&&61!==s&&62!==s&&39!==s&&34!==s&&37!==s&&64!==s&&96!==s&&function(e){return!_e(e)&&58!==e}(Ye(e,e.length-1));if(t||a)for(c=0;c=65536?c+=2:c++){if(!De(u=Ye(e,c)))return 5;m=m&&qe(u,p,l),p=u}else{for(c=0;c=65536?c+=2:c++){if(10===(u=Ye(e,c)))f=!0,h&&(d=d||c-g-1>i&&" "!==e[g+1],g=c);else if(!De(u))return 5;m=m&&qe(u,p,l),p=u}d=d||h&&c-g-1>i&&" "!==e[g+1]}return f||d?n>9&&Re(e)?5:a?2===o?5:2:d?4:3:!m||a||r(e)?2===o?5:2:1}function Ke(e,t,n,i,r){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Te.indexOf(t)||Ne.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),c=i||e.flowLevel>-1&&n>=e.flowLevel;switch(Be(t,c,e.indent,l,(function(t){return function(e,t){var n,i;for(n=0,i=e.implicitTypes.length;n"+Pe(t,e.indent)+We(Me(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,He(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0];var l;for(;i=r.exec(e);){var c=i[1],s=i[2];n=" "===s[0],o+=c+(a||n||""===s?"":"\n")+He(s,t),a=n}return o}(t,l),a));case 5:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=Ye(e,r),!(t=je[i])&&De(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||Fe(i);return n}(t)+'"';default:throw new o("impossible error: invalid scalar style")}}()}function Pe(e,t){var n=Re(e)?String(t):"",i="\n"===e[e.length-1];return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function We(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function He(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,c="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,c+="\n"+e.slice(o,i),o=i+1),a=l;return c+="\n",e.length-o>t&&a>o?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function $e(e,t,n,i){var r,o,a,l="",c=e.tag;for(r=0,o=n.length;r tag resolver accepts not "'+s+'" style');i=c.represent[s](t,s)}e.dump=i}return!0}return!1}function Ve(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Ge(e,n,!1)||Ge(e,n,!0);var c,s=Ie.call(e.dump),u=i;i&&(i=e.flowLevel<0||e.flowLevel>t);var p,f,d="[object Object]"===s||"[object Array]"===s;if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===s)i&&0!==Object.keys(e.dump).length?(!function(e,t,n,i){var r,a,l,c,s,u,p="",f=e.tag,d=Object.keys(n);if(!0===e.sortKeys)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function");for(r=0,a=d.length;r1024)&&(e.dump&&10===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,s&&(u+=Le(e,t)),Ve(e,t+1,c,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump));e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a,l,c="",s=e.tag,u=Object.keys(n);for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ve(e,t,a,!1,!1)&&(c+=l+=e.dump));e.tag=s,e.dump="{"+c+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump));else if("[object Array]"===s)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?$e(e,t-1,e.dump,r):$e(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a="",l=e.tag;for(i=0,r=n.length;i",e.dump=c+" "+e.dump)}return!0}function Ze(e,t){var n,i,r=[],o=[];for(Je(e,r,o),n=0,i=o.length;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var c=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,o=[0],c=[],s=-1;i=r.exec(e.buffer);)c.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=o.length-2);s<0&&(s=o.length-1);var u,p,f="",d=Math.min(e.line+t.linesAfter,c.length).toString().length,h=t.maxLength-(t.indent+d+3);for(u=1;u<=t.linesBefore&&!(s-u<0);u++)p=a(e.buffer,o[s-u],c[s-u],e.position-(o[s]-o[s-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f;for(p=a(e.buffer,o[s],c[s],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(s+u>=c.length);u++)p=a(e.buffer,o[s+u],c[s+u],e.position-(o[s]-o[s+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n";return f.replace(/\n$/,"")},s=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"];var p=function(e,t){if(t=t||{},Object.keys(t).forEach(function(t){if(-1===s.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach(function(n){e[n].forEach(function(e){t[String(e)]=n})}),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function f(e,t){var n=[];return e[t].forEach(function(e){var t=n.length;n.forEach(function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)}),n[t]=e}),n}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[];if(e instanceof p)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach(function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(d.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit"),i.compiledExplicit=f(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),I=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var S=/^[-+]?[0-9]+e/;var O=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!I.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0";return i=e.toString(10),S.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),j=b.extend({implicit:[A,v,x,O]}),T=j,N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),F=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var E=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==N.exec(e)||null!==F.exec(e))},construct:function(e){var t,n,i,r,o,a,l,c,s=0,u=null;if(null===(t=N.exec(e))&&(t=F.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(s=t[7].slice(0,3);s.length<3;)s+="0";s=+s}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),c=new Date(Date.UTC(n,i,r,o,a,l,s)),u&&c.setTime(c.getTime()-u),c},instanceOf:Date,represent:function(e){return e.toISOString()}});var M=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),L="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var _=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=L;for(n=0;n64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=L,a=0,l=[];for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=L;for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),D=Object.prototype.hasOwnProperty,U=Object.prototype.toString;var q=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],l=e;for(t=0,n=l.length;t>10),56320+(e-65536&1023))}function ae(e,t,n){"__proto__"===t?Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:n}):e[t]=n}for(var le=new Array(256),ce=new Array(256),se=0;se<256;se++)le[se]=re(se)?1:0,ce[se]=re(se);function ue(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||P,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function pe(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=c(n),new o(t,n)}function fe(e,t){throw pe(e,t)}function de(e,t){e.onWarning&&e.onWarning.call(null,pe(e,t))}var he={YAML:function(e,t,n){var i,r,o;null!==e.version&&fe(e,"duplication of %YAML directive"),1!==n.length&&fe(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&fe(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&fe(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&de(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&fe(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],V.test(i)||fe(e,"ill-formed tag handle (first argument) of the TAG directive"),W.call(e.tagMap,i)&&fe(e,'there is a previously declared suffix for "'+i+'" tag handle'),Z.test(r)||fe(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(t){fe(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function ge(e,t,n,i){var r,o,a,l;if(t1&&(e.result+=n.repeat("\n",t-1))}function ke(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,fe(e,"tab characters must not be used in indentation")),45===i)&&X(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,Ae(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,Ie(e,t,3,!1,!0),a.push(e.result),Ae(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)fe(e,"bad indentation of a sequence entry");else if(e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,c=e.position),Ie(e,t,4,!0,r)&&(y?g=e.result:m=e.result),y||(ye(e,f,d,h,g,m,a,l,c),h=g=m=null),Ae(e,!0,-1),s=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==s)fe(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===o?fe(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?fe(e,"repeat of an indentation width identifier"):(u=t+o-1,s=!0)}if(z(a)){do{a=e.input.charCodeAt(++e.position)}while(z(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!Q(a)&&0!==a)}for(;0!==a;){for(be(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!s||e.lineIndentu&&(u=e.lineIndent),Q(a))p++;else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=te(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:fe(e,"expected hexadecimal character");e.result+=oe(o),e.position++}else fe(e,"unknown escape sequence");n=i=e.position}else Q(l)?(ge(e,n,i,!0),we(e,Ae(e,!1,t)),n=i=e.position):e.position===e.lineStart&&ve(e)?fe(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}fe(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!X(i)&&!ee(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&fe(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),W.call(e.anchorMap,n)||fe(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],Ae(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result;if(X(u=e.input.charCodeAt(e.position))||ee(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(X(i=e.input.charCodeAt(e.position+1))||n&&ee(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(X(i=e.input.charCodeAt(e.position+1))||n&&ee(i))break}else if(35===u){if(X(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&ve(e)||n&&ee(u))break;if(Q(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,Ae(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s;break}}a&&(ge(e,r,o,!1),we(e,e.line-l),r=o=e.position,a=!1),z(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return ge(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||fe(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===g&&(y=c&&ke(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&fe(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&fe(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):fe(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function Se(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(Ae(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!X(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&fe(e,"directive name must not be less than one character in length");0!==r;){for(;z(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!Q(r));break}if(Q(r))break;for(t=e.position;0!==r&&!X(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&be(e),W.call(he,n)?he[n](e,n,i):de(e,'unknown document directive "'+n+'"')}Ae(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,Ae(e,!0,-1)):a&&fe(e,"directives end mark is expected"),Ie(e,e.lineIndent-1,4,!1,!0),Ae(e,!0,-1),e.checkLineBreaks&&$.test(e.input.slice(o,e.position))&&de(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&ve(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,Ae(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function We(e){return/^\n* /.test(e)}function He(e,t,n,i,r,o,a,l){var c,s,u=0,p=null,f=!1,d=!1,h=-1!==i,g=-1,m=Re(s=Pe(e,0))&&s!==Fe&&!Ye(s)&&45!==s&&63!==s&&58!==s&&44!==s&&91!==s&&93!==s&&123!==s&&125!==s&&35!==s&&38!==s&&42!==s&&33!==s&&124!==s&&61!==s&&62!==s&&39!==s&&34!==s&&37!==s&&64!==s&&96!==s&&function(e){return!Ye(e)&&58!==e}(Pe(e,e.length-1));if(t||a)for(c=0;c=65536?c+=2:c++){if(!Re(u=Pe(e,c)))return 5;m=m&&Ke(u,p,l),p=u}else{for(c=0;c=65536?c+=2:c++){if(10===(u=Pe(e,c)))f=!0,h&&(d=d||c-g-1>i&&" "!==e[g+1],g=c);else if(!Re(u))return 5;m=m&&Ke(u,p,l),p=u}d=d||h&&c-g-1>i&&" "!==e[g+1]}return f||d?n>9&&We(e)?5:a?2===o?5:2:d?4:3:!m||a||r(e)?2===o?5:2:1}function $e(e,t,n,i,r){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Me.indexOf(t)||Le.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),c=i||e.flowLevel>-1&&n>=e.flowLevel;switch(He(t,c,e.indent,l,function(t){return function(e,t){var n,i;for(n=0,i=e.implicitTypes.length;n"+Ge(t,e.indent)+Ve(Ue(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,Ze(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0];var l;for(;i=r.exec(e);){var c=i[1],s=i[2];n=" "===s[0],o+=c+(a||n||""===s?"":"\n")+Ze(s,t),a=n}return o}(t,l),a));case 5:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=Pe(e,r),!(t=Ee[i])&&Re(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||_e(i);return n}(t)+'"';default:throw new o("impossible error: invalid scalar style")}}()}function Ge(e,t){var n=We(e)?String(t):"",i="\n"===e[e.length-1];return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function Ve(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function Ze(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,c="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,c+="\n"+e.slice(o,i),o=i+1),a=l;return c+="\n",e.length-o>t&&a>o?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function Je(e,t,n,i){var r,o,a,l="",c=e.tag;for(r=0,o=n.length;r tag resolver accepts not "'+s+'" style');i=c.represent[s](t,s)}e.dump=i}return!0}return!1}function ze(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Qe(e,n,!1)||Qe(e,n,!0);var c,s=Te.call(e.dump),u=i;i&&(i=e.flowLevel<0||e.flowLevel>t);var p,f,d="[object Object]"===s||"[object Array]"===s;if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===s)i&&0!==Object.keys(e.dump).length?(!function(e,t,n,i){var r,a,l,c,s,u,p="",f=e.tag,d=Object.keys(n);if(!0===e.sortKeys)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function");for(r=0,a=d.length;r1024)&&(e.dump&&10===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,s&&(u+=qe(e,t)),ze(e,t+1,c,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump));e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a,l,c="",s=e.tag,u=Object.keys(n);for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),ze(e,t,a,!1,!1)&&(c+=l+=e.dump));e.tag=s,e.dump="{"+c+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump));else if("[object Array]"===s)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?Je(e,t-1,e.dump,r):Je(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a="",l=e.tag;for(i=0,r=n.length;i",e.dump=c+" "+e.dump)}return!0}function Xe(e,t){var n,i,r=[],o=[];for(et(e,r,o),n=0,i=o.length;n=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a, -b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a}; -diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l= -u)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]}; +var diff_match_patch=function(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32},DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;diff_match_patch.Diff=function(a,b){this[0]=a;this[1]=b};diff_match_patch.Diff.prototype.length=2;diff_match_patch.Diff.prototype.toString=function(){return this[0]+","+this[1]}; +diff_match_patch.prototype.diff_main=function(a,b,c,d){"undefined"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[new diff_match_patch.Diff(DIFF_EQUAL,a)]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0, +b.length-f);a=this.diff_compute_(a,b,e,d);c&&a.unshift(new diff_match_patch.Diff(DIFF_EQUAL,c));g&&a.push(new diff_match_patch.Diff(DIFF_EQUAL,g));this.diff_cleanupMerge(a);return a}; +diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[new diff_match_patch.Diff(DIFF_INSERT,b)];if(!b)return[new diff_match_patch.Diff(DIFF_DELETE,a)];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[new diff_match_patch.Diff(DIFF_INSERT,e.substring(0,g)),new diff_match_patch.Diff(DIFF_EQUAL,f),new diff_match_patch.Diff(DIFF_INSERT,e.substring(g+f.length))],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[new diff_match_patch.Diff(DIFF_DELETE, +a),new diff_match_patch.Diff(DIFF_INSERT,b)]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([new diff_match_patch.Diff(DIFF_EQUAL,a)],c)):c&&100c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n= +u)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[new diff_match_patch.Diff(DIFF_DELETE,a),new diff_match_patch.Diff(DIFF_INSERT,b)]}; diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)}; -diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;fd?a=a.substring(c-d):c=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null; -var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.lengthd[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]}; -diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}}; -diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_); -return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]= -h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/; -diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;fb)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)}; -diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=//g,f=/\n/g,g=0;g");switch(h){case 1:b[g]=''+j+"";break;case -1:b[g]=''+j+"";break;case 0:b[g]=""+j+""}}return b.join("")}; -diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;cthis.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h}; +diff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null; +var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.lengthd[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]}; +diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,new diff_match_patch.Diff(DIFF_EQUAL,c.substring(0,d))),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,new diff_match_patch.Diff(DIFF_EQUAL,b.substring(0,e))),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE, +a[f+1][1]=b.substring(e),f++;f++}f++}}; +diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_); +return k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c- +1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/; +diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;fb)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)}; +diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=//g,f=/\n/g,g=0;g");switch(h){case DIFF_INSERT:b[g]=''+l+"";break;case DIFF_DELETE:b[g]=''+l+"";break;case DIFF_EQUAL:b[g]=""+l+""}}return b.join("")}; +diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;cthis.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h}; diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c=2*this.Patch_Margin&& -e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;cthis.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g); -if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;ie[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0, -c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c}; -diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&& -(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c}; +diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;cthis.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h, +g);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;le[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs; +0==e.length||e[e.length-1][0]!=DIFF_EQUAL?(e.push(new diff_match_patch.Diff(DIFF_EQUAL,c)),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c}; +diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push(new diff_match_patch.Diff(g,k)),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push(new diff_match_patch.Diff(g,k)),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs); +g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL,k)));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c= 105) { d.wrapper.style.clipPath = "inset(0px)"; } + if (chrome && chrome_version === 105) { d.wrapper.style.clipPath = "inset(0px)"; } // This attribute is respected by automatic translation systems such as Google Translate, // and may also be respected by tools used by human translators. @@ -9877,7 +9877,7 @@ addLegacyProps(CodeMirror); - CodeMirror.version = "5.65.18"; + CodeMirror.version = "5.65.21"; return CodeMirror; diff --git a/luci-app-openclash/tools/po2lmo/Makefile b/luci-app-openclash/tools/po2lmo/Makefile new file mode 100644 index 000000000..ad2c13320 --- /dev/null +++ b/luci-app-openclash/tools/po2lmo/Makefile @@ -0,0 +1,12 @@ + +INSTALL = install +PREFIX = /usr/bin + +po2lmo: src/po2lmo.o src/template_lmo.o + $(CC) $(LDFLAGS) -o src/po2lmo src/po2lmo.o src/template_lmo.o + +install: + $(INSTALL) -m 755 src/po2lmo $(PREFIX) + +clean: + $(RM) src/po2lmo src/*.o diff --git a/luci-app-openclash/tools/po2lmo/src/po2lmo b/luci-app-openclash/tools/po2lmo/src/po2lmo new file mode 100644 index 000000000..68d4c13ac Binary files /dev/null and b/luci-app-openclash/tools/po2lmo/src/po2lmo differ diff --git a/luci-app-openclash/tools/po2lmo/src/po2lmo.c b/luci-app-openclash/tools/po2lmo/src/po2lmo.c new file mode 100644 index 000000000..0da792b68 --- /dev/null +++ b/luci-app-openclash/tools/po2lmo/src/po2lmo.c @@ -0,0 +1,247 @@ +/* + * lmo - Lua Machine Objects - PO to LMO conversion tool + * + * Copyright (C) 2009-2012 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_lmo.h" + +static void die(const char *msg) +{ + fprintf(stderr, "Error: %s\n", msg); + exit(1); +} + +static void usage(const char *name) +{ + fprintf(stderr, "Usage: %s input.po output.lmo\n", name); + exit(1); +} + +static void print(const void *ptr, size_t size, size_t nmemb, FILE *stream) +{ + if( fwrite(ptr, size, nmemb, stream) == 0 ) + die("Failed to write stdout"); +} + +static int extract_string(const char *src, char *dest, int len) +{ + int pos = 0; + int esc = 0; + int off = -1; + + for( pos = 0; (pos < strlen(src)) && (pos < len); pos++ ) + { + if( (off == -1) && (src[pos] == '"') ) + { + off = pos + 1; + } + else if( off >= 0 ) + { + if( esc == 1 ) + { + switch (src[pos]) + { + case '"': + case '\\': + off++; + break; + } + dest[pos-off] = src[pos]; + esc = 0; + } + else if( src[pos] == '\\' ) + { + dest[pos-off] = src[pos]; + esc = 1; + } + else if( src[pos] != '"' ) + { + dest[pos-off] = src[pos]; + } + else + { + dest[pos-off] = '\0'; + break; + } + } + } + + return (off > -1) ? strlen(dest) : -1; +} + +static int cmp_index(const void *a, const void *b) +{ + uint32_t x = ((const lmo_entry_t *)a)->key_id; + uint32_t y = ((const lmo_entry_t *)b)->key_id; + + if (x < y) + return -1; + else if (x > y) + return 1; + + return 0; +} + +static void print_uint32(uint32_t x, FILE *out) +{ + uint32_t y = htonl(x); + print(&y, sizeof(uint32_t), 1, out); +} + +static void print_index(void *array, int n, FILE *out) +{ + lmo_entry_t *e; + + qsort(array, n, sizeof(*e), cmp_index); + + for (e = array; n > 0; n--, e++) + { + print_uint32(e->key_id, out); + print_uint32(e->val_id, out); + print_uint32(e->offset, out); + print_uint32(e->length, out); + } +} + +int main(int argc, char *argv[]) +{ + char line[4096]; + char key[4096]; + char val[4096]; + char tmp[4096]; + int state = 0; + int offset = 0; + int length = 0; + int n_entries = 0; + void *array = NULL; + lmo_entry_t *entry = NULL; + uint32_t key_id, val_id; + + FILE *in; + FILE *out; + + if( (argc != 3) || ((in = fopen(argv[1], "r")) == NULL) || ((out = fopen(argv[2], "w")) == NULL) ) + usage(argv[0]); + + memset(line, 0, sizeof(key)); + memset(key, 0, sizeof(val)); + memset(val, 0, sizeof(val)); + + while( (NULL != fgets(line, sizeof(line), in)) || (state >= 2 && feof(in)) ) + { + if( state == 0 && strstr(line, "msgid \"") == line ) + { + switch(extract_string(line, key, sizeof(key))) + { + case -1: + die("Syntax error in msgid"); + case 0: + state = 1; + break; + default: + state = 2; + } + } + else if( state == 1 || state == 2 ) + { + if( strstr(line, "msgstr \"") == line || state == 2 ) + { + switch(extract_string(line, val, sizeof(val))) + { + case -1: + state = 4; + break; + default: + state = 3; + } + } + else + { + switch(extract_string(line, tmp, sizeof(tmp))) + { + case -1: + state = 2; + break; + default: + strcat(key, tmp); + } + } + } + else if( state == 3 ) + { + switch(extract_string(line, tmp, sizeof(tmp))) + { + case -1: + state = 4; + break; + default: + strcat(val, tmp); + } + } + + if( state == 4 ) + { + if( strlen(key) > 0 && strlen(val) > 0 ) + { + key_id = sfh_hash(key, strlen(key)); + val_id = sfh_hash(val, strlen(val)); + + if( key_id != val_id ) + { + n_entries++; + array = realloc(array, n_entries * sizeof(lmo_entry_t)); + entry = (lmo_entry_t *)array + n_entries - 1; + + if (!array) + die("Out of memory"); + + entry->key_id = key_id; + entry->val_id = val_id; + entry->offset = offset; + entry->length = strlen(val); + + length = strlen(val) + ((4 - (strlen(val) % 4)) % 4); + + print(val, length, 1, out); + offset += length; + } + } + + state = 0; + memset(key, 0, sizeof(key)); + memset(val, 0, sizeof(val)); + } + + memset(line, 0, sizeof(line)); + } + + print_index(array, n_entries, out); + + if( offset > 0 ) + { + print_uint32(offset, out); + fsync(fileno(out)); + fclose(out); + } + else + { + fclose(out); + unlink(argv[2]); + } + + fclose(in); + return(0); +} diff --git a/luci-app-openclash/tools/po2lmo/src/template_lmo.c b/luci-app-openclash/tools/po2lmo/src/template_lmo.c new file mode 100644 index 000000000..27205a722 --- /dev/null +++ b/luci-app-openclash/tools/po2lmo/src/template_lmo.c @@ -0,0 +1,328 @@ +/* + * lmo - Lua Machine Objects - Base functions + * + * Copyright (C) 2009-2010 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "template_lmo.h" + +/* + * Hash function from http://www.azillionmonkeys.com/qed/hash.html + * Copyright (C) 2004-2008 by Paul Hsieh + */ + +uint32_t sfh_hash(const char *data, int len) +{ + uint32_t hash = len, tmp; + int rem; + + if (len <= 0 || data == NULL) return 0; + + rem = len & 3; + len >>= 2; + + /* Main loop */ + for (;len > 0; len--) { + hash += sfh_get16(data); + tmp = (sfh_get16(data+2) << 11) ^ hash; + hash = (hash << 16) ^ tmp; + data += 2*sizeof(uint16_t); + hash += hash >> 11; + } + + /* Handle end cases */ + switch (rem) { + case 3: hash += sfh_get16(data); + hash ^= hash << 16; + hash ^= data[sizeof(uint16_t)] << 18; + hash += hash >> 11; + break; + case 2: hash += sfh_get16(data); + hash ^= hash << 11; + hash += hash >> 17; + break; + case 1: hash += *data; + hash ^= hash << 10; + hash += hash >> 1; + } + + /* Force "avalanching" of final 127 bits */ + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + + return hash; +} + +uint32_t lmo_canon_hash(const char *str, int len) +{ + char res[4096]; + char *ptr, prev; + int off; + + if (!str || len >= sizeof(res)) + return 0; + + for (prev = ' ', ptr = res, off = 0; off < len; prev = *str, off++, str++) + { + if (isspace(*str)) + { + if (!isspace(prev)) + *ptr++ = ' '; + } + else + { + *ptr++ = *str; + } + } + + if ((ptr > res) && isspace(*(ptr-1))) + ptr--; + + return sfh_hash(res, ptr - res); +} + +lmo_archive_t * lmo_open(const char *file) +{ + int in = -1; + uint32_t idx_offset = 0; + struct stat s; + + lmo_archive_t *ar = NULL; + + if (stat(file, &s) == -1) + goto err; + + if ((in = open(file, O_RDONLY)) == -1) + goto err; + + if ((ar = (lmo_archive_t *)malloc(sizeof(*ar))) != NULL) + { + memset(ar, 0, sizeof(*ar)); + + ar->fd = in; + ar->size = s.st_size; + + fcntl(ar->fd, F_SETFD, fcntl(ar->fd, F_GETFD) | FD_CLOEXEC); + + if ((ar->mmap = mmap(NULL, ar->size, PROT_READ, MAP_SHARED, ar->fd, 0)) == MAP_FAILED) + goto err; + + idx_offset = ntohl(*((const uint32_t *) + (ar->mmap + ar->size - sizeof(uint32_t)))); + + if (idx_offset >= ar->size) + goto err; + + ar->index = (lmo_entry_t *)(ar->mmap + idx_offset); + ar->length = (ar->size - idx_offset - sizeof(uint32_t)) / sizeof(lmo_entry_t); + ar->end = ar->mmap + ar->size; + + return ar; + } + +err: + if (in > -1) + close(in); + + if (ar != NULL) + { + if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) + munmap(ar->mmap, ar->size); + + free(ar); + } + + return NULL; +} + +void lmo_close(lmo_archive_t *ar) +{ + if (ar != NULL) + { + if ((ar->mmap != NULL) && (ar->mmap != MAP_FAILED)) + munmap(ar->mmap, ar->size); + + close(ar->fd); + free(ar); + + ar = NULL; + } +} + + +lmo_catalog_t *_lmo_catalogs = NULL; +lmo_catalog_t *_lmo_active_catalog = NULL; + +int lmo_load_catalog(const char *lang, const char *dir) +{ + DIR *dh = NULL; + char pattern[16]; + char path[PATH_MAX]; + struct dirent *de = NULL; + + lmo_archive_t *ar = NULL; + lmo_catalog_t *cat = NULL; + + if (!lmo_change_catalog(lang)) + return 0; + + if (!dir || !(dh = opendir(dir))) + goto err; + + if (!(cat = malloc(sizeof(*cat)))) + goto err; + + memset(cat, 0, sizeof(*cat)); + + snprintf(cat->lang, sizeof(cat->lang), "%s", lang); + snprintf(pattern, sizeof(pattern), "*.%s.lmo", lang); + + while ((de = readdir(dh)) != NULL) + { + if (!fnmatch(pattern, de->d_name, 0)) + { + snprintf(path, sizeof(path), "%s/%s", dir, de->d_name); + ar = lmo_open(path); + + if (ar) + { + ar->next = cat->archives; + cat->archives = ar; + } + } + } + + closedir(dh); + + cat->next = _lmo_catalogs; + _lmo_catalogs = cat; + + if (!_lmo_active_catalog) + _lmo_active_catalog = cat; + + return 0; + +err: + if (dh) closedir(dh); + if (cat) free(cat); + + return -1; +} + +int lmo_change_catalog(const char *lang) +{ + lmo_catalog_t *cat; + + for (cat = _lmo_catalogs; cat; cat = cat->next) + { + if (!strncmp(cat->lang, lang, sizeof(cat->lang))) + { + _lmo_active_catalog = cat; + return 0; + } + } + + return -1; +} + +static lmo_entry_t * lmo_find_entry(lmo_archive_t *ar, uint32_t hash) +{ + unsigned int m, l, r; + uint32_t k; + + l = 0; + r = ar->length - 1; + + while (1) + { + m = l + ((r - l) / 2); + + if (r < l) + break; + + k = ntohl(ar->index[m].key_id); + + if (k == hash) + return &ar->index[m]; + + if (k > hash) + { + if (!m) + break; + + r = m - 1; + } + else + { + l = m + 1; + } + } + + return NULL; +} + +int lmo_translate(const char *key, int keylen, char **out, int *outlen) +{ + uint32_t hash; + lmo_entry_t *e; + lmo_archive_t *ar; + + if (!key || !_lmo_active_catalog) + return -2; + + hash = lmo_canon_hash(key, keylen); + + for (ar = _lmo_active_catalog->archives; ar; ar = ar->next) + { + if ((e = lmo_find_entry(ar, hash)) != NULL) + { + *out = ar->mmap + ntohl(e->offset); + *outlen = ntohl(e->length); + return 0; + } + } + + return -1; +} + +void lmo_close_catalog(const char *lang) +{ + lmo_archive_t *ar, *next; + lmo_catalog_t *cat, *prev; + + for (prev = NULL, cat = _lmo_catalogs; cat; prev = cat, cat = cat->next) + { + if (!strncmp(cat->lang, lang, sizeof(cat->lang))) + { + if (prev) + prev->next = cat->next; + else + _lmo_catalogs = cat->next; + + for (ar = cat->archives; ar; ar = next) + { + next = ar->next; + lmo_close(ar); + } + + free(cat); + break; + } + } +} diff --git a/luci-app-openclash/tools/po2lmo/src/template_lmo.h b/luci-app-openclash/tools/po2lmo/src/template_lmo.h new file mode 100644 index 000000000..57f59aa56 --- /dev/null +++ b/luci-app-openclash/tools/po2lmo/src/template_lmo.h @@ -0,0 +1,92 @@ +/* + * lmo - Lua Machine Objects - General header + * + * Copyright (C) 2009-2012 Jo-Philipp Wich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _TEMPLATE_LMO_H_ +#define _TEMPLATE_LMO_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if (defined(__GNUC__) && defined(__i386__)) +#define sfh_get16(d) (*((const uint16_t *) (d))) +#else +#define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif + + +struct lmo_entry { + uint32_t key_id; + uint32_t val_id; + uint32_t offset; + uint32_t length; +} __attribute__((packed)); + +typedef struct lmo_entry lmo_entry_t; + + +struct lmo_archive { + int fd; + int length; + uint32_t size; + lmo_entry_t *index; + char *mmap; + char *end; + struct lmo_archive *next; +}; + +typedef struct lmo_archive lmo_archive_t; + + +struct lmo_catalog { + char lang[6]; + struct lmo_archive *archives; + struct lmo_catalog *next; +}; + +typedef struct lmo_catalog lmo_catalog_t; + + +uint32_t sfh_hash(const char *data, int len); +uint32_t lmo_canon_hash(const char *data, int len); + +lmo_archive_t * lmo_open(const char *file); +void lmo_close(lmo_archive_t *ar); + + +extern lmo_catalog_t *_lmo_catalogs; +extern lmo_catalog_t *_lmo_active_catalog; + +int lmo_load_catalog(const char *lang, const char *dir); +int lmo_change_catalog(const char *lang); +int lmo_translate(const char *key, int keylen, char **out, int *outlen); +void lmo_close_catalog(const char *lang); + +#endif