summaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
Diffstat (limited to 'www')
-rw-r--r--www/chromium/Makefile2
-rw-r--r--www/chromium/distinfo10
-rw-r--r--www/chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json58
-rw-r--r--www/chromium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc13
-rw-r--r--www/dokuwiki/Makefile2
-rw-r--r--www/dokuwiki/distinfo6
-rw-r--r--www/dokuwiki/pkg-plist89
-rw-r--r--www/domoticz-devel/Makefile2
-rw-r--r--www/domoticz-devel/files/patch-pr62522178
-rw-r--r--www/domoticz/Makefile3
-rw-r--r--www/domoticz/files/patch-pr62522178
-rw-r--r--www/dooble/Makefile4
-rw-r--r--www/dooble/distinfo6
-rw-r--r--www/firefox/Makefile2
-rw-r--r--www/firefox/distinfo6
-rw-r--r--www/galene/Makefile24
-rw-r--r--www/galene/distinfo48
-rw-r--r--www/gohugo/Makefile2
-rw-r--r--www/gohugo/distinfo10
-rw-r--r--www/grafana/Makefile19
-rw-r--r--www/grafana/distinfo102
-rw-r--r--www/hs-DAV/Makefile169
-rw-r--r--www/hs-DAV/distinfo446
-rw-r--r--www/hs-gitit/Makefile2
-rw-r--r--www/hs-hjsmin/Makefile16
-rw-r--r--www/hs-hjsmin/distinfo40
-rw-r--r--www/hs-postgrest/Makefile5
-rw-r--r--www/hs-postgrest/Makefile.modules69
-rw-r--r--www/hs-postgrest/distinfo152
-rw-r--r--www/iridium/Makefile2
-rw-r--r--www/iridium/distinfo6
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json58
-rw-r--r--www/iridium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc13
-rw-r--r--www/librewolf/Makefile5
-rw-r--r--www/librewolf/distinfo6
-rw-r--r--www/linux-vieb/Makefile4
-rw-r--r--www/linux-vieb/distinfo10
-rw-r--r--www/nextcloud-calendar/Makefile2
-rw-r--r--www/nextcloud-calendar/distinfo6
-rw-r--r--www/nextcloud-contacts/Makefile2
-rw-r--r--www/nextcloud-contacts/distinfo6
-rw-r--r--www/nextcloud/Makefile2
-rw-r--r--www/nextcloud/distinfo6
-rw-r--r--www/novnc/Makefile2
-rw-r--r--www/novnc/distinfo6
-rw-r--r--www/novnc/pkg-plist7
-rw-r--r--www/p5-Mojolicious/Makefile2
-rw-r--r--www/p5-Mojolicious/distinfo6
-rw-r--r--www/p5-Net-Curl/Makefile7
-rw-r--r--www/p5-Net-Curl/files/patch-Makefile.PL11
-rw-r--r--www/p5-Net-Curl/files/patch-inc_symbols-in-versions68
-rw-r--r--www/proxygen/Makefile2
-rw-r--r--www/proxygen/distinfo6
-rw-r--r--www/py-dj50-django-auth-ldap/Makefile2
-rw-r--r--www/py-dj50-django-auth-ldap/distinfo6
-rw-r--r--www/py-dj51-django-auth-ldap/Makefile2
-rw-r--r--www/py-dj51-django-auth-ldap/distinfo6
-rw-r--r--www/py-django-auth-ldap/Makefile4
-rw-r--r--www/py-django-auth-ldap/distinfo6
-rw-r--r--www/py-flask/Makefile2
-rw-r--r--www/py-flask/distinfo6
-rw-r--r--www/reproxy/Makefile5
-rw-r--r--www/reproxy/distinfo6
-rw-r--r--www/sogo/Makefile2
-rw-r--r--www/sogo/distinfo6
-rw-r--r--www/sogo/files/patch-SoObjects_SOGo_SOGoMailer.m11
-rw-r--r--www/sogo/pkg-plist9
-rw-r--r--www/tomcat-devel/Makefile3
-rw-r--r--www/tomcat-devel/distinfo6
-rw-r--r--www/tomcat-devel/pkg-plist10
-rw-r--r--www/tomcat101/Makefile3
-rw-r--r--www/tomcat101/distinfo6
-rw-r--r--www/tomcat101/pkg-plist10
-rw-r--r--www/tomcat110/Makefile3
-rw-r--r--www/tomcat110/distinfo6
-rw-r--r--www/tomcat110/pkg-plist10
-rw-r--r--www/tomcat9/Makefile3
-rw-r--r--www/tomcat9/distinfo6
-rw-r--r--www/tomcat9/pkg-plist10
-rw-r--r--www/tt-rss/Makefile8
-rw-r--r--www/tt-rss/distinfo6
-rw-r--r--www/tt-rss/pkg-plist13
-rw-r--r--www/ungoogled-chromium/Makefile2
-rw-r--r--www/ungoogled-chromium/distinfo14
-rw-r--r--www/ungoogled-chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json58
-rw-r--r--www/ungoogled-chromium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc13
86 files changed, 5289 insertions, 732 deletions
diff --git a/www/chromium/Makefile b/www/chromium/Makefile
index 7ce5d02167fe..7dd66eaf8686 100644
--- a/www/chromium/Makefile
+++ b/www/chromium/Makefile
@@ -1,5 +1,5 @@
PORTNAME= chromium
-PORTVERSION= 136.0.7103.92
+PORTVERSION= 136.0.7103.113
PULSEMV= 16
PULSEV= ${PULSEMV}.1
CATEGORIES= www wayland
diff --git a/www/chromium/distinfo b/www/chromium/distinfo
index 8897a937751d..89fdf6cdec3c 100644
--- a/www/chromium/distinfo
+++ b/www/chromium/distinfo
@@ -1,7 +1,7 @@
-TIMESTAMP = 1746600351
-SHA256 (chromium-136.0.7103.92.tar.xz) = 3fa7f88ef186566948367bf1e9a9f0612e753fc69285c1654728f6a015cd4cf2
-SIZE (chromium-136.0.7103.92.tar.xz) = 7188412240
+TIMESTAMP = 1747298146
+SHA256 (chromium-136.0.7103.113.tar.xz) = 7c765bd13df842a28bb52279b8d711411ac6082151473e07bd70b9a482c0a0ac
+SIZE (chromium-136.0.7103.113.tar.xz) = 7196537592
SHA256 (pulseaudio-16.1.tar.gz) = 027266c62f2a84422ac45fa721a649508f0f1628fb1fd9242315ac54ce2d7c92
SIZE (pulseaudio-16.1.tar.gz) = 2763111
-SHA256 (chromium-136.0.7103.92-testdata.tar.xz) = 6e5bb3fba5b61ffc9e91b9d2fc9cc758bebe4d16806a68b1a32b189193c78256
-SIZE (chromium-136.0.7103.92-testdata.tar.xz) = 651393856
+SHA256 (chromium-136.0.7103.113-testdata.tar.xz) = cbf264643986db5b7aa91843ea64a1b9e23d00bb226b234d4f60788469a58ef8
+SIZE (chromium-136.0.7103.113-testdata.tar.xz) = 651614116
diff --git a/www/chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5 b/www/chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
index a797353d5556..919aec74e31b 100644
--- a/www/chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
+++ b/www/chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
@@ -1,4 +1,4 @@
---- third_party/blink/renderer/platform/runtime_enabled_features.json5.orig 2025-05-05 10:57:53 UTC
+--- third_party/blink/renderer/platform/runtime_enabled_features.json5.orig 2025-05-15 08:40:59 UTC
+++ third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -434,7 +434,7 @@
name: "AppTitle",
@@ -45,7 +45,7 @@
status: "stable",
public: true,
base_feature: "none",
-@@ -4636,7 +4636,7 @@
+@@ -4635,7 +4635,7 @@
name: "UnrestrictedSharedArrayBuffer",
base_feature: "none",
origin_trial_feature_name: "UnrestrictedSharedArrayBuffer",
@@ -54,7 +54,7 @@
},
// Enables using policy-controlled feature "usb-unrestricted" to allow
// isolated context to access protected USB interface classes and to
-@@ -4811,7 +4811,7 @@
+@@ -4810,7 +4810,7 @@
{
name: "WebAppScopeExtensions",
origin_trial_feature_name: "WebAppScopeExtensions",
@@ -63,7 +63,7 @@
status: "experimental",
base_feature: "none",
},
-@@ -5086,7 +5086,7 @@
+@@ -5085,7 +5085,7 @@
{
name: "WebIdentityDigitalCredentials",
origin_trial_feature_name: "WebIdentityDigitalCredentials",
diff --git a/www/chromium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc b/www/chromium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc
new file mode 100644
index 000000000000..e106ca3408e3
--- /dev/null
+++ b/www/chromium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc
@@ -0,0 +1,13 @@
+--- ui/ozone/platform/wayland/host/wayland_frame_manager.cc.orig 2025-05-13 08:59:54 UTC
++++ ui/ozone/platform/wayland/host/wayland_frame_manager.cc
+@@ -461,8 +461,10 @@ std::optional<bool> WaylandFrameManager::ApplySurfaceC
+ surface->UpdateBufferDamageRegion(
+ gfx::ToEnclosingRectIgnoringError(surface_damage));
+
++#if !BUILDFLAG(IS_BSD)
+ if (!config.access_fence_handle.is_null())
+ surface->set_acquire_fence(std::move(config.access_fence_handle));
++#endif
+
+ bool needs_commit = false;
+
diff --git a/www/dokuwiki/Makefile b/www/dokuwiki/Makefile
index eb1c2bda90f8..bb4f18db5594 100644
--- a/www/dokuwiki/Makefile
+++ b/www/dokuwiki/Makefile
@@ -16,7 +16,7 @@ LICENSE_FILE_GPLv2= ${WRKSRC}/COPYING
LICENSE_FILE_GPLv2+ = ${WRKSRC}/vendor/geshi/geshi/LICENSE
LICENSE_FILE_MIT= ${WRKSRC}/vendor/composer/LICENSE
-DIST_VER= ${PORTNAME}-2024-02-06b
+DIST_VER= ${PORTNAME}-2025-05-14
USES= cpe php:web,flavors shebangfix tar:tgz
USE_PHP= ctype filter gd iconv mbstring ldap pdo_mysql session simplexml xml zlib
NO_ARCH= YES
diff --git a/www/dokuwiki/distinfo b/www/dokuwiki/distinfo
index 4761b07e5644..68ad36c6e7b1 100644
--- a/www/dokuwiki/distinfo
+++ b/www/dokuwiki/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1722925621
-SHA256 (dokuwiki-2024-02-06b.tgz) = 7ac919bc298c049af15764f3563ec3012cd158945ef2a22348684df701a19ba3
-SIZE (dokuwiki-2024-02-06b.tgz) = 4206676
+TIMESTAMP = 1747474694
+SHA256 (dokuwiki-2025-05-14.tgz) = b913bf2cbea6fe9956c32572837617d4d8ee766d122155eb4722b24d526dacd4
+SIZE (dokuwiki-2025-05-14.tgz) = 4251299
diff --git a/www/dokuwiki/pkg-plist b/www/dokuwiki/pkg-plist
index 21f45af86def..d4dab2c95ada 100644
--- a/www/dokuwiki/pkg-plist
+++ b/www/dokuwiki/pkg-plist
@@ -131,8 +131,9 @@
%%WWWDIR%%/inc/Feed/FeedItemProcessor.php
%%WWWDIR%%/inc/Feed/FeedMediaProcessor.php
%%WWWDIR%%/inc/Feed/FeedPageProcessor.php
-%%WWWDIR%%/inc/FeedParser.php
-%%WWWDIR%%/inc/FeedParserFile.php
+%%WWWDIR%%/inc/Feed/FeedParser.php
+%%WWWDIR%%/inc/Feed/FeedParserFile.php
+%%WWWDIR%%/inc/Feed/FeedParserItem.php
%%WWWDIR%%/inc/File/MediaFile.php
%%WWWDIR%%/inc/File/MediaResolver.php
%%WWWDIR%%/inc/File/PageFile.php
@@ -164,6 +165,7 @@
%%WWWDIR%%/inc/Input/Input.php
%%WWWDIR%%/inc/Input/Post.php
%%WWWDIR%%/inc/Input/Server.php
+%%WWWDIR%%/inc/Ip.php
%%WWWDIR%%/inc/JWT.php
%%WWWDIR%%/inc/JpegMeta.php
%%WWWDIR%%/inc/Logger.php
@@ -279,6 +281,16 @@
%%WWWDIR%%/inc/Subscriptions/SubscriberRegexBuilder.php
%%WWWDIR%%/inc/Subscriptions/SubscriptionSender.php
%%WWWDIR%%/inc/TaskRunner.php
+%%WWWDIR%%/inc/TreeBuilder/AbstractBuilder.php
+%%WWWDIR%%/inc/TreeBuilder/ControlPageBuilder.php
+%%WWWDIR%%/inc/TreeBuilder/Node/AbstractNode.php
+%%WWWDIR%%/inc/TreeBuilder/Node/ExternalLink.php
+%%WWWDIR%%/inc/TreeBuilder/Node/Top.php
+%%WWWDIR%%/inc/TreeBuilder/Node/WikiNamespace.php
+%%WWWDIR%%/inc/TreeBuilder/Node/WikiPage.php
+%%WWWDIR%%/inc/TreeBuilder/Node/WikiStartpage.php
+%%WWWDIR%%/inc/TreeBuilder/PageTreeBuilder.php
+%%WWWDIR%%/inc/TreeBuilder/TreeSort.php
%%WWWDIR%%/inc/Ui/Admin.php
%%WWWDIR%%/inc/Ui/Backlinks.php
%%WWWDIR%%/inc/Ui/Diff.php
@@ -497,6 +509,10 @@
%%WWWDIR%%/inc/lang/bn/editrev.txt
%%WWWDIR%%/inc/lang/bn/index.txt
%%WWWDIR%%/inc/lang/bn/lang.php
+%%WWWDIR%%/inc/lang/br/admin.txt
+%%WWWDIR%%/inc/lang/br/adminplugins.txt
+%%WWWDIR%%/inc/lang/br/backlinks.txt
+%%WWWDIR%%/inc/lang/br/conflict.txt
%%WWWDIR%%/inc/lang/ca-valencia/admin.txt
%%WWWDIR%%/inc/lang/ca-valencia/adminplugins.txt
%%WWWDIR%%/inc/lang/ca-valencia/backlinks.txt
@@ -1742,6 +1758,9 @@
%%WWWDIR%%/inc/lang/mk/recent.txt
%%WWWDIR%%/inc/lang/mk/showrev.txt
%%WWWDIR%%/inc/lang/ml/admin.txt
+%%WWWDIR%%/inc/lang/ml/adminplugins.txt
+%%WWWDIR%%/inc/lang/ml/backlinks.txt
+%%WWWDIR%%/inc/lang/ml/conflict.txt
%%WWWDIR%%/inc/lang/ml/jquery.ui.datepicker.js
%%WWWDIR%%/inc/lang/mr/admin.txt
%%WWWDIR%%/inc/lang/mr/backlinks.txt
@@ -3277,6 +3296,7 @@
%%WWWDIR%%/lib/plugins/authpdo/lang/uk/settings.php
%%WWWDIR%%/lib/plugins/authpdo/lang/vi/lang.php
%%WWWDIR%%/lib/plugins/authpdo/lang/vi/settings.php
+%%WWWDIR%%/lib/plugins/authpdo/lang/zh-tw/lang.php
%%WWWDIR%%/lib/plugins/authpdo/lang/zh/lang.php
%%WWWDIR%%/lib/plugins/authpdo/lang/zh/settings.php
%%WWWDIR%%/lib/plugins/authpdo/plugin.info.txt
@@ -3507,9 +3527,27 @@
%%WWWDIR%%/lib/plugins/config/plugin.info.txt
%%WWWDIR%%/lib/plugins/config/settings/config.metadata.php
%%WWWDIR%%/lib/plugins/config/style.css
-%%WWWDIR%%/lib/plugins/extension/_test/extension.test.php
+%%WWWDIR%%/lib/plugins/extension/Exception.php
+%%WWWDIR%%/lib/plugins/extension/Extension.php
+%%WWWDIR%%/lib/plugins/extension/Gui.php
+%%WWWDIR%%/lib/plugins/extension/GuiAdmin.php
+%%WWWDIR%%/lib/plugins/extension/GuiExtension.php
+%%WWWDIR%%/lib/plugins/extension/Installer.php
+%%WWWDIR%%/lib/plugins/extension/Local.php
+%%WWWDIR%%/lib/plugins/extension/Manager.php
+%%WWWDIR%%/lib/plugins/extension/Notice.php
+%%WWWDIR%%/lib/plugins/extension/Repository.php
+%%WWWDIR%%/lib/plugins/extension/_test/ExtensionTest.php
+%%WWWDIR%%/lib/plugins/extension/_test/InstallerTest.php
+%%WWWDIR%%/lib/plugins/extension/_test/LocalTest.php
+%%WWWDIR%%/lib/plugins/extension/_test/ManagerTest.php
%%WWWDIR%%/lib/plugins/extension/_test/testdata/either1/script.js
%%WWWDIR%%/lib/plugins/extension/_test/testdata/eithersub2/either2/script.js
+%%WWWDIR%%/lib/plugins/extension/_test/testdata/multi/mpl1/plugin.info.txt
+%%WWWDIR%%/lib/plugins/extension/_test/testdata/multi/mpl2/plugin.info.txt
+%%WWWDIR%%/lib/plugins/extension/_test/testdata/multi/mpl3/plugin.info.txt
+%%WWWDIR%%/lib/plugins/extension/_test/testdata/multi/mtpl4/template.info.txt
+%%WWWDIR%%/lib/plugins/extension/_test/testdata/multi/mtpl5/template.info.txt
%%WWWDIR%%/lib/plugins/extension/_test/testdata/plgfoo5/plugin.info.txt
%%WWWDIR%%/lib/plugins/extension/_test/testdata/plgsub3/plugin3/syntax.php
%%WWWDIR%%/lib/plugins/extension/_test/testdata/plgsub4/plugin4/plugin.info.txt
@@ -3527,25 +3565,20 @@
%%WWWDIR%%/lib/plugins/extension/action.php
%%WWWDIR%%/lib/plugins/extension/admin.php
%%WWWDIR%%/lib/plugins/extension/admin.svg
-%%WWWDIR%%/lib/plugins/extension/all.less
%%WWWDIR%%/lib/plugins/extension/cli.php
-%%WWWDIR%%/lib/plugins/extension/helper/extension.php
-%%WWWDIR%%/lib/plugins/extension/helper/gui.php
-%%WWWDIR%%/lib/plugins/extension/helper/list.php
-%%WWWDIR%%/lib/plugins/extension/helper/repository.php
-%%WWWDIR%%/lib/plugins/extension/images/bug.gif
-%%WWWDIR%%/lib/plugins/extension/images/disabled.png
-%%WWWDIR%%/lib/plugins/extension/images/donate.png
-%%WWWDIR%%/lib/plugins/extension/images/down.png
-%%WWWDIR%%/lib/plugins/extension/images/enabled.png
+%%WWWDIR%%/lib/plugins/extension/helper.php
+%%WWWDIR%%/lib/plugins/extension/images/bug.svg
+%%WWWDIR%%/lib/plugins/extension/images/coffee.svg
+%%WWWDIR%%/lib/plugins/extension/images/error.svg
+%%WWWDIR%%/lib/plugins/extension/images/fire.svg
%%WWWDIR%%/lib/plugins/extension/images/icons.xcf
+%%WWWDIR%%/lib/plugins/extension/images/info.svg
%%WWWDIR%%/lib/plugins/extension/images/license.txt
%%WWWDIR%%/lib/plugins/extension/images/overlay.png
%%WWWDIR%%/lib/plugins/extension/images/plugin.png
-%%WWWDIR%%/lib/plugins/extension/images/tag.png
+%%WWWDIR%%/lib/plugins/extension/images/security.svg
%%WWWDIR%%/lib/plugins/extension/images/template.png
-%%WWWDIR%%/lib/plugins/extension/images/up.png
-%%WWWDIR%%/lib/plugins/extension/images/warning.png
+%%WWWDIR%%/lib/plugins/extension/images/warning.svg
%%WWWDIR%%/lib/plugins/extension/lang/bg/intro_install.txt
%%WWWDIR%%/lib/plugins/extension/lang/bg/intro_plugins.txt
%%WWWDIR%%/lib/plugins/extension/lang/bg/intro_search.txt
@@ -3639,6 +3672,7 @@
%%WWWDIR%%/lib/plugins/extension/lang/ko/intro_search.txt
%%WWWDIR%%/lib/plugins/extension/lang/ko/intro_templates.txt
%%WWWDIR%%/lib/plugins/extension/lang/ko/lang.php
+%%WWWDIR%%/lib/plugins/extension/lang/lt/lang.php
%%WWWDIR%%/lib/plugins/extension/lang/lv/intro_templates.txt
%%WWWDIR%%/lib/plugins/extension/lang/lv/lang.php
%%WWWDIR%%/lib/plugins/extension/lang/nl/intro_install.txt
@@ -3718,9 +3752,13 @@
%%WWWDIR%%/lib/plugins/logviewer/lang/fr/intro.txt
%%WWWDIR%%/lib/plugins/logviewer/lang/fr/lang.php
%%WWWDIR%%/lib/plugins/logviewer/lang/fr/nolog.txt
+%%WWWDIR%%/lib/plugins/logviewer/lang/hu/intro.txt
%%WWWDIR%%/lib/plugins/logviewer/lang/hu/lang.php
+%%WWWDIR%%/lib/plugins/logviewer/lang/hu/nolog.txt
%%WWWDIR%%/lib/plugins/logviewer/lang/it/lang.php
%%WWWDIR%%/lib/plugins/logviewer/lang/ja/lang.php
+%%WWWDIR%%/lib/plugins/logviewer/lang/ko/intro.txt
+%%WWWDIR%%/lib/plugins/logviewer/lang/ko/lang.php
%%WWWDIR%%/lib/plugins/logviewer/lang/pl/intro.txt
%%WWWDIR%%/lib/plugins/logviewer/lang/pl/lang.php
%%WWWDIR%%/lib/plugins/logviewer/lang/pl/nolog.txt
@@ -3733,6 +3771,7 @@
%%WWWDIR%%/lib/plugins/logviewer/lang/ru/intro.txt
%%WWWDIR%%/lib/plugins/logviewer/lang/ru/lang.php
%%WWWDIR%%/lib/plugins/logviewer/lang/ru/nolog.txt
+%%WWWDIR%%/lib/plugins/logviewer/lang/sk/lang.php
%%WWWDIR%%/lib/plugins/logviewer/lang/vi/intro.txt
%%WWWDIR%%/lib/plugins/logviewer/lang/vi/lang.php
%%WWWDIR%%/lib/plugins/logviewer/lang/vi/nolog.txt
@@ -4441,6 +4480,7 @@
%%WWWDIR%%/lib/scripts/jquery/update.sh
%%WWWDIR%%/lib/scripts/jquery/versions
%%WWWDIR%%/lib/scripts/linkwiz.js
+%%WWWDIR%%/lib/scripts/linkwiz.test.js
%%WWWDIR%%/lib/scripts/locktimer.js
%%WWWDIR%%/lib/scripts/media.js
%%WWWDIR%%/lib/scripts/page.js
@@ -4562,6 +4602,8 @@
%%WWWDIR%%/lib/tpl/dokuwiki/lang/sk/lang.php
%%WWWDIR%%/lib/tpl/dokuwiki/lang/sk/style.txt
%%WWWDIR%%/lib/tpl/dokuwiki/lang/sv/lang.php
+%%WWWDIR%%/lib/tpl/dokuwiki/lang/uk/lang.php
+%%WWWDIR%%/lib/tpl/dokuwiki/lang/uk/style.txt
%%WWWDIR%%/lib/tpl/dokuwiki/lang/vi/lang.php
%%WWWDIR%%/lib/tpl/dokuwiki/lang/vi/style.txt
%%WWWDIR%%/lib/tpl/dokuwiki/lang/zh-tw/style.txt
@@ -4753,7 +4795,7 @@
%%WWWDIR%%/vendor/geshi/geshi/src/geshi/netrexx.php
%%WWWDIR%%/vendor/geshi/geshi/src/geshi/newlisp.php
%%WWWDIR%%/vendor/geshi/geshi/src/geshi/nginx.php
-%%WWWDIR%%/vendor/geshi/geshi/src/geshi/nimrod.php
+%%WWWDIR%%/vendor/geshi/geshi/src/geshi/nim.php
%%WWWDIR%%/vendor/geshi/geshi/src/geshi/nsis.php
%%WWWDIR%%/vendor/geshi/geshi/src/geshi/oberon2.php
%%WWWDIR%%/vendor/geshi/geshi/src/geshi/objc.php
@@ -4893,6 +4935,7 @@
%%WWWDIR%%/vendor/openpsa/universalfeedcreator/lib/Creator/GPXCreator.php
%%WWWDIR%%/vendor/openpsa/universalfeedcreator/lib/Creator/HTMLCreator.php
%%WWWDIR%%/vendor/openpsa/universalfeedcreator/lib/Creator/JSCreator.php
+%%WWWDIR%%/vendor/openpsa/universalfeedcreator/lib/Creator/JSONCreator.php
%%WWWDIR%%/vendor/openpsa/universalfeedcreator/lib/Creator/KMLCreator.php
%%WWWDIR%%/vendor/openpsa/universalfeedcreator/lib/Creator/MBOXCreator.php
%%WWWDIR%%/vendor/openpsa/universalfeedcreator/lib/Creator/OPMLCreator.php
@@ -4927,6 +4970,16 @@
%%WWWDIR%%/vendor/paragonie/random_compat/lib/random.php
%%WWWDIR%%/vendor/paragonie/random_compat/psalm-autoload.php
%%WWWDIR%%/vendor/paragonie/random_compat/psalm.xml
+%%WWWDIR%%/vendor/php81_bc/strftime/.editorconfig
+%%WWWDIR%%/vendor/php81_bc/strftime/LICENSE
+%%WWWDIR%%/vendor/php81_bc/strftime/README.md
+%%WWWDIR%%/vendor/php81_bc/strftime/autoload.php
+%%WWWDIR%%/vendor/php81_bc/strftime/composer.json
+%%WWWDIR%%/vendor/php81_bc/strftime/example.php
+%%WWWDIR%%/vendor/php81_bc/strftime/src/AbstractLocaleFormatter.php
+%%WWWDIR%%/vendor/php81_bc/strftime/src/DateLocaleFormatter.php
+%%WWWDIR%%/vendor/php81_bc/strftime/src/IntlLocaleFormatter.php
+%%WWWDIR%%/vendor/php81_bc/strftime/src/php-8.1-strftime.php
%%WWWDIR%%/vendor/phpseclib/phpseclib/AUTHORS
%%WWWDIR%%/vendor/phpseclib/phpseclib/BACKERS.md
%%WWWDIR%%/vendor/phpseclib/phpseclib/LICENSE
@@ -5093,8 +5146,10 @@
%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/FileNotFoundException.php
%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/InconsistentSetupException.php
%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/InsufficientSetupException.php
+%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/InvalidPacketLengthException.php
%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/NoKeyLoadedException.php
%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/NoSupportedAlgorithmsException.php
+%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/TimeoutException.php
%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/UnableToConnectException.php
%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedAlgorithmException.php
%%WWWDIR%%/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedCurveException.php
diff --git a/www/domoticz-devel/Makefile b/www/domoticz-devel/Makefile
index e8954e448702..7f56841b2567 100644
--- a/www/domoticz-devel/Makefile
+++ b/www/domoticz-devel/Makefile
@@ -11,8 +11,6 @@ WWW= https://www.domoticz.com
LICENSE= GPLv3
LICENSE_FILE= ${WRKSRC}/License.txt
-BROKEN= fails to build with Boost>=1.87
-
LIB_DEPENDS= libcurl.so:ftp/curl \
libboost_system.so:devel/boost-libs \
libjsoncpp.so:devel/jsoncpp \
diff --git a/www/domoticz-devel/files/patch-pr6252 b/www/domoticz-devel/files/patch-pr6252
new file mode 100644
index 000000000000..34c4efd3f4e4
--- /dev/null
+++ b/www/domoticz-devel/files/patch-pr6252
@@ -0,0 +1,2178 @@
+Fix for boost 1.87
+
+Removed the diff for the msbuild project files, didn't apply cleanly and not relevant anyway.
+This will merged in the next stable of domoticz.
+
+Pullrequest: https://github.com/domoticz/domoticz/pull/6252
+Patch: https://patch-diff.githubusercontent.com/raw/domoticz/domoticz/pull/6252.patch-diff
+
+diff --git hardware/ASyncSerial.cpp hardware/ASyncSerial.cpp
+index 52c950d..6147cdb 100644
+--- hardware/ASyncSerial.cpp
++++ hardware/ASyncSerial.cpp
+@@ -54,7 +54,7 @@ public:
+ {
+ }
+
+- boost::asio::io_service io; ///< Io service object
++ boost::asio::io_context io; ///< Io service object
+ boost::asio::serial_port port; ///< Serial port object
+ boost::thread backgroundThread; ///< Thread that runs read/write operations
+ bool open{ false }; ///< True if port open
+@@ -117,10 +117,10 @@ void AsyncSerial::open(const std::string& devname, unsigned int baud_rate,
+ throw;
+ }
+
+- pimpl->io.reset();
++ pimpl->io.restart();
+
+- // This gives some work to the io_service before it is started
+- pimpl->io.post([this] { return doRead(); });
++ // This gives some work to the io_context before it is started
++ boost::asio::post(pimpl->io, [this] { return doRead(); });
+
+ boost::thread t([p = &pimpl->io] { p->run(); });
+ pimpl->backgroundThread.swap(t);
+@@ -149,10 +149,10 @@ void AsyncSerial::openOnlyBaud(const std::string& devname, unsigned int baud_rat
+ throw;
+ }
+
+- pimpl->io.reset();
++ pimpl->io.restart();
+
+- //This gives some work to the io_service before it is started
+- pimpl->io.post([this] { return doRead(); });
++ //This gives some work to the io_context before it is started
++ boost::asio::post(pimpl->io, [this] { return doRead(); });
+
+ boost::thread t([p = &pimpl->io] { p->run(); });
+ pimpl->backgroundThread.swap(t);
+@@ -176,9 +176,9 @@ void AsyncSerial::close()
+ if(!isOpen()) return;
+
+ pimpl->open = false;
+- pimpl->io.post([this] { doClose(); });
++ boost::asio::post(pimpl->io, [this] { doClose(); });
+ pimpl->backgroundThread.join();
+- pimpl->io.reset();
++ pimpl->io.restart();
+ if(errorStatus())
+ {
+ throw(boost::system::system_error(boost::system::error_code(),
+@@ -192,7 +192,7 @@ void AsyncSerial::write(const char *data, size_t size)
+ std::lock_guard<std::mutex> l(pimpl->writeQueueMutex);
+ pimpl->writeQueue.insert(pimpl->writeQueue.end(),data,data+size);
+ }
+- pimpl->io.post([this] { doWrite(); });
++ boost::asio::post(pimpl->io, [this] { doWrite(); });
+ }
+
+ void AsyncSerial::write(const std::string &data)
+@@ -201,7 +201,7 @@ void AsyncSerial::write(const std::string &data)
+ std::lock_guard<std::mutex> l(pimpl->writeQueueMutex);
+ pimpl->writeQueue.insert(pimpl->writeQueue.end(), data.c_str(), data.c_str()+data.size());
+ }
+- pimpl->io.post([this] { doWrite(); });
++ boost::asio::post(pimpl->io, [this] { doWrite(); });
+ }
+
+ void AsyncSerial::write(const std::vector<char>& data)
+@@ -211,7 +211,7 @@ void AsyncSerial::write(const std::vector<char>& data)
+ pimpl->writeQueue.insert(pimpl->writeQueue.end(),data.begin(),
+ data.end());
+ }
+- pimpl->io.post([this] { doWrite(); });
++ boost::asio::post(pimpl->io, [this] { doWrite(); });
+ }
+
+ void AsyncSerial::writeString(const std::string& s)
+@@ -220,7 +220,7 @@ void AsyncSerial::writeString(const std::string& s)
+ std::lock_guard<std::mutex> l(pimpl->writeQueueMutex);
+ pimpl->writeQueue.insert(pimpl->writeQueue.end(),s.begin(),s.end());
+ }
+- pimpl->io.post([this] { doWrite(); });
++ boost::asio::post(pimpl->io, [this] { doWrite(); });
+ }
+
+ void AsyncSerial::doRead()
+diff --git hardware/ASyncSerial.h hardware/ASyncSerial.h
+index 0a51ef0..de83f8a 100644
+--- hardware/ASyncSerial.h
++++ hardware/ASyncSerial.h
+@@ -123,27 +123,27 @@ class AsyncSerial : private domoticz::noncopyable
+
+ /**
+ * Callback called to start an asynchronous read operation.
+- * This callback is called by the io_service in the spawned thread.
++ * This callback is called by the io_context in the spawned thread.
+ */
+ void doRead();
+
+ /**
+ * Callback called at the end of the asynchronous operation.
+- * This callback is called by the io_service in the spawned thread.
++ * This callback is called by the io_context in the spawned thread.
+ */
+ void readEnd(const boost::system::error_code &error, size_t bytes_transferred);
+
+ /**
+ * Callback called to start an asynchronous write operation.
+ * If it is already in progress, does nothing.
+- * This callback is called by the io_service in the spawned thread.
++ * This callback is called by the io_context in the spawned thread.
+ */
+ void doWrite();
+
+ /**
+ * Callback called at the end of an asynchronuous write operation,
+ * if there is more data to write, restarts a new write operation.
+- * This callback is called by the io_service in the spawned thread.
++ * This callback is called by the io_context in the spawned thread.
+ */
+ void writeEnd(const boost::system::error_code &error);
+
+diff --git hardware/ASyncTCP.cpp hardware/ASyncTCP.cpp
+index a375561..7c3b536 100644
+--- hardware/ASyncTCP.cpp
++++ hardware/ASyncTCP.cpp
+@@ -4,213 +4,241 @@
+ #include <boost/system/error_code.hpp> // for error_code
+ #include "../main/Logger.h"
+
+-struct hostent;
+-
+ #define MAX_TCP_BUFFER_SIZE 4096
+
+-#ifndef WIN32
+- #include <unistd.h> //gethostbyname
+-#endif
+-
+ #define STATUS_OK(err) !err
+-
+-ASyncTCP::ASyncTCP(const bool secure)
++#define STATUS_ERR(err) err
++
++ASyncTCP::ASyncTCP(const bool secure) :
++ m_Tcpwork(boost::asio::make_work_guard(m_io_context))
++ , m_Socket(m_io_context)
++ , m_Resolver(m_io_context)
++ , m_ReconnectTimer(m_io_context)
++ , m_TimeoutTimer(m_io_context)
++ , m_SendStrand(m_io_context)
+ #ifdef WWW_ENABLE_SSL
+- : mSecure(secure)
++ , m_bSecure(secure)
+ #endif
+ {
+ m_pRXBuffer = new uint8_t[MAX_TCP_BUFFER_SIZE];
+ #ifdef WWW_ENABLE_SSL
+ mContext.set_verify_mode(boost::asio::ssl::verify_none);
+- if (mSecure)
++ if (m_bSecure)
+ {
+- mSslSocket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(mIos, mContext));
++ m_SslSocket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(m_io_context, mContext));
+ }
+ #endif
+ }
+
+ ASyncTCP::~ASyncTCP()
+ {
+- assert(mTcpthread == nullptr);
+- mIsTerminating = true;
+- if (mTcpthread)
++ assert(m_Tcpthread == nullptr);
++ m_bIsTerminating = true;
++ if (m_Tcpthread)
+ {
+ //This should never happen. terminate() never called!!
+- _log.Log(LOG_ERROR, "ASyncTCP: Workerthread not closed. terminate() never called!!!");
+- mIos.stop();
+- if (mTcpthread)
++ _log.Log(LOG_ERROR, "ASyncTCP: Worker thread not closed. terminate() never called!!!");
++ m_io_context.stop();
++ if (m_Tcpthread)
+ {
+- mTcpthread->join();
+- mTcpthread.reset();
++ m_Tcpthread->join();
++ m_Tcpthread.reset();
+ }
+ }
+ if (m_pRXBuffer != nullptr)
+ delete[] m_pRXBuffer;
+ }
+
+-void ASyncTCP::SetReconnectDelay(int32_t Delay)
++void ASyncTCP::SetReconnectDelay(const int32_t Delay)
+ {
+- mReconnectDelay = Delay;
++ m_iReconnectDelay = Delay;
+ }
+
+ void ASyncTCP::connect(const std::string& ip, uint16_t port)
+ {
+- assert(!mSocket.is_open());
+- if (mSocket.is_open())
++ assert(!m_Socket.is_open());
++ if (m_Socket.is_open())
+ {
+ _log.Log(LOG_ERROR, "ASyncTCP: connect called while socket is still open. !!!");
+ terminate();
+ }
+
+- // RK: We reset mIos here because it might have been stopped in terminate()
+- mIos.reset();
+- // RK: After the reset, we need to provide it work anew
+- mTcpwork = std::make_shared<boost::asio::io_service::work>(mIos);
+- if (!mTcpthread)
+- mTcpthread = std::make_shared<std::thread>([p = &mIos] { p->run(); });
+-
+- mIp = ip;
+- mPort = port;
++ m_IP = ip;
++ m_Port = port;
+ std::string port_str = std::to_string(port);
+- boost::asio::ip::tcp::resolver::query query(ip, port_str);
+ timeout_start_timer();
+- mResolver.async_resolve(query, [this](auto &&err, auto &&iter) { cb_resolve_done(err, iter); });
++
++ m_Resolver.async_resolve(
++ ip, port_str,
++ [this](const boost::system::error_code& error, const boost::asio::ip::tcp::resolver::results_type& endpoints) {
++ handle_resolve(error, endpoints);
++ }
++ );
++
++ // RK: We restart m_io_context here because it might have been stopped in terminate()
++ m_io_context.restart();
++ // RK: After the reset, we need to provide it work anew
++ m_Tcpwork.reset();
++ m_Tcpwork.emplace(boost::asio::make_work_guard(m_io_context));
++ if (!m_Tcpthread)
++ m_Tcpthread = std::make_shared<std::thread>([p = &m_io_context] { p->run(); });
+ }
+
+-void ASyncTCP::cb_resolve_done(const boost::system::error_code& error, boost::asio::ip::tcp::resolver::iterator endpoint_iterator)
++void ASyncTCP::handle_resolve(const boost::system::error_code& error, const boost::asio::ip::tcp::resolver::results_type &endpoints)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
+- {
+- connect_start(endpoint_iterator);
+- }
+- else
++ if (STATUS_ERR(error))
+ {
+ process_error(error);
++ return;
+ }
+-}
+-
+-void ASyncTCP::connect_start(boost::asio::ip::tcp::resolver::iterator& endpoint_iterator)
+-{
+- if (mIsConnected) return;
+-
+- mEndPoint = *endpoint_iterator++;
++ if (m_bIsConnected) return;
+
+ timeout_start_timer();
++
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
++ if (m_bSecure)
+ {
+ // we reset the ssl socket, because the ssl context needs to be reinitialized after a reconnect
+- mSslSocket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(mIos, mContext));
+- mSslSocket->lowest_layer().async_connect(mEndPoint, [this, endpoint_iterator](auto &&err) mutable { cb_connect_done(err, endpoint_iterator); });
++ m_SslSocket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(m_io_context, mContext));
++ boost::asio::async_connect(m_SslSocket->lowest_layer(), endpoints,
++ [this](const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& endpoint)
++ {
++ handle_connect(error, endpoint);
++ }
++ );
+ }
+ else
+ #endif
+ {
+- mSocket.async_connect(mEndPoint, [this, endpoint_iterator](auto &&err) mutable { cb_connect_done(err, endpoint_iterator); });
++ boost::asio::async_connect(m_Socket, endpoints,
++ [this](const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& endpoint)
++ {
++ handle_connect(error, endpoint);
++ }
++ );
+ }
+ }
+
+-void ASyncTCP::cb_connect_done(const boost::system::error_code& error, boost::asio::ip::tcp::resolver::iterator &endpoint_iterator)
++void ASyncTCP::handle_connect(const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& /*endpoint*/)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
++ if (STATUS_ERR(error))
+ {
++ process_error(error);
++ return;
++ }
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
+- {
+- timeout_start_timer();
+- mSslSocket->async_handshake(boost::asio::ssl::stream_base::client, [this](auto &&err) { cb_handshake_done(err); });
+- }
+- else
+-#endif
+- {
+- process_connection();
+- }
++ if (m_bSecure)
++ {
++ timeout_start_timer();
++ m_SslSocket->async_handshake(boost::asio::ssl::stream_base::client,
++ [this](const boost::system::error_code& error) {
++ cb_handshake_done(error);
++ }
++ );
+ }
+- else
++ else
++#endif
+ {
+- if (endpoint_iterator != boost::asio::ip::tcp::resolver::iterator())
+- {
+- // The connection failed. Try the next endpoint in the list.
+- connect_start(endpoint_iterator);
+- return;
+- }
+- process_error(error);
++ process_connection();
+ }
+ }
+
+ #ifdef WWW_ENABLE_SSL
+ void ASyncTCP::cb_handshake_done(const boost::system::error_code& error)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
+- {
+- process_connection();
+- }
+- else
++ if (STATUS_ERR(error))
+ {
+ process_error(error);
++ return;
+ }
++ process_connection();
++#endif
+ }
++
++void ASyncTCP::process_connection()
++{
++ m_bIsConnected = true;
++#ifdef WWW_ENABLE_SSL
++
++ if (!m_bSecure)
+ #endif
++ {
++ // RK: only if non-secure
++ boost::asio::socket_base::keep_alive option(true);
++ m_Socket.set_option(option);
++ }
++ OnConnect();
++ do_read_start();
++ do_write_start();
++}
+
+ void ASyncTCP::reconnect_start_timer()
+ {
+- if (mIsReconnecting) return;
++ if (m_bIsReconnecting) return;
+
+- if (mReconnectDelay != 0)
++ if (m_iReconnectDelay != 0)
+ {
+- mIsReconnecting = true;
+-
+- mReconnectTimer.expires_from_now(boost::posix_time::seconds(mReconnectDelay));
+- mReconnectTimer.async_wait([this](auto &&err) { cb_reconnect_start(err); });
++ m_bIsReconnecting = true;
++
++ m_ReconnectTimer.expires_from_now(boost::posix_time::seconds(m_iReconnectDelay));
++ m_ReconnectTimer.async_wait(
++ [this](const boost::system::error_code& error) {
++ cb_reconnect_start(error);
++ }
++ );
+ }
+ }
+
+ void ASyncTCP::cb_reconnect_start(const boost::system::error_code& error)
+ {
+- mIsReconnecting = false;
+- mReconnectTimer.cancel();
+- mTimeoutTimer.cancel();
++ m_bIsReconnecting = false;
++ m_ReconnectTimer.cancel();
++ m_TimeoutTimer.cancel();
+
+- if (mIsConnected) return;
++ if (m_bIsConnected) return;
+ if (error) return; // timer was cancelled
+
+ do_close();
+- connect(mIp, mPort);
++ connect(m_IP, m_Port);
+ }
+
+
+ void ASyncTCP::terminate(const bool silent)
+ {
+- mIsTerminating = true;
++ m_bIsTerminating = true;
+ disconnect(silent);
+- mTcpwork.reset();
+- mIos.stop();
+- if (mTcpthread)
++ m_Tcpwork.reset();
++ m_io_context.stop();
++ if (m_Tcpthread)
+ {
+- mTcpthread->join();
+- mTcpthread.reset();
++ m_Tcpthread->join();
++ m_Tcpthread.reset();
+ }
+- mIsReconnecting = false;
+- mIsConnected = false;
+- mWriteQ.clear();
+- mIsTerminating = false;
++ m_bIsReconnecting = false;
++ m_bIsConnected = false;
++ m_WriteQ.clear();
++ m_bIsTerminating = false;
+ }
+
+ void ASyncTCP::disconnect(const bool silent)
+ {
+- mReconnectTimer.cancel();
+- mTimeoutTimer.cancel();
+- if (!mTcpthread) return;
++ m_ReconnectTimer.cancel();
++ m_TimeoutTimer.cancel();
++ if (!m_Tcpthread) return;
+
+ try
+ {
+- mIos.post([this] { do_close(); });
++ boost::asio::post(m_io_context,
++ [this] {
++ do_close();
++ }
++ );
+ }
+ catch (...)
+ {
+@@ -223,62 +251,68 @@ void ASyncTCP::disconnect(const bool silent)
+
+ void ASyncTCP::do_close()
+ {
+- if (mIsReconnecting) {
++ if (m_bIsReconnecting) {
+ return;
+ }
+- mReconnectTimer.cancel();
+- mTimeoutTimer.cancel();
++ m_ReconnectTimer.cancel();
++ m_TimeoutTimer.cancel();
+ boost::system::error_code ec;
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
++ if (m_bSecure)
+ {
+- if (mSslSocket->lowest_layer().is_open())
++ if (m_SslSocket->lowest_layer().is_open())
+ {
+- mSslSocket->lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
+- mSslSocket->lowest_layer().close(ec);
++ m_SslSocket->lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
++ m_SslSocket->lowest_layer().close(ec);
+ }
+ }
+ else
+ #endif
+ {
+- if (mSocket.is_open())
++ if (m_Socket.is_open())
+ {
+- mSocket.close(ec);
++ m_Socket.close(ec);
+ }
+ }
+ }
+
+ void ASyncTCP::do_read_start()
+ {
+- if (mIsTerminating) return;
+- if (!mIsConnected) return;
++ if (m_bIsTerminating) return;
++ if (!m_bIsConnected) return;
+
+ timeout_start_timer();
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
++ if (m_bSecure)
+ {
+- mSslSocket->async_read_some(boost::asio::buffer(m_pRXBuffer, MAX_TCP_BUFFER_SIZE), [this](auto &&err, auto bytes) { cb_read_done(err, bytes); });
++ m_SslSocket->async_read_some(boost::asio::buffer(m_pRXBuffer, MAX_TCP_BUFFER_SIZE),
++ [this](const boost::system::error_code& error, size_t bytes_transferred) {
++ cb_read_done(error, bytes_transferred);
++ }
++ );
+ }
+ else
+ #endif
+ {
+- mSocket.async_read_some(boost::asio::buffer(m_pRXBuffer, MAX_TCP_BUFFER_SIZE), [this](auto &&err, auto bytes) { cb_read_done(err, bytes); });
++ m_Socket.async_read_some(boost::asio::buffer(m_pRXBuffer, MAX_TCP_BUFFER_SIZE),
++ [this](const boost::system::error_code& error, size_t bytes_transferred) {
++ cb_read_done(error, bytes_transferred);
++ }
++ );
+ }
+ }
+
+ void ASyncTCP::cb_read_done(const boost::system::error_code& error, size_t bytes_transferred)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
+- {
+- OnData(m_pRXBuffer, bytes_transferred);
+- do_read_start();
+- }
+- else
++ if (STATUS_ERR(error))
+ {
+ process_error(error);
++ return;
+ }
++ OnData(m_pRXBuffer, bytes_transferred);
++ do_read_start();
+ }
+
+ void ASyncTCP::write(const uint8_t* pData, size_t length)
+@@ -288,77 +322,66 @@ void ASyncTCP::write(const uint8_t* pData, size_t length)
+
+ void ASyncTCP::write(const std::string& msg)
+ {
+- if (!mTcpthread) return;
++ if (!m_Tcpthread) return;
+
+- mSendStrand.post([this, msg]() { cb_write_queue(msg); });
++ boost::asio::post(m_SendStrand, [this, msg]() { cb_write_queue(msg); });
+ }
+
+ void ASyncTCP::cb_write_queue(const std::string& msg)
+ {
+- mWriteQ.push_back(msg);
++ m_WriteQ.push_back(msg);
+
+- if (mWriteQ.size() == 1)
++ if (m_WriteQ.size() == 1)
+ do_write_start();
+ }
+
+ void ASyncTCP::do_write_start()
+ {
+- if (mIsTerminating) return;
+- if (!mIsConnected) return;
+- if (mWriteQ.empty())
++ if (m_bIsTerminating) return;
++ if (!m_bIsConnected) return;
++ if (m_WriteQ.empty())
+ return;
+
+ timeout_start_timer();
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
++ if (m_bSecure)
+ {
+- boost::asio::async_write(*mSslSocket, boost::asio::buffer(mWriteQ.front()), [this](auto &&err, auto) { cb_write_done(err); });
++ boost::asio::async_write(*m_SslSocket, boost::asio::buffer(m_WriteQ.front()),
++ [this](const boost::system::error_code& error, std::size_t length) {
++ cb_write_done(error, length);
++ }
++ );
+ }
+ else
+ #endif
+ {
+- boost::asio::async_write(mSocket, boost::asio::buffer(mWriteQ.front()), [this](auto &&err, auto) { cb_write_done(err); });
++ boost::asio::async_write(m_Socket, boost::asio::buffer(m_WriteQ.front()),
++ [this](const boost::system::error_code& error, std::size_t length) {
++ cb_write_done(error, length);
++ }
++ );
+ }
+ }
+
+-void ASyncTCP::cb_write_done(const boost::system::error_code& error)
++void ASyncTCP::cb_write_done(const boost::system::error_code& error, std::size_t /*length*/)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
+- {
+- mWriteQ.pop_front();
+- do_write_start();
+- }
+- else
++ if (STATUS_ERR(error))
+ {
+ process_error(error);
++ return;
+ }
+-}
+-
+-void ASyncTCP::process_connection()
+-{
+- mIsConnected = true;
+-#ifdef WWW_ENABLE_SSL
+-
+- if (!mSecure)
+-#endif
+- {
+- // RK: only if non-secure
+- boost::asio::socket_base::keep_alive option(true);
+- mSocket.set_option(option);
+- }
+- OnConnect();
+- do_read_start();
++ m_WriteQ.pop_front();
+ do_write_start();
+ }
+
+ void ASyncTCP::process_error(const boost::system::error_code& error)
+ {
+ do_close();
+- if (mIsConnected)
++ if (m_bIsConnected)
+ {
+- mIsConnected = false;
++ m_bIsConnected = false;
+ OnDisconnect();
+ }
+
+@@ -369,20 +392,23 @@ void ASyncTCP::process_error(const boost::system::error_code& error)
+ reconnect_start_timer();
+ }
+
+-/* timeout methods */
+ void ASyncTCP::timeout_start_timer()
+ {
+- if (0 == mTimeoutDelay) {
++ if (0 == m_iTimeoutDelay) {
+ return;
+ }
+ timeout_cancel_timer();
+- mTimeoutTimer.expires_from_now(boost::posix_time::seconds(mTimeoutDelay));
+- mTimeoutTimer.async_wait([this](auto &&err) { timeout_handler(err); });
++ m_TimeoutTimer.expires_from_now(boost::posix_time::seconds(m_iTimeoutDelay));
++ m_TimeoutTimer.async_wait(
++ [this](const boost::system::error_code& error) {
++ timeout_handler(error);
++ }
++ );
+ }
+
+ void ASyncTCP::timeout_cancel_timer()
+ {
+- mTimeoutTimer.cancel();
++ m_TimeoutTimer.cancel();
+ }
+
+ void ASyncTCP::timeout_handler(const boost::system::error_code& error)
+@@ -397,5 +423,5 @@ void ASyncTCP::timeout_handler(const boost::system::error_code& error)
+
+ void ASyncTCP::SetTimeout(const uint32_t Timeout)
+ {
+- mTimeoutDelay = Timeout;
++ m_iTimeoutDelay = Timeout;
+ }
+diff --git hardware/ASyncTCP.h hardware/ASyncTCP.h
+index cf859bb..a8b3ae2 100644
+--- hardware/ASyncTCP.h
++++ hardware/ASyncTCP.h
+@@ -3,39 +3,31 @@
+ #include <stddef.h> // for size_t
+ #include <deque> // for write queue
+ #include <boost/asio/deadline_timer.hpp> // for deadline_timer
+-#include <boost/asio/io_service.hpp> // for io_service
++#include <boost/asio/io_context.hpp> // for io_context
+ #include <boost/asio/strand.hpp> // for strand
+ #include <boost/asio/ip/tcp.hpp> // for tcp, tcp::endpoint, tcp::s...
+ #include <boost/asio/ssl.hpp> // for secure sockets
+ #include <boost/asio/ssl/stream.hpp> // for secure sockets
+ #include <exception> // for exception
++#include <optional> // for optional
+
+ #define ASYNCTCP_THREAD_NAME "ASyncTCP"
+ #define DEFAULT_RECONNECT_TIME 30
+ #define DEFAULT_TIMEOUT_TIME 60
+
+-namespace boost
+-{
+- namespace system
+- {
+- class error_code;
+- } // namespace system
+-} // namespace boost
+-
+ class ASyncTCP
+ {
+- protected:
++protected:
+ ASyncTCP(bool secure = false);
+ virtual ~ASyncTCP();
+-
+- void connect(const std::string &hostname, uint16_t port);
++ void connect(const std::string& hostname, uint16_t port);
+ void disconnect(bool silent = true);
+- void write(const std::string &msg);
+- void write(const uint8_t *pData, size_t length);
+- void SetReconnectDelay(int32_t Delay = DEFAULT_RECONNECT_TIME);
++ void write(const std::string& msg);
++ void write(const uint8_t* pData, size_t length);
++ void SetReconnectDelay(const int32_t Delay = DEFAULT_RECONNECT_TIME);
+ bool isConnected()
+ {
+- return mIsConnected;
++ return m_bIsConnected;
+ };
+ void terminate(bool silent = true);
+ void SetTimeout(uint32_t Timeout = DEFAULT_TIMEOUT_TIME);
+@@ -43,65 +35,61 @@ class ASyncTCP
+ // Callback interface to implement in derived classes
+ virtual void OnConnect() = 0;
+ virtual void OnDisconnect() = 0;
+- virtual void OnData(const uint8_t *pData, size_t length) = 0;
+- virtual void OnError(const boost::system::error_code &error) = 0;
+-
+- boost::asio::io_service mIos; // protected to allow derived classes to attach timers etc.
++ virtual void OnData(const uint8_t* pData, size_t length) = 0;
++ virtual void OnError(const boost::system::error_code& error) = 0;
+
+- private:
+- void cb_resolve_done(const boost::system::error_code &err, boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
+- void connect_start(boost::asio::ip::tcp::resolver::iterator &endpoint_iterator);
+- void cb_connect_done(const boost::system::error_code &error, boost::asio::ip::tcp::resolver::iterator &endpoint_iterator);
++ boost::asio::io_context m_io_context; // protected to allow derived classes to attach timers etc.
++private:
++ void handle_resolve(const boost::system::error_code& ec, const boost::asio::ip::tcp::resolver::results_type &results);
++ void handle_connect(const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& endpoint);
+ #ifdef WWW_ENABLE_SSL
+- void cb_handshake_done(const boost::system::error_code &error);
++ void cb_handshake_done(const boost::system::error_code& error);
+ #endif
+
+- /* timeout methods */
+ void timeout_start_timer();
+ void timeout_cancel_timer();
+ void reconnect_start_timer();
+- void timeout_handler(const boost::system::error_code &error);
++ void timeout_handler(const boost::system::error_code& error);
+
+- void cb_reconnect_start(const boost::system::error_code &error);
++ void cb_reconnect_start(const boost::system::error_code& error);
+
+ void do_close();
+
+ void do_read_start();
+- void cb_read_done(const boost::system::error_code &error, size_t bytes_transferred);
++ void cb_read_done(const boost::system::error_code& error, size_t bytes_transferred);
+
+- void cb_write_queue(const std::string &msg);
++ void cb_write_queue(const std::string& msg);
+ void do_write_start();
+- void cb_write_done(const boost::system::error_code &error);
++ void cb_write_done(const boost::system::error_code& error, size_t length);
+
+ void process_connection();
+- void process_error(const boost::system::error_code &error);
++ void process_error(const boost::system::error_code& error);
+
+- bool mIsConnected = false;
+- bool mIsReconnecting = false;
+- bool mIsTerminating = false;
++ bool m_bIsConnected = false;
++ bool m_bIsReconnecting = false;
++ bool m_bIsTerminating = false;
+
+- boost::asio::io_service::strand mSendStrand{ mIos };
+- std::deque<std::string> mWriteQ; // we need a write queue to allow concurrent writes
++ boost::asio::io_context::strand m_SendStrand;
++ std::deque<std::string> m_WriteQ; // we need a write queue to allow concurrent writes
+
+ uint8_t* m_pRXBuffer = nullptr;
+
+- int mReconnectDelay = DEFAULT_RECONNECT_TIME;
+- int mTimeoutDelay = 0;
+- boost::asio::deadline_timer mReconnectTimer{ mIos };
+- boost::asio::deadline_timer mTimeoutTimer{ mIos };
++ int m_iReconnectDelay = DEFAULT_RECONNECT_TIME;
++ int m_iTimeoutDelay = 0;
++ boost::asio::deadline_timer m_ReconnectTimer;
++ boost::asio::deadline_timer m_TimeoutTimer;
+
+- std::shared_ptr<std::thread> mTcpthread;
+- std::shared_ptr<boost::asio::io_service::work> mTcpwork;
++ std::shared_ptr<std::thread> m_Tcpthread;
++ std::optional<boost::asio::executor_work_guard<boost::asio::io_context::executor_type>> m_Tcpwork;
+
+ #ifdef WWW_ENABLE_SSL
+- const bool mSecure;
++ const bool m_bSecure;
+ boost::asio::ssl::context mContext{ boost::asio::ssl::context::sslv23 };
+- std::shared_ptr<boost::asio::ssl::stream<boost::asio::ip::tcp::socket>> mSslSocket; // the ssl socket
++ std::shared_ptr<boost::asio::ssl::stream<boost::asio::ip::tcp::socket>> m_SslSocket;
+ #endif
+- boost::asio::ip::tcp::socket mSocket{ mIos };
+- boost::asio::ip::tcp::endpoint mEndPoint;
+- boost::asio::ip::tcp::resolver mResolver{ mIos };
++ boost::asio::ip::tcp::socket m_Socket;
++ boost::asio::ip::tcp::resolver m_Resolver;
+
+- std::string mIp;
+- uint16_t mPort;
++ std::string m_IP;
++ uint16_t m_Port;
+ };
+diff --git hardware/Arilux.cpp hardware/Arilux.cpp
+index 400f5a3..20bc373 100644
+--- hardware/Arilux.cpp
++++ hardware/Arilux.cpp
+@@ -79,7 +79,7 @@ void Arilux::InsertUpdateSwitch(const std::string &lightName, const int subType,
+ {
+ uint32_t sID;
+ try {
+- sID = boost::asio::ip::address_v4::from_string(location).to_ulong();
++ sID = boost::asio::ip::make_address_v4(location).to_uint();
+ } catch (const std::exception &e) {
+ Log(LOG_ERROR, "Bad IP address: %s (%s)", location.c_str(), e.what());
+ return;
+@@ -112,8 +112,8 @@ bool Arilux::SendTCPCommand(uint32_t ip,std::vector<unsigned char> &command)
+ sum = sum & 0xFF;
+ command.push_back((unsigned char)sum);
+
+- boost::asio::io_service io_service;
+- boost::asio::ip::tcp::socket sendSocket(io_service);
++ boost::asio::io_context io_context;
++ boost::asio::ip::tcp::socket sendSocket(io_context);
+ boost::asio::ip::address_v4 address(ip);
+ boost::asio::ip::tcp::endpoint endpoint(address, 5577);
+ try
+diff --git hardware/Kodi.cpp hardware/Kodi.cpp
+index b528017..5ababf6 100644
+--- hardware/Kodi.cpp
++++ hardware/Kodi.cpp
+@@ -143,14 +143,14 @@ _eNotificationTypes CKodiNode::CKodiStatus::NotificationType()
+ }
+ }
+
+-CKodiNode::CKodiNode(boost::asio::io_service *pIos, const int pHwdID, const int PollIntervalsec, const int pTimeoutMs,
++CKodiNode::CKodiNode(boost::asio::io_context *pIoc, const int pHwdID, const int PollIntervalsec, const int pTimeoutMs,
+ const std::string& pID, const std::string& pName, const std::string& pIP, const std::string& pPort)
+ {
+ m_Busy = false;
+ m_Stoppable = false;
+ m_PlaylistPosition = 0;
+
+- m_Ios = pIos;
++ m_Ioc = pIoc;
+ m_HwdID = pHwdID;
+ m_DevID = atoi(pID.c_str());
+ sprintf(m_szDevID, "%X%02X%02X%02X", 0, 0, (m_DevID & 0xFF00) >> 8, m_DevID & 0xFF);
+@@ -581,11 +581,10 @@ void CKodiNode::handleConnect()
+ {
+ m_iMissedPongs = 0;
+ boost::system::error_code ec;
+- boost::asio::ip::tcp::resolver resolver(*m_Ios);
+- boost::asio::ip::tcp::resolver::query query(m_IP, (m_Port[0] != '-' ? m_Port : m_Port.substr(1)));
+- auto iter = resolver.resolve(query);
+- boost::asio::ip::tcp::endpoint endpoint = *iter;
+- m_Socket = new boost::asio::ip::tcp::socket(*m_Ios);
++ boost::asio::ip::tcp::resolver resolver(*m_Ioc);
++ auto iter = resolver.resolve(m_IP, (m_Port[0] != '-' ? m_Port : m_Port.substr(1)));
++ boost::asio::ip::tcp::endpoint endpoint = *iter.begin();
++ m_Socket = new boost::asio::ip::tcp::socket(*m_Ioc);
+ m_Socket->connect(endpoint, ec);
+ if (!ec)
+ {
+@@ -975,19 +974,19 @@ void CKodi::Do_Work()
+ _log.Log(LOG_NORM, "Kodi: (%s) - Restarting thread.", node->m_Name.c_str());
+ boost::thread *tAsync = new boost::thread(&CKodiNode::Do_Work, node);
+ SetThreadName(tAsync->native_handle(), "KodiNode");
+- m_ios.stop();
++ m_ioc.stop();
+ }
+ if (node->IsOn())
+ bWorkToDo = true;
+ }
+
+- if (bWorkToDo && m_ios.stopped()) // make sure that there is a boost thread to service i/o operations
++ if (bWorkToDo && m_ioc.stopped()) // make sure that there is a boost thread to service i/o operations
+ {
+- m_ios.reset();
++ m_ioc.restart();
+ // Note that this is the only thread that handles async i/o so we don't
+ // need to worry about locking or concurrency issues when processing messages
+ _log.Log(LOG_NORM, "Kodi: Restarting I/O service thread.");
+- boost::thread bt([p = &m_ios] { p->run(); });
++ boost::thread bt([p = &m_ioc] { p->run(); });
+ SetThreadName(bt.native_handle(), "KodiIO");
+ }
+ }
+@@ -1138,7 +1137,7 @@ void CKodi::ReloadNodes()
+ {
+ UnloadNodes();
+
+- m_ios.reset(); // in case this is not the first time in
++ m_ioc.restart(); // in case this is not the first time in
+
+ std::vector<std::vector<std::string> > result;
+ result = m_sql.safe_query("SELECT ID,Name,MacAddress,Timeout FROM WOLNodes WHERE (HardwareID==%d)", m_HwdID);
+@@ -1149,7 +1148,7 @@ void CKodi::ReloadNodes()
+ // create a vector to hold the nodes
+ for (const auto &sd : result)
+ {
+- auto pNode = std::make_shared<CKodiNode>(&m_ios, m_HwdID, m_iPollInterval, m_iPingTimeoutms, sd[0], sd[1], sd[2], sd[3]);
++ auto pNode = std::make_shared<CKodiNode>(&m_ioc, m_HwdID, m_iPollInterval, m_iPingTimeoutms, sd[0], sd[1], sd[2], sd[3]);
+ m_pNodes.push_back(pNode);
+ }
+ // start the threads to control each kodi
+@@ -1161,7 +1160,7 @@ void CKodi::ReloadNodes()
+ }
+ sleep_milliseconds(100);
+ _log.Log(LOG_NORM, "Kodi: Starting I/O service thread.");
+- boost::thread bt([p = &m_ios] { p->run(); });
++ boost::thread bt([p = &m_ioc] { p->run(); });
+ SetThreadName(bt.native_handle(), "KodiIO");
+ }
+ }
+@@ -1170,10 +1169,10 @@ void CKodi::UnloadNodes()
+ {
+ std::lock_guard<std::mutex> l(m_mutex);
+
+- m_ios.stop(); // stop the service if it is running
++ m_ioc.stop(); // stop the service if it is running
+ sleep_milliseconds(100);
+
+- while (((!m_pNodes.empty()) || (!m_ios.stopped())))
++ while (((!m_pNodes.empty()) || (!m_ioc.stopped())))
+ {
+ for (auto itt = m_pNodes.begin(); itt != m_pNodes.end(); ++itt)
+ {
+diff --git hardware/Kodi.h hardware/Kodi.h
+index 14f331c..4435740 100644
+--- hardware/Kodi.h
++++ hardware/Kodi.h
+@@ -150,7 +150,7 @@ class CKodiNode : public std::enable_shared_from_this<CKodiNode>, StoppableTask
+ };
+
+ public:
+- CKodiNode(boost::asio::io_service *, int, int, int, const std::string &, const std::string &, const std::string &, const std::string &);
++ CKodiNode(boost::asio::io_context *, int, int, int, const std::string &, const std::string &, const std::string &, const std::string &);
+ ~CKodiNode();
+ void Do_Work();
+ void SendCommand(const std::string &);
+@@ -207,7 +207,7 @@ class CKodiNode : public std::enable_shared_from_this<CKodiNode>, StoppableTask
+ int m_iPollIntSec;
+ int m_iMissedPongs;
+ std::string m_sLastMessage;
+- boost::asio::io_service *m_Ios;
++ boost::asio::io_context *m_Ioc;
+ boost::asio::ip::tcp::socket *m_Socket;
+ std::array<char, 256> m_Buffer;
+ };
+@@ -243,5 +243,5 @@ class CKodi : public CDomoticzHardwareBase
+ int m_iPingTimeoutms;
+ std::shared_ptr<std::thread> m_thread;
+ std::mutex m_mutex;
+- boost::asio::io_service m_ios;
++ boost::asio::io_context m_ioc;
+ };
+diff --git hardware/MQTTAutoDiscover.h hardware/MQTTAutoDiscover.h
+index 0832664..1501d6f 100644
+--- hardware/MQTTAutoDiscover.h
++++ hardware/MQTTAutoDiscover.h
+@@ -176,7 +176,7 @@ public:
+ void on_message(const struct mosquitto_message *message) override;
+ void on_connect(int rc) override;
+ void on_disconnect(int rc) override;
+- void on_going_down();
++ void on_going_down() override;
+ private:
+ void InsertUpdateSwitch(_tMQTTASensor* pSensor);
+
+diff --git hardware/PanasonicTV.cpp hardware/PanasonicTV.cpp
+index fc57d34..ce20565 100644
+--- hardware/PanasonicTV.cpp
++++ hardware/PanasonicTV.cpp
+@@ -356,18 +356,17 @@ std::string CPanasonicNode::handleWriteAndRead(const std::string& pMessageToSend
+ {
+
+ _log.Debug(DEBUG_HARDWARE, "Panasonic Plugin: (%s) Handling message: '%s'.", m_Name.c_str(), pMessageToSend.c_str());
+- boost::asio::io_service io_service;
++ boost::asio::io_context io_context;
+ // Get a list of endpoints corresponding to the server name.
+- boost::asio::ip::tcp::resolver resolver(io_service);
+- boost::asio::ip::tcp::resolver::query query(m_IP, (m_Port[0] != '-' ? m_Port : m_Port.substr(1)));
+- auto iter = resolver.resolve(query);
++ boost::asio::ip::tcp::resolver resolver(io_context);
++ auto endpoints = resolver.resolve(m_IP, (m_Port[0] != '-' ? m_Port : m_Port.substr(1)));
++ auto iter = endpoints.begin();
+ boost::asio::ip::tcp::endpoint endpoint = *iter;
+- boost::asio::ip::tcp::resolver::iterator end;
+
+ // Try each endpoint until we successfully establish a connection.
+- boost::asio::ip::tcp::socket socket(io_service);
++ boost::asio::ip::tcp::socket socket(io_context);
+ boost::system::error_code error = boost::asio::error::host_not_found;
+- while (error && iter != end)
++ while (error && iter != endpoints.end())
+ {
+ socket.close();
+ if (handleConnect(socket, *iter, error))
+@@ -1060,7 +1059,7 @@ void CPanasonic::ReloadNodes()
+ {
+ UnloadNodes();
+
+- //m_ios.reset(); // in case this is not the first time in
++ //m_ioc.reset(); // in case this is not the first time in
+
+ std::vector<std::vector<std::string> > result;
+ result = m_sql.safe_query("SELECT ID,Name,MacAddress,Timeout FROM WOLNodes WHERE (HardwareID==%d)", m_HwdID);
+@@ -1088,10 +1087,10 @@ void CPanasonic::UnloadNodes()
+ {
+ std::lock_guard<std::mutex> l(m_mutex);
+
+- m_ios.stop(); // stop the service if it is running
++ m_ioc.stop(); // stop the service if it is running
+ sleep_milliseconds(100);
+
+- while (((!m_pNodes.empty()) || (!m_ios.stopped())))
++ while (((!m_pNodes.empty()) || (!m_ioc.stopped())))
+ {
+ for (auto itt = m_pNodes.begin(); itt != m_pNodes.end(); ++itt)
+ {
+diff --git hardware/PanasonicTV.h hardware/PanasonicTV.h
+index b0a94ff..30e1ca1 100644
+--- hardware/PanasonicTV.h
++++ hardware/PanasonicTV.h
+@@ -39,7 +39,7 @@ class CPanasonic : public CDomoticzHardwareBase
+ bool m_bTryIfOff;
+ std::shared_ptr<std::thread> m_thread;
+ std::mutex m_mutex;
+- boost::asio::io_service m_ios;
++ boost::asio::io_context m_ioc;
+
+ friend class CPanasonicNode;
+ };
+diff --git hardware/Pinger.cpp hardware/Pinger.cpp
+index a66c7a1..e070b29 100644
+--- hardware/Pinger.cpp
++++ hardware/Pinger.cpp
+@@ -21,23 +21,23 @@
+ #if BOOST_VERSION >= 107000
+ #define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context())
+ #else
+-#define GET_IO_SERVICE(s) ((s).get_io_service())
++#define GET_IO_SERVICE(s) ((s).get_io_context())
+ #endif
+
+ class pinger
+ : private domoticz::noncopyable
+ {
+ public:
+- pinger(boost::asio::io_service &io_service, const char *destination, const int iPingTimeoutms)
++ pinger(boost::asio::io_context &io_context, const char *destination, const int iPingTimeoutms)
+ : num_replies_(0)
+ , m_PingState(false)
+- , resolver_(io_service)
+- , socket_(io_service, boost::asio::ip::icmp::v4())
+- , timer_(io_service)
++ , resolver_(io_context)
++ , socket_(io_context, boost::asio::ip::icmp::v4())
++ , timer_(io_context)
+ , sequence_number_(0)
+ {
+- boost::asio::ip::icmp::resolver::query query(boost::asio::ip::icmp::v4(), destination, "");
+- destination_ = *resolver_.resolve(query);
++ auto endpoints = resolver_.resolve(boost::asio::ip::icmp::v4(), destination, "");
++ destination_ = endpoints.begin()->endpoint();
+
+ num_tries_ = 1;
+ PingTimeoutms_ = iPingTimeoutms;
+@@ -332,11 +332,11 @@ void CPinger::ReloadNodes()
+ void CPinger::Do_Ping_Worker(const PingNode &Node)
+ {
+ bool bPingOK = false;
+- boost::asio::io_service io_service;
++ boost::asio::io_context io_context;
+ try
+ {
+- pinger p(io_service, Node.IP.c_str(), m_iPingTimeoutms);
+- io_service.run();
++ pinger p(io_context, Node.IP.c_str(), m_iPingTimeoutms);
++ io_context.run();
+ if (p.m_PingState == true)
+ {
+ bPingOK = true;
+diff --git hardware/RFLinkMQTT.h hardware/RFLinkMQTT.h
+index e938328..72433b8 100644
+--- hardware/RFLinkMQTT.h
++++ hardware/RFLinkMQTT.h
+@@ -46,7 +46,7 @@ protected:
+ boost::signals2::connection m_sDeviceReceivedConnection;
+ boost::signals2::connection m_sSwitchSceneConnection;
+ void selectNextIPAdress( void );
+- virtual bool WriteInt(const std::string &sendString); // override;
++ bool WriteInt(const std::string &sendString) override;
+ void Do_Work();
+ virtual void SendHeartbeat();
+ void StopMQTT();
+diff --git hardware/TCPProxy/tcpproxy_server.cpp hardware/TCPProxy/tcpproxy_server.cpp
+index 8aceb0b..d77d4bf 100644
+--- hardware/TCPProxy/tcpproxy_server.cpp
++++ hardware/TCPProxy/tcpproxy_server.cpp
+@@ -18,12 +18,12 @@
+ #if BOOST_VERSION >= 107000
+ #define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context())
+ #else
+-#define GET_IO_SERVICE(s) ((s).get_io_service())
++#define GET_IO_SERVICE(s) ((s).get_io_context())
+ #endif
+
+ namespace tcp_proxy
+ {
+- bridge::bridge(boost::asio::io_service& ios)
++ bridge::bridge(boost::asio::io_context& ios)
+ : downstream_socket_(ios),
+ upstream_socket_(ios)
+ {
+@@ -44,7 +44,7 @@ namespace tcp_proxy
+ boost::asio::ip::tcp::endpoint end;
+
+
+- boost::asio::io_service &ios= GET_IO_SERVICE(downstream_socket_);
++ boost::asio::io_context &ios= GET_IO_SERVICE(downstream_socket_);
+ boost::asio::ip::tcp::resolver resolver(ios);
+ boost::asio::ip::tcp::resolver::query query(upstream_host, upstream_port, boost::asio::ip::resolver_query_base::numeric_service);
+ auto i = resolver.resolve(query);
+@@ -137,10 +137,10 @@ namespace tcp_proxy
+ }
+ //Acceptor Class
+ acceptor::acceptor(const std::string &local_host, unsigned short local_port, const std::string &upstream_host, const std::string &upstream_port)
+- : io_service_()
++ : io_context_()
+ , m_bDoStop(false)
+ , localhost_address(boost::asio::ip::address_v4::from_string(local_host))
+- , acceptor_(io_service_, boost::asio::ip::tcp::endpoint(localhost_address, local_port))
++ , acceptor_(io_context_, boost::asio::ip::tcp::endpoint(localhost_address, local_port))
+ , upstream_host_(upstream_host)
+ , upstream_port_(upstream_port)
+ {
+@@ -151,7 +151,7 @@ namespace tcp_proxy
+ {
+ try
+ {
+- session_ = std::make_shared<bridge>(io_service_);
++ session_ = std::make_shared<bridge>(io_context_);
+ session_->sDownstreamData.connect([this](auto d, auto l) { OnDownstreamData(d, l); });
+ session_->sUpstreamData.connect([this](auto d, auto l) { OnUpstreamData(d, l); });
+
+@@ -169,11 +169,11 @@ namespace tcp_proxy
+ m_bDoStop=false;
+
+ accept_connections();
+- // The io_service::run() call will block until all asynchronous operations
++ // The io_context::run() call will block until all asynchronous operations
+ // have finished. While the server is running, there is always at least one
+ // asynchronous operation outstanding: the asynchronous accept call waiting
+ // for new incoming connections.
+- io_service_.run();
++ io_context_.run();
+ return true;
+ }
+ bool acceptor::stop()
+@@ -181,14 +181,14 @@ namespace tcp_proxy
+ m_bDoStop=true;
+ // Post a call to the stop function so that server::stop() is safe to call
+ // from any thread.
+- io_service_.post([this] { handle_stop(); });
++ io_context_.post([this] { handle_stop(); });
+ return true;
+ }
+
+ void acceptor::handle_stop()
+ {
+ // The server is stopped by canceling all outstanding asynchronous
+- // operations. Once all operations have finished the io_service::run() call
++ // operations. Once all operations have finished the io_context::run() call
+ // will exit.
+ acceptor_.close();
+ //connection_manager_.stop_all();
+diff --git hardware/TCPProxy/tcpproxy_server.h hardware/TCPProxy/tcpproxy_server.h
+index 3d1a150..148e65f 100644
+--- hardware/TCPProxy/tcpproxy_server.h
++++ hardware/TCPProxy/tcpproxy_server.h
+@@ -10,7 +10,7 @@ namespace tcp_proxy
+ class bridge : public std::enable_shared_from_this<bridge>
+ {
+ public:
+- explicit bridge(boost::asio::io_service& ios);
++ explicit bridge(boost::asio::io_context& ios);
+ boost::asio::ip::tcp::socket& downstream_socket();
+ boost::asio::ip::tcp::socket& upstream_socket();
+
+@@ -52,8 +52,8 @@ namespace tcp_proxy
+ void OnUpstreamData(const unsigned char *pData, size_t Len);
+ void OnDownstreamData(const unsigned char *pData, size_t Len);
+
+- /// The io_service used to perform asynchronous operations.
+- boost::asio::io_service io_service_;
++ /// The io_context used to perform asynchronous operations.
++ boost::asio::io_context io_context_;
+ bool m_bDoStop;
+ boost::asio::ip::address_v4 localhost_address;
+ boost::asio::ip::tcp::acceptor acceptor_;
+diff --git hardware/XiaomiDeviceSupport.h hardware/XiaomiDeviceSupport.h
+index fad7884..4a76d96 100644
+--- hardware/XiaomiDeviceSupport.h
++++ hardware/XiaomiDeviceSupport.h
+@@ -15,6 +15,7 @@
+ class XiaomiDeviceSupport
+ {
+ public:
++ virtual ~XiaomiDeviceSupport() = default;
+ /**
+ * Method to get 'model' corresponding to the ID of the device in case the Gateway API didn't provide it.
+ *
+diff --git hardware/XiaomiGateway.cpp hardware/XiaomiGateway.cpp
+index 66acdc5..fb4387a 100644
+--- hardware/XiaomiGateway.cpp
++++ hardware/XiaomiGateway.cpp
+@@ -538,12 +538,12 @@ bool XiaomiGateway::SendMessageToGateway(const std::string &controlmessage)
+ {
+ std::string message = controlmessage;
+ bool result = true;
+- boost::asio::io_service io_service;
+- boost::asio::ip::udp::socket socket_(io_service, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0));
++ boost::asio::io_context io_context;
++ boost::asio::ip::udp::socket socket_(io_context, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0));
+ stdreplace(message, "@gatewaykey", GetGatewayKey());
+ std::shared_ptr<std::string> message1(new std::string(message));
+ boost::asio::ip::udp::endpoint remote_endpoint_;
+- remote_endpoint_ = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string(m_GatewayIp), 9898);
++ remote_endpoint_ = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4(m_GatewayIp), 9898);
+ socket_.send_to(boost::asio::buffer(*message1), remote_endpoint_);
+ sleep_milliseconds(150); // TODO: reduce or remove sleep
+ std::array<char, 512> recv_buffer_;
+@@ -1015,15 +1015,14 @@ bool XiaomiGateway::StopHardware()
+ void XiaomiGateway::Do_Work()
+ {
+ Log(LOG_STATUS, "XiaomiGateway (ID=%d): Worker started...", m_HwdID);
+- boost::asio::io_service io_service;
++ boost::asio::io_context io_context;
+ // Find the local ip address that is similar to the xiaomi gateway
+ try
+ {
+- boost::asio::ip::udp::resolver resolver(io_service);
+- boost::asio::ip::udp::resolver::query query(boost::asio::ip::udp::v4(), m_GatewayIp, "");
+- auto endpoints = resolver.resolve(query);
+- boost::asio::ip::udp::endpoint ep = *endpoints;
+- boost::asio::ip::udp::socket socket(io_service);
++ boost::asio::ip::udp::resolver resolver(io_context);
++ auto endpoints = resolver.resolve(boost::asio::ip::udp::v4(), m_GatewayIp, "");
++ boost::asio::ip::udp::endpoint ep = *endpoints.begin();
++ boost::asio::ip::udp::socket socket(io_context);
+ socket.connect(ep);
+ boost::asio::ip::address addr = socket.local_endpoint().address();
+ std::string compareIp = m_GatewayIp.substr(0, (m_GatewayIp.length() - 3));
+@@ -1073,11 +1072,11 @@ void XiaomiGateway::Do_Work()
+ }
+ }
+
+- XiaomiGateway::xiaomi_udp_server udp_server(io_service, m_HwdID, m_GatewayIp, m_LocalIp, m_ListenPort9898, m_OutputMessage, m_IncludeVoltage, this);
++ XiaomiGateway::xiaomi_udp_server udp_server(io_context, m_HwdID, m_GatewayIp, m_LocalIp, m_ListenPort9898, m_OutputMessage, m_IncludeVoltage, this);
+ boost::thread bt;
+ if (m_ListenPort9898)
+ {
+- bt = boost::thread([p = &io_service] { p->run(); });
++ bt = boost::thread([p = &io_context] { p->run(); });
+ SetThreadName(bt.native_handle(), "XiaomiGatewayIO");
+ }
+
+@@ -1094,7 +1093,7 @@ void XiaomiGateway::Do_Work()
+ // Log(LOG_STATUS, "sec_counter %d", sec_counter);
+ }
+ }
+- io_service.stop();
++ io_context.stop();
+ if (bt.joinable())
+ {
+ bt.join();
+@@ -1178,9 +1177,9 @@ unsigned int XiaomiGateway::GetShortID(const std::string &nodeid)
+ return sID;
+ }
+
+-XiaomiGateway::xiaomi_udp_server::xiaomi_udp_server(boost::asio::io_service &io_service, int m_HwdID, const std::string &gatewayIp, const std::string &localIp, const bool listenPort9898,
++XiaomiGateway::xiaomi_udp_server::xiaomi_udp_server(boost::asio::io_context &io_context, int m_HwdID, const std::string &gatewayIp, const std::string &localIp, const bool listenPort9898,
+ const bool outputMessage, const bool includeVoltage, XiaomiGateway *parent)
+- : socket_(io_service, boost::asio::ip::udp::v4())
++ : socket_(io_context, boost::asio::ip::udp::v4())
+ {
+ m_HardwareID = m_HwdID;
+ m_XiaomiGateway = parent;
+@@ -1196,8 +1195,8 @@ XiaomiGateway::xiaomi_udp_server::xiaomi_udp_server(boost::asio::io_service &io_
+ if (!m_localip.empty())
+ {
+ boost::system::error_code ec;
+- boost::asio::ip::address listen_addr = boost::asio::ip::address::from_string(m_localip, ec);
+- boost::asio::ip::address mcast_addr = boost::asio::ip::address::from_string("224.0.0.50", ec);
++ boost::asio::ip::address listen_addr = boost::asio::ip::make_address_v4(m_localip, ec);
++ boost::asio::ip::address mcast_addr = boost::asio::ip::make_address_v4("224.0.0.50", ec);
+ boost::asio::ip::udp::endpoint listen_endpoint(mcast_addr, 9898);
+
+ socket_.bind(boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 9898));
+@@ -1213,9 +1212,9 @@ XiaomiGateway::xiaomi_udp_server::xiaomi_udp_server(boost::asio::io_service &io_
+ socket_.bind(boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 9898));
+ std::shared_ptr<std::string> message(new std::string(R"({"cmd":"whois"})"));
+ boost::asio::ip::udp::endpoint remote_endpoint;
+- remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string("224.0.0.50"), 4321);
++ remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4("224.0.0.50"), 4321);
+ socket_.send_to(boost::asio::buffer(*message), remote_endpoint);
+- socket_.set_option(boost::asio::ip::multicast::join_group(boost::asio::ip::address::from_string("224.0.0.50")));
++ socket_.set_option(boost::asio::ip::multicast::join_group(boost::asio::ip::make_address_v4("224.0.0.50")));
+ }
+ }
+ catch (const boost::system::system_error &ex)
+@@ -1720,7 +1719,7 @@ void XiaomiGateway::xiaomi_udp_server::handle_receive(const boost::system::error
+ message.append("\"}");
+ std::shared_ptr<std::string> message1(new std::string(message));
+ boost::asio::ip::udp::endpoint remote_endpoint;
+- remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string(TrueGateway->GetGatewayIp().c_str()), 9898);
++ remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4(TrueGateway->GetGatewayIp().c_str()), 9898);
+ socket_.send_to(boost::asio::buffer(*message1), remote_endpoint);
+ }
+ }
+@@ -1746,7 +1745,7 @@ void XiaomiGateway::xiaomi_udp_server::handle_receive(const boost::system::error
+ std::string message = R"({"cmd" : "get_id_list"})";
+ std::shared_ptr<std::string> message2(new std::string(message));
+ boost::asio::ip::udp::endpoint remote_endpoint;
+- remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string(TrueGateway->GetGatewayIp().c_str()), 9898);
++ remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4(TrueGateway->GetGatewayIp().c_str()), 9898);
+ socket_.send_to(boost::asio::buffer(*message2), remote_endpoint);
+ }
+ }
+diff --git hardware/XiaomiGateway.h hardware/XiaomiGateway.h
+index dce4b34..1f552f3 100644
+--- hardware/XiaomiGateway.h
++++ hardware/XiaomiGateway.h
+@@ -100,7 +100,7 @@ class XiaomiGateway : public CDomoticzHardwareBase
+ class xiaomi_udp_server
+ {
+ public:
+- xiaomi_udp_server(boost::asio::io_service &io_service, int m_HwdID, const std::string &gatewayIp, const std::string &localIp, bool listenPort9898, bool outputMessage,
++ xiaomi_udp_server(boost::asio::io_context &io_context, int m_HwdID, const std::string &gatewayIp, const std::string &localIp, bool listenPort9898, bool outputMessage,
+ bool includeVolage, XiaomiGateway *parent);
+ ~xiaomi_udp_server() = default;
+
+diff --git hardware/Yeelight.cpp hardware/Yeelight.cpp
+index cdb7889..e5fe8fc 100644
+--- hardware/Yeelight.cpp
++++ hardware/Yeelight.cpp
+@@ -93,8 +93,8 @@ void Yeelight::Do_Work()
+
+ try
+ {
+- boost::asio::io_service io_service;
+- udp_server server(io_service, m_HwdID);
++ boost::asio::io_context io_context;
++ udp_server server(io_context, m_HwdID);
+ int sec_counter = YEELIGHT_POLL_INTERVAL - 5;
+ while (!IsStopRequested(1000))
+ {
+@@ -105,7 +105,7 @@ void Yeelight::Do_Work()
+ if (sec_counter % 60 == 0) //poll YeeLights every minute
+ {
+ server.start_send();
+- io_service.run();
++ io_context.run();
+ }
+ }
+ }
+@@ -227,12 +227,11 @@ bool Yeelight::WriteToHardware(const char *pdata, const unsigned char length)
+
+ try
+ {
+- boost::asio::io_service io_service;
+- boost::asio::ip::tcp::socket sendSocket(io_service);
+- boost::asio::ip::tcp::resolver resolver(io_service);
+- boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), szTmp, "55443");
+- auto iterator = resolver.resolve(query);
+- boost::asio::connect(sendSocket, iterator);
++ boost::asio::io_context io_context;
++ boost::asio::ip::tcp::socket sendSocket(io_context);
++ boost::asio::ip::tcp::resolver resolver(io_context);
++ auto endpoints = resolver.resolve(boost::asio::ip::tcp::v4(), szTmp, "55443");
++ boost::asio::connect(sendSocket, endpoints);
+
+ std::string message;
+ std::string message2;
+@@ -404,8 +403,8 @@ bool Yeelight::WriteToHardware(const char *pdata, const unsigned char length)
+ std::array<char, 1024> recv_buffer_;
+ int hardwareId;
+
+-Yeelight::udp_server::udp_server(boost::asio::io_service& io_service, int m_HwdID)
+- : socket_(io_service, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0))
++Yeelight::udp_server::udp_server(boost::asio::io_context& io_context, int m_HwdID)
++ : socket_(io_context, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0))
+ {
+ socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));
+ socket_.set_option(boost::asio::socket_base::broadcast(true));
+@@ -421,7 +420,7 @@ void Yeelight::udp_server::start_send()
+ //Log(LOG_STATUS, "start_send..................");
+ std::shared_ptr<std::string> message(
+ new std::string(testMessage));
+- remote_endpoint_ = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string("239.255.255.250"), 1982);
++ remote_endpoint_ = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4("239.255.255.250"), 1982);
+ socket_.send_to(boost::asio::buffer(*message), remote_endpoint_);
+ sleep_milliseconds(150);
+ start_receive();
+diff --git hardware/Yeelight.h hardware/Yeelight.h
+index fb03c28..3b7b4c3 100644
+--- hardware/Yeelight.h
++++ hardware/Yeelight.h
+@@ -25,7 +25,7 @@ class Yeelight : public CDomoticzHardwareBase
+ class udp_server
+ {
+ public:
+- udp_server(boost::asio::io_service &io_service, int m_HwdID);
++ udp_server(boost::asio::io_context &io_context, int m_HwdID);
+ boost::asio::ip::udp::socket socket_;
+ boost::asio::ip::udp::endpoint remote_endpoint_;
+ void start_send();
+diff --git hardware/plugins/PluginManager.cpp hardware/plugins/PluginManager.cpp
+index 2813112..423edbb 100644
+--- hardware/plugins/PluginManager.cpp
++++ hardware/plugins/PluginManager.cpp
+@@ -64,7 +64,7 @@ namespace Plugins {
+ // PyMODINIT_FUNC PyInit_DomoticzEvents(void);
+
+ std::mutex PluginMutex; // controls accessto the message queue and m_pPlugins map
+- boost::asio::io_service ios;
++ boost::asio::io_context ios;
+
+ std::map<int, CDomoticzHardwareBase*> CPluginSystem::m_pPlugins;
+ std::map<std::string, std::string> CPluginSystem::m_PluginXml;
+@@ -315,7 +315,7 @@ namespace Plugins {
+ // Create initial IO Service thread
+ ios.restart();
+ // Create some work to keep IO Service alive
+- auto work = boost::asio::io_service::work(ios);
++ auto work = boost::asio::make_work_guard(ios);
+ boost::thread_group BoostThreads;
+ for (int i = 0; i < 1; i++)
+ {
+diff --git hardware/plugins/PluginTransports.cpp hardware/plugins/PluginTransports.cpp
+index 52d14e7..f7ace0f 100644
+--- hardware/plugins/PluginTransports.cpp
++++ hardware/plugins/PluginTransports.cpp
+@@ -116,15 +116,14 @@ namespace Plugins {
+ m_bConnected = false;
+ m_Socket = new boost::asio::ip::tcp::socket(ios);
+
+- boost::system::error_code ec;
+- boost::asio::ip::tcp::resolver::query query(m_IP, m_Port);
+- auto iter = m_Resolver.resolve(query);
+- boost::asio::ip::tcp::endpoint endpoint = *iter;
+-
+ //
+ // Async resolve/connect based on http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio/example/http/client/async_client.cpp
+ //
+- m_Resolver.async_resolve(query, [this](auto &&err, auto end) { handleAsyncResolve(err, end); });
++ m_Resolver.async_resolve(m_IP, m_Port,
++ [this](auto &&err, auto endpoints) {
++ handleAsyncResolve(err, endpoints);
++ }
++ );
+ }
+ }
+ catch (std::exception& e)
+@@ -139,15 +138,14 @@ namespace Plugins {
+ return true;
+ }
+
+- void CPluginTransportTCP::handleAsyncResolve(const boost::system::error_code & err, boost::asio::ip::tcp::resolver::iterator endpoint_iterator)
++ void CPluginTransportTCP::handleAsyncResolve(const boost::system::error_code & err, boost::asio::ip::tcp::resolver::results_type endpoints)
+ {
+ CPlugin* pPlugin = ((CConnection*)m_pConnection)->pPlugin;
+ AccessPython Guard(pPlugin, "CPluginTransportTCP::handleAsyncResolve");
+
+ if (!err)
+ {
+- boost::asio::ip::tcp::endpoint endpoint = *endpoint_iterator;
+- m_Socket->async_connect(endpoint, [this, endpoint_iterator](auto &&err) mutable { handleAsyncConnect(err, ++endpoint_iterator); });
++ boost::asio::async_connect(*m_Socket, endpoints, [this](auto &&err, const boost::asio::ip::tcp::endpoint &endpoint) mutable { handleAsyncConnect(err, endpoint); });
+ }
+ else
+ {
+@@ -169,7 +167,7 @@ namespace Plugins {
+ }
+ }
+
+- void CPluginTransportTCP::handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::resolver::iterator &endpoint_iterator)
++ void CPluginTransportTCP::handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::endpoint &endpoint)
+ {
+ CPlugin* pPlugin = ((CConnection*)m_pConnection)->pPlugin;
+ AccessPython Guard(pPlugin, "CPluginTransportTCP::handleAsyncResolve");
+@@ -481,7 +479,7 @@ namespace Plugins {
+ }
+ };
+
+- void CPluginTransportTCPSecure::handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::resolver::iterator &endpoint_iterator)
++ void CPluginTransportTCPSecure::handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::endpoint &endpoint)
+ {
+ CPlugin* pPlugin = ((CConnection*)m_pConnection)->pPlugin;
+ if (!pPlugin) return;
+@@ -498,7 +496,7 @@ namespace Plugins {
+ SSL_set_tlsext_host_name(m_TLSSock->native_handle(), m_IP.c_str()); // Enable SNI
+
+ m_TLSSock->set_verify_mode(boost::asio::ssl::verify_none);
+- m_TLSSock->set_verify_callback(boost::asio::ssl::rfc2818_verification(m_IP));
++ m_TLSSock->set_verify_callback(boost::asio::ssl::host_name_verification(m_IP));
+ // m_TLSSock->set_verify_callback([this](auto v, auto &c){ VerifyCertificate(v, c);});
+ try
+ {
+@@ -648,7 +646,7 @@ namespace Plugins {
+ // Hanlde multicast
+ if (((m_IP.substr(0, 4) >= "224.") && (m_IP.substr(0, 4) <= "239.")) || (m_IP.substr(0, 4) == "255."))
+ {
+- m_Socket->set_option(boost::asio::ip::multicast::join_group(boost::asio::ip::address::from_string(m_IP.c_str())), ec);
++ m_Socket->set_option(boost::asio::ip::multicast::join_group(boost::asio::ip::make_address_v4(m_IP.c_str())), ec);
+ m_Socket->set_option(boost::asio::ip::multicast::hops(2), ec);
+ }
+ }
+@@ -764,7 +762,7 @@ namespace Plugins {
+ }
+ else
+ {
+- boost::asio::ip::udp::endpoint destination(boost::asio::ip::address::from_string(m_IP.c_str()), atoi(m_Port.c_str()));
++ boost::asio::ip::udp::endpoint destination(boost::asio::ip::make_address_v4(m_IP.c_str()), atoi(m_Port.c_str()));
+ size_t bytes_transferred = m_Socket->send_to(boost::asio::buffer(pMessage, pMessage.size()), destination);
+ }
+ }
+@@ -825,12 +823,14 @@ namespace Plugins {
+ }
+ };
+
+- void CPluginTransportICMP::handleAsyncResolve(const boost::system::error_code &ec, const boost::asio::ip::icmp::resolver::iterator &endpoint_iterator)
++ void CPluginTransportICMP::handleAsyncResolve(const boost::system::error_code &ec, boost::asio::ip::icmp::resolver::results_type endpoints)
+ {
+ if (!ec)
+ {
++ m_Endpoint = endpoints.begin()->endpoint();
++ m_IP = m_Endpoint.address().to_string();
++
+ m_bConnected = true;
+- m_IP = endpoint_iterator->endpoint().address().to_string();
+
+ // Listen will fail (10022 - bad parameter) unless something has been sent(?)
+ std::string body("ping");
+@@ -857,15 +857,11 @@ namespace Plugins {
+ m_bConnecting = true;
+ m_Socket = new boost::asio::ip::icmp::socket(ios, boost::asio::ip::icmp::v4());
+
+- boost::system::error_code ec;
+- boost::asio::ip::icmp::resolver::query query(boost::asio::ip::icmp::v4(), m_IP, "");
+- auto iter = m_Resolver.resolve(query);
+- m_Endpoint = *iter;
+-
+- //
+- // Async resolve/connect based on http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/example/icmp/ping.cpp
+- //
+- m_Resolver.async_resolve(query, [this](auto &&err, auto i) { handleAsyncResolve(err, i); });
++ m_Resolver.async_resolve(boost::asio::ip::icmp::v4(), m_IP, "",
++ [this](auto &&err, auto endpoints) {
++ handleAsyncResolve(err, endpoints);
++ }
++ );
+ }
+ else
+ {
+diff --git hardware/plugins/PluginTransports.h hardware/plugins/PluginTransports.h
+index c1cc1e3..79d5725 100644
+--- hardware/plugins/PluginTransports.h
++++ hardware/plugins/PluginTransports.h
+@@ -6,7 +6,7 @@
+
+ namespace Plugins {
+
+- extern boost::asio::io_service ios;
++ extern boost::asio::io_context ios;
+
+ class CPluginTransport
+ {
+@@ -85,8 +85,8 @@ namespace Plugins {
+ , m_Socket(nullptr){};
+ bool handleConnect() override;
+ bool handleListen() override;
+- virtual void handleAsyncResolve(const boost::system::error_code &err, boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
+- virtual void handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::resolver::iterator &endpoint_iterator);
++ virtual void handleAsyncResolve(const boost::system::error_code &err, boost::asio::ip::tcp::resolver::results_type endpoints);
++ virtual void handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::endpoint &endpoint);
+ virtual void handleAsyncAccept(boost::asio::ip::tcp::socket *pSocket, const boost::system::error_code &error);
+ void handleRead(const boost::system::error_code &e, std::size_t bytes_transferred) override;
+ void handleWrite(const std::vector<byte> &pMessage) override;
+@@ -111,7 +111,7 @@ namespace Plugins {
+ : CPluginTransportTCP(HwdID, pConnection, Address, Port)
+ , m_Context(nullptr)
+ , m_TLSSock(nullptr){};
+- void handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::resolver::iterator &endpoint_iterator) override;
++ void handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::endpoint &endpoint) override;
+ void handleRead(const boost::system::error_code &e, std::size_t bytes_transferred) override;
+ void handleWrite(const std::vector<byte> &pMessage) override;
+ ~CPluginTransportTCPSecure() override;
+@@ -151,7 +151,7 @@ namespace Plugins {
+ , m_Socket(nullptr)
+ , m_Timer(nullptr)
+ , m_SequenceNo(-1){};
+- void handleAsyncResolve(const boost::system::error_code &err, const boost::asio::ip::icmp::resolver::iterator &endpoint_iterator);
++ void handleAsyncResolve(const boost::system::error_code &err, boost::asio::ip::icmp::resolver::results_type endpoints);
+ bool handleListen() override;
+ void handleTimeout(const boost::system::error_code &) override;
+ void handleRead(const boost::system::error_code &e, std::size_t bytes_transferred) override;
+diff --git main/WebServerCmds.cpp main/WebServerCmds.cpp
+index 7d4a9f2..3586373 100644
+--- main/WebServerCmds.cpp
++++ main/WebServerCmds.cpp
+@@ -1632,7 +1632,7 @@ namespace http
+ ExtraHeaders.push_back("App_Revision: " + std::to_string(iAppRevision));
+ ExtraHeaders.push_back("System_Name: " + systemname);
+ ExtraHeaders.push_back("Machine: " + machine);
+- ExtraHeaders.push_back("Type: " + (!bIsBetaChannel) ? "Stable" : "Beta");
++ ExtraHeaders.push_back("Type: " + std::string(!bIsBetaChannel ? "Stable" : "Beta"));
+
+ if (!HTTPClient::GET(szHistoryURL, ExtraHeaders, historyfile))
+ {
+diff --git main/mainworker.cpp main/mainworker.cpp
+index b5027eb..b8f8dc7 100644
+--- main/mainworker.cpp
++++ main/mainworker.cpp
+@@ -1318,7 +1318,7 @@ bool MainWorker::IsUpdateAvailable(const bool bIsForced)
+ ExtraHeaders.push_back("App_Revision: " + std::to_string(iAppRevision));
+ ExtraHeaders.push_back("System_Name: " + m_szSystemName);
+ ExtraHeaders.push_back("Machine: " + machine);
+- ExtraHeaders.push_back("Type: " + (!bIsBetaChannel) ? "Stable" : "Beta");
++ ExtraHeaders.push_back("Type: " + std::string(!bIsBetaChannel ? "Stable" : "Beta"));
+
+ if (!HTTPClient::GET(szURL, ExtraHeaders, revfile))
+ return false;
+diff --git plugins/examples/Pinger.py plugins/examples/Pinger.py
+index 6b54559..c7a776d 100644
+--- plugins/examples/Pinger.py
++++ plugins/examples/Pinger.py
+@@ -3,7 +3,7 @@
+ # Author: Dnpwwo, 2017 - 2018
+ #
+ """
+-<plugin key="ICMP" name="Pinger (ICMP)" author="dnpwwo" version="3.1.4">
++<plugin key="ICMP" name="Pinger (ICMP)" author="dnpwwo" version="3.1.5">
+ <description>
+ ICMP Pinger Plugin.<br/><br/>
+ Specify comma delimted addresses (IP or DNS names) of devices that are to be pinged.<br/>
+@@ -144,8 +144,9 @@ class BasePlugin:
+ for Device in Devices:
+ if (("Name" in Devices[Device].Options) and (Devices[Device].Options["Name"] == Connection.Name)):
+ UpdateDevice(Device, 0, "Off", TimedOut)
+- self.icmpConn.Close()
+- self.icmpConn = None
++ if (self.icmpConn != None):
++ self.icmpConn.Close()
++ self.icmpConn = None
+
+ def onHeartbeat(self):
+ Domoticz.Debug("Heartbeating...")
+diff --git push/MQTTPush.h push/MQTTPush.h
+index 0773b43..d9f9332 100644
+--- push/MQTTPush.h
++++ push/MQTTPush.h
+@@ -14,7 +14,7 @@ public:
+ void on_message(const struct mosquitto_message* message) override;
+ void on_connect(int rc) override;
+ void on_disconnect(int rc) override;
+- void on_going_down();
++ void on_going_down() override;
+ private:
+ struct _tPushItem
+ {
+diff --git tcpserver/TCPClient.cpp tcpserver/TCPClient.cpp
+index d55da10..3eee093 100644
+--- tcpserver/TCPClient.cpp
++++ tcpserver/TCPClient.cpp
+@@ -19,7 +19,7 @@ namespace tcp {
+ delete socket_;
+ }
+
+- CTCPClient::CTCPClient(boost::asio::io_service& ios, CTCPServerIntBase* pManager)
++ CTCPClient::CTCPClient(boost::asio::io_context& ios, CTCPServerIntBase* pManager)
+ : CTCPClientBase(pManager)
+ {
+ socket_ = new boost::asio::ip::tcp::socket(ios);
+diff --git tcpserver/TCPClient.h tcpserver/TCPClient.h
+index df4350d..e7a882b 100644
+--- tcpserver/TCPClient.h
++++ tcpserver/TCPClient.h
+@@ -38,7 +38,7 @@ class CTCPClient : public CTCPClientBase,
+ public std::enable_shared_from_this<CTCPClient>
+ {
+ public:
+- CTCPClient(boost::asio::io_service& ios, CTCPServerIntBase *pManager);
++ CTCPClient(boost::asio::io_context& ios, CTCPServerIntBase *pManager);
+ ~CTCPClient() = default;
+ void start() override;
+ void stop() override;
+diff --git tcpserver/TCPServer.cpp tcpserver/TCPServer.cpp
+index 91fdc7e..57f8709 100644
+--- tcpserver/TCPServer.cpp
++++ tcpserver/TCPServer.cpp
+@@ -18,14 +18,14 @@ namespace tcp {
+
+ CTCPServerInt::CTCPServerInt(const std::string& address, const std::string& port, CTCPServer* pRoot) :
+ CTCPServerIntBase(pRoot),
+- io_service_(),
+- acceptor_(io_service_)
++ io_context_(),
++ acceptor_(io_context_)
+ {
+ // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
+- boost::asio::ip::tcp::resolver resolver(io_service_);
+- boost::asio::ip::tcp::resolver::query query(address, port);
+- boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);
+- acceptor_.open(endpoint.protocol());
++ boost::asio::ip::tcp::resolver resolver(io_context_);
++ boost::asio::ip::basic_resolver<boost::asio::ip::tcp>::results_type endpoints = resolver.resolve(address, port);
++ auto endpoint = *endpoints.begin();
++ acceptor_.open(endpoint.endpoint().protocol());
+ acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+ // bind to both ipv6 and ipv4 sockets for the "::" address only
+ if (address == "::")
+@@ -35,7 +35,7 @@ namespace tcp {
+ acceptor_.bind(endpoint);
+ acceptor_.listen();
+
+- new_connection_ = std::make_shared<CTCPClient>(io_service_, this);
++ new_connection_ = std::make_shared<CTCPClient>(io_context_, this);
+ if (new_connection_ == nullptr)
+ {
+ _log.Log(LOG_ERROR, "Error creating new client!");
+@@ -47,24 +47,24 @@ namespace tcp {
+
+ void CTCPServerInt::start()
+ {
+- // The io_service::run() call will block until all asynchronous operations
++ // The io_context::run() call will block until all asynchronous operations
+ // have finished. While the server is running, there is always at least one
+ // asynchronous operation outstanding: the asynchronous accept call waiting
+ // for new incoming connections.
+- io_service_.run();
++ io_context_.run();
+ }
+
+ void CTCPServerInt::stop()
+ {
+ // Post a call to the stop function so that server::stop() is safe to call
+ // from any thread.
+- io_service_.post([this] { handle_stop(); });
++ boost::asio::post([this] { handle_stop(); });
+ }
+
+ void CTCPServerInt::handle_stop()
+ {
+ // The server is stopped by cancelling all outstanding asynchronous
+- // operations. Once all operations have finished the io_service::run() call
++ // operations. Once all operations have finished the io_context::run() call
+ // will exit.
+ acceptor_.close();
+ stopAllClients();
+@@ -88,7 +88,7 @@ namespace tcp {
+ connections_.insert(new_connection_);
+ new_connection_->start();
+
+- new_connection_.reset(new CTCPClient(io_service_, this));
++ new_connection_.reset(new CTCPClient(io_context_, this));
+
+ acceptor_.async_accept(*(new_connection_->socket()), [this](auto&& err) { handleAccept(err); });
+ }
+diff --git tcpserver/TCPServer.h tcpserver/TCPServer.h
+index ca611b1..17284ca 100644
+--- tcpserver/TCPServer.h
++++ tcpserver/TCPServer.h
+@@ -70,8 +70,8 @@ private:
+ /// Handle a request to stop the server.
+ void handle_stop();
+
+- /// The io_service used to perform asynchronous operations.
+- boost::asio::io_service io_service_;
++ /// The io_context used to perform asynchronous operations.
++ boost::asio::io_context io_context_;
+
+ boost::asio::ip::tcp::acceptor acceptor_;
+
+diff --git webserver/cWebem.cpp webserver/cWebem.cpp
+index 57d9683..c0d292d 100644
+--- webserver/cWebem.cpp
++++ webserver/cWebem.cpp
+@@ -47,13 +47,13 @@ namespace http {
+ , myRequestHandler(doc_root, this)
+ // Rene, make sure we initialize m_sessions first, before starting a server
+ , myServer(server_factory::create(settings, myRequestHandler))
+- , m_io_service()
+- , m_session_clean_timer(m_io_service, boost::posix_time::minutes(1))
++ , m_io_context()
++ , m_session_clean_timer(m_io_context, boost::posix_time::minutes(1))
+ {
+ // associate handler to timer and schedule the first iteration
+ m_session_clean_timer.async_wait([this](auto &&) { CleanSessions(); });
+- m_io_service_thread = std::make_shared<std::thread>([p = &m_io_service] { p->run(); });
+- SetThreadName(m_io_service_thread->native_handle(), "Webem_ssncleaner");
++ m_io_context_thread = std::make_shared<std::thread>([p = &m_io_context] { p->run(); });
++ SetThreadName(m_io_context_thread->native_handle(), "Webem_ssncleaner");
+ }
+
+ cWebem::~cWebem()
+@@ -93,14 +93,14 @@ namespace http {
+ // Stop session cleaner
+ try
+ {
+- if (!m_io_service.stopped())
++ if (!m_io_context.stopped())
+ {
+- m_io_service.stop();
++ m_io_context.stop();
+ }
+- if (m_io_service_thread)
++ if (m_io_context_thread)
+ {
+- m_io_service_thread->join();
+- m_io_service_thread.reset();
++ m_io_context_thread->join();
++ m_io_context_thread.reset();
+ }
+ }
+ catch (...)
+diff --git webserver/cWebem.h webserver/cWebem.h
+index 6e3b899..7905c45 100644
+--- webserver/cWebem.h
++++ webserver/cWebem.h
+@@ -259,9 +259,9 @@ namespace http
+ std::string m_webRoot;
+ /// sessions management
+ std::mutex m_sessionsMutex;
+- boost::asio::io_service m_io_service;
++ boost::asio::io_context m_io_context;
+ boost::asio::deadline_timer m_session_clean_timer;
+- std::shared_ptr<std::thread> m_io_service_thread;
++ std::shared_ptr<std::thread> m_io_context_thread;
+ };
+
+ } // namespace server
+diff --git webserver/connection.cpp webserver/connection.cpp
+index 40f9788..3a70924 100644
+--- webserver/connection.cpp
++++ webserver/connection.cpp
+@@ -22,13 +22,13 @@ namespace http {
+ extern time_t last_write_time(const std::string& path);
+
+ // this is the constructor for plain connections
+- connection::connection(boost::asio::io_service &io_service, connection_manager &manager, request_handler &handler, int read_timeout)
++ connection::connection(boost::asio::io_context &io_context, connection_manager &manager, request_handler &handler, int read_timeout)
+ : send_buffer_(nullptr)
+ , read_timeout_(read_timeout)
+- , read_timer_(io_service, boost::posix_time::seconds(read_timeout))
++ , read_timer_(io_context, boost::posix_time::seconds(read_timeout))
+ , default_abandoned_timeout_(20 * 60)
+ // 20mn before stopping abandoned connection
+- , abandoned_timer_(io_service, boost::posix_time::seconds(default_abandoned_timeout_))
++ , abandoned_timer_(io_context, boost::posix_time::seconds(default_abandoned_timeout_))
+ , connection_manager_(manager)
+ , request_handler_(handler)
+ , status_(INITIALIZING)
+@@ -39,18 +39,18 @@ namespace http {
+ keepalive_ = false;
+ write_in_progress = false;
+ connection_type = ConnectionType::connection_http;
+- socket_ = std::make_unique<boost::asio::ip::tcp::socket>(io_service);
++ socket_ = std::make_unique<boost::asio::ip::tcp::socket>(io_context);
+ }
+
+ #ifdef WWW_ENABLE_SSL
+ // this is the constructor for secure connections
+- connection::connection(boost::asio::io_service &io_service, connection_manager &manager, request_handler &handler, int read_timeout, boost::asio::ssl::context &context)
++ connection::connection(boost::asio::io_context &io_context, connection_manager &manager, request_handler &handler, int read_timeout, boost::asio::ssl::context &context)
+ : send_buffer_(nullptr)
+ , read_timeout_(read_timeout)
+- , read_timer_(io_service, boost::posix_time::seconds(read_timeout))
++ , read_timer_(io_context, boost::posix_time::seconds(read_timeout))
+ , default_abandoned_timeout_(20 * 60)
+ // 20mn before stopping abandoned connection
+- , abandoned_timer_(io_service, boost::posix_time::seconds(default_abandoned_timeout_))
++ , abandoned_timer_(io_context, boost::posix_time::seconds(default_abandoned_timeout_))
+ , connection_manager_(manager)
+ , request_handler_(handler)
+ , status_(INITIALIZING)
+@@ -62,7 +62,7 @@ namespace http {
+ write_in_progress = false;
+ connection_type = ConnectionType::connection_http;
+ socket_ = nullptr;
+- sslsocket_ = std::make_unique<ssl_socket>(io_service, context);
++ sslsocket_ = std::make_unique<ssl_socket>(io_context, context);
+ }
+ #endif
+
+@@ -152,9 +152,9 @@ namespace http {
+ if (error != boost::asio::error::operation_aborted) {
+ switch (connection_type) {
+ case ConnectionType::connection_http:
+- // Timers should be cancelled before stopping to remove tasks from the io_service.
+- // The io_service will stop naturally when every tasks are removed.
+- // If timers are not cancelled, the exception ERROR_ABANDONED_WAIT_0 is thrown up to the io_service::run() caller.
++ // Timers should be cancelled before stopping to remove tasks from the io_context.
++ // The io_context will stop naturally when every tasks are removed.
++ // If timers are not cancelled, the exception ERROR_ABANDONED_WAIT_0 is thrown up to the io_context::run() caller.
+ cancel_abandoned_timeout();
+ cancel_read_timeout();
+
+@@ -372,7 +372,7 @@ namespace http {
+ switch (connection_type)
+ {
+ case ConnectionType::connection_http:
+- begin = boost::asio::buffer_cast<const char*>(_buf.data());
++ begin = static_cast<const char*>(_buf.data().data());
+ try
+ {
+ request_parser_.reset();
+@@ -404,7 +404,7 @@ namespace http {
+ newt = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+ }
+
+- size_t sizeread = begin - boost::asio::buffer_cast<const char*>(_buf.data());
++ size_t sizeread = begin - static_cast<const char*>(_buf.data().data());
+ _buf.consume(sizeread);
+ reply_.reset();
+ const char* pConnection = request_.get_req_header(&request_, "Connection");
+@@ -520,7 +520,7 @@ namespace http {
+ break;
+ case ConnectionType::connection_websocket:
+ case ConnectionType::connection_websocket_closing:
+- begin = boost::asio::buffer_cast<const char*>(_buf.data());
++ begin = static_cast<const char*>(_buf.data().data());
+ result = websocket_parser.parse((const unsigned char*)begin, _buf.size(), bytes_consumed, keepalive_);
+ _buf.consume(bytes_consumed);
+ if (result) {
+diff --git webserver/connection.hpp webserver/connection.hpp
+index ce452b5..c1a82c5 100644
+--- webserver/connection.hpp
++++ webserver/connection.hpp
+@@ -43,11 +43,11 @@ namespace http {
+ std::string host_local_endpoint_port_;
+ std::string host_last_request_uri_;
+ };
+- /// Construct a connection with the given io_service.
+- explicit connection(boost::asio::io_service& io_service,
++ /// Construct a connection with the given io_context.
++ explicit connection(boost::asio::io_context& io_context,
+ connection_manager& manager, request_handler& handler, int timeout);
+ #ifdef WWW_ENABLE_SSL
+- explicit connection(boost::asio::io_service& io_service,
++ explicit connection(boost::asio::io_context& io_context,
+ connection_manager& manager, request_handler& handler, int timeout, boost::asio::ssl::context& context);
+ #endif
+ ~connection() = default;
+diff --git webserver/server.cpp webserver/server.cpp
+index da15887..8bdfc13 100644
+--- webserver/server.cpp
++++ webserver/server.cpp
+@@ -13,15 +13,15 @@ namespace http {
+ namespace server {
+
+ server_base::server_base(const server_settings &settings, request_handler &user_request_handler)
+- : io_service_()
+- , acceptor_(io_service_)
++ : io_context_()
++ , acceptor_(io_context_)
+ , request_handler_(user_request_handler)
+ , settings_(settings)
+ , timeout_(20)
+ , // default read timeout in seconds
+ is_running(false)
+ , is_stop_complete(false)
+- , m_heartbeat_timer(io_service_)
++ , m_heartbeat_timer(io_context_)
+ {
+ if (!settings.is_enabled())
+ {
+@@ -39,10 +39,10 @@ namespace server {
+ }
+
+ // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
+- boost::asio::ip::tcp::resolver resolver(io_service_);
+- boost::asio::ip::tcp::resolver::query query(settings_.listening_address, settings_.listening_port);
+- boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);
+- acceptor_.open(endpoint.protocol());
++ boost::asio::ip::tcp::resolver resolver(io_context_);
++ boost::asio::ip::basic_resolver<boost::asio::ip::tcp>::results_type endpoints = resolver.resolve(settings_.listening_address, settings_.listening_port);
++ auto endpoint = *endpoints.begin();
++ acceptor_.open(endpoint.endpoint().protocol());
+ acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+ // bind to both ipv6 and ipv4 sockets for the "::" address only
+ if (settings_.listening_address == "::")
+@@ -59,28 +59,28 @@ namespace server {
+ }
+
+ void server_base::run() {
+- // The io_service::run() call will block until all asynchronous operations
++ // The io_context::run() call will block until all asynchronous operations
+ // have finished. While the server is running, there is always at least one
+ // asynchronous operation outstanding: the asynchronous accept call waiting
+ // for new incoming connections.
+ try {
+ is_running = true;
+ heart_beat(boost::system::error_code());
+- io_service_.run();
++ io_context_.run();
+ is_running = false;
+ } catch (std::exception& e) {
+ _log.Log(LOG_ERROR, "[web:%s] exception occurred : '%s' (need to run again)", settings_.listening_port.c_str(), e.what());
+ is_running = false;
+ // Note: if acceptor is up everything is OK, we can call run() again
+ // but if the exception has broken the acceptor we cannot stop/start it and the next run() will exit immediatly.
+- io_service_.reset(); // this call is needed before calling run() again
++ io_context_.restart(); // this call is needed before calling run() again
+ throw;
+ } catch (...) {
+ _log.Log(LOG_ERROR, "[web:%s] unknown exception occurred (need to run again)", settings_.listening_port.c_str());
+ is_running = false;
+ // Note: if acceptor is up everything is OK, we can call run() again
+ // but if the exception has broken the acceptor we cannot stop/start it and the next run() will exit immediatly.
+- io_service_.reset(); // this call is needed before calling run() again
++ io_context_.restart(); // this call is needed before calling run() again
+ throw;
+ }
+ }
+@@ -89,12 +89,12 @@ void server_base::run() {
+ void server_base::stop() {
+ if (is_running) {
+ // Post a call to the stop function so that server_base::stop() is safe to call from any thread.
+- // Rene, set is_running to false, because the following is an io_service call, which makes is_running
++ // Rene, set is_running to false, because the following is an io_context call, which makes is_running
+ // never set to false whilst in the call itself
+ is_running = false;
+- io_service_.post([this] { handle_stop(); });
++ boost::asio::post(io_context_, [this] { handle_stop(); });
+ } else {
+- // if io_service is not running then the post call will not be performed
++ // if io_context is not running then the post call will not be performed
+ handle_stop();
+ }
+
+@@ -112,7 +112,7 @@ void server_base::stop() {
+ }
+ sleep_milliseconds(500);
+ }
+- io_service_.stop();
++ io_context_.stop();
+
+ // Deregister heartbeat
+ m_mainworker.HeartbeatRemove(std::string("WebServer:") + settings_.listening_port);
+@@ -136,7 +136,7 @@ void server_base::heart_beat(const boost::system::error_code& error)
+ m_mainworker.HeartbeatUpdate(std::string("WebServer:") + settings_.listening_port);
+
+ // Schedule next heartbeat
+- m_heartbeat_timer.expires_from_now(std::chrono::seconds(4));
++ m_heartbeat_timer.expires_after(std::chrono::seconds(4));
+ m_heartbeat_timer.async_wait([this](auto &&err) { heart_beat(err); });
+ }
+ }
+@@ -148,7 +148,7 @@ server::server(const server_settings &settings, request_handler &user_request_ha
+ }
+
+ void server::init_connection() {
+- new_connection_.reset(new connection(io_service_, connection_manager_, request_handler_, timeout_));
++ new_connection_.reset(new connection(io_context_, connection_manager_, request_handler_, timeout_));
+ }
+
+ /**
+@@ -157,7 +157,7 @@ void server::init_connection() {
+ void server::handle_accept(const boost::system::error_code& e) {
+ if (!e) {
+ connection_manager_.start(new_connection_);
+- new_connection_.reset(new connection(io_service_,
++ new_connection_.reset(new connection(io_context_,
+ connection_manager_, request_handler_, timeout_));
+ // listen for a subsequent request
+ acceptor_.async_accept(new_connection_->socket(), [this](auto &&err) { handle_accept(err); });
+@@ -267,7 +267,7 @@ void ssl_server::init_connection() {
+ } else {
+ _log.Log(LOG_ERROR, "[web:%s] missing SSL DH parameters file %s!", settings_.listening_port.c_str(), settings_.tmp_dh_file_path.c_str());
+ }
+- new_connection_.reset(new connection(io_service_, connection_manager_, request_handler_, timeout_, context_));
++ new_connection_.reset(new connection(io_context_, connection_manager_, request_handler_, timeout_, context_));
+ }
+
+ void ssl_server::reinit_connection()
+@@ -305,7 +305,7 @@ void ssl_server::reinit_connection()
+ _log.Log(LOG_ERROR, "[web:%s] missing SSL DH parameters from file %s", settings_.listening_port.c_str(), settings_.tmp_dh_file_path.c_str());
+ }
+ }
+- new_connection_.reset(new connection(io_service_, connection_manager_, request_handler_, timeout_, context_));
++ new_connection_.reset(new connection(io_context_, connection_manager_, request_handler_, timeout_, context_));
+ }
+
+ /**
+diff --git webserver/server.hpp webserver/server.hpp
+index f9e71c5..bd7132a 100644
+--- webserver/server.hpp
++++ webserver/server.hpp
+@@ -31,7 +31,7 @@ namespace http
+ explicit server_base(const server_settings &settings, request_handler &user_request_handler);
+ virtual ~server_base() = default;
+
+- /// Run the server's io_service loop.
++ /// Run the server's io_context loop.
+ void run();
+
+ /// Stop the server.
+@@ -46,8 +46,8 @@ namespace http
+ protected:
+ void init(const init_connectionhandler_func &init_connection_handler, accept_handler_func accept_handler);
+
+- /// The io_service used to perform asynchronous operations.
+- boost::asio::io_service io_service_;
++ /// The io_context used to perform asynchronous operations.
++ boost::asio::io_context io_context_;
+
+ /// Acceptor used to listen for incoming connections.
+ boost::asio::ip::tcp::acceptor acceptor_;
diff --git a/www/domoticz/Makefile b/www/domoticz/Makefile
index 769b4d500821..51b10699d732 100644
--- a/www/domoticz/Makefile
+++ b/www/domoticz/Makefile
@@ -1,5 +1,6 @@
PORTNAME= domoticz
DISTVERSION= 2024.7
+PORTREVISION= 1
CATEGORIES= www
MAINTAINER= kiwi@FreeBSD.org
@@ -9,8 +10,6 @@ WWW= https://www.domoticz.com
LICENSE= GPLv3
LICENSE_FILE= ${WRKSRC}/License.txt
-BROKEN= fails to build with Boost>=1.87
-
LIB_DEPENDS= libcurl.so:ftp/curl \
libboost_system.so:devel/boost-libs \
libjsoncpp.so:devel/jsoncpp \
diff --git a/www/domoticz/files/patch-pr6252 b/www/domoticz/files/patch-pr6252
new file mode 100644
index 000000000000..34c4efd3f4e4
--- /dev/null
+++ b/www/domoticz/files/patch-pr6252
@@ -0,0 +1,2178 @@
+Fix for boost 1.87
+
+Removed the diff for the msbuild project files, didn't apply cleanly and not relevant anyway.
+This will merged in the next stable of domoticz.
+
+Pullrequest: https://github.com/domoticz/domoticz/pull/6252
+Patch: https://patch-diff.githubusercontent.com/raw/domoticz/domoticz/pull/6252.patch-diff
+
+diff --git hardware/ASyncSerial.cpp hardware/ASyncSerial.cpp
+index 52c950d..6147cdb 100644
+--- hardware/ASyncSerial.cpp
++++ hardware/ASyncSerial.cpp
+@@ -54,7 +54,7 @@ public:
+ {
+ }
+
+- boost::asio::io_service io; ///< Io service object
++ boost::asio::io_context io; ///< Io service object
+ boost::asio::serial_port port; ///< Serial port object
+ boost::thread backgroundThread; ///< Thread that runs read/write operations
+ bool open{ false }; ///< True if port open
+@@ -117,10 +117,10 @@ void AsyncSerial::open(const std::string& devname, unsigned int baud_rate,
+ throw;
+ }
+
+- pimpl->io.reset();
++ pimpl->io.restart();
+
+- // This gives some work to the io_service before it is started
+- pimpl->io.post([this] { return doRead(); });
++ // This gives some work to the io_context before it is started
++ boost::asio::post(pimpl->io, [this] { return doRead(); });
+
+ boost::thread t([p = &pimpl->io] { p->run(); });
+ pimpl->backgroundThread.swap(t);
+@@ -149,10 +149,10 @@ void AsyncSerial::openOnlyBaud(const std::string& devname, unsigned int baud_rat
+ throw;
+ }
+
+- pimpl->io.reset();
++ pimpl->io.restart();
+
+- //This gives some work to the io_service before it is started
+- pimpl->io.post([this] { return doRead(); });
++ //This gives some work to the io_context before it is started
++ boost::asio::post(pimpl->io, [this] { return doRead(); });
+
+ boost::thread t([p = &pimpl->io] { p->run(); });
+ pimpl->backgroundThread.swap(t);
+@@ -176,9 +176,9 @@ void AsyncSerial::close()
+ if(!isOpen()) return;
+
+ pimpl->open = false;
+- pimpl->io.post([this] { doClose(); });
++ boost::asio::post(pimpl->io, [this] { doClose(); });
+ pimpl->backgroundThread.join();
+- pimpl->io.reset();
++ pimpl->io.restart();
+ if(errorStatus())
+ {
+ throw(boost::system::system_error(boost::system::error_code(),
+@@ -192,7 +192,7 @@ void AsyncSerial::write(const char *data, size_t size)
+ std::lock_guard<std::mutex> l(pimpl->writeQueueMutex);
+ pimpl->writeQueue.insert(pimpl->writeQueue.end(),data,data+size);
+ }
+- pimpl->io.post([this] { doWrite(); });
++ boost::asio::post(pimpl->io, [this] { doWrite(); });
+ }
+
+ void AsyncSerial::write(const std::string &data)
+@@ -201,7 +201,7 @@ void AsyncSerial::write(const std::string &data)
+ std::lock_guard<std::mutex> l(pimpl->writeQueueMutex);
+ pimpl->writeQueue.insert(pimpl->writeQueue.end(), data.c_str(), data.c_str()+data.size());
+ }
+- pimpl->io.post([this] { doWrite(); });
++ boost::asio::post(pimpl->io, [this] { doWrite(); });
+ }
+
+ void AsyncSerial::write(const std::vector<char>& data)
+@@ -211,7 +211,7 @@ void AsyncSerial::write(const std::vector<char>& data)
+ pimpl->writeQueue.insert(pimpl->writeQueue.end(),data.begin(),
+ data.end());
+ }
+- pimpl->io.post([this] { doWrite(); });
++ boost::asio::post(pimpl->io, [this] { doWrite(); });
+ }
+
+ void AsyncSerial::writeString(const std::string& s)
+@@ -220,7 +220,7 @@ void AsyncSerial::writeString(const std::string& s)
+ std::lock_guard<std::mutex> l(pimpl->writeQueueMutex);
+ pimpl->writeQueue.insert(pimpl->writeQueue.end(),s.begin(),s.end());
+ }
+- pimpl->io.post([this] { doWrite(); });
++ boost::asio::post(pimpl->io, [this] { doWrite(); });
+ }
+
+ void AsyncSerial::doRead()
+diff --git hardware/ASyncSerial.h hardware/ASyncSerial.h
+index 0a51ef0..de83f8a 100644
+--- hardware/ASyncSerial.h
++++ hardware/ASyncSerial.h
+@@ -123,27 +123,27 @@ class AsyncSerial : private domoticz::noncopyable
+
+ /**
+ * Callback called to start an asynchronous read operation.
+- * This callback is called by the io_service in the spawned thread.
++ * This callback is called by the io_context in the spawned thread.
+ */
+ void doRead();
+
+ /**
+ * Callback called at the end of the asynchronous operation.
+- * This callback is called by the io_service in the spawned thread.
++ * This callback is called by the io_context in the spawned thread.
+ */
+ void readEnd(const boost::system::error_code &error, size_t bytes_transferred);
+
+ /**
+ * Callback called to start an asynchronous write operation.
+ * If it is already in progress, does nothing.
+- * This callback is called by the io_service in the spawned thread.
++ * This callback is called by the io_context in the spawned thread.
+ */
+ void doWrite();
+
+ /**
+ * Callback called at the end of an asynchronuous write operation,
+ * if there is more data to write, restarts a new write operation.
+- * This callback is called by the io_service in the spawned thread.
++ * This callback is called by the io_context in the spawned thread.
+ */
+ void writeEnd(const boost::system::error_code &error);
+
+diff --git hardware/ASyncTCP.cpp hardware/ASyncTCP.cpp
+index a375561..7c3b536 100644
+--- hardware/ASyncTCP.cpp
++++ hardware/ASyncTCP.cpp
+@@ -4,213 +4,241 @@
+ #include <boost/system/error_code.hpp> // for error_code
+ #include "../main/Logger.h"
+
+-struct hostent;
+-
+ #define MAX_TCP_BUFFER_SIZE 4096
+
+-#ifndef WIN32
+- #include <unistd.h> //gethostbyname
+-#endif
+-
+ #define STATUS_OK(err) !err
+-
+-ASyncTCP::ASyncTCP(const bool secure)
++#define STATUS_ERR(err) err
++
++ASyncTCP::ASyncTCP(const bool secure) :
++ m_Tcpwork(boost::asio::make_work_guard(m_io_context))
++ , m_Socket(m_io_context)
++ , m_Resolver(m_io_context)
++ , m_ReconnectTimer(m_io_context)
++ , m_TimeoutTimer(m_io_context)
++ , m_SendStrand(m_io_context)
+ #ifdef WWW_ENABLE_SSL
+- : mSecure(secure)
++ , m_bSecure(secure)
+ #endif
+ {
+ m_pRXBuffer = new uint8_t[MAX_TCP_BUFFER_SIZE];
+ #ifdef WWW_ENABLE_SSL
+ mContext.set_verify_mode(boost::asio::ssl::verify_none);
+- if (mSecure)
++ if (m_bSecure)
+ {
+- mSslSocket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(mIos, mContext));
++ m_SslSocket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(m_io_context, mContext));
+ }
+ #endif
+ }
+
+ ASyncTCP::~ASyncTCP()
+ {
+- assert(mTcpthread == nullptr);
+- mIsTerminating = true;
+- if (mTcpthread)
++ assert(m_Tcpthread == nullptr);
++ m_bIsTerminating = true;
++ if (m_Tcpthread)
+ {
+ //This should never happen. terminate() never called!!
+- _log.Log(LOG_ERROR, "ASyncTCP: Workerthread not closed. terminate() never called!!!");
+- mIos.stop();
+- if (mTcpthread)
++ _log.Log(LOG_ERROR, "ASyncTCP: Worker thread not closed. terminate() never called!!!");
++ m_io_context.stop();
++ if (m_Tcpthread)
+ {
+- mTcpthread->join();
+- mTcpthread.reset();
++ m_Tcpthread->join();
++ m_Tcpthread.reset();
+ }
+ }
+ if (m_pRXBuffer != nullptr)
+ delete[] m_pRXBuffer;
+ }
+
+-void ASyncTCP::SetReconnectDelay(int32_t Delay)
++void ASyncTCP::SetReconnectDelay(const int32_t Delay)
+ {
+- mReconnectDelay = Delay;
++ m_iReconnectDelay = Delay;
+ }
+
+ void ASyncTCP::connect(const std::string& ip, uint16_t port)
+ {
+- assert(!mSocket.is_open());
+- if (mSocket.is_open())
++ assert(!m_Socket.is_open());
++ if (m_Socket.is_open())
+ {
+ _log.Log(LOG_ERROR, "ASyncTCP: connect called while socket is still open. !!!");
+ terminate();
+ }
+
+- // RK: We reset mIos here because it might have been stopped in terminate()
+- mIos.reset();
+- // RK: After the reset, we need to provide it work anew
+- mTcpwork = std::make_shared<boost::asio::io_service::work>(mIos);
+- if (!mTcpthread)
+- mTcpthread = std::make_shared<std::thread>([p = &mIos] { p->run(); });
+-
+- mIp = ip;
+- mPort = port;
++ m_IP = ip;
++ m_Port = port;
+ std::string port_str = std::to_string(port);
+- boost::asio::ip::tcp::resolver::query query(ip, port_str);
+ timeout_start_timer();
+- mResolver.async_resolve(query, [this](auto &&err, auto &&iter) { cb_resolve_done(err, iter); });
++
++ m_Resolver.async_resolve(
++ ip, port_str,
++ [this](const boost::system::error_code& error, const boost::asio::ip::tcp::resolver::results_type& endpoints) {
++ handle_resolve(error, endpoints);
++ }
++ );
++
++ // RK: We restart m_io_context here because it might have been stopped in terminate()
++ m_io_context.restart();
++ // RK: After the reset, we need to provide it work anew
++ m_Tcpwork.reset();
++ m_Tcpwork.emplace(boost::asio::make_work_guard(m_io_context));
++ if (!m_Tcpthread)
++ m_Tcpthread = std::make_shared<std::thread>([p = &m_io_context] { p->run(); });
+ }
+
+-void ASyncTCP::cb_resolve_done(const boost::system::error_code& error, boost::asio::ip::tcp::resolver::iterator endpoint_iterator)
++void ASyncTCP::handle_resolve(const boost::system::error_code& error, const boost::asio::ip::tcp::resolver::results_type &endpoints)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
+- {
+- connect_start(endpoint_iterator);
+- }
+- else
++ if (STATUS_ERR(error))
+ {
+ process_error(error);
++ return;
+ }
+-}
+-
+-void ASyncTCP::connect_start(boost::asio::ip::tcp::resolver::iterator& endpoint_iterator)
+-{
+- if (mIsConnected) return;
+-
+- mEndPoint = *endpoint_iterator++;
++ if (m_bIsConnected) return;
+
+ timeout_start_timer();
++
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
++ if (m_bSecure)
+ {
+ // we reset the ssl socket, because the ssl context needs to be reinitialized after a reconnect
+- mSslSocket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(mIos, mContext));
+- mSslSocket->lowest_layer().async_connect(mEndPoint, [this, endpoint_iterator](auto &&err) mutable { cb_connect_done(err, endpoint_iterator); });
++ m_SslSocket.reset(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(m_io_context, mContext));
++ boost::asio::async_connect(m_SslSocket->lowest_layer(), endpoints,
++ [this](const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& endpoint)
++ {
++ handle_connect(error, endpoint);
++ }
++ );
+ }
+ else
+ #endif
+ {
+- mSocket.async_connect(mEndPoint, [this, endpoint_iterator](auto &&err) mutable { cb_connect_done(err, endpoint_iterator); });
++ boost::asio::async_connect(m_Socket, endpoints,
++ [this](const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& endpoint)
++ {
++ handle_connect(error, endpoint);
++ }
++ );
+ }
+ }
+
+-void ASyncTCP::cb_connect_done(const boost::system::error_code& error, boost::asio::ip::tcp::resolver::iterator &endpoint_iterator)
++void ASyncTCP::handle_connect(const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& /*endpoint*/)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
++ if (STATUS_ERR(error))
+ {
++ process_error(error);
++ return;
++ }
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
+- {
+- timeout_start_timer();
+- mSslSocket->async_handshake(boost::asio::ssl::stream_base::client, [this](auto &&err) { cb_handshake_done(err); });
+- }
+- else
+-#endif
+- {
+- process_connection();
+- }
++ if (m_bSecure)
++ {
++ timeout_start_timer();
++ m_SslSocket->async_handshake(boost::asio::ssl::stream_base::client,
++ [this](const boost::system::error_code& error) {
++ cb_handshake_done(error);
++ }
++ );
+ }
+- else
++ else
++#endif
+ {
+- if (endpoint_iterator != boost::asio::ip::tcp::resolver::iterator())
+- {
+- // The connection failed. Try the next endpoint in the list.
+- connect_start(endpoint_iterator);
+- return;
+- }
+- process_error(error);
++ process_connection();
+ }
+ }
+
+ #ifdef WWW_ENABLE_SSL
+ void ASyncTCP::cb_handshake_done(const boost::system::error_code& error)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
+- {
+- process_connection();
+- }
+- else
++ if (STATUS_ERR(error))
+ {
+ process_error(error);
++ return;
+ }
++ process_connection();
++#endif
+ }
++
++void ASyncTCP::process_connection()
++{
++ m_bIsConnected = true;
++#ifdef WWW_ENABLE_SSL
++
++ if (!m_bSecure)
+ #endif
++ {
++ // RK: only if non-secure
++ boost::asio::socket_base::keep_alive option(true);
++ m_Socket.set_option(option);
++ }
++ OnConnect();
++ do_read_start();
++ do_write_start();
++}
+
+ void ASyncTCP::reconnect_start_timer()
+ {
+- if (mIsReconnecting) return;
++ if (m_bIsReconnecting) return;
+
+- if (mReconnectDelay != 0)
++ if (m_iReconnectDelay != 0)
+ {
+- mIsReconnecting = true;
+-
+- mReconnectTimer.expires_from_now(boost::posix_time::seconds(mReconnectDelay));
+- mReconnectTimer.async_wait([this](auto &&err) { cb_reconnect_start(err); });
++ m_bIsReconnecting = true;
++
++ m_ReconnectTimer.expires_from_now(boost::posix_time::seconds(m_iReconnectDelay));
++ m_ReconnectTimer.async_wait(
++ [this](const boost::system::error_code& error) {
++ cb_reconnect_start(error);
++ }
++ );
+ }
+ }
+
+ void ASyncTCP::cb_reconnect_start(const boost::system::error_code& error)
+ {
+- mIsReconnecting = false;
+- mReconnectTimer.cancel();
+- mTimeoutTimer.cancel();
++ m_bIsReconnecting = false;
++ m_ReconnectTimer.cancel();
++ m_TimeoutTimer.cancel();
+
+- if (mIsConnected) return;
++ if (m_bIsConnected) return;
+ if (error) return; // timer was cancelled
+
+ do_close();
+- connect(mIp, mPort);
++ connect(m_IP, m_Port);
+ }
+
+
+ void ASyncTCP::terminate(const bool silent)
+ {
+- mIsTerminating = true;
++ m_bIsTerminating = true;
+ disconnect(silent);
+- mTcpwork.reset();
+- mIos.stop();
+- if (mTcpthread)
++ m_Tcpwork.reset();
++ m_io_context.stop();
++ if (m_Tcpthread)
+ {
+- mTcpthread->join();
+- mTcpthread.reset();
++ m_Tcpthread->join();
++ m_Tcpthread.reset();
+ }
+- mIsReconnecting = false;
+- mIsConnected = false;
+- mWriteQ.clear();
+- mIsTerminating = false;
++ m_bIsReconnecting = false;
++ m_bIsConnected = false;
++ m_WriteQ.clear();
++ m_bIsTerminating = false;
+ }
+
+ void ASyncTCP::disconnect(const bool silent)
+ {
+- mReconnectTimer.cancel();
+- mTimeoutTimer.cancel();
+- if (!mTcpthread) return;
++ m_ReconnectTimer.cancel();
++ m_TimeoutTimer.cancel();
++ if (!m_Tcpthread) return;
+
+ try
+ {
+- mIos.post([this] { do_close(); });
++ boost::asio::post(m_io_context,
++ [this] {
++ do_close();
++ }
++ );
+ }
+ catch (...)
+ {
+@@ -223,62 +251,68 @@ void ASyncTCP::disconnect(const bool silent)
+
+ void ASyncTCP::do_close()
+ {
+- if (mIsReconnecting) {
++ if (m_bIsReconnecting) {
+ return;
+ }
+- mReconnectTimer.cancel();
+- mTimeoutTimer.cancel();
++ m_ReconnectTimer.cancel();
++ m_TimeoutTimer.cancel();
+ boost::system::error_code ec;
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
++ if (m_bSecure)
+ {
+- if (mSslSocket->lowest_layer().is_open())
++ if (m_SslSocket->lowest_layer().is_open())
+ {
+- mSslSocket->lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
+- mSslSocket->lowest_layer().close(ec);
++ m_SslSocket->lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
++ m_SslSocket->lowest_layer().close(ec);
+ }
+ }
+ else
+ #endif
+ {
+- if (mSocket.is_open())
++ if (m_Socket.is_open())
+ {
+- mSocket.close(ec);
++ m_Socket.close(ec);
+ }
+ }
+ }
+
+ void ASyncTCP::do_read_start()
+ {
+- if (mIsTerminating) return;
+- if (!mIsConnected) return;
++ if (m_bIsTerminating) return;
++ if (!m_bIsConnected) return;
+
+ timeout_start_timer();
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
++ if (m_bSecure)
+ {
+- mSslSocket->async_read_some(boost::asio::buffer(m_pRXBuffer, MAX_TCP_BUFFER_SIZE), [this](auto &&err, auto bytes) { cb_read_done(err, bytes); });
++ m_SslSocket->async_read_some(boost::asio::buffer(m_pRXBuffer, MAX_TCP_BUFFER_SIZE),
++ [this](const boost::system::error_code& error, size_t bytes_transferred) {
++ cb_read_done(error, bytes_transferred);
++ }
++ );
+ }
+ else
+ #endif
+ {
+- mSocket.async_read_some(boost::asio::buffer(m_pRXBuffer, MAX_TCP_BUFFER_SIZE), [this](auto &&err, auto bytes) { cb_read_done(err, bytes); });
++ m_Socket.async_read_some(boost::asio::buffer(m_pRXBuffer, MAX_TCP_BUFFER_SIZE),
++ [this](const boost::system::error_code& error, size_t bytes_transferred) {
++ cb_read_done(error, bytes_transferred);
++ }
++ );
+ }
+ }
+
+ void ASyncTCP::cb_read_done(const boost::system::error_code& error, size_t bytes_transferred)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
+- {
+- OnData(m_pRXBuffer, bytes_transferred);
+- do_read_start();
+- }
+- else
++ if (STATUS_ERR(error))
+ {
+ process_error(error);
++ return;
+ }
++ OnData(m_pRXBuffer, bytes_transferred);
++ do_read_start();
+ }
+
+ void ASyncTCP::write(const uint8_t* pData, size_t length)
+@@ -288,77 +322,66 @@ void ASyncTCP::write(const uint8_t* pData, size_t length)
+
+ void ASyncTCP::write(const std::string& msg)
+ {
+- if (!mTcpthread) return;
++ if (!m_Tcpthread) return;
+
+- mSendStrand.post([this, msg]() { cb_write_queue(msg); });
++ boost::asio::post(m_SendStrand, [this, msg]() { cb_write_queue(msg); });
+ }
+
+ void ASyncTCP::cb_write_queue(const std::string& msg)
+ {
+- mWriteQ.push_back(msg);
++ m_WriteQ.push_back(msg);
+
+- if (mWriteQ.size() == 1)
++ if (m_WriteQ.size() == 1)
+ do_write_start();
+ }
+
+ void ASyncTCP::do_write_start()
+ {
+- if (mIsTerminating) return;
+- if (!mIsConnected) return;
+- if (mWriteQ.empty())
++ if (m_bIsTerminating) return;
++ if (!m_bIsConnected) return;
++ if (m_WriteQ.empty())
+ return;
+
+ timeout_start_timer();
+ #ifdef WWW_ENABLE_SSL
+- if (mSecure)
++ if (m_bSecure)
+ {
+- boost::asio::async_write(*mSslSocket, boost::asio::buffer(mWriteQ.front()), [this](auto &&err, auto) { cb_write_done(err); });
++ boost::asio::async_write(*m_SslSocket, boost::asio::buffer(m_WriteQ.front()),
++ [this](const boost::system::error_code& error, std::size_t length) {
++ cb_write_done(error, length);
++ }
++ );
+ }
+ else
+ #endif
+ {
+- boost::asio::async_write(mSocket, boost::asio::buffer(mWriteQ.front()), [this](auto &&err, auto) { cb_write_done(err); });
++ boost::asio::async_write(m_Socket, boost::asio::buffer(m_WriteQ.front()),
++ [this](const boost::system::error_code& error, std::size_t length) {
++ cb_write_done(error, length);
++ }
++ );
+ }
+ }
+
+-void ASyncTCP::cb_write_done(const boost::system::error_code& error)
++void ASyncTCP::cb_write_done(const boost::system::error_code& error, std::size_t /*length*/)
+ {
+- if (mIsTerminating) return;
++ if (m_bIsTerminating) return;
+
+- if (STATUS_OK(error))
+- {
+- mWriteQ.pop_front();
+- do_write_start();
+- }
+- else
++ if (STATUS_ERR(error))
+ {
+ process_error(error);
++ return;
+ }
+-}
+-
+-void ASyncTCP::process_connection()
+-{
+- mIsConnected = true;
+-#ifdef WWW_ENABLE_SSL
+-
+- if (!mSecure)
+-#endif
+- {
+- // RK: only if non-secure
+- boost::asio::socket_base::keep_alive option(true);
+- mSocket.set_option(option);
+- }
+- OnConnect();
+- do_read_start();
++ m_WriteQ.pop_front();
+ do_write_start();
+ }
+
+ void ASyncTCP::process_error(const boost::system::error_code& error)
+ {
+ do_close();
+- if (mIsConnected)
++ if (m_bIsConnected)
+ {
+- mIsConnected = false;
++ m_bIsConnected = false;
+ OnDisconnect();
+ }
+
+@@ -369,20 +392,23 @@ void ASyncTCP::process_error(const boost::system::error_code& error)
+ reconnect_start_timer();
+ }
+
+-/* timeout methods */
+ void ASyncTCP::timeout_start_timer()
+ {
+- if (0 == mTimeoutDelay) {
++ if (0 == m_iTimeoutDelay) {
+ return;
+ }
+ timeout_cancel_timer();
+- mTimeoutTimer.expires_from_now(boost::posix_time::seconds(mTimeoutDelay));
+- mTimeoutTimer.async_wait([this](auto &&err) { timeout_handler(err); });
++ m_TimeoutTimer.expires_from_now(boost::posix_time::seconds(m_iTimeoutDelay));
++ m_TimeoutTimer.async_wait(
++ [this](const boost::system::error_code& error) {
++ timeout_handler(error);
++ }
++ );
+ }
+
+ void ASyncTCP::timeout_cancel_timer()
+ {
+- mTimeoutTimer.cancel();
++ m_TimeoutTimer.cancel();
+ }
+
+ void ASyncTCP::timeout_handler(const boost::system::error_code& error)
+@@ -397,5 +423,5 @@ void ASyncTCP::timeout_handler(const boost::system::error_code& error)
+
+ void ASyncTCP::SetTimeout(const uint32_t Timeout)
+ {
+- mTimeoutDelay = Timeout;
++ m_iTimeoutDelay = Timeout;
+ }
+diff --git hardware/ASyncTCP.h hardware/ASyncTCP.h
+index cf859bb..a8b3ae2 100644
+--- hardware/ASyncTCP.h
++++ hardware/ASyncTCP.h
+@@ -3,39 +3,31 @@
+ #include <stddef.h> // for size_t
+ #include <deque> // for write queue
+ #include <boost/asio/deadline_timer.hpp> // for deadline_timer
+-#include <boost/asio/io_service.hpp> // for io_service
++#include <boost/asio/io_context.hpp> // for io_context
+ #include <boost/asio/strand.hpp> // for strand
+ #include <boost/asio/ip/tcp.hpp> // for tcp, tcp::endpoint, tcp::s...
+ #include <boost/asio/ssl.hpp> // for secure sockets
+ #include <boost/asio/ssl/stream.hpp> // for secure sockets
+ #include <exception> // for exception
++#include <optional> // for optional
+
+ #define ASYNCTCP_THREAD_NAME "ASyncTCP"
+ #define DEFAULT_RECONNECT_TIME 30
+ #define DEFAULT_TIMEOUT_TIME 60
+
+-namespace boost
+-{
+- namespace system
+- {
+- class error_code;
+- } // namespace system
+-} // namespace boost
+-
+ class ASyncTCP
+ {
+- protected:
++protected:
+ ASyncTCP(bool secure = false);
+ virtual ~ASyncTCP();
+-
+- void connect(const std::string &hostname, uint16_t port);
++ void connect(const std::string& hostname, uint16_t port);
+ void disconnect(bool silent = true);
+- void write(const std::string &msg);
+- void write(const uint8_t *pData, size_t length);
+- void SetReconnectDelay(int32_t Delay = DEFAULT_RECONNECT_TIME);
++ void write(const std::string& msg);
++ void write(const uint8_t* pData, size_t length);
++ void SetReconnectDelay(const int32_t Delay = DEFAULT_RECONNECT_TIME);
+ bool isConnected()
+ {
+- return mIsConnected;
++ return m_bIsConnected;
+ };
+ void terminate(bool silent = true);
+ void SetTimeout(uint32_t Timeout = DEFAULT_TIMEOUT_TIME);
+@@ -43,65 +35,61 @@ class ASyncTCP
+ // Callback interface to implement in derived classes
+ virtual void OnConnect() = 0;
+ virtual void OnDisconnect() = 0;
+- virtual void OnData(const uint8_t *pData, size_t length) = 0;
+- virtual void OnError(const boost::system::error_code &error) = 0;
+-
+- boost::asio::io_service mIos; // protected to allow derived classes to attach timers etc.
++ virtual void OnData(const uint8_t* pData, size_t length) = 0;
++ virtual void OnError(const boost::system::error_code& error) = 0;
+
+- private:
+- void cb_resolve_done(const boost::system::error_code &err, boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
+- void connect_start(boost::asio::ip::tcp::resolver::iterator &endpoint_iterator);
+- void cb_connect_done(const boost::system::error_code &error, boost::asio::ip::tcp::resolver::iterator &endpoint_iterator);
++ boost::asio::io_context m_io_context; // protected to allow derived classes to attach timers etc.
++private:
++ void handle_resolve(const boost::system::error_code& ec, const boost::asio::ip::tcp::resolver::results_type &results);
++ void handle_connect(const boost::system::error_code& error, const boost::asio::ip::tcp::endpoint& endpoint);
+ #ifdef WWW_ENABLE_SSL
+- void cb_handshake_done(const boost::system::error_code &error);
++ void cb_handshake_done(const boost::system::error_code& error);
+ #endif
+
+- /* timeout methods */
+ void timeout_start_timer();
+ void timeout_cancel_timer();
+ void reconnect_start_timer();
+- void timeout_handler(const boost::system::error_code &error);
++ void timeout_handler(const boost::system::error_code& error);
+
+- void cb_reconnect_start(const boost::system::error_code &error);
++ void cb_reconnect_start(const boost::system::error_code& error);
+
+ void do_close();
+
+ void do_read_start();
+- void cb_read_done(const boost::system::error_code &error, size_t bytes_transferred);
++ void cb_read_done(const boost::system::error_code& error, size_t bytes_transferred);
+
+- void cb_write_queue(const std::string &msg);
++ void cb_write_queue(const std::string& msg);
+ void do_write_start();
+- void cb_write_done(const boost::system::error_code &error);
++ void cb_write_done(const boost::system::error_code& error, size_t length);
+
+ void process_connection();
+- void process_error(const boost::system::error_code &error);
++ void process_error(const boost::system::error_code& error);
+
+- bool mIsConnected = false;
+- bool mIsReconnecting = false;
+- bool mIsTerminating = false;
++ bool m_bIsConnected = false;
++ bool m_bIsReconnecting = false;
++ bool m_bIsTerminating = false;
+
+- boost::asio::io_service::strand mSendStrand{ mIos };
+- std::deque<std::string> mWriteQ; // we need a write queue to allow concurrent writes
++ boost::asio::io_context::strand m_SendStrand;
++ std::deque<std::string> m_WriteQ; // we need a write queue to allow concurrent writes
+
+ uint8_t* m_pRXBuffer = nullptr;
+
+- int mReconnectDelay = DEFAULT_RECONNECT_TIME;
+- int mTimeoutDelay = 0;
+- boost::asio::deadline_timer mReconnectTimer{ mIos };
+- boost::asio::deadline_timer mTimeoutTimer{ mIos };
++ int m_iReconnectDelay = DEFAULT_RECONNECT_TIME;
++ int m_iTimeoutDelay = 0;
++ boost::asio::deadline_timer m_ReconnectTimer;
++ boost::asio::deadline_timer m_TimeoutTimer;
+
+- std::shared_ptr<std::thread> mTcpthread;
+- std::shared_ptr<boost::asio::io_service::work> mTcpwork;
++ std::shared_ptr<std::thread> m_Tcpthread;
++ std::optional<boost::asio::executor_work_guard<boost::asio::io_context::executor_type>> m_Tcpwork;
+
+ #ifdef WWW_ENABLE_SSL
+- const bool mSecure;
++ const bool m_bSecure;
+ boost::asio::ssl::context mContext{ boost::asio::ssl::context::sslv23 };
+- std::shared_ptr<boost::asio::ssl::stream<boost::asio::ip::tcp::socket>> mSslSocket; // the ssl socket
++ std::shared_ptr<boost::asio::ssl::stream<boost::asio::ip::tcp::socket>> m_SslSocket;
+ #endif
+- boost::asio::ip::tcp::socket mSocket{ mIos };
+- boost::asio::ip::tcp::endpoint mEndPoint;
+- boost::asio::ip::tcp::resolver mResolver{ mIos };
++ boost::asio::ip::tcp::socket m_Socket;
++ boost::asio::ip::tcp::resolver m_Resolver;
+
+- std::string mIp;
+- uint16_t mPort;
++ std::string m_IP;
++ uint16_t m_Port;
+ };
+diff --git hardware/Arilux.cpp hardware/Arilux.cpp
+index 400f5a3..20bc373 100644
+--- hardware/Arilux.cpp
++++ hardware/Arilux.cpp
+@@ -79,7 +79,7 @@ void Arilux::InsertUpdateSwitch(const std::string &lightName, const int subType,
+ {
+ uint32_t sID;
+ try {
+- sID = boost::asio::ip::address_v4::from_string(location).to_ulong();
++ sID = boost::asio::ip::make_address_v4(location).to_uint();
+ } catch (const std::exception &e) {
+ Log(LOG_ERROR, "Bad IP address: %s (%s)", location.c_str(), e.what());
+ return;
+@@ -112,8 +112,8 @@ bool Arilux::SendTCPCommand(uint32_t ip,std::vector<unsigned char> &command)
+ sum = sum & 0xFF;
+ command.push_back((unsigned char)sum);
+
+- boost::asio::io_service io_service;
+- boost::asio::ip::tcp::socket sendSocket(io_service);
++ boost::asio::io_context io_context;
++ boost::asio::ip::tcp::socket sendSocket(io_context);
+ boost::asio::ip::address_v4 address(ip);
+ boost::asio::ip::tcp::endpoint endpoint(address, 5577);
+ try
+diff --git hardware/Kodi.cpp hardware/Kodi.cpp
+index b528017..5ababf6 100644
+--- hardware/Kodi.cpp
++++ hardware/Kodi.cpp
+@@ -143,14 +143,14 @@ _eNotificationTypes CKodiNode::CKodiStatus::NotificationType()
+ }
+ }
+
+-CKodiNode::CKodiNode(boost::asio::io_service *pIos, const int pHwdID, const int PollIntervalsec, const int pTimeoutMs,
++CKodiNode::CKodiNode(boost::asio::io_context *pIoc, const int pHwdID, const int PollIntervalsec, const int pTimeoutMs,
+ const std::string& pID, const std::string& pName, const std::string& pIP, const std::string& pPort)
+ {
+ m_Busy = false;
+ m_Stoppable = false;
+ m_PlaylistPosition = 0;
+
+- m_Ios = pIos;
++ m_Ioc = pIoc;
+ m_HwdID = pHwdID;
+ m_DevID = atoi(pID.c_str());
+ sprintf(m_szDevID, "%X%02X%02X%02X", 0, 0, (m_DevID & 0xFF00) >> 8, m_DevID & 0xFF);
+@@ -581,11 +581,10 @@ void CKodiNode::handleConnect()
+ {
+ m_iMissedPongs = 0;
+ boost::system::error_code ec;
+- boost::asio::ip::tcp::resolver resolver(*m_Ios);
+- boost::asio::ip::tcp::resolver::query query(m_IP, (m_Port[0] != '-' ? m_Port : m_Port.substr(1)));
+- auto iter = resolver.resolve(query);
+- boost::asio::ip::tcp::endpoint endpoint = *iter;
+- m_Socket = new boost::asio::ip::tcp::socket(*m_Ios);
++ boost::asio::ip::tcp::resolver resolver(*m_Ioc);
++ auto iter = resolver.resolve(m_IP, (m_Port[0] != '-' ? m_Port : m_Port.substr(1)));
++ boost::asio::ip::tcp::endpoint endpoint = *iter.begin();
++ m_Socket = new boost::asio::ip::tcp::socket(*m_Ioc);
+ m_Socket->connect(endpoint, ec);
+ if (!ec)
+ {
+@@ -975,19 +974,19 @@ void CKodi::Do_Work()
+ _log.Log(LOG_NORM, "Kodi: (%s) - Restarting thread.", node->m_Name.c_str());
+ boost::thread *tAsync = new boost::thread(&CKodiNode::Do_Work, node);
+ SetThreadName(tAsync->native_handle(), "KodiNode");
+- m_ios.stop();
++ m_ioc.stop();
+ }
+ if (node->IsOn())
+ bWorkToDo = true;
+ }
+
+- if (bWorkToDo && m_ios.stopped()) // make sure that there is a boost thread to service i/o operations
++ if (bWorkToDo && m_ioc.stopped()) // make sure that there is a boost thread to service i/o operations
+ {
+- m_ios.reset();
++ m_ioc.restart();
+ // Note that this is the only thread that handles async i/o so we don't
+ // need to worry about locking or concurrency issues when processing messages
+ _log.Log(LOG_NORM, "Kodi: Restarting I/O service thread.");
+- boost::thread bt([p = &m_ios] { p->run(); });
++ boost::thread bt([p = &m_ioc] { p->run(); });
+ SetThreadName(bt.native_handle(), "KodiIO");
+ }
+ }
+@@ -1138,7 +1137,7 @@ void CKodi::ReloadNodes()
+ {
+ UnloadNodes();
+
+- m_ios.reset(); // in case this is not the first time in
++ m_ioc.restart(); // in case this is not the first time in
+
+ std::vector<std::vector<std::string> > result;
+ result = m_sql.safe_query("SELECT ID,Name,MacAddress,Timeout FROM WOLNodes WHERE (HardwareID==%d)", m_HwdID);
+@@ -1149,7 +1148,7 @@ void CKodi::ReloadNodes()
+ // create a vector to hold the nodes
+ for (const auto &sd : result)
+ {
+- auto pNode = std::make_shared<CKodiNode>(&m_ios, m_HwdID, m_iPollInterval, m_iPingTimeoutms, sd[0], sd[1], sd[2], sd[3]);
++ auto pNode = std::make_shared<CKodiNode>(&m_ioc, m_HwdID, m_iPollInterval, m_iPingTimeoutms, sd[0], sd[1], sd[2], sd[3]);
+ m_pNodes.push_back(pNode);
+ }
+ // start the threads to control each kodi
+@@ -1161,7 +1160,7 @@ void CKodi::ReloadNodes()
+ }
+ sleep_milliseconds(100);
+ _log.Log(LOG_NORM, "Kodi: Starting I/O service thread.");
+- boost::thread bt([p = &m_ios] { p->run(); });
++ boost::thread bt([p = &m_ioc] { p->run(); });
+ SetThreadName(bt.native_handle(), "KodiIO");
+ }
+ }
+@@ -1170,10 +1169,10 @@ void CKodi::UnloadNodes()
+ {
+ std::lock_guard<std::mutex> l(m_mutex);
+
+- m_ios.stop(); // stop the service if it is running
++ m_ioc.stop(); // stop the service if it is running
+ sleep_milliseconds(100);
+
+- while (((!m_pNodes.empty()) || (!m_ios.stopped())))
++ while (((!m_pNodes.empty()) || (!m_ioc.stopped())))
+ {
+ for (auto itt = m_pNodes.begin(); itt != m_pNodes.end(); ++itt)
+ {
+diff --git hardware/Kodi.h hardware/Kodi.h
+index 14f331c..4435740 100644
+--- hardware/Kodi.h
++++ hardware/Kodi.h
+@@ -150,7 +150,7 @@ class CKodiNode : public std::enable_shared_from_this<CKodiNode>, StoppableTask
+ };
+
+ public:
+- CKodiNode(boost::asio::io_service *, int, int, int, const std::string &, const std::string &, const std::string &, const std::string &);
++ CKodiNode(boost::asio::io_context *, int, int, int, const std::string &, const std::string &, const std::string &, const std::string &);
+ ~CKodiNode();
+ void Do_Work();
+ void SendCommand(const std::string &);
+@@ -207,7 +207,7 @@ class CKodiNode : public std::enable_shared_from_this<CKodiNode>, StoppableTask
+ int m_iPollIntSec;
+ int m_iMissedPongs;
+ std::string m_sLastMessage;
+- boost::asio::io_service *m_Ios;
++ boost::asio::io_context *m_Ioc;
+ boost::asio::ip::tcp::socket *m_Socket;
+ std::array<char, 256> m_Buffer;
+ };
+@@ -243,5 +243,5 @@ class CKodi : public CDomoticzHardwareBase
+ int m_iPingTimeoutms;
+ std::shared_ptr<std::thread> m_thread;
+ std::mutex m_mutex;
+- boost::asio::io_service m_ios;
++ boost::asio::io_context m_ioc;
+ };
+diff --git hardware/MQTTAutoDiscover.h hardware/MQTTAutoDiscover.h
+index 0832664..1501d6f 100644
+--- hardware/MQTTAutoDiscover.h
++++ hardware/MQTTAutoDiscover.h
+@@ -176,7 +176,7 @@ public:
+ void on_message(const struct mosquitto_message *message) override;
+ void on_connect(int rc) override;
+ void on_disconnect(int rc) override;
+- void on_going_down();
++ void on_going_down() override;
+ private:
+ void InsertUpdateSwitch(_tMQTTASensor* pSensor);
+
+diff --git hardware/PanasonicTV.cpp hardware/PanasonicTV.cpp
+index fc57d34..ce20565 100644
+--- hardware/PanasonicTV.cpp
++++ hardware/PanasonicTV.cpp
+@@ -356,18 +356,17 @@ std::string CPanasonicNode::handleWriteAndRead(const std::string& pMessageToSend
+ {
+
+ _log.Debug(DEBUG_HARDWARE, "Panasonic Plugin: (%s) Handling message: '%s'.", m_Name.c_str(), pMessageToSend.c_str());
+- boost::asio::io_service io_service;
++ boost::asio::io_context io_context;
+ // Get a list of endpoints corresponding to the server name.
+- boost::asio::ip::tcp::resolver resolver(io_service);
+- boost::asio::ip::tcp::resolver::query query(m_IP, (m_Port[0] != '-' ? m_Port : m_Port.substr(1)));
+- auto iter = resolver.resolve(query);
++ boost::asio::ip::tcp::resolver resolver(io_context);
++ auto endpoints = resolver.resolve(m_IP, (m_Port[0] != '-' ? m_Port : m_Port.substr(1)));
++ auto iter = endpoints.begin();
+ boost::asio::ip::tcp::endpoint endpoint = *iter;
+- boost::asio::ip::tcp::resolver::iterator end;
+
+ // Try each endpoint until we successfully establish a connection.
+- boost::asio::ip::tcp::socket socket(io_service);
++ boost::asio::ip::tcp::socket socket(io_context);
+ boost::system::error_code error = boost::asio::error::host_not_found;
+- while (error && iter != end)
++ while (error && iter != endpoints.end())
+ {
+ socket.close();
+ if (handleConnect(socket, *iter, error))
+@@ -1060,7 +1059,7 @@ void CPanasonic::ReloadNodes()
+ {
+ UnloadNodes();
+
+- //m_ios.reset(); // in case this is not the first time in
++ //m_ioc.reset(); // in case this is not the first time in
+
+ std::vector<std::vector<std::string> > result;
+ result = m_sql.safe_query("SELECT ID,Name,MacAddress,Timeout FROM WOLNodes WHERE (HardwareID==%d)", m_HwdID);
+@@ -1088,10 +1087,10 @@ void CPanasonic::UnloadNodes()
+ {
+ std::lock_guard<std::mutex> l(m_mutex);
+
+- m_ios.stop(); // stop the service if it is running
++ m_ioc.stop(); // stop the service if it is running
+ sleep_milliseconds(100);
+
+- while (((!m_pNodes.empty()) || (!m_ios.stopped())))
++ while (((!m_pNodes.empty()) || (!m_ioc.stopped())))
+ {
+ for (auto itt = m_pNodes.begin(); itt != m_pNodes.end(); ++itt)
+ {
+diff --git hardware/PanasonicTV.h hardware/PanasonicTV.h
+index b0a94ff..30e1ca1 100644
+--- hardware/PanasonicTV.h
++++ hardware/PanasonicTV.h
+@@ -39,7 +39,7 @@ class CPanasonic : public CDomoticzHardwareBase
+ bool m_bTryIfOff;
+ std::shared_ptr<std::thread> m_thread;
+ std::mutex m_mutex;
+- boost::asio::io_service m_ios;
++ boost::asio::io_context m_ioc;
+
+ friend class CPanasonicNode;
+ };
+diff --git hardware/Pinger.cpp hardware/Pinger.cpp
+index a66c7a1..e070b29 100644
+--- hardware/Pinger.cpp
++++ hardware/Pinger.cpp
+@@ -21,23 +21,23 @@
+ #if BOOST_VERSION >= 107000
+ #define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context())
+ #else
+-#define GET_IO_SERVICE(s) ((s).get_io_service())
++#define GET_IO_SERVICE(s) ((s).get_io_context())
+ #endif
+
+ class pinger
+ : private domoticz::noncopyable
+ {
+ public:
+- pinger(boost::asio::io_service &io_service, const char *destination, const int iPingTimeoutms)
++ pinger(boost::asio::io_context &io_context, const char *destination, const int iPingTimeoutms)
+ : num_replies_(0)
+ , m_PingState(false)
+- , resolver_(io_service)
+- , socket_(io_service, boost::asio::ip::icmp::v4())
+- , timer_(io_service)
++ , resolver_(io_context)
++ , socket_(io_context, boost::asio::ip::icmp::v4())
++ , timer_(io_context)
+ , sequence_number_(0)
+ {
+- boost::asio::ip::icmp::resolver::query query(boost::asio::ip::icmp::v4(), destination, "");
+- destination_ = *resolver_.resolve(query);
++ auto endpoints = resolver_.resolve(boost::asio::ip::icmp::v4(), destination, "");
++ destination_ = endpoints.begin()->endpoint();
+
+ num_tries_ = 1;
+ PingTimeoutms_ = iPingTimeoutms;
+@@ -332,11 +332,11 @@ void CPinger::ReloadNodes()
+ void CPinger::Do_Ping_Worker(const PingNode &Node)
+ {
+ bool bPingOK = false;
+- boost::asio::io_service io_service;
++ boost::asio::io_context io_context;
+ try
+ {
+- pinger p(io_service, Node.IP.c_str(), m_iPingTimeoutms);
+- io_service.run();
++ pinger p(io_context, Node.IP.c_str(), m_iPingTimeoutms);
++ io_context.run();
+ if (p.m_PingState == true)
+ {
+ bPingOK = true;
+diff --git hardware/RFLinkMQTT.h hardware/RFLinkMQTT.h
+index e938328..72433b8 100644
+--- hardware/RFLinkMQTT.h
++++ hardware/RFLinkMQTT.h
+@@ -46,7 +46,7 @@ protected:
+ boost::signals2::connection m_sDeviceReceivedConnection;
+ boost::signals2::connection m_sSwitchSceneConnection;
+ void selectNextIPAdress( void );
+- virtual bool WriteInt(const std::string &sendString); // override;
++ bool WriteInt(const std::string &sendString) override;
+ void Do_Work();
+ virtual void SendHeartbeat();
+ void StopMQTT();
+diff --git hardware/TCPProxy/tcpproxy_server.cpp hardware/TCPProxy/tcpproxy_server.cpp
+index 8aceb0b..d77d4bf 100644
+--- hardware/TCPProxy/tcpproxy_server.cpp
++++ hardware/TCPProxy/tcpproxy_server.cpp
+@@ -18,12 +18,12 @@
+ #if BOOST_VERSION >= 107000
+ #define GET_IO_SERVICE(s) ((boost::asio::io_context&)(s).get_executor().context())
+ #else
+-#define GET_IO_SERVICE(s) ((s).get_io_service())
++#define GET_IO_SERVICE(s) ((s).get_io_context())
+ #endif
+
+ namespace tcp_proxy
+ {
+- bridge::bridge(boost::asio::io_service& ios)
++ bridge::bridge(boost::asio::io_context& ios)
+ : downstream_socket_(ios),
+ upstream_socket_(ios)
+ {
+@@ -44,7 +44,7 @@ namespace tcp_proxy
+ boost::asio::ip::tcp::endpoint end;
+
+
+- boost::asio::io_service &ios= GET_IO_SERVICE(downstream_socket_);
++ boost::asio::io_context &ios= GET_IO_SERVICE(downstream_socket_);
+ boost::asio::ip::tcp::resolver resolver(ios);
+ boost::asio::ip::tcp::resolver::query query(upstream_host, upstream_port, boost::asio::ip::resolver_query_base::numeric_service);
+ auto i = resolver.resolve(query);
+@@ -137,10 +137,10 @@ namespace tcp_proxy
+ }
+ //Acceptor Class
+ acceptor::acceptor(const std::string &local_host, unsigned short local_port, const std::string &upstream_host, const std::string &upstream_port)
+- : io_service_()
++ : io_context_()
+ , m_bDoStop(false)
+ , localhost_address(boost::asio::ip::address_v4::from_string(local_host))
+- , acceptor_(io_service_, boost::asio::ip::tcp::endpoint(localhost_address, local_port))
++ , acceptor_(io_context_, boost::asio::ip::tcp::endpoint(localhost_address, local_port))
+ , upstream_host_(upstream_host)
+ , upstream_port_(upstream_port)
+ {
+@@ -151,7 +151,7 @@ namespace tcp_proxy
+ {
+ try
+ {
+- session_ = std::make_shared<bridge>(io_service_);
++ session_ = std::make_shared<bridge>(io_context_);
+ session_->sDownstreamData.connect([this](auto d, auto l) { OnDownstreamData(d, l); });
+ session_->sUpstreamData.connect([this](auto d, auto l) { OnUpstreamData(d, l); });
+
+@@ -169,11 +169,11 @@ namespace tcp_proxy
+ m_bDoStop=false;
+
+ accept_connections();
+- // The io_service::run() call will block until all asynchronous operations
++ // The io_context::run() call will block until all asynchronous operations
+ // have finished. While the server is running, there is always at least one
+ // asynchronous operation outstanding: the asynchronous accept call waiting
+ // for new incoming connections.
+- io_service_.run();
++ io_context_.run();
+ return true;
+ }
+ bool acceptor::stop()
+@@ -181,14 +181,14 @@ namespace tcp_proxy
+ m_bDoStop=true;
+ // Post a call to the stop function so that server::stop() is safe to call
+ // from any thread.
+- io_service_.post([this] { handle_stop(); });
++ io_context_.post([this] { handle_stop(); });
+ return true;
+ }
+
+ void acceptor::handle_stop()
+ {
+ // The server is stopped by canceling all outstanding asynchronous
+- // operations. Once all operations have finished the io_service::run() call
++ // operations. Once all operations have finished the io_context::run() call
+ // will exit.
+ acceptor_.close();
+ //connection_manager_.stop_all();
+diff --git hardware/TCPProxy/tcpproxy_server.h hardware/TCPProxy/tcpproxy_server.h
+index 3d1a150..148e65f 100644
+--- hardware/TCPProxy/tcpproxy_server.h
++++ hardware/TCPProxy/tcpproxy_server.h
+@@ -10,7 +10,7 @@ namespace tcp_proxy
+ class bridge : public std::enable_shared_from_this<bridge>
+ {
+ public:
+- explicit bridge(boost::asio::io_service& ios);
++ explicit bridge(boost::asio::io_context& ios);
+ boost::asio::ip::tcp::socket& downstream_socket();
+ boost::asio::ip::tcp::socket& upstream_socket();
+
+@@ -52,8 +52,8 @@ namespace tcp_proxy
+ void OnUpstreamData(const unsigned char *pData, size_t Len);
+ void OnDownstreamData(const unsigned char *pData, size_t Len);
+
+- /// The io_service used to perform asynchronous operations.
+- boost::asio::io_service io_service_;
++ /// The io_context used to perform asynchronous operations.
++ boost::asio::io_context io_context_;
+ bool m_bDoStop;
+ boost::asio::ip::address_v4 localhost_address;
+ boost::asio::ip::tcp::acceptor acceptor_;
+diff --git hardware/XiaomiDeviceSupport.h hardware/XiaomiDeviceSupport.h
+index fad7884..4a76d96 100644
+--- hardware/XiaomiDeviceSupport.h
++++ hardware/XiaomiDeviceSupport.h
+@@ -15,6 +15,7 @@
+ class XiaomiDeviceSupport
+ {
+ public:
++ virtual ~XiaomiDeviceSupport() = default;
+ /**
+ * Method to get 'model' corresponding to the ID of the device in case the Gateway API didn't provide it.
+ *
+diff --git hardware/XiaomiGateway.cpp hardware/XiaomiGateway.cpp
+index 66acdc5..fb4387a 100644
+--- hardware/XiaomiGateway.cpp
++++ hardware/XiaomiGateway.cpp
+@@ -538,12 +538,12 @@ bool XiaomiGateway::SendMessageToGateway(const std::string &controlmessage)
+ {
+ std::string message = controlmessage;
+ bool result = true;
+- boost::asio::io_service io_service;
+- boost::asio::ip::udp::socket socket_(io_service, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0));
++ boost::asio::io_context io_context;
++ boost::asio::ip::udp::socket socket_(io_context, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0));
+ stdreplace(message, "@gatewaykey", GetGatewayKey());
+ std::shared_ptr<std::string> message1(new std::string(message));
+ boost::asio::ip::udp::endpoint remote_endpoint_;
+- remote_endpoint_ = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string(m_GatewayIp), 9898);
++ remote_endpoint_ = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4(m_GatewayIp), 9898);
+ socket_.send_to(boost::asio::buffer(*message1), remote_endpoint_);
+ sleep_milliseconds(150); // TODO: reduce or remove sleep
+ std::array<char, 512> recv_buffer_;
+@@ -1015,15 +1015,14 @@ bool XiaomiGateway::StopHardware()
+ void XiaomiGateway::Do_Work()
+ {
+ Log(LOG_STATUS, "XiaomiGateway (ID=%d): Worker started...", m_HwdID);
+- boost::asio::io_service io_service;
++ boost::asio::io_context io_context;
+ // Find the local ip address that is similar to the xiaomi gateway
+ try
+ {
+- boost::asio::ip::udp::resolver resolver(io_service);
+- boost::asio::ip::udp::resolver::query query(boost::asio::ip::udp::v4(), m_GatewayIp, "");
+- auto endpoints = resolver.resolve(query);
+- boost::asio::ip::udp::endpoint ep = *endpoints;
+- boost::asio::ip::udp::socket socket(io_service);
++ boost::asio::ip::udp::resolver resolver(io_context);
++ auto endpoints = resolver.resolve(boost::asio::ip::udp::v4(), m_GatewayIp, "");
++ boost::asio::ip::udp::endpoint ep = *endpoints.begin();
++ boost::asio::ip::udp::socket socket(io_context);
+ socket.connect(ep);
+ boost::asio::ip::address addr = socket.local_endpoint().address();
+ std::string compareIp = m_GatewayIp.substr(0, (m_GatewayIp.length() - 3));
+@@ -1073,11 +1072,11 @@ void XiaomiGateway::Do_Work()
+ }
+ }
+
+- XiaomiGateway::xiaomi_udp_server udp_server(io_service, m_HwdID, m_GatewayIp, m_LocalIp, m_ListenPort9898, m_OutputMessage, m_IncludeVoltage, this);
++ XiaomiGateway::xiaomi_udp_server udp_server(io_context, m_HwdID, m_GatewayIp, m_LocalIp, m_ListenPort9898, m_OutputMessage, m_IncludeVoltage, this);
+ boost::thread bt;
+ if (m_ListenPort9898)
+ {
+- bt = boost::thread([p = &io_service] { p->run(); });
++ bt = boost::thread([p = &io_context] { p->run(); });
+ SetThreadName(bt.native_handle(), "XiaomiGatewayIO");
+ }
+
+@@ -1094,7 +1093,7 @@ void XiaomiGateway::Do_Work()
+ // Log(LOG_STATUS, "sec_counter %d", sec_counter);
+ }
+ }
+- io_service.stop();
++ io_context.stop();
+ if (bt.joinable())
+ {
+ bt.join();
+@@ -1178,9 +1177,9 @@ unsigned int XiaomiGateway::GetShortID(const std::string &nodeid)
+ return sID;
+ }
+
+-XiaomiGateway::xiaomi_udp_server::xiaomi_udp_server(boost::asio::io_service &io_service, int m_HwdID, const std::string &gatewayIp, const std::string &localIp, const bool listenPort9898,
++XiaomiGateway::xiaomi_udp_server::xiaomi_udp_server(boost::asio::io_context &io_context, int m_HwdID, const std::string &gatewayIp, const std::string &localIp, const bool listenPort9898,
+ const bool outputMessage, const bool includeVoltage, XiaomiGateway *parent)
+- : socket_(io_service, boost::asio::ip::udp::v4())
++ : socket_(io_context, boost::asio::ip::udp::v4())
+ {
+ m_HardwareID = m_HwdID;
+ m_XiaomiGateway = parent;
+@@ -1196,8 +1195,8 @@ XiaomiGateway::xiaomi_udp_server::xiaomi_udp_server(boost::asio::io_service &io_
+ if (!m_localip.empty())
+ {
+ boost::system::error_code ec;
+- boost::asio::ip::address listen_addr = boost::asio::ip::address::from_string(m_localip, ec);
+- boost::asio::ip::address mcast_addr = boost::asio::ip::address::from_string("224.0.0.50", ec);
++ boost::asio::ip::address listen_addr = boost::asio::ip::make_address_v4(m_localip, ec);
++ boost::asio::ip::address mcast_addr = boost::asio::ip::make_address_v4("224.0.0.50", ec);
+ boost::asio::ip::udp::endpoint listen_endpoint(mcast_addr, 9898);
+
+ socket_.bind(boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 9898));
+@@ -1213,9 +1212,9 @@ XiaomiGateway::xiaomi_udp_server::xiaomi_udp_server(boost::asio::io_service &io_
+ socket_.bind(boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 9898));
+ std::shared_ptr<std::string> message(new std::string(R"({"cmd":"whois"})"));
+ boost::asio::ip::udp::endpoint remote_endpoint;
+- remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string("224.0.0.50"), 4321);
++ remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4("224.0.0.50"), 4321);
+ socket_.send_to(boost::asio::buffer(*message), remote_endpoint);
+- socket_.set_option(boost::asio::ip::multicast::join_group(boost::asio::ip::address::from_string("224.0.0.50")));
++ socket_.set_option(boost::asio::ip::multicast::join_group(boost::asio::ip::make_address_v4("224.0.0.50")));
+ }
+ }
+ catch (const boost::system::system_error &ex)
+@@ -1720,7 +1719,7 @@ void XiaomiGateway::xiaomi_udp_server::handle_receive(const boost::system::error
+ message.append("\"}");
+ std::shared_ptr<std::string> message1(new std::string(message));
+ boost::asio::ip::udp::endpoint remote_endpoint;
+- remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string(TrueGateway->GetGatewayIp().c_str()), 9898);
++ remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4(TrueGateway->GetGatewayIp().c_str()), 9898);
+ socket_.send_to(boost::asio::buffer(*message1), remote_endpoint);
+ }
+ }
+@@ -1746,7 +1745,7 @@ void XiaomiGateway::xiaomi_udp_server::handle_receive(const boost::system::error
+ std::string message = R"({"cmd" : "get_id_list"})";
+ std::shared_ptr<std::string> message2(new std::string(message));
+ boost::asio::ip::udp::endpoint remote_endpoint;
+- remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string(TrueGateway->GetGatewayIp().c_str()), 9898);
++ remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4(TrueGateway->GetGatewayIp().c_str()), 9898);
+ socket_.send_to(boost::asio::buffer(*message2), remote_endpoint);
+ }
+ }
+diff --git hardware/XiaomiGateway.h hardware/XiaomiGateway.h
+index dce4b34..1f552f3 100644
+--- hardware/XiaomiGateway.h
++++ hardware/XiaomiGateway.h
+@@ -100,7 +100,7 @@ class XiaomiGateway : public CDomoticzHardwareBase
+ class xiaomi_udp_server
+ {
+ public:
+- xiaomi_udp_server(boost::asio::io_service &io_service, int m_HwdID, const std::string &gatewayIp, const std::string &localIp, bool listenPort9898, bool outputMessage,
++ xiaomi_udp_server(boost::asio::io_context &io_context, int m_HwdID, const std::string &gatewayIp, const std::string &localIp, bool listenPort9898, bool outputMessage,
+ bool includeVolage, XiaomiGateway *parent);
+ ~xiaomi_udp_server() = default;
+
+diff --git hardware/Yeelight.cpp hardware/Yeelight.cpp
+index cdb7889..e5fe8fc 100644
+--- hardware/Yeelight.cpp
++++ hardware/Yeelight.cpp
+@@ -93,8 +93,8 @@ void Yeelight::Do_Work()
+
+ try
+ {
+- boost::asio::io_service io_service;
+- udp_server server(io_service, m_HwdID);
++ boost::asio::io_context io_context;
++ udp_server server(io_context, m_HwdID);
+ int sec_counter = YEELIGHT_POLL_INTERVAL - 5;
+ while (!IsStopRequested(1000))
+ {
+@@ -105,7 +105,7 @@ void Yeelight::Do_Work()
+ if (sec_counter % 60 == 0) //poll YeeLights every minute
+ {
+ server.start_send();
+- io_service.run();
++ io_context.run();
+ }
+ }
+ }
+@@ -227,12 +227,11 @@ bool Yeelight::WriteToHardware(const char *pdata, const unsigned char length)
+
+ try
+ {
+- boost::asio::io_service io_service;
+- boost::asio::ip::tcp::socket sendSocket(io_service);
+- boost::asio::ip::tcp::resolver resolver(io_service);
+- boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), szTmp, "55443");
+- auto iterator = resolver.resolve(query);
+- boost::asio::connect(sendSocket, iterator);
++ boost::asio::io_context io_context;
++ boost::asio::ip::tcp::socket sendSocket(io_context);
++ boost::asio::ip::tcp::resolver resolver(io_context);
++ auto endpoints = resolver.resolve(boost::asio::ip::tcp::v4(), szTmp, "55443");
++ boost::asio::connect(sendSocket, endpoints);
+
+ std::string message;
+ std::string message2;
+@@ -404,8 +403,8 @@ bool Yeelight::WriteToHardware(const char *pdata, const unsigned char length)
+ std::array<char, 1024> recv_buffer_;
+ int hardwareId;
+
+-Yeelight::udp_server::udp_server(boost::asio::io_service& io_service, int m_HwdID)
+- : socket_(io_service, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0))
++Yeelight::udp_server::udp_server(boost::asio::io_context& io_context, int m_HwdID)
++ : socket_(io_context, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), 0))
+ {
+ socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));
+ socket_.set_option(boost::asio::socket_base::broadcast(true));
+@@ -421,7 +420,7 @@ void Yeelight::udp_server::start_send()
+ //Log(LOG_STATUS, "start_send..................");
+ std::shared_ptr<std::string> message(
+ new std::string(testMessage));
+- remote_endpoint_ = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string("239.255.255.250"), 1982);
++ remote_endpoint_ = boost::asio::ip::udp::endpoint(boost::asio::ip::make_address_v4("239.255.255.250"), 1982);
+ socket_.send_to(boost::asio::buffer(*message), remote_endpoint_);
+ sleep_milliseconds(150);
+ start_receive();
+diff --git hardware/Yeelight.h hardware/Yeelight.h
+index fb03c28..3b7b4c3 100644
+--- hardware/Yeelight.h
++++ hardware/Yeelight.h
+@@ -25,7 +25,7 @@ class Yeelight : public CDomoticzHardwareBase
+ class udp_server
+ {
+ public:
+- udp_server(boost::asio::io_service &io_service, int m_HwdID);
++ udp_server(boost::asio::io_context &io_context, int m_HwdID);
+ boost::asio::ip::udp::socket socket_;
+ boost::asio::ip::udp::endpoint remote_endpoint_;
+ void start_send();
+diff --git hardware/plugins/PluginManager.cpp hardware/plugins/PluginManager.cpp
+index 2813112..423edbb 100644
+--- hardware/plugins/PluginManager.cpp
++++ hardware/plugins/PluginManager.cpp
+@@ -64,7 +64,7 @@ namespace Plugins {
+ // PyMODINIT_FUNC PyInit_DomoticzEvents(void);
+
+ std::mutex PluginMutex; // controls accessto the message queue and m_pPlugins map
+- boost::asio::io_service ios;
++ boost::asio::io_context ios;
+
+ std::map<int, CDomoticzHardwareBase*> CPluginSystem::m_pPlugins;
+ std::map<std::string, std::string> CPluginSystem::m_PluginXml;
+@@ -315,7 +315,7 @@ namespace Plugins {
+ // Create initial IO Service thread
+ ios.restart();
+ // Create some work to keep IO Service alive
+- auto work = boost::asio::io_service::work(ios);
++ auto work = boost::asio::make_work_guard(ios);
+ boost::thread_group BoostThreads;
+ for (int i = 0; i < 1; i++)
+ {
+diff --git hardware/plugins/PluginTransports.cpp hardware/plugins/PluginTransports.cpp
+index 52d14e7..f7ace0f 100644
+--- hardware/plugins/PluginTransports.cpp
++++ hardware/plugins/PluginTransports.cpp
+@@ -116,15 +116,14 @@ namespace Plugins {
+ m_bConnected = false;
+ m_Socket = new boost::asio::ip::tcp::socket(ios);
+
+- boost::system::error_code ec;
+- boost::asio::ip::tcp::resolver::query query(m_IP, m_Port);
+- auto iter = m_Resolver.resolve(query);
+- boost::asio::ip::tcp::endpoint endpoint = *iter;
+-
+ //
+ // Async resolve/connect based on http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio/example/http/client/async_client.cpp
+ //
+- m_Resolver.async_resolve(query, [this](auto &&err, auto end) { handleAsyncResolve(err, end); });
++ m_Resolver.async_resolve(m_IP, m_Port,
++ [this](auto &&err, auto endpoints) {
++ handleAsyncResolve(err, endpoints);
++ }
++ );
+ }
+ }
+ catch (std::exception& e)
+@@ -139,15 +138,14 @@ namespace Plugins {
+ return true;
+ }
+
+- void CPluginTransportTCP::handleAsyncResolve(const boost::system::error_code & err, boost::asio::ip::tcp::resolver::iterator endpoint_iterator)
++ void CPluginTransportTCP::handleAsyncResolve(const boost::system::error_code & err, boost::asio::ip::tcp::resolver::results_type endpoints)
+ {
+ CPlugin* pPlugin = ((CConnection*)m_pConnection)->pPlugin;
+ AccessPython Guard(pPlugin, "CPluginTransportTCP::handleAsyncResolve");
+
+ if (!err)
+ {
+- boost::asio::ip::tcp::endpoint endpoint = *endpoint_iterator;
+- m_Socket->async_connect(endpoint, [this, endpoint_iterator](auto &&err) mutable { handleAsyncConnect(err, ++endpoint_iterator); });
++ boost::asio::async_connect(*m_Socket, endpoints, [this](auto &&err, const boost::asio::ip::tcp::endpoint &endpoint) mutable { handleAsyncConnect(err, endpoint); });
+ }
+ else
+ {
+@@ -169,7 +167,7 @@ namespace Plugins {
+ }
+ }
+
+- void CPluginTransportTCP::handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::resolver::iterator &endpoint_iterator)
++ void CPluginTransportTCP::handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::endpoint &endpoint)
+ {
+ CPlugin* pPlugin = ((CConnection*)m_pConnection)->pPlugin;
+ AccessPython Guard(pPlugin, "CPluginTransportTCP::handleAsyncResolve");
+@@ -481,7 +479,7 @@ namespace Plugins {
+ }
+ };
+
+- void CPluginTransportTCPSecure::handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::resolver::iterator &endpoint_iterator)
++ void CPluginTransportTCPSecure::handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::endpoint &endpoint)
+ {
+ CPlugin* pPlugin = ((CConnection*)m_pConnection)->pPlugin;
+ if (!pPlugin) return;
+@@ -498,7 +496,7 @@ namespace Plugins {
+ SSL_set_tlsext_host_name(m_TLSSock->native_handle(), m_IP.c_str()); // Enable SNI
+
+ m_TLSSock->set_verify_mode(boost::asio::ssl::verify_none);
+- m_TLSSock->set_verify_callback(boost::asio::ssl::rfc2818_verification(m_IP));
++ m_TLSSock->set_verify_callback(boost::asio::ssl::host_name_verification(m_IP));
+ // m_TLSSock->set_verify_callback([this](auto v, auto &c){ VerifyCertificate(v, c);});
+ try
+ {
+@@ -648,7 +646,7 @@ namespace Plugins {
+ // Hanlde multicast
+ if (((m_IP.substr(0, 4) >= "224.") && (m_IP.substr(0, 4) <= "239.")) || (m_IP.substr(0, 4) == "255."))
+ {
+- m_Socket->set_option(boost::asio::ip::multicast::join_group(boost::asio::ip::address::from_string(m_IP.c_str())), ec);
++ m_Socket->set_option(boost::asio::ip::multicast::join_group(boost::asio::ip::make_address_v4(m_IP.c_str())), ec);
+ m_Socket->set_option(boost::asio::ip::multicast::hops(2), ec);
+ }
+ }
+@@ -764,7 +762,7 @@ namespace Plugins {
+ }
+ else
+ {
+- boost::asio::ip::udp::endpoint destination(boost::asio::ip::address::from_string(m_IP.c_str()), atoi(m_Port.c_str()));
++ boost::asio::ip::udp::endpoint destination(boost::asio::ip::make_address_v4(m_IP.c_str()), atoi(m_Port.c_str()));
+ size_t bytes_transferred = m_Socket->send_to(boost::asio::buffer(pMessage, pMessage.size()), destination);
+ }
+ }
+@@ -825,12 +823,14 @@ namespace Plugins {
+ }
+ };
+
+- void CPluginTransportICMP::handleAsyncResolve(const boost::system::error_code &ec, const boost::asio::ip::icmp::resolver::iterator &endpoint_iterator)
++ void CPluginTransportICMP::handleAsyncResolve(const boost::system::error_code &ec, boost::asio::ip::icmp::resolver::results_type endpoints)
+ {
+ if (!ec)
+ {
++ m_Endpoint = endpoints.begin()->endpoint();
++ m_IP = m_Endpoint.address().to_string();
++
+ m_bConnected = true;
+- m_IP = endpoint_iterator->endpoint().address().to_string();
+
+ // Listen will fail (10022 - bad parameter) unless something has been sent(?)
+ std::string body("ping");
+@@ -857,15 +857,11 @@ namespace Plugins {
+ m_bConnecting = true;
+ m_Socket = new boost::asio::ip::icmp::socket(ios, boost::asio::ip::icmp::v4());
+
+- boost::system::error_code ec;
+- boost::asio::ip::icmp::resolver::query query(boost::asio::ip::icmp::v4(), m_IP, "");
+- auto iter = m_Resolver.resolve(query);
+- m_Endpoint = *iter;
+-
+- //
+- // Async resolve/connect based on http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/example/icmp/ping.cpp
+- //
+- m_Resolver.async_resolve(query, [this](auto &&err, auto i) { handleAsyncResolve(err, i); });
++ m_Resolver.async_resolve(boost::asio::ip::icmp::v4(), m_IP, "",
++ [this](auto &&err, auto endpoints) {
++ handleAsyncResolve(err, endpoints);
++ }
++ );
+ }
+ else
+ {
+diff --git hardware/plugins/PluginTransports.h hardware/plugins/PluginTransports.h
+index c1cc1e3..79d5725 100644
+--- hardware/plugins/PluginTransports.h
++++ hardware/plugins/PluginTransports.h
+@@ -6,7 +6,7 @@
+
+ namespace Plugins {
+
+- extern boost::asio::io_service ios;
++ extern boost::asio::io_context ios;
+
+ class CPluginTransport
+ {
+@@ -85,8 +85,8 @@ namespace Plugins {
+ , m_Socket(nullptr){};
+ bool handleConnect() override;
+ bool handleListen() override;
+- virtual void handleAsyncResolve(const boost::system::error_code &err, boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
+- virtual void handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::resolver::iterator &endpoint_iterator);
++ virtual void handleAsyncResolve(const boost::system::error_code &err, boost::asio::ip::tcp::resolver::results_type endpoints);
++ virtual void handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::endpoint &endpoint);
+ virtual void handleAsyncAccept(boost::asio::ip::tcp::socket *pSocket, const boost::system::error_code &error);
+ void handleRead(const boost::system::error_code &e, std::size_t bytes_transferred) override;
+ void handleWrite(const std::vector<byte> &pMessage) override;
+@@ -111,7 +111,7 @@ namespace Plugins {
+ : CPluginTransportTCP(HwdID, pConnection, Address, Port)
+ , m_Context(nullptr)
+ , m_TLSSock(nullptr){};
+- void handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::resolver::iterator &endpoint_iterator) override;
++ void handleAsyncConnect(const boost::system::error_code &err, const boost::asio::ip::tcp::endpoint &endpoint) override;
+ void handleRead(const boost::system::error_code &e, std::size_t bytes_transferred) override;
+ void handleWrite(const std::vector<byte> &pMessage) override;
+ ~CPluginTransportTCPSecure() override;
+@@ -151,7 +151,7 @@ namespace Plugins {
+ , m_Socket(nullptr)
+ , m_Timer(nullptr)
+ , m_SequenceNo(-1){};
+- void handleAsyncResolve(const boost::system::error_code &err, const boost::asio::ip::icmp::resolver::iterator &endpoint_iterator);
++ void handleAsyncResolve(const boost::system::error_code &err, boost::asio::ip::icmp::resolver::results_type endpoints);
+ bool handleListen() override;
+ void handleTimeout(const boost::system::error_code &) override;
+ void handleRead(const boost::system::error_code &e, std::size_t bytes_transferred) override;
+diff --git main/WebServerCmds.cpp main/WebServerCmds.cpp
+index 7d4a9f2..3586373 100644
+--- main/WebServerCmds.cpp
++++ main/WebServerCmds.cpp
+@@ -1632,7 +1632,7 @@ namespace http
+ ExtraHeaders.push_back("App_Revision: " + std::to_string(iAppRevision));
+ ExtraHeaders.push_back("System_Name: " + systemname);
+ ExtraHeaders.push_back("Machine: " + machine);
+- ExtraHeaders.push_back("Type: " + (!bIsBetaChannel) ? "Stable" : "Beta");
++ ExtraHeaders.push_back("Type: " + std::string(!bIsBetaChannel ? "Stable" : "Beta"));
+
+ if (!HTTPClient::GET(szHistoryURL, ExtraHeaders, historyfile))
+ {
+diff --git main/mainworker.cpp main/mainworker.cpp
+index b5027eb..b8f8dc7 100644
+--- main/mainworker.cpp
++++ main/mainworker.cpp
+@@ -1318,7 +1318,7 @@ bool MainWorker::IsUpdateAvailable(const bool bIsForced)
+ ExtraHeaders.push_back("App_Revision: " + std::to_string(iAppRevision));
+ ExtraHeaders.push_back("System_Name: " + m_szSystemName);
+ ExtraHeaders.push_back("Machine: " + machine);
+- ExtraHeaders.push_back("Type: " + (!bIsBetaChannel) ? "Stable" : "Beta");
++ ExtraHeaders.push_back("Type: " + std::string(!bIsBetaChannel ? "Stable" : "Beta"));
+
+ if (!HTTPClient::GET(szURL, ExtraHeaders, revfile))
+ return false;
+diff --git plugins/examples/Pinger.py plugins/examples/Pinger.py
+index 6b54559..c7a776d 100644
+--- plugins/examples/Pinger.py
++++ plugins/examples/Pinger.py
+@@ -3,7 +3,7 @@
+ # Author: Dnpwwo, 2017 - 2018
+ #
+ """
+-<plugin key="ICMP" name="Pinger (ICMP)" author="dnpwwo" version="3.1.4">
++<plugin key="ICMP" name="Pinger (ICMP)" author="dnpwwo" version="3.1.5">
+ <description>
+ ICMP Pinger Plugin.<br/><br/>
+ Specify comma delimted addresses (IP or DNS names) of devices that are to be pinged.<br/>
+@@ -144,8 +144,9 @@ class BasePlugin:
+ for Device in Devices:
+ if (("Name" in Devices[Device].Options) and (Devices[Device].Options["Name"] == Connection.Name)):
+ UpdateDevice(Device, 0, "Off", TimedOut)
+- self.icmpConn.Close()
+- self.icmpConn = None
++ if (self.icmpConn != None):
++ self.icmpConn.Close()
++ self.icmpConn = None
+
+ def onHeartbeat(self):
+ Domoticz.Debug("Heartbeating...")
+diff --git push/MQTTPush.h push/MQTTPush.h
+index 0773b43..d9f9332 100644
+--- push/MQTTPush.h
++++ push/MQTTPush.h
+@@ -14,7 +14,7 @@ public:
+ void on_message(const struct mosquitto_message* message) override;
+ void on_connect(int rc) override;
+ void on_disconnect(int rc) override;
+- void on_going_down();
++ void on_going_down() override;
+ private:
+ struct _tPushItem
+ {
+diff --git tcpserver/TCPClient.cpp tcpserver/TCPClient.cpp
+index d55da10..3eee093 100644
+--- tcpserver/TCPClient.cpp
++++ tcpserver/TCPClient.cpp
+@@ -19,7 +19,7 @@ namespace tcp {
+ delete socket_;
+ }
+
+- CTCPClient::CTCPClient(boost::asio::io_service& ios, CTCPServerIntBase* pManager)
++ CTCPClient::CTCPClient(boost::asio::io_context& ios, CTCPServerIntBase* pManager)
+ : CTCPClientBase(pManager)
+ {
+ socket_ = new boost::asio::ip::tcp::socket(ios);
+diff --git tcpserver/TCPClient.h tcpserver/TCPClient.h
+index df4350d..e7a882b 100644
+--- tcpserver/TCPClient.h
++++ tcpserver/TCPClient.h
+@@ -38,7 +38,7 @@ class CTCPClient : public CTCPClientBase,
+ public std::enable_shared_from_this<CTCPClient>
+ {
+ public:
+- CTCPClient(boost::asio::io_service& ios, CTCPServerIntBase *pManager);
++ CTCPClient(boost::asio::io_context& ios, CTCPServerIntBase *pManager);
+ ~CTCPClient() = default;
+ void start() override;
+ void stop() override;
+diff --git tcpserver/TCPServer.cpp tcpserver/TCPServer.cpp
+index 91fdc7e..57f8709 100644
+--- tcpserver/TCPServer.cpp
++++ tcpserver/TCPServer.cpp
+@@ -18,14 +18,14 @@ namespace tcp {
+
+ CTCPServerInt::CTCPServerInt(const std::string& address, const std::string& port, CTCPServer* pRoot) :
+ CTCPServerIntBase(pRoot),
+- io_service_(),
+- acceptor_(io_service_)
++ io_context_(),
++ acceptor_(io_context_)
+ {
+ // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
+- boost::asio::ip::tcp::resolver resolver(io_service_);
+- boost::asio::ip::tcp::resolver::query query(address, port);
+- boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);
+- acceptor_.open(endpoint.protocol());
++ boost::asio::ip::tcp::resolver resolver(io_context_);
++ boost::asio::ip::basic_resolver<boost::asio::ip::tcp>::results_type endpoints = resolver.resolve(address, port);
++ auto endpoint = *endpoints.begin();
++ acceptor_.open(endpoint.endpoint().protocol());
+ acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+ // bind to both ipv6 and ipv4 sockets for the "::" address only
+ if (address == "::")
+@@ -35,7 +35,7 @@ namespace tcp {
+ acceptor_.bind(endpoint);
+ acceptor_.listen();
+
+- new_connection_ = std::make_shared<CTCPClient>(io_service_, this);
++ new_connection_ = std::make_shared<CTCPClient>(io_context_, this);
+ if (new_connection_ == nullptr)
+ {
+ _log.Log(LOG_ERROR, "Error creating new client!");
+@@ -47,24 +47,24 @@ namespace tcp {
+
+ void CTCPServerInt::start()
+ {
+- // The io_service::run() call will block until all asynchronous operations
++ // The io_context::run() call will block until all asynchronous operations
+ // have finished. While the server is running, there is always at least one
+ // asynchronous operation outstanding: the asynchronous accept call waiting
+ // for new incoming connections.
+- io_service_.run();
++ io_context_.run();
+ }
+
+ void CTCPServerInt::stop()
+ {
+ // Post a call to the stop function so that server::stop() is safe to call
+ // from any thread.
+- io_service_.post([this] { handle_stop(); });
++ boost::asio::post([this] { handle_stop(); });
+ }
+
+ void CTCPServerInt::handle_stop()
+ {
+ // The server is stopped by cancelling all outstanding asynchronous
+- // operations. Once all operations have finished the io_service::run() call
++ // operations. Once all operations have finished the io_context::run() call
+ // will exit.
+ acceptor_.close();
+ stopAllClients();
+@@ -88,7 +88,7 @@ namespace tcp {
+ connections_.insert(new_connection_);
+ new_connection_->start();
+
+- new_connection_.reset(new CTCPClient(io_service_, this));
++ new_connection_.reset(new CTCPClient(io_context_, this));
+
+ acceptor_.async_accept(*(new_connection_->socket()), [this](auto&& err) { handleAccept(err); });
+ }
+diff --git tcpserver/TCPServer.h tcpserver/TCPServer.h
+index ca611b1..17284ca 100644
+--- tcpserver/TCPServer.h
++++ tcpserver/TCPServer.h
+@@ -70,8 +70,8 @@ private:
+ /// Handle a request to stop the server.
+ void handle_stop();
+
+- /// The io_service used to perform asynchronous operations.
+- boost::asio::io_service io_service_;
++ /// The io_context used to perform asynchronous operations.
++ boost::asio::io_context io_context_;
+
+ boost::asio::ip::tcp::acceptor acceptor_;
+
+diff --git webserver/cWebem.cpp webserver/cWebem.cpp
+index 57d9683..c0d292d 100644
+--- webserver/cWebem.cpp
++++ webserver/cWebem.cpp
+@@ -47,13 +47,13 @@ namespace http {
+ , myRequestHandler(doc_root, this)
+ // Rene, make sure we initialize m_sessions first, before starting a server
+ , myServer(server_factory::create(settings, myRequestHandler))
+- , m_io_service()
+- , m_session_clean_timer(m_io_service, boost::posix_time::minutes(1))
++ , m_io_context()
++ , m_session_clean_timer(m_io_context, boost::posix_time::minutes(1))
+ {
+ // associate handler to timer and schedule the first iteration
+ m_session_clean_timer.async_wait([this](auto &&) { CleanSessions(); });
+- m_io_service_thread = std::make_shared<std::thread>([p = &m_io_service] { p->run(); });
+- SetThreadName(m_io_service_thread->native_handle(), "Webem_ssncleaner");
++ m_io_context_thread = std::make_shared<std::thread>([p = &m_io_context] { p->run(); });
++ SetThreadName(m_io_context_thread->native_handle(), "Webem_ssncleaner");
+ }
+
+ cWebem::~cWebem()
+@@ -93,14 +93,14 @@ namespace http {
+ // Stop session cleaner
+ try
+ {
+- if (!m_io_service.stopped())
++ if (!m_io_context.stopped())
+ {
+- m_io_service.stop();
++ m_io_context.stop();
+ }
+- if (m_io_service_thread)
++ if (m_io_context_thread)
+ {
+- m_io_service_thread->join();
+- m_io_service_thread.reset();
++ m_io_context_thread->join();
++ m_io_context_thread.reset();
+ }
+ }
+ catch (...)
+diff --git webserver/cWebem.h webserver/cWebem.h
+index 6e3b899..7905c45 100644
+--- webserver/cWebem.h
++++ webserver/cWebem.h
+@@ -259,9 +259,9 @@ namespace http
+ std::string m_webRoot;
+ /// sessions management
+ std::mutex m_sessionsMutex;
+- boost::asio::io_service m_io_service;
++ boost::asio::io_context m_io_context;
+ boost::asio::deadline_timer m_session_clean_timer;
+- std::shared_ptr<std::thread> m_io_service_thread;
++ std::shared_ptr<std::thread> m_io_context_thread;
+ };
+
+ } // namespace server
+diff --git webserver/connection.cpp webserver/connection.cpp
+index 40f9788..3a70924 100644
+--- webserver/connection.cpp
++++ webserver/connection.cpp
+@@ -22,13 +22,13 @@ namespace http {
+ extern time_t last_write_time(const std::string& path);
+
+ // this is the constructor for plain connections
+- connection::connection(boost::asio::io_service &io_service, connection_manager &manager, request_handler &handler, int read_timeout)
++ connection::connection(boost::asio::io_context &io_context, connection_manager &manager, request_handler &handler, int read_timeout)
+ : send_buffer_(nullptr)
+ , read_timeout_(read_timeout)
+- , read_timer_(io_service, boost::posix_time::seconds(read_timeout))
++ , read_timer_(io_context, boost::posix_time::seconds(read_timeout))
+ , default_abandoned_timeout_(20 * 60)
+ // 20mn before stopping abandoned connection
+- , abandoned_timer_(io_service, boost::posix_time::seconds(default_abandoned_timeout_))
++ , abandoned_timer_(io_context, boost::posix_time::seconds(default_abandoned_timeout_))
+ , connection_manager_(manager)
+ , request_handler_(handler)
+ , status_(INITIALIZING)
+@@ -39,18 +39,18 @@ namespace http {
+ keepalive_ = false;
+ write_in_progress = false;
+ connection_type = ConnectionType::connection_http;
+- socket_ = std::make_unique<boost::asio::ip::tcp::socket>(io_service);
++ socket_ = std::make_unique<boost::asio::ip::tcp::socket>(io_context);
+ }
+
+ #ifdef WWW_ENABLE_SSL
+ // this is the constructor for secure connections
+- connection::connection(boost::asio::io_service &io_service, connection_manager &manager, request_handler &handler, int read_timeout, boost::asio::ssl::context &context)
++ connection::connection(boost::asio::io_context &io_context, connection_manager &manager, request_handler &handler, int read_timeout, boost::asio::ssl::context &context)
+ : send_buffer_(nullptr)
+ , read_timeout_(read_timeout)
+- , read_timer_(io_service, boost::posix_time::seconds(read_timeout))
++ , read_timer_(io_context, boost::posix_time::seconds(read_timeout))
+ , default_abandoned_timeout_(20 * 60)
+ // 20mn before stopping abandoned connection
+- , abandoned_timer_(io_service, boost::posix_time::seconds(default_abandoned_timeout_))
++ , abandoned_timer_(io_context, boost::posix_time::seconds(default_abandoned_timeout_))
+ , connection_manager_(manager)
+ , request_handler_(handler)
+ , status_(INITIALIZING)
+@@ -62,7 +62,7 @@ namespace http {
+ write_in_progress = false;
+ connection_type = ConnectionType::connection_http;
+ socket_ = nullptr;
+- sslsocket_ = std::make_unique<ssl_socket>(io_service, context);
++ sslsocket_ = std::make_unique<ssl_socket>(io_context, context);
+ }
+ #endif
+
+@@ -152,9 +152,9 @@ namespace http {
+ if (error != boost::asio::error::operation_aborted) {
+ switch (connection_type) {
+ case ConnectionType::connection_http:
+- // Timers should be cancelled before stopping to remove tasks from the io_service.
+- // The io_service will stop naturally when every tasks are removed.
+- // If timers are not cancelled, the exception ERROR_ABANDONED_WAIT_0 is thrown up to the io_service::run() caller.
++ // Timers should be cancelled before stopping to remove tasks from the io_context.
++ // The io_context will stop naturally when every tasks are removed.
++ // If timers are not cancelled, the exception ERROR_ABANDONED_WAIT_0 is thrown up to the io_context::run() caller.
+ cancel_abandoned_timeout();
+ cancel_read_timeout();
+
+@@ -372,7 +372,7 @@ namespace http {
+ switch (connection_type)
+ {
+ case ConnectionType::connection_http:
+- begin = boost::asio::buffer_cast<const char*>(_buf.data());
++ begin = static_cast<const char*>(_buf.data().data());
+ try
+ {
+ request_parser_.reset();
+@@ -404,7 +404,7 @@ namespace http {
+ newt = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+ }
+
+- size_t sizeread = begin - boost::asio::buffer_cast<const char*>(_buf.data());
++ size_t sizeread = begin - static_cast<const char*>(_buf.data().data());
+ _buf.consume(sizeread);
+ reply_.reset();
+ const char* pConnection = request_.get_req_header(&request_, "Connection");
+@@ -520,7 +520,7 @@ namespace http {
+ break;
+ case ConnectionType::connection_websocket:
+ case ConnectionType::connection_websocket_closing:
+- begin = boost::asio::buffer_cast<const char*>(_buf.data());
++ begin = static_cast<const char*>(_buf.data().data());
+ result = websocket_parser.parse((const unsigned char*)begin, _buf.size(), bytes_consumed, keepalive_);
+ _buf.consume(bytes_consumed);
+ if (result) {
+diff --git webserver/connection.hpp webserver/connection.hpp
+index ce452b5..c1a82c5 100644
+--- webserver/connection.hpp
++++ webserver/connection.hpp
+@@ -43,11 +43,11 @@ namespace http {
+ std::string host_local_endpoint_port_;
+ std::string host_last_request_uri_;
+ };
+- /// Construct a connection with the given io_service.
+- explicit connection(boost::asio::io_service& io_service,
++ /// Construct a connection with the given io_context.
++ explicit connection(boost::asio::io_context& io_context,
+ connection_manager& manager, request_handler& handler, int timeout);
+ #ifdef WWW_ENABLE_SSL
+- explicit connection(boost::asio::io_service& io_service,
++ explicit connection(boost::asio::io_context& io_context,
+ connection_manager& manager, request_handler& handler, int timeout, boost::asio::ssl::context& context);
+ #endif
+ ~connection() = default;
+diff --git webserver/server.cpp webserver/server.cpp
+index da15887..8bdfc13 100644
+--- webserver/server.cpp
++++ webserver/server.cpp
+@@ -13,15 +13,15 @@ namespace http {
+ namespace server {
+
+ server_base::server_base(const server_settings &settings, request_handler &user_request_handler)
+- : io_service_()
+- , acceptor_(io_service_)
++ : io_context_()
++ , acceptor_(io_context_)
+ , request_handler_(user_request_handler)
+ , settings_(settings)
+ , timeout_(20)
+ , // default read timeout in seconds
+ is_running(false)
+ , is_stop_complete(false)
+- , m_heartbeat_timer(io_service_)
++ , m_heartbeat_timer(io_context_)
+ {
+ if (!settings.is_enabled())
+ {
+@@ -39,10 +39,10 @@ namespace server {
+ }
+
+ // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR).
+- boost::asio::ip::tcp::resolver resolver(io_service_);
+- boost::asio::ip::tcp::resolver::query query(settings_.listening_address, settings_.listening_port);
+- boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);
+- acceptor_.open(endpoint.protocol());
++ boost::asio::ip::tcp::resolver resolver(io_context_);
++ boost::asio::ip::basic_resolver<boost::asio::ip::tcp>::results_type endpoints = resolver.resolve(settings_.listening_address, settings_.listening_port);
++ auto endpoint = *endpoints.begin();
++ acceptor_.open(endpoint.endpoint().protocol());
+ acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+ // bind to both ipv6 and ipv4 sockets for the "::" address only
+ if (settings_.listening_address == "::")
+@@ -59,28 +59,28 @@ namespace server {
+ }
+
+ void server_base::run() {
+- // The io_service::run() call will block until all asynchronous operations
++ // The io_context::run() call will block until all asynchronous operations
+ // have finished. While the server is running, there is always at least one
+ // asynchronous operation outstanding: the asynchronous accept call waiting
+ // for new incoming connections.
+ try {
+ is_running = true;
+ heart_beat(boost::system::error_code());
+- io_service_.run();
++ io_context_.run();
+ is_running = false;
+ } catch (std::exception& e) {
+ _log.Log(LOG_ERROR, "[web:%s] exception occurred : '%s' (need to run again)", settings_.listening_port.c_str(), e.what());
+ is_running = false;
+ // Note: if acceptor is up everything is OK, we can call run() again
+ // but if the exception has broken the acceptor we cannot stop/start it and the next run() will exit immediatly.
+- io_service_.reset(); // this call is needed before calling run() again
++ io_context_.restart(); // this call is needed before calling run() again
+ throw;
+ } catch (...) {
+ _log.Log(LOG_ERROR, "[web:%s] unknown exception occurred (need to run again)", settings_.listening_port.c_str());
+ is_running = false;
+ // Note: if acceptor is up everything is OK, we can call run() again
+ // but if the exception has broken the acceptor we cannot stop/start it and the next run() will exit immediatly.
+- io_service_.reset(); // this call is needed before calling run() again
++ io_context_.restart(); // this call is needed before calling run() again
+ throw;
+ }
+ }
+@@ -89,12 +89,12 @@ void server_base::run() {
+ void server_base::stop() {
+ if (is_running) {
+ // Post a call to the stop function so that server_base::stop() is safe to call from any thread.
+- // Rene, set is_running to false, because the following is an io_service call, which makes is_running
++ // Rene, set is_running to false, because the following is an io_context call, which makes is_running
+ // never set to false whilst in the call itself
+ is_running = false;
+- io_service_.post([this] { handle_stop(); });
++ boost::asio::post(io_context_, [this] { handle_stop(); });
+ } else {
+- // if io_service is not running then the post call will not be performed
++ // if io_context is not running then the post call will not be performed
+ handle_stop();
+ }
+
+@@ -112,7 +112,7 @@ void server_base::stop() {
+ }
+ sleep_milliseconds(500);
+ }
+- io_service_.stop();
++ io_context_.stop();
+
+ // Deregister heartbeat
+ m_mainworker.HeartbeatRemove(std::string("WebServer:") + settings_.listening_port);
+@@ -136,7 +136,7 @@ void server_base::heart_beat(const boost::system::error_code& error)
+ m_mainworker.HeartbeatUpdate(std::string("WebServer:") + settings_.listening_port);
+
+ // Schedule next heartbeat
+- m_heartbeat_timer.expires_from_now(std::chrono::seconds(4));
++ m_heartbeat_timer.expires_after(std::chrono::seconds(4));
+ m_heartbeat_timer.async_wait([this](auto &&err) { heart_beat(err); });
+ }
+ }
+@@ -148,7 +148,7 @@ server::server(const server_settings &settings, request_handler &user_request_ha
+ }
+
+ void server::init_connection() {
+- new_connection_.reset(new connection(io_service_, connection_manager_, request_handler_, timeout_));
++ new_connection_.reset(new connection(io_context_, connection_manager_, request_handler_, timeout_));
+ }
+
+ /**
+@@ -157,7 +157,7 @@ void server::init_connection() {
+ void server::handle_accept(const boost::system::error_code& e) {
+ if (!e) {
+ connection_manager_.start(new_connection_);
+- new_connection_.reset(new connection(io_service_,
++ new_connection_.reset(new connection(io_context_,
+ connection_manager_, request_handler_, timeout_));
+ // listen for a subsequent request
+ acceptor_.async_accept(new_connection_->socket(), [this](auto &&err) { handle_accept(err); });
+@@ -267,7 +267,7 @@ void ssl_server::init_connection() {
+ } else {
+ _log.Log(LOG_ERROR, "[web:%s] missing SSL DH parameters file %s!", settings_.listening_port.c_str(), settings_.tmp_dh_file_path.c_str());
+ }
+- new_connection_.reset(new connection(io_service_, connection_manager_, request_handler_, timeout_, context_));
++ new_connection_.reset(new connection(io_context_, connection_manager_, request_handler_, timeout_, context_));
+ }
+
+ void ssl_server::reinit_connection()
+@@ -305,7 +305,7 @@ void ssl_server::reinit_connection()
+ _log.Log(LOG_ERROR, "[web:%s] missing SSL DH parameters from file %s", settings_.listening_port.c_str(), settings_.tmp_dh_file_path.c_str());
+ }
+ }
+- new_connection_.reset(new connection(io_service_, connection_manager_, request_handler_, timeout_, context_));
++ new_connection_.reset(new connection(io_context_, connection_manager_, request_handler_, timeout_, context_));
+ }
+
+ /**
+diff --git webserver/server.hpp webserver/server.hpp
+index f9e71c5..bd7132a 100644
+--- webserver/server.hpp
++++ webserver/server.hpp
+@@ -31,7 +31,7 @@ namespace http
+ explicit server_base(const server_settings &settings, request_handler &user_request_handler);
+ virtual ~server_base() = default;
+
+- /// Run the server's io_service loop.
++ /// Run the server's io_context loop.
+ void run();
+
+ /// Stop the server.
+@@ -46,8 +46,8 @@ namespace http
+ protected:
+ void init(const init_connectionhandler_func &init_connection_handler, accept_handler_func accept_handler);
+
+- /// The io_service used to perform asynchronous operations.
+- boost::asio::io_service io_service_;
++ /// The io_context used to perform asynchronous operations.
++ boost::asio::io_context io_context_;
+
+ /// Acceptor used to listen for incoming connections.
+ boost::asio::ip::tcp::acceptor acceptor_;
diff --git a/www/dooble/Makefile b/www/dooble/Makefile
index 6f62bd209ab6..5d55648441e1 100644
--- a/www/dooble/Makefile
+++ b/www/dooble/Makefile
@@ -1,5 +1,5 @@
PORTNAME= dooble
-DISTVERSION= 2025.04.27
+DISTVERSION= 2025.05.10
CATEGORIES= www
MAINTAINER= eric@camachat.org
@@ -14,7 +14,7 @@ USES= compiler:c++17-lang desktop-file-utils gl gmake qmake qt:6 ssl \
USE_GITHUB= yes
GH_ACCOUNT= textbrowser
GH_TUPLE= textbrowser:dooble-dictionaries:0f1e715:dictionaries
-#textbrowser:dooble:${PORTVERSION}:DEFAULT
+#textbrowser:dooble:${DISTVERSION}:DEFAULT
USE_GL= opengl
USE_QT= base charts declarative positioning sqldriver-sqlite:run \
webchannel webengine
diff --git a/www/dooble/distinfo b/www/dooble/distinfo
index a1a114f0288b..09504ea3e85b 100644
--- a/www/dooble/distinfo
+++ b/www/dooble/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1745801937
-SHA256 (textbrowser-dooble-2025.04.27_GH0.tar.gz) = 7c683ae0a5c3b31a10a64da8c222f59e81d32c2082437928e1bbf97418fa6d1e
-SIZE (textbrowser-dooble-2025.04.27_GH0.tar.gz) = 6503615
+TIMESTAMP = 1746933413
+SHA256 (textbrowser-dooble-2025.05.10_GH0.tar.gz) = f217358f98a03f7ae0f32e33a1c70755827948befc417d5c490b276549f733cd
+SIZE (textbrowser-dooble-2025.05.10_GH0.tar.gz) = 6503611
SHA256 (textbrowser-dooble-dictionaries-0f1e715_GH0.tar.gz) = 474b2fd45429ed4cf68347dedd2c47650310d7e53a23cbeb8452655f596dc80c
SIZE (textbrowser-dooble-dictionaries-0f1e715_GH0.tar.gz) = 34764866
diff --git a/www/firefox/Makefile b/www/firefox/Makefile
index 391762f538d6..0c1192ce1e7f 100644
--- a/www/firefox/Makefile
+++ b/www/firefox/Makefile
@@ -1,5 +1,5 @@
PORTNAME= firefox
-DISTVERSION= 138.0.1
+DISTVERSION= 138.0.4
PORTEPOCH= 2
CATEGORIES= www wayland
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}${DISTVERSIONSUFFIX}/source \
diff --git a/www/firefox/distinfo b/www/firefox/distinfo
index c8c179d239f5..f2b3b71e35a3 100644
--- a/www/firefox/distinfo
+++ b/www/firefox/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1746105917
-SHA256 (firefox-138.0.1.source.tar.xz) = 9894b96203876f847637af20f961cd4494ff1f2d85e4c096a7f358f54d9ecb2b
-SIZE (firefox-138.0.1.source.tar.xz) = 632213452
+TIMESTAMP = 1747504074
+SHA256 (firefox-138.0.4.source.tar.xz) = 3fd30db08dad90b339e08d27db1e3aab03a174817d336314327dc5305c145056
+SIZE (firefox-138.0.4.source.tar.xz) = 623414956
diff --git a/www/galene/Makefile b/www/galene/Makefile
index 15cdbfaf3a58..8bea5d198bab 100644
--- a/www/galene/Makefile
+++ b/www/galene/Makefile
@@ -1,6 +1,5 @@
PORTNAME= galene
-DISTVERSION= 0.96
-PORTREVISION= 2
+DISTVERSION= 0.96.3
CATEGORIES= www net-im
MAINTAINER= bapt@FreeBSD.org
@@ -23,32 +22,33 @@ GH_TUPLE= \
davecgh:go-spew:v1.1.1:davecgh_go_spew/vendor/github.com/davecgh/go-spew \
go-yaml:yaml:v3.0.1:go_yaml_yaml/vendor/gopkg.in/yaml.v3 \
golang-jwt:jwt:v5.2.1:golang_jwt_jwt_v5/vendor/github.com/golang-jwt/jwt/v5 \
- golang:crypto:v0.29.0:golang_crypto/vendor/golang.org/x/crypto \
- golang:net:v0.30.0:golang_net/vendor/golang.org/x/net \
- golang:sys:v0.27.0:golang_sys/vendor/golang.org/x/sys \
- golang:term:v0.26.0:golang_term/vendor/golang.org/x/term \
+ golang:crypto:v0.31.0:golang_crypto/vendor/golang.org/x/crypto \
+ golang:net:v0.33.0:golang_net/vendor/golang.org/x/net \
+ golang:sys:v0.28.0:golang_sys/vendor/golang.org/x/sys \
+ golang:term:v0.27.0:golang_term/vendor/golang.org/x/term \
google:uuid:v1.6.0:google_uuid/vendor/github.com/google/uuid \
gorilla:websocket:v1.5.0:gorilla_websocket/vendor/github.com/gorilla/websocket \
jech:cert:f491cf43a77d:jech_cert/vendor/github.com/jech/cert \
jech:samplebuilder:6cbba09fc1c9:jech_samplebuilder/vendor/github.com/jech/samplebuilder \
- pion:datachannel:v1.5.9:pion_datachannel/vendor/github.com/pion/datachannel \
+ pion:datachannel:v1.5.10:pion_datachannel/vendor/github.com/pion/datachannel \
pion:dtls:v2.2.12:pion_dtls_v2/vendor/github.com/pion/dtls/v2 \
pion:ice:v2.3.37:pion_ice_v2/vendor/github.com/pion/ice/v2 \
pion:interceptor:v0.1.37:pion_interceptor/vendor/github.com/pion/interceptor \
pion:logging:v0.2.2:pion_logging/vendor/github.com/pion/logging \
pion:mdns:v0.0.12:pion_mdns/vendor/github.com/pion/mdns \
pion:randutil:v0.1.0:pion_randutil/vendor/github.com/pion/randutil \
- pion:rtcp:v1.2.14:pion_rtcp/vendor/github.com/pion/rtcp \
- pion:rtp:v1.8.9:pion_rtp/vendor/github.com/pion/rtp \
- pion:sctp:v1.8.33:pion_sctp/vendor/github.com/pion/sctp \
+ pion:rtcp:v1.2.15:pion_rtcp/vendor/github.com/pion/rtcp \
+ pion:rtp:v1.8.10:pion_rtp/vendor/github.com/pion/rtp \
+ pion:sctp:v1.8.35:pion_sctp/vendor/github.com/pion/sctp \
pion:sdp:v3.0.9:pion_sdp_v3/vendor/github.com/pion/sdp/v3 \
pion:srtp:v2.0.20:pion_srtp_v2/vendor/github.com/pion/srtp/v2 \
pion:stun:v0.6.1:pion_stun/vendor/github.com/pion/stun \
pion:transport:v2.2.10:pion_transport_v2/vendor/github.com/pion/transport/v2 \
+ pion:transport:v3.0.7:pion_transport_v3/vendor/github.com/pion/transport/v3 \
pion:turn:v2.1.6:pion_turn_v2/vendor/github.com/pion/turn/v2 \
- pion:webrtc:v3.3.4:pion_webrtc_v3/vendor/github.com/pion/webrtc/v3 \
+ pion:webrtc:v3.3.5:pion_webrtc_v3/vendor/github.com/pion/webrtc/v3 \
pmezard:go-difflib:v1.0.0:pmezard_go_difflib/vendor/github.com/pmezard/go-difflib \
- stretchr:testify:v1.9.0:stretchr_testify/vendor/github.com/stretchr/testify \
+ stretchr:testify:v1.10.0:stretchr_testify/vendor/github.com/stretchr/testify \
wlynxg:anet:v0.0.5:wlynxg_anet/vendor/github.com/wlynxg/anet
CGO_ENABLED= 0
diff --git a/www/galene/distinfo b/www/galene/distinfo
index 9bb0479c504f..0191b7d04ad1 100644
--- a/www/galene/distinfo
+++ b/www/galene/distinfo
@@ -1,6 +1,6 @@
-TIMESTAMP = 1735802329
-SHA256 (jech-galene-0.96-galene-0.96_GH0.tar.gz) = fc689fccc718943909cd7585a94574c4a7f7b4168c41028d0d22c73cf6b2dcd6
-SIZE (jech-galene-0.96-galene-0.96_GH0.tar.gz) = 778766
+TIMESTAMP = 1747332374
+SHA256 (jech-galene-0.96.3-galene-0.96.3_GH0.tar.gz) = c76e5b6c059b94d102c2b726ab144ba6a70bdde8135f6733893217172af5201a
+SIZE (jech-galene-0.96.3-galene-0.96.3_GH0.tar.gz) = 888837
SHA256 (at-wat-ebml-go-v0.17.1_GH0.tar.gz) = f058fcf7f4da9f979531a0ba1f811fc34c8d9d30087ba8d442eef220e726cbe3
SIZE (at-wat-ebml-go-v0.17.1_GH0.tar.gz) = 69882
SHA256 (davecgh-go-spew-v1.1.1_GH0.tar.gz) = 7d82b9bb7291adbe7498fe946920ab3e7fc9e6cbfc3b2294693fad00bf0dd17e
@@ -9,14 +9,14 @@ SHA256 (go-yaml-yaml-v3.0.1_GH0.tar.gz) = cf05411540d3e6ef8f1fd88434b34f94cedace
SIZE (go-yaml-yaml-v3.0.1_GH0.tar.gz) = 91173
SHA256 (golang-jwt-jwt-v5.2.1_GH0.tar.gz) = 76d1c81a7cd38ed03309f770f60ac3417f16c75b4c53a0c01bb783863783fef0
SIZE (golang-jwt-jwt-v5.2.1_GH0.tar.gz) = 61340
-SHA256 (golang-crypto-v0.29.0_GH0.tar.gz) = 0f1f747a65c883857c5f6c54b01e228536698dcc5af652386ccfc994c2a3c991
-SIZE (golang-crypto-v0.29.0_GH0.tar.gz) = 1847528
-SHA256 (golang-net-v0.30.0_GH0.tar.gz) = c5bcae30a04fc5c9d6fccfceb368cc1a46413eefdccefdea57336e2b11a1fbfa
-SIZE (golang-net-v0.30.0_GH0.tar.gz) = 1456700
-SHA256 (golang-sys-v0.27.0_GH0.tar.gz) = 91f2021c81184dccca54272abfdfa7f6d0b43fcdf7e36c4d62c1ab597e7988a9
-SIZE (golang-sys-v0.27.0_GH0.tar.gz) = 1518154
-SHA256 (golang-term-v0.26.0_GH0.tar.gz) = 860d9dc2e32939c99ea3590171d8897ca6b876958085fd210d7331787c1ad00b
-SIZE (golang-term-v0.26.0_GH0.tar.gz) = 14688
+SHA256 (golang-crypto-v0.31.0_GH0.tar.gz) = 36e325f89d4cd03ec568d92c74d6affd2b1fb88fcdc63aeb15d1df41e11200ca
+SIZE (golang-crypto-v0.31.0_GH0.tar.gz) = 1837859
+SHA256 (golang-net-v0.33.0_GH0.tar.gz) = 675e0ceaf54baf4f6e2a5152fe148906119c97e7b1d37d1c44ec2621faeab0e8
+SIZE (golang-net-v0.33.0_GH0.tar.gz) = 1466426
+SHA256 (golang-sys-v0.28.0_GH0.tar.gz) = 62726b1ccbb09c7e8de2215756a26012751bdded12b5bacc6de83296db694ebf
+SIZE (golang-sys-v0.28.0_GH0.tar.gz) = 1519898
+SHA256 (golang-term-v0.27.0_GH0.tar.gz) = 4053cac47f4fcd6e38fe80ed4e52a10550681109a09ff7a6cabdb6e1af6bb5a6
+SIZE (golang-term-v0.27.0_GH0.tar.gz) = 14689
SHA256 (google-uuid-v1.6.0_GH0.tar.gz) = ee63376b5675376c60e055ed66e5f3651ccc703bd580c022b8ad00cea309252d
SIZE (google-uuid-v1.6.0_GH0.tar.gz) = 20896
SHA256 (gorilla-websocket-v1.5.0_GH0.tar.gz) = 5d86f9e1c76ff7ceca0747f78b79864fbaec9d440f4fdb03197466e5102a86b0
@@ -25,8 +25,8 @@ SHA256 (jech-cert-f491cf43a77d_GH0.tar.gz) = a31c5dc063e19e49e27454e9ffd12fd0895
SIZE (jech-cert-f491cf43a77d_GH0.tar.gz) = 3756
SHA256 (jech-samplebuilder-6cbba09fc1c9_GH0.tar.gz) = 08082afa77f3083c0b15ed09fe27d43c525bc31af3662e13288dd167a609c2ad
SIZE (jech-samplebuilder-6cbba09fc1c9_GH0.tar.gz) = 12428
-SHA256 (pion-datachannel-v1.5.9_GH0.tar.gz) = b23a0532f6a70ba3eae2a8052285f01545866fb56dd30cb12cd1f616bbb8eb8f
-SIZE (pion-datachannel-v1.5.9_GH0.tar.gz) = 17018
+SHA256 (pion-datachannel-v1.5.10_GH0.tar.gz) = 07b7d4decbc83e84f00ce2c1587f55579aa5c018379c8e17c7d6c681df5c8eb6
+SIZE (pion-datachannel-v1.5.10_GH0.tar.gz) = 17048
SHA256 (pion-dtls-v2.2.12_GH0.tar.gz) = 17d45dba2712a9fff680f1e441b26566daf7f9103656fd3f65d05fda0b5e0009
SIZE (pion-dtls-v2.2.12_GH0.tar.gz) = 152165
SHA256 (pion-ice-v2.3.37_GH0.tar.gz) = e935cbc70fb9344c5407b4a7cd3c7299d2db3bd4a5785346b040a102d5a5380d
@@ -39,12 +39,12 @@ SHA256 (pion-mdns-v0.0.12_GH0.tar.gz) = d291ea4260996731e09103beb498f6e1b9fd3643
SIZE (pion-mdns-v0.0.12_GH0.tar.gz) = 17490
SHA256 (pion-randutil-v0.1.0_GH0.tar.gz) = 4b0301915ebbfa77c8621cebf99c6c7d71651762a33ce4fa4e6af8994ecd4993
SIZE (pion-randutil-v0.1.0_GH0.tar.gz) = 7521
-SHA256 (pion-rtcp-v1.2.14_GH0.tar.gz) = ab0674ed126edfafc8dcb1c70d269cf04d6498983e5ebe92c9c8ea776234d660
-SIZE (pion-rtcp-v1.2.14_GH0.tar.gz) = 59682
-SHA256 (pion-rtp-v1.8.9_GH0.tar.gz) = c4174853bc2cd78193621e7c96b72ba5f52edaa88e98b8e79b531bc943f225fd
-SIZE (pion-rtp-v1.8.9_GH0.tar.gz) = 62171
-SHA256 (pion-sctp-v1.8.33_GH0.tar.gz) = ffeac32cbdc684462701aae276106e1912b86b470242b886e1a8866e4a74c51b
-SIZE (pion-sctp-v1.8.33_GH0.tar.gz) = 94390
+SHA256 (pion-rtcp-v1.2.15_GH0.tar.gz) = b3032a27547fe6a2d2468db5925399b8e13aec3770788db98b91c327bb54695f
+SIZE (pion-rtcp-v1.2.15_GH0.tar.gz) = 61468
+SHA256 (pion-rtp-v1.8.10_GH0.tar.gz) = f998acdb35dc3c8741fc4198b240342bc549777db6414adc75e70765e1cac57a
+SIZE (pion-rtp-v1.8.10_GH0.tar.gz) = 62142
+SHA256 (pion-sctp-v1.8.35_GH0.tar.gz) = 780d450604fd9eafcc1f2b93f42d0c0ca690be8c57770e6a3cc817270ac37821
+SIZE (pion-sctp-v1.8.35_GH0.tar.gz) = 96553
SHA256 (pion-sdp-v3.0.9_GH0.tar.gz) = d0de98412c90f90379297f00c7b766a8bbf129672d2e896d3bcd780d37f35e60
SIZE (pion-sdp-v3.0.9_GH0.tar.gz) = 28358
SHA256 (pion-srtp-v2.0.20_GH0.tar.gz) = 8156afe373b0f6f43dbbbd56deca6b32f039d9995d0b6bd3c2757c1630b5443e
@@ -53,13 +53,15 @@ SHA256 (pion-stun-v0.6.1_GH0.tar.gz) = 6abda07e177b9f65412e3b11dae6a35663869ebec
SIZE (pion-stun-v0.6.1_GH0.tar.gz) = 91808
SHA256 (pion-transport-v2.2.10_GH0.tar.gz) = 112640b7644824e3e63426bfd23712bcaadab670e3171f86c34948863b5ff0ff
SIZE (pion-transport-v2.2.10_GH0.tar.gz) = 90002
+SHA256 (pion-transport-v3.0.7_GH0.tar.gz) = dca2f4ede133623bfb1f2d1a055e500c80ef3faa39ad9db4d45086d60c7458b5
+SIZE (pion-transport-v3.0.7_GH0.tar.gz) = 85680
SHA256 (pion-turn-v2.1.6_GH0.tar.gz) = 243841be67659ad71437e818b82c4032731cf1a3ad73e948bf3abbe27a5addb5
SIZE (pion-turn-v2.1.6_GH0.tar.gz) = 131516
-SHA256 (pion-webrtc-v3.3.4_GH0.tar.gz) = 90ffd02e21676079b5e4a50ac4a310bff8f707fdc4d75812c347d26460c22286
-SIZE (pion-webrtc-v3.3.4_GH0.tar.gz) = 386093
+SHA256 (pion-webrtc-v3.3.5_GH0.tar.gz) = 93ff5d7860d94a1411bd532d9d4e1affb0e8d99e83e36c2a7596d753438e2cb8
+SIZE (pion-webrtc-v3.3.5_GH0.tar.gz) = 386477
SHA256 (pmezard-go-difflib-v1.0.0_GH0.tar.gz) = 28f3dc1b5c0efd61203ab07233f774740d3bf08da4d8153fb5310db6cea0ebda
SIZE (pmezard-go-difflib-v1.0.0_GH0.tar.gz) = 11398
-SHA256 (stretchr-testify-v1.9.0_GH0.tar.gz) = ee651d4d4427d55096007190398102383498e6b5cf97ea9e89ad6e72b4115fbb
-SIZE (stretchr-testify-v1.9.0_GH0.tar.gz) = 108663
+SHA256 (stretchr-testify-v1.10.0_GH0.tar.gz) = 06af5143ab5fc8f2fbf3d1420a5f002f6383cd7de911698dbd1822beacb27684
+SIZE (stretchr-testify-v1.10.0_GH0.tar.gz) = 112732
SHA256 (wlynxg-anet-v0.0.5_GH0.tar.gz) = bf9a401124ec58f00413b5597fc7f9ced9abd3314ec62ce49021c4c7b023d47e
SIZE (wlynxg-anet-v0.0.5_GH0.tar.gz) = 5475910
diff --git a/www/gohugo/Makefile b/www/gohugo/Makefile
index 6fa0ea62b87a..a998c60d116c 100644
--- a/www/gohugo/Makefile
+++ b/www/gohugo/Makefile
@@ -1,6 +1,6 @@
PORTNAME= hugo
DISTVERSIONPREFIX= v
-DISTVERSION= 0.147.2
+DISTVERSION= 0.147.3
PORTEPOCH= 1
CATEGORIES= www
PKGNAMEPREFIX= go
diff --git a/www/gohugo/distinfo b/www/gohugo/distinfo
index 4fbf4c8e298a..550828130a87 100644
--- a/www/gohugo/distinfo
+++ b/www/gohugo/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1746548045
-SHA256 (go/www_gohugo/hugo-v0.147.2/v0.147.2.mod) = cb41ea476364590e46adc72d923c617f69d99544d2a78c743ae4608f4c43ea25
-SIZE (go/www_gohugo/hugo-v0.147.2/v0.147.2.mod) = 8036
-SHA256 (go/www_gohugo/hugo-v0.147.2/v0.147.2.zip) = 2d350d624ec4d6b3e8782c641955e4314f980259e3de0ba843313882587910f6
-SIZE (go/www_gohugo/hugo-v0.147.2/v0.147.2.zip) = 5733684
+TIMESTAMP = 1747057537
+SHA256 (go/www_gohugo/hugo-v0.147.3/v0.147.3.mod) = cb41ea476364590e46adc72d923c617f69d99544d2a78c743ae4608f4c43ea25
+SIZE (go/www_gohugo/hugo-v0.147.3/v0.147.3.mod) = 8036
+SHA256 (go/www_gohugo/hugo-v0.147.3/v0.147.3.zip) = 36a1eb90054d1cef4aa8f74a9951e44c211d0d68d0d3fe90a8af4764fa6a0117
+SIZE (go/www_gohugo/hugo-v0.147.3/v0.147.3.zip) = 5734808
diff --git a/www/grafana/Makefile b/www/grafana/Makefile
index 0dd96cfe8e72..6f770e49d424 100644
--- a/www/grafana/Makefile
+++ b/www/grafana/Makefile
@@ -1,18 +1,28 @@
PORTNAME= grafana
DISTVERSIONPREFIX= v
-DISTVERSION= 11.6.1
+DISTVERSION= 12.0.0
CATEGORIES= www
MASTER_SITES= https://dl.grafana.com/oss/release/ \
https://raw.githubusercontent.com/${GH_ACCOUNT}/${GH_PROJECT}/${DISTVERSIONFULL}/:gomod
DISTFILES= grafana-${DISTVERSION}.linux-amd64${EXTRACT_SUFX} \
go.mod:gomod \
go.work:gomod \
+ .citools/bra/go.mod:gomod \
+ .citools/cog/go.mod:gomod \
+ .citools/cue/go.mod:gomod \
+ .citools/golangci-lint/go.mod:gomod \
+ .citools/jb/go.mod:gomod \
+ .citools/lefthook/go.mod:gomod \
+ .citools/swagger/go.mod:gomod \
apps/advisor/go.mod:gomod \
apps/alerting/notifications/go.mod:gomod \
+ apps/dashboard/go.mod:gomod \
+ apps/folder/go.mod:gomod \
apps/investigations/go.mod:gomod \
apps/playlist/go.mod:gomod \
pkg/aggregator/go.mod:gomod \
pkg/apimachinery/go.mod:gomod \
+ pkg/apis/secret/go.mod:gomod \
pkg/apiserver/go.mod:gomod \
pkg/build/go.mod:gomod \
pkg/build/wire/go.mod:gomod \
@@ -42,14 +52,15 @@ USES= cpe go:1.24,modules
USE_GITHUB= yes
USE_RC_SUBR= grafana
-TAG= ae23ead
+TAG= 4c0e704
-GO_MODULE= github.com/grafana/grafana
GO_MOD_DIST= github
+GO_MODULE= github.com/grafana/grafana
GO_TARGET= ./pkg/cmd/grafana \
./pkg/cmd/grafana-server \
./pkg/cmd/grafana-cli
-GO_BUILDFLAGS= -ldflags="-w -X main.version=${PORTVERSION} -X main.commit=${TAG}"
+GO_BUILDFLAGS= -ldflags="-w -X main.version=${DISTVERSION} -X main.commit=${TAG} \
+ -X main.buildstamp=$$(${STAT} -f %Sm -t %s ${WRKSRC}/.gitignore)"
CONFLICTS_INSTALL= grafana*
diff --git a/www/grafana/distinfo b/www/grafana/distinfo
index 1aa24ff481fe..48c8b409e43a 100644
--- a/www/grafana/distinfo
+++ b/www/grafana/distinfo
@@ -1,41 +1,61 @@
-TIMESTAMP = 1745492346
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/grafana-11.6.1.linux-amd64.tar.gz) = 35a5efca8c535ce961217765faf8d6895c6d1c1587eaeec50d606a5cb218603b
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/grafana-11.6.1.linux-amd64.tar.gz) = 178027958
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/go.mod) = 91c7674d10c8814d15ada1bad9d1bd41c0c5e8969c5e5da1da5be85d33fe49d8
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/go.mod) = 37750
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/go.work) = 91abc49021e028c3c2a4736a1c91e473d980ae1c7540138f9e1f436a62329a81
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/go.work) = 1462
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/apps/advisor/go.mod) = 6c61070df4915b2e6fb69f557bd105c760b941acadd3c66f3fcd57bf7d4d1585
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/apps/advisor/go.mod) = 4058
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/apps/alerting/notifications/go.mod) = 124a37f4bdb7a567d3a511767c1638496ecc5a1dd5f97633fcba7155faf52df6
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/apps/alerting/notifications/go.mod) = 4797
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/apps/investigations/go.mod) = 3c3fe091bb7aed6c745175e21ccb3e961a81f0653a84a97d7ac696258f8108c4
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/apps/investigations/go.mod) = 4257
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/apps/playlist/go.mod) = 8a5d285defd20e31ef83b1263e79762cdd08fe9f1e688830bdad1644279a68cd
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/apps/playlist/go.mod) = 4239
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/aggregator/go.mod) = c316078737a7666ce9cf0da5f7f7d107ade730adbbe5752732d74899c2d38b31
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/aggregator/go.mod) = 8280
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/apimachinery/go.mod) = b1b10d93f324e13169864fe92a6d93b0fb23614a6c645775d75c56d311fc3c87
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/apimachinery/go.mod) = 2516
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/apiserver/go.mod) = 4400608ae4eb0546c1918324a44f7c5f6b35fcb545756fd170fc8de9be3b83d4
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/apiserver/go.mod) = 5052
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/build/go.mod) = ec5a5dac4253889681f8888b61ad5d5059a855d72aa82dd5bcaeb80ab91101c9
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/build/go.mod) = 7764
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/build/wire/go.mod) = fbc23dcc413d6b1fa9ab71380da68211859df0e155165d4aabcf557499fb6cf6
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/build/wire/go.mod) = 330
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/codegen/go.mod) = 7eeccc07ccb7293e6051f207882ea8c9f22199b886acebbc41b6459b651904e5
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/codegen/go.mod) = 2437
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/plugins/codegen/go.mod) = 6ee06b09fab35cc0a7d99cd955d770c820b2b9c1f4cfaec53d1127302b22597e
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/plugins/codegen/go.mod) = 2233
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/promlib/go.mod) = 3d788d99106f6c4aebc9d5e5feb1eb8c52ae1504fc6224e4bf0af8f5026568fe
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/promlib/go.mod) = 6861
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/semconv/go.mod) = 102611f5bece34904bdb7928b7a852764ffb36bc25efb8ce69673a5d61ce1a86
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/semconv/go.mod) = 314
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/storage/unified/apistore/go.mod) = ac17130a28f32539688a7650c734d1b84ef5c01489c89c148b7b79a0a89746f1
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/storage/unified/apistore/go.mod) = 23405
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/storage/unified/resource/go.mod) = 15915ab2954992958d66bbded2270f043994ba6ea868720fa6d3f2d9788acc33
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/storage/unified/resource/go.mod) = 14537
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/util/xorm/go.mod) = fd0137d7c79a69fe252bde216f0f8146fbb301e344fb4f2a4c444d6379da9cb5
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/pkg/util/xorm/go.mod) = 3150
-SHA256 (go/www_grafana/grafana-grafana-v11.6.1_GH0/grafana-grafana-v11.6.1_GH0.tar.gz) = 1435ba4b47d22f906495c3f53be9f416a721b5b0ca0621533393130fff87aa73
-SIZE (go/www_grafana/grafana-grafana-v11.6.1_GH0/grafana-grafana-v11.6.1_GH0.tar.gz) = 36539394
+TIMESTAMP = 1746523933
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/grafana-12.0.0.linux-amd64.tar.gz) = b5f15e29cb815c24eaf631ebaab1729608d9c44606bdef24e5248ccbeba2e95e
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/grafana-12.0.0.linux-amd64.tar.gz) = 183576101
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/go.mod) = 6ceec7e41167dd6ccb862746961e40d0cf31c8526684bfd2c980007f205609cf
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/go.mod) = 38990
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/go.work) = 582d313125088d393e9bf0bc3e62d4ce4e01f5bca62d404de61359b32fe624a4
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/go.work) = 1420
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/bra/go.mod) = 9c26b766b230e220d3a089052ecbbc735c5813503cea96f00b98e2f426f1500b
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/bra/go.mod) = 845
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/cog/go.mod) = 85c347f1808375367fd14a913af040aaedb179768bbe0f31fb7a511f8f9c3ccb
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/cog/go.mod) = 2256
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/cue/go.mod) = ce73854fe392b493136dd8585c1d431d72cd82c244bf617073352004648a9471
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/cue/go.mod) = 1533
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/golangci-lint/go.mod) = 6697690d3f339916262d3ed0a2f10880823e19db9520e907ee840e551d8ae8ac
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/golangci-lint/go.mod) = 10518
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/jb/go.mod) = 3c425afcbd554cfb50b6b5595b91cb67d8e990c967a428c3f34186b6de745475
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/jb/go.mod) = 788
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/lefthook/go.mod) = 7a722525e0e97bc44608efd3baee778d5a96ed464acae97291ec2f67a287f7f2
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/lefthook/go.mod) = 2508
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/swagger/go.mod) = a5a2ca8a1422870edac6a4d5aa94065ddbbf9b769667077fd27a0e1d2f73bfba
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/.citools/swagger/go.mod) = 2983
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/advisor/go.mod) = 6c61070df4915b2e6fb69f557bd105c760b941acadd3c66f3fcd57bf7d4d1585
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/advisor/go.mod) = 4058
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/alerting/notifications/go.mod) = d433a9fcbea78026ef8f926b3b10f701568d04ecc9c9d61fba0d199213c592c3
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/alerting/notifications/go.mod) = 4838
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/dashboard/go.mod) = 13786f0addc30cd695e352543e1409c0ffa8857eb69a544007d9c78e218dcc21
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/dashboard/go.mod) = 6587
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/folder/go.mod) = f1b308c3d11835603f93425a59619ac600b74590b16c003bf44ce9a61787e17a
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/folder/go.mod) = 2749
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/investigations/go.mod) = 39a2dd9a2655af15232f35fda4656e5a7162dce7a22a02903185d4d8363316c1
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/investigations/go.mod) = 4319
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/playlist/go.mod) = af328216a05802c409348764579c74249af6cc944c0f87ef3f141dcfe01535de
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/apps/playlist/go.mod) = 4301
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/aggregator/go.mod) = 3d7b399ae76ee86858d2555edb186f8b106c1e2860701710914d04c57b773a36
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/aggregator/go.mod) = 8310
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/apimachinery/go.mod) = 20cca84623d4bd3bd7c67de6e31fa3f433e99e42df6936ac665f645fe39fbadf
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/apimachinery/go.mod) = 2472
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/apis/secret/go.mod) = fa225e7fb224a25468dc0f2b247a55db248f65f9b944b7ac0f3ec5f7614de062
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/apis/secret/go.mod) = 4939
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/apiserver/go.mod) = 7378a27c0569587d71c6e0323718d21337c8186cf1b93df3093c1583731e5e10
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/apiserver/go.mod) = 5111
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/build/go.mod) = 45257f048442b4c6bd7ce660db2cab5d51a76378d1819ffa9ee103e82b0dfeca
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/build/go.mod) = 7931
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/build/wire/go.mod) = c4bd5ec552b8a78c51631dd0c4e5654481c6ef72d6b897fd8cdadec90d1c3db0
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/build/wire/go.mod) = 330
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/codegen/go.mod) = af218f935140c2564403f76d0b4cb2a3867ccb78558ba5f610ea5a106f4ccdbe
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/codegen/go.mod) = 2490
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/plugins/codegen/go.mod) = 14e17b15ca415ed502b6391b65e0b28a2c2682d52215ad52afe901ba2c3eb480
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/plugins/codegen/go.mod) = 2233
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/promlib/go.mod) = 99645974b2fba727e251431f916fc8fb4ecfac110cb4358af5ee0e25442ef383
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/promlib/go.mod) = 6945
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/semconv/go.mod) = dffd3c1a8b43a8c1f81c88afc7fabd07551f08a727caa6c81b21cc7f22989500
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/semconv/go.mod) = 269
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/storage/unified/apistore/go.mod) = 09bf0410097e19e63fead5f16ab2a493eb000ca8a78102592d4fb07647e0c74f
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/storage/unified/apistore/go.mod) = 23423
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/storage/unified/resource/go.mod) = ec8255b1d842f1ea1a6fb79d3b10144dc2a066c37c241621825b8e124708e0e1
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/storage/unified/resource/go.mod) = 11340
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/util/xorm/go.mod) = efd1c53e50b60912388fa292a66c6c618f3888b28bf1f58767b344fbb5b71285
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/pkg/util/xorm/go.mod) = 3135
+SHA256 (go/www_grafana/grafana-grafana-v12.0.0_GH0/grafana-grafana-v12.0.0_GH0.tar.gz) = 479b337fc101adfc8386414af053337b567c8d11480aa05499ccd929c4d70601
+SIZE (go/www_grafana/grafana-grafana-v12.0.0_GH0/grafana-grafana-v12.0.0_GH0.tar.gz) = 37646751
diff --git a/www/hs-DAV/Makefile b/www/hs-DAV/Makefile
index f39bd3ad1b86..65266e6ae3ba 100644
--- a/www/hs-DAV/Makefile
+++ b/www/hs-DAV/Makefile
@@ -1,6 +1,6 @@
PORTNAME= DAV
PORTVERSION= 1.3.4
-PORTREVISION= 6
+PORTREVISION= 7
CATEGORIES= www haskell
MAINTAINER= haskell@FreeBSD.org
@@ -11,127 +11,130 @@ LICENSE= GPLv3
USES= cabal
-USE_CABAL= OneTuple-0.4.1.1_1 \
- QuickCheck-2.14.3 \
+USE_CABAL= OneTuple-0.4.2_1 \
+ QuickCheck-2.15.0.1_1 \
StateVar-1.2.2 \
- adjunctions-4.4.2_2 \
- aeson-2.2.1.0_1 \
- ansi-terminal-1.1 \
+ adjunctions-4.4.3 \
+ aeson-2.2.3.0_3 \
+ ansi-terminal-1.1.2 \
ansi-terminal-types-1.1 \
appar-0.1.8 \
asn1-encoding-0.9.6_2 \
asn1-parse-0.9.5 \
asn1-types-0.3.4 \
- assoc-1.1_1 \
- async-2.2.5 \
- attoparsec-0.14.4_5 \
- base-orphans-0.9.1 \
+ assoc-1.1.1_1 \
+ async-2.2.5_3 \
+ attoparsec-0.14.4_6 \
+ base-orphans-0.9.3 \
base16-bytestring-1.0.2.0_1 \
base64-bytestring-1.2.1.0_1 \
basement-0.0.16 \
- bifunctors-5.6.1_2 \
- bitvec-1.1.5.0 \
+ bifunctors-5.6.2_2 \
+ bitvec-1.1.5.0_3 \
blaze-builder-0.4.2.3 \
- blaze-html-0.9.1.2_4 \
- blaze-markup-0.8.3.0_1 \
+ blaze-html-0.9.2.0_1 \
+ blaze-markup-0.8.3.0_2 \
byteorder-1.0.4 \
- cabal-doctest-1.0.9_3 \
+ cabal-doctest-1.0.11 \
call-stack-0.4.0 \
case-insensitive-1.2.1.0 \
- cborg-0.2.10.0 \
+ cborg-0.2.10.0_2 \
cereal-0.5.8.3 \
+ character-ps-0.1 \
colour-2.3.6 \
- comonad-5.0.8_2 \
- conduit-1.3.5 \
- conduit-extra-1.3.6 \
+ comonad-5.0.9_1 \
+ conduit-1.3.6.1 \
+ conduit-extra-1.3.7 \
contravariant-1.5.5 \
- cookie-0.4.6 \
- crypton-0.34 \
- crypton-connection-0.3.2 \
- crypton-x509-1.7.6_1 \
- crypton-x509-store-1.6.9 \
+ cookie-0.5.1 \
+ crypton-1.0.4 \
+ crypton-connection-0.4.4 \
+ crypton-x509-1.7.7 \
+ crypton-x509-store-1.6.10 \
crypton-x509-system-1.6.7 \
- crypton-x509-validation-1.6.12 \
- data-default-0.7.1.1 \
- data-default-class-0.1.2.0 \
- data-default-instances-containers-0.0.1 \
- data-default-instances-dlist-0.0.1 \
- data-default-instances-old-locale-0.0.1 \
- data-fix-0.3.2_5 \
+ crypton-x509-validation-1.6.14 \
+ data-default-0.8.0.1 \
+ data-default-class-0.2.0.0 \
+ data-fix-0.3.4_1 \
distributive-0.6.2.1_1 \
- dlist-1.0_1 \
+ dlist-1.0_2 \
+ ech-config-0.0.1 \
file-embed-0.0.16.0 \
- free-5.2_3 \
- generically-0.1.1_2 \
- half-0.3.1_1 \
- hashable-1.4.3.0_1 \
- hourglass-0.2.12 \
- hsc2hs-0.68.10_1 \
- http-client-0.7.16 \
- http-client-tls-0.3.6.3 \
+ free-5.2_7 \
+ generically-0.1.1_4 \
+ half-0.3.2 \
+ hashable-1.5.0.0_1 \
+ hourglass-0.2.12_1 \
+ hpke-0.0.0 \
+ hsc2hs-0.68.10_4 \
+ http-client-0.7.19 \
+ http-client-tls-0.3.6.4_2 \
http-types-0.12.4 \
- indexed-traversable-0.1.3 \
- indexed-traversable-instances-0.1.1.2_2 \
- integer-conversion-0.1.0.1_1 \
- integer-logarithms-1.0.3.1_5 \
- invariant-0.6.2_1 \
- iproute-1.7.12 \
- kan-extensions-5.2.5_2 \
- lens-5.2.3_2 \
- memory-0.18.0 \
+ indexed-traversable-0.1.4_1 \
+ indexed-traversable-instances-0.1.2_1 \
+ integer-conversion-0.1.1_1 \
+ integer-logarithms-1.0.4 \
+ invariant-0.6.4_1 \
+ iproute-1.7.15 \
+ kan-extensions-5.2.6_1 \
+ lens-5.3.4 \
+ memory-0.18.0_1 \
mime-types-0.1.2.0 \
- mono-traversable-1.0.17.0 \
- network-3.1.4.0_1 \
+ mono-traversable-1.0.21.0 \
+ network-3.2.7.0 \
+ network-byte-order-0.1.7 \
network-uri-2.6.4.2_1 \
old-locale-1.0.0.7_2 \
old-time-1.1.0.4 \
- optparse-applicative-0.18.1.0 \
- parallel-3.2.2.0_7 \
+ optparse-applicative-0.18.1.0_1 \
+ os-string-2.0.7 \
+ parallel-3.2.2.0_9 \
pem-0.2.4 \
prettyprinter-1.7.1 \
prettyprinter-ansi-terminal-1.1.3 \
- primitive-0.9.0.0 \
+ primitive-0.9.1.0 \
profunctors-5.6.2_3 \
- random-1.2.1.2 \
- reflection-2.1.7_1 \
+ random-1.3.1 \
+ reflection-2.1.9_1 \
resourcet-1.3.0 \
- scientific-0.3.7.0_7 \
- semialign-1.3_1 \
- semigroupoids-6.0.0.1_1 \
+ scientific-0.3.8.0_2 \
+ semialign-1.3.1_2 \
+ semigroupoids-6.0.1_2 \
semigroups-0.20 \
- serialise-0.2.6.1_1 \
+ serialise-0.2.6.1_4 \
shakespeare-2.1.0.1 \
socks-0.6.1 \
split-0.2.5 \
- splitmix-0.1.0.5 \
- streaming-commons-0.2.2.6_1 \
- strict-0.5_1 \
- tagged-0.8.8 \
- text-iso8601-0.1_1 \
- text-short-0.1.5_3 \
- th-abstraction-0.6.0.0_1 \
- th-compat-0.1.4_4 \
- th-lift-0.8.4 \
- these-1.2_1 \
- time-compat-1.9.6.1_6 \
- tls-2.0.1 \
+ splitmix-0.1.1 \
+ streaming-commons-0.2.3.0 \
+ strict-0.5.1_1 \
+ tagged-0.8.9 \
+ tasty-1.5.3_1 \
+ text-iso8601-0.1.1_2 \
+ text-short-0.1.6_3 \
+ th-abstraction-0.7.1.0_1 \
+ th-compat-0.1.6 \
+ th-lift-0.8.6 \
+ these-1.2.1_2 \
+ time-compat-1.9.8 \
+ tls-2.1.9 \
transformers-base-0.4.6 \
transformers-compat-0.7.2 \
- typed-process-0.2.11.1 \
- unix-time-0.4.12 \
- unliftio-core-0.2.1.0_3 \
- unordered-containers-0.2.20_1 \
+ typed-process-0.2.13.0 \
+ unix-time-0.4.16 \
+ unliftio-core-0.2.1.0_4 \
+ unordered-containers-0.2.20_4 \
utf8-string-1.0.2 \
- uuid-types-1.0.5.1 \
- vector-0.13.1.0 \
- vector-algorithms-0.9.0.1_3 \
- vector-stream-0.1.0.1 \
+ uuid-types-1.0.6_3 \
+ vector-0.13.2.0_1 \
+ vector-algorithms-0.9.1.0 \
+ vector-stream-0.1.0.1_3 \
void-0.7.3 \
- witherable-0.4.2_4 \
- xml-conduit-1.9.1.3 \
+ witherable-0.5_1 \
+ xml-conduit-1.10.0.0 \
xml-hamlet-0.5.0.2 \
xml-types-0.3.8 \
- zlib-0.7.0.0
+ zlib-0.7.1.0_2
CABAL_EXECUTABLES= hdav
diff --git a/www/hs-DAV/distinfo b/www/hs-DAV/distinfo
index 854e4fcb56e7..8507c518ba1f 100644
--- a/www/hs-DAV/distinfo
+++ b/www/hs-DAV/distinfo
@@ -1,24 +1,24 @@
-TIMESTAMP = 1709138755
+TIMESTAMP = 1747068459
SHA256 (cabal/DAV-1.3.4/DAV-1.3.4.tar.gz) = 5e3b825290a0bd4c9da1c814b5e67901b0f9f1d16a88effaa7e060a81c895bc7
SIZE (cabal/DAV-1.3.4/DAV-1.3.4.tar.gz) = 19884
-SHA256 (cabal/OneTuple-0.4.1.1/OneTuple-0.4.1.1.tar.gz) = c9e764d4ee1e57cad8341bd5d0de33ba3a52b6793fc1309679f2bf60c030bb2b
-SIZE (cabal/OneTuple-0.4.1.1/OneTuple-0.4.1.1.tar.gz) = 5601
-SHA256 (cabal/OneTuple-0.4.1.1/revision/1.cabal) = 632dfded172086fb9f0e26d3578bcfffa3fb6d135ea5a8de17b7a33ff6e6e682
-SIZE (cabal/OneTuple-0.4.1.1/revision/1.cabal) = 2575
-SHA256 (cabal/QuickCheck-2.14.3/QuickCheck-2.14.3.tar.gz) = 5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501
-SIZE (cabal/QuickCheck-2.14.3/QuickCheck-2.14.3.tar.gz) = 76849
+SHA256 (cabal/OneTuple-0.4.2/OneTuple-0.4.2.tar.gz) = 174da8a0f4004d17b08182cb25b0e045fce5de1fdeae84e9d75fdea2867aab55
+SIZE (cabal/OneTuple-0.4.2/OneTuple-0.4.2.tar.gz) = 5207
+SHA256 (cabal/OneTuple-0.4.2/revision/1.cabal) = dd7266f983da2970e5662168add810dabadabb3a4bb9b137181eafc0ac7ea4d4
+SIZE (cabal/OneTuple-0.4.2/revision/1.cabal) = 2013
+SHA256 (cabal/QuickCheck-2.15.0.1/QuickCheck-2.15.0.1.tar.gz) = a3b2216ddbaf481dbc82414b6120f8b726d969db3f0b51f20a7a45425ef36e7f
+SIZE (cabal/QuickCheck-2.15.0.1/QuickCheck-2.15.0.1.tar.gz) = 81502
+SHA256 (cabal/QuickCheck-2.15.0.1/revision/1.cabal) = 0cfd337bb9e6fbf09255bd24bb498a156f1d9bcd465396ac8657b25034b9ee31
+SIZE (cabal/QuickCheck-2.15.0.1/revision/1.cabal) = 9046
SHA256 (cabal/StateVar-1.2.2/StateVar-1.2.2.tar.gz) = 5e4b39da395656a59827b0280508aafdc70335798b50e5d6fd52596026251825
SIZE (cabal/StateVar-1.2.2/StateVar-1.2.2.tar.gz) = 5048
-SHA256 (cabal/adjunctions-4.4.2/adjunctions-4.4.2.tar.gz) = 147b5f8db810bca0ea8952ef974982ffc447cecd21f01e1ea1121df77e276518
-SIZE (cabal/adjunctions-4.4.2/adjunctions-4.4.2.tar.gz) = 17201
-SHA256 (cabal/adjunctions-4.4.2/revision/2.cabal) = 30206ae6b78d3d523c2ff73640f84b51fa204ac3f05267a5f0c77c486b96781d
-SIZE (cabal/adjunctions-4.4.2/revision/2.cabal) = 3379
-SHA256 (cabal/aeson-2.2.1.0/aeson-2.2.1.0.tar.gz) = 914eefd0e80d12db5c721daa2cbab427acee39795f125c5460c1fe48cf9a5d7f
-SIZE (cabal/aeson-2.2.1.0/aeson-2.2.1.0.tar.gz) = 341038
-SHA256 (cabal/aeson-2.2.1.0/revision/1.cabal) = a23a61aada8233e10573e1612c0b2efe5a1aba0d59b05dbe2f63301822f136cb
-SIZE (cabal/aeson-2.2.1.0/revision/1.cabal) = 6582
-SHA256 (cabal/ansi-terminal-1.1/ansi-terminal-1.1.tar.gz) = 525d6257bebad9755fa528ce03e64c6a439fbc129aa307a14063896e4871b253
-SIZE (cabal/ansi-terminal-1.1/ansi-terminal-1.1.tar.gz) = 34897
+SHA256 (cabal/adjunctions-4.4.3/adjunctions-4.4.3.tar.gz) = 8beb121cee2bf913dac3188ed1e0e05cf1a0d0f12d4cb4a27c0da58450eb189a
+SIZE (cabal/adjunctions-4.4.3/adjunctions-4.4.3.tar.gz) = 16788
+SHA256 (cabal/aeson-2.2.3.0/aeson-2.2.3.0.tar.gz) = daa25cf428256ad05d21f2bfa44077c1b14d6c784b7930a202ee901f11cc6baa
+SIZE (cabal/aeson-2.2.3.0/aeson-2.2.3.0.tar.gz) = 340855
+SHA256 (cabal/aeson-2.2.3.0/revision/3.cabal) = 61e559f2bad61a98aac564f2a4fd892d21e9e1712e14e3db93326317aa944a9b
+SIZE (cabal/aeson-2.2.3.0/revision/3.cabal) = 6378
+SHA256 (cabal/ansi-terminal-1.1.2/ansi-terminal-1.1.2.tar.gz) = a8d04a3e0451e22a6499a92311f0df1196dc65b687df7d10e3f30d92420156b0
+SIZE (cabal/ansi-terminal-1.1.2/ansi-terminal-1.1.2.tar.gz) = 36259
SHA256 (cabal/ansi-terminal-types-1.1/ansi-terminal-types-1.1.tar.gz) = f2e5333eb78da5f4dd330fca0c81a59276cc150c625647cd20f57b7f297a5d25
SIZE (cabal/ansi-terminal-types-1.1/ansi-terminal-types-1.1.tar.gz) = 4746
SHA256 (cabal/appar-0.1.8/appar-0.1.8.tar.gz) = c4ceeddc26525b58d82c41b6d3e32141371a200a6794aae185b6266ccc81631f
@@ -31,18 +31,20 @@ SHA256 (cabal/asn1-parse-0.9.5/asn1-parse-0.9.5.tar.gz) = 8f1fe1344d30b39dc594d7
SIZE (cabal/asn1-parse-0.9.5/asn1-parse-0.9.5.tar.gz) = 2951
SHA256 (cabal/asn1-types-0.3.4/asn1-types-0.3.4.tar.gz) = 78ee92a251379298ca820fa53edbf4b33c539b9fcd887c86f520c30e3b4e21a8
SIZE (cabal/asn1-types-0.3.4/asn1-types-0.3.4.tar.gz) = 6472
-SHA256 (cabal/assoc-1.1/assoc-1.1.tar.gz) = 7aa2e6548b3d9d49a286ac20639479aaf6c47a1446113ed784d98737c5f60df4
-SIZE (cabal/assoc-1.1/assoc-1.1.tar.gz) = 3193
-SHA256 (cabal/assoc-1.1/revision/1.cabal) = 56d0fd1c17aaf6268e81bf19ba5afe186128d7f88126bd546d5b3151ab692652
-SIZE (cabal/assoc-1.1/revision/1.cabal) = 1617
+SHA256 (cabal/assoc-1.1.1/assoc-1.1.1.tar.gz) = 231149b7fef09f5dd95af51228615e3b296dbd0faadeca053e0644a4b13b0ff6
+SIZE (cabal/assoc-1.1.1/assoc-1.1.1.tar.gz) = 3158
+SHA256 (cabal/assoc-1.1.1/revision/1.cabal) = 0ab39b4d1feb4caca95ac6e314f48782b27a86a6b8d1f5e8dc4be9fbed11185f
+SIZE (cabal/assoc-1.1.1/revision/1.cabal) = 1420
SHA256 (cabal/async-2.2.5/async-2.2.5.tar.gz) = 1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7
SIZE (cabal/async-2.2.5/async-2.2.5.tar.gz) = 15742
+SHA256 (cabal/async-2.2.5/revision/3.cabal) = b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b
+SIZE (cabal/async-2.2.5/revision/3.cabal) = 3366
SHA256 (cabal/attoparsec-0.14.4/attoparsec-0.14.4.tar.gz) = 3f337fe58624565de12426f607c23e60c7b09c86b4e3adfc827ca188c9979e6c
SIZE (cabal/attoparsec-0.14.4/attoparsec-0.14.4.tar.gz) = 160701
-SHA256 (cabal/attoparsec-0.14.4/revision/5.cabal) = ec709539b881d6431620bd7c40fbfa680aaf4a98c6f35b51536d8f455682b1ae
-SIZE (cabal/attoparsec-0.14.4/revision/5.cabal) = 5703
-SHA256 (cabal/base-orphans-0.9.1/base-orphans-0.9.1.tar.gz) = 5bbf2da382c5b212d6a8be2f8c49edee0eba30f272a15fd32c13e6e4091ef172
-SIZE (cabal/base-orphans-0.9.1/base-orphans-0.9.1.tar.gz) = 26418
+SHA256 (cabal/attoparsec-0.14.4/revision/6.cabal) = 35129d0ab1741f000f1a7d2fc839544919ee6fbb8f2d6e7f0a629c41f91035f3
+SIZE (cabal/attoparsec-0.14.4/revision/6.cabal) = 5914
+SHA256 (cabal/base-orphans-0.9.3/base-orphans-0.9.3.tar.gz) = 17a35079c8719014560c028d9805ec1301b900972adf212e00af23fe3ebfabd8
+SIZE (cabal/base-orphans-0.9.3/base-orphans-0.9.3.tar.gz) = 19923
SHA256 (cabal/base16-bytestring-1.0.2.0/base16-bytestring-1.0.2.0.tar.gz) = 1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784
SIZE (cabal/base16-bytestring-1.0.2.0/base16-bytestring-1.0.2.0.tar.gz) = 7219
SHA256 (cabal/base16-bytestring-1.0.2.0/revision/1.cabal) = a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd
@@ -53,154 +55,156 @@ SHA256 (cabal/base64-bytestring-1.2.1.0/revision/1.cabal) = 45305ccf8914c66d385b
SIZE (cabal/base64-bytestring-1.2.1.0/revision/1.cabal) = 2502
SHA256 (cabal/basement-0.0.16/basement-0.0.16.tar.gz) = 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300
SIZE (cabal/basement-0.0.16/basement-0.0.16.tar.gz) = 134837
-SHA256 (cabal/bifunctors-5.6.1/bifunctors-5.6.1.tar.gz) = 06381471b5be16516a1b2c4b21a5101a3d991038bface8e0cad144c0044d57fc
-SIZE (cabal/bifunctors-5.6.1/bifunctors-5.6.1.tar.gz) = 38170
-SHA256 (cabal/bifunctors-5.6.1/revision/2.cabal) = 82fa7ed8f69f0bfa375de117ab36414c0b96a97ee046edc3ac6da7a295a94755
-SIZE (cabal/bifunctors-5.6.1/revision/2.cabal) = 3273
+SHA256 (cabal/bifunctors-5.6.2/bifunctors-5.6.2.tar.gz) = 1086a9285061eed0c2c5d3cb65aa223defd52fca6d0515bb69ddf2dbc3d9697a
+SIZE (cabal/bifunctors-5.6.2/bifunctors-5.6.2.tar.gz) = 38193
+SHA256 (cabal/bifunctors-5.6.2/revision/2.cabal) = 115a621c4eaaabb07834f9e4dd3371e21f39d034305062f4bd5cd72c2f8880d2
+SIZE (cabal/bifunctors-5.6.2/revision/2.cabal) = 3332
SHA256 (cabal/bitvec-1.1.5.0/bitvec-1.1.5.0.tar.gz) = 83d27cee5be1d5342ddbf39999d0c8ea54cb433d0891eea5471fbfaa29f8dec5
SIZE (cabal/bitvec-1.1.5.0/bitvec-1.1.5.0.tar.gz) = 40076
+SHA256 (cabal/bitvec-1.1.5.0/revision/3.cabal) = 434be6dc60e22858a52869c58038c35353f1a778b9679ebc06a2165bcc7f88b3
+SIZE (cabal/bitvec-1.1.5.0/revision/3.cabal) = 4921
SHA256 (cabal/blaze-builder-0.4.2.3/blaze-builder-0.4.2.3.tar.gz) = 66291874236b7342adab033e3cddae414a23a2865dfb44095dfc4e0b9d46703b
SIZE (cabal/blaze-builder-0.4.2.3/blaze-builder-0.4.2.3.tar.gz) = 60777
-SHA256 (cabal/blaze-html-0.9.1.2/blaze-html-0.9.1.2.tar.gz) = 60503f42546c6c1b954014d188ea137e43d74dcffd2bf6157c113fd91a0c394c
-SIZE (cabal/blaze-html-0.9.1.2/blaze-html-0.9.1.2.tar.gz) = 81617
-SHA256 (cabal/blaze-html-0.9.1.2/revision/4.cabal) = 2e40ad3828320b72122f09754091fb686fa0fd4c083769f17ef84584972ec450
-SIZE (cabal/blaze-html-0.9.1.2/revision/4.cabal) = 3020
+SHA256 (cabal/blaze-html-0.9.2.0/blaze-html-0.9.2.0.tar.gz) = 65542ef39f7644a3d76afcadeb976d3e334c6947516b7313fcb59165cea1608f
+SIZE (cabal/blaze-html-0.9.2.0/blaze-html-0.9.2.0.tar.gz) = 81915
+SHA256 (cabal/blaze-html-0.9.2.0/revision/1.cabal) = 85c42f84f4ead2c48844fbe0865069add3bb3bb3322d38607e93d5515a4c9c58
+SIZE (cabal/blaze-html-0.9.2.0/revision/1.cabal) = 3087
SHA256 (cabal/blaze-markup-0.8.3.0/blaze-markup-0.8.3.0.tar.gz) = 8606ac8b4a1f7f8f1bbc0770b2752e9b6f88ccc9fbdcbb33aa20577d0e5930e8
SIZE (cabal/blaze-markup-0.8.3.0/blaze-markup-0.8.3.0.tar.gz) = 14647
-SHA256 (cabal/blaze-markup-0.8.3.0/revision/1.cabal) = a8365ac8b98738065c2867682dbcd9b0baeb7a5cd1eaa8e508279edfd19227b9
-SIZE (cabal/blaze-markup-0.8.3.0/revision/1.cabal) = 2276
+SHA256 (cabal/blaze-markup-0.8.3.0/revision/2.cabal) = 027f218b81d28a7c0a33b93d456c4e5aa92d145e9dcee14834fbad73a39ad7e4
+SIZE (cabal/blaze-markup-0.8.3.0/revision/2.cabal) = 2360
SHA256 (cabal/byteorder-1.0.4/byteorder-1.0.4.tar.gz) = bd20bbb586947f99c38a4c93d9d0266f49f6fc581767b51ba568f6d5d52d2919
SIZE (cabal/byteorder-1.0.4/byteorder-1.0.4.tar.gz) = 2030
-SHA256 (cabal/cabal-doctest-1.0.9/cabal-doctest-1.0.9.tar.gz) = 5556088496111d33810c4ae6c4a065bb37fa3315e9e8891e8000b1ab6707ba73
-SIZE (cabal/cabal-doctest-1.0.9/cabal-doctest-1.0.9.tar.gz) = 10770
-SHA256 (cabal/cabal-doctest-1.0.9/revision/3.cabal) = 6dea0dbd1457f43d96ce1cfb1bab8b9f55d4fb82940e2bfa5aad78e6e2260656
-SIZE (cabal/cabal-doctest-1.0.9/revision/3.cabal) = 1517
+SHA256 (cabal/cabal-doctest-1.0.11/cabal-doctest-1.0.11.tar.gz) = dc2df2f0b427028617f10e445ff8ab3352d3bbeef1b8dd847e879d2d36bf923f
+SIZE (cabal/cabal-doctest-1.0.11/cabal-doctest-1.0.11.tar.gz) = 13204
SHA256 (cabal/call-stack-0.4.0/call-stack-0.4.0.tar.gz) = 430bcf8a3404f7e55319573c0b807b1356946f0c8f289bb3d9afb279c636b87b
SIZE (cabal/call-stack-0.4.0/call-stack-0.4.0.tar.gz) = 2757
SHA256 (cabal/case-insensitive-1.2.1.0/case-insensitive-1.2.1.0.tar.gz) = 296dc17e0c5f3dfb3d82ced83e4c9c44c338ecde749b278b6eae512f1d04e406
SIZE (cabal/case-insensitive-1.2.1.0/case-insensitive-1.2.1.0.tar.gz) = 53609
SHA256 (cabal/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz) = 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797
SIZE (cabal/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz) = 92122
+SHA256 (cabal/cborg-0.2.10.0/revision/2.cabal) = a52224590aca5c992a5ca0c6713439587076ad1f9c8e04ce2dca7ba2026e3654
+SIZE (cabal/cborg-0.2.10.0/revision/2.cabal) = 5406
SHA256 (cabal/cereal-0.5.8.3/cereal-0.5.8.3.tar.gz) = 99905220661b26e5bd91130bd9772554938608a5b1d717240a6eb331121e0f6a
SIZE (cabal/cereal-0.5.8.3/cereal-0.5.8.3.tar.gz) = 20166
+SHA256 (cabal/character-ps-0.1/character-ps-0.1.tar.gz) = 22de71fde38b236d3e9168a832b5e1e75d1fb4f4028667bdf747b3b4c8c1529c
+SIZE (cabal/character-ps-0.1/character-ps-0.1.tar.gz) = 8192
SHA256 (cabal/colour-2.3.6/colour-2.3.6.tar.gz) = 2cd35dcd6944a5abc9f108a5eb5ee564b6b1fa98a9ec79cefcc20b588991f871
SIZE (cabal/colour-2.3.6/colour-2.3.6.tar.gz) = 20675
-SHA256 (cabal/comonad-5.0.8/comonad-5.0.8.tar.gz) = ef6cdf2cc292cc43ee6aa96c581b235fdea8ab44a0bffb24dc79ae2b2ef33d13
-SIZE (cabal/comonad-5.0.8/comonad-5.0.8.tar.gz) = 15227
-SHA256 (cabal/comonad-5.0.8/revision/2.cabal) = 4a4dbfbd03fb4963987710fca994e8b5624bd05a33e5f95b7581b26f8229c5e3
-SIZE (cabal/comonad-5.0.8/revision/2.cabal) = 3631
-SHA256 (cabal/conduit-1.3.5/conduit-1.3.5.tar.gz) = 2bb0d3e0eecc43e3d1d8cfc2125914f9175cde752be2d5908a1e120f321c782d
-SIZE (cabal/conduit-1.3.5/conduit-1.3.5.tar.gz) = 88893
-SHA256 (cabal/conduit-extra-1.3.6/conduit-extra-1.3.6.tar.gz) = 8950c38049d892c38590d389bed49ecf880671f58ec63dd4709d9fe3d4b8f153
-SIZE (cabal/conduit-extra-1.3.6/conduit-extra-1.3.6.tar.gz) = 33321
+SHA256 (cabal/comonad-5.0.9/comonad-5.0.9.tar.gz) = 69fb0eb49a80055a9b76d31d0a5648777c4050ac8dbf56a9344b862ed878a789
+SIZE (cabal/comonad-5.0.9/comonad-5.0.9.tar.gz) = 14455
+SHA256 (cabal/comonad-5.0.9/revision/1.cabal) = 75aded79bf583c908e4e4687c0ae067f256e2507536b75f58ffba7748767c353
+SIZE (cabal/comonad-5.0.9/revision/1.cabal) = 3587
+SHA256 (cabal/conduit-1.3.6.1/conduit-1.3.6.1.tar.gz) = 69902af03ea7e4cb982fa83da42afe36973b62d0a52ea140ae5362e52854ba3f
+SIZE (cabal/conduit-1.3.6.1/conduit-1.3.6.1.tar.gz) = 89114
+SHA256 (cabal/conduit-extra-1.3.7/conduit-extra-1.3.7.tar.gz) = b2bd6f8626909c1784793d791078bedc0831fbaf97cb3e837d9fd94c89532b57
+SIZE (cabal/conduit-extra-1.3.7/conduit-extra-1.3.7.tar.gz) = 33170
SHA256 (cabal/contravariant-1.5.5/contravariant-1.5.5.tar.gz) = 062fd66580d7aad0b5ba93e644ffa7feee69276ef50f20d4ed9f1deb7642dffa
SIZE (cabal/contravariant-1.5.5/contravariant-1.5.5.tar.gz) = 13815
-SHA256 (cabal/cookie-0.4.6/cookie-0.4.6.tar.gz) = 8c41a956c32b9733d525a53d43b0338a236a34d36658ecc4364c8249a6664baa
-SIZE (cabal/cookie-0.4.6/cookie-0.4.6.tar.gz) = 6219
-SHA256 (cabal/crypton-0.34/crypton-0.34.tar.gz) = 4444846924ca55615fce104913a5a68675a180cfeadc350ab2b124fba1bc1ed6
-SIZE (cabal/crypton-0.34/crypton-0.34.tar.gz) = 622533
-SHA256 (cabal/crypton-connection-0.3.2/crypton-connection-0.3.2.tar.gz) = 208be23bc910f8e5f9431995b9c011ed376bb947d79f74c8f51a5e4ecd9e991e
-SIZE (cabal/crypton-connection-0.3.2/crypton-connection-0.3.2.tar.gz) = 9054
-SHA256 (cabal/crypton-x509-1.7.6/crypton-x509-1.7.6.tar.gz) = ebb74aca2d00261e2fb4927d211ba1a174e190e5257f309e190f019727f8caff
-SIZE (cabal/crypton-x509-1.7.6/crypton-x509-1.7.6.tar.gz) = 21557
-SHA256 (cabal/crypton-x509-1.7.6/revision/1.cabal) = c567657a705b6d6521f9dd2de999bf530d618ec00f3b939df76a41fb0fe94281
-SIZE (cabal/crypton-x509-1.7.6/revision/1.cabal) = 2339
-SHA256 (cabal/crypton-x509-store-1.6.9/crypton-x509-store-1.6.9.tar.gz) = 3e6218af12e039cc291d19792db044df1647b5cf0bbc60b909a027e7595a256f
-SIZE (cabal/crypton-x509-store-1.6.9/crypton-x509-store-1.6.9.tar.gz) = 12735
+SHA256 (cabal/cookie-0.5.1/cookie-0.5.1.tar.gz) = 1adde62726e3a3bbe147c02514fe0c4f5f2c5a2ff63842deac10c451a2a6f7a0
+SIZE (cabal/cookie-0.5.1/cookie-0.5.1.tar.gz) = 6680
+SHA256 (cabal/crypton-1.0.4/crypton-1.0.4.tar.gz) = b4885402206422450823e7001a40d0f6b11d0c603a0cb8bf8ff5a186b7c4011a
+SIZE (cabal/crypton-1.0.4/crypton-1.0.4.tar.gz) = 649976
+SHA256 (cabal/crypton-connection-0.4.4/crypton-connection-0.4.4.tar.gz) = 247068c222a5feec66ada8d599bfc4a878bef2cac104636afbc7d5cae93ca491
+SIZE (cabal/crypton-connection-0.4.4/crypton-connection-0.4.4.tar.gz) = 9324
+SHA256 (cabal/crypton-x509-1.7.7/crypton-x509-1.7.7.tar.gz) = efece48c8c4adfee209979c2967037d90e6ba1b7b4e7bb1081d1d4cd93daf382
+SIZE (cabal/crypton-x509-1.7.7/crypton-x509-1.7.7.tar.gz) = 21547
+SHA256 (cabal/crypton-x509-store-1.6.10/crypton-x509-store-1.6.10.tar.gz) = cef0631c0dad9ca43984e51140f030e7de9a1f4bfd0b2223ed9c6d41fe4238b0
+SIZE (cabal/crypton-x509-store-1.6.10/crypton-x509-store-1.6.10.tar.gz) = 12720
SHA256 (cabal/crypton-x509-system-1.6.7/crypton-x509-system-1.6.7.tar.gz) = a436261e5f5e83d85080f57a5509c8224c9e75a6e56d0c43a7d2967052b634ca
SIZE (cabal/crypton-x509-system-1.6.7/crypton-x509-system-1.6.7.tar.gz) = 3496
-SHA256 (cabal/crypton-x509-validation-1.6.12/crypton-x509-validation-1.6.12.tar.gz) = 0e60b7e237a4fd5e7e6e7200018c7947314292ef63751cbb51877836ebe650f6
-SIZE (cabal/crypton-x509-validation-1.6.12/crypton-x509-validation-1.6.12.tar.gz) = 19573
-SHA256 (cabal/data-default-0.7.1.1/data-default-0.7.1.1.tar.gz) = b0f95d279cd75cacaa8152a01590dc3460f7134f6840b37052abb3ba3cb2a511
-SIZE (cabal/data-default-0.7.1.1/data-default-0.7.1.1.tar.gz) = 1627
-SHA256 (cabal/data-default-class-0.1.2.0/data-default-class-0.1.2.0.tar.gz) = 4f01b423f000c3e069aaf52a348564a6536797f31498bb85c3db4bd2d0973e56
-SIZE (cabal/data-default-class-0.1.2.0/data-default-class-0.1.2.0.tar.gz) = 2522
-SHA256 (cabal/data-default-instances-containers-0.0.1/data-default-instances-containers-0.0.1.tar.gz) = a55e07af005c9815d82f3fc95e125db82994377c9f4a769428878701d4ec081a
-SIZE (cabal/data-default-instances-containers-0.0.1/data-default-instances-containers-0.0.1.tar.gz) = 1659
-SHA256 (cabal/data-default-instances-dlist-0.0.1/data-default-instances-dlist-0.0.1.tar.gz) = 7d683711cbf08abd7adcd5ac2be825381308d220397315a5570fe61b719b5959
-SIZE (cabal/data-default-instances-dlist-0.0.1/data-default-instances-dlist-0.0.1.tar.gz) = 1503
-SHA256 (cabal/data-default-instances-old-locale-0.0.1/data-default-instances-old-locale-0.0.1.tar.gz) = 60d3b02922958c4908d7bf2b24ddf61511665745f784227d206745784b0c0802
-SIZE (cabal/data-default-instances-old-locale-0.0.1/data-default-instances-old-locale-0.0.1.tar.gz) = 1519
-SHA256 (cabal/data-fix-0.3.2/data-fix-0.3.2.tar.gz) = 3a172d3bc0639c327345e965f9d9023e099425814b28dcdb7b60ff66d66219cc
-SIZE (cabal/data-fix-0.3.2/data-fix-0.3.2.tar.gz) = 5842
-SHA256 (cabal/data-fix-0.3.2/revision/5.cabal) = cd7d6ff8b68aca3b51d8116870fc8ccdbc557989562cd3d5c941e4f0b7bc5af1
-SIZE (cabal/data-fix-0.3.2/revision/5.cabal) = 1734
+SHA256 (cabal/crypton-x509-validation-1.6.14/crypton-x509-validation-1.6.14.tar.gz) = ed0e394127db59d66a0a8e4bde28fa0b8cc67cc9a810793b54a58e96df4c601d
+SIZE (cabal/crypton-x509-validation-1.6.14/crypton-x509-validation-1.6.14.tar.gz) = 19693
+SHA256 (cabal/data-default-0.8.0.1/data-default-0.8.0.1.tar.gz) = ce085de8ec2196f0c1d30af0ad8a517d5737c9edfd4ebfbb49e8687dfc40b6ca
+SIZE (cabal/data-default-0.8.0.1/data-default-0.8.0.1.tar.gz) = 5821
+SHA256 (cabal/data-default-class-0.2.0.0/data-default-class-0.2.0.0.tar.gz) = 0ae530c4fb0bd6c8a8ba399429ccd9c75f9c7696049117178f4ceeb2bd08d5b4
+SIZE (cabal/data-default-class-0.2.0.0/data-default-class-0.2.0.0.tar.gz) = 1589
+SHA256 (cabal/data-fix-0.3.4/data-fix-0.3.4.tar.gz) = 8df052d18c047ab9e9200536a8799b5af3997ebecbbb091a7384b6be8416ab37
+SIZE (cabal/data-fix-0.3.4/data-fix-0.3.4.tar.gz) = 5992
+SHA256 (cabal/data-fix-0.3.4/revision/1.cabal) = ee78be6168ca0878d670fede957195d3debf4a37a806d13d72182b274901261b
+SIZE (cabal/data-fix-0.3.4/revision/1.cabal) = 1406
SHA256 (cabal/distributive-0.6.2.1/distributive-0.6.2.1.tar.gz) = d7351392e078f58caa46630a4b9c643e1e2e9dddee45848c5c8358e7b1316b91
SIZE (cabal/distributive-0.6.2.1/distributive-0.6.2.1.tar.gz) = 8140
SHA256 (cabal/distributive-0.6.2.1/revision/1.cabal) = 0f99f5541cca04acf89b64432b03422b6408e830a8dff30e6c4334ef1a48680c
SIZE (cabal/distributive-0.6.2.1/revision/1.cabal) = 2996
SHA256 (cabal/dlist-1.0/dlist-1.0.tar.gz) = 173d637328bb173fcc365f30d29ff4a94292a1e0e5558aeb3dfc11de81510115
SIZE (cabal/dlist-1.0/dlist-1.0.tar.gz) = 18667
-SHA256 (cabal/dlist-1.0/revision/1.cabal) = 55ff69d20ce638fc7727342ee67f2f868da61d3dcf3763f790bf9aa0b145e568
-SIZE (cabal/dlist-1.0/revision/1.cabal) = 3812
+SHA256 (cabal/dlist-1.0/revision/2.cabal) = 854727594c5a816ab3d10f15b1bc4fedaf9e3f7d1ef517a2bb9011f29ba261d2
+SIZE (cabal/dlist-1.0/revision/2.cabal) = 3942
+SHA256 (cabal/ech-config-0.0.1/ech-config-0.0.1.tar.gz) = b236b6d7ea1385c280b76051edc7d8f6db31c9cb7b35df5c06f5a0bd75b4feba
+SIZE (cabal/ech-config-0.0.1/ech-config-0.0.1.tar.gz) = 5423
SHA256 (cabal/file-embed-0.0.16.0/file-embed-0.0.16.0.tar.gz) = 5f18672eff936355557cdd163905451205d7ee22742edac313dd27cf42a3f415
SIZE (cabal/file-embed-0.0.16.0/file-embed-0.0.16.0.tar.gz) = 7198
SHA256 (cabal/free-5.2/free-5.2.tar.gz) = 72867f7c89173263765736e8d395e94291f1aaea626ecb1d673d72ce90b94f89
SIZE (cabal/free-5.2/free-5.2.tar.gz) = 58781
-SHA256 (cabal/free-5.2/revision/3.cabal) = 4dd76c1a19f81d7866e7b75682350f1ef3e0441b19b4d07eccdd9ef326a0be70
-SIZE (cabal/free-5.2/revision/3.cabal) = 4176
+SHA256 (cabal/free-5.2/revision/7.cabal) = 7f3992a66987bbba5a6546420f6129fb9b66b80cdd005d34ec77a1e1c8ed8340
+SIZE (cabal/free-5.2/revision/7.cabal) = 4178
SHA256 (cabal/generically-0.1.1/generically-0.1.1.tar.gz) = 04c5a436bec4b041f71a733f56a1bd7f435f63dde8d3eb5c1f48d55b4dbc43cf
SIZE (cabal/generically-0.1.1/generically-0.1.1.tar.gz) = 2870
-SHA256 (cabal/generically-0.1.1/revision/2.cabal) = 378ec049bc2853b8011df116647fbd34bb9f00edce9840e4957f98abc097597c
-SIZE (cabal/generically-0.1.1/revision/2.cabal) = 1169
-SHA256 (cabal/half-0.3.1/half-0.3.1.tar.gz) = e2afc32724e11bf5c695d797b9169d9d9b2dc62a530aed31284c8187af1615d1
-SIZE (cabal/half-0.3.1/half-0.3.1.tar.gz) = 8514
-SHA256 (cabal/half-0.3.1/revision/1.cabal) = f43f16671b42bdc92b4be9e0b0ce1bcff817c928d0a50f13a6264a24586c1a7c
-SIZE (cabal/half-0.3.1/revision/1.cabal) = 2158
-SHA256 (cabal/hashable-1.4.3.0/hashable-1.4.3.0.tar.gz) = 32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5
-SIZE (cabal/hashable-1.4.3.0/hashable-1.4.3.0.tar.gz) = 25601
-SHA256 (cabal/hashable-1.4.3.0/revision/1.cabal) = f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194
-SIZE (cabal/hashable-1.4.3.0/revision/1.cabal) = 4718
+SHA256 (cabal/generically-0.1.1/revision/4.cabal) = 3f64278f5c582dd7c6963967b1290079bcd03b8348989f909ac9bd972ddc452e
+SIZE (cabal/generically-0.1.1/revision/4.cabal) = 1203
+SHA256 (cabal/half-0.3.2/half-0.3.2.tar.gz) = 19992e9fb6f4ea8a53b0ba0693565e8ec73c620b603e74b6d4f262e49d7df038
+SIZE (cabal/half-0.3.2/half-0.3.2.tar.gz) = 8319
+SHA256 (cabal/hashable-1.5.0.0/hashable-1.5.0.0.tar.gz) = e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a
+SIZE (cabal/hashable-1.5.0.0/hashable-1.5.0.0.tar.gz) = 89062
+SHA256 (cabal/hashable-1.5.0.0/revision/1.cabal) = 2f23146cbe0325029927b221647695a4c7d6e97548ff731110979e34361f58ef
+SIZE (cabal/hashable-1.5.0.0/revision/1.cabal) = 5914
SHA256 (cabal/hourglass-0.2.12/hourglass-0.2.12.tar.gz) = 44335b5c402e80c60f1db6a74462be4ea29d1a9043aa994334ffee1164f1ca4a
SIZE (cabal/hourglass-0.2.12/hourglass-0.2.12.tar.gz) = 25797
+SHA256 (cabal/hourglass-0.2.12/revision/1.cabal) = 85c46cb6cd30c84546929926d4402a534f723651198e5945c9e59b9e699a8979
+SIZE (cabal/hourglass-0.2.12/revision/1.cabal) = 3197
+SHA256 (cabal/hpke-0.0.0/hpke-0.0.0.tar.gz) = 7b0b7dfb4f7081beab54c4cb0cb3df3f3c03ce05cb11747f190bab22df19b83c
+SIZE (cabal/hpke-0.0.0/hpke-0.0.0.tar.gz) = 25248
SHA256 (cabal/hsc2hs-0.68.10/hsc2hs-0.68.10.tar.gz) = 6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76
SIZE (cabal/hsc2hs-0.68.10/hsc2hs-0.68.10.tar.gz) = 40517
-SHA256 (cabal/hsc2hs-0.68.10/revision/1.cabal) = 488cca2a179a5141da8f35a3a7e6699a0ef690f834f589d6b152c4947aa8fe2d
-SIZE (cabal/hsc2hs-0.68.10/revision/1.cabal) = 3013
-SHA256 (cabal/http-client-0.7.16/http-client-0.7.16.tar.gz) = 3a84ca8f94306084aef3ff5128db231cb6bb7c606fbee16910f8d0df400c6291
-SIZE (cabal/http-client-0.7.16/http-client-0.7.16.tar.gz) = 96891
-SHA256 (cabal/http-client-tls-0.3.6.3/http-client-tls-0.3.6.3.tar.gz) = 38dcfc3d772eb6898b4a8856d6159824d13f65eb291733619f625a802dad9095
-SIZE (cabal/http-client-tls-0.3.6.3/http-client-tls-0.3.6.3.tar.gz) = 7935
+SHA256 (cabal/hsc2hs-0.68.10/revision/4.cabal) = 725ef6da03d3d6e332db4de0a35bee45d72e4d31decc5ec7f153e6837af5f03e
+SIZE (cabal/hsc2hs-0.68.10/revision/4.cabal) = 3114
+SHA256 (cabal/http-client-0.7.19/http-client-0.7.19.tar.gz) = a02c1be082e8f48c959ac7150a48a405f8d4383e0942639481e84b220f29ad61
+SIZE (cabal/http-client-0.7.19/http-client-0.7.19.tar.gz) = 96836
+SHA256 (cabal/http-client-tls-0.3.6.4/http-client-tls-0.3.6.4.tar.gz) = 7756006fee8ab924c521372e0f9d6705579016b9fab0b0312d1b9a335cfc18a3
+SIZE (cabal/http-client-tls-0.3.6.4/http-client-tls-0.3.6.4.tar.gz) = 7954
+SHA256 (cabal/http-client-tls-0.3.6.4/revision/2.cabal) = efe0a32d59c3a38ea35eb9c1b6e7beffa3592e39b2065a727cb84ccd654d16f3
+SIZE (cabal/http-client-tls-0.3.6.4/revision/2.cabal) = 2135
SHA256 (cabal/http-types-0.12.4/http-types-0.12.4.tar.gz) = 4d4b1bb0cc817e5fef0c9c76c9647f69f4d300c45a105043493eff86381be549
SIZE (cabal/http-types-0.12.4/http-types-0.12.4.tar.gz) = 18707
-SHA256 (cabal/indexed-traversable-0.1.3/indexed-traversable-0.1.3.tar.gz) = 1d32925fb6f78e3a52a849b29fc4360df51c97be95ba8ac642517d3ff01a53d9
-SIZE (cabal/indexed-traversable-0.1.3/indexed-traversable-0.1.3.tar.gz) = 9824
-SHA256 (cabal/indexed-traversable-instances-0.1.1.2/indexed-traversable-instances-0.1.1.2.tar.gz) = 0f9b4e895ccc819f74d15f913c93613cc74cab74dbb05d7e305aa387bdbe374a
-SIZE (cabal/indexed-traversable-instances-0.1.1.2/indexed-traversable-instances-0.1.1.2.tar.gz) = 3769
-SHA256 (cabal/indexed-traversable-instances-0.1.1.2/revision/2.cabal) = 00d5e3e149e2bee0f7a547e0093294c306d4276e73a619abe7d8e69f7ce03c7b
-SIZE (cabal/indexed-traversable-instances-0.1.1.2/revision/2.cabal) = 2550
-SHA256 (cabal/integer-conversion-0.1.0.1/integer-conversion-0.1.0.1.tar.gz) = 20ac70cf1cb65458bba2c562c209a8930e45bdb89886182d644d0a457fc46f39
-SIZE (cabal/integer-conversion-0.1.0.1/integer-conversion-0.1.0.1.tar.gz) = 6166
-SHA256 (cabal/integer-conversion-0.1.0.1/revision/1.cabal) = 0e57a82635323f015b5d6c242bcfbbeeaa9854fe9c8058e57052254dbb24bb14
-SIZE (cabal/integer-conversion-0.1.0.1/revision/1.cabal) = 2250
-SHA256 (cabal/integer-logarithms-1.0.3.1/integer-logarithms-1.0.3.1.tar.gz) = 9b0a9f9fab609b15cd015865721fb05f744a1bc77ae92fd133872de528bbea7f
-SIZE (cabal/integer-logarithms-1.0.3.1/integer-logarithms-1.0.3.1.tar.gz) = 9023
-SHA256 (cabal/integer-logarithms-1.0.3.1/revision/5.cabal) = 4d0dfc334e64ff57bb1a08717afa4a4a7f28e4cdc46615dd287be31ef63ec00d
-SIZE (cabal/integer-logarithms-1.0.3.1/revision/5.cabal) = 3278
-SHA256 (cabal/invariant-0.6.2/invariant-0.6.2.tar.gz) = c36485e8088a57e9df1a93881211a1c09e8920ce1b14bfa141cac9f75b7ee108
-SIZE (cabal/invariant-0.6.2/invariant-0.6.2.tar.gz) = 28199
-SHA256 (cabal/invariant-0.6.2/revision/1.cabal) = 4338158fe36c3ff9ee741eeff79cb886222cab9da3f476071956cb01b0d9bbff
-SIZE (cabal/invariant-0.6.2/revision/1.cabal) = 3617
-SHA256 (cabal/iproute-1.7.12/iproute-1.7.12.tar.gz) = f1751d1579fcbc1d9f86d9d1c9ede48cb71cbeb1d7b2043491c6216e4f236b63
-SIZE (cabal/iproute-1.7.12/iproute-1.7.12.tar.gz) = 17864
-SHA256 (cabal/kan-extensions-5.2.5/kan-extensions-5.2.5.tar.gz) = b914dccc040caf1d8764b99df1028dad3e4fdf46c262192e54b59c9da66ead22
-SIZE (cabal/kan-extensions-5.2.5/kan-extensions-5.2.5.tar.gz) = 22205
-SHA256 (cabal/kan-extensions-5.2.5/revision/2.cabal) = fbdba767565f40faf515b044a774cc3b371eb6ce8a082d9f659411cea88698cf
-SIZE (cabal/kan-extensions-5.2.5/revision/2.cabal) = 3066
-SHA256 (cabal/lens-5.2.3/lens-5.2.3.tar.gz) = df1e8ca8dd89d884994e0c80761a972088326fa43ed5d47c01b14abb710b994d
-SIZE (cabal/lens-5.2.3/lens-5.2.3.tar.gz) = 703220
-SHA256 (cabal/lens-5.2.3/revision/2.cabal) = 637287c76adff383063b3206a4213640de1a74839ec16008cc71b5b407f7d05e
-SIZE (cabal/lens-5.2.3/revision/2.cabal) = 15237
+SHA256 (cabal/indexed-traversable-0.1.4/indexed-traversable-0.1.4.tar.gz) = 58be09afdf3ad5a25c2aa0d2a7df80d602df09f4e76d3abf2b7cdb0e75d03b22
+SIZE (cabal/indexed-traversable-0.1.4/indexed-traversable-0.1.4.tar.gz) = 9465
+SHA256 (cabal/indexed-traversable-0.1.4/revision/1.cabal) = 42d9e84a65a0c17c248233cab98ada872ff6140dfa24d109d6eb285204d07e7d
+SIZE (cabal/indexed-traversable-0.1.4/revision/1.cabal) = 2098
+SHA256 (cabal/indexed-traversable-instances-0.1.2/indexed-traversable-instances-0.1.2.tar.gz) = 3c2bb62fba141d6696177070d63b88bc56b194bc60f6b73d2263b0244e2fc7c1
+SIZE (cabal/indexed-traversable-instances-0.1.2/indexed-traversable-instances-0.1.2.tar.gz) = 3673
+SHA256 (cabal/indexed-traversable-instances-0.1.2/revision/1.cabal) = 68df0fc8070ae2c15f9e6febf1449fee364c131a6d1e93cac45e7895ba86dd89
+SIZE (cabal/indexed-traversable-instances-0.1.2/revision/1.cabal) = 2401
+SHA256 (cabal/integer-conversion-0.1.1/integer-conversion-0.1.1.tar.gz) = c18164a048073310f6353ebc64c9037b52a4b8299963ce05e027bcf60e22155a
+SIZE (cabal/integer-conversion-0.1.1/integer-conversion-0.1.1.tar.gz) = 6179
+SHA256 (cabal/integer-conversion-0.1.1/revision/1.cabal) = 941d4ae16e2124cbff5defe2abedb49efc8e03a594f817035bf231a317e6c1c9
+SIZE (cabal/integer-conversion-0.1.1/revision/1.cabal) = 2256
+SHA256 (cabal/integer-logarithms-1.0.4/integer-logarithms-1.0.4.tar.gz) = 6a93c76c2518cbe2d72ab17da6ae46d8cae93cbfb7c5a5ad5783f903c1448f45
+SIZE (cabal/integer-logarithms-1.0.4/integer-logarithms-1.0.4.tar.gz) = 8948
+SHA256 (cabal/invariant-0.6.4/invariant-0.6.4.tar.gz) = a9e2ab4ee3e0d4613beb7bda36a8ebc4f72318450514f4832d2fa43b74f0aeb3
+SIZE (cabal/invariant-0.6.4/invariant-0.6.4.tar.gz) = 27079
+SHA256 (cabal/invariant-0.6.4/revision/1.cabal) = 4a9a609f4e93ffed158b3b4f5a80822c6da30aa71a5370307c0c00c2d658d1c6
+SIZE (cabal/invariant-0.6.4/revision/1.cabal) = 3513
+SHA256 (cabal/iproute-1.7.15/iproute-1.7.15.tar.gz) = 18a331a7e0e6f9dc89a2da95577b0d76bd2690b8f832b72b46d6cc9b667b4ba5
+SIZE (cabal/iproute-1.7.15/iproute-1.7.15.tar.gz) = 18033
+SHA256 (cabal/kan-extensions-5.2.6/kan-extensions-5.2.6.tar.gz) = fa82283c1c9ac3dc0951b7ca9f5b2e6f13d8331c20154ebb222b509824eeeccc
+SIZE (cabal/kan-extensions-5.2.6/kan-extensions-5.2.6.tar.gz) = 21718
+SHA256 (cabal/kan-extensions-5.2.6/revision/1.cabal) = e0b972f900a3c04c0f36d7e221e6b04343a5a1f00ce3aababff7932e173f0833
+SIZE (cabal/kan-extensions-5.2.6/revision/1.cabal) = 2581
+SHA256 (cabal/lens-5.3.4/lens-5.3.4.tar.gz) = f1b6ed14b8d8ccafb5724929fb3d0d3b5866b923ca88e8c565b4a84b7993c88a
+SIZE (cabal/lens-5.3.4/lens-5.3.4.tar.gz) = 707015
SHA256 (cabal/memory-0.18.0/memory-0.18.0.tar.gz) = fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e
SIZE (cabal/memory-0.18.0/memory-0.18.0.tar.gz) = 41957
+SHA256 (cabal/memory-0.18.0/revision/1.cabal) = 9f4de967352f80b6f174c9a166f315393dde80b77d7b67e41268ae7dec0319f9
+SIZE (cabal/memory-0.18.0/revision/1.cabal) = 4581
SHA256 (cabal/mime-types-0.1.2.0/mime-types-0.1.2.0.tar.gz) = 013ae48a4c1726a4f91a64e882f3fe1fb903a7d4b8c14da51286fe5e4b974f61
SIZE (cabal/mime-types-0.1.2.0/mime-types-0.1.2.0.tar.gz) = 12044
-SHA256 (cabal/mono-traversable-1.0.17.0/mono-traversable-1.0.17.0.tar.gz) = 25d8f9b860bc6335d3d213f3392ab58d4041e28127874ea18525412f184cd32f
-SIZE (cabal/mono-traversable-1.0.17.0/mono-traversable-1.0.17.0.tar.gz) = 42225
-SHA256 (cabal/network-3.1.4.0/network-3.1.4.0.tar.gz) = b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e
-SIZE (cabal/network-3.1.4.0/network-3.1.4.0.tar.gz) = 139988
-SHA256 (cabal/network-3.1.4.0/revision/1.cabal) = e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def
-SIZE (cabal/network-3.1.4.0/revision/1.cabal) = 5208
+SHA256 (cabal/mono-traversable-1.0.21.0/mono-traversable-1.0.21.0.tar.gz) = 4dd93ea334c0169500402f07aa39c98dbb7bffe55dc63fdf228da2cc22c7c5cd
+SIZE (cabal/mono-traversable-1.0.21.0/mono-traversable-1.0.21.0.tar.gz) = 43552
+SHA256 (cabal/network-3.2.7.0/network-3.2.7.0.tar.gz) = 68548e660632a3c09b230c33fe08cc880273372b485e65cbe7a717936de9728b
+SIZE (cabal/network-3.2.7.0/network-3.2.7.0.tar.gz) = 145714
+SHA256 (cabal/network-byte-order-0.1.7/network-byte-order-0.1.7.tar.gz) = 480ce0ad7f67364ec8d4ce8d815f463d9e4074e3789be22a5722cfdebed08679
+SIZE (cabal/network-byte-order-0.1.7/network-byte-order-0.1.7.tar.gz) = 6402
SHA256 (cabal/network-uri-2.6.4.2/network-uri-2.6.4.2.tar.gz) = 9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228
SIZE (cabal/network-uri-2.6.4.2/network-uri-2.6.4.2.tar.gz) = 31309
SHA256 (cabal/network-uri-2.6.4.2/revision/1.cabal) = 6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588
@@ -213,133 +217,141 @@ SHA256 (cabal/old-time-1.1.0.4/old-time-1.1.0.4.tar.gz) = 1e22eb7f7b924a676f52e3
SIZE (cabal/old-time-1.1.0.4/old-time-1.1.0.4.tar.gz) = 75542
SHA256 (cabal/optparse-applicative-0.18.1.0/optparse-applicative-0.18.1.0.tar.gz) = 63811ab4fd26e829b8868364325a88be3acc79819f5bb5005b2dd3b961ecc491
SIZE (cabal/optparse-applicative-0.18.1.0/optparse-applicative-0.18.1.0.tar.gz) = 60682
+SHA256 (cabal/optparse-applicative-0.18.1.0/revision/1.cabal) = f30973861ac7e7ebff05ff8c7c3d1e4d283a1f3850e1cc14106b0693ec1b6d82
+SIZE (cabal/optparse-applicative-0.18.1.0/revision/1.cabal) = 5289
+SHA256 (cabal/os-string-2.0.7/os-string-2.0.7.tar.gz) = 339c35fd3a290522f23de4e33528423cfd0b0a8f22946b0b9816a817b926cba0
+SIZE (cabal/os-string-2.0.7/os-string-2.0.7.tar.gz) = 44683
SHA256 (cabal/parallel-3.2.2.0/parallel-3.2.2.0.tar.gz) = 170453a71a2a8b31cca63125533f7771d7debeb639700bdabdd779c34d8a6ef6
SIZE (cabal/parallel-3.2.2.0/parallel-3.2.2.0.tar.gz) = 14681
-SHA256 (cabal/parallel-3.2.2.0/revision/7.cabal) = b993406e98fe9126eff4a69d28e7e361037dd1c0892a9fd6c26e1f92eb9c4fa4
-SIZE (cabal/parallel-3.2.2.0/revision/7.cabal) = 1926
+SHA256 (cabal/parallel-3.2.2.0/revision/9.cabal) = 9d7b34ac537940f67732eca31d48a43bd78fb65a91baebddf63bee4fc3813d81
+SIZE (cabal/parallel-3.2.2.0/revision/9.cabal) = 1961
SHA256 (cabal/pem-0.2.4/pem-0.2.4.tar.gz) = 770c4c1b9cd24b3db7f511f8a48404a0d098999e28573c3743a8a296bb96f8d4
SIZE (cabal/pem-0.2.4/pem-0.2.4.tar.gz) = 4717
SHA256 (cabal/prettyprinter-1.7.1/prettyprinter-1.7.1.tar.gz) = 5e6ea6903114fa118fcc359633dfb7ecddecb92c06c853d02a77b72b251f0b45
SIZE (cabal/prettyprinter-1.7.1/prettyprinter-1.7.1.tar.gz) = 56907
SHA256 (cabal/prettyprinter-ansi-terminal-1.1.3/prettyprinter-ansi-terminal-1.1.3.tar.gz) = 813739308ad6050620578994effe21058a170a341716acf52573fae42b5b1db3
SIZE (cabal/prettyprinter-ansi-terminal-1.1.3/prettyprinter-ansi-terminal-1.1.3.tar.gz) = 8879
-SHA256 (cabal/primitive-0.9.0.0/primitive-0.9.0.0.tar.gz) = 696d4bd291c94d736142d6182117dca4258d3ef28bfefdb649ac8b5ecd0999c7
-SIZE (cabal/primitive-0.9.0.0/primitive-0.9.0.0.tar.gz) = 60580
+SHA256 (cabal/primitive-0.9.1.0/primitive-0.9.1.0.tar.gz) = 44b4de41813c7bc5db8a57f87c3612a069b65086946268ba165097252ebd3d76
+SIZE (cabal/primitive-0.9.1.0/primitive-0.9.1.0.tar.gz) = 61724
SHA256 (cabal/profunctors-5.6.2/profunctors-5.6.2.tar.gz) = 65955d7b50525a4a3bccdab1d982d2ae342897fd38140d5a94b5ef3800d8c92a
SIZE (cabal/profunctors-5.6.2/profunctors-5.6.2.tar.gz) = 28522
SHA256 (cabal/profunctors-5.6.2/revision/3.cabal) = e178ba4468982326656626e2089e296f64485e68fdddc9f4476dcd5d612b4f78
SIZE (cabal/profunctors-5.6.2/revision/3.cabal) = 2484
-SHA256 (cabal/random-1.2.1.2/random-1.2.1.2.tar.gz) = 790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4
-SIZE (cabal/random-1.2.1.2/random-1.2.1.2.tar.gz) = 47229
-SHA256 (cabal/reflection-2.1.7/reflection-2.1.7.tar.gz) = 6cbb18a8b02871533bb8b641dc6f76813a097d94404e5808bb5d52b0f0e415fd
-SIZE (cabal/reflection-2.1.7/reflection-2.1.7.tar.gz) = 17823
-SHA256 (cabal/reflection-2.1.7/revision/1.cabal) = f2b5b3f0983a605d16e53af489ebba62967d2c80353473ca66cc1734222b3a04
-SIZE (cabal/reflection-2.1.7/revision/1.cabal) = 4518
+SHA256 (cabal/random-1.3.1/random-1.3.1.tar.gz) = d840ac83f265b0cfa2a678f8ec78627eb50cf9be2f067c52c8a4239c29b71a35
+SIZE (cabal/random-1.3.1/random-1.3.1.tar.gz) = 63846
+SHA256 (cabal/reflection-2.1.9/reflection-2.1.9.tar.gz) = c6a7d5e41ad0ee1a05c660acf4fd34b21f38330eec165d246b7fffb398e59fb3
+SIZE (cabal/reflection-2.1.9/reflection-2.1.9.tar.gz) = 17560
+SHA256 (cabal/reflection-2.1.9/revision/1.cabal) = eaf28dc9884718a306ed1e0c215a24b36c68b8aa3be425617f66d886d43fe1e0
+SIZE (cabal/reflection-2.1.9/revision/1.cabal) = 4171
SHA256 (cabal/resourcet-1.3.0/resourcet-1.3.0.tar.gz) = ec601785ee42a201f32adb205b8685c983f18757b1bd33d2e806d571e0f9996b
SIZE (cabal/resourcet-1.3.0/resourcet-1.3.0.tar.gz) = 17620
-SHA256 (cabal/scientific-0.3.7.0/scientific-0.3.7.0.tar.gz) = a3a121c4b3d68fb8b9f8c709ab012e48f090ed553609247a805ad070d6b343a9
-SIZE (cabal/scientific-0.3.7.0/scientific-0.3.7.0.tar.gz) = 24723
-SHA256 (cabal/scientific-0.3.7.0/revision/7.cabal) = 909755ab19b453169ff85281323da1488407776b2360bd9f7afdd219fd306ef2
-SIZE (cabal/scientific-0.3.7.0/revision/7.cabal) = 4869
-SHA256 (cabal/semialign-1.3/semialign-1.3.tar.gz) = 628e43319f584a8dd46c124ee0685cac586e0f6f877c5ceff37c3dbb2e3cc56c
-SIZE (cabal/semialign-1.3/semialign-1.3.tar.gz) = 10543
-SHA256 (cabal/semialign-1.3/revision/1.cabal) = 7be9ef5ca1d6b052991f68c053aab68b9d1ab3b1938c9557ac84c97937815223
-SIZE (cabal/semialign-1.3/revision/1.cabal) = 2888
-SHA256 (cabal/semigroupoids-6.0.0.1/semigroupoids-6.0.0.1.tar.gz) = 7da38a9891bdf8205fd6522cdb712956b8c0bf5c52983da60295c8e057d77934
-SIZE (cabal/semigroupoids-6.0.0.1/semigroupoids-6.0.0.1.tar.gz) = 36222
-SHA256 (cabal/semigroupoids-6.0.0.1/revision/1.cabal) = 47a23b451c114e65361e713e8fe36828fca3a84285325e8f444254b2ab0c43c5
-SIZE (cabal/semigroupoids-6.0.0.1/revision/1.cabal) = 7465
+SHA256 (cabal/scientific-0.3.8.0/scientific-0.3.8.0.tar.gz) = 13b343bca8aa26d7718e52e622e5a118056653edafcbc7ccc5333be7217218cf
+SIZE (cabal/scientific-0.3.8.0/scientific-0.3.8.0.tar.gz) = 24314
+SHA256 (cabal/scientific-0.3.8.0/revision/2.cabal) = ba83a6701dd0110138443757aca4a42786afa94272b73045ef878fd860d1732e
+SIZE (cabal/scientific-0.3.8.0/revision/2.cabal) = 4397
+SHA256 (cabal/semialign-1.3.1/semialign-1.3.1.tar.gz) = 66e87bc254ffec2ee908bf625c42d3b7363238d6ab1cfba8934bbee7590c9df7
+SIZE (cabal/semialign-1.3.1/semialign-1.3.1.tar.gz) = 10117
+SHA256 (cabal/semialign-1.3.1/revision/2.cabal) = dfe515a9e43230f5308564a649a04ea1538499ed98b944644b77bed5394b9deb
+SIZE (cabal/semialign-1.3.1/revision/2.cabal) = 2224
+SHA256 (cabal/semigroupoids-6.0.1/semigroupoids-6.0.1.tar.gz) = 1d532030862414f5d4f2f6f001783f77aa14e5f05ee8e3c4a2d2129fca29cc1f
+SIZE (cabal/semigroupoids-6.0.1/semigroupoids-6.0.1.tar.gz) = 36372
+SHA256 (cabal/semigroupoids-6.0.1/revision/2.cabal) = bfee06a6d88038a88ddd10fc21c230bf5ee3a14d0584dc6ab7ad54a9252c2c21
+SIZE (cabal/semigroupoids-6.0.1/revision/2.cabal) = 7539
SHA256 (cabal/semigroups-0.20/semigroups-0.20.tar.gz) = 902d2e33c96b40a89de5957f2a9e097197afcc35e257e45b32ebe770993673e1
SIZE (cabal/semigroups-0.20/semigroups-0.20.tar.gz) = 18788
SHA256 (cabal/serialise-0.2.6.1/serialise-0.2.6.1.tar.gz) = 63949799ffd10675ef70ea701c1eb63e618629b3b2f7b25f07c5a966e24e77f4
SIZE (cabal/serialise-0.2.6.1/serialise-0.2.6.1.tar.gz) = 75106
-SHA256 (cabal/serialise-0.2.6.1/revision/1.cabal) = 48e55f150c7e3bac9003adeb49fcd4573814780c374c494a46ffccc2b2043df8
-SIZE (cabal/serialise-0.2.6.1/revision/1.cabal) = 8778
+SHA256 (cabal/serialise-0.2.6.1/revision/4.cabal) = 70495f88c1633bd432847b1d767e9e6832779f85b9d012b01a0a14f2cacbecc6
+SIZE (cabal/serialise-0.2.6.1/revision/4.cabal) = 8823
SHA256 (cabal/shakespeare-2.1.0.1/shakespeare-2.1.0.1.tar.gz) = 6cb655f3734de1b920faf67f313d45e31fc7f8fcf0a2e00a45f986d8e107d22f
SIZE (cabal/shakespeare-2.1.0.1/shakespeare-2.1.0.1.tar.gz) = 71698
SHA256 (cabal/socks-0.6.1/socks-0.6.1.tar.gz) = 734447558bb061ce768f53a0df1f2401902c6bee396cc96ce627edd986ef6a73
SIZE (cabal/socks-0.6.1/socks-0.6.1.tar.gz) = 9759
SHA256 (cabal/split-0.2.5/split-0.2.5.tar.gz) = 52da404e8397c1ab238354c8d4fd9a7e9c5cac8849cc2ce2e45facc85e74a913
SIZE (cabal/split-0.2.5/split-0.2.5.tar.gz) = 16008
-SHA256 (cabal/splitmix-0.1.0.5/splitmix-0.1.0.5.tar.gz) = 9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002
-SIZE (cabal/splitmix-0.1.0.5/splitmix-0.1.0.5.tar.gz) = 22399
-SHA256 (cabal/streaming-commons-0.2.2.6/streaming-commons-0.2.2.6.tar.gz) = 0180958a882eb0f6262b812fe886c2b1b8285474b5b958f814ae4f05409fbf79
-SIZE (cabal/streaming-commons-0.2.2.6/streaming-commons-0.2.2.6.tar.gz) = 37959
-SHA256 (cabal/streaming-commons-0.2.2.6/revision/1.cabal) = d5c6fb99efd4e71bdb0351d55f2d87e16c11880f42998e39363eb63f057ae24b
-SIZE (cabal/streaming-commons-0.2.2.6/revision/1.cabal) = 4827
-SHA256 (cabal/strict-0.5/strict-0.5.tar.gz) = 3f4f0995dec2d520d0e321542f71412dac023658fdab603db04364d75269a0fd
-SIZE (cabal/strict-0.5/strict-0.5.tar.gz) = 12564
-SHA256 (cabal/strict-0.5/revision/1.cabal) = bd57d7b3655951dfaa7d1e1374d7352dfe83f82a9c98309bf3a6587ef8cbd87d
-SIZE (cabal/strict-0.5/revision/1.cabal) = 4120
-SHA256 (cabal/tagged-0.8.8/tagged-0.8.8.tar.gz) = a083fa7835516203c168433a1c8dfc0290a94b05fedab566ad0640fc9137a6a7
-SIZE (cabal/tagged-0.8.8/tagged-0.8.8.tar.gz) = 10094
-SHA256 (cabal/text-iso8601-0.1/text-iso8601-0.1.tar.gz) = f58e7a46f951f1f13d2929e0a2f84f6db7894d55a641169aaf300aea9ada5fcf
-SIZE (cabal/text-iso8601-0.1/text-iso8601-0.1.tar.gz) = 9578
-SHA256 (cabal/text-iso8601-0.1/revision/1.cabal) = ac86f2500ca751db3c0de029dd7e7826bef7366d59dc0085b00fc695c43b9f76
-SIZE (cabal/text-iso8601-0.1/revision/1.cabal) = 2407
-SHA256 (cabal/text-short-0.1.5/text-short-0.1.5.tar.gz) = a35ec6cde2ada084c1a050dc5885be5ab01f851b93d744cf0facbc1c18002dda
-SIZE (cabal/text-short-0.1.5/text-short-0.1.5.tar.gz) = 25113
-SHA256 (cabal/text-short-0.1.5/revision/3.cabal) = 9c73c9c9182ca69ee92ce3758f515b1c078cd167d882ccc8c46f92f68c65e190
-SIZE (cabal/text-short-0.1.5/revision/3.cabal) = 3216
-SHA256 (cabal/th-abstraction-0.6.0.0/th-abstraction-0.6.0.0.tar.gz) = 69ea6eca1f0c00b6e1e1f8329c908ec76e73855e2ce6e91ace2f8bbf92c51a30
-SIZE (cabal/th-abstraction-0.6.0.0/th-abstraction-0.6.0.0.tar.gz) = 43152
-SHA256 (cabal/th-abstraction-0.6.0.0/revision/1.cabal) = d8959fa6a2812afcdd5f6f255fd6be8b3e0ca01e425586a554544fcb70b0ec7c
-SIZE (cabal/th-abstraction-0.6.0.0/revision/1.cabal) = 2303
-SHA256 (cabal/th-compat-0.1.4/th-compat-0.1.4.tar.gz) = d8f97ac14ab47b6b8a7b0fdb4ff95426322ec56badd01652ac15da4a44d4bab8
-SIZE (cabal/th-compat-0.1.4/th-compat-0.1.4.tar.gz) = 14838
-SHA256 (cabal/th-compat-0.1.4/revision/4.cabal) = f5f2c679ecc1c1b83d2d68db6cc564e5c78d53425e69e1b9e36784820e122d37
-SIZE (cabal/th-compat-0.1.4/revision/4.cabal) = 3224
-SHA256 (cabal/th-lift-0.8.4/th-lift-0.8.4.tar.gz) = f9c577238d4ba65fe3e78bc77f0cca54f17d02c0f6075b2487da5c63bdb4a61b
-SIZE (cabal/th-lift-0.8.4/th-lift-0.8.4.tar.gz) = 14711
-SHA256 (cabal/these-1.2/these-1.2.tar.gz) = a8ed7174b7f790764360f48aab72fea382a6093ed369c7bc6881fae1abacd4b8
-SIZE (cabal/these-1.2/these-1.2.tar.gz) = 10606
-SHA256 (cabal/these-1.2/revision/1.cabal) = 011e22f6891ca028f87c04ea48796696c92d593313a9c699f7ff4f9ffd7aec6e
-SIZE (cabal/these-1.2/revision/1.cabal) = 2882
-SHA256 (cabal/time-compat-1.9.6.1/time-compat-1.9.6.1.tar.gz) = ad07bb00eb9678c2136d3680752b00acc4cbc522654bb3199bf31c61ef1e6b80
-SIZE (cabal/time-compat-1.9.6.1/time-compat-1.9.6.1.tar.gz) = 59964
-SHA256 (cabal/time-compat-1.9.6.1/revision/6.cabal) = 17631ef01a03a6f55fbe131690f87f6dee9a1572acc99b6c06f04882470ffb52
-SIZE (cabal/time-compat-1.9.6.1/revision/6.cabal) = 5076
-SHA256 (cabal/tls-2.0.1/tls-2.0.1.tar.gz) = 98658cb0394a9cd08c56c5fe11a6c96f16c892a2a594db421cd72e0e7f7be684
-SIZE (cabal/tls-2.0.1/tls-2.0.1.tar.gz) = 162814
+SHA256 (cabal/splitmix-0.1.1/splitmix-0.1.1.tar.gz) = d678c41a603a62032cf7e5f8336bb8222c93990e4b59c8b291b7ca26c7eb12c7
+SIZE (cabal/splitmix-0.1.1/splitmix-0.1.1.tar.gz) = 21981
+SHA256 (cabal/streaming-commons-0.2.3.0/streaming-commons-0.2.3.0.tar.gz) = 26384af91f5ab9470b0bbdd0ce2172db43fc79730b7c5a3405d89c3663eb1e57
+SIZE (cabal/streaming-commons-0.2.3.0/streaming-commons-0.2.3.0.tar.gz) = 37874
+SHA256 (cabal/strict-0.5.1/strict-0.5.1.tar.gz) = 77719280c2a86312e748227bfa732eeaae0e7df48d57acc3c2e5b7b07afe2f8b
+SIZE (cabal/strict-0.5.1/strict-0.5.1.tar.gz) = 11798
+SHA256 (cabal/strict-0.5.1/revision/1.cabal) = 58c373b7c7748cbb4a5a6c8c15073f99a1c10a9a9bb6894ac33f43a5cdb901f2
+SIZE (cabal/strict-0.5.1/revision/1.cabal) = 3557
+SHA256 (cabal/tagged-0.8.9/tagged-0.8.9.tar.gz) = 6daad88ebb414ba6a556d2898d2cbe7650e4276010e3a6eed939daf54b956784
+SIZE (cabal/tagged-0.8.9/tagged-0.8.9.tar.gz) = 8151
+SHA256 (cabal/tasty-1.5.3/tasty-1.5.3.tar.gz) = 54a0c7b644813af871a3726ac8771b5e17b5158c792a7acf8f9e2d3ae9360780
+SIZE (cabal/tasty-1.5.3/tasty-1.5.3.tar.gz) = 66548
+SHA256 (cabal/tasty-1.5.3/revision/1.cabal) = 9d56ea9dbc274fc853fc531373b2c91bfe360e21460c2c6a5838897d86e3f6d0
+SIZE (cabal/tasty-1.5.3/revision/1.cabal) = 2923
+SHA256 (cabal/text-iso8601-0.1.1/text-iso8601-0.1.1.tar.gz) = 9dead2b7ceeae40fe0fc060bd54795c32e9926c9d1aebae8f9b9a621fba88202
+SIZE (cabal/text-iso8601-0.1.1/text-iso8601-0.1.1.tar.gz) = 9599
+SHA256 (cabal/text-iso8601-0.1.1/revision/2.cabal) = e07a625eef969338992bf9bba8e5dc73f07ac65f991ba636b8f1175890d15849
+SIZE (cabal/text-iso8601-0.1.1/revision/2.cabal) = 2411
+SHA256 (cabal/text-short-0.1.6/text-short-0.1.6.tar.gz) = 8173ea138d7dc398747b636012bf6e79e17186560b8a7a7fc9e6456d78556eab
+SIZE (cabal/text-short-0.1.6/text-short-0.1.6.tar.gz) = 24691
+SHA256 (cabal/text-short-0.1.6/revision/3.cabal) = 41be94ccd3f6646ab69b0b05c5130ea3c7911a4598ab9b9192f21ad25a69163a
+SIZE (cabal/text-short-0.1.6/revision/3.cabal) = 2827
+SHA256 (cabal/th-abstraction-0.7.1.0/th-abstraction-0.7.1.0.tar.gz) = f9b6184aba4c6b61dd0d96f7dad41a4c9db0a01d3cdbf993a7d860488f1c04c5
+SIZE (cabal/th-abstraction-0.7.1.0/th-abstraction-0.7.1.0.tar.gz) = 45428
+SHA256 (cabal/th-abstraction-0.7.1.0/revision/1.cabal) = 3011403d85b0070630e33d66b9370535ccd1e0e672ae58f847550b2b15bb4fd8
+SIZE (cabal/th-abstraction-0.7.1.0/revision/1.cabal) = 2268
+SHA256 (cabal/th-compat-0.1.6/th-compat-0.1.6.tar.gz) = b781a0c059872bc95406d00e98f6fa7d9e81e744730f75186583cb4dcea0a4eb
+SIZE (cabal/th-compat-0.1.6/th-compat-0.1.6.tar.gz) = 14622
+SHA256 (cabal/th-lift-0.8.6/th-lift-0.8.6.tar.gz) = 04309ad70ef80ed054ebda5b7d34a66642017604019f9e44ad321eec04a1ef1f
+SIZE (cabal/th-lift-0.8.6/th-lift-0.8.6.tar.gz) = 14310
+SHA256 (cabal/these-1.2.1/these-1.2.1.tar.gz) = 17d6d933365edabf801a16842c1403bdd37cc5300faa2fcca980decdab22e4de
+SIZE (cabal/these-1.2.1/these-1.2.1.tar.gz) = 9906
+SHA256 (cabal/these-1.2.1/revision/2.cabal) = 35c57aede96c15ea1fed559ac287b1168eb2b2869d79e62ed8c845780b7ea136
+SIZE (cabal/these-1.2.1/revision/2.cabal) = 2294
+SHA256 (cabal/time-compat-1.9.8/time-compat-1.9.8.tar.gz) = 502ef8694a5b131b47c0e5df2e9053d005a3b345b30f5225af04f081d3ef5cf0
+SIZE (cabal/time-compat-1.9.8/time-compat-1.9.8.tar.gz) = 63414
+SHA256 (cabal/tls-2.1.9/tls-2.1.9.tar.gz) = 152d77212c79a8606d9207e2a453dee56f34a981abc842463639401077abe93a
+SIZE (cabal/tls-2.1.9/tls-2.1.9.tar.gz) = 184895
SHA256 (cabal/transformers-base-0.4.6/transformers-base-0.4.6.tar.gz) = 323bf8689eb691b122661cffa41a25e00fea7a768433fe2dde35d3da7d32cf90
SIZE (cabal/transformers-base-0.4.6/transformers-base-0.4.6.tar.gz) = 2902
SHA256 (cabal/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz) = b62c7304c9f3cbc9463d0739aa85cb9489f217ea092b9d625d417514fbcc9d6a
SIZE (cabal/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz) = 46485
-SHA256 (cabal/typed-process-0.2.11.1/typed-process-0.2.11.1.tar.gz) = d5c5dda091d61bac35de4ed6d9ddb530e4eb2564ca3c0b93e577762b63d94148
-SIZE (cabal/typed-process-0.2.11.1/typed-process-0.2.11.1.tar.gz) = 18339
-SHA256 (cabal/unix-time-0.4.12/unix-time-0.4.12.tar.gz) = 50a57298e5cba81e9db2be9f4c24c7e514af96e541a97df05a5ecd411aaf97e2
-SIZE (cabal/unix-time-0.4.12/unix-time-0.4.12.tar.gz) = 52410
+SHA256 (cabal/typed-process-0.2.13.0/typed-process-0.2.13.0.tar.gz) = 9400966013b541df2e54ac8d57c3a670fc28bde2be87767ce98f13bbe2aa43a0
+SIZE (cabal/typed-process-0.2.13.0/typed-process-0.2.13.0.tar.gz) = 19160
+SHA256 (cabal/unix-time-0.4.16/unix-time-0.4.16.tar.gz) = ace2a7126d7344feb3221680c556de7f28a969fb287d49bd4a2d7df18fe638e9
+SIZE (cabal/unix-time-0.4.16/unix-time-0.4.16.tar.gz) = 52594
SHA256 (cabal/unliftio-core-0.2.1.0/unliftio-core-0.2.1.0.tar.gz) = 99384cba8d56d9d61b85e38a313a93ebcdb78be6566367f0930ef580597fe3e3
SIZE (cabal/unliftio-core-0.2.1.0/unliftio-core-0.2.1.0.tar.gz) = 3865
-SHA256 (cabal/unliftio-core-0.2.1.0/revision/3.cabal) = 28800633b20e0f7bfbdda1248c28022749aa0935aea10b1e3fc9c88cbebb06de
-SIZE (cabal/unliftio-core-0.2.1.0/revision/3.cabal) = 1004
+SHA256 (cabal/unliftio-core-0.2.1.0/revision/4.cabal) = f6a2736f858b5390d9384dca43d3ea4d96e9ca17217791791ca4951ba6e8072a
+SIZE (cabal/unliftio-core-0.2.1.0/revision/4.cabal) = 996
SHA256 (cabal/unordered-containers-0.2.20/unordered-containers-0.2.20.tar.gz) = d9cfb287cf00592d39dc9c3cac8b99627ea08f2c01798e70130fc39f7c90f11d
SIZE (cabal/unordered-containers-0.2.20/unordered-containers-0.2.20.tar.gz) = 59823
-SHA256 (cabal/unordered-containers-0.2.20/revision/1.cabal) = 746c32b23f93cb13e52309e54e82d69e4315105f9815b1fcac25a57071505cff
-SIZE (cabal/unordered-containers-0.2.20/revision/1.cabal) = 3921
+SHA256 (cabal/unordered-containers-0.2.20/revision/4.cabal) = 233cbcdda6c2698932bb391ce0935fb44f80c115621ee815a21ed33ac8ede422
+SIZE (cabal/unordered-containers-0.2.20/revision/4.cabal) = 3921
SHA256 (cabal/utf8-string-1.0.2/utf8-string-1.0.2.tar.gz) = ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a
SIZE (cabal/utf8-string-1.0.2/utf8-string-1.0.2.tar.gz) = 10726
-SHA256 (cabal/uuid-types-1.0.5.1/uuid-types-1.0.5.1.tar.gz) = 0bec6d6982b3c92bfa5eab1d213be2d4b6696b9a2c3a1f1f05812dc3762dca2c
-SIZE (cabal/uuid-types-1.0.5.1/uuid-types-1.0.5.1.tar.gz) = 11965
-SHA256 (cabal/vector-0.13.1.0/vector-0.13.1.0.tar.gz) = 63f272279eab8ab9411a0fffb1252ac309b297313f8e33be9ebbc2f981edecee
-SIZE (cabal/vector-0.13.1.0/vector-0.13.1.0.tar.gz) = 156855
-SHA256 (cabal/vector-algorithms-0.9.0.1/vector-algorithms-0.9.0.1.tar.gz) = 2ba7c0d3a8f26ef3ada24ff4abe81609225ecbab3b5754f048f8a0a3ecc33841
-SIZE (cabal/vector-algorithms-0.9.0.1/vector-algorithms-0.9.0.1.tar.gz) = 29149
-SHA256 (cabal/vector-algorithms-0.9.0.1/revision/3.cabal) = 222b01a4c0b9e13d73d04fba7c65930df16d1647acc07d84c47ef0356fa33dba
-SIZE (cabal/vector-algorithms-0.9.0.1/revision/3.cabal) = 3880
+SHA256 (cabal/uuid-types-1.0.6/uuid-types-1.0.6.tar.gz) = 7e0dd953483d6fd3ca49bcaed6b11f9e3c2787213479b2581e07747836b8357e
+SIZE (cabal/uuid-types-1.0.6/uuid-types-1.0.6.tar.gz) = 11222
+SHA256 (cabal/uuid-types-1.0.6/revision/3.cabal) = 5ac2b681a8d7676f6a51ac1b113bfdcf18dd7fdbb313034850ed6493eef96da0
+SIZE (cabal/uuid-types-1.0.6/revision/3.cabal) = 2619
+SHA256 (cabal/vector-0.13.2.0/vector-0.13.2.0.tar.gz) = 28f203c786cbf8ac6dc3fea3378ec36f34173d505fb4a1dd60fc8418ad91c423
+SIZE (cabal/vector-0.13.2.0/vector-0.13.2.0.tar.gz) = 185739
+SHA256 (cabal/vector-0.13.2.0/revision/1.cabal) = b736a57b73520d2acf4865e3e2b40030d69782f35f870e376dc717ee2508d81f
+SIZE (cabal/vector-0.13.2.0/revision/1.cabal) = 8804
+SHA256 (cabal/vector-algorithms-0.9.1.0/vector-algorithms-0.9.1.0.tar.gz) = d2b674676802670d8a682b357da6b6b5741b4a33b191f0ffe5f2b2bc40558eb2
+SIZE (cabal/vector-algorithms-0.9.1.0/vector-algorithms-0.9.1.0.tar.gz) = 29426
SHA256 (cabal/vector-stream-0.1.0.1/vector-stream-0.1.0.1.tar.gz) = d0f507334bdea5431a2f07f525a97f29e76522c32210f5de6d5a2b4f1d42bf7c
SIZE (cabal/vector-stream-0.1.0.1/vector-stream-0.1.0.1.tar.gz) = 12577
+SHA256 (cabal/vector-stream-0.1.0.1/revision/3.cabal) = 5ac96695212a45ae7dc16d8031dbf5311da53e052c35f7ad4a8e2db7fafb651e
+SIZE (cabal/vector-stream-0.1.0.1/revision/3.cabal) = 1642
SHA256 (cabal/void-0.7.3/void-0.7.3.tar.gz) = 53af758ddc37dc63981671e503438d02c6f64a2d8744e9bec557a894431f7317
SIZE (cabal/void-0.7.3/void-0.7.3.tar.gz) = 6741
-SHA256 (cabal/witherable-0.4.2/witherable-0.4.2.tar.gz) = 790d2bb274283419173bd89104439860675a9410f70f21912973ecd9098b4104
-SIZE (cabal/witherable-0.4.2/witherable-0.4.2.tar.gz) = 11876
-SHA256 (cabal/witherable-0.4.2/revision/4.cabal) = cec516b35df0ff53ab0068e70a912a0ba7b65c672fbc554727183faa195ad3b8
-SIZE (cabal/witherable-0.4.2/revision/4.cabal) = 2342
-SHA256 (cabal/xml-conduit-1.9.1.3/xml-conduit-1.9.1.3.tar.gz) = d8e9169562c71c9e6bc616f15832f521a68c362aa4fc03682748a809755f1bf4
-SIZE (cabal/xml-conduit-1.9.1.3/xml-conduit-1.9.1.3.tar.gz) = 44653
+SHA256 (cabal/witherable-0.5/witherable-0.5.tar.gz) = 48434cc1e465b13cbc0133a90c3ec0d827c93b77ce95807fe0a38b65f4918cd1
+SIZE (cabal/witherable-0.5/witherable-0.5.tar.gz) = 10819
+SHA256 (cabal/witherable-0.5/revision/1.cabal) = 85bab588ebca37996fc3171b9d8b2e065eb0536c9f44224bcf037c0849a881de
+SIZE (cabal/witherable-0.5/revision/1.cabal) = 2343
+SHA256 (cabal/xml-conduit-1.10.0.0/xml-conduit-1.10.0.0.tar.gz) = 3f9bd0cc3e80e49f2ac2a65b975ef503ea633f495172f9c05bdf1b46b5e1de92
+SIZE (cabal/xml-conduit-1.10.0.0/xml-conduit-1.10.0.0.tar.gz) = 44893
SHA256 (cabal/xml-hamlet-0.5.0.2/xml-hamlet-0.5.0.2.tar.gz) = 5ff04a927718f333689c5cdfde8ee3049533d0734e6a0d8026a71961c2642e81
SIZE (cabal/xml-hamlet-0.5.0.2/xml-hamlet-0.5.0.2.tar.gz) = 9328
SHA256 (cabal/xml-types-0.3.8/xml-types-0.3.8.tar.gz) = dad5e4ce602b7d1f4be37c0cfd99a261a4573746bfd80d917dc955b72da84c80
SIZE (cabal/xml-types-0.3.8/xml-types-0.3.8.tar.gz) = 4054
-SHA256 (cabal/zlib-0.7.0.0/zlib-0.7.0.0.tar.gz) = 7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47
-SIZE (cabal/zlib-0.7.0.0/zlib-0.7.0.0.tar.gz) = 369149
+SHA256 (cabal/zlib-0.7.1.0/zlib-0.7.1.0.tar.gz) = 6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc
+SIZE (cabal/zlib-0.7.1.0/zlib-0.7.1.0.tar.gz) = 29318
+SHA256 (cabal/zlib-0.7.1.0/revision/2.cabal) = 85e64a75c0b490506a7edaa2d54950c668e66b65758bb08bb14cd31faf53a206
+SIZE (cabal/zlib-0.7.1.0/revision/2.cabal) = 5357
diff --git a/www/hs-gitit/Makefile b/www/hs-gitit/Makefile
index ddccd1fcaa20..8435a5b58e4c 100644
--- a/www/hs-gitit/Makefile
+++ b/www/hs-gitit/Makefile
@@ -8,6 +8,8 @@ WWW= https://github.com/jgm/gitit
LICENSE= GPLv2
+BUILD_DEPENDS= ghc-9.6.7:lang/ghc96
+
USES= cabal
OPTIONS_DEFINE= PLUGINS EXPORTS
diff --git a/www/hs-hjsmin/Makefile b/www/hs-hjsmin/Makefile
index 569f7e99fbf6..9a4f8adf1d32 100644
--- a/www/hs-hjsmin/Makefile
+++ b/www/hs-hjsmin/Makefile
@@ -12,15 +12,17 @@ USES= cabal
USE_LOCALE= en_US.UTF-8
-USE_CABAL= alex-3.2.7.1 \
- ansi-terminal-0.11.4 \
- ansi-wl-pprint-0.6.9_3 \
- blaze-builder-0.4.2.2_1 \
+USE_CABAL= alex-3.5.3.0 \
+ ansi-terminal-1.1.2 \
+ ansi-terminal-types-1.1 \
+ blaze-builder-0.4.2.3 \
colour-2.3.6 \
- happy-1.20.1.1 \
+ happy-2.1.5 \
+ happy-lib-2.1.5 \
language-javascript-0.7.1.0 \
- optparse-applicative-0.17.0.0 \
- text-2.0.2 \
+ optparse-applicative-0.18.1.0_1 \
+ prettyprinter-1.7.1 \
+ prettyprinter-ansi-terminal-1.1.3 \
transformers-compat-0.7.2 \
utf8-string-1.0.2
diff --git a/www/hs-hjsmin/distinfo b/www/hs-hjsmin/distinfo
index ebc4f60d1a27..5d369176aa08 100644
--- a/www/hs-hjsmin/distinfo
+++ b/www/hs-hjsmin/distinfo
@@ -1,28 +1,30 @@
-TIMESTAMP = 1678631222
+TIMESTAMP = 1747071474
SHA256 (cabal/hjsmin-0.2.1/hjsmin-0.2.1.tar.gz) = 4db43835a4cdfd79b9e18238fdd86c0de7e656813f8b8083c3ba8630d322cd90
SIZE (cabal/hjsmin-0.2.1/hjsmin-0.2.1.tar.gz) = 5197
-SHA256 (cabal/alex-3.2.7.1/alex-3.2.7.1.tar.gz) = 9bd2f1a27e8f1b2ffdb5b2fbd3ed82b6f0e85191459a1b24ffcbef4e68a81bec
-SIZE (cabal/alex-3.2.7.1/alex-3.2.7.1.tar.gz) = 108229
-SHA256 (cabal/ansi-terminal-0.11.4/ansi-terminal-0.11.4.tar.gz) = 7898e48f0a535c1857cde52c803f28096ba89759461fe4d157fd55dcdb420e25
-SIZE (cabal/ansi-terminal-0.11.4/ansi-terminal-0.11.4.tar.gz) = 43299
-SHA256 (cabal/ansi-wl-pprint-0.6.9/ansi-wl-pprint-0.6.9.tar.gz) = a7b2e8e7cd3f02f2954e8b17dc60a0ccd889f49e2068ebb15abfa1d42f7a4eac
-SIZE (cabal/ansi-wl-pprint-0.6.9/ansi-wl-pprint-0.6.9.tar.gz) = 16723
-SHA256 (cabal/ansi-wl-pprint-0.6.9/revision/3.cabal) = 212144ea0623b1170807a4162db05d87f26cf10b334aeadd0edb377aba06a1ce
-SIZE (cabal/ansi-wl-pprint-0.6.9/revision/3.cabal) = 2425
-SHA256 (cabal/blaze-builder-0.4.2.2/blaze-builder-0.4.2.2.tar.gz) = 2cdc998c021d3a5f2a66a95138b93386271c26a117e7676d78264a90e536af67
-SIZE (cabal/blaze-builder-0.4.2.2/blaze-builder-0.4.2.2.tar.gz) = 60707
-SHA256 (cabal/blaze-builder-0.4.2.2/revision/1.cabal) = f0017df374c330de0ebe0eb15eae8c48427bddefa1d81a3cb31c0a4812ecdb08
-SIZE (cabal/blaze-builder-0.4.2.2/revision/1.cabal) = 3685
+SHA256 (cabal/alex-3.5.3.0/alex-3.5.3.0.tar.gz) = a5cd52e2dd2837138523e2e24ec3435b8cf2624afd50725105e644226e0b9ec6
+SIZE (cabal/alex-3.5.3.0/alex-3.5.3.0.tar.gz) = 92759
+SHA256 (cabal/ansi-terminal-1.1.2/ansi-terminal-1.1.2.tar.gz) = a8d04a3e0451e22a6499a92311f0df1196dc65b687df7d10e3f30d92420156b0
+SIZE (cabal/ansi-terminal-1.1.2/ansi-terminal-1.1.2.tar.gz) = 36259
+SHA256 (cabal/ansi-terminal-types-1.1/ansi-terminal-types-1.1.tar.gz) = f2e5333eb78da5f4dd330fca0c81a59276cc150c625647cd20f57b7f297a5d25
+SIZE (cabal/ansi-terminal-types-1.1/ansi-terminal-types-1.1.tar.gz) = 4746
+SHA256 (cabal/blaze-builder-0.4.2.3/blaze-builder-0.4.2.3.tar.gz) = 66291874236b7342adab033e3cddae414a23a2865dfb44095dfc4e0b9d46703b
+SIZE (cabal/blaze-builder-0.4.2.3/blaze-builder-0.4.2.3.tar.gz) = 60777
SHA256 (cabal/colour-2.3.6/colour-2.3.6.tar.gz) = 2cd35dcd6944a5abc9f108a5eb5ee564b6b1fa98a9ec79cefcc20b588991f871
SIZE (cabal/colour-2.3.6/colour-2.3.6.tar.gz) = 20675
-SHA256 (cabal/happy-1.20.1.1/happy-1.20.1.1.tar.gz) = 8b4e7dc5a6c5fd666f8f7163232931ab28746d0d17da8fa1cbd68be9e878881b
-SIZE (cabal/happy-1.20.1.1/happy-1.20.1.1.tar.gz) = 183409
+SHA256 (cabal/happy-2.1.5/happy-2.1.5.tar.gz) = 7af82f24f65bf951b24000b9e16ee01c750ed40edc0b256881d29daee85c41c4
+SIZE (cabal/happy-2.1.5/happy-2.1.5.tar.gz) = 61293
+SHA256 (cabal/happy-lib-2.1.5/happy-lib-2.1.5.tar.gz) = a25a6c5a2db150caf4b8c91e048e302f776372034b84b8f9461fea0483da94eb
+SIZE (cabal/happy-lib-2.1.5/happy-lib-2.1.5.tar.gz) = 93792
SHA256 (cabal/language-javascript-0.7.1.0/language-javascript-0.7.1.0.tar.gz) = d1a036aa4c747fa7a347e78dc6d3609a3d51dc28580ff6b897a27646ca7ad168
SIZE (cabal/language-javascript-0.7.1.0/language-javascript-0.7.1.0.tar.gz) = 76438
-SHA256 (cabal/optparse-applicative-0.17.0.0/optparse-applicative-0.17.0.0.tar.gz) = 825b2e4d3dafe0ba64a073366a88062b3712b81f851793d9ce2327bee70af724
-SIZE (cabal/optparse-applicative-0.17.0.0/optparse-applicative-0.17.0.0.tar.gz) = 59409
-SHA256 (cabal/text-2.0.2/text-2.0.2.tar.gz) = c735be650a898606ce9f2c8642bc6ac6123eea82871d5e90f92797801f59efad
-SIZE (cabal/text-2.0.2/text-2.0.2.tar.gz) = 292557
+SHA256 (cabal/optparse-applicative-0.18.1.0/optparse-applicative-0.18.1.0.tar.gz) = 63811ab4fd26e829b8868364325a88be3acc79819f5bb5005b2dd3b961ecc491
+SIZE (cabal/optparse-applicative-0.18.1.0/optparse-applicative-0.18.1.0.tar.gz) = 60682
+SHA256 (cabal/optparse-applicative-0.18.1.0/revision/1.cabal) = f30973861ac7e7ebff05ff8c7c3d1e4d283a1f3850e1cc14106b0693ec1b6d82
+SIZE (cabal/optparse-applicative-0.18.1.0/revision/1.cabal) = 5289
+SHA256 (cabal/prettyprinter-1.7.1/prettyprinter-1.7.1.tar.gz) = 5e6ea6903114fa118fcc359633dfb7ecddecb92c06c853d02a77b72b251f0b45
+SIZE (cabal/prettyprinter-1.7.1/prettyprinter-1.7.1.tar.gz) = 56907
+SHA256 (cabal/prettyprinter-ansi-terminal-1.1.3/prettyprinter-ansi-terminal-1.1.3.tar.gz) = 813739308ad6050620578994effe21058a170a341716acf52573fae42b5b1db3
+SIZE (cabal/prettyprinter-ansi-terminal-1.1.3/prettyprinter-ansi-terminal-1.1.3.tar.gz) = 8879
SHA256 (cabal/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz) = b62c7304c9f3cbc9463d0739aa85cb9489f217ea092b9d625d417514fbcc9d6a
SIZE (cabal/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz) = 46485
SHA256 (cabal/utf8-string-1.0.2/utf8-string-1.0.2.tar.gz) = ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a
diff --git a/www/hs-postgrest/Makefile b/www/hs-postgrest/Makefile
index 67ad49776500..0bd5a01fb5cb 100644
--- a/www/hs-postgrest/Makefile
+++ b/www/hs-postgrest/Makefile
@@ -1,6 +1,6 @@
PORTNAME= postgrest
DISTVERSIONPREFIX= v
-DISTVERSION= 12.2.11
+DISTVERSION= 13.0.0
CATEGORIES= www databases haskell
MAINTAINER= haskell@FreeBSD.org
@@ -12,7 +12,8 @@ LICENSE_FILE= ${WRKSRC}/LICENSE
ONLY_FOR_ARCHS= amd64 i386
-BUILD_DEPENDS= pg_config:databases/postgresql${PGSQL_DEFAULT}-client
+BUILD_DEPENDS= pg_config:databases/postgresql${PGSQL_DEFAULT}-client \
+ ghc-9.6.7:lang/ghc96
USES= cabal pgsql
diff --git a/www/hs-postgrest/Makefile.modules b/www/hs-postgrest/Makefile.modules
index 6506654a51ab..816d6bae22a4 100644
--- a/www/hs-postgrest/Makefile.modules
+++ b/www/hs-postgrest/Makefile.modules
@@ -5,17 +5,17 @@ USE_CABAL= HTTP-4000.4.1_5 \
QuickCheck-2.15.0.1_1 \
Ranged-sets-0.4.0_2 \
StateVar-1.2.2 \
- adjunctions-4.4.2_2 \
+ adjunctions-4.4.3 \
aeson-2.2.3.0_3 \
aeson-pretty-0.8.10 \
ansi-terminal-1.1.2 \
ansi-terminal-types-1.1 \
appar-0.1.8 \
- asn1-encoding-0.9.6 \
+ asn1-encoding-0.9.6_2 \
asn1-parse-0.9.5 \
asn1-types-0.3.4 \
assoc-1.1.1_1 \
- async-2.2.5 \
+ async-2.2.5_3 \
atomic-primops-0.8.8 \
attoparsec-0.14.4_6 \
attoparsec-aeson-2.2.2.0 \
@@ -31,8 +31,8 @@ USE_CABAL= HTTP-4000.4.1_5 \
bitvec-1.1.5.0_3 \
bsb-http-chunked-0.0.0.4_4 \
byteorder-1.0.4 \
- bytestring-strict-builder-0.4.5.7 \
- bytestring-tree-builder-0.2.7.12 \
+ bytestring-strict-builder-0.4.5.8 \
+ bytestring-tree-builder-0.2.7.13 \
cabal-doctest-1.0.11 \
cache-0.1.3.0_1 \
call-stack-0.4.0 \
@@ -40,19 +40,18 @@ USE_CABAL= HTTP-4000.4.1_5 \
cassava-0.5.3.2_1 \
cereal-0.5.8.3 \
character-ps-0.1 \
- charset-0.3.11 \
+ charset-0.3.12 \
clock-0.8.4 \
cmdargs-0.10.22 \
colour-2.3.6 \
comonad-5.0.9_1 \
- concise-0.1.0.1 \
configurator-pg-0.2.10_1 \
contravariant-1.5.5 \
contravariant-extras-0.3.5.4 \
cookie-0.4.6 \
cryptohash-md5-0.11.101.0_6 \
cryptohash-sha1-0.11.101.0_6 \
- crypton-1.0.1 \
+ crypton-1.0.4 \
crypton-x509-1.7.7 \
data-bword-0.1.0.2 \
data-checked-0.3 \
@@ -68,7 +67,7 @@ USE_CABAL= HTTP-4000.4.1_5 \
data-sketches-0.3.1.0 \
data-sketches-core-0.1.0.0 \
data-textual-0.3.0.3 \
- deferred-folds-0.9.18.6 \
+ deferred-folds-0.9.18.7 \
distributive-0.6.2.1_1 \
dlist-1.0_2 \
easy-file-0.2.5 \
@@ -81,14 +80,9 @@ USE_CABAL= HTTP-4000.4.1_5 \
fuzzyset-0.2.4 \
generically-0.1.1_4 \
generics-sop-0.5.1.4_2 \
- gitrev-1.3.1 \
groups-0.5.3 \
- happy-2.1.4 \
- happy-lib-2.1.4 \
hashable-1.4.7.0 \
hashtables-1.4.2 \
- haskell-src-exts-1.23.1 \
- haskell-src-meta-0.8.15 \
hasql-1.6.4.4 \
hasql-dynamic-statements-0.3.1.5 \
hasql-implicits-0.1.1.3 \
@@ -105,25 +99,24 @@ USE_CABAL= HTTP-4000.4.1_5 \
indexed-profunctors-0.1.1.1 \
indexed-traversable-0.1.4_1 \
indexed-traversable-instances-0.1.2_1 \
- insert-ordered-containers-0.2.6 \
+ insert-ordered-containers-0.2.7 \
integer-conversion-0.1.1_1 \
integer-logarithms-1.0.4 \
- interpolatedstring-perl6-1.0.2 \
invariant-0.6.4_1 \
iproute-1.7.15 \
- isomorphism-class-0.3 \
- jose-0.11 \
+ isomorphism-class-0.3.1.2 \
+ jose-jwt-0.10.0 \
kan-extensions-5.2.6_1 \
keys-3.12.4_1 \
- lawful-conversions-0.1.6 \
+ lawful-conversions-0.1.6.1 \
lens-5.2.3_5 \
lens-aeson-1.2.3_2 \
math-functions-0.3.4.4 \
- megaparsec-9.6.1 \
+ megaparsec-9.7.0 \
memory-0.18.0_1 \
- monad-time-0.4.0.0 \
mtl-compat-0.2.2 \
mwc-random-0.15.2.0 \
+ neat-interpolation-0.5.1.4 \
network-3.1.4.0_1 \
network-byte-order-0.1.7 \
network-control-0.0.2 \
@@ -147,23 +140,22 @@ USE_CABAL= HTTP-4000.4.1_5 \
postgresql-libpq-configure-0.10.0.1 \
prettyprinter-1.7.1 \
prettyprinter-ansi-terminal-1.1.3 \
- primitive-0.9.0.0_2 \
+ primitive-0.9.1.0 \
profunctors-5.6.2_3 \
prometheus-client-1.1.1 \
protolude-0.3.4 \
psqueues-0.2.8.1 \
- ptr-0.16.8.6 \
+ ptr-0.16.8.7 \
quickcheck-instances-0.3.32_1 \
- random-1.2.1.3 \
+ random-1.3.1 \
rebase-1.21.2 \
- recv-0.1.0 \
+ recv-0.1.1 \
reflection-2.1.9_1 \
- regex-base-0.94.0.2_4 \
- regex-tdfa-1.3.2.2_3 \
+ regex-base-0.94.0.3 \
+ regex-tdfa-1.3.2.4 \
rerebase-1.21.2 \
resourcet-1.3.0 \
retry-0.9.3.1 \
- safe-0.3.21_1 \
safe-exceptions-0.1.7.4_1 \
scientific-0.3.8.0_2 \
selective-0.7.0.1 \
@@ -176,14 +168,13 @@ USE_CABAL= HTTP-4000.4.1_5 \
splitmix-0.1.1 \
streaming-commons-0.2.3.0 \
strict-0.5.1_1 \
- strict-list-0.1.7.5 \
- swagger2-2.8.9 \
- syb-0.7.2.4 \
+ strict-list-0.1.7.6 \
+ swagger2-2.8.10 \
tagged-0.8.9 \
tasty-1.5.3_1 \
- template-haskell-compat-v0208-0.1.9.4 \
- text-builder-0.6.7.2 \
- text-builder-dev-0.3.9 \
+ template-haskell-compat-v0208-0.1.9.5 \
+ text-builder-0.6.10 \
+ text-builder-dev-0.3.10 \
text-iso8601-0.1.1_2 \
text-latin1-0.3.1 \
text-metrics-0.3.3 \
@@ -191,10 +182,6 @@ USE_CABAL= HTTP-4000.4.1_5 \
text-short-0.1.6_3 \
th-abstraction-0.7.1.0_1 \
th-compat-0.1.6 \
- th-expand-syns-0.4.12.0 \
- th-lift-0.8.6 \
- th-orphans-0.13.16 \
- th-reify-many-0.1.10 \
these-1.2.1_2 \
time-compat-1.9.8 \
time-manager-0.0.1 \
@@ -202,9 +189,9 @@ USE_CABAL= HTTP-4000.4.1_5 \
transformers-base-0.4.6 \
transformers-compat-0.7.2 \
type-hint-0.1 \
- unix-compat-0.7.3_1 \
+ unix-compat-0.7.4 \
unix-time-0.4.16 \
- unliftio-0.2.25.0 \
+ unliftio-0.2.25.1 \
unliftio-core-0.2.1.0_4 \
unordered-containers-0.2.20_4 \
utf8-string-1.0.2 \
@@ -212,7 +199,7 @@ USE_CABAL= HTTP-4000.4.1_5 \
uuid-types-1.0.6_3 \
vault-0.3.1.5_10 \
vector-0.13.2.0_1 \
- vector-algorithms-0.9.0.3 \
+ vector-algorithms-0.9.1.0 \
vector-instances-3.4.2 \
vector-stream-0.1.0.1_3 \
void-0.7.3 \
diff --git a/www/hs-postgrest/distinfo b/www/hs-postgrest/distinfo
index 7f6f566d588d..a40eca6d3846 100644
--- a/www/hs-postgrest/distinfo
+++ b/www/hs-postgrest/distinfo
@@ -1,4 +1,4 @@
-TIMESTAMP = 1745396744
+TIMESTAMP = 1747113378
SHA256 (cabal/HTTP-4000.4.1/HTTP-4000.4.1.tar.gz) = df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453
SIZE (cabal/HTTP-4000.4.1/HTTP-4000.4.1.tar.gz) = 74330
SHA256 (cabal/HTTP-4000.4.1/revision/5.cabal) = 75ada03bd2d2b747319e38877a55bf8be529db4520a07d4e5ffbd24c5e850dcb
@@ -23,10 +23,8 @@ SHA256 (cabal/Ranged-sets-0.4.0/revision/2.cabal) = 04bb4ce482fbdc052c9ee3346ba2
SIZE (cabal/Ranged-sets-0.4.0/revision/2.cabal) = 1373
SHA256 (cabal/StateVar-1.2.2/StateVar-1.2.2.tar.gz) = 5e4b39da395656a59827b0280508aafdc70335798b50e5d6fd52596026251825
SIZE (cabal/StateVar-1.2.2/StateVar-1.2.2.tar.gz) = 5048
-SHA256 (cabal/adjunctions-4.4.2/adjunctions-4.4.2.tar.gz) = 147b5f8db810bca0ea8952ef974982ffc447cecd21f01e1ea1121df77e276518
-SIZE (cabal/adjunctions-4.4.2/adjunctions-4.4.2.tar.gz) = 17201
-SHA256 (cabal/adjunctions-4.4.2/revision/2.cabal) = 30206ae6b78d3d523c2ff73640f84b51fa204ac3f05267a5f0c77c486b96781d
-SIZE (cabal/adjunctions-4.4.2/revision/2.cabal) = 3379
+SHA256 (cabal/adjunctions-4.4.3/adjunctions-4.4.3.tar.gz) = 8beb121cee2bf913dac3188ed1e0e05cf1a0d0f12d4cb4a27c0da58450eb189a
+SIZE (cabal/adjunctions-4.4.3/adjunctions-4.4.3.tar.gz) = 16788
SHA256 (cabal/aeson-2.2.3.0/aeson-2.2.3.0.tar.gz) = daa25cf428256ad05d21f2bfa44077c1b14d6c784b7930a202ee901f11cc6baa
SIZE (cabal/aeson-2.2.3.0/aeson-2.2.3.0.tar.gz) = 340855
SHA256 (cabal/aeson-2.2.3.0/revision/3.cabal) = 61e559f2bad61a98aac564f2a4fd892d21e9e1712e14e3db93326317aa944a9b
@@ -41,6 +39,8 @@ SHA256 (cabal/appar-0.1.8/appar-0.1.8.tar.gz) = c4ceeddc26525b58d82c41b6d3e32141
SIZE (cabal/appar-0.1.8/appar-0.1.8.tar.gz) = 4037
SHA256 (cabal/asn1-encoding-0.9.6/asn1-encoding-0.9.6.tar.gz) = d9f8deabd3b908e5cf83c0d813c08dc0143b3ec1c0d97f660d2cfa02c1c8da0a
SIZE (cabal/asn1-encoding-0.9.6/asn1-encoding-0.9.6.tar.gz) = 17343
+SHA256 (cabal/asn1-encoding-0.9.6/revision/2.cabal) = 27ed8f6043aed79630313bb931f7c8e2b510f0b4586cd55c16ae040c7d1ea098
+SIZE (cabal/asn1-encoding-0.9.6/revision/2.cabal) = 2060
SHA256 (cabal/asn1-parse-0.9.5/asn1-parse-0.9.5.tar.gz) = 8f1fe1344d30b39dc594d74df2c55209577722af1497204b4c2b6d6e8747f39e
SIZE (cabal/asn1-parse-0.9.5/asn1-parse-0.9.5.tar.gz) = 2951
SHA256 (cabal/asn1-types-0.3.4/asn1-types-0.3.4.tar.gz) = 78ee92a251379298ca820fa53edbf4b33c539b9fcd887c86f520c30e3b4e21a8
@@ -51,6 +51,8 @@ SHA256 (cabal/assoc-1.1.1/revision/1.cabal) = 0ab39b4d1feb4caca95ac6e314f48782b2
SIZE (cabal/assoc-1.1.1/revision/1.cabal) = 1420
SHA256 (cabal/async-2.2.5/async-2.2.5.tar.gz) = 1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7
SIZE (cabal/async-2.2.5/async-2.2.5.tar.gz) = 15742
+SHA256 (cabal/async-2.2.5/revision/3.cabal) = b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b
+SIZE (cabal/async-2.2.5/revision/3.cabal) = 3366
SHA256 (cabal/atomic-primops-0.8.8/atomic-primops-0.8.8.tar.gz) = c040ce4109258776100dd8942d6e746e4c26f918398fb3804e78dbe5bd73e7ea
SIZE (cabal/atomic-primops-0.8.8/atomic-primops-0.8.8.tar.gz) = 34182
SHA256 (cabal/attoparsec-0.14.4/attoparsec-0.14.4.tar.gz) = 3f337fe58624565de12426f607c23e60c7b09c86b4e3adfc827ca188c9979e6c
@@ -91,10 +93,10 @@ SHA256 (cabal/bsb-http-chunked-0.0.0.4/revision/4.cabal) = 1cce7371c31b1d3cfa3eb
SIZE (cabal/bsb-http-chunked-0.0.0.4/revision/4.cabal) = 2687
SHA256 (cabal/byteorder-1.0.4/byteorder-1.0.4.tar.gz) = bd20bbb586947f99c38a4c93d9d0266f49f6fc581767b51ba568f6d5d52d2919
SIZE (cabal/byteorder-1.0.4/byteorder-1.0.4.tar.gz) = 2030
-SHA256 (cabal/bytestring-strict-builder-0.4.5.7/bytestring-strict-builder-0.4.5.7.tar.gz) = d7a6b1727cb916b4a9ca85a354ae2ce886b73d01ba7b1a488571ab64b4f774f1
-SIZE (cabal/bytestring-strict-builder-0.4.5.7/bytestring-strict-builder-0.4.5.7.tar.gz) = 7268
-SHA256 (cabal/bytestring-tree-builder-0.2.7.12/bytestring-tree-builder-0.2.7.12.tar.gz) = 90d8231350d21053ac2d97c3981bd74ae9f842e7696e8a249657815825459237
-SIZE (cabal/bytestring-tree-builder-0.2.7.12/bytestring-tree-builder-0.2.7.12.tar.gz) = 5498
+SHA256 (cabal/bytestring-strict-builder-0.4.5.8/bytestring-strict-builder-0.4.5.8.tar.gz) = 3b9ae00a210638d7d3972247f7106e51735327081cda17f4d0c1283b1ca2dd0b
+SIZE (cabal/bytestring-strict-builder-0.4.5.8/bytestring-strict-builder-0.4.5.8.tar.gz) = 7265
+SHA256 (cabal/bytestring-tree-builder-0.2.7.13/bytestring-tree-builder-0.2.7.13.tar.gz) = 8f7e532e617393dfb2c285e0311317345ba108fc014b31c618f4279046fa6768
+SIZE (cabal/bytestring-tree-builder-0.2.7.13/bytestring-tree-builder-0.2.7.13.tar.gz) = 5496
SHA256 (cabal/cabal-doctest-1.0.11/cabal-doctest-1.0.11.tar.gz) = dc2df2f0b427028617f10e445ff8ab3352d3bbeef1b8dd847e879d2d36bf923f
SIZE (cabal/cabal-doctest-1.0.11/cabal-doctest-1.0.11.tar.gz) = 13204
SHA256 (cabal/cache-0.1.3.0/cache-0.1.3.0.tar.gz) = 42e9d9f040fab2fd5fc1095a901d6348de73342b1d14254bdaf6ca3d4f11e534
@@ -113,8 +115,8 @@ SHA256 (cabal/cereal-0.5.8.3/cereal-0.5.8.3.tar.gz) = 99905220661b26e5bd91130bd9
SIZE (cabal/cereal-0.5.8.3/cereal-0.5.8.3.tar.gz) = 20166
SHA256 (cabal/character-ps-0.1/character-ps-0.1.tar.gz) = 22de71fde38b236d3e9168a832b5e1e75d1fb4f4028667bdf747b3b4c8c1529c
SIZE (cabal/character-ps-0.1/character-ps-0.1.tar.gz) = 8192
-SHA256 (cabal/charset-0.3.11/charset-0.3.11.tar.gz) = 9343757569249865b42aa218461c311d619d3c8027dfddbb635146363cc08aac
-SIZE (cabal/charset-0.3.11/charset-0.3.11.tar.gz) = 13650
+SHA256 (cabal/charset-0.3.12/charset-0.3.12.tar.gz) = 1ce8c6d444ae9d5685099fe118fda2744c4a6037559507d8213ff686dfca722d
+SIZE (cabal/charset-0.3.12/charset-0.3.12.tar.gz) = 13687
SHA256 (cabal/clock-0.8.4/clock-0.8.4.tar.gz) = 6ae9898afe788a5e334cd5fad5d18a3c2e8e59fa09aaf7b957dbb38a4767df2e
SIZE (cabal/clock-0.8.4/clock-0.8.4.tar.gz) = 9322
SHA256 (cabal/cmdargs-0.10.22/cmdargs-0.10.22.tar.gz) = b8b12e7f8795cf13037bb062d453b86c788eae62558586f59e9419aabe6e9bef
@@ -125,8 +127,6 @@ SHA256 (cabal/comonad-5.0.9/comonad-5.0.9.tar.gz) = 69fb0eb49a80055a9b76d31d0a56
SIZE (cabal/comonad-5.0.9/comonad-5.0.9.tar.gz) = 14455
SHA256 (cabal/comonad-5.0.9/revision/1.cabal) = 75aded79bf583c908e4e4687c0ae067f256e2507536b75f58ffba7748767c353
SIZE (cabal/comonad-5.0.9/revision/1.cabal) = 3587
-SHA256 (cabal/concise-0.1.0.1/concise-0.1.0.1.tar.gz) = 5c27df5a3e1fe820548e90abc4a0e326b6d0fb286218619aa22d3af90c7b9925
-SIZE (cabal/concise-0.1.0.1/concise-0.1.0.1.tar.gz) = 3415
SHA256 (cabal/configurator-pg-0.2.10/configurator-pg-0.2.10.tar.gz) = 527b96469442706ce51ab9b41681434fca413945b5ab868bd2778b66fe3d4689
SIZE (cabal/configurator-pg-0.2.10/configurator-pg-0.2.10.tar.gz) = 12239
SHA256 (cabal/configurator-pg-0.2.10/revision/1.cabal) = 20a0307d5b0080e6ce571706a2a391c44cc0d12c9372fad0015067ecfdc5bfec
@@ -145,8 +145,8 @@ SHA256 (cabal/cryptohash-sha1-0.11.101.0/cryptohash-sha1-0.11.101.0.tar.gz) = a4
SIZE (cabal/cryptohash-sha1-0.11.101.0/cryptohash-sha1-0.11.101.0.tar.gz) = 11563
SHA256 (cabal/cryptohash-sha1-0.11.101.0/revision/6.cabal) = 2bdf29dbd896bca86bf198c882fa8df1cb31843b71f2907e059b7c10bce0adb3
SIZE (cabal/cryptohash-sha1-0.11.101.0/revision/6.cabal) = 3085
-SHA256 (cabal/crypton-1.0.1/crypton-1.0.1.tar.gz) = 9142bb14748cc57356cf4dacec822e80eaf6dba8e1538ec93be17ee37027c7a4
-SIZE (cabal/crypton-1.0.1/crypton-1.0.1.tar.gz) = 624895
+SHA256 (cabal/crypton-1.0.4/crypton-1.0.4.tar.gz) = b4885402206422450823e7001a40d0f6b11d0c603a0cb8bf8ff5a186b7c4011a
+SIZE (cabal/crypton-1.0.4/crypton-1.0.4.tar.gz) = 649976
SHA256 (cabal/crypton-x509-1.7.7/crypton-x509-1.7.7.tar.gz) = efece48c8c4adfee209979c2967037d90e6ba1b7b4e7bb1081d1d4cd93daf382
SIZE (cabal/crypton-x509-1.7.7/crypton-x509-1.7.7.tar.gz) = 21547
SHA256 (cabal/data-bword-0.1.0.2/data-bword-0.1.0.2.tar.gz) = d64880e7d6c7a2d635d7e79552888f415a417379ee637a29321abf08187e9635
@@ -179,8 +179,8 @@ SHA256 (cabal/data-sketches-core-0.1.0.0/data-sketches-core-0.1.0.0.tar.gz) = 23
SIZE (cabal/data-sketches-core-0.1.0.0/data-sketches-core-0.1.0.0.tar.gz) = 12544
SHA256 (cabal/data-textual-0.3.0.3/data-textual-0.3.0.3.tar.gz) = 4b9ee8ccd03f24203dd9307bf9aa67180ff0f07b45c3a01e33d8185ff275ec9a
SIZE (cabal/data-textual-0.3.0.3/data-textual-0.3.0.3.tar.gz) = 15626
-SHA256 (cabal/deferred-folds-0.9.18.6/deferred-folds-0.9.18.6.tar.gz) = ebffce410040c77d2babee73f45ab7e79da7dcec424590a991b6dc0b8a1b8f02
-SIZE (cabal/deferred-folds-0.9.18.6/deferred-folds-0.9.18.6.tar.gz) = 10380
+SHA256 (cabal/deferred-folds-0.9.18.7/deferred-folds-0.9.18.7.tar.gz) = cfa84475ecd37db1f9421a86c84e02bdc60c7b3847daca12dc5705ff7f0178ae
+SIZE (cabal/deferred-folds-0.9.18.7/deferred-folds-0.9.18.7.tar.gz) = 10386
SHA256 (cabal/distributive-0.6.2.1/distributive-0.6.2.1.tar.gz) = d7351392e078f58caa46630a4b9c643e1e2e9dddee45848c5c8358e7b1316b91
SIZE (cabal/distributive-0.6.2.1/distributive-0.6.2.1.tar.gz) = 8140
SHA256 (cabal/distributive-0.6.2.1/revision/1.cabal) = 0f99f5541cca04acf89b64432b03422b6408e830a8dff30e6c4334ef1a48680c
@@ -219,22 +219,12 @@ SHA256 (cabal/generics-sop-0.5.1.4/generics-sop-0.5.1.4.tar.gz) = 616a1c21760974
SIZE (cabal/generics-sop-0.5.1.4/generics-sop-0.5.1.4.tar.gz) = 30137
SHA256 (cabal/generics-sop-0.5.1.4/revision/2.cabal) = a62864a0a096f844db946a38c3b9981f20cc50cb36ef8bbb148b695976ae4c75
SIZE (cabal/generics-sop-0.5.1.4/revision/2.cabal) = 5770
-SHA256 (cabal/gitrev-1.3.1/gitrev-1.3.1.tar.gz) = a89964db24f56727b0e7b10c98fe7c116d721d8c46f52d6e77088669aaa38332
-SIZE (cabal/gitrev-1.3.1/gitrev-1.3.1.tar.gz) = 3756
SHA256 (cabal/groups-0.5.3/groups-0.5.3.tar.gz) = ce1e52a8be7effbd1f995eadf0ed34fa45c412656d372db8a38f9c955e43ac38
SIZE (cabal/groups-0.5.3/groups-0.5.3.tar.gz) = 3396
-SHA256 (cabal/happy-2.1.4/happy-2.1.4.tar.gz) = 6d71f93efc9e40d1573c6d9ffe2fea644ff2e7005628efca93cb229e5f3a6033
-SIZE (cabal/happy-2.1.4/happy-2.1.4.tar.gz) = 61239
-SHA256 (cabal/happy-lib-2.1.4/happy-lib-2.1.4.tar.gz) = 7eeb499c69291c18c317e59ade03979c61f6225e68caba901c7d7b417d9bfa8a
-SIZE (cabal/happy-lib-2.1.4/happy-lib-2.1.4.tar.gz) = 93780
SHA256 (cabal/hashable-1.4.7.0/hashable-1.4.7.0.tar.gz) = 3baee4c9027a08830d148ec524cbc0471de645e1e8426d46780ef2758df0e8da
SIZE (cabal/hashable-1.4.7.0/hashable-1.4.7.0.tar.gz) = 89467
SHA256 (cabal/hashtables-1.4.2/hashtables-1.4.2.tar.gz) = ca0e299fee6c0c918f45ce0907afbff1c3891998bb792d1717e4d5f12350ef0d
SIZE (cabal/hashtables-1.4.2/hashtables-1.4.2.tar.gz) = 58869
-SHA256 (cabal/haskell-src-exts-1.23.1/haskell-src-exts-1.23.1.tar.gz) = 67853047169fff7d3e5d87acef214ee185a6ab8c6a104ed9c59e389574cf6c05
-SIZE (cabal/haskell-src-exts-1.23.1/haskell-src-exts-1.23.1.tar.gz) = 1264319
-SHA256 (cabal/haskell-src-meta-0.8.15/haskell-src-meta-0.8.15.tar.gz) = 26eab63199d5f112748ec7700173cf2157e18f766ac5e78ee2986c98576b0dbe
-SIZE (cabal/haskell-src-meta-0.8.15/haskell-src-meta-0.8.15.tar.gz) = 28071
SHA256 (cabal/hasql-1.6.4.4/hasql-1.6.4.4.tar.gz) = 4da966e6f267665b89045ff73a04b7da0887bd6ff7304ae60a6ef382cb4e99d7
SIZE (cabal/hasql-1.6.4.4/hasql-1.6.4.4.tar.gz) = 31915
SHA256 (cabal/hasql-dynamic-statements-0.3.1.5/hasql-dynamic-statements-0.3.1.5.tar.gz) = d74cd64e33e3c6b2da63e543d2c41b023fd16f02869878136f161abe4b1eecc0
@@ -277,26 +267,24 @@ SHA256 (cabal/indexed-traversable-instances-0.1.2/indexed-traversable-instances-
SIZE (cabal/indexed-traversable-instances-0.1.2/indexed-traversable-instances-0.1.2.tar.gz) = 3673
SHA256 (cabal/indexed-traversable-instances-0.1.2/revision/1.cabal) = 68df0fc8070ae2c15f9e6febf1449fee364c131a6d1e93cac45e7895ba86dd89
SIZE (cabal/indexed-traversable-instances-0.1.2/revision/1.cabal) = 2401
-SHA256 (cabal/insert-ordered-containers-0.2.6/insert-ordered-containers-0.2.6.tar.gz) = ef52e54b176e4a0828e5822784e28005fa8a848357a88722182350b3c3d0c49f
-SIZE (cabal/insert-ordered-containers-0.2.6/insert-ordered-containers-0.2.6.tar.gz) = 10586
+SHA256 (cabal/insert-ordered-containers-0.2.7/insert-ordered-containers-0.2.7.tar.gz) = 77edbb1b76e6598aeb05f0711942976432b52178cbfd2a62f4a87f3baf623617
+SIZE (cabal/insert-ordered-containers-0.2.7/insert-ordered-containers-0.2.7.tar.gz) = 10623
SHA256 (cabal/integer-conversion-0.1.1/integer-conversion-0.1.1.tar.gz) = c18164a048073310f6353ebc64c9037b52a4b8299963ce05e027bcf60e22155a
SIZE (cabal/integer-conversion-0.1.1/integer-conversion-0.1.1.tar.gz) = 6179
SHA256 (cabal/integer-conversion-0.1.1/revision/1.cabal) = 941d4ae16e2124cbff5defe2abedb49efc8e03a594f817035bf231a317e6c1c9
SIZE (cabal/integer-conversion-0.1.1/revision/1.cabal) = 2256
SHA256 (cabal/integer-logarithms-1.0.4/integer-logarithms-1.0.4.tar.gz) = 6a93c76c2518cbe2d72ab17da6ae46d8cae93cbfb7c5a5ad5783f903c1448f45
SIZE (cabal/integer-logarithms-1.0.4/integer-logarithms-1.0.4.tar.gz) = 8948
-SHA256 (cabal/interpolatedstring-perl6-1.0.2/interpolatedstring-perl6-1.0.2.tar.gz) = 5a8b1e8b65253ce1e1b07b9de1075e9306483160a7b419d5f126d7e2744b7bb7
-SIZE (cabal/interpolatedstring-perl6-1.0.2/interpolatedstring-perl6-1.0.2.tar.gz) = 6512
SHA256 (cabal/invariant-0.6.4/invariant-0.6.4.tar.gz) = a9e2ab4ee3e0d4613beb7bda36a8ebc4f72318450514f4832d2fa43b74f0aeb3
SIZE (cabal/invariant-0.6.4/invariant-0.6.4.tar.gz) = 27079
SHA256 (cabal/invariant-0.6.4/revision/1.cabal) = 4a9a609f4e93ffed158b3b4f5a80822c6da30aa71a5370307c0c00c2d658d1c6
SIZE (cabal/invariant-0.6.4/revision/1.cabal) = 3513
SHA256 (cabal/iproute-1.7.15/iproute-1.7.15.tar.gz) = 18a331a7e0e6f9dc89a2da95577b0d76bd2690b8f832b72b46d6cc9b667b4ba5
SIZE (cabal/iproute-1.7.15/iproute-1.7.15.tar.gz) = 18033
-SHA256 (cabal/isomorphism-class-0.3/isomorphism-class-0.3.tar.gz) = 39f07d6586782ce9b021aff7eabeebce3a59ed3923db69121d01cd054cee90c8
-SIZE (cabal/isomorphism-class-0.3/isomorphism-class-0.3.tar.gz) = 9869
-SHA256 (cabal/jose-0.11/jose-0.11.tar.gz) = 2974e73d899208dccbb18cac889acceaebb7439e43046ac32c9c702e49f70b40
-SIZE (cabal/jose-0.11/jose-0.11.tar.gz) = 542432
+SHA256 (cabal/isomorphism-class-0.3.1.2/isomorphism-class-0.3.1.2.tar.gz) = 2c32cae55b8b8e3ca347e4898b8e0f3713d1a15a283c14718b0149b3fbbe527f
+SIZE (cabal/isomorphism-class-0.3.1.2/isomorphism-class-0.3.1.2.tar.gz) = 10497
+SHA256 (cabal/jose-jwt-0.10.0/jose-jwt-0.10.0.tar.gz) = e84caf97eb70bf21a4cf9933be23a5336163276c895e44f854d73947988d4b52
+SIZE (cabal/jose-jwt-0.10.0/jose-jwt-0.10.0.tar.gz) = 41308
SHA256 (cabal/kan-extensions-5.2.6/kan-extensions-5.2.6.tar.gz) = fa82283c1c9ac3dc0951b7ca9f5b2e6f13d8331c20154ebb222b509824eeeccc
SIZE (cabal/kan-extensions-5.2.6/kan-extensions-5.2.6.tar.gz) = 21718
SHA256 (cabal/kan-extensions-5.2.6/revision/1.cabal) = e0b972f900a3c04c0f36d7e221e6b04343a5a1f00ce3aababff7932e173f0833
@@ -305,8 +293,8 @@ SHA256 (cabal/keys-3.12.4/keys-3.12.4.tar.gz) = 9412a2135cbf7fb285e01016aeb311d0
SIZE (cabal/keys-3.12.4/keys-3.12.4.tar.gz) = 11890
SHA256 (cabal/keys-3.12.4/revision/1.cabal) = ce43085eb0506a2fff6020dc61351e1c0c61c29f90d3ea5030756f3ed50caa16
SIZE (cabal/keys-3.12.4/revision/1.cabal) = 2232
-SHA256 (cabal/lawful-conversions-0.1.6/lawful-conversions-0.1.6.tar.gz) = 6fcdca00fc797216363b10e602a151908657148cf63202c388d0565d1efae4be
-SIZE (cabal/lawful-conversions-0.1.6/lawful-conversions-0.1.6.tar.gz) = 14843
+SHA256 (cabal/lawful-conversions-0.1.6.1/lawful-conversions-0.1.6.1.tar.gz) = af9150aaf103cb2c2f4297a000e54fccad4b559787ec30b7fd7ff361d638b7a1
+SIZE (cabal/lawful-conversions-0.1.6.1/lawful-conversions-0.1.6.1.tar.gz) = 14663
SHA256 (cabal/lens-5.2.3/lens-5.2.3.tar.gz) = df1e8ca8dd89d884994e0c80761a972088326fa43ed5d47c01b14abb710b994d
SIZE (cabal/lens-5.2.3/lens-5.2.3.tar.gz) = 703220
SHA256 (cabal/lens-5.2.3/revision/5.cabal) = 08f4e81aa3fa3f175f6932089d6bb8b17669e3d00aa2968b853287e5e8d7f024
@@ -317,18 +305,18 @@ SHA256 (cabal/lens-aeson-1.2.3/revision/2.cabal) = 5a733b4b5ac8e17d1e89704441597
SIZE (cabal/lens-aeson-1.2.3/revision/2.cabal) = 1691
SHA256 (cabal/math-functions-0.3.4.4/math-functions-0.3.4.4.tar.gz) = 2441d8dd50eff445356048b2a0cdf88c4a7ba0f56614293d4975e1b081faf8fa
SIZE (cabal/math-functions-0.3.4.4/math-functions-0.3.4.4.tar.gz) = 429048
-SHA256 (cabal/megaparsec-9.6.1/megaparsec-9.6.1.tar.gz) = a32257be847dbe71ac22d512ab115f9ce26fa08bcdbea7ca8b5256a1700dcbff
-SIZE (cabal/megaparsec-9.6.1/megaparsec-9.6.1.tar.gz) = 64913
+SHA256 (cabal/megaparsec-9.7.0/megaparsec-9.7.0.tar.gz) = b9ed423625bf20ae7a72480d40d2dd16018a67e2ec45afb840a3607aa931ec97
+SIZE (cabal/megaparsec-9.7.0/megaparsec-9.7.0.tar.gz) = 67078
SHA256 (cabal/memory-0.18.0/memory-0.18.0.tar.gz) = fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e
SIZE (cabal/memory-0.18.0/memory-0.18.0.tar.gz) = 41957
SHA256 (cabal/memory-0.18.0/revision/1.cabal) = 9f4de967352f80b6f174c9a166f315393dde80b77d7b67e41268ae7dec0319f9
SIZE (cabal/memory-0.18.0/revision/1.cabal) = 4581
-SHA256 (cabal/monad-time-0.4.0.0/monad-time-0.4.0.0.tar.gz) = b4493edf9e7f839cb4ccfcdd53845de493bffbb3ceb4fbb54ba173db68192960
-SIZE (cabal/monad-time-0.4.0.0/monad-time-0.4.0.0.tar.gz) = 2471
SHA256 (cabal/mtl-compat-0.2.2/mtl-compat-0.2.2.tar.gz) = 1955398fe2115674f47f553b2caaf928c6aa3424271a5cd13bc191e54bfe3a9e
SIZE (cabal/mtl-compat-0.2.2/mtl-compat-0.2.2.tar.gz) = 5128
SHA256 (cabal/mwc-random-0.15.2.0/mwc-random-0.15.2.0.tar.gz) = 5843ab06e7c9109326aa4eb5e26486400d6e3bce25944f6671ce989499174133
SIZE (cabal/mwc-random-0.15.2.0/mwc-random-0.15.2.0.tar.gz) = 43086
+SHA256 (cabal/neat-interpolation-0.5.1.4/neat-interpolation-0.5.1.4.tar.gz) = 8eb733e3b1d90d87e0cff8b648f4b8145e38afd558f2c8343029770c9f023ab7
+SIZE (cabal/neat-interpolation-0.5.1.4/neat-interpolation-0.5.1.4.tar.gz) = 5741
SHA256 (cabal/network-3.1.4.0/network-3.1.4.0.tar.gz) = b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e
SIZE (cabal/network-3.1.4.0/network-3.1.4.0.tar.gz) = 139988
SHA256 (cabal/network-3.1.4.0/revision/1.cabal) = e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def
@@ -397,10 +385,8 @@ SHA256 (cabal/prettyprinter-1.7.1/prettyprinter-1.7.1.tar.gz) = 5e6ea6903114fa11
SIZE (cabal/prettyprinter-1.7.1/prettyprinter-1.7.1.tar.gz) = 56907
SHA256 (cabal/prettyprinter-ansi-terminal-1.1.3/prettyprinter-ansi-terminal-1.1.3.tar.gz) = 813739308ad6050620578994effe21058a170a341716acf52573fae42b5b1db3
SIZE (cabal/prettyprinter-ansi-terminal-1.1.3/prettyprinter-ansi-terminal-1.1.3.tar.gz) = 8879
-SHA256 (cabal/primitive-0.9.0.0/primitive-0.9.0.0.tar.gz) = 696d4bd291c94d736142d6182117dca4258d3ef28bfefdb649ac8b5ecd0999c7
-SIZE (cabal/primitive-0.9.0.0/primitive-0.9.0.0.tar.gz) = 60580
-SHA256 (cabal/primitive-0.9.0.0/revision/2.cabal) = de20bf4eff1f972088854c8efda6eaca2d3147aff62232c3707f059152638759
-SIZE (cabal/primitive-0.9.0.0/revision/2.cabal) = 3203
+SHA256 (cabal/primitive-0.9.1.0/primitive-0.9.1.0.tar.gz) = 44b4de41813c7bc5db8a57f87c3612a069b65086946268ba165097252ebd3d76
+SIZE (cabal/primitive-0.9.1.0/primitive-0.9.1.0.tar.gz) = 61724
SHA256 (cabal/profunctors-5.6.2/profunctors-5.6.2.tar.gz) = 65955d7b50525a4a3bccdab1d982d2ae342897fd38140d5a94b5ef3800d8c92a
SIZE (cabal/profunctors-5.6.2/profunctors-5.6.2.tar.gz) = 28522
SHA256 (cabal/profunctors-5.6.2/revision/3.cabal) = e178ba4468982326656626e2089e296f64485e68fdddc9f4476dcd5d612b4f78
@@ -411,40 +397,32 @@ SHA256 (cabal/protolude-0.3.4/protolude-0.3.4.tar.gz) = f838998212470de45d5d70e3
SIZE (cabal/protolude-0.3.4/protolude-0.3.4.tar.gz) = 19321
SHA256 (cabal/psqueues-0.2.8.1/psqueues-0.2.8.1.tar.gz) = cb7e102f09e373b4a7be52bfbc9625d265c7216d05fe04c36b7ad684ed213f77
SIZE (cabal/psqueues-0.2.8.1/psqueues-0.2.8.1.tar.gz) = 27584
-SHA256 (cabal/ptr-0.16.8.6/ptr-0.16.8.6.tar.gz) = 1a18218b6117ce326df36a3a045a5250e04e19f2f29f90b1dd5bede08f83caa5
-SIZE (cabal/ptr-0.16.8.6/ptr-0.16.8.6.tar.gz) = 17694
+SHA256 (cabal/ptr-0.16.8.7/ptr-0.16.8.7.tar.gz) = 060b47508056206a8ce655e1665f131a705b8670970d30feaf37ea1d28b26802
+SIZE (cabal/ptr-0.16.8.7/ptr-0.16.8.7.tar.gz) = 17690
SHA256 (cabal/quickcheck-instances-0.3.32/quickcheck-instances-0.3.32.tar.gz) = 48f5f2e015e2349ac795247917cbf5f1a2e96a7a1382c4441a935e19a430ff83
SIZE (cabal/quickcheck-instances-0.3.32/quickcheck-instances-0.3.32.tar.gz) = 12831
SHA256 (cabal/quickcheck-instances-0.3.32/revision/1.cabal) = 8772458bddd354e07102bf05b45976896c278282e71ff8420beac6b9b77efb34
SIZE (cabal/quickcheck-instances-0.3.32/revision/1.cabal) = 4340
-SHA256 (cabal/random-1.2.1.3/random-1.2.1.3.tar.gz) = e9c81926a7d1e40328f645f73592b31efc9c631589669a7f130687b9cc3051dc
-SIZE (cabal/random-1.2.1.3/random-1.2.1.3.tar.gz) = 47117
+SHA256 (cabal/random-1.3.1/random-1.3.1.tar.gz) = d840ac83f265b0cfa2a678f8ec78627eb50cf9be2f067c52c8a4239c29b71a35
+SIZE (cabal/random-1.3.1/random-1.3.1.tar.gz) = 63846
SHA256 (cabal/rebase-1.21.2/rebase-1.21.2.tar.gz) = 6c19f5576c888078f0c7f172da05873611bfc070617d033f4f14fedd3e82fffb
SIZE (cabal/rebase-1.21.2/rebase-1.21.2.tar.gz) = 20324
-SHA256 (cabal/recv-0.1.0/recv-0.1.0.tar.gz) = f664905cffb44b7f9cba604cd75bd69011a666ba06bccbcb7f3fae0cd4f14d5b
-SIZE (cabal/recv-0.1.0/recv-0.1.0.tar.gz) = 5158
+SHA256 (cabal/recv-0.1.1/recv-0.1.1.tar.gz) = 8daf77c57f529503dd3038efc3813a8001032ed810bdddff0acb0faca039b721
+SIZE (cabal/recv-0.1.1/recv-0.1.1.tar.gz) = 4772
SHA256 (cabal/reflection-2.1.9/reflection-2.1.9.tar.gz) = c6a7d5e41ad0ee1a05c660acf4fd34b21f38330eec165d246b7fffb398e59fb3
SIZE (cabal/reflection-2.1.9/reflection-2.1.9.tar.gz) = 17560
SHA256 (cabal/reflection-2.1.9/revision/1.cabal) = eaf28dc9884718a306ed1e0c215a24b36c68b8aa3be425617f66d886d43fe1e0
SIZE (cabal/reflection-2.1.9/revision/1.cabal) = 4171
-SHA256 (cabal/regex-base-0.94.0.2/regex-base-0.94.0.2.tar.gz) = 7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1
-SIZE (cabal/regex-base-0.94.0.2/regex-base-0.94.0.2.tar.gz) = 10488
-SHA256 (cabal/regex-base-0.94.0.2/revision/4.cabal) = 0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27
-SIZE (cabal/regex-base-0.94.0.2/revision/4.cabal) = 2601
-SHA256 (cabal/regex-tdfa-1.3.2.2/regex-tdfa-1.3.2.2.tar.gz) = 933ed5c54246bb50e335d86b884ffb70bc252b5f776fb291f162a80a27bd75b7
-SIZE (cabal/regex-tdfa-1.3.2.2/regex-tdfa-1.3.2.2.tar.gz) = 83016
-SHA256 (cabal/regex-tdfa-1.3.2.2/revision/3.cabal) = e5ea15b2898c62c63fae798784bc402b3862733d97a4f7ee3ec4f9ae6f447478
-SIZE (cabal/regex-tdfa-1.3.2.2/revision/3.cabal) = 6997
+SHA256 (cabal/regex-base-0.94.0.3/regex-base-0.94.0.3.tar.gz) = e8ca2dee598c790dd1c1c4359bdd1e495d9b881f5aa1f539c22f0dd5563747bf
+SIZE (cabal/regex-base-0.94.0.3/regex-base-0.94.0.3.tar.gz) = 10550
+SHA256 (cabal/regex-tdfa-1.3.2.4/regex-tdfa-1.3.2.4.tar.gz) = 078bc313b7441f173eb487d6f46fea6860a21452eff6e5cf730ac4dd74bca797
+SIZE (cabal/regex-tdfa-1.3.2.4/regex-tdfa-1.3.2.4.tar.gz) = 83099
SHA256 (cabal/rerebase-1.21.2/rerebase-1.21.2.tar.gz) = 77cc0d707ee0886b49206065476e77d0600e4c305b37701a38ef55e736a7fc10
SIZE (cabal/rerebase-1.21.2/rerebase-1.21.2.tar.gz) = 17208
SHA256 (cabal/resourcet-1.3.0/resourcet-1.3.0.tar.gz) = ec601785ee42a201f32adb205b8685c983f18757b1bd33d2e806d571e0f9996b
SIZE (cabal/resourcet-1.3.0/resourcet-1.3.0.tar.gz) = 17620
SHA256 (cabal/retry-0.9.3.1/retry-0.9.3.1.tar.gz) = 622e35114b920f76fa2e1ae6515575b9973fac19c679f5426ea6574a5d0b7ed6
SIZE (cabal/retry-0.9.3.1/retry-0.9.3.1.tar.gz) = 18717
-SHA256 (cabal/safe-0.3.21/safe-0.3.21.tar.gz) = 2c81fea42bbe79ec488774043c1ec54f30efba059df9a4f3681ce83d85007f01
-SIZE (cabal/safe-0.3.21/safe-0.3.21.tar.gz) = 11778
-SHA256 (cabal/safe-0.3.21/revision/1.cabal) = b928ea1645876788155b38ce85c7e46d157a1bb41d2b05f5770b13d60bc6a3f7
-SIZE (cabal/safe-0.3.21/revision/1.cabal) = 2400
SHA256 (cabal/safe-exceptions-0.1.7.4/safe-exceptions-0.1.7.4.tar.gz) = 3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6
SIZE (cabal/safe-exceptions-0.1.7.4/safe-exceptions-0.1.7.4.tar.gz) = 15347
SHA256 (cabal/safe-exceptions-0.1.7.4/revision/1.cabal) = 8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1
@@ -481,24 +459,22 @@ SHA256 (cabal/strict-0.5.1/strict-0.5.1.tar.gz) = 77719280c2a86312e748227bfa732e
SIZE (cabal/strict-0.5.1/strict-0.5.1.tar.gz) = 11798
SHA256 (cabal/strict-0.5.1/revision/1.cabal) = 58c373b7c7748cbb4a5a6c8c15073f99a1c10a9a9bb6894ac33f43a5cdb901f2
SIZE (cabal/strict-0.5.1/revision/1.cabal) = 3557
-SHA256 (cabal/strict-list-0.1.7.5/strict-list-0.1.7.5.tar.gz) = c3e3ff3e3f7bee7eff26511c92c26c14b8ac7cbdefba7fb9e24c4aa4ff01236b
-SIZE (cabal/strict-list-0.1.7.5/strict-list-0.1.7.5.tar.gz) = 6785
-SHA256 (cabal/swagger2-2.8.9/swagger2-2.8.9.tar.gz) = 92a37bbfba482d6eaeedf8dd24a9658bdc9d7514fa51d7b8ab4c6e65a3c9caa1
-SIZE (cabal/swagger2-2.8.9/swagger2-2.8.9.tar.gz) = 66957
-SHA256 (cabal/syb-0.7.2.4/syb-0.7.2.4.tar.gz) = ec7c1e8822d62ab910386361cdcee40a22a26cd344c34741fadd982302291e60
-SIZE (cabal/syb-0.7.2.4/syb-0.7.2.4.tar.gz) = 41809
+SHA256 (cabal/strict-list-0.1.7.6/strict-list-0.1.7.6.tar.gz) = 756b16c12b5528cdb44ba905bdc78e5f4a749f33f630226645311a8d52207987
+SIZE (cabal/strict-list-0.1.7.6/strict-list-0.1.7.6.tar.gz) = 6786
+SHA256 (cabal/swagger2-2.8.10/swagger2-2.8.10.tar.gz) = 9217e63872beb80fb581c73a752e70fa21f2d7eaab5e86b014bdaead0dadc3e7
+SIZE (cabal/swagger2-2.8.10/swagger2-2.8.10.tar.gz) = 66780
SHA256 (cabal/tagged-0.8.9/tagged-0.8.9.tar.gz) = 6daad88ebb414ba6a556d2898d2cbe7650e4276010e3a6eed939daf54b956784
SIZE (cabal/tagged-0.8.9/tagged-0.8.9.tar.gz) = 8151
SHA256 (cabal/tasty-1.5.3/tasty-1.5.3.tar.gz) = 54a0c7b644813af871a3726ac8771b5e17b5158c792a7acf8f9e2d3ae9360780
SIZE (cabal/tasty-1.5.3/tasty-1.5.3.tar.gz) = 66548
SHA256 (cabal/tasty-1.5.3/revision/1.cabal) = 9d56ea9dbc274fc853fc531373b2c91bfe360e21460c2c6a5838897d86e3f6d0
SIZE (cabal/tasty-1.5.3/revision/1.cabal) = 2923
-SHA256 (cabal/template-haskell-compat-v0208-0.1.9.4/template-haskell-compat-v0208-0.1.9.4.tar.gz) = 567718b6f56dbf0f0e42ba35a7d6346185e35d640402932fd1956b19dfcd518a
-SIZE (cabal/template-haskell-compat-v0208-0.1.9.4/template-haskell-compat-v0208-0.1.9.4.tar.gz) = 3198
-SHA256 (cabal/text-builder-0.6.7.2/text-builder-0.6.7.2.tar.gz) = 6194f3076933bbe361e225461a10fd8ab29bd5476294ffb80a6af17c8535c7dd
-SIZE (cabal/text-builder-0.6.7.2/text-builder-0.6.7.2.tar.gz) = 6093
-SHA256 (cabal/text-builder-dev-0.3.9/text-builder-dev-0.3.9.tar.gz) = 90071fbd545673575b619a2839509ad36137a9bdcd28c2d5e2eaa4b3067f4e1e
-SIZE (cabal/text-builder-dev-0.3.9/text-builder-dev-0.3.9.tar.gz) = 13779
+SHA256 (cabal/template-haskell-compat-v0208-0.1.9.5/template-haskell-compat-v0208-0.1.9.5.tar.gz) = 51359f8dc8d51f30b59521d214837d13c4f6c9b5c4afd0eba813c26cc2449d1f
+SIZE (cabal/template-haskell-compat-v0208-0.1.9.5/template-haskell-compat-v0208-0.1.9.5.tar.gz) = 3194
+SHA256 (cabal/text-builder-0.6.10/text-builder-0.6.10.tar.gz) = 063111d149a202ee6a22e54c36dcf6b4386406059a60e33fc9fd13dc6f255f51
+SIZE (cabal/text-builder-0.6.10/text-builder-0.6.10.tar.gz) = 7301
+SHA256 (cabal/text-builder-dev-0.3.10/text-builder-dev-0.3.10.tar.gz) = 433fcb971640b0530c43d8abae05c3b0527b6632b26d8aba044dcd0dfad29454
+SIZE (cabal/text-builder-dev-0.3.10/text-builder-dev-0.3.10.tar.gz) = 13557
SHA256 (cabal/text-iso8601-0.1.1/text-iso8601-0.1.1.tar.gz) = 9dead2b7ceeae40fe0fc060bd54795c32e9926c9d1aebae8f9b9a621fba88202
SIZE (cabal/text-iso8601-0.1.1/text-iso8601-0.1.1.tar.gz) = 9599
SHA256 (cabal/text-iso8601-0.1.1/revision/2.cabal) = e07a625eef969338992bf9bba8e5dc73f07ac65f991ba636b8f1175890d15849
@@ -519,14 +495,6 @@ SHA256 (cabal/th-abstraction-0.7.1.0/revision/1.cabal) = 3011403d85b0070630e33d6
SIZE (cabal/th-abstraction-0.7.1.0/revision/1.cabal) = 2268
SHA256 (cabal/th-compat-0.1.6/th-compat-0.1.6.tar.gz) = b781a0c059872bc95406d00e98f6fa7d9e81e744730f75186583cb4dcea0a4eb
SIZE (cabal/th-compat-0.1.6/th-compat-0.1.6.tar.gz) = 14622
-SHA256 (cabal/th-expand-syns-0.4.12.0/th-expand-syns-0.4.12.0.tar.gz) = 18e19967329c89f376cfc9ec04bd7871854ce0c70f803a1af15532be00c6ef0f
-SIZE (cabal/th-expand-syns-0.4.12.0/th-expand-syns-0.4.12.0.tar.gz) = 7090
-SHA256 (cabal/th-lift-0.8.6/th-lift-0.8.6.tar.gz) = 04309ad70ef80ed054ebda5b7d34a66642017604019f9e44ad321eec04a1ef1f
-SIZE (cabal/th-lift-0.8.6/th-lift-0.8.6.tar.gz) = 14310
-SHA256 (cabal/th-orphans-0.13.16/th-orphans-0.13.16.tar.gz) = e9900135821c4a2a8a52aeea203514c7c334bef9d636d51f89ebb3a8b92ba913
-SIZE (cabal/th-orphans-0.13.16/th-orphans-0.13.16.tar.gz) = 7145
-SHA256 (cabal/th-reify-many-0.1.10/th-reify-many-0.1.10.tar.gz) = 9d250e61242f2fb887dedc9d28c0141832ff256e63bebc2bf5abff81037be4a5
-SIZE (cabal/th-reify-many-0.1.10/th-reify-many-0.1.10.tar.gz) = 5825
SHA256 (cabal/these-1.2.1/these-1.2.1.tar.gz) = 17d6d933365edabf801a16842c1403bdd37cc5300faa2fcca980decdab22e4de
SIZE (cabal/these-1.2.1/these-1.2.1.tar.gz) = 9906
SHA256 (cabal/these-1.2.1/revision/2.cabal) = 35c57aede96c15ea1fed559ac287b1168eb2b2869d79e62ed8c845780b7ea136
@@ -545,14 +513,12 @@ SHA256 (cabal/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz) = b62c
SIZE (cabal/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz) = 46485
SHA256 (cabal/type-hint-0.1/type-hint-0.1.tar.gz) = 1161cdbf4b4b43c2953ee60438e948737604193e1bfe2c880ff178538faa99b9
SIZE (cabal/type-hint-0.1/type-hint-0.1.tar.gz) = 3092
-SHA256 (cabal/unix-compat-0.7.3/unix-compat-0.7.3.tar.gz) = 7a4fad870952d632d55c8cfe2aad8b55ac95585dacae052fbea4e32968821d87
-SIZE (cabal/unix-compat-0.7.3/unix-compat-0.7.3.tar.gz) = 15593
-SHA256 (cabal/unix-compat-0.7.3/revision/1.cabal) = e1132808d30ad1adbcf1ba7f06c3dfe712a7ee382b225eb975e0ab8cfe0c21cd
-SIZE (cabal/unix-compat-0.7.3/revision/1.cabal) = 3287
+SHA256 (cabal/unix-compat-0.7.4/unix-compat-0.7.4.tar.gz) = 689b3a960c8fe12910554aa5b739d5c4769c1d180ade20402fde2ed49db7eff4
+SIZE (cabal/unix-compat-0.7.4/unix-compat-0.7.4.tar.gz) = 15586
SHA256 (cabal/unix-time-0.4.16/unix-time-0.4.16.tar.gz) = ace2a7126d7344feb3221680c556de7f28a969fb287d49bd4a2d7df18fe638e9
SIZE (cabal/unix-time-0.4.16/unix-time-0.4.16.tar.gz) = 52594
-SHA256 (cabal/unliftio-0.2.25.0/unliftio-0.2.25.0.tar.gz) = fb85a22291e78f9e58cd7f5e563a726500ad1a004b3b335b93c0975b828a112b
-SIZE (cabal/unliftio-0.2.25.0/unliftio-0.2.25.0.tar.gz) = 58335
+SHA256 (cabal/unliftio-0.2.25.1/unliftio-0.2.25.1.tar.gz) = 3bfc6f8dea6966c2c06df83e6d3f481bbd77531f58b8049c46738aad9268336e
+SIZE (cabal/unliftio-0.2.25.1/unliftio-0.2.25.1.tar.gz) = 58203
SHA256 (cabal/unliftio-core-0.2.1.0/unliftio-core-0.2.1.0.tar.gz) = 99384cba8d56d9d61b85e38a313a93ebcdb78be6566367f0930ef580597fe3e3
SIZE (cabal/unliftio-core-0.2.1.0/unliftio-core-0.2.1.0.tar.gz) = 3865
SHA256 (cabal/unliftio-core-0.2.1.0/revision/4.cabal) = f6a2736f858b5390d9384dca43d3ea4d96e9ca17217791791ca4951ba6e8072a
@@ -579,8 +545,8 @@ SHA256 (cabal/vector-0.13.2.0/vector-0.13.2.0.tar.gz) = 28f203c786cbf8ac6dc3fea3
SIZE (cabal/vector-0.13.2.0/vector-0.13.2.0.tar.gz) = 185739
SHA256 (cabal/vector-0.13.2.0/revision/1.cabal) = b736a57b73520d2acf4865e3e2b40030d69782f35f870e376dc717ee2508d81f
SIZE (cabal/vector-0.13.2.0/revision/1.cabal) = 8804
-SHA256 (cabal/vector-algorithms-0.9.0.3/vector-algorithms-0.9.0.3.tar.gz) = 61900b798fc6a581dd0916b32a1397aaed022d7f92fd737d663cbbf4d7144d9e
-SIZE (cabal/vector-algorithms-0.9.0.3/vector-algorithms-0.9.0.3.tar.gz) = 29395
+SHA256 (cabal/vector-algorithms-0.9.1.0/vector-algorithms-0.9.1.0.tar.gz) = d2b674676802670d8a682b357da6b6b5741b4a33b191f0ffe5f2b2bc40558eb2
+SIZE (cabal/vector-algorithms-0.9.1.0/vector-algorithms-0.9.1.0.tar.gz) = 29426
SHA256 (cabal/vector-instances-3.4.2/vector-instances-3.4.2.tar.gz) = 34d92d6e77f64e8f7d79cde4a1d61799faec1b760b144935afc6f4a78877d667
SIZE (cabal/vector-instances-3.4.2/vector-instances-3.4.2.tar.gz) = 4042
SHA256 (cabal/vector-stream-0.1.0.1/vector-stream-0.1.0.1.tar.gz) = d0f507334bdea5431a2f07f525a97f29e76522c32210f5de6d5a2b4f1d42bf7c
@@ -609,5 +575,5 @@ SHA256 (cabal/zlib-0.7.1.0/zlib-0.7.1.0.tar.gz) = 6edd38b6b81df8d274952aa85affa6
SIZE (cabal/zlib-0.7.1.0/zlib-0.7.1.0.tar.gz) = 29318
SHA256 (cabal/zlib-0.7.1.0/revision/2.cabal) = 85e64a75c0b490506a7edaa2d54950c668e66b65758bb08bb14cd31faf53a206
SIZE (cabal/zlib-0.7.1.0/revision/2.cabal) = 5357
-SHA256 (cabal/PostgREST-postgrest-v12.2.11_GH0.tar.gz) = 7e99b36e293b2a695dceff477a58bc5ff3aa4ece3e369fb4017bd78d2caa7f90
-SIZE (cabal/PostgREST-postgrest-v12.2.11_GH0.tar.gz) = 1818927
+SHA256 (cabal/PostgREST-postgrest-v13.0.0_GH0.tar.gz) = 61273ba81af1c84965695f35ff058da576d968b70a781ea6445701cb75929b97
+SIZE (cabal/PostgREST-postgrest-v13.0.0_GH0.tar.gz) = 1836917
diff --git a/www/iridium/Makefile b/www/iridium/Makefile
index d2c911f84d6f..ace3050434e2 100644
--- a/www/iridium/Makefile
+++ b/www/iridium/Makefile
@@ -1,5 +1,5 @@
PORTNAME= iridium
-PORTVERSION= 2025.05.136.1
+PORTVERSION= 2025.05.136.2
PULSEMV= 16
PULSEV= ${PULSEMV}.1
CATEGORIES= www wayland
diff --git a/www/iridium/distinfo b/www/iridium/distinfo
index 803215ab849b..58d0b1608e14 100644
--- a/www/iridium/distinfo
+++ b/www/iridium/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1746686164
-SHA256 (iridium-browser-2025.05.136.1.tar.xz) = 5baa038eeafcc04a199cff7f512839b9ac3fdac71fe496af9ff3c8544f51f9ae
-SIZE (iridium-browser-2025.05.136.1.tar.xz) = 3044399212
+TIMESTAMP = 1747324897
+SHA256 (iridium-browser-2025.05.136.2.tar.xz) = 49c4e1db1c81b78f83c0eb4b1e3a85daba92a01b741e857bf9d56e5fc33d0c82
+SIZE (iridium-browser-2025.05.136.2.tar.xz) = 3044410956
SHA256 (pulseaudio-16.1.tar.gz) = 027266c62f2a84422ac45fa721a649508f0f1628fb1fd9242315ac54ce2d7c92
SIZE (pulseaudio-16.1.tar.gz) = 2763111
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5 b/www/iridium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
index 4ffb0ebffc40..08dd9c45781c 100644
--- a/www/iridium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
@@ -1,4 +1,4 @@
---- third_party/blink/renderer/platform/runtime_enabled_features.json5.orig 2025-05-07 06:48:23 UTC
+--- third_party/blink/renderer/platform/runtime_enabled_features.json5.orig 2025-05-15 16:06:59 UTC
+++ third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -434,7 +434,7 @@
name: "AppTitle",
@@ -45,7 +45,7 @@
status: "stable",
public: true,
base_feature: "none",
-@@ -4636,7 +4636,7 @@
+@@ -4635,7 +4635,7 @@
name: "UnrestrictedSharedArrayBuffer",
base_feature: "none",
origin_trial_feature_name: "UnrestrictedSharedArrayBuffer",
@@ -54,7 +54,7 @@
},
// Enables using policy-controlled feature "usb-unrestricted" to allow
// isolated context to access protected USB interface classes and to
-@@ -4811,7 +4811,7 @@
+@@ -4810,7 +4810,7 @@
{
name: "WebAppScopeExtensions",
origin_trial_feature_name: "WebAppScopeExtensions",
@@ -63,7 +63,7 @@
status: "experimental",
base_feature: "none",
},
-@@ -5086,7 +5086,7 @@
+@@ -5085,7 +5085,7 @@
{
name: "WebIdentityDigitalCredentials",
origin_trial_feature_name: "WebIdentityDigitalCredentials",
diff --git a/www/iridium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc b/www/iridium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc
new file mode 100644
index 000000000000..e106ca3408e3
--- /dev/null
+++ b/www/iridium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc
@@ -0,0 +1,13 @@
+--- ui/ozone/platform/wayland/host/wayland_frame_manager.cc.orig 2025-05-13 08:59:54 UTC
++++ ui/ozone/platform/wayland/host/wayland_frame_manager.cc
+@@ -461,8 +461,10 @@ std::optional<bool> WaylandFrameManager::ApplySurfaceC
+ surface->UpdateBufferDamageRegion(
+ gfx::ToEnclosingRectIgnoringError(surface_damage));
+
++#if !BUILDFLAG(IS_BSD)
+ if (!config.access_fence_handle.is_null())
+ surface->set_acquire_fence(std::move(config.access_fence_handle));
++#endif
+
+ bool needs_commit = false;
+
diff --git a/www/librewolf/Makefile b/www/librewolf/Makefile
index ebd4edfe5e19..15e83127c5e4 100644
--- a/www/librewolf/Makefile
+++ b/www/librewolf/Makefile
@@ -1,8 +1,7 @@
PORTNAME= librewolf
-DISTVERSION= 138.0.1
-LWPATCH= -2
+DISTVERSION= 138.0.3
+LWPATCH= -1
DISTVERSIONSUFFIX= ${LWPATCH}.source
-PORTREVISION= 1
CATEGORIES= www wayland
MASTER_SITES= https://gitlab.com/api/v4/projects/32320088/packages/generic/${PORTNAME}-source/${DISTVERSION}${LWPATCH}/
diff --git a/www/librewolf/distinfo b/www/librewolf/distinfo
index 31195b372818..5848fa1442f7 100644
--- a/www/librewolf/distinfo
+++ b/www/librewolf/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1746445113
-SHA256 (librewolf-138.0.1-2.source.tar.gz) = 308ac7a2d890bb798d3058dcf89415ccfb37e80e951f141b13c2ca98a758efd2
-SIZE (librewolf-138.0.1-2.source.tar.gz) = 1019041631
+TIMESTAMP = 1747328459
+SHA256 (librewolf-138.0.3-1.source.tar.gz) = 0a849bb4cb4448004451f1af87c12a951d782048e8668b9b6754246089c45dcb
+SIZE (librewolf-138.0.3-1.source.tar.gz) = 1019083591
diff --git a/www/linux-vieb/Makefile b/www/linux-vieb/Makefile
index aad6a028d354..40c51bd028df 100644
--- a/www/linux-vieb/Makefile
+++ b/www/linux-vieb/Makefile
@@ -1,6 +1,6 @@
PORTNAME= vieb
-DISTVERSION= 12.2.0
-PORTREVISION= 2
+DISTVERSION= 12.3.0
+PORTREVISION= 0
CATEGORIES= www linux
MASTER_SITES= https://github.com/Jelmerro/Vieb/releases/download/${DISTVERSION}/ \
LOCAL/nivit/${PORTNAME}/:images
diff --git a/www/linux-vieb/distinfo b/www/linux-vieb/distinfo
index 218dddb7c86f..898c5d3e1df7 100644
--- a/www/linux-vieb/distinfo
+++ b/www/linux-vieb/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1738773707
-SHA256 (vieb-12.2.0.tar.gz) = dfe1ab70227adbfbcf9e845fbc92596377827d164db48b0533ddf038934fbb08
-SIZE (vieb-12.2.0.tar.gz) = 105202556
-SHA256 (vieb-images-12.2.0.tar.gz) = 5102ff85d837acdf914a0c459367b74c337969096f9f202e1f91ce1b5a6b2d9b
-SIZE (vieb-images-12.2.0.tar.gz) = 970027
+TIMESTAMP = 1747147993
+SHA256 (vieb-12.3.0.tar.gz) = 68aaf4bd9dcfa242e5f6ab46a529601262325e5ee82d392181eb7228e9dc8a5e
+SIZE (vieb-12.3.0.tar.gz) = 110829778
+SHA256 (vieb-images-12.3.0.tar.gz) = 78768881d33d2016153e0c5be54b52cd08aed685b4d577e1b9c5f07a50421b42
+SIZE (vieb-images-12.3.0.tar.gz) = 968923
diff --git a/www/nextcloud-calendar/Makefile b/www/nextcloud-calendar/Makefile
index 8062dfb93509..84a890b3afb5 100644
--- a/www/nextcloud-calendar/Makefile
+++ b/www/nextcloud-calendar/Makefile
@@ -1,5 +1,5 @@
PORTNAME= calendar
-PORTVERSION= 5.2.3
+PORTVERSION= 5.2.4
DISTVERSIONPREFIX= v
CATEGORIES= www
diff --git a/www/nextcloud-calendar/distinfo b/www/nextcloud-calendar/distinfo
index a681a6b91bfa..63fe37edd4ed 100644
--- a/www/nextcloud-calendar/distinfo
+++ b/www/nextcloud-calendar/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1746950468
-SHA256 (nextcloud/calendar-v5.2.3.tar.gz) = 3647d69f4e9218e1cc50da85bc9021ef7968709e20a208a5deeb01ef4673fcc8
-SIZE (nextcloud/calendar-v5.2.3.tar.gz) = 19796857
+TIMESTAMP = 1747333671
+SHA256 (nextcloud/calendar-v5.2.4.tar.gz) = cff04c29acbd163f9a232a4f03d71b109e9d701d37a063e1cb64d218725e473d
+SIZE (nextcloud/calendar-v5.2.4.tar.gz) = 19795163
diff --git a/www/nextcloud-contacts/Makefile b/www/nextcloud-contacts/Makefile
index 95f44662bbe9..328bd28a0f86 100644
--- a/www/nextcloud-contacts/Makefile
+++ b/www/nextcloud-contacts/Makefile
@@ -1,5 +1,5 @@
PORTNAME= contacts
-PORTVERSION= 7.0.6
+PORTVERSION= 7.1.0
DISTVERSIONPREFIX= v
CATEGORIES= www
diff --git a/www/nextcloud-contacts/distinfo b/www/nextcloud-contacts/distinfo
index 6b3df11045b3..c15f6bcd93a0 100644
--- a/www/nextcloud-contacts/distinfo
+++ b/www/nextcloud-contacts/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1745079799
-SHA256 (nextcloud/contacts-v7.0.6.tar.gz) = dc6d5d8bf3e738020c2f6bf02a0966b8c029be7f3e9d762376a9f24924a82c32
-SIZE (nextcloud/contacts-v7.0.6.tar.gz) = 4327344
+TIMESTAMP = 1747333704
+SHA256 (nextcloud/contacts-v7.1.0.tar.gz) = 39839b18810056204c59eb0bfe436fe051ceed249aef7add563925c2ec8f4ab6
+SIZE (nextcloud/contacts-v7.1.0.tar.gz) = 4354560
diff --git a/www/nextcloud/Makefile b/www/nextcloud/Makefile
index aeac60e9b5de..0c9d210db4d2 100644
--- a/www/nextcloud/Makefile
+++ b/www/nextcloud/Makefile
@@ -1,5 +1,5 @@
PORTNAME= nextcloud
-PORTVERSION= 31.0.4
+PORTVERSION= 31.0.5
CATEGORIES= www
MASTER_SITES= https://download.nextcloud.com/server/releases/
PKGNAMESUFFIX= ${PHP_PKGNAMESUFFIX}
diff --git a/www/nextcloud/distinfo b/www/nextcloud/distinfo
index 68bc03dbd0bb..97eb88f9a750 100644
--- a/www/nextcloud/distinfo
+++ b/www/nextcloud/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1745150519
-SHA256 (nextcloud/nextcloud-31.0.4.tar.bz2) = a47541566d5c6ac6f63e4f617e27da295156da47daa2cd22eee3400fd2ad1251
-SIZE (nextcloud/nextcloud-31.0.4.tar.bz2) = 227351477
+TIMESTAMP = 1747332904
+SHA256 (nextcloud/nextcloud-31.0.5.tar.bz2) = 2228b8f524dcd87f08a2a9281d41b04f5cb500b7624bc8c8e07b8e3039061503
+SIZE (nextcloud/nextcloud-31.0.5.tar.bz2) = 226737152
diff --git a/www/novnc/Makefile b/www/novnc/Makefile
index b297cd22a997..2d15c2aa671b 100644
--- a/www/novnc/Makefile
+++ b/www/novnc/Makefile
@@ -1,6 +1,6 @@
PORTNAME= novnc
DISTVERSIONPREFIX= v
-DISTVERSION= 1.5.0
+DISTVERSION= 1.6.0
CATEGORIES= www
MAINTAINER= dpetrov67@gmail.com
diff --git a/www/novnc/distinfo b/www/novnc/distinfo
index 7b894a5ee8c5..ef60248173b4 100644
--- a/www/novnc/distinfo
+++ b/www/novnc/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1722735379
-SHA256 (novnc-noVNC-v1.5.0_GH0.tar.gz) = 6a73e41f98388a5348b7902f54b02d177cb73b7e5eb0a7a0dcf688cc2c79b42a
-SIZE (novnc-noVNC-v1.5.0_GH0.tar.gz) = 706843
+TIMESTAMP = 1747073404
+SHA256 (novnc-noVNC-v1.6.0_GH0.tar.gz) = 5066103959ef4e9b10f37e5a148627360dd8414e4cf8a7db92bdbd022e728aaa
+SIZE (novnc-noVNC-v1.6.0_GH0.tar.gz) = 724137
diff --git a/www/novnc/pkg-plist b/www/novnc/pkg-plist
index 3194a7842ea5..a011a0e566f4 100644
--- a/www/novnc/pkg-plist
+++ b/www/novnc/pkg-plist
@@ -61,6 +61,7 @@ libexec/novnc/app/sounds/bell.oga
libexec/novnc/app/styles/Orbitron700.ttf
libexec/novnc/app/styles/Orbitron700.woff
libexec/novnc/app/styles/base.css
+libexec/novnc/app/styles/constants.css
libexec/novnc/app/styles/input.css
libexec/novnc/app/ui.js
libexec/novnc/app/webutil.js
@@ -73,12 +74,14 @@ libexec/novnc/core/crypto/dh.js
libexec/novnc/core/crypto/md5.js
libexec/novnc/core/crypto/rsa.js
libexec/novnc/core/decoders/copyrect.js
+libexec/novnc/core/decoders/h264.js
libexec/novnc/core/decoders/hextile.js
libexec/novnc/core/decoders/jpeg.js
libexec/novnc/core/decoders/raw.js
libexec/novnc/core/decoders/rre.js
libexec/novnc/core/decoders/tight.js
libexec/novnc/core/decoders/tightpng.js
+libexec/novnc/core/decoders/zlib.js
libexec/novnc/core/decoders/zrle.js
libexec/novnc/core/deflator.js
libexec/novnc/core/display.js
@@ -104,6 +107,7 @@ libexec/novnc/core/util/int.js
libexec/novnc/core/util/logging.js
libexec/novnc/core/util/strings.js
libexec/novnc/core/websock.js
+libexec/novnc/defaults.json
libexec/novnc/docs/API-internal.md
libexec/novnc/docs/API.md
libexec/novnc/docs/EMBEDDING.md
@@ -122,6 +126,7 @@ libexec/novnc/docs/rfbproto-3.7.pdf
libexec/novnc/docs/rfbproto-3.8.pdf
libexec/novnc/eslint.config.mjs
libexec/novnc/karma.conf.js
+libexec/novnc/mandatory.json
libexec/novnc/package.json
libexec/novnc/po/Makefile
libexec/novnc/po/cs.po
@@ -156,6 +161,7 @@ libexec/novnc/tests/test.copyrect.js
libexec/novnc/tests/test.deflator.js
libexec/novnc/tests/test.display.js
libexec/novnc/tests/test.gesturehandler.js
+libexec/novnc/tests/test.h264.js
libexec/novnc/tests/test.helper.js
libexec/novnc/tests/test.hextile.js
libexec/novnc/tests/test.inflator.js
@@ -171,6 +177,7 @@ libexec/novnc/tests/test.tightpng.js
libexec/novnc/tests/test.util.js
libexec/novnc/tests/test.websock.js
libexec/novnc/tests/test.webutil.js
+libexec/novnc/tests/test.zlib.js
libexec/novnc/tests/test.zrle.js
libexec/novnc/tests/vnc_playback.html
libexec/novnc/utils/README.md
diff --git a/www/p5-Mojolicious/Makefile b/www/p5-Mojolicious/Makefile
index 535ef0597b30..d9533ffdf8a7 100644
--- a/www/p5-Mojolicious/Makefile
+++ b/www/p5-Mojolicious/Makefile
@@ -1,5 +1,5 @@
PORTNAME= Mojolicious
-PORTVERSION= 9.39
+PORTVERSION= 9.40
CATEGORIES= www perl5
MASTER_SITES= CPAN
PKGNAMEPREFIX= p5-
diff --git a/www/p5-Mojolicious/distinfo b/www/p5-Mojolicious/distinfo
index 92fa4f36a774..4123f6cb0736 100644
--- a/www/p5-Mojolicious/distinfo
+++ b/www/p5-Mojolicious/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1732590629
-SHA256 (Mojolicious-9.39.tar.gz) = 130a490d77d76139f734ce1b894d459bae03805fb1f3dfdd58fc44fe82af3cfd
-SIZE (Mojolicious-9.39.tar.gz) = 962558
+TIMESTAMP = 1747105281
+SHA256 (Mojolicious-9.40.tar.gz) = 4d45f4b51cce46b3896f2e27b2447e52a8efccb1ebea5e6b3885ea211c08480b
+SIZE (Mojolicious-9.40.tar.gz) = 965888
diff --git a/www/p5-Net-Curl/Makefile b/www/p5-Net-Curl/Makefile
index 3a5440ad62fb..b579501e7631 100644
--- a/www/p5-Net-Curl/Makefile
+++ b/www/p5-Net-Curl/Makefile
@@ -1,5 +1,6 @@
PORTNAME= Net-Curl
-PORTVERSION= 0.57
+DISTVERSION= 0.57
+PORTREVISION= 1
CATEGORIES= www ftp perl5
MASTER_SITES= CPAN
PKGNAMEPREFIX= p5-
@@ -10,10 +11,10 @@ WWW= https://metacpan.org/dist/Net-Curl
LICENSE= MIT
-LIB_DEPENDS= libcurl.so:ftp/curl
BUILD_DEPENDS= p5-ExtUtils-PkgConfig>=1.16:devel/p5-ExtUtils-PkgConfig
+LIB_DEPENDS= libcurl.so:ftp/curl
-USES= perl5 localbase
+USES= localbase perl5
USE_PERL5= configure
post-install:
diff --git a/www/p5-Net-Curl/files/patch-Makefile.PL b/www/p5-Net-Curl/files/patch-Makefile.PL
new file mode 100644
index 000000000000..f3e843a6182c
--- /dev/null
+++ b/www/p5-Net-Curl/files/patch-Makefile.PL
@@ -0,0 +1,11 @@
+--- Makefile.PL.orig 2025-05-11 19:09:26 UTC
++++ Makefile.PL
+@@ -341,7 +341,7 @@ sub get_constants_headers
+
+ my @out;
+ foreach my $e (sort keys %syms) {
+- if ( $e =~ /(OBSOLETE|^CURL_DEPRECATED\z|^CURL_EXTERN|^CURL_IGNORE_DEPRECATION\z|^CURLOPTDEPRECATED\z|_LAST\z|_LASTENTRY\z|^CURL_FORMAT_OFF_T$|^CURL_ISOCPP$|^CURLOPT$)/ ) {
++ if ( $e =~ /(OBSOLETE|^CURL_DEPRECATED\z|^CURL_EXTERN|^CURL_IGNORE_DEPRECATION\z|^CURLOPTDEPRECATED\z|_LAST\z|_LASTENTRY\z|^CURL_FORMAT_OFF_T$|^CURL_ISOCPP$|^CURLOPT$|^CURL_HAS_)/ ) {
+ next;
+ }
+ push @out, $e;
diff --git a/www/p5-Net-Curl/files/patch-inc_symbols-in-versions b/www/p5-Net-Curl/files/patch-inc_symbols-in-versions
index 95daebaf8ec9..50d4a7b6f1bb 100644
--- a/www/p5-Net-Curl/files/patch-inc_symbols-in-versions
+++ b/www/p5-Net-Curl/files/patch-inc_symbols-in-versions
@@ -1,6 +1,37 @@
---- inc/symbols-in-versions.orig 2025-01-20 14:34:49 UTC
+--- inc/symbols-in-versions.orig 2025-05-11 19:08:52 UTC
+++ inc/symbols-in-versions
-@@ -449,6 +449,7 @@ CURLINFO_HTTP_CODE 7.4.1 7.10.8
+@@ -45,6 +45,7 @@ CURL_GLOBAL_WIN32 7.8.1
+ CURL_GLOBAL_NOTHING 7.8
+ CURL_GLOBAL_SSL 7.8
+ CURL_GLOBAL_WIN32 7.8.1
++CURL_HAS_DECLSPEC_ATTRIBUTE 8.13.0
+ CURL_HET_DEFAULT 7.59.0
+ CURL_HTTP_VERSION_1_0 7.9.1
+ CURL_HTTP_VERSION_1_1 7.9.1
+@@ -336,11 +337,11 @@ CURLE_URL_MALFORMAT 7.1
+ CURLE_UNSUPPORTED_PROTOCOL 7.1
+ CURLE_UPLOAD_FAILED 7.16.3
+ CURLE_URL_MALFORMAT 7.1
++CURLE_ECH_REQUIRED 8.8.0
+ CURLE_URL_MALFORMAT_USER 7.1 7.17.0
+ CURLE_USE_SSL_FAILED 7.17.0
+ CURLE_WEIRD_SERVER_REPLY 7.51.0
+ CURLE_WRITE_ERROR 7.1
+-CURLE_ECH_REQUIRED 8.8.0
+ CURLFILETYPE_DEVICE_BLOCK 7.21.0
+ CURLFILETYPE_DEVICE_CHAR 7.21.0
+ CURLFILETYPE_DIRECTORY 7.21.0
+@@ -358,6 +359,9 @@ CURLFINFOFLAG_KNOWN_UID 7.21.0
+ CURLFINFOFLAG_KNOWN_SIZE 7.21.0
+ CURLFINFOFLAG_KNOWN_TIME 7.21.0
+ CURLFINFOFLAG_KNOWN_UID 7.21.0
++CURLFOLLOW_ALL 8.13.0
++CURLFOLLOW_OBEYCODE 8.13.0
++CURLFOLLOW_FIRSTONLY 8.13.0
+ CURLFORM_ARRAY 7.9.1 7.56.0
+ CURLFORM_ARRAY_END 7.9.1 7.9.5 7.9.6
+ CURLFORM_ARRAY_START 7.9.1 7.9.5 7.9.6
+@@ -449,6 +453,7 @@ CURLINFO_HTTPAUTH_AVAIL 7.10.8
CURLINFO_HTTP_CONNECTCODE 7.10.7
CURLINFO_HTTP_VERSION 7.50.0
CURLINFO_HTTPAUTH_AVAIL 7.10.8
@@ -8,7 +39,7 @@
CURLINFO_LASTONE 7.4.1
CURLINFO_LASTSOCKET 7.15.2 7.45.0
CURLINFO_LOCAL_IP 7.21.0
-@@ -471,6 +472,7 @@ CURLINFO_PROTOCOL 7.52.0 7.85.0
+@@ -471,6 +476,7 @@ CURLINFO_PROXYAUTH_AVAIL 7.10.8
CURLINFO_PROXY_ERROR 7.73.0
CURLINFO_PROXY_SSL_VERIFYRESULT 7.52.0
CURLINFO_PROXYAUTH_AVAIL 7.10.8
@@ -16,3 +47,34 @@
CURLINFO_PTR 7.54.1
CURLINFO_QUEUE_TIME_T 8.6.0
CURLINFO_REDIRECT_COUNT 7.9.7
+@@ -889,6 +895,7 @@ CURLOPT_UPLOAD_BUFFERSIZE 7.62.0
+ CURLOPT_UPKEEP_INTERVAL_MS 7.62.0
+ CURLOPT_UPLOAD 7.1
+ CURLOPT_UPLOAD_BUFFERSIZE 7.62.0
++CURLOPT_UPLOAD_FLAGS 8.13.0
+ CURLOPT_URL 7.1
+ CURLOPT_USE_SSL 7.17.0
+ CURLOPT_USERAGENT 7.1
+@@ -1122,6 +1129,11 @@ CURLUPART_ZONEID 7.65.0
+ CURLUPART_URL 7.62.0
+ CURLUPART_USER 7.62.0
+ CURLUPART_ZONEID 7.65.0
++CURLULFLAG_ANSWERED 8.13.0
++CURLULFLAG_DELETED 8.13.0
++CURLULFLAG_DRAFT 8.13.0
++CURLULFLAG_FLAGGED 8.13.0
++CURLULFLAG_SEEN 8.13.0
+ CURLUSESSL_ALL 7.17.0
+ CURLUSESSL_CONTROL 7.17.0
+ CURLUSESSL_NONE 7.17.0
+@@ -1150,8 +1162,8 @@ LIBCURL_TIMESTAMP 7.16.2
+ CURLWS_TEXT 7.86.0
+ LIBCURL_COPYRIGHT 7.18.0
+ LIBCURL_TIMESTAMP 7.16.2
+-LIBCURL_VERSION 7.11.0
++LIBCURL_VERSION 7.1.1
+ LIBCURL_VERSION_MAJOR 7.11.0
+ LIBCURL_VERSION_MINOR 7.11.0
+-LIBCURL_VERSION_NUM 7.11.0
++LIBCURL_VERSION_NUM 7.1.1
+ LIBCURL_VERSION_PATCH 7.11.0
diff --git a/www/proxygen/Makefile b/www/proxygen/Makefile
index ec8f251d3069..a97fe5968f2a 100644
--- a/www/proxygen/Makefile
+++ b/www/proxygen/Makefile
@@ -1,6 +1,6 @@
PORTNAME= proxygen
DISTVERSIONPREFIX= v
-DISTVERSION= 2025.05.05.00
+DISTVERSION= 2025.05.12.00
CATEGORIES= www
MAINTAINER= yuri@FreeBSD.org
diff --git a/www/proxygen/distinfo b/www/proxygen/distinfo
index 01ccbe20b4ec..ea2c88d06979 100644
--- a/www/proxygen/distinfo
+++ b/www/proxygen/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1746504543
-SHA256 (facebook-proxygen-v2025.05.05.00_GH0.tar.gz) = 3f9e352e1f31ef994383e4800cc0d5768c56a9e0993da67f807e04b52a90200c
-SIZE (facebook-proxygen-v2025.05.05.00_GH0.tar.gz) = 1216793
+TIMESTAMP = 1747102739
+SHA256 (facebook-proxygen-v2025.05.12.00_GH0.tar.gz) = 1503c296970790e79a543c524185886296e51a01ca27e649c639cb2de9283650
+SIZE (facebook-proxygen-v2025.05.12.00_GH0.tar.gz) = 1217212
diff --git a/www/py-dj50-django-auth-ldap/Makefile b/www/py-dj50-django-auth-ldap/Makefile
index d48e46991bd5..eaa0337951dc 100644
--- a/www/py-dj50-django-auth-ldap/Makefile
+++ b/www/py-dj50-django-auth-ldap/Makefile
@@ -1,5 +1,5 @@
PORTNAME= django-auth-ldap
-PORTVERSION= 5.1.0
+PORTVERSION= 5.2.0
CATEGORIES= www security python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}dj50-
diff --git a/www/py-dj50-django-auth-ldap/distinfo b/www/py-dj50-django-auth-ldap/distinfo
index 2ae0a3f4baa0..d60b5a523112 100644
--- a/www/py-dj50-django-auth-ldap/distinfo
+++ b/www/py-dj50-django-auth-ldap/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1730477310
-SHA256 (django_auth_ldap-5.1.0.tar.gz) = 9c607e8d9c53cf2a0ccafbe0acfc33eb1d1fd474c46ec52d30aee0dca1da9668
-SIZE (django_auth_ldap-5.1.0.tar.gz) = 55059
+TIMESTAMP = 1747314334
+SHA256 (django_auth_ldap-5.2.0.tar.gz) = 08ba6efc0340d9874725a962311b14991e29a33593eb150a8fb640709dbfa80f
+SIZE (django_auth_ldap-5.2.0.tar.gz) = 55287
diff --git a/www/py-dj51-django-auth-ldap/Makefile b/www/py-dj51-django-auth-ldap/Makefile
index 94a842eefd8b..b71226b9f650 100644
--- a/www/py-dj51-django-auth-ldap/Makefile
+++ b/www/py-dj51-django-auth-ldap/Makefile
@@ -1,5 +1,5 @@
PORTNAME= django-auth-ldap
-PORTVERSION= 5.1.0
+PORTVERSION= 5.2.0
CATEGORIES= www security python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}dj51-
diff --git a/www/py-dj51-django-auth-ldap/distinfo b/www/py-dj51-django-auth-ldap/distinfo
index 2ae0a3f4baa0..d60b5a523112 100644
--- a/www/py-dj51-django-auth-ldap/distinfo
+++ b/www/py-dj51-django-auth-ldap/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1730477310
-SHA256 (django_auth_ldap-5.1.0.tar.gz) = 9c607e8d9c53cf2a0ccafbe0acfc33eb1d1fd474c46ec52d30aee0dca1da9668
-SIZE (django_auth_ldap-5.1.0.tar.gz) = 55059
+TIMESTAMP = 1747314334
+SHA256 (django_auth_ldap-5.2.0.tar.gz) = 08ba6efc0340d9874725a962311b14991e29a33593eb150a8fb640709dbfa80f
+SIZE (django_auth_ldap-5.2.0.tar.gz) = 55287
diff --git a/www/py-django-auth-ldap/Makefile b/www/py-django-auth-ldap/Makefile
index 8e92221e47f5..c27d62dce257 100644
--- a/www/py-django-auth-ldap/Makefile
+++ b/www/py-django-auth-ldap/Makefile
@@ -1,5 +1,5 @@
PORTNAME= django-auth-ldap
-PORTVERSION= 5.1.0
+PORTVERSION= 5.2.0
CATEGORIES= www security python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@@ -18,7 +18,7 @@ BUILD_DEPENDS= ${PY_SETUPTOOLS} \
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}django42>=4.2:www/py-django42@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}python-ldap>=3.1:net/py-python-ldap@${PY_FLAVOR}
-USES= python:3.9+
+USES= python
USE_PYTHON= autoplist concurrent pep517
NO_ARCH= yes
diff --git a/www/py-django-auth-ldap/distinfo b/www/py-django-auth-ldap/distinfo
index 2ae0a3f4baa0..d60b5a523112 100644
--- a/www/py-django-auth-ldap/distinfo
+++ b/www/py-django-auth-ldap/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1730477310
-SHA256 (django_auth_ldap-5.1.0.tar.gz) = 9c607e8d9c53cf2a0ccafbe0acfc33eb1d1fd474c46ec52d30aee0dca1da9668
-SIZE (django_auth_ldap-5.1.0.tar.gz) = 55059
+TIMESTAMP = 1747314334
+SHA256 (django_auth_ldap-5.2.0.tar.gz) = 08ba6efc0340d9874725a962311b14991e29a33593eb150a8fb640709dbfa80f
+SIZE (django_auth_ldap-5.2.0.tar.gz) = 55287
diff --git a/www/py-flask/Makefile b/www/py-flask/Makefile
index 64975c52c559..b7c137b698ff 100644
--- a/www/py-flask/Makefile
+++ b/www/py-flask/Makefile
@@ -1,5 +1,5 @@
PORTNAME= flask
-DISTVERSION= 3.1.0
+DISTVERSION= 3.1.1
CATEGORIES= www python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/www/py-flask/distinfo b/www/py-flask/distinfo
index ab53a28c5fc4..dd7789fa3a5b 100644
--- a/www/py-flask/distinfo
+++ b/www/py-flask/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1732758182
-SHA256 (flask-3.1.0.tar.gz) = 5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac
-SIZE (flask-3.1.0.tar.gz) = 680824
+TIMESTAMP = 1747179697
+SHA256 (flask-3.1.1.tar.gz) = 284c7b8f2f58cb737f0cf1c30fd7eaf0ccfcde196099d24ecede3fc2005aa59e
+SIZE (flask-3.1.1.tar.gz) = 753440
diff --git a/www/reproxy/Makefile b/www/reproxy/Makefile
index fcd3f054a2d9..c8c3d19d8495 100644
--- a/www/reproxy/Makefile
+++ b/www/reproxy/Makefile
@@ -1,7 +1,6 @@
PORTNAME= reproxy
-PORTVERSION= 1.1.1
+PORTVERSION= 1.2.3
DISTVERSIONPREFIX= v
-PORTREVISION= 5
CATEGORIES= www
MAINTAINER= danfe@FreeBSD.org
@@ -11,7 +10,7 @@ WWW= https://reproxy.io/
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/LICENSE
-USES= go:modules
+USES= go:1.23,modules
USE_GITHUB= yes
GH_ACCOUNT= umputun
diff --git a/www/reproxy/distinfo b/www/reproxy/distinfo
index a15b25cc08cb..6173629a2615 100644
--- a/www/reproxy/distinfo
+++ b/www/reproxy/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1707197375
-SHA256 (umputun-reproxy-v1.1.1_GH0.tar.gz) = 595af6971ea6be9f5f4a3e92c9c9ad9024c93c353456cd3d8d9efa9786679c1e
-SIZE (umputun-reproxy-v1.1.1_GH0.tar.gz) = 3166619
+TIMESTAMP = 1740074776
+SHA256 (umputun-reproxy-v1.2.3_GH0.tar.gz) = 5156be192698e263134e486448de3099e389cdc508c4a311830f371395ecfe13
+SIZE (umputun-reproxy-v1.2.3_GH0.tar.gz) = 3449957
diff --git a/www/sogo/Makefile b/www/sogo/Makefile
index 44fbd991ff76..5370d98555c3 100644
--- a/www/sogo/Makefile
+++ b/www/sogo/Makefile
@@ -1,5 +1,5 @@
PORTNAME= sogo
-PORTVERSION= 5.12.0
+PORTVERSION= 5.12.1
CATEGORIES= www gnustep
MASTER_SITES= https://packages.sogo.nu/sources/
DISTNAME= SOGo-${PORTVERSION}
diff --git a/www/sogo/distinfo b/www/sogo/distinfo
index 230d2fe0b8cd..678df0747647 100644
--- a/www/sogo/distinfo
+++ b/www/sogo/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1742970033
-SHA256 (SOGo-5.12.0.tar.gz) = f5c17371ad6e6442b3fc8e1c3149710033d5c61aa3f2a7a3f090b7f51cbec83a
-SIZE (SOGo-5.12.0.tar.gz) = 37238251
+TIMESTAMP = 1747459352
+SHA256 (SOGo-5.12.1.tar.gz) = b51d39b31af9a6059db79a18201f3c6cfd584468e369eebe286f8181804bcd99
+SIZE (SOGo-5.12.1.tar.gz) = 37738293
diff --git a/www/sogo/files/patch-SoObjects_SOGo_SOGoMailer.m b/www/sogo/files/patch-SoObjects_SOGo_SOGoMailer.m
deleted file mode 100644
index f204575eb042..000000000000
--- a/www/sogo/files/patch-SoObjects_SOGo_SOGoMailer.m
+++ /dev/null
@@ -1,11 +0,0 @@
---- SoObjects/SOGo/SOGoMailer.m 2025-03-25 23:34:20.921308000 -0700
-+++ SoObjects/SOGo/SOGoMailer.m 2025-03-25 23:34:50.890963000 -0700
-@@ -325,7 +325,7 @@
- {
- login = [currentAcount objectForKey: @"userName"];
- password = [currentAcount objectForKey: @"password"];
-- smtpAuthMethod = "plain"; //Only support plain for auxiliary account
-+ smtpAuthMethod = @"plain"; //Only support plain for auxiliary account
- }
- else
- {
diff --git a/www/sogo/pkg-plist b/www/sogo/pkg-plist
index 042b1934d44c..e3f23632b021 100644
--- a/www/sogo/pkg-plist
+++ b/www/sogo/pkg-plist
@@ -751,7 +751,7 @@ GNUstep/Local/Library/Libraries/sogo/libSOGo.so.5
GNUstep/Local/Library/Libraries/sogo/libSOGo.so.%%VERSION%%
GNUstep/Local/Library/Libraries/sogo/libSOGoUI.so
GNUstep/Local/Library/Libraries/sogo/libSOGoUI.so.5.12
-GNUstep/Local/Library/Libraries/sogo/libSOGoUI.so.%%VERSION%%
+GNUstep/Local/Library/Libraries/sogo/libSOGoUI.so.5.12.0
GNUstep/Local/Library/OCSTypeModels/appointment-oracle.ocs
GNUstep/Local/Library/OCSTypeModels/appointment.ocs
GNUstep/Local/Library/OCSTypeModels/contact-oracle.ocs
@@ -2092,6 +2092,13 @@ GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-file-upload.js
GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-file-upload.js.map
GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-file-upload.min.js
GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-file-upload.min.js.map
+GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material-dist/angular-material-mocks.js
+GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material-dist/angular-material.js
+GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material-dist/angular-material.min.js
+GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material-dist/angular-material.scss
+GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material-dist/layouts/angular-material.layout-attributes.scss
+GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material-dist/layouts/angular-material.layouts.scss
+GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material-dist/package.json
GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material.js
GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-material.min.js
GNUstep/Local/Library/SOGo/WebServerResources/js/vendor/angular-messages.js
diff --git a/www/tomcat-devel/Makefile b/www/tomcat-devel/Makefile
index d643c6982b9d..56a5046ab6cb 100644
--- a/www/tomcat-devel/Makefile
+++ b/www/tomcat-devel/Makefile
@@ -1,6 +1,5 @@
PORTNAME= tomcat
-DISTVERSION= 11.0.6
-PORTREVISION= 2
+DISTVERSION= 11.0.7
CATEGORIES= www java
MASTER_SITES= APACHE/${PORTNAME}/${PORTNAME}-${DISTVERSION:C/([0-9]+)(.*)/\1/}/v${DISTVERSION}/bin
PKGNAMESUFFIX= -devel
diff --git a/www/tomcat-devel/distinfo b/www/tomcat-devel/distinfo
index e344328ff6a6..805285ec7f65 100644
--- a/www/tomcat-devel/distinfo
+++ b/www/tomcat-devel/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1744195573
-SHA256 (apache-tomcat-11.0.6.tar.gz) = 864458f646bf938d3feb5773456199819b91d52670e4d724b9866ccfd4761cef
-SIZE (apache-tomcat-11.0.6.tar.gz) = 13878198
+TIMESTAMP = 1747453588
+SHA256 (apache-tomcat-11.0.7.tar.gz) = 2fcece641c62ba1f28e1d7b257493151fc44f161fb391015ee6a95fa71632fb9
+SIZE (apache-tomcat-11.0.7.tar.gz) = 14091809
diff --git a/www/tomcat-devel/pkg-plist b/www/tomcat-devel/pkg-plist
index 28bd1cee81f1..ee68e1b0d4fd 100644
--- a/www/tomcat-devel/pkg-plist
+++ b/www/tomcat-devel/pkg-plist
@@ -103,8 +103,14 @@
%%DOCS%%%%T%%/webapps/docs/architecture/index.html
%%DOCS%%%%T%%/webapps/docs/architecture/overview.html
%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess.html
-%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/authentication-process.png
-%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/request-process.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/11_nio.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/11_nio.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/21_http11.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/21_http11.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/31_synchronous.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/31_synchronous.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/41_basic.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/41_basic.png
%%DOCS%%%%T%%/webapps/docs/architecture/startup.html
%%DOCS%%%%T%%/webapps/docs/architecture/startup/1_overview.plantuml
%%DOCS%%%%T%%/webapps/docs/architecture/startup/1_overview.png
diff --git a/www/tomcat101/Makefile b/www/tomcat101/Makefile
index 755b7bd76299..6977459192aa 100644
--- a/www/tomcat101/Makefile
+++ b/www/tomcat101/Makefile
@@ -1,6 +1,5 @@
PORTNAME= tomcat
-DISTVERSION= 10.1.40
-PORTREVISION= 2
+DISTVERSION= 10.1.41
CATEGORIES= www java
MASTER_SITES= APACHE/${PORTNAME}/${PORTNAME}-${DISTVERSION:C/([0-9]+)(.*)/\1/}/v${DISTVERSION}/bin
PKGNAMESUFFIX= 101
diff --git a/www/tomcat101/distinfo b/www/tomcat101/distinfo
index d2c548eb367e..cb885000965a 100644
--- a/www/tomcat101/distinfo
+++ b/www/tomcat101/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1744198379
-SHA256 (apache-tomcat-10.1.40.tar.gz) = 25f1e607f17ee2fa99e329eec23b6393ab9e1390929c6cdcb31f749576b94d8e
-SIZE (apache-tomcat-10.1.40.tar.gz) = 13867286
+TIMESTAMP = 1747074614
+SHA256 (apache-tomcat-10.1.41.tar.gz) = 1f7cc8cce2d5f4acd35491d0fa2abafa6ddd9bb0425b57b277310fde5ff2fcb3
+SIZE (apache-tomcat-10.1.41.tar.gz) = 14079449
diff --git a/www/tomcat101/pkg-plist b/www/tomcat101/pkg-plist
index dac61a4c57df..1fae71f972e4 100644
--- a/www/tomcat101/pkg-plist
+++ b/www/tomcat101/pkg-plist
@@ -105,8 +105,14 @@
%%DOCS%%%%T%%/webapps/docs/architecture/index.html
%%DOCS%%%%T%%/webapps/docs/architecture/overview.html
%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess.html
-%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/authentication-process.png
-%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/request-process.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/11_nio.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/11_nio.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/21_http11.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/21_http11.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/31_synchronous.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/31_synchronous.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/41_basic.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/41_basic.png
%%DOCS%%%%T%%/webapps/docs/architecture/startup.html
%%DOCS%%%%T%%/webapps/docs/architecture/startup/1_overview.plantuml
%%DOCS%%%%T%%/webapps/docs/architecture/startup/1_overview.png
diff --git a/www/tomcat110/Makefile b/www/tomcat110/Makefile
index a35009afb7e2..6c8fa8250802 100644
--- a/www/tomcat110/Makefile
+++ b/www/tomcat110/Makefile
@@ -1,6 +1,5 @@
PORTNAME= tomcat
-DISTVERSION= 11.0.6
-PORTREVISION= 2
+DISTVERSION= 11.0.7
CATEGORIES= www java
MASTER_SITES= APACHE/${PORTNAME}/${PORTNAME}-${DISTVERSION:C/([0-9]+)(.*)/\1/}/v${DISTVERSION}/bin
PKGNAMESUFFIX= 110
diff --git a/www/tomcat110/distinfo b/www/tomcat110/distinfo
index e344328ff6a6..805285ec7f65 100644
--- a/www/tomcat110/distinfo
+++ b/www/tomcat110/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1744195573
-SHA256 (apache-tomcat-11.0.6.tar.gz) = 864458f646bf938d3feb5773456199819b91d52670e4d724b9866ccfd4761cef
-SIZE (apache-tomcat-11.0.6.tar.gz) = 13878198
+TIMESTAMP = 1747453588
+SHA256 (apache-tomcat-11.0.7.tar.gz) = 2fcece641c62ba1f28e1d7b257493151fc44f161fb391015ee6a95fa71632fb9
+SIZE (apache-tomcat-11.0.7.tar.gz) = 14091809
diff --git a/www/tomcat110/pkg-plist b/www/tomcat110/pkg-plist
index 28bd1cee81f1..ee68e1b0d4fd 100644
--- a/www/tomcat110/pkg-plist
+++ b/www/tomcat110/pkg-plist
@@ -103,8 +103,14 @@
%%DOCS%%%%T%%/webapps/docs/architecture/index.html
%%DOCS%%%%T%%/webapps/docs/architecture/overview.html
%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess.html
-%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/authentication-process.png
-%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/request-process.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/11_nio.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/11_nio.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/21_http11.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/21_http11.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/31_synchronous.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/31_synchronous.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/41_basic.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/41_basic.png
%%DOCS%%%%T%%/webapps/docs/architecture/startup.html
%%DOCS%%%%T%%/webapps/docs/architecture/startup/1_overview.plantuml
%%DOCS%%%%T%%/webapps/docs/architecture/startup/1_overview.png
diff --git a/www/tomcat9/Makefile b/www/tomcat9/Makefile
index 6f5598aa5350..65d7eaf04b34 100644
--- a/www/tomcat9/Makefile
+++ b/www/tomcat9/Makefile
@@ -1,6 +1,5 @@
PORTNAME= tomcat
-DISTVERSION= 9.0.104
-PORTREVISION= 2
+DISTVERSION= 9.0.105
CATEGORIES= www java
MASTER_SITES= APACHE/${PORTNAME}/${PORTNAME}-${DISTVERSION:C/([0-9])(.*)/\1/}/v${DISTVERSION}/bin
PKGNAMESUFFIX= 9
diff --git a/www/tomcat9/distinfo b/www/tomcat9/distinfo
index 1b72aade617d..f5302f645647 100644
--- a/www/tomcat9/distinfo
+++ b/www/tomcat9/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1744234542
-SHA256 (apache-tomcat-9.0.104.tar.gz) = fa19751c8f81b294dde346ad93517bded84f40885c442e0a7130da982a22abae
-SIZE (apache-tomcat-9.0.104.tar.gz) = 12787166
+TIMESTAMP = 1747087680
+SHA256 (apache-tomcat-9.0.105.tar.gz) = ee86ee179493e610358b23a0f79ba70b9e76ade71157aada9ac7cdcdcdbe35f5
+SIZE (apache-tomcat-9.0.105.tar.gz) = 13000541
diff --git a/www/tomcat9/pkg-plist b/www/tomcat9/pkg-plist
index 0034fa871ac8..7a480526a68d 100644
--- a/www/tomcat9/pkg-plist
+++ b/www/tomcat9/pkg-plist
@@ -102,8 +102,14 @@
%%DOCS%%%%T%%/webapps/docs/architecture/index.html
%%DOCS%%%%T%%/webapps/docs/architecture/overview.html
%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess.html
-%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/authentication-process.png
-%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/request-process.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/11_nio.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/11_nio.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/21_http11.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/21_http11.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/31_synchronous.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/31_synchronous.png
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/41_basic.plantuml
+%%DOCS%%%%T%%/webapps/docs/architecture/requestProcess/41_basic.png
%%DOCS%%%%T%%/webapps/docs/architecture/startup.html
%%DOCS%%%%T%%/webapps/docs/architecture/startup/1_overview.plantuml
%%DOCS%%%%T%%/webapps/docs/architecture/startup/1_overview.png
diff --git a/www/tt-rss/Makefile b/www/tt-rss/Makefile
index b6c91f2ef6f8..90f2e16e73ce 100644
--- a/www/tt-rss/Makefile
+++ b/www/tt-rss/Makefile
@@ -1,5 +1,5 @@
PORTNAME= tt-rss
-DISTVERSION= g20250220
+DISTVERSION= g20250427
PORTEPOCH= 2
CATEGORIES= www
MASTER_SITES= LOCAL/meta
@@ -17,11 +17,11 @@ USES= gettext-tools php:cli,web,flavors shebangfix
USE_GITLAB= yes
GL_SITE= https://gitlab.tt-rss.org
-GL_TAGNAME= bfdfea88b988778db59fb112bbd07a4cd2aefd69
+GL_TAGNAME= f097c5ed97671f66be71e52c13917c23528ba308
# phe json/openssl extension is required but it's statically linked in default php
USE_PHP= ctype dom exif fileinfo filter iconv intl mbstring pcntl pdo \
- phar posix session simplexml sockets tokenizer xml xmlwriter \
- zip
+ phar posix session simplexml sockets sodium tokenizer xml \
+ xmlwriter zip
USE_RC_SUBR= ttrssd
SHEBANG_FILES= update.php update_daemon2.php
diff --git a/www/tt-rss/distinfo b/www/tt-rss/distinfo
index 8f80c6abb1dc..41aa613d9a2b 100644
--- a/www/tt-rss/distinfo
+++ b/www/tt-rss/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1740342260
-SHA256 (tt-rss-tt-rss-bfdfea88b988778db59fb112bbd07a4cd2aefd69_GL0.tar.gz) = 7424ea2d810ad6d9dd499adcd62e7358f24cda951b493090ee2b05a2bd63e8d8
-SIZE (tt-rss-tt-rss-bfdfea88b988778db59fb112bbd07a4cd2aefd69_GL0.tar.gz) = 8583787
+TIMESTAMP = 1747000425
+SHA256 (tt-rss-tt-rss-f097c5ed97671f66be71e52c13917c23528ba308_GL0.tar.gz) = 996189e8a7acdc5e8b44fb181b0ff7f6ce746acca77a43e300c0af56efa40b6f
+SIZE (tt-rss-tt-rss-f097c5ed97671f66be71e52c13917c23528ba308_GL0.tar.gz) = 8712416
diff --git a/www/tt-rss/pkg-plist b/www/tt-rss/pkg-plist
index 0cbc91f943f5..5818ba98cf63 100644
--- a/www/tt-rss/pkg-plist
+++ b/www/tt-rss/pkg-plist
@@ -36,6 +36,7 @@
%%WWWDIR%%/classes/Cache_Local.php
%%WWWDIR%%/classes/Config.php
%%WWWDIR%%/classes/Counters.php
+%%WWWDIR%%/classes/Crypt.php
%%WWWDIR%%/classes/Db.php
%%WWWDIR%%/classes/Db_Migrations.php
%%WWWDIR%%/classes/Db_Prefs.php
@@ -1979,6 +1980,8 @@
%%WWWDIR%%/locale/ru_RU/LC_MESSAGES/messages.po
%%WWWDIR%%/locale/sv_SE/LC_MESSAGES/messages.mo
%%WWWDIR%%/locale/sv_SE/LC_MESSAGES/messages.po
+%%WWWDIR%%/locale/ta/LC_MESSAGES/messages.mo
+%%WWWDIR%%/locale/ta/LC_MESSAGES/messages.po
%%WWWDIR%%/locale/tr_TR/LC_MESSAGES/messages.mo
%%WWWDIR%%/locale/tr_TR/LC_MESSAGES/messages.po
%%WWWDIR%%/locale/uk_UA/LC_MESSAGES/messages.mo
@@ -2045,7 +2048,6 @@
%%WWWDIR%%/public.php
%%WWWDIR%%/schema/ttrss_schema_mysql.sql
%%WWWDIR%%/schema/ttrss_schema_pgsql.sql
-%%WWWDIR%%/sql/mysql/schema.sql
%%WWWDIR%%/sql/mysql/migrations/3.sql
%%WWWDIR%%/sql/mysql/migrations/4.sql
%%WWWDIR%%/sql/mysql/migrations/5.sql
@@ -2191,7 +2193,9 @@
%%WWWDIR%%/sql/mysql/migrations/145.sql
%%WWWDIR%%/sql/mysql/migrations/146.sql
%%WWWDIR%%/sql/mysql/migrations/147.sql
-%%WWWDIR%%/sql/pgsql/schema.sql
+%%WWWDIR%%/sql/mysql/migrations/148.sql
+%%WWWDIR%%/sql/mysql/migrations/149.sql
+%%WWWDIR%%/sql/mysql/schema.sql
%%WWWDIR%%/sql/pgsql/migrations/3.sql
%%WWWDIR%%/sql/pgsql/migrations/4.sql
%%WWWDIR%%/sql/pgsql/migrations/5.sql
@@ -2337,6 +2341,9 @@
%%WWWDIR%%/sql/pgsql/migrations/145.sql
%%WWWDIR%%/sql/pgsql/migrations/146.sql
%%WWWDIR%%/sql/pgsql/migrations/147.sql
+%%WWWDIR%%/sql/pgsql/migrations/148.sql
+%%WWWDIR%%/sql/pgsql/migrations/149.sql
+%%WWWDIR%%/sql/pgsql/schema.sql
%%WWWDIR%%/templates.local/index.html
%%WWWDIR%%/templates/digest_template.txt
%%WWWDIR%%/templates/digest_template_html.txt
@@ -2407,8 +2414,8 @@
%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/Hanzi.php
%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/Kanji.php
%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/Number.php
-%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/QRData.php
%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php
+%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/QRData.php
%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/QRDataModeAbstract.php
%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/QRDataModeInterface.php
%%WWWDIR%%/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php
diff --git a/www/ungoogled-chromium/Makefile b/www/ungoogled-chromium/Makefile
index 616c569e77cd..82ad56dc48d0 100644
--- a/www/ungoogled-chromium/Makefile
+++ b/www/ungoogled-chromium/Makefile
@@ -1,5 +1,5 @@
PORTNAME= ungoogled-chromium
-PORTVERSION= 136.0.7103.92
+PORTVERSION= 136.0.7103.113
PULSEMV= 16
PULSEV= ${PULSEMV}.1
UGVERSION= ${DISTVERSION}-1
diff --git a/www/ungoogled-chromium/distinfo b/www/ungoogled-chromium/distinfo
index ff9869865cd1..f53ddc783f79 100644
--- a/www/ungoogled-chromium/distinfo
+++ b/www/ungoogled-chromium/distinfo
@@ -1,9 +1,9 @@
-TIMESTAMP = 1746691040
-SHA256 (chromium-136.0.7103.92.tar.xz) = 3fa7f88ef186566948367bf1e9a9f0612e753fc69285c1654728f6a015cd4cf2
-SIZE (chromium-136.0.7103.92.tar.xz) = 7188412240
+TIMESTAMP = 1747298437
+SHA256 (chromium-136.0.7103.113.tar.xz) = 7c765bd13df842a28bb52279b8d711411ac6082151473e07bd70b9a482c0a0ac
+SIZE (chromium-136.0.7103.113.tar.xz) = 7196537592
SHA256 (pulseaudio-16.1.tar.gz) = 027266c62f2a84422ac45fa721a649508f0f1628fb1fd9242315ac54ce2d7c92
SIZE (pulseaudio-16.1.tar.gz) = 2763111
-SHA256 (chromium-136.0.7103.92-testdata.tar.xz) = 6e5bb3fba5b61ffc9e91b9d2fc9cc758bebe4d16806a68b1a32b189193c78256
-SIZE (chromium-136.0.7103.92-testdata.tar.xz) = 651393856
-SHA256 (ungoogled-software-ungoogled-chromium-136.0.7103.92-136.0.7103.92-1_GH0.tar.gz) = d256643a26d536a5079441e63fd4c8cda0e073702665605b40c5ce1d5b18bcbe
-SIZE (ungoogled-software-ungoogled-chromium-136.0.7103.92-136.0.7103.92-1_GH0.tar.gz) = 633266
+SHA256 (chromium-136.0.7103.113-testdata.tar.xz) = cbf264643986db5b7aa91843ea64a1b9e23d00bb226b234d4f60788469a58ef8
+SIZE (chromium-136.0.7103.113-testdata.tar.xz) = 651614116
+SHA256 (ungoogled-software-ungoogled-chromium-136.0.7103.113-136.0.7103.113-1_GH0.tar.gz) = ab4c1b21292b860eaa750d3fb9ee73dae58a86d2dd59d4e41e06102e8c9f635a
+SIZE (ungoogled-software-ungoogled-chromium-136.0.7103.113-136.0.7103.113-1_GH0.tar.gz) = 633301
diff --git a/www/ungoogled-chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5 b/www/ungoogled-chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
index 9a37800799e6..9b0ab86d6d91 100644
--- a/www/ungoogled-chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
+++ b/www/ungoogled-chromium/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
@@ -1,4 +1,4 @@
---- third_party/blink/renderer/platform/runtime_enabled_features.json5.orig 2025-05-06 12:23:00 UTC
+--- third_party/blink/renderer/platform/runtime_enabled_features.json5.orig 2025-05-15 08:53:47 UTC
+++ third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -434,7 +434,7 @@
name: "AppTitle",
@@ -45,7 +45,7 @@
status: "stable",
public: true,
base_feature: "none",
-@@ -4645,7 +4645,7 @@
+@@ -4644,7 +4644,7 @@
name: "UnrestrictedSharedArrayBuffer",
base_feature: "none",
origin_trial_feature_name: "UnrestrictedSharedArrayBuffer",
@@ -54,7 +54,7 @@
},
// Enables using policy-controlled feature "usb-unrestricted" to allow
// isolated context to access protected USB interface classes and to
-@@ -4820,7 +4820,7 @@
+@@ -4819,7 +4819,7 @@
{
name: "WebAppScopeExtensions",
origin_trial_feature_name: "WebAppScopeExtensions",
@@ -63,7 +63,7 @@
status: "experimental",
base_feature: "none",
},
-@@ -5095,7 +5095,7 @@
+@@ -5094,7 +5094,7 @@
{
name: "WebIdentityDigitalCredentials",
origin_trial_feature_name: "WebIdentityDigitalCredentials",
diff --git a/www/ungoogled-chromium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc b/www/ungoogled-chromium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc
new file mode 100644
index 000000000000..e106ca3408e3
--- /dev/null
+++ b/www/ungoogled-chromium/files/patch-ui_ozone_platform_wayland_host_wayland__frame__manager.cc
@@ -0,0 +1,13 @@
+--- ui/ozone/platform/wayland/host/wayland_frame_manager.cc.orig 2025-05-13 08:59:54 UTC
++++ ui/ozone/platform/wayland/host/wayland_frame_manager.cc
+@@ -461,8 +461,10 @@ std::optional<bool> WaylandFrameManager::ApplySurfaceC
+ surface->UpdateBufferDamageRegion(
+ gfx::ToEnclosingRectIgnoringError(surface_damage));
+
++#if !BUILDFLAG(IS_BSD)
+ if (!config.access_fence_handle.is_null())
+ surface->set_acquire_fence(std::move(config.access_fence_handle));
++#endif
+
+ bool needs_commit = false;
+