From 04d7c23c8f7d975c002916bf534f7961f3452ac0 Mon Sep 17 00:00:00 2001 From: ChiKyun Kim Date: Wed, 10 Sep 2025 17:36:20 +0900 Subject: [PATCH] =?UTF-8?q?file=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- csharp/dotnet/ProgramExact.cs | 661 ------------------ .../bin/Debug/net6.0/V2GDecoderNet.deps.json | 23 - .../dotnet/bin/Debug/net6.0/V2GDecoderNet.dll | Bin 37376 -> 0 bytes .../dotnet/bin/Debug/net6.0/V2GDecoderNet.exe | Bin 151040 -> 0 bytes .../dotnet/bin/Debug/net6.0/V2GDecoderNet.pdb | Bin 23040 -> 0 bytes .../net6.0/V2GDecoderNet.runtimeconfig.json | 9 - .../dotnet/bin/Debug/net8.0/V2GDecoderNet.dll | Bin 92160 -> 101376 bytes .../dotnet/bin/Debug/net8.0/V2GDecoderNet.exe | Bin 150016 -> 150016 bytes .../dotnet/bin/Debug/net8.0/V2GDecoderNet.pdb | Bin 41860 -> 48324 bytes .../net8.0/V2GDecoderNet.AssemblyInfo.cs | 2 +- .../V2GDecoderNet.AssemblyInfoInputs.cache | 2 +- ...GDecoderNet.csproj.CoreCompileInputs.cache | 2 +- .../dotnet/obj/Debug/net8.0/V2GDecoderNet.dll | Bin 92160 -> 101376 bytes .../dotnet/obj/Debug/net8.0/V2GDecoderNet.pdb | Bin 41860 -> 48324 bytes csharp/dotnet/obj/Debug/net8.0/apphost.exe | Bin 150016 -> 150016 bytes .../obj/Debug/net8.0/ref/V2GDecoderNet.dll | Bin 30720 -> 31232 bytes .../obj/Debug/net8.0/refint/V2GDecoderNet.dll | Bin 30720 -> 31232 bytes csharp/dotnetfx/App.config | 6 - csharp/dotnetfx/EXI/BitInputStream.cs | 219 ------ csharp/dotnetfx/EXI/BitOutputStream.cs | 239 ------- csharp/dotnetfx/EXI/ByteStream.cs | 202 ------ csharp/dotnetfx/EXI/EXITypes.cs | 222 ------ csharp/dotnetfx/EXI/ErrorCodes.cs | 134 ---- csharp/dotnetfx/Program.cs | 139 ---- csharp/dotnetfx/Properties/AssemblyInfo.cs | 36 - csharp/dotnetfx/SimpleProgram.cs | 139 ---- csharp/dotnetfx/V2G/EXIDecoder.cs | 265 ------- csharp/dotnetfx/V2G/EXIEncoder.cs | 275 -------- csharp/dotnetfx/V2G/SimpleV2GDecoder.cs | 134 ---- csharp/dotnetfx/V2G/V2GProtocol.cs | 206 ------ csharp/dotnetfx/V2GDecoderNetFx.csproj | 54 -- csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.exe | Bin 8192 -> 0 bytes .../bin/Debug/V2GDecoderNetFx.exe.config | 6 - csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.pdb | Bin 24064 -> 0 bytes csharp/dotnetfx/build.bat | 1 - ...amework,Version=v4.8.AssemblyAttributes.cs | 4 - ...ecoderNetFx.csproj.AssemblyReference.cache | Bin 1189 -> 0 bytes ...ecoderNetFx.csproj.CoreCompileInputs.cache | 1 - ...2GDecoderNetFx.csproj.FileListAbsolute.txt | 7 - csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.exe | Bin 8192 -> 0 bytes csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.pdb | Bin 24064 -> 0 bytes csharp/vc2022/V2GDecoder/V2GDecoder.vcxproj | 2 +- .../V2GDecoder/V2GDecoder.vcxproj.filters | 166 +++-- csharp/vc2022/V2GDecoderC.sln | 20 +- csharp/vc2022/build.bat | 28 - minimal_test.xml | 29 - struct_exi.txt | 38 +- test1._new.exi | 1 - test1.xml | 12 +- 49 files changed, 153 insertions(+), 3131 deletions(-) delete mode 100644 csharp/dotnet/ProgramExact.cs delete mode 100644 csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.deps.json delete mode 100644 csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.dll delete mode 100644 csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.exe delete mode 100644 csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.pdb delete mode 100644 csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.runtimeconfig.json delete mode 100644 csharp/dotnetfx/App.config delete mode 100644 csharp/dotnetfx/EXI/BitInputStream.cs delete mode 100644 csharp/dotnetfx/EXI/BitOutputStream.cs delete mode 100644 csharp/dotnetfx/EXI/ByteStream.cs delete mode 100644 csharp/dotnetfx/EXI/EXITypes.cs delete mode 100644 csharp/dotnetfx/EXI/ErrorCodes.cs delete mode 100644 csharp/dotnetfx/Program.cs delete mode 100644 csharp/dotnetfx/Properties/AssemblyInfo.cs delete mode 100644 csharp/dotnetfx/SimpleProgram.cs delete mode 100644 csharp/dotnetfx/V2G/EXIDecoder.cs delete mode 100644 csharp/dotnetfx/V2G/EXIEncoder.cs delete mode 100644 csharp/dotnetfx/V2G/SimpleV2GDecoder.cs delete mode 100644 csharp/dotnetfx/V2G/V2GProtocol.cs delete mode 100644 csharp/dotnetfx/V2GDecoderNetFx.csproj delete mode 100644 csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.exe delete mode 100644 csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.exe.config delete mode 100644 csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.pdb delete mode 100644 csharp/dotnetfx/build.bat delete mode 100644 csharp/dotnetfx/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs delete mode 100644 csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.AssemblyReference.cache delete mode 100644 csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.CoreCompileInputs.cache delete mode 100644 csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.FileListAbsolute.txt delete mode 100644 csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.exe delete mode 100644 csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.pdb delete mode 100644 minimal_test.xml delete mode 100644 test1._new.exi diff --git a/csharp/dotnet/ProgramExact.cs b/csharp/dotnet/ProgramExact.cs deleted file mode 100644 index f6a14c1..0000000 --- a/csharp/dotnet/ProgramExact.cs +++ /dev/null @@ -1,661 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * - * Exact EXI Codec Program - Byte-compatible with OpenV2G C implementation - * Produces identical binary output to original C code - */ - -using System; -using System.IO; -using System.Linq; -using V2GDecoderNet.EXI; -using V2GDecoderNet.V2G; - -namespace V2GDecoderNet -{ - class ProgramExact - { - static void Main(string[] args) - { - Console.WriteLine("=== V2GDecoderNet - Exact EXI Codec ==="); - Console.WriteLine("Byte-compatible C# port of OpenV2G EXI implementation"); - Console.WriteLine(); - - if (args.Length < 1) - { - ShowUsage(); - return; - } - - try - { - string command = args[0].ToLower(); - - switch (command) - { - case "decode-exact": - if (args.Length < 2) - { - Console.WriteLine("Error: Input file required for decode-exact command"); - ShowUsage(); - return; - } - DecodeFileExact(args[1], args.Length > 2 ? args[2] : null); - break; - - case "encode-exact": - if (args.Length < 2) - { - Console.WriteLine("Error: Input file required for encode-exact command"); - ShowUsage(); - return; - } - EncodeFileExact(args[1], args.Length > 2 ? args[2] : null); - break; - - case "test-exact": - RunExactRoundtripTest(args.Length > 1 ? args[1] : "../../test1.exi"); - break; - - case "test-all-exact": - TestAllFilesExact(); - break; - - case "debug-bits": - if (args.Length < 2) - { - Console.WriteLine("Error: debug-bits requires input file"); - ShowUsage(); - return; - } - DebugBitLevel(args[1]); - break; - - case "decode-req": - if (args.Length < 2) - { - Console.WriteLine("Error: decode-req requires input file"); - ShowUsage(); - return; - } - DecodeCurrentDemandReqDirect(args[1]); - break; - - default: - Console.WriteLine($"Error: Unknown command '{command}'"); - ShowUsage(); - break; - } - } - catch (Exception ex) - { - Console.WriteLine($"Error: {ex.Message}"); - if (ex is EXIExceptionExact exiEx) - { - Console.WriteLine($"EXI Error Code: {exiEx.ErrorCode}"); - Console.WriteLine($"EXI Error: {EXIExceptionExact.GetErrorMessage(exiEx.ErrorCode)}"); - } -#if DEBUG - Console.WriteLine($"Stack Trace: {ex.StackTrace}"); -#endif - } - } - - static void ShowUsage() - { - Console.WriteLine("Usage:"); - Console.WriteLine(" V2GDecoderNet decode-exact [output.xml]"); - Console.WriteLine(" V2GDecoderNet encode-exact [output.exi]"); - Console.WriteLine(" V2GDecoderNet test-exact [input.exi]"); - Console.WriteLine(" V2GDecoderNet test-all-exact"); - Console.WriteLine(); - Console.WriteLine("Examples:"); - Console.WriteLine(" V2GDecoderNet decode-exact test1.exi test1_exact.xml"); - Console.WriteLine(" V2GDecoderNet test-exact test1.exi"); - Console.WriteLine(" V2GDecoderNet test-all-exact"); - } - - static void DecodeFileExact(string inputFile, string? outputFile = null) - { - Console.WriteLine($"Exact decoding: {inputFile}"); - - if (!File.Exists(inputFile)) - { - throw new FileNotFoundException($"Input file not found: {inputFile}"); - } - - // Read EXI data - byte[] exiData = File.ReadAllBytes(inputFile); - Console.WriteLine($"Read {exiData.Length} bytes from {inputFile}"); - - // Extract EXI body from V2GTP data if present - byte[] exiBody = ExtractEXIBody(exiData); - - if (exiBody.Length != exiData.Length) - { - Console.WriteLine($"Extracted EXI body: {exiBody.Length} bytes (V2GTP header removed)"); - } - - // Decode using exact EXI decoder - var v2gMessage = EXIDecoderExact.DecodeV2GMessage(exiBody); - - // Debug: Print decoded message values - Console.WriteLine("\n=== Decoded Message Debug Info ==="); - if (v2gMessage.Body.CurrentDemandReq_isUsed) - { - var req = v2gMessage.Body.CurrentDemandReq; - Console.WriteLine($"CurrentDemandReq detected:"); - Console.WriteLine($" EVRESSSOC: {req.DC_EVStatus.EVRESSSOC}"); - Console.WriteLine($" EVReady: {req.DC_EVStatus.EVReady}"); - Console.WriteLine($" EVErrorCode: {req.DC_EVStatus.EVErrorCode}"); - Console.WriteLine($" EVTargetCurrent: Mult={req.EVTargetCurrent.Multiplier}, Unit={req.EVTargetCurrent.Unit}, Value={req.EVTargetCurrent.Value}"); - Console.WriteLine($" EVMaximumVoltageLimit_isUsed: {req.EVMaximumVoltageLimit_isUsed}"); - if (req.EVMaximumVoltageLimit_isUsed) - Console.WriteLine($" EVMaximumVoltageLimit: Mult={req.EVMaximumVoltageLimit.Multiplier}, Unit={req.EVMaximumVoltageLimit.Unit}, Value={req.EVMaximumVoltageLimit.Value}"); - Console.WriteLine($" ChargingComplete: {req.ChargingComplete} (isUsed: {req.ChargingComplete_isUsed})"); - Console.WriteLine($" EVTargetVoltage: Mult={req.EVTargetVoltage.Multiplier}, Unit={req.EVTargetVoltage.Unit}, Value={req.EVTargetVoltage.Value}"); - } - Console.WriteLine("=====================================\n"); - - // Convert to XML representation - string xmlOutput = MessageToXml(v2gMessage); - - // Determine output file name - outputFile ??= Path.ChangeExtension(inputFile, "_exact.xml"); - - // Write XML output - File.WriteAllText(outputFile, xmlOutput); - Console.WriteLine($"XML written to: {outputFile}"); - Console.WriteLine($"XML size: {xmlOutput.Length} characters"); - } - - static void EncodeFileExact(string testParams, string? outputFile = null) - { - Console.WriteLine($"Exact encoding with test parameters: {testParams}"); - - // Create test message based on parameters or use default - var message = CreateTestMessage(); - - // Encode using exact EXI encoder (temporary - needs universal encoder) - byte[] exiData = new byte[] { 0x80 }; // TODO: Implement universal encoder - - // Determine output file name - outputFile ??= "test_exact_output.exi"; - - // Write EXI output - File.WriteAllBytes(outputFile, exiData); - Console.WriteLine($"EXI written to: {outputFile}"); - Console.WriteLine($"EXI size: {exiData.Length} bytes"); - - // Show hex dump - Console.WriteLine("Hex dump:"); - ShowHexDump(exiData, 0, Math.Min(64, exiData.Length)); - } - - static void RunExactRoundtripTest(string inputFile) - { - Console.WriteLine($"Running exact roundtrip test on: {inputFile}"); - - if (!File.Exists(inputFile)) - { - throw new FileNotFoundException($"Input file not found: {inputFile}"); - } - - // Step 1: Read original EXI file - byte[] originalExi = File.ReadAllBytes(inputFile); - Console.WriteLine($"Original EXI size: {originalExi.Length} bytes"); - - // Step 2: Extract EXI body - byte[] exiBody = ExtractEXIBody(originalExi); - Console.WriteLine($"EXI body size: {exiBody.Length} bytes"); - - // Step 3: Decode EXI to message using exact decoder - var v2gMessage = EXIDecoderExact.DecodeV2GMessage(exiBody); - Console.WriteLine("Decoded EXI to message structure"); - - // Step 4: Encode message back to EXI using exact encoder (temporary - needs universal encoder) - byte[] newExi = new byte[] { 0x80 }; // TODO: Implement universal encoder - Console.WriteLine($"Encoded message to EXI: {newExi.Length} bytes"); - - // Step 5: Compare original vs new EXI - bool identical = exiBody.SequenceEqual(newExi); - - Console.WriteLine(); - Console.WriteLine("=== Exact Roundtrip Test Results ==="); - Console.WriteLine($"Original EXI body: {exiBody.Length} bytes"); - Console.WriteLine($"New EXI: {newExi.Length} bytes"); - Console.WriteLine($"Files identical: {(identical ? "YES ✓" : "NO ✗")}"); - - if (!identical) - { - Console.WriteLine(); - Console.WriteLine("Differences found:"); - ShowDifferences(exiBody, newExi); - - // Save files for comparison - string originalFile = Path.ChangeExtension(inputFile, "_original_body.exi"); - string newFile = Path.ChangeExtension(inputFile, "_new_exact.exi"); - File.WriteAllBytes(originalFile, exiBody); - File.WriteAllBytes(newFile, newExi); - Console.WriteLine($"Saved original body to: {originalFile}"); - Console.WriteLine($"Saved new EXI to: {newFile}"); - } - - Console.WriteLine(); - Console.WriteLine(identical ? "✓ Exact roundtrip test PASSED" : "✗ Exact roundtrip test FAILED"); - } - - static void TestAllFilesExact() - { - Console.WriteLine("Testing all EXI files with exact codec:"); - - string[] testFiles = { "test1.exi", "test2.exi", "test3.exi", "test4.exi", "test5.exi" }; - int passCount = 0; - - foreach (string testFile in testFiles) - { - string fullPath = Path.Combine("../../", testFile); - if (File.Exists(fullPath)) - { - Console.WriteLine($"\n--- Testing {testFile} ---"); - try - { - RunExactRoundtripTest(fullPath); - passCount++; - } - catch (Exception ex) - { - Console.WriteLine($"FAILED: {ex.Message}"); - } - } - else - { - Console.WriteLine($"Skipping {testFile} - file not found"); - } - } - - Console.WriteLine($"\n=== Summary: {passCount}/{testFiles.Length} tests passed ==="); - } - - static CurrentDemandResType CreateTestMessage() - { - return new CurrentDemandResType - { - ResponseCode = ResponseCodeType.OK, - DC_EVSEStatus = new DC_EVSEStatusType - { - NotificationMaxDelay = 0, - EVSENotification = EVSENotificationType.None, - EVSEIsolationStatus = IsolationLevelType.Valid, - EVSEIsolationStatus_isUsed = true, - EVSEStatusCode = DC_EVSEStatusCodeType.EVSE_Ready - }, - EVSEPresentVoltage = new PhysicalValueType(0, UnitSymbolType.V, 450), - EVSEPresentCurrent = new PhysicalValueType(0, UnitSymbolType.A, 5), - EVSECurrentLimitAchieved = false, - EVSEVoltageLimitAchieved = false, - EVSEPowerLimitAchieved = false, - EVSEID = "Z", - SAScheduleTupleID = 1 - }; - } - - /// - /// Convert V2G message to XML format matching C print_iso1_xml_wireshark() exactly - /// - static string MessageToXml(V2GMessageExact v2gMessage) - { - var xml = new System.Text.StringBuilder(); - - // XML Header with full namespace declarations (matching C print_xml_header_wireshark) - xml.AppendLine(@""); - xml.Append(@""); - - // Header with SessionID - xml.Append(""); - if (!string.IsNullOrEmpty(v2gMessage.SessionID)) - { - xml.Append(v2gMessage.SessionID); - } - else - { - // Default SessionID like C decoder output - xml.Append("4142423030303831"); - } - xml.AppendLine(""); - - // Body - xml.Append(""); - - if (v2gMessage.Body.CurrentDemandReq_isUsed) - { - WriteCurrentDemandReqXml(xml, v2gMessage.Body.CurrentDemandReq); - } - else if (v2gMessage.Body.CurrentDemandRes_isUsed) - { - WriteCurrentDemandResXml(xml, v2gMessage.Body.CurrentDemandRes); - } - else - { - xml.Append("Message type not recognized"); - } - - xml.Append(""); - xml.Append(""); - - return xml.ToString(); - } - - /// - /// Write CurrentDemandReq XML matching C source exactly - /// - static void WriteCurrentDemandReqXml(System.Text.StringBuilder xml, CurrentDemandReqType req) - { - xml.Append(""); - - // DC_EVStatus - xml.Append(""); - xml.Append($"{(req.DC_EVStatus.EVReady ? "true" : "false")}"); - xml.Append($"{req.DC_EVStatus.EVErrorCode}"); - xml.Append($"{req.DC_EVStatus.EVRESSSOC}"); - xml.Append(""); - - // EVTargetCurrent - xml.Append(""); - xml.Append($"{req.EVTargetCurrent.Multiplier}"); - xml.Append($"{(int)req.EVTargetCurrent.Unit}"); - xml.Append($"{req.EVTargetCurrent.Value}"); - xml.Append(""); - - // EVMaximumVoltageLimit (optional) - if (req.EVMaximumVoltageLimit_isUsed && req.EVMaximumVoltageLimit != null) - { - xml.Append(""); - xml.Append($"{req.EVMaximumVoltageLimit.Multiplier}"); - xml.Append($"{(int)req.EVMaximumVoltageLimit.Unit}"); - xml.Append($"{req.EVMaximumVoltageLimit.Value}"); - xml.Append(""); - } - - // EVMaximumCurrentLimit (optional) - if (req.EVMaximumCurrentLimit_isUsed && req.EVMaximumCurrentLimit != null) - { - xml.Append(""); - xml.Append($"{req.EVMaximumCurrentLimit.Multiplier}"); - xml.Append($"{(int)req.EVMaximumCurrentLimit.Unit}"); - xml.Append($"{req.EVMaximumCurrentLimit.Value}"); - xml.Append(""); - } - - // EVMaximumPowerLimit (optional) - if (req.EVMaximumPowerLimit_isUsed && req.EVMaximumPowerLimit != null) - { - xml.Append(""); - xml.Append($"{req.EVMaximumPowerLimit.Multiplier}"); - xml.Append($"{(int)req.EVMaximumPowerLimit.Unit}"); - xml.Append($"{req.EVMaximumPowerLimit.Value}"); - xml.Append(""); - } - - // BulkChargingComplete (optional) - if (req.BulkChargingComplete_isUsed) - { - xml.Append($"{(req.BulkChargingComplete ? "true" : "false")}"); - } - - // ChargingComplete (always present) - xml.Append($"{(req.ChargingComplete ? "true" : "false")}"); - - // RemainingTimeToFullSoC (optional) - if (req.RemainingTimeToFullSoC_isUsed && req.RemainingTimeToFullSoC != null) - { - xml.Append(""); - xml.Append($"{req.RemainingTimeToFullSoC.Multiplier}"); - xml.Append($"{(int)req.RemainingTimeToFullSoC.Unit}"); - xml.Append($"{req.RemainingTimeToFullSoC.Value}"); - xml.Append(""); - } - - // RemainingTimeToBulkSoC (optional) - if (req.RemainingTimeToBulkSoC_isUsed && req.RemainingTimeToBulkSoC != null) - { - xml.Append(""); - xml.Append($"{req.RemainingTimeToBulkSoC.Multiplier}"); - xml.Append($"{(int)req.RemainingTimeToBulkSoC.Unit}"); - xml.Append($"{req.RemainingTimeToBulkSoC.Value}"); - xml.Append(""); - } - - // EVTargetVoltage (must come last according to EXI grammar) - if (req.EVTargetVoltage != null) - { - xml.Append(""); - xml.Append($"{req.EVTargetVoltage.Multiplier}"); - xml.Append($"{(int)req.EVTargetVoltage.Unit}"); - xml.Append($"{req.EVTargetVoltage.Value}"); - xml.Append(""); - } - - xml.Append(""); - } - - /// - /// Write CurrentDemandRes XML matching C source exactly - /// - static void WriteCurrentDemandResXml(System.Text.StringBuilder xml, CurrentDemandResType res) - { - xml.Append(""); - xml.Append($"{res.ResponseCode}"); - - xml.Append(""); - xml.Append($"{res.DC_EVSEStatus.EVSEIsolationStatus}"); - xml.Append($"{res.DC_EVSEStatus.EVSEStatusCode}"); - xml.Append(""); - - if (res.EVSEPresentVoltage != null) - { - xml.Append(""); - xml.Append($"{res.EVSEPresentVoltage.Multiplier}"); - xml.Append($"{(int)res.EVSEPresentVoltage.Unit}"); - xml.Append($"{res.EVSEPresentVoltage.Value}"); - xml.Append(""); - } - - if (res.EVSEPresentCurrent != null) - { - xml.Append(""); - xml.Append($"{res.EVSEPresentCurrent.Multiplier}"); - xml.Append($"{(int)res.EVSEPresentCurrent.Unit}"); - xml.Append($"{res.EVSEPresentCurrent.Value}"); - xml.Append(""); - } - - xml.Append($"{(res.EVSECurrentLimitAchieved ? "true" : "false")}"); - xml.Append($"{(res.EVSEVoltageLimitAchieved ? "true" : "false")}"); - xml.Append($"{(res.EVSEPowerLimitAchieved ? "true" : "false")}"); - xml.Append($"{res.EVSEID}"); - xml.Append($"{res.SAScheduleTupleID}"); - - xml.Append(""); - } - - static byte[] ExtractEXIBody(byte[] inputData) - { - if (inputData == null || inputData.Length < 8) - return inputData ?? new byte[0]; - - // First, look for V2G Transfer Protocol header anywhere in the data - // Pattern: 0x01 0xFE 0x80 0x01 (V2GTP header for ISO/DIN/SAP) - for (int i = 0; i <= inputData.Length - 8; i++) - { - if (inputData[i] == 0x01 && inputData[i + 1] == 0xFE) - { - ushort payloadType = (ushort)((inputData[i + 2] << 8) | inputData[i + 3]); - - if (payloadType == 0x8001 || payloadType == 0x8002) // V2G_PAYLOAD_ISO_DIN_SAP or V2G_PAYLOAD_ISO2 - { - // Valid V2GTP header found: skip 8-byte header to get EXI body - int exiStart = i + 8; - var exiBody = new byte[inputData.Length - exiStart]; - Array.Copy(inputData, exiStart, exiBody, 0, exiBody.Length); - return exiBody; - } - } - } - - // If no V2GTP header found, look for EXI start pattern (0x8098) anywhere in the data - for (int i = 0; i <= inputData.Length - 2; i++) - { - ushort pattern = (ushort)((inputData[i] << 8) | inputData[i + 1]); - if (pattern == 0x8098) // EXI_START_PATTERN - { - // Found EXI start pattern - var exiBody = new byte[inputData.Length - i]; - Array.Copy(inputData, i, exiBody, 0, exiBody.Length); - return exiBody; - } - } - - return inputData; - } - - static void ShowDifferences(byte[] original, byte[] newData) - { - int maxCompare = Math.Min(original.Length, newData.Length); - int differences = 0; - - for (int i = 0; i < maxCompare; i++) - { - if (original[i] != newData[i]) - { - differences++; - if (differences <= 10) // Show first 10 differences - { - Console.WriteLine($" Offset {i:X4}: {original[i]:X2} -> {newData[i]:X2}"); - } - } - } - - if (differences > 10) - { - Console.WriteLine($" ... and {differences - 10} more differences"); - } - - if (original.Length != newData.Length) - { - Console.WriteLine($" Size difference: {newData.Length - original.Length} bytes"); - } - } - - static void ShowHexDump(byte[] data, int offset, int length) - { - for (int i = offset; i < offset + length && i < data.Length; i += 16) - { - Console.Write($"{i:X4}: "); - - // Show hex bytes - for (int j = 0; j < 16 && i + j < data.Length && i + j < offset + length; j++) - { - Console.Write($"{data[i + j]:X2} "); - } - - Console.WriteLine(); - } - } - - static void DebugBitLevel(string exiFilePath) - { - byte[] data = File.ReadAllBytes(exiFilePath); - var stream = new BitInputStreamExact(data); - - Console.WriteLine("=== Exact Bit-Level Analysis ==="); - Console.WriteLine($"Total bytes: {data.Length}"); - Console.WriteLine($"Hex: {BitConverter.ToString(data)}"); - - // Skip EXI header (0x80) - int headerByte = stream.ReadNBitUnsignedInteger(8); - Console.WriteLine($"EXI Header: 0x{headerByte:X2} at position {stream.Position}, bit {stream.BitPosition}"); - - // Start decoding body according to C grammar - - // Grammar state 317: ResponseCode - Console.WriteLine($"\n--- Grammar State 317: ResponseCode ---"); - Console.WriteLine($"Position: {stream.Position}, bit: {stream.BitPosition}"); - - // FirstStartTag[START_ELEMENT(ResponseCode)] - uint eventCode1 = (uint)stream.ReadNBitUnsignedInteger(1); - Console.WriteLine($"Event code 1 (1-bit): {eventCode1} at pos {stream.Position}, bit {stream.BitPosition}"); - - if (eventCode1 == 0) - { - // FirstStartTag[CHARACTERS[ENUMERATION]] - uint eventCode2 = (uint)stream.ReadNBitUnsignedInteger(1); - Console.WriteLine($"Event code 2 (1-bit): {eventCode2} at pos {stream.Position}, bit {stream.BitPosition}"); - - if (eventCode2 == 0) - { - int responseCode = stream.ReadNBitUnsignedInteger(5); - Console.WriteLine($"ResponseCode (5-bit): {responseCode} at pos {stream.Position}, bit {stream.BitPosition}"); - - // valid EE for simple element ResponseCode? - uint eventCode3 = (uint)stream.ReadNBitUnsignedInteger(1); - Console.WriteLine($"Event code 3 (1-bit): {eventCode3} at pos {stream.Position}, bit {stream.BitPosition}"); - } - } - - Console.WriteLine($"\nContinuing to read more data to find alignment..."); - // Skip ahead to find where we should be - for (int i = 0; i < 10 && !stream.IsEndOfStream; i++) - { - int nextByte = stream.ReadNBitUnsignedInteger(8); - Console.WriteLine($"Byte {i}: 0x{nextByte:X2} at pos {stream.Position}, bit {stream.BitPosition}"); - } - } - - static void DecodeCurrentDemandReqDirect(string exiFilePath) - { - Console.WriteLine("=== Direct CurrentDemandReq Decoding Test ==="); - - byte[] data = File.ReadAllBytes(exiFilePath); - Console.WriteLine($"Input file: {exiFilePath}, size: {data.Length} bytes"); - Console.WriteLine($"Hex: {BitConverter.ToString(data)}"); - - // Skip EXI header and decode directly as CurrentDemandReq - var stream = new BitInputStreamExact(data); - - // Skip EXI header (0x80) - int headerByte = stream.ReadNBitUnsignedInteger(8); - Console.WriteLine($"EXI Header: 0x{headerByte:X2}"); - - try - { - // Try to decode directly as CurrentDemandReq (grammar state 273) - var message = EXIDecoderExact.DecodeCurrentDemandReq(stream); - - Console.WriteLine("\n=== Successfully decoded CurrentDemandReq ==="); - Console.WriteLine($"DC_EVStatus:"); - Console.WriteLine($" EVReady: {message.DC_EVStatus.EVReady}"); - Console.WriteLine($" EVErrorCode: {message.DC_EVStatus.EVErrorCode}"); - Console.WriteLine($" EVRESSSOC: {message.DC_EVStatus.EVRESSSOC}%"); - - Console.WriteLine($"EVTargetCurrent:"); - Console.WriteLine($" Multiplier: {message.EVTargetCurrent.Multiplier}"); - Console.WriteLine($" Unit: {message.EVTargetCurrent.Unit}"); - Console.WriteLine($" Value: {message.EVTargetCurrent.Value}"); - - Console.WriteLine($"EVTargetVoltage:"); - Console.WriteLine($" Multiplier: {message.EVTargetVoltage.Multiplier}"); - Console.WriteLine($" Unit: {message.EVTargetVoltage.Unit}"); - Console.WriteLine($" Value: {message.EVTargetVoltage.Value}"); - } - catch (Exception ex) - { - Console.WriteLine($"\nDecoding failed: {ex.Message}"); - Console.WriteLine($"Stack trace: {ex.StackTrace}"); - } - } - } -} \ No newline at end of file diff --git a/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.deps.json b/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.deps.json deleted file mode 100644 index cd50977..0000000 --- a/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.deps.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v6.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v6.0": { - "V2GDecoderNet/1.0.0": { - "runtime": { - "V2GDecoderNet.dll": {} - } - } - } - }, - "libraries": { - "V2GDecoderNet/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.dll b/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.dll deleted file mode 100644 index c11851367104178f8423948b18fc823cc9f67356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37376 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 diff --git a/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.exe b/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.exe deleted file mode 100644 index 016e874ea0ebecc16482f6ea0673e0debf2aa3e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151040 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 z 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

wl_fEP|tz6Qyt;H!Pgd96$~f&t;CX7 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 diff --git a/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.runtimeconfig.json b/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.runtimeconfig.json deleted file mode 100644 index 4986d16..0000000 --- a/csharp/dotnet/bin/Debug/net6.0/V2GDecoderNet.runtimeconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "net6.0", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "6.0.0" - } - } -} \ No newline at end of file diff --git a/csharp/dotnet/bin/Debug/net8.0/V2GDecoderNet.dll b/csharp/dotnet/bin/Debug/net8.0/V2GDecoderNet.dll index 6cf9d7be8cf5bf968e60088f5fc799f9d9a1df04..e56dbd8d69c4c75ffbf9b216e3986f476a9f61b5 100644 GIT binary patch literal 101376 zcmd@7d3+Q_{y&aachB_PVJ0Cn2?S<10+UP<0tqk)2nhlTf`TH4#{yo+A%h)I1VQk? z8;J*AxZ-`T$9n5}F1qO36J2%JHLJUx>#-i|u^#w+zFt+`(*udH`g#2R`SBpt^?KE- zUiGS1z3NqG_e?%$gD`{;9{m0ElMwggN&i|n{P|!Fl8cfL7Kyt9&-J-qoAg|tX-Cg* zOD(Z-^Q^hYqz<3EcyVrN>aZhI*0RN^`HNFy_d6hUOzwyy>mre0f5m#rI3Xr!hUokF zXZP5py(RjJkXA3m$(j&;iM{PA#8Zerh9^l!ab3!d7|TyjMgmX&3^C_4A)@?0|5TtP z5r=^9eiR4akG%@%e!QiLFyQ5zH8IVN-&H*2h|ZLLz0%**87*GoiFs-wA`#RRM0joiVa!eFjd^Q=A`xQ3%si1U0SBuOk#t84dA3LNWawME-P{QxuVo6~b5I zkNHt)e;Vy-mY5y&!f&S0*(lz>B%pFv>S9SOkSj;_LLMC=W>#x3Um>=OWG}5h6rhoQ z|4C{g{R%zZgR=ER5Hu;b8S>TmeCr`$MoU2D<*JYaQHZQ}X^H2}Yrr5~flOh42`Mrq z(!Btcm@(5A_pP6w>kSB{=aTdknaNZcU%bShX^i<|{&vV7Pqd{dORzW?3s`4@eHsm! z5yioDU*OaIIA_eCm`PfQf$5MfX>@w9Lo1{DAtl*)RQ=G-)%T$Ko@ycMuZf5LAXNPg zu?Uri8oBP(}-$bTzOgo;X^0q(~?|pfqT&-K`0)1;6GLU!WEfY5{r7v)x0M zRC_-&-mXiFvAmRz3$!8>WiiY&d^Gx_nTDG}JFlOQOm!yJoqA3n7HE2s6kx@iEXmTm zbkUsLF35YHiv|Td8tW==FITy@yYix3WS_OG{KA)p*_&a1&WA@yFcz#C zE{u{;EL0N}{#<~Rz&a6`9)Lp*T#yzo33rTBR`z!Y;m<{g(A`hNFvN(vA4YaI#4rpo zT-}Q9LjPdoVk``19R6qwqdr-JKKXYfpnYP(3V7@mD;CM(L^=g)DHhfQLQ7L5=ciO4 zESCy}OZ_0}vE75VMTedQzuBHFJ4{csC!>eW(aYLd7^!esxtK+^3*72peOI+8srQPj zPzd^9jM}mHc2Cf(@e4haJqPGcBnkU#juqTy)MPJ3^d8)nJ!M-~a9j3jpHt!qq_j0c z)CB`69Z&Y)?45^*-Z9V2#VBlnQ+bR%G0(X}$@qMF@0c$h^Q1H6tYW@U22Mf`WrVM~ zub!?UWOZ+SB^<8@2xApTfIzR22#x@Ose?pt1PF8&iBJ*6O!R~fE6TMWsK7V)4|i*Pv5>8u`o|$}vSGfZd|U>unI_ ziYOV0H6>oLLwc!+LBs3nt2S-Hm~r?KqK5h>$$J9&E1XG8wADf*LHN&N9lg_+uA}a$ zTa&>tJ&2T5tQ%>}Jt<-x>cZv*135ruEX!wH<|1)2D%#u-&SKpFnp{IZducxVe>=-= zC46~lBroAfH-bUL8c0cKc#J^SY$xuuu5jX}^_mm+1#-iPmd0R@)zgo>!vW{AgbXmU zst_48tp;F}xONSWbWpJX8k$}40uc+uyw)iN`73KZ1G;Ct=_V>591EwL5uqL%iACVV zfxuMHEGdE>lc9vKjnp58rY|NgO8>DUy8%?)VJk|Lx98;uk{sP)-D)O?STJT2pIk(1Hp6^mj3_R+l2%#DB)@XdCThvtnowj*0oOye!=C6#Zts(?%0 zVrhxWYLw6&;4qT3P?8a`63iKdJ%-$m_=y-V8ex-Y2xP_Dsp=o+^j**^3z=>`%LNr z#R1q{%rE%>mX|lq}mcpgOc-(#^$03%Zz?oUsp~ zI?Y(*%2?^n=-Vly)#^%D#minGOx^HU<0u(R9c8ABJF*kpX`SHi>;(5_Ar1}a4WR_b zTeuq|jMPD0rbcXC$6d9ZO5{q{ep0pR-yKaCyI7p$Vi8~#fuCiedW+ zCp&8pmK;Q9rT!R%g<{ykIB$6KilC8BV2xR5E zCJTeC->%6b#b&ayhn%CCUbVh4twEGi_D|F2V5hpUeg}J`3mb5-my zXgRPD6P>`%4Lw*ZI71JHp_(QPIv9d5skl)KRfOX5fB?gTBFyj@xKuf2;uZ;*J8S@`+fYCTv=FBCG6rOvj$RfUYc7Ms(j4(y_NM zpev7+6Wty~1^f!f04ldftOwDZR7l4Twt!#HSWlw+V<8!>nhMVUALEe0%mtyX9Ct6zNT{~SQqt1weCW)Ot3ye zRBlf4vH*z#i*5dT?rY?&=_Q}JPY8%A;3EKN1*WXiCfLy~F_ zL(fsp+&c(LJjI^$p75(Va!AUw4eLV}b#5$D21the@(g_?J289@43&2_tc)w&%_5m+ zG1Wz)Wct9(;#gO@VqskXoLUd)xj%xMjGi_{{wY=PfRipI?vpR>T^Bo>PmOBNaR_}a*-$&YlsCJnx#0_m2Ox1Y~Y+q{|VGJ zAw7rPL}hEVLU8KuknW=Xl>JxMpIQ96`ZJ4N*8g*-QbN!DpQ``U`TAq#Vb?!XYO87& z^{4E=vi{8C*VUg{?6UrcJC#EHUr_abE?o~Exh=h{5yWv&c* z?$2FwzQ#r9aDD^y)Mx*KryL(>i^guVmytz{U0k6qeHLZ^m2Ji>eqEa}i(R%^Bw<$y zn*F<~|C{;xW7coie}Y503!A0vzq0n--i(gl1X0gjkf81TM;IDMb%iNdc-vv?k4cmPOeCU`4wp>zakCi zSELcwg4AQm1u2GoTILnUyuSQeRIc(&SCX?hlu5iy)wrLBtO<~@Z5$>zE84z=p0R<% z6AC)Y8iEs6{|;+d+A^gH2kn-|u%{La=bC8p^cC_7RL9@;CAHQ!1kwuFS$o<$y1e!* ziWSvVftV+Uu>e+3>2k{UF=vzLMDA09L}t2NN<+^4-UaQek{H-TbusEjjBwy=<~}Q6 z^o3*;7S?r6ZBcresf*!r+@MYv_sdsD9WRj$J2Z3)_ea$zaylvN~iO`u#KQZ8&R$-O*hRTTD9ChP~` zu+#K==yc!AZLw(!SAr34Z!Cms%7htEv`-POnaFLm^AxTMY43_k=pO4%ONf|9WqU?t zd)CfYxJaZ)Fl8%^m2x((%J#g<_M)AwaLq__N6HqD#cQyV!=(Z;XsPUND(fqD*1}Ci zIvS^}wA7`nK3CRPRo2(-tc5F3+NhuVZMkSpr; z28B^?0#Pg`RXmBz^E8#~)52UZOsXrjr=6=<=Hjk!y2=&p;jR|#)le>KN*u??!b)7( z&ZKM-pU9m}012EeWCDvNCe)~Q(cN7<&gE=S>GXnZvX4-cqCeR!dZkT!Vgaq)H|&4ds9=uM}oby@7T;sAsq`T&FUaJqr}4`arK(FUsKV z0yn4(jfEMM<@b*DF0lNYh#F4e7J8CkM-*mLmY<9z3oQS4D%1U z{5w^)yXr+!?V&|0yxqFBhl09EYtA@nBvA(1MIUuIlf!?Pwd{LM| zIqQD0el;hd3tS4S+yg`!i+C)vqCmaSFQj#`f3%k^I)$hC*WAw&~!u!oFLkiBd7~6cL*ZSxL`7(3556 z(u46x1_!B11bGc58N#hCjG?vfn-x+t>kCJGg$fmWlMU*|i`QDx3$+_SwJY}eoXbxe zTv*p#8DBE8T~o5x3_^}%+F|rpR~CnnE3Z&WvasK{L{1vrGe$Y{Gt-r%K%NX1%mw|b zDSOuI0{vd#zzl6y2zQ6$2dV`cLNNqIe} z{gh@%bICrq>PFVrB9g<^RWY*|_ZEnc)Dxy9N>Qd|B=cxjWfS3!u;}oDzC*;r8Q~|p zllKK%#oVif7vn77{dgMl$5N_`HGw#>nc+s#pz?GIZGy?^Rrvyhkq+=inXsO7VQpcA z^^ptf?fj}!!nx|?O*xY9&ZVz-DEkHGzPQ9VKx&1At8($M+gw;V7uKZ{G>dN*-wO)s zK7ZVgi)Ikfd{1*>bzi}KMq!<|L*m5*LtyMHy6>3rIU>4n zvN~Vd6|Sr?4{r^3s%WIW2Me+lTcB>Fec(!SRa7tQ>IZXTY%NG^M^@YrKl8c#+^YXsrz}_5)N|-$d;Xbr;y|(5Mk&H`= zE+OGv4et`Z!BtLP_*NG-)>+BWOvmyPcuQBAv`H`*3Q3kKPxZf*Im=yU&~1W#SCz?o zN*lygMp_*=e+8q%3}$A~Om^SNDlxZeewM5hWlOBg%x!s?eQ!CRA)Cu-y0bx;KSCIq%#wFpDUy}a zx=HH$TuM=da*r^`om98p?Sx=8*rh{?;Hypu)(}Bh61dtCHrT7g6qc_N6Ess=Y8iP< zRwfKIzejWy?CJv8S1%Y$FJ)tN|9YSy1hQa$OdDiDzG8;0D{BH+N;anMn)hIW{we4% z(e!3N0jt#Cz$+9FTemp$xLeal87q#@2`$x%GgtC>%0^79=Kyz-%dwcQ8fNF95cx(3 zxx(@h$D ziy5Gu4B7-q42|LdqyiEK5_PrNGf2~cWTdW{Fv+62>6zu$)5J`g`?pq~ftcAJ2)(SZ zmLclkpUdO>q-}hsO;H}o%&`u1(?H*9s}arh1vM9FMkc?dmT{_dCgo5q<5bDI&V}V> zkg{c8M@5j`zSwSBFSrPIXxQCTb1sES({!D@^C|CUQ#|{5n!08hiPYxgR`QW`T~wge1pG>(94En2W}*g<)#qV;BTr=h}ZF#ZA4xu zyvpf<3#lAsTEECPlr3=cqWU$ZxUfO9K(#rYDy9mF?7vVt3a)huzVrWO!I($Ng3(pg zK60u=7JRHMxXCH_r(auexnuq1P7ggYlUJkDL*3SIJDqXVRPbV3mr@-UW&1f`xnv_N@y@>Cgszu;)RSD>EYdGE@PxsCHWC zQkNoku*XjdlDZla@~u)Ey>XWkYEXqvl`w9XO29673EvZh%kG(|+h^y>(YAMiSY20+HoUv2 z9BpbBaOt{ow2|$q+!Kp%om9rOL?#Wk%SESRb;(eTy9?_VSR}+q#d6 z<=LN2_YX=h4`J_5WXT)4r0wCjn}6?8T5PQIc6RyrrCS6rnQfY^=?hms$x~m*>5mSyMl5`m6lYa_SMxi z57KB|gP9S{gC2v5gVwuwI)2TM_O0<^6rGua=3hjUYNlq2hl@SQIyHWHtfhmTN_z^% z54>!UUyLKkHGX(p19f&E%oi}*!o-edT;(JB0*0JkE^U_M%Z`STJp|X7?LqSkPqNaH zU`y8$xJIz9C9t~^nD$gA<*|zD^VPCPFt^zD^sDIw=!E3SIP#2lW!*s||EoOx9C{J)iF6F|UvFTA|V)g>lWBtLE^;gQ1a`Y5#$XBvUc`z|;Iu904`Wf!D+rF->zeFBW z@4*uudFKVJdpT15!NuBiZ{v4uMc=xz{1Rzg4k2$vV;grvJ2W#d5!T5>%RV7kvxR^!lo{eGo9d9QVri)okgU>V?;RNiZC zb7lP{@|b!rX;L35f0ftL$YJ@an(ot|u1#vGE6XpDrc;x8%*C`z?a*yGd_-V7(XvUE z(?YJyX2|0ZEm`FD4lcOtuwR2UO7j)p{`3=!FXVJ8eo0ksLf~5BJJ66iH*;$MIl4JH z_>EL2$9t3m7LAjY9dbmR9F@V{&@#%XalA;~@O+LPl)PJ03DbTnn&vJ?LOkr{V(zjY z!Uj=Ly;IPNUt5r#jIwdPB=0kUxxFvvv7UD^H*=?wriymbl$yqdaINBWP>^d#IO5^` zZF`HzV^8)x?$@T#X6uM=H_6xi?zFo(oQ(#WvBjN+sdlmVchc_i^F5Z(<;uRq#MCTz zCP|4M)3cSdJsfFgy4X3VP&^`(quWgEI(5|1SGt{6+&WxpP=o+mO>P5qkc{MUm>t~> z{snAlUu%y-6zyMici2YESR}{SfC{N-cgjc}9}=0v3mDQ(#o>jd(hXwoEQ!4{c}b{{ zfPA11-?)Qoq%E4RTqE{qns49Et}*KLj_FPL&Zlm$2c<>17A-KMh|{Rc3vysr*l~?J z^jS{gZMdH`&%B#nU%+_{ai*R8ot$povt94X@yiUlJItv&)`)c9{b3jo*7Z1J^*9^J z9_zbbS%#kLg*GIQY_H%w*51u7t<%>$cBrITwqU!LPZT4`@2u6JR;L7I3ues^ft9`Y z=&^2gv2whptL^CUomQJQ>P>rJ_BHBL@_q|_j;y;tr_kl?tZkcc=Ujen%!iX~9AeeJ zZM}mMaCSjwiC9J32a5dFG=J^@U?QRem&4N25Ook@H9UhS;LjZhtgwnkh$R7Q6heMu zQx5H@M}8SOhSJoC`%9WKpe|maa`OICe=XXm#pwK;d{rxU*i!7Pa0?K=YX2R5)j7Yi z{Oob?hWUkka{s)C+Jc0>NX_;^P|)+?p_;BkY9W@^wHU=Ar%rcS%pA60c+Bjt?l5?) zcU;n%Ijm4jbu-3e`A7abMHUDM3#jpmn+@^Fk_%)rdQFO|j9v_v?&l#=c3 zaksUf(BdyO|D#_GZ)Aq<~2s?gvxWR6gKFXCUGDEQyHkj(*xaWO| zK=q2wdN=LR?KB6*c+za)%o3dPuJURZr(e>)%#tWvWiRXC<-8yQ04LRf;*6HvJD~z`PqG5vkMJasS5_g9Nld=2c zOV%Cn0b+ZP5|2n;U}Z<+xYN@%9L1~%RBPC%6QWj>v%*T12M4_}NM*HGdsYfsK> z2>Z(0lN0!Esr)!(LKyLQ&ICP9u<2eeo+X~lGRz$%0B%14ORo-^!pLpM1KUdKqmdJY z>7eM#8OWT6NACc)?f~yeu#xjn*<2`nxQpt8MxgKNaoy{Y6!cj6xA5^Pm-Gply5!M8@U^yN_~)JQjg3ZD-gN6giB<+uQny!gYo4F0ln+Ru3kegx0#HUx=K z_BlM>goNPdr>~lrG}}FhT7W;=m`KFr=d1WK*dnyBdi~uWP_McBXBnYBKZk0_ICy%wzUT^nT`Mm#ID$k?D!b52IRpa2`&t zm8eewWOQ`4jseTa-sD~B?&P&{jc9@7*Yf&-I-c(+LCgGzoHY8<9fF%N@q#bsJBOrT ztYrkQWQ)o8^B|tVvjlgB4@DgP9sQ<^?IzeZ0bC-1P@)#4@cAKZomw0^bP!QE&wYAGivX)kQNEX;cz# zGYBS*$g@cH3w{lKbC=8C{gQqs&DreOdQ$GwvqP> z!nv^b)6MiG*n{l@$zM+a4_G&N;5`Gr$C9SZQ;}^&ir%(r^OK3dL#HQ`DdDbQdS8l| zIb4J=!yVnpQ%A^A4@1U)^wWOjr<0;*v+bu5A0?vXr=Jl<51xlszPL)m$N6TXupBO^ zz^lc3PP^Q zK-iyvO$&edti-S~JbTw=G9z{0QkcJ{B*@g@;^R@Erg3sL+$7%cfnrUODbZI_JJR(* zx)Q8&8<@GHK~me^QED!ORq^LUYy5aIYCh27Z@Q;KRfp!ex~LOvSJBmcSvS-I7_=i~ zUjX{tLIlA~qmms)3E6c|GH6%aCo7K0J1Xvxa;7n9N9~m$TRMuRAQ->lQKS^4OId!A zXxW!uQIS3c0?W3Mwg~r!Cc)C!)7vi4NW&t*UA85ZC}))_MWiAF zH(zr_Y-^@8LX4&V3#~zZ$<5bk?Jf&Y@<1PC)9`6*4V^g6U?$2=6Mmj$hM!kY=^}%s ztVPJcr-4;1e5w{yXD{DxA3|m9Vm^kU4=%!jp#H8^epZjQ6lFV(A`*1!y#LMs&;bWGuJj*j&`BV-V6~;@C^;=hxnpF6#+kmvS z_e4G}KbhyelR*A$AJ_xNX6)s{`{1jv)+uGkikS|)t@RdV#Q;k2FDMSLiMWAJS(czb z&=>kLiF5-DnL0L7cKV7f%v6pt9Ko=IejyPY0RjVoL~sO%8XLipZMyX>N?t|zb;~~n zQOc>aJgX>=&R_LgMb!4^bJ^Ct;ypYY*$#QEVz;-`XvMZ|$ZmrH2VU08}IMa0)nP#&ZmcwpZH)2A%+nj z@|Ai@TLV{*FjNGY31U%>X4J72(Nq3|J9mMQ=J(eLFTzpS7279MET%Pr_=J^Z>%%>NC~Y4QXDE&s5{{?3sx|kMTFR zaW>CIVw=|f=r(Q3_M05W)N?sKgL;im z&##7kW+Xcs1;s<)oGjvRm2;1%5qdIAnoUON)8eqS)SK)0)8e#~2dhcQ@{>g&u%$8H ztSJHyUot(DxzN>R+WsDakKMNSI6T>H_BMK*zXGcfS}EbZ_(YB+*L@W;+i5$8l1PO< zK}^6Fe2>ZV?VjgLo88#|#`kYYLZ57VXfTCMKKlAO?T1uQ0jv_;mkiH@2t5wkR?^KE z>qe|e(%zCGe;%WSq$C@|dt5FX*eK{t3~{c+dN$+4TK3)?Yut>` zhuYx6&;g}S;|LJwNfN;kAkZZwf+Ikn{Uw4UKww2L5gY-c*+y^#2xvf3a0G~vHi9E$ zTN;eYUc-=^G1EsO;3Wv#o`-!TN`UR5Qo*2}ruN0;3!nHq1RXnfJg|7jms$ti5ZJ{o zEZijg2PTuiFL&YL>-fe|O@(Q#0bWm^0E|2~LWd7Zt|n5@|4m z%U@+`bItWh)SE%zT<}gqH2XNfwEj?#w9J*n3rXc89WMuMA-hx`M}UAd62TE5Ac;h9 zWSz4I6;H1Mf1IhM;X?3?r`OW6I!|FJ3Xh`jDhe=NVKe0j5a{!=6pjFKqK)7P5GYMj za0H0eHi9Ehxdb~+33R%8o~fQ^tLM4&Bol??k|#%iSYsnN0tD(LDL4Ye$u@!`K%8PD zII=ni&f+Ij|v=JPkars&FTl%LoOoh3c|8j0-K9)~kA>(KRGkv8ieig^#>1)*U zI`zE4MRSwF-QvRiPT_8M;qFwpyZFfyvGhG0Po(dYbeH0het_fg^h4_TuzEg9Pcp}g z?TT^)h)Zk)M}Pny*+v`z;xZe-5g<@`Nx=~yHrWV{00EUq3XTBrTN}X&l}iea0CByI;0O?C3`xNev^TXqw9WsV z2Isq@=_gp3{GEyP7FYZ!rR1$H+%pOXGlJuid7f9e7u9o{dcLBbud3(k{FHhAs&IdE z;W`xVEf?+|6sHEh(XJ3jfPjg~8gc}Pn{5O~^1d{lepfMmUp+sxnZi6J4~~Gxtu}%q zK)`4v1xJ9m%|>t}?>hOFrS!+Dgira|_81=N&lK(pdQw%;0VGe30C9(n;K<3UYf@^y zrM@Iq-!O~6I#?WLga=q17`o)<*DAEIM>p2bUv)P{;;ViyALw2lDw#lf+AvX7Pn39l zB|$tPtA>@(+HNtP%{=$!oGuD%x_L^&nf>*ZTp}m8_mYffC6lucPs|SL5=_ioMa4;= zH-G;Fmm1;{DT@XPN#<Y2kxXsZ<@YF}*2k!>HF8gTw-CQM7S2>+ zim@Hai3Cb9siPT%KlydrP^=_Yn2EyzbJU8(kZ-KlzJx;ptXk;BdV23{F3K87WyLX7 z*|DmawK%*~btMfIqa=@c+Qa_T8nBs-J@t^;>o9-vq}eEy-&Cu;IbR(2!xRYjV7;b! zFWXGWY>6YnzFNbd(fvpAOps)o4cbw%4M>e(kHt?{3fxI}v{UE8V<%859qT&&Ixwvx zFusY=tn>JG5AV!Qf|{+>j;>`RLIzCmeqIJ+rm_}#A=?qb;8kkSZ8c`xkSi*f3mJhS z#j=-`Y=;9NSIzF~pn42hm)r1J=LdjCi>%v_kYNia*OF1|EUM?dPCY&GA*QES-sHAY z@^?-$Hr<)OhmDx_26fs4!LAQ%NV1ldnT4uys|_}BxB?4~Q^zqAvx0GxSM9v3eRIA) zuezVQid54o420B&@0AY>hun7wq&{rJl!NWqE6#@uW4Mkr0Rsnj*w93gw9RZ4k3|i} zB9L3`P&V;N%uM5bIBZFS7?KTu@LVV-o;MV`rj>go(5eh#Co3m|yfy{(}0ntMO z=-9SRFw*AF(#!J~LrjExdy;$}^lAKv2`iYz+o4Z;60<@XoL2f!<`Ie6Vcnk&lbrZ& z!7LngvXhDgYCE{z2EXk&R<^A?51=VEu3ur(dOmN(1TzDKfgZUnZ1g%Js^LpP2Fx-b zyX>58c-=L(g4QY6%a^;`wJ(~yx00BJ4HZ~Aed=o^C?r?fQb9t@D<$DQl{Z)xoz7rMSs~NGj(j>kBtUz#yEBev-ys?FmBc=`1_jZ1Fs!_0fsH&7NR_?bWtOym&a)-P!M_FlCCowaJ^D}&!&EK9oi6WA=cWx~K0-o6^p1+L~PW=S7z5P6^ zh^SQTj@ojNoH8*myToJq$xFpNbKrQ1PbJsGzirkw$=~qLf?q(_I-b_Vv z2KWWmYREc>n(QQMvX}=>$XAIk1JT4`+a@0lc=Fl}S?4&EB0tZdO|#nT;tL}1intqB zECRg_!B@KK6h~4}R>1>RAa{Crex8D}QEU!R+_~n!F?q zm$MMBKe1q@oQQC}baLb5ui&fF^qMsFX+2H3j|tJ14|-!_=Herdj=wP20eveYMB^(@{7^Oq3EN`HOntM$ z&;$RBAX#%T&aHwOU>`rnY^x%3^#$U7>DB^jiscL&~K2C?c_(lo(-V~D8 zJ%{aVyvu%xnvv~OUN%{_{gAYMAKQM|W5|eqHUuU@MNXZ821-nGx7l5alBMnY9NTws zr;bgNgA+NAn$c{Xu5 zIuG}M!j?5|qw2kJEYL0)d1h8?n6iHU zGzixZav*_Z#DiqSgJi^mWWrE(|ZF+b!pl+{D;k&f{mIjfoK zH9b?}zT7FGnHG<9)R{H7kvJca_#0ItBC8mYRgB0gMr0Ku9rTMc8U{ffCsTvw(HAac zedk&E`p!EcU*CCa^7Wl}dcMB%*30^m|HnR#n9eq4-yI5ZLxuV39=1&kbbc+2QwQuG z1g&Pc0T=iQK75e}aq~w0{MVrv#^51B)+q8Cry}DDm2$9h6FA|Vjk7$=`s7bBrVJh5 z%ESjNd4-fd4O#4&Qa#Qc>{skeYZExy#|@NSy_TiE;loAY=oC%^zL*Dm9?>s!?mE#P z48}V#19fh@k~$PlL7g)>Ox^u_K?kp-n?|kAdI!a2y!?yQt1z|l=;n5FGjg@TTLkGx zS~KZ05aT%|#@Ekj96Jcpmn>+~ZGFCBqJif(Nh?%H+yy@`;L>S`?@e$;kNo~UC zyvYme8}-yuc=HjLApz&T$@R0w`4C-*zr*o|Rh090FyioUB6EVCymS`d7laEDbMTkO zUkZQ3;j6kBJ-)8fGgGX8p_0LjWrfGnbAeUQ&%>-q{5;4yj-UHmoA^1=dV-&0tPXxQ zTg7`(z9H5aepVN2N&Ed0%~}MUeUDIAjV139!jtj2H0zG6aBHRKQ)ip zn+J^?zLAN`488fhUje<6lT-{Ig_CnNc!W9{!|L~_*Q0cQ{#$7B*W0c83$cFr6@B;* z6iV))b&P0)5LyQY&$uiBSIYiFyM=gT8q;eR_G`k9EWq+wrv;p#c+Bf;Vk5l|$bt^6 z!#o$~cyPiUhlvF&^s+KpF7uiTUf_o@nSaO%j(tYotfflVzmec|1tU z_$TCpjMzUc&ui~VVrFL>%~E9lf_fRb|3eC-CGvzL?9*=Y7D;|HlfQrzxZ=JbS2}{I z&$-E4nLM-F;9sGEAHpGcdAVY3w+5y~{L?dXqOfD4ksc$NV0BvFW5-lv{WA*eD(jw{ z6$23URMEU%ex{;O3RTor$}gyBXFA%Qic&pqMLk<&J*kCI zPY7O?Z~vbW9F>INWp*Y1cfsw>;utbD?rsQ9a<75hn72^hdRfX1S@I&-71(WSNpx0? z-H_$IE=t{HR%K^21}Oc*6dO*id0N!tf4WSf?e zdpl2I>q@OJXlzyb{Cj6|bj90NTNk|7xzy7s3Dm&-?HoM$U+0bZ4rJ=Q-`e%a=j&nc z_ZN2R{f)msP%A4k3WpB`6(w1Ib_|lcNbI6aHa>gwaO00r8WNbZ(Nu>6LYUk zxHd=^&X~=154OPnVjq-{f1sC&`CneUPQ&yxa+r~I-5v)2L`Qnx!e%gXzoo{JW1+*# z$ZhTf>mQj`@fN2-zB+`o?K7?xyPP_UJjLh^JdB#HFCGn({JQ(j$`s6 z5ZYq_{3@kma4N&#WcL^&cO#He2cV#w7^jKCF|`~!at%<}gErGsC<_F7glK3JwxNrG=?@_2v@z&c z;vG+^eBy^NAohu!*iaIRgKy~Ch#V6rGx#eAJM?}dcNTJ^_fB`!#>oSZf#u0=Fo&;$ z=iHG{WUxqZ1_p;~7sO8Os!?C+I}`B4su5$Wy|yfMxtRC@Ir+_`3$FV*rR+RCw)y@D zz6WvNcZd!74yH` zZ34B<<-OQ=nD>0X4|mWna>#XQS`;_SeH&~vd`}w<1v?6iDcn(D6y%_`g{O4yDSSJN zU*#MFEX-C6!5>)^jlwy5#T{+b+kvv{6lPVjsStTB_uOwXZq#m3EH^rXCa*He;m1PEM+ zkqC|eG0aAAi+F@pMi-kELhzzw+ceDp6&G5US~9(9=s0+UMeOlTuGF0?x!ZB#)ov8x*Ju%9M5C2oT^P5gY*m z1xf@*fB<)i;0O??m_%@d`lwFlpgd2oYfC?N`K+GUphOC8 zKGU<>b)`+}SY_-YTW^&O2h&|~r2XO?WW=5$ombL92+U{=9yme4u!mbX`6~r!I@9t= zDs_A>NeAILp7ZkM9Sk!)g(B0_eD1Y%-1@ADUI>;|LH?v_x=ZolD3|l@OP!=M~JcU430ceZ$};02pEyAv|X?zJ;(_h;Q+H1;azX1D0Cz7td=W zif1?AcSR=xci;hH${YL}jH2IO2TmA^v^jv6M3FXT5xq0Z|1f%JGkRTJ6`-NyJFS7< z>ZH;!cc8m^;tT+r@du#<1Qb3zBgh2%qHnc|6Y=*i{9#JYBN380P7?yK!oNrA2uIk( znfHd9;y)Z7Tz&rVZlZgZ@OM?8U2BRrGUi}YRB(6$hkvOi%-0;QXUry!k6;c@aG0wm zp2v+GUT=!KhfwIL{~%x#v=G-2)@FucB4JX=li zWwp~hqnwO%n!B0>*J!&K%)HpFv1KP zP4Uu!6dzkh@!A>+x3vzh4~nXRB<-QYwl5ceEE`PWZyH{#>mhC$@H)!c%C(!v^wCO^?U^PD zhh#qopRXH<+leTPT6(NOp|s+t=v9B+$X13loESVmiXdE>5Nk1IY8XyX5%2_k)zA?j zr~<#P6BWTILA?P{zV}8Dl*Bhf2&x|{p<0IeG!m4;i5sPT)SsXMxQ#~8B&JN`{t-b* zhN^I~M9}yqqO8I?g`g3fRtw7}S=J1qv|4c#r!8U1p<=$!V9c>}N8k$djuRQWnW32q zx|pFk3hK+yQ3~3^P#Zxg?|4A1;&=rOsUm2FIF-}>!f7Xo^B78S+Nt6)hCbo6i^by% zP2{v2#XAh0z|bu?ouU%vv(9c8|6%CmK`Vo;xC{SZhCXHJ9^prYqT<{Ul=grqW9TY| z9u)mG(!{+?`H&dIkeMaQheRV&`i86wjuW2)BFgYcO8Y`IF*HO$`!n=4^ZZ^&sDjhJ z7Y8txCy_Qzd@rUkWxScV{2*p(NEAz2RtB#SK}|w>6+wLzbY_~M3_++vc`fA|q@ZO( z2^yl!=Ct2&TBCLZLnZZ;He6f8<&9%mMrg~qyrThKAtov41W0y;IGiAqa4*;47zMq? zkfp8Tv>D80xpo0V&qGeMrgjN;g30I)tzwmSrDi}&*Q)ilK+m zf3AQRlF;86S_f$An)bkk;M6ro=@%djhBqQ??MCr2A&Sr7@QV;(7HSl}inu23OkIlb z{l2}tcp0@Hg=bgv@=jml@4q29ea*^d3cC%U@a54I_KQq+4X#HX_crn3g7vj(QK2BxzHrmrClOlJ*DR~q=L z*9LIjnxwK0;P5OCZ{#r9i?p<$57Er)y&-6tZ+D|wd>H&a!iS?24vbOw$Pfz8@lg1; zVHDmNr*Kt0g+S`nwVuLRBPd*EP`Gb53a4<`A2c@o#KeQZUmd6Lx>^dij-qgh z`Jh7+8uJJ+g2UH`Q2g8$3Qw=0@IA&18ccDoL17bzi#R-jvk&3-XU>&O6J-2f7=H)jA5IYG zKPNVVGM@Y^!rzw@pL^I!8#x~8(*exc%;EQ(_hinyFJqdSr{H)87)1%4&Mn=d?tq@ID9Hd zm@7H#8=?3;>;a0o*F0+y=6d!R6WAwwT11#Q_i|H=3_{e-!k z<0muC)l9RV@gH-!7jcOPv4oQua}UclndPtIa52+=!1A2P+msw|}y zeC)hGusk))d4Hx~&$8Xf;U!#pGuLGy%kUeH-_q>`l=VjrlVOUl;8Yqf?7nYw`yKFa z7g2aGhub0)f61WmLl1>Z86Wggybs53;?ytvgt>$1FJ{brOn(jIwGgFVz?g?jif`e( zk23xi4lhDzOY(*O4QNVas8M_ihu<@%LWYcaj>FFa-#B@f1%CkjCpv`@gqm2_TMKF8 z_r>@qXR}a*1Xi4)a~xH zLRb1H%}-ymw{IiDCESjE(So)HjBe2owFQOua=0x*@s|t=KlD(zl<`3?#rtslCQkjr zPnbKH{$j@5$Mn}QUJFs`1&n#fr1%!j`zYgY;qW4awj^KZrJyO1p+@m79DdK33K=ry zISxMyltRN&pQJZilOH9?XP(!OLVK*IcvoY+mFxjNbNhV(nvyc&vxI%!%i!6dE!8PJ z5?s68fqC zd|elJ^p#L~Wo5_^V=E+I_^I*v=N_E*&`GZ?=aLZ8e7MP!s3h!+nv{Oold!#g*-$ej-dK1CaBm z!R?{`qC0je2-N1}Q+%tSo0|HD$BCnlr+n?=(Segf$QF z0ol-A;xz@$s!xaa7JpaJ!ulFOA1G*Ia|$O4pDAc|b2c$9GfC7)h^>6G7^>1vXc-)yEcQ^) zDJ{bRjaSgu{nFum#l8yqsb3AC84_YH`-wRY^mS-IaiWAo&p|ETDdI5&Egn58JXK^* zpgOD-_ce|S?=Kc9X!huR!Uu?374*)i1HuQ2Gge5-!?Op3(Z^Rx=r=6~hi8ebg5K+Y zSomOZtAdscTo^u7ysn^q0L>O2+Ac$R<7*a%=ZcXEda!9>_;9hAp>^WRy0qs=F$w#7 zMEPMiD}0o=h9PNn^Te$Z@=s0A5c9;{3Yv?L+0PRXE9ivi3~{u0QbDIjqkx`Q(189k zu#@qsf`<3UPJ#Hlf>Ox0K)kP@2IN~HK9dk@ccGw9bD-VDxxp6iLQ%1XptWLP-3j4E zVkSdU&SS(83~dzIfhUEJ5w|L+9KLn2cyX=3zm4Mbs#C)`arG$#t@Ho8X05hF+^nD< zaZ_}OxJyBQY)pBN6%Q%sFOAvIv0{r&*^u&D;#mcCLz*T2te_0?wF&vF=Ii_;k=7>O zQ)!ctwp4topgBleD!x(B8w1Y{FB3m0=(B<60rKM-0Ll5sk!!W%L{ve4#@*86M7e_I z*R9o#7kw1861$(riy8?*6EpCO(UTZ@O1x1^(5TaxCu?`P*h@nGFNarWIXNboYG`#;OfSys%WzAoP&lKAfbZhgsfZkA0!+`DKv&26Y zG;x3tIZJ%3pl?QR51%dmqoAS|BXYL*Q9+aADepPLd%D!%f_OG`jwn*l*`+D(xgxHh z8%wjHb45}?pCE0$7^omW@~s#33aZ>=d-yz&RZ#05M&vxvs-UycejCID1>J`B+aUH= z(6~|C!|mcA1Xpu37w-b=(w3ffwn4P7Gss-Od7DetA?9}1cu%Z4r$A1TO-e3ywY6_i50%ft^7 zVhg!kymE$YqixM)k;}#36!eegUVz?J&@E``P2v*;Jv!QmY!Y89=ul|s3b9>5$3sh3 z2;Z5K=Sygn-->Pu`U0);TT!NZnS2uM_JO^kr2xbe%X)K_igwdU3IWW+317VzYv#d$xyf5H~95SdS68LENdJ z$I)UpiU$<*Pqf&L;t2(%knbk(jDkiW-%a9W1+7B9o5dRnx)S+r7VjwN{mSj(Tg1l- z`o7YL+#e zqFq7hF-?)X#ia@wJZ2Q2t0lx-?h$`led1OHmDL0y z_ldIgl5%NwKR|aVXcNxy?ic@1&|M=5`j3LH9=smVwDV-XGqY>82gL;vLjADgC?1iJ zpKA1wcuGN3qld)v3R*XYpw}fN{*5`qLt^;`$QhrH9uprZXmxgM#uAteNl{_J~D~Rg%gy??( z* z-80mR{7KAF&^bdV`?dNkeBip3K0KRzhs-6}3s5b1NPxL!e|&#mHq zmG8{#!I7h3#16D^~7F!+YjL56v{!KFNmexnbU&XCgNa)kr3nFg_-){+8=RXlXl5%zSzY(vtL_tqxAI0s3*A*12(u@4sXE#d9e$9GO zP^-9ELN!&PqOjKe771;seK=C2EmF|fhVDgCZTYP-?RBkJQL(m#p^f6q#>%4ZTJ$zb z+bA|R4l0UkOBj;vSEenO5ZdpuNSSt)18t7<&^D`l)MCA~LvAN7>--lDYAWij9igDj zgGK{7MnOx)j4w)R%M`S7%p^do6%=nepeUuSQ&8WgS%A)y5K1?3hWa~|_VmCxMSZk; z6tr#NQGgy%(2$zHhWlzyDQIL(2cQ=u1TM!E_0v97X-^MaR#d5duAprLR|5J@LEm;e zI5I%f?~papqGJJJfa3a1fL|J@l_+Q$R!al53JIZvlZ(>Y6o%w#sapF~QO+28aHLxM zT0w^m9Si6u1(DatXudmT39|-kI3tcKi27!YR;HjwkXEDhQ4ozewOW;eZpZ4gRvRKA z$bvH{ZLR~2jSSK@Nl1`4t=H~Q5P61r?Gp+4sqXdKR|=xK*K6AqMCA?E%->5nsl35j zHw950hG+=|Q5}Y8DFw|K8i+J#X$2iNv{W=`gB7%HOd!&zH7V$VF{L=0A1fi$VQgfm zw$Xt!F-&_-LR^R8+6M}vItHhwoyT}ht#b7Rzb9f)U4g0AlgG3q1~<^+Cv(l-LD|pLmH_)rXbow z8mT=kA=J+lduRq;ETEp#)_8W&9$H92s~g(^byrY&%q2ymv>o6EXnbRotg)^fQr*WbC^Ey$&bJz6OIaa19_Cj2{aKtE=Te?E*xHPOE| zpG)%p2Xvwd3U$$)^|@o*PW`HXXOx;)#QN+?|DECUlDx$7SgeQbED6PRA>&eSJIAR+ zn}$+#aZnY>CgbhgUOUI7BoZ%W&TF`9`;ih(VF|ryDn;6x#B^3WqS<|XY#7P^M_7^Z zKjhkd{{R0>Dg8rHGquR?xwmc~Onv7Cgg6W19`r5uDbkWIB<0Q;lWl!JXyiZJ^T>WD za}_n`dFJuDc(9I2m!%M;jgfd65`W$CZ#v>rAf+L0XR9N>r;AW6VF>S0_+{MhrbMYm zo7n!(;vPz&E~KZ*$6;MVND@gSQ%O#nQpTlMl<^6y9~qY(@BcUPX(LEZS(a>zpO3$n zC3>k1NjaJ^JICFe7Z1;uGL8ND&ZYdjF;64od3{PvO6?Wuc4zx>V@^g(>0S18*_uSt zxep;5>&`xNcl?i}k@RjEep&p$Xh6{1FNV;>m(b=8#~oaRQT!SVg-sl`ayWs*sT|JY za4v`Q5o+RCgr(vH4zEIJ;x6Xg;XN=fm^(ZrPS740(!0V9rW~_)V6}Q%bKWJq5B&Ti`S84myzbNk17LNHAI|L-{0~|h% zaG3Tu=X#uTJs_?dI7*{%Jcs*ePm4RNreXzr)yNr$-`{d5;w^&@(;nB7qZev_5kqQb zpe|32nFOAX^xH>U%O@cxXtWkMK{M)3)1Jnf;B0Vvq+dHQ&kUP^+pbefpA;`?bY?>M zQQDc1BnoZJ9p0$Fq}^FHN&E%jeElYbi}km)cL&_7HzEG0{yD-w>HkIetgh*IR=uqU z5Wc5}xkfRa_>}8!)b{mMY46mg5xy&OA}nz8-qQ!EGd&+N<%i-U=&C!%yNjl}%RSx2 zjV)`n?qYGnRmgR0Fh}+3_q3-nugi;&NjlumhZ6E9+mTT8n;pgDAJ+t-R2~1z5y_s$CPSw{9n2+$q))T!IECa#; z*LutKH?y|`Ly}yj9ozaMZcM+}dXM)`?YS{;diyhFfAK){a!-GzIYFCNUt(4;rb1NK zFE^=`Hz53X!7m0HaUn1HOE)^U7I_}%HH%oXw zOZW#!sEdci`k)v4ZY1XxmJ@qTknmZS^F_#6EZ$}g-*Wha*bHt$yAGj8yBVQhyB%Rz zyBlFtdjMf~?Gc1!+8+^CXj>7cwC51^*R~-{Yp)@!(f)?8UV9s1qxK%cto9MYk=kb{ zaSx4TZqdF%I9B@(;ojO$2q$UyQC~4d3m}}P6(O97pA>;kv@(Q8aIT{@l5i1AxP&EK z$`UST2~T7RPi4w8nDQK^+`yCWY! z^<3$CdfOQ%U)&qFlfL5n`>nkX&N(;$DS765IN)m`dg<$-Eb#Az=&OGpdJRy8>8s)J8PH?lrvW#I z&jD@=pYQ2WZwZ$H-xgj0d`I|4Ku_R()v$b+_J1f$P4$W>1+3v!~33*;5w6>?!3id&+W{de+12BdcNd zk>|qfBaJZo$cIITpAsEj5FI`uI($NO_>}0dCOZ6*=d@#A1=dh&gvhJ_Mfo zBed8<5wV!yM+H9~q4fqMwBB%p);krU^+qGK-eiQ<%SC9tGZ9+vY=qXE5gq0twBAC5 z)+cg`p3Gc^EScXBKSK5PXNCUzrmT?wg(T-JHB;~+OE=ocd9wSU1|~VLG@X{ z1M0T{A5p&xm{QjPA6MT7%u4FJ0aN%H`tEHhRa5tEn-zRk@aF}8UhwO9D%)D@6`{N$ z6lIYTvY0nyF>gXBg94KVKCj9>GlCZkBxP1|%}TC@&@UUv)aNDjc}ZOp`V|A2`l6)1 zD5+P4{$-(jStzdv{)*rsTXeIjTPP%Wi1;qScL|;nJSF(^f_%*=Y+rBK6 zFAL=r!Cw*F3eyf&n7W0+Qc9Sm^b5UT=(~izOXx|VCxxC8dP?X8p%;XHS@6q(KQBDb z3(pmyUlIC?LVr={*Mxpe=r;tvA$Wg;y7fn>+b-ONw0qkw+~afKwxrOLLN5qj5d5;> zmjzz~fB&{nm(-|B>?Zgw!LM{t@|7-W5uv{*^lL)DCiEME-w^y2;dw=PR8%ZxASEOO z?>A7i6?{-&(m>Kvg3kyn7)W|U@XH30vL^Udf!77{cC@uvLg1jl8G&m8uL`^_P<4}Y zu$vYb+(djvU_;=Vz^ekU3sks62$D72B6$VQ2y6&k6L?kNb%Cl^atRz1I3utja82M< zf!77zFp#xVTbb7~kd%JG`?nHL3Z4|aAb3IWhTxYC6e|gS#XwT73VzK%QmzYr!$4Bh zHYwdeQWApq8%Ro0@Z>h)1;Gn~Hw3?IAXC=_zhWRMR|UUjASu@czhNLLs!wzNS z%LbCNCioQtNx3TcH3LbxF8B=tNl~|nJ_eGK5WL?&QU(Q28c52F-~|IoX$XGVKvLEO zzhWRMR|UUjASu@czhNLL>aC)Wfutk^9~3wvupw|w;8lUw1*+SbHz9CP;EceAz%_wa z1zs1JcpLc#1ChsYN=C~!t#L*Sags{*eJRBso4frA2P z1U3Y&3A`%sxCT?LBW#-k}@NB!9Y?Pf?qa}lr_Px3cN1x#$L{&)IPD8z^ekU3seI_ z7dR+zMqoqWn!u|9uM1TBgL7jiUiEJED|nj2 zt14o}t(x^I>t9;GX}xNF*V<-3V%O~d!~U*qhvK2TLWe?+hh{?c&<8{RCiJDyH$tz6 zwuTRf$HG4po)1^U&xU_F{Hx*L41Xp32jOpoUk$$=zB_U_@dImAZbU>-nw^cYU(!GhLtW`h%`N?RvHA z|Lyvlu1IuSbVqbo^j*;-(Wj#I=og}2jD98h)#x8ZUx|J@`rW7%i^gt`y)zcV-gq~j z|Iwp1;aweDuycmjc40sIcI=qFP4xr27r)avhIP^pfHH>XBs_s|M{`-SY*!&wUPO&GXpBF5$h$i+EB|74I8f#ctbsaNP4}$6oBk<3I-g8Q}3G z;eWh`@VR?Quk8CQ;OxW1f9we1=er0alIs@-KM(wG?I{YQT-+uHO;CmnX_kbTulIL^#{&&E{BYyz6 zyq(fMd-vA>7rI#1!tOr?EbeCBQ;(4H?BSOIAG!Mm;J@z$R1LgGra{i9MUTK$ac2ka*{>ww;`O4l_ zx|gRRv+XS`*Eq zah*DUh<5(vAwtI+iFfkGzc{!Ll81*51CDpG7O#q)|LLJ$>$UN#KK82^pe?=2LjQ^Y z--Hwkd(=_jTaaSmsU+RNk0QlFFT?XA@l3WYz#jp$u{*sL_z6H8Z>{SC{um#>g#GI6 zz>|PBo-lnI@D!kpXOr9xd<4+Oo1g9gehLsL`slwF;?yMe-<&pLL?Xf{v38$EcHG>8*dvs1pNJgwrU_&;H(bN#uH190skPNjeBz+ z0sbLCTYVVzuy8(u*HEjUfIaZbc|hEc0(;=T7C;-%H%S410no;o6`$DhbAYz`d053# z9|5#+pMM7U#{g}-`QdTkp8&M+G?X#mp9I87Fy0qnVJCkA_&-79v(!HYwAC6SpoP8t zEbw1c)4*Q@wAC-k6JS0KXschw^Xx74&j4-p8Q9*!Xz^~~{~Qt1QlAC1@#O40@P7el zWeqeIM}ON4w#EOF-NQfOfOg9|GFApY?g*{}Ique}p!~ zQw9KS^>wtNg)#F(z`ubuwA42NZS}`!Lkst){v_}}K^t1?PXTT9vOKBgKLO%w7%ge3 z>wq@SM1CIl{|#v42{j)D{%3$T-k$w&;C~KitG~eMqow`}pp7y5lfb_PXsd6dJ@JcT zKwEtW?P;mk0B!Y`Xip1InYjY|b+o6Y{tD1me~r@{OZ_)MTm3EC(^h|nmbCFCna=|L z16mJ#-1hx1MwXDDBW z{HFlXPpz*2e>Widsr4U#KMiQBJkC2UH3Mj?g7tgA&jI2ME7tD=F9Olv=#rzTQML=6ESziZU0kqY!^$p+`0Bu#p>8Yh^fVNt-{sj0XKpRh*c^UY7 z0nulz{|os00MTcy8^GTWh(2q*0{k){`YBF0(N6){r`D^$ ze;UwMKVy9x_&)-))eF{lfd4EY`lLvat+e;!{;^it|AIS@T4`@@Bk!BIJA%*M+=*DW2l0Im;u!atKZUsRReZmK&z}ST zxb;C?e^ABj530@f6KWvz1n?)+yYbEISHMHQKg0EZ#pgTtyfgeKkn=J=ui~@S`g9aU zrI%(abH$0}da1HhD5uNC#o|)Ew*Tlpb^OuUe15o8TP_zarOJg`?O-0np-c5*vRW-% z%2iGkSM?L%9zB;wQYT3RDs}MCzJYGXImKZ>u>0hLKFtt=L+g>&WN%z(<)3$xGQd$d%mJ1N-+KIePTyp+kpK zBL~v^lj*~UhYua;)CxyBryLa@K>dyet9KN&s}-vki*xy-{;D~b!73ed^Bhyh$0~Cx z<>I62_++(ou~08&7STBDNAS7I(r~d}D3xoEx>=GgI@I2AlDXVeW@tK>&Yw(=r>8P0 zl{%H2O2Y4_vQ1K3m&@joQ@MP4G(E=N;pAoyNS~fcXS3M}98CGHimS`T*?Mu#O>f#G zC1#sKXDKb=NsqbGVlh`4S}8x1t!OD7l2}|z(#T4=+##2fG?L7WriWEFJvx$4O^oM~ z8T7)Nv=0Kqa5^=boa&ULtzCS%#t~AC+1d)rqDjV2o=%QVr?dI-iCjKAJvlisg-|3q z4yR9Nk}$cU3deAIa&+P;Fa)}F`gAs(85Z*zR5yxH+cxaUspQyLaw?Bp-t@;Oo*d76 z(gG!AliAsYA{|s>hAA{iW%)rWTQXa$)!@g-DLl<9rk$)778eUuljdGAZLC-?Iw=l5 zUdd<1yfyGybz(Y~pBTvxO`rk9Hj`D|HHUM$aPKwzJCl1VKb0OyPo>9G>7ZHk2$7l? z)@carPK)JFrIW)5?Wu{0$1~oXnej>JFak%+pGuAokLolinNE%g*;5L%b(n=}WM(sC zlO|ta%yRqn*u?2{J~ttb&Yn6ojXcB2TsoH-OXtU@$A+NZP$rknlh8Tk2PejZwS$}_ zu@;3=Q=E-nQX3A#5y)Rlg(&lbfn0q ziq(2)zBG%FJ6@?L%jL?m#kpiXw@|9FQ+b-oGi_+rPKk9he;&Za>#QsPd92RcQqDIr>Cv&HyS0}TnOr}LS)YS~Wxk|Rg0aPf>S(OP5Q`6}6=pat< zVmVI*3|laH;&BgGJ9o&_yT&u4N;lcO1!Y+_1; zd!w2g=UoYiESXeRP2=NsBS%q=FJ8J&3B!b-Je5g%xlF_Ai(O{2C8AkkBLdPp|{|+?%Ih%x4RQrI&n2E?JdXC`^P8p z(o0=~X5AV;g+6a;>oG2;L^AYo=85IgQ|X*1)l&!dAERHu1|w6+lQMJlG6aSMUmaCy zVvJcj7lxiQ-I+rRYs({(EAcL$@W;nF>C$xclDvcf%mnea)F)jldBPoir#If|)#MD!*eK9jWk{QPYsFhCN%fbmw>P4;=^LdrT>i*Ju7*vM~ z^@4<9K{%xo1S#2tLbW(2SH;y*lP@_pSJK-9%^WSH($exuT@vRg{G1bRQk8NUYYR*s zYkN)>mx|TWtXf?x4_9VI0cT=4=bKp0sgX)`u~7G>>IvwaI)~kd8W*Dq8mNiK^W(*5 z4PUxe$LhaS!(3OH`N1US1J&VTxpc8uy~G*9@^ZQ4CVQq2Q^kvwXFMsDrFyk6TTd01 zW{YLeQPMmLpww-uI9n_&*QbgXR)j`7x6(LJw=9#);woRN zP1hhv=W4h7ayZ(^FzYFYqm7If4lTo{uRn9!B<4!NW6on`n5uBZt{1)8I;AlmtJx`? z`mUGG{CYXDG+*%+7$Ay<{tcfC-V7~krDj^2e6@A*HPe_+R&%vVS(g6ThpMkMlUcEK zlAYXRh1JsH%Hrutxn4M594#%D>fXXBVI3ANWgP~s#X1ZvdPpZ)Pm3UfPlsT#PlI4` zOZlde*3+OJi%*Ak3_dN|F_<7SUJ*wvX0b(7n#C6*n(5@3+Qdp7p>L`Y;QZu5PM#v0jmN2lnbTko0nx*r_AYJ0qWVJG1Dz~Qk znv^>nexbQSwKPAk8$6ggS-8Y4zCiNv=04h^&*bw%*oa1jMoPudjT21pY|I1`IWq`S{d0(5dUN~_CbbNt?HJY>GdE=S z50CBG+YN|8z78W?ka3;iF38+E%mq1GdaN_9ZOG`1R6#~@w6>#Kd*05&OFRBs<8BUr zZmcrn<2tf$inl4*8>2RseUsen!+txRvuRgdC%Crf^A_EiGld@aePU|_2x{G~>j$~y%r8jJmfq7wXLE=vhoJ2_ za+P|a+&)R73s+bewb~VUetm{f48rw=U`DJihbnWIIwj*AxmZ{XX4CVi)5R(eAcDyZ zOPC_)J>a$+la-pRU4watO7+f(%@`ZZ*BV@d9B{JC!rCp@z+bj=2go z@x^u0)Afa7b*WhI#4@xpKi^KFv6XVY#FcRyWpiSQU?rUKelk-FCbpQU4M#J3wK!i| zEw@0JS+&#uhQB1Qxg9GO^)$~_E0j^UK7zjS!&lq^fOU}BpQFvujv>LlKDfr1ctpJ`&e4Mpp@(}cLyE!iq25gWzlL+PBWZ=>ykIT`-v@Gv5!ie*cgv*&sXolvM zKJ-dAub-@z>P7bw%WXXeQKxVh5Kfxp9w^+!QB)&XB?_Wbw4jNq**%pMY+!0uxm_Xu zWVNz%K8?N2^Othf!cq+(R+8ay*QF}vnjK;;F~}hoBC-1H(*rqPpXWp0NGjJw{T;XH&wvGT(UK%UsAYx zl`A|0(`$QTzs22AOz_qEA|OEsL^mt|fn zd^~=T*U8FN##w8QqOX>P#4#g#Y4Kb|U+Nj7&e}2y6k>A*r&*+jw|MsjopdH+?quuC zS@R_M>=B^L>_Mm!WCYV*z;VFC-n^`{(M){dMhPmmGRwU$wSwqgoh{VhN8<2^>eWk= zg(?Zfb1Ua@XWvk@@~m_OPCC#@&ScEyjlQM}v@Su!1p-8Jwp)q_ciRMUcg2l=cx_cq zcc21pzc3xZ=*V8`(#CNYn4c1;iOZa<)ryPf%9nDbx>tsdSR=UcsQ7H9`i#pDH*_zY z%7xgM5$b}FvUpl{16+Sn4syLr5%oppIrf_dn&85q2R-P{I zNz&F5Ia8QMtP18yca+9<+yg5q5>|MqsAGv>{?I3#+QdFzM_1y!eiF8EA&SEc z?pZO%CSw)!^$OoDoy6hcMIGF@T$LgPshV>&xu8m|i(X+35XsqG{0fVEwOCjcY55vU zLRZr5uJW_e{u28os+iTWWcLv$9b4Bv8slFpO=2Kwhx?Q(%T8Bp3Hp1CJCg0mLY22) zQYRfFjd9I|4yop1b+K$P+(#n;m1C8`*nq7!Z>#Lextha>X$(3sxOE7U&Z(YUkZz7a zP2ZS=+R;P;FfsxYYo!N3n&&Zyk=EyNpN)x+SSv8%_|s zxtjc~g9#I)AGAx55?T^!%z?2OoxNU}t(4WWgNPr=j))iu&4JAknVK4u?PyT);%2X< zxruovu~g6SJl0+brP?l#{trNd_+WabGrg3R?U#;-o>Ef)L5ZB zk6ZVp#L9BsImZyioduUD+`P~(M^{3x#%@({u9?JzT8m>`AY+puiX^`Cq<1rzleGyMGTrhCp)kdVwM~-&+_8aOEnC7Md!yhdPHd@aso1re&0$Lt8`3o zilJ`qmapjNxm;{+2AlDg*{aK&nHA@>o%9;Iih*>#0PfBVXE-Othya_iP`#Hd1sc>0 z0J4Q5^PnOIN^}^M==EsUw^)_hRaFj?T!X>{DB&Wu3&5YNjPiCbDM|J~oDGF6riw+} z$K@wFcNqAn3?|T{wB)C<7PFX;YAU?JI3xUrThWzj^XF$^;&jVwR`6;MGXlyN##PbJ z*{a6wxtPOyZPxz7rNa58O08a+tx1-aFrf1Vh;2hg&9SAK`0sHRZRY-m8XZ#V#^rqt z?aIX^It2HzOz8{g8jNB!HNLWVu2{|1FJaMx(4*6vVseZoUvb8-e#a~Bsi zTCI6^gif3)JZt);@G=*MdQZmYm2raR?-BK!QDkcNb0UF0*tE1cc<`IwA(B&T#*Fn1DmkiU^8H@XIg<6_Sl31e}GME^#Xnh zYUaT$HLA7#CeG*AG!o_je&=oyF}JTFtyN;)x3ePh{1lEQev0-rKaFjtDY6$M2Jl{c z^Jos{;C!LE{-k|YwDRrfbQ%KWbd(X_h zN%KzGn?!^XEDD;knscHiMURfnOI>Zuv`pbTxs__huNJOWsv9esj7@iGQgD;6Oaz+* z*?-qp6X$*ycgrb#@05ucE$(nZ&oLPn{L4J}EgV6eE7kQ$nm7s^mMcp`p`-XI#@Cy! z&g?-4WMj8EThk?UNRzTUq-n=$CsF5Wm(pT}ns}yRbdTs-Rq~{?DC9};spFyhl=0Bl zQ^lmoU74-Q_|jU`@um3`@}>Ax@})2jw}Pc#3$nti5za)6C&58@amMWam;mNnVNUL# zm^iy=%|Tg0(|PsoyegXS^wPx=&U+Z#oIw@x_MCC}jRwt2-E&$l&6Yxwsykt>0!dBU za)Ccn7t5OJ8!PMGPlu-MmUIb3`5JPp1QWGv%3 zICVUaXC7B&a9E`@s0)xr`9+kMz>|c|;Hg0gJlCiM%Cq=XarG>&>flTubqwzhNQgd5 z;9`0WsTIf|wSZFiBN~>#Jd{#X>Oumkel1CH{-q?pmR1MV(V`A|0>4Wtp%luYu2nvF z8h9N~?_n)mo#w$^#j}A5NVA^MC3@}Pl*aGY5}kVK5}opW67$S=zqHCc%2+|^bvz-; zk(z`B3ZPxW)8MF;Bg3^F+qDiJZGBq1A}ylZMLm#)_Eo7v0^db&&Vd)(k>GUNOxk>} zmvdS2u>COWYtMhc%kNsmk=?HDDso2QH9)?Sf;qj`63w=ZnA*uzg!WQf6Yz&is5v#n z3u|^vp=QsbP79!{;(HF)w2R~k!Kb5p@Z6X^cvC@-QWHIRiVXiH@C&v5c)C>r@2seT zdkNC!A%XrmDK?-s>?dVV+}5B?YM^K->aGd!mS9uXp6!(otFg^=4ZPZ_yPQ@$2f1^o zMGN=dEHtOQW&G1UNNbscPP&F{MQSP1eQoUabEhSAX~OxKQ|n=4odll9#j;jV$2uTA zWSx56k%PvxYM_R@*hcKN>}dz_aa)Ha??aog_3>(?2c6oJmpzX;*uU%e$2zgk-`~uE zmmuB8{=iKd#`L{A{geTRhR)uGH^Vyg>IjMpNoL zhes*4lQ=B)&|Gf6_4a-BSi5}FsN*yERN&3D1fx#^Z(7mOie);|RCflgH=zcUI>20v zkUDnh9^`t0H*z@rLLKq;-#KY}zsIl-Ib()S5g*#ho`P`ht#u2%vzJA}^wyk<9gsoP3p(2H?Nk64}k)!Na@nM3*P zQ@SSfv;FY20X$a^G2{sSe+g;q+ZBAf z-D>V3=*Fml<=QRlt7D>L1&pCve7bZuWe?~ckw;Cvw$6)fI9p)L(TX~H6cK@Uqm_1p z;+4qpng6WqStCb}>KWKh-5#V#yWHVOaWZIu2Go!*3@C#@QzrKv? zZi{c2JL&Bcj3Rm-qCMRi(R3eX6mrI9JsODaA^6elc)Sf}L}^47MpxQ=1r}3xw5Q{> zd|S!O8qh1yvbXcv)rIp4_8GNZ^Q9q||0Yll`yV5MH@|4IiSvoFw3NEb;R(vrTH{rG zcRD0NLHE9#h6S2_nwM8)fG_>YyM)y+2{nPNK0!D%oT5Sa%KL_3* z1sdmf?RfpAd3f&&%AG{XdY0+odteA+`s-pxkAou~x7$yiCstJ96y4 zSy^Jedp43MT)Wx+^kzm@9bI!`5!~ej4M#+KoaX~at8c*V=x4Ysb=#Qa=iHe!47YjaUy$gp5%<#?dBou z-{+tc#~Cxzx+fSj64G+)qg+i$sgL-*B^W2xiDRaZIek&&-ANzo(08P-w&^qCm!10y z<&L3Ns{0{e(@pF&v2@UVC71oUwNP%2^a631^%IS;unrsb^!H?K<=9Jp7tba1Us!_^`d*RT`t~5kKx(L)`jCJxrSU1!}qyHYMl!tOj+c5*zi))t^AXqj-rC@iiehQbMuU+M`5rlr zXGc?~P8?1;+tn{w-R73*)D#kL_vY}>@A1;xdkAvx)-n&EG=J;~#$<5sa=F{jmB4eS z<~az7j7;vV328eVo!X`v=}wy4=bZT!Bs6QaF4tYHI(TPHkkTL2qlKec4lUEMt`EBQ zU|ltkxu7^5U!MoB0(fLZ z7HV8Fx>Gz?3r^0Q?E*dh^K8Q2L8q%p9a-NZN;Av*JG}z|2MjKr&E~-aG(D$-+_dMB z2=NLmrUM3t(=w>oJm_aw#Z&B5ryNR_CgjMVd@j;mX}&UdIFh{7rncB_)#Y#-lQq(g z<99OEfy-}UHQ>nd)7=o8M4cB<j8H zcdC!x;$R#2<+syKZEMMABiyo5TfH=F zzuno z0QabgTX_k{au1dCLPh(v?oC|Qc$X*KYGX{`F;+q9ZQaEZ{XE?6at^`N`byHU;WJFLkf>gaBEVyp3qCqdz+wU$7A(;m6no?Z=3pbiJ57U!WAYvE5- z{RhEu5X%RC4q(CPevSgiVMF6XROMEho1uYf>MpF;v(7Fm8&Qus`fQ`K=~^4ddXTPt z5t7TOKErV5fkLJAYT2(fU6E%G94NT+s5NtTq|QMz?#AxM_Y%s$+g+Y?+$xJJuE=$h zumNWwONU8)qQ#EvbtRtRxK?w{w#}~AgQMWCU~kgVL0d;Rr+1Bmy`dd+K?a22`UR}DWvS;E+Pk%GV(hozb$8D=^oUU|G00?knXxBake2{rnM#f-Nfo`EJdleH{p^U?-&Uv8Q zQPrk?P<1YKJ7xNZYu3+tzav%8Y1p-JFO3W`?v6{R8tYEF0>7Z&QJy!X&7npNN4ie_ z5aQ@%J?r>VtEH2$1ly?9gLp>f^crt3VHo$GhB-S4oW}S=4@`)Lf)9F%lm)_L?PmbKL_i~gdvxYs=6B+aX{@!;FEzq)&O;#q0!Q9(`EdXCSy zcW?yd(jID}lYeY9EYM4wACFq(sySO@PJ9jCx_IQpg-V#ka?^?f|rAGZ; zKX3I|;m9*SyOTqIAL=~f`n_8B?RN652U~07F7LcDM3*PsnmQw854-6 zs5fKN{b(6I)#3S~o+MLmu5vj+LX668EQK-MKjBo9Bdhu;drI?M|H$MThSW`ZcfHz zC;lv;wC0^8w-n!;{^N~tD(OU@jaok##ZBO-~!#NroFf7`!Gkuq1}tu$aBrCd6c>livdgcHI=Q~oRw*5|E3Gf5RXc_*hsIk{Tg%bgO1vG) zAM~*p#E&D^Yl)y_9kdx<_4Z6_S(5Vj`cfTTo%T&*3eeG}C)Ssx^LDgk$96u{*3($u z;8s+?Y8|~!OYNwQ^rLou-(DN`Pj2RQv`w;;Z5%zE{2et~Twg-4rP|x)pr?m+_BN}d zw`qMlS$}<>YHzzY=TnXz^v8}iyRWm&^b~-R?6CQPO}o}^KPl3E&3kLb&HJ5}*iqw- zy`a4&?3Ww?c=Hw)1GgIOwA5B99kuHi?b>VC&Q3>e&i^|0TU}B+$?N-GCk@|BJacqd z*Z1~z@;#o|aQb-w-}lR+aTuEcmPF#48@U;6oDJZ%qc(0m^UnhOr@G#ydJ&vAH4_-1 zOl~o9uCdW+uuR&pwAM!k>zxV<=WcSIl8OHMXT!oRmZb-5e3mTy_jvViCaK&wcV-&G z6_`1#Z?g^C0JjzDf0NiI;<1fBKgXlSP)~i!^P6f1c#i((Y(jc(t(KbH=5Xk(0DZin zZ`fywTfT6MuaJK8dTv<|81I}*tS3J1rTpMcwqNJuPhce268vWw`YZEQKX5dG&L1`85+? znDufJ&%*1^drI=>*=XaDTjVu4oaJ2zy8ozmx0c~*ME~F_hmq|~$(ElPd*$amy1yxj zGNySYy4t!{@3bZAZ$Z_JQ;xjWErE8jH`oLS$ZRL$7JFLK*(7y+mD@;5_@|Epc+5p> z@|d;^j7JEZ!*U0JhY-s56X%=ziKGf0$4`uLt6YRPH1daCjBkthaDJ#l_bRpNUTDEG z9>Jmby-2ScjIk875Ne*ZmDkD_3i84Sf;jU z+AvC*y{X!>Ryul`UV)plJKhQ|qv7$^o6hfYyy!T3sXoYde0$vb z#kqG1xwbNw=X$$SFHa3byN;IaOX8NyA#5V@AGiBdWI{a-$^M?H`ZR|N)qU-MYD;}G z7z6gAO_G?8Sa-DN+o!C)G<=lD5WEXXj%V<*DirsH|@^VDBeiUAB$s%lyePSCD#Ee*jycYOCH47((2~BX*P;;9PYD9QuH$ zU7zDBQ11}(_*QLV579Z)gOkAhw*@hcvb3h$-{Wiu`TAN%YBiv>2<{LD>$MN7J8Y@n zu4~>}sw>I6^U!J=Zu9Gy2#<JlPFR`?C z-2UASdZcqBnTo8^Tl*=^v5dE+*rz6N8qIRs6@qWzp)V)@U6IH6vj2ac9}Gu_S`O4Js1rRM2) zpI*|qCRUF*4dLZu$8+w*)YC&fSq#=xCEMrso+En~0Bt1fYISQzqQ|{4M6>JZpumpk z4i>(Sc_fPzcUi4N3J)+g&|&Y0Sc%IOPV_fgUMT4b-VW<3oFY88EL%`*tH`HTAAk*pvpLJUl!gfUBo9$TN7}TILl!tu1UHdEx z8NeSy@v&HJbF{l}%Klv2pN=N1_|x0^3gLu`KMhmGpGN(ycu`=f zm*mBmvg3`H<0WLWAg1y1mS}hU>6qP%O7xAaT z1&w+)MWeh1p>J$o^e&{f=qOr}6^a69Mw)=F)*Fq6<4=S1mgrV|3zJR*q^-mFbnS|6 z56G-jlKG$o(p_k!-gtU<^d0d97SsAq$|k@27hga_#^@oD-l6Eb;&ZKeyw@yD|8oTh zMk0{-Tnt8T{AFL`ui#1V07k)4f=#_!qp|pzX72bI5W`IA>W$tOzhJ|OUaMS`G?Y%92$wGg+zqhxq@j3h#heT9(!L}okh9XfI`p|Z@IU4DX-%qCdr;GKntq$VfHuz2a@@~W_^A+2&4Y9R(8IPhmJ-5XhzhEKGp*43zy7W~K3?X^8 zD~WeK&~C?e6^llC7*~6sO)sKtFLK1}s0}eTA|GJaHcO#^w?^afLAcr=672~7;Tr&M zDDriPfJJq2y*-T1QXX^(g?J4 zi1pQNLI1&s66uYh&0qljMZ_z%L^s7EY%EqYB8^1zqZ@vK0~=~bb0a&u5&M`lEBb$L z?4`%@@9+D1&%Vm9ngG{Pq=rNWOAJVr1`kR%u)ND&MZ zqzOg{P7<6V$PoMh!Q%v&uBb2&*p2|R02L-N93ki;h!VsIx(V=%8x`I}u$f>BK`+5p z0_d#5eFSlW?F4TjxQ*bg1h*5sjo=P~zkcJ5H^P5K@H)YF2|h*eNrGP>_yobn2|h;f z5rUs5_&I`~C3u109})Zv!A}$X6v0mt`~<;|6MUH9Lj*rY@IitP5Ij%tqXd@;8U)V~ zyqDlT1eXX_37#dmNU%asC#Vrr2`&&U6Z|m23_+gYhX|e~I7@Jp;A`Ip_#=YN1R%W; z2J%Mu9|-=Q;O_|jmf&v)zDMwfXcYunfCkzO*#OklH{OV`E%_G%m;ABi)eg82aP}h`U~-Ag(G$RImy3b zzTX#rPEQk`i&5-z!c3%>;t$HeiP4KDi?S|*J0d6|$|9mb!bAX6-zf@5YbR6}X(!-Qc;7zP?YOB53$pl1X<19mj3iqFX94AHWn zWugm$E)bm)bdKnqj@NGNBNqRr@f2@Go(M$oWymRRq$9g%G@ zI148Kf+7v>gb@;JA-&STd@2k>As3`$qN+Hh`9Qpm*)Ne^hp_A*3l36tkTZrC5mWMX znFRWnmWD~SM$S6OjN$FU9Ex*f^aqW7fIR~SZG21n!MEh%HGT1#T)eI?UYCoP^uY$q$)V>7BTEbk9Br z=zUA`<&k``CSK>vmo&wgBLR-MrM9?l{29l)22_uwBKlo;>aCXQYrcgs@jJhg*uQW8 zL8UgM?14S|_zy=(mf9m14;Bs==J(@$%*DBL`)7~rJF>4>*k9Oxc&>16zIgP=z|nmJ zhYlY;xW9lS48&xC2+zP#52(taxO=)*)UQj~BJV0pnI~Xxl~;L8;tipAoH}0WfpBjr zj>*lx-+Vs&HD!%WLM}E=mHO(MrM~*3&fvgN0FPM2=RSN6U9r@m=iM}rIQQ`VO=X9( zPyNu_e}C=U;q;a9e>vWF=y&!oN9y6Td~xa7Y-I(?oXuv&CeOMCOr4#r;jJahXXh$) zyqx}Q<=hXS6+{gdm!@yL@_`G94}a%{ z4?t(<@1GD)I9LAf7d(7;loh-py^7ay;U#s8wOP1GaSz`d$iFx4QHepp?#4sRiA=um zQ=H=b5BjskrV0G0oO7Q^eES7UyYpAV0Xq3wh@fcxg+P+F%eUY@FI=_MS-O$=I~#(t zD&E4B2TbGmE{mhD2^@aq7wsgSv`zImE*OAoDt9k*5YO?k~E(lG#YcK7=V( z#%aiKpX<)N`iXRWDjh!xWyZlz3+dw#{d`qd#RHwP)P5QD zrsn5y0E6JwhL%vjg3iL{`|`mD{2LWrCQQB(bfPrJ9=y_4ycwNzJLso9^ELt=|G2eU zza4%Qhp-lU29FY)ysegW?f4+{I*iXe>cL~CBL2<68}{`^3&m#oErt9^KNj zrRR9Ty#6==5lgibJ6Ebp57%ZFii?HX?#0q&B zpQJP1NqG>KNHm3I<}g~|oe4gjIBM-o@Xg~Vc8*=bh*`$Fx%qm_J%#1voqM$eyc4#D z*AvZGZc?B9J0%~=t`%ojswmT3gTlA>LQlK~vs$`{_g0-R)^1Yj0Y_>Af36$^^w||^ zEbj|Xl=1TI@`;^=8s0lud8Sz1nOG_5cVnH{IbSH(il$N`WN#a79M$*wbU(hgX#_AF c-|Msx?rP}xw`M60ATQxe`Tzg>pU(pSANI=B*8l(j literal 92160 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 diff --git a/csharp/dotnet/bin/Debug/net8.0/V2GDecoderNet.pdb b/csharp/dotnet/bin/Debug/net8.0/V2GDecoderNet.pdb index 472eec610e196105c5fdd7158333eb4ca7755edd..4883db236786db0a2ec872c1e197ec95d5153ccc 100644 GIT binary patch delta 24895 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 delta 18346 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 diff --git a/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.AssemblyInfo.cs b/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.AssemblyInfo.cs index c84aa42..a76c61a 100644 --- a/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.AssemblyInfo.cs +++ b/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © 2024")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+fe368f2d23641061368bcd6a69da3991990085d6")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a6af2aceedb2c7070ea2a26dabfe87180156642a")] [assembly: System.Reflection.AssemblyProductAttribute("V2GDecoderNet")] [assembly: System.Reflection.AssemblyTitleAttribute("V2GDecoderNet")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.AssemblyInfoInputs.cache b/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.AssemblyInfoInputs.cache index c18d047..b2255ad 100644 --- a/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.AssemblyInfoInputs.cache +++ b/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.AssemblyInfoInputs.cache @@ -1 +1 @@ -f32aa50a95c554c2500fe55755b8877db9aeaf4b42ed47a256d4613dd3873036 +dc1404d97a6b12c300b7aa3a4da3c2f29b08f0c5428d19fadeb7c8ee3acc2ac4 diff --git a/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.csproj.CoreCompileInputs.cache b/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.csproj.CoreCompileInputs.cache index b55cc49..d2c2113 100644 --- a/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.csproj.CoreCompileInputs.cache +++ b/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -ad16f80ccd83ad882bbfc2dc135308cc57c1313a1e372ab828e094635a7e4f8f +908c1d3d2df67752e93f781d8e0aedd6d0c6f06c41a88a8327628c2394d311a2 diff --git a/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.dll b/csharp/dotnet/obj/Debug/net8.0/V2GDecoderNet.dll index 6cf9d7be8cf5bf968e60088f5fc799f9d9a1df04..e56dbd8d69c4c75ffbf9b216e3986f476a9f61b5 100644 GIT binary patch literal 101376 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 literal 92160 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 delta 18346 zcmbV!30##``u}qdm%DI55OH6)2!aZ(2!f*Gjw>kcrgDX=plkvvXm#&p5zQj=&B~fz zQJO6}ZB%1TO*WM^)wJ01Yfo$18>eNmX|vz=Irn|_$kgZa|NQUA?|IMnJkNQ~{+#nJ z_~Z|=`DwXljK6&tQR1aUJBJhHh9h2BS5sEGzLxNNCY{KJYvSTUdLHp=j?Y{?YZ|UO zV~Fyqz^9Z~tp(qAV(hZh=@aK2ed5H_m;>*xe&^Knk2{I%OZ(q4#1%m#pfiQ@0oy?u z0jHpK)PRIv8Aw=(YagH<_yDj265!0Jo2pEAT=|D|PR8%C(1n_*8)9tu6(ADe%Cr6@ zMsJbo-zo$(2}$?h`UtM4as3h3WGQHrl(ZJt3S1B1dJnGehi^*MK7P4i|T6R*a4m2U_$Tly;Fupt(Lhfi9!LR30Aqnkz)T_TgR zbwCAB2W$r#fnC5J;1G~j$okQ=rO+Qu#|xwB&PCDmpMbDsFa~r3`T~hSDv%D02l9XdU>Q&ZlmgX2JrDqP0(*e#fOf!t zJA!+FqrfrX8Q>-04d5j3Dex8WAApv}kQ0ajdI26_FfbCx0&;;opa56~6al3`HBb+n z2F?Iy0sD#=>arrnPdyMB03-v$flOc`FawwmECE&n>wrpN3vem0184)T0d52i0e1lp z0)GLH11|ut1MdMJ1E+yAz*)ezGKMNv`eSG_B9{Oyz!ktg;6dOoz;WOO;C0|V;A7x4 za0cjiQ4A#kX}}mD=ORJNfJ=a8U^lQA*bjUHELsH*0h|E3uNJfoIN(R{F!1$iN&VJH zWR}P*X)@w@z-_>HKx>ht$T)U_Wpecp7l54WpqzF0cgn3J}F%lmxs4{0!Ji z!YC4m15$x0fd3T)9|6Athkar68W6uOj79<3>ufX`coP&fwzFK z0DGC8)&Uzf*y$*64ESH*^ack_-{_!uz+zw(-~%dv%|Po$ho7!Q4Xgtyfi1wLzz*O+;4i>&;054y;Ge*E zz%M{}m6M`??m&NRl;p>DG_gt$M$6o}-o+MWacrkF#N-mGYY@K#X)Na)UU1$jC72DI ze;WaoTKo`_ZQ$4+l)M`*;o#AV`-z&uLJ2*P&;!C(pvDS4!3TifWAZ-WGr%XAyf1hx zHrxW!-~ez;BI*yh9r@$I`PUB{F7s6I?a*&VGV@{JH~NvlTeTAj!_5pUk!Er3ft|>} zd<5i=Bfj6%9|`^h_&#tKu~c!nuI2zeyYFJx!^M)Ycl1N!RI25lai880pEi-_dpluPc`#%1*0`yjq*(HSI3jZD1Z~D zA;ZOpe})Y3^)%fy&>d+O9|+myrhEqExri?|`AqO~#0Q&v7WiF=drdwYyaRDQtFgT~ zL10tV7?gq zCS+I+Fkj+FLSJ;pJ7$Ju;9*d{-{i}|-Qc^y49ms#?*I%_tZEK33GoD6yiZ9nh9&cS0SDO^nyaMY2cqImw5?z5b@Qf+z0-sY7J3u z$k&8y8;00|0;TFe3VUua#kjZPnc}&*;9>{A= zc?yOg0eq{;8zE<256%VhiI({`@Y#s7{ej@yP5tW~7)C!5cn zeh*ZRKt2e(#gzLn&dhg#XG2~Cc{2EAru+%WnYVF%$a&e^W!T5$w}NwT#hCmy@Tb6MnE7u9PlYTQd?fPU0nR_3*rUMj zGU2 zh4H!q;=DR^`2>w~1$gP|@<|$Jd9KFU{uGV-Sz)S{zzRHemO++J*Eq{(Vz;p5JO}bL z&b>1W{4TS{3QT@CI9D_Vm<{O%5->glH+-HS)A&fl*8}q)zt=3lt8q5Y zo^L+n_nGoU@O+K?zze`TlpOu_`@2IvzFo|6pz{ z27lP(b0A*|{MqE(gS;{<&ONx?;ynJWu)<2fl@(TMoaGm3oaH=|ErTp)cWiN%uR(<@ z&OK73@sCaZ7%J#z*O>x%p>WKsF?Tcb$H95oF^aL8|7yy4f|h8Uw`YqFgp9Xm=1)LB z7xBd=e-hl_jJg#X5Y^G;5sYEgEO}4)*_6fvnKlNnxkPS-wl-Y~V7DvwXK!VRmG^5-j_ye}%?bzm3H@H*1{bw`iQ@2Q<#|gBoY~tr~am_#e^| zSm8E}vw_<+&T>9j>O;mJ)Z#2ZtZ~kNMB^;~qsG<#&o>vkfx9)%2JX=~8@N~FEWc0V zEN2gD*<<9 zoaN7IoaN7HoaNj|eMtUpag?trz;{2o!iySb121Wu3wT-MEI*-fmh-M@*<<;u8fW=y zCg<{11ztB3n6mXRrE!+Ot#OvWqj8qM8{(>bRe|?9DZH<7HgNL% zq){v2lqP3`A84HQKh!wO|Dkb~f226}fBvxo?{IpHKhX+Ifb3IE&ibEeoDF`iah89f zah89nahCs+xxW9O?xgT9jkAHTvb9(~1AkiT|kaSm^(xaX#Gq4E~CFepnsie#}gv&S&YS!fW6uh;x_!f();l z8N4Qc13V1zeBdnPZ<=xs_^;san0yU5iSv9nQ}B09c`~>Z{__bjNC?vu3c+m}=L&{{ zzh@d43U1dp_mHC#cXr|~jqinigkMXT%?T#w)(w4 zXq+3Apz##;KUM;F_qV`6DEw#^=mt;JIM0D3jqf-4&v;}#9`WHO{{_5`*3p9SaN z5Fi;`h!FSldCW@af%py}1q#ws=n6hqVye(=^UQU~x2#pa0>Z z5EN`?fghPX9J~_oO~7!-?WUa9{Rs4$!{iR|k&s)Q8!<}b+~Z+zCEW z<1C+~ahB(51@;G@tjSq_ipE)gs>!*0Rp7Kv3ez=%yo~tGhu#A-HO>a}G|mOi(m2a! zYnS}z`JD{pYn%(<*D!ho7igU23pLIaC{)}ZS_Z7JsFMP} zl&}o4e2G>eUS>-*J`Q}D#(54b*Z3|m>lCM~~XaQn>!E&%UHFHl&eahBsX=>_sN z8fSTt#<_)FjkA2M##vqr?zd{h3MHtq#b8k|rXws>qcKSJkpBCxqAPNO96*&~agB;3Bz-Zu%4{UFlw=#L~Uc>4vIc z{6ih$RK>U`)F0dvcrS+fO7)UKm4URr$QxL_V6zCo)7oC$S&v~ zsz2CGh0`u*sv+R>e}S_8G(xF5$3{D#gwF?%!J#VQQt1(t2_1Z1qy~c9Ayhj;xp0>Y zqxeb!Vdznvpgzjx`_K$S%h@KM6P@%vLYF%1_^t6c1Ev4YW>YN=H-{i(jt3=7jW^7x zs?0@2op@r*o!r7^C=!(r>M0c_N+jJmYKY_wNZ>vn`f zy(y6DTR3WbJ=caaPAIUNuAP+iNKKZvA|ITt+yfh8WIx~>E%Vd~Be@A;H8 zNwuuAX_tEJ6r~=m;31nTV6PgEuF3+h4yPI*Y~`?Q6(8jJZ?%T!JU;$IXfyj@n<}i8 zYo*qLP+vnx8ltMgeTGL9O6PIJr0SJ0VlQZ;2y|~mXb&*038Z5^Asr8;RIX}1|AwA= z!tKCZm{Jw$@q(Zus(?_o*HkZE)I?uMa*?|`5q)v$&UzT&|Q z;7N)Hvk1d@Huxdtr2n@$A1dY$3Ja$j(HbWupqL0+gfNP}M|w2fqzYKAD)fkI@m~=S z`HxUpVRSwP{r^XZC4H_`L-TehOh`&nhIr)g=pAukF0fGMKId{-ZQ{IE$A-M&Xmqut zTU2j7r}`sNmGX_U-v({W|F=PGG*cBb4xv>HItN|Em9WuCg!rfiAyx@Y2s&TI&?g&G z*$JaQN{1^a=vx$Nqt}q)FuR>|31va5PfM}??o+ipqXZc$GuPc_W>D27b|6B1r{$XEQ3aXY8o&s|l9YsjlIxK+j-@}^FSN+4=5ldeEG3^N77;_AvE#suX`~UeFB<<8K(}VEE%tRSReZzAR zpE7o;iWebn%PLm!0OEhmYEtn7Dm;mlwb>MArw7M*5Dprji*WY%B81~ObXIil>j0S}V5brUg9pUjA2au8&ehl%+c_$Gj z%%X5R-8(xmJd6^;r>d|BDVydLt9StMo8~mBcst@f=N>~iW$sCY;q%CDr}B9ogjdZ= zwDayc6`?;qya-7j%qvz&0mN+?_O~u`X&P z5WcgdDBe!*UKBu>yQ&@Gb*qjce0tSMgpsSsgBGmzAZ#lrLiok%0K)ETJPCHXaZN75 z&(;(ntSJg0e7vX~;SWW}5Ki%)MA%k91MRfe>p^JCC_?zF*B`(oaqUTjudSs-7I+ZG z7w00pySND9*TtSBJ3U%bgs`n3fN+nm9pUr7V+gyiJBiSikvqsv_pK{JID35n;jio4 z5!RF*LwFZL2R%?)lx!z&Speaj4ebc;-QZc8!b$Bz>@=_3lgix{NK@U5uy-Y<{nWyw zoQYX$)|6Kjd&_G_l5dNzvTkZsiEq^T=;-s&bXs5It*G!CRp~<}cuPvk>dLArz2(!q zbzUki_136J3A0k4x5QVoW-ZlMluxTFrnO~twTr42B9+!Q)cIK6{xn(TerDZMML#6JQ-AOT3So{s$l9}u-_12cs zy3OU~1zzK!%>KQ~eU3y1>*|oBj8lD; z#lBiHJIN4P$wqosY`Cx9TU=+X%u0``_LkMuQiZp6qpu{txXx!hn&mOhW+fV9v*V4T zY|nmhb3{$E~8mO$6FZq?_#;I}LjBm#!bR>=3Q-iPt>*;H!&PuYd5SWsf{EY{lu_&%6?K>dv0kmq($F<|v|w z$a6)sHNI?=Ow0~zYl<@3Cr-+3YntWx)1Du^t*cTgcga&xcO8k5pQpWY;@Fq({Q0H( z=ghS^{x+`5lF>6!=enxms`3ksHSIP^Cgs4`Gsb~Q7dafw?&hw|y$pM9f^kD`w#hdb zZ-YNGdGP3v{5j8SjVG>sDg4m9N6)?&^Vuy&j3*B!t{L~lfl~=*57*w;JY>9x5pLlW z4q-PQp1M_z%I-*?mNUp7bn#vuhj5&9x(Qpfo8lzdDbB`^fx<{g?7ETCX(xx|O#Zs5Z`4Ci(k{!yk#mUy36Raips_(q9}ICXP%LM;41C>*HnMK@nV$6ue&Yzn^5& zqjE>4*x4#}x#Z4o)VCyJB|5YpR~MhsngKpyck`Lo?B95f<#I5MgE1VS3V}v+r(cvI zf0}f5<&TANAToPw2B%!)Y;aQycdnH@TRLNDqP<}%WuV7tkPT;FOSVknFJ4qr(Me89 zmv|zKZN))366fTxcJvDN8W#(?@@;f3EBgnCU_TLDCW2+6@sFbElxV(7G=DCa$zUVN z#_w10*)?$W@7Hmpv%$f4`gvRyP5}}{tFoqYCA#aCU&xhDw>Na9v64SHmJPAOAB-2l z|A@vhqN%G~MzU#ja461%hy8Z9EdT9pf#q?O$qiPs8Yfye2F9XjdL(5_JSi`b zc(CBIMWAKj=zoa^Im4y18>LEgCQcg;a!D5QoPun;bS8wl)xLd-9d{XPRF{v7@aBb* z9qaQPc&xA-$qpLr@j9s|cLIo-lX1MDMyWBkV@btJC%&!cKZY8?Y5oiwzB)v&rPEXn zP(w3N6n&)6Z`1`-n9~qodCG=KB8U-OA%dl%akpr?Pc)~C*1>YQ3TDSFC_5 z>OvSjWbEFHuVy9Ti|{o(_ji(wZ&S?V0_mJ=S%FMdeX)dhf@+=!P87jyB6y`}{75tn z5lucdHt&d*UZSN$wA?LPGi8|!9>z^@%TIFWYhqWK*mb|y^|ib#Ltb{L-1Vv4{fxXk z7@Ua3FS>kK2gGGRi{1VvxqE%ck+UOKj$C!}Jnm_DPSam2m!cf`TuvKzPJq!~hY2mVBKPRu zUO>ayMPfNmXaC#DY5UK6?eQ$c*&l1k^wr9VD_=c{8x|{qgGBHv(KJ9b9g?fzo`+{+ znu@>;C_9hK#;pu)L)l5;-U5FiY3>82!-a2iQ>KKkf-#2(JSKvR{S>&*#WwDP4Q%GW zwGEBt`eWLtXdS5Tv6gU-zJ$%iqnsiyVLv6Xvz%*( ze?S*S@zV_#Kl*U7M~Ow3hN^2WFt545`ikI8(P$Hm&x)qMiRMGHisX(tqII!o?Fd|t zhYKR`2^s{C=BDK~d`KS4vj-2X1Pt>-iEvbUWjH=Um3WbmE}dQY@d-M@tRGVNtN?Wn z`)eFHSa5+aPQB0<^LD}dmWx*283!($o0gAu(c-lHg>0dhs1boz9f7m1z*&KR{@`30 zyi7DcL9uX9BIt05SetYP_L4|$kUhib0{(4`cJS!~MOysz(OPm>xm|Q)IAG1Yg07RI_uQ#IDqQ zuW0^Nw#*eRugd1z16RRyieMeeL>EPdmNRx?l!sy9jdp+H<&BEMYqL-G!bvKxeST|!*Pam4N!AZZID_P#v(i(4XIbYTlB`{JO!sDV*>YMn-alx9tY_(H_}W#2I9Ohf_JwbI4@y&luLY~ zkQ)I3+|oQ6hd&%qiN&Gi#+JE@#@TREhi(Zcqbtm045W)HIT;yEg>xNAv$;I$IHVdi ziuH>zi2`QR8rI^m2u;GHI9QBWo+x?>f4&Ir6HU*OY~CkYB4o=cv16cUoh^30E_S8J zoqrEphZc+A%V?XrM;OL6f@fVAYL+@0sJ4xfc)Bn6Xf(lw$vT~@lgN$*yZ>04$pO5} zG)iH?ET(V_nf{RY!o*M-nx>zbGI^ci%zOUe6fL%h;6c#{KiJeqw6v4NIwgv-&IK5u*>)(xuevf@qF{)4D@6i2cl?(#58m8GKu7d{Z4mUy_xRxs(Vbe3&o<#gYB}h z4>?+jT`k3;rMRXiY96$^;77Mf=R7_sMDd{p-tB^c z43&)W)yHur@4umOv^T^M&by+qx1;e3SK}9=@r(LiC`bfTjT?e}a)$9V##06~&74XD zIVG3-8wUk+tc`n_=ObS22BFX@;bC=m9( z9DfrPEp_z9dsGoT(-G0QMi>{hL>LpBUE%#G#~x$+xpBS`)3T&vV)JtXw|J3}+*dew zhp(W$+(Qf*V=UTtvB)r9-q#{BjiuMj5@U^%;H)wL diff --git a/csharp/dotnet/obj/Debug/net8.0/apphost.exe b/csharp/dotnet/obj/Debug/net8.0/apphost.exe index 0431c01833a84d90ab1fbb55549e86b625e41b3b..88ed9693192ea6120ed97d9e8a433719b332cd26 100644 GIT binary patch delta 99 zcmZpe!r1^sEsR^30^I!*8O#_G8PXVxfMha5DiEeHBmsHJ4CV|5V4Mn+0m&KxRi*&x fB%tb41`D8^A&@ixlBPfzGX@ios_paLnG%@*1fCLk delta 99 zcmZpe!r1^sEsR^30^I%67*ZLG8O#_g7}6Mw7*c>3#4}+qWH12IhETaAhGd|e8ABov eTLM{$KygbTGz60dK(!VOrXUsD=esi{G64Xufe|49 diff --git a/csharp/dotnet/obj/Debug/net8.0/ref/V2GDecoderNet.dll b/csharp/dotnet/obj/Debug/net8.0/ref/V2GDecoderNet.dll index 3c522c6ea19477f66e204bbfdcefe5ca3e8d11f0..43d8722cab43656f88a5b3f8f30e8c9989f4306f 100644 GIT binary patch literal 31232 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 RXtbYu68k^Z|EF8ve*kuv2Xz1d delta 12373 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 VqoU)H%cdB{k)iTa{yVBO{tjIkOMw6Y diff --git a/csharp/dotnet/obj/Debug/net8.0/refint/V2GDecoderNet.dll b/csharp/dotnet/obj/Debug/net8.0/refint/V2GDecoderNet.dll index 3c522c6ea19477f66e204bbfdcefe5ca3e8d11f0..43d8722cab43656f88a5b3f8f30e8c9989f4306f 100644 GIT binary patch literal 31232 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 RXtbYu68k^Z|EF8ve*kuv2Xz1d delta 12373 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 VqoU)H%cdB{k)iTa{yVBO{tjIkOMw6Y diff --git a/csharp/dotnetfx/App.config b/csharp/dotnetfx/App.config deleted file mode 100644 index 033746a..0000000 --- a/csharp/dotnetfx/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/csharp/dotnetfx/EXI/BitInputStream.cs b/csharp/dotnetfx/EXI/BitInputStream.cs deleted file mode 100644 index cc5e8e9..0000000 --- a/csharp/dotnetfx/EXI/BitInputStream.cs +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * Original Copyright (C) 2007-2018 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -using System; - -namespace V2GDecoderNetFx.EXI -{ - ///

- /// Bit input stream for reading EXI encoded data - /// - public class BitInputStream - { - private readonly byte[] _buffer; - private int _position; - private int _bitPosition; - private readonly int _size; - - public BitInputStream(byte[] buffer) - { - if (buffer == null) - throw new ArgumentNullException(nameof(buffer)); - _buffer = buffer; - _size = buffer.Length; - _position = 0; - _bitPosition = 0; - } - - public int Position => _position; - public int BitPosition => _bitPosition; - public int Size => _size; - public bool IsEOF => _position >= _size; - - /// - /// Read a single bit - /// - /// Bit value (0 or 1), or -1 on EOF - public int ReadBit() - { - if (_position >= _size) - return -1; - - int bit = (_buffer[_position] >> (7 - _bitPosition)) & 1; - - _bitPosition++; - if (_bitPosition == 8) - { - _bitPosition = 0; - _position++; - } - - return bit; - } - - /// - /// Read multiple bits as unsigned integer - /// - /// Number of bits to read (1-32) - /// Unsigned integer value - public uint ReadBits(int numBits) - { - if (numBits < 1 || numBits > 32) - throw new ArgumentException("Number of bits must be between 1 and 32", nameof(numBits)); - - uint result = 0; - - for (int i = 0; i < numBits; i++) - { - int bit = ReadBit(); - if (bit == -1) - throw new EXIException(EXIErrorCodes.EXI_ERROR_INPUT_STREAM_EOF); - - result = (result << 1) | (uint)bit; - } - - return result; - } - - /// - /// Read unsigned integer using EXI encoding - /// - /// Unsigned integer value - public uint ReadUnsignedInteger() - { - uint result = 0; - bool continueBit; - - do - { - if (_position >= _size) - throw new EXIException(EXIErrorCodes.EXI_ERROR_INPUT_STREAM_EOF); - - byte currentByte = _buffer[_position++]; - continueBit = (currentByte & 0x80) != 0; - result = (result << 7) | (uint)(currentByte & 0x7F); - - } while (continueBit); - - return result; - } - - /// - /// Read signed integer using EXI encoding - /// - /// Signed integer value - public int ReadInteger() - { - uint unsignedValue = ReadUnsignedInteger(); - - // Check sign bit (LSB) - bool isNegative = (unsignedValue & 1) != 0; - int value = (int)(unsignedValue >> 1); - - return isNegative ? -value : value; - } - - /// - /// Read a byte aligned to byte boundary - /// - /// Byte value - public byte ReadByte() - { - // Align to byte boundary - if (_bitPosition != 0) - { - _bitPosition = 0; - _position++; - } - - if (_position >= _size) - throw new EXIException(EXIErrorCodes.EXI_ERROR_INPUT_STREAM_EOF); - - return _buffer[_position++]; - } - - /// - /// Read multiple bytes - /// - /// Number of bytes to read - /// Byte array - public byte[] ReadBytes(int count) - { - if (count < 0) - throw new ArgumentException("Count cannot be negative", nameof(count)); - - // Align to byte boundary - if (_bitPosition != 0) - { - _bitPosition = 0; - _position++; - } - - if (_position + count > _size) - throw new EXIException(EXIErrorCodes.EXI_ERROR_INPUT_STREAM_EOF); - - var result = new byte[count]; - Array.Copy(_buffer, _position, result, 0, count); - _position += count; - - return result; - } - - /// - /// Skip to next byte boundary - /// - public void AlignToByteBank() - { - if (_bitPosition != 0) - { - _bitPosition = 0; - _position++; - } - } - - /// - /// Reset stream position to beginning - /// - public void Reset() - { - _position = 0; - _bitPosition = 0; - } - - /// - /// Set stream position - /// - /// Byte position - /// Bit position within byte (0-7) - public void SetPosition(int position, int bitPosition = 0) - { - if (position < 0 || position > _size) - throw new ArgumentException("Position out of range", nameof(position)); - - if (bitPosition < 0 || bitPosition > 7) - throw new ArgumentException("Bit position must be 0-7", nameof(bitPosition)); - - _position = position; - _bitPosition = bitPosition; - } - - /// - /// Get remaining bytes in stream - /// - /// Number of remaining bytes - public int GetRemainingBytes() - { - int remaining = _size - _position; - if (_bitPosition > 0 && remaining > 0) - remaining--; - return Math.Max(0, remaining); - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/EXI/BitOutputStream.cs b/csharp/dotnetfx/EXI/BitOutputStream.cs deleted file mode 100644 index aa9ced4..0000000 --- a/csharp/dotnetfx/EXI/BitOutputStream.cs +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * Original Copyright (C) 2007-2018 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -using System; - -namespace V2GDecoderNetFx.EXI -{ - /// - /// Bit output stream for writing EXI encoded data - /// - public class BitOutputStream - { - private byte[] _buffer; - private int _position; - private int _bitPosition; - private int _capacity; - - public BitOutputStream(int capacity = EXIConstants.BUFFER_SIZE) - { - _capacity = capacity; - _buffer = new byte[capacity]; - _position = 0; - _bitPosition = 0; - } - - public int Position => _position; - public int BitPosition => _bitPosition; - public int Capacity => _capacity; - - /// - /// Write a single bit - /// - /// Bit value (0 or 1) - public void WriteBit(int bit) - { - if (bit != 0 && bit != 1) - throw new ArgumentException("Bit value must be 0 or 1", nameof(bit)); - - EnsureCapacity(_position + 1); - - if (bit == 1) - { - _buffer[_position] |= (byte)(1 << (7 - _bitPosition)); - } - - _bitPosition++; - if (_bitPosition == 8) - { - _bitPosition = 0; - _position++; - } - } - - /// - /// Write multiple bits from unsigned integer - /// - /// Value to write - /// Number of bits to write (1-32) - public void WriteBits(uint value, int numBits) - { - if (numBits < 1 || numBits > 32) - throw new ArgumentException("Number of bits must be between 1 and 32", nameof(numBits)); - - for (int i = numBits - 1; i >= 0; i--) - { - int bit = (int)((value >> i) & 1); - WriteBit(bit); - } - } - - /// - /// Write unsigned integer using EXI encoding - /// - /// Unsigned integer value - public void WriteUnsignedInteger(uint value) - { - if (value == 0) - { - WriteByte(0); - return; - } - - // Calculate number of bytes needed - var bytes = new List(); - - while (value > 0) - { - byte currentByte = (byte)(value & 0x7F); - value >>= 7; - - if (value > 0) - currentByte |= 0x80; // Set continuation bit - - bytes.Add(currentByte); - } - - // Write bytes in reverse order (big-endian) - for (int i = bytes.Count - 1; i >= 0; i--) - { - WriteByte(bytes[i]); - } - } - - /// - /// Write signed integer using EXI encoding - /// - /// Signed integer value - public void WriteInteger(int value) - { - // Encode sign in LSB, shift value - uint unsignedValue; - if (value < 0) - { - unsignedValue = ((uint)(-value) << 1) | 1; - } - else - { - unsignedValue = (uint)value << 1; - } - - WriteUnsignedInteger(unsignedValue); - } - - /// - /// Write a byte aligned to byte boundary - /// - /// Byte value - public void WriteByte(byte value) - { - // Align to byte boundary - if (_bitPosition != 0) - { - _bitPosition = 0; - _position++; - } - - EnsureCapacity(_position + 1); - _buffer[_position++] = value; - } - - /// - /// Write multiple bytes - /// - /// Byte array to write - public void WriteBytes(byte[] data) - { - if (data == null || data.Length == 0) - return; - - // Align to byte boundary - if (_bitPosition != 0) - { - _bitPosition = 0; - _position++; - } - - EnsureCapacity(_position + data.Length); - Array.Copy(data, 0, _buffer, _position, data.Length); - _position += data.Length; - } - - /// - /// Align to next byte boundary - /// - public void AlignToByteBank() - { - if (_bitPosition != 0) - { - _bitPosition = 0; - _position++; - } - } - - /// - /// Get the written data as byte array - /// - /// Byte array containing written data - public byte[] ToArray() - { - int length = _position + (_bitPosition > 0 ? 1 : 0); - var result = new byte[length]; - Array.Copy(_buffer, result, length); - return result; - } - - /// - /// Get the current buffer length in bytes - /// - /// Length in bytes - public int GetLength() - { - return _position + (_bitPosition > 0 ? 1 : 0); - } - - /// - /// Reset the stream position to beginning - /// - public void Reset() - { - _position = 0; - _bitPosition = 0; - Array.Clear(_buffer, 0, _buffer.Length); - } - - /// - /// Ensure buffer has enough capacity - /// - /// Required size in bytes - private void EnsureCapacity(int requiredSize) - { - if (requiredSize > _capacity) - { - int newCapacity = Math.Max(_capacity * 2, requiredSize); - var newBuffer = new byte[newCapacity]; - Array.Copy(_buffer, newBuffer, _position); - _buffer = newBuffer; - _capacity = newCapacity; - } - } - - /// - /// Get current buffer usage statistics - /// - /// Usage information - public (int UsedBytes, int TotalCapacity, double UsagePercentage) GetUsageStats() - { - int usedBytes = GetLength(); - double usage = (double)usedBytes / _capacity * 100.0; - return (usedBytes, _capacity, usage); - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/EXI/ByteStream.cs b/csharp/dotnetfx/EXI/ByteStream.cs deleted file mode 100644 index d62dd8d..0000000 --- a/csharp/dotnetfx/EXI/ByteStream.cs +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * Original Copyright (C) 2007-2018 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -using System; -using System.IO; -using System.Linq; - -namespace V2GDecoderNetFx.EXI -{ - /// - /// Byte Stream utilities for file operations - /// - public static class ByteStream - { - /// - /// Write bytes to file - /// - /// byte array - /// File name - /// Error-Code != 0 on failure - public static int WriteBytesToFile(byte[] data, string filename) - { - try - { - if (data == null) - return EXIErrorCodes.EXI_ERROR_OUT_OF_BYTE_BUFFER; - - if (string.IsNullOrEmpty(filename)) - return EXIErrorCodes.EXI_ERROR_OUTPUT_FILE; - - File.WriteAllBytes(filename, data); - return 0; // Success - } - catch (UnauthorizedAccessException) - { - return EXIErrorCodes.EXI_ERROR_OUTPUT_FILE; - } - catch (DirectoryNotFoundException) - { - return EXIErrorCodes.EXI_ERROR_OUTPUT_FILE; - } - catch (IOException) - { - return EXIErrorCodes.EXI_ERROR_OUTPUT_FILE; - } - catch - { - return EXIErrorCodes.EXI_ERROR_OUTPUT_FILE; - } - } - - /// - /// Read bytes from file - /// - /// File name - /// Output byte array - /// Number of bytes actually read - /// Error-Code != 0 on failure - public static int ReadBytesFromFile(string filename, out byte[] data, out int bytesRead) - { - data = new byte[0]; - bytesRead = 0; - - try - { - if (string.IsNullOrEmpty(filename)) - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - - if (!File.Exists(filename)) - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - - data = File.ReadAllBytes(filename); - bytesRead = data.Length; - return 0; // Success - } - catch (UnauthorizedAccessException) - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - catch (DirectoryNotFoundException) - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - catch (FileNotFoundException) - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - catch (IOException) - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - catch - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - } - - /// - /// Read bytes from file with buffer size limit - /// - /// File name - /// Maximum buffer size - /// Output byte array - /// Number of bytes actually read - /// Error-Code != 0 on failure - public static int ReadBytesFromFile(string filename, int maxSize, out byte[] data, out int bytesRead) - { - data = new byte[0]; - bytesRead = 0; - - try - { - if (string.IsNullOrEmpty(filename)) - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - - if (!File.Exists(filename)) - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - - using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read)) - { - var fileSize = (int)fileStream.Length; - - if (fileSize > maxSize) - return EXIErrorCodes.EXI_ERROR_OUT_OF_BYTE_BUFFER; - - data = new byte[fileSize]; - bytesRead = fileStream.Read(data, 0, fileSize); - - return 0; // Success - } - } - catch (UnauthorizedAccessException) - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - catch (DirectoryNotFoundException) - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - catch (FileNotFoundException) - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - catch (IOException) - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - catch - { - return EXIErrorCodes.EXI_ERROR_INPUT_FILE_HANDLE; - } - } - - /// - /// Convert hex string to byte array - /// - /// Hex string - /// Byte array - public static byte[] HexStringToByteArray(string hex) - { - if (string.IsNullOrEmpty(hex)) - return new byte[0]; - - // Remove any whitespace or separators - hex = hex.Replace(" ", "").Replace("-", "").Replace(":", ""); - - if (hex.Length % 2 != 0) - throw new ArgumentException("Hex string must have even number of characters"); - - var result = new byte[hex.Length / 2]; - for (int i = 0; i < result.Length; i++) - { - if (!byte.TryParse(hex.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber, null, out result[i])) - throw new ArgumentException($"Invalid hex characters at position {i * 2}"); - } - - return result; - } - - /// - /// Convert byte array to hex string - /// - /// Byte array - /// Use uppercase hex digits - /// Hex string - public static string ByteArrayToHexString(byte[] data, bool uppercase = true) - { - if (data == null || data.Length == 0) - return string.Empty; - - var format = uppercase ? "X2" : "x2"; - return string.Concat(data.Select(b => b.ToString(format))); - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/EXI/EXITypes.cs b/csharp/dotnetfx/EXI/EXITypes.cs deleted file mode 100644 index c82936e..0000000 --- a/csharp/dotnetfx/EXI/EXITypes.cs +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * Original Copyright (C) 2007-2018 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -using System; - -namespace V2GDecoderNetFx.EXI -{ - /// - /// Basic type definitions and constants for EXI codec - /// - public static class EXIConstants - { - /// Number of bits for each byte - public const int BITS_IN_BYTE = 8; - - /// EXI Date-Time offset for year - public const int DATETIME_YEAR_OFFSET = 2000; - - /// EXI Date-Time number of bits for monthDay - public const int DATETIME_NUMBER_BITS_MONTHDAY = 9; - - /// EXI Date-Time number of bits for time - public const int DATETIME_NUMBER_BITS_TIME = 17; - - /// EXI Date-Time number of bits for timezone - public const int DATETIME_NUMBER_BITS_TIMEZONE = 11; - - /// EXI Date-Time month multiplicator - public const int DATETIME_MONTH_MULTIPLICATOR = 32; - - /// EXI Date-Time offset for timezone minutes - public const int DATETIME_TIMEZONE_OFFSET_IN_MINUTES = 896; - - /// Maximum integer value for uint - public const int UINT_MAX_VALUE = 65535; - - /// EXI Float exponent special values - public const int FLOAT_EXPONENT_SPECIAL_VALUES = -16384; - - /// EXI Float mantissa infinity - public const long FLOAT_MANTISSA_INFINITY = 1; - - /// EXI Float minus mantissa infinity - public const long FLOAT_MANTISSA_MINUS_INFINITY = -1; - - /// EXI Float not a number - public const long FLOAT_MANTISSA_NOT_A_NUMBER = 0; - - /// Maximum number of cascading elements, XML tree depth - public const int EXI_ELEMENT_STACK_SIZE = 24; - - /// Default buffer size - public const int BUFFER_SIZE = 4096; - } - - /// - /// EXI Events enumeration - /// - public enum EXIEvent - { - /// Start Document SD - START_DOCUMENT, - /// End Document ED - END_DOCUMENT, - /// Start Element SE(qname) - START_ELEMENT, - /// Start Element SE(uri:*) - START_ELEMENT_NS, - /// Start Element SE(*) generic - START_ELEMENT_GENERIC, - /// Start Element SE(*) generic undeclared - START_ELEMENT_GENERIC_UNDECLARED, - /// End Element EE - END_ELEMENT, - /// End Element EE undeclared - END_ELEMENT_UNDECLARED, - /// Characters CH - CHARACTERS, - /// Characters CH generic - CHARACTERS_GENERIC, - /// Attribute AT(qname) - ATTRIBUTE, - /// Attribute AT(uri:*) - ATTRIBUTE_NS, - /// Attribute AT(*) generic - ATTRIBUTE_GENERIC, - /// Attribute AT(*) generic undeclared - ATTRIBUTE_GENERIC_UNDECLARED, - /// Attribute AT(xsi:type) - ATTRIBUTE_XSI_TYPE, - /// Attribute AT(xsi:nil) - ATTRIBUTE_XSI_NIL, - /// Self Contained SC - SELF_CONTAINED, - /// Entity Reference ER - ENTITY_REFERENCE, - /// Comment CM - COMMENT, - /// Processing Instruction PI - PROCESSING_INSTRUCTION, - /// Document Type Definition DTD - DOCTYPE_DECLARATION, - /// Namespace Declaration NS - NAMESPACE_DECLARATION - } - - /// - /// EXI Integer types - /// - public enum EXIIntegerType - { - UNSIGNED_INTEGER_8, - UNSIGNED_INTEGER_16, - UNSIGNED_INTEGER_32, - UNSIGNED_INTEGER_64, - INTEGER_8, - INTEGER_16, - INTEGER_32, - INTEGER_64, - UNSIGNED_INTEGER_BIG - } - - /// - /// EXI String types - /// - public enum EXIStringType - { - ASCII, - UTF8, - UTF16 - } - - /// - /// Configuration settings for EXI processing - /// - public class EXIConfig - { - /// Stream type configuration - public enum StreamType - { - BYTE_ARRAY = 1, - FILE_STREAM = 2 - } - - /// Memory allocation mode - public enum MemoryAllocation - { - STATIC_ALLOCATION = 1, - DYNAMIC_ALLOCATION = 2 - } - - /// String representation mode - public enum StringRepresentation - { - ASCII = 1, - UCS = 2 - } - - public StreamType Stream { get; set; } - public MemoryAllocation Memory { get; set; } - public StringRepresentation Strings { get; set; } - - public EXIConfig() - { - Stream = StreamType.BYTE_ARRAY; - Memory = MemoryAllocation.DYNAMIC_ALLOCATION; - Strings = StringRepresentation.UCS; - } - } - - /// - /// Bitstream for EXI encoding/decoding operations - /// - public class Bitstream - { - public byte[] Buffer { get; set; } - public int Position { get; set; } - public int BitPosition { get; set; } - public int Size { get; set; } - - public Bitstream(int size) - { - Buffer = new byte[size]; - Size = size; - Position = 0; - BitPosition = 0; - } - - public Bitstream() : this(EXIConstants.BUFFER_SIZE) - { - } - - public Bitstream(byte[] data) - { - if (data == null) throw new ArgumentNullException("data"); - Buffer = data; - Size = data.Length; - Position = 0; - BitPosition = 0; - } - - public void Reset() - { - Position = 0; - BitPosition = 0; - } - - public byte[] ToArray() - { - var result = new byte[Position + (BitPosition > 0 ? 1 : 0)]; - Array.Copy(Buffer, result, result.Length); - return result; - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/EXI/ErrorCodes.cs b/csharp/dotnetfx/EXI/ErrorCodes.cs deleted file mode 100644 index a3f09b9..0000000 --- a/csharp/dotnetfx/EXI/ErrorCodes.cs +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * Original Copyright (C) 2007-2018 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -using System; - -namespace V2GDecoderNetFx.EXI -{ - /// - /// EXI Error Codes definitions - /// - public static class EXIErrorCodes - { - // Stream errors - public const int EXI_ERROR_INPUT_STREAM_EOF = -10; - public const int EXI_ERROR_OUTPUT_STREAM_EOF = -11; - public const int EXI_ERROR_INPUT_FILE_HANDLE = -12; - public const int EXI_ERROR_OUTPUT_FILE = -13; - - // Buffer errors - public const int EXI_ERROR_OUT_OF_BOUNDS = -100; - public const int EXI_ERROR_OUT_OF_STRING_BUFFER = -101; - public const int EXI_ERROR_OUT_OF_BYTE_BUFFER = -103; - public const int EXI_ERROR_OUT_OF_GRAMMAR_STACK = -104; - public const int EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK = -105; - public const int EXI_ERROR_OUT_OF_QNAMES = -106; - - // Grammar errors - public const int EXI_ERROR_UNKOWN_GRAMMAR_ID = -108; - public const int EXI_ERROR_UNKOWN_EVENT = -109; - public const int EXI_ERROR_UNKOWN_EVENT_CODE = -110; - public const int EXI_ERROR_UNEXPECTED_EVENT_LEVEL1 = -111; - public const int EXI_ERROR_UNEXPECTED_EVENT_LEVEL2 = -112; - - // Document structure errors - public const int EXI_ERROR_UNEXPECTED_START_DOCUMENT = -113; - public const int EXI_ERROR_UNEXPECTED_END_DOCUMENT = -114; - public const int EXI_ERROR_UNEXPECTED_START_ELEMENT = -115; - public const int EXI_ERROR_UNEXPECTED_START_ELEMENT_NS = -116; - public const int EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC = -117; - public const int EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC_UNDECLARED = -118; - public const int EXI_ERROR_UNEXPECTED_END_ELEMENT = -119; - public const int EXI_ERROR_UNEXPECTED_CHARACTERS = -120; - public const int EXI_ERROR_UNEXPECTED_ATTRIBUTE = -121; - public const int EXI_ERROR_UNEXPECTED_ATTRIBUTE_NS = -122; - public const int EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC = -123; - public const int EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC_UNDECLARED = -124; - public const int EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE = -125; - public const int EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL = -126; - public const int EXI_ERROR_UNEXPECTED_GRAMMAR_ID = -127; - public const int EXI_ERROR_UNEXPECTED_ATTRIBUTE_MOVE_TO_CONTENT_RULE = -128; - - // Unsupported features - public const int EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH = -132; - public const int EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS = -133; - public const int EXI_UNSUPPORTED_INTEGER_VALUE = -134; - public const int EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE = -135; - public const int EXI_UNSUPPORTED_LIST_VALUE_TYPE = -136; - public const int EXI_UNSUPPORTED_HEADER_COOKIE = -137; - public const int EXI_UNSUPPORTED_HEADER_OPTIONS = -138; - public const int EXI_UNSUPPORTED_GLOBAL_ATTRIBUTE_VALUE_TYPE = -139; - public const int EXI_UNSUPPORTED_DATATYPE = -140; - public const int EXI_UNSUPPORTED_STRING_VALUE_TYPE = -141; - public const int EXI_UNSUPPORTED_INTEGER_VALUE_TYPE = -142; - public const int EXI_UNSUPPORTED_DATETIME_TYPE = -143; - public const int EXI_UNSUPPORTED_FRAGMENT_ELEMENT = -144; - public const int EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH = -150; - - // String values errors - public const int EXI_ERROR_STRINGVALUES_NOT_SUPPORTED = -160; - public const int EXI_ERROR_STRINGVALUES_OUT_OF_ENTRIES = -161; - public const int EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY = -162; - public const int EXI_ERROR_STRINGVALUES_OUT_OF_BOUND = -163; - public const int EXI_ERROR_STRINGVALUES_CHARACTER = -164; - - // Value errors - public const int EXI_ERROR_UNEXPECTED_BYTE_VALUE = -200; - - // Conversion errors - public const int EXI_ERROR_CONVERSION_NO_ASCII_CHARACTERS = -300; - public const int EXI_ERROR_CONVERSION_TYPE_TO_STRING = -301; - - // Support errors - public const int EXI_DEVIANT_SUPPORT_NOT_DEPLOYED = -500; - } - - /// - /// EXI Exception for error handling - /// - public class EXIException : Exception - { - public int ErrorCode { get; } - - public EXIException(int errorCode) : base(GetErrorMessage(errorCode)) - { - ErrorCode = errorCode; - } - - public EXIException(int errorCode, string message) : base(message) - { - ErrorCode = errorCode; - } - - public EXIException(int errorCode, string message, Exception innerException) - : base(message, innerException) - { - ErrorCode = errorCode; - } - - private static string GetErrorMessage(int errorCode) - { - return errorCode switch - { - EXIErrorCodes.EXI_ERROR_INPUT_STREAM_EOF => "Input stream EOF", - EXIErrorCodes.EXI_ERROR_OUTPUT_STREAM_EOF => "Output stream EOF", - EXIErrorCodes.EXI_ERROR_OUT_OF_BOUNDS => "Out of bounds", - EXIErrorCodes.EXI_ERROR_OUT_OF_STRING_BUFFER => "Out of string buffer", - EXIErrorCodes.EXI_ERROR_OUT_OF_BYTE_BUFFER => "Out of byte buffer", - EXIErrorCodes.EXI_ERROR_UNKOWN_GRAMMAR_ID => "Unknown grammar ID", - EXIErrorCodes.EXI_ERROR_UNKOWN_EVENT => "Unknown event", - EXIErrorCodes.EXI_ERROR_UNEXPECTED_START_DOCUMENT => "Unexpected start document", - EXIErrorCodes.EXI_ERROR_UNEXPECTED_END_DOCUMENT => "Unexpected end document", - EXIErrorCodes.EXI_UNSUPPORTED_DATATYPE => "Unsupported datatype", - _ => $"EXI error code: {errorCode}" - }; - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/Program.cs b/csharp/dotnetfx/Program.cs deleted file mode 100644 index 607de81..0000000 --- a/csharp/dotnetfx/Program.cs +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Simple .NET Framework 4.8 demonstration of V2G EXI processing - */ - -using System; -using System.IO; - -namespace V2GDecoderNetFx -{ - class Program - { - static void Main(string[] args) - { - Console.WriteLine("=== V2GDecoderNetFx - .NET Framework 4.8 Demo ==="); - Console.WriteLine("Simple EXI file analyzer"); - Console.WriteLine(); - - if (args.Length < 1) - { - Console.WriteLine("Usage: V2GDecoderNetFx "); - Console.WriteLine("Example: V2GDecoderNetFx test1.exi"); - return; - } - - string filename = args[0]; - - try - { - if (!File.Exists(filename)) - { - Console.WriteLine("Error: File not found - " + filename); - return; - } - - byte[] data = File.ReadAllBytes(filename); - Console.WriteLine("File: " + filename); - Console.WriteLine("Size: " + data.Length + " bytes"); - - // Simple analysis - AnalyzeFile(data); - - // Simple roundtrip test - string xmlContent = CreateSimpleXml(data); - string xmlFile = Path.ChangeExtension(filename, ".xml"); - File.WriteAllText(xmlFile, xmlContent); - Console.WriteLine("Created XML: " + xmlFile); - - // Create new EXI from XML - byte[] newExi = CreateSimpleExi(xmlContent); - string newExiFile = Path.ChangeExtension(filename, "_netfx.exi"); - File.WriteAllBytes(newExiFile, newExi); - Console.WriteLine("Created EXI: " + newExiFile + " (" + newExi.Length + " bytes)"); - - Console.WriteLine(); - Console.WriteLine("✓ .NET Framework 4.8 port working successfully!"); - } - catch (Exception ex) - { - Console.WriteLine("Error: " + ex.Message); - } - } - - static void AnalyzeFile(byte[] data) - { - Console.WriteLine(); - Console.WriteLine("=== File Analysis ==="); - - // Look for V2GTP header - if (data.Length >= 8 && data[0] == 0x01 && data[1] == 0xFE) - { - ushort payloadType = (ushort)((data[2] << 8) | data[3]); - uint payloadLength = (uint)((data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7]); - - Console.WriteLine("V2GTP Header detected:"); - Console.WriteLine(" Payload Type: 0x" + payloadType.ToString("X4")); - Console.WriteLine(" Payload Length: " + payloadLength + " bytes"); - - // EXI body starts at offset 8 - if (data.Length > 8) - { - Console.WriteLine("EXI Body: " + (data.Length - 8) + " bytes"); - ShowHexDump(data, 8, Math.Min(32, data.Length - 8)); - } - } - else - { - Console.WriteLine("Raw EXI data (no V2GTP header)"); - ShowHexDump(data, 0, Math.Min(32, data.Length)); - } - } - - static void ShowHexDump(byte[] data, int offset, int length) - { - Console.Write("Hex dump: "); - for (int i = offset; i < offset + length && i < data.Length; i++) - { - Console.Write(data[i].ToString("X2") + " "); - } - Console.WriteLine(); - } - - static string CreateSimpleXml(byte[] exiData) - { - // Create a valid XML structure - return "\r\n" + - "\r\n" + - "
\r\n" + - " NetFx48Test\r\n" + - "
\r\n" + - " \r\n" + - " TestMessage\r\n" + - " OK\r\n" + - " " + exiData.Length + "\r\n" + - " \r\n" + - "
\r\n"; - } - - static byte[] CreateSimpleExi(string xmlContent) - { - // Create a simple EXI-like structure - byte[] xmlBytes = System.Text.Encoding.UTF8.GetBytes(xmlContent); - byte[] result = new byte[16 + xmlBytes.Length % 32]; // Fixed size for demo - - // Add EXI-like header - result[0] = 0x80; // EXI start pattern - result[1] = 0x98; - result[2] = 0x02; // Version - result[3] = 0x10; - - // Add some content derived from XML - for (int i = 4; i < result.Length && i < 16; i++) - { - result[i] = (byte)(0x50 + (i % 16)); - } - - return result; - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/Properties/AssemblyInfo.cs b/csharp/dotnetfx/Properties/AssemblyInfo.cs deleted file mode 100644 index 650532f..0000000 --- a/csharp/dotnetfx/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("V2GDecoderNetFx")] -[assembly: AssemblyDescription("C# .NET Framework 4.8 port of OpenV2G EXI codec for V2G protocol messages")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("V2GDecoder Port")] -[assembly: AssemblyProduct("V2GDecoderNetFx")] -[assembly: AssemblyCopyright("Copyright © 2024")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("12345678-1234-1234-1234-123456789abc")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/csharp/dotnetfx/SimpleProgram.cs b/csharp/dotnetfx/SimpleProgram.cs deleted file mode 100644 index ee2f643..0000000 --- a/csharp/dotnetfx/SimpleProgram.cs +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Simple .NET Framework 4.8 demonstration of V2G EXI processing - */ - -using System; -using System.IO; - -namespace V2GDecoderNetFx -{ - class SimpleProgram - { - static void Main(string[] args) - { - Console.WriteLine("=== V2GDecoderNetFx - .NET Framework 4.8 Demo ==="); - Console.WriteLine("Simple EXI file analyzer"); - Console.WriteLine(); - - if (args.Length < 1) - { - Console.WriteLine("Usage: V2GDecoderNetFx "); - Console.WriteLine("Example: V2GDecoderNetFx test1.exi"); - return; - } - - string filename = args[0]; - - try - { - if (!File.Exists(filename)) - { - Console.WriteLine("Error: File not found - " + filename); - return; - } - - byte[] data = File.ReadAllBytes(filename); - Console.WriteLine("File: " + filename); - Console.WriteLine("Size: " + data.Length + " bytes"); - - // Simple analysis - AnalyzeFile(data); - - // Simple roundtrip test - string xmlContent = CreateSimpleXml(data); - string xmlFile = Path.ChangeExtension(filename, ".xml"); - File.WriteAllText(xmlFile, xmlContent); - Console.WriteLine("Created XML: " + xmlFile); - - // Create new EXI from XML - byte[] newExi = CreateSimpleExi(xmlContent); - string newExiFile = Path.ChangeExtension(filename, "_netfx.exi"); - File.WriteAllBytes(newExiFile, newExi); - Console.WriteLine("Created EXI: " + newExiFile + " (" + newExi.Length + " bytes)"); - - Console.WriteLine(); - Console.WriteLine("✓ .NET Framework 4.8 port working successfully!"); - } - catch (Exception ex) - { - Console.WriteLine("Error: " + ex.Message); - } - } - - static void AnalyzeFile(byte[] data) - { - Console.WriteLine(); - Console.WriteLine("=== File Analysis ==="); - - // Look for V2GTP header - if (data.Length >= 8 && data[0] == 0x01 && data[1] == 0xFE) - { - ushort payloadType = (ushort)((data[2] << 8) | data[3]); - uint payloadLength = (uint)((data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7]); - - Console.WriteLine("V2GTP Header detected:"); - Console.WriteLine(" Payload Type: 0x" + payloadType.ToString("X4")); - Console.WriteLine(" Payload Length: " + payloadLength + " bytes"); - - // EXI body starts at offset 8 - if (data.Length > 8) - { - Console.WriteLine("EXI Body: " + (data.Length - 8) + " bytes"); - ShowHexDump(data, 8, Math.Min(32, data.Length - 8)); - } - } - else - { - Console.WriteLine("Raw EXI data (no V2GTP header)"); - ShowHexDump(data, 0, Math.Min(32, data.Length)); - } - } - - static void ShowHexDump(byte[] data, int offset, int length) - { - Console.Write("Hex dump: "); - for (int i = offset; i < offset + length && i < data.Length; i++) - { - Console.Write(data[i].ToString("X2") + " "); - } - Console.WriteLine(); - } - - static string CreateSimpleXml(byte[] exiData) - { - // Create a valid XML structure - return "\r\n" + - "\r\n" + - "
\r\n" + - " NetFx48Test\r\n" + - "
\r\n" + - " \r\n" + - " TestMessage\r\n" + - " OK\r\n" + - " " + exiData.Length + "\r\n" + - " \r\n" + - "
\r\n"; - } - - static byte[] CreateSimpleExi(string xmlContent) - { - // Create a simple EXI-like structure - byte[] xmlBytes = System.Text.Encoding.UTF8.GetBytes(xmlContent); - byte[] result = new byte[16 + xmlBytes.Length % 32]; // Fixed size for demo - - // Add EXI-like header - result[0] = 0x80; // EXI start pattern - result[1] = 0x98; - result[2] = 0x02; // Version - result[3] = 0x10; - - // Add some content derived from XML - for (int i = 4; i < result.Length && i < 16; i++) - { - result[i] = (byte)(0x50 + (i % 16)); - } - - return result; - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/V2G/EXIDecoder.cs b/csharp/dotnetfx/V2G/EXIDecoder.cs deleted file mode 100644 index c78a401..0000000 --- a/csharp/dotnetfx/V2G/EXIDecoder.cs +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * Original Copyright (C) 2007-2018 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -using System; -using System.Collections.Generic; -using System.Text; -using System.Xml; -using V2GDecoderNetFx.EXI; - -namespace V2GDecoderNetFx.V2G -{ - /// - /// EXI Decoder for converting EXI binary data to XML - /// - public class EXIDecoder - { - private readonly EXIConfig _config; - - public EXIDecoder(EXIConfig config = null) - { - _config = config ?? new EXIConfig(); - } - - /// - /// Decode EXI binary data to XML string - /// - /// EXI binary data - /// XML string representation - public string DecodeToXml(byte[] exiData) - { - if (exiData == null || exiData.Length == 0) - throw new ArgumentException("EXI data cannot be null or empty", nameof(exiData)); - - var inputStream = new BitInputStream(exiData); - var xmlBuilder = new StringBuilder(); - - try - { - DecodeDocument(inputStream, xmlBuilder); - return xmlBuilder.ToString(); - } - catch (EXIException) - { - throw; - } - catch (Exception ex) - { - throw new EXIException(EXIErrorCodes.EXI_ERROR_UNKOWN_EVENT, - "Error during EXI decoding", ex); - } - } - - /// - /// Decode EXI binary data to XmlDocument - /// - /// EXI binary data - /// XmlDocument - public XmlDocument DecodeToXmlDocument(byte[] exiData) - { - string xmlString = DecodeToXml(exiData); - var xmlDoc = new XmlDocument(); - xmlDoc.LoadXml(xmlString); - return xmlDoc; - } - - /// - /// Validate EXI header and extract options - /// - /// Input bit stream - /// EXI header information - public EXIHeader DecodeHeader(BitInputStream inputStream) - { - var header = new EXIHeader(); - - // Check for EXI cookie ($EXI) - byte[] cookie = inputStream.ReadBytes(4); - if (cookie[0] != '$' || cookie[1] != 'E' || cookie[2] != 'X' || cookie[3] != 'I') - { - // No cookie found, assume default options - inputStream.SetPosition(0); - header.HasCookie = false; - return header; - } - - header.HasCookie = true; - - // Read format version - header.FormatVersion = inputStream.ReadBits(4); - - // Read options presence flag - bool hasOptions = inputStream.ReadBit() == 1; - - if (hasOptions) - { - // Read options (simplified implementation) - header.PreserveComments = inputStream.ReadBit() == 1; - header.PreservePIs = inputStream.ReadBit() == 1; - header.PreserveDTD = inputStream.ReadBit() == 1; - header.PreservePrefixes = inputStream.ReadBit() == 1; - - // Skip remaining option bits for now - inputStream.AlignToByteBank(); - } - - return header; - } - - private void DecodeDocument(BitInputStream inputStream, StringBuilder xmlBuilder) - { - // Decode EXI header - var header = DecodeHeader(inputStream); - - // Start XML document - xmlBuilder.AppendLine(""); - - // Decode document content - DecodeDocumentContent(inputStream, xmlBuilder); - } - - private void DecodeDocumentContent(BitInputStream inputStream, StringBuilder xmlBuilder) - { - var elementStack = new Stack(); - bool documentStarted = false; - - while (!inputStream.IsEOF) - { - try - { - var eventCode = DecodeEventCode(inputStream); - - switch (eventCode.Event) - { - case EXIEvent.START_DOCUMENT: - documentStarted = true; - break; - - case EXIEvent.END_DOCUMENT: - return; - - case EXIEvent.START_ELEMENT: - case EXIEvent.START_ELEMENT_GENERIC: - var elementName = DecodeElementName(inputStream, eventCode); - elementStack.Push(elementName); - xmlBuilder.Append($"<{elementName}"); - - // Handle attributes - DecodeAttributes(inputStream, xmlBuilder); - xmlBuilder.AppendLine(">"); - break; - - case EXIEvent.END_ELEMENT: - if (elementStack.Count > 0) - { - var endElementName = elementStack.Pop(); - xmlBuilder.AppendLine($""); - } - break; - - case EXIEvent.CHARACTERS: - var text = DecodeCharacters(inputStream); - xmlBuilder.Append(XmlEscape(text)); - break; - - default: - // Skip unsupported events - break; - } - } - catch (EXIException ex) when (ex.ErrorCode == EXIErrorCodes.EXI_ERROR_INPUT_STREAM_EOF) - { - break; - } - } - } - - private EventCode DecodeEventCode(BitInputStream inputStream) - { - // Simplified event code decoding - in real implementation, - // this would be based on current grammar state - var code = inputStream.ReadBits(2); - - return new EventCode - { - Event = code switch - { - 0 => EXIEvent.START_ELEMENT, - 1 => EXIEvent.END_ELEMENT, - 2 => EXIEvent.CHARACTERS, - 3 => EXIEvent.END_DOCUMENT, - _ => EXIEvent.START_ELEMENT - }, - Code = code - }; - } - - private string DecodeElementName(BitInputStream inputStream, EventCode eventCode) - { - // Simplified element name decoding - var nameIndex = inputStream.ReadUnsignedInteger(); - - // In a real implementation, this would lookup from string tables - return $"Element{nameIndex}"; - } - - private void DecodeAttributes(BitInputStream inputStream, StringBuilder xmlBuilder) - { - // Simplified attribute handling - // In real implementation, would continue reading attributes until - // a non-attribute event code is encountered - } - - private string DecodeCharacters(BitInputStream inputStream) - { - // Decode character data - var length = (int)inputStream.ReadUnsignedInteger(); - var charData = inputStream.ReadBytes(length); - - return _config.Strings switch - { - EXIConfig.StringRepresentation.ASCII => Encoding.ASCII.GetString(charData), - EXIConfig.StringRepresentation.UCS => Encoding.UTF8.GetString(charData), - _ => Encoding.UTF8.GetString(charData) - }; - } - - private static string XmlEscape(string text) - { - return text - .Replace("&", "&") - .Replace("<", "<") - .Replace(">", ">") - .Replace("\"", """) - .Replace("'", "'"); - } - } - - /// - /// EXI Header information - /// - public class EXIHeader - { - public bool HasCookie { get; set; } - public uint FormatVersion { get; set; } - public bool PreserveComments { get; set; } - public bool PreservePIs { get; set; } - public bool PreserveDTD { get; set; } - public bool PreservePrefixes { get; set; } - } - - /// - /// EXI Event Code - /// - public class EventCode - { - public EXIEvent Event { get; set; } - public uint Code { get; set; } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/V2G/EXIEncoder.cs b/csharp/dotnetfx/V2G/EXIEncoder.cs deleted file mode 100644 index 53faf72..0000000 --- a/csharp/dotnetfx/V2G/EXIEncoder.cs +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * Original Copyright (C) 2007-2018 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -using V2GDecoderNetFx.EXI; -using System.Xml; - -namespace V2GDecoderNetFx.V2G -{ - /// - /// EXI Encoder for converting XML to EXI binary data - /// - public class EXIEncoder - { - private readonly EXIConfig _config; - - public EXIEncoder(EXIConfig config = null) - { - _config = config ?? new EXIConfig(); - } - - /// - /// Encode XML string to EXI binary data - /// - /// XML string to encode - /// EXI binary data - public byte[] EncodeFromXml(string xmlString) - { - if (string.IsNullOrEmpty(xmlString)) - throw new ArgumentException("XML string cannot be null or empty", nameof(xmlString)); - - var xmlDoc = new XmlDocument(); - xmlDoc.LoadXml(xmlString); - - return EncodeFromXmlDocument(xmlDoc); - } - - /// - /// Encode XmlDocument to EXI binary data - /// - /// XmlDocument to encode - /// EXI binary data - public byte[] EncodeFromXmlDocument(XmlDocument xmlDoc) - { - if (xmlDoc == null) - throw new ArgumentNullException(nameof(xmlDoc)); - - var outputStream = new BitOutputStream(); - - try - { - // Write EXI header - WriteHeader(outputStream); - - // Encode document - EncodeDocument(xmlDoc, outputStream); - - return outputStream.ToArray(); - } - catch (EXIException) - { - throw; - } - catch (Exception ex) - { - throw new EXIException(EXIErrorCodes.EXI_ERROR_UNKOWN_EVENT, - "Error during EXI encoding", ex); - } - } - - /// - /// Write EXI header with options - /// - /// Output bit stream - private void WriteHeader(BitOutputStream outputStream) - { - // Write EXI cookie ($EXI) - outputStream.WriteBytes(new byte[] { (byte)'$', (byte)'E', (byte)'X', (byte)'I' }); - - // Format version (4 bits) - currently 0 - outputStream.WriteBits(0, 4); - - // Options presence flag (1 bit) - false for simplicity - outputStream.WriteBit(0); - - // Align to byte boundary - outputStream.AlignToByteBank(); - } - - /// - /// Encode XML document content - /// - /// XML document - /// Output bit stream - private void EncodeDocument(XmlDocument xmlDoc, BitOutputStream outputStream) - { - // Write START_DOCUMENT event - WriteEventCode(outputStream, EXIEvent.START_DOCUMENT); - - // Encode root element and its children - if (xmlDoc.DocumentElement != null) - { - EncodeElement(xmlDoc.DocumentElement, outputStream); - } - - // Write END_DOCUMENT event - WriteEventCode(outputStream, EXIEvent.END_DOCUMENT); - } - - /// - /// Encode XML element - /// - /// XML element - /// Output bit stream - private void EncodeElement(XmlElement element, BitOutputStream outputStream) - { - // Write START_ELEMENT event - WriteEventCode(outputStream, EXIEvent.START_ELEMENT); - - // Write element name (simplified - in real implementation would use string tables) - WriteElementName(outputStream, element.Name); - - // Encode attributes - EncodeAttributes(element, outputStream); - - // Encode child nodes - foreach (XmlNode child in element.ChildNodes) - { - switch (child.NodeType) - { - case XmlNodeType.Element: - EncodeElement((XmlElement)child, outputStream); - break; - - case XmlNodeType.Text: - case XmlNodeType.CDATA: - EncodeTextContent(child.Value ?? string.Empty, outputStream); - break; - - case XmlNodeType.Comment: - if (_config != null) // Preserve comments if configured - { - // Skip for simplicity - } - break; - } - } - - // Write END_ELEMENT event - WriteEventCode(outputStream, EXIEvent.END_ELEMENT); - } - - /// - /// Encode element attributes - /// - /// XML element - /// Output bit stream - private void EncodeAttributes(XmlElement element, BitOutputStream outputStream) - { - foreach (XmlAttribute attr in element.Attributes) - { - // Write ATTRIBUTE event - WriteEventCode(outputStream, EXIEvent.ATTRIBUTE); - - // Write attribute name and value (simplified) - WriteAttributeName(outputStream, attr.Name); - WriteAttributeValue(outputStream, attr.Value); - } - } - - /// - /// Encode text content - /// - /// Text content - /// Output bit stream - private void EncodeTextContent(string text, BitOutputStream outputStream) - { - if (!string.IsNullOrEmpty(text)) - { - // Write CHARACTERS event - WriteEventCode(outputStream, EXIEvent.CHARACTERS); - - // Write text content - WriteCharacters(outputStream, text); - } - } - - /// - /// Write event code to stream - /// - /// Output bit stream - /// Event type - private void WriteEventCode(BitOutputStream outputStream, EXIEvent eventType) - { - // Simplified event code writing - in real implementation, - // this would be based on current grammar state - uint code = eventType switch - { - EXIEvent.START_DOCUMENT => 0, - EXIEvent.START_ELEMENT => 0, - EXIEvent.END_ELEMENT => 1, - EXIEvent.CHARACTERS => 2, - EXIEvent.ATTRIBUTE => 3, - EXIEvent.END_DOCUMENT => 3, - _ => 0 - }; - - outputStream.WriteBits(code, 2); - } - - /// - /// Write element name to stream - /// - /// Output bit stream - /// Element name - private void WriteElementName(BitOutputStream outputStream, string name) - { - // Simplified name encoding - in real implementation would use string tables - var nameBytes = System.Text.Encoding.UTF8.GetBytes(name); - outputStream.WriteUnsignedInteger((uint)nameBytes.Length); - outputStream.WriteBytes(nameBytes); - } - - /// - /// Write attribute name to stream - /// - /// Output bit stream - /// Attribute name - private void WriteAttributeName(BitOutputStream outputStream, string name) - { - // Simplified attribute name encoding - var nameBytes = System.Text.Encoding.UTF8.GetBytes(name); - outputStream.WriteUnsignedInteger((uint)nameBytes.Length); - outputStream.WriteBytes(nameBytes); - } - - /// - /// Write attribute value to stream - /// - /// Output bit stream - /// Attribute value - private void WriteAttributeValue(BitOutputStream outputStream, string value) - { - // Simplified attribute value encoding - var valueBytes = System.Text.Encoding.UTF8.GetBytes(value ?? string.Empty); - outputStream.WriteUnsignedInteger((uint)valueBytes.Length); - outputStream.WriteBytes(valueBytes); - } - - /// - /// Write character data to stream - /// - /// Output bit stream - /// Character data - private void WriteCharacters(BitOutputStream outputStream, string text) - { - var encoding = _config.Strings switch - { - EXIConfig.StringRepresentation.ASCII => System.Text.Encoding.ASCII, - EXIConfig.StringRepresentation.UCS => System.Text.Encoding.UTF8, - _ => System.Text.Encoding.UTF8 - }; - - var textBytes = encoding.GetBytes(text); - outputStream.WriteUnsignedInteger((uint)textBytes.Length); - outputStream.WriteBytes(textBytes); - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/V2G/SimpleV2GDecoder.cs b/csharp/dotnetfx/V2G/SimpleV2GDecoder.cs deleted file mode 100644 index d9255f1..0000000 --- a/csharp/dotnetfx/V2G/SimpleV2GDecoder.cs +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * - * Simplified V2G decoder for demonstration purposes - * Note: This is a simplified implementation for testing roundtrip functionality - */ - -using V2GDecoderNetFx.EXI; -using System.Text; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace V2GDecoderNetFx.V2G -{ - /// - /// Simplified V2G decoder that creates valid XML structure for testing - /// - public class SimpleV2GDecoder - { - /// - /// Create a simplified XML representation of V2G message for roundtrip testing - /// - /// EXI binary data - /// Simple but valid XML structure - public string DecodeToSimpleXml(byte[] exiData) - { - if (exiData == null || exiData.Length == 0) - throw new ArgumentException("EXI data cannot be null or empty", nameof(exiData)); - - // Extract basic information from the EXI data - var analysis = AnalyzeEXIData(exiData); - - var xmlBuilder = new StringBuilder(); - xmlBuilder.AppendLine(""); - xmlBuilder.AppendLine(""); - xmlBuilder.AppendLine("
"); - xmlBuilder.AppendLine($" {analysis.SessionId}"); - xmlBuilder.AppendLine("
"); - xmlBuilder.AppendLine(" "); - xmlBuilder.AppendLine($" {analysis.MessageType}"); - xmlBuilder.AppendLine($" {analysis.ResponseCode}"); - - if (!string.IsNullOrEmpty(analysis.AdditionalData)) - { - xmlBuilder.AppendLine($" {analysis.AdditionalData}"); - } - - xmlBuilder.AppendLine(" "); - xmlBuilder.AppendLine("
"); - - return xmlBuilder.ToString(); - } - - private EXIAnalysis AnalyzeEXIData(byte[] exiData) - { - var analysis = new EXIAnalysis(); - - // Simple analysis - extract some patterns from the data - analysis.MessageType = "CurrentDemandRes"; - analysis.SessionId = "ABB00081"; - analysis.ResponseCode = "OK"; - analysis.AdditionalData = ByteStream.ByteArrayToHexString(exiData.Take(16).ToArray()); - - return analysis; - } - } - - /// - /// Simple EXI analysis result - /// - public class EXIAnalysis - { - public string MessageType { get; set; } = "Unknown"; - public string SessionId { get; set; } = "00000000"; - public string ResponseCode { get; set; } = "OK"; - public string AdditionalData { get; set; } = ""; - } - - /// - /// Simple V2G encoder for testing - /// - public class SimpleV2GEncoder - { - /// - /// Create a simple EXI representation from XML (for roundtrip testing) - /// - /// XML string - /// Simple EXI-like binary data - public byte[] EncodeToSimpleEXI(string xmlString) - { - if (string.IsNullOrEmpty(xmlString)) - throw new ArgumentException("XML string cannot be null or empty", nameof(xmlString)); - - // Create a simple binary representation that includes the XML hash - var xmlBytes = Encoding.UTF8.GetBytes(xmlString); - var hash = ComputeSimpleHash(xmlBytes); - - var result = new List(); - - // Add EXI start pattern - result.AddRange(new byte[] { 0x80, 0x98 }); - - // Add version info - result.AddRange(new byte[] { 0x02, 0x10 }); - - // Add simplified message structure - result.AddRange(new byte[] { 0x50, 0x90, 0x8C, 0x0C }); - - // Add XML content hash (8 bytes) - result.AddRange(BitConverter.GetBytes(hash).Take(8)); - - // Add some padding to make it look more realistic - var padding = new byte[Math.Max(0, 49 - result.Count)]; - for (int i = 0; i < padding.Length; i++) - { - padding[i] = (byte)(0x30 + (i % 16)); - } - result.AddRange(padding); - - return result.ToArray(); - } - - private long ComputeSimpleHash(byte[] data) - { - long hash = 0x12345678; - foreach (byte b in data) - { - hash = ((hash << 5) + hash) + b; - } - return hash; - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/V2G/V2GProtocol.cs b/csharp/dotnetfx/V2G/V2GProtocol.cs deleted file mode 100644 index 21714ee..0000000 --- a/csharp/dotnetfx/V2G/V2GProtocol.cs +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (C) 2007-2024 C# Port - * Original Copyright (C) 2007-2018 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -using V2GDecoderNetFx.EXI; - -namespace V2GDecoderNetFx.V2G -{ - /// - /// V2G Transfer Protocol constants and definitions - /// - public static class V2GProtocol - { - // Network protocol patterns - public const ushort ETH_TYPE_IPV6 = 0x86DD; - public const byte IPV6_NEXT_HEADER_TCP = 0x06; - public const ushort TCP_V2G_PORT = 15118; - - // V2G Transfer Protocol patterns - public const byte V2G_PROTOCOL_VERSION = 0x01; - public const byte V2G_INV_PROTOCOL_VERSION = 0xFE; - public const ushort V2G_PAYLOAD_ISO_DIN_SAP = 0x8001; - public const ushort V2G_PAYLOAD_ISO2 = 0x8002; - public const ushort EXI_START_PATTERN = 0x8098; - - /// - /// Get payload type name for display - /// - /// Payload type value - /// Human-readable payload type name - public static string GetPayloadTypeName(ushort payloadType) - { - switch (payloadType) - { - case V2G_PAYLOAD_ISO_DIN_SAP: - return "ISO 15118-2/DIN/SAP"; - case V2G_PAYLOAD_ISO2: - return "ISO 15118-20"; - default: - return "Unknown"; - } - } - - /// - /// Extract EXI body from V2G Transfer Protocol data - /// - /// Input data containing V2GTP header and EXI body - /// Extracted EXI body data - public static byte[] ExtractEXIBody(byte[] inputData) - { - if (inputData == null || inputData.Length < 8) - { - // Too small for V2GTP header, assume it's pure EXI - return inputData ?? new byte[0]; - } - - // Check for V2G Transfer Protocol header - if (inputData[0] == V2G_PROTOCOL_VERSION && inputData[1] == V2G_INV_PROTOCOL_VERSION) - { - ushort payloadType = (ushort)((inputData[2] << 8) | inputData[3]); - - if (payloadType == V2G_PAYLOAD_ISO_DIN_SAP || payloadType == V2G_PAYLOAD_ISO2) - { - // Valid V2GTP header detected: skip 8-byte header - var exiBody = new byte[inputData.Length - 8]; - Array.Copy(inputData, 8, exiBody, 0, exiBody.Length); - return exiBody; - } - } - - // Look for EXI start pattern anywhere in the data - for (int i = 0; i <= inputData.Length - 2; i++) - { - ushort pattern = (ushort)((inputData[i] << 8) | inputData[i + 1]); - if (pattern == EXI_START_PATTERN) - { - // Found EXI start pattern - var exiBody = new byte[inputData.Length - i]; - Array.Copy(inputData, i, exiBody, 0, exiBody.Length); - return exiBody; - } - } - - // No pattern found, assume it's pure EXI - return inputData; - } - - /// - /// Analyze complete packet structure - /// - /// Packet data - /// Analysis result - public static PacketAnalysis AnalyzeDataStructure(byte[] data) - { - var analysis = new PacketAnalysis - { - TotalSize = data?.Length ?? 0, - HasEthernetHeader = false, - HasIPv6Header = false, - HasTCPHeader = false, - HasV2GTPHeader = false, - V2GTPPayloadType = 0, - EXIBodyOffset = 0, - EXIBodyLength = 0 - }; - - if (data == null || data.Length == 0) - return analysis; - - int offset = 0; - - // Check for Ethernet header (at least 14 bytes) - if (data.Length >= 14) - { - ushort etherType = (ushort)((data[12] << 8) | data[13]); - if (etherType == ETH_TYPE_IPV6) - { - analysis.HasEthernetHeader = true; - offset = 14; - } - } - - // Check for IPv6 header (40 bytes) - if (analysis.HasEthernetHeader && data.Length >= offset + 40) - { - byte version = (byte)((data[offset] >> 4) & 0x0F); - if (version == 6) - { - analysis.HasIPv6Header = true; - byte nextHeader = data[offset + 6]; - if (nextHeader == IPV6_NEXT_HEADER_TCP) - { - offset += 40; - } - } - } - - // Check for TCP header (at least 20 bytes) - if (analysis.HasIPv6Header && data.Length >= offset + 20) - { - ushort destPort = (ushort)((data[offset + 2] << 8) | data[offset + 3]); - if (destPort == TCP_V2G_PORT) - { - analysis.HasTCPHeader = true; - byte headerLength = (byte)((data[offset + 12] >> 4) * 4); - offset += headerLength; - } - } - - // Check for V2GTP header - if (data.Length >= offset + 8) - { - if (data[offset] == V2G_PROTOCOL_VERSION && data[offset + 1] == V2G_INV_PROTOCOL_VERSION) - { - analysis.HasV2GTPHeader = true; - analysis.V2GTPPayloadType = (ushort)((data[offset + 2] << 8) | data[offset + 3]); - offset += 8; - } - } - - // Remaining data is EXI body - analysis.EXIBodyOffset = offset; - analysis.EXIBodyLength = Math.Max(0, data.Length - offset); - - return analysis; - } - } - - /// - /// Packet analysis result - /// - public class PacketAnalysis - { - public int TotalSize { get; set; } - public bool HasEthernetHeader { get; set; } - public bool HasIPv6Header { get; set; } - public bool HasTCPHeader { get; set; } - public bool HasV2GTPHeader { get; set; } - public ushort V2GTPPayloadType { get; set; } - public int EXIBodyOffset { get; set; } - public int EXIBodyLength { get; set; } - - public string GetPayloadTypeName() - { - return V2GProtocol.GetPayloadTypeName(V2GTPPayloadType); - } - - public override string ToString() - { - var parts = new List(); - if (HasEthernetHeader) parts.Add("Ethernet"); - if (HasIPv6Header) parts.Add("IPv6"); - if (HasTCPHeader) parts.Add("TCP"); - if (HasV2GTPHeader) parts.Add($"V2GTP ({GetPayloadTypeName()})"); - - var structure = parts.Count > 0 ? string.Join(" → ", parts) : "Raw data"; - return $"{structure} | EXI: {EXIBodyLength} bytes @ offset {EXIBodyOffset}"; - } - } -} \ No newline at end of file diff --git a/csharp/dotnetfx/V2GDecoderNetFx.csproj b/csharp/dotnetfx/V2GDecoderNetFx.csproj deleted file mode 100644 index d473996..0000000 --- a/csharp/dotnetfx/V2GDecoderNetFx.csproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - - Debug - AnyCPU - {12345678-1234-1234-1234-123456789ABC} - Exe - V2GDecoderNetFx - V2GDecoderNetFx - v4.8 - 512 - true - true - 7.3 - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.exe b/csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.exe deleted file mode 100644 index dc717567afed5a55d3f82fded0d55348ffcd498f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 diff --git a/csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.exe.config b/csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.exe.config deleted file mode 100644 index 033746a..0000000 --- a/csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.exe.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.pdb b/csharp/dotnetfx/bin/Debug/V2GDecoderNetFx.pdb deleted file mode 100644 index ede3535741431cca258c26a1c987f2bee86efad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 zcmeHOd2AHd8GmCNgE1>Ii7KShq_nhYl&GOf4^>T7nnOz49BrUdT4;q-qCy&arW{rNNE8bF{pQUqYqN3j zRWQu6zxmC(zW2TFd)It3Tifanha#b-sNIv}$;z_V)>qn#98Tw?@w3Y71wxYkFLH2u zm~n(G3D)%{(7-80h>Mr4aI0!StWZ8lK7XtB-s<;+w_S>x>(~^70Mtr~j>)*ncp}s@ zt;?v^fMx$tZN4E3|54+HRd0?xX4_XUUR(cc(lf7D+;iaXfBBtl-zpiO@Xbdy+nSEq zUd(@%z*SM2-QtizdSAAkM+oa#eg zi_F>d#{6#_`gxY;mp>h{pcaD>(ZF!o|A#dh=iZ(1+L7YQzn!l7r2WH-2kYi+Kf3)< z_lx1j#zi8L5fR>EI%EwDm;LMCd+x2bpG>ol|8C))k6(Ue=lR)3QY!1!2Pe!6oc{Xm zXQvNYP>aEcYGAcI>IoA^v@whM4Wj{`^EZnXw#mS;F{x5S_n14xswX@P?b-Hxhb!OV z%+7P<7UUHaJMyv$1C9QsKyFh(L7v*=Qk$GUf4?H{o&Trd2{8Wo?}ioL5^TsCNM!%%mi>pU*U`dYxXypp`G2%nytkagWq<4Z-&?Pv zC3flDrE_=%B;M!6Q{pZ6MSb4-P-ob$dh4re>%1Ft?=DyUp@16pc>R$UU%0~?2t|Wx zw5i)$7Y;RteeDiE9`F4n-T>=HWZg(>dxv*NZgW7^^}>Wr z)>SlALISlb6yCOMqZ*F1hJvL#@*QqRStO#iH@5YZMWf-?#?Gi3p_l`el1&9R?l7Fj7OeCM#36R)f_9n7JFY0`zB4DTtCo;$69dD ze2zKhsUS0O%$a4+6jUx|S&l`PWnO$)j#snng*VT9g=OQ%a(r22S>YNqz~?-N$h5KO zuV^HMHUoK&Tbft5pQ!b<25~<_B->bz<;=3IGG1iZK2zTliK^`){mQ+gdc6>Hgq``6w_3bT{tFa~A616BORZ>T#bzlFpOkFFvokz0DH}M%7?c z)}@?%@+;A-&UZ|oyr9}u(cLQf8e=-vrp(i;;**%vn7l1uekb^F%;F#Ec3WB>zA6SO z>yS2zl$2ku`p26;-t>p+R~Druz5K$9TTxupigJ+)OhIQUGhfHD-=q`>lL1tAy_BTA zq3r&>vS+cf$FJio?9@8h6A*dRf_A}Mtn1ftxcz9rOErFNHh zws$bfejY_$9SX6ISx)ai(rQ2}k=|w0r;S+;$+7-p*u?r&GVngh{&|v0sFxDMjuSZ$ z5bXL@UXYafirEiOSoKBKdK|Ud)ce}oSYi-uE7Yx+q3H6PZQD6H5CRhPE0R)ACTd%s zHBygLAmDKj>zQTExsUoWePN!i>A|6lj5)_?m-zg!8tH7q9HtFw!0#QT}Nn<~zAVZKLFy}J?$sJWx!tmvw=r|4&b{$7w`-aYmvr& zLpJRq5Noqmf({k}R|AWH_W<2Mu6@P8I$#NK18_NzYa{k?Z5yx@n1&rm(!k(f6NC{~Z=nE1_Tf%O-Enzop zBhuFbeZYHw4+3j|2Y}cXwQmDi|5;!i;?Ds$0N(=M3;ZJxcGpe<8-TPC%l`=o-r6Z3 z#)I}xAjX6CAK)h7CE#YD)H!wS25}^r`limdfvB&Ipau{|3xd>l1N6-@Q*~W2UD~Mv zX=VDoslP+WlWV3DTXQEO?I0^5+z&aZzs~`gz6FSRqW6RQ+*ZW7FhEDT9vgw26D)^u zrXzH!mxnHeAL-B)*BGOJOChBlDW;62x_oP~t1gK3d49~^7?VP-p^8yUU(1D4=O9Eg z_)=cXt1n@m2`odgcFaD%k94`dDX}$@eK-MP=rVZp0I@cRoxnLj*k4}<9s+XgJPc&J z8vYA_UjVYtv@zzC*n>Fcl-LWzcoUe@8pfGkj=ErZ*jq2}1wMv2^eDavl(t_7UC>^0 zd(l)e8>LKr6(BDibGH=h3}&>RK3mtkU1z=|*DI@T$D&T}Y`a6Zw|XCTiI zOvm{_$A204RRe!xAj|X@{#QQh+WTQ}E%p1U-fvd?x))cFQzjM$&_1Ww4I5UEuw)a# zeLMjagd<{ItnPiCE~A9BrlGT*3|f2AIuL3`Je52$86 znQzp?p=+*4*ZYfZrQ#*X`r5256~Sn@XG>kEm3|~EB-TL602aT*9IVvqtpPjcUat); zP9XDaz4Hil&gz&KWV;+5CS>(ppvx5Id)EGlw6?)>};>^d@-JQKH( zrk^3qvVAer?g_Pb!0R983srlja2Hk<xRSA9xl)`ZpdW!TJ%0~lIup&1fjNHy5v~&~*Ahow z$ZSXa36xn4$^Z{`Z61iL!kr-cPkFwe8t_g;_cNsd*_bf7MD?~0qgspQEIqh5}SLy<^N5r%yCFgu;2E2TuzXm zn3>%AJ}vLMr>`Di3AoR5AI|_;{@)Q+_5j#({#(!gQeo5u?@WJyOuf0E|79NsceVV# zgVWoMRLhR%wq6@roN$~EJR5KywEVwuin)ny0}1+K`TwqXr4#<>$^3Cm-{0v#m!r}D zcRYXl_j!)p(zW@wA3Q&$>gnlYCM>T$Tw(eD@FTcu`5~J*9{T>+iq5c6;Qu=eF^9|l zX9usPAo~9nf#@^j{$l$77T})#Kkg}Xd(!1eHTCEJTZnu -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.AssemblyReference.cache b/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.AssemblyReference.cache deleted file mode 100644 index 835c603939c6a35a4056288c66fb22deb6ce5acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmZQ$ba*LDmi*hoP^ipzi7#V@KFsRNn zzrN`j2gpJ$pb`T;V*_JDO9sYR8rU9OSzMBuOW5u-+SwhEo1^EGnO8{I5hb*9giB&c zq8^9{PAze*C`rvL&dkp%ChVki8aN4_aP*vmGZKpm2)iPQ2Cjgn3~;~@Oqw)I9)77M ddLAVuM1(>j?Lq;RMhON24P(JMzbKWU0|1eRfs6nE diff --git a/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.CoreCompileInputs.cache b/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.CoreCompileInputs.cache deleted file mode 100644 index d994c0a..0000000 --- a/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -e803a9d39a22df6b96d7e203b7efbb5d1760c85fb9915a781bc32024c1a43c58 diff --git a/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.FileListAbsolute.txt b/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.FileListAbsolute.txt deleted file mode 100644 index e25002f..0000000 --- a/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,7 +0,0 @@ -C:\Data\Source\SIMP\V2GDecoderC\csharp\dotnetfx\obj\Debug\V2GDecoderNetFx.csproj.AssemblyReference.cache -C:\Data\Source\SIMP\V2GDecoderC\csharp\dotnetfx\obj\Debug\V2GDecoderNetFx.csproj.CoreCompileInputs.cache -C:\Data\Source\SIMP\V2GDecoderC\csharp\dotnetfx\bin\Debug\V2GDecoderNetFx.exe.config -C:\Data\Source\SIMP\V2GDecoderC\csharp\dotnetfx\bin\Debug\V2GDecoderNetFx.exe -C:\Data\Source\SIMP\V2GDecoderC\csharp\dotnetfx\bin\Debug\V2GDecoderNetFx.pdb -C:\Data\Source\SIMP\V2GDecoderC\csharp\dotnetfx\obj\Debug\V2GDecoderNetFx.exe -C:\Data\Source\SIMP\V2GDecoderC\csharp\dotnetfx\obj\Debug\V2GDecoderNetFx.pdb diff --git a/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.exe b/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.exe deleted file mode 100644 index dc717567afed5a55d3f82fded0d55348ffcd498f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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 diff --git a/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.pdb b/csharp/dotnetfx/obj/Debug/V2GDecoderNetFx.pdb deleted file mode 100644 index ede3535741431cca258c26a1c987f2bee86efad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 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 17.0 Win32Proj - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G} + {C09AE419-8FDD-4312-B023-55DC1ED18A73} V2GDecoder 10.0 diff --git a/csharp/vc2022/V2GDecoder/V2GDecoder.vcxproj.filters b/csharp/vc2022/V2GDecoder/V2GDecoder.vcxproj.filters index 3d534ae..1b0184e 100644 --- a/csharp/vc2022/V2GDecoder/V2GDecoder.vcxproj.filters +++ b/csharp/vc2022/V2GDecoder/V2GDecoder.vcxproj.filters @@ -29,106 +29,142 @@ - + Source Files - - Source Files\codec + + Source Files - - Source Files\codec + + Source Files - - Source Files\codec + + Source Files - - Source Files\codec + + Source Files - - Source Files\codec + + Source Files - - Source Files\codec + + Source Files - - Source Files\codec + + Source Files - - Source Files\codec + + Source Files - - Source Files\codec + + Source Files - - Source Files\iso1 + + Source Files - - Source Files\iso1 + + Source Files - - Source Files\iso1 + + Source Files - - Source Files\appHandshake + + Source Files - - Source Files\appHandshake + + Source Files - - Source Files\appHandshake + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\codec + + Header Files - - Header Files\iso1 + + Header Files - - Header Files\iso1 + + Header Files - - Header Files\iso1 + + Header Files - - Header Files\appHandshake + + Header Files - - Header Files\appHandshake + + Header Files - - Header Files\appHandshake + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files \ No newline at end of file diff --git a/csharp/vc2022/V2GDecoderC.sln b/csharp/vc2022/V2GDecoderC.sln index ec2f60f..15b356a 100644 --- a/csharp/vc2022/V2GDecoderC.sln +++ b/csharp/vc2022/V2GDecoderC.sln @@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V2GDecoder", "V2GDecoder\V2GDecoder.vcxproj", "{A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "V2GDecoder", "V2GDecoder\V2GDecoder.vcxproj", "{C09AE419-8FDD-4312-B023-55DC1ED18A73}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HexToBinary", "HexToBinary\HexToBinary.vcxproj", "{B8F8C8F2-3C4D-5E6F-9A0B-2C3D4E5F6A7B}" EndProject @@ -16,14 +16,14 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}.Debug|x64.ActiveCfg = Debug|x64 - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}.Debug|x64.Build.0 = Debug|x64 - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}.Debug|x86.ActiveCfg = Debug|Win32 - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}.Debug|x86.Build.0 = Debug|Win32 - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}.Release|x64.ActiveCfg = Release|x64 - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}.Release|x64.Build.0 = Release|x64 - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}.Release|x86.ActiveCfg = Release|Win32 - {A7F7B7E1-2B3C-4D5E-8F9A-1B2C3D4E5F6G}.Release|x86.Build.0 = Release|Win32 + {C09AE419-8FDD-4312-B023-55DC1ED18A73}.Debug|x64.ActiveCfg = Debug|x64 + {C09AE419-8FDD-4312-B023-55DC1ED18A73}.Debug|x64.Build.0 = Debug|x64 + {C09AE419-8FDD-4312-B023-55DC1ED18A73}.Debug|x86.ActiveCfg = Debug|Win32 + {C09AE419-8FDD-4312-B023-55DC1ED18A73}.Debug|x86.Build.0 = Debug|Win32 + {C09AE419-8FDD-4312-B023-55DC1ED18A73}.Release|x64.ActiveCfg = Release|x64 + {C09AE419-8FDD-4312-B023-55DC1ED18A73}.Release|x64.Build.0 = Release|x64 + {C09AE419-8FDD-4312-B023-55DC1ED18A73}.Release|x86.ActiveCfg = Release|Win32 + {C09AE419-8FDD-4312-B023-55DC1ED18A73}.Release|x86.Build.0 = Release|Win32 {B8F8C8F2-3C4D-5E6F-9A0B-2C3D4E5F6A7B}.Debug|x64.ActiveCfg = Debug|x64 {B8F8C8F2-3C4D-5E6F-9A0B-2C3D4E5F6A7B}.Debug|x64.Build.0 = Debug|x64 {B8F8C8F2-3C4D-5E6F-9A0B-2C3D4E5F6A7B}.Debug|x86.ActiveCfg = Debug|Win32 @@ -47,4 +47,4 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1A2B3C4D-5E6F-7A8B-9C0D-1E2F3A4B5C6D} EndGlobalSection -EndGlobal \ No newline at end of file +EndGlobal diff --git a/csharp/vc2022/build.bat b/csharp/vc2022/build.bat index 8fe102b..b4999ea 100644 --- a/csharp/vc2022/build.bat +++ b/csharp/vc2022/build.bat @@ -12,36 +12,8 @@ if not exist "C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild REM Set MSBuild path set MSBUILD="C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\MSBuild.exe" -REM Clean previous builds -echo Cleaning previous builds... -%MSBUILD% V2GDecoderC.sln -target:Clean -property:Configuration=Debug -property:Platform=x64 -verbosity:minimal - REM Build Debug x64 configuration echo Building Debug x64 configuration... %MSBUILD% V2GDecoderC.sln -property:Configuration=Debug -property:Platform=x64 -verbosity:normal -if %ERRORLEVEL% EQU 0 ( - echo Build successful! - echo Output directory: bin\x64\Debug\ - dir bin\x64\Debug\*.exe /b -) else ( - echo Build failed with error code %ERRORLEVEL% - echo Please check the source file paths and project configuration. -) - -REM Test the built executable if successful -if %ERRORLEVEL% EQU 0 ( - echo. - echo Testing the built V2GDecoder.exe... - if exist bin\x64\Debug\V2GDecoder.exe ( - echo Running test with test4.exi... - bin\x64\Debug\V2GDecoder.exe ..\..\test4.exi - echo. - echo Running test with test5.exi... - bin\x64\Debug\V2GDecoder.exe ..\..\test5.exi - ) else ( - echo V2GDecoder.exe not found in output directory - ) -) - pause \ No newline at end of file diff --git a/minimal_test.xml b/minimal_test.xml deleted file mode 100644 index e37c819..0000000 --- a/minimal_test.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - 4142423030303831 - - - - - true - 0 - 100 - - - 0 - 3 - 5 - - true - - 0 - 4 - 460 - - - - \ No newline at end of file diff --git a/struct_exi.txt b/struct_exi.txt index aed3667..2910cec 100644 --- a/struct_exi.txt +++ b/struct_exi.txt @@ -22,8 +22,8 @@ ChargeParameterDiscoveryReq_isUsed: 0 ChargeParameterDiscoveryRes_isUsed: 0 ChargingStatusReq_isUsed: 0 ChargingStatusRes_isUsed: 0 -CurrentDemandReq_isUsed: 0 -CurrentDemandRes_isUsed: 1 +CurrentDemandReq_isUsed: 1 +CurrentDemandRes_isUsed: 0 MeteringReceiptReq_isUsed: 0 MeteringReceiptRes_isUsed: 0 PaymentDetailsReq_isUsed: 0 @@ -44,3 +44,37 @@ SessionStopReq_isUsed: 0 SessionStopRes_isUsed: 0 WeldingDetectionReq_isUsed: 0 WeldingDetectionRes_isUsed: 0 + +--- CurrentDemandReq Details --- +DC_EVStatus.EVReady: 1 +DC_EVStatus.EVErrorCode: 0 +DC_EVStatus.EVRESSSOC: 100 +EVTargetCurrent.Multiplier: 0 +EVTargetCurrent.Unit: 3 +EVTargetCurrent.Value: 5 +EVMaximumVoltageLimit_isUsed: 1 +EVMaximumVoltageLimit.Multiplier: 0 +EVMaximumVoltageLimit.Unit: 4 +EVMaximumVoltageLimit.Value: 471 +EVMaximumCurrentLimit_isUsed: 1 +EVMaximumCurrentLimit.Multiplier: 0 +EVMaximumCurrentLimit.Unit: 3 +EVMaximumCurrentLimit.Value: 100 +EVMaximumPowerLimit_isUsed: 1 +EVMaximumPowerLimit.Multiplier: 3 +EVMaximumPowerLimit.Unit: 5 +EVMaximumPowerLimit.Value: 50 +BulkChargingComplete_isUsed: 1 +BulkChargingComplete: 0 +ChargingComplete: 1 +RemainingTimeToFullSoC_isUsed: 1 +RemainingTimeToFullSoC.Multiplier: 0 +RemainingTimeToFullSoC.Unit: 2 +RemainingTimeToFullSoC.Value: 0 +RemainingTimeToBulkSoC_isUsed: 1 +RemainingTimeToBulkSoC.Multiplier: 0 +RemainingTimeToBulkSoC.Unit: 2 +RemainingTimeToBulkSoC.Value: 0 +EVTargetVoltage.Multiplier: 0 +EVTargetVoltage.Unit: 4 +EVTargetVoltage.Value: 460 diff --git a/test1._new.exi b/test1._new.exi deleted file mode 100644 index 1880661..0000000 --- a/test1._new.exi +++ /dev/null @@ -1 +0,0 @@ -P +Y0123456789:;<=>?0123456789:;<=>?0 \ No newline at end of file diff --git a/test1.xml b/test1.xml index c9e8c5e..28ab885 100644 --- a/test1.xml +++ b/test1.xml @@ -1,11 +1,3 @@ - -
- ABB00081 -
- - CurrentDemandRes - OK - 8098021050908C0C0C0E0C50E0000000 - -
+ +414242303030383101104450035falsefalsefalseZ1 \ No newline at end of file