all: partially sync with master; upd chlog

This commit is contained in:
Ainar Garipov 2024-03-06 18:33:53 +03:00
parent 48d1c673a9
commit fbc0d981ba
71 changed files with 557 additions and 210 deletions

View file

@ -102,6 +102,9 @@
the best way. For crashes, please provide a full failure log. the best way. For crashes, please provide a full failure log.
'label': 'Action' 'label': 'Action'
'value': | 'value': |
Replace the following command with the one you're calling or a
description of the failing action:
```sh ```sh
nslookup -debug -type=a 'www.example.com' '$YOUR_AGH_ADDRESS' nslookup -debug -type=a 'www.example.com' '$YOUR_AGH_ADDRESS'
``` ```

View file

@ -1,7 +1,7 @@
'name': 'build' 'name': 'build'
'env': 'env':
'GO_VERSION': '1.20.12' 'GO_VERSION': '1.21.8'
'NODE_VERSION': '16' 'NODE_VERSION': '16'
'on': 'on':
@ -101,7 +101,10 @@
- 'name': 'Set up Docker Buildx' - 'name': 'Set up Docker Buildx'
'uses': 'docker/setup-buildx-action@v1' 'uses': 'docker/setup-buildx-action@v1'
- 'name': 'Run snapshot build' - 'name': 'Run snapshot build'
'run': 'make SIGN=0 VERBOSE=1 build-release build-docker' # Set a custom version string, since the checkout@v2 action does not seem
# to know about the master branch, while the version script uses it to
# count the number of commits within the branch.
'run': 'make SIGN=0 VERBOSE=1 VERSION="v0.0.0-github" build-release build-docker'
'notify': 'notify':
'needs': 'needs':

View file

@ -1,7 +1,7 @@
'name': 'lint' 'name': 'lint'
'env': 'env':
'GO_VERSION': '1.20.12' 'GO_VERSION': '1.21.8'
'on': 'on':
'push': 'push':

View file

@ -14,21 +14,93 @@ and this project adheres to
<!-- <!--
## [v0.108.0] - TBA ## [v0.108.0] - TBA
## [v0.107.45] - 2024-03-05 (APPROX.) ## [v0.107.46] - 2024-03-13 (APPROX.)
See also the [v0.107.45 GitHub milestone][ms-v0.107.45]. See also the [v0.107.46 GitHub milestone][ms-v0.107.46].
[ms-v0.107.45]: https://github.com/AdguardTeam/AdGuardHome/milestone/80?closed=1 [ms-v0.107.46]: https://github.com/AdguardTeam/AdGuardHome/milestone/81?closed=1
NOTE: Add new changes BELOW THIS COMMENT. NOTE: Add new changes BELOW THIS COMMENT.
--> -->
### Added
- Ability to disable the use of system hosts file information for query
resolution ([#6610]).
- Ability to define custom directories for storage of query log files and
statistics ([#5992]).
### Fixed
- Incorrect tracking of the system hosts file's changes ([#6711]).
[#5992]: https://github.com/AdguardTeam/AdGuardHome/issues/5992
[#6610]: https://github.com/AdguardTeam/AdGuardHome/issues/6610
[#6711]: https://github.com/AdguardTeam/AdGuardHome/issues/6711
<!-- <!--
NOTE: Add new changes ABOVE THIS COMMENT. NOTE: Add new changes ABOVE THIS COMMENT.
--> -->
## [v0.107.45] - 2024-03-06
See also the [v0.107.45 GitHub milestone][ms-v0.107.45].
### Security
- Go version has been updated to prevent the possibility of exploiting the Go
vulnerabilities fixed in [Go 1.21.8][go-1.21.8].
### Added
- Context menu item in the Query Log to add a Client to the Persistent client
list ([#6679]).
### Changed
- Starting with this release our scripts are using Go's [forward compatibility
mechanism][go-toolchain] for updating the Go version.
**Important note for porters:** This change means that if your `go` version
is 1.21+ but is different from the one required by AdGuard Home, the `go` tool
will automatically download the required version.
If you want to use the version installed on your builder, run:
```sh
go get go@$YOUR_VERSION
go mod tidy
```
and call `make` with `GOTOOLCHAIN=local`.
### Deprecated
- Go 1.21 support. Future versions will require at least Go 1.22 to build.
### Fixed
- Missing IP addresses in logs when querying for domain names from the ignore
lists.
- Blank page after resetting access clients ([#6634]).
- Wrong algorithm for caching bootstrapped upstream addresses ([#6723]).
### Removed
- Go 1.20 support, as it has reached end of life.
[#6634]: https://github.com/AdguardTeam/AdGuardHome/issues/6634
[#6679]: https://github.com/AdguardTeam/AdGuardHome/issues/6679
[#6723]: https://github.com/AdguardTeam/AdGuardHome/issues/6723
[go-1.21.8]: https://groups.google.com/g/golang-announce/c/5pwGVUPoMbg
[go-toolchain]: https://go.dev/blog/toolchain
[ms-v0.107.45]: https://github.com/AdguardTeam/AdGuardHome/milestone/80?closed=1
## [v0.107.44] - 2024-02-06 ## [v0.107.44] - 2024-02-06
See also the [v0.107.44 GitHub milestone][ms-v0.107.44]. See also the [v0.107.44 GitHub milestone][ms-v0.107.44].
@ -2759,11 +2831,12 @@ See also the [v0.104.2 GitHub milestone][ms-v0.104.2].
<!-- <!--
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.45...HEAD [Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.46...HEAD
[v0.107.45]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.44...v0.107.45 [v0.107.46]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.45...v0.107.46
--> -->
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.44...HEAD [Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.45...HEAD
[v0.107.45]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.44...v0.107.45
[v0.107.44]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.43...v0.107.44 [v0.107.44]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.43...v0.107.44
[v0.107.43]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.42...v0.107.43 [v0.107.43]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.42...v0.107.43
[v0.107.42]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.41...v0.107.42 [v0.107.42]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.41...v0.107.42

View file

@ -8,7 +8,7 @@
# Makefile. Bump this number every time a significant change is made to # Makefile. Bump this number every time a significant change is made to
# this Makefile. # this Makefile.
# #
# AdGuard-Project-Version: 2 # AdGuard-Project-Version: 4
# Don't name these macros "GO" etc., because GNU Make apparently makes # Don't name these macros "GO" etc., because GNU Make apparently makes
# them exported environment variables with the literal value of # them exported environment variables with the literal value of
@ -27,6 +27,7 @@ DIST_DIR = dist
GOAMD64 = v1 GOAMD64 = v1
GOPROXY = https://goproxy.cn|https://proxy.golang.org|direct GOPROXY = https://goproxy.cn|https://proxy.golang.org|direct
GOSUMDB = sum.golang.google.cn GOSUMDB = sum.golang.google.cn
GOTOOLCHAIN = go1.21.8
GPG_KEY = devteam@adguard.com GPG_KEY = devteam@adguard.com
GPG_KEY_PASSPHRASE = not-a-real-password GPG_KEY_PASSPHRASE = not-a-real-password
NPM = npm NPM = npm
@ -56,15 +57,16 @@ BUILD_RELEASE_DEPS_0 = deps js-build
BUILD_RELEASE_DEPS_1 = go-deps BUILD_RELEASE_DEPS_1 = go-deps
ENV = env\ ENV = env\
COMMIT='$(COMMIT)'\
CHANNEL='$(CHANNEL)'\ CHANNEL='$(CHANNEL)'\
GPG_KEY='$(GPG_KEY)'\ COMMIT='$(COMMIT)'\
GPG_KEY_PASSPHRASE='$(GPG_KEY_PASSPHRASE)'\
DIST_DIR='$(DIST_DIR)'\ DIST_DIR='$(DIST_DIR)'\
GO="$(GO.MACRO)"\ GO="$(GO.MACRO)"\
GOAMD64="$(GOAMD64)"\ GOAMD64="$(GOAMD64)"\
GOPROXY='$(GOPROXY)'\ GOPROXY='$(GOPROXY)'\
GOSUMDB='$(GOSUMDB)'\ GOSUMDB='$(GOSUMDB)'\
GOTOOLCHAIN='$(GOTOOLCHAIN)'\
GPG_KEY='$(GPG_KEY)'\
GPG_KEY_PASSPHRASE='$(GPG_KEY_PASSPHRASE)'\
PATH="$${PWD}/bin:$$( "$(GO.MACRO)" env GOPATH )/bin:$${PATH}"\ PATH="$${PWD}/bin:$$( "$(GO.MACRO)" env GOPATH )/bin:$${PATH}"\
RACE='$(RACE)'\ RACE='$(RACE)'\
SIGN='$(SIGN)'\ SIGN='$(SIGN)'\
@ -117,6 +119,8 @@ go-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-tools.sh
# targets. # targets.
go-test: ; $(ENV) RACE='1' "$(SHELL)" ./scripts/make/go-test.sh go-test: ; $(ENV) RACE='1' "$(SHELL)" ./scripts/make/go-test.sh
go-upd-tools: ; $(ENV) "$(SHELL)" ./scripts/make/go-upd-tools.sh
go-check: go-tools go-lint go-test go-check: go-tools go-lint go-test
# A quick check to make sure that all supported operating systems can be # A quick check to make sure that all supported operating systems can be
@ -132,10 +136,3 @@ openapi-lint: ; cd ./openapi/ && $(YARN) test
openapi-show: ; cd ./openapi/ && $(YARN) start openapi-show: ; cd ./openapi/ && $(YARN) start
txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh txt-lint: ; $(ENV) "$(SHELL)" ./scripts/make/txt-lint.sh
# TODO(a.garipov): Consider adding to scripts/ and the common project
# structure.
go-upd-tools:
cd ./internal/tools/ &&\
"$(GO.MACRO)" get -u &&\
"$(GO.MACRO)" mod tidy

View file

@ -7,7 +7,7 @@
# Make sure to sync any changes with the branch overrides below. # Make sure to sync any changes with the branch overrides below.
'variables': 'variables':
'channel': 'edge' 'channel': 'edge'
'dockerGo': 'adguard/golang-ubuntu:7.6' 'dockerGo': 'adguard/golang-ubuntu:8.1'
'stages': 'stages':
- 'Build frontend': - 'Build frontend':
@ -272,7 +272,7 @@
# need to build a few of these. # need to build a few of these.
'variables': 'variables':
'channel': 'beta' 'channel': 'beta'
'dockerGo': 'adguard/golang-ubuntu:7.6' 'dockerGo': 'adguard/golang-ubuntu:8.1'
# release-vX.Y.Z branches are the branches from which the actual final # release-vX.Y.Z branches are the branches from which the actual final
# release is built. # release is built.
- '^release-v[0-9]+\.[0-9]+\.[0-9]+': - '^release-v[0-9]+\.[0-9]+\.[0-9]+':
@ -287,4 +287,4 @@
# are the ones that actually get released. # are the ones that actually get released.
'variables': 'variables':
'channel': 'release' 'channel': 'release'
'dockerGo': 'adguard/golang-ubuntu:7.6' 'dockerGo': 'adguard/golang-ubuntu:8.1'

View file

@ -10,7 +10,7 @@
# Make sure to sync any changes with the branch overrides below. # Make sure to sync any changes with the branch overrides below.
'variables': 'variables':
'channel': 'edge' 'channel': 'edge'
'dockerGo': 'adguard/golang-ubuntu:7.6' 'dockerGo': 'adguard/golang-ubuntu:8.1'
'snapcraftChannel': 'edge' 'snapcraftChannel': 'edge'
'stages': 'stages':
@ -191,7 +191,7 @@
# need to build a few of these. # need to build a few of these.
'variables': 'variables':
'channel': 'beta' 'channel': 'beta'
'dockerGo': 'adguard/golang-ubuntu:7.6' 'dockerGo': 'adguard/golang-ubuntu:8.1'
'snapcraftChannel': 'beta' 'snapcraftChannel': 'beta'
# release-vX.Y.Z branches are the branches from which the actual final # release-vX.Y.Z branches are the branches from which the actual final
# release is built. # release is built.
@ -207,5 +207,5 @@
# are the ones that actually get released. # are the ones that actually get released.
'variables': 'variables':
'channel': 'release' 'channel': 'release'
'dockerGo': 'adguard/golang-ubuntu:7.6' 'dockerGo': 'adguard/golang-ubuntu:8.1'
'snapcraftChannel': 'candidate' 'snapcraftChannel': 'candidate'

View file

@ -5,7 +5,8 @@
'key': 'AHBRTSPECS' 'key': 'AHBRTSPECS'
'name': 'AdGuard Home - Build and run tests' 'name': 'AdGuard Home - Build and run tests'
'variables': 'variables':
'dockerGo': 'adguard/golang-ubuntu:7.6' 'dockerGo': 'adguard/golang-ubuntu:8.1'
'channel': 'development'
'stages': 'stages':
- 'Tests': - 'Tests':
@ -73,7 +74,7 @@
make\ make\
ARCH="amd64"\ ARCH="amd64"\
OS="windows darwin linux"\ OS="windows darwin linux"\
CHANNEL="development"\ CHANNEL=${bamboo.channel}\
SIGN=0\ SIGN=0\
PARALLELISM=1\ PARALLELISM=1\
VERBOSE=2\ VERBOSE=2\
@ -115,3 +116,16 @@
'labels': [] 'labels': []
'other': 'other':
'concurrent-build-plugin': 'system-default' 'concurrent-build-plugin': 'system-default'
'branch-overrides':
# rc-vX.Y.Z branches are the release candidate branches. They are created
# from the release branch and are used to build the release candidate
# images.
- '^rc-v[0-9]+\.[0-9]+\.[0-9]+':
# Build betas on release branches manually.
'triggers': []
# Set the default release channel on the release branch to beta, as we
# may need to build a few of these.
'variables':
'dockerGo': 'adguard/golang-ubuntu:8.1'
'channel': 'candidate'

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream DNS-серверы абноўлены", "updated_upstream_dns_toast": "Upstream DNS-серверы абноўлены",
"dns_test_ok_toast": "Паказаныя серверы DNS працуюць карэктна", "dns_test_ok_toast": "Паказаныя серверы DNS працуюць карэктна",
"dns_test_not_ok_toast": "Сервер «{{key}}»: немагчыма выкарыстоўваць, праверце слушнасць напісання", "dns_test_not_ok_toast": "Сервер «{{key}}»: немагчыма выкарыстоўваць, праверце слушнасць напісання",
"dns_test_parsing_error_toast": "Раздзел {{section}}: радок {{line}}: немагчыма выкарыстоўваць, праверце слушнасць напісання",
"dns_test_warning_toast": "Upstream «{{key}}» не адказвае на тэставыя запыты і можа не працаваць належным чынам", "dns_test_warning_toast": "Upstream «{{key}}» не адказвае на тэставыя запыты і можа не працаваць належным чынам",
"unblock": "Адблакаваць", "unblock": "Адблакаваць",
"block": "Заблакаваць", "block": "Заблакаваць",
@ -243,6 +244,7 @@
"allow_this_client": "Дазволіць доступ гэтаму кліенту", "allow_this_client": "Дазволіць доступ гэтаму кліенту",
"block_for_this_client_only": "Заблакаваць толькі для гэтага кліента", "block_for_this_client_only": "Заблакаваць толькі для гэтага кліента",
"unblock_for_this_client_only": "Адблакаваць толькі для гэтага кліента", "unblock_for_this_client_only": "Адблакаваць толькі для гэтага кліента",
"add_persistent_client": "Дадаць у захаваныя кліенты",
"time_table_header": "Час", "time_table_header": "Час",
"date": "Дата", "date": "Дата",
"domain_name_table_header": "Дамен", "domain_name_table_header": "Дамен",
@ -462,6 +464,7 @@
"form_add_id": "Дадаць ідэнтыфікатар", "form_add_id": "Дадаць ідэнтыфікатар",
"form_client_name": "Увядзіце імя кліента", "form_client_name": "Увядзіце імя кліента",
"name": "Назва", "name": "Назва",
"client_name": "Кліент {{id}}",
"client_global_settings": "Выкарыстаць глабальныя налады", "client_global_settings": "Выкарыстаць глабальныя налады",
"client_deleted": "Кліент «{{key}}» паспяхова выдалены", "client_deleted": "Кліент «{{key}}» паспяхова выдалены",
"client_added": "Кліент «{{key}}» паспяхова дададзены", "client_added": "Кліент «{{key}}» паспяхова дададзены",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Odchozí servery byly úspěšně uloženy", "updated_upstream_dns_toast": "Odchozí servery byly úspěšně uloženy",
"dns_test_ok_toast": "Specifikované DNS servery pracují správně", "dns_test_ok_toast": "Specifikované DNS servery pracují správně",
"dns_test_not_ok_toast": "Server \"{{key}}\": nemohl být použit, zkontrolujte, zda jste ho správně napsali", "dns_test_not_ok_toast": "Server \"{{key}}\": nemohl být použit, zkontrolujte, zda jste ho správně napsali",
"dns_test_parsing_error_toast": "Sekce {{section}}: řádek {{line}}: nelze použít, zkontrolujte prosím, zda jste ho správně napsali",
"dns_test_warning_toast": "Upstream \"{{key}}\" neodpovídá na testovací požadavky a nemusí fungovat správně", "dns_test_warning_toast": "Upstream \"{{key}}\" neodpovídá na testovací požadavky a nemusí fungovat správně",
"unblock": "Odblokovat", "unblock": "Odblokovat",
"block": "Blokovat", "block": "Blokovat",
@ -243,6 +244,7 @@
"allow_this_client": "Povolit tohoto klienta", "allow_this_client": "Povolit tohoto klienta",
"block_for_this_client_only": "Blokovat pouze pro tohoto klienta", "block_for_this_client_only": "Blokovat pouze pro tohoto klienta",
"unblock_for_this_client_only": "Odblokovat pouze pro tohoto klienta", "unblock_for_this_client_only": "Odblokovat pouze pro tohoto klienta",
"add_persistent_client": "Přidat jako trvalého klienta",
"time_table_header": "Čas", "time_table_header": "Čas",
"date": "Datum", "date": "Datum",
"domain_name_table_header": "Název domény", "domain_name_table_header": "Název domény",
@ -465,6 +467,7 @@
"form_add_id": "Přidat identifikátor", "form_add_id": "Přidat identifikátor",
"form_client_name": "Zadejte název klienta", "form_client_name": "Zadejte název klienta",
"name": "Název", "name": "Název",
"client_name": "Klient {{id}}",
"client_global_settings": "Použít globální nastavení", "client_global_settings": "Použít globální nastavení",
"client_deleted": "Klient \"{{key}}\" byl úspěšně odstraněn", "client_deleted": "Klient \"{{key}}\" byl úspěšně odstraněn",
"client_added": "Klient \"{{key}}\" byl úspěšně přidán", "client_added": "Klient \"{{key}}\" byl úspěšně přidán",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream-servere er gemt", "updated_upstream_dns_toast": "Upstream-servere er gemt",
"dns_test_ok_toast": "Angivne DNS-servere fungerer korrekt", "dns_test_ok_toast": "Angivne DNS-servere fungerer korrekt",
"dns_test_not_ok_toast": "Server \"{{key}}\": Kunne ikke bruges. Tjek, at du har angivet den korrekt", "dns_test_not_ok_toast": "Server \"{{key}}\": Kunne ikke bruges. Tjek, at du har angivet den korrekt",
"dns_test_parsing_error_toast": "Sektion {{section}}: linje {{line}}: kunne ikke anvendes. Tjek at den er angivet korrekt",
"dns_test_warning_toast": "Upstream \"{{key}}\" svarer ikke på testforespørgsler og fungerer muligvis ikke korrekt", "dns_test_warning_toast": "Upstream \"{{key}}\" svarer ikke på testforespørgsler og fungerer muligvis ikke korrekt",
"unblock": "Afblokering", "unblock": "Afblokering",
"block": "Blokering", "block": "Blokering",
@ -243,6 +244,7 @@
"allow_this_client": "Tillad denne klient", "allow_this_client": "Tillad denne klient",
"block_for_this_client_only": "Blokér kun for denne klient", "block_for_this_client_only": "Blokér kun for denne klient",
"unblock_for_this_client_only": "Afblokér kun for denne klient", "unblock_for_this_client_only": "Afblokér kun for denne klient",
"add_persistent_client": "Tilføj som vedvarende klient",
"time_table_header": "Tid", "time_table_header": "Tid",
"date": "Dato", "date": "Dato",
"domain_name_table_header": "Domænenavn", "domain_name_table_header": "Domænenavn",
@ -465,6 +467,7 @@
"form_add_id": "Tilføj identifikator", "form_add_id": "Tilføj identifikator",
"form_client_name": "Angiv klientnavn", "form_client_name": "Angiv klientnavn",
"name": "Navn", "name": "Navn",
"client_name": "Klient {{id}}",
"client_global_settings": "Brug globale indstillinger", "client_global_settings": "Brug globale indstillinger",
"client_deleted": "Klient \"{{key}}\" slettet", "client_deleted": "Klient \"{{key}}\" slettet",
"client_added": "Klient \"{{key}}\" tilføjet", "client_added": "Klient \"{{key}}\" tilføjet",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream-Server erfolgreich gespeichert", "updated_upstream_dns_toast": "Upstream-Server erfolgreich gespeichert",
"dns_test_ok_toast": "Angegebene DNS-Server arbeiten ordnungsgemäß", "dns_test_ok_toast": "Angegebene DNS-Server arbeiten ordnungsgemäß",
"dns_test_not_ok_toast": "Server „{{key}}“: konnte nicht verwendet werden, bitte überprüfen Sie die korrekte Schreibweise", "dns_test_not_ok_toast": "Server „{{key}}“: konnte nicht verwendet werden, bitte überprüfen Sie die korrekte Schreibweise",
"dns_test_parsing_error_toast": "Abschnitt {{section}}: Zeile {{line}}: konnte nicht verwendet werden, bitte überprüfen Sie, ob alles richtig geschrieben ist",
"dns_test_warning_toast": "Upstream „{{key}}“ reagiert nicht auf Testanfragen und funktioniert möglicherweise nicht fehlerfrei", "dns_test_warning_toast": "Upstream „{{key}}“ reagiert nicht auf Testanfragen und funktioniert möglicherweise nicht fehlerfrei",
"unblock": "Entsperren", "unblock": "Entsperren",
"block": "Sperren", "block": "Sperren",
@ -243,6 +244,7 @@
"allow_this_client": "Diesen Client zulassen", "allow_this_client": "Diesen Client zulassen",
"block_for_this_client_only": "Nur für diesen Client sperren", "block_for_this_client_only": "Nur für diesen Client sperren",
"unblock_for_this_client_only": "Nur für diesen Client freigeben", "unblock_for_this_client_only": "Nur für diesen Client freigeben",
"add_persistent_client": "Als dauerhaften Client hinzufügen",
"time_table_header": "Zeit", "time_table_header": "Zeit",
"date": "Datum", "date": "Datum",
"domain_name_table_header": "Domainname", "domain_name_table_header": "Domainname",
@ -465,6 +467,7 @@
"form_add_id": "Kennung hinzufügen", "form_add_id": "Kennung hinzufügen",
"form_client_name": "Clientnamen eingeben", "form_client_name": "Clientnamen eingeben",
"name": "Name", "name": "Name",
"client_name": "Client {{id}}",
"client_global_settings": "Allgemeine Einstellungen nutzen", "client_global_settings": "Allgemeine Einstellungen nutzen",
"client_deleted": "Client „{{key}}“ erfolgreich entfernt", "client_deleted": "Client „{{key}}“ erfolgreich entfernt",
"client_added": "Client „{{key}}“ erfolgreich hinzugefügt", "client_added": "Client „{{key}}“ erfolgreich hinzugefügt",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream servers successfully saved", "updated_upstream_dns_toast": "Upstream servers successfully saved",
"dns_test_ok_toast": "Specified DNS servers are working correctly", "dns_test_ok_toast": "Specified DNS servers are working correctly",
"dns_test_not_ok_toast": "Server \"{{key}}\": could not be used, please check that you've written it correctly", "dns_test_not_ok_toast": "Server \"{{key}}\": could not be used, please check that you've written it correctly",
"dns_test_parsing_error_toast": "Section {{section}}: line {{line}}: could not be used, please check that you've written it correctly",
"dns_test_warning_toast": "Upstream \"{{key}}\" does not respond to test requests and may not work properly", "dns_test_warning_toast": "Upstream \"{{key}}\" does not respond to test requests and may not work properly",
"unblock": "Unblock", "unblock": "Unblock",
"block": "Block", "block": "Block",
@ -243,6 +244,7 @@
"allow_this_client": "Allow this client", "allow_this_client": "Allow this client",
"block_for_this_client_only": "Block for this client only", "block_for_this_client_only": "Block for this client only",
"unblock_for_this_client_only": "Unblock for this client only", "unblock_for_this_client_only": "Unblock for this client only",
"add_persistent_client": "Add as persistent client",
"time_table_header": "Time", "time_table_header": "Time",
"date": "Date", "date": "Date",
"domain_name_table_header": "Domain name", "domain_name_table_header": "Domain name",
@ -465,6 +467,7 @@
"form_add_id": "Add identifier", "form_add_id": "Add identifier",
"form_client_name": "Enter client name", "form_client_name": "Enter client name",
"name": "Name", "name": "Name",
"client_name": "Client {{id}}",
"client_global_settings": "Use global settings", "client_global_settings": "Use global settings",
"client_deleted": "Client \"{{key}}\" successfully deleted", "client_deleted": "Client \"{{key}}\" successfully deleted",
"client_added": "Client \"{{key}}\" successfully added", "client_added": "Client \"{{key}}\" successfully added",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Servidores DNS de subida guardados correctamente", "updated_upstream_dns_toast": "Servidores DNS de subida guardados correctamente",
"dns_test_ok_toast": "Los servidores DNS especificados funcionan correctamente", "dns_test_ok_toast": "Los servidores DNS especificados funcionan correctamente",
"dns_test_not_ok_toast": "Servidor \"{{key}}\": no se puede utilizar, por favor revisa si lo has escrito correctamente", "dns_test_not_ok_toast": "Servidor \"{{key}}\": no se puede utilizar, por favor revisa si lo has escrito correctamente",
"dns_test_parsing_error_toast": "No se pudo utilizar la sección {{section}}: línea {{line}}:, verifica si la escribiste correctamente",
"dns_test_warning_toast": "DNS de subida \"{{key}}\" no responde a las peticiones de prueba y es posible que no funcione correctamente", "dns_test_warning_toast": "DNS de subida \"{{key}}\" no responde a las peticiones de prueba y es posible que no funcione correctamente",
"unblock": "Desbloquear", "unblock": "Desbloquear",
"block": "Bloquear", "block": "Bloquear",
@ -243,6 +244,7 @@
"allow_this_client": "Permitir a este cliente", "allow_this_client": "Permitir a este cliente",
"block_for_this_client_only": "Bloquear solo para este cliente", "block_for_this_client_only": "Bloquear solo para este cliente",
"unblock_for_this_client_only": "Desbloquear solo para este cliente", "unblock_for_this_client_only": "Desbloquear solo para este cliente",
"add_persistent_client": "Añadir como cliente persistente",
"time_table_header": "Hora", "time_table_header": "Hora",
"date": "Fecha", "date": "Fecha",
"domain_name_table_header": "Nombre del dominio", "domain_name_table_header": "Nombre del dominio",
@ -465,6 +467,7 @@
"form_add_id": "Añadir identificador", "form_add_id": "Añadir identificador",
"form_client_name": "Ingresa el nombre del cliente", "form_client_name": "Ingresa el nombre del cliente",
"name": "Nombre", "name": "Nombre",
"client_name": "Cliente {{id}}",
"client_global_settings": "Usar configuración global", "client_global_settings": "Usar configuración global",
"client_deleted": "Cliente \"{{key}}\" eliminado correctamente", "client_deleted": "Cliente \"{{key}}\" eliminado correctamente",
"client_added": "Cliente \"{{key}}\" añadido correctamente", "client_added": "Cliente \"{{key}}\" añadido correctamente",

View file

@ -220,6 +220,7 @@
"updated_upstream_dns_toast": "سرورهای DNS جریان ارسالی بروز رسانی شده است", "updated_upstream_dns_toast": "سرورهای DNS جریان ارسالی بروز رسانی شده است",
"dns_test_ok_toast": "سرورهای DNS تعیین شده بدرستی کار می کنند", "dns_test_ok_toast": "سرورهای DNS تعیین شده بدرستی کار می کنند",
"dns_test_not_ok_toast": "سرور \"{{key}}\": نمیتواند مورد استفاده قرار گیرد،لطفا بررسی کنید آن را بدرستی نوشته اید", "dns_test_not_ok_toast": "سرور \"{{key}}\": نمیتواند مورد استفاده قرار گیرد،لطفا بررسی کنید آن را بدرستی نوشته اید",
"dns_test_parsing_error_toast": "بخش {{section}}: خط {{line}}: نمی‌تواند مورد استفاده قرار گیرد،لطفا بررسی کنید آن را به‌درستی نوشته‌اید",
"unblock": "رفع انسداد", "unblock": "رفع انسداد",
"block": "مسدود کردن", "block": "مسدود کردن",
"disallow_this_client": "این مشتری را رد کنید", "disallow_this_client": "این مشتری را رد کنید",
@ -420,6 +421,7 @@
"form_add_id": "افزودن احرازکننده", "form_add_id": "افزودن احرازکننده",
"form_client_name": "نام کلاینت را وارد کنید", "form_client_name": "نام کلاینت را وارد کنید",
"name": "نام", "name": "نام",
"client_name": "مشتری {{id}}",
"client_global_settings": "استفاده از تنظیمات سراسری", "client_global_settings": "استفاده از تنظیمات سراسری",
"client_deleted": "کلاینت \"{{key}}\" را با موفقیت حذف کرد", "client_deleted": "کلاینت \"{{key}}\" را با موفقیت حذف کرد",
"client_added": "کلاینت \"{{key}}\" را با موفقیت اضافه کرد", "client_added": "کلاینت \"{{key}}\" را با موفقیت اضافه کرد",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Ylävirtapalvelimet tallennettiin", "updated_upstream_dns_toast": "Ylävirtapalvelimet tallennettiin",
"dns_test_ok_toast": "Määritetyt DNS-palvelimet toimivat oikein", "dns_test_ok_toast": "Määritetyt DNS-palvelimet toimivat oikein",
"dns_test_not_ok_toast": "Palvelin \"{{key}}\": Ei voitu käyttää, tarkista oikeinkirjoitus", "dns_test_not_ok_toast": "Palvelin \"{{key}}\": Ei voitu käyttää, tarkista oikeinkirjoitus",
"dns_test_parsing_error_toast": "Osio {{section}}: rivi {{line}}: Ei voitu käyttää, tarkista oikeinkirjoitus",
"dns_test_warning_toast": "Datavuon \"{{key}}\" ei vastaa testipyyntöihin eikä välttämättä toimi kunnolla", "dns_test_warning_toast": "Datavuon \"{{key}}\" ei vastaa testipyyntöihin eikä välttämättä toimi kunnolla",
"unblock": "Salli", "unblock": "Salli",
"block": "Estä", "block": "Estä",
@ -243,6 +244,7 @@
"allow_this_client": "Salli tämä päätelaite", "allow_this_client": "Salli tämä päätelaite",
"block_for_this_client_only": "Estä vain tältä päätelaitteelta", "block_for_this_client_only": "Estä vain tältä päätelaitteelta",
"unblock_for_this_client_only": "Salli vain tälle päätelaitteelle", "unblock_for_this_client_only": "Salli vain tälle päätelaitteelle",
"add_persistent_client": "Lisää pysyvänä päätelaitteena",
"time_table_header": "Aika", "time_table_header": "Aika",
"date": "Päiväys", "date": "Päiväys",
"domain_name_table_header": "Verkkotunnus", "domain_name_table_header": "Verkkotunnus",
@ -446,7 +448,7 @@
"manual_update": "Seuraa <a>näitä ohjeita</a> päivittääksesi manuaalisesti.", "manual_update": "Seuraa <a>näitä ohjeita</a> päivittääksesi manuaalisesti.",
"processing_update": "Odota kun AdGuard Home päivittyy", "processing_update": "Odota kun AdGuard Home päivittyy",
"clients_title": "Pysyvät päätelaitteet", "clients_title": "Pysyvät päätelaitteet",
"clients_desc": "Määritä pysyvät AdGuard Homeen yhdistetyt päätelaitetiedot.", "clients_desc": "Määritä AdGuard Homeen pysyvästi yhdistettyjen päätelaitteiden tiedot.",
"settings_global": "Yleinen", "settings_global": "Yleinen",
"settings_custom": "Mukautettu", "settings_custom": "Mukautettu",
"table_client": "Asiakas", "table_client": "Asiakas",
@ -465,6 +467,7 @@
"form_add_id": "Lisää tunniste", "form_add_id": "Lisää tunniste",
"form_client_name": "Syötä päätelaitteen nimi", "form_client_name": "Syötä päätelaitteen nimi",
"name": "Nimi", "name": "Nimi",
"client_name": "Päätelaite {{id}}",
"client_global_settings": "Käytä yleisiä asetuksia", "client_global_settings": "Käytä yleisiä asetuksia",
"client_deleted": "Päätelaite \"{{key}}\" poistettiin", "client_deleted": "Päätelaite \"{{key}}\" poistettiin",
"client_added": "Päätelaite \"{{key}}\" lisättiin", "client_added": "Päätelaite \"{{key}}\" lisättiin",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Serveurs en amont enregistrés", "updated_upstream_dns_toast": "Serveurs en amont enregistrés",
"dns_test_ok_toast": "Les serveurs DNS spécifiés fonctionnent correctement", "dns_test_ok_toast": "Les serveurs DNS spécifiés fonctionnent correctement",
"dns_test_not_ok_toast": "Impossible d'utiliser le serveur « {{key}} »: veuillez vérifier si le nom saisi est bien correct", "dns_test_not_ok_toast": "Impossible d'utiliser le serveur « {{key}} »: veuillez vérifier si le nom saisi est bien correct",
"dns_test_parsing_error_toast": "La section {{section}}: ligne {{line}}: n'a pas pu être utilisée, veuillez vérifier que vous l'avez écrite correctement",
"dns_test_warning_toast": "L'amont « {{key}} » ne répond pas aux demandes de test et peut ne pas fonctionner correctement", "dns_test_warning_toast": "L'amont « {{key}} » ne répond pas aux demandes de test et peut ne pas fonctionner correctement",
"unblock": "Débloquer", "unblock": "Débloquer",
"block": "Bloquer", "block": "Bloquer",
@ -243,6 +244,7 @@
"allow_this_client": "Autoriser ce client", "allow_this_client": "Autoriser ce client",
"block_for_this_client_only": "Bloquer uniquement pour ce client", "block_for_this_client_only": "Bloquer uniquement pour ce client",
"unblock_for_this_client_only": "Débloquer uniquement pour ce client", "unblock_for_this_client_only": "Débloquer uniquement pour ce client",
"add_persistent_client": "Ajouter comme client persistant",
"time_table_header": "Temps", "time_table_header": "Temps",
"date": "Date", "date": "Date",
"domain_name_table_header": "Nom de domaine", "domain_name_table_header": "Nom de domaine",
@ -465,6 +467,7 @@
"form_add_id": "Ajouter identifiant", "form_add_id": "Ajouter identifiant",
"form_client_name": "Saisissez le nom du client", "form_client_name": "Saisissez le nom du client",
"name": "Nom", "name": "Nom",
"client_name": "Client {{id}}",
"client_global_settings": "Utiliser les paramètres généraux", "client_global_settings": "Utiliser les paramètres généraux",
"client_deleted": "Le client « {{key}} » a été supprimé", "client_deleted": "Le client « {{key}} » a été supprimé",
"client_added": "Le client « {{key}} » a été ajouté", "client_added": "Le client « {{key}} » a été ajouté",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Uzvodni poslužitelji uspješno su spremljeni", "updated_upstream_dns_toast": "Uzvodni poslužitelji uspješno su spremljeni",
"dns_test_ok_toast": "Odabrani DNS poslužitelji su trenutno aktivni", "dns_test_ok_toast": "Odabrani DNS poslužitelji su trenutno aktivni",
"dns_test_not_ok_toast": "\"{{key}}\" poslužitelja: ne može se upotrijebiti, provjerite jeste li to ispravno napisali", "dns_test_not_ok_toast": "\"{{key}}\" poslužitelja: ne može se upotrijebiti, provjerite jeste li to ispravno napisali",
"dns_test_parsing_error_toast": "Odjeljak {{section}}: redak {{line}}: nije moguće koristiti, provjerite jeste li ispravno napisali",
"dns_test_warning_toast": "Upstream \"{{key}}\" ne odgovara na zahtjeve za testiranje i možda neće raditi ispravno", "dns_test_warning_toast": "Upstream \"{{key}}\" ne odgovara na zahtjeve za testiranje i možda neće raditi ispravno",
"unblock": "Odblokiraj", "unblock": "Odblokiraj",
"block": "Blokiraj", "block": "Blokiraj",
@ -243,6 +244,7 @@
"allow_this_client": "Omogući ovog klijenta", "allow_this_client": "Omogući ovog klijenta",
"block_for_this_client_only": "Blokiraj samo za ovog klijenta", "block_for_this_client_only": "Blokiraj samo za ovog klijenta",
"unblock_for_this_client_only": "Odblokiraj samo za ovog klijenta", "unblock_for_this_client_only": "Odblokiraj samo za ovog klijenta",
"add_persistent_client": "Dodaj u spremljene klijente",
"time_table_header": "Vrijeme", "time_table_header": "Vrijeme",
"date": "Datum", "date": "Datum",
"domain_name_table_header": "Naziv domene", "domain_name_table_header": "Naziv domene",
@ -462,6 +464,7 @@
"form_add_id": "Dodaj identifikator", "form_add_id": "Dodaj identifikator",
"form_client_name": "Unesite naziv klijenta", "form_client_name": "Unesite naziv klijenta",
"name": "Naziv", "name": "Naziv",
"client_name": "Klijent {{id}}",
"client_global_settings": "Koristi globalne postavke", "client_global_settings": "Koristi globalne postavke",
"client_deleted": "Klijent \"{{key}}\" je uspješno uklonjen", "client_deleted": "Klijent \"{{key}}\" je uspješno uklonjen",
"client_added": "Klijent \"{{key}}\" je uspješno dodan", "client_added": "Klijent \"{{key}}\" je uspješno dodan",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream szerverek sikeresen mentve", "updated_upstream_dns_toast": "Upstream szerverek sikeresen mentve",
"dns_test_ok_toast": "A megadott DNS-kiszolgálók megfelelően működnek", "dns_test_ok_toast": "A megadott DNS-kiszolgálók megfelelően működnek",
"dns_test_not_ok_toast": "Szerver \"{{key}}\": nem használható, ellenőrizze, hogy helyesen írta-e be", "dns_test_not_ok_toast": "Szerver \"{{key}}\": nem használható, ellenőrizze, hogy helyesen írta-e be",
"dns_test_parsing_error_toast": "Szekció {{section}}: sor {{line}}: nem használható, ellenőrizze, hogy helyesen írta-e be",
"dns_test_warning_toast": "A \"{{key}}\" feltöltés nem válaszol a tesztkérelmekre, és lehet, hogy nem működik megfelelően", "dns_test_warning_toast": "A \"{{key}}\" feltöltés nem válaszol a tesztkérelmekre, és lehet, hogy nem működik megfelelően",
"unblock": "Feloldás", "unblock": "Feloldás",
"block": "Blokkolás", "block": "Blokkolás",
@ -243,6 +244,7 @@
"allow_this_client": "Engedélyezés ennek a kliensnek", "allow_this_client": "Engedélyezés ennek a kliensnek",
"block_for_this_client_only": "Tiltás csak ennek a kliensnek", "block_for_this_client_only": "Tiltás csak ennek a kliensnek",
"unblock_for_this_client_only": "Feloldás csak ennek a kliensnek", "unblock_for_this_client_only": "Feloldás csak ennek a kliensnek",
"add_persistent_client": "Hozzáadás állandó ügyfélként",
"time_table_header": "Idő", "time_table_header": "Idő",
"date": "Dátum", "date": "Dátum",
"domain_name_table_header": "Domain név", "domain_name_table_header": "Domain név",
@ -462,6 +464,7 @@
"form_add_id": "Azonosító hozzáadása", "form_add_id": "Azonosító hozzáadása",
"form_client_name": "Adja meg a kliens nevét", "form_client_name": "Adja meg a kliens nevét",
"name": "Név", "name": "Név",
"client_name": "Ügyfél {{id}}",
"client_global_settings": "Globális beállítások használata", "client_global_settings": "Globális beállítások használata",
"client_deleted": "A(z) \"{{key}}\" kliens sikeresen el lett távolítva", "client_deleted": "A(z) \"{{key}}\" kliens sikeresen el lett távolítva",
"client_added": "A(z) \"{{key}}\" kliens sikeresen hozzá lett adva", "client_added": "A(z) \"{{key}}\" kliens sikeresen hozzá lett adva",

View file

@ -224,10 +224,10 @@
"example_upstream_regular": "DNS reguler (melalui UDP);", "example_upstream_regular": "DNS reguler (melalui UDP);",
"example_upstream_regular_port": "DNS biasa (lebih dari UDP, dengan port);", "example_upstream_regular_port": "DNS biasa (lebih dari UDP, dengan port);",
"example_upstream_udp": "DNS biasa (lebih dari UDP, nama host);", "example_upstream_udp": "DNS biasa (lebih dari UDP, nama host);",
"example_upstream_dot": "terenkripsi <0>DNS-over-TLS</0>;", "example_upstream_dot": "<0>DNS melalui TLS</0> terenkripsi;",
"example_upstream_doh": "terenkripsi <0>DNS-over-HTTPS</0>;", "example_upstream_doh": "<0>DNS melalui HTTPS</0> terenkripsi;",
"example_upstream_doh3": "DNS-over-HTTPS terenkripsi dengan paksa <0>HTTP/3</0> dan tidak ada fallback ke HTTP/2 atau lebih rendah;", "example_upstream_doh3": "DNS melalui HTTPS terenkripsi dengan <0>HTTP/3</0> secara paksa dan tidak ada cadangan ke HTTP/2 atau lebih rendah;",
"example_upstream_doq": "terenkripsi <0>DNS-over-QUIC</0>;", "example_upstream_doq": "<0>DNS melalui QUIC</0> terenkripsi;",
"example_upstream_sdns": "<0>Stempel DNS</0> untuk <1>DNSCrypt</1> atau pengarah <2>DNS-over-HTTPS</2>;", "example_upstream_sdns": "<0>Stempel DNS</0> untuk <1>DNSCrypt</1> atau pengarah <2>DNS-over-HTTPS</2>;",
"example_upstream_tcp": "DNS reguler (melalui TCP);", "example_upstream_tcp": "DNS reguler (melalui TCP);",
"example_upstream_tcp_port": "DNS biasa (melalui TCP, dengan port);", "example_upstream_tcp_port": "DNS biasa (melalui TCP, dengan port);",
@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Server upstream berhasil disimpan", "updated_upstream_dns_toast": "Server upstream berhasil disimpan",
"dns_test_ok_toast": "Server DNS yang ditentukan bekerja dengan benar", "dns_test_ok_toast": "Server DNS yang ditentukan bekerja dengan benar",
"dns_test_not_ok_toast": "Server \"{{key}}\": tidak dapat digunakan, mohon cek bahwa Anda telah menulisnya dengan benar", "dns_test_not_ok_toast": "Server \"{{key}}\": tidak dapat digunakan, mohon cek bahwa Anda telah menulisnya dengan benar",
"dns_test_parsing_error_toast": "Bagian {{section}}: baris {{line}}: tidak dapat digunakan, mohon cek bahwa Anda telah menulisnya dengan benar",
"dns_test_warning_toast": "Upstream \"{{key}}\" tidak menanggapi permintaan pengujian dan mungkin tidak berfungsi dengan baik", "dns_test_warning_toast": "Upstream \"{{key}}\" tidak menanggapi permintaan pengujian dan mungkin tidak berfungsi dengan baik",
"unblock": "Buka Blokir", "unblock": "Buka Blokir",
"block": "Blok", "block": "Blok",
@ -243,6 +244,7 @@
"allow_this_client": "Ijinkan klien ini", "allow_this_client": "Ijinkan klien ini",
"block_for_this_client_only": "Blok hanya untuk klien ini", "block_for_this_client_only": "Blok hanya untuk klien ini",
"unblock_for_this_client_only": "Jangan diblok hanya untuk klien ini", "unblock_for_this_client_only": "Jangan diblok hanya untuk klien ini",
"add_persistent_client": "Tambahkan sebagai klien persisten",
"time_table_header": "Waktu", "time_table_header": "Waktu",
"date": "Tanggal", "date": "Tanggal",
"domain_name_table_header": "Nama domain", "domain_name_table_header": "Nama domain",
@ -289,7 +291,7 @@
"custom_ip": "Custom IP", "custom_ip": "Custom IP",
"blocking_ipv4": "Blokiran IPv4", "blocking_ipv4": "Blokiran IPv4",
"blocking_ipv6": "Blokiran IPv6", "blocking_ipv6": "Blokiran IPv6",
"blocked_response_ttl": "TTL Respons yang diblokir", "blocked_response_ttl": "Respons TTL yang diblokir",
"blocked_response_ttl_desc": "Menentukan berapa detik klien harus menyimpan respons yang difilter dalam cache", "blocked_response_ttl_desc": "Menentukan berapa detik klien harus menyimpan respons yang difilter dalam cache",
"form_enter_blocked_response_ttl": "Masukkan TTL respons yang diblokir (detik)", "form_enter_blocked_response_ttl": "Masukkan TTL respons yang diblokir (detik)",
"dnscrypt": "DNSCrypt", "dnscrypt": "DNSCrypt",
@ -424,7 +426,7 @@
"encryption_reset": "Anda yakin ingin mengatur ulang pengaturan enkripsi?", "encryption_reset": "Anda yakin ingin mengatur ulang pengaturan enkripsi?",
"encryption_warning": "Peringatan", "encryption_warning": "Peringatan",
"encryption_plain_dns_enable": "Aktifkan DNS biasa", "encryption_plain_dns_enable": "Aktifkan DNS biasa",
"encryption_plain_dns_desc": "DNS Biasa diaktifkan secara standar. Anda dapat menonaktifkannya untuk memaksa semua perangkat menggunakan DNS terenkripsi. Untuk melakukan ini, Anda harus mengaktifkan setidaknya satu protokol DNS terenkripsi", "encryption_plain_dns_desc": "DNS biasa diaktifkan secara standar. Anda dapat menonaktifkannya untuk memaksa semua perangkat menggunakan DNS terenkripsi. Untuk melakukan ini, Anda harus mengaktifkan setidaknya satu protokol DNS terenkripsi",
"encryption_plain_dns_error": "Untuk menonaktifkan DNS biasa, aktifkan setidaknya satu protokol DNS terenkripsi", "encryption_plain_dns_error": "Untuk menonaktifkan DNS biasa, aktifkan setidaknya satu protokol DNS terenkripsi",
"topline_expiring_certificate": "Sertifikat SSL Anda hampir kedaluwarsa. Perbarui <0>Pengaturan enkripsi</0>.", "topline_expiring_certificate": "Sertifikat SSL Anda hampir kedaluwarsa. Perbarui <0>Pengaturan enkripsi</0>.",
"topline_expired_certificate": "Sertifikat SSL Anda kedaluwarsa. Perbarui <0>Pengaturan enkripsi</0>.", "topline_expired_certificate": "Sertifikat SSL Anda kedaluwarsa. Perbarui <0>Pengaturan enkripsi</0>.",
@ -442,7 +444,7 @@
"fix": "Perbaiki", "fix": "Perbaiki",
"dns_providers": "Berikut adalah <0>daftar penyedia DNS yang dikenal</0> untuk dipilih.", "dns_providers": "Berikut adalah <0>daftar penyedia DNS yang dikenal</0> untuk dipilih.",
"update_now": "Perbarui sekarang", "update_now": "Perbarui sekarang",
"update_failed": "Pembaruan otomatis gagal. Silahkan <a>ikuti petunjuk ini</a> untuk perbarui secara manual.", "update_failed": "Pembaruan otomatis gagal. Silakan <a>ikuti langkah-langkah berikut</a> untuk memperbarui secara manual.",
"manual_update": "Silakan <a>mengikuti langkah berikut</a> untuk memperbarui secara manual.", "manual_update": "Silakan <a>mengikuti langkah berikut</a> untuk memperbarui secara manual.",
"processing_update": "Silahkan tunggu, AdGuard Home sedang diperbarui", "processing_update": "Silahkan tunggu, AdGuard Home sedang diperbarui",
"clients_title": "Klien yang gigih", "clients_title": "Klien yang gigih",
@ -465,6 +467,7 @@
"form_add_id": "Tambahkan pengenal", "form_add_id": "Tambahkan pengenal",
"form_client_name": "Masukkan nama klien", "form_client_name": "Masukkan nama klien",
"name": "Nama", "name": "Nama",
"client_name": "Klien {{id}}",
"client_global_settings": "Gunakan pengaturan global", "client_global_settings": "Gunakan pengaturan global",
"client_deleted": "Klien \"{{key}}\" berhasil dihapus", "client_deleted": "Klien \"{{key}}\" berhasil dihapus",
"client_added": "Klien \"{{key}}\" berhasil ditambahkan", "client_added": "Klien \"{{key}}\" berhasil ditambahkan",
@ -545,7 +548,7 @@
"domain": "Domain", "domain": "Domain",
"ecs": "ECS", "ecs": "ECS",
"punycode": "Kode kecil", "punycode": "Kode kecil",
"answer": "Jawab", "answer": "Jawaban",
"filter_added_successfully": "Filter telah berhasil ditambahkan", "filter_added_successfully": "Filter telah berhasil ditambahkan",
"filter_removed_successfully": "Daftar ini telah sukses dihapus", "filter_removed_successfully": "Daftar ini telah sukses dihapus",
"filter_updated": "Daftar telah sukses diperbarui", "filter_updated": "Daftar telah sukses diperbarui",
@ -679,7 +682,7 @@
"form_error_password_length": "Kata sandi harus terdiri dari {{min}} hingga {{max}}", "form_error_password_length": "Kata sandi harus terdiri dari {{min}} hingga {{max}}",
"anonymizer_notification": "<0>Catatan:</0> Anonimisasi IP diaktifkan. Anda dapat menonaktifkannya di <1>Pengaturan umum</1> .", "anonymizer_notification": "<0>Catatan:</0> Anonimisasi IP diaktifkan. Anda dapat menonaktifkannya di <1>Pengaturan umum</1> .",
"confirm_dns_cache_clear": "Apakah Anda yakin ingin menghapus cache DNS?", "confirm_dns_cache_clear": "Apakah Anda yakin ingin menghapus cache DNS?",
"cache_cleared": "Cache DNS berhasil dibersihkan", "cache_cleared": "Cache DNS berhasil dihapus",
"clear_cache": "Hapus cache", "clear_cache": "Hapus cache",
"make_static": "Jadikan statis", "make_static": "Jadikan statis",
"theme_auto_desc": "Otomatis (berdasarkan skema warna perangkat anda)", "theme_auto_desc": "Otomatis (berdasarkan skema warna perangkat anda)",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "I server upstream sono stati salvati correttamente", "updated_upstream_dns_toast": "I server upstream sono stati salvati correttamente",
"dns_test_ok_toast": "I server DNS specificati funzionano correttamente", "dns_test_ok_toast": "I server DNS specificati funzionano correttamente",
"dns_test_not_ok_toast": "Server \"{{key}}\": non può essere utilizzato, assicurati di averlo digitato correttamente", "dns_test_not_ok_toast": "Server \"{{key}}\": non può essere utilizzato, assicurati di averlo digitato correttamente",
"dns_test_parsing_error_toast": "Sezione {{section}}: riga {{line}}: non può essere usata, controlla se l'hai scritta correttamente",
"dns_test_warning_toast": "Upstream \"{{key}}\" non risponde alle richieste di test e potrebbe non funzionare correttamente", "dns_test_warning_toast": "Upstream \"{{key}}\" non risponde alle richieste di test e potrebbe non funzionare correttamente",
"unblock": "Sblocca", "unblock": "Sblocca",
"block": "Blocca", "block": "Blocca",
@ -243,6 +244,7 @@
"allow_this_client": "Consenti questo client", "allow_this_client": "Consenti questo client",
"block_for_this_client_only": "Blocca solo per questo client", "block_for_this_client_only": "Blocca solo per questo client",
"unblock_for_this_client_only": "Sblocca solo per questo client", "unblock_for_this_client_only": "Sblocca solo per questo client",
"add_persistent_client": "Aggiungi come client persistente",
"time_table_header": "Ora", "time_table_header": "Ora",
"date": "Data", "date": "Data",
"domain_name_table_header": "Nome dominio", "domain_name_table_header": "Nome dominio",
@ -465,6 +467,7 @@
"form_add_id": "Aggiungi identificatore", "form_add_id": "Aggiungi identificatore",
"form_client_name": "Inserisci nome client", "form_client_name": "Inserisci nome client",
"name": "Nome", "name": "Nome",
"client_name": "Client {{id}}",
"client_global_settings": "Utilizza le impostazioni globali", "client_global_settings": "Utilizza le impostazioni globali",
"client_deleted": "Client \"{{key}}\" eliminato correttamente", "client_deleted": "Client \"{{key}}\" eliminato correttamente",
"client_added": "Client \"{{key}}\" aggiunto correttamente", "client_added": "Client \"{{key}}\" aggiunto correttamente",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "アップストリームサーバーを保存しました。", "updated_upstream_dns_toast": "アップストリームサーバーを保存しました。",
"dns_test_ok_toast": "指定されたDNSサーバは正しく動作しています", "dns_test_ok_toast": "指定されたDNSサーバは正しく動作しています",
"dns_test_not_ok_toast": "サーバ \"{{key}}\": 使用できませんでした。正しく入力されているかどうかを確認してください", "dns_test_not_ok_toast": "サーバ \"{{key}}\": 使用できませんでした。正しく入力されているかどうかを確認してください",
"dns_test_parsing_error_toast": "セクション {{section}}: 行 {{line}}: を使用できませんでした。正しく記述されているか確認してください",
"dns_test_warning_toast": "アップストリーム\"{{key}}\"はテストリクエストに応答せず、正しく動作しない可能性があります。", "dns_test_warning_toast": "アップストリーム\"{{key}}\"はテストリクエストに応答せず、正しく動作しない可能性があります。",
"unblock": "ブロック解除", "unblock": "ブロック解除",
"block": "ブロック", "block": "ブロック",
@ -243,6 +244,7 @@
"allow_this_client": "このクライアントを許可する", "allow_this_client": "このクライアントを許可する",
"block_for_this_client_only": "このクライアントに対してのみブロックする", "block_for_this_client_only": "このクライアントに対してのみブロックする",
"unblock_for_this_client_only": "このクライアントに対してのみブロックを解除する", "unblock_for_this_client_only": "このクライアントに対してのみブロックを解除する",
"add_persistent_client": "永続クライアントとして追加する",
"time_table_header": "時刻", "time_table_header": "時刻",
"date": "購入日時", "date": "購入日時",
"domain_name_table_header": "ドメイン名", "domain_name_table_header": "ドメイン名",
@ -465,6 +467,7 @@
"form_add_id": "識別子を追加する", "form_add_id": "識別子を追加する",
"form_client_name": "クライアント名を入力してください", "form_client_name": "クライアント名を入力してください",
"name": "名前", "name": "名前",
"client_name": "クライアント {{id}}",
"client_global_settings": "グローバル設定を使用する", "client_global_settings": "グローバル設定を使用する",
"client_deleted": "クライアント \"{{key}}\" の削除に成功しました", "client_deleted": "クライアント \"{{key}}\" の削除に成功しました",
"client_added": "クライアント \"{{key}}\" の追加に成功しました", "client_added": "クライアント \"{{key}}\" の追加に成功しました",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "업스트림 서버가 성공적으로 저장되었습니다", "updated_upstream_dns_toast": "업스트림 서버가 성공적으로 저장되었습니다",
"dns_test_ok_toast": "지정된 DNS 서버가 올바르게 작동하고 있습니다.", "dns_test_ok_toast": "지정된 DNS 서버가 올바르게 작동하고 있습니다.",
"dns_test_not_ok_toast": "서버 '{{key}}': 사용할 수 없습니다, 제대로 작성했는지 확인하세요", "dns_test_not_ok_toast": "서버 '{{key}}': 사용할 수 없습니다, 제대로 작성했는지 확인하세요",
"dns_test_parsing_error_toast": "섹션 {{section}}: 줄 {{line}}: 사용할 수 없으며, 올바르게 작성했는지 확인하세요.",
"dns_test_warning_toast": "업스트림 '{{key}}'이(가) 테스트 요청에 응답하지 않으며 제대로 작동하지 않을 수 있습니다", "dns_test_warning_toast": "업스트림 '{{key}}'이(가) 테스트 요청에 응답하지 않으며 제대로 작동하지 않을 수 있습니다",
"unblock": "차단 해제", "unblock": "차단 해제",
"block": "차단", "block": "차단",
@ -243,6 +244,7 @@
"allow_this_client": "클라이언트 허용", "allow_this_client": "클라이언트 허용",
"block_for_this_client_only": "이 클라이언트에 대해서만 차단", "block_for_this_client_only": "이 클라이언트에 대해서만 차단",
"unblock_for_this_client_only": "이 클라이언트에 대해서만 차단 해제", "unblock_for_this_client_only": "이 클라이언트에 대해서만 차단 해제",
"add_persistent_client": "저장된 클라이언트에 추가",
"time_table_header": "시간", "time_table_header": "시간",
"date": "날짜", "date": "날짜",
"domain_name_table_header": "도메인명", "domain_name_table_header": "도메인명",
@ -465,6 +467,7 @@
"form_add_id": "식별자 추가", "form_add_id": "식별자 추가",
"form_client_name": "클라이언트 이름 입력", "form_client_name": "클라이언트 이름 입력",
"name": "이름", "name": "이름",
"client_name": "클라이언트 {{id}}",
"client_global_settings": "글로벌 설정 사용", "client_global_settings": "글로벌 설정 사용",
"client_deleted": "클라이언트 '{{key}}'이(가) 정상적으로 삭제되었습니다", "client_deleted": "클라이언트 '{{key}}'이(가) 정상적으로 삭제되었습니다",
"client_added": "클라이언트 '{{key}}'이(가) 정상적으로 추가되었습니다", "client_added": "클라이언트 '{{key}}'이(가) 정상적으로 추가되었습니다",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream-servers succesvol opgeslagen", "updated_upstream_dns_toast": "Upstream-servers succesvol opgeslagen",
"dns_test_ok_toast": "Opgegeven DNS-servers werken correct", "dns_test_ok_toast": "Opgegeven DNS-servers werken correct",
"dns_test_not_ok_toast": "Server \"{{key}}\": kon niet worden gebruikt, controleer of je het correct hebt geschreven", "dns_test_not_ok_toast": "Server \"{{key}}\": kon niet worden gebruikt, controleer of je het correct hebt geschreven",
"dns_test_parsing_error_toast": "Sectie {{section}}: regel {{line}}: kan niet worden gebruikt. Controleer of je het correct hebt geschreven",
"dns_test_warning_toast": "Upstream \"{{key}}\" reageert niet op testverzoeken en werkt mogelijk niet goed", "dns_test_warning_toast": "Upstream \"{{key}}\" reageert niet op testverzoeken en werkt mogelijk niet goed",
"unblock": "Deblokkeren", "unblock": "Deblokkeren",
"block": "Blokkeren", "block": "Blokkeren",
@ -243,6 +244,7 @@
"allow_this_client": "Toepassing/systeem toelaten", "allow_this_client": "Toepassing/systeem toelaten",
"block_for_this_client_only": "Alleen voor deze cliënt blokkeren", "block_for_this_client_only": "Alleen voor deze cliënt blokkeren",
"unblock_for_this_client_only": "Alleen voor deze cliënt deblokkeren", "unblock_for_this_client_only": "Alleen voor deze cliënt deblokkeren",
"add_persistent_client": "Toevoegen als permanente client",
"time_table_header": "Tijd", "time_table_header": "Tijd",
"date": "Datum", "date": "Datum",
"domain_name_table_header": "Domein naam", "domain_name_table_header": "Domein naam",
@ -465,6 +467,7 @@
"form_add_id": "ID toevoegen", "form_add_id": "ID toevoegen",
"form_client_name": "Vul gebruikersnaam in", "form_client_name": "Vul gebruikersnaam in",
"name": "Naam", "name": "Naam",
"client_name": "Client {{id}}",
"client_global_settings": "Gebruik globale instelling", "client_global_settings": "Gebruik globale instelling",
"client_deleted": "Gebruiker \"{{key}}\" met succes verwijderd", "client_deleted": "Gebruiker \"{{key}}\" met succes verwijderd",
"client_added": "Gebruiker \"{{key}}\" met succes toegevoegd", "client_added": "Gebruiker \"{{key}}\" met succes toegevoegd",

View file

@ -212,6 +212,7 @@
"updated_upstream_dns_toast": "Oppdaterte oppstrøms-DNS-tjenerne", "updated_upstream_dns_toast": "Oppdaterte oppstrøms-DNS-tjenerne",
"dns_test_ok_toast": "De spesifiserte DNS-tjenerne fungerer riktig", "dns_test_ok_toast": "De spesifiserte DNS-tjenerne fungerer riktig",
"dns_test_not_ok_toast": "Tjeneren «{{key}}» kunne ikke brukes, vennligst dobbeltsjekk at du har skrevet den riktig", "dns_test_not_ok_toast": "Tjeneren «{{key}}» kunne ikke brukes, vennligst dobbeltsjekk at du har skrevet den riktig",
"dns_test_parsing_error_toast": "Seksjon {{section}}: linje {{line}}: kunne ikke brukes, vennligst sjekk at du har skrevet det riktig",
"unblock": "Tillat", "unblock": "Tillat",
"block": "Blokker", "block": "Blokker",
"disallow_this_client": "Ikke tillat denne klienten", "disallow_this_client": "Ikke tillat denne klienten",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Serwery nadrzędne zostały pomyślnie zapisane", "updated_upstream_dns_toast": "Serwery nadrzędne zostały pomyślnie zapisane",
"dns_test_ok_toast": "Określone serwery DNS działają poprawnie", "dns_test_ok_toast": "Określone serwery DNS działają poprawnie",
"dns_test_not_ok_toast": "Serwer \"{{key}}\": nie może być użyte, sprawdź, czy zapisano go poprawnie", "dns_test_not_ok_toast": "Serwer \"{{key}}\": nie może być użyte, sprawdź, czy zapisano go poprawnie",
"dns_test_parsing_error_toast": "Sekcja {{section}}: linia {{line}}: nie może być użyte, sprawdź, czy zapisano go poprawnie",
"dns_test_warning_toast": "Upstream \"{{key}}\" nie odpowiada na zapytania testowe i może nie działać prawidłowo", "dns_test_warning_toast": "Upstream \"{{key}}\" nie odpowiada na zapytania testowe i może nie działać prawidłowo",
"unblock": "Odblokuj", "unblock": "Odblokuj",
"block": "Zablokuj", "block": "Zablokuj",
@ -243,6 +244,7 @@
"allow_this_client": "Pozwól temu klientowi", "allow_this_client": "Pozwól temu klientowi",
"block_for_this_client_only": "Zablokuj tylko tego klienta", "block_for_this_client_only": "Zablokuj tylko tego klienta",
"unblock_for_this_client_only": "Odblokuj tylko tego klienta", "unblock_for_this_client_only": "Odblokuj tylko tego klienta",
"add_persistent_client": "Dodaj do zapisanych klientów",
"time_table_header": "Czas", "time_table_header": "Czas",
"date": "Data", "date": "Data",
"domain_name_table_header": "Nazwa domeny", "domain_name_table_header": "Nazwa domeny",
@ -423,6 +425,9 @@
"encryption_hostnames": "Nazwy hostów", "encryption_hostnames": "Nazwy hostów",
"encryption_reset": "Czy na pewno chcesz zresetować ustawienia szyfrowania?", "encryption_reset": "Czy na pewno chcesz zresetować ustawienia szyfrowania?",
"encryption_warning": "Ostrzeżenie", "encryption_warning": "Ostrzeżenie",
"encryption_plain_dns_enable": "Włącz zwykły DNS",
"encryption_plain_dns_desc": "Zwykły DNS jest domyślnie włączony. Możesz go wyłączyć, aby zmusić wszystkie urządzenia do korzystania z szyfrowanego DNS. Aby to zrobić, musisz włączyć co najmniej jeden szyfrowany protokół DNS",
"encryption_plain_dns_error": "Aby wyłączyć zwykły DNS, włącz co najmniej jeden szyfrowany protokół DNS",
"topline_expiring_certificate": "Twój certyfikat SSL wkrótce wygaśnie. Zaktualizuj <0>Ustawienia szyfrowania</0>.", "topline_expiring_certificate": "Twój certyfikat SSL wkrótce wygaśnie. Zaktualizuj <0>Ustawienia szyfrowania</0>.",
"topline_expired_certificate": "Twój certyfikat SSL wygasł. Zaktualizuj <0>Ustawienia szyfrowania</0>.", "topline_expired_certificate": "Twój certyfikat SSL wygasł. Zaktualizuj <0>Ustawienia szyfrowania</0>.",
"form_error_port_range": "Wpisz numer portu z zakresu 80-65535", "form_error_port_range": "Wpisz numer portu z zakresu 80-65535",
@ -462,6 +467,7 @@
"form_add_id": "Dodaj identyfikator", "form_add_id": "Dodaj identyfikator",
"form_client_name": "Wpisz nazwę klienta", "form_client_name": "Wpisz nazwę klienta",
"name": "Nazwa", "name": "Nazwa",
"client_name": "Klient {{id}}",
"client_global_settings": "Użyj ustawień globalnych", "client_global_settings": "Użyj ustawień globalnych",
"client_deleted": "Klient \"{{key}}\" został pomyślnie usunięty", "client_deleted": "Klient \"{{key}}\" został pomyślnie usunięty",
"client_added": "Klient \"{{key}}\" został pomyślnie dodany", "client_added": "Klient \"{{key}}\" został pomyślnie dodany",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Servidores DNS primário salvos com sucesso", "updated_upstream_dns_toast": "Servidores DNS primário salvos com sucesso",
"dns_test_ok_toast": "Os servidores DNS especificados estão funcionando corretamente", "dns_test_ok_toast": "Os servidores DNS especificados estão funcionando corretamente",
"dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se você escreveu corretamente", "dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se você escreveu corretamente",
"dns_test_parsing_error_toast": "A seção {{section}}: linha {{line}}: não pôde ser usada. Verifique se foi escrita corretamente",
"dns_test_warning_toast": "Servidor DNS primário \"{{key}}\" não responde aos Solicitações de teste e pode não funcionar corretamente", "dns_test_warning_toast": "Servidor DNS primário \"{{key}}\" não responde aos Solicitações de teste e pode não funcionar corretamente",
"unblock": "Desbloquear", "unblock": "Desbloquear",
"block": "Bloquear", "block": "Bloquear",
@ -243,6 +244,7 @@
"allow_this_client": "Permitir este cliente", "allow_this_client": "Permitir este cliente",
"block_for_this_client_only": "Bloquear apenas para este cliente", "block_for_this_client_only": "Bloquear apenas para este cliente",
"unblock_for_this_client_only": "Desbloquear apenas para este cliente", "unblock_for_this_client_only": "Desbloquear apenas para este cliente",
"add_persistent_client": "Adicionar como cliente persistente",
"time_table_header": "Data", "time_table_header": "Data",
"date": "Data", "date": "Data",
"domain_name_table_header": "Nome de domínio", "domain_name_table_header": "Nome de domínio",
@ -465,6 +467,7 @@
"form_add_id": "Adicionar identificador", "form_add_id": "Adicionar identificador",
"form_client_name": "Digite o nome do cliente", "form_client_name": "Digite o nome do cliente",
"name": "Nome", "name": "Nome",
"client_name": "Cliente {{id}}",
"client_global_settings": "Usar configurações global", "client_global_settings": "Usar configurações global",
"client_deleted": "Cliente \"{{key}}\" excluído com sucesso", "client_deleted": "Cliente \"{{key}}\" excluído com sucesso",
"client_added": "Cliente \"{{key}}\" adicionado com sucesso", "client_added": "Cliente \"{{key}}\" adicionado com sucesso",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Servidores DNS primário guardados com sucesso", "updated_upstream_dns_toast": "Servidores DNS primário guardados com sucesso",
"dns_test_ok_toast": "Os servidores DNS especificados estão a funcionar corretamente", "dns_test_ok_toast": "Os servidores DNS especificados estão a funcionar corretamente",
"dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se o escreveu corretamente", "dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se o escreveu corretamente",
"dns_test_parsing_error_toast": "A seção {{section}}: linha {{line}}: não pôde ser usada. Verifique se foi escrita corretamente",
"dns_test_warning_toast": "Servidor DNS primário \"{{key}}\" não responde aos solicitações de teste e pode não funcionar corretamente", "dns_test_warning_toast": "Servidor DNS primário \"{{key}}\" não responde aos solicitações de teste e pode não funcionar corretamente",
"unblock": "Desbloquear", "unblock": "Desbloquear",
"block": "Bloquear", "block": "Bloquear",
@ -243,6 +244,7 @@
"allow_this_client": "Permitir este cliente", "allow_this_client": "Permitir este cliente",
"block_for_this_client_only": "Bloquear apenas para este cliente", "block_for_this_client_only": "Bloquear apenas para este cliente",
"unblock_for_this_client_only": "Desbloquear apenas para este cliente", "unblock_for_this_client_only": "Desbloquear apenas para este cliente",
"add_persistent_client": "Adicionar como cliente persistente",
"time_table_header": "Data", "time_table_header": "Data",
"date": "Data", "date": "Data",
"domain_name_table_header": "Nome do domínio", "domain_name_table_header": "Nome do domínio",
@ -465,6 +467,7 @@
"form_add_id": "Adicionar identificador", "form_add_id": "Adicionar identificador",
"form_client_name": "Insira o nome do cliente", "form_client_name": "Insira o nome do cliente",
"name": "Nome", "name": "Nome",
"client_name": "Cliente {{id}}",
"client_global_settings": "Usar definições globais", "client_global_settings": "Usar definições globais",
"client_deleted": "Cliente \"{{key}}\" excluído com sucesso", "client_deleted": "Cliente \"{{key}}\" excluído com sucesso",
"client_added": "Cliente \"{{key}}\" adicionado com sucesso", "client_added": "Cliente \"{{key}}\" adicionado com sucesso",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Serverele din amonte au fost salvate cu succes", "updated_upstream_dns_toast": "Serverele din amonte au fost salvate cu succes",
"dns_test_ok_toast": "Serverele DNS specificate funcționează corect", "dns_test_ok_toast": "Serverele DNS specificate funcționează corect",
"dns_test_not_ok_toast": "Serverul \"{{key}}\": nu a putut fi utilizat, verificați dacă l-ați scris corect", "dns_test_not_ok_toast": "Serverul \"{{key}}\": nu a putut fi utilizat, verificați dacă l-ați scris corect",
"dns_test_parsing_error_toast": "Secțiune {{section}}: linie {{line}}: nu a putut fi folosit, vă rugăm să verificați dacă l-ați scris corect",
"dns_test_warning_toast": "„{{key}}” în amonte nu răspunde la solicitările de testare și s-ar putea să nu funcționeze corect", "dns_test_warning_toast": "„{{key}}” în amonte nu răspunde la solicitările de testare și s-ar putea să nu funcționeze corect",
"unblock": "Deblocați", "unblock": "Deblocați",
"block": "Blocați", "block": "Blocați",
@ -243,6 +244,7 @@
"allow_this_client": "Permiteți acest client", "allow_this_client": "Permiteți acest client",
"block_for_this_client_only": "Blocați numai pentru acest client", "block_for_this_client_only": "Blocați numai pentru acest client",
"unblock_for_this_client_only": "Deblocați numai pentru acest client", "unblock_for_this_client_only": "Deblocați numai pentru acest client",
"add_persistent_client": "Adăugați ca client persistent",
"time_table_header": "Ora", "time_table_header": "Ora",
"date": "Data", "date": "Data",
"domain_name_table_header": "Nume domeniu", "domain_name_table_header": "Nume domeniu",
@ -462,6 +464,7 @@
"form_add_id": "Adăugați identificator", "form_add_id": "Adăugați identificator",
"form_client_name": "Introduceți nume client", "form_client_name": "Introduceți nume client",
"name": "Nume", "name": "Nume",
"client_name": "Client {{id}}",
"client_global_settings": "Folosiți setări globale", "client_global_settings": "Folosiți setări globale",
"client_deleted": "Clientul \"{{key}}\" a fost șters cu succes", "client_deleted": "Clientul \"{{key}}\" a fost șters cu succes",
"client_added": "Clientul \"{{key}}\" a fost adăugat cu succes", "client_added": "Clientul \"{{key}}\" a fost adăugat cu succes",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "DNS-серверы успешно обновлены", "updated_upstream_dns_toast": "DNS-серверы успешно обновлены",
"dns_test_ok_toast": "Указанные серверы DNS работают корректно", "dns_test_ok_toast": "Указанные серверы DNS работают корректно",
"dns_test_not_ok_toast": "Сервер «{{key}}»: невозможно использовать, проверьте правильность написания", "dns_test_not_ok_toast": "Сервер «{{key}}»: невозможно использовать, проверьте правильность написания",
"dns_test_parsing_error_toast": "Раздел {{section}}: строка {{line}}: невозможно использовать, проверьте правильность написания",
"dns_test_warning_toast": "Upstream «{{key}}» не отвечает на тестовые запросы и может работать некорректно", "dns_test_warning_toast": "Upstream «{{key}}» не отвечает на тестовые запросы и может работать некорректно",
"unblock": "Разблокировать", "unblock": "Разблокировать",
"block": "Заблокировать", "block": "Заблокировать",
@ -243,6 +244,7 @@
"allow_this_client": "Разрешить доступ клиенту", "allow_this_client": "Разрешить доступ клиенту",
"block_for_this_client_only": "Заблокировать только для этого клиента", "block_for_this_client_only": "Заблокировать только для этого клиента",
"unblock_for_this_client_only": "Разблокировать только для этого клиента", "unblock_for_this_client_only": "Разблокировать только для этого клиента",
"add_persistent_client": "Добавить в сохранённые клиенты",
"time_table_header": "Время", "time_table_header": "Время",
"date": "Дата", "date": "Дата",
"domain_name_table_header": "Домен", "domain_name_table_header": "Домен",
@ -465,6 +467,7 @@
"form_add_id": "Добавить идентификатор", "form_add_id": "Добавить идентификатор",
"form_client_name": "Введите имя клиента", "form_client_name": "Введите имя клиента",
"name": "Имя", "name": "Имя",
"client_name": "Клиент {{id}}",
"client_global_settings": "Использовать глобальные настройки", "client_global_settings": "Использовать глобальные настройки",
"client_deleted": "Клиент «{{key}}» успешно удалён", "client_deleted": "Клиент «{{key}}» успешно удалён",
"client_added": "Клиент «{{key}}» успешно добавлен", "client_added": "Клиент «{{key}}» успешно добавлен",

View file

@ -26,7 +26,7 @@
"enabled_dhcp": "DHCP server zapnutý", "enabled_dhcp": "DHCP server zapnutý",
"disabled_dhcp": "DHCP server vypnutý", "disabled_dhcp": "DHCP server vypnutý",
"unavailable_dhcp": "DHCP nie je dostupné", "unavailable_dhcp": "DHCP nie je dostupné",
"unavailable_dhcp_desc": "AdGuard Home nemôže vo vašom OS prevádzkovať DHCP server", "unavailable_dhcp_desc": "AdGuard Home nemôže vo Vašom OS prevádzkovať DHCP server",
"dhcp_title": "DHCP server (experimentálne!)", "dhcp_title": "DHCP server (experimentálne!)",
"dhcp_description": "Ak Váš smerovač neposkytuje možnosť nastaviť DHCP, môžete použiť vlastný zabudovaný DHCP server AdGuard.", "dhcp_description": "Ak Váš smerovač neposkytuje možnosť nastaviť DHCP, môžete použiť vlastný zabudovaný DHCP server AdGuard.",
"dhcp_enable": "Zapnúť DHCP server", "dhcp_enable": "Zapnúť DHCP server",
@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream servery boli úspešne uložené", "updated_upstream_dns_toast": "Upstream servery boli úspešne uložené",
"dns_test_ok_toast": "Špecifikované DNS servery pracujú korektne", "dns_test_ok_toast": "Špecifikované DNS servery pracujú korektne",
"dns_test_not_ok_toast": "Server \"{{key}}\": nemohol byť použitý, skontrolujte, či ste ho správne napísali", "dns_test_not_ok_toast": "Server \"{{key}}\": nemohol byť použitý, skontrolujte, či ste ho správne napísali",
"dns_test_parsing_error_toast": "Sekcia {{section}}: riadok {{line}}: nepodarilo sa použiť, skontrolujte, či ste ho napísali správne",
"dns_test_warning_toast": "Upstream \"{{key}}\" neodpovedá na testovacie dopyty a nemusí fungovať správne", "dns_test_warning_toast": "Upstream \"{{key}}\" neodpovedá na testovacie dopyty a nemusí fungovať správne",
"unblock": "Odblokovať", "unblock": "Odblokovať",
"block": "Blokovať", "block": "Blokovať",
@ -243,6 +244,7 @@
"allow_this_client": "Povoliť tohto klienta", "allow_this_client": "Povoliť tohto klienta",
"block_for_this_client_only": "Blokovať len pre tohto klienta", "block_for_this_client_only": "Blokovať len pre tohto klienta",
"unblock_for_this_client_only": "Odblokovať len pre tohto klienta", "unblock_for_this_client_only": "Odblokovať len pre tohto klienta",
"add_persistent_client": "Pridať ako trvalého klienta",
"time_table_header": "Čas", "time_table_header": "Čas",
"date": "Dátum", "date": "Dátum",
"domain_name_table_header": "Meno domény", "domain_name_table_header": "Meno domény",
@ -465,6 +467,7 @@
"form_add_id": "Pridajte identifikátor", "form_add_id": "Pridajte identifikátor",
"form_client_name": "Zadajte meno klienta", "form_client_name": "Zadajte meno klienta",
"name": "Meno", "name": "Meno",
"client_name": "Klient {{id}}",
"client_global_settings": "Použiť globálne nastavenia", "client_global_settings": "Použiť globálne nastavenia",
"client_deleted": "\"{{key}}\" klienta bol úspešne vymazaný", "client_deleted": "\"{{key}}\" klienta bol úspešne vymazaný",
"client_added": "\"{{key}}\" klienta bol úspešne pridaný", "client_added": "\"{{key}}\" klienta bol úspešne pridaný",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Gorvodni trežniki so uspešno shranjeni", "updated_upstream_dns_toast": "Gorvodni trežniki so uspešno shranjeni",
"dns_test_ok_toast": "Navedeni strežniki DNS delujejo pravilno", "dns_test_ok_toast": "Navedeni strežniki DNS delujejo pravilno",
"dns_test_not_ok_toast": "Ni mogoče uporabiti: strežnika \"{{key}}\". Preverite, ali ste ga pravilno napisali", "dns_test_not_ok_toast": "Ni mogoče uporabiti: strežnika \"{{key}}\". Preverite, ali ste ga pravilno napisali",
"dns_test_parsing_error_toast": "Razdelek {{section}}: vrstica {{line}}: ni bilo mogoče uporabiti, preverite, ali ste ga pravilno zapisali",
"dns_test_warning_toast": "Upstream \"{{key}}\" se ne odziva na testne zahteve in morda ne deluje pravilno", "dns_test_warning_toast": "Upstream \"{{key}}\" se ne odziva na testne zahteve in morda ne deluje pravilno",
"unblock": "Omogoči", "unblock": "Omogoči",
"block": "Onemogoči", "block": "Onemogoči",
@ -243,6 +244,7 @@
"allow_this_client": "Dovoli tega odjemalca", "allow_this_client": "Dovoli tega odjemalca",
"block_for_this_client_only": "Onemogoči samo za tega odjemalca", "block_for_this_client_only": "Onemogoči samo za tega odjemalca",
"unblock_for_this_client_only": "Omogoči samo za tega odjemalca", "unblock_for_this_client_only": "Omogoči samo za tega odjemalca",
"add_persistent_client": "Dodaj kot vztrajnega odjemalca",
"time_table_header": "Čas", "time_table_header": "Čas",
"date": "Datum", "date": "Datum",
"domain_name_table_header": "Ime domene", "domain_name_table_header": "Ime domene",
@ -465,6 +467,7 @@
"form_add_id": "Dodaj identifikatorja", "form_add_id": "Dodaj identifikatorja",
"form_client_name": "Vnesite ime odjemalca", "form_client_name": "Vnesite ime odjemalca",
"name": "Ime", "name": "Ime",
"client_name": "Odjemalec {{id}}",
"client_global_settings": "Uporabi splošne nastavitve", "client_global_settings": "Uporabi splošne nastavitve",
"client_deleted": "Odjemalec \"{{key}}\" je bil uspešno izbrisan", "client_deleted": "Odjemalec \"{{key}}\" je bil uspešno izbrisan",
"client_added": "Odjemalec \"{{key}}\" je bil uspešno dodan", "client_added": "Odjemalec \"{{key}}\" je bil uspešno dodan",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Upstream serveri su uspešno sačuvani", "updated_upstream_dns_toast": "Upstream serveri su uspešno sačuvani",
"dns_test_ok_toast": "Dati DNS serveri rade ispravno", "dns_test_ok_toast": "Dati DNS serveri rade ispravno",
"dns_test_not_ok_toast": "Server \"{{key}}\": se ne može koristiti. Proverite da li ste ga ispravno uneli", "dns_test_not_ok_toast": "Server \"{{key}}\": se ne može koristiti. Proverite da li ste ga ispravno uneli",
"dns_test_parsing_error_toast": "Odeljak {{section}}: linija {{line}}: ne može se koristiti, molimo proverite da li ste ga ispravno napisali",
"dns_test_warning_toast": "Apstrim \"{{key}}\" ne odgovara na zahteve za testiranje i možda neće raditi kako treba", "dns_test_warning_toast": "Apstrim \"{{key}}\" ne odgovara na zahteve za testiranje i možda neće raditi kako treba",
"unblock": "Odblokiraj", "unblock": "Odblokiraj",
"block": "Blokiraj", "block": "Blokiraj",
@ -243,6 +244,7 @@
"allow_this_client": "Dozvoli ovaj klijent", "allow_this_client": "Dozvoli ovaj klijent",
"block_for_this_client_only": "Blokiraj samo za ovaj klijent", "block_for_this_client_only": "Blokiraj samo za ovaj klijent",
"unblock_for_this_client_only": "Odblokiraj samo za ovaj klijent", "unblock_for_this_client_only": "Odblokiraj samo za ovaj klijent",
"add_persistent_client": "Dodati u sačuvane klijente",
"time_table_header": "Vreme", "time_table_header": "Vreme",
"date": "Datum", "date": "Datum",
"domain_name_table_header": "Ime domena", "domain_name_table_header": "Ime domena",
@ -462,6 +464,7 @@
"form_add_id": "Dodaj identifikator", "form_add_id": "Dodaj identifikator",
"form_client_name": "Unesite ime klijenta", "form_client_name": "Unesite ime klijenta",
"name": "Ime", "name": "Ime",
"client_name": "Klijent {{id}}",
"client_global_settings": "Koristi globalne postavke", "client_global_settings": "Koristi globalne postavke",
"client_deleted": "Klijent \"{{key}}\" uspešno izbrisan", "client_deleted": "Klijent \"{{key}}\" uspešno izbrisan",
"client_added": "Klijent \"{{key}}\" uspešno dodat", "client_added": "Klijent \"{{key}}\" uspešno dodat",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Sparade uppströms dns-servrar", "updated_upstream_dns_toast": "Sparade uppströms dns-servrar",
"dns_test_ok_toast": "Angivna DNS servrar fungerar korrekt", "dns_test_ok_toast": "Angivna DNS servrar fungerar korrekt",
"dns_test_not_ok_toast": "Server \"{{key}}\": kunde inte användas. Var snäll och kolla att du skrivit in rätt", "dns_test_not_ok_toast": "Server \"{{key}}\": kunde inte användas. Var snäll och kolla att du skrivit in rätt",
"dns_test_parsing_error_toast": "Avsnitt {{section}}: rad {{line}}: kunde inte användas, kontrollera att du har skrivit det korrekt",
"dns_test_warning_toast": "Uppströms \"{{key}}\" svarar inte på testförfrågningar och kanske inte fungerar korrekt", "dns_test_warning_toast": "Uppströms \"{{key}}\" svarar inte på testförfrågningar och kanske inte fungerar korrekt",
"unblock": "Avblockera", "unblock": "Avblockera",
"block": "Blockera", "block": "Blockera",
@ -243,6 +244,7 @@
"allow_this_client": "Tillåt den här klienten", "allow_this_client": "Tillåt den här klienten",
"block_for_this_client_only": "Blockera endast för denna klient", "block_for_this_client_only": "Blockera endast för denna klient",
"unblock_for_this_client_only": "Avblockera endast för denna klient", "unblock_for_this_client_only": "Avblockera endast för denna klient",
"add_persistent_client": "Lägg till som beständig klient",
"time_table_header": "Tid", "time_table_header": "Tid",
"date": "Datum", "date": "Datum",
"domain_name_table_header": "Domännamn", "domain_name_table_header": "Domännamn",
@ -461,6 +463,7 @@
"form_add_id": "Lägg till identifierare", "form_add_id": "Lägg till identifierare",
"form_client_name": "Skriv in klientnamn", "form_client_name": "Skriv in klientnamn",
"name": "Namn", "name": "Namn",
"client_name": "Klient {{id}}",
"client_global_settings": "Använda globala inställningar", "client_global_settings": "Använda globala inställningar",
"client_deleted": "Klient \"{{key}}\" har raderats", "client_deleted": "Klient \"{{key}}\" har raderats",
"client_added": "Klient \"{{key}}\" har lagts till", "client_added": "Klient \"{{key}}\" har lagts till",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Üst sunucular başarıyla kaydedildi", "updated_upstream_dns_toast": "Üst sunucular başarıyla kaydedildi",
"dns_test_ok_toast": "Belirtilen DNS sunucuları düzgün çalışıyor", "dns_test_ok_toast": "Belirtilen DNS sunucuları düzgün çalışıyor",
"dns_test_not_ok_toast": "Sunucu \"{{key}}\": kullanılamıyor, lütfen doğru yazdığınızdan emin olun", "dns_test_not_ok_toast": "Sunucu \"{{key}}\": kullanılamıyor, lütfen doğru yazdığınızdan emin olun",
"dns_test_parsing_error_toast": "{{section}} bölümü: {{line}}. satır: kullanılamadı, lütfen doğru yazdığınızı kontrol edin",
"dns_test_warning_toast": "Üst kaynak \"{{key}}\", test isteklerine yanıt vermiyor ve düzgün çalışmayabilir", "dns_test_warning_toast": "Üst kaynak \"{{key}}\", test isteklerine yanıt vermiyor ve düzgün çalışmayabilir",
"unblock": "Engeli kaldır", "unblock": "Engeli kaldır",
"block": "Engelle", "block": "Engelle",
@ -243,6 +244,7 @@
"allow_this_client": "Bu istemciye izin ver", "allow_this_client": "Bu istemciye izin ver",
"block_for_this_client_only": "Yalnızca bu istemci için engelle", "block_for_this_client_only": "Yalnızca bu istemci için engelle",
"unblock_for_this_client_only": "Yalnızca bu istemci için engellemeyi kaldır", "unblock_for_this_client_only": "Yalnızca bu istemci için engellemeyi kaldır",
"add_persistent_client": "Kalıcı istemci olarak ekle",
"time_table_header": "Saat", "time_table_header": "Saat",
"date": "Tarih", "date": "Tarih",
"domain_name_table_header": "Alan adı", "domain_name_table_header": "Alan adı",
@ -465,6 +467,7 @@
"form_add_id": "Tanımlayıcı ekle", "form_add_id": "Tanımlayıcı ekle",
"form_client_name": "İstemci ismi girin", "form_client_name": "İstemci ismi girin",
"name": "Adı", "name": "Adı",
"client_name": "İstemci {{id}}",
"client_global_settings": "Genel ayarları kullan", "client_global_settings": "Genel ayarları kullan",
"client_deleted": "\"{{key}}\" istemcisi başarıyla silindi", "client_deleted": "\"{{key}}\" istemcisi başarıyla silindi",
"client_added": "\"{{key}}\" istemcisi başarıyla eklendi", "client_added": "\"{{key}}\" istemcisi başarıyla eklendi",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "DNS-сервери успішно збережено", "updated_upstream_dns_toast": "DNS-сервери успішно збережено",
"dns_test_ok_toast": "Вказані DNS сервери працюють правильно", "dns_test_ok_toast": "Вказані DNS сервери працюють правильно",
"dns_test_not_ok_toast": "Сервер «{{key}}»: неможливо використати. Перевірте правильність введення", "dns_test_not_ok_toast": "Сервер «{{key}}»: неможливо використати. Перевірте правильність введення",
"dns_test_parsing_error_toast": "Розділ {{section}}: рядок {{line}}: неможливо використати. Перевірте правильність введення",
"dns_test_warning_toast": "Upstream «{{key}}» не відповідає на тестові запити та може працювати не правильно", "dns_test_warning_toast": "Upstream «{{key}}» не відповідає на тестові запити та може працювати не правильно",
"unblock": "Дозволити", "unblock": "Дозволити",
"block": "Заборонити", "block": "Заборонити",
@ -243,6 +244,7 @@
"allow_this_client": "Дозволити цей клієнт", "allow_this_client": "Дозволити цей клієнт",
"block_for_this_client_only": "Заборонити тільки цей клієнт", "block_for_this_client_only": "Заборонити тільки цей клієнт",
"unblock_for_this_client_only": "Дозволити тільки цей клієнт", "unblock_for_this_client_only": "Дозволити тільки цей клієнт",
"add_persistent_client": "Додати в збережені клієнти",
"time_table_header": "Час", "time_table_header": "Час",
"date": "Дата", "date": "Дата",
"domain_name_table_header": "Назва домену", "domain_name_table_header": "Назва домену",
@ -465,6 +467,7 @@
"form_add_id": "Додати ідентифікатор", "form_add_id": "Додати ідентифікатор",
"form_client_name": "Введіть ім'я клієнта", "form_client_name": "Введіть ім'я клієнта",
"name": "Ім'я", "name": "Ім'я",
"client_name": "Клієнт {{id}}",
"client_global_settings": "Використати загальні налаштування", "client_global_settings": "Використати загальні налаштування",
"client_deleted": "Клієнта «{{key}}» успішно видалено", "client_deleted": "Клієнта «{{key}}» успішно видалено",
"client_added": "Клієнта «{{key}}» успішно додано", "client_added": "Клієнта «{{key}}» успішно додано",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "Các máy chủ thượng nguồn đã được lưu thành công", "updated_upstream_dns_toast": "Các máy chủ thượng nguồn đã được lưu thành công",
"dns_test_ok_toast": "Máy chủ DNS có thể sử dụng", "dns_test_ok_toast": "Máy chủ DNS có thể sử dụng",
"dns_test_not_ok_toast": "Máy chủ \"{{key}}\"': không thể sử dụng, vui lòng kiểm tra lại", "dns_test_not_ok_toast": "Máy chủ \"{{key}}\"': không thể sử dụng, vui lòng kiểm tra lại",
"dns_test_parsing_error_toast": "Phần {{section}}: dòng {{line}}: không thể sử dụng được, vui lòng kiểm tra xem bạn đã viết đúng chưa",
"dns_test_warning_toast": "Ngược lại \"{{key}}\" không phản hồi các yêu cầu kiểm tra và có thể không hoạt động bình thường", "dns_test_warning_toast": "Ngược lại \"{{key}}\" không phản hồi các yêu cầu kiểm tra và có thể không hoạt động bình thường",
"unblock": "Bỏ chặn", "unblock": "Bỏ chặn",
"block": "Chặn", "block": "Chặn",
@ -243,6 +244,7 @@
"allow_this_client": "Cho phép ứng dụng khách này", "allow_this_client": "Cho phép ứng dụng khách này",
"block_for_this_client_only": "Chỉ chặn ứng dụng khách này", "block_for_this_client_only": "Chỉ chặn ứng dụng khách này",
"unblock_for_this_client_only": "Chỉ hủy chặn ứng dụng khách này", "unblock_for_this_client_only": "Chỉ hủy chặn ứng dụng khách này",
"add_persistent_client": "Thêm làm ứng dụng khách liên tục",
"time_table_header": "Thời gian", "time_table_header": "Thời gian",
"date": "Ngày", "date": "Ngày",
"domain_name_table_header": "Tên miền", "domain_name_table_header": "Tên miền",
@ -462,6 +464,7 @@
"form_add_id": "Thêm định danh", "form_add_id": "Thêm định danh",
"form_client_name": "Nhập tên máy khách", "form_client_name": "Nhập tên máy khách",
"name": "Tên", "name": "Tên",
"client_name": "Khách hàng {{id}}",
"client_global_settings": "Sử dụng cài đặt toàn cầu", "client_global_settings": "Sử dụng cài đặt toàn cầu",
"client_deleted": "Máy khách \"{{key}}\" đã xóa thành công", "client_deleted": "Máy khách \"{{key}}\" đã xóa thành công",
"client_added": "Máy khách \"{{key}}\" đã thêm thành công", "client_added": "Máy khách \"{{key}}\" đã thêm thành công",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "上游服务器保存成功", "updated_upstream_dns_toast": "上游服务器保存成功",
"dns_test_ok_toast": "指定的 DNS 服务器现已正常运行", "dns_test_ok_toast": "指定的 DNS 服务器现已正常运行",
"dns_test_not_ok_toast": "服务器 \"{{key}}\":无法使用,请检查你输入的是否正确", "dns_test_not_ok_toast": "服务器 \"{{key}}\":无法使用,请检查你输入的是否正确",
"dns_test_parsing_error_toast": "第 {{section}} 节:第 {{line}} 行:无法使用,请检查您输入的是否正确",
"dns_test_warning_toast": "上游 “{{key}}” 不响应测试请求,可能无法正常工作", "dns_test_warning_toast": "上游 “{{key}}” 不响应测试请求,可能无法正常工作",
"unblock": "放行", "unblock": "放行",
"block": "拦截", "block": "拦截",
@ -243,6 +244,7 @@
"allow_this_client": "允许这个客户端", "allow_this_client": "允许这个客户端",
"block_for_this_client_only": "仅对此客户端拦截", "block_for_this_client_only": "仅对此客户端拦截",
"unblock_for_this_client_only": "仅解除对此客户端的拦截", "unblock_for_this_client_only": "仅解除对此客户端的拦截",
"add_persistent_client": "添加为持久客户端",
"time_table_header": "时间", "time_table_header": "时间",
"date": "日期", "date": "日期",
"domain_name_table_header": "域名", "domain_name_table_header": "域名",
@ -465,6 +467,7 @@
"form_add_id": "添加标识符", "form_add_id": "添加标识符",
"form_client_name": "输入客户端名称", "form_client_name": "输入客户端名称",
"name": "名称", "name": "名称",
"client_name": "客户端 {{id}}",
"client_global_settings": "使用全局设置", "client_global_settings": "使用全局设置",
"client_deleted": "客户端 \"{{key}}\" 删除成功", "client_deleted": "客户端 \"{{key}}\" 删除成功",
"client_added": "客户端 \"{{key}}\" 添加成功", "client_added": "客户端 \"{{key}}\" 添加成功",

View file

@ -236,6 +236,7 @@
"updated_upstream_dns_toast": "上游的伺服器被成功地儲存", "updated_upstream_dns_toast": "上游的伺服器被成功地儲存",
"dns_test_ok_toast": "已明確指定的 DNS 伺服器正在正確地運作", "dns_test_ok_toast": "已明確指定的 DNS 伺服器正在正確地運作",
"dns_test_not_ok_toast": "伺服器 \"{{key}}\":無法被使用,請檢查您已正確地填寫它", "dns_test_not_ok_toast": "伺服器 \"{{key}}\":無法被使用,請檢查您已正確地填寫它",
"dns_test_parsing_error_toast": "第 {{section}} 節:第 {{line}} 行:無法使用,請檢查您輸入的是否正確",
"dns_test_warning_toast": "上游 “{{key}}” 不回應測試請求,可能無法正常工作", "dns_test_warning_toast": "上游 “{{key}}” 不回應測試請求,可能無法正常工作",
"unblock": "解除封鎖", "unblock": "解除封鎖",
"block": "封鎖", "block": "封鎖",
@ -243,6 +244,7 @@
"allow_this_client": "允許此用戶端", "allow_this_client": "允許此用戶端",
"block_for_this_client_only": "僅對此用戶端封鎖", "block_for_this_client_only": "僅對此用戶端封鎖",
"unblock_for_this_client_only": "僅對此用戶端解除封鎖", "unblock_for_this_client_only": "僅對此用戶端解除封鎖",
"add_persistent_client": "新增為永久性客戶端",
"time_table_header": "時間", "time_table_header": "時間",
"date": "日期", "date": "日期",
"domain_name_table_header": "域名", "domain_name_table_header": "域名",
@ -465,6 +467,7 @@
"form_add_id": "新增識別碼", "form_add_id": "新增識別碼",
"form_client_name": "輸入用戶端名稱", "form_client_name": "輸入用戶端名稱",
"name": "名稱", "name": "名稱",
"client_name": "用戶端 {{id}}",
"client_global_settings": "使用全域的設定", "client_global_settings": "使用全域的設定",
"client_deleted": "用戶端 \"{{key}}\" 被成功地刪除", "client_deleted": "用戶端 \"{{key}}\" 被成功地刪除",
"client_added": "用戶端 \"{{key}}\" 被成功地加入", "client_added": "用戶端 \"{{key}}\" 被成功地加入",

View file

@ -403,6 +403,11 @@ export const testUpstream = (
const message = upstreamResponse[key]; const message = upstreamResponse[key];
if (message.startsWith('WARNING:')) { if (message.startsWith('WARNING:')) {
dispatch(addErrorToast({ error: i18next.t('dns_test_warning_toast', { key }) })); dispatch(addErrorToast({ error: i18next.t('dns_test_warning_toast', { key }) }));
} else if (message.endsWith(': parsing error')) {
const info = message.substring(0, message.indexOf(':'));
const [sectionKey, line] = info.split(' ');
const section = i18next.t(sectionKey);
dispatch(addErrorToast({ error: i18next.t('dns_test_parsing_error_toast', { section, line }) }));
} else if (message !== 'OK') { } else if (message !== 'OK') {
dispatch(addErrorToast({ error: i18next.t('dns_test_not_ok_toast', { key }) })); dispatch(addErrorToast({ error: i18next.t('dns_test_not_ok_toast', { key }) }));
} }

View file

@ -13,6 +13,8 @@ ReactModal.setAppElement('#root');
const MODAL_TYPE_TO_TITLE_TYPE_MAP = { const MODAL_TYPE_TO_TITLE_TYPE_MAP = {
[MODAL_TYPE.EDIT_FILTERS]: 'edit', [MODAL_TYPE.EDIT_FILTERS]: 'edit',
[MODAL_TYPE.ADD_FILTERS]: 'new', [MODAL_TYPE.ADD_FILTERS]: 'new',
[MODAL_TYPE.EDIT_CLIENT]: 'edit',
[MODAL_TYPE.ADD_CLIENT]: 'new',
[MODAL_TYPE.SELECT_MODAL_TYPE]: 'new', [MODAL_TYPE.SELECT_MODAL_TYPE]: 'new',
[MODAL_TYPE.CHOOSE_FILTERING_LIST]: 'choose', [MODAL_TYPE.CHOOSE_FILTERING_LIST]: 'choose',
}; };

View file

@ -3,7 +3,7 @@ import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import { nanoid } from 'nanoid'; import { nanoid } from 'nanoid';
import classNames from 'classnames'; import classNames from 'classnames';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom'; import { Link, useHistory } from 'react-router-dom';
import propTypes from 'prop-types'; import propTypes from 'prop-types';
import { checkFiltered, getBlockingClientName } from '../../../helpers/helpers'; import { checkFiltered, getBlockingClientName } from '../../../helpers/helpers';
@ -25,12 +25,14 @@ const ClientCell = ({
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const dispatch = useDispatch(); const dispatch = useDispatch();
const history = useHistory();
const autoClients = useSelector((state) => state.dashboard.autoClients, shallowEqual); const autoClients = useSelector((state) => state.dashboard.autoClients, shallowEqual);
const isDetailed = useSelector((state) => state.queryLogs.isDetailed); const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
const allowedСlients = useSelector((state) => state.access.allowed_clients, shallowEqual); const allowedСlients = useSelector((state) => state.access.allowed_clients, shallowEqual);
const [isOptionsOpened, setOptionsOpened] = useState(false); const [isOptionsOpened, setOptionsOpened] = useState(false);
const autoClient = autoClients.find((autoClient) => autoClient.name === client); const autoClient = autoClients.find((autoClient) => autoClient.name === client);
const clients = useSelector((state) => state.dashboard.clients);
const source = autoClient?.source; const source = autoClient?.source;
const whoisAvailable = client_info && Object.keys(client_info.whois).length > 0; const whoisAvailable = client_info && Object.keys(client_info.whois).length > 0;
const clientName = client_info?.name || client_id; const clientName = client_info?.name || client_id;
@ -55,6 +57,8 @@ const ClientCell = ({
const isFiltered = checkFiltered(reason); const isFiltered = checkFiltered(reason);
const clientIds = clients.map((c) => c.ids).flat();
const nameClass = classNames('w-90 o-hidden d-flex flex-column', { const nameClass = classNames('w-90 o-hidden d-flex flex-column', {
'mt-2': isDetailed && !client_info?.name && !whoisAvailable, 'mt-2': isDetailed && !client_info?.name && !whoisAvailable,
'white-space--nowrap': isDetailed, 'white-space--nowrap': isDetailed,
@ -66,7 +70,6 @@ const ClientCell = ({
const renderBlockingButton = (isFiltered, domain) => { const renderBlockingButton = (isFiltered, domain) => {
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK; const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const clients = useSelector((state) => state.dashboard.clients);
const { const {
confirmMessage, confirmMessage,
@ -118,6 +121,15 @@ const ClientCell = ({
}, },
]; ];
if (!clientIds.includes(client)) {
BUTTON_OPTIONS.push({
name: 'add_persistent_client',
onClick: () => {
history.push(`/#clients?clientId=${client}`);
},
});
}
const getOptions = (options) => { const getOptions = (options) => {
if (options.length === 0) { if (options.length === 0) {
return null; return null;

View file

@ -4,6 +4,7 @@ import React, { useEffect } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Trans, useTranslation } from 'react-i18next'; import { Trans, useTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { useHistory, useLocation } from 'react-router-dom';
import ReactTable from 'react-table'; import ReactTable from 'react-table';
import { getAllBlockedServices, getBlockedServices } from '../../../../actions/services'; import { getAllBlockedServices, getBlockedServices } from '../../../../actions/services';
@ -39,8 +40,12 @@ const ClientsTable = ({
}) => { }) => {
const [t] = useTranslation(); const [t] = useTranslation();
const dispatch = useDispatch(); const dispatch = useDispatch();
const location = useLocation();
const history = useHistory();
const services = useSelector((store) => store?.services); const services = useSelector((store) => store?.services);
const globalSettings = useSelector((store) => store?.settings.settingsList) || {}; const globalSettings = useSelector((store) => store?.settings.settingsList) || {};
const params = new URLSearchParams(location.search);
const clientId = params.get('clientId');
const { safesearch } = globalSettings; const { safesearch } = globalSettings;
@ -48,6 +53,12 @@ const ClientsTable = ({
dispatch(getAllBlockedServices()); dispatch(getAllBlockedServices());
dispatch(getBlockedServices()); dispatch(getBlockedServices());
dispatch(initSettings()); dispatch(initSettings());
if (clientId) {
toggleClientModal({
type: MODAL_TYPE.ADD_CLIENT,
});
}
}, []); }, []);
const handleFormAdd = (values) => { const handleFormAdd = (values) => {
@ -85,11 +96,15 @@ const ClientsTable = ({
} }
} }
if (modalType === MODAL_TYPE.EDIT_FILTERS) { if (modalType === MODAL_TYPE.EDIT_CLIENT) {
handleFormUpdate(config, modalClientName); handleFormUpdate(config, modalClientName);
} else { } else {
handleFormAdd(config); handleFormAdd(config);
} }
if (clientId) {
history.push('/#clients');
}
}; };
const getOptionsWithLabels = (options) => ( const getOptionsWithLabels = (options) => (
@ -133,6 +148,14 @@ const ClientsTable = ({
} }
}; };
const handleClose = () => {
toggleClientModal();
if (clientId) {
history.push('/#clients');
}
};
const columns = [ const columns = [
{ {
Header: t('table_client'), Header: t('table_client'),
@ -298,7 +321,7 @@ const ClientsTable = ({
type="button" type="button"
className="btn btn-icon btn-outline-primary btn-sm mr-2" className="btn btn-icon btn-outline-primary btn-sm mr-2"
onClick={() => toggleClientModal({ onClick={() => toggleClientModal({
type: MODAL_TYPE.EDIT_FILTERS, type: MODAL_TYPE.EDIT_CLIENT,
name: clientName, name: clientName,
}) })
} }
@ -371,12 +394,13 @@ const ClientsTable = ({
<Modal <Modal
isModalOpen={isModalOpen} isModalOpen={isModalOpen}
modalType={modalType} modalType={modalType}
toggleClientModal={toggleClientModal} handleClose={handleClose}
currentClientData={currentClientData} currentClientData={currentClientData}
handleSubmit={handleSubmit} handleSubmit={handleSubmit}
processingAdding={processingAdding} processingAdding={processingAdding}
processingUpdating={processingUpdating} processingUpdating={processingUpdating}
tagsOptions={tagsOptions} tagsOptions={tagsOptions}
clientId={clientId}
/> />
</> </>
</Card> </Card>

View file

@ -147,7 +147,7 @@ let Form = (props) => {
useGlobalSettings, useGlobalSettings,
useGlobalServices, useGlobalServices,
blockedServicesSchedule, blockedServicesSchedule,
toggleClientModal, handleClose,
processingAdding, processingAdding,
processingUpdating, processingUpdating,
invalid, invalid,
@ -427,7 +427,7 @@ let Form = (props) => {
disabled={submitting} disabled={submitting}
onClick={() => { onClick={() => {
reset(); reset();
toggleClientModal(); handleClose();
}} }}
> >
<Trans>cancel_btn</Trans> <Trans>cancel_btn</Trans>
@ -456,7 +456,7 @@ Form.propTypes = {
reset: PropTypes.func.isRequired, reset: PropTypes.func.isRequired,
change: PropTypes.func.isRequired, change: PropTypes.func.isRequired,
submitting: PropTypes.bool.isRequired, submitting: PropTypes.bool.isRequired,
toggleClientModal: PropTypes.func.isRequired, handleClose: PropTypes.func.isRequired,
useGlobalSettings: PropTypes.bool, useGlobalSettings: PropTypes.bool,
useGlobalServices: PropTypes.bool, useGlobalServices: PropTypes.bool,
blockedServicesSchedule: PropTypes.object, blockedServicesSchedule: PropTypes.object,

View file

@ -6,7 +6,9 @@ import ReactModal from 'react-modal';
import { MODAL_TYPE } from '../../../helpers/constants'; import { MODAL_TYPE } from '../../../helpers/constants';
import Form from './Form'; import Form from './Form';
const getInitialData = (initial) => { const getInitialData = ({
initial, modalType, clientId, clientName,
}) => {
if (initial && initial.blocked_services) { if (initial && initial.blocked_services) {
const { blocked_services } = initial; const { blocked_services } = initial;
const blocked = {}; const blocked = {};
@ -21,46 +23,60 @@ const getInitialData = (initial) => {
}; };
} }
if (modalType !== MODAL_TYPE.EDIT_CLIENT && clientId) {
return {
...initial,
name: clientName,
ids: [clientId],
};
}
return initial; return initial;
}; };
const Modal = (props) => { const Modal = ({
const {
isModalOpen, isModalOpen,
modalType, modalType,
currentClientData, currentClientData,
handleSubmit, handleSubmit,
toggleClientModal, handleClose,
processingAdding, processingAdding,
processingUpdating, processingUpdating,
tagsOptions, tagsOptions,
} = props; clientId,
const initialData = getInitialData(currentClientData); t,
}) => {
const initialData = getInitialData({
initial: currentClientData,
modalType,
clientId,
clientName: t('client_name', { id: clientId }),
});
return ( return (
<ReactModal <ReactModal
className="Modal__Bootstrap modal-dialog modal-dialog-centered modal-dialog--clients" className="Modal__Bootstrap modal-dialog modal-dialog-centered modal-dialog--clients"
closeTimeoutMS={0} closeTimeoutMS={0}
isOpen={isModalOpen} isOpen={isModalOpen}
onRequestClose={() => toggleClientModal()} onRequestClose={handleClose}
> >
<div className="modal-content"> <div className="modal-content">
<div className="modal-header"> <div className="modal-header">
<h4 className="modal-title"> <h4 className="modal-title">
{modalType === MODAL_TYPE.EDIT_FILTERS ? ( {modalType === MODAL_TYPE.EDIT_CLIENT ? (
<Trans>client_edit</Trans> <Trans>client_edit</Trans>
) : ( ) : (
<Trans>client_new</Trans> <Trans>client_new</Trans>
)} )}
</h4> </h4>
<button type="button" className="close" onClick={() => toggleClientModal()}> <button type="button" className="close" onClick={handleClose}>
<span className="sr-only">Close</span> <span className="sr-only">Close</span>
</button> </button>
</div> </div>
<Form <Form
initialValues={{ ...initialData }} initialValues={{ ...initialData }}
onSubmit={handleSubmit} onSubmit={handleSubmit}
toggleClientModal={toggleClientModal} handleClose={handleClose}
processingAdding={processingAdding} processingAdding={processingAdding}
processingUpdating={processingUpdating} processingUpdating={processingUpdating}
tagsOptions={tagsOptions} tagsOptions={tagsOptions}
@ -75,10 +91,12 @@ Modal.propTypes = {
modalType: PropTypes.string.isRequired, modalType: PropTypes.string.isRequired,
currentClientData: PropTypes.object.isRequired, currentClientData: PropTypes.object.isRequired,
handleSubmit: PropTypes.func.isRequired, handleSubmit: PropTypes.func.isRequired,
toggleClientModal: PropTypes.func.isRequired, handleClose: PropTypes.func.isRequired,
processingAdding: PropTypes.bool.isRequired, processingAdding: PropTypes.bool.isRequired,
processingUpdating: PropTypes.bool.isRequired, processingUpdating: PropTypes.bool.isRequired,
tagsOptions: PropTypes.array.isRequired, tagsOptions: PropTypes.array.isRequired,
t: PropTypes.func.isRequired,
clientId: PropTypes.string,
}; };
export default withTranslation()(Modal); export default withTranslation()(Modal);

View file

@ -62,7 +62,7 @@ class LogsConfig extends Component {
interval, interval,
customInterval, customInterval,
anonymize_client_ip, anonymize_client_ip,
ignored: ignored.join('\n'), ignored: ignored?.join('\n'),
}} }}
onSubmit={this.handleFormSubmit} onSubmit={this.handleFormSubmit}
processing={processing} processing={processing}

View file

@ -182,6 +182,8 @@ export const MODAL_TYPE = {
EDIT_REWRITE: 'EDIT_REWRITE', EDIT_REWRITE: 'EDIT_REWRITE',
EDIT_LEASE: 'EDIT_LEASE', EDIT_LEASE: 'EDIT_LEASE',
ADD_LEASE: 'ADD_LEASE', ADD_LEASE: 'ADD_LEASE',
ADD_CLIENT: 'ADD_CLIENT',
EDIT_CLIENT: 'EDIT_CLIENT',
}; };
export const CLIENT_ID = { export const CLIENT_ID = {

View file

@ -209,7 +209,7 @@ export default {
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_47.txt" "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_47.txt"
}, },
"hagezi_multinormal": { "hagezi_multinormal": {
"name": "HaGeZi Multi NORMAL", "name": "HaGeZi's Normal Blocklist",
"categoryId": "general", "categoryId": "general",
"homepage": "https://github.com/hagezi/dns-blocklists", "homepage": "https://github.com/hagezi/dns-blocklists",
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_34.txt" "source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_34.txt"

View file

@ -1,5 +1,5 @@
{ {
"timeUpdated": "2024-01-22T00:10:10.554Z", "timeUpdated": "2024-03-01T00:10:14.031Z",
"categories": { "categories": {
"0": "audio_video_player", "0": "audio_video_player",
"1": "comments", "1": "comments",
@ -2732,6 +2732,13 @@
"url": "https://www.microsoft.com/", "url": "https://www.microsoft.com/",
"companyId": "microsoft" "companyId": "microsoft"
}, },
"assemblyexchange": {
"name": "Assembly Exchange",
"categoryId": 4,
"url": "https://www.medialab.la/",
"companyId": "medialab",
"source": "AdGuard"
},
"astronomer": { "astronomer": {
"name": "Astronomer", "name": "Astronomer",
"categoryId": 6, "categoryId": 6,
@ -20831,6 +20838,7 @@
"asambeauty.com": "asambeauty.com", "asambeauty.com": "asambeauty.com",
"ask.com": "ask.com", "ask.com": "ask.com",
"aspnetcdn.com": "aspnetcdn", "aspnetcdn.com": "aspnetcdn",
"ads.assemblyexchange.com": "assemblyexchange",
"cdn.astronomer.io": "astronomer", "cdn.astronomer.io": "astronomer",
"ati-host.net": "at_internet", "ati-host.net": "at_internet",
"aticdn.net": "at_internet", "aticdn.net": "at_internet",

32
go.mod
View file

@ -1,11 +1,11 @@
module github.com/AdguardTeam/AdGuardHome module github.com/AdguardTeam/AdGuardHome
go 1.20 go 1.21.8
require ( require (
github.com/AdguardTeam/dnsproxy v0.63.1 github.com/AdguardTeam/dnsproxy v0.65.2
github.com/AdguardTeam/golibs v0.19.0 github.com/AdguardTeam/golibs v0.20.1
github.com/AdguardTeam/urlfilter v0.17.3 github.com/AdguardTeam/urlfilter v0.18.0
github.com/NYTimes/gziphandler v1.1.1 github.com/NYTimes/gziphandler v1.1.1
github.com/ameshkov/dnscrypt/v2 v2.2.7 github.com/ameshkov/dnscrypt/v2 v2.2.7
github.com/bluele/gcache v0.0.2 github.com/bluele/gcache v0.0.2
@ -17,8 +17,8 @@ require (
github.com/google/go-cmp v0.6.0 github.com/google/go-cmp v0.6.0
github.com/google/gopacket v1.1.19 github.com/google/gopacket v1.1.19
github.com/google/renameio/v2 v2.0.0 github.com/google/renameio/v2 v2.0.0
github.com/google/uuid v1.5.0 github.com/google/uuid v1.6.0
github.com/insomniacslk/dhcp v0.0.0-20231206064809-8c70d406f6d2 github.com/insomniacslk/dhcp v0.0.0-20240204152450-ca2dc33955c1
github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86
github.com/kardianos/service v1.2.2 github.com/kardianos/service v1.2.2
github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118
@ -28,14 +28,14 @@ require (
// own code for that. Perhaps, use gopacket. // own code for that. Perhaps, use gopacket.
github.com/mdlayher/raw v0.1.0 github.com/mdlayher/raw v0.1.0
github.com/miekg/dns v1.1.58 github.com/miekg/dns v1.1.58
github.com/quic-go/quic-go v0.40.1 github.com/quic-go/quic-go v0.41.0
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
github.com/ti-mo/netfilter v0.5.1 github.com/ti-mo/netfilter v0.5.1
go.etcd.io/bbolt v1.3.8 go.etcd.io/bbolt v1.3.8
golang.org/x/crypto v0.18.0 golang.org/x/crypto v0.19.0
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3
golang.org/x/net v0.20.0 golang.org/x/net v0.21.0
golang.org/x/sys v0.16.0 golang.org/x/sys v0.17.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
howett.net/plist v1.0.1 howett.net/plist v1.0.1
@ -48,8 +48,7 @@ require (
github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0 // indirect github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/google/pprof v0.0.0-20240117000934-35fc243c5815 // indirect github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 // indirect
// TODO(a.garipov): Upgrade to v0.5.0 once we switch to Go 1.21+.
github.com/mdlayher/socket v0.5.0 // indirect github.com/mdlayher/socket v0.5.0 // indirect
github.com/onsi/ginkgo/v2 v2.15.0 // indirect github.com/onsi/ginkgo/v2 v2.15.0 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
@ -57,12 +56,11 @@ require (
github.com/pkg/errors v0.9.1 // indirect github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/qpack v0.4.0 // indirect
github.com/quic-go/qtls-go1-20 v0.4.1 // indirect github.com/u-root/uio v0.0.0-20240207234124-abbebccef0fd // indirect
github.com/u-root/uio v0.0.0-20240118234441-a3c409a6018e // indirect
go.uber.org/mock v0.4.0 // indirect go.uber.org/mock v0.4.0 // indirect
golang.org/x/mod v0.14.0 // indirect golang.org/x/mod v0.15.0 // indirect
golang.org/x/sync v0.6.0 // indirect golang.org/x/sync v0.6.0 // indirect
golang.org/x/text v0.14.0 // indirect golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.17.0 // indirect golang.org/x/tools v0.18.0 // indirect
gonum.org/v1/gonum v0.14.0 // indirect gonum.org/v1/gonum v0.14.0 // indirect
) )

78
go.sum
View file

@ -1,9 +1,9 @@
github.com/AdguardTeam/dnsproxy v0.63.1 h1:CilxSuLYcuYpbPCGB7w41UUqWRMu3dvj4c9TvkIrpBg= github.com/AdguardTeam/dnsproxy v0.65.2 h1:D+BMw0Vu2lbQrYpoPctG2Xr+24KdfhgkzZb6QgPZheM=
github.com/AdguardTeam/dnsproxy v0.63.1/go.mod h1:dRRAFOjrq4QYM92jGs4lt4BoY0Dm3EY3HkaleoM2Feo= github.com/AdguardTeam/dnsproxy v0.65.2/go.mod h1:8NQTTNZY+qR9O1Fzgz3WQv30knfSgms68SRlzSnX74A=
github.com/AdguardTeam/golibs v0.19.0 h1:y/x+Xn3pDg1ZfQ+QEZapPJqaeVYUIMp/EODMtVhn7PM= github.com/AdguardTeam/golibs v0.20.1 h1:ol8qLjWGZhU9paMMwN+OLWVTUigGsXa29iVTyd62VKY=
github.com/AdguardTeam/golibs v0.19.0/go.mod h1:3WunclLLfrVAq7fYQRhd6f168FHOEMssnipVXCxDL/w= github.com/AdguardTeam/golibs v0.20.1/go.mod h1:bgcMgRviCKyU6mkrX+RtT/OsKPFzyppelfRsksMG3KU=
github.com/AdguardTeam/urlfilter v0.17.3 h1:fg/ObbnO0Cv6aw0tW6N/ETDMhhNvmcUUOZ7HlmKC3rw= github.com/AdguardTeam/urlfilter v0.18.0 h1:ZZzwODC/ADpjJSODxySrrUnt/fvOCfGFaCW6j+wsGfQ=
github.com/AdguardTeam/urlfilter v0.17.3/go.mod h1:Jru7jFfeH2CoDf150uDs+rRYcZBzHHBz05r9REyDKyE= github.com/AdguardTeam/urlfilter v0.18.0/go.mod h1:IXxBwedLiZA2viyHkaFxY/8mjub0li2PXRg8a3d9Z1s=
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
@ -30,12 +30,15 @@ github.com/dimfeld/httptreemux/v5 v5.5.0/go.mod h1:QeEylH57C0v3VO0tkKraVz9oD3Uu9
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw= github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw=
github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk= github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
@ -43,25 +46,27 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
github.com/google/pprof v0.0.0-20240117000934-35fc243c5815 h1:WzfWbQz/Ze8v6l++GGbGNFZnUShVpP/0xffCPLL+ax8= github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 h1:E/LAvt58di64hlYjx7AsNS6C/ysHWYo+2qPCZKTQhRo=
github.com/google/pprof v0.0.0-20240117000934-35fc243c5815/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg=
github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4=
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8CrSJVmaolDVOxTfS9kc36uB6H40kdbQq8= github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8CrSJVmaolDVOxTfS9kc36uB6H40kdbQq8=
github.com/insomniacslk/dhcp v0.0.0-20231206064809-8c70d406f6d2 h1:9K06NfxkBh25x56yVhWWlKFE8YpicaSfHwoV8SFbueA= github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714/go.mod h1:2Goc3h8EklBH5mspfHFxBnEoURQCGzQQH1ga9Myjvis=
github.com/insomniacslk/dhcp v0.0.0-20231206064809-8c70d406f6d2/go.mod h1:3A9PQ1cunSDF/1rbTq99Ts4pVnycWg+vlPkfeD2NLFI= github.com/insomniacslk/dhcp v0.0.0-20240204152450-ca2dc33955c1 h1:L3pm9Kf2G6gJVYawz2SrI5QnV1wzHYbqmKnSHHXJAb8=
github.com/insomniacslk/dhcp v0.0.0-20240204152450-ca2dc33955c1/go.mod h1:izxuNQZeFrbx2nK2fAyN5iNUB34Fe9j0nK4PwLzAkKw=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 h1:elKwZS1OcdQ0WwEDBeqxKwb7WB62QX8bvZ/FJnVXIfk= github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 h1:elKwZS1OcdQ0WwEDBeqxKwb7WB62QX8bvZ/FJnVXIfk=
github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86/go.mod h1:aFAMtuldEgx/4q7iSGazk22+IcgvtiC+HIimFO9XlS8= github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86/go.mod h1:aFAMtuldEgx/4q7iSGazk22+IcgvtiC+HIimFO9XlS8=
github.com/kardianos/service v1.2.2 h1:ZvePhAHfvo0A7Mftk/tEzqEZ7Q4lgnR8sGz4xu1YX60= github.com/kardianos/service v1.2.2 h1:ZvePhAHfvo0A7Mftk/tEzqEZ7Q4lgnR8sGz4xu1YX60=
github.com/kardianos/service v1.2.2/go.mod h1:CIMRFEJVL+0DS1a3Nx06NaMn4Dz63Ng6O7dl0qH0zVM= github.com/kardianos/service v1.2.2/go.mod h1:CIMRFEJVL+0DS1a3Nx06NaMn4Dz63Ng6O7dl0qH0zVM=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 h1:2oDp6OOhLxQ9JBoUuysVz9UZ9uI6oLUbvAZu0x8o+vE= github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118 h1:2oDp6OOhLxQ9JBoUuysVz9UZ9uI6oLUbvAZu0x8o+vE=
github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118/go.mod h1:ZFUnHIVchZ9lJoWoEGUg8Q3M4U8aNNWA3CVSUTkW4og= github.com/mdlayher/ethernet v0.0.0-20220221185849-529eae5b6118/go.mod h1:ZFUnHIVchZ9lJoWoEGUg8Q3M4U8aNNWA3CVSUTkW4og=
github.com/mdlayher/netlink v0.0.0-20190313131330-258ea9dff42c/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA= github.com/mdlayher/netlink v0.0.0-20190313131330-258ea9dff42c/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA=
@ -78,12 +83,13 @@ github.com/mdlayher/socket v0.5.0/go.mod h1:WkcBFfvyG8QENs5+hfQPl1X6Jpd2yeLIYgrG
github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4= github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY= github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@ -92,16 +98,18 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs= github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k=
github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA=
github.com/quic-go/quic-go v0.40.1 h1:X3AGzUNFs0jVuO3esAGnTfvdgvL4fq655WaOi1snv1Q=
github.com/quic-go/quic-go v0.40.1/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c=
github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4= github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4=
github.com/shirou/gopsutil/v3 v3.23.7/go.mod h1:c4gnmoRC0hQuaLqvxnx1//VXQ0Ms/X9UnJF8pddY5z4=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
@ -110,32 +118,35 @@ github.com/ti-mo/netfilter v0.2.0/go.mod h1:8GbBGsY/8fxtyIdfwy29JiluNcPK4K7wIT+x
github.com/ti-mo/netfilter v0.5.1 h1:cqamEd1c1zmpfpqvInLOro0Znq/RAfw2QL5wL2rAR/8= github.com/ti-mo/netfilter v0.5.1 h1:cqamEd1c1zmpfpqvInLOro0Znq/RAfw2QL5wL2rAR/8=
github.com/ti-mo/netfilter v0.5.1/go.mod h1:h9UPQ3ZrTZGBitay+LETMxZvNgWGK/efTUcqES2YiLw= github.com/ti-mo/netfilter v0.5.1/go.mod h1:h9UPQ3ZrTZGBitay+LETMxZvNgWGK/efTUcqES2YiLw=
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
github.com/u-root/uio v0.0.0-20240118234441-a3c409a6018e h1:BA9O3BmlTmpjbvajAwzWx4Wo2TRVdpPXZEeemGQcajw= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/u-root/uio v0.0.0-20240118234441-a3c409a6018e/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264= github.com/u-root/uio v0.0.0-20240207234124-abbebccef0fd h1:BQJh5fdHsPa/YuMVrbcSxQKuowGCHYh0GD7hvLaHBK0=
github.com/u-root/uio v0.0.0-20240207234124-abbebccef0fd/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA= golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 h1:/RIbNt/Zr7rVhIkQhooTxCxFcdWLGIKnZA4IXNFSrvo=
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8=
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
@ -149,10 +160,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@ -160,15 +170,17 @@ golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=

View file

@ -17,7 +17,6 @@ import (
"github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/mathutil"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
) )
@ -63,7 +62,7 @@ func RunCommand(command string, arguments ...string) (code int, output []byte, e
cmd := exec.Command(command, arguments...) cmd := exec.Command(command, arguments...)
out, err := cmd.Output() out, err := cmd.Output()
out = out[:mathutil.Min(len(out), MaxCmdOutputSize)] out = out[:min(len(out), MaxCmdOutputSize)]
if err != nil { if err != nil {
if eerr := new(exec.ExitError); errors.As(err, &eerr) { if eerr := new(exec.ExitError); errors.As(err, &eerr) {
@ -142,7 +141,7 @@ func parsePSOutput(r io.Reader, cmdName string, ignore []int) (largest, instNum
} }
instNum++ instNum++
largest = mathutil.Max(largest, cur) largest = max(largest, cur)
} }
if err = s.Err(); err != nil { if err = s.Err(); err != nil {
return 0, 0, fmt.Errorf("scanning stdout: %w", err) return 0, 0, fmt.Errorf("scanning stdout: %w", err)

View file

@ -46,7 +46,7 @@ func (s *Server) processQueryLogsAndStats(dctx *dnsContext) (rc resultCode) {
dns.Class(cl), dns.Class(cl),
dns.Type(qt), dns.Type(qt),
host, host,
ip, ipStr,
) )
} }
@ -58,7 +58,7 @@ func (s *Server) processQueryLogsAndStats(dctx *dnsContext) (rc resultCode) {
dns.Class(cl), dns.Class(cl),
dns.Type(qt), dns.Type(qt),
host, host,
ip, ipStr,
) )
} }

View file

@ -1113,8 +1113,7 @@ func (d *DNSFilter) periodicallyRefreshFilters(ivl time.Duration) (nextIvl time.
ivl = maxInterval ivl = maxInterval
} else if isNetErr { } else if isNetErr {
ivl *= 2 ivl *= 2
// TODO(s.chzhen): Use built-in function max in Go 1.21. ivl = max(ivl, maxInterval)
ivl = mathutil.Max(ivl, maxInterval)
} }
return ivl return ivl

View file

@ -7,7 +7,6 @@ import (
"github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/mathutil"
"github.com/miekg/dns" "github.com/miekg/dns"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
) )
@ -181,7 +180,7 @@ func findRewrites(
if isWildcard(r.Domain) { if isWildcard(r.Domain) {
// Don't use rewrites[:0], because we need to return at least one // Don't use rewrites[:0], because we need to return at least one
// item here. // item here.
rewrites = rewrites[:mathutil.Max(1, i)] rewrites = rewrites[:max(1, i)]
break break
} }

View file

@ -475,6 +475,14 @@ var blockedServices = []blockedService{{
"||bnet.163.com^", "||bnet.163.com^",
"||bnet.cn^", "||bnet.cn^",
}, },
}, {
ID: "bluesky",
Name: "Bluesky",
IconSVG: []byte("<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 -33 568 568\"><path d=\"M123.12 33.66C188.24 82.56 258.28 181.68 284 234.87c25.72-53.19 95.76-152.32 160.88-201.2C491.87-1.62 568-28.92 568 57.94c0 17.34-9.95 145.71-15.78 166.55-20.27 72.46-94.15 90.94-159.87 79.75 114.87 19.55 144.1 84.31 80.98 149.07-119.86 123-172.27-30.86-185.7-70.28-2.46-7.23-3.61-10.6-3.63-7.73-.02-2.88-1.17.5-3.63 7.73-13.43 39.42-65.84 193.27-185.7 70.28-63.11-64.76-33.9-129.52 80.98-149.07-65.72 11.18-139.6-7.3-159.87-79.75C9.95 203.66 0 75.3 0 57.95 0-28.91 76.14-1.61 123.12 33.66Z\"/></svg>"),
Rules: []string{
"||bsky.app^",
"||bsky.social^",
},
}, { }, {
ID: "canais_globo", ID: "canais_globo",
Name: "Canais Globo", Name: "Canais Globo",
@ -1927,6 +1935,14 @@ var blockedServices = []blockedService{{
"||minecraftservices.com^", "||minecraftservices.com^",
"||mojang.com^", "||mojang.com^",
}, },
}, {
ID: "nebula",
Name: "Nebula",
IconSVG: []byte("<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 50.8 50.8\"><path d=\"m20.404 31.36 4.847 14.195 4.6-14.295 14.988-.05-11.97-9.002 4.748-14.344-12.316 9.002-12.416-9.15 4.65 14.492-11.773 9.003Z\"/></svg>"),
Rules: []string{
"||nebula.app^",
"||nebula.tv^",
},
}, { }, {
ID: "netflix", ID: "netflix",
Name: "Netflix", Name: "Netflix",

View file

@ -15,7 +15,6 @@ import (
"github.com/AdguardTeam/AdGuardHome/internal/version" "github.com/AdguardTeam/AdGuardHome/internal/version"
"github.com/AdguardTeam/golibs/httphdr" "github.com/AdguardTeam/golibs/httphdr"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/mathutil"
"github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/netutil"
"github.com/NYTimes/gziphandler" "github.com/NYTimes/gziphandler"
) )
@ -145,7 +144,7 @@ func handleStatus(w http.ResponseWriter, r *http.Request) {
// Make sure that we don't send negative numbers to the frontend, // Make sure that we don't send negative numbers to the frontend,
// since enough time might have passed to make the difference less // since enough time might have passed to make the difference less
// than zero. // than zero.
protectionDisabledDuration = mathutil.Max( protectionDisabledDuration = max(
0, 0,
time.Until(*protectionDisabledUntil).Milliseconds(), time.Until(*protectionDisabledUntil).Milliseconds(),
) )

View file

@ -7,7 +7,6 @@ import (
"github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"github.com/AdguardTeam/golibs/mathutil"
"github.com/bluele/gcache" "github.com/bluele/gcache"
) )
@ -88,8 +87,7 @@ func (r *Default) Process(ip netip.Addr) (host string, changed bool) {
log.Debug("rdns: resolving %q: %s", ip, err) log.Debug("rdns: resolving %q: %s", ip, err)
} }
// TODO(s.chzhen): Use built-in function max in Go 1.21. ttl = max(ttl, r.cacheTTL)
ttl = mathutil.Max(ttl, r.cacheTTL)
item := &cacheItem{ item := &cacheItem{
expiry: time.Now().Add(ttl), expiry: time.Now().Add(ttl),

View file

@ -1,18 +1,18 @@
module github.com/AdguardTeam/AdGuardHome/internal/tools module github.com/AdguardTeam/AdGuardHome/internal/tools
go 1.20 go 1.21.8
require ( require (
github.com/fzipp/gocyclo v0.6.0 github.com/fzipp/gocyclo v0.6.0
github.com/golangci/misspell v0.4.1 github.com/golangci/misspell v0.4.1
github.com/gordonklaus/ineffassign v0.1.0 github.com/gordonklaus/ineffassign v0.1.0
github.com/kisielk/errcheck v1.6.3 github.com/kisielk/errcheck v1.7.0
github.com/kyoh86/looppointer v0.2.1 github.com/kyoh86/looppointer v0.2.1
github.com/securego/gosec/v2 v2.18.2 github.com/securego/gosec/v2 v2.19.0
github.com/uudashr/gocognit v1.1.2 github.com/uudashr/gocognit v1.1.2
golang.org/x/tools v0.17.0 golang.org/x/tools v0.19.0
golang.org/x/vuln v1.0.3 golang.org/x/vuln v1.0.4
honnef.co/go/tools v0.4.6 honnef.co/go/tools v0.4.7
mvdan.cc/gofumpt v0.6.0 mvdan.cc/gofumpt v0.6.0
mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14 mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14
) )
@ -26,9 +26,9 @@ require (
github.com/kyoh86/nolint v0.0.1 // indirect github.com/kyoh86/nolint v0.0.1 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
golang.org/x/exp/typeparams v0.0.0-20240119083558-1b970713d09a // indirect golang.org/x/exp/typeparams v0.0.0-20240222234643-814bf88cf225 // indirect
golang.org/x/mod v0.14.0 // indirect golang.org/x/mod v0.16.0 // indirect
golang.org/x/sync v0.6.0 // indirect golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.16.0 // indirect golang.org/x/sys v0.18.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

View file

@ -3,39 +3,53 @@ github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi
github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg= github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg=
github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo=
github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA=
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/golangci/misspell v0.4.1 h1:+y73iSicVy2PqyX7kmUefHusENlrP9YwuHZHPLGQj/g= github.com/golangci/misspell v0.4.1 h1:+y73iSicVy2PqyX7kmUefHusENlrP9YwuHZHPLGQj/g=
github.com/golangci/misspell v0.4.1/go.mod h1:9mAN1quEo3DlpbaIKKyEvRxK1pwqR9s/Sea1bJCtlNI= github.com/golangci/misspell v0.4.1/go.mod h1:9mAN1quEo3DlpbaIKKyEvRxK1pwqR9s/Sea1bJCtlNI=
github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786 h1:rcv+Ippz6RAtvaGgKxc+8FQIpxHgsF+HBzPyYL2cyVU= github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786 h1:rcv+Ippz6RAtvaGgKxc+8FQIpxHgsF+HBzPyYL2cyVU=
github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786/go.mod h1:apVn/GCasLZUVpAJ6oWAuyP7Ne7CEsQbTnc0plM3m+o=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s= github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s=
github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0=
github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kyoh86/looppointer v0.2.1 h1:Jx9fnkBj/JrIryBLMTYNTj9rvc2SrPS98Dg0w7fxdJg= github.com/kyoh86/looppointer v0.2.1 h1:Jx9fnkBj/JrIryBLMTYNTj9rvc2SrPS98Dg0w7fxdJg=
github.com/kyoh86/looppointer v0.2.1/go.mod h1:q358WcM8cMWU+5vzqukvaZtnJi1kw/MpRHQm3xvTrjw= github.com/kyoh86/looppointer v0.2.1/go.mod h1:q358WcM8cMWU+5vzqukvaZtnJi1kw/MpRHQm3xvTrjw=
github.com/kyoh86/nolint v0.0.1 h1:GjNxDEkVn2wAxKHtP7iNTrRxytRZ1wXxLV5j4XzGfRU= github.com/kyoh86/nolint v0.0.1 h1:GjNxDEkVn2wAxKHtP7iNTrRxytRZ1wXxLV5j4XzGfRU=
github.com/kyoh86/nolint v0.0.1/go.mod h1:1ZiZZ7qqrZ9dZegU96phwVcdQOMKIqRzFJL3ewq9gtI= github.com/kyoh86/nolint v0.0.1/go.mod h1:1ZiZZ7qqrZ9dZegU96phwVcdQOMKIqRzFJL3ewq9gtI=
github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA= github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/securego/gosec/v2 v2.18.2 h1:DkDt3wCiOtAHf1XkiXZBhQ6m6mK/b9T/wD257R3/c+I= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/securego/gosec/v2 v2.18.2/go.mod h1:xUuqSF6i0So56Y2wwohWAmB07EdBkUN6crbLlHwbyJs= github.com/securego/gosec/v2 v2.19.0 h1:gl5xMkOI0/E6Hxx0XCY2XujA3V7SNSefA8sC+3f1gnk=
github.com/securego/gosec/v2 v2.19.0/go.mod h1:hOkDcHz9J/XIgIlPDXalxjeVYsHxoWUc5zJSHxcB8YM=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/uudashr/gocognit v1.1.2 h1:l6BAEKJqQH2UpKAPKdMfZf5kE4W/2xk8pfU1OVLvniI= github.com/uudashr/gocognit v1.1.2 h1:l6BAEKJqQH2UpKAPKdMfZf5kE4W/2xk8pfU1OVLvniI=
github.com/uudashr/gocognit v1.1.2/go.mod h1:aAVdLURqcanke8h3vg35BC++eseDm66Z7KmchI5et4k= github.com/uudashr/gocognit v1.1.2/go.mod h1:aAVdLURqcanke8h3vg35BC++eseDm66Z7KmchI5et4k=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
@ -49,21 +63,21 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/exp/typeparams v0.0.0-20240119083558-1b970713d09a h1:8qmSSA8Gz/1kTrCe0nqR0R3Gb/NDhykzWw2q2mWZydM= golang.org/x/exp/typeparams v0.0.0-20240222234643-814bf88cf225 h1:BzKNaIRXh1bD+1557OcFIHlpYBiVbK4zEyn8zBHi1SE=
golang.org/x/exp/typeparams v0.0.0-20240119083558-1b970713d09a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20240222234643-814bf88cf225/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -79,24 +93,24 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20201007032633-0806396f153e/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201007032633-0806396f153e/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/vuln v1.0.3 h1:k2wzzWGpdntQzNsCOLTabCFk76oTe69BPwad5H52F4w= golang.org/x/vuln v1.0.4 h1:SP0mPeg2PmGCu03V+61EcQiOjmpri2XijexKdzv8Z1I=
golang.org/x/vuln v1.0.3/go.mod h1:NbJdUQhX8jY++FtuhrXs2Eyx0yePo9pF7nPlIjo9aaQ= golang.org/x/vuln v1.0.4/go.mod h1:NbJdUQhX8jY++FtuhrXs2Eyx0yePo9pF7nPlIjo9aaQ=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -104,8 +118,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.4.6 h1:oFEHCKeID7to/3autwsWfnuv69j3NsfcXbvJKuIcep8= honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs=
honnef.co/go/tools v0.4.6/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0=
mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo= mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo=
mvdan.cc/gofumpt v0.6.0/go.mod h1:4L0wf+kgIPZtcCWXynNS2e6bhmj73umwnuXSZarixzA= mvdan.cc/gofumpt v0.6.0/go.mod h1:4L0wf+kgIPZtcCWXynNS2e6bhmj73umwnuXSZarixzA=
mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14 h1:zCr3iRRgdk5eIikZNDphGcM6KGVTx3Yu+/Uu9Es254w= mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14 h1:zCr3iRRgdk5eIikZNDphGcM6KGVTx3Yu+/Uu9Es254w=

View file

@ -87,6 +87,22 @@ Optional environment:
* `VERSION`: release version. Will be set by `version.sh` if it is unset or * `VERSION`: release version. Will be set by `version.sh` if it is unset or
if it has the default `Makefile` value of `v0.0.0`. if it has the default `Makefile` value of `v0.0.0`.
We're using Go's [forward compatibility mechanism][go-toolchain] for updating
the Go version. This means that if your `go` version is 1.21+ but is different
from the one required by AdGuard Home, the `go` tool will automatically download
the required version.
If you want to use the version installed on your builder, run:
```sh
go get go@$YOUR_VERSION
go mod tidy
```
and call `make` with `GOTOOLCHAIN=local`.
[go-toolchain]: https://go.dev/blog/toolchain
### `clean.sh`: Cleanup ### `clean.sh`: Cleanup

View file

@ -9,12 +9,12 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"slices"
"strings" "strings"
"text/template" "text/template"
"time" "time"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"golang.org/x/exp/slices"
) )
func main() { func main() {

View file

@ -6,7 +6,9 @@ set -e -f -u
# Bump this number every time a significant change is made to this # Bump this number every time a significant change is made to this
# script. # script.
# #
# AdGuard-Project-Version: 1 # AdGuard-Project-Version: 2
# TODO(a.garipov): Add pre-merge-commit.
# Only show interactive prompts if there a terminal is attached to # Only show interactive prompts if there a terminal is attached to
# stdout. While this technically doesn't guarantee that reading from # stdout. While this technically doesn't guarantee that reading from

View file

@ -51,12 +51,12 @@ readonly channel
case "$channel" case "$channel"
in in
('development'|'edge'|'beta'|'release') ('development'|'edge'|'beta'|'release'|'candidate')
# All is well, go on. # All is well, go on.
;; ;;
(*) (*)
echo "invalid channel '$channel', supported values are\ echo "invalid channel '$channel', supported values are\
'development', 'edge', 'beta', and 'release'" 1>&2 'development', 'edge', 'beta', 'release', and 'candidate'" 1>&2
exit 1 exit 1
;; ;;
esac esac

View file

@ -30,33 +30,6 @@ set -f -u
# Warnings
go_version="$( "${GO:-go}" version )"
readonly go_version
go_min_version='go1.20.12'
go_version_msg="
warning: your go version (${go_version}) is different from the recommended minimal one (${go_min_version}).
if you have the version installed, please set the GO environment variable.
for example:
export GO='${go_min_version}'
"
readonly go_min_version go_version_msg
case "$go_version"
in
('go version'*"$go_min_version"*)
# Go on.
;;
(*)
echo "$go_version_msg" 1>&2
;;
esac
# Simple analyzers # Simple analyzers
# blocklist_imports is a simple check against unwanted packages. The following # blocklist_imports is a simple check against unwanted packages. The following
@ -74,18 +47,24 @@ esac
# #
# See https://github.com/golang/go/issues/45200. # See https://github.com/golang/go/issues/45200.
# #
# * Package sort is replaced by golang.org/x/exp/slices. # * Package sort is replaced by package slices.
# #
# * Package unsafe is… unsafe. # * Package unsafe is… unsafe.
# #
# * Package golang.org/x/exp/slices has been moved into stdlib.
#
# * Package golang.org/x/net/context has been moved into stdlib. # * Package golang.org/x/net/context has been moved into stdlib.
# #
# Currently, the only standard exception are files generated from protobuf # Currently, the only standard exception are files generated from protobuf
# schemas, which use package reflect. If your project needs more exceptions, # schemas, which use package reflect. If your project needs more exceptions,
# add and document them. # add and document them.
# #
# TODO(a.garipov): Add deprecated packages golang.org/x/exp/maps and # TODO(a.garipov): Add golibs/log.
# golang.org/x/exp/slices once all projects switch to Go 1.21. #
# TODO(a.garipov): Add "golang.org/x/exp/slices" back after a release.
#
# TODO(a.garipov): Add deprecated package golang.org/x/exp/maps once all
# projects switch to Go 1.22.
blocklist_imports() { blocklist_imports() {
git grep\ git grep\
-e '[[:space:]]"errors"$'\ -e '[[:space:]]"errors"$'\
@ -124,12 +103,10 @@ underscores() {
underscore_files="$( underscore_files="$(
git ls-files '*_*.go'\ git ls-files '*_*.go'\
| grep -F\ | grep -F\
-e '_big.go'\
-e '_bsd.go'\ -e '_bsd.go'\
-e '_darwin.go'\ -e '_darwin.go'\
-e '_freebsd.go'\ -e '_freebsd.go'\
-e '_linux.go'\ -e '_linux.go'\
-e '_little.go'\
-e '_next.go'\ -e '_next.go'\
-e '_openbsd.go'\ -e '_openbsd.go'\
-e '_others.go'\ -e '_others.go'\

View file

@ -51,9 +51,9 @@ readonly count_flags cover_flags shuffle_flags timeout_flags
"$go" test\ "$go" test\
"$count_flags"\ "$count_flags"\
"$cover_flags"\ "$cover_flags"\
"$shuffle_flags"\
"$race_flags"\ "$race_flags"\
"$shuffle_flags"\
"$timeout_flags"\ "$timeout_flags"\
"$x_flags"\
"$v_flags"\ "$v_flags"\
"$x_flags"\
./... ./...

View file

@ -30,8 +30,6 @@ set -e -f -u
go="${GO:-go}" go="${GO:-go}"
readonly go readonly go
# TODO(a.garipov): Add goconst?
# Remove only the actual binaries in the bin/ directory, as developers may add # Remove only the actual binaries in the bin/ directory, as developers may add
# their own scripts there. Most commonly, a script named “go” for tools that # their own scripts there. Most commonly, a script named “go” for tools that
# call the go binary and need a particular version. # call the go binary and need a particular version.

View file

@ -0,0 +1,33 @@
#!/bin/sh
# This comment is used to simplify checking local copies of the script. Bump
# this number every time a significant change is made to this script.
#
# AdGuard-Project-Version: 1
verbose="${VERBOSE:-0}"
readonly verbose
if [ "$verbose" -gt '1' ]
then
env
set -x
x_flags='-x=1'
elif [ "$verbose" -gt '0' ]
then
set -x
x_flags='-x=0'
else
set +x
x_flags='-x=0'
fi
readonly x_flags
set -e -f -u
go="${GO:-go}"
readonly go
cd ./internal/tools/
"$go" get -u
"$go" mod tidy

View file

@ -43,7 +43,7 @@ bump_minor='/^v[0-9]+\.[0-9]+\.0$/ {
} }
{ {
printf("invalid release version: \"%s\"\n", $0); printf("invalid minor release version: \"%s\"\n", $0);
exit 1; exit 1;
}' }'
@ -74,8 +74,16 @@ readonly channel
case "$channel" case "$channel"
in in
('development') ('development')
# Use the dummy version for development builds. # commit_number is the number of current commit within the branch.
version='v0.0.0' commit_number="$( git rev-list --count master..HEAD )"
readonly commit_number
# The development builds are described with a combination of unset semantic
# version, the commit's number within the branch, and the commit hash, e.g.:
#
# v0.0.0-dev.5-a1b2c3d4
#
version="v0.0.0-dev.${commit_number}+$( git rev-parse --short HEAD )"
;; ;;
('edge') ('edge')
# last_minor_zero is the last new minor release. # last_minor_zero is the last new minor release.
@ -120,15 +128,40 @@ in
version="$last_tag" version="$last_tag"
;; ;;
('candidate')
# This pseudo-channel is used to set a proper versions into release
# candidate builds.
# last_tag is expected to be the latest release tag.
last_tag="$( git describe --abbrev=0 )"
readonly last_tag
# current_branch is the name of the branch currently checked out.
current_branch="$( git rev-parse --abbrev-ref HEAD )"
readonly current_branch
# The branch should be named like:
#
# rc-v12.34.56
#
if ! echo "$current_branch" | grep -E -e '^rc-v[0-9]+\.[0-9]+\.[0-9]+$' -q
then
echo "invalid release candidate branch name '$current_branch'" 1>&2
exit 1
fi
version="${current_branch#rc-}-rc.$( git rev-list --count "$last_tag"..HEAD )"
;;
(*) (*)
echo "invalid channel '$channel', supported values are\ echo "invalid channel '$channel', supported values are\
'development', 'edge', 'beta', and 'release'" 1>&2 'development', 'edge', 'beta', 'release' and 'candidate'" 1>&2
exit 1 exit 1
;; ;;
esac esac
# Finally, make sure that we don't output invalid versions. # Finally, make sure that we don't output invalid versions.
if ! echo "$version" | grep -E -e '^v[0-9]+\.[0-9]+\.[0-9]+(-[ab]\.[0-9]+)?(\+[[:xdigit:]]+)?$' -q if ! echo "$version" | grep -E -e '^v[0-9]+\.[0-9]+\.[0-9]+(-(a|b|dev|rc)\.[0-9]+)?(\+[[:xdigit:]]+)?$' -q
then then
echo "generated an invalid version '$version'" 1>&2 echo "generated an invalid version '$version'" 1>&2

View file

@ -8,6 +8,7 @@ import (
"net/url" "net/url"
"os" "os"
"path/filepath" "path/filepath"
"slices"
"strings" "strings"
"sync" "sync"
"time" "time"
@ -15,7 +16,6 @@ import (
"github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/ioutil" "github.com/AdguardTeam/golibs/ioutil"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"golang.org/x/exp/slices"
) )
// download and save all translations. // download and save all translations.

View file

@ -11,6 +11,7 @@ import (
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"slices"
"strings" "strings"
"time" "time"
@ -18,7 +19,6 @@ import (
"github.com/AdguardTeam/golibs/errors" "github.com/AdguardTeam/golibs/errors"
"github.com/AdguardTeam/golibs/log" "github.com/AdguardTeam/golibs/log"
"golang.org/x/exp/maps" "golang.org/x/exp/maps"
"golang.org/x/exp/slices"
) )
const ( const (