This is a modified "UoDemo.exe" with the following patches applied:
  - using "UoDemo+.dat" instead of "UoDemo.dat".
  - reading directly from "..\.rundir" if file is not found in the .DAT file
  - added an environment variable DATFILE which allows you to specify which .DAT to use (default is UoDemo+.dat)
  - added an environment variable RUNDIR that allows you to override the ".rundir" subdirectory
  - replaced the version string with UoDemo+ and updated the publish identifier
  - re-organized FUNC_4283E4_ExtractScriptBytes to allow for easier debugging (and optional code insertion)
  - added an environment variable LOGFILE to log packets between "client" and "server" in Razor log format      
  - turned a "disabled" log function into a real log function using OutputDebugString (use DbgView or alike)
  - ensured a correct commit when writing to the packet log file
  - a bug in the packet log function (multi-threading problem) was fixed
  - set the environment variable SAVEDYNAMIC0 to YES to enable saving of this file (use without caution!)
  - renamed the class+window name to "Ultima Online Demo" (was Ultima Oline)
  - renamed the file mapping to "UoDemo+App" (was UoClientApp)
  - turned the uodemo into a real server, the port number in "server.txt" is used
    (use an old uo client to connect and apply a "standalone server" patch to connect without encryption)
    (WARNING: the uodemo will exit if it can't bind to the defined port!)

Greetings.