From 280ceca0c9a912c0639efdc3649dd38ec6c0b4e5 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Mon, 9 Mar 2015 11:35:29 -0700 Subject: [PATCH] Moving FrostedSerial classes into their own files. Made a FrostedSerialPortFactory rather than just static methods so that we can override it. Working on a QRSolver to help with print leveling on Kossel --- MatterControl.sln | 367 ++++ PrinterCommunication/ActivePrinterProfile.cs | 2 +- .../PrinterConnectionAndCommunication.cs | 12 +- .../EditConnectionWidget.cs | 8 +- .../PrinterConnections/PrinterListItems.cs | 6 +- .../SetupStepComPortManual.cs | 4 +- .../PrinterConnections/SetupStepComPortTwo.cs | 4 +- QRSolver/QRSolver.cs | 1920 +++++++++++++++++ QRSolver/QRSolver.csproj | 147 ++ QRSolver/app.config | 11 + Submodules/MatterSlice | 2 +- 11 files changed, 2464 insertions(+), 19 deletions(-) create mode 100644 QRSolver/QRSolver.cs create mode 100644 QRSolver/QRSolver.csproj create mode 100644 QRSolver/app.config diff --git a/MatterControl.sln b/MatterControl.sln index 12e8f3710..6271f4de5 100644 --- a/MatterControl.sln +++ b/MatterControl.sln @@ -108,574 +108,936 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrintNotifications", "..\Cl EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Optional", "Optional", "{4E79BE4E-275E-4901-9173-E9096B7318F0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QRSolver", "QRSolver\QRSolver.csproj", "{826974F3-CA17-4D16-93F7-8009880CC792}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RemotingLite", "..\MatterControlPrintServer\RemotingLite\src\RemotingLite.csproj", "{0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MatterControlPrintServer", "..\MatterControlPrintServer\PrintServer\MatterControlPrintServer.csproj", "{002B1D12-4DBB-4ECF-B481-5EBECBC1666E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrintClient", "..\MatterControlPrintServer\PrintClient\PrintClient.csproj", "{275568A0-7E5E-4151-8960-E54665FF5DF7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PrintServer", "PrintServer", "{8F938919-F383-4BAE-BB95-13AB2A94088E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Debug64|Any CPU = Debug64|Any CPU + Debug64|Mixed Platforms = Debug64|Mixed Platforms Debug64|x64 = Debug64|x64 Debug64|x86 = Debug64|x86 Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms Release|x64 = Release|x64 Release|x86 = Release|x86 Release64|Any CPU = Release64|Any CPU + Release64|Mixed Platforms = Release64|Mixed Platforms Release64|x64 = Release64|x64 Release64|x86 = Release64|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|x64.ActiveCfg = Debug|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug|x86.ActiveCfg = Debug|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|x64.ActiveCfg = Debug|x64 {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|x64.Build.0 = Debug|x64 {0B8D6F56-BD7F-4426-B858-D9292B084656}.Debug64|x86.ActiveCfg = Debug|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|Any CPU.ActiveCfg = Release|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|Any CPU.Build.0 = Release|Any CPU + {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|Mixed Platforms.Build.0 = Release|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|x64.ActiveCfg = Release|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release|x86.ActiveCfg = Release|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release64|Any CPU.Build.0 = Release64|Any CPU + {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release64|x64.ActiveCfg = Release64|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release64|x64.Build.0 = Release64|Any CPU {0B8D6F56-BD7F-4426-B858-D9292B084656}.Release64|x86.ActiveCfg = Release64|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug|x64.ActiveCfg = Debug|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug|x86.ActiveCfg = Debug|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug64|x64.ActiveCfg = Debug|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Debug64|x86.ActiveCfg = Debug|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release|Any CPU.ActiveCfg = Release|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release|Any CPU.Build.0 = Release|Any CPU + {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release|Mixed Platforms.Build.0 = Release|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release|x64.ActiveCfg = Release|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release|x86.ActiveCfg = Release|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release64|Any CPU.Build.0 = Release64|Any CPU + {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release64|x64.ActiveCfg = Release64|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release64|x64.Build.0 = Release64|Any CPU {AE37DE1F-22F7-49EE-8732-FC6BC8DC58D9}.Release64|x86.ActiveCfg = Release64|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug|x64.ActiveCfg = Debug|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug|x86.ActiveCfg = Debug|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug64|x64.ActiveCfg = Debug|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Debug64|x86.ActiveCfg = Debug|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release|Any CPU.ActiveCfg = Release|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release|Any CPU.Build.0 = Release|Any CPU + {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release|Mixed Platforms.Build.0 = Release|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release|x64.ActiveCfg = Release|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release|x86.ActiveCfg = Release|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release64|Any CPU.Build.0 = Release64|Any CPU + {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release64|x64.ActiveCfg = Release64|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release64|x64.Build.0 = Release64|Any CPU {670BDDFF-927B-425D-9DD1-22ACB14356EB}.Release64|x86.ActiveCfg = Release64|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug|x64.ActiveCfg = Debug|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug|x86.ActiveCfg = Debug|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug64|x64.ActiveCfg = Debug|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Debug64|x86.ActiveCfg = Debug|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release|Any CPU.Build.0 = Release|Any CPU + {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release|Mixed Platforms.Build.0 = Release|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release|x64.ActiveCfg = Release|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release|x86.ActiveCfg = Release|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release64|Any CPU.Build.0 = Release64|Any CPU + {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release64|x64.ActiveCfg = Release64|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release64|x64.Build.0 = Release64|Any CPU {D3E41B4E-BFBB-44CA-94C8-95C00F754FDD}.Release64|x86.ActiveCfg = Release64|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug|x64.ActiveCfg = Debug|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug|x86.ActiveCfg = Debug|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug64|x64.ActiveCfg = Debug|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Debug64|x86.ActiveCfg = Debug|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release|Any CPU.ActiveCfg = Release|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release|Any CPU.Build.0 = Release|Any CPU + {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release|Mixed Platforms.Build.0 = Release|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release|x64.ActiveCfg = Release|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release|x86.ActiveCfg = Release|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release64|Any CPU.Build.0 = Release64|Any CPU + {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release64|x64.ActiveCfg = Release64|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release64|x64.Build.0 = Release64|Any CPU {545B6912-77FF-4B34-BA76-6C3D6A32BE6A}.Release64|x86.ActiveCfg = Release64|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug|x64.ActiveCfg = Debug|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug|x64.Build.0 = Debug|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug|x86.ActiveCfg = Debug|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug64|x64.ActiveCfg = Debug|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Debug64|x86.ActiveCfg = Debug|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release|Any CPU.ActiveCfg = Release|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release|Any CPU.Build.0 = Release|Any CPU + {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release|Mixed Platforms.Build.0 = Release|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release|x64.ActiveCfg = Release|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release|x86.ActiveCfg = Release|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release64|Any CPU.Build.0 = Release64|Any CPU + {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release64|x64.ActiveCfg = Release64|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release64|x64.Build.0 = Release64|Any CPU {74F6BB6C-9D02-4512-A59A-21940E35C532}.Release64|x86.ActiveCfg = Release64|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug|x64.ActiveCfg = Debug|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug|x64.Build.0 = Debug|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug|x86.ActiveCfg = Debug|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug64|x64.ActiveCfg = Debug|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Debug64|x86.ActiveCfg = Debug|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release|Any CPU.Build.0 = Release|Any CPU + {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release|Mixed Platforms.Build.0 = Release|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release|x64.ActiveCfg = Release|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release|x86.ActiveCfg = Release|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release64|Any CPU.Build.0 = Release64|Any CPU + {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release64|x64.ActiveCfg = Release64|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release64|x64.Build.0 = Release64|Any CPU {7E61A5BD-E78F-4B80-88C9-3821B4FA062E}.Release64|x86.ActiveCfg = Release64|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug|x64.ActiveCfg = Debug|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug|x86.ActiveCfg = Debug|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug64|x64.ActiveCfg = Debug|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Debug64|x86.ActiveCfg = Debug|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release|Any CPU.ActiveCfg = Release|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release|Any CPU.Build.0 = Release|Any CPU + {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release|Mixed Platforms.Build.0 = Release|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release|x64.ActiveCfg = Release|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release|x86.ActiveCfg = Release|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release64|Any CPU.Build.0 = Release64|Any CPU + {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release64|x64.ActiveCfg = Release64|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release64|x64.Build.0 = Release64|Any CPU {86F6AAF2-9B50-40B8-A427-1897D76471C5}.Release64|x86.ActiveCfg = Release64|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug|x64.ActiveCfg = Debug|x64 {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug|x64.Build.0 = Debug|x64 {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug|x86.ActiveCfg = Debug|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug64|x64.ActiveCfg = Debug|x64 {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug64|x64.Build.0 = Debug|x64 {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Debug64|x86.ActiveCfg = Debug|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release|Any CPU.ActiveCfg = Release|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release|Any CPU.Build.0 = Release|Any CPU + {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release|x64.ActiveCfg = Release|x64 {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release|x64.Build.0 = Release|x64 {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release|x86.ActiveCfg = Release|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release64|Any CPU.Build.0 = Release64|Any CPU + {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release64|x64.ActiveCfg = Release64|x64 {657DBC6D-C3EA-4398-A3FA-DDB73C14F71B}.Release64|x86.ActiveCfg = Release64|x64 {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug|x64.ActiveCfg = Debug|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug|x86.ActiveCfg = Debug|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug64|x64.ActiveCfg = Debug|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Debug64|x86.ActiveCfg = Debug|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release|Any CPU.ActiveCfg = Release|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release|Any CPU.Build.0 = Release|Any CPU + {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release|Mixed Platforms.Build.0 = Release|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release|x64.ActiveCfg = Release|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release|x86.ActiveCfg = Release|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release64|Any CPU.Build.0 = Release64|Any CPU + {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release64|x64.ActiveCfg = Release64|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release64|x64.Build.0 = Release64|Any CPU {C958F745-156E-4BDC-A24A-3721C7BE7B8A}.Release64|x86.ActiveCfg = Release64|Any CPU {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug|Mixed Platforms.Build.0 = Debug|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug|x64.ActiveCfg = Debug|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug|x64.Build.0 = Debug|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug|x86.ActiveCfg = Debug|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug|x86.Build.0 = Debug|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug64|Any CPU.ActiveCfg = Debug64|x64 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug64|Any CPU.Build.0 = Debug64|x64 + {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug64|Mixed Platforms.ActiveCfg = Debug64|x86 + {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug64|Mixed Platforms.Build.0 = Debug64|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug64|x64.ActiveCfg = Debug64|x64 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug64|x64.Build.0 = Debug64|x64 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug64|x86.ActiveCfg = Debug64|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Debug64|x86.Build.0 = Debug64|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release|Any CPU.ActiveCfg = Release|Any CPU {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release|Any CPU.Build.0 = Release|Any CPU + {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release|Mixed Platforms.Build.0 = Release|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release|x64.ActiveCfg = Release|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release|x86.ActiveCfg = Release|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release|x86.Build.0 = Release|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release64|Any CPU.Build.0 = Release64|Any CPU + {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release64|Mixed Platforms.ActiveCfg = Release64|x86 + {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release64|Mixed Platforms.Build.0 = Release64|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release64|x64.ActiveCfg = Release64|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release64|x64.Build.0 = Release64|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release64|x86.ActiveCfg = Release64|x86 {F1653F20-D47D-4F29-8C55-3C835542AF5F}.Release64|x86.Build.0 = Release64|x86 {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug|x64.ActiveCfg = Debug|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug|x86.ActiveCfg = Debug|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug64|x64.ActiveCfg = Debug|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Debug64|x86.ActiveCfg = Debug|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release|Any CPU.Build.0 = Release|Any CPU + {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release|Mixed Platforms.Build.0 = Release|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release|x64.ActiveCfg = Release|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release|x86.ActiveCfg = Release|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release64|Any CPU.Build.0 = Release64|Any CPU + {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release64|x64.ActiveCfg = Release64|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release64|x64.Build.0 = Release64|Any CPU {1E01ABE0-B494-4FE4-B0D6-540133286887}.Release64|x86.ActiveCfg = Release64|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug|x64.ActiveCfg = Debug|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug|x64.Build.0 = Debug|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug|x86.ActiveCfg = Debug|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug64|x64.ActiveCfg = Debug|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Debug64|x86.ActiveCfg = Debug|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release|Any CPU.ActiveCfg = Release|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release|Any CPU.Build.0 = Release|Any CPU + {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release|Mixed Platforms.Build.0 = Release|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release|x64.ActiveCfg = Release|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release|x86.ActiveCfg = Release|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release64|Any CPU.Build.0 = Release64|Any CPU + {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release64|x64.ActiveCfg = Release64|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release64|x64.Build.0 = Release64|Any CPU {F67AE800-B0C7-42A8-836F-597B4E74591C}.Release64|x86.ActiveCfg = Release64|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug|x64.ActiveCfg = Debug|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug|x86.ActiveCfg = Debug|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug64|x64.ActiveCfg = Debug|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Debug64|x86.ActiveCfg = Debug|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release|Any CPU.Build.0 = Release|Any CPU + {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release|Mixed Platforms.Build.0 = Release|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release|x64.ActiveCfg = Release|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release|x86.ActiveCfg = Release|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release64|Any CPU.Build.0 = Release64|Any CPU + {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release64|x64.ActiveCfg = Release64|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release64|x64.Build.0 = Release64|Any CPU {D3ABF72C-64C2-4E51-A119-E077210FA990}.Release64|x86.ActiveCfg = Release64|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug|x64.ActiveCfg = Debug|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug|x64.Build.0 = Debug|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug|x86.ActiveCfg = Debug|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug64|x64.ActiveCfg = Debug|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Debug64|x86.ActiveCfg = Debug|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Release|Any CPU.ActiveCfg = Release|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Release|Any CPU.Build.0 = Release|Any CPU + {A737BC76-165B-46C6-82B7-8871C7C92942}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A737BC76-165B-46C6-82B7-8871C7C92942}.Release|Mixed Platforms.Build.0 = Release|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Release|x64.ActiveCfg = Release|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Release|x86.ActiveCfg = Release|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Release64|Any CPU.Build.0 = Release64|Any CPU + {A737BC76-165B-46C6-82B7-8871C7C92942}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {A737BC76-165B-46C6-82B7-8871C7C92942}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Release64|x64.ActiveCfg = Release64|Any CPU {A737BC76-165B-46C6-82B7-8871C7C92942}.Release64|x86.ActiveCfg = Release64|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug|x64.ActiveCfg = Debug|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug|x64.Build.0 = Debug|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug|x86.ActiveCfg = Debug|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug64|Any CPU.ActiveCfg = Debug64|x64 {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug64|Any CPU.Build.0 = Debug64|x64 + {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug64|x64.ActiveCfg = Debug64|x64 {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug64|x64.Build.0 = Debug64|x64 {CA96058C-1A37-465D-A357-D6D695B13D25}.Debug64|x86.ActiveCfg = Debug64|x64 {CA96058C-1A37-465D-A357-D6D695B13D25}.Release|Any CPU.ActiveCfg = Release|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Release|Any CPU.Build.0 = Release|Any CPU + {CA96058C-1A37-465D-A357-D6D695B13D25}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CA96058C-1A37-465D-A357-D6D695B13D25}.Release|Mixed Platforms.Build.0 = Release|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Release|x64.ActiveCfg = Release|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Release|x86.ActiveCfg = Release|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Release64|Any CPU.Build.0 = Release64|Any CPU + {CA96058C-1A37-465D-A357-D6D695B13D25}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {CA96058C-1A37-465D-A357-D6D695B13D25}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Release64|x64.ActiveCfg = Release64|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Release64|x64.Build.0 = Release64|Any CPU {CA96058C-1A37-465D-A357-D6D695B13D25}.Release64|x86.ActiveCfg = Release64|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug|x64.ActiveCfg = Debug|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug|x64.Build.0 = Debug|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug|x86.ActiveCfg = Debug|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug64|x64.ActiveCfg = Debug|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Debug64|x86.ActiveCfg = Debug|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release|Any CPU.Build.0 = Release|Any CPU + {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release|Mixed Platforms.Build.0 = Release|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release|x64.ActiveCfg = Release|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release|x86.ActiveCfg = Release|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release64|Any CPU.Build.0 = Release64|Any CPU + {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release64|x64.ActiveCfg = Release64|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release64|x64.Build.0 = Release64|Any CPU {036BCCBA-52D8-457C-84AE-8821F209FE4A}.Release64|x86.ActiveCfg = Release64|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x64.ActiveCfg = Debug|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x86.ActiveCfg = Debug|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug64|x64.ActiveCfg = Debug|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug64|x86.ActiveCfg = Debug|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.ActiveCfg = Release|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.Build.0 = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Mixed Platforms.Build.0 = Release|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x64.ActiveCfg = Release|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x86.ActiveCfg = Release|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release64|Any CPU.Build.0 = Release64|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release64|x64.ActiveCfg = Release64|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release64|x64.Build.0 = Release64|Any CPU {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release64|x86.ActiveCfg = Release64|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF6845CD-64C6-4263-8357-DA8066855739}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DF6845CD-64C6-4263-8357-DA8066855739}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug|x64.ActiveCfg = Debug|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug|x64.Build.0 = Debug|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug|x86.ActiveCfg = Debug|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {DF6845CD-64C6-4263-8357-DA8066855739}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {DF6845CD-64C6-4263-8357-DA8066855739}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug64|x64.ActiveCfg = Debug|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Debug64|x86.ActiveCfg = Debug|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release|Any CPU.ActiveCfg = Release|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release|Any CPU.Build.0 = Release|Any CPU + {DF6845CD-64C6-4263-8357-DA8066855739}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {DF6845CD-64C6-4263-8357-DA8066855739}.Release|Mixed Platforms.Build.0 = Release|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release|x64.ActiveCfg = Release|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release|x86.ActiveCfg = Release|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release64|Any CPU.Build.0 = Release64|Any CPU + {DF6845CD-64C6-4263-8357-DA8066855739}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {DF6845CD-64C6-4263-8357-DA8066855739}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release64|x64.ActiveCfg = Release64|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release64|x64.Build.0 = Release64|Any CPU {DF6845CD-64C6-4263-8357-DA8066855739}.Release64|x86.ActiveCfg = Release64|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug|x64.ActiveCfg = Debug|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug|x86.ActiveCfg = Debug|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug64|Any CPU.ActiveCfg = Debug64|x64 {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug64|Any CPU.Build.0 = Debug64|x64 + {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug64|x64.ActiveCfg = Debug64|x64 {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug64|x64.Build.0 = Debug64|x64 {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Debug64|x86.ActiveCfg = Debug64|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release|Any CPU.ActiveCfg = Release|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release|Any CPU.Build.0 = Release|Any CPU + {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release|Mixed Platforms.Build.0 = Release|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release|x64.ActiveCfg = Release|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release|x86.ActiveCfg = Release|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release64|Any CPU.Build.0 = Release64|Any CPU + {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release64|x64.ActiveCfg = Release64|Any CPU {865172A0-A1A9-49C2-9386-F2FDB4E141B7}.Release64|x86.ActiveCfg = Release64|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug|x64.ActiveCfg = Debug|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug|x86.ActiveCfg = Debug|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug64|x64.ActiveCfg = Debug|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Debug64|x86.ActiveCfg = Debug|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release|Any CPU.ActiveCfg = Release|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release|Any CPU.Build.0 = Release|Any CPU + {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release|Mixed Platforms.Build.0 = Release|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release|x64.ActiveCfg = Release|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release|x86.ActiveCfg = Release|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release64|Any CPU.Build.0 = Release64|Any CPU + {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release64|x64.ActiveCfg = Release64|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release64|x64.Build.0 = Release64|Any CPU {A526DC5D-65F3-461B-805F-D3AC9665F5C9}.Release64|x86.ActiveCfg = Release64|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug|x64.ActiveCfg = Debug|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug|x86.ActiveCfg = Debug|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug64|Any CPU.ActiveCfg = Debug64|x64 {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug64|Any CPU.Build.0 = Debug64|x64 + {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug64|x64.ActiveCfg = Debug64|x64 {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug64|x64.Build.0 = Debug64|x64 {F49EC1DD-D645-4709-8667-B57318AF67B0}.Debug64|x86.ActiveCfg = Debug64|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release|Any CPU.Build.0 = Release|Any CPU + {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release|Mixed Platforms.Build.0 = Release|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release|x64.ActiveCfg = Release|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release|x86.ActiveCfg = Release|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release64|Any CPU.Build.0 = Release64|Any CPU + {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release64|x64.ActiveCfg = Release64|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release64|x64.Build.0 = Release64|Any CPU {F49EC1DD-D645-4709-8667-B57318AF67B0}.Release64|x86.ActiveCfg = Release64|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|x64.ActiveCfg = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|x64.Build.0 = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug|x86.ActiveCfg = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|x64.ActiveCfg = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Debug64|x86.ActiveCfg = Debug|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|Any CPU.ActiveCfg = Release|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|Any CPU.Build.0 = Release|Any CPU + {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|Mixed Platforms.Build.0 = Release|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|x64.ActiveCfg = Release|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release|x86.ActiveCfg = Release|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release64|Any CPU.ActiveCfg = Release|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release64|Any CPU.Build.0 = Release|Any CPU + {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release64|x64.ActiveCfg = Release|Any CPU {C46CA728-DD2F-4DD1-971A-AAA89D9DFF95}.Release64|x86.ActiveCfg = Release|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug|x64.ActiveCfg = Debug|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug|x64.Build.0 = Debug|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug|x86.ActiveCfg = Debug|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug64|Any CPU.ActiveCfg = Debug64|x64 {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug64|Any CPU.Build.0 = Debug64|x64 + {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug64|x64.ActiveCfg = Debug64|x64 {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug64|x64.Build.0 = Debug64|x64 {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Debug64|x86.ActiveCfg = Debug64|x64 {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release|Any CPU.ActiveCfg = Release|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release|Any CPU.Build.0 = Release|Any CPU + {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release|x64.ActiveCfg = Release|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release|x86.ActiveCfg = Release|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release64|Any CPU.Build.0 = Release64|Any CPU + {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release64|x64.ActiveCfg = Release64|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release64|x64.Build.0 = Release64|Any CPU {3DF4CB3D-9A03-4256-9A81-70523AAD828B}.Release64|x86.ActiveCfg = Release64|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug|Any CPU.Build.0 = Debug|Any CPU + {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug|x64.ActiveCfg = Debug|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug|x86.ActiveCfg = Debug|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug64|Any CPU.ActiveCfg = Debug64|x64 {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug64|Any CPU.Build.0 = Debug64|x64 + {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug64|x64.ActiveCfg = Debug64|x64 {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug64|x64.Build.0 = Debug64|x64 {239CC6B1-537C-4998-9AA9-3372A3464498}.Debug64|x86.ActiveCfg = Debug64|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Release|Any CPU.ActiveCfg = Release|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Release|Any CPU.Build.0 = Release|Any CPU + {239CC6B1-537C-4998-9AA9-3372A3464498}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {239CC6B1-537C-4998-9AA9-3372A3464498}.Release|Mixed Platforms.Build.0 = Release|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Release|x64.ActiveCfg = Release|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Release|x86.ActiveCfg = Release|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Release64|Any CPU.ActiveCfg = Release|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Release64|Any CPU.Build.0 = Release|Any CPU + {239CC6B1-537C-4998-9AA9-3372A3464498}.Release64|Mixed Platforms.ActiveCfg = Release|Any CPU + {239CC6B1-537C-4998-9AA9-3372A3464498}.Release64|Mixed Platforms.Build.0 = Release|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Release64|x64.ActiveCfg = Release|Any CPU {239CC6B1-537C-4998-9AA9-3372A3464498}.Release64|x86.ActiveCfg = Release|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug|x64.ActiveCfg = Debug|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug|x86.ActiveCfg = Debug|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug64|Any CPU.ActiveCfg = Debug64|x64 {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug64|Any CPU.Build.0 = Debug64|x64 + {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug64|x64.ActiveCfg = Debug64|x64 {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug64|x64.Build.0 = Debug64|x64 {BEC6FD13-C765-4B90-836B-53823AC12E20}.Debug64|x86.ActiveCfg = Debug64|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release|Any CPU.Build.0 = Release|Any CPU + {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release|Mixed Platforms.Build.0 = Release|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release|x64.ActiveCfg = Release|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release|x86.ActiveCfg = Release|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release64|Any CPU.Build.0 = Release64|Any CPU + {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release64|x64.ActiveCfg = Release64|Any CPU {BEC6FD13-C765-4B90-836B-53823AC12E20}.Release64|x86.ActiveCfg = Release64|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug|x64.ActiveCfg = Debug|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug|x86.ActiveCfg = Debug|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug64|x64.ActiveCfg = Debug|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Debug64|x86.ActiveCfg = Debug|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release|Any CPU.Build.0 = Release|Any CPU + {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release|Mixed Platforms.Build.0 = Release|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release|x64.ActiveCfg = Release|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release|x86.ActiveCfg = Release|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|Any CPU.Build.0 = Release64|Any CPU + {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|x64.ActiveCfg = Release64|Any CPU {3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}.Release64|x86.ActiveCfg = Release64|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|x64.ActiveCfg = Debug|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|x64.Build.0 = Debug|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug|x86.ActiveCfg = Debug|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug64|x64.ActiveCfg = Debug|x64 {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug64|x64.Build.0 = Debug|x64 {6782BF37-8139-4DC6-885E-98D22D1FB258}.Debug64|x86.ActiveCfg = Debug|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|Any CPU.ActiveCfg = Release|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|Any CPU.Build.0 = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|Mixed Platforms.Build.0 = Release|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|x64.ActiveCfg = Release|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release|x86.ActiveCfg = Release|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|Any CPU.ActiveCfg = Release|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|Any CPU.Build.0 = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|Mixed Platforms.ActiveCfg = Release|Any CPU + {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|Mixed Platforms.Build.0 = Release|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|x64.ActiveCfg = Release|Any CPU {6782BF37-8139-4DC6-885E-98D22D1FB258}.Release64|x86.ActiveCfg = Release|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug|x64.ActiveCfg = Debug|x64 {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug|x64.Build.0 = Debug|x64 {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug|x86.ActiveCfg = Debug|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug64|Any CPU.ActiveCfg = Debug64|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug64|Any CPU.Build.0 = Debug64|Any CPU + {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug64|x64.ActiveCfg = Debug64|x64 {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug64|x64.Build.0 = Debug64|x64 {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Debug64|x86.ActiveCfg = Debug64|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release|Any CPU.ActiveCfg = Release|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release|Any CPU.Build.0 = Release|Any CPU + {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release|Mixed Platforms.Build.0 = Release|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release|x64.ActiveCfg = Release|x64 {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release|x64.Build.0 = Release|x64 {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release|x86.ActiveCfg = Release|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release64|Any CPU.Build.0 = Release64|Any CPU + {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release64|x64.ActiveCfg = Release64|x64 {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release64|x64.Build.0 = Release64|x64 {990A9AD3-B6A4-407B-9DFC-9C722AF7C9B9}.Release64|x86.ActiveCfg = Release64|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug|x64.ActiveCfg = Debug|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug|x86.ActiveCfg = Debug|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug64|x64.ActiveCfg = Debug|x64 {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug64|x64.Build.0 = Debug|x64 {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Debug64|x86.ActiveCfg = Debug|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release|Any CPU.Build.0 = Release|Any CPU + {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release|Mixed Platforms.Build.0 = Release|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release|x64.ActiveCfg = Release|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release|x86.ActiveCfg = Release|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release64|Any CPU.ActiveCfg = Release|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release64|Any CPU.Build.0 = Release|Any CPU + {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release64|Mixed Platforms.ActiveCfg = Release|Any CPU + {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release64|Mixed Platforms.Build.0 = Release|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release64|x64.ActiveCfg = Release|Any CPU {F5D74163-145F-47BF-83DC-D0E07249C6CA}.Release64|x86.ActiveCfg = Release|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug|Any CPU.Build.0 = Debug|Any CPU + {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug|x64.ActiveCfg = Debug|x64 {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug|x64.Build.0 = Debug|x64 {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug|x86.ActiveCfg = Debug|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug64|Any CPU.ActiveCfg = Debug64|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug64|Any CPU.Build.0 = Debug64|Any CPU + {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug64|x64.ActiveCfg = Debug64|x64 {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug64|x64.Build.0 = Debug64|x64 {291CD87C-2C58-4369-9D85-238C7EB31542}.Debug64|x86.ActiveCfg = Debug64|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Release|Any CPU.ActiveCfg = Release|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Release|Any CPU.Build.0 = Release|Any CPU + {291CD87C-2C58-4369-9D85-238C7EB31542}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {291CD87C-2C58-4369-9D85-238C7EB31542}.Release|Mixed Platforms.Build.0 = Release|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Release|x64.ActiveCfg = Release|x64 {291CD87C-2C58-4369-9D85-238C7EB31542}.Release|x64.Build.0 = Release|x64 {291CD87C-2C58-4369-9D85-238C7EB31542}.Release|x86.ActiveCfg = Release|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Release64|Any CPU.ActiveCfg = Release64|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Release64|Any CPU.Build.0 = Release64|Any CPU + {291CD87C-2C58-4369-9D85-238C7EB31542}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {291CD87C-2C58-4369-9D85-238C7EB31542}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU {291CD87C-2C58-4369-9D85-238C7EB31542}.Release64|x64.ActiveCfg = Release64|x64 {291CD87C-2C58-4369-9D85-238C7EB31542}.Release64|x64.Build.0 = Release64|x64 {291CD87C-2C58-4369-9D85-238C7EB31542}.Release64|x86.ActiveCfg = Release64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug|Any CPU.Build.0 = Debug|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug|x64.ActiveCfg = Debug|x64 + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug|x64.Build.0 = Debug|x64 + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug|x86.ActiveCfg = Debug|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug64|Any CPU.ActiveCfg = Debug64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug64|Any CPU.Build.0 = Debug64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug64|Mixed Platforms.ActiveCfg = Debug64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug64|Mixed Platforms.Build.0 = Debug64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug64|x64.ActiveCfg = Debug64|x64 + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug64|x64.Build.0 = Debug64|x64 + {826974F3-CA17-4D16-93F7-8009880CC792}.Debug64|x86.ActiveCfg = Debug64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release|Any CPU.ActiveCfg = Release|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release|Any CPU.Build.0 = Release|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release|x64.ActiveCfg = Release|x64 + {826974F3-CA17-4D16-93F7-8009880CC792}.Release|x64.Build.0 = Release|x64 + {826974F3-CA17-4D16-93F7-8009880CC792}.Release|x86.ActiveCfg = Release|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release64|Any CPU.ActiveCfg = Release64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release64|Any CPU.Build.0 = Release64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release64|Mixed Platforms.ActiveCfg = Release64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release64|Mixed Platforms.Build.0 = Release64|Any CPU + {826974F3-CA17-4D16-93F7-8009880CC792}.Release64|x64.ActiveCfg = Release64|x64 + {826974F3-CA17-4D16-93F7-8009880CC792}.Release64|x64.Build.0 = Release64|x64 + {826974F3-CA17-4D16-93F7-8009880CC792}.Release64|x86.ActiveCfg = Release64|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug|x64.ActiveCfg = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug|x86.ActiveCfg = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug64|x64.ActiveCfg = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Debug64|x86.ActiveCfg = Debug|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release|Any CPU.Build.0 = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release|x64.ActiveCfg = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release|x86.ActiveCfg = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release64|Any CPU.ActiveCfg = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release64|Any CPU.Build.0 = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release64|Mixed Platforms.ActiveCfg = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release64|Mixed Platforms.Build.0 = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release64|x64.ActiveCfg = Release|Any CPU + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803}.Release64|x86.ActiveCfg = Release|Any CPU + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug|Any CPU.ActiveCfg = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug|x64.ActiveCfg = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug|x86.ActiveCfg = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug|x86.Build.0 = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug64|Any CPU.ActiveCfg = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug64|Mixed Platforms.ActiveCfg = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug64|Mixed Platforms.Build.0 = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug64|x64.ActiveCfg = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug64|x86.ActiveCfg = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Debug64|x86.Build.0 = Debug|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release|Any CPU.ActiveCfg = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release|Mixed Platforms.Build.0 = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release|x64.ActiveCfg = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release|x86.ActiveCfg = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release|x86.Build.0 = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release64|Any CPU.ActiveCfg = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release64|Mixed Platforms.ActiveCfg = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release64|Mixed Platforms.Build.0 = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release64|x64.ActiveCfg = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release64|x86.ActiveCfg = Release|x86 + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E}.Release64|x86.Build.0 = Release|x86 + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug|x64.ActiveCfg = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug|x86.ActiveCfg = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug64|Any CPU.ActiveCfg = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug64|Any CPU.Build.0 = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug64|Mixed Platforms.ActiveCfg = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug64|Mixed Platforms.Build.0 = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug64|x64.ActiveCfg = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Debug64|x86.ActiveCfg = Debug|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release|Any CPU.Build.0 = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release|x64.ActiveCfg = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release|x86.ActiveCfg = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release64|Any CPU.ActiveCfg = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release64|Any CPU.Build.0 = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release64|Mixed Platforms.ActiveCfg = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release64|Mixed Platforms.Build.0 = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release64|x64.ActiveCfg = Release|Any CPU + {275568A0-7E5E-4151-8960-E54665FF5DF7}.Release64|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -706,6 +1068,11 @@ Global {6782BF37-8139-4DC6-885E-98D22D1FB258} = {4E79BE4E-275E-4901-9173-E9096B7318F0} {F5D74163-145F-47BF-83DC-D0E07249C6CA} = {4E79BE4E-275E-4901-9173-E9096B7318F0} {291CD87C-2C58-4369-9D85-238C7EB31542} = {4E79BE4E-275E-4901-9173-E9096B7318F0} + {826974F3-CA17-4D16-93F7-8009880CC792} = {DA2BE4E5-5FB2-4C74-9170-0D2513AAFC84} + {0AFFA4EB-EDEA-43CC-8045-C7D1FE557803} = {8F938919-F383-4BAE-BB95-13AB2A94088E} + {002B1D12-4DBB-4ECF-B481-5EBECBC1666E} = {8F938919-F383-4BAE-BB95-13AB2A94088E} + {275568A0-7E5E-4151-8960-E54665FF5DF7} = {8F938919-F383-4BAE-BB95-13AB2A94088E} + {8F938919-F383-4BAE-BB95-13AB2A94088E} = {4E79BE4E-275E-4901-9173-E9096B7318F0} EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = MatterControl.csproj diff --git a/PrinterCommunication/ActivePrinterProfile.cs b/PrinterCommunication/ActivePrinterProfile.cs index 652657a2d..b4d9f3883 100644 --- a/PrinterCommunication/ActivePrinterProfile.cs +++ b/PrinterCommunication/ActivePrinterProfile.cs @@ -363,7 +363,7 @@ namespace MatterHackers.MatterControl { string query = string.Format("SELECT * FROM Printer;"); IEnumerable printer_profiles = (IEnumerable)Datastore.Instance.dbSQLite.Query(query); - string[] comportNames = FrostedSerialPort.GetPortNames(); + string[] comportNames = FrostedSerialPortFactory.Instance.GetPortNames(); foreach (DataStorage.Printer printer in printer_profiles) { diff --git a/PrinterCommunication/PrinterConnectionAndCommunication.cs b/PrinterCommunication/PrinterConnectionAndCommunication.cs index fe5f29d95..d3c2a541b 100644 --- a/PrinterCommunication/PrinterConnectionAndCommunication.cs +++ b/PrinterCommunication/PrinterConnectionAndCommunication.cs @@ -1433,7 +1433,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication CommunicationState = CommunicationStates.AttemptingToConnect; // Start the process of requesting permission and exit if permission is not currently granted - if(!FrostedSerialPort.EnsureDeviceAccess()) + if (!FrostedSerialPortFactory.Instance.EnsureDeviceAccess()) { CommunicationState = CommunicationStates.FailedToConnect; return; @@ -1530,7 +1530,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; // Allow the user to set the appropriate properties. - var portNames = FrostedSerialPort.GetPortNames(); + var portNames = FrostedSerialPortFactory.Instance.GetPortNames(); //Debug.WriteLine("Open ports: {0}".FormatWith(portNames.Length)); if (portNames.Length > 0) { @@ -1596,7 +1596,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication { try { - string[] portNames = FrostedSerialPort.GetPortNames(); + string[] portNames = FrostedSerialPortFactory.Instance.GetPortNames(); return portNames.Any(x => string.Compare(x, portName, true) == 0); } catch @@ -1624,7 +1624,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication { try { - serialPort = FrostedSerialPort.CreateAndOpen(serialPortName, baudRate, true); + serialPort = FrostedSerialPortFactory.Instance.CreateAndOpen(serialPortName, baudRate, true); ReadThreadHolder.Join(); @@ -1997,8 +1997,8 @@ namespace MatterHackers.MatterControl.PrinterCommunication public void PulseRtsLow() { if (serialPort == null && this.ActivePrinter != null) - { - serialPort = FrostedSerialPort.Create(this.ActivePrinter.ComPort); + { + serialPort = FrostedSerialPortFactory.Instance.Create(this.ActivePrinter.ComPort); serialPort.BaudRate = this.BaudRate; // Set the read/write timeouts diff --git a/PrinterControls/PrinterConnections/EditConnectionWidget.cs b/PrinterControls/PrinterConnections/EditConnectionWidget.cs index c7ea12435..03e889c4b 100644 --- a/PrinterControls/PrinterConnections/EditConnectionWidget.cs +++ b/PrinterControls/PrinterConnections/EditConnectionWidget.cs @@ -65,7 +65,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections this.ActivePrinter.BaudRate = "250000"; try { - this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames().FirstOrDefault(); + this.ActivePrinter.ComPort = FrostedSerialPortFactory.Instance.GetPortNames().FirstOrDefault(); } catch { @@ -85,7 +85,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections { try { - this.ActivePrinter.ComPort = FrostedSerialPort.GetPortNames().FirstOrDefault(); + this.ActivePrinter.ComPort = FrostedSerialPortFactory.Instance.GetPortNames().FirstOrDefault(); } catch { @@ -144,7 +144,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections int portIndex = 0; - foreach (string serialPort in FrostedSerialPort.GetPortNames()) + foreach (string serialPort in FrostedSerialPortFactory.Instance.GetPortNames()) { //Filter com port list based on usb type (applies to Mac mostly) bool looks_like_mac = serialPort.StartsWith("/dev/tty."); @@ -161,7 +161,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections if (portIndex == 0) { - foreach (string serialPort in FrostedSerialPort.GetPortNames()) + foreach (string serialPort in FrostedSerialPortFactory.Instance.GetPortNames()) { SerialPortIndexRadioButton comPortOption = createComPortOption(serialPort); comPortContainer.AddChild(comPortOption); diff --git a/PrinterControls/PrinterConnections/PrinterListItems.cs b/PrinterControls/PrinterConnections/PrinterListItems.cs index eb26c6eba..4ac1057b7 100644 --- a/PrinterControls/PrinterConnections/PrinterListItems.cs +++ b/PrinterControls/PrinterConnections/PrinterListItems.cs @@ -40,9 +40,9 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections { this.Margin = new BorderDouble(1); this.BackgroundColor = this.defaultBackgroundColor; - this.Padding = new BorderDouble(0); - - string[] comportNames = FrostedSerialPort.GetPortNames(); + this.Padding = new BorderDouble(0); + + string[] comportNames = FrostedSerialPortFactory.Instance.GetPortNames(); bool portIsAvailable = comportNames.Contains(printerRecord.ComPort); printerName = new TextWidget(this.printerRecord.Name); diff --git a/PrinterControls/PrinterConnections/SetupStepComPortManual.cs b/PrinterControls/PrinterConnections/SetupStepComPortManual.cs index 9886c0c2d..8f04730ca 100644 --- a/PrinterControls/PrinterConnections/SetupStepComPortManual.cs +++ b/PrinterControls/PrinterConnections/SetupStepComPortManual.cs @@ -118,7 +118,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections FlowLayoutWidget container = new FlowLayoutWidget(FlowDirection.TopToBottom); int portIndex = 0; - foreach (string serialPort in FrostedSerialPort.GetPortNames()) + foreach (string serialPort in FrostedSerialPortFactory.Instance.GetPortNames()) { //Filter com port list based on usb type (applies to Mac mostly) bool looks_like_mac = serialPort.StartsWith("/dev/tty."); @@ -135,7 +135,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections if (portIndex == 0) { - foreach (string serialPort in FrostedSerialPort.GetPortNames()) + foreach (string serialPort in FrostedSerialPortFactory.Instance.GetPortNames()) { SerialPortIndexRadioButton comPortOption = createComPortOption(serialPort); container.AddChild(comPortOption); diff --git a/PrinterControls/PrinterConnections/SetupStepComPortTwo.cs b/PrinterControls/PrinterConnections/SetupStepComPortTwo.cs index 2e8badabe..c694593dd 100644 --- a/PrinterControls/PrinterConnections/SetupStepComPortTwo.cs +++ b/PrinterControls/PrinterConnections/SetupStepComPortTwo.cs @@ -22,7 +22,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections : base(windowController, containerWindowToClose, setupPrinterStatus) { - startingPortNames = FrostedSerialPort.GetPortNames(); + startingPortNames = FrostedSerialPortFactory.Instance.GetPortNames(); contentRow.AddChild(createPrinterConnectionMessageContainer()); { //Construct buttons @@ -141,7 +141,7 @@ namespace MatterHackers.MatterControl.PrinterControls.PrinterConnections void ConnectButton_Click(object sender, EventArgs mouseEvent) { // Select the first port that's in GetPortNames() but not in startingPortNames - string candidatePort = FrostedSerialPort.GetPortNames().Except(startingPortNames).FirstOrDefault(); + string candidatePort = FrostedSerialPortFactory.Instance.GetPortNames().Except(startingPortNames).FirstOrDefault(); if (candidatePort == null) { printerErrorMessage.TextColor = RGBA_Bytes.Red; diff --git a/QRSolver/QRSolver.cs b/QRSolver/QRSolver.cs new file mode 100644 index 000000000..978bad6bc --- /dev/null +++ b/QRSolver/QRSolver.cs @@ -0,0 +1,1920 @@ +using System; + +#if false +public class QRSolver +{ + int i4_min(int i1, int i2) + + /******************************************************************************/ + /* + Purpose: + + I4_MIN returns the smaller of two I4's. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 29 August 2006 + + Author: + + John Burkardt + + Parameters: + + Input, int I1, I2, two integers to be compared. + + Output, int I4_MIN, the smaller of I1 and I2. + */ + { + int value; + + if (i1 < i2) + { + value = i1; + } + else + { + value = i2; + } + return value; + } + + double r8_epsilon() + + /******************************************************************************/ + /* + Purpose: + + R8_EPSILON returns the R8 round off unit. + + Discussion: + + R8_EPSILON is a number R which is a power of 2 with the property that, + to the precision of the computer's arithmetic, + 1 < 1 + R + but + 1 = ( 1 + R / 2 ) + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 01 September 2012 + + Author: + + John Burkardt + + Parameters: + + Output, double R8_EPSILON, the R8 round-off unit. + */ + { + const double value = 2.220446049250313E-016; + + return value; + } + + double r8_max(double x, double y) + + /******************************************************************************/ + /* + Purpose: + + R8_MAX returns the maximum of two R8's. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 07 May 2006 + + Author: + + John Burkardt + + Parameters: + + Input, double X, Y, the quantities to compare. + + Output, double R8_MAX, the maximum of X and Y. + */ + { + double value; + + if (y < x) + { + value = x; + } + else + { + value = y; + } + return value; + } + + double r8_abs(double x) + + /******************************************************************************/ + /* + Purpose: + + R8_ABS returns the absolute value of an R8. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 07 May 2006 + + Author: + + John Burkardt + + Parameters: + + Input, double X, the quantity whose absolute value is desired. + + Output, double R8_ABS, the absolute value of X. + */ + { + double value; + + if (0.0 <= x) + { + value = +x; + } + else + { + value = -x; + } + return value; + } + + double r8_sign(double x) + + /******************************************************************************/ + /* + Purpose: + + R8_SIGN returns the sign of an R8. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 08 May 2006 + + Author: + + John Burkardt + + Parameters: + + Input, double X, the number whose sign is desired. + + Output, double R8_SIGN, the sign of X. + */ + { + double value; + + if (x < 0.0) + { + value = -1.0; + } + else + { + value = +1.0; + } + return value; + } + + double r8mat_amax(int m, int n, double[] a) + + /******************************************************************************/ + /* + Purpose: + + R8MAT_AMAX returns the maximum absolute value entry of an R8MAT. + + Discussion: + + An R8MAT is a doubly dimensioned array of R8 values, stored as a vector + in column-major order. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 07 September 2012 + + Author: + + John Burkardt + + Parameters: + + Input, int M, the number of rows in A. + + Input, int N, the number of columns in A. + + Input, double A[M*N], the M by N matrix. + + Output, double R8MAT_AMAX, the maximum absolute value entry of A. + */ + { + int i; + int j; + double value; + + value = r8_abs(a[0 + 0 * m]); + + for (j = 0; j < n; j++) + { + for (i = 0; i < m; i++) + { + if (value < r8_abs(a[i + j * m])) + { + value = r8_abs(a[i + j * m]); + } + } + } + return value; + } + + double[] r8mat_copy_new(int m, int n, double[] a1) + + /******************************************************************************/ + /* + Purpose: + + R8MAT_COPY_NEW copies one R8MAT to a "new" R8MAT. + + Discussion: + + An R8MAT is a doubly dimensioned array of R8 values, stored as a vector + in column-major order. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 26 July 2008 + + Author: + + John Burkardt + + Parameters: + + Input, int M, N, the number of rows and columns. + + Input, double A1[M*N], the matrix to be copied. + + Output, double R8MAT_COPY_NEW[M*N], the copy of A1. + */ + { + double[] a2; + int i; + int j; + + a2 = new double[m * n]; + + for (j = 0; j < n; j++) + { + for (i = 0; i < m; i++) + { + a2[i + j * m] = a1[i + j * m]; + } + } + + return a2; + } + + /******************************************************************************/ + + void daxpy(int n, double da, double[] dx, int dxStartIndex, int incx, double[] dy, int dyStartIndex, int incy) + + /******************************************************************************/ + /* + Purpose: + + DAXPY computes constant times a vector plus a vector. + + Discussion: + + This routine uses unrolled loops for increments equal to one. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 30 March 2007 + + Author: + + C version by John Burkardt + + Reference: + + Jack Dongarra, Cleve Moler, Jim Bunch, Pete Stewart, + LINPACK User's Guide, + SIAM, 1979. + + Charles Lawson, Richard Hanson, David Kincaid, Fred Krogh, + Basic Linear Algebra Subprograms for Fortran Usage, + Algorithm 539, + ACM Transactions on Mathematical Software, + Volume 5, Number 3, September 1979, pages 308-323. + + Parameters: + + Input, int N, the number of elements in DX and DY. + + Input, double DA, the multiplier of DX. + + Input, double DX[*], the first vector. + + Input, int INCX, the increment between successive entries of DX. + + Input/output, double DY[*], the second vector. + On output, DY[*] has been replaced by DY[*] + DA * DX[*]. + + Input, int INCY, the increment between successive entries of DY. + */ + { + int i; + int ix; + int iy; + int m; + + if (n <= 0) + { + return; + } + + if (da == 0.0) + { + return; + } + /* + Code for unequal increments or equal increments + not equal to 1. + */ + if (incx != 1 || incy != 1) + { + if (0 <= incx) + { + ix = 0; + } + else + { + ix = (-n + 1) * incx; + } + + if (0 <= incy) + { + iy = 0; + } + else + { + iy = (-n + 1) * incy; + } + + for (i = 0; i < n; i++) + { + dy[dyStartIndex + iy] = dy[dyStartIndex + iy] + da * dx[dxStartIndex + ix]; + ix = ix + incx; + iy = iy + incy; + } + } + /* + Code for both increments equal to 1. + */ + else + { + m = n % 4; + + for (i = 0; i < m; i++) + { + dy[dyStartIndex + i] = dy[dyStartIndex + i] + da * dx[dxStartIndex + i]; + } + + for (i = m; i < n; i = i + 4) + { + dy[dyStartIndex + i] = dy[dyStartIndex + i] + da * dx[dxStartIndex + i]; + dy[dyStartIndex + i + 1] = dy[dyStartIndex + i + 1] + da * dx[dxStartIndex + i + 1]; + dy[dyStartIndex + i + 2] = dy[dyStartIndex + i + 2] + da * dx[dxStartIndex + i + 2]; + dy[dyStartIndex + i + 3] = dy[dyStartIndex + i + 3] + da * dx[dxStartIndex + i + 3]; + } + } + return; + } + /******************************************************************************/ + + double ddot(int n, double[] dx, int xStartIndex, int incx, double[] dy, int dyStartIndex, int incy) + + /******************************************************************************/ + /* + Purpose: + + DDOT forms the dot product of two vectors. + + Discussion: + + This routine uses unrolled loops for increments equal to one. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 30 March 2007 + + Author: + + C version by John Burkardt + + Reference: + + Jack Dongarra, Cleve Moler, Jim Bunch, Pete Stewart, + LINPACK User's Guide, + SIAM, 1979. + + Charles Lawson, Richard Hanson, David Kincaid, Fred Krogh, + Basic Linear Algebra Subprograms for Fortran Usage, + Algorithm 539, + ACM Transactions on Mathematical Software, + Volume 5, Number 3, September 1979, pages 308-323. + + Parameters: + + Input, int N, the number of entries in the vectors. + + Input, double DX[*], the first vector. + + Input, int INCX, the increment between successive entries in DX. + + Input, double DY[*], the second vector. + + Input, int INCY, the increment between successive entries in DY. + + Output, double DDOT, the sum of the product of the corresponding + entries of DX and DY. + */ + { + double dtemp; + int i; + int ix; + int iy; + int m; + + dtemp = 0.0; + + if (n <= 0) + { + return dtemp; + } + /* + Code for unequal increments or equal increments + not equal to 1. + */ + if (incx != 1 || incy != 1) + { + if (0 <= incx) + { + ix = 0; + } + else + { + ix = (-n + 1) * incx; + } + + if (0 <= incy) + { + iy = 0; + } + else + { + iy = (-n + 1) * incy; + } + + for (i = 0; i < n; i++) + { + dtemp = dtemp + dx[xStartIndex + ix] * dy[dyStartIndex + iy]; + ix = ix + incx; + iy = iy + incy; + } + } + /* + Code for both increments equal to 1. + */ + else + { + m = n % 5; + + for (i = 0; i < m; i++) + { + dtemp = dtemp + dx[xStartIndex + i] * dy[dyStartIndex + i]; + } + + for (i = m; i < n; i = i + 5) + { + dtemp = dtemp + dx[xStartIndex + i] * dy[dyStartIndex + i] + + dx[xStartIndex + i + 1] * dy[dyStartIndex + i + 1] + + dx[xStartIndex + i + 2] * dy[dyStartIndex + i + 2] + + dx[xStartIndex + i + 3] * dy[dyStartIndex + i + 3] + + dx[xStartIndex + i + 4] * dy[dyStartIndex + i + 4]; + } + } + return dtemp; + } + /******************************************************************************/ + + double dnrm2(int n, double[] x, int xStartIndex, int incx) + + /******************************************************************************/ + /* + Purpose: + + DNRM2 returns the euclidean norm of a vector. + + Discussion: + + DNRM2 ( X ) = sqrt ( X' * X ) + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 30 March 2007 + + Author: + + C version by John Burkardt + + Reference: + + Jack Dongarra, Cleve Moler, Jim Bunch, Pete Stewart, + LINPACK User's Guide, + SIAM, 1979. + + Charles Lawson, Richard Hanson, David Kincaid, Fred Krogh, + Basic Linear Algebra Subprograms for Fortran Usage, + Algorithm 539, + ACM Transactions on Mathematical Software, + Volume 5, Number 3, September 1979, pages 308-323. + + Parameters: + + Input, int N, the number of entries in the vector. + + Input, double X[*], the vector whose norm is to be computed. + + Input, int INCX, the increment between successive entries of X. + + Output, double DNRM2, the Euclidean norm of X. + */ + { + double absxi; + int i; + int ix; + double norm; + double scale; + double ssq; + double value; + + if (n < 1 || incx < 1) + { + norm = 0.0; + } + else if (n == 1) + { + norm = r8_abs(x[xStartIndex]); + } + else + { + scale = 0.0; + ssq = 1.0; + ix = 0; + + for (i = 0; i < n; i++) + { + if (x[xStartIndex + ix] != 0.0) + { + absxi = r8_abs(x[xStartIndex + ix]); + if (scale < absxi) + { + ssq = 1.0 + ssq * (scale / absxi) * (scale / absxi); + scale = absxi; + } + else + { + ssq = ssq + (absxi / scale) * (absxi / scale); + } + } + ix = ix + incx; + } + + norm = scale * Math.Sqrt(ssq); + } + + return norm; + } + /******************************************************************************/ + + void dqrank(double[] a, int lda, int m, int n, double tol, out int kr, + int[] jpvt, double[] qraux) + + /******************************************************************************/ + /* + Purpose: + + DQRANK computes the QR factorization of a rectangular matrix. + + Discussion: + + This routine is used in conjunction with DQRLSS to solve + overdetermined, underdetermined and singular linear systems + in a least squares sense. + + DQRANK uses the LINPACK subroutine DQRDC to compute the QR + factorization, with column pivoting, of an M by N matrix A. + The numerical rank is determined using the tolerance TOL. + + Note that on output, ABS ( A(1,1) ) / ABS ( A(KR,KR) ) is an estimate + of the condition number of the matrix of independent columns, + and of R. This estimate will be <= 1/TOL. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 21 April 2012 + + Author: + + C version by John Burkardt. + + Reference: + + Jack Dongarra, Cleve Moler, Jim Bunch, Pete Stewart, + LINPACK User's Guide, + SIAM, 1979, + ISBN13: 978-0-898711-72-1, + LC: QA214.L56. + + Parameters: + + Input/output, double A[LDA*N]. On input, the matrix whose + decomposition is to be computed. On output, the information from DQRDC. + The triangular matrix R of the QR factorization is contained in the + upper triangle and information needed to recover the orthogonal + matrix Q is stored below the diagonal in A and in the vector QRAUX. + + Input, int LDA, the leading dimension of A, which must + be at least M. + + Input, int M, the number of rows of A. + + Input, int N, the number of columns of A. + + Input, double TOL, a relative tolerance used to determine the + numerical rank. The problem should be scaled so that all the elements + of A have roughly the same absolute accuracy, EPS. Then a reasonable + value for TOL is roughly EPS divided by the magnitude of the largest + element. + + Output, int *KR, the numerical rank. + + Output, int JPVT[N], the pivot information from DQRDC. + Columns JPVT(1), ..., JPVT(KR) of the original matrix are linearly + independent to within the tolerance TOL and the remaining columns + are linearly dependent. + + Output, double QRAUX[N], will contain extra information defining + the QR factorization. + */ + { + int i; + int j; + int job; + int k; + double[] work; + + for (i = 0; i < n; i++) + { + jpvt[i] = 0; + } + + work = new double[n]; + job = 1; + + dqrdc(a, lda, m, n, qraux, 0, jpvt, work, job); + + kr = 0; + k = i4_min(m, n); + + for (j = 0; j < k; j++) + { + if (r8_abs(a[j + j * lda]) <= tol * r8_abs(a[0 + 0 * lda])) + { + return; + } + kr = j + 1; + } + + return; + } + /******************************************************************************/ + + void dqrdc(double[] a, int lda, int n, int p, double[] qraux, int qrauxStartIndex, int[] jpvt, + double[] work, int job) + + /******************************************************************************/ + /* + Purpose: + + DQRDC computes the QR factorization of a real rectangular matrix. + + Discussion: + + DQRDC uses Householder transformations. + + Column pivoting based on the 2-norms of the reduced columns may be + performed at the user's option. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 07 June 2005 + + Author: + + C version by John Burkardt. + + Reference: + + Jack Dongarra, Cleve Moler, Jim Bunch and Pete Stewart, + LINPACK User's Guide, + SIAM, (Society for Industrial and Applied Mathematics), + 3600 University City Science Center, + Philadelphia, PA, 19104-2688. + ISBN 0-89871-172-X + + Parameters: + + Input/output, double A(LDA,P). On input, the N by P matrix + whose decomposition is to be computed. On output, A contains in + its upper triangle the upper triangular matrix R of the QR + factorization. Below its diagonal A contains information from + which the orthogonal part of the decomposition can be recovered. + Note that if pivoting has been requested, the decomposition is not that + of the original matrix A but that of A with its columns permuted + as described by JPVT. + + Input, int LDA, the leading dimension of the array A. LDA must + be at least N. + + Input, int N, the number of rows of the matrix A. + + Input, int P, the number of columns of the matrix A. + + Output, double QRAUX[P], contains further information required + to recover the orthogonal part of the decomposition. + + Input/output, integer JPVT[P]. On input, JPVT contains integers that + control the selection of the pivot columns. The K-th column A(*,K) of A + is placed in one of three classes according to the value of JPVT(K). + > 0, then A(K) is an initial column. + = 0, then A(K) is a free column. + < 0, then A(K) is a final column. + Before the decomposition is computed, initial columns are moved to + the beginning of the array A and final columns to the end. Both + initial and final columns are frozen in place during the computation + and only free columns are moved. At the K-th stage of the + reduction, if A(*,K) is occupied by a free column it is interchanged + with the free column of largest reduced norm. JPVT is not referenced + if JOB == 0. On output, JPVT(K) contains the index of the column of the + original matrix that has been interchanged into the K-th column, if + pivoting was requested. + + Workspace, double WORK[P]. WORK is not referenced if JOB == 0. + + Input, int JOB, initiates column pivoting. + 0, no pivoting is done. + nonzero, pivoting is done. + */ + { + int j; + int jp; + int l; + int lup; + int maxj; + double maxnrm; + double nrmxl; + int pl; + int pu; + bool swapj; + double t; + double tt; + + pl = 1; + pu = 0; + /* + If pivoting is requested, rearrange the columns. + */ + if (job != 0) + { + for (j = 1; j <= p; j++) + { + swapj = (0 < jpvt[j - 1]); + + if (jpvt[j - 1] < 0) + { + jpvt[j - 1] = -j; + } + else + { + jpvt[j - 1] = j; + } + + if (swapj) + { + if (j != pl) + { + dswap(n, a, 0 + (pl - 1) * lda, 1, a, 0 + (j - 1), 1); + } + jpvt[j - 1] = jpvt[pl - 1]; + jpvt[pl - 1] = j; + pl = pl + 1; + } + } + pu = p; + + for (j = p; 1 <= j; j--) + { + if (jpvt[j - 1] < 0) + { + jpvt[j - 1] = -jpvt[j - 1]; + + if (j != pu) + { + dswap(n, a, 0 + (pu - 1) * lda, 1, a, 0 + (j - 1) * lda, 1); + jp = jpvt[pu - 1]; + jpvt[pu - 1] = jpvt[j - 1]; + jpvt[j - 1] = jp; + } + pu = pu - 1; + } + } + } + /* + Compute the norms of the free columns. + */ + for (j = pl; j <= pu; j++) + { + qraux[qrauxStartIndex + j - 1] = dnrm2(n, a, 0 + (j - 1) * lda, 1); + } + + for (j = pl; j <= pu; j++) + { + work[j - 1] = qraux[qrauxStartIndex + j - 1]; + } + /* + Perform the Householder reduction of A. + */ + lup = i4_min(n, p); + + for (l = 1; l <= lup; l++) + { + /* + Bring the column of largest norm into the pivot position. + */ + if (pl <= l && l < pu) + { + maxnrm = 0.0; + maxj = l; + for (j = l; j <= pu; j++) + { + if (maxnrm < qraux[qrauxStartIndex + j - 1]) + { + maxnrm = qraux[qrauxStartIndex + j - 1]; + maxj = j; + } + } + + if (maxj != l) + { + dswap(n, a, 0 + (l - 1) * lda, 1, a, 0 + (maxj - 1) * lda, 1); + qraux[qrauxStartIndex + maxj - 1] = qraux[qrauxStartIndex + l - 1]; + work[maxj - 1] = work[l - 1]; + jp = jpvt[maxj - 1]; + jpvt[maxj - 1] = jpvt[l - 1]; + jpvt[l - 1] = jp; + } + } + /* + Compute the Householder transformation for column L. + */ + qraux[qrauxStartIndex + l - 1] = 0.0; + + if (l != n) + { + nrmxl = dnrm2(n - l + 1, a, l - 1 + (l - 1) * lda, 1); + + if (nrmxl != 0.0) + { + if (a[l - 1 + (l - 1) * lda] != 0.0) + { + nrmxl = nrmxl * r8_sign(a[l - 1 + (l - 1) * lda]); + } + + dscal(n - l + 1, 1.0 / nrmxl, a, l - 1 + (l - 1) * lda, 1); + a[l - 1 + (l - 1) * lda] = 1.0 + a[l - 1 + (l - 1) * lda]; + /* + Apply the transformation to the remaining columns, updating the norms. + */ + for (j = l + 1; j <= p; j++) + { + t = -ddot(n - l + 1, a, l - 1 + (l - 1) * lda, 1, a, l - 1 + (j - 1) * lda, 1) + / a[l - 1 + (l - 1) * lda]; + daxpy(n - l + 1, t, a, l - 1 + (l - 1) * lda, 1, a, l - 1 + (j - 1) * lda, 1); + + if (pl <= j && j <= pu) + { + if (qraux[qrauxStartIndex + j - 1] != 0.0) + { + tt = 1.0 - Math.Pow(r8_abs(a[l - 1 + (j - 1) * lda]) / qraux[qrauxStartIndex + j - 1], 2); + tt = r8_max(tt, 0.0); + t = tt; + tt = 1.0 + 0.05 * tt * Math.Pow(qraux[qrauxStartIndex + j - 1] / work[j - 1], 2); + + if (tt != 1.0) + { + qraux[qrauxStartIndex + j - 1] = qraux[qrauxStartIndex + j - 1] * Math.Sqrt(t); + } + else + { + qraux[qrauxStartIndex + j - 1] = dnrm2(n - l, a, l + (j - 1) * lda, 1); + work[j - 1] = qraux[qrauxStartIndex + j - 1]; + } + } + } + } + /* + Save the transformation. + */ + qraux[qrauxStartIndex + l - 1] = a[l - 1 + (l - 1) * lda]; + a[l - 1 + (l - 1) * lda] = -nrmxl; + } + } + } + return; + } + /******************************************************************************/ + + int dqrls(double[] a, int lda, int m, int n, double tol, out int kr, double[] b, + double[] x, double[] rsd, int[] jpvt, double[] qraux, int itask) + + /******************************************************************************/ + /* + Purpose: + + DQRLS factors and solves a linear system in the least squares sense. + + Discussion: + + The linear system may be overdetermined, underdetermined or singular. + The solution is obtained using a QR factorization of the + coefficient matrix. + + DQRLS can be efficiently used to solve several least squares + problems with the same matrix A. The first system is solved + with ITASK = 1. The subsequent systems are solved with + ITASK = 2, to avoid the recomputation of the matrix factors. + The parameters KR, JPVT, and QRAUX must not be modified + between calls to DQRLS. + + DQRLS is used to solve in a least squares sense + overdetermined, underdetermined and singular linear systems. + The system is A*X approximates B where A is M by N. + B is a given M-vector, and X is the N-vector to be computed. + A solution X is found which minimimzes the sum of squares (2-norm) + of the residual, A*X - B. + + The numerical rank of A is determined using the tolerance TOL. + + DQRLS uses the LINPACK subroutine DQRDC to compute the QR + factorization, with column pivoting, of an M by N matrix A. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 10 September 2012 + + Author: + + C version by John Burkardt. + + Reference: + + David Kahaner, Cleve Moler, Steven Nash, + Numerical Methods and Software, + Prentice Hall, 1989, + ISBN: 0-13-627258-4, + LC: TA345.K34. + + Parameters: + + Input/output, double A[LDA*N], an M by N matrix. + On input, the matrix whose decomposition is to be computed. + In a least squares data fitting problem, A(I,J) is the + value of the J-th basis (model) function at the I-th data point. + On output, A contains the output from DQRDC. The triangular matrix R + of the QR factorization is contained in the upper triangle and + information needed to recover the orthogonal matrix Q is stored + below the diagonal in A and in the vector QRAUX. + + Input, int LDA, the leading dimension of A. + + Input, int M, the number of rows of A. + + Input, int N, the number of columns of A. + + Input, double TOL, a relative tolerance used to determine the + numerical rank. The problem should be scaled so that all the elements + of A have roughly the same absolute accuracy EPS. Then a reasonable + value for TOL is roughly EPS divided by the magnitude of the largest + element. + + Output, int *KR, the numerical rank. + + Input, double B[M], the right hand side of the linear system. + + Output, double X[N], a least squares solution to the linear + system. + + Output, double RSD[M], the residual, B - A*X. RSD may + overwrite B. + + Workspace, int JPVT[N], required if ITASK = 1. + Columns JPVT(1), ..., JPVT(KR) of the original matrix are linearly + independent to within the tolerance TOL and the remaining columns + are linearly dependent. ABS ( A(1,1) ) / ABS ( A(KR,KR) ) is an estimate + of the condition number of the matrix of independent columns, + and of R. This estimate will be <= 1/TOL. + + Workspace, double QRAUX[N], required if ITASK = 1. + + Input, int ITASK. + 1, DQRLS factors the matrix A and solves the least squares problem. + 2, DQRLS assumes that the matrix A was factored with an earlier + call to DQRLS, and only solves the least squares problem. + + Output, int DQRLS, error code. + 0: no error + -1: LDA < M (fatal error) + -2: N < 1 (fatal error) + -3: ITASK < 1 (fatal error) + */ + { + kr = 0; + int ind; + + if (lda < m) + { + /*fprintf ( stderr, "\n" ); + fprintf ( stderr, "DQRLS - Fatal error!\n" ); + fprintf ( stderr, " LDA < M.\n" );*/ + ind = -1; + return ind; + } + + if (n <= 0) + { + /*fprintf ( stderr, "\n" ); + fprintf ( stderr, "DQRLS - Fatal error!\n" ); + fprintf ( stderr, " N <= 0.\n" );*/ + ind = -2; + return ind; + } + + if (itask < 1) + { + /*fprintf ( stderr, "\n" ); + fprintf ( stderr, "DQRLS - Fatal error!\n" ); + fprintf ( stderr, " ITASK < 1.\n" );*/ + ind = -3; + return ind; + } + + ind = 0; + /* + Factor the matrix. + */ + if (itask == 1) + { + dqrank(a, lda, m, n, tol, out kr, jpvt, qraux); + } + /* + Solve the least-squares problem. + */ + dqrlss(a, lda, m, n, kr, b, x, rsd, jpvt, qraux); + + return ind; + } + /******************************************************************************/ + + void dqrlss(double[] a, int lda, int m, int n, int kr, double[] b, double[] x, + double[] rsd, int[] jpvt, double[] qraux) + + /******************************************************************************/ + /* + Purpose: + + DQRLSS solves a linear system in a least squares sense. + + Discussion: + + DQRLSS must be preceeded by a call to DQRANK. + + The system is to be solved is + A * X = B + where + A is an M by N matrix with rank KR, as determined by DQRANK, + B is a given M-vector, + X is the N-vector to be computed. + + A solution X, with at most KR nonzero components, is found which + minimizes the 2-norm of the residual (A*X-B). + + Once the matrix A has been formed, DQRANK should be + called once to decompose it. Then, for each right hand + side B, DQRLSS should be called once to obtain the + solution and residual. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 10 September 2012 + + Author: + + C version by John Burkardt + + Parameters: + + Input, double A[LDA*N], the QR factorization information + from DQRANK. The triangular matrix R of the QR factorization is + contained in the upper triangle and information needed to recover + the orthogonal matrix Q is stored below the diagonal in A and in + the vector QRAUX. + + Input, int LDA, the leading dimension of A, which must + be at least M. + + Input, int M, the number of rows of A. + + Input, int N, the number of columns of A. + + Input, int KR, the rank of the matrix, as estimated by DQRANK. + + Input, double B[M], the right hand side of the linear system. + + Output, double X[N], a least squares solution to the + linear system. + + Output, double RSD[M], the residual, B - A*X. RSD may + overwite B. + + Input, int JPVT[N], the pivot information from DQRANK. + Columns JPVT[0], ..., JPVT[KR-1] of the original matrix are linearly + independent to within the tolerance TOL and the remaining columns + are linearly dependent. + + Input, double QRAUX[N], auxiliary information from DQRANK + defining the QR factorization. + */ + { + int i; + int info; + int j; + int job; + int k; + double t; + + if (kr != 0) + { + job = 110; + info = dqrsl(a, lda, m, kr, qraux, b, rsd, rsd, x, rsd, rsd, job); + } + + for (i = 0; i < n; i++) + { + jpvt[i] = -jpvt[i]; + } + + for (i = kr; i < n; i++) + { + x[i] = 0.0; + } + + for (j = 1; j <= n; j++) + { + if (jpvt[j - 1] <= 0) + { + k = -jpvt[j - 1]; + jpvt[j - 1] = k; + + while (k != j) + { + t = x[j - 1]; + x[j - 1] = x[k - 1]; + x[k - 1] = t; + jpvt[k - 1] = -jpvt[k - 1]; + k = jpvt[k - 1]; + } + } + } + return; + } + /******************************************************************************/ + + int dqrsl(double[] a, int lda, int n, int k, double[] qraux, double[] y, + double[] qy, double[] qty, double[] b, double[] rsd, double[] ab, int job) + + /******************************************************************************/ + /* + Purpose: + + DQRSL computes transformations, projections, and least squares solutions. + + Discussion: + + DQRSL requires the output of DQRDC. + + For K <= min(N,P), let AK be the matrix + + AK = ( A(JPVT[0]), A(JPVT(2)), ..., A(JPVT(K)) ) + + formed from columns JPVT[0], ..., JPVT(K) of the original + N by P matrix A that was input to DQRDC. If no pivoting was + done, AK consists of the first K columns of A in their + original order. DQRDC produces a factored orthogonal matrix Q + and an upper triangular matrix R such that + + AK = Q * (R) + (0) + + This information is contained in coded form in the arrays + A and QRAUX. + + The parameters QY, QTY, B, RSD, and AB are not referenced + if their computation is not requested and in this case + can be replaced by dummy variables in the calling program. + To save storage, the user may in some cases use the same + array for different parameters in the calling sequence. A + frequently occuring example is when one wishes to compute + any of B, RSD, or AB and does not need Y or QTY. In this + case one may identify Y, QTY, and one of B, RSD, or AB, while + providing separate arrays for anything else that is to be + computed. + + Thus the calling sequence + + dqrsl ( a, lda, n, k, qraux, y, dum, y, b, y, dum, 110, info ) + + will result in the computation of B and RSD, with RSD + overwriting Y. More generally, each item in the following + list contains groups of permissible identifications for + a single calling sequence. + + 1. (Y,QTY,B) (RSD) (AB) (QY) + + 2. (Y,QTY,RSD) (B) (AB) (QY) + + 3. (Y,QTY,AB) (B) (RSD) (QY) + + 4. (Y,QY) (QTY,B) (RSD) (AB) + + 5. (Y,QY) (QTY,RSD) (B) (AB) + + 6. (Y,QY) (QTY,AB) (B) (RSD) + + In any group the value returned in the array allocated to + the group corresponds to the last member of the group. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 07 June 2005 + + Author: + + C version by John Burkardt. + + Reference: + + Jack Dongarra, Cleve Moler, Jim Bunch and Pete Stewart, + LINPACK User's Guide, + SIAM, (Society for Industrial and Applied Mathematics), + 3600 University City Science Center, + Philadelphia, PA, 19104-2688. + ISBN 0-89871-172-X + + Parameters: + + Input, double A[LDA*P], contains the output of DQRDC. + + Input, int LDA, the leading dimension of the array A. + + Input, int N, the number of rows of the matrix AK. It must + have the same value as N in DQRDC. + + Input, int K, the number of columns of the matrix AK. K + must not be greater than min(N,P), where P is the same as in the + calling sequence to DQRDC. + + Input, double QRAUX[P], the auxiliary output from DQRDC. + + Input, double Y[N], a vector to be manipulated by DQRSL. + + Output, double QY[N], contains Q * Y, if requested. + + Output, double QTY[N], contains Q' * Y, if requested. + + Output, double B[K], the solution of the least squares problem + minimize norm2 ( Y - AK * B), + if its computation has been requested. Note that if pivoting was + requested in DQRDC, the J-th component of B will be associated with + column JPVT(J) of the original matrix A that was input into DQRDC. + + Output, double RSD[N], the least squares residual Y - AK * B, + if its computation has been requested. RSD is also the orthogonal + projection of Y onto the orthogonal complement of the column space + of AK. + + Output, double AB[N], the least squares approximation Ak * B, + if its computation has been requested. AB is also the orthogonal + projection of Y onto the column space of A. + + Input, integer JOB, specifies what is to be computed. JOB has + the decimal expansion ABCDE, with the following meaning: + + if A != 0, compute QY. + if B != 0, compute QTY. + if C != 0, compute QTY and B. + if D != 0, compute QTY and RSD. + if E != 0, compute QTY and AB. + + Note that a request to compute B, RSD, or AB automatically triggers + the computation of QTY, for which an array must be provided in the + calling sequence. + + Output, int DQRSL, is zero unless the computation of B has + been requested and R is exactly singular. In this case, INFO is the + index of the first zero diagonal element of R, and B is left unaltered. + */ + { + int cab; + int cb; + int cqty; + int cqy; + int cr; + int i; + int info; + int j; + int jj; + int ju; + double t; + double temp; + /* + Set INFO flag. + */ + info = 0; + /* + Determine what is to be computed. + */ + cqy = (job / 10000 != 0); + cqty = ((job % 10000) != 0); + cb = ((job % 1000) / 100 != 0); + cr = ((job % 100) / 10 != 0); + cab = ((job % 10) != 0); + + ju = i4_min(k, n - 1); + /* + Special action when N = 1. + */ + if (ju == 0) + { + if (cqy != 0) + { + qy[0] = y[0]; + } + + if (cqty != 0) + { + qty[0] = y[0]; + } + + if (cab != 0) + { + ab[0] = y[0]; + } + + if (cb != 0) + { + if (a[0 + 0 * lda] == 0.0) + { + info = 1; + } + else + { + b[0] = y[0] / a[0 + 0 * lda]; + } + } + + if (cr != 0) + { + rsd[0] = 0.0; + } + return info; + } + /* + Set up to compute QY or QTY. + */ + if (cqy != 0) + { + for (i = 1; i <= n; i++) + { + qy[i - 1] = y[i - 1]; + } + } + + if (cqty != 0) + { + for (i = 1; i <= n; i++) + { + qty[i - 1] = y[i - 1]; + } + } + /* + Compute QY. + */ + if (cqy != 0) + { + for (jj = 1; jj <= ju; jj++) + { + j = ju - jj + 1; + + if (qraux[j - 1] != 0.0) + { + temp = a[j - 1 + (j - 1) * lda]; + a[j - 1 + (j - 1) * lda] = qraux[j - 1]; + t = -ddot(n - j + 1, a, j - 1 + (j - 1) * lda, 1, qy, j - 1, 1) / a[j - 1 + (j - 1) * lda]; + daxpy(n - j + 1, t, a, j - 1 + (j - 1) * lda, 1, qy, j - 1, 1); + a[j - 1 + (j - 1) * lda] = temp; + } + } + } + /* + Compute Q'*Y. + */ + if (cqty != 0) + { + for (j = 1; j <= ju; j++) + { + if (qraux[j - 1] != 0.0) + { + temp = a[j - 1 + (j - 1) * lda]; + a[j - 1 + (j - 1) * lda] = qraux[j - 1]; + t = -ddot(n - j + 1, a, j - 1 + (j - 1) * lda, 1, qty, j - 1, 1) / a[j - 1 + (j - 1) * lda]; + daxpy(n - j + 1, t, a, j - 1 + (j - 1) * lda, 1, qty, j - 1, 1); + a[j - 1 + (j - 1) * lda] = temp; + } + } + } + /* + Set up to compute B, RSD, or AB. + */ + if (cb != 0) + { + for (i = 1; i <= k; i++) + { + b[i - 1] = qty[i - 1]; + } + } + + if (cab != 0) + { + for (i = 1; i <= k; i++) + { + ab[i - 1] = qty[i - 1]; + } + } + + if (cr && k < n) + { + for (i = k + 1; i <= n; i++) + { + rsd[i - 1] = qty[i - 1]; + } + } + + if (cab && k + 1 <= n) + { + for (i = k + 1; i <= n; i++) + { + ab[i - 1] = 0.0; + } + } + + if (cr != 0) + { + for (i = 1; i <= k; i++) + { + rsd[i - 1] = 0.0; + } + } + /* + Compute B. + */ + if (cb != 0) + { + for (jj = 1; jj <= k; jj++) + { + j = k - jj + 1; + + if (a[j - 1 + (j - 1) * lda] == 0.0) + { + info = j; + break; + } + + b[j - 1] = b[j - 1] / a[j - 1 + (j - 1) * lda]; + + if (j != 1) + { + t = -b[j - 1]; + daxpy(j - 1, t, a, 0 + (j - 1) * lda, 1, b, 0, 1); + } + } + } + /* + Compute RSD or AB as required. + */ + if (cr != 0 || cab != 0) + { + for (jj = 1; jj <= ju; jj++) + { + j = ju - jj + 1; + + if (qraux[j - 1] != 0.0) + { + temp = a[j - 1 + (j - 1) * lda]; + a[j - 1 + (j - 1) * lda] = qraux[j - 1]; + + if (cr != 0) + { + t = -ddot(n - j + 1, a, j - 1 + (j - 1) * lda, 1, rsd, j - 1, 1) + / a[j - 1 + (j - 1) * lda]; + daxpy(n - j + 1, t, a, j - 1 + (j - 1) * lda, 1, rsd, j - 1, 1); + } + + if (cab != 0) + { + t = -ddot(n - j + 1, a, j - 1 + (j - 1) * lda, 1, ab, j - 1, 1) + / a[j - 1 + (j - 1) * lda]; + daxpy(n - j + 1, t, a, j - 1 + (j - 1) * lda, 1, ab, j - 1, 1); + } + a[j - 1 + (j - 1) * lda] = temp; + } + } + } + + return info; + } + /******************************************************************************/ + + /******************************************************************************/ + + void dscal(int n, double sa, double[] x, int xStartIndex, int incx) + + /******************************************************************************/ + /* + Purpose: + + DSCAL scales a vector by a constant. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 30 March 2007 + + Author: + + C version by John Burkardt + + Reference: + + Jack Dongarra, Cleve Moler, Jim Bunch, Pete Stewart, + LINPACK User's Guide, + SIAM, 1979. + + Charles Lawson, Richard Hanson, David Kincaid, Fred Krogh, + Basic Linear Algebra Subprograms for Fortran Usage, + Algorithm 539, + ACM Transactions on Mathematical Software, + Volume 5, Number 3, September 1979, pages 308-323. + + Parameters: + + Input, int N, the number of entries in the vector. + + Input, double SA, the multiplier. + + Input/output, double X[*], the vector to be scaled. + + Input, int INCX, the increment between successive entries of X. + */ + { + int i; + int ix; + int m; + + if (n <= 0) + { + } + else if (incx == 1) + { + m = n % 5; + + for (i = 0; i < m; i++) + { + x[xStartIndex + i] = sa * x[xStartIndex + i]; + } + + for (i = m; i < n; i = i + 5) + { + x[xStartIndex + i] = sa * x[xStartIndex + i]; + x[xStartIndex + i + 1] = sa * x[xStartIndex + i + 1]; + x[xStartIndex + i + 2] = sa * x[xStartIndex + i + 2]; + x[xStartIndex + i + 3] = sa * x[xStartIndex + i + 3]; + x[xStartIndex + i + 4] = sa * x[xStartIndex + i + 4]; + } + } + else + { + if (0 <= incx) + { + ix = 0; + } + else + { + ix = (-n + 1) * incx; + } + + for (i = 0; i < n; i++) + { + x[xStartIndex + ix] = sa * x[xStartIndex + ix]; + ix = ix + incx; + } + } + return; + } + /******************************************************************************/ + + + void dswap(int n, double[] x, int xStartIndex, int incx, double[] y, int yStartIndex, int incy) + + /******************************************************************************/ + /* + Purpose: + + DSWAP interchanges two vectors. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 30 March 2007 + + Author: + + C version by John Burkardt + + Reference: + + Jack Dongarra, Cleve Moler, Jim Bunch, Pete Stewart, + LINPACK User's Guide, + SIAM, 1979. + + Charles Lawson, Richard Hanson, David Kincaid, Fred Krogh, + Basic Linear Algebra Subprograms for Fortran Usage, + Algorithm 539, + ACM Transactions on Mathematical Software, + Volume 5, Number 3, September 1979, pages 308-323. + + Parameters: + + Input, int N, the number of entries in the vectors. + + Input/output, double X[*], one of the vectors to swap. + + Input, int INCX, the increment between successive entries of X. + + Input/output, double Y[*], one of the vectors to swap. + + Input, int INCY, the increment between successive elements of Y. + */ + { + int i; + int ix; + int iy; + int m; + double temp; + + if (n <= 0) + { + } + else if (incx == 1 && incy == 1) + { + m = n % 3; + + for (i = 0; i < m; i++) + { + temp = x[xStartIndex + i]; + x[xStartIndex + i] = y[yStartIndex + i]; + y[yStartIndex + i] = temp; + } + + for (i = m; i < n; i = i + 3) + { + temp = x[xStartIndex + i]; + x[xStartIndex + i] = y[yStartIndex + i]; + y[yStartIndex + i] = temp; + + temp = x[xStartIndex + i + 1]; + x[xStartIndex + i + 1] = y[yStartIndex + i + 1]; + y[yStartIndex + i + 1] = temp; + + temp = x[xStartIndex + i + 2]; + x[xStartIndex + i + 2] = y[yStartIndex + i + 2]; + y[yStartIndex + i + 2] = temp; + } + } + else + { + if (0 <= incx) + { + ix = 0; + } + else + { + ix = (-n + 1) * incx; + } + + if (0 <= incy) + { + iy = 0; + } + else + { + iy = (-n + 1) * incy; + } + + for (i = 0; i < n; i++) + { + temp = x[xStartIndex + ix]; + x[xStartIndex + ix] = y[yStartIndex + iy]; + y[yStartIndex + iy] = temp; + ix = ix + incx; + iy = iy + incy; + } + + } + + return; + } + /******************************************************************************/ + + /******************************************************************************/ + + double[] qr_solve(int m, int n, double[] a, double[] b) + + /******************************************************************************/ + /* + Purpose: + + QR_SOLVE solves a linear system in the least squares sense. + + Discussion: + + If the matrix A has full column rank, then the solution X should be the + unique vector that minimizes the Euclidean norm of the residual. + + If the matrix A does not have full column rank, then the solution is + not unique; the vector X will minimize the residual norm, but so will + various other vectors. + + Licensing: + + This code is distributed under the GNU LGPL license. + + Modified: + + 11 September 2012 + + Author: + + John Burkardt + + Reference: + + David Kahaner, Cleve Moler, Steven Nash, + Numerical Methods and Software, + Prentice Hall, 1989, + ISBN: 0-13-627258-4, + LC: TA345.K34. + + Parameters: + + Input, int M, the number of rows of A. + + Input, int N, the number of columns of A. + + Input, double A[M*N], the matrix. + + Input, double B[M], the right hand side. + + Output, double QR_SOLVE[N], the least squares solution. + */ + { + double[] a_qr; + int ind; + int itask; + int[] jpvt; + int kr; + int lda; + double[] qraux; + double[] r; + double tol; + double[] x; + + a_qr = r8mat_copy_new(m, n, a); + lda = m; + tol = r8_epsilon() / r8mat_amax(m, n, a_qr); + x = new double[n]; + jpvt = new int[n]; + qraux = new double[n]; + r = new double[m]; + itask = 1; + + ind = dqrls(a_qr, lda, m, n, tol, out kr, b, x, r, jpvt, qraux, itask); + + return x; + } + /******************************************************************************/ +} +#endif \ No newline at end of file diff --git a/QRSolver/QRSolver.csproj b/QRSolver/QRSolver.csproj new file mode 100644 index 000000000..9d955ecab --- /dev/null +++ b/QRSolver/QRSolver.csproj @@ -0,0 +1,147 @@ + + + + Release + AnyCPU + 8.0.50727 + 2.0 + {826974F3-CA17-4D16-93F7-8009880CC792} + Library + Properties + MatterHackers.Plugins.QRSolver + QRSolver + + + + + 2.0 + v4.5 + + + + True + full + False + ..\bin\Debug\ + DEBUG;TRACE + prompt + 4 + True + x86 + false + + + pdbonly + True + ..\bin\Release\ + TRACE + prompt + 4 + True + x86 + false + + + false + + + bin\Release64\ + TRACE + true + true + pdbonly + x64 + ..\..\MatterControl\bin\Release\TextCreator.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + false + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + false + + + true + bin\Debug64\ + DEBUG;TRACE + true + full + x86 + prompt + false + false + + + true + bin\x64\Debug\ + DEBUG;TRACE + true + full + x64 + prompt + false + false + false + + + bin\x64\Release\ + TRACE + true + true + pdbonly + x64 + prompt + false + false + false + + + bin\x64\Release64\ + TRACE + true + true + pdbonly + x64 + ..\..\MatterControl\bin\Release\TextCreator.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + false + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + + + true + bin\x64\Debug64\ + DEBUG;TRACE + true + full + x64 + prompt + false + false + false + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/QRSolver/app.config b/QRSolver/app.config new file mode 100644 index 000000000..f4aff65b5 --- /dev/null +++ b/QRSolver/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Submodules/MatterSlice b/Submodules/MatterSlice index a72ba9c4e..90c1e9ebf 160000 --- a/Submodules/MatterSlice +++ b/Submodules/MatterSlice @@ -1 +1 @@ -Subproject commit a72ba9c4e6b6d780355da4b3b694a4b1a591713b +Subproject commit 90c1e9ebf7c99906b4843f680753e90a4c140af8