Beta v7.81.3191 changes:
1.Reviewed all code changes since v7.81, performed more static code
  analysis, applied some fixes and reverted several changes that
  were not needed.

Beta v7.81.2687 changes:
1.Item 17 changed the address parser slightly to improve how it
  handles malformd addresses and ports.
2.Item 14, changed to use the username in SCRAM and ECDSA as
  well. If no username is specified, PLAIN, SCRAM, and ECDSA will
  use your nickname, as before. Note that EXTERNAL has also been
  changed so that it also always sends a username or a nickname
  like the other options. It was previously not sending a
  nickname. Always sending your nickname with EXTERNAL seems
  fine on the networks I tested.
3.Item 18, fixed. When scrolling, touchpads, like mice, send
  WM_MOUSEWHEEL messages but with much smaller counts, so these need
  to be accumulated before reaching a scroll threshold. The same code
  handles both mouse and touchpad scrolling. As far as I can tell,
  touchpad scolling is now working as expected, allowing both slow and
  fast scrolling depending on how quickly you swipe the touchpad.
4.Item 14, changed the way this is stored in servers.ini. It is now
  saved as a distinct parameter. This took more work but preserves
  backward compatibility.
5.Item 19, added. This is a bit of a tricky one. If you have set up
  a server to login with SASL, how do we determine if an SASL login
  has failed? If this option is enabled, mIRC will disconnect in these
  contexts:

  1) If SASL has been initiated and we receive numeric 904 (SASL
     authentication failed) or 905 (SASL message too long).
  2) If SASL has been initiated and we receive numeric 906 (SASL
     authentication aborted).
  3) If numeric 001 is received but we have not yet received numeric
     900 (You are now logged in) or 903 (SASL authentication
     successful) or 907 (You have already authenticated using SASL).

  The above cover various contexts, eg. you have enabled SASL login
  for a server but on connect the server does not actually support
  SASL logins.

6.Item 20, added. I could have extended /server -l to handle both a
  username and password but this would have broken backward
  compatibility for users who use passwords with spaces.
7.This has been a difficult and time-consuming beta cycle. I have
  decided not to release a 64bit at this time. I will be performing a
  code review of changes (to 180+ files, which includes 64bit-related
  changes), so this will take some time. There are no more changes
  planned for this beta cycle before the next release.

Beta v7.81.2429 changes:
1.Item 14, changed SASL External to base64-encode the username to
  match Undernet's IRCv3 SASL External requirement.
2.Item 15, fixed.
3.Item 9, updated to OpenSSL 3.54 and LunaSVG 3.4.0.
4.Item 17, updated. This affects features such as typing in an
  IPv6 address for a server in the servers dialog, when using
  the /server, /dcc, or /firewall commands, on the mirc.exe command
  line, irc/ircs links, and so on.

Beta v7.81.2405 changes:
1.Item 8, more testing. The next beta release after this one will
  likely include a 64-bit version as well.
2.Item 14, added. Note that this required extending the format
  for the per server settings in server.ini. Support for specifying
  "username:password" as the password for SASL is still supported.
3.Item 15, changed.

Beta v7.81.2295 changes:
1.Item 8, experimented with ARM64, which needs a newer toolset and SDK
  version than the one I am currently using to maintain compatibility
  with XP. If I am to maintain a consistent/tested release/debug codebase,
  this will likely require dropping support for XP.
2.Item 13, updated. The number of deprecated OpenSSL API calls in mIRC's
  SSL code has been increasing with each migration to newer versions of
  OpenSSL. Updating these is not as simple as replacing an API call.
  Almost all of the deprecated APIs require a complete rewrite of
  long-tested / critical code. Documentation is sparse and finding
  code examples online is difficult, especially since deprecated APIs
  are in wide use and most codebases have not been updated, requiring
  signficant research. All new APIs also need to be enabled for
  dynamic loading from a DLL if the static library is not being used.

  This update replaces 30+ deprecated OpenSSL APIs, affecting a
  number of features, such as connecting to servers, signing/signature
  verification, certificate creation/parsing/display, ECDSA login/public
  key extraction, and so on.

Beta v7.81.1739 changes:
1.Item 9, updated to LunaSVG 3.4.0.
2.Item 10, updated.
3.Item 9, updated to OpenSSL 3.5.2.
4.Item 11, fixed. Some features, eg. Switchbar, were using the
  older Microsoft Sans Serif font on Windows 10 onwards when they
  should have been using Segoe UI to match the rest of the
  interface.
5.Item 12, fixed.

Beta v7.81.1533 changes:
1.Fixed https://forums.mirc.com/ubbthreads.php/topics/273507
  Reverted changes to /drawsave.
2.Fixed https://forums.mirc.com/ubbthreads.php/topics/273514
  Fixed PCRE configuration file.

Beta v7.81.1502 changes:
1.Item 1, updated. This looks like it is working correctly on XP
  and onwards.
2.Item 2, added. The tray tip implementation is based on tips expiring
  within a delay period and a maximum queue size. For this feature, the
  way tips are ordered/expired had to be changed. For non-permanent
  tips, the behaviour should still be identical to previous versions.
3.Item 3, updated. mIRC currently limits itself to the 7.0 SDK for
  XP compatibility. But I occasionally test with newer SDKs which can
  introduce changes to APIs/structs/etc.
4.Item 4, fixed https://forums.mirc.com/ubbthreads.php/topics/273408
5.Item 5, changed https://forums.mirc.com/ubbthreads.php/topics/273429
6.Item 6, fixed https://forums.mirc.com/ubbthreads.php/topics/273456
7.Item 7, changed. Previously, mIRC was loading the entire dialog from
  the language DLL and using it as is. This allowed translators to
  size/position controls to fit translated text. Unfortunately, this
  lead to issues, eg. where a control style/size/position changes in
  a subsequent version, and a translator would need to propagate all
  of these changes to their language DLL, and re-test them for newer
  releases. This makes updating language DLLs far more difficult.
8.Item 8, significant progress towards a 64bit version.

  Note: this beta release is the standard 32bit mIRC that includes
  the changes described below. A 64bit mIRC is not being released yet.

  All external libraries have been updated to compile as both 32bit
  and 64bit. This took some work as the existing solutions were created
  and customized over many years for just 32bit builds. As multiple
  builds are now needed for the external libraries that mIRC uses,
  ie. debug/release 32bit/64bit/ARM64, I did not want to go through
  the process of re-applying custom build changes every time
  a new library is released. So I re-installed all libraries from
  original sources and used their default configs, naming conventions,
  paths, and other settings, where possible, and compared all of
  these to the older configurations to ensure there were no critical
  differences in build options. Most of the Cmake build files still
  require tweaks, eg. for XP compatibility, so these have now been
  documented per library and automated where possible. This setup
  also makes it easier to add ARM64 builds at a later date.

  I was then able to compile and test a full 64bit mIRC under Visual
  Studio 2017/2022 and different SDK versions for testing. Reviewed
  reports from Visual Studio 2022 static code analysis and cppcheck.
  Most warnings were false positives but some related to pointers being
  stored in INTs which required code changes. Mostly minor cast warning
  changes to 180+ files. Repeated and reviewed the above process
  several times, focusing on common 32/64 bit porting issues, with
  the aim of minimizing code changes and hardening code.

  Compiled 32bit/64bit mIRC with Address Sanitizer for testing.

  Also tested 32bit mIRC with /largeaddressaware enabled, giving it
  access to 4GB memory, and tested on Windows with top down memory
  allocation enabled. This feature requires that all external 32bit
  libraries, including custom DLLs, are capable of handling the full
  32bit pointer range for shared memory, so it will not be enabled
  in the 32bit version of mIRC as this could break backward
  compatibility. The /largeaddressaware setting is just being used
  for local testing.

  No crashes or issues so far with various units tests.

  Notes:
  1) Although mIRC can now run as a 64bit application, it is still
  internally limited by INT variables for most features, ie. limited to
  two billion users in your notify list, lines in a window, etc. There
  are no plans to change this as this limit is far beyond what mIRC
  can practically handle in these contexts anyway.
  2) For the scripting language, features that store binary data, such
  as &binvars, are also limited to INT bytes. This means that the 64bit
  is limited to, at most, 2 GB per &binvar. Changing this to an INT64
  would require significant code changes, so has been left as it is for
  now as I would like a stable 64bit that can be tested against a stable
  32bit.
  3) The way floating point errors are handled had to be changed
  since the 64bit uses SSE2, whereas the 32bit was using IA32-specific
  code that had been stable for decades. The code for both 32bit and
  64bit has been standardized to SSE2 and to use a platform independent
  method of checking for floating point errors for x86, x64, and ARM64
  platforms.
  4) Custom 32bit DLLs that currently work with the 32bit mIRC will
  need to be updated to 64bit to work with the 64bit mIRC.
  5) Performed more tests with mimalloc and the 64bit version. This may
  be enabled in the 64bit for testing in the future.

9.Item 9, updated. The OpenSSL v3.0.17 branch is LTS to September 2026,
  however, I tested OpenSSL v3.5.1 and this seemed to work without any
  issues, and did not require code changes, so have decided to change
  to it for LTS to 2030.
10.Switched from Windows 10 to 11 for development machine, so all of my
   testing now takes place on Windows 11, with limited testing on VMs
   for other Windows versions.

Changes:
1.Updated local host look up method to use a non-deprecated API.
2.Added $tip() support for delay of -1 to indicate a permanent tip
  that does not expire until manually closed.
3.Updated $input() to size dialog correctly in newer versions of the
  Windows SDK.
4.Fixed $urlget() crash bug when credentials are passed in URL.
5.Changed numeric 650/651 support to handle InspIRCd not sending 651
  End of Services Messages numeric.
6.Fixed handling of swapped mouse buttons in different contexts.
7.Changed the way that dialogs are loaded from language DLLs. Only
  the text in a dialog is now used, as opposed to loading and using
  the entire dialog.
8.Updated all external libraries to support compilation as both 32bit
  and 64bit, in preparation for a future 64bit release and possible
  ARM64 support. Updated all routines to use 32bit/64bit compatible
  types, performed static code analysis, compilation and testing under
  different Visual Studio versions, SDKs, and platform toolsets,
  focusing on common 32/64 bit porting issues, with the aim of
  minimizing code changes and hardening code.
9.Updated libraries to LibZip v1.11.4, LunaSVG v3.5.0, and TagLib
  v2.1.1. Also updated from the OpenSSL v3.0.x branch to v3.5.x.
10.Updated CA root certificates cacert.pem file.
11.Fixed features that were using the wrong default GUI font under
   Windows 10/11.
12.Fixed various Aero theme bugs relating to Windows display scale
   and text size options.
13.Updated OpenSSL support to remove use of deprecated APIs / use
   newer/recommended APIs/methods for OpenSSL v3.5.x.
14.Added support for specifying a username for use with the server
   Login methods for SASL. If a username is specified, it will be
   used during SASL authentication for PLAIN, EXTERNAL, ECDSA, and
   SCRAM. Otherwise your nickname will be used as before.
15.Fixed percent encoding/decoding memory bug that would have caused
   intermittent crashes in some contexts.
16.Changed support for numeric 263 to display the command that
   triggered the numeric.
17.Updated various features to parse bracket-enclosed IPv6 addresses
   with appended port number.
18.Fixed touchpad speed/sensitivity when scrolling in different types
   of windows.
19.Added server option to disconnect on SASL login error.
20.Added /server command -lname <name> and -lerror [0|1] to set the
   SASL username and disconnect option for a server. Also added
   $server() .methodname and .methoderror properties.
