diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..29af8c97 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,26 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +charset = utf-8 +indent_style = tab +indent_size = tab +tab_width = 2 +trim_trailing_whitespace = true + +# The property below is not yet universally supported +[*.md] +max_line_length = 108 +word_wrap = true +# Markdown sometimes uses two spaces at the end to +# mark soft line breaks +trim_trailing_whitespace = false + +[*.yml] +end_of_line = lf +charset = utf-8 +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true \ No newline at end of file diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 09743197..4b35f456 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -52,8 +52,8 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 + # - name: Autobuild + # uses: github/codeql-action/autobuild@v1 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -62,9 +62,41 @@ jobs: # and modify them (or add more) to build your code if your project # uses a compiled language - #- run: | - # make bootstrap - # make release + - name: Build cross-platform projects + run: | + dotnet build PrimMesher/LibreMetaverse.PrimMesher.csproj + dotnet build LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj + dotnet build LibreMetaverse.Types/LibreMetaverse.Types.csproj + dotnet build LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj + dotnet build LibreMetaverse/LibreMetaverse.csproj + dotnet build LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj + dotnet build LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj + dotnet build LibreMetaverse.Voice/LibreMetaverse.Voice.csproj + dotnet build LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj + + - name: Build cross-platform example projects + run: | + dotnet build Programs/examples/IRCGateway/IRCGateway.csproj + dotnet build Programs/examples/PacketDump/PacketDump.csproj + dotnet build Programs/examples/TestClient/TestClient.csproj + dotnet build Programs/mapgenerator/mapgenerator.csproj + dotnet build Programs/VoiceTest/VoiceTest.csproj + + # These GUI projects fail to build. Disabled for now. + # - name: Build GUI projects + # run: | + # dotnet build LibreMetaverse.GUI/LibreMetaverse.GUI.csproj + # dotnet build Programs/Baker/Baker.csproj + # dotnet build Programs/examples/Dashboard/Dashboard.csproj + # dotnet build Programs/examples/GridAccountant/GridAccountant.csproj + # dotnet build Programs/examples/groupmanager/groupmanager.csproj + # dotnet build Programs/examples/Heightmap/Heightmap.csproj + + # These projects also have issues. + # - name: Build GridProxy projects + # run: | + # dotnet build Programs/GridProxy/GridProxy.csproj + # dotnet build Programs/GridProxy/GridProxyApp.csproj - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 00000000..bb440220 --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,42 @@ +# A test workflow, which seems to get good results sometimes. +# (gwyneth 20220418) +# See https://docs.microsoft.com/en-us/dotnet/devops/dotnet-test-github-action +name: .NET + +on: + push: + pull_request: + branches: [ master ] + paths: + - '**.cs' + - '**.csproj' + +env: + # We'll stick to net6.0, as 5.0 seems not to work as well as it should + # - at least for testing purposes (gwyneth 20220418) + DOTNET_VERSION: '6.0.4' + +jobs: + build: + + name: dotnet-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v2 + - name: Setup .NET + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x + - name: Restore dependencies + run: dotnet restore LibreMetaverse.ReleaseNoGui.sln + - name: Build + run: dotnet build --no-restore LibreMetaverse.ReleaseNoGui.sln +# I have no idea how to pass the avatar password for the GridClientTests, so I'll have to skip this +# or, alternatively, set up a different account for testing purposes (gwyneth 20220418) +# - name: Test +# run: dotnet test --no-build --verbosity normal LibreMetaverse.ReleaseNoGui.sln + diff --git a/.gitignore b/.gitignore index ea09b491..1a2d6eb8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,45 @@ +~* +# Stupid macOS temporary files + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +Icon? + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Stuff from the Nova editor +.nova +node_modules +package.json +package-lock.json +.eslintrc.yml +.prettierrc.json + +# Original LibreMetaverse .gitignore follows compile.bat *.user *.userprefs diff --git a/Directory.Build.props b/Directory.Build.props index 0ce1c555..5f1c6dba 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,22 +1,22 @@ - - - 0.10.0.0 - LibreMetaverse - Sjofn LLC, OpenMetaverse Developers - Copyright © OpenMetaverse Developers 2008, 2017. Copyright © Sjofn LLC 2018-2022. All rights reserved. - LibreMetaverse is a trademark of Sjofn LLC. - Sjofn LLC - - - 0.10.0.0 - logo.png - README.md - BSD-3-Clause - https://github.com/cinderblocks/libremetaverse - false - LMV OMV OpenMetaverse OpenSim Halcyon OpenMetaverseFoundation VirtualWorld VirtualReality 3D Radegast MEGAbolt SecondLife - https://github.com/cinderblocks/libremetaverse - git - master - - + + + 1.9.20.453-gwyn + LibreMetaverse + Sjofn LLC, OpenMetaverse Developers + Copyright © OpenMetaverse Developers 2008, 2017. Copyright © Sjofn LLC 2018-2022. All rights reserved. + LibreMetaverse is a trademark of Sjofn LLC. + Sjofn LLC + + + 1.9.20.453-gwyn + logo.png + README.md + BSD-3-Clause + https://github.com/cinderblocks/libremetaverse + false + LMV OMV OpenMetaverse OpenSim Halcyon OpenMetaverseFoundation VirtualWorld VirtualReality 3D Radegast MEGAbolt SecondLife + https://github.com/cinderblocks/libremetaverse + git + master + + diff --git a/LibreMetaverse.GUI/LibreMetaverse.GUI.csproj b/LibreMetaverse.GUI/LibreMetaverse.GUI.csproj index b3d2f8fd..b3995295 100644 --- a/LibreMetaverse.GUI/LibreMetaverse.GUI.csproj +++ b/LibreMetaverse.GUI/LibreMetaverse.GUI.csproj @@ -1,12 +1,12 @@ - + - net471;net48;netcoreapp3.1;net5.0-windows + net471;net48;netcoreapp3.1;net5.0-windows;net6.0-windows - net471;netcoreapp3.1 + net471;netcoreapp3.1;net5.0-linux;net6.0-linux - net471;netcoreapp3.1 + net471;netcoreapp3.1;net5.0-linux;net6.0-linux LibreMetaverse.GUI diff --git a/LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj b/LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj index 64a00680..2b4c2389 100644 --- a/LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj +++ b/LibreMetaverse.LslTools/LibreMetaverse.LslTools.csproj @@ -1,6 +1,6 @@ - + - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 LibreMetaverse.LslTools LibreMetaverse.LslTools Lexer for LSL scrripting language diff --git a/LibreMetaverse.LslTools/Tools/ParserReduce.cs b/LibreMetaverse.LslTools/Tools/ParserReduce.cs index e64f9825..1bebfbe1 100644 --- a/LibreMetaverse.LslTools/Tools/ParserReduce.cs +++ b/LibreMetaverse.LslTools/Tools/ParserReduce.cs @@ -73,7 +73,9 @@ namespace LibreMetaverse.LslTools Console.WriteLine("about to pop {0} count is {1}", (object) this.m_depth, (object) yyps.m_stack.Count); yyps.Pop(ref top, this.m_depth, ns); if (ns.pos == 0) + { ns.pos = top.m_value.pos; + } top.m_value = ns; } diff --git a/LibreMetaverse.ReleaseNoGui.sln b/LibreMetaverse.ReleaseNoGui.sln new file mode 100644 index 00000000..58da55ac --- /dev/null +++ b/LibreMetaverse.ReleaseNoGui.sln @@ -0,0 +1,360 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32002.261 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GridProxy", "Programs\GridProxy\GridProxy.csproj", "{79B51DAA-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRCGateway", "Programs\examples\IRCGateway\IRCGateway.csproj", "{89049BBC-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse", "LibreMetaverse\LibreMetaverse.csproj", "{27C70F3A-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Rendering.Meshmerizer", "LibreMetaverse.Rendering.Meshmerizer\LibreMetaverse.Rendering.Meshmerizer.csproj", "{95479B1D-0000-0000-0000-000000000000}" + ProjectSection(ProjectDependencies) = postProject + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6} = {2E2B643F-F18B-4791-BA4B-6E82D0E794B6} + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Rendering.Simple", "LibreMetaverse.Rendering.Simple\LibreMetaverse.Rendering.Simple.csproj", "{29E206AC-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.StructuredData", "LibreMetaverse.StructuredData\LibreMetaverse.StructuredData.csproj", "{89D7A3E5-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Tests", "LibreMetaverse.Tests\LibreMetaverse.Tests.csproj", "{0CCC2C3D-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Utilities", "LibreMetaverse.Utilities\LibreMetaverse.Utilities.csproj", "{1266CE08-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Types", "LibreMetaverse.Types\LibreMetaverse.Types.csproj", "{B37B02AD-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PacketDump", "Programs\examples\PacketDump\PacketDump.csproj", "{58443010-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestClient", "Programs\examples\TestClient\TestClient.csproj", "{9F71FDB3-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoiceTest", "Programs\VoiceTest\VoiceTest.csproj", "{EE4EA934-0000-0000-0000-000000000000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.PrimMesher", "PrimMesher\LibreMetaverse.PrimMesher.csproj", "{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "mapgenerator", "Programs\mapgenerator\mapgenerator.csproj", "{2867B4B3-0000-0000-0000-000000000000}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F8CE4DE6-82E5-49D1-BCDF-BB3E63A52867}" + ProjectSection(SolutionItems) = preProject + Directory.Build.props = Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "utilities", "utilities", "{6EF29E7F-FC69-4269-BDCF-4780D54E299D}" + ProjectSection(SolutionItems) = preProject + .appveyor.yml = .appveyor.yml + util\InstallRemotePfx.ps1 = util\InstallRemotePfx.ps1 + util\SignPackages.ps1 = util\SignPackages.ps1 + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.LslTools", "LibreMetaverse.LslTools\LibreMetaverse.LslTools.csproj", "{989E5E15-D99B-4CF1-AF64-90C568FC979A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.Voice", "LibreMetaverse.Voice\LibreMetaverse.Voice.csproj", "{FB07C6DE-F791-4336-B6E2-B32EEAC34792}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + ReleaseNoGui|Any CPU = ReleaseNoGui|Any CPU + ReleaseNoGui|x64 = ReleaseNoGui|x64 + ReleaseNoGui|x86 = ReleaseNoGui|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64 + {79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64 + {79B51DAA-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64 + {79B51DAA-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64 + {79B51DAA-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {79B51DAA-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64 + {79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64 + {79B51DAA-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64 + {79B51DAA-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64 + {79B51DAA-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86 + {79B51DAA-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86 + {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64 + {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64 + {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64 + {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64 + {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86 + {79B51DAA-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86 + {89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64 + {89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64 + {89049BBC-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64 + {89049BBC-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64 + {89049BBC-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {89049BBC-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64 + {89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64 + {89049BBC-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64 + {89049BBC-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64 + {89049BBC-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86 + {89049BBC-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86 + {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64 + {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64 + {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64 + {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64 + {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86 + {89049BBC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86 + {27C70F3A-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {27C70F3A-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {27C70F3A-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {27C70F3A-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {95479B1D-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {95479B1D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {95479B1D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {29E206AC-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {29E206AC-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {29E206AC-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {89D7A3E5-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {89D7A3E5-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {89D7A3E5-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {0CCC2C3D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CCC2C3D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CCC2C3D-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64 + {0CCC2C3D-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64 + {0CCC2C3D-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {0CCC2C3D-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {0CCC2C3D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CCC2C3D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {0CCC2C3D-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64 + {0CCC2C3D-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64 + {0CCC2C3D-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86 + {0CCC2C3D-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86 + {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64 + {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64 + {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86 + {0CCC2C3D-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86 + {1266CE08-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {1266CE08-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {1266CE08-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {1266CE08-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {B37B02AD-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {B37B02AD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {B37B02AD-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {58443010-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58443010-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU + {58443010-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU + {58443010-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {58443010-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {58443010-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64 + {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64 + {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {58443010-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|x64 + {9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|x64 + {9F71FDB3-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64 + {9F71FDB3-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64 + {9F71FDB3-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {9F71FDB3-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|x64 + {9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|x64 + {9F71FDB3-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64 + {9F71FDB3-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64 + {9F71FDB3-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86 + {9F71FDB3-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86 + {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|x64 + {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|x64 + {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64 + {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64 + {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86 + {9F71FDB3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86 + {EE4EA934-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE4EA934-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE4EA934-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64 + {EE4EA934-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64 + {EE4EA934-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {EE4EA934-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {EE4EA934-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE4EA934-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {EE4EA934-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64 + {EE4EA934-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64 + {EE4EA934-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86 + {EE4EA934-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86 + {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64 + {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64 + {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|x86 + {EE4EA934-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|x86 + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x64.Build.0 = Debug|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x86.ActiveCfg = Debug|x86 + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Debug|x86.Build.0 = Debug|x86 + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|Any CPU.Build.0 = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x64.ActiveCfg = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x64.Build.0 = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x86.ActiveCfg = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.Release|x86.Build.0 = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {2E2B643F-F18B-4791-BA4B-6E82D0E794B6}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86 + {2867B4B3-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86 + {2867B4B3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.ActiveCfg = Release|x64 + {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x64.Build.0 = Release|x64 + {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {2867B4B3-0000-0000-0000-000000000000}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x64.ActiveCfg = Debug|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x64.Build.0 = Debug|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x86.ActiveCfg = Debug|x86 + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Debug|x86.Build.0 = Debug|x86 + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|Any CPU.Build.0 = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x64.ActiveCfg = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x64.Build.0 = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x86.ActiveCfg = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.Release|x86.Build.0 = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {989E5E15-D99B-4CF1-AF64-90C568FC979A}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x64.ActiveCfg = Debug|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x64.Build.0 = Debug|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x86.ActiveCfg = Debug|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|x86.Build.0 = Debug|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|Any CPU.Build.0 = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x64.ActiveCfg = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x64.Build.0 = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x86.ActiveCfg = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|x86.Build.0 = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|Any CPU.ActiveCfg = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|Any CPU.Build.0 = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x64.ActiveCfg = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x64.Build.0 = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x86.ActiveCfg = Release|Any CPU + {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.ReleaseNoGui|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {39A7E333-AFC1-4BA8-9EBC-9298791FDC78} + EndGlobalSection +EndGlobal diff --git a/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj b/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj index 1f57e152..45a19e72 100644 --- a/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj +++ b/LibreMetaverse.Rendering.Meshmerizer/LibreMetaverse.Rendering.Meshmerizer.csproj @@ -1,10 +1,10 @@ - + LibreMetaverse.Rendering.Meshmerizer LibreMetaverse.Rendering.Meshmerizer Meshmerizer library for rendering mesh assets in LibreMetaverse LibreMetaverse.Rendering.Meshmerizer - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 Library true true diff --git a/LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj b/LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj index f27a8f68..4ffdebd1 100644 --- a/LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj +++ b/LibreMetaverse.Rendering.Simple/LibreMetaverse.Rendering.Simple.csproj @@ -1,9 +1,9 @@ - + LibreMetaverse.Rendering.Simple Simple library for rendering mesh assets in LibreMetaverse LibreMetaverse.Rendering.Simple - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 Library LibreMetaverse.Rendering.Simple true diff --git a/LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj b/LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj index 03797b90..2ea118af 100644 --- a/LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj +++ b/LibreMetaverse.StructuredData/LibreMetaverse.StructuredData.csproj @@ -1,9 +1,9 @@ - + LibreMetaverse.StructuredData LibreMetaverse structured data library LibreMetaverse.StructuredData - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 Library LibreMetaverse.StructuredData true diff --git a/LibreMetaverse.Tests/LibreMetaverse.Tests.csproj b/LibreMetaverse.Tests/LibreMetaverse.Tests.csproj index a8967bcc..0d88b65a 100644 --- a/LibreMetaverse.Tests/LibreMetaverse.Tests.csproj +++ b/LibreMetaverse.Tests/LibreMetaverse.Tests.csproj @@ -1,7 +1,8 @@ - + LibreMetaverse.Tests - netcoreapp3.1;net5.0 + netcoreapp3.1;net5.0;net6.0 + Library LibreMetaverse.Tests true diff --git a/LibreMetaverse.Types/LibreMetaverse.Types.csproj b/LibreMetaverse.Types/LibreMetaverse.Types.csproj index eae1dd21..98fe6a8f 100644 --- a/LibreMetaverse.Types/LibreMetaverse.Types.csproj +++ b/LibreMetaverse.Types/LibreMetaverse.Types.csproj @@ -1,9 +1,9 @@ - + LibreMetaverse.Types LibreMetaverse.Types LibreMetaverse type library - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 Library LibreMetaverse true diff --git a/LibreMetaverse.Types/Utils.cs b/LibreMetaverse.Types/Utils.cs index 1f54b75a..d4e7431c 100644 --- a/LibreMetaverse.Types/Utils.cs +++ b/LibreMetaverse.Types/Utils.cs @@ -212,13 +212,19 @@ namespace OpenMetaverse double sSquared = s * s; if (amount == 0f) + { result = value1; + } else if (amount == 1f) + { result = value2; + } else + { result = (2d * v1 - 2d * v2 + t2 + t1) * sCubed + (3d * v2 - 3d * v1 - 2d * t1 - t2) * sSquared + t1 * s + v1; + } return (float)result; } @@ -431,7 +437,7 @@ namespace OpenMetaverse { return Platform.Windows; } - return System.IO.File.Exists(OSX_CHECK_FILE) + return System.IO.File.Exists(OSX_CHECK_FILE) ? Platform.OSX : Platform.Linux; } diff --git a/LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj b/LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj index e7c6489f..b5137570 100644 --- a/LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj +++ b/LibreMetaverse.Utilities/LibreMetaverse.Utilities.csproj @@ -1,9 +1,9 @@ - + LibreMetaverse.Utilities LibreMetaverse.Utilities LibreMetaverse utility library - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 Library LibreMetaverse.Utilities true diff --git a/LibreMetaverse.Voice/LibreMetaverse.Voice.csproj b/LibreMetaverse.Voice/LibreMetaverse.Voice.csproj index 5f978daa..f263c4c6 100644 --- a/LibreMetaverse.Voice/LibreMetaverse.Voice.csproj +++ b/LibreMetaverse.Voice/LibreMetaverse.Voice.csproj @@ -1,4 +1,4 @@ - + LibreMetaverse.Voice LibreMetaverse.Voice @@ -9,7 +9,7 @@ true snupkg 0419,1574,1591 - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 x64;x86;AnyCPU ..\bin\ diff --git a/LibreMetaverse/Capabilities/EventQueueClient.cs b/LibreMetaverse/Capabilities/EventQueueClient.cs index 596db752..fcd58092 100644 --- a/LibreMetaverse/Capabilities/EventQueueClient.cs +++ b/LibreMetaverse/Capabilities/EventQueueClient.cs @@ -25,6 +25,7 @@ */ using System; +using System.Collections; using System.Net; using System.Threading; using OpenMetaverse.StructuredData; @@ -132,7 +133,7 @@ namespace OpenMetaverse.Http if (error is WebException webException) { - // Filter out some of the status requests to skip handling + // Filter out some of the status requests to skip handling switch (webException.Status) { case WebExceptionStatus.RequestCanceled: @@ -154,12 +155,52 @@ namespace OpenMetaverse.Http _Dead = true; break; case (HttpStatusCode)499: // weird error returned occasionally, ignore for now + // I believe this is the timeout error invented by LL for LSL HTTP-out requests (gwyneth 20220413) + Logger.Log($"Possible HTTP-out timeout error from {_Address}, no need to continue", Helpers.LogLevel.Debug); + + _Running = false; + _Dead = true; + break; + case HttpStatusCode.InternalServerError: + // As per LL's instructions, we ought to consider this a + // 'request to close client' (gwyneth 20220413) + Logger.Log($"Grid sent a {code} at {_Address}, closing connection", Helpers.LogLevel.Debug); + + // ... but do we happen to have an InnerException? Log it! + if (error.InnerException != null) + { + // unravel the whole inner error message, so we finally figure out what it is! + // (gwyneth 20220414) + Logger.Log($"Unrecognized internal caps exception from {_Address}: '{error.InnerException.Message}'", Helpers.LogLevel.Warning); + Logger.Log("\nMessage ---\n{error.Message}", Helpers.LogLevel.Warning); + Logger.Log("\nHelpLink ---\n{ex.HelpLink}", Helpers.LogLevel.Warning); + Logger.Log("\nSource ---\n{error.Source}", Helpers.LogLevel.Warning); + Logger.Log("\nStackTrace ---\n{error.StackTrace}", Helpers.LogLevel.Warning); + Logger.Log("\nTargetSite ---\n{error.TargetSite}", Helpers.LogLevel.Warning); + if (error.Data.Count > 0) + { + Logger.Log(" Extra details:", Helpers.LogLevel.Warning); + foreach (DictionaryEntry de in error.Data) + Logger.Log(String.Format(" Key: {0,-20} Value: '{1}'", + de.Key, de.Value), + Helpers.LogLevel.Warning); + } + // but we'll nevertheless close this connection (gwyneth 20220414) + } + + _Running = false; + _Dead = true; + break; case HttpStatusCode.BadGateway: // This is not good (server) protocol design, but it's normal. // The EventQueue server is a proxy that connects to a Squid // cache which will time out periodically. The EventQueue server // interprets this as a generic error and returns a 502 to us // that we ignore + // + // Note: if this condition persists, it _might_ be the grid trying to request + // that the client closes the connection, as per LL's specs (gwyneth 20220414) + Logger.Log($"Grid sent a Bad Gateway Error at {_Address}; probably a time-out from the grid's EventQueue server (normal) -- ignoring and continuing", Helpers.LogLevel.Debug); break; default: ++_errorCount; @@ -167,14 +208,26 @@ namespace OpenMetaverse.Http // Try to log a meaningful error message if (code != HttpStatusCode.OK) { - Logger.Log($"Unrecognized caps connection problem from {_Address}: {code}", + Logger.Log($"Unrecognized caps connection problem from {_Address}: {code}", Helpers.LogLevel.Warning); } else if (error.InnerException != null) { - Logger.Log( - $"Unrecognized internal caps exception from {_Address}: {error.InnerException.Message}", - Helpers.LogLevel.Warning); + // see comment above (gwyneth 20220414) + Logger.Log($"Unrecognized internal caps exception from {_Address}: '{error.InnerException.Message}'", Helpers.LogLevel.Warning); + Logger.Log("\nMessage ---\n{error.Message}", Helpers.LogLevel.Warning); + Logger.Log("\nHelpLink ---\n{ex.HelpLink}", Helpers.LogLevel.Warning); + Logger.Log("\nSource ---\n{error.Source}", Helpers.LogLevel.Warning); + Logger.Log("\nStackTrace ---\n{error.StackTrace}", Helpers.LogLevel.Warning); + Logger.Log("\nTargetSite ---\n{error.TargetSite}", Helpers.LogLevel.Warning); + if (error.Data.Count > 0) + { + Logger.Log(" Extra details:", Helpers.LogLevel.Warning); + foreach (DictionaryEntry de in error.Data) + Logger.Log(String.Format(" Key: {0,-20} Value: {1}", + "'" + de.Key + "'", de.Value), + Helpers.LogLevel.Warning); + } } else { @@ -182,7 +235,7 @@ namespace OpenMetaverse.Http Helpers.LogLevel.Warning); } break; - } + } // end switch #endregion Error handling } diff --git a/LibreMetaverse/InternalDictionary.cs b/LibreMetaverse/InternalDictionary.cs index a9c1cd40..144a11f4 100644 --- a/LibreMetaverse/InternalDictionary.cs +++ b/LibreMetaverse/InternalDictionary.cs @@ -31,10 +31,10 @@ namespace OpenMetaverse { /// /// The InternalDictionary class is used through the library for storing key/value pairs. - /// It is intended to be a replacement for the generic Dictionary class and should + /// It is intended to be a replacement for the generic Dictionary class and should /// be used in its place. It contains several methods for allowing access to the data from /// outside the library that are read only and thread safe. - /// + /// /// /// Key /// Value @@ -57,7 +57,7 @@ namespace OpenMetaverse public int Count { get { lock (Dictionary) return Dictionary.Count; } } /// - /// Initializes a new instance of the Class + /// Initializes a new instance of the Class /// with the specified key/value, has the default initial capacity. /// /// @@ -72,8 +72,8 @@ namespace OpenMetaverse } /// - /// Initializes a new instance of the Class - /// with the specified key/value, has its initial valies copied from the specified + /// Initializes a new instance of the Class + /// with the specified key/value, has its initial valies copied from the specified /// /// /// @@ -82,12 +82,12 @@ namespace OpenMetaverse /// /// // initialize a new InternalDictionary named testAvName with a UUID as the key and an string as the value. /// // populates with copied values from example KeyNameCache Dictionary. - /// + /// /// // create source dictionary /// Dictionary<UUID, string> KeyNameCache = new Dictionary<UUID, string>(); /// KeyNameCache.Add("8300f94a-7970-7810-cf2c-fc9aa6cdda24", "Jack Avatar"); /// KeyNameCache.Add("27ba1e40-13f7-0708-3e98-5819d780bd62", "Jill Avatar"); - /// + /// /// // Initialize new dictionary. /// public InternalDictionary<UUID, string> testAvName = new InternalDictionary<UUID, string>(KeyNameCache); /// @@ -98,13 +98,13 @@ namespace OpenMetaverse } /// - /// Initializes a new instance of the Class + /// Initializes a new instance of the Class /// with the specified key/value, With its initial capacity specified. /// /// Initial size of dictionary /// /// - /// // initialize a new InternalDictionary named testDict with a string as the key and an int as the value, + /// // initialize a new InternalDictionary named testDict with a string as the key and an int as the value, /// // initially allocated room for 10 entries. /// public InternalDictionary<string, int> testDict = new InternalDictionary<string, int>(10); /// @@ -115,7 +115,7 @@ namespace OpenMetaverse } /// - /// Try to get entry from with specified key + /// Try to get entry from with specified key /// /// Key to use for lookup /// Value returned @@ -176,7 +176,7 @@ namespace OpenMetaverse /// Vector3 pos = prim.Position; /// return ((prim.ParentID == 0) && (pos != Vector3.Zero) && (Vector3.Distance(pos, location) < radius)); /// } - /// ); + /// ); /// /// public List FindAll(Predicate match) @@ -203,7 +203,7 @@ namespace OpenMetaverse /// delegate(UUID id) { /// return myOtherDict.ContainsKey(id); /// } - /// ); + /// ); /// /// public List FindAll(Predicate match) @@ -230,7 +230,7 @@ namespace OpenMetaverse /// { /// if (prim.Text != null) /// { - /// Console.WriteLine("NAME={0} ID = {1} TEXT = '{2}'", + /// Console.WriteLine("NAME={0} ID = {1} TEXT = '{2}'", /// prim.PropertiesFamily.Name, prim.ID, prim.Text); /// } /// }); @@ -292,7 +292,7 @@ namespace OpenMetaverse } /// - /// Adds the specified key to the dictionary, dictionary locking is not performed, + /// Adds the specified key to the dictionary, dictionary locking is not performed, /// /// /// The key @@ -300,7 +300,7 @@ namespace OpenMetaverse internal void Add(TKey key, TValue value) { lock (Dictionary) - Dictionary.Add(key, value); + Dictionary[key] = value; } /// diff --git a/LibreMetaverse/LibreMetaverse.csproj b/LibreMetaverse/LibreMetaverse.csproj index 8422941d..ef801ed4 100644 --- a/LibreMetaverse/LibreMetaverse.csproj +++ b/LibreMetaverse/LibreMetaverse.csproj @@ -11,7 +11,7 @@ true snupkg 0419,1574,1591 - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 x64;x86;AnyCPU ..\bin\ diff --git a/LibreMetaverse/ObservableDictionary.cs b/LibreMetaverse/ObservableDictionary.cs index 80061b9b..ec4e2c8f 100644 --- a/LibreMetaverse/ObservableDictionary.cs +++ b/LibreMetaverse/ObservableDictionary.cs @@ -32,26 +32,26 @@ namespace OpenMetaverse { /// - /// + /// /// public enum DictionaryEventAction { /// - /// + /// /// Add, /// - /// + /// /// Remove, /// - /// + /// /// Change } /// - /// + /// /// /// /// @@ -80,7 +80,7 @@ namespace OpenMetaverse { if (Delegates.ContainsKey(action)) { - Delegates[action].Add(callback); + Delegates[action].Add(callback); } else { @@ -105,13 +105,13 @@ namespace OpenMetaverse } /// - /// + /// /// /// /// private void FireChangeEvent(DictionaryEventAction action, DictionaryEntry entry) { - + if(Delegates.ContainsKey(action)) { foreach(DictionaryChangeCallback handler in Delegates[action]) @@ -133,7 +133,7 @@ namespace OpenMetaverse public int Count { get { return Dictionary.Count; } } /// - /// Initializes a new instance of the Class + /// Initializes a new instance of the Class /// with the specified key/value, has the default initial capacity. /// /// @@ -149,13 +149,13 @@ namespace OpenMetaverse } /// - /// Initializes a new instance of the Class + /// Initializes a new instance of the Class /// with the specified key/value, With its initial capacity specified. /// /// Initial size of dictionary /// /// - /// // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value, + /// // initialize a new ObservableDictionary named testDict with a string as the key and an int as the value, /// // initially allocated room for 10 entries. /// public ObservableDictionary<string, int> testDict = new ObservableDictionary<string, int>(10); /// @@ -167,7 +167,7 @@ namespace OpenMetaverse } /// - /// Try to get entry from the with specified key + /// Try to get entry from the with specified key /// /// Key to use for lookup /// Value returned @@ -222,13 +222,13 @@ namespace OpenMetaverse /// Vector3 pos = prim.Position; /// return ((prim.ParentID == 0) && (pos != Vector3.Zero) && (Vector3.Distance(pos, location) < radius)); /// } - /// ); + /// ); /// /// public List FindAll(Predicate match) { List found = new List(); - + foreach (KeyValuePair kvp in Dictionary) { if (match(kvp.Value)) @@ -247,19 +247,19 @@ namespace OpenMetaverse /// delegate(UUID id) { /// return myOtherDict.ContainsKey(id); /// } - /// ); + /// ); /// /// public List FindAll(Predicate match) { List found = new List(); - + foreach (KeyValuePair kvp in Dictionary) { if (match(kvp.Key)) found.Add(kvp.Key); } - + return found; } @@ -268,7 +268,7 @@ namespace OpenMetaverse /// if found, otherwise public bool ContainsKey(TKey key) { - return Dictionary.ContainsKey(key); + return Dictionary.ContainsKey(key); } /// Check if Value exists in Dictionary @@ -276,18 +276,18 @@ namespace OpenMetaverse /// if found, otherwise public bool ContainsValue(TValue value) { - return Dictionary.ContainsValue(value); + return Dictionary.ContainsValue(value); } /// - /// Adds the specified key to the dictionary, dictionary locking is not performed, + /// Adds the specified key to the dictionary, dictionary locking is not performed, /// /// /// The key /// The value public void Add(TKey key, TValue value) { - Dictionary.Add(key, value); + Dictionary[key] = value; FireChangeEvent(DictionaryEventAction.Add, new DictionaryEntry(key, value)); } diff --git a/PrimMesher/LibreMetaverse.PrimMesher.csproj b/PrimMesher/LibreMetaverse.PrimMesher.csproj index 3e42971f..20e7d806 100644 --- a/PrimMesher/LibreMetaverse.PrimMesher.csproj +++ b/PrimMesher/LibreMetaverse.PrimMesher.csproj @@ -1,10 +1,10 @@ - + LibreMetaverse.PrimMesher LibreMetaverse.PrimMesher LibreMetaverse.PrimMesher Library - netstandard2.0;netstandard2.1;net5.0 + netstandard2.0;netstandard2.1;net5.0;net6.0 Dhalia Trimble, Sjofn LLC, OpenMetaverse Developers true true diff --git a/Programs/Baker/Baker.csproj b/Programs/Baker/Baker.csproj index c8c40e08..452e95c1 100644 --- a/Programs/Baker/Baker.csproj +++ b/Programs/Baker/Baker.csproj @@ -1,12 +1,12 @@ - + - net471;net48;netcoreapp3.1;net5.0-windows + net471;net48;netcoreapp3.1;net5.0-windows;net6.0-windows - netcoreapp3.1 + net471;netcoreapp3.1;net5.0-linux;net6.0-linux - netcoreapp3.1 + net471;netcoreapp3.1;net5.0-osx;net6.0-osx Baker diff --git a/Programs/GridProxy/GridProxy.csproj b/Programs/GridProxy/GridProxy.csproj index de9112d5..2e0e7e7c 100644 --- a/Programs/GridProxy/GridProxy.csproj +++ b/Programs/GridProxy/GridProxy.csproj @@ -1,11 +1,11 @@ - + GridProxy GridProxy Library GridProxy true - netcoreapp3.1;net5.0 + netcoreapp3.1;net5.0;net6.0 x64;x86 ..\..\bin\ false diff --git a/Programs/VoiceTest/VoiceTest.csproj b/Programs/VoiceTest/VoiceTest.csproj index 644935e1..40b40a4c 100644 --- a/Programs/VoiceTest/VoiceTest.csproj +++ b/Programs/VoiceTest/VoiceTest.csproj @@ -1,10 +1,10 @@ - + VoiceTest Exe true ..\..\bin\ - netcoreapp3.1;net5.0 + netcoreapp3.1;net5.0;net6.0 x64;x86;AnyCPU false diff --git a/Programs/examples/GridAccountant/GridAccountant.csproj b/Programs/examples/GridAccountant/GridAccountant.csproj index 1307a2a3..f43f18c3 100644 --- a/Programs/examples/GridAccountant/GridAccountant.csproj +++ b/Programs/examples/GridAccountant/GridAccountant.csproj @@ -1,12 +1,12 @@ - + - net471;net48;netcoreapp3.1;net5.0-windows + net471;netcoreapp3.1;net5.0-windows;net6.0-windows - netcoreapp3.1 + net471;netcoreapp3.1;net5.0-linux;net6.0-linux - netcoreapp3.1 + net471;netcoreapp3.1;net5.0-osx;net6.0-osx GridAccountant diff --git a/Programs/examples/IRCGateway/IRCGateway.csproj b/Programs/examples/IRCGateway/IRCGateway.csproj index c1a4cd43..c1c22617 100644 --- a/Programs/examples/IRCGateway/IRCGateway.csproj +++ b/Programs/examples/IRCGateway/IRCGateway.csproj @@ -1,11 +1,11 @@ - + IrcGateway IrcGateway true Exe ..\..\..\bin\ - netcoreapp3.1;net5.0 + netcoreapp3.1;net5.0;net6.0 x64;x86 false diff --git a/Programs/examples/PacketDump/PacketDump.csproj b/Programs/examples/PacketDump/PacketDump.csproj index 379bc26e..309428ee 100644 --- a/Programs/examples/PacketDump/PacketDump.csproj +++ b/Programs/examples/PacketDump/PacketDump.csproj @@ -1,11 +1,11 @@ - + PacketDump PacketDump Exe true ..\..\..\bin\ - netcoreapp3.1;net5.0 + netcoreapp3.1;net5.0;net6.0 AnyCPU true snupkg diff --git a/Programs/examples/TestClient/TestClient.csproj b/Programs/examples/TestClient/TestClient.csproj index 0df1f59f..3819a590 100644 --- a/Programs/examples/TestClient/TestClient.csproj +++ b/Programs/examples/TestClient/TestClient.csproj @@ -4,7 +4,7 @@ Exe true ..\..\..\bin\ - netcoreapp3.1;net5.0 + netcoreapp3.1;net5.0;net6.0 x64;x86 true snupkg diff --git a/Programs/mapgenerator/mapgenerator.csproj b/Programs/mapgenerator/mapgenerator.csproj index b00377f3..06456fbe 100644 --- a/Programs/mapgenerator/mapgenerator.csproj +++ b/Programs/mapgenerator/mapgenerator.csproj @@ -1,11 +1,11 @@ - + MapGenerator Exe true ..\..\bin\ LibreMetaverse.MapGenerator - netcoreapp3.1;net5.0 + netcoreapp3.1;net5.0;net6.0 AnyCPU true snupkg diff --git a/README.md b/README.md index 3921957c..74b96e0b 100644 --- a/README.md +++ b/README.md @@ -4,21 +4,52 @@ | | | '_ \ '_/ -_) |\/| | _| | |/ _ \ V /| _|| /\__ \ _| |_|_|_.__/_| \___|_| |_|___| |_/_/ \_\_/ |___|_|_\|___/___| ``` -LibreMetaverse -=============================================================================== +# LibreMetaverse + LibreMetaverse is a fork of libOpenMetaverse which in turn was a fork of libSecondLife, a library for developing Second Life-compatible virtual world -clients. LibreMetavrse returns the focus to up-to-date Second Life and OpenSim +clients. LibreMetaverse returns the focus to up-to-date Second Life and OpenSim compatibility with an eye to performance, multi-threading, and memory management. The canonical source for LibreMetaverse can be found at: https://github.com/cinderblocks/libremetaverse +## Simple installation procedure + +### Linux/macOS + +- Make sure you have at least `dotnet` installed, with a valid net5.0/net6.0 SDK _and_ runtime available! + +- This update includes a solution file to skip the GUI applications (which will run only under Windows anyway). Use `LibreMetaverse.ReleaseNoGUI.sln` instead + +- From the root, run `dotnet restore LibreMetaverse.ReleaseNoGUI.sln`. You should get some errors regarding missing Windows libraries; that's ok, you can ignore those, they're to be expected since Linux/macOS do _not_ include such libraries. Some test applications are Windows-only. +If all goes well, you should now have all dependent packages properly installed. + +- From the root, run `dotnet msbuild LibreMetaverse.ReleaseNoGUI.sln`, and enjoy the superfast Roslyn compiler at work 😄 It should finish after a few minutes, depending on the speed of your machine. + +- Your binaries will be under `../bin/net5.0` or `../bin/net6.0` (there might be a few more directories under `../bin`), depending on what runtimes you have installed on your system. Make sure you `cd` to the correct directory depending on the runtime you have, and then search for all your binaries there: they should be normal-looking executable files (with the `x` attribute set) and having the name of the appropriate test application (e.g. `TestClient` for the interactive testing tool). + +- Unlike OpenSimulator, you don't need to launch the binaries with Mono, they're _directly_ executable; the `dotnet` chain already embeds the small runtime that allows .NET apps to run natively on whatever operating system you've got. + +### Windows + +For Windows, you should use the default `LibreMetaverse.sln`, just as before (untested). For command-line compilation under Windows, if you wish to skip the GUI applications, the instructions are the same as above. Use the default `LibreMetaverse.sln` if you wish to install those as well. + +### GUI support under Linux/macOS + +Currently unavailable, although there are some reports that this might be possible using a Windows emulator, such as Mono itself, or possibly Wine. This will require some project configuration changes, and was _not_ tested! + +## Note: end-of-life support for .NET 5.0 + +Microsoft is [dropping support for .NET 5.0](https://devblogs.microsoft.com/dotnet/dotnet-5-end-of-support-update/) as of May 2022, so you should consider using .NET 6.0 instead (or, if you're wild, you can test the prerelease of .NET 7.0). The code runs flawlessly on .NET 6.0 as well (Windows GUI version untested) + [![LibreMetaverse NuGet-Release](https://img.shields.io/nuget/v/libremetaverse.svg?label=LibreMetaverse)](https://www.nuget.org/packages/LibreMetaverse/) [![NuGet Downloads](https://img.shields.io/nuget/dt/LibreMetaverse?label=NuGet%20downloads)](https://www.nuget.org/packages/LibreMetaverse/) [![Build status](https://ci.appveyor.com/api/projects/status/pga5w0qken2k2nnl?svg=true)](https://ci.appveyor.com/project/cinderblocks57647/libremetaverse-ksbcr) [![Test status](https://img.shields.io/appveyor/tests/cinderblocks57647/libremetaverse-ksbcr?compact_message&svg=true)](https://ci.appveyor.com/project/cinderblocks57647/libremetaverse-ksbcr) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/1cb97cd799c64ba49e2721f2ddda56ab)](https://www.codacy.com/gh/cinderblocks/libremetaverse/dashboard?utm_source=github.com&utm_medium=referral&utm_content=cinderblocks/libremetaverse&utm_campaign=Badge_Grade) +[![.NET](https://github.com/cinderblocks/libremetaverse/actions/workflows/dotnet.yml/badge.svg)](https://github.com/cinderblocks/libremetaverse/actions/workflows/dotnet.yml) +[![CodeQL](https://github.com/cinderblocks/libremetaverse/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/cinderblocks/libremetaverse/actions/workflows/codeql-analysis.yml) [![BSD Licensed](https://img.shields.io/github/license/cinderblocks/libremetaverse)](https://github.com/cinderblocks/libremetaverse/blob/master/LICENSE.txt) [![Commits per month](https://img.shields.io/github/commit-activity/m/cinderblocks/libremetaverse/master)](https://www.github.com/cinderblocks/libremetaverse/) [![ZEC](https://img.shields.io/keybase/zec/cinder)](https://keybase.io/cinder) [![BTC](https://img.shields.io/keybase/btc/cinder)](https://keybase.io/cinder) diff --git a/global.json b/global.json index ef236746..1b8195c4 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "5.0.101", - "rollForward": "latestMajor" + "version": "6.0.100", + "rollForward": "latestMinor" } -} \ No newline at end of file +}