Index: Ringtoets/Integration/src/Ringtoets.Integration.IO/Exporters/AssemblyExporter.cs =================================================================== diff -u -r29144997c6a25b0f71d6348762859c9f848ef587 -ref362ecdfec2d2c0efb1696ba1bba1d731a66256 --- Ringtoets/Integration/src/Ringtoets.Integration.IO/Exporters/AssemblyExporter.cs (.../AssemblyExporter.cs) (revision 29144997c6a25b0f71d6348762859c9f848ef587) +++ Ringtoets/Integration/src/Ringtoets.Integration.IO/Exporters/AssemblyExporter.cs (.../AssemblyExporter.cs) (revision ef362ecdfec2d2c0efb1696ba1bba1d731a66256) @@ -21,8 +21,17 @@ using System; using Core.Common.Base.IO; +using Core.Common.IO.Exceptions; using Core.Common.Util; +using log4net; +using Ringtoets.AssemblyTool.Data; +using Ringtoets.AssemblyTool.IO; +using Ringtoets.AssemblyTool.IO.Model; +using Ringtoets.Common.Data.Exceptions; using Ringtoets.Integration.Data; +using Ringtoets.Integration.IO.Assembly; +using Ringtoets.Integration.IO.Creators; +using Ringtoets.Integration.IO.Factories; namespace Ringtoets.Integration.IO.Exporters { @@ -31,8 +40,9 @@ /// public class AssemblyExporter : IFileExporter { - private AssessmentSection assessmentSection; - private string filePath; + private static readonly ILog log = LogManager.GetLogger(typeof(AssemblyExporter)); + private readonly AssessmentSection assessmentSection; + private readonly string filePath; /// /// Creates a new instance of . @@ -56,7 +66,47 @@ public bool Export() { - throw new NotImplementedException(); + ExportableAssessmentSection exportableAssessmentSection; + try + { + exportableAssessmentSection = ExportableAssessmentSectionFactory.CreateExportableAssessmentSection(assessmentSection); + } + catch (AssemblyException) + { + LogErrorMessage(); + return false; + } + + if (!ValidateExportableAssessmentSection(exportableAssessmentSection)) + { + LogErrorMessage(); + return false; + } + + SerializableAssembly serializableAssembly = SerializableAssemblyCreator.Create(exportableAssessmentSection); + + try + { + SerializableAssemblyWriter.WriteAssembly(serializableAssembly, filePath); + } + catch (CriticalFileWriteException e) + { + log.ErrorFormat("{0} Er zijn geen assemblageresultaten geƫxporteerd.", e.Message); + return false; + } + + return true; } + + private static bool ValidateExportableAssessmentSection(ExportableAssessmentSection exportableAssessmentSection) + { + return !(exportableAssessmentSection.AssessmentSectionAssembly.AssemblyCategory == AssessmentSectionAssemblyCategoryGroup.None || + exportableAssessmentSection.AssessmentSectionAssembly.AssemblyCategory == AssessmentSectionAssemblyCategoryGroup.NotApplicable); + } + + private static void LogErrorMessage() + { + log.Error("Het is alleen mogelijk een volledig assemblageresultaat te exporteren."); + } } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Exporters/AssemblyExporterTest.cs =================================================================== diff -u -r29144997c6a25b0f71d6348762859c9f848ef587 -ref362ecdfec2d2c0efb1696ba1bba1d731a66256 --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Exporters/AssemblyExporterTest.cs (.../AssemblyExporterTest.cs) (revision 29144997c6a25b0f71d6348762859c9f848ef587) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Exporters/AssemblyExporterTest.cs (.../AssemblyExporterTest.cs) (revision ef362ecdfec2d2c0efb1696ba1bba1d731a66256) @@ -21,10 +21,16 @@ using System; using System.IO; +using Core.Common.Base.Geometry; using Core.Common.Base.IO; using Core.Common.TestUtil; using NUnit.Framework; +using Ringtoets.AssemblyTool.Data; +using Ringtoets.AssemblyTool.KernelWrapper.Calculators; +using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Calculators; +using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Calculators.Assembly; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.TestUtil; using Ringtoets.Integration.Data; using Ringtoets.Integration.IO.Exporters; @@ -76,5 +82,155 @@ // Assert Assert.IsInstanceOf(exporter); } + + [Test] + public void Export_CalculatorThrowsAssemblyException_LogsErrorAndReturnsFalse() + { + // Setup + string filePath = TestHelper.GetScratchPadPath(nameof(Export_CalculatorThrowsAssemblyException_LogsErrorAndReturnsFalse)); + AssessmentSection assessmentSection = CreateConfiguredAssessmentSection(); + + var exporter = new AssemblyExporter(assessmentSection, filePath); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssessmentSectionAssemblyCalculatorStub assessmentSectionAssemblyCalculator = calculatorFactory.LastCreatedAssessmentSectionAssemblyCalculator; + assessmentSectionAssemblyCalculator.ThrowExceptionOnCalculate = true; + + // Call + var isExported = true; + Action call = () => isExported = exporter.Export(); + + // Assert + var expectedMessage = "Het is alleen mogelijk een volledig assemblageresultaat te exporteren."; + TestHelper.AssertLogMessageWithLevelIsGenerated(call, new Tuple(expectedMessage, LogLevelConstant.Error)); + Assert.IsFalse(isExported); + } + } + + [Test] + [TestCase(AssessmentSectionAssemblyCategoryGroup.None)] + [TestCase(AssessmentSectionAssemblyCategoryGroup.NotApplicable)] + public void Export_InvalidAssessmentSectionCategoryGroupResults_LogsErrorAndReturnsFalse(AssessmentSectionAssemblyCategoryGroup invalidAssessmentSectionAssemblyCategoryGroup) + { + // Setup + string filePath = TestHelper.GetScratchPadPath(nameof(Export_InvalidAssessmentSectionCategoryGroupResults_LogsErrorAndReturnsFalse)); + AssessmentSection assessmentSection = CreateConfiguredAssessmentSection(); + + var exporter = new AssemblyExporter(assessmentSection, filePath); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssessmentSectionAssemblyCalculatorStub assessmentSectionAssemblyCalculator = calculatorFactory.LastCreatedAssessmentSectionAssemblyCalculator; + assessmentSectionAssemblyCalculator.AssembleAssessmentSectionCategoryGroupOutput = invalidAssessmentSectionAssemblyCategoryGroup; + + // Call + var isExported = true; + Action call = () => isExported = exporter.Export(); + + // Assert + var expectedMessage = "Het is alleen mogelijk een volledig assemblageresultaat te exporteren."; + TestHelper.AssertLogMessageWithLevelIsGenerated(call, new Tuple(expectedMessage, LogLevelConstant.Error)); + Assert.IsFalse(isExported); + } + } + + [Test] + public void Export_FullyConfiguredAssessmentSectionAndValidAssemblyResults_ReturnsTrueAndCreatesFile() + { + // Setup + string filePath = TestHelper.GetScratchPadPath(nameof(Export_InvalidAssessmentSectionCategoryGroupResults_LogsErrorAndReturnsFalse)); + AssessmentSection assessmentSection = CreateConfiguredAssessmentSection(); + + var exporter = new AssemblyExporter(assessmentSection, filePath); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssessmentSectionAssemblyCalculatorStub assessmentSectionAssemblyCalculator = calculatorFactory.LastCreatedAssessmentSectionAssemblyCalculator; + assessmentSectionAssemblyCalculator.AssembleAssessmentSectionCategoryGroupOutput = AssessmentSectionAssemblyCategoryGroup.A; + + // Call + bool isExported = exporter.Export(); + + // Assert + Assert.IsTrue(File.Exists(filePath)); + Assert.IsTrue(isExported); + + string expectedGmlFilePath = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.IO), + nameof(AssemblyExporter), "ExpectedGml.gml"); + string expectedGml = File.ReadAllText(expectedGmlFilePath); + string actualGml = File.ReadAllText(filePath); + Assert.AreEqual(expectedGml, actualGml); + } + } + + [Test] + public void Export_InvalidDirectorRights_LogsErrorAndReturnsFalse() + { + // Setup + string filePath = TestHelper.GetScratchPadPath(nameof(Export_InvalidDirectorRights_LogsErrorAndReturnsFalse)); + AssessmentSection assessmentSection = CreateConfiguredAssessmentSection(); + + var exporter = new AssemblyExporter(assessmentSection, filePath); + + using (var fileDisposeHelper = new FileDisposeHelper(filePath)) + using (new AssemblyToolCalculatorFactoryConfig()) + { + fileDisposeHelper.LockFiles(); + + // Call + var isExported = true; + Action call = () => isExported = exporter.Export(); + + // Assert + string expectedMessage = $"Er is een onverwachte fout opgetreden tijdens het schrijven van het bestand '{filePath}'. " + + "Er zijn geen assemblageresultaten geƫxporteerd."; + TestHelper.AssertLogMessageWithLevelIsGenerated(call, new Tuple(expectedMessage, LogLevelConstant.Error)); + Assert.IsFalse(isExported); + } + } + + private static AssessmentSection CreateConfiguredAssessmentSection() + { + var referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(new[] + { + new Point2D(1, 1), + new Point2D(2, 2) + }); + + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) + { + Name = "assessmentSectionName", + Id = "assessmentSectionId", + ReferenceLine = referenceLine + }; + + FailureMechanismTestHelper.AddSections(assessmentSection.Piping, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.MacroStabilityInwards, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverErosionInwards, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.HeightStructures, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.ClosingStructures, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.StabilityPointStructures, 2); + + FailureMechanismTestHelper.AddSections(assessmentSection.StabilityStoneCover, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.WaveImpactAsphaltCover, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverErosionOutwards, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.DuneErosion, 2); + + FailureMechanismTestHelper.AddSections(assessmentSection.MacroStabilityOutwards, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.Microstability, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverSlipOffOutwards, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.GrassCoverSlipOffInwards, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.PipingStructure, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.WaterPressureAsphaltCover, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.StrengthStabilityLengthwiseConstruction, 2); + FailureMechanismTestHelper.AddSections(assessmentSection.TechnicalInnovation, 2); + + return assessmentSection; + } } } \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Ringtoets.Integration.IO.Test.csproj =================================================================== diff -u -r29144997c6a25b0f71d6348762859c9f848ef587 -ref362ecdfec2d2c0efb1696ba1bba1d731a66256 --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Ringtoets.Integration.IO.Test.csproj (.../Ringtoets.Integration.IO.Test.csproj) (revision 29144997c6a25b0f71d6348762859c9f848ef587) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/Ringtoets.Integration.IO.Test.csproj (.../Ringtoets.Integration.IO.Test.csproj) (revision ef362ecdfec2d2c0efb1696ba1bba1d731a66256) @@ -191,5 +191,9 @@ {1C002B07-DDF6-4849-B8ED-551163AC9423} Ringtoets.Integration.IO.TestUtil + + {174BA68D-6176-4AC5-8DFD-98CDD2C4D971} + Ringtoets.Integration.TestUtil + \ No newline at end of file Index: Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/AssemblyExporter/ExpectedGml.gml =================================================================== diff -u --- Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/AssemblyExporter/ExpectedGml.gml (revision 0) +++ Ringtoets/Integration/test/Ringtoets.Integration.IO.Test/test-data/AssemblyExporter/ExpectedGml.gml (revision ef362ecdfec2d2c0efb1696ba1bba1d731a66256) @@ -0,0 +1,1515 @@ + + + + + 1 1 + 2 2 + + + + + assessmentSectionName + + + 1 1 2 2 + + + 1.4142135623730952 + Dijktraject + + + 2017 + 2023 + + + + WBI-2C-1 + A + VOLLDG + + + WBI-2B-1 + III-traject + 0.75 + VOLLDG + + + WBI-2A-1 + III-traject + VOLLDG + + + + STPH + GEDSPROBEX + DIRECT + + WBI-1B-1 + III-traject + 1 + VOLLDG + + + + STBI + GEDSPROBEX + DIRECT + + WBI-1B-1 + III-traject + 1 + VOLLDG + + + + GEKB + GEDPROB + DIRECT + + WBI-1B-1 + III-traject + 1 + VOLLDG + + + + HTKW + GEDPROB + DIRECT + + WBI-1B-1 + III-traject + 1 + VOLLDG + + + + BSKW + GEDPROB + DIRECT + + WBI-1B-1 + III-traject + 1 + VOLLDG + + + + STKWp + GEDPROB + DIRECT + + WBI-1B-1 + III-traject + 1 + VOLLDG + + + + ZST + GEDSPROB + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + AGK + GEDSPROB + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + GEBU + GEDSPROB + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + DA + GEDSPROB + DIRECT + + WBI-1A-1 + NVT + VOLLDG + + + + STBU + GEEN + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + STMI + GEEN + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + GABU + GEEN + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + GABI + GEEN + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + PKW + GEEN + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + AWO + GEEN + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + STKWl + GEEN + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + INN + GEEN + DIRECT + + WBI-1A-1 + II-traject + VOLLDG + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-1 + EENVDGETS + VII-vak + 1 + + + WBI-0G-5 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-5 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-1 + EENVDGETS + VII-vak + 1 + + + WBI-0G-5 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-5 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-1 + EENVDGETS + VII-vak + 1 + + + WBI-0G-5 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-5 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-1 + EENVDGETS + VII-vak + 1 + + + WBI-0G-5 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-5 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-3 + EENVDGETS + VII-vak + 1 + + + WBI-0G-3 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-3 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-3 + EENVDGETS + VII-vak + 1 + + + WBI-0G-3 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-3 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-1 + EENVDGETS + VII-vak + 1 + + + WBI-0G-3 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-3 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-1 + EENVDGETS + VII-vak + 1 + + + WBI-0G-3 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-3 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-1 + EENVDGETS + VII-vak + 1 + + + WBI-0G-3 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-3 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-1 + EENVDGETS + VII-vak + 1 + + + WBI-0G-3 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-3 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-3 + EENVDGETS + VII-vak + 1 + + + WBI-0G-3 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-3 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + VI-vak + 1 + + + WBI-0E-3 + EENVDGETS + VII-vak + 1 + + + WBI-0G-3 + GEDTETS + IV-vak + 0.25 + + + WBI-0T-3 + TOETSOPMT + VI-vak + 1 + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-3 + EENVDGETS + VII-vak + + + WBI-0G-6 + GEDTETS + II-vak + + + WBI-0T-4 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-3 + EENVDGETS + VII-vak + + + WBI-0G-6 + GEDTETS + II-vak + + + WBI-0T-4 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-6 + GEDTETS + II-vak + + + WBI-0T-4 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-6 + GEDTETS + II-vak + + + WBI-0T-4 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-6 + GEDTETS + II-vak + + + WBI-0T-4 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-6 + GEDTETS + II-vak + + + WBI-0T-4 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-3 + GEDTETS + IV-vak + + + WBI-0T-7 + TOETSOPMT + VI-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-3 + GEDTETS + IV-vak + + + WBI-0T-7 + TOETSOPMT + VI-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-1 + GEDTETS + II-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-1 + GEDTETS + II-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-1 + GEDTETS + II-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-1 + GEDTETS + II-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-1 + GEDTETS + II-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-1 + GEDTETS + II-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-1 + GEDTETS + II-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0G-1 + GEDTETS + II-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-0A-1 + GECBNTR + I-vak + + + WBI-0E-1 + EENVDGETS + VII-vak + + + WBI-0T-1 + TOETSOPMT + I-vak + + + + + WBI-3C-1 + GECBNTR + III-vak + + + WBI-3B-1 + STPH + VI-vak + VOLLDG + + + WBI-3B-1 + GEKB + VI-vak + VOLLDG + + + WBI-3B-1 + STBI + VI-vak + VOLLDG + + + WBI-3B-1 + STBU + VI-vak + VOLLDG + + + WBI-3B-1 + STMI + VI-vak + VOLLDG + + + WBI-3B-1 + ZST + VI-vak + VOLLDG + + + WBI-3B-1 + AGK + VI-vak + VOLLDG + + + WBI-3B-1 + AWO + VI-vak + VOLLDG + + + WBI-3B-1 + GEBU + VI-vak + VOLLDG + + + WBI-3B-1 + GABU + VI-vak + VOLLDG + + + WBI-3B-1 + GABI + VI-vak + VOLLDG + + + WBI-3B-1 + HTKW + VI-vak + VOLLDG + + + WBI-3B-1 + BSKW + VI-vak + VOLLDG + + + WBI-3B-1 + PKW + VI-vak + VOLLDG + + + WBI-3B-1 + STKWp + VI-vak + VOLLDG + + + WBI-3B-1 + STKWl + VI-vak + VOLLDG + + + WBI-3B-1 + DA + NVT + VOLLDG + + + WBI-3B-1 + INN + VI-vak + VOLLDG + + + + + + + + + + + + + + + + + + + + + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 11.313708498984761 + + + -1 -1 7 7 + + + 11.313708498984761 + TOETSSSTE + + + 11.313708498984761 + 22.627416997969522 + + + 7 7 15 15 + + + 11.313708498984761 + TOETSSSTE + + + 0 + 1 + + + 1 1 1.70710678118655 1.70710678118655 + + + 0.99999999999999989 + GECBNETSSTE + WBI-3A-1 + + + \ No newline at end of file