From f963abe80a15c0269dfffd3b5dd80893138bd6b6 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 28 Sep 2021 00:41:58 +0100 Subject: [PATCH] Reorganize all files and use nuget packages for Aaru 5.3 algorithms. --- .~lock.Benchmarks.ods# | 1 - Aaru.Checksums/Aaru.Checksums.csproj | 132 - Aaru.Checksums/CDChecksums.cs | 648 -- Aaru.Checksums/CRC16CCITTContext.cs | 103 - Aaru.Checksums/CRC16IBMContext.cs | 102 - Aaru.Checksums/CRC32Context.cs | 234 - Aaru.Checksums/CRC64Context.cs | 238 - Aaru.Checksums/MD5Context.cs | 133 - Aaru.Checksums/ReedSolomon.cs | 730 -- Aaru.Checksums/Register.cs | 82 - Aaru.Checksums/SHA1Context.cs | 134 - Aaru.Checksums/SHA256Context.cs | 134 - Aaru.Checksums/SHA384Context.cs | 134 - Aaru.Checksums/SHA512Context.cs | 134 - Aaru.Checksums/SpamSumContext.cs | 527 - Aaru.CommonTypes/.editorconfig | 632 -- Aaru.CommonTypes/.gitignore | 595 -- Aaru.CommonTypes/Aaru.CommonTypes.csproj | 174 - .../Aaru.CommonTypes.csproj.DotSettings | 2 - Aaru.CommonTypes/Delegates.cs | 90 - Aaru.CommonTypes/Enums/DeviceType.cs | 59 - Aaru.CommonTypes/Enums/ErrorNumber.cs | 176 - Aaru.CommonTypes/Enums/Images.cs | 393 - Aaru.CommonTypes/Extents/ExtentsByte.cs | 254 - Aaru.CommonTypes/Extents/ExtentsConverter.cs | 84 - Aaru.CommonTypes/Extents/ExtentsInt.cs | 254 - Aaru.CommonTypes/Extents/ExtentsLong.cs | 254 - Aaru.CommonTypes/Extents/ExtentsSByte.cs | 255 - Aaru.CommonTypes/Extents/ExtentsShort.cs | 255 - Aaru.CommonTypes/Extents/ExtentsUInt.cs | 254 - Aaru.CommonTypes/Extents/ExtentsULong.cs | 255 - Aaru.CommonTypes/Extents/ExtentsUShort.cs | 255 - Aaru.CommonTypes/Filters.cs | 117 - Aaru.CommonTypes/Geometry.cs | 143 - Aaru.CommonTypes/Interfaces/IArchive.cs | 203 - Aaru.CommonTypes/Interfaces/IChecksum.cs | 59 - Aaru.CommonTypes/Interfaces/IFilesystem.cs | 73 - Aaru.CommonTypes/Interfaces/IFilter.cs | 147 - Aaru.CommonTypes/Interfaces/IFloppyImage.cs | 124 - Aaru.CommonTypes/Interfaces/IMediaImage.cs | 124 - .../Interfaces/IOpticalMediaImage.cs | 123 - Aaru.CommonTypes/Interfaces/IPartition.cs | 62 - .../Interfaces/IPartitionableMediaImage.cs | 54 - .../Interfaces/IPluginRegister.cs | 87 - .../Interfaces/IReadOnlyFilesystem.cs | 125 - Aaru.CommonTypes/Interfaces/ITapeImage.cs | 56 - .../Interfaces/IVerifiableImage.cs | 49 - .../Interfaces/IVerifiableSectorsImage.cs | 60 - .../Interfaces/IWritableFloppyImage.cs | 97 - Aaru.CommonTypes/Interfaces/IWritableImage.cs | 154 - .../Interfaces/IWritableOpticalImage.cs | 56 - .../Interfaces/IWritableTapeImage.cs | 64 - Aaru.CommonTypes/Interop/DetectOS.cs | 390 - Aaru.CommonTypes/Interop/PlatformID.cs | 122 - Aaru.CommonTypes/Interop/Version.cs | 91 - Aaru.CommonTypes/MediaType.cs | 1034 -- Aaru.CommonTypes/MediaType.csv | 528 - Aaru.CommonTypes/MediaType.ods | Bin 37484 -> 0 bytes .../MediaTypeFromDevice/FromAta.cs | 73 - .../MediaTypeFromDevice/FromMmc.cs | 179 - .../MediaTypeFromDevice/FromOdc.cs | 336 - .../MediaTypeFromDevice/FromSbc.cs | 943 -- .../MediaTypeFromDevice/FromScsi.cs | 134 - .../MediaTypeFromDevice/FromSsc.cs | 1611 --- Aaru.CommonTypes/Metadata/CdOffset.cs | 58 - Aaru.CommonTypes/Metadata/DeviceReport.cs | 1070 -- Aaru.CommonTypes/Metadata/DeviceReportV2.cs | 2307 ----- Aaru.CommonTypes/Metadata/Dimensions.cs | 1094 -- Aaru.CommonTypes/Metadata/MediaType.cs | 2539 ----- Aaru.CommonTypes/Metadata/Resume.cs | 80 - Aaru.CommonTypes/Metadata/Statistics.cs | 309 - Aaru.CommonTypes/Metadata/Version.cs | 56 - Aaru.CommonTypes/Partition.cs | 119 - Aaru.CommonTypes/PluginBase.cs | 149 - .../Structs/Devices/ATA/Identify.cs | 1127 -- .../Structs/Devices/SCSI/Enums.cs | 245 - .../Structs/Devices/SCSI/Inquiry.cs | 788 -- .../Structs/Devices/SCSI/Modes/2A.cs | 514 - Aaru.CommonTypes/Structs/Filesystems.cs | 281 - Aaru.CommonTypes/Structs/Images.cs | 190 - Aaru.CommonTypes/Structs/TapeFile.cs | 53 - Aaru.CommonTypes/Structs/TapePartition.cs | 51 - Aaru.Console/.editorconfig | 632 -- Aaru.Console/.gitignore | 595 -- Aaru.Console/AaruConsole.cs | 236 - Aaru.Helpers/.editorconfig | 632 -- Aaru.Helpers/.gitignore | 595 -- Aaru.Helpers/Aaru.Helpers.csproj | 122 - Aaru.Helpers/ArrayFill.cs | 81 - Aaru.Helpers/ArrayIsEmpty.cs | 50 - Aaru.Helpers/BigEndianBitConverter.cs | 324 - Aaru.Helpers/BitEndian.cs | 51 - Aaru.Helpers/CHS.cs | 49 - Aaru.Helpers/CompareBytes.cs | 72 - Aaru.Helpers/CountBits.cs | 49 - Aaru.Helpers/DateHandlers.cs | 389 - Aaru.Helpers/Marshal.cs | 498 - .../MarshallingPropertiesAttribute.cs | 62 - Aaru.Helpers/PrintHex.cs | 136 - Aaru.Helpers/StringHandlers.cs | 185 - Aaru.Helpers/Swapping.cs | 112 - .../.editorconfig | 0 .../.gitignore | 0 .../Aaru6.Checksums.csproj | 41 +- .../Adler32Context.cs | 155 +- Aaru6.Checksums/CRC16CCITTContext.cs | 320 + .../CRC16Context.cs | 2 +- Aaru6.Checksums/CRC16IBMContext.cs | 317 + Aaru6.Checksums/CRC32CLMUL.cs | 562 + Aaru6.Checksums/CRC32Context.cs | 549 + Aaru6.Checksums/CRC64CLMUL.cs | 111 + Aaru6.Checksums/CRC64Context.cs | 480 + .../FletcherContext.cs | 280 +- Aaru6.Checksums/SpamSumContext.cs | 1043 ++ AaruBenchmark.sln | 20 +- AaruBenchmark/AaruBenchmark.csproj | 13 +- AaruBenchmark/Checksums/Aaru.cs | 22 + AaruBenchmark/Checksums/Aaru6.cs | 225 + AaruBenchmark/Checksums/AaruNative.cs | 25 + AaruBenchmark/Program.cs | 39 +- Benchmarks.ods | Bin 16684 -> 34329 bytes CICMMetadata/.editorconfig | 632 -- .../.externalToolBuilders/New_Builder.launch | 9 - CICMMetadata/.gitignore | 597 -- CICMMetadata/.project | 21 - .../.settings/org.eclipse.wst.xsl.core.prefs | 11 - CICMMetadata/CICMMetadata.iml | 9 - CICMMetadata/CICMMetadataEditor.sln | 29 - .../CICMMetadataEditor.Desktop.csproj | 20 - .../CICMMetadataEditor.Desktop/Info.plist | 20 - .../CICMMetadataEditor.Desktop/MacIcon.icns | Bin 114177 -> 0 bytes .../CICMMetadataEditor.Desktop/Program.cs | 46 - .../AppIcon.appiconset/AppIcon-128.png | Bin 8125 -> 0 bytes .../AppIcon.appiconset/AppIcon-128@2x.png | Bin 20798 -> 0 bytes .../AppIcon.appiconset/AppIcon-16.png | Bin 711 -> 0 bytes .../AppIcon.appiconset/AppIcon-16@2x.png | Bin 1484 -> 0 bytes .../AppIcon.appiconset/AppIcon-256.png | Bin 20798 -> 0 bytes .../AppIcon.appiconset/AppIcon-256@2x.png | Bin 59335 -> 0 bytes .../AppIcon.appiconset/AppIcon-32.png | Bin 1484 -> 0 bytes .../AppIcon.appiconset/AppIcon-32@2x.png | Bin 3428 -> 0 bytes .../AppIcon.appiconset/AppIcon-512.png | Bin 59335 -> 0 bytes .../AppIcon.appiconset/AppIcon-512@2x.png | Bin 177632 -> 0 bytes .../AppIcon.appiconset/Contents.json | 68 - .../Assets.xcassets/Contents.json | 6 - .../CICMMetadataEditor.XamMac.csproj | 99 - .../CICMMetadataEditor.XamMac/Info.plist | 30 - .../CICMMetadataEditor.XamMac/Program.cs | 43 - .../CICMMetadataEditor.csproj | 34 - .../CICMMetadataEditor/WrappersForEto.cs | 64 - .../CICMMetadataEditor/dlgBlockMedia.xeto | 678 -- .../CICMMetadataEditor/dlgBlockMedia.xeto.cs | 1769 ---- .../CICMMetadataEditor/dlgMetadata.xeto | 373 - .../CICMMetadataEditor/dlgMetadata.xeto.cs | 1291 --- .../CICMMetadataEditor/dlgOpticalDisc.xeto | 778 -- .../CICMMetadataEditor/dlgOpticalDisc.xeto.cs | 1979 ---- CICMMetadata/CICMMetadataEditor/LICENSE | 21 - CICMMetadata/README.md | 23 - CICMMetadata/build.sh | 26 - CICMMetadata/cicm.xml | 1773 ---- CICMMetadata/cicm.xsd | 3419 ------- CICMMetadata/dotnet/cicm.cs | 9090 ---------------- CICMMetadata/dotnet/cicm.vb | 9093 ----------------- CICMMetadata/java/generated/ATAType.java | 71 - .../java/generated/AdvertisementType.java | 390 - .../java/generated/ArchitecturesType.java | 156 - .../java/generated/AudioBlockType.java | 186 - .../java/generated/AudioMediaType.java | 447 - .../java/generated/AudioTracksType.java | 208 - CICMMetadata/java/generated/BarcodeType.java | 129 - CICMMetadata/java/generated/BarcodesType.java | 78 - .../java/generated/BlockMediaType.java | 1051 -- .../java/generated/BlockSizeType.java | 81 - .../java/generated/BlockTrackType.java | 308 - CICMMetadata/java/generated/BookType.java | 325 - CICMMetadata/java/generated/BorderType.java | 162 - .../java/generated/CICMMetadataType.java | 886 -- CICMMetadata/java/generated/CaseScanType.java | 111 - CICMMetadata/java/generated/CaseType.java | 129 - .../java/generated/CategoriesType.java | 76 - CICMMetadata/java/generated/ChecksumType.java | 125 - .../java/generated/ChecksumsType.java | 78 - .../java/generated/ContentsFileType.java | 492 - .../java/generated/CoordinatesType.java | 81 - CICMMetadata/java/generated/CoverType.java | 123 - .../java/generated/DimensionsType.java | 147 - .../java/generated/DirectoryType.java | 476 - CICMMetadata/java/generated/DiscScanType.java | 108 - .../java/generated/DumpHardwareArrayType.java | 78 - .../java/generated/DumpHardwareType.java | 237 - CICMMetadata/java/generated/DumpType.java | 131 - CICMMetadata/java/generated/EVPDType.java | 163 - .../java/generated/ExtendedAttributeType.java | 127 - .../generated/ExtendedAttributesType.java | 76 - CICMMetadata/java/generated/ExtentType.java | 101 - CICMMetadata/java/generated/ExtentsType.java | 76 - .../generated/FileSystemInformationType.java | 76 - .../java/generated/FileSystemType.java | 591 -- .../java/generated/FileSystemsType.java | 76 - CICMMetadata/java/generated/FileType.java | 96 - .../generated/FilesystemContentsType.java | 137 - CICMMetadata/java/generated/ImageType.java | 127 - CICMMetadata/java/generated/KeywordsType.java | 76 - .../java/generated/LanguagesType.java | 567 - .../java/generated/LayeredTextType.java | 100 - CICMMetadata/java/generated/LayersType.java | 111 - .../java/generated/LinearMediaType.java | 583 -- CICMMetadata/java/generated/MagazineType.java | 326 - .../java/generated/MediaScanType.java | 108 - .../java/generated/MultiMediaCardType.java | 155 - CICMMetadata/java/generated/OCRType.java | 153 - .../java/generated/ObjectFactory.java | 716 -- .../java/generated/OpticalDiscType.java | 1406 --- CICMMetadata/java/generated/PCIType.java | 153 - CICMMetadata/java/generated/PCMCIAType.java | 249 - .../java/generated/PS3EncryptionType.java | 97 - .../java/generated/PartitionType.java | 239 - .../java/generated/RecordingType.java | 292 - .../RequiredOperatingSystemType.java | 104 - .../RequiredOperatingSystemsType.java | 76 - CICMMetadata/java/generated/SCSIType.java | 190 - .../java/generated/ScanProcessingType.java | 128 - CICMMetadata/java/generated/ScanType.java | 198 - CICMMetadata/java/generated/ScannerType.java | 211 - CICMMetadata/java/generated/ScansType.java | 97 - CICMMetadata/java/generated/SectorsType.java | 98 - .../java/generated/SecureDigitalType.java | 155 - .../java/generated/SecuritySectorsType.java | 104 - CICMMetadata/java/generated/SequenceType.java | 190 - CICMMetadata/java/generated/SoftwareType.java | 127 - .../java/generated/SubChannelType.java | 130 - .../java/generated/SubcategoriesType.java | 76 - .../java/generated/SubtitleTracksType.java | 122 - CICMMetadata/java/generated/SystemsType.java | 76 - CICMMetadata/java/generated/TapeFileType.java | 246 - .../java/generated/TapeInformationType.java | 76 - .../java/generated/TapePartitionType.java | 254 - .../java/generated/TrackFlagsType.java | 141 - .../java/generated/TrackIndexType.java | 80 - .../java/generated/TrackIndexesType.java | 76 - .../java/generated/TrackSequenceType.java | 92 - CICMMetadata/java/generated/TrackType.java | 504 - CICMMetadata/java/generated/USBType.java | 125 - .../java/generated/UserManualType.java | 150 - .../java/generated/VariableBlockSizeType.java | 76 - .../java/generated/VideoTracksType.java | 201 - .../generated/XboxSecuritySectorsType.java | 112 - CICMMetadata/java/generated/XboxType.java | 132 - CICMMetadata/samples/advertisement.xml | 56 - CICMMetadata/samples/floppy_and_cd.xml | 241 - CICMMetadata/samples/mixedcd.xml | 258 - CICMMetadata/samples/multiple_floppies.xml | 198 - CICMMetadata/samples/pcirom.xml | 42 - CICMMetadata/samples/pspumd.xml | 263 - 253 files changed, 4124 insertions(+), 82408 deletions(-) delete mode 100644 .~lock.Benchmarks.ods# delete mode 100644 Aaru.Checksums/Aaru.Checksums.csproj delete mode 100644 Aaru.Checksums/CDChecksums.cs delete mode 100644 Aaru.Checksums/CRC16CCITTContext.cs delete mode 100644 Aaru.Checksums/CRC16IBMContext.cs delete mode 100644 Aaru.Checksums/CRC32Context.cs delete mode 100644 Aaru.Checksums/CRC64Context.cs delete mode 100644 Aaru.Checksums/MD5Context.cs delete mode 100644 Aaru.Checksums/ReedSolomon.cs delete mode 100644 Aaru.Checksums/Register.cs delete mode 100644 Aaru.Checksums/SHA1Context.cs delete mode 100644 Aaru.Checksums/SHA256Context.cs delete mode 100644 Aaru.Checksums/SHA384Context.cs delete mode 100644 Aaru.Checksums/SHA512Context.cs delete mode 100644 Aaru.Checksums/SpamSumContext.cs delete mode 100644 Aaru.CommonTypes/.editorconfig delete mode 100644 Aaru.CommonTypes/.gitignore delete mode 100644 Aaru.CommonTypes/Aaru.CommonTypes.csproj delete mode 100644 Aaru.CommonTypes/Aaru.CommonTypes.csproj.DotSettings delete mode 100644 Aaru.CommonTypes/Delegates.cs delete mode 100644 Aaru.CommonTypes/Enums/DeviceType.cs delete mode 100644 Aaru.CommonTypes/Enums/ErrorNumber.cs delete mode 100644 Aaru.CommonTypes/Enums/Images.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsByte.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsConverter.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsInt.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsLong.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsSByte.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsShort.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsUInt.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsULong.cs delete mode 100644 Aaru.CommonTypes/Extents/ExtentsUShort.cs delete mode 100644 Aaru.CommonTypes/Filters.cs delete mode 100644 Aaru.CommonTypes/Geometry.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IArchive.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IChecksum.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IFilesystem.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IFilter.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IFloppyImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IMediaImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IOpticalMediaImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IPartition.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IPartitionableMediaImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IPluginRegister.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IReadOnlyFilesystem.cs delete mode 100644 Aaru.CommonTypes/Interfaces/ITapeImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IVerifiableImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IVerifiableSectorsImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IWritableFloppyImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IWritableImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IWritableOpticalImage.cs delete mode 100644 Aaru.CommonTypes/Interfaces/IWritableTapeImage.cs delete mode 100644 Aaru.CommonTypes/Interop/DetectOS.cs delete mode 100644 Aaru.CommonTypes/Interop/PlatformID.cs delete mode 100644 Aaru.CommonTypes/Interop/Version.cs delete mode 100644 Aaru.CommonTypes/MediaType.cs delete mode 100644 Aaru.CommonTypes/MediaType.csv delete mode 100644 Aaru.CommonTypes/MediaType.ods delete mode 100644 Aaru.CommonTypes/MediaTypeFromDevice/FromAta.cs delete mode 100644 Aaru.CommonTypes/MediaTypeFromDevice/FromMmc.cs delete mode 100644 Aaru.CommonTypes/MediaTypeFromDevice/FromOdc.cs delete mode 100644 Aaru.CommonTypes/MediaTypeFromDevice/FromSbc.cs delete mode 100644 Aaru.CommonTypes/MediaTypeFromDevice/FromScsi.cs delete mode 100644 Aaru.CommonTypes/MediaTypeFromDevice/FromSsc.cs delete mode 100644 Aaru.CommonTypes/Metadata/CdOffset.cs delete mode 100644 Aaru.CommonTypes/Metadata/DeviceReport.cs delete mode 100644 Aaru.CommonTypes/Metadata/DeviceReportV2.cs delete mode 100644 Aaru.CommonTypes/Metadata/Dimensions.cs delete mode 100644 Aaru.CommonTypes/Metadata/MediaType.cs delete mode 100644 Aaru.CommonTypes/Metadata/Resume.cs delete mode 100644 Aaru.CommonTypes/Metadata/Statistics.cs delete mode 100644 Aaru.CommonTypes/Metadata/Version.cs delete mode 100644 Aaru.CommonTypes/Partition.cs delete mode 100644 Aaru.CommonTypes/PluginBase.cs delete mode 100644 Aaru.CommonTypes/Structs/Devices/ATA/Identify.cs delete mode 100644 Aaru.CommonTypes/Structs/Devices/SCSI/Enums.cs delete mode 100644 Aaru.CommonTypes/Structs/Devices/SCSI/Inquiry.cs delete mode 100644 Aaru.CommonTypes/Structs/Devices/SCSI/Modes/2A.cs delete mode 100644 Aaru.CommonTypes/Structs/Filesystems.cs delete mode 100644 Aaru.CommonTypes/Structs/Images.cs delete mode 100644 Aaru.CommonTypes/Structs/TapeFile.cs delete mode 100644 Aaru.CommonTypes/Structs/TapePartition.cs delete mode 100644 Aaru.Console/.editorconfig delete mode 100644 Aaru.Console/.gitignore delete mode 100644 Aaru.Console/AaruConsole.cs delete mode 100644 Aaru.Helpers/.editorconfig delete mode 100644 Aaru.Helpers/.gitignore delete mode 100644 Aaru.Helpers/Aaru.Helpers.csproj delete mode 100644 Aaru.Helpers/ArrayFill.cs delete mode 100644 Aaru.Helpers/ArrayIsEmpty.cs delete mode 100644 Aaru.Helpers/BigEndianBitConverter.cs delete mode 100644 Aaru.Helpers/BitEndian.cs delete mode 100644 Aaru.Helpers/CHS.cs delete mode 100644 Aaru.Helpers/CompareBytes.cs delete mode 100644 Aaru.Helpers/CountBits.cs delete mode 100644 Aaru.Helpers/DateHandlers.cs delete mode 100644 Aaru.Helpers/Marshal.cs delete mode 100644 Aaru.Helpers/MarshallingPropertiesAttribute.cs delete mode 100644 Aaru.Helpers/PrintHex.cs delete mode 100644 Aaru.Helpers/StringHandlers.cs delete mode 100644 Aaru.Helpers/Swapping.cs rename {Aaru.Checksums => Aaru6.Checksums}/.editorconfig (100%) rename {Aaru.Checksums => Aaru6.Checksums}/.gitignore (100%) rename Aaru.Console/Aaru.Console.csproj => Aaru6.Checksums/Aaru6.Checksums.csproj (88%) rename {Aaru.Checksums => Aaru6.Checksums}/Adler32Context.cs (52%) create mode 100644 Aaru6.Checksums/CRC16CCITTContext.cs rename {Aaru.Checksums => Aaru6.Checksums}/CRC16Context.cs (98%) create mode 100644 Aaru6.Checksums/CRC16IBMContext.cs create mode 100644 Aaru6.Checksums/CRC32CLMUL.cs create mode 100644 Aaru6.Checksums/CRC32Context.cs create mode 100644 Aaru6.Checksums/CRC64CLMUL.cs create mode 100644 Aaru6.Checksums/CRC64Context.cs rename {Aaru.Checksums => Aaru6.Checksums}/FletcherContext.cs (52%) create mode 100644 Aaru6.Checksums/SpamSumContext.cs create mode 100644 AaruBenchmark/Checksums/Aaru6.cs delete mode 100644 CICMMetadata/.editorconfig delete mode 100644 CICMMetadata/.externalToolBuilders/New_Builder.launch delete mode 100644 CICMMetadata/.gitignore delete mode 100644 CICMMetadata/.project delete mode 100644 CICMMetadata/.settings/org.eclipse.wst.xsl.core.prefs delete mode 100644 CICMMetadata/CICMMetadata.iml delete mode 100644 CICMMetadata/CICMMetadataEditor.sln delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/CICMMetadataEditor.Desktop.csproj delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/Info.plist delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/MacIcon.icns delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/Program.cs delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/Contents.json delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/CICMMetadataEditor.XamMac.csproj delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Info.plist delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Program.cs delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/CICMMetadataEditor.csproj delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/WrappersForEto.cs delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgBlockMedia.xeto delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgBlockMedia.xeto.cs delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgMetadata.xeto delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgMetadata.xeto.cs delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgOpticalDisc.xeto delete mode 100644 CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgOpticalDisc.xeto.cs delete mode 100644 CICMMetadata/CICMMetadataEditor/LICENSE delete mode 100644 CICMMetadata/README.md delete mode 100755 CICMMetadata/build.sh delete mode 100644 CICMMetadata/cicm.xml delete mode 100644 CICMMetadata/cicm.xsd delete mode 100644 CICMMetadata/dotnet/cicm.cs delete mode 100644 CICMMetadata/dotnet/cicm.vb delete mode 100644 CICMMetadata/java/generated/ATAType.java delete mode 100644 CICMMetadata/java/generated/AdvertisementType.java delete mode 100644 CICMMetadata/java/generated/ArchitecturesType.java delete mode 100644 CICMMetadata/java/generated/AudioBlockType.java delete mode 100644 CICMMetadata/java/generated/AudioMediaType.java delete mode 100644 CICMMetadata/java/generated/AudioTracksType.java delete mode 100644 CICMMetadata/java/generated/BarcodeType.java delete mode 100644 CICMMetadata/java/generated/BarcodesType.java delete mode 100644 CICMMetadata/java/generated/BlockMediaType.java delete mode 100644 CICMMetadata/java/generated/BlockSizeType.java delete mode 100644 CICMMetadata/java/generated/BlockTrackType.java delete mode 100644 CICMMetadata/java/generated/BookType.java delete mode 100644 CICMMetadata/java/generated/BorderType.java delete mode 100644 CICMMetadata/java/generated/CICMMetadataType.java delete mode 100644 CICMMetadata/java/generated/CaseScanType.java delete mode 100644 CICMMetadata/java/generated/CaseType.java delete mode 100644 CICMMetadata/java/generated/CategoriesType.java delete mode 100644 CICMMetadata/java/generated/ChecksumType.java delete mode 100644 CICMMetadata/java/generated/ChecksumsType.java delete mode 100644 CICMMetadata/java/generated/ContentsFileType.java delete mode 100644 CICMMetadata/java/generated/CoordinatesType.java delete mode 100644 CICMMetadata/java/generated/CoverType.java delete mode 100644 CICMMetadata/java/generated/DimensionsType.java delete mode 100644 CICMMetadata/java/generated/DirectoryType.java delete mode 100644 CICMMetadata/java/generated/DiscScanType.java delete mode 100644 CICMMetadata/java/generated/DumpHardwareArrayType.java delete mode 100644 CICMMetadata/java/generated/DumpHardwareType.java delete mode 100644 CICMMetadata/java/generated/DumpType.java delete mode 100644 CICMMetadata/java/generated/EVPDType.java delete mode 100644 CICMMetadata/java/generated/ExtendedAttributeType.java delete mode 100644 CICMMetadata/java/generated/ExtendedAttributesType.java delete mode 100644 CICMMetadata/java/generated/ExtentType.java delete mode 100644 CICMMetadata/java/generated/ExtentsType.java delete mode 100644 CICMMetadata/java/generated/FileSystemInformationType.java delete mode 100644 CICMMetadata/java/generated/FileSystemType.java delete mode 100644 CICMMetadata/java/generated/FileSystemsType.java delete mode 100644 CICMMetadata/java/generated/FileType.java delete mode 100644 CICMMetadata/java/generated/FilesystemContentsType.java delete mode 100644 CICMMetadata/java/generated/ImageType.java delete mode 100644 CICMMetadata/java/generated/KeywordsType.java delete mode 100644 CICMMetadata/java/generated/LanguagesType.java delete mode 100644 CICMMetadata/java/generated/LayeredTextType.java delete mode 100644 CICMMetadata/java/generated/LayersType.java delete mode 100644 CICMMetadata/java/generated/LinearMediaType.java delete mode 100644 CICMMetadata/java/generated/MagazineType.java delete mode 100644 CICMMetadata/java/generated/MediaScanType.java delete mode 100644 CICMMetadata/java/generated/MultiMediaCardType.java delete mode 100644 CICMMetadata/java/generated/OCRType.java delete mode 100644 CICMMetadata/java/generated/ObjectFactory.java delete mode 100644 CICMMetadata/java/generated/OpticalDiscType.java delete mode 100644 CICMMetadata/java/generated/PCIType.java delete mode 100644 CICMMetadata/java/generated/PCMCIAType.java delete mode 100644 CICMMetadata/java/generated/PS3EncryptionType.java delete mode 100644 CICMMetadata/java/generated/PartitionType.java delete mode 100644 CICMMetadata/java/generated/RecordingType.java delete mode 100644 CICMMetadata/java/generated/RequiredOperatingSystemType.java delete mode 100644 CICMMetadata/java/generated/RequiredOperatingSystemsType.java delete mode 100644 CICMMetadata/java/generated/SCSIType.java delete mode 100644 CICMMetadata/java/generated/ScanProcessingType.java delete mode 100644 CICMMetadata/java/generated/ScanType.java delete mode 100644 CICMMetadata/java/generated/ScannerType.java delete mode 100644 CICMMetadata/java/generated/ScansType.java delete mode 100644 CICMMetadata/java/generated/SectorsType.java delete mode 100644 CICMMetadata/java/generated/SecureDigitalType.java delete mode 100644 CICMMetadata/java/generated/SecuritySectorsType.java delete mode 100644 CICMMetadata/java/generated/SequenceType.java delete mode 100644 CICMMetadata/java/generated/SoftwareType.java delete mode 100644 CICMMetadata/java/generated/SubChannelType.java delete mode 100644 CICMMetadata/java/generated/SubcategoriesType.java delete mode 100644 CICMMetadata/java/generated/SubtitleTracksType.java delete mode 100644 CICMMetadata/java/generated/SystemsType.java delete mode 100644 CICMMetadata/java/generated/TapeFileType.java delete mode 100644 CICMMetadata/java/generated/TapeInformationType.java delete mode 100644 CICMMetadata/java/generated/TapePartitionType.java delete mode 100644 CICMMetadata/java/generated/TrackFlagsType.java delete mode 100644 CICMMetadata/java/generated/TrackIndexType.java delete mode 100644 CICMMetadata/java/generated/TrackIndexesType.java delete mode 100644 CICMMetadata/java/generated/TrackSequenceType.java delete mode 100644 CICMMetadata/java/generated/TrackType.java delete mode 100644 CICMMetadata/java/generated/USBType.java delete mode 100644 CICMMetadata/java/generated/UserManualType.java delete mode 100644 CICMMetadata/java/generated/VariableBlockSizeType.java delete mode 100644 CICMMetadata/java/generated/VideoTracksType.java delete mode 100644 CICMMetadata/java/generated/XboxSecuritySectorsType.java delete mode 100644 CICMMetadata/java/generated/XboxType.java delete mode 100644 CICMMetadata/samples/advertisement.xml delete mode 100644 CICMMetadata/samples/floppy_and_cd.xml delete mode 100644 CICMMetadata/samples/mixedcd.xml delete mode 100644 CICMMetadata/samples/multiple_floppies.xml delete mode 100644 CICMMetadata/samples/pcirom.xml delete mode 100644 CICMMetadata/samples/pspumd.xml diff --git a/.~lock.Benchmarks.ods# b/.~lock.Benchmarks.ods# deleted file mode 100644 index 195cfb6..0000000 --- a/.~lock.Benchmarks.ods# +++ /dev/null @@ -1 +0,0 @@ -,claunia,serket,22.09.2021 05:20,file:///home/claunia/.config/libreoffice/4; \ No newline at end of file diff --git a/Aaru.Checksums/Aaru.Checksums.csproj b/Aaru.Checksums/Aaru.Checksums.csproj deleted file mode 100644 index 9871672..0000000 --- a/Aaru.Checksums/Aaru.Checksums.csproj +++ /dev/null @@ -1,132 +0,0 @@ - - - - Debug - AnyCPU - 2.0 - {CC48B324-A532-4A45-87A6-6F91F7141E8D} - Library - Aaru.Checksums - Aaru.Checksums - $(Version) - false - true - 6.0.0-alpha6 - Claunia.com - Copyright © 2011-2021 Natalia Portillo - Aaru Data Preservation Suite - Aaru.Checksums - $(Version) - net6 - 10 - C# implementation of CRC16, CRC32, CRC64, Fletcher, MD5, SHA1, SHA2 and SpamSum. - https://github.com/aaru-dps/ - LGPL-2.1-only - https://github.com/aaru-dps/Aaru.Checksums - true - en-US - true - true - snupkg - Natalia Portillo <claunia@claunia.com> - true - - - $(Version)+{chash:8} - true - true - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - - - full - true - bin\Release - prompt - 4 - false - - - - - - - - - - - - - - - - - - - - - - - - - - {F8BDF57B-1571-4CD0-84B3-B422088D359A} - Aaru.Helpers - - - {CCAA7AFE-C094-4D82-A66D-630DE8A3F545} - Aaru.Console - - - - - LICENSE.LGPL - - - LICENSE - - - - - - - - - - - - - - - - - - - - - /Library/Frameworks/Mono.framework/Versions/Current/lib/mono - /usr/lib/mono - /usr/local/lib/mono - - $(BaseFrameworkPathOverrideForMono)/4.0-api - $(BaseFrameworkPathOverrideForMono)/4.5-api - $(BaseFrameworkPathOverrideForMono)/4.5.1-api - $(BaseFrameworkPathOverrideForMono)/4.5.2-api - $(BaseFrameworkPathOverrideForMono)/4.6-api - $(BaseFrameworkPathOverrideForMono)/4.6.1-api - $(BaseFrameworkPathOverrideForMono)/4.6.2-api - $(BaseFrameworkPathOverrideForMono)/4.7-api - $(BaseFrameworkPathOverrideForMono)/4.7.1-api - true - - $(FrameworkPathOverride)/Facades;$(AssemblySearchPaths) - - \ No newline at end of file diff --git a/Aaru.Checksums/CDChecksums.cs b/Aaru.Checksums/CDChecksums.cs deleted file mode 100644 index cf57599..0000000 --- a/Aaru.Checksums/CDChecksums.cs +++ /dev/null @@ -1,648 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CDChecksums.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Implements CD checksums. -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program.If not, see. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ECC algorithm from ECM(c) 2002-2011 Neill Corlett -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using Aaru.Console; -using Aaru.Helpers; - -namespace Aaru.Checksums -{ - /// Implements ReedSolomon and CRC32 algorithms as used by CD-ROM - public static class CdChecksums - { - static byte[] _eccFTable; - static byte[] _eccBTable; - static uint[] _edcTable; - - /// Checks the EDC and ECC of a CD sector - /// CD sector - /// - /// true if all checks were correct, false if any of them weren't, and null if none of them - /// are present. - /// - public static bool? CheckCdSector(byte[] buffer) => CheckCdSector(buffer, out _, out _, out _); - - /// Checks the EDC and ECC of a CD sector - /// CD sector - /// - /// true if ECC P is correct, false if it isn't, and null if there is no ECC - /// P in sector. - /// - /// - /// true if ECC Q is correct, false if it isn't, and null if there is no ECC - /// Q in sector. - /// - /// - /// true if EDC is correct, false if it isn't, and null if there is no EDC in - /// sector. - /// - /// - /// true if all checks were correct, false if any of them weren't, and null if none of them - /// are present. - /// - public static bool? CheckCdSector(byte[] buffer, out bool? correctEccP, out bool? correctEccQ, - out bool? correctEdc) - { - correctEccP = null; - correctEccQ = null; - correctEdc = null; - - switch(buffer.Length) - { - case 2448: - { - byte[] subchannel = new byte[96]; - byte[] channel = new byte[2352]; - - Array.Copy(buffer, 0, channel, 0, 2352); - Array.Copy(buffer, 2352, subchannel, 0, 96); - - bool? channelStatus = - CheckCdSectorChannel(channel, out correctEccP, out correctEccQ, out correctEdc); - - bool? subchannelStatus = CheckCdSectorSubChannel(subchannel); - bool? status = null; - - if(channelStatus == false || - subchannelStatus == false) - status = false; - - switch(channelStatus) - { - case null when subchannelStatus == true: - status = true; - - break; - case true when subchannelStatus == null: - status = true; - - break; - } - - return status; - } - - case 2352: return CheckCdSectorChannel(buffer, out correctEccP, out correctEccQ, out correctEdc); - default: return null; - } - } - - static void EccInit() - { - _eccFTable = new byte[256]; - _eccBTable = new byte[256]; - _edcTable = new uint[256]; - - for(uint i = 0; i < 256; i++) - { - uint edc = i; - uint j = (uint)((i << 1) ^ ((i & 0x80) == 0x80 ? 0x11D : 0)); - _eccFTable[i] = (byte)j; - _eccBTable[i ^ j] = (byte)i; - - for(j = 0; j < 8; j++) - edc = (edc >> 1) ^ ((edc & 1) > 0 ? 0xD8018001 : 0); - - _edcTable[i] = edc; - } - } - - static bool CheckEcc(byte[] address, byte[] data, uint majorCount, uint minorCount, uint majorMult, - uint minorInc, byte[] ecc) - { - uint size = majorCount * minorCount; - uint major; - - for(major = 0; major < majorCount; major++) - { - uint index = ((major >> 1) * majorMult) + (major & 1); - byte eccA = 0; - byte eccB = 0; - uint minor; - - for(minor = 0; minor < minorCount; minor++) - { - byte temp = index < 4 ? address[index] : data[index - 4]; - index += minorInc; - - if(index >= size) - index -= size; - - eccA ^= temp; - eccB ^= temp; - eccA = _eccFTable[eccA]; - } - - eccA = _eccBTable[_eccFTable[eccA] ^ eccB]; - - if(ecc[major] != eccA || - ecc[major + majorCount] != (eccA ^ eccB)) - return false; - } - - return true; - } - - static bool? CheckCdSectorChannel(byte[] channel, out bool? correctEccP, out bool? correctEccQ, - out bool? correctEdc) - { - EccInit(); - - correctEccP = null; - correctEccQ = null; - correctEdc = null; - - if(channel[0x000] != 0x00 || - channel[0x001] != 0xFF || - channel[0x002] != 0xFF || - channel[0x003] != 0xFF || - channel[0x004] != 0xFF || - channel[0x005] != 0xFF || - channel[0x006] != 0xFF || - channel[0x007] != 0xFF || - channel[0x008] != 0xFF || - channel[0x009] != 0xFF || - channel[0x00A] != 0xFF || - channel[0x00B] != 0x00) - return null; - - //AaruConsole.DebugWriteLine("CD checksums", "Data sector, address {0:X2}:{1:X2}:{2:X2}", channel[0x00C], - // channel[0x00D], channel[0x00E]); - - if((channel[0x00F] & 0x03) == 0x00) // mode (1 byte) - { - //AaruConsole.DebugWriteLine("CD checksums", "Mode 0 sector at address {0:X2}:{1:X2}:{2:X2}", - // channel[0x00C], channel[0x00D], channel[0x00E]); - for(int i = 0x010; i < 0x930; i++) - if(channel[i] != 0x00) - { - AaruConsole.DebugWriteLine("CD checksums", - "Mode 0 sector with error at address: {0:X2}:{1:X2}:{2:X2}", - channel[0x00C], channel[0x00D], channel[0x00E]); - - return false; - } - - return true; - } - - if((channel[0x00F] & 0x03) == 0x01) // mode (1 byte) - { - //AaruConsole.DebugWriteLine("CD checksums", "Mode 1 sector at address {0:X2}:{1:X2}:{2:X2}", - // channel[0x00C], channel[0x00D], channel[0x00E]); - - if(channel[0x814] != 0x00 || // reserved (8 bytes) - channel[0x815] != 0x00 || - channel[0x816] != 0x00 || - channel[0x817] != 0x00 || - channel[0x818] != 0x00 || - channel[0x819] != 0x00 || - channel[0x81A] != 0x00 || - channel[0x81B] != 0x00) - { - AaruConsole.DebugWriteLine("CD checksums", - "Mode 1 sector with data in reserved bytes at address: {0:X2}:{1:X2}:{2:X2}", - channel[0x00C], channel[0x00D], channel[0x00E]); - - return false; - } - - byte[] address = new byte[4]; - byte[] data = new byte[2060]; - byte[] data2 = new byte[2232]; - byte[] eccP = new byte[172]; - byte[] eccQ = new byte[104]; - - Array.Copy(channel, 0x0C, address, 0, 4); - Array.Copy(channel, 0x10, data, 0, 2060); - Array.Copy(channel, 0x10, data2, 0, 2232); - Array.Copy(channel, 0x81C, eccP, 0, 172); - Array.Copy(channel, 0x8C8, eccQ, 0, 104); - - bool failedEccP = !CheckEcc(address, data, 86, 24, 2, 86, eccP); - bool failedEccQ = !CheckEcc(address, data2, 52, 43, 86, 88, eccQ); - - correctEccP = !failedEccP; - correctEccQ = !failedEccQ; - - if(failedEccP) - AaruConsole.DebugWriteLine("CD checksums", - "Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC P check", - channel[0x00C], channel[0x00D], channel[0x00E]); - - if(failedEccQ) - AaruConsole.DebugWriteLine("CD checksums", - "Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC Q check", - channel[0x00C], channel[0x00D], channel[0x00E]); - - uint storedEdc = BitConverter.ToUInt32(channel, 0x810); - uint calculatedEdc = ComputeEdc(0, channel, 0x810); - - correctEdc = calculatedEdc == storedEdc; - - if(calculatedEdc == storedEdc) - return !failedEccP && !failedEccQ; - - AaruConsole.DebugWriteLine("CD checksums", - "Mode 1 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}", - channel[0x00C], channel[0x00D], channel[0x00E], calculatedEdc, storedEdc); - - return false; - } - - if((channel[0x00F] & 0x03) == 0x02) // mode (1 byte) - { - //AaruConsole.DebugWriteLine("CD checksums", "Mode 2 sector at address {0:X2}:{1:X2}:{2:X2}", - // channel[0x00C], channel[0x00D], channel[0x00E]); - byte[] mode2Sector = new byte[channel.Length - 0x10]; - Array.Copy(channel, 0x10, mode2Sector, 0, mode2Sector.Length); - - if((channel[0x012] & 0x20) == 0x20) // mode 2 form 2 - { - if(channel[0x010] != channel[0x014] || - channel[0x011] != channel[0x015] || - channel[0x012] != channel[0x016] || - channel[0x013] != channel[0x017]) - AaruConsole.DebugWriteLine("CD checksums", - "Subheader copies differ in mode 2 form 2 sector at address: {0:X2}:{1:X2}:{2:X2}", - channel[0x00C], channel[0x00D], channel[0x00E]); - - uint storedEdc = BitConverter.ToUInt32(mode2Sector, 0x91C); - - // No CRC stored! - if(storedEdc == 0x00000000) - return true; - - uint calculatedEdc = ComputeEdc(0, mode2Sector, 0x91C); - - correctEdc = calculatedEdc == storedEdc || storedEdc == 0; - - if(calculatedEdc == storedEdc || - storedEdc == 0x00000000) - return true; - - AaruConsole.DebugWriteLine("CD checksums", - "Mode 2 form 2 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}", - channel[0x00C], channel[0x00D], channel[0x00E], calculatedEdc, - storedEdc); - - return false; - } - else - { - if(channel[0x010] != channel[0x014] || - channel[0x011] != channel[0x015] || - channel[0x012] != channel[0x016] || - channel[0x013] != channel[0x017]) - AaruConsole.DebugWriteLine("CD checksums", - "Subheader copies differ in mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}", - channel[0x00C], channel[0x00D], channel[0x00E]); - - byte[] address = new byte[4]; - byte[] eccP = new byte[172]; - byte[] eccQ = new byte[104]; - - Array.Copy(mode2Sector, 0x80C, eccP, 0, 172); - Array.Copy(mode2Sector, 0x8B8, eccQ, 0, 104); - - bool failedEccP = !CheckEcc(address, mode2Sector, 86, 24, 2, 86, eccP); - bool failedEccQ = !CheckEcc(address, mode2Sector, 52, 43, 86, 88, eccQ); - - correctEccP = !failedEccP; - correctEccQ = !failedEccQ; - - if(failedEccP) - AaruConsole.DebugWriteLine("CD checksums", - "Mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC P check", - channel[0x00C], channel[0x00D], channel[0x00E]); - - if(failedEccQ) - AaruConsole.DebugWriteLine("CD checksums", - "Mode 2 form 1 sector at address: {0:X2}:{1:X2}:{2:X2}, fails ECC Q check", - channel[0x00C], channel[0x00D], channel[0x00E]); - - uint storedEdc = BitConverter.ToUInt32(mode2Sector, 0x808); - uint calculatedEdc = ComputeEdc(0, mode2Sector, 0x808); - - correctEdc = calculatedEdc == storedEdc; - - if(calculatedEdc == storedEdc) - return !failedEccP && !failedEccQ; - - AaruConsole.DebugWriteLine("CD checksums", - "Mode 2 sector at address: {0:X2}:{1:X2}:{2:X2}, got CRC 0x{3:X8} expected 0x{4:X8}", - channel[0x00C], channel[0x00D], channel[0x00E], calculatedEdc, - storedEdc); - - return false; - } - } - - AaruConsole.DebugWriteLine("CD checksums", "Unknown mode {0} sector at address: {1:X2}:{2:X2}:{3:X2}", - channel[0x00F], channel[0x00C], channel[0x00D], channel[0x00E]); - - return null; - } - - static uint ComputeEdc(uint edc, IReadOnlyList src, int size) - { - int pos = 0; - - for(; size > 0; size--) - edc = (edc >> 8) ^ _edcTable[(edc ^ src[pos++]) & 0xFF]; - - return edc; - } - - static bool? CheckCdSectorSubChannel(IReadOnlyList subchannel) - { - bool? status = true; - byte[] qSubChannel = new byte[12]; - byte[] cdTextPack1 = new byte[18]; - byte[] cdTextPack2 = new byte[18]; - byte[] cdTextPack3 = new byte[18]; - byte[] cdTextPack4 = new byte[18]; - byte[] cdSubRwPack1 = new byte[24]; - byte[] cdSubRwPack2 = new byte[24]; - byte[] cdSubRwPack3 = new byte[24]; - byte[] cdSubRwPack4 = new byte[24]; - - int i = 0; - - for(int j = 0; j < 12; j++) - qSubChannel[j] = 0; - - for(int j = 0; j < 18; j++) - { - cdTextPack1[j] = 0; - cdTextPack2[j] = 0; - cdTextPack3[j] = 0; - cdTextPack4[j] = 0; - } - - for(int j = 0; j < 24; j++) - { - cdSubRwPack1[j] = 0; - cdSubRwPack2[j] = 0; - cdSubRwPack3[j] = 0; - cdSubRwPack4[j] = 0; - } - - for(int j = 0; j < 12; j++) - { - qSubChannel[j] = (byte)(qSubChannel[j] | ((subchannel[i++] & 0x40) << 1)); - qSubChannel[j] = (byte)(qSubChannel[j] | (subchannel[i++] & 0x40)); - qSubChannel[j] = (byte)(qSubChannel[j] | ((subchannel[i++] & 0x40) >> 1)); - qSubChannel[j] = (byte)(qSubChannel[j] | ((subchannel[i++] & 0x40) >> 2)); - qSubChannel[j] = (byte)(qSubChannel[j] | ((subchannel[i++] & 0x40) >> 3)); - qSubChannel[j] = (byte)(qSubChannel[j] | ((subchannel[i++] & 0x40) >> 4)); - qSubChannel[j] = (byte)(qSubChannel[j] | ((subchannel[i++] & 0x40) >> 5)); - qSubChannel[j] = (byte)(qSubChannel[j] | ((subchannel[i++] & 0x40) >> 6)); - } - - i = 0; - - for(int j = 0; j < 18; j++) - { - cdTextPack1[j] = (byte)(cdTextPack1[j] | ((subchannel[i++] & 0x3F) << 2)); - - if(j < 17) - cdTextPack1[j] = (byte)(cdTextPack1[j++] | ((subchannel[i] & 0xC0) >> 4)); - - cdTextPack1[j] = (byte)(cdTextPack1[j] | ((subchannel[i++] & 0x0F) << 4)); - - if(j < 17) - cdTextPack1[j] = (byte)(cdTextPack1[j++] | ((subchannel[i] & 0x3C) >> 2)); - - cdTextPack1[j] = (byte)(cdTextPack1[j] | ((subchannel[i++] & 0x03) << 6)); - - cdTextPack1[j] = (byte)(cdTextPack1[j] | (subchannel[i++] & 0x3F)); - } - - for(int j = 0; j < 18; j++) - { - cdTextPack2[j] = (byte)(cdTextPack2[j] | ((subchannel[i++] & 0x3F) << 2)); - - if(j < 17) - cdTextPack2[j] = (byte)(cdTextPack2[j++] | ((subchannel[i] & 0xC0) >> 4)); - - cdTextPack2[j] = (byte)(cdTextPack2[j] | ((subchannel[i++] & 0x0F) << 4)); - - if(j < 17) - cdTextPack2[j] = (byte)(cdTextPack2[j++] | ((subchannel[i] & 0x3C) >> 2)); - - cdTextPack2[j] = (byte)(cdTextPack2[j] | ((subchannel[i++] & 0x03) << 6)); - - cdTextPack2[j] = (byte)(cdTextPack2[j] | (subchannel[i++] & 0x3F)); - } - - for(int j = 0; j < 18; j++) - { - cdTextPack3[j] = (byte)(cdTextPack3[j] | ((subchannel[i++] & 0x3F) << 2)); - - if(j < 17) - cdTextPack3[j] = (byte)(cdTextPack3[j++] | ((subchannel[i] & 0xC0) >> 4)); - - cdTextPack3[j] = (byte)(cdTextPack3[j] | ((subchannel[i++] & 0x0F) << 4)); - - if(j < 17) - cdTextPack3[j] = (byte)(cdTextPack3[j++] | ((subchannel[i] & 0x3C) >> 2)); - - cdTextPack3[j] = (byte)(cdTextPack3[j] | ((subchannel[i++] & 0x03) << 6)); - - cdTextPack3[j] = (byte)(cdTextPack3[j] | (subchannel[i++] & 0x3F)); - } - - for(int j = 0; j < 18; j++) - { - cdTextPack4[j] = (byte)(cdTextPack4[j] | ((subchannel[i++] & 0x3F) << 2)); - - if(j < 17) - cdTextPack4[j] = (byte)(cdTextPack4[j++] | ((subchannel[i] & 0xC0) >> 4)); - - cdTextPack4[j] = (byte)(cdTextPack4[j] | ((subchannel[i++] & 0x0F) << 4)); - - if(j < 17) - cdTextPack4[j] = (byte)(cdTextPack4[j++] | ((subchannel[i] & 0x3C) >> 2)); - - cdTextPack4[j] = (byte)(cdTextPack4[j] | ((subchannel[i++] & 0x03) << 6)); - - cdTextPack4[j] = (byte)(cdTextPack4[j] | (subchannel[i++] & 0x3F)); - } - - i = 0; - - for(int j = 0; j < 24; j++) - cdSubRwPack1[j] = (byte)(subchannel[i++] & 0x3F); - - for(int j = 0; j < 24; j++) - cdSubRwPack2[j] = (byte)(subchannel[i++] & 0x3F); - - for(int j = 0; j < 24; j++) - cdSubRwPack3[j] = (byte)(subchannel[i++] & 0x3F); - - for(int j = 0; j < 24; j++) - cdSubRwPack4[j] = (byte)(subchannel[i++] & 0x3F); - - switch(cdSubRwPack1[0]) - { - case 0x00: - AaruConsole.DebugWriteLine("CD checksums", "Detected Zero Pack in subchannel"); - - break; - case 0x08: - AaruConsole.DebugWriteLine("CD checksums", "Detected Line Graphics Pack in subchannel"); - - break; - case 0x09: - AaruConsole.DebugWriteLine("CD checksums", "Detected CD+G Pack in subchannel"); - - break; - case 0x0A: - AaruConsole.DebugWriteLine("CD checksums", "Detected CD+EG Pack in subchannel"); - - break; - case 0x14: - AaruConsole.DebugWriteLine("CD checksums", "Detected CD-TEXT Pack in subchannel"); - - break; - case 0x18: - AaruConsole.DebugWriteLine("CD checksums", "Detected CD+MIDI Pack in subchannel"); - - break; - case 0x38: - AaruConsole.DebugWriteLine("CD checksums", "Detected User Pack in subchannel"); - - break; - default: - AaruConsole.DebugWriteLine("CD checksums", - "Detected unknown Pack type in subchannel: mode {0}, item {1}", - Convert.ToString(cdSubRwPack1[0] & 0x38, 2), - Convert.ToString(cdSubRwPack1[0] & 0x07, 2)); - - break; - } - - ushort qSubChannelCrc = BigEndianBitConverter.ToUInt16(qSubChannel, 10); - byte[] qSubChannelForCrc = new byte[10]; - Array.Copy(qSubChannel, 0, qSubChannelForCrc, 0, 10); - ushort calculatedQcrc = CRC16CCITTContext.Calculate(qSubChannelForCrc); - - if(qSubChannelCrc != calculatedQcrc) - { - AaruConsole.DebugWriteLine("CD checksums", "Q subchannel CRC 0x{0:X4}, expected 0x{1:X4}", - calculatedQcrc, qSubChannelCrc); - - status = false; - } - - if((cdTextPack1[0] & 0x80) == 0x80) - { - ushort cdTextPack1Crc = BigEndianBitConverter.ToUInt16(cdTextPack1, 16); - byte[] cdTextPack1ForCrc = new byte[16]; - Array.Copy(cdTextPack1, 0, cdTextPack1ForCrc, 0, 16); - ushort calculatedCdtp1Crc = CRC16CCITTContext.Calculate(cdTextPack1ForCrc); - - if(cdTextPack1Crc != calculatedCdtp1Crc && - cdTextPack1Crc != 0) - { - AaruConsole.DebugWriteLine("CD checksums", "CD-Text Pack 1 CRC 0x{0:X4}, expected 0x{1:X4}", - cdTextPack1Crc, calculatedCdtp1Crc); - - status = false; - } - } - - if((cdTextPack2[0] & 0x80) == 0x80) - { - ushort cdTextPack2Crc = BigEndianBitConverter.ToUInt16(cdTextPack2, 16); - byte[] cdTextPack2ForCrc = new byte[16]; - Array.Copy(cdTextPack2, 0, cdTextPack2ForCrc, 0, 16); - ushort calculatedCdtp2Crc = CRC16CCITTContext.Calculate(cdTextPack2ForCrc); - - AaruConsole.DebugWriteLine("CD checksums", "Cyclic CDTP2 0x{0:X4}, Calc CDTP2 0x{1:X4}", cdTextPack2Crc, - calculatedCdtp2Crc); - - if(cdTextPack2Crc != calculatedCdtp2Crc && - cdTextPack2Crc != 0) - { - AaruConsole.DebugWriteLine("CD checksums", "CD-Text Pack 2 CRC 0x{0:X4}, expected 0x{1:X4}", - cdTextPack2Crc, calculatedCdtp2Crc); - - status = false; - } - } - - if((cdTextPack3[0] & 0x80) == 0x80) - { - ushort cdTextPack3Crc = BigEndianBitConverter.ToUInt16(cdTextPack3, 16); - byte[] cdTextPack3ForCrc = new byte[16]; - Array.Copy(cdTextPack3, 0, cdTextPack3ForCrc, 0, 16); - ushort calculatedCdtp3Crc = CRC16CCITTContext.Calculate(cdTextPack3ForCrc); - - AaruConsole.DebugWriteLine("CD checksums", "Cyclic CDTP3 0x{0:X4}, Calc CDTP3 0x{1:X4}", cdTextPack3Crc, - calculatedCdtp3Crc); - - if(cdTextPack3Crc != calculatedCdtp3Crc && - cdTextPack3Crc != 0) - { - AaruConsole.DebugWriteLine("CD checksums", "CD-Text Pack 3 CRC 0x{0:X4}, expected 0x{1:X4}", - cdTextPack3Crc, calculatedCdtp3Crc); - - status = false; - } - } - - if((cdTextPack4[0] & 0x80) != 0x80) - return status; - - ushort cdTextPack4Crc = BigEndianBitConverter.ToUInt16(cdTextPack4, 16); - byte[] cdTextPack4ForCrc = new byte[16]; - Array.Copy(cdTextPack4, 0, cdTextPack4ForCrc, 0, 16); - ushort calculatedCdtp4Crc = CRC16CCITTContext.Calculate(cdTextPack4ForCrc); - - AaruConsole.DebugWriteLine("CD checksums", "Cyclic CDTP4 0x{0:X4}, Calc CDTP4 0x{1:X4}", cdTextPack4Crc, - calculatedCdtp4Crc); - - if(cdTextPack4Crc == calculatedCdtp4Crc || - cdTextPack4Crc == 0) - return status; - - AaruConsole.DebugWriteLine("CD checksums", "CD-Text Pack 4 CRC 0x{0:X4}, expected 0x{1:X4}", cdTextPack4Crc, - calculatedCdtp4Crc); - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.Checksums/CRC16CCITTContext.cs b/Aaru.Checksums/CRC16CCITTContext.cs deleted file mode 100644 index 486ba28..0000000 --- a/Aaru.Checksums/CRC16CCITTContext.cs +++ /dev/null @@ -1,103 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CRC16CCITTContext.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Implements a CRC16 algorithm with the CCITT polynomial. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.Checksums -{ - /// - /// Implements the CRC16 algorithm with CCITT polynomial and seed - public sealed class CRC16CCITTContext : Crc16Context - { - /// CCITT CRC16 polynomial - public const ushort CRC16_CCITT_POLY = 0x8408; - /// CCITT CRC16 seed - public const ushort CRC16_CCITT_SEED = 0x0000; - static readonly ushort[] _ccittCrc16Table = - { - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, - 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, - 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, - 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, - 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, - 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, - 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, - 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, - 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, - 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, - 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, - 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, - 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, - 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, - 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, - 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, - 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, - 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, - 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, - 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 - }; - - /// Initializes an instance of the CRC16 with CCITT polynomial and seed. - /// - public CRC16CCITTContext() : base(CRC16_CCITT_POLY, CRC16_CCITT_SEED, _ccittCrc16Table, true) {} - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - File(filename, out byte[] hash); - - return hash; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) => - File(filename, out hash, CRC16_CCITT_POLY, CRC16_CCITT_SEED, _ccittCrc16Table, true); - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) => - Data(data, len, out hash, CRC16_CCITT_POLY, CRC16_CCITT_SEED, _ccittCrc16Table, true); - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - - /// Calculates the CCITT CRC16 of the specified buffer with the specified parameters - /// Buffer - public static ushort Calculate(byte[] buffer) => - Calculate(buffer, CRC16_CCITT_POLY, CRC16_CCITT_SEED, _ccittCrc16Table, true); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/CRC16IBMContext.cs b/Aaru.Checksums/CRC16IBMContext.cs deleted file mode 100644 index 82ae6f5..0000000 --- a/Aaru.Checksums/CRC16IBMContext.cs +++ /dev/null @@ -1,102 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CRC16IBMContext.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Implements a CRC16 algorithm with the IBM polynomial. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.Checksums -{ - /// - /// Implements the CRC16 algorithm with IBM polynomial and seed - public sealed class CRC16IBMContext : Crc16Context - { - const ushort CRC16_IBM_POLY = 0xA001; - const ushort CRC16_IBM_SEED = 0x0000; - - static readonly ushort[] _ibmCrc16Table = - { - 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, - 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, - 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, - 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, - 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, - 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, - 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, - 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, - 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, - 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, - 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, - 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, - 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, - 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, - 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, - 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, - 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, - 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, - 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, - 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 - }; - - /// Initializes an instance of the CRC16 with IBM polynomial and seed. - /// - public CRC16IBMContext() : base(CRC16_IBM_POLY, CRC16_IBM_SEED, _ibmCrc16Table, false) {} - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - File(filename, out byte[] hash); - - return hash; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) => - File(filename, out hash, CRC16_IBM_POLY, CRC16_IBM_SEED, _ibmCrc16Table, false); - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) => - Data(data, len, out hash, CRC16_IBM_POLY, CRC16_IBM_SEED, _ibmCrc16Table, false); - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - - /// Calculates the IBM CRC16 of the specified buffer with the specified parameters - /// Buffer - public static ushort Calculate(byte[] buffer) => - Calculate(buffer, CRC16_IBM_POLY, CRC16_IBM_SEED, _ibmCrc16Table, false); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/CRC32Context.cs b/Aaru.Checksums/CRC32Context.cs deleted file mode 100644 index 988d622..0000000 --- a/Aaru.Checksums/CRC32Context.cs +++ /dev/null @@ -1,234 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CRC32Context.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Implements a CRC32 algorithm. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.IO; -using System.Text; -using Aaru.CommonTypes.Interfaces; -using Aaru.Helpers; - -namespace Aaru.Checksums -{ - /// - /// Implements a CRC32 algorithm - public sealed class Crc32Context : IChecksum - { - const uint CRC32_ISO_POLY = 0xEDB88320; - const uint CRC32_ISO_SEED = 0xFFFFFFFF; - - readonly uint _finalSeed; - readonly uint[] _table; - uint _hashInt; - - /// Initializes the CRC32 table and seed as CRC32-ISO - public Crc32Context() - { - _hashInt = CRC32_ISO_SEED; - _finalSeed = CRC32_ISO_SEED; - - _table = new uint[256]; - - for(int i = 0; i < 256; i++) - { - uint entry = (uint)i; - - for(int j = 0; j < 8; j++) - if((entry & 1) == 1) - entry = (entry >> 1) ^ CRC32_ISO_POLY; - else - entry >>= 1; - - _table[i] = entry; - } - } - - /// Initializes the CRC32 table with a custom polynomial and seed - public Crc32Context(uint polynomial, uint seed) - { - _hashInt = seed; - _finalSeed = seed; - - _table = new uint[256]; - - for(int i = 0; i < 256; i++) - { - uint entry = (uint)i; - - for(int j = 0; j < 8; j++) - if((entry & 1) == 1) - entry = (entry >> 1) ^ polynomial; - else - entry >>= 1; - - _table[i] = entry; - } - } - - /// - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - public void Update(byte[] data, uint len) - { - for(int i = 0; i < len; i++) - _hashInt = (_hashInt >> 8) ^ _table[data[i] ^ (_hashInt & 0xff)]; - } - - /// - /// Updates the hash with data. - /// Data buffer. - public void Update(byte[] data) => Update(data, (uint)data.Length); - - /// - /// Returns a byte array of the hash value. - public byte[] Final() => BigEndianBitConverter.GetBytes(_hashInt ^ _finalSeed); - - /// - /// Returns a hexadecimal representation of the hash value. - public string End() - { - var crc32Output = new StringBuilder(); - - for(int i = 0; i < BigEndianBitConverter.GetBytes(_hashInt ^ _finalSeed).Length; i++) - crc32Output.Append(BigEndianBitConverter.GetBytes(_hashInt ^ _finalSeed)[i].ToString("x2")); - - return crc32Output.ToString(); - } - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - File(filename, out byte[] hash); - - return hash; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) => - File(filename, out hash, CRC32_ISO_POLY, CRC32_ISO_SEED); - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - /// CRC polynomial - /// CRC seed - public static string File(string filename, out byte[] hash, uint polynomial, uint seed) - { - var fileStream = new FileStream(filename, FileMode.Open); - - uint localHashInt = seed; - - uint[] localTable = new uint[256]; - - for(int i = 0; i < 256; i++) - { - uint entry = (uint)i; - - for(int j = 0; j < 8; j++) - if((entry & 1) == 1) - entry = (entry >> 1) ^ polynomial; - else - entry >>= 1; - - localTable[i] = entry; - } - - for(int i = 0; i < fileStream.Length; i++) - localHashInt = (localHashInt >> 8) ^ localTable[fileStream.ReadByte() ^ (localHashInt & 0xff)]; - - localHashInt ^= seed; - hash = BigEndianBitConverter.GetBytes(localHashInt); - - var crc32Output = new StringBuilder(); - - foreach(byte h in hash) - crc32Output.Append(h.ToString("x2")); - - fileStream.Close(); - - return crc32Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) => - Data(data, len, out hash, CRC32_ISO_POLY, CRC32_ISO_SEED); - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - /// CRC polynomial - /// CRC seed - public static string Data(byte[] data, uint len, out byte[] hash, uint polynomial, uint seed) - { - uint localHashInt = seed; - - uint[] localTable = new uint[256]; - - for(int i = 0; i < 256; i++) - { - uint entry = (uint)i; - - for(int j = 0; j < 8; j++) - if((entry & 1) == 1) - entry = (entry >> 1) ^ polynomial; - else - entry >>= 1; - - localTable[i] = entry; - } - - for(int i = 0; i < len; i++) - localHashInt = (localHashInt >> 8) ^ localTable[data[i] ^ (localHashInt & 0xff)]; - - localHashInt ^= seed; - hash = BigEndianBitConverter.GetBytes(localHashInt); - - var crc32Output = new StringBuilder(); - - foreach(byte h in hash) - crc32Output.Append(h.ToString("x2")); - - return crc32Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/CRC64Context.cs b/Aaru.Checksums/CRC64Context.cs deleted file mode 100644 index 0dc8732..0000000 --- a/Aaru.Checksums/CRC64Context.cs +++ /dev/null @@ -1,238 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CRC64Context.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Implements a CRC64 algorithm. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.IO; -using System.Text; -using Aaru.CommonTypes.Interfaces; -using Aaru.Helpers; - -namespace Aaru.Checksums -{ - /// - /// Implements a CRC64 algorithm - public sealed class Crc64Context : IChecksum - { - /// ECMA CRC64 polynomial - public const ulong CRC64_ECMA_POLY = 0xC96C5795D7870F42; - /// ECMA CRC64 seed - public const ulong CRC64_ECMA_SEED = 0xFFFFFFFFFFFFFFFF; - - readonly ulong _finalSeed; - readonly ulong[] _table; - ulong _hashInt; - - /// Initializes the CRC64 table and seed as CRC64-ECMA - public Crc64Context() - { - _hashInt = CRC64_ECMA_SEED; - - _table = new ulong[256]; - - for(int i = 0; i < 256; i++) - { - ulong entry = (ulong)i; - - for(int j = 0; j < 8; j++) - if((entry & 1) == 1) - entry = (entry >> 1) ^ CRC64_ECMA_POLY; - else - entry >>= 1; - - _table[i] = entry; - } - - _finalSeed = CRC64_ECMA_SEED; - } - - /// Initializes the CRC16 table with a custom polynomial and seed - public Crc64Context(ulong polynomial, ulong seed) - { - _hashInt = seed; - - _table = new ulong[256]; - - for(int i = 0; i < 256; i++) - { - ulong entry = (ulong)i; - - for(int j = 0; j < 8; j++) - if((entry & 1) == 1) - entry = (entry >> 1) ^ polynomial; - else - entry >>= 1; - - _table[i] = entry; - } - - _finalSeed = seed; - } - - /// - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - public void Update(byte[] data, uint len) - { - for(int i = 0; i < len; i++) - _hashInt = (_hashInt >> 8) ^ _table[data[i] ^ (_hashInt & 0xff)]; - } - - /// - /// Updates the hash with data. - /// Data buffer. - public void Update(byte[] data) => Update(data, (uint)data.Length); - - /// - /// Returns a byte array of the hash value. - public byte[] Final() => BigEndianBitConverter.GetBytes(_hashInt ^= _finalSeed); - - /// - /// Returns a hexadecimal representation of the hash value. - public string End() - { - var crc64Output = new StringBuilder(); - - for(int i = 0; i < BigEndianBitConverter.GetBytes(_hashInt ^= _finalSeed).Length; i++) - crc64Output.Append(BigEndianBitConverter.GetBytes(_hashInt ^= _finalSeed)[i].ToString("x2")); - - return crc64Output.ToString(); - } - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - File(filename, out byte[] localHash); - - return localHash; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) => - File(filename, out hash, CRC64_ECMA_POLY, CRC64_ECMA_SEED); - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - /// CRC polynomial - /// CRC seed - public static string File(string filename, out byte[] hash, ulong polynomial, ulong seed) - { - var fileStream = new FileStream(filename, FileMode.Open); - - ulong localHashInt = seed; - - ulong[] localTable = new ulong[256]; - - for(int i = 0; i < 256; i++) - { - ulong entry = (ulong)i; - - for(int j = 0; j < 8; j++) - if((entry & 1) == 1) - entry = (entry >> 1) ^ polynomial; - else - entry >>= 1; - - localTable[i] = entry; - } - - for(int i = 0; i < fileStream.Length; i++) - localHashInt = (localHashInt >> 8) ^ localTable[(ulong)fileStream.ReadByte() ^ (localHashInt & 0xffL)]; - - localHashInt ^= seed; - hash = BigEndianBitConverter.GetBytes(localHashInt); - - var crc64Output = new StringBuilder(); - - foreach(byte h in hash) - crc64Output.Append(h.ToString("x2")); - - fileStream.Close(); - - return crc64Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) => - Data(data, len, out hash, CRC64_ECMA_POLY, CRC64_ECMA_SEED); - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - /// CRC polynomial - /// CRC seed - public static string Data(byte[] data, uint len, out byte[] hash, ulong polynomial, ulong seed) - { - ulong localHashInt = seed; - - ulong[] localTable = new ulong[256]; - - for(int i = 0; i < 256; i++) - { - ulong entry = (ulong)i; - - for(int j = 0; j < 8; j++) - if((entry & 1) == 1) - entry = (entry >> 1) ^ polynomial; - else - entry >>= 1; - - localTable[i] = entry; - } - - for(int i = 0; i < len; i++) - localHashInt = (localHashInt >> 8) ^ localTable[data[i] ^ (localHashInt & 0xff)]; - - localHashInt ^= seed; - hash = BigEndianBitConverter.GetBytes(localHashInt); - - var crc64Output = new StringBuilder(); - - foreach(byte h in hash) - crc64Output.Append(h.ToString("x2")); - - return crc64Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/MD5Context.cs b/Aaru.Checksums/MD5Context.cs deleted file mode 100644 index 7bb2285..0000000 --- a/Aaru.Checksums/MD5Context.cs +++ /dev/null @@ -1,133 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : MD5Context.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Wraps up .NET MD5 implementation to a Init(), Update(), Final() context. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.IO; -using System.Security.Cryptography; -using System.Text; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.Checksums -{ - /// Wraps up .NET MD5 implementation to a Init(), Update(), Final() context. - public sealed class Md5Context : IChecksum - { - readonly MD5 _provider; - - /// Initializes the MD5 hash provider - public Md5Context() => _provider = MD5.Create(); - - /// - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - public void Update(byte[] data, uint len) => _provider.TransformBlock(data, 0, (int)len, data, 0); - - /// - /// Updates the hash with data. - /// Data buffer. - public void Update(byte[] data) => Update(data, (uint)data.Length); - - /// - /// Returns a byte array of the hash value. - public byte[] Final() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - - return _provider.Hash; - } - - /// - /// Returns a hexadecimal representation of the hash value. - public string End() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - var md5Output = new StringBuilder(); - - foreach(byte h in _provider.Hash) - md5Output.Append(h.ToString("x2")); - - return md5Output.ToString(); - } - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - var localMd5Provider = MD5.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - byte[] result = localMd5Provider.ComputeHash(fileStream); - fileStream.Close(); - - return result; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) - { - var localMd5Provider = MD5.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - hash = localMd5Provider.ComputeHash(fileStream); - var md5Output = new StringBuilder(); - - foreach(byte h in hash) - md5Output.Append(h.ToString("x2")); - - fileStream.Close(); - - return md5Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) - { - var localMd5Provider = MD5.Create(); - hash = localMd5Provider.ComputeHash(data, 0, (int)len); - var md5Output = new StringBuilder(); - - foreach(byte h in hash) - md5Output.Append(h.ToString("x2")); - - return md5Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/ReedSolomon.cs b/Aaru.Checksums/ReedSolomon.cs deleted file mode 100644 index 537e04e..0000000 --- a/Aaru.Checksums/ReedSolomon.cs +++ /dev/null @@ -1,730 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ReedSolomon.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Calculates a Reed-Solomon. -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// Copyright (C) 1996 Phil Karn -// Copyright (C) 1995 Robert Morelos-Zaragoza -// Copyright (C) 1995 Hari Thirumoorthy -// ****************************************************************************/ - -/* - * Reed-Solomon coding and decoding - * Phil Karn (karn at ka9q.ampr.org) September 1996 - * - * This file is derived from the program "new_rs_erasures.c" by Robert - * Morelos-Zaragoza (robert at spectra.eng.hawaii.edu) and Hari Thirumoorthy - * (harit at spectra.eng.hawaii.edu), Aug 1995 - * - * I've made changes to improve performance, clean up the code and make it - * easier to follow. Data is now passed to the encoding and decoding functions - * through arguments rather than in global arrays. The decode function returns - * the number of corrected symbols, or -1 if the word is uncorrectable. - * - * This code supports a symbol size from 2 bits up to 16 bits, - * implying a block size of 3 2-bit symbols (6 bits) up to 65535 - * 16-bit symbols (1,048,560 bits). The code parameters are set in rs.h. - * - * Note that if symbols larger than 8 bits are used, the type of each - * data array element switches from unsigned char to unsigned int. The - * caller must ensure that elements larger than the symbol range are - * not passed to the encoder or decoder. - * - */ - -using System; -using Aaru.Console; - -namespace Aaru.Checksums -{ - /// Implements the Reed-Solomon algorithm - public class ReedSolomon - { - /// Alpha exponent for the first root of the generator polynomial - const int B0 = 1; - /// No legal value in index form represents zero, so we need a special value for this purpose - int _a0; - /// index->polynomial form conversion table - int[] _alphaTo; - /// Generator polynomial g(x) Degree of g(x) = 2*TT has roots @**B0, @**(B0+1), ... ,@^(B0+2*TT-1) - int[] _gg; - /// Polynomial->index form conversion table - int[] _indexOf; - bool _initialized; - int _mm, _kk, _nn; - /// - /// Primitive polynomials - see Lin & Costello, Error Control Coding Appendix A, and Lee & Messerschmitt, Digital - /// Communication p. 453. - /// - int[] _pp; - - /// Initializes the Reed-Solomon with RS(n,k) with GF(2^m) - public void InitRs(int n, int k, int m) - { - switch(m) - { - case 2: - _pp = new[] - { - 1, 1, 1 - }; - - break; - case 3: - _pp = new[] - { - 1, 1, 0, 1 - }; - - break; - case 4: - _pp = new[] - { - 1, 1, 0, 0, 1 - }; - - break; - case 5: - _pp = new[] - { - 1, 0, 1, 0, 0, 1 - }; - - break; - case 6: - _pp = new[] - { - 1, 1, 0, 0, 0, 0, 1 - }; - - break; - case 7: - _pp = new[] - { - 1, 0, 0, 1, 0, 0, 0, 1 - }; - - break; - case 8: - _pp = new[] - { - 1, 0, 1, 1, 1, 0, 0, 0, 1 - }; - - break; - case 9: - _pp = new[] - { - 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 - }; - - break; - case 10: - _pp = new[] - { - 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 - }; - - break; - case 11: - _pp = new[] - { - 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 - }; - - break; - case 12: - _pp = new[] - { - 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 - }; - - break; - case 13: - _pp = new[] - { - 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 - }; - - break; - case 14: - _pp = new[] - { - 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 - }; - - break; - case 15: - _pp = new[] - { - 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 - }; - - break; - case 16: - _pp = new[] - { - 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 - }; - - break; - default: throw new ArgumentOutOfRangeException(nameof(m), "m must be between 2 and 16 inclusive"); - } - - _mm = m; - _kk = k; - _nn = n; - _a0 = n; - _alphaTo = new int[n + 1]; - _indexOf = new int[n + 1]; - - _gg = new int[_nn - _kk + 1]; - - generate_gf(); - gen_poly(); - - _initialized = true; - } - - int Modnn(int x) - { - while(x >= _nn) - { - x -= _nn; - x = (x >> _mm) + (x & _nn); - } - - return x; - } - - static int Min(int a, int b) => a < b ? a : b; - - static void Clear(ref int[] a, int n) - { - int ci; - - for(ci = n - 1; ci >= 0; ci--) - a[ci] = 0; - } - - static void Copy(ref int[] a, ref int[] b, int n) - { - int ci; - - for(ci = n - 1; ci >= 0; ci--) - a[ci] = b[ci]; - } - - static void Copydown(ref int[] a, ref int[] b, int n) - { - int ci; - - for(ci = n - 1; ci >= 0; ci--) - a[ci] = b[ci]; - } - - /* generate GF(2**m) from the irreducible polynomial p(X) in p[0]..p[m] - lookup tables: index->polynomial form alpha_to[] contains j=alpha**i; - polynomial form -> index form index_of[j=alpha**i] = i - alpha=2 is the primitive element of GF(2**m) - HARI's COMMENT: (4/13/94) alpha_to[] can be used as follows: - Let @ represent the primitive element commonly called "alpha" that - is the root of the primitive polynomial p(x). Then in GF(2^m), for any - 0 <= i <= 2^m-2, - @^i = a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1) - where the binary vector (a(0),a(1),a(2),...,a(m-1)) is the representation - of the integer "alpha_to[i]" with a(0) being the LSB and a(m-1) the MSB. Thus for - example the polynomial representation of @^5 would be given by the binary - representation of the integer "alpha_to[5]". - Similarily, index_of[] can be used as follows: - As above, let @ represent the primitive element of GF(2^m) that is - the root of the primitive polynomial p(x). In order to find the power - of @ (alpha) that has the polynomial representation - a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1) - we consider the integer "i" whose binary representation with a(0) being LSB - and a(m-1) MSB is (a(0),a(1),...,a(m-1)) and locate the entry - "index_of[i]". Now, @^index_of[i] is that element whose polynomial - representation is (a(0),a(1),a(2),...,a(m-1)). - NOTE: - The element alpha_to[2^m-1] = 0 always signifying that the - representation of "@^infinity" = 0 is (0,0,0,...,0). - Similarily, the element index_of[0] = A0 always signifying - that the power of alpha which has the polynomial representation - (0,0,...,0) is "infinity". - - */ - void generate_gf() - { - int i; - - int mask = 1; - _alphaTo[_mm] = 0; - - for(i = 0; i < _mm; i++) - { - _alphaTo[i] = mask; - _indexOf[_alphaTo[i]] = i; - - /* If Pp[i] == 1 then, term @^i occurs in poly-repr of @^MM */ - if(_pp[i] != 0) - _alphaTo[_mm] ^= mask; /* Bit-wise EXOR operation */ - - mask <<= 1; /* single left-shift */ - } - - _indexOf[_alphaTo[_mm]] = _mm; - /* - * Have obtained poly-repr of @^MM. Poly-repr of @^(i+1) is given by - * poly-repr of @^i shifted left one-bit and accounting for any @^MM - * term that may occur when poly-repr of @^i is shifted. - */ - mask >>= 1; - - for(i = _mm + 1; i < _nn; i++) - { - if(_alphaTo[i - 1] >= mask) - _alphaTo[i] = _alphaTo[_mm] ^ ((_alphaTo[i - 1] ^ mask) << 1); - else - _alphaTo[i] = _alphaTo[i - 1] << 1; - - _indexOf[_alphaTo[i]] = i; - } - - _indexOf[0] = _a0; - _alphaTo[_nn] = 0; - } - - /* - * Obtain the generator polynomial of the TT-error correcting, length - * NN=(2**MM -1) Reed Solomon code from the product of (X+@**(B0+i)), i = 0, - * ... ,(2*TT-1) - * - * Examples: - * - * If B0 = 1, TT = 1. deg(g(x)) = 2*TT = 2. - * g(x) = (x+@) (x+@**2) - * - * If B0 = 0, TT = 2. deg(g(x)) = 2*TT = 4. - * g(x) = (x+1) (x+@) (x+@**2) (x+@**3) - */ - void gen_poly() - { - int i; - - _gg[0] = _alphaTo[B0]; - _gg[1] = 1; /* g(x) = (X+@**B0) initially */ - - for(i = 2; i <= _nn - _kk; i++) - { - _gg[i] = 1; - - /* - * Below multiply (Gg[0]+Gg[1]*x + ... +Gg[i]x^i) by - * (@**(B0+i-1) + x) - */ - for(int j = i - 1; j > 0; j--) - if(_gg[j] != 0) - _gg[j] = _gg[j - 1] ^ _alphaTo[Modnn(_indexOf[_gg[j]] + B0 + i - 1)]; - else - _gg[j] = _gg[j - 1]; - - /* Gg[0] can never be zero */ - _gg[0] = _alphaTo[Modnn(_indexOf[_gg[0]] + B0 + i - 1)]; - } - - /* convert Gg[] to index form for quicker encoding */ - for(i = 0; i <= _nn - _kk; i++) - _gg[i] = _indexOf[_gg[i]]; - } - - /* - * take the string of symbols in data[i], i=0..(k-1) and encode - * systematically to produce NN-KK parity symbols in bb[0]..bb[NN-KK-1] data[] - * is input and bb[] is output in polynomial form. Encoding is done by using - * a feedback shift register with appropriate connections specified by the - * elements of Gg[], which was generated above. Codeword is c(X) = - * data(X)*X**(NN-KK)+ b(X) - */ - /// Takes the symbols in data to output parity in bb. - /// Returns -1 if an illegal symbol is found. - /// Data symbols. - /// Outs parity symbols. - public int encode_rs(int[] data, out int[] bb) - { - if(!_initialized) - throw new UnauthorizedAccessException("Trying to calculate RS without initializing!"); - - int i; - bb = new int[_nn - _kk]; - - Clear(ref bb, _nn - _kk); - - for(i = _kk - 1; i >= 0; i--) - { - if(_mm != 8) - if(data[i] > _nn) - return -1; /* Illegal symbol */ - - int feedback = _indexOf[data[i] ^ bb[_nn - _kk - 1]]; - - if(feedback != _a0) - { - /* feedback term is non-zero */ - for(int j = _nn - _kk - 1; j > 0; j--) - if(_gg[j] != _a0) - bb[j] = bb[j - 1] ^ _alphaTo[Modnn(_gg[j] + feedback)]; - else - bb[j] = bb[j - 1]; - - bb[0] = _alphaTo[Modnn(_gg[0] + feedback)]; - } - else - { - /* feedback term is zero. encoder becomes a - * single-byte shifter */ - for(int j = _nn - _kk - 1; j > 0; j--) - bb[j] = bb[j - 1]; - - bb[0] = 0; - } - } - - return 0; - } - - /* - * Performs ERRORS+ERASURES decoding of RS codes. If decoding is successful, - * writes the codeword into data[] itself. Otherwise data[] is unaltered. - * - * Return number of symbols corrected, or -1 if codeword is illegal - * or uncorrectable. - * - * First "no_eras" erasures are declared by the calling program. Then, the - * maximum # of errors correctable is t_after_eras = floor((NN-KK-no_eras)/2). - * If the number of channel errors is not greater than "t_after_eras" the - * transmitted codeword will be recovered. Details of algorithm can be found - * in R. Blahut's "Theory ... of Error-Correcting Codes". - */ - /// Decodes the RS. If decoding is successful outputs corrected data symbols. - /// Returns corrected symbols, -1 if illegal or uncorrectable - /// Data symbols. - /// Position of erasures. - /// Number of erasures. - public int eras_dec_rs(ref int[] data, out int[] erasPos, int noEras) - { - if(!_initialized) - throw new UnauthorizedAccessException("Trying to calculate RS without initializing!"); - - erasPos = new int[_nn - _kk]; - int i, j; - int q, tmp; - int[] recd = new int[_nn]; - int[] lambda = new int[_nn - _kk + 1]; /* Err+Eras Locator poly */ - int[] s = new int[_nn - _kk + 1]; /* syndrome poly */ - int[] b = new int[_nn - _kk + 1]; - int[] t = new int[_nn - _kk + 1]; - int[] omega = new int[_nn - _kk + 1]; - int[] root = new int[_nn - _kk]; - int[] reg = new int[_nn - _kk + 1]; - int[] loc = new int[_nn - _kk]; - int count; - - /* data[] is in polynomial form, copy and convert to index form */ - for(i = _nn - 1; i >= 0; i--) - { - if(_mm != 8) - if(data[i] > _nn) - return -1; /* Illegal symbol */ - - recd[i] = _indexOf[data[i]]; - } - - /* first form the syndromes; i.e., evaluate recd(x) at roots of g(x) - * namely @**(B0+i), i = 0, ... ,(NN-KK-1) - */ - int synError = 0; - - for(i = 1; i <= _nn - _kk; i++) - { - tmp = 0; - - for(j = 0; j < _nn; j++) - if(recd[j] != _a0) /* recd[j] in index form */ - tmp ^= _alphaTo[Modnn(recd[j] + ((B0 + i - 1) * j))]; - - synError |= tmp; /* set flag if non-zero syndrome => - * error */ - - /* store syndrome in index form */ - s[i] = _indexOf[tmp]; - } - - if(synError == 0) - return 0; - - Clear(ref lambda, _nn - _kk); - lambda[0] = 1; - - if(noEras > 0) - { - /* Init lambda to be the erasure locator polynomial */ - lambda[1] = _alphaTo[erasPos[0]]; - - for(i = 1; i < noEras; i++) - { - int u = erasPos[i]; - - for(j = i + 1; j > 0; j--) - { - tmp = _indexOf[lambda[j - 1]]; - - if(tmp != _a0) - lambda[j] ^= _alphaTo[Modnn(u + tmp)]; - } - } - - #if DEBUG - /* find roots of the erasure location polynomial */ - for(i = 1; i <= noEras; i++) - reg[i] = _indexOf[lambda[i]]; - - count = 0; - - for(i = 1; i <= _nn; i++) - { - q = 1; - - for(j = 1; j <= noEras; j++) - if(reg[j] != _a0) - { - reg[j] = Modnn(reg[j] + j); - q ^= _alphaTo[reg[j]]; - } - - if(q != 0) - continue; - - /* store root and error location - * number indices - */ - root[count] = i; - loc[count] = _nn - i; - count++; - } - - if(count != noEras) - { - AaruConsole.DebugWriteLine("Reed Solomon", "\n lambda(x) is WRONG\n"); - - return -1; - } - - AaruConsole.DebugWriteLine("Reed Solomon", - "\n Erasure positions as determined by roots of Eras Loc Poly:\n"); - - for(i = 0; i < count; i++) - AaruConsole.DebugWriteLine("Reed Solomon", "{0} ", loc[i]); - - AaruConsole.DebugWriteLine("Reed Solomon", "\n"); - #endif - } - - for(i = 0; i < _nn - _kk + 1; i++) - b[i] = _indexOf[lambda[i]]; - - /* - * Begin Berlekamp-Massey algorithm to determine error+erasure - * locator polynomial - */ - int r = noEras; - int el = noEras; - - while(++r <= _nn - _kk) - { - /* r is the step number */ - /* Compute discrepancy at the r-th step in poly-form */ - int discrR = 0; - - for(i = 0; i < r; i++) - if(lambda[i] != 0 && - s[r - i] != _a0) - discrR ^= _alphaTo[Modnn(_indexOf[lambda[i]] + s[r - i])]; - - discrR = _indexOf[discrR]; /* Index form */ - - if(discrR == _a0) - { - /* 2 lines below: B(x) <-- x*B(x) */ - Copydown(ref b, ref b, _nn - _kk); - b[0] = _a0; - } - else - { - /* 7 lines below: T(x) <-- lambda(x) - discr_r*x*b(x) */ - t[0] = lambda[0]; - - for(i = 0; i < _nn - _kk; i++) - if(b[i] != _a0) - t[i + 1] = lambda[i + 1] ^ _alphaTo[Modnn(discrR + b[i])]; - else - t[i + 1] = lambda[i + 1]; - - if(2 * el <= r + noEras - 1) - { - el = r + noEras - el; - - /* - * 2 lines below: B(x) <-- inv(discr_r) * - * lambda(x) - */ - for(i = 0; i <= _nn - _kk; i++) - b[i] = lambda[i] == 0 ? _a0 : Modnn(_indexOf[lambda[i]] - discrR + _nn); - } - else - { - /* 2 lines below: B(x) <-- x*B(x) */ - Copydown(ref b, ref b, _nn - _kk); - b[0] = _a0; - } - - Copy(ref lambda, ref t, _nn - _kk + 1); - } - } - - /* Convert lambda to index form and compute deg(lambda(x)) */ - int degLambda = 0; - - for(i = 0; i < _nn - _kk + 1; i++) - { - lambda[i] = _indexOf[lambda[i]]; - - if(lambda[i] != _a0) - degLambda = i; - } - - /* - * Find roots of the error+erasure locator polynomial. By Chien - * Search - */ - int temp = reg[0]; - Copy(ref reg, ref lambda, _nn - _kk); - reg[0] = temp; - count = 0; /* Number of roots of lambda(x) */ - - for(i = 1; i <= _nn; i++) - { - q = 1; - - for(j = degLambda; j > 0; j--) - if(reg[j] != _a0) - { - reg[j] = Modnn(reg[j] + j); - q ^= _alphaTo[reg[j]]; - } - - if(q != 0) - continue; - - /* store root (index-form) and error location number */ - root[count] = i; - loc[count] = _nn - i; - count++; - } - - #if DEBUG - AaruConsole.DebugWriteLine("Reed Solomon", "\n Final error positions:\t"); - - for(i = 0; i < count; i++) - AaruConsole.DebugWriteLine("Reed Solomon", "{0} ", loc[i]); - - AaruConsole.DebugWriteLine("Reed Solomon", "\n"); - #endif - - if(degLambda != count) - return -1; - - /* - * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo - * x**(NN-KK)). in index form. Also find deg(omega). - */ - int degOmega = 0; - - for(i = 0; i < _nn - _kk; i++) - { - tmp = 0; - j = degLambda < i ? degLambda : i; - - for(; j >= 0; j--) - if(s[i + 1 - j] != _a0 && - lambda[j] != _a0) - tmp ^= _alphaTo[Modnn(s[i + 1 - j] + lambda[j])]; - - if(tmp != 0) - degOmega = i; - - omega[i] = _indexOf[tmp]; - } - - omega[_nn - _kk] = _a0; - - /* - * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = - * inv(X(l))**(B0-1) and den = lambda_pr(inv(X(l))) all in poly-form - */ - for(j = count - 1; j >= 0; j--) - { - int num1 = 0; - - for(i = degOmega; i >= 0; i--) - if(omega[i] != _a0) - num1 ^= _alphaTo[Modnn(omega[i] + (i * root[j]))]; - - int num2 = _alphaTo[Modnn((root[j] * (B0 - 1)) + _nn)]; - int den = 0; - - /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */ - for(i = Min(degLambda, _nn - _kk - 1) & ~1; i >= 0; i -= 2) - if(lambda[i + 1] != _a0) - den ^= _alphaTo[Modnn(lambda[i + 1] + (i * root[j]))]; - - if(den == 0) - { - AaruConsole.DebugWriteLine("Reed Solomon", "\n ERROR: denominator = 0\n"); - - return -1; - } - - /* Apply error to data */ - if(num1 != 0) - data[loc[j]] ^= _alphaTo[Modnn(_indexOf[num1] + _indexOf[num2] + _nn - _indexOf[den])]; - } - - return count; - } - } -} \ No newline at end of file diff --git a/Aaru.Checksums/Register.cs b/Aaru.Checksums/Register.cs deleted file mode 100644 index c56e12a..0000000 --- a/Aaru.Checksums/Register.cs +++ /dev/null @@ -1,82 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Register.cs -// Author(s) : Natalia Portillo -// -// Component : Core algorithms. -// -// --[ Description ] ---------------------------------------------------------- -// -// Registers all plugins in this assembly. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.Checksums -{ - /// - public sealed class Register : IPluginRegister - { - /// - public List GetAllChecksumPlugins() => Assembly.GetExecutingAssembly().GetTypes(). - Where(t => t.GetInterfaces().Contains(typeof(IChecksum))). - Where(t => t.IsClass).ToList(); - - /// - public List GetAllFilesystemPlugins() => null; - - /// - public List GetAllFilterPlugins() => null; - - /// - public List GetAllFloppyImagePlugins() => null; - - /// - public List GetAllMediaImagePlugins() => null; - - /// - public List GetAllPartitionPlugins() => null; - - /// - public List GetAllReadOnlyFilesystemPlugins() => null; - - /// - public List GetAllWritableFloppyImagePlugins() => null; - - /// - public List GetAllWritableImagePlugins() => null; - - /// - public List GetAllArchivePlugins() => null; - } -} \ No newline at end of file diff --git a/Aaru.Checksums/SHA1Context.cs b/Aaru.Checksums/SHA1Context.cs deleted file mode 100644 index daf24a5..0000000 --- a/Aaru.Checksums/SHA1Context.cs +++ /dev/null @@ -1,134 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : SHA1Context.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Wraps up .NET SHA1 implementation to a Init(), Update(), Final() context. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.IO; -using System.Security.Cryptography; -using System.Text; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.Checksums -{ - /// - /// Wraps up .NET SHA1 implementation to a Init(), Update(), Final() context. - public sealed class Sha1Context : IChecksum - { - readonly SHA1 _provider; - - /// Initializes the SHA1 hash provider - public Sha1Context() => _provider = SHA1.Create(); - - /// - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - public void Update(byte[] data, uint len) => _provider.TransformBlock(data, 0, (int)len, data, 0); - - /// - /// Updates the hash with data. - /// Data buffer. - public void Update(byte[] data) => Update(data, (uint)data.Length); - - /// - /// Returns a byte array of the hash value. - public byte[] Final() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - - return _provider.Hash; - } - - /// - /// Returns a hexadecimal representation of the hash value. - public string End() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - var sha1Output = new StringBuilder(); - - foreach(byte h in _provider.Hash) - sha1Output.Append(h.ToString("x2")); - - return sha1Output.ToString(); - } - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - var localSha1Provider = SHA1.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - byte[] result = localSha1Provider.ComputeHash(fileStream); - fileStream.Close(); - - return result; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) - { - var localSha1Provider = SHA1.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - hash = localSha1Provider.ComputeHash(fileStream); - var sha1Output = new StringBuilder(); - - foreach(byte h in hash) - sha1Output.Append(h.ToString("x2")); - - fileStream.Close(); - - return sha1Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) - { - var localSha1Provider = SHA1.Create(); - hash = localSha1Provider.ComputeHash(data, 0, (int)len); - var sha1Output = new StringBuilder(); - - foreach(byte h in hash) - sha1Output.Append(h.ToString("x2")); - - return sha1Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/SHA256Context.cs b/Aaru.Checksums/SHA256Context.cs deleted file mode 100644 index 3dbf10d..0000000 --- a/Aaru.Checksums/SHA256Context.cs +++ /dev/null @@ -1,134 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : SHA256Context.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Wraps up .NET SHA256 implementation to a Init(), Update(), Final() context. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.IO; -using System.Security.Cryptography; -using System.Text; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.Checksums -{ - /// - /// Wraps up .NET SHA256 implementation to a Init(), Update(), Final() context. - public sealed class Sha256Context : IChecksum - { - readonly SHA256 _provider; - - /// Initializes the SHA256 hash provider - public Sha256Context() => _provider = SHA256.Create(); - - /// - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - public void Update(byte[] data, uint len) => _provider.TransformBlock(data, 0, (int)len, data, 0); - - /// - /// Updates the hash with data. - /// Data buffer. - public void Update(byte[] data) => Update(data, (uint)data.Length); - - /// - /// Returns a byte array of the hash value. - public byte[] Final() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - - return _provider.Hash; - } - - /// - /// Returns a hexadecimal representation of the hash value. - public string End() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - var sha256Output = new StringBuilder(); - - foreach(byte h in _provider.Hash) - sha256Output.Append(h.ToString("x2")); - - return sha256Output.ToString(); - } - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - var localSha256Provider = SHA256.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - byte[] result = localSha256Provider.ComputeHash(fileStream); - fileStream.Close(); - - return result; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) - { - var localSha256Provider = SHA256.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - hash = localSha256Provider.ComputeHash(fileStream); - var sha256Output = new StringBuilder(); - - foreach(byte h in hash) - sha256Output.Append(h.ToString("x2")); - - fileStream.Close(); - - return sha256Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) - { - var localSha256Provider = SHA256.Create(); - hash = localSha256Provider.ComputeHash(data, 0, (int)len); - var sha256Output = new StringBuilder(); - - foreach(byte h in hash) - sha256Output.Append(h.ToString("x2")); - - return sha256Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/SHA384Context.cs b/Aaru.Checksums/SHA384Context.cs deleted file mode 100644 index 4c5d522..0000000 --- a/Aaru.Checksums/SHA384Context.cs +++ /dev/null @@ -1,134 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : SHA384Context.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Wraps up .NET SHA384 implementation to a Init(), Update(), Final() context. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.IO; -using System.Security.Cryptography; -using System.Text; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.Checksums -{ - /// - /// Wraps up .NET SHA384 implementation to a Init(), Update(), Final() context. - public sealed class Sha384Context : IChecksum - { - readonly SHA384 _provider; - - /// Initializes the SHA384 hash provider - public Sha384Context() => _provider = SHA384.Create(); - - /// - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - public void Update(byte[] data, uint len) => _provider.TransformBlock(data, 0, (int)len, data, 0); - - /// - /// Updates the hash with data. - /// Data buffer. - public void Update(byte[] data) => Update(data, (uint)data.Length); - - /// - /// Returns a byte array of the hash value. - public byte[] Final() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - - return _provider.Hash; - } - - /// - /// Returns a hexadecimal representation of the hash value. - public string End() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - var sha384Output = new StringBuilder(); - - foreach(byte h in _provider.Hash) - sha384Output.Append(h.ToString("x2")); - - return sha384Output.ToString(); - } - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - var localSha384Provider = SHA384.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - byte[] result = localSha384Provider.ComputeHash(fileStream); - fileStream.Close(); - - return result; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) - { - var localSha384Provider = SHA384.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - hash = localSha384Provider.ComputeHash(fileStream); - var sha384Output = new StringBuilder(); - - foreach(byte h in hash) - sha384Output.Append(h.ToString("x2")); - - fileStream.Close(); - - return sha384Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) - { - var localSha384Provider = SHA384.Create(); - hash = localSha384Provider.ComputeHash(data, 0, (int)len); - var sha384Output = new StringBuilder(); - - foreach(byte h in hash) - sha384Output.Append(h.ToString("x2")); - - return sha384Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/SHA512Context.cs b/Aaru.Checksums/SHA512Context.cs deleted file mode 100644 index bd4d4b9..0000000 --- a/Aaru.Checksums/SHA512Context.cs +++ /dev/null @@ -1,134 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : SHA512Context.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Wraps up .NET SHA512 implementation to a Init(), Update(), Final() context. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.IO; -using System.Security.Cryptography; -using System.Text; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.Checksums -{ - /// - /// Wraps up .NET SHA512 implementation to a Init(), Update(), Final() context. - public sealed class Sha512Context : IChecksum - { - readonly SHA512 _provider; - - /// Initializes the SHA512 hash provider - public Sha512Context() => _provider = SHA512.Create(); - - /// - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - public void Update(byte[] data, uint len) => _provider.TransformBlock(data, 0, (int)len, data, 0); - - /// - /// Updates the hash with data. - /// Data buffer. - public void Update(byte[] data) => Update(data, (uint)data.Length); - - /// - /// Returns a byte array of the hash value. - public byte[] Final() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - - return _provider.Hash; - } - - /// - /// Returns a hexadecimal representation of the hash value. - public string End() - { - _provider.TransformFinalBlock(Array.Empty(), 0, 0); - var sha512Output = new StringBuilder(); - - foreach(byte h in _provider.Hash) - sha512Output.Append(h.ToString("x2")); - - return sha512Output.ToString(); - } - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) - { - var localSha512Provider = SHA512.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - byte[] result = localSha512Provider.ComputeHash(fileStream); - fileStream.Close(); - - return result; - } - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) - { - var localSha512Provider = SHA512.Create(); - var fileStream = new FileStream(filename, FileMode.Open); - hash = localSha512Provider.ComputeHash(fileStream); - var sha512Output = new StringBuilder(); - - foreach(byte h in hash) - sha512Output.Append(h.ToString("x2")); - - fileStream.Close(); - - return sha512Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// Byte array of the hash value. - public static string Data(byte[] data, uint len, out byte[] hash) - { - var localSha512Provider = SHA512.Create(); - hash = localSha512Provider.ComputeHash(data, 0, (int)len); - var sha512Output = new StringBuilder(); - - foreach(byte h in hash) - sha512Output.Append(h.ToString("x2")); - - return sha512Output.ToString(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Byte array of the hash value. - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - } -} \ No newline at end of file diff --git a/Aaru.Checksums/SpamSumContext.cs b/Aaru.Checksums/SpamSumContext.cs deleted file mode 100644 index 16af49b..0000000 --- a/Aaru.Checksums/SpamSumContext.cs +++ /dev/null @@ -1,527 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : SpamSumContext.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Implements the SpamSum fuzzy hashing algorithm. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -// Based on ssdeep -// Copyright (C) 2002 Andrew Tridgell -// Copyright (C) 2006 ManTech International Corporation -// Copyright (C) 2013 Helmut Grohne -// -// Earlier versions of this code were named fuzzy.c and can be found at: -// http://www.samba.org/ftp/unpacked/junkcode/spamsum/ -// http://ssdeep.sf.net/ - -using System; -using System.Runtime.CompilerServices; -using System.Text; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.Checksums -{ - /// - /// Implements the SpamSum fuzzy hashing algorithm. - public sealed class SpamSumContext : IChecksum - { - const uint ROLLING_WINDOW = 7; - const uint MIN_BLOCKSIZE = 3; - const uint HASH_PRIME = 0x01000193; - const uint HASH_INIT = 0x28021967; - const uint NUM_BLOCKHASHES = 31; - const uint SPAMSUM_LENGTH = 64; - const uint FUZZY_MAX_RESULT = (2 * SPAMSUM_LENGTH) + 20; - - //"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - readonly byte[] _b64 = - { - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, - 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, - 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, - 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2B, 0x2F - }; - - FuzzyState _self; - - /// Initializes the SpamSum structures - public SpamSumContext() - { - _self = new FuzzyState - { - Bh = new BlockhashContext[NUM_BLOCKHASHES] - }; - - for(int i = 0; i < NUM_BLOCKHASHES; i++) - _self.Bh[i].Digest = new byte[SPAMSUM_LENGTH]; - - _self.Bhstart = 0; - _self.Bhend = 1; - _self.Bh[0].H = HASH_INIT; - _self.Bh[0].Halfh = HASH_INIT; - _self.Bh[0].Digest[0] = 0; - _self.Bh[0].Halfdigest = 0; - _self.Bh[0].Dlen = 0; - _self.TotalSize = 0; - roll_init(); - } - - /// - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - public void Update(byte[] data, uint len) - { - _self.TotalSize += len; - - for(int i = 0; i < len; i++) - fuzzy_engine_step(data[i]); - } - - /// - /// Updates the hash with data. - /// Data buffer. - public void Update(byte[] data) => Update(data, (uint)data.Length); - - /// - /// Returns a byte array of the hash value. - public byte[] Final() => throw new NotImplementedException("SpamSum does not have a binary representation."); - - /// - /// Returns a base64 representation of the hash value. - public string End() - { - FuzzyDigest(out byte[] result); - - return CToString(result); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void roll_init() => _self.Roll = new RollState - { - Window = new byte[ROLLING_WINDOW] - }; - - /* - * a rolling hash, based on the Adler checksum. By using a rolling hash - * we can perform auto resynchronisation after inserts/deletes - - * internally, h1 is the sum of the bytes in the window and h2 - * is the sum of the bytes times the index - - * h3 is a shift/xor based rolling hash, and is mostly needed to ensure that - * we can cope with large blocksize values - */ - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void roll_hash(byte c) - { - _self.Roll.H2 -= _self.Roll.H1; - _self.Roll.H2 += ROLLING_WINDOW * c; - - _self.Roll.H1 += c; - _self.Roll.H1 -= _self.Roll.Window[_self.Roll.N % ROLLING_WINDOW]; - - _self.Roll.Window[_self.Roll.N % ROLLING_WINDOW] = c; - _self.Roll.N++; - - /* The original spamsum AND'ed this value with 0xFFFFFFFF which - * in theory should have no effect. This AND has been removed - * for performance (jk) */ - _self.Roll.H3 <<= 5; - _self.Roll.H3 ^= c; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - uint roll_sum() => _self.Roll.H1 + _self.Roll.H2 + _self.Roll.H3; - - /* A simple non-rolling hash, based on the FNV hash. */ - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static uint sum_hash(byte c, uint h) => (h * HASH_PRIME) ^ c; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static uint SSDEEP_BS(uint index) => MIN_BLOCKSIZE << (int)index; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void fuzzy_try_fork_blockhash() - { - if(_self.Bhend >= NUM_BLOCKHASHES) - return; - - if(_self.Bhend == 0) // assert - throw new Exception("Assertion failed"); - - uint obh = _self.Bhend - 1; - uint nbh = _self.Bhend; - _self.Bh[nbh].H = _self.Bh[obh].H; - _self.Bh[nbh].Halfh = _self.Bh[obh].Halfh; - _self.Bh[nbh].Digest[0] = 0; - _self.Bh[nbh].Halfdigest = 0; - _self.Bh[nbh].Dlen = 0; - ++_self.Bhend; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void fuzzy_try_reduce_blockhash() - { - if(_self.Bhstart >= _self.Bhend) - throw new Exception("Assertion failed"); - - if(_self.Bhend - _self.Bhstart < 2) - /* Need at least two working hashes. */ - return; - - if((ulong)SSDEEP_BS(_self.Bhstart) * SPAMSUM_LENGTH >= _self.TotalSize) - /* Initial blocksize estimate would select this or a smaller - * blocksize. */ - return; - - if(_self.Bh[_self.Bhstart + 1].Dlen < SPAMSUM_LENGTH / 2) - /* Estimate adjustment would select this blocksize. */ - return; - - /* At this point we are clearly no longer interested in the - * start_blocksize. Get rid of it. */ - ++_self.Bhstart; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void fuzzy_engine_step(byte c) - { - uint i; - /* At each character we update the rolling hash and the normal hashes. - * When the rolling hash hits a reset value then we emit a normal hash - * as a element of the signature and reset the normal hash. */ - roll_hash(c); - ulong h = roll_sum(); - - for(i = _self.Bhstart; i < _self.Bhend; ++i) - { - _self.Bh[i].H = sum_hash(c, _self.Bh[i].H); - _self.Bh[i].Halfh = sum_hash(c, _self.Bh[i].Halfh); - } - - for(i = _self.Bhstart; i < _self.Bhend; ++i) - { - /* With growing blocksize almost no runs fail the next test. */ - if(h % SSDEEP_BS(i) != SSDEEP_BS(i) - 1) - /* Once this condition is false for one bs, it is - * automatically false for all further bs. I.e. if - * h === -1 (mod 2*bs) then h === -1 (mod bs). */ - break; - - /* We have hit a reset point. We now emit hashes which are - * based on all characters in the piece of the message between - * the last reset point and this one */ - if(0 == _self.Bh[i].Dlen) - fuzzy_try_fork_blockhash(); - - _self.Bh[i].Digest[_self.Bh[i].Dlen] = _b64[_self.Bh[i].H % 64]; - _self.Bh[i].Halfdigest = _b64[_self.Bh[i].Halfh % 64]; - - if(_self.Bh[i].Dlen < SPAMSUM_LENGTH - 1) - { - /* We can have a problem with the tail overflowing. The - * easiest way to cope with this is to only reset the - * normal hash if we have room for more characters in - * our signature. This has the effect of combining the - * last few pieces of the message into a single piece - * */ - _self.Bh[i].Digest[++_self.Bh[i].Dlen] = 0; - _self.Bh[i].H = HASH_INIT; - - if(_self.Bh[i].Dlen >= SPAMSUM_LENGTH / 2) - continue; - - _self.Bh[i].Halfh = HASH_INIT; - _self.Bh[i].Halfdigest = 0; - } - else - fuzzy_try_reduce_blockhash(); - } - } - - // CLAUNIA: Flags seems to never be used in ssdeep, so I just removed it for code simplicity - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void FuzzyDigest(out byte[] result) - { - var sb = new StringBuilder(); - uint bi = _self.Bhstart; - uint h = roll_sum(); - int remain = (int)(FUZZY_MAX_RESULT - 1); /* Exclude terminating '\0'. */ - result = new byte[FUZZY_MAX_RESULT]; - - /* Verify that our elimination was not overeager. */ - if(!(bi == 0 || (ulong)SSDEEP_BS(bi) / 2 * SPAMSUM_LENGTH < _self.TotalSize)) - throw new Exception("Assertion failed"); - - int resultOff; - - /* Initial blocksize guess. */ - while((ulong)SSDEEP_BS(bi) * SPAMSUM_LENGTH < _self.TotalSize) - { - ++bi; - - if(bi >= NUM_BLOCKHASHES) - throw new OverflowException("The input exceeds data types."); - } - - /* Adapt blocksize guess to actual digest length. */ - while(bi >= _self.Bhend) - --bi; - - while(bi > _self.Bhstart && - _self.Bh[bi].Dlen < SPAMSUM_LENGTH / 2) - --bi; - - if(bi > 0 && - _self.Bh[bi].Dlen < SPAMSUM_LENGTH / 2) - throw new Exception("Assertion failed"); - - sb.AppendFormat("{0}:", SSDEEP_BS(bi)); - int i = Encoding.ASCII.GetBytes(sb.ToString()).Length; - - if(i <= 0) - /* Maybe snprintf has set errno here? */ - throw new OverflowException("The input exceeds data types."); - - if(i >= remain) - throw new Exception("Assertion failed"); - - remain -= i; - - Array.Copy(Encoding.ASCII.GetBytes(sb.ToString()), 0, result, 0, i); - - resultOff = i; - - i = (int)_self.Bh[bi].Dlen; - - if(i > remain) - throw new Exception("Assertion failed"); - - Array.Copy(_self.Bh[bi].Digest, 0, result, resultOff, i); - resultOff += i; - remain -= i; - - if(h != 0) - { - if(remain <= 0) - throw new Exception("Assertion failed"); - - result[resultOff] = _b64[_self.Bh[bi].H % 64]; - - if(i < 3 || - result[resultOff] != result[resultOff - 1] || - result[resultOff] != result[resultOff - 2] || - result[resultOff] != result[resultOff - 3]) - { - ++resultOff; - --remain; - } - } - else if(_self.Bh[bi].Digest[i] != 0) - { - if(remain <= 0) - throw new Exception("Assertion failed"); - - result[resultOff] = _self.Bh[bi].Digest[i]; - - if(i < 3 || - result[resultOff] != result[resultOff - 1] || - result[resultOff] != result[resultOff - 2] || - result[resultOff] != result[resultOff - 3]) - { - ++resultOff; - --remain; - } - } - - if(remain <= 0) - throw new Exception("Assertion failed"); - - result[resultOff++] = 0x3A; // ':' - --remain; - - if(bi < _self.Bhend - 1) - { - ++bi; - i = (int)_self.Bh[bi].Dlen; - - if(i > remain) - throw new Exception("Assertion failed"); - - Array.Copy(_self.Bh[bi].Digest, 0, result, resultOff, i); - resultOff += i; - remain -= i; - - if(h != 0) - { - if(remain <= 0) - throw new Exception("Assertion failed"); - - h = _self.Bh[bi].Halfh; - result[resultOff] = _b64[h % 64]; - - if(i < 3 || - result[resultOff] != result[resultOff - 1] || - result[resultOff] != result[resultOff - 2] || - result[resultOff] != result[resultOff - 3]) - { - ++resultOff; - --remain; - } - } - else - { - i = _self.Bh[bi].Halfdigest; - - if(i != 0) - { - if(remain <= 0) - throw new Exception("Assertion failed"); - - result[resultOff] = (byte)i; - - if(i < 3 || - result[resultOff] != result[resultOff - 1] || - result[resultOff] != result[resultOff - 2] || - result[resultOff] != result[resultOff - 3]) - { - ++resultOff; - --remain; - } - } - } - } - else if(h != 0) - { - if(_self.Bh[bi].Dlen != 0) - throw new Exception("Assertion failed"); - - if(remain <= 0) - throw new Exception("Assertion failed"); - - result[resultOff++] = _b64[_self.Bh[bi].H % 64]; - /* No need to bother with FUZZY_FLAG_ELIMSEQ, because this - * digest has length 1. */ - --remain; - } - - result[resultOff] = 0; - } - - /// Gets the hash of a file - /// File path. - public static byte[] File(string filename) => - throw new NotImplementedException("SpamSum does not have a binary representation."); - - /// Gets the hash of a file in hexadecimal and as a byte array. - /// File path. - /// Byte array of the hash value. - public static string File(string filename, out byte[] hash) => - throw new NotImplementedException("Not yet implemented."); - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// Length of the data buffer to hash. - /// null - /// Base64 representation of SpamSum $blocksize:$hash:$hash - public static string Data(byte[] data, uint len, out byte[] hash) - { - var fuzzyContext = new SpamSumContext(); - - fuzzyContext.Update(data, len); - - hash = null; - - return fuzzyContext.End(); - } - - /// Gets the hash of the specified data buffer. - /// Data buffer. - /// null - /// Base64 representation of SpamSum $blocksize:$hash:$hash - public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); - - // Converts an ASCII null-terminated string to .NET string - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static string CToString(byte[] cString) - { - int count = 0; - - // ReSharper disable once LoopCanBeConvertedToQuery - // LINQ is six times slower - foreach(byte c in cString) - { - if(c == 0) - break; - - count++; - } - - return Encoding.ASCII.GetString(cString, 0, count); - } - - struct RollState - { - public byte[] Window; - - // ROLLING_WINDOW - public uint H1; - public uint H2; - public uint H3; - public uint N; - } - - /* A blockhash contains a signature state for a specific (implicit) blocksize. - * The blocksize is given by SSDEEP_BS(index). The h and halfh members are the - * FNV hashes, where halfh stops to be reset after digest is SPAMSUM_LENGTH/2 - * long. The halfh hash is needed be able to truncate digest for the second - * output hash to stay compatible with ssdeep output. */ - struct BlockhashContext - { - public uint H; - public uint Halfh; - public byte[] Digest; - - // SPAMSUM_LENGTH - public byte Halfdigest; - public uint Dlen; - } - - struct FuzzyState - { - public uint Bhstart; - public uint Bhend; - public BlockhashContext[] Bh; - - //NUM_BLOCKHASHES - public ulong TotalSize; - public RollState Roll; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/.editorconfig b/Aaru.CommonTypes/.editorconfig deleted file mode 100644 index 9181fe5..0000000 --- a/Aaru.CommonTypes/.editorconfig +++ /dev/null @@ -1,632 +0,0 @@ -root = true - -[*] -charset = utf-8 -next_line = crlf -insert_final_newline = false -indent_style = space -indent_size = 4 - -# Generic non-language specific ones for Resharper and friends -brace_style = next_line -int_align = true -keep_existing_arrangement = false -place_simple_blocks_on_single_line = true -place_simple_declaration_blocks_on_single_line = true -place_attribute_on_same_line = false -space_after_unary_operator = false -space_after_comma = true -space_around_ternary_operator = true -space_around_binary_operator = true -space_around_member_access_operator = false -space_before_open_square_brackets = false -space_after_keywords_in_control_flow_statements = true -space_before_comma = false -space_between_method_call_name_and_opening_parenthesis = false -space_between_method_declaration_name_and_open_parenthesis = false -space_between_square_brackets = false -space_between_parentheses_of_control_flow_statements = false -accessor_owner_declaration_braces = next_line -accessor_declaration_braces = next_line -case_block_braces = next_line -initializer_braces = next_line -other_braces = next_line -allow_comment_after_lbrace = false -empty_block_style = together_same_line -braces_for_ifelse = not_required -braces_for_for = not_required -braces_for_foreach = not_required -braces_for_while = not_required -braces_for_dowhile = not_required -braces_for_using = not_required -braces_for_lock = not_required -braces_for_fixed = not_required -method_or_operator_body = expression_body -local_function_body = expression_body -constructor_or_destructor_body = expression_body -accessor_owner_body = expression_body -force_attribute_style = join -function_braces = next_line -force_control_statements_braces = always_remove -space_in_singleline_accessorholder = true -type_declaration_braces = next_line -invocable_declaration_braces = next_line -anonymous_method_declaration_braces = next_line -space_between_accessors_in_singleline_property = true -indent_nested_usings_stmt = true -space_within_empty_braces = false -indent_nested_fixed_stmt = true -indent_nested_lock_stmt = true -indent_nested_for_stmt = true -indent_nested_foreach_stmt = true -indent_nested_while_stmt = true -use_continuous_indent_inside_parens = true -indent_method_decl_pars = inside -indent_invocation_pars = inside -indent_statement_pars = inside -indent_typeparam_angles = inside -indent_typearg_angles = inside -indent_pars = inside -indent_preprocessor_if = outdent -indent_preprocessor_region = usual_indent -indent_preprocessor_other = usual_indent -indent_switch_labels = true -indent_type_constraints = true -stick_comment = false -alignment_tab_fill_style = use_spaces -align_multiline_parameter = true -align_multiline_extends_list = true -align_linq_query = true -align_multiline_binary_expressions_chain = true -outdent_binary_ops = true -align_multiline_calls_chain = true -outdent_dots = true -align_multiline_array_and_object_initializer = false -indent_anonymous_method_block = false -align_first_arg_by_paren = true -align_multiline_argument = true -align_tuple_components = true -align_multiline_expression = true -align_multiline_for_stmt = true -align_multiple_declaration = true -align_multline_type_parameter_list = true -align_multline_type_parameter_constrains = true -int_align_fields = true -int_align_properties = true -int_align_methods = true -int_align_parameters = false -int_align_variables = true -int_align_assignments = true -int_align_nested_ternary = true -int_align_invocations = false -int_align_binary_expressions = true -int_align_comments = true -int_align_switch_sections = true -keep_user_linebreaks = false -keep_existing_arrangement = false -keep_existing_linebreaks = false -max_line_length = 120 -wrap_before_comma = false -special_else_if_treatment = true -place_type_attribute_on_same_line = never -place_method_attribute_on_same_line = never -place_accessorholder_attribute_on_same_line = never -place_attribute_on_same_line = never -place_accessor_attribute_on_same_line = never -place_attribute_on_same_line = never -place_field_attribute_on_same_line = never -place_attribute_on_same_line = never -wrap_parameters_style = wrap_if_long -keep_existing_declaration_parens_arrangement = false -wrap_before_declaration_lpar = false -wrap_after_declaration_lpar = false -wrap_before_declaration_rpar = false -place_constructor_initializer_on_same_line = true -keep_existing_expr_member_arrangement = false -place_expr_method_on_single_line = true -place_expr_property_on_single_line = true -place_expr_accessor_on_single_line = true -wrap_before_arrow_with_expressions = false -place_type_constraints_on_same_line = true -wrap_before_first_type_parameter_constraint = true -wrap_multiple_type_parameter_constraints_style = wrap_if_long -wrap_before_type_parameter_langle = true -wrap_before_extends_colon = false -wrap_extends_list_style = wrap_if_long -keep_existing_declaration_block_arrangement = false -place_abstract_accessorholder_on_single_line = true -place_simple_accessorholder_on_single_line = false -place_accessor_with_attrs_holder_on_single_line = false -place_simple_accessor_on_single_line = true -place_simple_method_on_single_line = false -keep_existing_enum_arrangement = false -place_simple_enum_on_single_line = false -wrap_enum_declaration = wrap_if_long -new_line_before_else = true -new_line_before_while = false -wrap_for_stmt_header_style = wrap_if_long -wrap_multiple_declaration_style = wrap_if_long -keep_existing_embedded_arrangement = false -place_simple_embedded_statement_on_same_line = false -place_simple_case_statement_on_same_line = true -keep_existing_embedded_block_arrangement = false -place_simple_embedded_block_on_same_line = false -place_simple_anonymousmethod_on_single_line = false -keep_existing_initializer_arrangement = false -place_simple_initializer_on_single_line = false -wrap_object_and_collection_initializer_style = chop_always -wrap_array_initializer_style = wrap_if_long -wrap_arguments_style = wrap_if_long -keep_existing_invocation_parens_arrangement = false -wrap_after_invocation_lpar = false -wrap_before_invocation_rpar = false -wrap_after_dot_in_method_calls = true -wrap_chained_method_calls = wrap_if_long -wrap_before_binary_opsign = false -wrap_chained_binary_expressions = wrap_if_long -force_chop_compound_if_expression = true -force_chop_compound_while_expression = true -force_chop_compound_do_expression = true -wrap_before_ternary_opsigns = true -wrap_ternary_expr_style = wrap_if_long -nested_ternary_style = expanded -wrap_linq_expressions = wrap_if_long -wrap_before_linq_expression = false -place_linq_into_on_new_line = false -wrap_verbatim_interpolated_strings = wrap_if_long -extra_spaces = remove_all -space_after_keywords_in_control_flow_statements = false -space_between_method_call_name_and_opening_parenthesis = false -space_between_method_declaration_name_and_open_parenthesis = false -space_before_typeof_parentheses = false -space_before_checked_parentheses = false -space_before_sizeof_parentheses = false -space_before_nameof_parentheses = false -space_between_keyword_and_expression = true -space_between_keyword_and_type = true -space_around_assignment_op = true -space_around_logical_op = true -space_around_binary_operator = true -space_around_equality_op = true -space_around_relational_op = true -space_around_bitwise_op = true -space_around_additive_op = true -space_around_multiplicative_op = true -space_around_shift_op = true -space_around_nullcoalescing_op = true -space_around_arrow_op = false -space_after_logical_not_op = false -space_after_unary_operator = false -space_after_cast = false -space_around_dot = false -space_around_lambda_arrow = true -space_before_pointer_asterik_declaration = false -space_before_nullable_mark = false -blank_lines_around_class_definition = 1 -namespace_indentation = all -space_within_template_argument = false -align_union_type_usage = true -space_in_singleline_method = true -space_in_singleline_anonymous_method = true -space_within_single_line_array_initializer_braces = true -space_around_arrow_op = false - -# These are for markup languages (HTML, XML, etc) -spaces_around_eq_in_pi_attribute = false -space_after_last_pi_attribute = true -pi_attributes_indent = align_by_first_attribute -blank_line_after_pi = true -spaces_around_eq_in_attribute = false -space_after_last_attribute = false -space_before_self_closing = true -attribute_style = on_single_line -attribute_indent = align_by_first_attribute -sort_attributes = true -sort_class_selectors = true -max_blank_lines_between_tags = 0 -linebreak_before_all_elements = true -linebreak_before_multiline_elements = true -quote_style = doublequoted -delete_quotes_from_solid_values = false -normalize_tag_names = true - - -[{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}] -indent_size = 2 - -[*.js.map] -indent_size = 2 - -[*.{css,scss}] -indent_size = 2 -declarations_style = separate_lines_for_nonsingle -media_query_style = separate_lines -selector_style = same_line -properties_style = separate_lines_for_nonsingle -brace_style = next_line - -[{.analysis_options,*.yml,*.yaml}] -indent_size = 2 - -# Xml project files -[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] -indent_size = 2 - -# Xml files -[*.{xml,stylecop,resx,ruleset}] -indent_size = 2 - -# Xml config files -[*.{props,targets,config,nuspec}] -indent_size = 2 - -# .net files -[*.{cs,vb}] -# These set the this. / Me. -dotnet_style_qualification_for_field = false:warning -dotnet_style_qualification_for_property = false:warning -dotnet_style_qualification_for_method = false:warning -dotnet_style_qualification_for_event = false:warning - -# These make it suggest Int32 instead of int, etc. -dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion -dotnet_style_predefined_type_for_member_access = true:suggestion - -# This controls implicit access modifiers -dotnet_style_require_accessibility_modifiers = never:suggestion - -# Prefer non modified fields to be marked readonly -dotnet_style_readonly_field = true:warning - -# Parenthesis settings -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_other_operators = always_for_clarity:warning - -dotnet_style_object_initializer = true:suggestion -dotnet_style_collection_initializer = true:suggestion -dotnet_style_explicit_tuple_names = true:error -dotnet_style_prefer_inferred_tuple_names = true:warning -dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning -dotnet_style_prefer_conditional_expression_over_return = true:warning -dotnet_style_coalesce_expression = true:warning -dotnet_style_null_propagation = true:error - -dotnet_sort_system_directives_first = true - -# Constants in C style, all-caps -dotnet_naming_rule.constant_fields_caps.symbols = constant_fields -dotnet_naming_rule.constant_fields_caps.severity = warning -dotnet_naming_rule.constant_fields_caps.style = caps_style -dotnet_naming_symbols.constant_fields.applicable_kinds = field -dotnet_naming_symbols.constant_fields.required_modifiers = const -dotnet_naming_style.caps_style.capitalization = all_upper - -# interfaces should be prefixed with I -dotnet_naming_rule.pascal_case_for_interface.severity = error -dotnet_naming_rule.pascal_case_for_interface.symbols = interfaces_fields -dotnet_naming_rule.pascal_case_for_interface.style = pascal_case_interface_style -dotnet_naming_symbols.interfaces_fields.applicable_kinds = interface -dotnet_naming_style.pascal_case_interface_style.required_prefix = I -dotnet_naming_style.pascal_case_interface_style.capitalization = pascal_case - -## internal and private fields should be _camelCase -dotnet_naming_rule.camel_case_for_private_internal_fields.severity = warning -dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields -dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style -dotnet_naming_symbols.private_internal_fields.applicable_kinds = field -dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal -dotnet_naming_style.camel_case_underscore_style.required_prefix = _ -dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case - -# 2018-12-07 NP: This is not yet working in VS2017 -# local variables should be camelCase -#dotnet_naming_rule.camel_case_for_locals.severity = suggestion -#dotnet_naming_rule.camel_case_for_locals.symbols = local_fields -#dotnet_naming_rule.camel_case_for_locals.style = camel_case_style -#dotnet_naming_symbols.local_fields.applicable_kinds = local -#dotnet_naming_style.camel_case_style.capitalization = camel_case - -[*.cs] -# var var var -csharp_style_var_for_built_in_types = false:warning -csharp_style_var_when_type_is_apparent = true:suggestion -csharp_style_var_elsewhere = false:warning - -csharp_style_expression_bodied_methods = when_on_single_line:suggestion -csharp_style_expression_bodied_constructors = when_on_single_line:suggestion -csharp_style_expression_bodied_operators = when_on_single_line:suggestion -csharp_style_expression_bodied_properties = when_on_single_line:suggestion -csharp_style_expression_bodied_indexers = when_on_single_line:suggestion -csharp_style_expression_bodied_accessors = when_on_single_line:suggestion - -csharp_style_pattern_matching_over_is_with_cast_check = true:warning -csharp_style_pattern_matching_over_as_with_null_check = when_on_single_line:warning - -csharp_style_inlined_variable_declaration = true:warning - -csharp_prefer_simple_default_expression = true:warning -csharp_style_deconstructed_variable_declaration = false:warning - -csharp_style_throw_expression = true:warning -csharp_style_conditional_delegate_call = true:warning - -csharp_prefer_braces = false - -csharp_new_line_before_open_brace = all -csharp_new_line_before_else = true -csharp_new_line_before_catch = true -csharp_new_line_before_finally = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_between_query_expression_clauses = true - -csharp_indent_case_contents = true -csharp_indent_switch_labels = true -csharp_indent_labels = flush_left - -csharp_space_after_cast = false -csharp_space_after_keywords_in_control_flow_statements = false -csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = none -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_around_binary_operators = before_and_after -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false - -csharp_preserve_single_line_statements = false -csharp_preserve_single_line_blocks = true - -csharp_blank_lines_around_region = 0 -csharp_blank_lines_inside_region = 0 -csharp_blank_lines_before_single_line_comment = 1 -csharp_keep_blank_lines_in_declarations = 1 -csharp_remove_blank_lines_near_braces_in_declarations = true -csharp_blank_lines_after_start_comment = false -csharp_blank_lines_between_using_groups = 0 -csharp_blank_lines_after_using_list = 1 -csharp_blank_lines_around_namespace = 1 -csharp_blank_lines_inside_namespace = 0 -csharp_blank_lines_around_type = 1 -csharp_blank_lines_inside_type = 0 -csharp_blank_lines_around_field = 0 -csharp_blank_lines_around_single_line_field = 0 -csharp_blank_lines_around_property = 1 -csharp_blank_lines_around_single_line_property = 0 -csharp_blank_lines_around_auto_property = 0 -csharp_blank_lines_around_single_line_auto_property = 0 -csharp_blank_lines_around_invocable = 1 -csharp_blank_lines_around_single_line_invocable = 1 -csharp_keep_blank_lines_in_code = 1 -csharp_remove_blank_lines_near_braces_in_code = true -csharp_blank_lines_around_local_method = 1 -csharp_blank_lines_around_single_line_local_method = 1 -csharp_blank_lines_before_control_transfer_statements = 1 -csharp_blank_lines_after_control_transfer_statements = 1 -csharp_blank_lines_before_block_statements = 1 -csharp_blank_lines_after_block_statements = 1 -csharp_blank_lines_before_multiline_statements = 1 -csharp_blank_lines_after_multiline_statements = 1 - -csharp_type_declaration_braces = next_line -csharp_brace_style = next_line -csharp_indent_inside_namespace = true -csharp_invocable_declaration_braces = next_line -csharp_anonymous_method_declaration_braces = next_line -csharp_accessor_owner_declaration_braces = next_line -csharp_accessor_declaration_braces = next_line -csharp_case_block_braces = next_line -csharp_initializer_braces = next_line -csharp_other_braces = next_line -csharp_allow_comment_after_lbrace = false -csharp_empty_block_style = together_same_line - -csharp_for_built_in_types = use_explicit_type -csharp_for_simple_types = use_var_when_evident -csharp_for_other_types = use_explicit_type -csharp_prefer_separate_deconstructed_variables_declaration = true -csharp_prefer_explicit_discard_declaration = false - -csharp_instance_members_qualify_members = none -csharp_builtin_type_reference_style = use_keyword -csharp_prefer_qualified_reference = false -csharp_add_imports_to_deepest_scope = false -csharp_allow_alias = true -csharp_default_private_modifier = implicit -csharp_default_internal_modifier = explicit -csharp_arguments_literal = positional -csharp_arguments_string_literal = positional -csharp_arguments_named = positional -csharp_arguments_anonymous_function = positional -csharp_arguments_other = positional -csharp_braces_for_ifelse = not_required -csharp_braces_for_for = not_required -csharp_braces_for_foreach = not_required -csharp_braces_for_while = not_required -csharp_braces_for_dowhile = not_required -csharp_braces_for_using = not_required -csharp_braces_for_lock = not_required -csharp_braces_for_fixed = not_required -csharp_method_or_operator_body = expression_body -csharp_local_function_body = expression_body -csharp_constructor_or_destructor_body = expression_body -csharp_accessor_owner_body = expression_body -csharp_force_attribute_style = join -csharp_indent_nested_usings_stmt = true - -csharp_builtin_type_reference_for_member_access_style = use_keyword -csharp_indent_nested_fixed_stmt = true -csharp_indent_nested_lock_stmt = true -csharp_indent_nested_for_stmt = true -csharp_indent_nested_foreach_stmt = true -csharp_indent_nested_while_stmt = true -csharp_use_continuous_indent_inside_parens = true -csharp_indent_method_decl_pars = inside -csharp_indent_invocation_pars = inside -csharp_indent_statement_pars = inside -csharp_indent_typeparam_angles = inside -csharp_indent_typearg_angles = inside -csharp_indent_pars = inside -csharp_indent_preprocessor_if = outdent -csharp_indent_preprocessor_region = usual_indent -csharp_indent_preprocessor_other = usual_indent -csharp_indent_switch_labels = true -csharp_indent_type_constraints = true -csharp_stick_comment = false -csharp_alignment_tab_fill_style = use_spaces -csharp_align_multiline_parameter = true -csharp_align_multiline_extends_list = true -csharp_align_linq_query = true -csharp_align_multiline_binary_expressions_chain = true -csharp_outdent_binary_ops = true -csharp_align_multiline_calls_chain = true -csharp_outdent_dots = true -csharp_align_multiline_array_and_object_initializer = false -csharp_indent_anonymous_method_block = false -csharp_align_first_arg_by_paren = true -csharp_align_multiline_argument = true -csharp_align_tuple_components = true -csharp_align_multiline_expression = true -csharp_align_multiline_for_stmt = true -csharp_align_multiple_declaration = true -csharp_align_multline_type_parameter_list = true -csharp_align_multline_type_parameter_constrains = true -csharp_int_align_fields = true -csharp_int_align_properties = true -csharp_int_align_methods = true -csharp_int_align_parameters = false -csharp_int_align_variables = true -csharp_int_align_assignments = true -csharp_int_align_nested_ternary = true -csharp_int_align_invocations = false -csharp_int_align_binary_expressions = true -csharp_int_align_comments = true -csharp_int_align_switch_sections = true -csharp_int_align = true -csharp_keep_user_linebreaks = false -csharp_keep_existing_arrangement = false -csharp_keep_existing_linebreaks = false -csharp_max_line_length = 120 -csharp_wrap_before_comma = false -csharp_special_else_if_treatment = true -csharp_insert_final_newline = false -csharp_place_type_attribute_on_same_line = never -csharp_place_method_attribute_on_same_line = never -csharp_place_accessorholder_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_place_accessor_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_place_field_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_wrap_parameters_style = wrap_if_long -csharp_keep_existing_declaration_parens_arrangement = false -csharp_wrap_before_declaration_lpar = false -csharp_wrap_after_declaration_lpar = false -csharp_wrap_before_declaration_rpar = false -csharp_place_constructor_initializer_on_same_line = true -csharp_keep_existing_expr_member_arrangement = false -csharp_place_expr_method_on_single_line = true -csharp_place_expr_property_on_single_line = true -csharp_place_expr_accessor_on_single_line = true -csharp_wrap_before_arrow_with_expressions = false -csharp_place_type_constraints_on_same_line = true -csharp_wrap_before_first_type_parameter_constraint = true -csharp_wrap_multiple_type_parameter_constraints_style = wrap_if_long -csharp_wrap_before_type_parameter_langle = true -csharp_wrap_before_extends_colon = false -csharp_wrap_extends_list_style = wrap_if_long -csharp_keep_existing_declaration_block_arrangement = false -csharp_place_abstract_accessorholder_on_single_line = true -csharp_place_simple_accessorholder_on_single_line = false -csharp_place_accessor_with_attrs_holder_on_single_line = false -csharp_place_simple_accessor_on_single_line = true -csharp_place_simple_method_on_single_line = false -csharp_keep_existing_enum_arrangement = false -csharp_place_simple_enum_on_single_line = false -csharp_wrap_enum_declaration = wrap_if_long -csharp_new_line_before_else = true -csharp_new_line_before_while = false -csharp_wrap_for_stmt_header_style = wrap_if_long -csharp_wrap_multiple_declaration_style = wrap_if_long -csharp_keep_existing_embedded_arrangement = false -csharp_place_simple_embedded_statement_on_same_line = false -csharp_place_simple_case_statement_on_same_line = true -csharp_keep_existing_embedded_block_arrangement = false -csharp_place_simple_embedded_block_on_same_line = false -csharp_place_simple_anonymousmethod_on_single_line = false -csharp_keep_existing_initializer_arrangement = false -csharp_place_simple_initializer_on_single_line = false -csharp_wrap_object_and_collection_initializer_style = chop_always -csharp_wrap_array_initializer_style = wrap_if_long -csharp_wrap_arguments_style = wrap_if_long -csharp_keep_existing_invocation_parens_arrangement = false -csharp_wrap_after_invocation_lpar = false -csharp_wrap_before_invocation_rpar = false -csharp_wrap_after_dot_in_method_calls = true -csharp_wrap_chained_method_calls = wrap_if_long -csharp_wrap_before_binary_opsign = false -csharp_wrap_chained_binary_expressions = wrap_if_long -csharp_force_chop_compound_if_expression = true -csharp_force_chop_compound_while_expression = true -csharp_force_chop_compound_do_expression = true -csharp_wrap_before_ternary_opsigns = true -csharp_wrap_ternary_expr_style = wrap_if_long -csharp_nested_ternary_style = expanded -csharp_wrap_linq_expressions = wrap_if_long -csharp_wrap_before_linq_expression = false -csharp_place_linq_into_on_new_line = false -csharp_wrap_verbatim_interpolated_strings = wrap_if_long -csharp_extra_spaces = remove_all -csharp_space_after_keywords_in_control_flow_statements = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_declaration_name_and_open_parenthesis = false -csharp_space_before_typeof_parentheses = false -csharp_space_before_checked_parentheses = false -csharp_space_before_sizeof_parentheses = false -csharp_space_before_nameof_parentheses = false -csharp_space_between_keyword_and_expression = true -csharp_space_between_keyword_and_type = true -csharp_space_around_assignment_op = true -csharp_space_around_logical_op = true -csharp_space_around_binary_operator = true -csharp_space_around_equality_op = true -csharp_space_around_relational_op = true -csharp_space_around_bitwise_op = true -csharp_space_around_additive_op = true -csharp_space_around_multiplicative_op = true -csharp_space_around_shift_op = true -csharp_space_around_nullcoalescing_op = true -csharp_space_around_arrow_op = false -csharp_space_after_logical_not_op = false -csharp_space_after_unary_operator = false -csharp_space_after_cast = false -csharp_space_around_dot = false -csharp_space_around_lambda_arrow = true -csharp_space_before_pointer_asterik_declaration = false -csharp_space_before_nullable_mark = false - -[*.cshtml] -linebreaks_around_razor_statements = true -blank_lines_around_razor_functions = true -blank_lines_around_razor_helpers = true -blank_lines_around_razor_sections = true - -# C++ -[*.{cc,cpp,cxx,h,hpp,hxx}] -cpp_indent_access_specifiers_from_class = true -cpp_indent_wrapped_function_names = false -cpp_align_multiline_type_argument = true - -# C, C++ and ObjectiveC -[*.{c,h,cc,cpp,cxx,m,hpp,hxx}] -indent_preprocessor_directives = normal -indent_type_constraints = true - -# Javascript and Typescript -[*.{js,js.map,ts}] -quote_style = doublequoted -termination_style = ensure_semicolon \ No newline at end of file diff --git a/Aaru.CommonTypes/.gitignore b/Aaru.CommonTypes/.gitignore deleted file mode 100644 index 05c540d..0000000 --- a/Aaru.CommonTypes/.gitignore +++ /dev/null @@ -1,595 +0,0 @@ -### VisualStudio template -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ -### Linux template - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* -### Xcode template -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -### VisualStudioCode template -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -### C++ template -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o - -# Precompiled Headers -*.gch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app -### MonoDevelop template -#User Specific -*.usertasks - -#Mono Project Files -*.resources -test-results/ -### GPG template -secring.* - -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/modules.xml -# .idea/*.iml -# .idea/modules - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests -### CMake template -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -### C template -# Object files -*.ko -*.elf - -# Linker output -*.map -*.exp - -*.so.* - -# Executables -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf -### Windows template -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# NuGet Packages Directory -packages/ -## TODO: If the tool you use requires repositories.config uncomment the next line -#!packages/repositories.config - -# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets -# This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented) -!packages/build/ - - -# Others -sql/ -*.Cache - -# Visual Studio 2017 -.vs - -workspace.xml -cmake-build-debug -### macOS template -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -pkg/**/pkg -pkg/**/src -pkg/**/*.asc -pkg/**/*.sig -pkg/**/*.tar.xz -pkg/**/*.zip -pkg/**/aaru - -.sonarqube \ No newline at end of file diff --git a/Aaru.CommonTypes/Aaru.CommonTypes.csproj b/Aaru.CommonTypes/Aaru.CommonTypes.csproj deleted file mode 100644 index 46c6893..0000000 --- a/Aaru.CommonTypes/Aaru.CommonTypes.csproj +++ /dev/null @@ -1,174 +0,0 @@ - - - - Debug - AnyCPU - 2.0 - {F2B84194-26EB-4227-B1C5-6602517E85AE} - Library - Aaru.CommonTypes - Aaru.CommonTypes - $(Version) - false - true - 6.0.0-alpha6 - Claunia.com - Copyright © 2011-2021 Natalia Portillo - Aaru Data Preservation Suite - Aaru.CommonTypes - $(Version) - net6 - 10 - Contains common types defined by the Aaru Data Preservation Suite. - https://github.com/aaru-dps/ - MIT - https://github.com/aaru-dps/Aaru.CommonTypes - true - en-US - true - true - snupkg - Natalia Portillo <claunia@claunia.com> - true - - - $(Version)+{chash:8} - true - true - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - - - full - true - bin\Release - prompt - 4 - false - - - - - - - Metadata/cicm.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LICENSE.MIT - - - - - - - - - - - - - - - - - - - - - - /Library/Frameworks/Mono.framework/Versions/Current/lib/mono - /usr/lib/mono - /usr/local/lib/mono - - $(BaseFrameworkPathOverrideForMono)/4.0-api - $(BaseFrameworkPathOverrideForMono)/4.5-api - $(BaseFrameworkPathOverrideForMono)/4.5.1-api - $(BaseFrameworkPathOverrideForMono)/4.5.2-api - $(BaseFrameworkPathOverrideForMono)/4.6-api - $(BaseFrameworkPathOverrideForMono)/4.6.1-api - $(BaseFrameworkPathOverrideForMono)/4.6.2-api - $(BaseFrameworkPathOverrideForMono)/4.7-api - $(BaseFrameworkPathOverrideForMono)/4.7.1-api - true - - $(FrameworkPathOverride)/Facades;$(AssemblySearchPaths) - - diff --git a/Aaru.CommonTypes/Aaru.CommonTypes.csproj.DotSettings b/Aaru.CommonTypes/Aaru.CommonTypes.csproj.DotSettings deleted file mode 100644 index b76a6ba..0000000 --- a/Aaru.CommonTypes/Aaru.CommonTypes.csproj.DotSettings +++ /dev/null @@ -1,2 +0,0 @@ - - True \ No newline at end of file diff --git a/Aaru.CommonTypes/Delegates.cs b/Aaru.CommonTypes/Delegates.cs deleted file mode 100644 index bbe39a9..0000000 --- a/Aaru.CommonTypes/Delegates.cs +++ /dev/null @@ -1,90 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Delegates.cs -// Author(s) : Natalia Portillo -// -// Component : Common types. -// -// --[ Description ] ---------------------------------------------------------- -// -// Delegates to communicate with user interface. -// -// --[ License ] -------------------------------------------------------------- -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.CommonTypes -{ - /// Initializes a progress indicator (e.g. makes a progress bar visible) - public delegate void InitProgressHandler(); - - /// Updates a progress indicator with text - public delegate void UpdateProgressHandler(string text, long current, long maximum); - - /// Pulses a progress indicator with indeterminate boundaries - public delegate void PulseProgressHandler(string text); - - /// Uninitializes a progress indicator (e.g. adds a newline to the console) - public delegate void EndProgressHandler(); - - /// Initializes a secondary progress indicator (e.g. makes a progress bar visible) - public delegate void InitProgressHandler2(); - - /// Updates a secondary progress indicator with text - public delegate void UpdateProgressHandler2(string text, long current, long maximum); - - /// Pulses a secondary progress indicator with indeterminate boundaries - public delegate void PulseProgressHandler2(string text); - - /// Uninitializes a secondary progress indicator (e.g. adds a newline to the console) - public delegate void EndProgressHandler2(); - - /// Initializes two progress indicators (e.g. makes a progress bar visible) - public delegate void InitTwoProgressHandler(); - - /// Updates two progress indicators with text - public delegate void UpdateTwoProgressHandler(string text, long current, long maximum, string text2, long current2, - long maximum2); - - /// Pulses a progress indicator with indeterminate boundaries - public delegate void PulseTwoProgressHandler(string text, string text2); - - /// Uninitializes a progress indicator (e.g. adds a newline to the console) - public delegate void EndTwoProgressHandler(); - - /// Updates a status indicator - public delegate void UpdateStatusHandler(string text); - - /// Shows an error message - public delegate void ErrorMessageHandler(string text); - - /// Initializes a block map that's going to be filled with a media scan - public delegate void InitBlockMapHandler(ulong blocks, ulong blockSize, ulong blocksToRead, ushort currentProfile); - - /// Updates lists of time taken on scanning from the specified sector - /// Time in milliseconds - public delegate void ScanTimeHandler(ulong sector, double duration); - - /// Specified a number of blocks could not be read on scan - public delegate void ScanUnreadableHandler(ulong sector); - - /// Sends the speed of scanning a specific sector - public delegate void ScanSpeedHandler(ulong sector, double currentSpeed); -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Enums/DeviceType.cs b/Aaru.CommonTypes/Enums/DeviceType.cs deleted file mode 100644 index a724755..0000000 --- a/Aaru.CommonTypes/Enums/DeviceType.cs +++ /dev/null @@ -1,59 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : DeviceType.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines enumerations of device types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.CommonTypes.Enums -{ - /// Device types - public enum DeviceType - { - /// Unknown device type - Unknown = -1, - /// ATA device - ATA = 1, - /// ATA Packet device (aka SCSI over ATA) - ATAPI = 2, - /// SCSI device (or USB-MSC, SBP2, FC, UAS, etc) - SCSI = 3, - /// SecureDigital memory card - SecureDigital = 4, - /// MultiMediaCard memory card - MMC = 5, - /// NVMe device - NVMe = 6 - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Enums/ErrorNumber.cs b/Aaru.CommonTypes/Enums/ErrorNumber.cs deleted file mode 100644 index 12e9ef7..0000000 --- a/Aaru.CommonTypes/Enums/ErrorNumber.cs +++ /dev/null @@ -1,176 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ErrorNumber.cs -// Author(s) : Natalia Portillo -// -// Component : Common types. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines enumerations of error numbers. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.CommonTypes.Enums -{ - /// Enumerates error codes. Negative for UNIX error number equivalents, positive for Aaru error numbers. - public enum ErrorNumber - { - NotPermitted = -1, - /// No such file or directory - NoSuchFile = -2, NoSuchProcess = -3, InterruptedSyscall = -4, - /// I/O error - InOutError = -5, NoSuchDeviceOrAddress = -6, ArgumentListTooLong = -7, ExecutableFormatError = -8, - BadFileNumber = -9, NoChildProcess = -10, TryAgain = -11, - OutOfMemory = -12, - /// Access denied - AccessDenied = -13, BadAddress = -14, NotABlockDevice = -15, - /// Busy, cannot complete - Busy = -16, FileExists = -17, CrossDeviceLink = -18, - /// No such device - NoSuchDevice = -19, - /// Is not a directory (e.g.: trying to ReadDir() a file) - NotDirectory = -20, - /// Is a directory (e.g.: trying to Read() a dir) - IsDirectory = -21, - /// Invalid argument - InvalidArgument = -22, FileTableOverflow = -23, TooManyOpenFiles = -24, NotTypewriter = -25, - TextFileBusy = -26, - /// File is too large - FileTooLarge = -27, NoSpaceLeft = -28, IllegalSeek = -29, ReadOnly = -30, - TooManyLinks = -31, BrokenPipe = -32, OutOfDomain = -33, - OutOfRange = -34, DeadlockWouldOccur = -35, - /// Name is too long - NameTooLong = -36, NoLocksAvailable = -37, - /// Not implemented - NotImplemented = -38, - /// There is no data available - NoData = -61, - /// Link is severed - SeveredLink = -67, - /// There is no such attribute - NoSuchExtendedAttribute = NoData, - /// Not supported - NotSupported = -252, EPERM = NotPermitted, - /// No such file or directory - ENOENT = NoSuchFile, ESRCH = NoSuchProcess, EINTR = InterruptedSyscall, - /// I/O error - EIO = InOutError, ENXIO = NoSuchDeviceOrAddress, E2BIG = ArgumentListTooLong, ENOEXEC = ExecutableFormatError, - EBADF = BadFileNumber, ECHILD = NoChildProcess, EAGAIN = TryAgain, - ENOMEM = OutOfMemory, - /// Access denied - EACCES = AccessDenied, EFAULT = BadAddress, ENOTBLK = NotABlockDevice, - /// Busy, cannot complete - EBUSY = Busy, EEXIST = FileExists, EXDEV = CrossDeviceLink, - /// No such device - ENODEV = NoSuchDevice, - /// Is not a directory (e.g.: trying to ReadDir() a file) - ENOTDIR = NotDirectory, - /// Is a directory (e.g.: trying to Read() a dir) - EISDIR = IsDirectory, - /// Invalid argument - EINVAL = InvalidArgument, ENFILE = FileTableOverflow, EMFILE = TooManyOpenFiles, ENOTTY = NotTypewriter, - ETXTBSY = TextFileBusy, - /// File is too large - EFBIG = FileTooLarge, ENOSPC = NoSpaceLeft, ESPIPE = IllegalSeek, EROFS = ReadOnly, - EMLINK = TooManyLinks, EPIPE = BrokenPipe, EDOM = OutOfDomain, - ERANGE = OutOfRange, EDEADLK = DeadlockWouldOccur, - /// Name is too long - ENAMETOOLONG = NameTooLong, ENOLCK = NoLocksAvailable, - /// Not implemented - ENOSYS = NotImplemented, - /// Link is severed - ENOLINK = SeveredLink, - /// Not supported - ENOTSUP = NotSupported, DirectoryNotEmpty = -39, TooManySymbolicLinks = -40, ENOTEMPTY = DirectoryNotEmpty, - ELOOP = TooManySymbolicLinks, - /// There is no such attribute - ENOATTR = NoSuchExtendedAttribute, - /// There is no data available - ENODATA = NoData, - /// No error - NoError = 0, - /// User requested help to be shown - HelpRequested = 1, - /// Command found nothing - NothingFound = 2, - /// Media has been already dumped completely - AlreadyDumped = 3, - /// Image and its sectors cannot be verified - NotVerifiable = 4, - /// There are bad sectors and image cannot be verified - BadSectorsImageNotVerified = 5, - /// All sectors are good and image cannot be verified - CorrectSectorsImageNotVerified = 6, - /// Image is bad and sectors cannot be verified - BadImageSectorsNotVerified = 7, - /// Image is bad and there are bad sectors - BadImageBadSectors = 8, - /// All sectors are good and image is bad - CorrectSectorsBadImage = 9, - /// Image is good and sectors cannot be verified - CorrectImageSectorsNotVerified = 10, - /// Image is good and there are bad sectors - CorrectImageBadSectors = 11, - /// Exception has been raised - UnexpectedException = 12, - /// The number of arguments is not as expected - UnexpectedArgumentCount = 13, - /// A required argument is not present - MissingArgument = 14, - /// The specified file cannot be opened - CannotOpenFile = 15, - /// The specified encoding cannot be found - EncodingUnknown = 16, - /// The image format has not been recognized - UnrecognizedFormat = 17, - /// The image format failed to open - CannotOpenFormat = 18, - /// The specified metadata sidecar does not have the correct format - InvalidSidecar = 19, - /// The specified resume map does not have the correct format - InvalidResume = 20, - /// The specified image format cannot be found - FormatNotFound = 21, - /// More than one format found for the specified search criteria - TooManyFormats = 22, - /// The specified format does not support the specified media - UnsupportedMedia = 23, - /// Data will be lost writing the specified format - DataWillBeLost = 24, - /// Cannot create destination format - CannotCreateFormat = 25, - /// Error writing data - WriteError = 26, - /// Cannot open device - CannotOpenDevice = 27, - /// Cannot remove the existing database - CannotRemoveDatabase = 28, - SectorNotFound=29 - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Enums/Images.cs b/Aaru.CommonTypes/Enums/Images.cs deleted file mode 100644 index ae1dea3..0000000 --- a/Aaru.CommonTypes/Enums/Images.cs +++ /dev/null @@ -1,393 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Images.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines enumerations to be used by disc image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// Copyright © 2020-2021 Rebecca Wallander -// ****************************************************************************/ - -using System; -using System.Diagnostics.CodeAnalysis; - -// ReSharper disable UnusedMember.Global - -namespace Aaru.CommonTypes.Enums -{ - /// Track (as partitioning element) types. - public enum TrackType : byte - { - /// Audio track - Audio = 0, - /// Data track (not any of the below defined ones) - Data = 1, - /// Data track, compact disc mode 1 - CdMode1 = 2, - /// Data track, compact disc mode 2, formless - CdMode2Formless = 3, - /// Data track, compact disc mode 2, form 1 - CdMode2Form1 = 4, - /// Data track, compact disc mode 2, form 2 - CdMode2Form2 = 5 - } - - /// Type of subchannel in track - public enum TrackSubchannelType : byte - { - /// Track does not has subchannel dumped, or it's not a CD - None = 0, - /// Subchannel is packed and error corrected - Packed = 1, - /// Subchannel is interleaved - Raw = 2, - /// Subchannel is packed and comes interleaved with main channel in same file - PackedInterleaved = 3, - /// Subchannel is interleaved and comes interleaved with main channel in same file - RawInterleaved = 4, - /// Only Q subchannel is stored as 16 bytes - Q16 = 5, - /// Only Q subchannel is stored as 16 bytes and comes interleaved with main channel in same file - Q16Interleaved = 6 - } - - /// Metadata present for each sector (aka, "tag"). - public enum SectorTagType - { - /// Apple's GCR sector tags, 12 bytes - AppleSectorTag = 0, - /// Sync frame from CD sector, 12 bytes - CdSectorSync = 1, - /// CD sector header, 4 bytes - CdSectorHeader = 2, - /// CD mode 2 sector subheader - CdSectorSubHeader = 3, - /// CD sector EDC, 4 bytes - CdSectorEdc = 4, - /// CD sector ECC P, 172 bytes - CdSectorEccP = 5, - /// CD sector ECC Q, 104 bytes - CdSectorEccQ = 6, - /// CD sector ECC (P and Q), 276 bytes - CdSectorEcc = 7, - /// CD sector subchannel, 96 bytes - CdSectorSubchannel = 8, - /// CD track ISRC, string, 12 bytes - CdTrackIsrc = 9, - /// CD track text, string, 13 bytes - CdTrackText = 10, - /// CD track flags, 1 byte - CdTrackFlags = 11, - /// DVD sector copyright information - DvdCmi = 12, - /// Floppy address mark (contents depend on underlying floppy format) - FloppyAddressMark = 13, - /// DVD sector title key, 5 bytes - DvdTitleKey = 14, - /// Decrypted DVD sector title key, 5 bytes - DvdTitleKeyDecrypted = 15 - } - - /// Metadata present for each media. - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum MediaTagType - { - /// CD table of contents - CD_TOC = 0, - /// CD session information - CD_SessionInfo = 1, - /// CD full table of contents - CD_FullTOC = 2, - /// CD PMA - CD_PMA = 3, - /// CD Address-Time-In-Pregroove - CD_ATIP = 4, - /// CD-Text - CD_TEXT = 5, - /// CD Media Catalogue Number - CD_MCN = 6, - /// DVD/HD DVD Physical Format Information - DVD_PFI = 7, - /// DVD Lead-in Copyright Management Information - DVD_CMI = 8, - /// DVD disc key - DVD_DiscKey = 9, - /// DVD/HD DVD Burst Cutting Area - DVD_BCA = 10, - /// DVD/HD DVD Lead-in Disc Manufacturer Information - DVD_DMI = 11, - /// Media identifier - DVD_MediaIdentifier = 12, - /// Media key block - DVD_MKB = 13, - /// DVD-RAM/HD DVD-RAM DDS information - DVDRAM_DDS = 14, - /// DVD-RAM/HD DVD-RAM Medium status - DVDRAM_MediumStatus = 15, - /// DVD-RAM/HD DVD-RAM Spare area information - DVDRAM_SpareArea = 16, - /// DVD-R/-RW/HD DVD-R RMD in last border-out - DVDR_RMD = 17, - /// Pre-recorded information from DVD-R/-RW lead-in - DVDR_PreRecordedInfo = 18, - /// DVD-R/-RW/HD DVD-R media identifier - DVDR_MediaIdentifier = 19, - /// DVD-R/-RW/HD DVD-R physical format information - DVDR_PFI = 20, - /// ADIP information - DVD_ADIP = 21, - /// HD DVD Lead-in copyright protection information - HDDVD_CPI = 22, - /// HD DVD-R Medium Status - HDDVD_MediumStatus = 23, - /// DVD+/-R DL Layer capacity - DVDDL_LayerCapacity = 24, - /// DVD-R DL Middle Zone start address - DVDDL_MiddleZoneAddress = 25, - /// DVD-R DL Jump Interval Size - DVDDL_JumpIntervalSize = 26, - /// DVD-R DL Start LBA of the manual layer jump - DVDDL_ManualLayerJumpLBA = 27, - /// Blu-ray Disc Information - BD_DI = 28, - /// Blu-ray Burst Cutting Area - BD_BCA = 29, - /// Blu-ray Disc Definition Structure - BD_DDS = 30, - /// Blu-ray Cartridge Status - BD_CartridgeStatus = 31, - /// Blu-ray Status of Spare Area - BD_SpareArea = 32, - /// AACS volume identifier - AACS_VolumeIdentifier = 33, - /// AACS pre-recorded media serial number - AACS_SerialNumber = 34, - /// AACS media identifier - AACS_MediaIdentifier = 35, - /// Lead-in AACS media key block - AACS_MKB = 36, - /// AACS data keys - AACS_DataKeys = 37, - /// LBA extents flagged for bus encryption by AACS - AACS_LBAExtents = 38, - /// CPRM media key block in Lead-in - AACS_CPRM_MKB = 39, - /// Recognized layer formats in hybrid discs - Hybrid_RecognizedLayers = 40, - /// Disc write protection status - MMC_WriteProtection = 41, - /// Disc standard information - MMC_DiscInformation = 42, - /// Disc track resources information - MMC_TrackResourcesInformation = 43, - /// BD-R Pseudo-overwrite information - MMC_POWResourcesInformation = 44, - /// SCSI INQUIRY response - SCSI_INQUIRY = 45, - /// SCSI MODE PAGE 2Ah - SCSI_MODEPAGE_2A = 46, - /// ATA IDENTIFY DEVICE response - ATA_IDENTIFY = 47, - /// ATA IDENTIFY PACKET DEVICE response - ATAPI_IDENTIFY = 48, - /// PCMCIA/CardBus Card Information Structure - PCMCIA_CIS = 49, - /// SecureDigital CID - SD_CID = 50, - /// SecureDigital CSD - SD_CSD = 51, - /// SecureDigital SCR - SD_SCR = 52, - /// SecureDigital OCR - SD_OCR = 53, - /// MultiMediaCard CID - MMC_CID = 54, - /// MultiMediaCard CSD - MMC_CSD = 55, - /// MultiMediaCard OCR - MMC_OCR = 56, - /// MultiMediaCard Extended CSD - MMC_ExtendedCSD = 57, - /// Xbox Security Sector - Xbox_SecuritySector = 58, - /// - /// On floppy disks, data in last cylinder usually in a different format that contains duplication or - /// manufacturing information - /// - Floppy_LeadOut = 59, - /// DVD Disc Control Blocks - DCB = 60, - /// Compact Disc First Track Pregap - CD_FirstTrackPregap = 61, - /// Compact Disc Lead-out - CD_LeadOut = 62, - /// SCSI MODE SENSE (6) - SCSI_MODESENSE_6 = 63, - /// SCSI MODE SENSE (10) - SCSI_MODESENSE_10 = 64, - /// USB descriptors - USB_Descriptors = 65, - /// XGD unlocked DMI - Xbox_DMI = 66, - /// XDG unlocked PFI - Xbox_PFI = 67, - /// Compact Disc Lead-in - CD_LeadIn = 68, - /// 8 bytes response that seems to define type of MiniDisc - MiniDiscType = 69, - /// 4 bytes response to vendor command D5h - MiniDiscD5 = 70, - /// User TOC, contains fragments, track names, and can be from 1 to 3 sectors of 2336 bytes - MiniDiscUTOC = 71, - /// Not entirely clear kind of TOC that only appears on MD-DATA discs - MiniDiscDTOC = 72, - /// Decrypted DVD disc key - DVD_DiscKey_Decrypted = 73 - } - - /// Enumeration of media types defined in CICM metadata - public enum XmlMediaType : byte - { - /// Purely optical discs - OpticalDisc = 0, - /// Media that is physically block-based or abstracted like that - BlockMedia = 1, - /// Media that can be accessed by-byte or by-bit, like chips - LinearMedia = 2, - /// Media that can only store data when it is modulated to audio - AudioMedia = 3 - } - - /// CD flags bitmask - [Flags] - public enum CdFlags : byte - { - /// Track is quadraphonic. - FourChannel = 0x08, - /// Track is non-audio (data). - DataTrack = 0x04, - /// Track is copy protected. - CopyPermitted = 0x02, - /// Track has pre-emphasis. - PreEmphasis = 0x01 - } - - /// Status of a requested floppy sector - [Flags] - public enum FloppySectorStatus : byte - { - /// Both address mark and data checksums are correct. - Correct = 0x01, - /// Data checksum is incorrect. - DataError = 0x02, - /// Address mark checksum is incorrect. - AddressMarkError = 0x04, - /// There is another sector in the same track/head with same sector id. - Duplicated = 0x08, - /// Sector data section is not magnetized. - Demagnetized = 0x10, - /// Sector data section has a physically visible hole. - Hole = 0x20, - /// There is no address mark containing the requested sector id in the track/head. - NotFound = 0x40 - } - - /// Types of floppy disks - public enum FloppyTypes : byte - { - /// 8" floppy - Floppy, - /// 5.25" floppy - MiniFloppy, - /// 3.5" floppy - MicroFloppy, - /// 3" floppy - CompactFloppy, - /// 5.25" twiggy - FileWare, - /// 2.5" quickdisk - QuickDisk - } - - /// Enumeration of floppy densities - public enum FloppyDensities : byte - { - /// Standard coercivity (about 300Oe as found in 8" and 5.25"-double-density disks). - Standard, - /// Double density coercivity (about 600Oe as found in 5.25" HD and 3.5" DD disks). - Double, - /// High density coercivity (about 700Oe as found in 3.5" HD disks). - High, - /// Extended density coercivity (about 750Oe as found in 3.5" ED disks). - Extended - } - - /// Capabilities for optical media image formats - [Flags] - public enum OpticalImageCapabilities : ulong - { - /// Can store Red Book audio tracks? - CanStoreAudioTracks = 0x01, - /// Can store CD-V analogue video tracks? - CanStoreVideoTracks = 0x02, - /// Can store Yellow Book data tracks? - CanStoreDataTracks = 0x03, - /// Can store pregaps without needing to interpret the subchannel? - CanStorePregaps = 0x04, - /// Can store indexes without needing to interpret the subchannel? - CanStoreIndexes = 0x08, - /// Can store raw P to W subchannel data? - CanStoreSubchannelRw = 0x10, - /// Can store more than one session? - CanStoreSessions = 0x20, - /// Can store track ISRCs without needing to interpret the subchannel? - CanStoreIsrc = 0x40, - /// Can store Lead-In's CD-TEXT? - CanStoreCdText = 0x80, - /// Can store the MCN without needing to interpret the subchannel? - CanStoreMcn = 0x100, - /// Can store the whole 2352 bytes of a sector? - CanStoreRawData = 0x200, - /// Can store more than 1 session in media that is not CD based (DVD et al)? - CanStoreNotCdSessions = 0x2000, - /// Can store more than 1 track in media that is not CD based (DVD et al)? - CanStoreNotCdTracks = 0x4000, - - // TODO: Implement - /// Can store scrambled data? - CanStoreScrambledData = 0x400, - /// Can store only the user area of a sector (2048, 2324, etc)? - CanStoreCookedData = 0x800, - /// Can store more than 1 track? - CanStoreMultipleTracks = 0x1000 - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsByte.cs b/Aaru.CommonTypes/Extents/ExtentsByte.cs deleted file mode 100644 index c637b61..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsByte.cs +++ /dev/null @@ -1,254 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsByte.cs -// Author(s) : Natalia Portillo -// -// Component : Extent helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides extents for byte types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Aaru.CommonTypes.Extents -{ - /// Implements extents for - public class ExtentsByte - { - List> _backend; - - /// Initialize an empty list of extents - public ExtentsByte() => _backend = new List>(); - - /// Initializes extents with an specific list - /// List of extents as tuples "start, end" - public ExtentsByte(IEnumerable> list) - { - _backend = new List>(); - - // This ensure no overlapping extents are added on creation - foreach(Tuple t in list) - Add(t.Item1, t.Item2); - } - - /// Gets a count of how many extents are stored - public int Count => _backend.Count; - - /// Adds the specified number to the corresponding extent, or creates a new one - /// - public void Add(byte item) - { - Tuple removeOne = null; - Tuple removeTwo = null; - Tuple itemToAdd = null; - - for(int i = 0; i < _backend.Count; i++) - { - // Already contained in an extent - if(item >= _backend[i].Item1 && - item <= _backend[i].Item2) - return; - - // Expands existing extent start - if(item == _backend[i].Item1 - 1) - { - removeOne = _backend[i]; - - if(i > 0 && - item == _backend[i - 1].Item2 + 1) - { - removeTwo = _backend[i - 1]; - itemToAdd = new Tuple(_backend[i - 1].Item1, _backend[i].Item2); - } - else - itemToAdd = new Tuple(item, _backend[i].Item2); - - break; - } - - // Expands existing extent end - if(item != _backend[i].Item2 + 1) - continue; - - removeOne = _backend[i]; - - if(i < _backend.Count - 1 && - item == _backend[i + 1].Item1 - 1) - { - removeTwo = _backend[i + 1]; - itemToAdd = new Tuple(_backend[i].Item1, _backend[i + 1].Item2); - } - else - itemToAdd = new Tuple(_backend[i].Item1, item); - - break; - } - - if(itemToAdd != null) - { - _backend.Remove(removeOne); - _backend.Remove(removeTwo); - _backend.Add(itemToAdd); - } - else - _backend.Add(new Tuple(item, item)); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - } - - /// Adds a new extent - /// First element of the extent - /// - /// Last element of the extent or if is true how many elements the extent runs - /// for - /// - /// If set to true, indicates how many elements the extent runs for - public void Add(byte start, byte end, bool run = false) - { - byte realEnd; - - if(run) - realEnd = (byte)(start + end - 1); - else - realEnd = end; - - // TODO: Optimize this - for(byte t = start; t <= realEnd; t++) - Add(t); - } - - /// Checks if the specified item is contained by an extent on this instance - /// Item to search for - /// true if any of the extents on this instance contains the item - public bool Contains(byte item) => _backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); - - /// Removes all extents from this instance - public void Clear() => _backend.Clear(); - - /// Removes an item from the extents in this instance - /// Item to remove - /// true if the item was contained in a known extent and removed, false otherwise - public bool Remove(byte item) - { - Tuple toRemove = null; - Tuple toAddOne = null; - Tuple toAddTwo = null; - - foreach(Tuple extent in _backend) - { - // Extent is contained and not a border - if(item > extent.Item1 && - item < extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, (byte)(item - 1)); - toAddTwo = new Tuple((byte)(item + 1), extent.Item2); - - break; - } - - // Extent is left border, but not only element - if(item == extent.Item1 && - item != extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple((byte)(item + 1), extent.Item2); - - break; - } - - // Extent is right border, but not only element - if(item != extent.Item1 && - item == extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, (byte)(item - 1)); - - break; - } - - // Extent is only element - if(item != extent.Item1 || - item != extent.Item2) - continue; - - toRemove = extent; - - break; - } - - // Item not found - if(toRemove == null) - return false; - - _backend.Remove(toRemove); - - if(toAddOne != null) - _backend.Add(toAddOne); - - if(toAddTwo != null) - _backend.Add(toAddTwo); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - - return true; - } - - /// - /// Converts the list of extents to an array of where T1 is first element of the extent and - /// T2 is last element - /// - /// Array of - public Tuple[] ToArray() => _backend.ToArray(); - - /// Gets the first element of the extent that contains the specified item - /// Item - /// First element of extent - /// true if item was found in an extent, false otherwise - public bool GetStart(byte item, out byte start) - { - start = 0; - - foreach(Tuple extent in _backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) - { - start = extent.Item1; - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsConverter.cs b/Aaru.CommonTypes/Extents/ExtentsConverter.cs deleted file mode 100644 index d8b879b..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsConverter.cs +++ /dev/null @@ -1,84 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsConverter.cs -// Author(s) : Natalia Portillo -// -// Component : XML metadata. -// -// --[ Description ] ---------------------------------------------------------- -// -// Converts extents to/from XML. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using Schemas; - -namespace Aaru.CommonTypes.Extents -{ - /// Converts extents - public static class ExtentsConverter - { - /// Converts unsigned long integer extents into XML based extents - /// Extents - /// XML based extents - public static ExtentType[] ToMetadata(ExtentsULong extents) - { - if(extents == null) - return null; - - Tuple[] tuples = extents.ToArray(); - ExtentType[] array = new ExtentType[tuples.Length]; - - for(ulong i = 0; i < (ulong)array.LongLength; i++) - array[i] = new ExtentType - { - Start = tuples[i].Item1, - End = tuples[i].Item2 - }; - - return array; - } - - /// Converts XML based extents into unsigned long integer extents - /// XML based extents - /// Extents - public static ExtentsULong FromMetadata(ExtentType[] extents) - { - if(extents == null) - return null; - - List> tuples = - extents.Select(extent => new Tuple(extent.Start, extent.End)).ToList(); - - return new ExtentsULong(tuples); - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsInt.cs b/Aaru.CommonTypes/Extents/ExtentsInt.cs deleted file mode 100644 index e2dd4b2..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsInt.cs +++ /dev/null @@ -1,254 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsInt.cs -// Author(s) : Natalia Portillo -// -// Component : Extent helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides extents for int types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Aaru.CommonTypes.Extents -{ - /// Implements extents for - public class ExtentsInt - { - List> _backend; - - /// Initialize an empty list of extents - public ExtentsInt() => _backend = new List>(); - - /// Initializes extents with an specific list - /// List of extents as tuples "start, end" - public ExtentsInt(IEnumerable> list) - { - _backend = new List>(); - - // This ensure no overlapping extents are added on creation - foreach(Tuple t in list) - Add(t.Item1, t.Item2); - } - - /// Gets a count of how many extents are stored - public int Count => _backend.Count; - - /// Adds the specified number to the corresponding extent, or creates a new one - /// - public void Add(int item) - { - Tuple removeOne = null; - Tuple removeTwo = null; - Tuple itemToAdd = null; - - for(int i = 0; i < _backend.Count; i++) - { - // Already contained in an extent - if(item >= _backend[i].Item1 && - item <= _backend[i].Item2) - return; - - // Expands existing extent start - if(item == _backend[i].Item1 - 1) - { - removeOne = _backend[i]; - - if(i > 0 && - item == _backend[i - 1].Item2 + 1) - { - removeTwo = _backend[i - 1]; - itemToAdd = new Tuple(_backend[i - 1].Item1, _backend[i].Item2); - } - else - itemToAdd = new Tuple(item, _backend[i].Item2); - - break; - } - - // Expands existing extent end - if(item != _backend[i].Item2 + 1) - continue; - - removeOne = _backend[i]; - - if(i < _backend.Count - 1 && - item == _backend[i + 1].Item1 - 1) - { - removeTwo = _backend[i + 1]; - itemToAdd = new Tuple(_backend[i].Item1, _backend[i + 1].Item2); - } - else - itemToAdd = new Tuple(_backend[i].Item1, item); - - break; - } - - if(itemToAdd != null) - { - _backend.Remove(removeOne); - _backend.Remove(removeTwo); - _backend.Add(itemToAdd); - } - else - _backend.Add(new Tuple(item, item)); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - } - - /// Adds a new extent - /// First element of the extent - /// - /// Last element of the extent or if is true how many elements the extent runs - /// for - /// - /// If set to true, indicates how many elements the extent runs for - public void Add(int start, int end, bool run = false) - { - int realEnd; - - if(run) - realEnd = start + end - 1; - else - realEnd = end; - - // TODO: Optimize this - for(int t = start; t <= realEnd; t++) - Add(t); - } - - /// Checks if the specified item is contained by an extent on this instance - /// Item to search for - /// true if any of the extents on this instance contains the item - public bool Contains(int item) => _backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); - - /// Removes all extents from this instance - public void Clear() => _backend.Clear(); - - /// Removes an item from the extents in this instance - /// Item to remove - /// true if the item was contained in a known extent and removed, false otherwise - public bool Remove(int item) - { - Tuple toRemove = null; - Tuple toAddOne = null; - Tuple toAddTwo = null; - - foreach(Tuple extent in _backend) - { - // Extent is contained and not a border - if(item > extent.Item1 && - item < extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, item - 1); - toAddTwo = new Tuple(item + 1, extent.Item2); - - break; - } - - // Extent is left border, but not only element - if(item == extent.Item1 && - item != extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(item + 1, extent.Item2); - - break; - } - - // Extent is right border, but not only element - if(item != extent.Item1 && - item == extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, item - 1); - - break; - } - - // Extent is only element - if(item != extent.Item1 || - item != extent.Item2) - continue; - - toRemove = extent; - - break; - } - - // Item not found - if(toRemove == null) - return false; - - _backend.Remove(toRemove); - - if(toAddOne != null) - _backend.Add(toAddOne); - - if(toAddTwo != null) - _backend.Add(toAddTwo); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - - return true; - } - - /// - /// Converts the list of extents to an array of where T1 is first element of the extent and - /// T2 is last element - /// - /// Array of - public Tuple[] ToArray() => _backend.ToArray(); - - /// Gets the first element of the extent that contains the specified item - /// Item - /// First element of extent - /// true if item was found in an extent, false otherwise - public bool GetStart(int item, out int start) - { - start = 0; - - foreach(Tuple extent in _backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) - { - start = extent.Item1; - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsLong.cs b/Aaru.CommonTypes/Extents/ExtentsLong.cs deleted file mode 100644 index 5ef9d4f..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsLong.cs +++ /dev/null @@ -1,254 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsLong.cs -// Author(s) : Natalia Portillo -// -// Component : Extent helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides extents for long types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Aaru.CommonTypes.Extents -{ - /// Implements extents for - public class ExtentsLong - { - List> _backend; - - /// Initialize an empty list of extents - public ExtentsLong() => _backend = new List>(); - - /// Initializes extents with an specific list - /// List of extents as tuples "start, end" - public ExtentsLong(IEnumerable> list) - { - _backend = new List>(); - - // This ensure no overlapping extents are added on creation - foreach(Tuple t in list) - Add(t.Item1, t.Item2); - } - - /// Gets a count of how many extents are stored - public int Count => _backend.Count; - - /// Adds the specified number to the corresponding extent, or creates a new one - /// - public void Add(long item) - { - Tuple removeOne = null; - Tuple removeTwo = null; - Tuple itemToAdd = null; - - for(int i = 0; i < _backend.Count; i++) - { - // Already contained in an extent - if(item >= _backend[i].Item1 && - item <= _backend[i].Item2) - return; - - // Expands existing extent start - if(item == _backend[i].Item1 - 1) - { - removeOne = _backend[i]; - - if(i > 0 && - item == _backend[i - 1].Item2 + 1) - { - removeTwo = _backend[i - 1]; - itemToAdd = new Tuple(_backend[i - 1].Item1, _backend[i].Item2); - } - else - itemToAdd = new Tuple(item, _backend[i].Item2); - - break; - } - - // Expands existing extent end - if(item != _backend[i].Item2 + 1) - continue; - - removeOne = _backend[i]; - - if(i < _backend.Count - 1 && - item == _backend[i + 1].Item1 - 1) - { - removeTwo = _backend[i + 1]; - itemToAdd = new Tuple(_backend[i].Item1, _backend[i + 1].Item2); - } - else - itemToAdd = new Tuple(_backend[i].Item1, item); - - break; - } - - if(itemToAdd != null) - { - _backend.Remove(removeOne); - _backend.Remove(removeTwo); - _backend.Add(itemToAdd); - } - else - _backend.Add(new Tuple(item, item)); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - } - - /// Adds a new extent - /// First element of the extent - /// - /// Last element of the extent or if is true how many elements the extent runs - /// for - /// - /// If set to true, indicates how many elements the extent runs for - public void Add(long start, long end, bool run = false) - { - long realEnd; - - if(run) - realEnd = start + end - 1; - else - realEnd = end; - - // TODO: Optimize this - for(long t = start; t <= realEnd; t++) - Add(t); - } - - /// Checks if the specified item is contained by an extent on this instance - /// Item to search for - /// true if any of the extents on this instance contains the item - public bool Contains(long item) => _backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); - - /// Removes all extents from this instance - public void Clear() => _backend.Clear(); - - /// Removes an item from the extents in this instance - /// Item to remove - /// true if the item was contained in a known extent and removed, false otherwise - public bool Remove(long item) - { - Tuple toRemove = null; - Tuple toAddOne = null; - Tuple toAddTwo = null; - - foreach(Tuple extent in _backend) - { - // Extent is contained and not a border - if(item > extent.Item1 && - item < extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, item - 1); - toAddTwo = new Tuple(item + 1, extent.Item2); - - break; - } - - // Extent is left border, but not only element - if(item == extent.Item1 && - item != extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(item + 1, extent.Item2); - - break; - } - - // Extent is right border, but not only element - if(item != extent.Item1 && - item == extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, item - 1); - - break; - } - - // Extent is only element - if(item != extent.Item1 || - item != extent.Item2) - continue; - - toRemove = extent; - - break; - } - - // Item not found - if(toRemove == null) - return false; - - _backend.Remove(toRemove); - - if(toAddOne != null) - _backend.Add(toAddOne); - - if(toAddTwo != null) - _backend.Add(toAddTwo); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - - return true; - } - - /// - /// Converts the list of extents to an array of where T1 is first element of the extent and - /// T2 is last element - /// - /// Array of - public Tuple[] ToArray() => _backend.ToArray(); - - /// Gets the first element of the extent that contains the specified item - /// Item - /// First element of extent - /// true if item was found in an extent, false otherwise - public bool GetStart(long item, out long start) - { - start = 0; - - foreach(Tuple extent in _backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) - { - start = extent.Item1; - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsSByte.cs b/Aaru.CommonTypes/Extents/ExtentsSByte.cs deleted file mode 100644 index 8ed44c5..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsSByte.cs +++ /dev/null @@ -1,255 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsSByte.cs -// Author(s) : Natalia Portillo -// -// Component : Extent helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides extents for sbyte types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Aaru.CommonTypes.Extents -{ - /// Implements extents for - public class ExtentsSByte - { - List> _backend; - - /// Initialize an empty list of extents - public ExtentsSByte() => _backend = new List>(); - - /// Initializes extents with an specific list - /// List of extents as tuples "start, end" - public ExtentsSByte(IEnumerable> list) - { - _backend = new List>(); - - // This ensure no overlapping extents are added on creation - foreach(Tuple t in list) - Add(t.Item1, t.Item2); - } - - /// Gets a count of how many extents are stored - public int Count => _backend.Count; - - /// Adds the specified number to the corresponding extent, or creates a new one - /// - public void Add(sbyte item) - { - Tuple removeOne = null; - Tuple removeTwo = null; - Tuple itemToAdd = null; - - for(int i = 0; i < _backend.Count; i++) - { - // Already contained in an extent - if(item >= _backend[i].Item1 && - item <= _backend[i].Item2) - return; - - // Expands existing extent start - if(item == _backend[i].Item1 - 1) - { - removeOne = _backend[i]; - - if(i > 0 && - item == _backend[i - 1].Item2 + 1) - { - removeTwo = _backend[i - 1]; - itemToAdd = new Tuple(_backend[i - 1].Item1, _backend[i].Item2); - } - else - itemToAdd = new Tuple(item, _backend[i].Item2); - - break; - } - - // Expands existing extent end - if(item != _backend[i].Item2 + 1) - continue; - - removeOne = _backend[i]; - - if(i < _backend.Count - 1 && - item == _backend[i + 1].Item1 - 1) - { - removeTwo = _backend[i + 1]; - itemToAdd = new Tuple(_backend[i].Item1, _backend[i + 1].Item2); - } - else - itemToAdd = new Tuple(_backend[i].Item1, item); - - break; - } - - if(itemToAdd != null) - { - _backend.Remove(removeOne); - _backend.Remove(removeTwo); - _backend.Add(itemToAdd); - } - else - _backend.Add(new Tuple(item, item)); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - } - - /// Adds a new extent - /// First element of the extent - /// - /// Last element of the extent or if is true how many elements the extent runs - /// for - /// - /// If set to true, indicates how many elements the extent runs for - public void Add(sbyte start, sbyte end, bool run = false) - { - sbyte realEnd; - - if(run) - realEnd = (sbyte)(start + end - 1); - else - realEnd = end; - - // TODO: Optimize this - for(sbyte t = start; t <= realEnd; t++) - Add(t); - } - - /// Checks if the specified item is contained by an extent on this instance - /// Item to search for - /// true if any of the extents on this instance contains the item - public bool Contains(sbyte item) => _backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); - - /// Removes all extents from this instance - public void Clear() => _backend.Clear(); - - /// Removes an item from the extents in this instance - /// Item to remove - /// true if the item was contained in a known extent and removed, false otherwise - public bool Remove(sbyte item) - { - Tuple toRemove = null; - Tuple toAddOne = null; - Tuple toAddTwo = null; - - foreach(Tuple extent in _backend) - { - // Extent is contained and not a border - if(item > extent.Item1 && - item < extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, (sbyte)(item - 1)); - toAddTwo = new Tuple((sbyte)(item + 1), extent.Item2); - - break; - } - - // Extent is left border, but not only element - if(item == extent.Item1 && - item != extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple((sbyte)(item + 1), extent.Item2); - - break; - } - - // Extent is right border, but not only element - if(item != extent.Item1 && - item == extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, (sbyte)(item - 1)); - - break; - } - - // Extent is only element - if(item != extent.Item1 || - item != extent.Item2) - continue; - - toRemove = extent; - - break; - } - - // Item not found - if(toRemove == null) - return false; - - _backend.Remove(toRemove); - - if(toAddOne != null) - _backend.Add(toAddOne); - - if(toAddTwo != null) - _backend.Add(toAddTwo); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - - return true; - } - - /// - /// Converts the list of extents to an array of where T1 is first element of the extent and - /// T2 is last element - /// - /// Array of - public Tuple[] ToArray() => _backend.ToArray(); - - /// Gets the first element of the extent that contains the specified item - /// Item - /// First element of extent - /// true if item was found in an extent, false otherwise - public bool GetStart(sbyte item, out sbyte start) - { - start = 0; - - foreach(Tuple extent in - _backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) - { - start = extent.Item1; - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsShort.cs b/Aaru.CommonTypes/Extents/ExtentsShort.cs deleted file mode 100644 index 869f9dd..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsShort.cs +++ /dev/null @@ -1,255 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsShort.cs -// Author(s) : Natalia Portillo -// -// Component : Extent helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides extents for short types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Aaru.CommonTypes.Extents -{ - /// Implements extents for - public class ExtentsShort - { - List> _backend; - - /// Initialize an empty list of extents - public ExtentsShort() => _backend = new List>(); - - /// Initializes extents with an specific list - /// List of extents as tuples "start, end" - public ExtentsShort(IEnumerable> list) - { - _backend = new List>(); - - // This ensure no overlapping extents are added on creation - foreach(Tuple t in list) - Add(t.Item1, t.Item2); - } - - /// Gets a count of how many extents are stored - public int Count => _backend.Count; - - /// Adds the specified number to the corresponding extent, or creates a new one - /// - public void Add(short item) - { - Tuple removeOne = null; - Tuple removeTwo = null; - Tuple itemToAdd = null; - - for(int i = 0; i < _backend.Count; i++) - { - // Already contained in an extent - if(item >= _backend[i].Item1 && - item <= _backend[i].Item2) - return; - - // Expands existing extent start - if(item == _backend[i].Item1 - 1) - { - removeOne = _backend[i]; - - if(i > 0 && - item == _backend[i - 1].Item2 + 1) - { - removeTwo = _backend[i - 1]; - itemToAdd = new Tuple(_backend[i - 1].Item1, _backend[i].Item2); - } - else - itemToAdd = new Tuple(item, _backend[i].Item2); - - break; - } - - // Expands existing extent end - if(item != _backend[i].Item2 + 1) - continue; - - removeOne = _backend[i]; - - if(i < _backend.Count - 1 && - item == _backend[i + 1].Item1 - 1) - { - removeTwo = _backend[i + 1]; - itemToAdd = new Tuple(_backend[i].Item1, _backend[i + 1].Item2); - } - else - itemToAdd = new Tuple(_backend[i].Item1, item); - - break; - } - - if(itemToAdd != null) - { - _backend.Remove(removeOne); - _backend.Remove(removeTwo); - _backend.Add(itemToAdd); - } - else - _backend.Add(new Tuple(item, item)); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - } - - /// Adds a new extent - /// First element of the extent - /// - /// Last element of the extent or if is true how many elements the extent runs - /// for - /// - /// If set to true, indicates how many elements the extent runs for - public void Add(short start, short end, bool run = false) - { - short realEnd; - - if(run) - realEnd = (short)(start + end - 1); - else - realEnd = end; - - // TODO: Optimize this - for(short t = start; t <= realEnd; t++) - Add(t); - } - - /// Checks if the specified item is contained by an extent on this instance - /// Item to search for - /// true if any of the extents on this instance contains the item - public bool Contains(short item) => _backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); - - /// Removes all extents from this instance - public void Clear() => _backend.Clear(); - - /// Removes an item from the extents in this instance - /// Item to remove - /// true if the item was contained in a known extent and removed, false otherwise - public bool Remove(short item) - { - Tuple toRemove = null; - Tuple toAddOne = null; - Tuple toAddTwo = null; - - foreach(Tuple extent in _backend) - { - // Extent is contained and not a border - if(item > extent.Item1 && - item < extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, (short)(item - 1)); - toAddTwo = new Tuple((short)(item + 1), extent.Item2); - - break; - } - - // Extent is left border, but not only element - if(item == extent.Item1 && - item != extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple((short)(item + 1), extent.Item2); - - break; - } - - // Extent is right border, but not only element - if(item != extent.Item1 && - item == extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, (short)(item - 1)); - - break; - } - - // Extent is only element - if(item != extent.Item1 || - item != extent.Item2) - continue; - - toRemove = extent; - - break; - } - - // Item not found - if(toRemove == null) - return false; - - _backend.Remove(toRemove); - - if(toAddOne != null) - _backend.Add(toAddOne); - - if(toAddTwo != null) - _backend.Add(toAddTwo); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - - return true; - } - - /// - /// Converts the list of extents to an array of where T1 is first element of the extent and - /// T2 is last element - /// - /// Array of - public Tuple[] ToArray() => _backend.ToArray(); - - /// Gets the first element of the extent that contains the specified item - /// Item - /// First element of extent - /// true if item was found in an extent, false otherwise - public bool GetStart(short item, out short start) - { - start = 0; - - foreach(Tuple extent in - _backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) - { - start = extent.Item1; - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsUInt.cs b/Aaru.CommonTypes/Extents/ExtentsUInt.cs deleted file mode 100644 index 4afaec5..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsUInt.cs +++ /dev/null @@ -1,254 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsUInt.cs -// Author(s) : Natalia Portillo -// -// Component : Extent helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides extents for uint types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Aaru.CommonTypes.Extents -{ - /// Implements extents for - public class ExtentsUInt - { - List> _backend; - - /// Initialize an empty list of extents - public ExtentsUInt() => _backend = new List>(); - - /// Initializes extents with an specific list - /// List of extents as tuples "start, end" - public ExtentsUInt(IEnumerable> list) - { - _backend = new List>(); - - // This ensure no overlapping extents are added on creation - foreach(Tuple t in list) - Add(t.Item1, t.Item2); - } - - /// Gets a count of how many extents are stored - public int Count => _backend.Count; - - /// Adds the specified number to the corresponding extent, or creates a new one - /// - public void Add(uint item) - { - Tuple removeOne = null; - Tuple removeTwo = null; - Tuple itemToAdd = null; - - for(int i = 0; i < _backend.Count; i++) - { - // Already contained in an extent - if(item >= _backend[i].Item1 && - item <= _backend[i].Item2) - return; - - // Expands existing extent start - if(item == _backend[i].Item1 - 1) - { - removeOne = _backend[i]; - - if(i > 0 && - item == _backend[i - 1].Item2 + 1) - { - removeTwo = _backend[i - 1]; - itemToAdd = new Tuple(_backend[i - 1].Item1, _backend[i].Item2); - } - else - itemToAdd = new Tuple(item, _backend[i].Item2); - - break; - } - - // Expands existing extent end - if(item != _backend[i].Item2 + 1) - continue; - - removeOne = _backend[i]; - - if(i < _backend.Count - 1 && - item == _backend[i + 1].Item1 - 1) - { - removeTwo = _backend[i + 1]; - itemToAdd = new Tuple(_backend[i].Item1, _backend[i + 1].Item2); - } - else - itemToAdd = new Tuple(_backend[i].Item1, item); - - break; - } - - if(itemToAdd != null) - { - _backend.Remove(removeOne); - _backend.Remove(removeTwo); - _backend.Add(itemToAdd); - } - else - _backend.Add(new Tuple(item, item)); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - } - - /// Adds a new extent - /// First element of the extent - /// - /// Last element of the extent or if is true how many elements the extent runs - /// for - /// - /// If set to true, indicates how many elements the extent runs for - public void Add(uint start, uint end, bool run = false) - { - uint realEnd; - - if(run) - realEnd = start + end - 1; - else - realEnd = end; - - // TODO: Optimize this - for(uint t = start; t <= realEnd; t++) - Add(t); - } - - /// Checks if the specified item is contained by an extent on this instance - /// Item to search for - /// true if any of the extents on this instance contains the item - public bool Contains(uint item) => _backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); - - /// Removes all extents from this instance - public void Clear() => _backend.Clear(); - - /// Removes an item from the extents in this instance - /// Item to remove - /// true if the item was contained in a known extent and removed, false otherwise - public bool Remove(uint item) - { - Tuple toRemove = null; - Tuple toAddOne = null; - Tuple toAddTwo = null; - - foreach(Tuple extent in _backend) - { - // Extent is contained and not a border - if(item > extent.Item1 && - item < extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, item - 1); - toAddTwo = new Tuple(item + 1, extent.Item2); - - break; - } - - // Extent is left border, but not only element - if(item == extent.Item1 && - item != extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(item + 1, extent.Item2); - - break; - } - - // Extent is right border, but not only element - if(item != extent.Item1 && - item == extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, item - 1); - - break; - } - - // Extent is only element - if(item != extent.Item1 || - item != extent.Item2) - continue; - - toRemove = extent; - - break; - } - - // Item not found - if(toRemove == null) - return false; - - _backend.Remove(toRemove); - - if(toAddOne != null) - _backend.Add(toAddOne); - - if(toAddTwo != null) - _backend.Add(toAddTwo); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - - return true; - } - - /// - /// Converts the list of extents to an array of where T1 is first element of the extent and - /// T2 is last element - /// - /// Array of - public Tuple[] ToArray() => _backend.ToArray(); - - /// Gets the first element of the extent that contains the specified item - /// Item - /// First element of extent - /// true if item was found in an extent, false otherwise - public bool GetStart(uint item, out uint start) - { - start = 0; - - foreach(Tuple extent in _backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) - { - start = extent.Item1; - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsULong.cs b/Aaru.CommonTypes/Extents/ExtentsULong.cs deleted file mode 100644 index 07af92b..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsULong.cs +++ /dev/null @@ -1,255 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsULong.cs -// Author(s) : Natalia Portillo -// -// Component : Extent helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides extents for ulong types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Aaru.CommonTypes.Extents -{ - /// Implements extents for - public class ExtentsULong - { - List> _backend; - - /// Initialize an empty list of extents - public ExtentsULong() => _backend = new List>(); - - /// Initializes extents with an specific list - /// List of extents as tuples "start, end" - public ExtentsULong(IEnumerable> list) - { - _backend = new List>(); - - // This ensure no overlapping extents are added on creation - foreach(Tuple t in list) - Add(t.Item1, t.Item2); - } - - /// Gets a count of how many extents are stored - public int Count => _backend.Count; - - /// Adds the specified number to the corresponding extent, or creates a new one - /// - public void Add(ulong item) - { - Tuple removeOne = null; - Tuple removeTwo = null; - Tuple itemToAdd = null; - - for(int i = 0; i < _backend.Count; i++) - { - // Already contained in an extent - if(item >= _backend[i].Item1 && - item <= _backend[i].Item2) - return; - - // Expands existing extent start - if(item == _backend[i].Item1 - 1) - { - removeOne = _backend[i]; - - if(i > 0 && - item == _backend[i - 1].Item2 + 1) - { - removeTwo = _backend[i - 1]; - itemToAdd = new Tuple(_backend[i - 1].Item1, _backend[i].Item2); - } - else - itemToAdd = new Tuple(item, _backend[i].Item2); - - break; - } - - // Expands existing extent end - if(item != _backend[i].Item2 + 1) - continue; - - removeOne = _backend[i]; - - if(i < _backend.Count - 1 && - item == _backend[i + 1].Item1 - 1) - { - removeTwo = _backend[i + 1]; - itemToAdd = new Tuple(_backend[i].Item1, _backend[i + 1].Item2); - } - else - itemToAdd = new Tuple(_backend[i].Item1, item); - - break; - } - - if(itemToAdd != null) - { - _backend.Remove(removeOne); - _backend.Remove(removeTwo); - _backend.Add(itemToAdd); - } - else - _backend.Add(new Tuple(item, item)); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - } - - /// Adds a new extent - /// First element of the extent - /// - /// Last element of the extent or if is true how many elements the extent runs - /// for - /// - /// If set to true, indicates how many elements the extent runs for - public void Add(ulong start, ulong end, bool run = false) - { - ulong realEnd; - - if(run) - realEnd = start + end - 1; - else - realEnd = end; - - // TODO: Optimize this - for(ulong t = start; t <= realEnd; t++) - Add(t); - } - - /// Checks if the specified item is contained by an extent on this instance - /// Item to search for - /// true if any of the extents on this instance contains the item - public bool Contains(ulong item) => _backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); - - /// Removes all extents from this instance - public void Clear() => _backend.Clear(); - - /// Removes an item from the extents in this instance - /// Item to remove - /// true if the item was contained in a known extent and removed, false otherwise - public bool Remove(ulong item) - { - Tuple toRemove = null; - Tuple toAddOne = null; - Tuple toAddTwo = null; - - foreach(Tuple extent in _backend) - { - // Extent is contained and not a border - if(item > extent.Item1 && - item < extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, item - 1); - toAddTwo = new Tuple(item + 1, extent.Item2); - - break; - } - - // Extent is left border, but not only element - if(item == extent.Item1 && - item != extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(item + 1, extent.Item2); - - break; - } - - // Extent is right border, but not only element - if(item != extent.Item1 && - item == extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, item - 1); - - break; - } - - // Extent is only element - if(item != extent.Item1 || - item != extent.Item2) - continue; - - toRemove = extent; - - break; - } - - // Item not found - if(toRemove == null) - return false; - - _backend.Remove(toRemove); - - if(toAddOne != null) - _backend.Add(toAddOne); - - if(toAddTwo != null) - _backend.Add(toAddTwo); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - - return true; - } - - /// - /// Converts the list of extents to an array of where T1 is first element of the extent and - /// T2 is last element - /// - /// Array of - public Tuple[] ToArray() => _backend.ToArray(); - - /// Gets the first element of the extent that contains the specified item - /// Item - /// First element of extent - /// true if item was found in an extent, false otherwise - public bool GetStart(ulong item, out ulong start) - { - start = 0; - - foreach(Tuple extent in - _backend.Where(extent => item >= extent.Item1 && item <= extent.Item2)) - { - start = extent.Item1; - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Extents/ExtentsUShort.cs b/Aaru.CommonTypes/Extents/ExtentsUShort.cs deleted file mode 100644 index 103c8bd..0000000 --- a/Aaru.CommonTypes/Extents/ExtentsUShort.cs +++ /dev/null @@ -1,255 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ExtentsUShort.cs -// Author(s) : Natalia Portillo -// -// Component : Extent helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides extents for ushort types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Aaru.CommonTypes.Extents -{ - /// Implements extents for - public class ExtentsUShort - { - List> _backend; - - /// Initialize an empty list of extents - public ExtentsUShort() => _backend = new List>(); - - /// Initializes extents with an specific list - /// List of extents as tuples "start, end" - public ExtentsUShort(IEnumerable> list) - { - _backend = new List>(); - - // This ensure no overlapping extents are added on creation - foreach(Tuple t in list) - Add(t.Item1, t.Item2); - } - - /// Gets a count of how many extents are stored - public int Count => _backend.Count; - - /// Adds the specified number to the corresponding extent, or creates a new one - /// - public void Add(ushort item) - { - Tuple removeOne = null; - Tuple removeTwo = null; - Tuple itemToAdd = null; - - for(int i = 0; i < _backend.Count; i++) - { - // Already contained in an extent - if(item >= _backend[i].Item1 && - item <= _backend[i].Item2) - return; - - // Expands existing extent start - if(item == _backend[i].Item1 - 1) - { - removeOne = _backend[i]; - - if(i > 0 && - item == _backend[i - 1].Item2 + 1) - { - removeTwo = _backend[i - 1]; - itemToAdd = new Tuple(_backend[i - 1].Item1, _backend[i].Item2); - } - else - itemToAdd = new Tuple(item, _backend[i].Item2); - - break; - } - - // Expands existing extent end - if(item != _backend[i].Item2 + 1) - continue; - - removeOne = _backend[i]; - - if(i < _backend.Count - 1 && - item == _backend[i + 1].Item1 - 1) - { - removeTwo = _backend[i + 1]; - itemToAdd = new Tuple(_backend[i].Item1, _backend[i + 1].Item2); - } - else - itemToAdd = new Tuple(_backend[i].Item1, item); - - break; - } - - if(itemToAdd != null) - { - _backend.Remove(removeOne); - _backend.Remove(removeTwo); - _backend.Add(itemToAdd); - } - else - _backend.Add(new Tuple(item, item)); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - } - - /// Adds a new extent - /// First element of the extent - /// - /// Last element of the extent or if is true how many elements the extent runs - /// for - /// - /// If set to true, indicates how many elements the extent runs for - public void Add(ushort start, ushort end, bool run = false) - { - ushort realEnd; - - if(run) - realEnd = (ushort)(start + end - 1); - else - realEnd = end; - - // TODO: Optimize this - for(ushort t = start; t <= realEnd; t++) - Add(t); - } - - /// Checks if the specified item is contained by an extent on this instance - /// Item to search for - /// true if any of the extents on this instance contains the item - public bool Contains(ushort item) => _backend.Any(extent => item >= extent.Item1 && item <= extent.Item2); - - /// Removes all extents from this instance - public void Clear() => _backend.Clear(); - - /// Removes an item from the extents in this instance - /// Item to remove - /// true if the item was contained in a known extent and removed, false otherwise - public bool Remove(ushort item) - { - Tuple toRemove = null; - Tuple toAddOne = null; - Tuple toAddTwo = null; - - foreach(Tuple extent in _backend) - { - // Extent is contained and not a border - if(item > extent.Item1 && - item < extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, (ushort)(item - 1)); - toAddTwo = new Tuple((ushort)(item + 1), extent.Item2); - - break; - } - - // Extent is left border, but not only element - if(item == extent.Item1 && - item != extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple((ushort)(item + 1), extent.Item2); - - break; - } - - // Extent is right border, but not only element - if(item != extent.Item1 && - item == extent.Item2) - { - toRemove = extent; - toAddOne = new Tuple(extent.Item1, (ushort)(item - 1)); - - break; - } - - // Extent is only element - if(item != extent.Item1 || - item != extent.Item2) - continue; - - toRemove = extent; - - break; - } - - // Item not found - if(toRemove == null) - return false; - - _backend.Remove(toRemove); - - if(toAddOne != null) - _backend.Add(toAddOne); - - if(toAddTwo != null) - _backend.Add(toAddTwo); - - // Sort - _backend = _backend.OrderBy(t => t.Item1).ToList(); - - return true; - } - - /// - /// Converts the list of extents to an array of where T1 is first element of the extent and - /// T2 is last element - /// - /// Array of - public Tuple[] ToArray() => _backend.ToArray(); - - /// Gets the first element of the extent that contains the specified item - /// Item - /// First element of extent - /// true if item was found in an extent, false otherwise - public bool GetStart(ushort item, out ushort start) - { - start = 0; - - foreach(Tuple extent in _backend.Where(extent => item >= extent.Item1 && - item <= extent.Item2)) - { - start = extent.Item1; - - return true; - } - - return false; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Filters.cs b/Aaru.CommonTypes/Filters.cs deleted file mode 100644 index 47c2744..0000000 --- a/Aaru.CommonTypes/Filters.cs +++ /dev/null @@ -1,117 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Filters.cs -// Author(s) : Natalia Portillo -// -// Component : Filters. -// -// --[ Description ] ---------------------------------------------------------- -// -// Enumerates all filters and instantiates the correct one. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Interfaces; -using Aaru.Console; - -namespace Aaru.CommonTypes -{ - /// Manages the known filters - public sealed class FiltersList - { - /// List of known filters - public readonly SortedDictionary Filters; - - /// Fills the list of all known filters - public FiltersList() - { - var assembly = Assembly.Load("Aaru.Filters"); - Filters = new SortedDictionary(); - - foreach(Type type in assembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IFilter)))) - try - { - var filter = (IFilter)type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}); - - if(filter != null && - !Filters.ContainsKey(filter.Name.ToLower())) - Filters.Add(filter.Name.ToLower(), filter); - } - catch(Exception exception) - { - AaruConsole.ErrorWriteLine("Exception {0}", exception); - } - } - - /// Gets the filter that allows to read the specified path - /// Path - /// The filter that allows reading the specified path - public IFilter GetFilter(string path) - { - IFilter noFilter = null; - - foreach(IFilter filter in Filters.Values) - { - try - { - if(filter.Id != new Guid("12345678-AAAA-BBBB-CCCC-123456789000")) - { - if(!filter.Identify(path)) - continue; - - var foundFilter = (IFilter)filter.GetType().GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}); - - if(foundFilter?.Open(path) == ErrorNumber.NoError) - return foundFilter; - } - else - noFilter = filter; - } - catch(IOException) - { - // Ignore and continue - } - } - - if(!noFilter?.Identify(path) == true) - return null; - - noFilter?.Open(path); - - return noFilter; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Geometry.cs b/Aaru.CommonTypes/Geometry.cs deleted file mode 100644 index bfc8bf8..0000000 --- a/Aaru.CommonTypes/Geometry.cs +++ /dev/null @@ -1,143 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Geometry.cs -// Author(s) : Natalia Portillo -// -// Component : CommonTypes. -// -// --[ Description ] ---------------------------------------------------------- -// -// Includes geometry for several medias. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Linq; - -namespace Aaru.CommonTypes -{ - /// Handles CHS geometries - public static class Geometry - { - /// List of known disk geometries - public static readonly (ushort cylinders, byte heads, ushort sectorsPerTrack, uint bytesPerSector, MediaEncoding - encoding, bool variableSectorsPerTrack, MediaType type)[] KnownGeometries = - { - (32, 1, 8, 319, MediaEncoding.FM, false, MediaType.IBM23FD), - (35, 1, 9, 256, MediaEncoding.FM, false, MediaType.ECMA_66), - (35, 1, 13, 256, MediaEncoding.AppleGCR, false, MediaType.Apple32SS), - (35, 1, 16, 256, MediaEncoding.AppleGCR, false, MediaType.Apple33SS), - (35, 1, 19, 256, MediaEncoding.CommodoreGCR, false, MediaType.CBM_1540), - (35, 2, 13, 256, MediaEncoding.AppleGCR, false, MediaType.Apple32DS), - (35, 2, 16, 256, MediaEncoding.AppleGCR, false, MediaType.Apple33DS), - (35, 2, 19, 256, MediaEncoding.CommodoreGCR, false, MediaType.CBM_1571), - (40, 1, 8, 512, MediaEncoding.MFM, false, MediaType.DOS_525_SS_DD_8), - (40, 1, 9, 512, MediaEncoding.MFM, false, MediaType.DOS_525_SS_DD_9), - (40, 1, 10, 256, MediaEncoding.FM, false, MediaType.ACORN_525_SS_SD_40), - (40, 1, 16, 256, MediaEncoding.MFM, false, MediaType.ACORN_525_SS_DD_40), - (40, 1, 18, 128, MediaEncoding.FM, false, MediaType.ATARI_525_SD), - (40, 1, 18, 256, MediaEncoding.MFM, false, MediaType.ATARI_525_DD), - (40, 1, 19, 256, MediaEncoding.CommodoreGCR, false, MediaType.CBM_1540_Ext), - (40, 1, 26, 128, MediaEncoding.MFM, false, MediaType.ATARI_525_ED), - (40, 2, 8, 512, MediaEncoding.MFM, false, MediaType.DOS_525_DS_DD_8), - (40, 2, 9, 512, MediaEncoding.MFM, false, MediaType.DOS_525_DS_DD_9), - (40, 2, 16, 256, MediaEncoding.FM, false, MediaType.ECMA_70), - (70, 2, 9, 512, MediaEncoding.MFM, false, MediaType.Apricot_35), - (74, 1, 8, 512, MediaEncoding.FM, false, MediaType.IBM33FD_512), - (74, 1, 15, 256, MediaEncoding.FM, false, MediaType.IBM33FD_256), - (74, 1, 26, 128, MediaEncoding.FM, false, MediaType.IBM33FD_128), - (74, 2, 8, 1024, MediaEncoding.MFM, false, MediaType.IBM53FD_1024), - (74, 2, 15, 256, MediaEncoding.FM, false, MediaType.IBM43FD_256), - (74, 2, 15, 512, MediaEncoding.MFM, false, MediaType.IBM53FD_512), - (74, 2, 26, 128, MediaEncoding.FM, false, MediaType.IBM43FD_128), - (74, 2, 26, 256, MediaEncoding.MFM, false, MediaType.IBM53FD_256), - (77, 1, 26, 128, MediaEncoding.FM, false, MediaType.RX01), - (77, 1, 26, 256, MediaEncoding.MFM, false, MediaType.RX02), - (77, 2, 8, 1024, MediaEncoding.MFM, false, MediaType.NEC_525_HD), - (77, 2, 15, 512, MediaEncoding.MFM, false, MediaType.ECMA_99_15), - (77, 2, 26, 128, MediaEncoding.FM, false, MediaType.NEC_8_SD), - (77, 2, 26, 256, MediaEncoding.MFM, false, MediaType.RX03), - (80, 1, 8, 512, MediaEncoding.MFM, false, MediaType.DOS_35_SS_DD_8), - (80, 1, 9, 512, MediaEncoding.MFM, false, MediaType.DOS_35_SS_DD_9), - (80, 1, 10, 256, MediaEncoding.FM, false, MediaType.ACORN_525_SS_SD_80), - (80, 1, 10, 512, MediaEncoding.AppleGCR, true, MediaType.AppleSonySS), - (80, 1, 10, 512, MediaEncoding.MFM, false, MediaType.RX50), - (80, 1, 11, 512, MediaEncoding.MFM, false, MediaType.ATARI_35_SS_DD_11), - (80, 1, 16, 256, MediaEncoding.MFM, false, MediaType.ACORN_525_SS_DD_80), - (80, 2, 5, 1024, MediaEncoding.MFM, false, MediaType.ACORN_35_DS_DD), - (80, 2, 8, 512, MediaEncoding.MFM, false, MediaType.DOS_35_DS_DD_8), - (80, 2, 9, 512, MediaEncoding.MFM, false, MediaType.DOS_35_DS_DD_9), - (80, 2, 10, 512, MediaEncoding.AppleGCR, true, MediaType.AppleSonyDS), - (80, 2, 10, 512, MediaEncoding.MFM, false, MediaType.CBM_35_DD), - (80, 2, 10, 1024, MediaEncoding.MFM, false, MediaType.ACORN_35_DS_HD), - (80, 2, 11, 512, MediaEncoding.MFM, false, MediaType.CBM_AMIGA_35_DD), - (80, 2, 15, 512, MediaEncoding.MFM, false, MediaType.DOS_525_HD), - (80, 2, 16, 256, MediaEncoding.FM, false, MediaType.ECMA_78), - (80, 2, 16, 256, MediaEncoding.MFM, false, MediaType.ACORN_525_DS_DD), - (80, 2, 18, 512, MediaEncoding.MFM, false, MediaType.DOS_35_HD), - (80, 2, 19, 512, MediaEncoding.MFM, false, MediaType.XDF_525), - (80, 2, 21, 512, MediaEncoding.MFM, false, MediaType.DMF), - (80, 2, 22, 512, MediaEncoding.MFM, false, MediaType.CBM_AMIGA_35_HD), - (80, 2, 23, 512, MediaEncoding.MFM, false, MediaType.XDF_35), - (80, 2, 36, 512, MediaEncoding.MFM, false, MediaType.DOS_35_ED), - (82, 2, 10, 512, MediaEncoding.MFM, false, MediaType.FDFORMAT_35_DD), - (82, 2, 17, 512, MediaEncoding.MFM, false, MediaType.FDFORMAT_525_HD), - (82, 2, 21, 512, MediaEncoding.MFM, false, MediaType.FDFORMAT_35_HD), - (240, 2, 38, 512, MediaEncoding.MFM, false, MediaType.NEC_35_TD), - (753, 2, 27, 512, MediaEncoding.MFM, false, MediaType.Floptical), - - // Following ones are what the device itself report, not the physical geometry - (154, 16, 32, 512, MediaEncoding.MFM, false, MediaType.PocketZip), - (262, 32, 56, 512, MediaEncoding.MFM, false, MediaType.LS240), - (963, 8, 32, 512, MediaEncoding.MFM, false, MediaType.LS120), - (1021, 64, 32, 512, MediaEncoding.MFM, false, MediaType.Jaz), - (1024, 2, 32, 512, MediaEncoding.MFM, false, MediaType.FD32MB) - }; - - /// Gets the media type for a given geometry - /// Geometry - /// Media type - public static MediaType GetMediaType( - (ushort cylinders, byte heads, ushort sectorsPerTrack, uint bytesPerSector, MediaEncoding encoding, bool - variableSectorsPerTrack) geometry) => (from geom in KnownGeometries - where geom.cylinders == geometry.cylinders && - geom.heads == geometry.heads && - geom.sectorsPerTrack == geometry.sectorsPerTrack && - geom.bytesPerSector == geometry.bytesPerSector && - geom.encoding == geometry.encoding && - geom.variableSectorsPerTrack == - geometry.variableSectorsPerTrack select geom.type). - FirstOrDefault(); - - /// Gets the geometry for a given media type - /// Media type - /// Geometry - public static (ushort cylinders, byte heads, ushort sectorsPerTrack, uint bytesPerSector, MediaEncoding encoding - , bool variableSectorsPerTrack, MediaType type) GetGeometry(MediaType mediaType) => - (from geom in KnownGeometries where geom.type == mediaType select geom).FirstOrDefault(); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IArchive.cs b/Aaru.CommonTypes/Interfaces/IArchive.cs deleted file mode 100644 index ebbb719..0000000 --- a/Aaru.CommonTypes/Interfaces/IArchive.cs +++ /dev/null @@ -1,203 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IArchive.cs -// Author(s) : Michael Drüing -// -// Component : Archives. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface for implementing archive plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2018-2019 Michael Drüing -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.IO; -using Aaru.CommonTypes.Enums; - -// ReSharper disable UnusedMember.Global - -namespace Aaru.CommonTypes.Interfaces -{ - /// Supported archive features - [Flags] - public enum ArchiveSupportedFeature : uint - { - /// The archive supports filenames for its entries. If this flag is not set, files can only be accessed by number. - SupportsFilenames = 1 << 0, - /// - /// The archive supports compression. If this flag is not set, compressed and uncompressed lengths are always the - /// same. - /// - SupportsCompression = 1 << 1, - /// - /// The archive supports subdirectories. If this flag is not set, all filenames are guaranteed to not contain any - /// "/" character. - /// - SupportsSubdirectories = 1 << 2, - /// - /// The archive supports explicit entries for directories (like Zip, for example). If this flag is not set, - /// directories are implicit by the relative name of the files. - /// - HasExplicitDirectories = 1 << 3, - /// The archive stores a timestamp with each entry if this flag is set. - HasEntryTimestamp = 1 << 4, - /// If this flag is set, individual files or the whole archive might be encrypted or password-protected. - SupportsProtection = 1 << 5, // TODO: not implemented yet - - /// If this flag is set, the archive supports returning extended attributes (Xattrs) for each entry. - SupportsXAttrs = 1 << 6 - } - - /// Defines the interface to handle an archive (e.g. ZIP, WAD, etc) - public interface IArchive - { - /// Descriptive name of the plugin - string Name { get; } - - /// Unique UUID of the plugin - Guid Id { get; } - - /// Identifies if the specified path contains data recognizable by this archive instance - /// Path. - bool Identify(string path); - - /// Identifies if the specified stream contains data recognizable by this archive instance - /// Stream. - bool Identify(Stream stream); - - /// Identifies if the specified buffer contains data recognizable by this archive instance - /// Buffer. - bool Identify(byte[] buffer); - - /// Opens the specified path with this archive instance - /// Path. - ErrorNumber Open(string path); - - /// Opens the specified stream with this archive instance - /// Stream. - ErrorNumber Open(Stream stream); - - /// Opens the specified buffer with this archive instance - /// Buffer. - ErrorNumber Open(byte[] buffer); - - /// - /// Returns true if the archive has a file/stream/buffer currently opened and no - /// has been issued. - /// - bool IsOpened(); - - /// Closes all opened streams. - void Close(); - - /// Return a bitfield indicating the features supported by this archive type. - /// The ArchiveSupportedFeature bitfield. - /// - /// This should be a constant, tied to the archive type, not to the particular features used by the - /// currently-opened archive file. - /// - ArchiveSupportedFeature GetArchiveFeatures(); - - /// Gets the number of entries (i.e. files) that are contained in this archive. - /// - /// Entries in this context can also mean directories or volume labels, for some types of archives that store - /// these explicitly. Do not rely on all entries being regular files! - /// - /// The number of files. - int GetNumberOfEntries(); - - /// Gets the file name (and path) of the given entry in the archive. - /// - /// The path components are separated by a forward slash "/".
The path should not start with a leading - /// slash (i.e. it should be relative, not absolute). - ///
- /// - /// The entry in the archive for which to return the file name. - /// The file name, with (relative) path - string GetFilename(int entryNumber); - - /// - /// Gets the entry number for a particular file path in the archive. fileName is the relative path of the - /// file in the archive. If the file cannot be found, -1 is returned. - /// - /// - /// The path should be relative (no leading slash), using regular slashes as path separator, and be normalized, - /// i.e. no "foo//bar" or "foo/../bar" path components. - /// - /// The relative path for which to get the entry number. - /// If set, do a case insensitive matching and return the first file that matches. - /// The number of the entry corresponding to the given path, or -1 if the path does not exist. - int GetEntryNumber(string fileName, bool caseInsensitiveMatch); - - /// Gets the (compressed) size of the given entry. - /// The entry for which to get the compressed size. - /// The compressed size of the entry, or 0 if the entry is not a regular file. - /// The return value is equal to the return value of GetUncompressedSize() if the file is not compressed. - /// - long GetCompressedSize(int entryNumber); - - /// Gets the uncompressed size of the given entry. - /// The entry for which to get the uncompressed size. - /// The uncompressed size of the entry, or 0 if the entry is not a regular file. - /// The return value is equal to the return value of GetCompressedSize() if the file is not compressed. - /// - long GetUncompressedSize(int entryNumber); - - /// Gets the attributes of a file or directory. - /// - /// Error number. - /// The entry in the archive for which to retrieve the attributes. - /// File attributes, or zero if the archive does not support attributes. - FileAttributes GetAttributes(int entryNumber); - - /// Lists all extended attributes, alternate data streams and forks of the given file. - /// The entry in the archive for which to retrieve the list of attributes. - /// List of extended attributes, alternate data streams and forks. - List GetXAttrs(int entryNumber); - - /// Reads an extended attribute, alternate data stream or fork from the given file. - /// Error number. - /// The entry in the archive for which to retrieve the XAttr. - /// Extended attribute, alternate data stream or fork name. - /// Buffer with the XAttr data. - ErrorNumber GetXattr(int entryNumber, string xattr, out byte[] buffer); - - /// Gets information about an entry in the archive. - /// Note that some of the data might be incomplete or not available at all, depending on the type of archive. - /// - /// - /// The entry int he archive for which to get the information - /// The available information about the entry in the archive - FileSystemInfo Stat(int entryNumber); - - /// - /// Returns the Filter for the given entry. It will return null if the entry in question is not a regular - /// file (i.e. directory, volume label, etc.) - /// - /// The entry for which the Filter should be returned. - /// The Filter for the given entry. - IFilter GetEntry(int entryNumber); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IChecksum.cs b/Aaru.CommonTypes/Interfaces/IChecksum.cs deleted file mode 100644 index 2dcf130..0000000 --- a/Aaru.CommonTypes/Interfaces/IChecksum.cs +++ /dev/null @@ -1,59 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IChecksum.cs -// Author(s) : Natalia Portillo -// -// Component : Checksums. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides an interface for implementing checksums and hashes. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.CommonTypes.Interfaces -{ - /// Defines the interface to implement a checksum or hashing algorithm - public interface IChecksum - { - /// Updates the hash with data. - /// Data buffer. - /// Length of buffer to hash. - void Update(byte[] data, uint len); - - /// Updates the hash with data. - /// Data buffer. - void Update(byte[] data); - - /// Returns a byte array of the hash value. - byte[] Final(); - - /// Returns a hexadecimal representation of the hash value. - string End(); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IFilesystem.cs b/Aaru.CommonTypes/Interfaces/IFilesystem.cs deleted file mode 100644 index aebe540..0000000 --- a/Aaru.CommonTypes/Interfaces/IFilesystem.cs +++ /dev/null @@ -1,73 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IFilesystem.cs -// Author(s) : Natalia Portillo -// -// Component : Filesystem plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Interface for filesystem plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Text; -using Schemas; - -namespace Aaru.CommonTypes.Interfaces -{ - /// Interface to implement filesystem plugins. - public interface IFilesystem - { - /// Defines the encoding used to interpret strings in the filesystem - Encoding Encoding { get; } - /// Plugin name. - string Name { get; } - /// Plugin UUID. - Guid Id { get; } - /// Information about the filesystem as expected by CICM Metadata XML - /// Information about the filesystem as expected by CICM Metadata XML - FileSystemType XmlFsType { get; } - /// Plugin author - string Author { get; } - - /// Identifies the filesystem in the specified LBA - /// Disk image. - /// Partition. - /// true, if the filesystem is recognized, false otherwise. - bool Identify(IMediaImage imagePlugin, Partition partition); - - /// Gets information about the identified filesystem. - /// Disk image. - /// Partition. - /// Filesystem information. - /// Which encoding to use for this filesystem. - void GetInformation(IMediaImage imagePlugin, Partition partition, out string information, Encoding encoding); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IFilter.cs b/Aaru.CommonTypes/Interfaces/IFilter.cs deleted file mode 100644 index f75ab10..0000000 --- a/Aaru.CommonTypes/Interfaces/IFilter.cs +++ /dev/null @@ -1,147 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IFilter.cs -// Author(s) : Natalia Portillo -// -// Component : Filters. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface for a Filter. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.IO; -using Aaru.CommonTypes.Enums; - -namespace Aaru.CommonTypes.Interfaces -{ - /// - /// Defines a filter, that is, a transformation of the data from a file, like, for example, a compressor (e.g. - /// GZIP), or a container (e.g. AppleDouble) - /// - public interface IFilter - { - /// Descriptive name of the plugin - string Name { get; } - /// Unique UUID of the plugin - Guid Id { get; } - /// Plugin author - string Author { get; } - - /// - /// Gets the path used to open this filter.
UNIX: /path/to/archive.zip/path/to/file.bin => - /// /path/to/archive.zip/path/to/file.bin
Windows: C:\path\to\archive.zip\path\to\file.bin => - /// C:\path\to\archive.zip\path\to\file.bin - ///
- /// Path used to open this filter. - string BasePath { get; } - - /// Gets creation time of file referenced by this filter. - /// The creation time. - DateTime CreationTime { get; } - - /// Gets length of this filter's data fork. - /// The data fork length. - long DataForkLength { get; } - - /// - /// Gets the filename for the file referenced by this filter.
UNIX: /path/to/archive.zip/path/to/file.bin = - /// > file.bin
Windows: C:\path\to\archive.zip\path\to\file.bin => file.bin - ///
- /// The filename. - string Filename { get; } - - /// Gets last write time of file referenced by this filter. - /// The last write time. - DateTime LastWriteTime { get; } - - /// Gets length of file referenced by ths filter. - /// The length. - long Length { get; } - - /// - /// Gets full path to file referenced by this filter. If it's an archive, it's the path inside the archive.
- /// UNIX: /path/to/archive.zip/path/to/file.bin => /path/to/file.bin
Windows: - /// C:\path\to\archive.zip\path\to\file.bin => \path\to\file.bin - ///
- /// The path. - string Path { get; } - - /// - /// Gets path to parent folder to the file referenced by this filter. If it's an archive, it's the full path to - /// the archive itself.
UNIX: /path/to/archive.zip/path/to/file.bin => /path/to/archive.zip
Windows: - /// C:\path\to\archive.zip\path\to\file.bin => C:\path\to\archive.zip - ///
- /// The parent folder. - string ParentFolder { get; } - - /// Gets length of this filter's resource fork. - /// The resource fork length. - long ResourceForkLength { get; } - - /// Returns true if the file referenced by this filter has a resource fork - bool HasResourceFork { get; } - - /// Closes all opened streams. - void Close(); - - /// Gets a stream to access the data fork contents. - /// The data fork stream. - Stream GetDataForkStream(); - - /// Gets a stream to access the resource fork contents. - /// The resource fork stream. - Stream GetResourceForkStream(); - - /// Identifies if the specified path contains data recognizable by this filter instance - /// Path. - bool Identify(string path); - - /// Identifies if the specified stream contains data recognizable by this filter instance - /// Stream. - bool Identify(Stream stream); - - /// Identifies if the specified buffer contains data recognizable by this filter instance - /// Buffer. - bool Identify(byte[] buffer); - - /// Opens the specified path with this filter instance - /// Path. - ErrorNumber Open(string path); - - /// Opens the specified stream with this filter instance - /// Stream. - ErrorNumber Open(Stream stream); - - /// Opens the specified buffer with this filter instance - /// Buffer. - ErrorNumber Open(byte[] buffer); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IFloppyImage.cs b/Aaru.CommonTypes/Interfaces/IFloppyImage.cs deleted file mode 100644 index fa7a781..0000000 --- a/Aaru.CommonTypes/Interfaces/IFloppyImage.cs +++ /dev/null @@ -1,124 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IFloppyImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface to be implemented by floppy image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Structs; - -namespace Aaru.CommonTypes.Interfaces -{ - /// - /// - /// Abstract class to implement disk image reading plugins that can contain floppy images. This interface is - /// needed because floppy formatting characteristics are not necesarily compatible with the whole. LBA-oriented - /// interface is defined by . All data returned by these - /// methods is already decoded from its corresponding bitstream. - /// - public interface IFloppyImage : IMediaImage - { - /// - /// Floppy info, contains information about physical characteristics of floppy, like size, bitrate, track density, - /// etc... - /// - FloppyInfo FloppyInfo { get; } - - /// Reads a sector's user data. - /// - /// If is one of the duplicates is returned - /// randomly. If is or - /// random data is returned. If is - /// null is returned. Otherwise, whatever is in the sector is - /// returned. - /// - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - /// Logical sector ID. - /// Status of request. - ErrorNumber ReadSector(ushort track, byte head, ushort sector, out FloppySectorStatus status, - out byte[] buffer); - - /// Reads a sector's tag. - /// - /// If is one of the duplicates is returned - /// randomly. If is or - /// random data is returned. If is - /// null is returned. Otherwise, whatever tag is in the sector is - /// returned. - /// - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - /// Logical sector ID. - /// Status of request. - /// Sector tag - ErrorNumber ReadSectorTag(ushort track, byte head, ushort sector, out FloppySectorStatus status, - SectorTagType tag, out byte[] buffer); - - /// Reads a whole track. It includes all gaps, address marks, sectors data, etc. - /// The track data. - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - ErrorNumber ReadTrack(ushort track, byte head, out byte[] buffer); - - /// Reads a sector's data including all tags, address mark, and so, in a format dependent of represented media. - /// - /// If is one of the duplicates is returned - /// randomly. If is or - /// random data is returned. If is - /// null is returned. Otherwise, whatever is in the sector is - /// returned. - /// - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - /// Logical sector ID. - /// Status of request. - ErrorNumber ReadSectorLong(ushort track, byte head, ushort sector, out FloppySectorStatus status, - out byte[] buffer); - - /// Verifies a track. - /// True if correct, false if incorrect, null if uncheckable. - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - bool? VerifyTrack(ushort track, byte head); - - /// Verifies a sector, relative to track. - /// True if correct, false if incorrect, null if uncheckable. - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - /// Logical sector ID. - bool? VerifySector(ushort track, byte head, ushort sector); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IMediaImage.cs b/Aaru.CommonTypes/Interfaces/IMediaImage.cs deleted file mode 100644 index e18f95f..0000000 --- a/Aaru.CommonTypes/Interfaces/IMediaImage.cs +++ /dev/null @@ -1,124 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IMediaImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines interface to be implemented by block addressable disk image -// plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Structs; -using Schemas; - -namespace Aaru.CommonTypes.Interfaces -{ - /// Abstract class to implement disk image reading plugins. - public interface IMediaImage - { - /// Image information - ImageInfo Info { get; } - /// Plugin name. - string Name { get; } - /// Plugin UUID. - Guid Id { get; } - /// Plugin author - string Author { get; } - /// Gets the image format. - /// The image format. - string Format { get; } - /// List of dump hardware used to create the image from real media - List DumpHardware { get; } - /// Gets the CICM XML metadata for the image - CICMMetadataType CicmMetadata { get; } - - /// Identifies the image. - /// true, if image was identified, false otherwise. - /// Image filter. - bool Identify(IFilter imageFilter); - - /// Opens the image. - /// true, if image was opened, false otherwise. - /// Image filter. - ErrorNumber Open(IFilter imageFilter); - - /// Reads a disk tag. - /// - /// Tag type to read. - /// Disk tag - ErrorNumber ReadMediaTag(MediaTagType tag, out byte[] buffer); - - /// Reads a sector's user data. - /// The sector's user data. - /// Sector address (LBA). - /// - ErrorNumber ReadSector(ulong sectorAddress, out byte[] buffer); - - /// Reads a sector's tag. - /// The sector's tag. - /// Sector address (LBA). - /// Tag type. - /// - ErrorNumber ReadSectorTag(ulong sectorAddress, SectorTagType tag, out byte[] buffer); - - /// Reads user data from several sectors. - /// The sectors user data. - /// Starting sector address (LBA). - /// How many sectors to read. - /// - ErrorNumber ReadSectors(ulong sectorAddress, uint length, out byte[] buffer); - - /// Reads tag from several sectors. - /// The sectors tag. - /// Starting sector address (LBA). - /// How many sectors to read. - /// Tag type. - /// - ErrorNumber ReadSectorsTag(ulong sectorAddress, uint length, SectorTagType tag, out byte[] buffer); - - /// Reads a complete sector (user data + all tags). - /// The complete sector. Format depends on disk type. - /// Sector address (LBA). - /// - ErrorNumber ReadSectorLong(ulong sectorAddress, out byte[] buffer); - - /// Reads several complete sector (user data + all tags). - /// The complete sectors. Format depends on disk type. - /// Starting sector address (LBA). - /// How many sectors to read. - /// - ErrorNumber ReadSectorsLong(ulong sectorAddress, uint length, out byte[] buffer); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IOpticalMediaImage.cs b/Aaru.CommonTypes/Interfaces/IOpticalMediaImage.cs deleted file mode 100644 index ab6e95c..0000000 --- a/Aaru.CommonTypes/Interfaces/IOpticalMediaImage.cs +++ /dev/null @@ -1,123 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IOpticalMediaImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface to be implemented by optical disc image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Collections.Generic; -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Structs; - -namespace Aaru.CommonTypes.Interfaces -{ - /// - /// Abstract class to implement disk image reading plugins. - public interface IOpticalMediaImage : IMediaImage, IPartitionableMediaImage, IVerifiableSectorsImage - { - /// Gets the disc track extents (start, length). - /// The track extents. - List Tracks { get; } - /// Gets the sessions (optical discs only). - /// The sessions. - List Sessions { get; } - - /// Reads a sector's user data, relative to track. - /// The sector's user data. - /// Sector address (relative LBA). - /// Track. - /// - ErrorNumber ReadSector(ulong sectorAddress, uint track, out byte[] buffer); - - /// Reads a sector's tag, relative to track. - /// The sector's tag. - /// Sector address (relative LBA). - /// Track. - /// Tag type. - /// - ErrorNumber ReadSectorTag(ulong sectorAddress, uint track, SectorTagType tag, out byte[] buffer); - - /// Reads user data from several sectors, relative to track. - /// The sectors user data. - /// Starting sector address (relative LBA). - /// How many sectors to read. - /// Track. - /// - ErrorNumber ReadSectors(ulong sectorAddress, uint length, uint track, out byte[] buffer); - - /// Reads tag from several sectors, relative to track. - /// The sectors tag. - /// Starting sector address (relative LBA). - /// How many sectors to read. - /// Track. - /// Tag type. - /// - ErrorNumber ReadSectorsTag(ulong sectorAddress, uint length, uint track, SectorTagType tag, out byte[] buffer); - - /// Reads a complete sector (user data + all tags), relative to track. - /// The complete sector. Format depends on disk type. - /// Sector address (relative LBA). - /// Track. - /// - ErrorNumber ReadSectorLong(ulong sectorAddress, uint track, out byte[] buffer); - - /// Reads several complete sector (user data + all tags), relative to track. - /// The complete sectors. Format depends on disk type. - /// Starting sector address (relative LBA). - /// How many sectors to read. - /// Track. - /// - ErrorNumber ReadSectorsLong(ulong sectorAddress, uint length, uint track, out byte[] buffer); - - /// Gets the disc track extents for a specified session. - /// The track extents for that session. - /// Session. - List GetSessionTracks(Session session); - - /// Gets the disc track extents for a specified session. - /// The track extents for that session. - /// Session. - List GetSessionTracks(ushort session); - - /// Verifies several sectors, relative to track. - /// True if all are correct, false if any is incorrect, null if any is uncheckable. - /// Starting sector address (relative LBA). - /// How many sectors to read. - /// Track. - /// List of incorrect sectors - /// List of uncheckable sectors - bool? VerifySectors(ulong sectorAddress, uint length, uint track, out List failingLbas, - out List unknownLbas); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IPartition.cs b/Aaru.CommonTypes/Interfaces/IPartition.cs deleted file mode 100644 index a7cac4e..0000000 --- a/Aaru.CommonTypes/Interfaces/IPartition.cs +++ /dev/null @@ -1,62 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IPartition.cs -// Author(s) : Natalia Portillo -// -// Component : Partitioning scheme plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines methods to be used by partitioning scheme plugins and several -// constants. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; - -namespace Aaru.CommonTypes.Interfaces -{ - /// Abstract class to implement partitioning schemes interpreting plugins. - public interface IPartition - { - /// Plugin name. - string Name { get; } - /// Plugin UUID. - Guid Id { get; } - /// Plugin author - string Author { get; } - - /// Interprets a partitioning scheme. - /// true, if partitioning scheme is recognized, false otherwise. - /// Disk image. - /// Returns list of partitions. - /// At which sector to start searching for the partition scheme. - bool GetInformation(IMediaImage imagePlugin, out List partitions, ulong sectorOffset); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IPartitionableMediaImage.cs b/Aaru.CommonTypes/Interfaces/IPartitionableMediaImage.cs deleted file mode 100644 index d4bd9be..0000000 --- a/Aaru.CommonTypes/Interfaces/IPartitionableMediaImage.cs +++ /dev/null @@ -1,54 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IPartitionableMediaImage.cs -// Author(s) : Natalia Portillo -// -// Component : Media image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface to be implemented by image plugins that can -// contain partitioned medias, usually optical discs and some newer tapes. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Collections.Generic; - -namespace Aaru.CommonTypes.Interfaces -{ - /// Defines an image that can contain partitions - public interface IPartitionableMediaImage - { - /// - /// Gets an array partitions. Typically only useful for optical disc images where each track and index means a - /// different partition, as reads can be relative to them. - /// - /// The partitions. - List Partitions { get; } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IPluginRegister.cs b/Aaru.CommonTypes/Interfaces/IPluginRegister.cs deleted file mode 100644 index f82f9d0..0000000 --- a/Aaru.CommonTypes/Interfaces/IPluginRegister.cs +++ /dev/null @@ -1,87 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IPluginsRegister.cs -// Author(s) : Natalia Portillo -// -// Component : Interfaces. -// -// --[ Description ] ---------------------------------------------------------- -// -// Interface that declares class and methods to call to register plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; - -namespace Aaru.CommonTypes.Interfaces -{ - /// Defines a register of all known plugins - public interface IPluginRegister - { - /// Gets all checksum plugins - /// List of checksum plugins - List GetAllChecksumPlugins(); - - /// Gets all filesystem plugins - /// List of filesystem plugins - List GetAllFilesystemPlugins(); - - /// Gets all filter plugins - /// List of filter plugins - List GetAllFilterPlugins(); - - /// Gets all floppy image plugins - /// List of floppy image plugins - List GetAllFloppyImagePlugins(); - - /// Gets all media image plugins - /// List of media image plugins - List GetAllMediaImagePlugins(); - - /// Gets all partition plugins - /// List of partition plugins - List GetAllPartitionPlugins(); - - /// Gets all read-only filesystem plugins - /// List of read-only filesystem plugins - List GetAllReadOnlyFilesystemPlugins(); - - /// Gets all writable floppy image plugins - /// List of writable floppy image plugins - List GetAllWritableFloppyImagePlugins(); - - /// Gets all writable media image plugins - /// List of writable media image plugins - List GetAllWritableImagePlugins(); - - /// Gets all archive plugins - /// List of archive plugins - List GetAllArchivePlugins(); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IReadOnlyFilesystem.cs b/Aaru.CommonTypes/Interfaces/IReadOnlyFilesystem.cs deleted file mode 100644 index 72e3275..0000000 --- a/Aaru.CommonTypes/Interfaces/IReadOnlyFilesystem.cs +++ /dev/null @@ -1,125 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IReadOnlyFilesystem.cs -// Author(s) : Natalia Portillo -// -// Component : Filesystem plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Interface for filesystem plugins that offer read-only support of their -// contents. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Text; -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Structs; - -namespace Aaru.CommonTypes.Interfaces -{ - /// - /// Defines the interface to implement reading the contents of a filesystem - public interface IReadOnlyFilesystem : IFilesystem - { - /// Retrieves a list of options supported by the filesystem, with name, type and description - IEnumerable<(string name, Type type, string description)> SupportedOptions { get; } - - /// Supported namespaces - Dictionary Namespaces { get; } - - /// - /// Initializes whatever internal structures the filesystem plugin needs to be able to read files and directories - /// from the filesystem. - /// - /// - /// - /// Which encoding to use for this filesystem. - /// Dictionary of key=value pairs containing options to pass to the filesystem - /// Filename namespace - ErrorNumber Mount(IMediaImage imagePlugin, Partition partition, Encoding encoding, - Dictionary options, string @namespace); - - /// Frees all internal structures created by - ErrorNumber Unmount(); - - /// Maps a filesystem block from a file to a block from the underlying device. - /// Error number. - /// File path. - /// File block. - /// Device block. - ErrorNumber MapBlock(string path, long fileBlock, out long deviceBlock); - - /// Gets the attributes of a file or directory - /// Error number. - /// File path. - /// File attributes. - ErrorNumber GetAttributes(string path, out FileAttributes attributes); - - /// Lists all extended attributes, alternate data streams and forks of the given file. - /// Error number. - /// Path. - /// List of extended attributes, alternate data streams and forks. - ErrorNumber ListXAttr(string path, out List xattrs); - - /// Reads an extended attribute, alternate data stream or fork from the given file. - /// Error number. - /// File path. - /// Extended attribute, alternate data stream or fork name. - /// Buffer. - ErrorNumber GetXattr(string path, string xattr, ref byte[] buf); - - /// Reads data from a file (main/only data stream or data fork). - /// File path. - /// Offset. - /// Bytes to read. - /// Buffer. - ErrorNumber Read(string path, long offset, long size, ref byte[] buf); - - /// Lists contents from a directory. - /// Directory path. - /// Directory contents. - ErrorNumber ReadDir(string path, out List contents); - - /// Gets information about the mounted volume. - /// Information about the mounted volume. - ErrorNumber StatFs(out FileSystemInfo stat); - - /// Gets information about a file or directory. - /// File path. - /// File information. - ErrorNumber Stat(string path, out FileEntryInfo stat); - - /// Solves a symbolic link. - /// Link path. - /// Link destination. - ErrorNumber ReadLink(string path, out string dest); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/ITapeImage.cs b/Aaru.CommonTypes/Interfaces/ITapeImage.cs deleted file mode 100644 index 055fb54..0000000 --- a/Aaru.CommonTypes/Interfaces/ITapeImage.cs +++ /dev/null @@ -1,56 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ITapeImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface to be implemented by block addressable sequential -// tape image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Collections.Generic; -using Aaru.CommonTypes.Structs; - -namespace Aaru.CommonTypes.Interfaces -{ - /// - /// Defines an image that can store the information from streaming, digital, tapes - public interface ITapeImage : IMediaImage - { - /// Gets a list of all the files registered in the image - List Files { get; } - /// Gets a list of all the partitions registered in the image - List TapePartitions { get; } - /// If the media is a really a tape, as some formats can store non-tapes - bool IsTape { get; } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IVerifiableImage.cs b/Aaru.CommonTypes/Interfaces/IVerifiableImage.cs deleted file mode 100644 index 028f8db..0000000 --- a/Aaru.CommonTypes/Interfaces/IVerifiableImage.cs +++ /dev/null @@ -1,49 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IVerifiableImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines interface to be implemented by image plugins that can verify the -// image itself. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.CommonTypes.Interfaces -{ - /// Defines an image that can verify the integrity of the image itself, but not its contents - public interface IVerifiableImage - { - /// Verifies media image internal checksum. - /// True if correct, false if incorrect, null if there is no internal checksum available - bool? VerifyMediaImage(); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IVerifiableSectorsImage.cs b/Aaru.CommonTypes/Interfaces/IVerifiableSectorsImage.cs deleted file mode 100644 index 049137f..0000000 --- a/Aaru.CommonTypes/Interfaces/IVerifiableSectorsImage.cs +++ /dev/null @@ -1,60 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IVerifiableSectorsImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines interface to be implemented by image plugins that can verify the -// sectors contained in the image. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Collections.Generic; - -namespace Aaru.CommonTypes.Interfaces -{ - /// Defines an image that can verify the integrity of the sectors it contains - public interface IVerifiableSectorsImage - { - /// Verifies a sector. - /// True if correct, false if incorrect, null if uncheckable. - /// Sector address (LBA). - bool? VerifySector(ulong sectorAddress); - - /// Verifies several sectors. - /// True if all are correct, false if any is incorrect, null if any is uncheckable. - /// Starting sector address (LBA). - /// How many sectors to read. - /// List of incorrect sectors - /// List of uncheckable sectors - bool? VerifySectors(ulong sectorAddress, uint length, out List failingLbas, out List unknownLbas); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IWritableFloppyImage.cs b/Aaru.CommonTypes/Interfaces/IWritableFloppyImage.cs deleted file mode 100644 index b4872ae..0000000 --- a/Aaru.CommonTypes/Interfaces/IWritableFloppyImage.cs +++ /dev/null @@ -1,97 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IFloppyImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface to be implemented by floppy image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Structs; - -namespace Aaru.CommonTypes.Interfaces -{ - /// - /// - /// Abstract class to implement disk image reading plugins that can contain floppy images. This interface is - /// needed because floppy formatting characteristics are not necessarily compatible with the whole LBA-oriented - /// interface defined by . All data expected by these methods - /// is already decoded from its corresponding bitstream. - /// - public interface IWritableFloppyImage : IFloppyImage, IWritableImage - { - /// - /// Indicates the image plugin the floppy physical characteristics and must be called before following methods are - /// called. Once this is called, LBA-based methods should not be used. - /// - /// - /// Floppy info, contains information about physical characteristics of floppy, like size, bitrate, - /// track density, etc... - /// - /// true if operating completed successfully, false otherwise - bool SetFloppyCharacteristics(FloppyInfo info); - - /// Writes a sector's user data. - /// - /// If is one of the duplicates. If - /// is , , - /// it will be ignored. Otherwise, whatever data should be in the sector. - /// - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - /// Logical sector ID. - /// Status of sector. - /// true if operating completed successfully, false otherwise - bool WriteSector(byte[] data, ushort track, byte head, ushort sector, FloppySectorStatus status); - - /// Writes a whole track, including all gaps, address marks, sectors data, etc. - /// The track data. - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - /// true if operating completed successfully, false otherwise - bool WriteTrack(byte[] data, ushort track, byte head); - - /// Writes a sector's data including all tags, address mark, and so, in a format dependent of represented media. - /// - /// If is one of the duplicates. If - /// is , , - /// it will be ignored. Otherwise, whatever data should be in the sector. - /// - /// Physical track (position of the heads over the floppy media, 0-based). - /// Physical head (0-based). - /// Logical sector ID. - /// Status of request. - /// true if operating completed successfully, false otherwise - bool WriteSectorLong(byte[] data, ushort track, byte head, ushort sector, out FloppySectorStatus status); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IWritableImage.cs b/Aaru.CommonTypes/Interfaces/IWritableImage.cs deleted file mode 100644 index f4be123..0000000 --- a/Aaru.CommonTypes/Interfaces/IWritableImage.cs +++ /dev/null @@ -1,154 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IWritableImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface to be implemented by writable image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Structs; -using Schemas; - -namespace Aaru.CommonTypes.Interfaces -{ - /// - /// - /// Abstract class to implement disk image writing plugins. TODO: This interface is subject to change until - /// notice. - /// - public interface IWritableImage : IMediaImage - { - /// Gets a list of that are supported by the media image format - IEnumerable SupportedMediaTags { get; } - /// Gets a list of that are supported by the media image format - IEnumerable SupportedSectorTags { get; } - /// Gets a list of that are supported by the media image format - IEnumerable SupportedMediaTypes { get; } - /// Retrieves a list of options supported by the filesystem, with name, type and description - IEnumerable<(string name, Type type, string description, object @default)> SupportedOptions { get; } - /// Gets a list of known extensions for format auto-choosing - IEnumerable KnownExtensions { get; } - - /// If set to true means the image is opened for writing - bool IsWriting { get; } - /// Contains a description of the last error - string ErrorMessage { get; } - - /// - /// Creates a new image in the specified path, for the specified , with the specified - /// options to hold a media with the specified number of sectors - /// - /// Path to the new image, with extension - /// that will be written in the image - /// Options to be used when creating new image - /// How many sectors the media has. - /// - /// true if operating completed successfully, false otherwise - bool Create(string path, MediaType mediaType, Dictionary options, ulong sectors, - uint sectorSize); - - /// Writes a media tag to the image - /// Media tag - /// - /// - /// - /// true if operating completed successfully, false otherwise - bool WriteMediaTag(byte[] data, MediaTagType tag); - - /// Writes a sector to the image - /// Sector data - /// Sector address - /// true if operating completed successfully, false otherwise - bool WriteSector(byte[] data, ulong sectorAddress); - - /// Writes several sectors to the image - /// Sectors data - /// Sector starting address - /// How many sectors to write - /// true if operating completed successfully, false otherwise - bool WriteSectors(byte[] data, ulong sectorAddress, uint length); - - /// Writes a sector to the image with main channel tags attached - /// Sector data with its main channel tags attached - /// Sector address - /// true if operating completed successfully, false otherwise - bool WriteSectorLong(byte[] data, ulong sectorAddress); - - /// Writes several sectors to the image - /// Sector data with their main channel tags attached - /// Sector starting address - /// How many sectors to write - /// true if operating completed successfully, false otherwise - bool WriteSectorsLong(byte[] data, ulong sectorAddress, uint length); - - /// Closes and flushes to disk the image - /// true if operating completed successfully, false otherwise - bool Close(); - - /// Sets image metadata - /// containing image metadata - /// true if operating completed successfully, false otherwise - bool SetMetadata(ImageInfo metadata); - - /// Sets media geometry - /// Cylinders - /// Heads - /// Sectors per track - /// true if operating completed successfully, false otherwise - bool SetGeometry(uint cylinders, uint heads, uint sectorsPerTrack); - - /// Writes parallel or subchannel sector tag for one sector - /// Tag data to write - /// Sector address - /// Tag type - /// true if operating completed successfully, false otherwise - bool WriteSectorTag(byte[] data, ulong sectorAddress, SectorTagType tag); - - /// Writes parallel or subchannel sector tag for several sector - /// Tag data to write - /// Starting sector address - /// How many sectors to write - /// Tag type - /// true if operating completed successfully, false otherwise - bool WriteSectorsTag(byte[] data, ulong sectorAddress, uint length, SectorTagType tag); - - /// Sets the list of dump hardware used to create the image from real media - bool SetDumpHardware(List dumpHardware); - - /// Sets the CICM XML metadata for the image - bool SetCicmMetadata(CICMMetadataType metadata); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IWritableOpticalImage.cs b/Aaru.CommonTypes/Interfaces/IWritableOpticalImage.cs deleted file mode 100644 index 6318534..0000000 --- a/Aaru.CommonTypes/Interfaces/IWritableOpticalImage.cs +++ /dev/null @@ -1,56 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IWritableOpticalImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface to be implemented by writable image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Collections.Generic; -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Structs; - -namespace Aaru.CommonTypes.Interfaces -{ - /// Defines an image that is writable and can store an optical disc (CD, DVD, etc) - public interface IWritableOpticalImage : IWritableImage, IOpticalMediaImage - { - /// Image format capabilities - OpticalImageCapabilities OpticalCapabilities { get; } - - /// Sets tracks for optical media - /// List of tracks - /// true if operating completed successfully, false otherwise - bool SetTracks(List tracks); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interfaces/IWritableTapeImage.cs b/Aaru.CommonTypes/Interfaces/IWritableTapeImage.cs deleted file mode 100644 index ee9f300..0000000 --- a/Aaru.CommonTypes/Interfaces/IWritableTapeImage.cs +++ /dev/null @@ -1,64 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IWritableTapeImage.cs -// Author(s) : Natalia Portillo -// -// Component : Disc image plugins. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines the interface to be implemented by writable block addressable -// sequential tape image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using Aaru.CommonTypes.Structs; - -namespace Aaru.CommonTypes.Interfaces -{ - /// Defines an image that is writable and can store information about a streaming, digital, tape - public interface IWritableTapeImage : ITapeImage, IWritableImage - { - /// Registers a new file in the image - /// Tape file descriptor - /// true if successful, false otherwise - bool AddFile(TapeFile file); - - /// Registers a new partition - /// Tape partition descriptor - /// true if successful, false otherwise - bool AddPartition(TapePartition partition); - - /// - /// Tells the image plugin to set the internal structures to expect a tape (e.g. unknown block count and size). - /// Must be called before - /// - /// true if successful, false otherwise - bool SetTape(); - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interop/DetectOS.cs b/Aaru.CommonTypes/Interop/DetectOS.cs deleted file mode 100644 index 27e933f..0000000 --- a/Aaru.CommonTypes/Interop/DetectOS.cs +++ /dev/null @@ -1,390 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : DetectOS.cs -// Author(s) : Natalia Portillo -// -// Component : Interop services. -// -// --[ Description ] ---------------------------------------------------------- -// -// Detects underlying operating system. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Diagnostics; -using System.IO; -using System.Runtime.InteropServices; -using System.Security.Principal; - -namespace Aaru.CommonTypes.Interop -{ - /// Detects the underlying execution framework and operating system - public static class DetectOS - { - /// Are we running under Mono? - public static readonly bool IsMono = - RuntimeInformation.FrameworkDescription.StartsWith("Mono", StringComparison.Ordinal); - /// Are we running under .NET Framework? - public static readonly bool IsNetFramework = - RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework", StringComparison.Ordinal); - /// Are we running under .NET Core? - public static readonly bool IsNetCore = - RuntimeInformation.FrameworkDescription.StartsWith(".NET Core", StringComparison.Ordinal); - /// Are we running under .NET Native? - public static readonly bool IsNetNative = - RuntimeInformation.FrameworkDescription.StartsWith(".NET Native", StringComparison.Ordinal); - - /// Checks if the underlying runtime runs in 64-bit mode - public static readonly bool Is64Bit = IntPtr.Size == 8; - - /// Checks if the underlying runtime runs in 32-bit mode - public static readonly bool Is32Bit = IntPtr.Size == 4; - - /// Are we running under Windows? - public static bool IsWindows => GetRealPlatformID() == PlatformID.Win32NT || - GetRealPlatformID() == PlatformID.Win32S || - GetRealPlatformID() == PlatformID.Win32Windows || - GetRealPlatformID() == PlatformID.WinCE || - GetRealPlatformID() == PlatformID.WindowsPhone || - GetRealPlatformID() == PlatformID.Xbox; - - /// Are we running with administrative (root) privileges? - public static bool IsAdmin - { - get - { - if(!IsWindows) - return Environment.UserName == "root"; - - bool isAdmin; - WindowsIdentity user = null; - - try - { - user = WindowsIdentity.GetCurrent(); - var principal = new WindowsPrincipal(user); - isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator); - } - catch(UnauthorizedAccessException) - { - isAdmin = false; - } - catch(Exception) - { - isAdmin = false; - } - finally - { - user?.Dispose(); - } - - return isAdmin; - } - } - - [DllImport("libc", SetLastError = true)] - static extern int uname(out utsname name); - - [DllImport("libc", SetLastError = true, EntryPoint = "sysctlbyname", CharSet = CharSet.Ansi)] - static extern int OSX_sysctlbyname(string name, IntPtr oldp, IntPtr oldlenp, IntPtr newp, uint newlen); - - /// Gets the real platform ID, not the incomplete .NET framework one - /// Platform ID - /// Unhandled exception - public static PlatformID GetRealPlatformID() - { - if((int)Environment.OSVersion.Platform < 4 || - (int)Environment.OSVersion.Platform == 5) - return (PlatformID)(int)Environment.OSVersion.Platform; - - int error = uname(out utsname unixname); - - if(error != 0) - throw new Exception($"Unhandled exception calling uname: {Marshal.GetLastWin32Error()}"); - - switch(unixname.sysname) - { - // TODO: Differentiate Linux, Android, Tizen - case "Linux": - { - #if __ANDROID__ - return PlatformID.Android; - #else - return PlatformID.Linux; - #endif - } - - case "Darwin": - { - IntPtr pLen = Marshal.AllocHGlobal(sizeof(int)); - int osxError = OSX_sysctlbyname("hw.machine", IntPtr.Zero, pLen, IntPtr.Zero, 0); - - if(osxError != 0) - { - Marshal.FreeHGlobal(pLen); - - throw new Exception($"Unhandled exception calling uname: {Marshal.GetLastWin32Error()}"); - } - - int length = Marshal.ReadInt32(pLen); - IntPtr pStr = Marshal.AllocHGlobal(length); - osxError = OSX_sysctlbyname("hw.machine", pStr, pLen, IntPtr.Zero, 0); - - if(osxError != 0) - { - Marshal.FreeHGlobal(pStr); - Marshal.FreeHGlobal(pLen); - - throw new Exception($"Unhandled exception calling uname: {Marshal.GetLastWin32Error()}"); - } - - string machine = Marshal.PtrToStringAnsi(pStr); - - Marshal.FreeHGlobal(pStr); - Marshal.FreeHGlobal(pLen); - - if(machine != null && - (machine.StartsWith("iPad", StringComparison.Ordinal) || - machine.StartsWith("iPod", StringComparison.Ordinal) || - machine.StartsWith("iPhone", StringComparison.Ordinal))) - return PlatformID.iOS; - - return PlatformID.MacOSX; - } - - case "GNU": return PlatformID.Hurd; - case "FreeBSD": - case "GNU/kFreeBSD": return PlatformID.FreeBSD; - case "DragonFly": return PlatformID.DragonFly; - case "Haiku": return PlatformID.Haiku; - case "HP-UX": return PlatformID.HPUX; - case "AIX": return PlatformID.AIX; - case "OS400": return PlatformID.OS400; - case "IRIX": - case "IRIX64": return PlatformID.IRIX; - case "Minix": return PlatformID.Minix; - case "NetBSD": return PlatformID.NetBSD; - case "NONSTOP_KERNEL": return PlatformID.NonStop; - case "OpenBSD": return PlatformID.OpenBSD; - case "QNX": return PlatformID.QNX; - case "SINIX-Y": return PlatformID.SINIX; - case "SunOS": return PlatformID.Solaris; - case "OSF1": return PlatformID.Tru64; - case "ULTRIX": return PlatformID.Ultrix; - case "SCO_SV": return PlatformID.OpenServer; - case "UnixWare": return PlatformID.UnixWare; - case "Interix": - case "UWIN-W7": return PlatformID.Win32NT; - default: - { - if(unixname.sysname.StartsWith("CYGWIN_NT", StringComparison.Ordinal) || - unixname.sysname.StartsWith("MINGW32_NT", StringComparison.Ordinal) || - unixname.sysname.StartsWith("MSYS_NT", StringComparison.Ordinal) || - unixname.sysname.StartsWith("UWIN", StringComparison.Ordinal)) - return PlatformID.Win32NT; - - return PlatformID.Unknown; - } - } - } - - /// Gets a string for the current operating system REAL version (handles Darwin 1.4 and Windows 10 falsifying) - /// Current operating system version - public static string GetVersion() - { - string environ = Environment.OSVersion.Version.ToString(); - - switch(GetRealPlatformID()) - { - case PlatformID.MacOSX: - if(Environment.OSVersion.Version.Major != 1) - return $"10.{Environment.OSVersion.Version.Major - 4}.{Environment.OSVersion.Version.Minor}"; - - switch(Environment.OSVersion.Version.Minor) - { - case 3: return "10.0"; - case 4: return "10.1"; - } - - goto default; - case PlatformID.Win32NT: - // From Windows 8.1 the reported version is simply falsified... - if((Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Major >= 2) || - Environment.OSVersion.Version.Major > 6) - return FileVersionInfo. - GetVersionInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), - "KERNEL32.DLL")).ProductVersion; - - return environ; - default: return environ; - } - } - - /// From a platform ID and version returns a human-readable version - /// Platform ID - /// Version number - /// Operating system name - public static string GetPlatformName(PlatformID id, string version = null) - { - switch(id) - { - case PlatformID.AIX: return "AIX"; - case PlatformID.Android: return "Android"; - case PlatformID.DragonFly: return "DragonFly BSD"; - case PlatformID.FreeBSD: return "FreeBSD"; - case PlatformID.Haiku: return "Haiku"; - case PlatformID.HPUX: return "HP/UX"; - case PlatformID.Hurd: return "Hurd"; - case PlatformID.iOS: return "iOS"; - case PlatformID.IRIX: return "IRIX"; - case PlatformID.Linux: - if(!File.Exists("/proc/version")) - return "Linux"; - - string s = File.ReadAllText("/proc/version"); - - return s.Contains("Microsoft") || s.Contains("WSL") ? "Windows Subsystem for Linux" : "Linux"; - - case PlatformID.MacOSX: - if(string.IsNullOrEmpty(version)) - return "macOS"; - - string[] pieces = version.Split('.'); - - if(pieces.Length < 2 || - !int.TryParse(pieces[1], out int minor)) - return "macOS"; - - if(minor >= 12) - return "macOS"; - - if(minor >= 8) - return "OS X"; - - return "Mac OS X"; - - case PlatformID.Minix: return "MINIX"; - case PlatformID.NetBSD: return "NetBSD"; - case PlatformID.NonStop: return "NonStop OS"; - case PlatformID.OpenBSD: return "OpenBSD"; - case PlatformID.OpenServer: return "SCO OpenServer"; - case PlatformID.OS400: return "OS/400"; - case PlatformID.PlayStation3: return "Sony CellOS"; - case PlatformID.PlayStation4: return "Sony Orbis OS"; - case PlatformID.QNX: return "QNX"; - case PlatformID.SINIX: return "SINIX"; - case PlatformID.Solaris: return "Sun Solaris"; - case PlatformID.Tizen: return "Samsung Tizen"; - case PlatformID.Tru64: return "Tru64 UNIX"; - case PlatformID.Ultrix: return "Ultrix"; - case PlatformID.Unix: return "UNIX"; - case PlatformID.UnixWare: return "SCO UnixWare"; - case PlatformID.Wii: return "Nintendo Wii"; - case PlatformID.WiiU: return "Nintendo Wii U"; - case PlatformID.Win32NT: - if(string.IsNullOrEmpty(version)) - return "Windows NT/2000/XP/Vista/7/10"; - - if(version.StartsWith("3.", StringComparison.Ordinal) || - version.StartsWith("4.", StringComparison.Ordinal)) - return "Windows NT"; - - if(version.StartsWith("5.0", StringComparison.Ordinal)) - return "Windows 2000"; - - if(version.StartsWith("5.1", StringComparison.Ordinal)) - return "Windows XP"; - - if(version.StartsWith("5.2", StringComparison.Ordinal)) - return "Windows 2003"; - - if(version.StartsWith("6.0", StringComparison.Ordinal)) - return "Windows Vista"; - - if(version.StartsWith("6.1", StringComparison.Ordinal)) - return "Windows 7"; - - if(version.StartsWith("6.2", StringComparison.Ordinal)) - return "Windows 8"; - - if(version.StartsWith("6.3", StringComparison.Ordinal)) - return "Windows 8.1"; - - if(version.StartsWith("10.0", StringComparison.Ordinal)) - return "Windows 10"; - - return "Windows NT/2000/XP/Vista/7/10"; - case PlatformID.Win32S: return "Windows 3.x with win32s"; - case PlatformID.Win32Windows: - if(string.IsNullOrEmpty(version)) - return "Windows 9x/Me"; - - if(version.StartsWith("4.0", StringComparison.Ordinal)) - return "Windows 95"; - - if(version.StartsWith("4.10.2222", StringComparison.Ordinal)) - return "Windows 98 SE"; - - if(version.StartsWith("4.1", StringComparison.Ordinal)) - return "Windows 98"; - - if(version.StartsWith("4.9", StringComparison.Ordinal)) - return "Windows Me"; - - return "Windows 9x/Me"; - case PlatformID.WinCE: return "Windows CE/Mobile"; - case PlatformID.WindowsPhone: return "Windows Phone"; - case PlatformID.Xbox: return "Xbox OS"; - case PlatformID.zOS: return "z/OS"; - default: return id.ToString(); - } - } - - /// POSIX uname structure, size from OSX, big enough to handle extra fields - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - struct utsname - { - /// System name - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public readonly string sysname; - /// Node name - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public readonly string nodename; - /// Release level - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public readonly string release; - /// Version level - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public readonly string version; - /// Hardware level - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public readonly string machine; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interop/PlatformID.cs b/Aaru.CommonTypes/Interop/PlatformID.cs deleted file mode 100644 index ed76eb3..0000000 --- a/Aaru.CommonTypes/Interop/PlatformID.cs +++ /dev/null @@ -1,122 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : PlatformID.cs -// Author(s) : Natalia Portillo -// -// Component : Interop services. -// -// --[ Description ] ---------------------------------------------------------- -// -// Contains an enhanced PlatformID enumeration. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Diagnostics.CodeAnalysis; - -namespace Aaru.CommonTypes.Interop -{ - /// Contains an arbitrary list of OSes, even if .NET does not run on them - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum PlatformID - { - /// Win32s - Win32S = 0, - /// Win32 (Windows 9x) - Win32Windows = 1, - /// Windows NT - Win32NT = 2, - /// Windows Mobile - WinCE = 3, - /// UNIX (do not use, too generic) - Unix = 4, - /// Xbox 360 - Xbox = 5, - /// OS X - MacOSX = 6, - /// iOS is not OS X - iOS = 7, - /// Linux - Linux = 8, - /// Sun Solaris - Solaris = 9, - /// NetBSD - NetBSD = 10, - /// OpenBSD - OpenBSD = 11, - /// FreeBSD - FreeBSD = 12, - /// DragonFly BSD - DragonFly = 13, - /// Nintendo Wii - Wii = 14, - /// Nintendo Wii U - WiiU = 15, - /// Sony PlayStation 3 - PlayStation3 = 16, - /// Sony Playstation 4 - PlayStation4 = 17, - /// Google Android - Android = 18, - /// Samsung Tizen - Tizen = 19, - /// Windows Phone - WindowsPhone = 20, - /// GNU/Hurd - Hurd = 21, - /// Haiku - Haiku = 22, - /// HP-UX - HPUX = 23, - /// AIX - AIX = 24, - /// OS/400 - OS400 = 25, - /// IRIX - IRIX = 26, - /// Minix - Minix = 27, - /// NonStop - NonStop = 28, - /// QNX - QNX = 29, - /// SINIX - SINIX = 30, - /// Tru64 UNIX - Tru64 = 31, - /// Ultrix - Ultrix = 32, - /// SCO OpenServer / SCO UNIX - OpenServer = 33, - /// SCO UnixWare - UnixWare = 34, - /// IBM z/OS - zOS = 35, - /// Unknown - Unknown = -1 - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Interop/Version.cs b/Aaru.CommonTypes/Interop/Version.cs deleted file mode 100644 index 5182028..0000000 --- a/Aaru.CommonTypes/Interop/Version.cs +++ /dev/null @@ -1,91 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Version.cs -// Author(s) : Natalia Portillo -// -// Component : Interop services. -// -// --[ Description ] ---------------------------------------------------------- -// -// Returns Aaru version. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Reflection; -using System.Runtime; - -namespace Aaru.CommonTypes.Interop -{ - /// Gets our own, or the runtime's version - public static class Version - { - /// Gets version string - /// Version - public static string GetVersion() => typeof(Version).Assembly.GetName().Version?.ToString(); - - /// Gets .NET Core version - /// Version - public static string GetNetCoreVersion() - { - Assembly assembly = typeof(GCSettings).Assembly; - - string[] assemblyPath = assembly.CodeBase?.Split(new[] - { - '/', '\\' - }, StringSplitOptions.RemoveEmptyEntries); - - if(assemblyPath is null) - return null; - - int netCoreAppIndex = Array.IndexOf(assemblyPath, "Microsoft.NETCore.App"); - - if(netCoreAppIndex > 0 && - netCoreAppIndex < assemblyPath.Length - 2) - return assemblyPath[netCoreAppIndex + 1]; - - return null; - } - - /// Gets Mono version - /// Version - public static string GetMonoVersion() - { - if(!DetectOS.IsMono) - return null; - - MethodInfo monoDisplayName = Type.GetType("Mono.Runtime")?. - GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static); - - if(monoDisplayName != null) - return (string)monoDisplayName.Invoke(null, null); - - return null; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/MediaType.cs b/Aaru.CommonTypes/MediaType.cs deleted file mode 100644 index 2510db0..0000000 --- a/Aaru.CommonTypes/MediaType.cs +++ /dev/null @@ -1,1034 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : MediaType.cs -// Author(s) : Natalia Portillo -// -// Component : Aaru common types. -// -// --[ Description ] ---------------------------------------------------------- -// -// Contains common media types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -// ReSharper disable InconsistentNaming -// TODO: Rename contents - -using System; - -#pragma warning disable 1591 - -// ReSharper disable UnusedMember.Global -// ReSharper disable IdentifierTypo - -namespace Aaru.CommonTypes -{ - public enum MediaEncoding - { - Unknown, FM, MFM, - M2FM, AppleGCR, CommodoreGCR - } - - /// Contains an enumeration of all known types of media. - public enum MediaType : uint - { - #region Generics, types 0 to 9 - /// Unknown disk type - Unknown = 0, - /// Unknown magneto-optical - UnknownMO = 1, - /// Generic hard disk - GENERIC_HDD = 2, - /// Microdrive type hard disk - Microdrive = 3, - /// Zoned hard disk - Zone_HDD = 4, - /// USB flash drives - FlashDrive = 5, - /// Unknown data tape - UnknownTape = 6, - #endregion Generics, types 0 to 9 - - #region Somewhat standard Compact Disc formats, types 10 to 39 - /// Any unknown or standard violating CD - CD = 10, - /// CD Digital Audio (Red Book) - CDDA = 11, - /// CD+G (Red Book) - CDG = 12, - /// CD+EG (Red Book) - CDEG = 13, - /// CD-i (Green Book) - CDI = 14, - /// CD-ROM (Yellow Book) - CDROM = 15, - /// CD-ROM XA (Yellow Book) - CDROMXA = 16, - /// CD+ (Blue Book) - CDPLUS = 17, - /// CD-MO (Orange Book) - CDMO = 18, - /// CD-Recordable (Orange Book) - CDR = 19, - /// CD-ReWritable (Orange Book) - CDRW = 20, - /// Mount-Rainier CD-RW - CDMRW = 21, - /// Video CD (White Book) - VCD = 22, - /// Super Video CD (White Book) - SVCD = 23, - /// Photo CD (Beige Book) - PCD = 24, - /// Super Audio CD (Scarlet Book) - SACD = 25, - /// Double-Density CD-ROM (Purple Book) - DDCD = 26, - /// DD CD-R (Purple Book) - DDCDR = 27, - /// DD CD-RW (Purple Book) - DDCDRW = 28, - /// DTS audio CD (non-standard) - DTSCD = 29, - /// CD-MIDI (Red Book) - CDMIDI = 30, - /// CD-Video (ISO/IEC 61104) - CDV = 31, - /// 120mm, Phase-Change, 1298496 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485 - PD650 = 32, - /// 120mm, Write-Once, 1281856 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485 - PD650_WORM = 33, - /// - /// CD-i Ready, contains a track before the first TOC track, in mode 2, and all TOC tracks are Audio. Subchannel - /// marks track as audio pause. - /// - CDIREADY = 34, FMTOWNS = 35, - #endregion Somewhat standard Compact Disc formats, types 10 to 39 - - #region Standard DVD formats, types 40 to 50 - /// DVD-ROM (applies to DVD Video and DVD Audio) - DVDROM = 40, - /// DVD-R - DVDR = 41, - /// DVD-RW - DVDRW = 42, - /// DVD+R - DVDPR = 43, - /// DVD+RW - DVDPRW = 44, - /// DVD+RW DL - DVDPRWDL = 45, - /// DVD-R DL - DVDRDL = 46, - /// DVD+R DL - DVDPRDL = 47, - /// DVD-RAM - DVDRAM = 48, - /// DVD-RW DL - DVDRWDL = 49, - /// DVD-Download - DVDDownload = 50, - #endregion Standard DVD formats, types 40 to 50 - - #region Standard HD-DVD formats, types 51 to 59 - /// HD DVD-ROM (applies to HD DVD Video) - HDDVDROM = 51, - /// HD DVD-RAM - HDDVDRAM = 52, - /// HD DVD-R - HDDVDR = 53, - /// HD DVD-RW - HDDVDRW = 54, - /// HD DVD-R DL - HDDVDRDL = 55, - /// HD DVD-RW DL - HDDVDRWDL = 56, - #endregion Standard HD-DVD formats, types 51 to 59 - - #region Standard Blu-ray formats, types 60 to 69 - /// BD-ROM (and BD Video) - BDROM = 60, - /// BD-R - BDR = 61, - /// BD-RE - BDRE = 62, - /// BD-R XL - BDRXL = 63, - /// BD-RE XL - BDREXL = 64, - /// Ultra HD Blu-ray - UHDBD = 65, - #endregion Standard Blu-ray formats, types 60 to 69 - - #region Rare or uncommon optical standards, types 70 to 79 - /// Enhanced Versatile Disc - EVD = 70, - /// Forward Versatile Disc - FVD = 71, - /// Holographic Versatile Disc - HVD = 72, - /// China Blue High Definition - CBHD = 73, - /// High Definition Versatile Multilayer Disc - HDVMD = 74, - /// Versatile Compact Disc High Density - VCDHD = 75, - /// Stacked Volumetric Optical Disc - SVOD = 76, - /// Five Dimensional disc - FDDVD = 77, - /// China Video Disc - CVD = 78, - #endregion Rare or uncommon optical standards, types 70 to 79 - - #region LaserDisc based, types 80 to 89 - /// Pioneer LaserDisc - LD = 80, - /// Pioneer LaserDisc data - LDROM = 81, LDROM2 = 82, LVROM = 83, MegaLD = 84, - #endregion LaserDisc based, types 80 to 89 - - #region MiniDisc based, types 90 to 99 - /// Sony Hi-MD - HiMD = 90, - /// Sony MiniDisc - MD = 91, - /// Sony MD-Data - MDData = 92, - /// Sony MD-Data2 - MDData2 = 93, - /// Sony MiniDisc, 60 minutes, formatted with Hi-MD format - MD60 = 94, - /// Sony MiniDisc, 74 minutes, formatted with Hi-MD format - MD74 = 95, - /// Sony MiniDisc, 80 minutes, formatted with Hi-MD format - MD80 = 96, - #endregion MiniDisc based, types 90 to 99 - - #region Plasmon UDO, types 100 to 109 - /// 5.25", Phase-Change, 1834348 sectors, 8192 bytes/sector, Ultra Density Optical, ECMA-350, ISO 17345 - UDO = 100, - /// 5.25", Phase-Change, 3669724 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976 - UDO2 = 101, - /// 5.25", Write-Once, 3668759 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976 - UDO2_WORM = 102, - #endregion Plasmon UDO, types 100 to 109 - - #region Sony game media, types 110 to 129 - PlayStationMemoryCard = 110, PlayStationMemoryCard2 = 111, - /// Sony PlayStation game CD - PS1CD = 112, - /// Sony PlayStation 2 game CD - PS2CD = 113, - /// Sony PlayStation 2 game DVD - PS2DVD = 114, - /// Sony PlayStation 3 game DVD - PS3DVD = 115, - /// Sony PlayStation 3 game Blu-ray - PS3BD = 116, - /// Sony PlayStation 4 game Blu-ray - PS4BD = 117, - /// Sony PlayStation Portable Universal Media Disc (ECMA-365) - UMD = 118, PlayStationVitaGameCard = 119, - /// Sony PlayStation 5 game Ultra HD Blu-ray - PS5BD = 120, - #endregion Sony game media, types 110 to 129 - - #region Microsoft game media, types 130 to 149 - /// Microsoft X-box Game Disc - XGD = 130, - /// Microsoft X-box 360 Game Disc - XGD2 = 131, - /// Microsoft X-box 360 Game Disc - XGD3 = 132, - /// Microsoft X-box One Game Disc - XGD4 = 133, - #endregion Microsoft game media, types 130 to 149 - - #region Sega game media, types 150 to 169 - /// Sega MegaCD - MEGACD = 150, - /// Sega Saturn disc - SATURNCD = 151, - /// Sega/Yamaha Gigabyte Disc - GDROM = 152, - /// Sega/Yamaha recordable Gigabyte Disc - GDR = 153, SegaCard = 154, MilCD = 155, - #endregion Sega game media, types 150 to 169 - - #region Other game media, types 170 to 179 - /// PC-Engine / TurboGrafx cartridge - HuCard = 170, - /// PC-Engine / TurboGrafx CD - SuperCDROM2 = 171, - /// Atari Jaguar CD - JaguarCD = 172, - /// 3DO CD - ThreeDO = 173, - /// NEC PC-FX - PCFX = 174, - /// NEO-GEO CD - NeoGeoCD = 175, - /// Commodore CDTV - CDTV = 176, - /// Amiga CD32 - CD32 = 177, - /// Nuon (DVD based videogame console) - Nuon = 178, - /// Bandai Playdia - Playdia = 179, - #endregion Other game media, types 170 to 179 - - #region Apple standard floppy format, types 180 to 189 - /// 5.25", SS, DD, 35 tracks, 13 spt, 256 bytes/sector, GCR - Apple32SS = 180, - /// 5.25", DS, DD, 35 tracks, 13 spt, 256 bytes/sector, GCR - Apple32DS = 181, - /// 5.25", SS, DD, 35 tracks, 16 spt, 256 bytes/sector, GCR - Apple33SS = 182, - /// 5.25", DS, DD, 35 tracks, 16 spt, 256 bytes/sector, GCR - Apple33DS = 183, - /// 3.5", SS, DD, 80 tracks, 8 to 12 spt, 512 bytes/sector, GCR - AppleSonySS = 184, - /// 3.5", DS, DD, 80 tracks, 8 to 12 spt, 512 bytes/sector, GCR - AppleSonyDS = 185, - /// 5.25", DS, ?D, ?? tracks, ?? spt, 512 bytes/sector, GCR, opposite side heads, aka Twiggy - AppleFileWare = 186, - #endregion Apple standard floppy format - - #region IBM/Microsoft PC floppy formats, types 190 to 209 - /// 5.25", SS, DD, 40 tracks, 8 spt, 512 bytes/sector, MFM - DOS_525_SS_DD_8 = 190, - /// 5.25", SS, DD, 40 tracks, 9 spt, 512 bytes/sector, MFM - DOS_525_SS_DD_9 = 191, - /// 5.25", DS, DD, 40 tracks, 8 spt, 512 bytes/sector, MFM - DOS_525_DS_DD_8 = 192, - /// 5.25", DS, DD, 40 tracks, 9 spt, 512 bytes/sector, MFM - DOS_525_DS_DD_9 = 193, - /// 5.25", DS, HD, 80 tracks, 15 spt, 512 bytes/sector, MFM - DOS_525_HD = 194, - /// 3.5", SS, DD, 80 tracks, 8 spt, 512 bytes/sector, MFM - DOS_35_SS_DD_8 = 195, - /// 3.5", SS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM - DOS_35_SS_DD_9 = 196, - /// 3.5", DS, DD, 80 tracks, 8 spt, 512 bytes/sector, MFM - DOS_35_DS_DD_8 = 197, - /// 3.5", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM - DOS_35_DS_DD_9 = 198, - /// 3.5", DS, HD, 80 tracks, 18 spt, 512 bytes/sector, MFM - DOS_35_HD = 199, - /// 3.5", DS, ED, 80 tracks, 36 spt, 512 bytes/sector, MFM - DOS_35_ED = 200, - /// 3.5", DS, HD, 80 tracks, 21 spt, 512 bytes/sector, MFM - DMF = 201, - /// 3.5", DS, HD, 82 tracks, 21 spt, 512 bytes/sector, MFM - DMF_82 = 202, - /// - /// 5.25", DS, HD, 80 tracks, ? spt, ??? + ??? + ??? bytes/sector, MFM track 0 = ??15 sectors, 512 bytes/sector, - /// falsified to DOS as 19 spt, 512 bps - /// - XDF_525 = 203, - /// - /// 3.5", DS, HD, 80 tracks, 4 spt, 8192 + 2048 + 1024 + 512 bytes/sector, MFM track 0 = 19 sectors, 512 - /// bytes/sector, falsified to DOS as 23 spt, 512 bps - /// - XDF_35 = 204, - #endregion IBM/Microsoft PC standard floppy formats, types 190 to 209 - - #region IBM standard floppy formats, types 210 to 219 - /// 8", SS, SD, 32 tracks, 8 spt, 319 bytes/sector, FM - IBM23FD = 210, - /// 8", SS, SD, 73 tracks, 26 spt, 128 bytes/sector, FM - IBM33FD_128 = 211, - /// 8", SS, SD, 74 tracks, 15 spt, 256 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector - IBM33FD_256 = 212, - /// 8", SS, SD, 74 tracks, 8 spt, 512 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector - IBM33FD_512 = 213, - /// 8", DS, SD, 74 tracks, 26 spt, 128 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector - IBM43FD_128 = 214, - /// 8", DS, SD, 74 tracks, 26 spt, 256 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector - IBM43FD_256 = 215, - /// - /// 8", DS, DD, 74 tracks, 26 spt, 256 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 - /// side 1 = 26 sectors, 256 bytes/sector - /// - IBM53FD_256 = 216, - /// - /// 8", DS, DD, 74 tracks, 15 spt, 512 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 - /// side 1 = 26 sectors, 256 bytes/sector - /// - IBM53FD_512 = 217, - /// - /// 8", DS, DD, 74 tracks, 8 spt, 1024 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 - /// side 1 = 26 sectors, 256 bytes/sector - /// - IBM53FD_1024 = 218, - #endregion IBM standard floppy formats, types 210 to 219 - - #region DEC standard floppy formats, types 220 to 229 - /// 8", SS, DD, 77 tracks, 26 spt, 128 bytes/sector, FM - RX01 = 220, - /// 8", SS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM/MFM - RX02 = 221, - /// 8", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM/MFM - RX03 = 222, - /// 5.25", SS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM - RX50 = 223, - #endregion DEC standard floppy formats, types 220 to 229 - - #region Acorn standard floppy formats, types 230 to 239 - /// 5,25", SS, SD, 40 tracks, 10 spt, 256 bytes/sector, FM - ACORN_525_SS_SD_40 = 230, - /// 5,25", SS, SD, 80 tracks, 10 spt, 256 bytes/sector, FM - ACORN_525_SS_SD_80 = 231, - /// 5,25", SS, DD, 40 tracks, 16 spt, 256 bytes/sector, MFM - ACORN_525_SS_DD_40 = 232, - /// 5,25", SS, DD, 80 tracks, 16 spt, 256 bytes/sector, MFM - ACORN_525_SS_DD_80 = 233, - /// 5,25", DS, DD, 80 tracks, 16 spt, 256 bytes/sector, MFM - ACORN_525_DS_DD = 234, - /// 3,5", DS, DD, 80 tracks, 5 spt, 1024 bytes/sector, MFM - ACORN_35_DS_DD = 235, - /// 3,5", DS, HD, 80 tracks, 10 spt, 1024 bytes/sector, MFM - ACORN_35_DS_HD = 236, - #endregion Acorn standard floppy formats, types 230 to 239 - - #region Atari standard floppy formats, types 240 to 249 - /// 5,25", SS, SD, 40 tracks, 18 spt, 128 bytes/sector, FM - ATARI_525_SD = 240, - /// 5,25", SS, ED, 40 tracks, 26 spt, 128 bytes/sector, MFM - ATARI_525_ED = 241, - /// 5,25", SS, DD, 40 tracks, 18 spt, 256 bytes/sector, MFM - ATARI_525_DD = 242, - /// 3,5", SS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM - ATARI_35_SS_DD = 243, - /// 3,5", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM - ATARI_35_DS_DD = 244, - /// 3,5", SS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM - ATARI_35_SS_DD_11 = 245, - /// 3,5", DS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM - ATARI_35_DS_DD_11 = 246, - #endregion Atari standard floppy formats, types 240 to 249 - - #region Commodore standard floppy formats, types 250 to 259 - /// 3,5", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM (1581) - CBM_35_DD = 250, - /// 3,5", DS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM (Amiga) - CBM_AMIGA_35_DD = 251, - /// 3,5", DS, HD, 80 tracks, 22 spt, 512 bytes/sector, MFM (Amiga) - CBM_AMIGA_35_HD = 252, - /// 5,25", SS, DD, 35 tracks, GCR - CBM_1540 = 253, - /// 5,25", SS, DD, 40 tracks, GCR - CBM_1540_Ext = 254, - /// 5,25", DS, DD, 35 tracks, GCR - CBM_1571 = 255, - #endregion Commodore standard floppy formats, types 250 to 259 - - #region NEC/SHARP standard floppy formats, types 260 to 269 - /// 8", DS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM - NEC_8_SD = 260, - /// 8", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, MFM - NEC_8_DD = 261, - /// 5.25", SS, SD, 80 tracks, 16 spt, 256 bytes/sector, FM - NEC_525_SS = 262, - /// 5.25", DS, SD, 80 tracks, 16 spt, 256 bytes/sector, MFM - NEC_525_DS = 263, - /// 5,25", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM - NEC_525_HD = 264, - /// 3,5", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM, aka mode 3 - NEC_35_HD_8 = 265, - /// 3,5", DS, HD, 80 tracks, 15 spt, 512 bytes/sector, MFM - NEC_35_HD_15 = 266, - /// 3,5", DS, TD, 240 tracks, 38 spt, 512 bytes/sector, MFM - NEC_35_TD = 267, - /// 5,25", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM - SHARP_525 = NEC_525_HD, - /// 3,5", DS, HD, 80 tracks, 9 spt, 1024 bytes/sector, MFM - SHARP_525_9 = 268, - /// 3,5", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM - SHARP_35 = NEC_35_HD_8, - /// 3,5", DS, HD, 80 tracks, 9 spt, 1024 bytes/sector, MFM - SHARP_35_9 = 269, - #endregion NEC/SHARP standard floppy formats, types 260 to 269 - - #region ECMA floppy standards, types 270 to 289 - /// - /// 5,25", DS, DD, 80 tracks, 8 spt, 1024 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track - /// 0 side 1 = 26 sectors, 256 bytes/sector - /// - ECMA_99_8 = 270, - /// - /// 5,25", DS, DD, 77 tracks, 15 spt, 512 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track - /// 0 side 1 = 26 sectors, 256 bytes/sector - /// - ECMA_99_15 = 271, - /// - /// 5,25", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track - /// 0 side 1 = 26 sectors, 256 bytes/sector - /// - ECMA_99_26 = 272, - /// 3,5", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM - ECMA_100 = DOS_35_DS_DD_9, - /// 3,5", DS, HD, 80 tracks, 18 spt, 512 bytes/sector, MFM - ECMA_125 = DOS_35_HD, - /// 3,5", DS, ED, 80 tracks, 36 spt, 512 bytes/sector, MFM - ECMA_147 = DOS_35_ED, - /// 8", SS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM - ECMA_54 = 273, - /// 8", DS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM - ECMA_59 = 274, - /// 5,25", SS, DD, 35 tracks, 9 spt, 256 bytes/sector, FM, track 0 side 0 = 16 sectors, 128 bytes/sector - ECMA_66 = 275, - /// - /// 8", DS, DD, 77 tracks, 8 spt, 1024 bytes/sector, FM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 - /// side 1 = 26 sectors, 256 bytes/sector - /// - ECMA_69_8 = 276, - /// - /// 8", DS, DD, 77 tracks, 15 spt, 512 bytes/sector, FM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 - /// side 1 = 26 sectors, 256 bytes/sector - /// - ECMA_69_15 = 277, - /// - /// 8", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 - /// side 1 = 26 sectors, 256 bytes/sector - /// - ECMA_69_26 = 278, - /// - /// 5,25", DS, DD, 40 tracks, 16 spt, 256 bytes/sector, FM, track 0 side 0 = 16 sectors, 128 bytes/sector, track 0 - /// side 1 = 16 sectors, 256 bytes/sector - /// - ECMA_70 = 279, - /// - /// 5,25", DS, DD, 80 tracks, 16 spt, 256 bytes/sector, FM, track 0 side 0 = 16 sectors, 128 bytes/sector, track 0 - /// side 1 = 16 sectors, 256 bytes/sector - /// - ECMA_78 = 280, - /// 5,25", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, FM - ECMA_78_2 = 281, - #endregion ECMA floppy standards, types 270 to 289 - - #region Non-standard PC formats (FDFORMAT, 2M, etc), types 290 to 308 - /// 5,25", DS, DD, 82 tracks, 10 spt, 512 bytes/sector, MFM - FDFORMAT_525_DD = 290, - /// 5,25", DS, HD, 82 tracks, 17 spt, 512 bytes/sector, MFM - FDFORMAT_525_HD = 291, - /// 3,5", DS, DD, 82 tracks, 10 spt, 512 bytes/sector, MFM - FDFORMAT_35_DD = 292, - /// 3,5", DS, HD, 82 tracks, 21 spt, 512 bytes/sector, MFM - FDFORMAT_35_HD = 293, - #endregion Non-standard PC formats (FDFORMAT, 2M, etc), types 290 to 308 - - #region Apricot ACT standard floppy formats, type 309 - /// 3.5", DS, DD, 70 tracks, 9 spt, 512 bytes/sector, MFM - Apricot_35 = 309, - #endregion Apricot ACT standard floppy formats, type 309 - - #region OnStream ADR, types 310 to 319 - ADR2120 = 310, ADR260 = 311, ADR30 = 312, - ADR50 = 313, - #endregion OnStream ADR, types 310 to 319 - - #region Advanced Intelligent Tape, types 320 to 339 - AIT1 = 320, AIT1Turbo = 321, AIT2 = 322, - AIT2Turbo = 323, AIT3 = 324, AIT3Ex = 325, - AIT3Turbo = 326, AIT4 = 327, AIT5 = 328, - AITETurbo = 329, SAIT1 = 330, SAIT2 = 331, - #endregion Advanced Intelligent Tape, types 320 to 339 - - #region Iomega, types 340 to 359 - /// Obsolete type for 8"x11" Bernoulli Box disk - [Obsolete] - Bernoulli = 340, - /// Obsolete type for 5⅓" Bernoulli Box II disks - [Obsolete] - Bernoulli2 = 341, Ditto = 342, DittoMax = 343, Jaz = 344, - Jaz2 = 345, PocketZip = 346, REV120 = 347, - REV35 = 348, REV70 = 349, ZIP100 = 350, - ZIP250 = 351, ZIP750 = 352, - /// 5⅓" Bernoulli Box II disk with 35Mb capacity - Bernoulli35 = 353, - /// 5⅓" Bernoulli Box II disk with 44Mb capacity - Bernoulli44 = 354, - /// 5⅓" Bernoulli Box II disk with 65Mb capacity - Bernoulli65 = 355, - /// 5⅓" Bernoulli Box II disk with 90Mb capacity - Bernoulli90 = 356, - /// 5⅓" Bernoulli Box II disk with 105Mb capacity - Bernoulli105 = 357, - /// 5⅓" Bernoulli Box II disk with 150Mb capacity - Bernoulli150 = 358, - /// 5⅓" Bernoulli Box II disk with 230Mb capacity - Bernoulli230 = 359, - #endregion Iomega, types 340 to 359 - - #region Audio or video media, types 360 to 369 - CompactCassette = 360, Data8 = 361, MiniDV = 362, - /// D/CAS-25: Digital data on Compact Cassette form factor, special magnetic media, 9-track - Dcas25 = 363, - /// D/CAS-85: Digital data on Compact Cassette form factor, special magnetic media, 17-track - Dcas85 = 364, - /// D/CAS-103: Digital data on Compact Cassette form factor, special magnetic media, 21-track - Dcas103 = 365, - #endregion Audio media, types 360 to 369 - - #region CompactFlash Association, types 370 to 379 - CFast = 370, CompactFlash = 371, CompactFlashType2 = 372, - #endregion CompactFlash Association, types 370 to 379 - - #region Digital Audio Tape / Digital Data Storage, types 380 to 389 - DigitalAudioTape = 380, DAT160 = 381, DAT320 = 382, - DAT72 = 383, DDS1 = 384, DDS2 = 385, - DDS3 = 386, DDS4 = 387, - #endregion Digital Audio Tape / Digital Data Storage, types 380 to 389 - - #region DEC, types 390 to 399 - CompactTapeI = 390, CompactTapeII = 391, DECtapeII = 392, - DLTtapeIII = 393, DLTtapeIIIxt = 394, DLTtapeIV = 395, - DLTtapeS4 = 396, SDLT1 = 397, SDLT2 = 398, - VStapeI = 399, - #endregion DEC, types 390 to 399 - - #region Exatape, types 400 to 419 - Exatape15m = 400, Exatape22m = 401, Exatape22mAME = 402, - Exatape28m = 403, Exatape40m = 404, Exatape45m = 405, - Exatape54m = 406, Exatape75m = 407, Exatape76m = 408, - Exatape80m = 409, Exatape106m = 410, Exatape160mXL = 411, - Exatape112m = 412, Exatape125m = 413, Exatape150m = 414, - Exatape170m = 415, Exatape225m = 416, - #endregion Exatape, types 400 to 419 - - #region PCMCIA / ExpressCard, types 420 to 429 - ExpressCard34 = 420, ExpressCard54 = 421, PCCardTypeI = 422, - PCCardTypeII = 423, PCCardTypeIII = 424, PCCardTypeIV = 425, - #endregion PCMCIA / ExpressCard, types 420 to 429 - - #region SyQuest, types 430 to 449 - /// SyQuest 135Mb cartridge for use in EZ135 and EZFlyer drives - EZ135 = 430, - /// SyQuest EZFlyer 230Mb cartridge for use in EZFlyer drive - EZ230 = 431, - /// SyQuest 4.7Gb for use in Quest drive - Quest = 432, - /// SyQuest SparQ 1Gb cartridge - SparQ = 433, - /// SyQuest 5Mb cartridge for SQ306RD drive - SQ100 = 434, - /// SyQuest 10Mb cartridge for SQ312RD drive - SQ200 = 435, - /// SyQuest 15Mb cartridge for SQ319RD drive - SQ300 = 436, - /// SyQuest 105Mb cartridge for SQ3105 and SQ3270 drives - SQ310 = 437, - /// SyQuest 270Mb cartridge for SQ3270 drive - SQ327 = 438, - /// SyQuest 44Mb cartridge for SQ555, SQ5110 and SQ5200C/SQ200 drives - SQ400 = 439, - /// SyQuest 88Mb cartridge for SQ5110 and SQ5200C/SQ200 drives - SQ800 = 440, - /// SyQuest 1.5Gb cartridge for SyJet drive - [Obsolete] - SQ1500 = 441, - /// SyQuest 200Mb cartridge for use in SQ5200C drive - SQ2000 = 442, - /// SyQuest 1.5Gb cartridge for SyJet drive - SyJet = 443, - #endregion SyQuest, types 430 to 449 - - #region Nintendo, types 450 to 469 - FamicomGamePak = 450, GameBoyAdvanceGamePak = 451, GameBoyGamePak = 452, - /// Nintendo GameCube Optical Disc - GOD = 453, N64DD = 454, N64GamePak = 455, NESGamePak = 456, - Nintendo3DSGameCard = 457, NintendoDiskCard = 458, NintendoDSGameCard = 459, - NintendoDSiGameCard = 460, SNESGamePak = 461, SNESGamePakUS = 462, - /// Nintendo Wii Optical Disc - WOD = 463, - /// Nintendo Wii U Optical Disc - WUOD = 464, SwitchGameCard = 465, - #endregion Nintendo, types 450 to 469 - - #region IBM Tapes, types 470 to 479 - IBM3470 = 470, IBM3480 = 471, IBM3490 = 472, - IBM3490E = 473, IBM3592 = 474, - #endregion IBM Tapes, types 470 to 479 - - #region LTO Ultrium, types 480 to 509 - LTO = 480, LTO2 = 481, LTO3 = 482, - LTO3WORM = 483, LTO4 = 484, LTO4WORM = 485, - LTO5 = 486, LTO5WORM = 487, LTO6 = 488, - LTO6WORM = 489, LTO7 = 490, LTO7WORM = 491, - #endregion LTO Ultrium, types 480 to 509 - - #region MemoryStick, types 510 to 519 - MemoryStick = 510, MemoryStickDuo = 511, MemoryStickMicro = 512, - MemoryStickPro = 513, MemoryStickProDuo = 514, - #endregion MemoryStick, types 510 to 519 - - #region SecureDigital, types 520 to 529 - microSD = 520, miniSD = 521, SecureDigital = 522, - #endregion SecureDigital, types 520 to 529 - - #region MultiMediaCard, types 530 to 539 - MMC = 530, MMCmicro = 531, RSMMC = 532, - MMCplus = 533, MMCmobile = 534, - #endregion MultiMediaCard, types 530 to 539 - - #region SLR, types 540 to 569 - MLR1 = 540, MLR1SL = 541, MLR3 = 542, - SLR1 = 543, SLR2 = 544, SLR3 = 545, - SLR32 = 546, SLR32SL = 547, SLR4 = 548, - SLR5 = 549, SLR5SL = 550, SLR6 = 551, - SLRtape7 = 552, SLRtape7SL = 553, SLRtape24 = 554, - SLRtape24SL = 555, SLRtape40 = 556, SLRtape50 = 557, - SLRtape60 = 558, SLRtape75 = 559, SLRtape100 = 560, - SLRtape140 = 561, - #endregion SLR, types 540 to 569 - - #region QIC, types 570 to 589 - QIC11 = 570, QIC120 = 571, QIC1350 = 572, - QIC150 = 573, QIC24 = 574, QIC3010 = 575, - QIC3020 = 576, QIC3080 = 577, QIC3095 = 578, - QIC320 = 579, QIC40 = 580, QIC525 = 581, - QIC80 = 582, - #endregion QIC, types 570 to 589 - - #region StorageTek tapes, types 590 to 609 - STK4480 = 590, STK4490 = 591, STK9490 = 592, - T9840A = 593, T9840B = 594, T9840C = 595, - T9840D = 596, T9940A = 597, T9940B = 598, - T10000A = 599, T10000B = 600, T10000C = 601, - T10000D = 602, - #endregion StorageTek tapes, types 590 to 609 - - #region Travan, types 610 to 619 - Travan = 610, Travan1Ex = 611, Travan3 = 612, - Travan3Ex = 613, Travan4 = 614, Travan5 = 615, - Travan7 = 616, - #endregion Travan, types 610 to 619 - - #region VXA, types 620 to 629 - VXA1 = 620, VXA2 = 621, VXA3 = 622, - #endregion VXA, types 620 to 629 - - #region Magneto-optical, types 630 to 659 - /// 5,25", M.O., WORM, 650Mb, 318750 sectors, 1024 bytes/sector, ECMA-153, ISO 11560 - ECMA_153 = 630, - /// 5,25", M.O., WORM, 600Mb, 581250 sectors, 512 bytes/sector, ECMA-153, ISO 11560 - ECMA_153_512 = 631, - /// 3,5", M.O., RW, 128Mb, 248826 sectors, 512 bytes/sector, ECMA-154, ISO 10090 - ECMA_154 = 632, - /// 5,25", M.O., RW/WORM, 1Gb, 904995 sectors, 512 bytes/sector, ECMA-183, ISO 13481 - ECMA_183_512 = 633, - /// 5,25", M.O., RW/WORM, 1Gb, 498526 sectors, 1024 bytes/sector, ECMA-183, ISO 13481 - ECMA_183 = 634, - /// 5,25", M.O., RW/WORM, 1.2Gb, 1165600 sectors, 512 bytes/sector, ECMA-184, ISO 13549 - ECMA_184_512 = 635, - /// 5,25", M.O., RW/WORM, 1.3Gb, 639200 sectors, 1024 bytes/sector, ECMA-184, ISO 13549 - ECMA_184 = 636, - /// 300mm, M.O., WORM, ??? sectors, 1024 bytes/sector, ECMA-189, ISO 13614 - ECMA_189 = 637, - /// 300mm, M.O., WORM, ??? sectors, 1024 bytes/sector, ECMA-190, ISO 13403 - ECMA_190 = 638, - /// 5,25", M.O., RW/WORM, 936921 or 948770 sectors, 1024 bytes/sector, ECMA-195, ISO 13842 - ECMA_195 = 639, - /// 5,25", M.O., RW/WORM, 1644581 or 1647371 sectors, 512 bytes/sector, ECMA-195, ISO 13842 - ECMA_195_512 = 640, - /// 3,5", M.O., 446325 sectors, 512 bytes/sector, ECMA-201, ISO 13963 - ECMA_201 = 641, - /// 3,5", M.O., 429975 sectors, 512 bytes/sector, embossed, ISO 13963 - ECMA_201_ROM = 642, - /// 3,5", M.O., 371371 sectors, 1024 bytes/sector, ECMA-223 - ECMA_223 = 643, - /// 3,5", M.O., 694929 sectors, 512 bytes/sector, ECMA-223 - ECMA_223_512 = 644, - /// 5,25", M.O., 1244621 sectors, 1024 bytes/sector, ECMA-238, ISO 15486 - ECMA_238 = 645, - /// 3,5", M.O., 310352, 320332 or 321100 sectors, 2048 bytes/sector, ECMA-239, ISO 15498 - ECMA_239 = 646, - /// 356mm, M.O., 14476734 sectors, 1024 bytes/sector, ECMA-260, ISO 15898 - ECMA_260 = 647, - /// 356mm, M.O., 24445990 sectors, 1024 bytes/sector, ECMA-260, ISO 15898 - ECMA_260_Double = 648, - /// 5,25", M.O., 1128134 sectors, 2048 bytes/sector, ECMA-280, ISO 18093 - ECMA_280 = 649, - /// 300mm, M.O., 7355716 sectors, 2048 bytes/sector, ECMA-317, ISO 20162 - ECMA_317 = 650, - /// 5,25", M.O., 1095840 sectors, 4096 bytes/sector, ECMA-322, ISO 22092, 9.1Gb/cart - ECMA_322 = 651, - /// 5,25", M.O., 2043664 sectors, 2048 bytes/sector, ECMA-322, ISO 22092, 8.6Gb/cart - ECMA_322_2k = 652, - /// 3,5", M.O., 605846 sectors, 2048 bytes/sector, Cherry Book, GigaMo, ECMA-351, ISO 17346 - GigaMo = 653, - /// 3,5", M.O., 1063146 sectors, 2048 bytes/sector, Cherry Book 2, GigaMo 2, ECMA-353, ISO 22533 - GigaMo2 = 654, - /// 5,25", M.O., 1263472 sectors, 2048 bytes/sector, ISO 15286, 5.2Gb/cart - ISO_15286 = 655, - /// 5,25", M.O., 2319786 sectors, 1024 bytes/sector, ISO 15286, 4.8Gb/cart - ISO_15286_1024 = 656, - /// 5,25", M.O., ??????? sectors, 512 bytes/sector, ISO 15286, 4.1Gb/cart - ISO_15286_512 = 657, - /// 5,25", M.O., 314569 sectors, 1024 bytes/sector, ISO 10089, 650Mb/cart - ISO_10089 = 658, - /// 5,25", M.O., ?????? sectors, 512 bytes/sector, ISO 10089, 594Mb/cart - ISO_10089_512 = 659, - #endregion Magneto-optical, types 630 to 659 - - #region Other floppy standards, types 660 to 689 - CompactFloppy = 660, DemiDiskette = 661, - /// 3.5", 652 tracks, 2 sides, 512 bytes/sector, Floptical, ECMA-207, ISO 14169 - Floptical = 662, HiFD = 663, QuickDisk = 664, UHD144 = 665, - VideoFloppy = 666, Wafer = 667, ZXMicrodrive = 668, - #endregion Other floppy standards, types 660 to 669 - - #region Miscellaneous, types 670 to 689 - BeeCard = 670, Borsu = 671, DataStore = 672, - DIR = 673, DST = 674, DTF = 675, - DTF2 = 676, Flextra3020 = 677, Flextra3225 = 678, - HiTC1 = 679, HiTC2 = 680, LT1 = 681, - MiniCard = 872, Orb = 683, Orb5 = 684, - SmartMedia = 685, xD = 686, XQD = 687, - DataPlay = 688, - #endregion Miscellaneous, types 670 to 689 - - #region Apple specific media, types 690 to 699 - AppleProfile = 690, AppleWidget = 691, AppleHD20 = 692, - PriamDataTower = 693, Pippin = 694, - #endregion Apple specific media, types 690 to 699 - - #region DEC hard disks, types 700 to 729 - /// - /// 2382 cylinders, 4 tracks/cylinder, 42 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 204890112 bytes - /// - RA60 = 700, - /// - /// 546 cylinders, 14 tracks/cylinder, 31 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 121325568 bytes - /// - RA80 = 701, - /// - /// 1248 cylinders, 14 tracks/cylinder, 51 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 456228864 bytes - /// - RA81 = 702, - /// - /// 302 cylinders, 4 tracks/cylinder, 42 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 25976832 - /// bytes - /// - RC25 = 703, - /// - /// 615 cylinders, 4 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 21411840 - /// bytes - /// - RD31 = 704, - /// - /// 820 cylinders, 6 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 42823680 - /// bytes - /// - RD32 = 705, - /// - /// 306 cylinders, 4 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 10653696 - /// bytes - /// - RD51 = 706, - /// - /// 480 cylinders, 7 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 30965760 - /// bytes - /// - RD52 = 707, - /// - /// 1024 cylinders, 7 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 75497472 bytes - /// - RD53 = 708, - /// - /// 1225 cylinders, 8 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 159936000 bytes - /// - RD54 = 709, - /// - /// 411 cylinders, 3 tracks/cylinder, 22 sectors/track, 256 words/sector, 16 bits/word, 512 bytes/sector, 13888512 - /// bytes - /// - RK06 = 710, - /// - /// 411 cylinders, 3 tracks/cylinder, 20 sectors/track, 256 words/sector, 18 bits/word, 576 bytes/sector, 14204160 - /// bytes - /// - RK06_18 = 711, - /// - /// 815 cylinders, 3 tracks/cylinder, 22 sectors/track, 256 words/sector, 16 bits/word, 512 bytes/sector, 27540480 - /// bytes - /// - RK07 = 712, - /// - /// 815 cylinders, 3 tracks/cylinder, 20 sectors/track, 256 words/sector, 18 bits/word, 576 bytes/sector, 28166400 - /// bytes - /// - RK07_18 = 713, - /// - /// 823 cylinders, 5 tracks/cylinder, 32 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 67420160 - /// bytes - /// - RM02 = 714, - /// - /// 823 cylinders, 5 tracks/cylinder, 32 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 67420160 - /// bytes - /// - RM03 = 715, - /// - /// 823 cylinders, 19 tracks/cylinder, 32 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 256196608 bytes - /// - RM05 = 716, - /// - /// 203 cylinders, 10 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 22865920 bytes - /// - RP02 = 717, - /// - /// 203 cylinders, 10 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, - /// 23385600 bytes - /// - RP02_18 = 718, - /// - /// 400 cylinders, 10 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 45056000 bytes - /// - RP03 = 719, - /// - /// 400 cylinders, 10 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, - /// 46080000 bytes - /// - RP03_18 = 720, - /// - /// 411 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 87960576 bytes - /// - RP04 = 721, - /// - /// 411 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, - /// 89959680 bytes - /// - RP04_18 = 722, - /// - /// 411 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 87960576 bytes - /// - RP05 = 723, - /// - /// 411 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, - /// 89959680 bytes - /// - RP05_18 = 724, - /// - /// 815 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, - /// 174423040 bytes - /// - RP06 = 725, - /// - /// 815 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, - /// 178387200 bytes - /// - RP06_18 = 726, - #endregion DEC hard disks, types 700 to 729 - - #region Imation, types 730 to 739 - LS120 = 730, LS240 = 731, FD32MB = 732, - RDX = 733, - /// Imation 320Gb RDX - RDX320 = 734, - #endregion Imation, types 730 to 739 - - #region VideoNow, types 740 to 749 - VideoNow = 740, VideoNowColor = 741, VideoNowXp = 742, - #endregion - - #region Iomega, types 750 to 759 - /// 8"x11" Bernoulli Box disk with 10Mb capacity - Bernoulli10 = 750, - /// 8"x11" Bernoulli Box disk with 20Mb capacity - Bernoulli20 = 751, - /// 5⅓" Bernoulli Box II disk with 20Mb capacity - BernoulliBox2_20 = 752, - #endregion Iomega, types 750 to 759 - - #region Kodak, types 760 to 769 - KodakVerbatim3 = 760, KodakVerbatim6 = 761, KodakVerbatim12 = 762, - #endregion Kodak, types 760 to 769 - - #region Sony and Panasonic Blu-ray derived, types 770 to 799 - /// Professional Disc for video, single layer, rewritable, 23Gb - ProfessionalDisc = 770, - /// Professional Disc for video, dual layer, rewritable, 50Gb - ProfessionalDiscDual = 771, - /// Professional Disc for video, triple layer, rewritable, 100Gb - ProfessionalDiscTriple = 772, - /// Professional Disc for video, quad layer, write once, 128Gb - ProfessionalDiscQuad = 773, - /// Professional Disc for DATA, single layer, rewritable, 23Gb - PDD = 774, - /// Professional Disc for DATA, single layer, write once, 23Gb - PDD_WORM = 775, - /// Archival Disc, 1st gen., 300Gb - ArchivalDisc = 776, - /// Archival Disc, 2nd gen., 500Gb - ArchivalDisc2 = 777, - /// Archival Disc, 3rd gen., 1Tb - ArchivalDisc3 = 778, - /// Optical Disc archive, 1st gen., write once, 300Gb - ODC300R = 779, - /// Optical Disc archive, 1st gen., rewritable, 300Gb - ODC300RE = 780, - /// Optical Disc archive, 2nd gen., write once, 600Gb - ODC600R = 781, - /// Optical Disc archive, 2nd gen., rewritable, 600Gb - ODC600RE = 782, - /// Optical Disc archive, 3rd gen., rewritable, 1200Gb - ODC1200RE = 783, - /// Optical Disc archive, 3rd gen., write once, 1500Gb - ODC1500R = 784, - /// Optical Disc archive, 4th gen., write once, 3300Gb - ODC3300R = 785, - /// Optical Disc archive, 5th gen., write once, 5500Gb - ODC5500R = 786, - #endregion Sony and Panasonic Blu-ray derived, types 770 to 799 - - #region Magneto-optical, types 800 to 819 - /// 5,25", M.O., 4383356 sectors, 1024 bytes/sector, ECMA-322, ISO 22092, 9.1Gb/cart - ECMA_322_1k = 800, - /// 5,25", M.O., ??????? sectors, 512 bytes/sector, ECMA-322, ISO 22092, 9.1Gb/cart - ECMA_322_512 = 801, - /// 5,25", M.O., 1273011 sectors, 1024 bytes/sector, ISO 14517, 2.6Gb/cart - ISO_14517 = 802, - /// 5,25", M.O., 2244958 sectors, 512 bytes/sector, ISO 14517, 2.3Gb/cart - ISO_14517_512 = 803, - #endregion Magneto-optical, types 800 to 819 - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/MediaType.csv b/Aaru.CommonTypes/MediaType.csv deleted file mode 100644 index 42210bd..0000000 --- a/Aaru.CommonTypes/MediaType.csv +++ /dev/null @@ -1,528 +0,0 @@ -Enum,Value,Summary -"Unknown",0,"Unknown disk type" -"UnknownMO",1,"Unknown magneto-optical" -"GENERIC_HDD",2,"Generic hard disk" -"Microdrive",3,"Microdrive type hard disk" -"Zone_HDD",4,"Zoned hard disk" -"FlashDrive",5,"USB flash drives" -"UnknownTape",6,"Unknown data tape" -"CD",10,"Any unknown or standard violating CD" -"CDDA",11,"CD Digital Audio (Red Book)" -"CDG",12,"CD+G (Red Book)" -"CDEG",13,"CD+EG (Red Book)" -"CDI",14,"CD-i (Green Book)" -"CDROM",15,"CD-ROM (Yellow Book)" -"CDROMXA",16,"CD-ROM XA (Yellow Book)" -"CDPLUS",17,"CD+ (Blue Book)" -"CDMO",18,"CD-MO (Orange Book)" -"CDR",19,"CD-Recordable (Orange Book)" -"CDRW",20,"CD-ReWritable (Orange Book)" -"CDMRW",21,"Mount-Rainier CD-RW" -"VCD",22,"Video CD (White Book)" -"SVCD",23,"Super Video CD (White Book)" -"PCD",24,"Photo CD (Beige Book)" -"SACD",25,"Super Audio CD (Scarlet Book)" -"DDCD",26,"Double-Density CD-ROM (Purple Book)" -"DDCDR",27,"DD CD-R (Purple Book)" -"DDCDRW",28,"DD CD-RW (Purple Book)" -"DTSCD",29,"DTS audio CD (non-standard)" -"CDMIDI",30,"CD-MIDI (Red Book)" -"CDV",31,"CD-Video (ISO/IEC 61104)" -"PD650",32,"120mm, Phase-Change, 1298496 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485" -"PD650_WORM",33,"120mm, Write-Once, 1281856 sectors, 512 bytes/sector, PD650, ECMA-240, ISO 15485" -"CDIREADY",34,"CD-i Ready, contains a track before the first TOC track, in mode 2, and all TOC tracks are Audio. Subchannel marks track as audio pause." -"FMTOWNS",35, -"DVDROM",40,"DVD-ROM (applies to DVD Video and DVD Audio)" -"DVDR",41,"DVD-R" -"DVDRW",42,"DVD-RW" -"DVDPR",43,"DVD+R" -"DVDPRW",44,"DVD+RW" -"DVDPRWDL",45,"DVD+RW DL" -"DVDRDL",46,"DVD-R DL" -"DVDPRDL",47,"DVD+R DL" -"DVDRAM",48,"DVD-RAM" -"DVDRWDL",49,"DVD-RW DL" -"DVDDownload",50,"DVD-Download" -"HDDVDROM",51,"HD DVD-ROM (applies to HD DVD Video)" -"HDDVDRAM",52,"HD DVD-RAM" -"HDDVDR",53,"HD DVD-R" -"HDDVDRW",54,"HD DVD-RW" -"HDDVDRDL",55,"HD DVD-R DL" -"HDDVDRWDL",56,"HD DVD-RW DL" -"BDROM",60,"BD-ROM (and BD Video)" -"BDR",61,"BD-R" -"BDRE",62,"BD-RE" -"BDRXL",63,"BD-R XL" -"BDREXL",64,"BD-RE XL" -"UHDBD",65,"Ultra HD Blu-ray" -"EVD",70,"Enhanced Versatile Disc" -"FVD",71,"Forward Versatile Disc" -"HVD",72,"Holographic Versatile Disc" -"CBHD",73,"China Blue High Definition" -"HDVMD",74,"High Definition Versatile Multilayer Disc" -"VCDHD",75,"Versatile Compact Disc High Density" -"SVOD",76,"Stacked Volumetric Optical Disc" -"FDDVD",77,"Five Dimensional disc" -"CVD",78,"China Video Disc" -"LD",80,"Pioneer LaserDisc" -"LDROM",81,"Pioneer LaserDisc data" -"LDROM2",82, -"LVROM",83, -"MegaLD",84, -"HiMD",90,"Sony Hi-MD" -"MD",91,"Sony MiniDisc" -"MDData",92,"Sony MD-Data" -"MDData2",93,"Sony MD-Data2" -"MD60",94,"Sony MiniDisc, 60 minutes, formatted with Hi-MD format" -"MD74",95,"Sony MiniDisc, 74 minutes, formatted with Hi-MD format" -"MD80",96,"Sony MiniDisc, 80 minutes, formatted with Hi-MD format" -"UDO",100,"5.25"", Phase-Change, 1834348 sectors, 8192 bytes/sector, Ultra Density Optical, ECMA-350, ISO 17345" -"UDO2",101,"5.25"", Phase-Change, 3669724 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976" -"UDO2_WORM",102,"5.25"", Write-Once, 3668759 sectors, 8192 bytes/sector, Ultra Density Optical 2, ECMA-380, ISO 11976" -"PlayStationMemoryCard",110, -"PlayStationMemoryCard2",111, -"PS1CD",112,"Sony PlayStation game CD" -"PS2CD",113,"Sony PlayStation 2 game CD" -"PS2DVD",114,"Sony PlayStation 2 game DVD" -"PS3DVD",115,"Sony PlayStation 3 game DVD" -"PS3BD",116,"Sony PlayStation 3 game Blu-ray" -"PS4BD",117,"Sony PlayStation 4 game Blu-ray" -"UMD",118,"Sony PlayStation Portable Universal Media Disc (ECMA-365)" -"PlayStationVitaGameCard",119, -"PS5BD",120,"Sony PlayStation 5 game Ultra HD Blu-ray" -"XGD",130,"Microsoft X-box Game Disc" -"XGD2",131,"Microsoft X-box 360 Game Disc" -"XGD3",132,"Microsoft X-box 360 Game Disc" -"XGD4",133,"Microsoft X-box One Game Disc" -"MEGACD",150,"Sega MegaCD" -"SATURNCD",151,"Sega Saturn disc" -"GDROM",152,"Sega/Yamaha Gigabyte Disc" -"GDR",153,"Sega/Yamaha recordable Gigabyte Disc" -"SegaCard",154, -"MilCD",155, -"HuCard",170,"PC-Engine / TurboGrafx cartridge" -"SuperCDROM2",171,"PC-Engine / TurboGrafx CD" -"JaguarCD",172,"Atari Jaguar CD" -"ThreeDO",173,"3DO CD" -"PCFX",174,"NEC PC-FX" -"NeoGeoCD",175,"NEO-GEO CD" -"CDTV",176,"Commodore CDTV" -"CD32",177,"Amiga CD32" -"Nuon",178,"Nuon (DVD based videogame console)" -"Playdia",179,"Bandai Playdia" -"Apple32SS",180,"5.25"", SS, DD, 35 tracks, 13 spt, 256 bytes/sector, GCR" -"Apple32DS",181,"5.25"", DS, DD, 35 tracks, 13 spt, 256 bytes/sector, GCR" -"Apple33SS",182,"5.25"", SS, DD, 35 tracks, 16 spt, 256 bytes/sector, GCR" -"Apple33DS",183,"5.25"", DS, DD, 35 tracks, 16 spt, 256 bytes/sector, GCR" -"AppleSonySS",184,"3.5"", SS, DD, 80 tracks, 8 to 12 spt, 512 bytes/sector, GCR" -"AppleSonyDS",185,"3.5"", DS, DD, 80 tracks, 8 to 12 spt, 512 bytes/sector, GCR" -"AppleFileWare",186,"5.25"", DS, ?D, ?? tracks, ?? spt, 512 bytes/sector, GCR, opposite side heads, aka Twiggy" -"DOS_525_SS_DD_8",190,"5.25"", SS, DD, 40 tracks, 8 spt, 512 bytes/sector, MFM" -"DOS_525_SS_DD_9",191,"5.25"", SS, DD, 40 tracks, 9 spt, 512 bytes/sector, MFM" -"DOS_525_DS_DD_8",192,"5.25"", DS, DD, 40 tracks, 8 spt, 512 bytes/sector, MFM" -"DOS_525_DS_DD_9",193,"5.25"", DS, DD, 40 tracks, 9 spt, 512 bytes/sector, MFM" -"DOS_525_HD",194,"5.25"", DS, HD, 80 tracks, 15 spt, 512 bytes/sector, MFM" -"DOS_35_SS_DD_8",195,"3.5"", SS, DD, 80 tracks, 8 spt, 512 bytes/sector, MFM" -"DOS_35_SS_DD_9",196,"3.5"", SS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM" -"DOS_35_DS_DD_8",197,"3.5"", DS, DD, 80 tracks, 8 spt, 512 bytes/sector, MFM" -"DOS_35_DS_DD_9",198,"3.5"", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM" -"DOS_35_HD",199,"3.5"", DS, HD, 80 tracks, 18 spt, 512 bytes/sector, MFM" -"DOS_35_ED",200,"3.5"", DS, ED, 80 tracks, 36 spt, 512 bytes/sector, MFM" -"DMF",201,"3.5"", DS, HD, 80 tracks, 21 spt, 512 bytes/sector, MFM" -"DMF_82",202,"3.5"", DS, HD, 82 tracks, 21 spt, 512 bytes/sector, MFM" -"XDF_525",203,"5.25"", DS, HD, 80 tracks, ? spt, ??? + ??? + ??? bytes/sector, MFM track 0 = ??15 sectors, 512 bytes/sector, falsified to DOS as 19 spt, 512 bps" -"XDF_35",204,"3.5"", DS, HD, 80 tracks, 4 spt, 8192 + 2048 + 1024 + 512 bytes/sector, MFM track 0 = 19 sectors, 512 bytes/sector, falsified to DOS as 23 spt, 512 bps" -"IBM23FD",210,"8"", SS, SD, 32 tracks, 8 spt, 319 bytes/sector, FM" -"IBM33FD_128",211,"8"", SS, SD, 73 tracks, 26 spt, 128 bytes/sector, FM" -"IBM33FD_256",212,"8"", SS, SD, 74 tracks, 15 spt, 256 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector" -"IBM33FD_512",213,"8"", SS, SD, 74 tracks, 8 spt, 512 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector" -"IBM43FD_128",214,"8"", DS, SD, 74 tracks, 26 spt, 128 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector" -"IBM43FD_256",215,"8"", DS, SD, 74 tracks, 26 spt, 256 bytes/sector, FM, track 0 = 26 sectors, 128 bytes/sector" -"IBM53FD_256",216,"8"", DS, DD, 74 tracks, 26 spt, 256 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"IBM53FD_512",217,"8"", DS, DD, 74 tracks, 15 spt, 512 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"IBM53FD_1024",218,"8"", DS, DD, 74 tracks, 8 spt, 1024 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"RX01",220,"8"", SS, DD, 77 tracks, 26 spt, 128 bytes/sector, FM" -"RX02",221,"8"", SS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM/MFM" -"RX03",222,"8"", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM/MFM" -"RX50",223,"5.25"", SS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM" -"ACORN_525_SS_SD_40",230,"5,25"", SS, SD, 40 tracks, 10 spt, 256 bytes/sector, FM" -"ACORN_525_SS_SD_80",231,"5,25"", SS, SD, 80 tracks, 10 spt, 256 bytes/sector, FM" -"ACORN_525_SS_DD_40",232,"5,25"", SS, DD, 40 tracks, 16 spt, 256 bytes/sector, MFM" -"ACORN_525_SS_DD_80",233,"5,25"", SS, DD, 80 tracks, 16 spt, 256 bytes/sector, MFM" -"ACORN_525_DS_DD",234,"5,25"", DS, DD, 80 tracks, 16 spt, 256 bytes/sector, MFM" -"ACORN_35_DS_DD",235,"3,5"", DS, DD, 80 tracks, 5 spt, 1024 bytes/sector, MFM" -"ACORN_35_DS_HD",236,"3,5"", DS, HD, 80 tracks, 10 spt, 1024 bytes/sector, MFM" -"ATARI_525_SD",240,"5,25"", SS, SD, 40 tracks, 18 spt, 128 bytes/sector, FM" -"ATARI_525_ED",241,"5,25"", SS, ED, 40 tracks, 26 spt, 128 bytes/sector, MFM" -"ATARI_525_DD",242,"5,25"", SS, DD, 40 tracks, 18 spt, 256 bytes/sector, MFM" -"ATARI_35_SS_DD",243,"3,5"", SS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM" -"ATARI_35_DS_DD",244,"3,5"", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM" -"ATARI_35_SS_DD_11",245,"3,5"", SS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM" -"ATARI_35_DS_DD_11",246,"3,5"", DS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM" -"CBM_35_DD",250,"3,5"", DS, DD, 80 tracks, 10 spt, 512 bytes/sector, MFM (1581)" -"CBM_AMIGA_35_DD",251,"3,5"", DS, DD, 80 tracks, 11 spt, 512 bytes/sector, MFM (Amiga)" -"CBM_AMIGA_35_HD",252,"3,5"", DS, HD, 80 tracks, 22 spt, 512 bytes/sector, MFM (Amiga)" -"CBM_1540",253,"5,25"", SS, DD, 35 tracks, GCR" -"CBM_1540_Ext",254,"5,25"", SS, DD, 40 tracks, GCR" -"CBM_1571",255,"5,25"", DS, DD, 35 tracks, GCR" -"NEC_8_SD",260,"8"", DS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM" -"NEC_8_DD",261,"8"", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, MFM" -"NEC_525_SS",262,"5.25"", SS, SD, 80 tracks, 16 spt, 256 bytes/sector, FM" -"NEC_525_DS",263,"5.25"", DS, SD, 80 tracks, 16 spt, 256 bytes/sector, MFM" -"NEC_525_HD",264,"5,25"", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM" -"NEC_35_HD_8",265,"3,5"", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM, aka mode 3" -"NEC_35_HD_15",266,"3,5"", DS, HD, 80 tracks, 15 spt, 512 bytes/sector, MFM" -"NEC_35_TD",267,"3,5"", DS, TD, 240 tracks, 38 spt, 512 bytes/sector, MFM" -"SHARP_525",NEC_525_HD,"5,25"", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM" -"SHARP_525_9",268,"3,5"", DS, HD, 80 tracks, 9 spt, 1024 bytes/sector, MFM" -"SHARP_35",NEC_35_HD_8,"3,5"", DS, HD, 77 tracks, 8 spt, 1024 bytes/sector, MFM" -"SHARP_35_9",269,"3,5"", DS, HD, 80 tracks, 9 spt, 1024 bytes/sector, MFM" -"ECMA_99_8",270,"5,25"", DS, DD, 80 tracks, 8 spt, 1024 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"ECMA_99_15",271,"5,25"", DS, DD, 77 tracks, 15 spt, 512 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"ECMA_99_26",272,"5,25"", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, MFM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"ECMA_100",DOS_35_DS_DD_9,"3,5"", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, MFM" -"ECMA_125",DOS_35_HD,"3,5"", DS, HD, 80 tracks, 18 spt, 512 bytes/sector, MFM" -"ECMA_147",DOS_35_ED,"3,5"", DS, ED, 80 tracks, 36 spt, 512 bytes/sector, MFM" -"ECMA_54",273,"8"", SS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM" -"ECMA_59",274,"8"", DS, SD, 77 tracks, 26 spt, 128 bytes/sector, FM" -"ECMA_66",275,"5,25"", SS, DD, 35 tracks, 9 spt, 256 bytes/sector, FM, track 0 side 0 = 16 sectors, 128 bytes/sector" -"ECMA_69_8",276,"8"", DS, DD, 77 tracks, 8 spt, 1024 bytes/sector, FM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"ECMA_69_15",277,"8"", DS, DD, 77 tracks, 15 spt, 512 bytes/sector, FM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"ECMA_69_26",278,"8"", DS, DD, 77 tracks, 26 spt, 256 bytes/sector, FM, track 0 side 0 = 26 sectors, 128 bytes/sector, track 0 side 1 = 26 sectors, 256 bytes/sector" -"ECMA_70",279,"5,25"", DS, DD, 40 tracks, 16 spt, 256 bytes/sector, FM, track 0 side 0 = 16 sectors, 128 bytes/sector, track 0 side 1 = 16 sectors, 256 bytes/sector" -"ECMA_78",280,"5,25"", DS, DD, 80 tracks, 16 spt, 256 bytes/sector, FM, track 0 side 0 = 16 sectors, 128 bytes/sector, track 0 side 1 = 16 sectors, 256 bytes/sector" -"ECMA_78_2",281,"5,25"", DS, DD, 80 tracks, 9 spt, 512 bytes/sector, FM" -"FDFORMAT_525_DD",290,"5,25"", DS, DD, 82 tracks, 10 spt, 512 bytes/sector, MFM" -"FDFORMAT_525_HD",291,"5,25"", DS, HD, 82 tracks, 17 spt, 512 bytes/sector, MFM" -"FDFORMAT_35_DD",292,"3,5"", DS, DD, 82 tracks, 10 spt, 512 bytes/sector, MFM" -"FDFORMAT_35_HD",293,"3,5"", DS, HD, 82 tracks, 21 spt, 512 bytes/sector, MFM" -"Apricot_35",309,"3.5"", DS, DD, 70 tracks, 9 spt, 512 bytes/sector, MFM" -"ADR2120",310, -"ADR260",311, -"ADR30",312, -"ADR50",313, -"AIT1",320, -"AIT1Turbo",321, -"AIT2",322, -"AIT2Turbo",323, -"AIT3",324, -"AIT3Ex",325, -"AIT3Turbo",326, -"AIT4",327, -"AIT5",328, -"AITETurbo",329, -"SAIT1",330, -"SAIT2",331, -"Bernoulli",340,"Obsolete type for 8""x11"" Bernoulli Box disk" -"Bernoulli2",341,"Obsolete type for 5⅓"" Bernoulli Box II disks" -"Ditto",342, -"DittoMax",343, -"Jaz",344, -"Jaz2",345, -"PocketZip",346, -"REV120",347, -"REV35",348, -"REV70",349, -"ZIP100",350, -"ZIP250",351, -"ZIP750",352, -"Bernoulli35",353,"5⅓"" Bernoulli Box II disk with 35Mb capacity" -"Bernoulli44",354,"5⅓"" Bernoulli Box II disk with 44Mb capacity" -"Bernoulli65",355,"5⅓"" Bernoulli Box II disk with 65Mb capacity" -"Bernoulli90",356,"5⅓"" Bernoulli Box II disk with 90Mb capacity" -"Bernoulli105",357,"5⅓"" Bernoulli Box II disk with 105Mb capacity" -"Bernoulli150",358,"5⅓"" Bernoulli Box II disk with 150Mb capacity" -"Bernoulli230",359,"5⅓"" Bernoulli Box II disk with 230Mb capacity" -"CompactCassette",360, -"Data8",361, -"MiniDV",362, -"Dcas25",363,"D/CAS-25: Digital data on Compact Cassette form factor, special magnetic media, 9-track" -"Dcas85",364,"D/CAS-85: Digital data on Compact Cassette form factor, special magnetic media, 17-track" -"Dcas103",365,"D/CAS-103: Digital data on Compact Cassette form factor, special magnetic media, 21-track" -"CFast",370, -"CompactFlash",371, -"CompactFlashType2",372, -"DigitalAudioTape",380, -"DAT160",381, -"DAT320",382, -"DAT72",383, -"DDS1",384, -"DDS2",385, -"DDS3",386, -"DDS4",387, -"CompactTapeI",390, -"CompactTapeII",391, -"DECtapeII",392, -"DLTtapeIII",393, -"DLTtapeIIIxt",394, -"DLTtapeIV",395, -"DLTtapeS4",396, -"SDLT1",397, -"SDLT2",398, -"VStapeI",399, -"Exatape15m",400, -"Exatape22m",401, -"Exatape22mAME",402, -"Exatape28m",403, -"Exatape40m",404, -"Exatape45m",405, -"Exatape54m",406, -"Exatape75m",407, -"Exatape76m",408, -"Exatape80m",409, -"Exatape106m",410, -"Exatape160mXL",411, -"Exatape112m",412, -"Exatape125m",413, -"Exatape150m",414, -"Exatape170m",415, -"Exatape225m",416, -"ExpressCard34",420, -"ExpressCard54",421, -"PCCardTypeI",422, -"PCCardTypeII",423, -"PCCardTypeIII",424, -"PCCardTypeIV",425, -"EZ135",430,"SyQuest 135Mb cartridge for use in EZ135 and EZFlyer drives" -"EZ230",431,"SyQuest EZFlyer 230Mb cartridge for use in EZFlyer drive" -"Quest",432,"SyQuest 4.7Gb for use in Quest drive" -"SparQ",433,"SyQuest SparQ 1Gb cartridge" -"SQ100",434,"SyQuest 5Mb cartridge for SQ306RD drive" -"SQ200",435,"SyQuest 10Mb cartridge for SQ312RD drive" -"SQ300",436,"SyQuest 15Mb cartridge for SQ319RD drive" -"SQ310",437,"SyQuest 105Mb cartridge for SQ3105 and SQ3270 drives" -"SQ327",438,"SyQuest 270Mb cartridge for SQ3270 drive" -"SQ400",439,"SyQuest 44Mb cartridge for SQ555, SQ5110 and SQ5200C/SQ200 drives" -"SQ800",440,"SyQuest 88Mb cartridge for SQ5110 and SQ5200C/SQ200 drives" -"SQ1500",441,"SyQuest 1.5Gb cartridge for SyJet drive" -"SQ2000",442,"SyQuest 200Mb cartridge for use in SQ5200C drive" -"SyJet",443,"SyQuest 1.5Gb cartridge for SyJet drive" -"FamicomGamePak",450, -"GameBoyAdvanceGamePak",451, -"GameBoyGamePak",452, -"GOD",453,"Nintendo GameCube Optical Disc" -"N64DD",454, -"N64GamePak",455, -"NESGamePak",456, -"Nintendo3DSGameCard",457, -"NintendoDiskCard",458, -"NintendoDSGameCard",459, -"NintendoDSiGameCard",460, -"SNESGamePak",461, -"SNESGamePakUS",462, -"WOD",463,"Nintendo Wii Optical Disc" -"WUOD",464,"Nintendo Wii U Optical Disc" -"SwitchGameCard",465, -"IBM3470",470, -"IBM3480",471, -"IBM3490",472, -"IBM3490E",473, -"IBM3592",474, -"LTO",480, -"LTO2",481, -"LTO3",482, -"LTO3WORM",483, -"LTO4",484, -"LTO4WORM",485, -"LTO5",486, -"LTO5WORM",487, -"LTO6",488, -"LTO6WORM",489, -"LTO7",490, -"LTO7WORM",491, -"MemoryStick",510, -"MemoryStickDuo",511, -"MemoryStickMicro",512, -"MemoryStickPro",513, -"MemoryStickProDuo",514, -"microSD",520, -"miniSD",521, -"SecureDigital",522, -"MMC",530, -"MMCmicro",531, -"RSMMC",532, -"MMCplus",533, -"MMCmobile",534, -"MLR1",540, -"MLR1SL",541, -"MLR3",542, -"SLR1",543, -"SLR2",544, -"SLR3",545, -"SLR32",546, -"SLR32SL",547, -"SLR4",548, -"SLR5",549, -"SLR5SL",550, -"SLR6",551, -"SLRtape7",552, -"SLRtape7SL",553, -"SLRtape24",554, -"SLRtape24SL",555, -"SLRtape40",556, -"SLRtape50",557, -"SLRtape60",558, -"SLRtape75",559, -"SLRtape100",560, -"SLRtape140",561, -"QIC11",570, -"QIC120",571, -"QIC1350",572, -"QIC150",573, -"QIC24",574, -"QIC3010",575, -"QIC3020",576, -"QIC3080",577, -"QIC3095",578, -"QIC320",579, -"QIC40",580, -"QIC525",581, -"QIC80",582, -"STK4480",590, -"STK4490",591, -"STK9490",592, -"T9840A",593, -"T9840B",594, -"T9840C",595, -"T9840D",596, -"T9940A",597, -"T9940B",598, -"T10000A",599, -"T10000B",600, -"T10000C",601, -"T10000D",602, -"Travan",610, -"Travan1Ex",611, -"Travan3",612, -"Travan3Ex",613, -"Travan4",614, -"Travan5",615, -"Travan7",616, -"VXA1",620, -"VXA2",621, -"VXA3",622, -"ECMA_153",630,"5,25"", M.O., WORM, 650Mb, 318750 sectors, 1024 bytes/sector, ECMA-153, ISO 11560" -"ECMA_153_512",631,"5,25"", M.O., WORM, 600Mb, 581250 sectors, 512 bytes/sector, ECMA-153, ISO 11560" -"ECMA_154",632,"3,5"", M.O., RW, 128Mb, 248826 sectors, 512 bytes/sector, ECMA-154, ISO 10090" -"ECMA_183_512",633,"5,25"", M.O., RW/WORM, 1Gb, 904995 sectors, 512 bytes/sector, ECMA-183, ISO 13481" -"ECMA_183",634,"5,25"", M.O., RW/WORM, 1Gb, 498526 sectors, 1024 bytes/sector, ECMA-183, ISO 13481" -"ECMA_184_512",635,"5,25"", M.O., RW/WORM, 1.2Gb, 1165600 sectors, 512 bytes/sector, ECMA-184, ISO 13549" -"ECMA_184",636,"5,25"", M.O., RW/WORM, 1.3Gb, 639200 sectors, 1024 bytes/sector, ECMA-184, ISO 13549" -"ECMA_189",637,"300mm, M.O., WORM, ??? sectors, 1024 bytes/sector, ECMA-189, ISO 13614" -"ECMA_190",638,"300mm, M.O., WORM, ??? sectors, 1024 bytes/sector, ECMA-190, ISO 13403" -"ECMA_195",639,"5,25"", M.O., RW/WORM, 936921 or 948770 sectors, 1024 bytes/sector, ECMA-195, ISO 13842" -"ECMA_195_512",640,"5,25"", M.O., RW/WORM, 1644581 or 1647371 sectors, 512 bytes/sector, ECMA-195, ISO 13842" -"ECMA_201",641,"3,5"", M.O., 446325 sectors, 512 bytes/sector, ECMA-201, ISO 13963" -"ECMA_201_ROM",642,"3,5"", M.O., 429975 sectors, 512 bytes/sector, embossed, ISO 13963" -"ECMA_223",643,"3,5"", M.O., 371371 sectors, 1024 bytes/sector, ECMA-223" -"ECMA_223_512",644,"3,5"", M.O., 694929 sectors, 512 bytes/sector, ECMA-223" -"ECMA_238",645,"5,25"", M.O., 1244621 sectors, 1024 bytes/sector, ECMA-238, ISO 15486" -"ECMA_239",646,"3,5"", M.O., 310352, 320332 or 321100 sectors, 2048 bytes/sector, ECMA-239, ISO 15498" -"ECMA_260",647,"356mm, M.O., 14476734 sectors, 1024 bytes/sector, ECMA-260, ISO 15898" -"ECMA_260_Double",648,"356mm, M.O., 24445990 sectors, 1024 bytes/sector, ECMA-260, ISO 15898" -"ECMA_280",649,"5,25"", M.O., 1128134 sectors, 2048 bytes/sector, ECMA-280, ISO 18093" -"ECMA_317",650,"300mm, M.O., 7355716 sectors, 2048 bytes/sector, ECMA-317, ISO 20162" -"ECMA_322",651,"5,25"", M.O., 1095840 sectors, 4096 bytes/sector, ECMA-322, ISO 22092, 9.1Gb/cart" -"ECMA_322_2k",652,"5,25"", M.O., 2043664 sectors, 2048 bytes/sector, ECMA-322, ISO 22092, 8.6Gb/cart" -"GigaMo",653,"3,5"", M.O., 605846 sectors, 2048 bytes/sector, Cherry Book, GigaMo, ECMA-351, ISO 17346" -"GigaMo2",654,"3,5"", M.O., 1063146 sectors, 2048 bytes/sector, Cherry Book 2, GigaMo 2, ECMA-353, ISO 22533" -"ISO_15286",655,"5,25"", M.O., 1263472 sectors, 2048 bytes/sector, ISO 15286, 5.2Gb/cart" -"ISO_15286_1024",656,"5,25"", M.O., 2319786 sectors, 1024 bytes/sector, ISO 15286, 4.8Gb/cart" -"ISO_15286_512",657,"5,25"", M.O., ??????? sectors, 512 bytes/sector, ISO 15286, 4.1Gb/cart" -"ISO_10089",658,"5,25"", M.O., 314569 sectors, 1024 bytes/sector, ISO 10089, 650Mb/cart" -"ISO_10089_512",659,"5,25"", M.O., ?????? sectors, 512 bytes/sector, ISO 10089, 594Mb/cart" -"CompactFloppy",660, -"DemiDiskette",661, -"Floptical",662,"3.5"", 652 tracks, 2 sides, 512 bytes/sector, Floptical, ECMA-207, ISO 14169" -"HiFD",663, -"QuickDisk",664, -"UHD144",665, -"VideoFloppy",666, -"Wafer",667, -"ZXMicrodrive",668, -"BeeCard",670, -"Borsu",671, -"DataStore",672, -"DIR",673, -"DST",674, -"DTF",675, -"DTF2",676, -"Flextra3020",677, -"Flextra3225",678, -"HiTC1",679, -"HiTC2",680, -"LT1",681, -"MiniCard",872, -"Orb",683, -"Orb5",684, -"SmartMedia",685, -"xD",686, -"XQD",687, -"DataPlay",688, -"AppleProfile",690, -"AppleWidget",691, -"AppleHD20",692, -"PriamDataTower",693, -"Pippin",694, -"RA60",700,"2382 cylinders, 4 tracks/cylinder, 42 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 204890112 bytes" -"RA80",701,"546 cylinders, 14 tracks/cylinder, 31 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 121325568 bytes" -"RA81",702,"1248 cylinders, 14 tracks/cylinder, 51 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 456228864 bytes" -"RC25",703,"302 cylinders, 4 tracks/cylinder, 42 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 25976832 bytes" -"RD31",704,"615 cylinders, 4 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 21411840 bytes" -"RD32",705,"820 cylinders, 6 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 42823680 bytes" -"RD51",706,"306 cylinders, 4 tracks/cylinder, 17 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 10653696 bytes" -"RD52",707,"480 cylinders, 7 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 30965760 bytes" -"RD53",708,"1024 cylinders, 7 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 75497472 bytes" -"RD54",709,"1225 cylinders, 8 tracks/cylinder, 18 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 159936000 bytes" -"RK06",710,"411 cylinders, 3 tracks/cylinder, 22 sectors/track, 256 words/sector, 16 bits/word, 512 bytes/sector, 13888512 bytes" -"RK06_18",711,"411 cylinders, 3 tracks/cylinder, 20 sectors/track, 256 words/sector, 18 bits/word, 576 bytes/sector, 14204160 bytes" -"RK07",712,"815 cylinders, 3 tracks/cylinder, 22 sectors/track, 256 words/sector, 16 bits/word, 512 bytes/sector, 27540480 bytes" -"RK07_18",713,"815 cylinders, 3 tracks/cylinder, 20 sectors/track, 256 words/sector, 18 bits/word, 576 bytes/sector, 28166400 bytes" -"RM02",714,"823 cylinders, 5 tracks/cylinder, 32 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 67420160 bytes" -"RM03",715,"823 cylinders, 5 tracks/cylinder, 32 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 67420160 bytes" -"RM05",716,"823 cylinders, 19 tracks/cylinder, 32 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 256196608 bytes" -"RP02",717,"203 cylinders, 10 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 22865920 bytes" -"RP02_18",718,"203 cylinders, 10 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, 23385600 bytes" -"RP03",719,"400 cylinders, 10 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 45056000 bytes" -"RP03_18",720,"400 cylinders, 10 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, 46080000 bytes" -"RP04",721,"411 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 87960576 bytes" -"RP04_18",722,"411 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, 89959680 bytes" -"RP05",723,"411 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 87960576 bytes" -"RP05_18",724,"411 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, 89959680 bytes" -"RP06",725,"815 cylinders, 19 tracks/cylinder, 22 sectors/track, 128 words/sector, 32 bits/word, 512 bytes/sector, 174423040 bytes" -"RP06_18",726,"815 cylinders, 19 tracks/cylinder, 20 sectors/track, 128 words/sector, 36 bits/word, 576 bytes/sector, 178387200 bytes" -"LS120",730, -"LS240",731, -"FD32MB",732, -"RDX",733, -"RDX320",734,"Imation 320Gb RDX" -"VideoNow",740, -"VideoNowColor",741, -"VideoNowXp",742, -"Bernoulli10",750,"8""x11"" Bernoulli Box disk with 10Mb capacity" -"Bernoulli20",751,"8""x11"" Bernoulli Box disk with 20Mb capacity" -"BernoulliBox2_20",752,"5⅓"" Bernoulli Box II disk with 20Mb capacity" -"KodakVerbatim3",760, -"KodakVerbatim6",761, -"KodakVerbatim12",762, -"ProfessionalDisc",770,"Professional Disc for video, single layer, rewritable, 23Gb" -"ProfessionalDiscDual",771,"Professional Disc for video, dual layer, rewritable, 50Gb" -"ProfessionalDiscTriple",772,"Professional Disc for video, triple layer, rewritable, 100Gb" -"ProfessionalDiscQuad",773,"Professional Disc for video, quad layer, write once, 128Gb" -"PDD",774,"Professional Disc for DATA, single layer, rewritable, 23Gb" -"PDD_WORM",775,"Professional Disc for DATA, single layer, write once, 23Gb" -"ArchivalDisc",776,"Archival Disc, 1st gen., 300Gb" -"ArchivalDisc2",777,"Archival Disc, 2nd gen., 500Gb" -"ArchivalDisc3",778,"Archival Disc, 3rd gen., 1Tb" -"ODC300R",779,"Optical Disc archive, 1st gen., write once, 300Gb" -"ODC300RE",780,"Optical Disc archive, 1st gen., rewritable, 300Gb" -"ODC600R",781,"Optical Disc archive, 2nd gen., write once, 600Gb" -"ODC600RE",782,"Optical Disc archive, 2nd gen., rewritable, 600Gb" -"ODC1200RE",783,"Optical Disc archive, 3rd gen., rewritable, 1200Gb" -"ODC1500R",784,"Optical Disc archive, 3rd gen., write once, 1500Gb" -"ODC3300R",785,"Optical Disc archive, 4th gen., write once, 3300Gb" -"ODC5500R",786,"Optical Disc archive, 5th gen., write once, 5500Gb" -"ECMA_322_1k",800,"5,25"", M.O., 4383356 sectors, 1024 bytes/sector, ECMA-322, ISO 22092, 9.1Gb/cart" -"ECMA_322_512",801,"5,25"", M.O., ??????? sectors, 512 bytes/sector, ECMA-322, ISO 22092, 9.1Gb/cart" -"ISO_14517",802,"5,25"", M.O., 1273011 sectors, 1024 bytes/sector, ISO 14517, 2.6Gb/cart" -"ISO_14517_512",803,"5,25"", M.O., 2244958 sectors, 512 bytes/sector, ISO 14517, 2.3Gb/cart" diff --git a/Aaru.CommonTypes/MediaType.ods b/Aaru.CommonTypes/MediaType.ods deleted file mode 100644 index 3581ea68193781ca366ff336dc2a3536ed9d385d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37484 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 -// -// Component : Aaru common types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using Aaru.Console; - -namespace Aaru.CommonTypes -{ - public static partial class MediaTypeFromDevice - { - /// Gets the media type from an ATA (not ATAPI) device - /// Manufacturer string - /// Model string - /// Is the device removable? - /// Does the device self-identify as CompactFlash? - /// Is the device attached thru PCMCIA or CardBus? - /// Number of blocks in device - /// The media type - public static MediaType GetFromAta(string manufacturer, string model, bool removable, bool compactFlash, - bool pcmcia, ulong blocks) - { - if(!removable) - { - if(compactFlash) - return MediaType.CompactFlash; - - return pcmcia ? MediaType.PCCardTypeI : MediaType.GENERIC_HDD; - } - - if(manufacturer.ToLowerInvariant() == "syquest" && - model.ToLowerInvariant() == "sparq" && - blocks == 1961069) - { - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 1961069 blocks of 512 bytes, setting media type to SparQ."); - - return MediaType.SparQ; - } - - return MediaType.Unknown; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/MediaTypeFromDevice/FromMmc.cs b/Aaru.CommonTypes/MediaTypeFromDevice/FromMmc.cs deleted file mode 100644 index acc7c1b..0000000 --- a/Aaru.CommonTypes/MediaTypeFromDevice/FromMmc.cs +++ /dev/null @@ -1,179 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : FromMmc.cs -// Author(s) : Natalia Portillo -// -// Component : Aaru common types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using Aaru.Console; - -namespace Aaru.CommonTypes -{ - /// Gets the media type from a real device - public static partial class MediaTypeFromDevice - { - /// Gets the media type from an SCSI MultiMedia Commands compliant device - /// Model string - /// Medium type from MODE SENSE - /// Density code from MODE SENSE - /// Number of blocks in media - /// Size of a block in bytes - /// Is the device USB attached - /// Is the media an optical disc - /// Media type - static MediaType GetFromMmc(string model, byte mediumType, byte densityCode, ulong blocks, uint blockSize, - bool isUsb, bool opticalDisc) - { - switch(mediumType) - { - case 0x00: - if(blockSize == 512) - if(blocks == 1281856) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to WORM PD-650.", - mediumType, blocks, blockSize); - - return MediaType.PD650_WORM; - } - else - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to PD-650.", - mediumType, blocks, blockSize); - - return MediaType.PD650; - } - else - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, setting media type to Compact Disc.", - mediumType); - - return MediaType.CD; - } - case 0x01: - case 0x05: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, setting media type to CD-ROM.", - mediumType); - - return MediaType.CDROM; - case 0x02: - case 0x06: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, setting media type to Compact Disc Digital Audio.", - mediumType); - - return MediaType.CDDA; - case 0x03: - case 0x07: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, setting media type to CD+.", mediumType); - - return MediaType.CDPLUS; - case 0x04: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, setting media type to Photo CD.", - mediumType); - - return MediaType.PCD; - case 0x10: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, setting media type to CD-R.", mediumType); - - return MediaType.CDR; - case 0x20: - case 0x21: - case 0x22: - case 0x23: - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, setting media type to CD-RW.", mediumType); - - return MediaType.CDRW; - case 0x40 when isUsb && !opticalDisc: - case 0x41 when isUsb && !opticalDisc: - case 0x42 when isUsb && !opticalDisc: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h and device is USB, setting media type to Flash Drive.", - mediumType); - - return MediaType.FlashDrive; - case 0x80: - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - switch(densityCode) - { - case 0x42: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive starts with \"ult\", setting media type to LTO-2.", - mediumType, densityCode); - - return MediaType.LTO2; - case 0x44: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive starts with \"ult\", setting media type to LTO-2.", - mediumType, densityCode); - - return MediaType.LTO3; - case 0x46: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive starts with \"ult\", setting media type to LTO-2.", - mediumType, densityCode); - - return MediaType.LTO4; - case 0x58: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive starts with \"ult\", setting media type to LTO-2.", - mediumType, densityCode); - - return MediaType.LTO5; - } - - break; - } - - return MediaType.Unknown; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/MediaTypeFromDevice/FromOdc.cs b/Aaru.CommonTypes/MediaTypeFromDevice/FromOdc.cs deleted file mode 100644 index 757a878..0000000 --- a/Aaru.CommonTypes/MediaTypeFromDevice/FromOdc.cs +++ /dev/null @@ -1,336 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : FromOdc.cs -// Author(s) : Natalia Portillo -// -// Component : Aaru common types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using Aaru.Console; - -namespace Aaru.CommonTypes -{ - public static partial class MediaTypeFromDevice - { - /// Gets the device type from a SCSI Optical Device - /// Medium type from MODE SENSE - /// Number of blocks in device - /// Size in bytes of a block - /// Media type - static MediaType GetFromOdc(byte mediumType, ulong blocks, uint blockSize) - { - if(mediumType != 0x01 && - mediumType != 0x02 && - mediumType != 0x03 && - mediumType != 0x05 && - mediumType != 0x07) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, setting media type to unknown magneto-optical.", - mediumType); - - return MediaType.UnknownMO; - } - - switch(blockSize) - { - case 512: - { - switch(blocks) - { - case 248826: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-154 / ISO 10090 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_154; - case 429975: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-201 / ISO 13963 conforming 3½\" embossed magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_201_ROM; - case 446325: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-201 / ISO 13963 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_201; - case 694929: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-223 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_223_512; - case 904995: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-183 / ISO 13481 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_183_512; - case 1128772: - case 1163337: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-184 / ISO 13549 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_184_512; - case 1281856: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to WORM PD-650.", - mediumType, blocks, blockSize); - - return MediaType.PD650_WORM; - case 1298496: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to PD-650.", - mediumType, blocks, blockSize); - - return MediaType.PD650; - case 1644581: - case 1647371: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-195 / ISO 13842 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_195_512; - case 2244958: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 14517 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_14517_512; - default: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.UnknownMO; - } - } - - case 1024: - { - switch(blocks) - { - case 314569: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 10089 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_10089; - case 371371: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-223 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_223; - case 498526: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-184 / ISO 13549 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_183; - case 603466: - case 637041: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-184 / ISO 13549 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_184; - case 936921: - case 948770: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-195 / ISO 13842 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_195; - case 1244621: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-238 / ISO 15486 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_238; - case 1273011: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 14517 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_14517; - case 2319786: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 15286 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_15286_1024; - case 4383356: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-322 / ISO 22092 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_322_1k; - case 14476734: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-260 / ISO 15898 conforming 356mm magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_260; - case 24445990: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-260 / ISO 15898 conforming 356mm magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_260_Double; - default: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.UnknownMO; - } - } - - case 2048: - { - switch(blocks) - { - case 310352: // Found in real media - case 318988: - case 320332: - case 321100: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-239 / ISO 15498 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_239; - case 605846: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to GigaMO 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.GigaMo; - case 1063146: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to GigaMO 2 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.GigaMo2; - case 1128134: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-280 / ISO 18093 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_280; - case 1263472: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 15286 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_15286; - case 2043664: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-322 / ISO 22092 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_322_2k; - case 7355716: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-317 / ISO 20162 conforming 300mm magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_317; - default: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.UnknownMO; - } - } - - case 4096: - { - switch(blocks) - { - case 1095840: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-322 / ISO 22092 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_322; - default: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.UnknownMO; - } - } - - case 8192: - { - switch(blocks) - { - case 1834348: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to UDO.", - mediumType, blocks, blockSize); - - return MediaType.UDO; - case 3668759: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to WORM UDO2.", - mediumType, blocks, blockSize); - - return MediaType.UDO2_WORM; - case 3669724: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to UDO2.", - mediumType, blocks, blockSize); - - return MediaType.UDO2; - default: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.UnknownMO; - } - } - - default: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.UnknownMO; - } - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/MediaTypeFromDevice/FromSbc.cs b/Aaru.CommonTypes/MediaTypeFromDevice/FromSbc.cs deleted file mode 100644 index 2e6ba70..0000000 --- a/Aaru.CommonTypes/MediaTypeFromDevice/FromSbc.cs +++ /dev/null @@ -1,943 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : FromSbc.cs -// Author(s) : Natalia Portillo -// -// Component : Aaru common types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using Aaru.Console; - -namespace Aaru.CommonTypes -{ - public static partial class MediaTypeFromDevice - { - /// Gets the media type from a SCSI Block Commands compliant device - /// Vendor string - /// Model string - /// Medium type from MODE SENSE - /// Number of blocks in device - /// Size of a block in bytes - /// Media type - static MediaType GetFromSbc(string vendor, string model, byte mediumType, ulong blocks, uint blockSize) - { - if(vendor.ToLowerInvariant() == "syquest" && - model.StartsWith("syjet", StringComparison.OrdinalIgnoreCase)) - { - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, drive model is SyJet, setting media type to SyJet."); - - return MediaType.SyJet; - } - - switch(mediumType) - { - case 0x09: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-54 formatted 8\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_54; - case 0x0A: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-59 formatted 8\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_59; - case 0x0B: - switch(blockSize) - { - case 256: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-69 formatted 8\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_69_26; - case 512: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-69 formatted 8\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_69_15; - case 1024: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-69 formatted 8\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_69_8; - } - - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown.", - mediumType, blocks, blockSize); - - return MediaType.Unknown; - case 0x0E: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-66 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_66; - case 0x12: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-70 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_70; - case 0x16: - switch(blockSize) - { - case 256: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-78 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_78; - case 512: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-78 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_78_2; - } - - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown.", - mediumType, blocks, blockSize); - - return MediaType.Unknown; - case 0x1A: - switch(blockSize) - { - case 256: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-99 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_99_26; - case 512: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-99 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_99_15; - case 1024: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-99 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_99_8; - } - - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to unknown.", - mediumType, blocks, blockSize); - - return MediaType.Unknown; - case 0x1E: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 3½\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_35_DS_DD_9; - case 0x41: - switch(blocks) - { - case 58620544: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 120Gb REV.", - mediumType, blocks, blockSize); - - return MediaType.REV120; - case 34185728: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 70Gb REV.", - mediumType, blocks, blockSize); - - return MediaType.REV70; - case 17090880: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 35Gb REV.", - mediumType, blocks, blockSize); - - return MediaType.REV35; - } - - break; - case 0x93: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to PC-98 formatted 3½\" high density floppy (15 sectors).", - mediumType, blocks, blockSize); - - return MediaType.NEC_35_HD_15; - case 0x94: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 3½\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_35_HD; - } - - switch(blockSize) - { - case 128: - switch(blocks) - { - case 720: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Atari formatted 5¼\" single density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ATARI_525_SD; - case 1040: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Atari formatted 5¼\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ATARI_525_DD; - case 1898: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 8\" (33FD) floppy.", - mediumType, blocks, blockSize); - - return MediaType.IBM33FD_128; - case 2002: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-54 formatted 8\" single density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_54; - case 3848: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 8\" (43FD) floppy.", - mediumType, blocks, blockSize); - - return MediaType.IBM43FD_128; - case 4004: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-59 formatted 8\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_59; - } - - break; - case 256: - switch(blocks) - { - case 322: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-56 formatted 5¼\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_66; - case 400: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Acorn formatted 5¼\" single density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ACORN_525_SS_SD_40; - case 455: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Apple DOS 3.2 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.Apple32SS; - case 560: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Apple DOS 3.3 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.Apple33SS; - case 640: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Acorn formatted 5¼\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ACORN_525_SS_DD_40; - case 720: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Atari formatted 5¼\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ATARI_525_DD; - case 800: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Acorn formatted 5¼\" double density floppy (80 tracks).", - mediumType, blocks, blockSize); - - return MediaType.ACORN_525_SS_SD_80; - case 910: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Apple DOS 3.2 formatted 5¼\" double sided floppy.", - mediumType, blocks, blockSize); - - return MediaType.Apple32DS; - case 1120: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Apple DOS 3.3 formatted 5¼\" double sided floppy.", - mediumType, blocks, blockSize); - - return MediaType.Apple33DS; - case 1121: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 8\" (33FD) floppy.", - mediumType, blocks, blockSize); - - return MediaType.IBM33FD_256; - case 1280 when mediumType == 0x01: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Acorn formatted 5¼\" double density floppy with 80 tracks.", - mediumType, blocks, blockSize); - - return MediaType.ACORN_525_SS_DD_80; - case 1280: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-70 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_70; - case 2002: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to DEC RX02 floppy.", - mediumType, blocks, blockSize); - - return MediaType.RX02; - case 2560: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-78 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_78; - case 3848: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 8\" (53FD) floppy.", - mediumType, blocks, blockSize); - - return MediaType.IBM53FD_256; - case 4004: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-99 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_99_26; - case 39168 when vendor.StartsWith("iomega", StringComparison.OrdinalIgnoreCase): - case 41004 when vendor.StartsWith("iomega", StringComparison.OrdinalIgnoreCase): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, media has {0} blocks of 256 bytes, setting media type to 10Mb Bernoulli Box.", - blocks); - - return MediaType.Bernoulli10; - } - - break; - case 319: - switch(blocks) - { - case 256: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 8\" (23FD) floppy.", - mediumType, blocks, blockSize); - - return MediaType.IBM23FD; - } - - break; - case 512: - switch(blocks) - { - case 320: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 5¼\" double density single sided floppy (8 sectors).", - mediumType, blocks, blockSize); - - return MediaType.DOS_525_SS_DD_8; - case 360: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 5¼\" double density single sided floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_525_SS_DD_9; - case 610: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 8\" (33FD) floppy.", - mediumType, blocks, blockSize); - - return MediaType.IBM33FD_512; - case 630 when mediumType == 0x01: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Apricot formatted 3½\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.Apricot_35; - case 640 when mediumType == 0x01: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 3½\" double density single sided floppy (8 sectors).", - mediumType, blocks, blockSize); - - return MediaType.DOS_35_SS_DD_8; - case 640: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 5¼\" double density floppy (8 sectors).", - mediumType, blocks, blockSize); - - return MediaType.DOS_525_DS_DD_8; - case 720 when mediumType == 0x01: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 3½\" double density single sided floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_35_SS_DD_9; - case 720: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 5¼\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_525_DS_DD_9; - case 800: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Apple formatted 3½\" double density single sided floppy.", - mediumType, blocks, blockSize); - - return MediaType.AppleSonySS; - case 1280: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 3½\" double density floppy (8 sectors).", - mediumType, blocks, blockSize); - - return MediaType.DOS_35_DS_DD_8; - case 1440: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 3½\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_35_DS_DD_9; - case 1640: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to FDFORMAT formatted 3½\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.FDFORMAT_35_DD; - case 1760: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Amiga formatted 3½\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.CBM_AMIGA_35_DD; - case 2242: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 8\" (53FD) floppy.", - mediumType, blocks, blockSize); - - return MediaType.IBM53FD_512; - case 2332: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-99 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_99_15; - case 2400: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 5¼\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_525_HD; - case 2788: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to FDFORMAT formatted 5¼\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.FDFORMAT_525_HD; - case 2880: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 3½\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_35_HD; - case 3360: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Microsoft DMF formatted 3½\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.DMF; - case 3444: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to FDFORMAT formatted 3½\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.FDFORMAT_35_HD; - case 3520: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Amiga formatted 3½\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.CBM_AMIGA_35_HD; - case 5760: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 3½\" extra density floppy.", - mediumType, blocks, blockSize); - - return MediaType.DOS_35_ED; - case 40662 when mediumType == 0x20: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Floptical.", - mediumType, blocks, blockSize); - - return MediaType.Floptical; - case 65536 when model.ToLowerInvariant().StartsWith("ls-", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive model is LS (SuperDisk), media has 65536 blocks of 512 bytes, setting media type to FD32MB."); - - return MediaType.FD32MB; - case 78882 when vendor.StartsWith("iomega", StringComparison.OrdinalIgnoreCase): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, media has 78882 blocks of 512 bytes, setting media type to PocketZIP."); - - return MediaType.PocketZip; - case 86700 when vendor.ToLowerInvariant() == "syquest": - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 86700 blocks of 512 bytes, setting media type to SQ400."); - - return MediaType.SQ400; - case 87040 when vendor.StartsWith("iomega", StringComparison.OrdinalIgnoreCase): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, media has 87040 blocks of 512 bytes, setting media type to 44Mb Bernoulli Box II."); - - return MediaType.Bernoulli44; - case 173456 when vendor.ToLowerInvariant() == "syquest": - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 173456 blocks of 512 bytes, setting media type to SQ800."); - - return MediaType.SQ800; - case 175856 when vendor.StartsWith("iomega", StringComparison.OrdinalIgnoreCase): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, media has 175856 blocks of 512 bytes, setting media type to 90Mb Bernoulli Box II."); - - return MediaType.Bernoulli90; - case 196608 when model.ToLowerInvariant().StartsWith("zip", StringComparison.OrdinalIgnoreCase): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, drive model is ZIP, media has 196608 blocks of 512 bytes, setting media type to 100Mb ZIP."); - - return MediaType.ZIP100; - - case 215440 when vendor.ToLowerInvariant() == "syquest": - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 215440 blocks of 512 bytes, setting media type to SQ310."); - - return MediaType.SQ310; - case 246528 when model.ToLowerInvariant().StartsWith("ls-", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive model is LS (SuperDisk), media has 246528 blocks of 512 bytes, setting media type to LS-120."); - - return MediaType.LS120; - case 248826 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-154 / ISO 10090 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_154; - case 262144 when vendor.ToLowerInvariant() == "syquest": - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 262144 blocks of 512 bytes, setting media type to EZ135."); - - return MediaType.EZ135; - case 294918 when vendor.StartsWith("iomega", StringComparison.OrdinalIgnoreCase): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, media has 294918 blocks of 512 bytes, setting media type to 150Mb Bernoulli Box II."); - - return MediaType.Bernoulli150; - case 390696 when vendor.ToLowerInvariant() == "syquest": - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 390696 blocks of 512 bytes, setting media type to SQ2000."); - - return MediaType.SQ2000; - case 393380 when model.ToLowerInvariant().StartsWith("hifd", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive model is HiFD, media has 393380 blocks of 512 bytes, setting media type to HiFD.", - blocks, blockSize); - - return MediaType.HiFD; - case 429975 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-201 / ISO 13963 conforming 3½\" embossed magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_201_ROM; - case 446325 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-201 / ISO 13963 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_201; - case 450560 when vendor.ToLowerInvariant() == "syquest": - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 450560 blocks of 512 bytes, setting media type to EZ230."); - - return MediaType.EZ230; - case 469504 when model.ToLowerInvariant().StartsWith("ls-", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive model is LS (SuperDisk), media has 469504 blocks of 512 bytes, setting media type to LS-240."); - - return MediaType.LS240; - case 489532 when model.ToLowerInvariant().StartsWith("zip", StringComparison.OrdinalIgnoreCase): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, drive model is ZIP, media has 489532 blocks of 512 bytes, setting media type to 250Mb ZIP."); - - return MediaType.ZIP250; - case 524288 when vendor.ToLowerInvariant() == "syquest": - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 524288 blocks of 512 bytes, setting media type to SQ327."); - - return MediaType.SQ327; - case 694929 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-223 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_223_512; - case 904995 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-183 / ISO 13481 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_183_512; - case 1128772 when mediumType == 0x01 || mediumType == 0x02: - case 1163337 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-184 / ISO 13549 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_184_512; - case 1281856 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to WORM PD-650.", - mediumType, blocks, blockSize); - - return MediaType.PD650_WORM; - case 1298496 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to PD-650.", - mediumType, blocks, blockSize); - - return MediaType.PD650; - case 1470500 - when model.ToLowerInvariant().StartsWith("zip", StringComparison.OrdinalIgnoreCase): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, drive model is ZIP, media has 489532 blocks of 512 bytes, setting media type to 250Mb ZIP."); - - return MediaType.ZIP750; - case 1644581 when mediumType == 0x01 || mediumType == 0x02: - case 1647371 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-195 / ISO 13842 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_195_512; - case 1961069 when vendor.ToLowerInvariant() == "syquest": - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is SyQuest, media has 1961069 blocks of 512 bytes, setting media type to SparQ."); - - return MediaType.SparQ; - case 2091050 when model.ToLowerInvariant().StartsWith("jaz", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, drive model is JAZ, media has 2091050 blocks of 512 bytes, setting media type to 1Gb JAZ."); - - return MediaType.Jaz; - case 2244958 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 14517 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_14517_512; - case 3915600 when model.ToLowerInvariant().StartsWith("jaz", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive manufacturer is IOMEGA, drive model is JAZ, media has 3915600 blocks of 512 bytes, setting media type to 2Gb JAZ."); - - return MediaType.Jaz2; - case 4307184 when vendor.ToLowerInvariant().StartsWith("cws orb", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive model is Castlewood Orb, media has 4307184 blocks of 512 bytes, setting media type to Orb."); - - return MediaType.Orb; - case 625134256 when model.ToLowerInvariant().StartsWith("rdx", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive model is LS (SuperDisk), media has {0} blocks of {1} bytes, setting media type to unknown.", - blocks, blockSize); - - return MediaType.RDX320; - } - - break; - case 1024: - { - switch(blocks) - { - case 800 when mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Acorn formatted 3½\" double density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ACORN_35_DS_DD; - case 1220: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to IBM formatted 8\" (53FD) floppy.", - mediumType, blocks, blockSize); - - return MediaType.IBM53FD_1024; - case 1232 when model.ToLowerInvariant().StartsWith("ls-", StringComparison.Ordinal): - AaruConsole.DebugWriteLine("Media detection", - "Drive model is LS (SuperDisk), media has 2880 blocks of 512 bytes, setting media type to PC-98 formatted 3½\" high density floppy."); - - return MediaType.NEC_35_HD_8; - case 1232: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Sharp formatted 3½\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.SHARP_35; - case 1268: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-69 formatted 8\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_69_8; - case 1280: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to PC-98 formatted 5¼\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.NEC_525_HD; - case 1316: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-99 formatted 5¼\" floppy.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_99_8; - case 1600 when mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Acorn formatted 3½\" high density floppy.", - mediumType, blocks, blockSize); - - return MediaType.ACORN_35_DS_HD; - case 314569 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 10089 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_10089; - case 371371 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-223 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_223; - case 498526 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-183 / ISO 13481 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_183; - case 603466 when mediumType == 0x01 || mediumType == 0x02: - case 637041 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-184 / ISO 13549 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_184; - case 936921 when mediumType == 0x01 || mediumType == 0x02: - case 948770 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-195 / ISO 13842 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_195; - case 1244621 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-238 / ISO 15486 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_238; - case 1273011 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 14517 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_14517; - case 2319786 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 15286 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_15286_1024; - case 4383356 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-322 / ISO 22092 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_322_1k; - case 14476734 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-260 / ISO 15898 conforming 356mm magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_260; - case 24445990 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-260 / ISO 15898 conforming 356mm magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_260_Double; - } - } - - break; - case 2048: - { - switch(blocks) - { - case 112311: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 60 minute MiniDisc.", - mediumType, blocks, blockSize); - - return MediaType.MD60; - case 138363: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 74 minute MiniDisc.", - mediumType, blocks, blockSize); - - return MediaType.MD74; - case 149373: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 80 minute MiniDisc.", - mediumType, blocks, blockSize); - - return MediaType.MD80; - case 310352 when mediumType == 0x01 || mediumType == 0x02: // Found in real media - case 318988 when mediumType == 0x01 || mediumType == 0x02: - case 320332 when mediumType == 0x01 || mediumType == 0x02: - case 321100 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-239 / ISO 15498 conforming 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_239; - case 494023: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to Sony HiMD.", - mediumType, blocks, blockSize); - - return MediaType.HiMD; - case 605846 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to GigaMO 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.GigaMo; - case 1063146 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to GigaMO 2 3½\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.GigaMo2; - case 1128134 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-280 / ISO 18093 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_280; - case 1263472 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ISO 15286 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ISO_15286; - case 2043664 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-322 / ISO 22092 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_322_2k; - case 7355716 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-317 / ISO 20162 conforming 300mm magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_317; - } - } - - break; - case 4096: - { - switch(blocks) - { - case 1095840 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to ECMA-322 / ISO 22092 conforming 5¼\" magneto-optical.", - mediumType, blocks, blockSize); - - return MediaType.ECMA_322; - } - } - - break; - case 8192: - { - switch(blocks) - { - case 1834348 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to UDO.", - mediumType, blocks, blockSize); - - return MediaType.UDO; - case 3668759 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to WORM UDO2.", - mediumType, blocks, blockSize); - - return MediaType.UDO2_WORM; - case 3669724 when mediumType == 0x01 || mediumType == 0x02: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to UDO2.", - mediumType, blocks, blockSize); - - return MediaType.UDO2; - } - } - - break; - } - - return MediaType.Unknown; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/MediaTypeFromDevice/FromScsi.cs b/Aaru.CommonTypes/MediaTypeFromDevice/FromScsi.cs deleted file mode 100644 index 6571977..0000000 --- a/Aaru.CommonTypes/MediaTypeFromDevice/FromScsi.cs +++ /dev/null @@ -1,134 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : FromScsi.cs -// Author(s) : Natalia Portillo -// -// Component : Aaru common types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using Aaru.Console; - -namespace Aaru.CommonTypes -{ - public static partial class MediaTypeFromDevice - { - /// Tries to guess, from SCSI information, the media type of a device and/or its inserted media - /// The SCSI Peripheral Type as indicated in the INQUIRY response - /// The vendor string of the device - /// The model string of the device - /// The medium type byte from MODE SENSE - /// The density type byte from MODE SENSE - /// How many blocks are on the media - /// Size in bytes of each block - /// Device is USB - /// Is media an optical disc? - /// The media type - public static MediaType GetFromScsi(byte scsiPeripheralType, string vendor, string model, byte mediumType, - byte densityCode, ulong blocks, uint blockSize, bool isUsb, - bool opticalDisc) - { - switch(scsiPeripheralType) - { - // Direct access device - case 0x00: - // Simplified access device - case 0x0E: - if(mediumType == 0x03 || - mediumType == 0x05 || - mediumType == 0x07) - goto case 0x07; - - return GetFromSbc(vendor, model, mediumType, blocks, blockSize); - - // Sequential access device - case 0x01: - return GetFromSsc(scsiPeripheralType, vendor, model, mediumType, densityCode, blocks, blockSize); - - // Write-once device - case 0x04: - // Optical device - case 0x07: return GetFromOdc(mediumType, blocks, blockSize); - - // MultiMedia Device - case 0x05: return GetFromMmc(model, mediumType, densityCode, blocks, blockSize, isUsb, opticalDisc); - - // MD DATA drives - case 0x10 when model.StartsWith("MDM", StringComparison.Ordinal) || - model.StartsWith("MDH", StringComparison.Ordinal): - if(blockSize == 2048) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI peripheral type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to MiniDisc for Data.", - scsiPeripheralType, blocks, blockSize); - - return MediaType.MDData; - } - - switch(blocks) - { - case 57312: - AaruConsole.DebugWriteLine("Media detection", - "SCSI peripheral type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 60 minute MiniDisc.", - scsiPeripheralType, blocks, blockSize); - - return MediaType.MD60; - case 70464: - AaruConsole.DebugWriteLine("Media detection", - "SCSI peripheral type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 74 minute MiniDisc.", - scsiPeripheralType, blocks, blockSize); - - return MediaType.MD74; - case 76096: - AaruConsole.DebugWriteLine("Media detection", - "SCSI peripheral type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 80 minute MiniDisc.", - scsiPeripheralType, blocks, blockSize); - - return MediaType.MD80; - } - - AaruConsole.DebugWriteLine("Media detection", - "SCSI peripheral type is {0:X2}h, media has {1} blocks of {2} bytes, setting media type to 60 minute MiniDisc.", - scsiPeripheralType, blocks, blockSize); - - return MediaType.MD; - - // Host managed zoned block device - case 0x14: - AaruConsole.DebugWriteLine("Media detection", - "SCSI peripheral type is {0:X2}h, setting media type to host managed zoned block device.", - scsiPeripheralType, blocks, blockSize); - - return MediaType.Zone_HDD; - } - - return MediaType.Unknown; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/MediaTypeFromDevice/FromSsc.cs b/Aaru.CommonTypes/MediaTypeFromDevice/FromSsc.cs deleted file mode 100644 index ef4b08c..0000000 --- a/Aaru.CommonTypes/MediaTypeFromDevice/FromSsc.cs +++ /dev/null @@ -1,1611 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : FromSsc.cs -// Author(s) : Natalia Portillo -// -// Component : Aaru common types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using Aaru.Console; - -namespace Aaru.CommonTypes -{ - public static partial class MediaTypeFromDevice - { - /// Gets the media type from an SCSI Streaming Commands compliant device - /// Peripheral type - /// Vendor string - /// Model string - /// Medium type from MODE SENSE - /// Density code from MODE SENSE - /// Number of blocks in media - /// Size of a block in bytes - /// Media type - public static MediaType GetFromSsc(byte scsiPeripheralType, string vendor, string model, byte mediumType, - byte densityCode, ulong blocks, uint blockSize) - { - switch(mediumType) - { - case 0x00: - switch(densityCode) - { - case 0x04: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to QIC-11.", - mediumType, densityCode); - - return MediaType.QIC11; - case 0x05: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to QIC-24.", - mediumType, densityCode); - - return MediaType.QIC24; - case 0x09: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to IBM 3490.", - mediumType, densityCode); - - return MediaType.IBM3490; - case 0x0F: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to QIC-120.", - mediumType, densityCode); - - return MediaType.QIC120; - case 0x10: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to QIC-150.", - mediumType, densityCode); - - return MediaType.QIC150; - case 0x13: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to DDS.", - mediumType, densityCode); - - return MediaType.DDS1; - case 0x24: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to DDS-2.", - mediumType, densityCode); - - return MediaType.DDS2; - case 0x25: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to DDS-3.", - mediumType, densityCode); - - return MediaType.DDS3; - case 0x26: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to DDS-4.", - mediumType, densityCode); - - return MediaType.DDS4; - case 0x28: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to IBM 3490E.", - mediumType, densityCode); - - return MediaType.IBM3490E; - case 0x40: - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO.", - mediumType, densityCode); - - return MediaType.LTO; - } - - if(model.ToLowerInvariant().StartsWith("sdz", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"sdz\" setting media type to Super AIT.", - mediumType, densityCode); - - return MediaType.SAIT1; - } - - break; - - case 0x41: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-2.", - mediumType, densityCode); - - return MediaType.LTO2; - } - - break; - } - - case 0x42: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-2.", - mediumType, densityCode); - - return MediaType.LTO2; - } - - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T9840A.", - mediumType, densityCode); - - return MediaType.T9840A; - } - - break; - } - - case 0x43: - { - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T9940A.", - mediumType, densityCode); - - return MediaType.T9940A; - } - - break; - } - - case 0x44: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-3.", - mediumType, densityCode); - - return MediaType.LTO3; - } - - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T9940B.", - mediumType, densityCode); - - return MediaType.T9940B; - } - - break; - } - - case 0x45: - { - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T9840C.", - mediumType, densityCode); - - return MediaType.T9840C; - } - - break; - } - - case 0x46: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-4.", - mediumType, densityCode); - - return MediaType.LTO4; - } - - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T9840D.", - mediumType, densityCode); - - return MediaType.T9840D; - } - - break; - } - - case 0x4A: - { - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T10000A.", - mediumType, densityCode); - - return MediaType.T10000A; - } - - break; - } - - case 0x4B: - { - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T10000B.", - mediumType, densityCode); - - return MediaType.T10000B; - } - - break; - } - - case 0x4C: - { - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T10000C.", - mediumType, densityCode); - - return MediaType.T10000C; - } - - break; - } - - case 0x4D: - { - if(vendor.ToLowerInvariant() == "stk") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is StorageTek, setting media type to T10000D.", - mediumType, densityCode); - - return MediaType.T10000D; - } - - break; - } - - case 0x58: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-5.", - mediumType, densityCode); - - return MediaType.LTO5; - } - - break; - } - - // Used by some HP drives for all generations - case 0x8C: - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to DDS.", - mediumType, densityCode); - - return MediaType.DDS1; - } - } - - break; - case 0x01: - { - switch(densityCode) - { - case 0x44: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to WORM LTO-3.", - mediumType, densityCode); - - return MediaType.LTO3WORM; - } - - break; - } - - case 0x46: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to WORM LTO-4.", - mediumType, densityCode); - - return MediaType.LTO4WORM; - } - - break; - } - - case 0x58: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to WORM LTO-5.", - mediumType, densityCode); - - return MediaType.LTO5WORM; - } - - break; - } - } - } - - break; - case 0x18: - { - switch(densityCode) - { - case 0x00: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO.", - mediumType, densityCode); - - return MediaType.LTO; - } - - break; - } - - case 0x40: - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to LTO.", - mediumType, densityCode); - - return MediaType.LTO; - } - } - } - - break; - case 0x28: - { - switch(densityCode) - { - case 0x00: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-2.", - mediumType, densityCode); - - return MediaType.LTO2; - } - - break; - } - - case 0x42: - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to LTO-2.", - mediumType, densityCode); - - return MediaType.LTO2; - } - } - } - - break; - case 0x33: - { - switch(densityCode) - { - case 0x00: - case 0x25: - { - if(model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to DDS-3.", - mediumType, densityCode); - - return MediaType.DDS3; - } - - break; - } - } - } - - break; - case 0x34: - { - switch(densityCode) - { - case 0x00: - case 0x26: - { - if(model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to DDS-4.", - mediumType, densityCode); - - return MediaType.DDS4; - } - - break; - } - } - } - - break; - case 0x35: - { - switch(densityCode) - { - case 0x00: - case 0x47: - { - if(model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to DAT72.", - mediumType, densityCode); - - return MediaType.DAT72; - } - - break; - } - } - } - - break; - case 0x38: - { - switch(densityCode) - { - case 0x00: - case 0x44: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-3.", - mediumType, densityCode); - - return MediaType.LTO3; - } - - break; - } - } - } - - break; - case 0x3C: - { - switch(densityCode) - { - case 0x00: - case 0x44: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to WORM LTO-3.", - mediumType, densityCode); - - return MediaType.LTO3WORM; - } - - break; - } - } - } - - break; - case 0x48: - { - switch(densityCode) - { - case 0x00: - case 0x46: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-4.", - mediumType, densityCode); - - return MediaType.LTO4; - } - - break; - } - } - } - - break; - case 0x4C: - { - switch(densityCode) - { - case 0x00: - case 0x46: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to WORM LTO-4.", - mediumType, densityCode); - - return MediaType.LTO4WORM; - } - - break; - } - } - } - - break; - case 0x50: - { - switch(densityCode) - { - case 0x00: - case 0x24: - { - if(model.ToLowerInvariant().StartsWith("dat", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to DDS-2.", - mediumType, densityCode); - - return MediaType.DDS2; - } - - break; - } - } - } - - break; - case 0x58: - { - switch(densityCode) - { - case 0x00: - case 0x58: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-5.", - mediumType, densityCode); - - return MediaType.LTO5; - } - - break; - } - } - } - - break; - case 0x5C: - { - switch(densityCode) - { - case 0x00: - case 0x58: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to WORM LTO-5.", - mediumType, densityCode); - - return MediaType.LTO5WORM; - } - - break; - } - } - } - - break; - case 0x68: - { - switch(densityCode) - { - case 0x00: - case 0x5A: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-6.", - mediumType, densityCode); - - return MediaType.LTO6; - } - - break; - } - } - } - - break; - case 0x6C: - { - switch(densityCode) - { - case 0x00: - case 0x5A: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to WORM LTO-6.", - mediumType, densityCode); - - return MediaType.LTO6WORM; - } - - break; - } - } - } - - break; - case 0x78: - { - switch(densityCode) - { - case 0x00: - case 0x5C: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to LTO-7.", - mediumType, densityCode); - - return MediaType.LTO7; - } - - break; - } - } - } - - break; - case 0x7C: - { - switch(densityCode) - { - case 0x00: - case 0x5C: - { - if(model.ToLowerInvariant().StartsWith("ult", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"ult\" setting media type to WORM LTO-7.", - mediumType, densityCode); - - return MediaType.LTO7WORM; - } - - break; - } - } - } - - break; - case 0x81: - { - switch(densityCode) - { - case 0x00: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 15m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape15m; - } - - if(vendor.ToLowerInvariant() == "ibm") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is IBM, setting media type to IBM 3592.", - mediumType, densityCode); - - return MediaType.IBM3592; - } - - if(model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"vxa\" setting media type to VXA.", - mediumType, densityCode); - - return MediaType.VXA1; - } - - break; - } - - case 0x14: - case 0x15: - case 0x27: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 15m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape15m; - } - - break; - } - - case 0x29: - case 0x2A: - { - if(vendor.ToLowerInvariant() == "ibm") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is IBM, setting media type to IBM 3592.", - mediumType, densityCode); - - return MediaType.IBM3592; - } - - break; - } - - case 0x80: - { - if(model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"vxa\" setting media type to VXA.", - mediumType, densityCode); - - return MediaType.VXA1; - } - - break; - } - } - } - - break; - case 0x82: - { - switch(densityCode) - { - case 0x00: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 28m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape28m; - } - - if(vendor.ToLowerInvariant() == "ibm") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is IBM, setting media type to IBM 3592.", - mediumType, densityCode); - - return MediaType.IBM3592; - } - - break; - } - - case 0x0A: - { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to CompactTape.", - mediumType, densityCode); - - return MediaType.CompactTapeI; - } - - break; - } - - case 0x14: - case 0x15: - case 0x27: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 28m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape28m; - } - - break; - } - - case 0x16: - { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to CompactTape II.", - mediumType, densityCode); - - return MediaType.CompactTapeII; - } - - break; - } - - case 0x29: - case 0x2A: - { - if(vendor.ToLowerInvariant() == "ibm") - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive manufacturer is IBM, setting media type to IBM 3592.", - mediumType, densityCode); - - return MediaType.IBM3592; - } - - break; - } - - case 0x81: - { - if(model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"vxa\" setting media type to VXA 2.", - mediumType, densityCode); - - return MediaType.VXA2; - } - - break; - } - - case 0x82: - { - if(model.ToLowerInvariant().StartsWith("vxa", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"vxa\" setting media type to VXA 3.", - mediumType, densityCode); - - return MediaType.VXA3; - } - - break; - } - } - } - - break; - case 0x83: - { - switch(densityCode) - { - case 0x00: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 54m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape54m; - } - - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to DLTtape III.", - mediumType, densityCode); - - return MediaType.DLTtapeIII; - } - - break; - } - - case 0x14: - case 0x15: - case 0x27: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 54m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape54m; - } - - break; - } - - case 0x17: - case 0x18: - case 0x19: - case 0x80: - case 0x81: - { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to DLTtape III.", - mediumType, densityCode); - - return MediaType.DLTtapeIII; - } - - break; - } - } - } - - break; - case 0x84: - { - switch(densityCode) - { - case 0x00: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 80m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape80m; - } - - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to DLTtape IIIxt.", - mediumType, densityCode); - - return MediaType.DLTtapeIIIxt; - } - - break; - } - - case 0x14: - case 0x15: - case 0x27: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 80m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape80m; - } - - break; - } - - case 0x19: - case 0x80: - case 0x81: - { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to DLTtape IIIxt.", - mediumType, densityCode); - - return MediaType.DLTtapeIIIxt; - } - - break; - } - } - } - - break; - case 0x85: - { - switch(densityCode) - { - case 0x00: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 106m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape106m; - } - - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to DLTtape IV.", - mediumType, densityCode); - - return MediaType.DLTtapeIV; - } - - if(model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"stt\" setting media type to Travan 5.", - mediumType, densityCode); - - return MediaType.Travan5; - } - - break; - } - - case 0x14: - case 0x15: - case 0x27: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 106m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape106m; - } - - break; - } - - case 0x1A: - case 0x1B: - case 0x40: - case 0x41: - case 0x82: - case 0x83: - case 0x84: - case 0x85: - case 0x86: - case 0x87: - case 0x88: - case 0x89: - { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to DLTtape IV.", - mediumType, densityCode); - - return MediaType.DLTtapeIV; - } - - break; - } - - case 0x46: - { - if(model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"stt\" setting media type to Travan 5.", - mediumType, densityCode); - - return MediaType.Travan5; - } - - break; - } - } - } - - break; - case 0x86: - { - switch(densityCode) - { - case 0x00: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 160m Exatape XL.", - mediumType, densityCode); - - return MediaType.Exatape160mXL; - } - - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to SuperDLT.", - mediumType, densityCode); - - return MediaType.SDLT1; - } - - break; - } - - case 0x8C: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 160m Exatape XL.", - mediumType, densityCode); - - return MediaType.Exatape160mXL; - } - - break; - } - - case 0x91: - case 0x92: - case 0x93: - { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to SuperDLT.", - mediumType, densityCode); - - return MediaType.SDLT1; - } - - break; - } - } - } - - break; - case 0x87: - { - switch(densityCode) - { - case 0x00: - case 0x4A: - { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to SuperDLT 2.", - mediumType, densityCode); - - return MediaType.SDLT2; - } - - break; - } - } - } - - break; - case 0x90: - { - switch(densityCode) - { - case 0x00: - case 0x50: - case 0x98: - case 0x99: - { - if(model.ToLowerInvariant().StartsWith("dlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("sdlt", StringComparison.Ordinal) || - model.ToLowerInvariant().StartsWith("superdlt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"dlt\" setting media type to VStape I.", - mediumType, densityCode); - - return MediaType.VStapeI; - } - - break; - } - } - } - - break; - case 0x95: - { - if(model.ToLowerInvariant().StartsWith("stt", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"stt\" setting media type to Travan 7.", - mediumType, densityCode); - - return MediaType.Travan7; - } - } - - break; - case 0xB6: - { - switch(densityCode) - { - case 0x45: - // HP Colorado tapes have a different capacity but return same density code at least in Seagate drives - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to Travan 4.", - mediumType, densityCode); - - return MediaType.Travan4; - } - } - - break; - case 0xB7: - { - switch(densityCode) - { - case 0x47: - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, setting media type to Travan 5.", - mediumType, densityCode); - - return MediaType.Travan5; - } - } - - break; - case 0xC1: - { - switch(densityCode) - { - case 0x00: - case 0x14: - case 0x15: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 22m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape22m; - } - - break; - } - } - } - - break; - case 0xC2: - { - switch(densityCode) - { - case 0x00: - case 0x14: - case 0x15: - case 0x27: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 40m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape40m; - } - - break; - } - } - } - - break; - case 0xC3: - { - switch(densityCode) - { - case 0x00: - case 0x14: - case 0x15: - case 0x27: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 76m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape76m; - } - - break; - } - } - } - - break; - case 0xC4: - { - switch(densityCode) - { - case 0x00: - case 0x14: - case 0x15: - case 0x27: - case 0x8C: - case 0x90: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 112m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape112m; - } - - break; - } - } - } - - break; - case 0xD1: - { - switch(densityCode) - { - case 0x00: - case 0x27: - case 0x28: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 22m Exatape AME.", - mediumType, densityCode); - - return MediaType.Exatape22mAME; - } - - break; - } - } - } - - break; - case 0xD2: - { - switch(densityCode) - { - case 0x00: - case 0x27: - case 0x28: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 170m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape170m; - } - - break; - } - } - } - - break; - case 0xD3: - { - switch(densityCode) - { - case 0x00: - case 0x27: - case 0x28: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 125m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape125m; - } - - break; - } - } - } - - break; - case 0xD4: - { - switch(densityCode) - { - case 0x00: - case 0x27: - case 0x28: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 45m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape45m; - } - - break; - } - } - } - - break; - case 0xD5: - { - switch(densityCode) - { - case 0x00: - case 0x27: - case 0x28: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 225m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape225m; - } - - break; - } - } - } - - break; - case 0xD6: - { - switch(densityCode) - { - case 0x00: - case 0x27: - case 0x28: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 150m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape150m; - } - - break; - } - } - } - - break; - case 0xD7: - { - switch(densityCode) - { - case 0x00: - case 0x27: - case 0x28: - { - if(model.ToLowerInvariant().StartsWith("exb", StringComparison.Ordinal)) - { - AaruConsole.DebugWriteLine("Media detection", - "SCSI medium type is {0:X2}h, density code is {1:X2}h, drive model starts with \"exb\" setting media type to 75m Exatape.", - mediumType, densityCode); - - return MediaType.Exatape75m; - } - - break; - } - } - } - - break; - } - - return MediaType.Unknown; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Metadata/CdOffset.cs b/Aaru.CommonTypes/Metadata/CdOffset.cs deleted file mode 100644 index 3598e5b..0000000 --- a/Aaru.CommonTypes/Metadata/CdOffset.cs +++ /dev/null @@ -1,58 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CdOffset.cs -// Author(s) : Natalia Portillo -// -// Component : Device database. -// -// --[ Description ] ---------------------------------------------------------- -// -// Models Compact Disc read offset entries from AccurateRip database. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.ComponentModel.DataAnnotations; - -namespace Aaru.CommonTypes.Metadata -{ - /// Describes CD reading offset - public class CdOffset - { - /// Drive manufacturer - public string Manufacturer { get; set; } - /// Drive model - public string Model { get; set; } - /// Reading offset - public short Offset { get; set; } - /// Number of times this offset has been submitted - public int Submissions { get; set; } - /// Percentage of submissions in agreement with this offset - [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:P0}")] - public float Agreement { get; set; } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Metadata/DeviceReport.cs b/Aaru.CommonTypes/Metadata/DeviceReport.cs deleted file mode 100644 index d4abfe5..0000000 --- a/Aaru.CommonTypes/Metadata/DeviceReport.cs +++ /dev/null @@ -1,1070 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : DeviceReport.cs -// Author(s) : Natalia Portillo -// -// Component : XML metadata. -// -// --[ Description ] ---------------------------------------------------------- -// -// Contains classes for an XML device report. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.ComponentModel; -using System.Xml.Serialization; -using Aaru.CommonTypes.Structs.Devices.ATA; -using Aaru.CommonTypes.Structs.Devices.SCSI; -using Aaru.CommonTypes.Structs.Devices.SCSI.Modes; -using Newtonsoft.Json; - -// This is obsolete -#pragma warning disable 1591 - -// ReSharper disable InconsistentNaming -// ReSharper disable UnusedAutoPropertyAccessor.Global - -namespace Aaru.CommonTypes.Metadata -{ - [Serializable, XmlRoot("DicDeviceReport", Namespace = "", IsNullable = false)] - public class DeviceReport - { - public usbType USB { get; set; } - public firewireType FireWire { get; set; } - public pcmciaType PCMCIA { get; set; } - public bool CompactFlash { get; set; } - public ataType ATA { get; set; } - public ataType ATAPI { get; set; } - public scsiType SCSI { get; set; } - public mmcsdType MultiMediaCard { get; set; } - public mmcsdType SecureDigital { get; set; } - - [XmlIgnore] - public bool CompactFlashSpecified { get; set; } - } - - public class usbType - { - public ushort VendorID { get; set; } - public ushort ProductID { get; set; } - public string Manufacturer { get; set; } - public string Product { get; set; } - public bool RemovableMedia { get; set; } - public byte[] Descriptors { get; set; } - } - - public class firewireType - { - public uint VendorID { get; set; } - public uint ProductID { get; set; } - public string Manufacturer { get; set; } - public string Product { get; set; } - public bool RemovableMedia { get; set; } - } - - public class ataType - { - public string AdditionalPID { get; set; } - public Identify.TransferMode APIOSupported { get; set; } - public ushort ATAPIByteCount { get; set; } - public ushort BufferType { get; set; } - public ushort BufferSize { get; set; } - public Identify.CapabilitiesBit Capabilities { get; set; } - public Identify.CapabilitiesBit2 Capabilities2 { get; set; } - public Identify.CapabilitiesBit3 Capabilities3 { get; set; } - public ushort CFAPowerMode { get; set; } - public Identify.CommandSetBit CommandSet { get; set; } - public Identify.CommandSetBit2 CommandSet2 { get; set; } - public Identify.CommandSetBit3 CommandSet3 { get; set; } - public Identify.CommandSetBit4 CommandSet4 { get; set; } - public Identify.CommandSetBit5 CommandSet5 { get; set; } - public byte CurrentAAM { get; set; } - public ushort CurrentAPM { get; set; } - public Identify.DataSetMgmtBit DataSetMgmt { get; set; } - public ushort DataSetMgmtSize { get; set; } - public Identify.DeviceFormFactorEnum DeviceFormFactor { get; set; } - public Identify.TransferMode DMAActive { get; set; } - public Identify.TransferMode DMASupported { get; set; } - public byte DMATransferTimingMode { get; set; } - public ushort EnhancedSecurityEraseTime { get; set; } - public Identify.CommandSetBit EnabledCommandSet { get; set; } - public Identify.CommandSetBit2 EnabledCommandSet2 { get; set; } - public Identify.CommandSetBit3 EnabledCommandSet3 { get; set; } - public Identify.CommandSetBit4 EnabledCommandSet4 { get; set; } - public Identify.SATAFeaturesBit EnabledSATAFeatures { get; set; } - public ulong ExtendedUserSectors { get; set; } - public byte FreeFallSensitivity { get; set; } - public string FirmwareRevision { get; set; } - public Identify.GeneralConfigurationBit GeneralConfiguration { get; set; } - public ushort HardwareResetResult { get; set; } - public ushort InterseekDelay { get; set; } - public Identify.MajorVersionBit MajorVersion { get; set; } - public ushort MasterPasswordRevisionCode { get; set; } - public ushort MaxDownloadMicroMode3 { get; set; } - public ushort MaxQueueDepth { get; set; } - public Identify.TransferMode MDMAActive { get; set; } - public Identify.TransferMode MDMASupported { get; set; } - public ushort MinDownloadMicroMode3 { get; set; } - public ushort MinMDMACycleTime { get; set; } - public ushort MinorVersion { get; set; } - public ushort MinPIOCycleTimeNoFlow { get; set; } - public ushort MinPIOCycleTimeFlow { get; set; } - public string Model { get; set; } - public byte MultipleMaxSectors { get; set; } - public byte MultipleSectorNumber { get; set; } - public ushort NVCacheCaps { get; set; } - public uint NVCacheSize { get; set; } - public ushort NVCacheWriteSpeed { get; set; } - public byte NVEstimatedSpinUp { get; set; } - public ushort PacketBusRelease { get; set; } - public byte PIOTransferTimingMode { get; set; } - public byte RecommendedAAM { get; set; } - public ushort RecommendedMDMACycleTime { get; set; } - public ushort RemovableStatusSet { get; set; } - public Identify.SATACapabilitiesBit SATACapabilities { get; set; } - public Identify.SATACapabilitiesBit2 SATACapabilities2 { get; set; } - public Identify.SATAFeaturesBit SATAFeatures { get; set; } - public Identify.SCTCommandTransportBit SCTCommandTransport { get; set; } - public uint SectorsPerCard { get; set; } - public ushort SecurityEraseTime { get; set; } - public Identify.SecurityStatusBit SecurityStatus { get; set; } - public ushort ServiceBusyClear { get; set; } - public Identify.SpecificConfigurationEnum SpecificConfiguration { get; set; } - public ushort StreamAccessLatency { get; set; } - public ushort StreamMinReqSize { get; set; } - public uint StreamPerformanceGranularity { get; set; } - public ushort StreamTransferTimeDMA { get; set; } - public ushort StreamTransferTimePIO { get; set; } - public ushort TransportMajorVersion { get; set; } - public ushort TransportMinorVersion { get; set; } - public Identify.TrustedComputingBit TrustedComputing { get; set; } - public Identify.TransferMode UDMAActive { get; set; } - public Identify.TransferMode UDMASupported { get; set; } - public byte WRVMode { get; set; } - public uint WRVSectorCountMode3 { get; set; } - public uint WRVSectorCountMode2 { get; set; } - - public byte[] Identify { get; set; } - - public testedMediaType ReadCapabilities { get; set; } - public testedMediaType[] RemovableMedias { get; set; } - - [XmlIgnore] - public bool AdditionalPIDSpecified { get; set; } - [XmlIgnore] - public bool APIOSupportedSpecified { get; set; } - [XmlIgnore] - public bool ATAPIByteCountSpecified { get; set; } - [XmlIgnore] - public bool BufferTypeSpecified { get; set; } - [XmlIgnore] - public bool BufferSizeSpecified { get; set; } - [XmlIgnore] - public bool CapabilitiesSpecified { get; set; } - [XmlIgnore] - public bool Capabilities2Specified { get; set; } - [XmlIgnore] - public bool Capabilities3Specified { get; set; } - [XmlIgnore] - public bool CFAPowerModeSpecified { get; set; } - [XmlIgnore] - public bool CommandSetSpecified { get; set; } - [XmlIgnore] - public bool CommandSet2Specified { get; set; } - [XmlIgnore] - public bool CommandSet3Specified { get; set; } - [XmlIgnore] - public bool CommandSet4Specified { get; set; } - [XmlIgnore] - public bool CommandSet5Specified { get; set; } - [XmlIgnore] - public bool CurrentAAMSpecified { get; set; } - [XmlIgnore] - public bool CurrentAPMSpecified { get; set; } - [XmlIgnore] - public bool DataSetMgmtSpecified { get; set; } - [XmlIgnore] - public bool DataSetMgmtSizeSpecified { get; set; } - [XmlIgnore] - public bool DeviceFormFactorSpecified { get; set; } - [XmlIgnore] - public bool DMAActiveSpecified { get; set; } - [XmlIgnore] - public bool DMASupportedSpecified { get; set; } - [XmlIgnore] - public bool DMATransferTimingModeSpecified { get; set; } - [XmlIgnore] - public bool EnhancedSecurityEraseTimeSpecified { get; set; } - [XmlIgnore] - public bool EnabledCommandSetSpecified { get; set; } - [XmlIgnore] - public bool EnabledCommandSet2Specified { get; set; } - [XmlIgnore] - public bool EnabledCommandSet3Specified { get; set; } - [XmlIgnore] - public bool EnabledCommandSet4Specified { get; set; } - [XmlIgnore] - public bool EnabledSATAFeaturesSpecified { get; set; } - [XmlIgnore] - public bool ExtendedIdentifySpecified { get; set; } - [XmlIgnore] - public bool ExtendedUserSectorsSpecified { get; set; } - [XmlIgnore] - public bool FreeFallSensitivitySpecified { get; set; } - [XmlIgnore] - public bool FirmwareRevisionSpecified { get; set; } - [XmlIgnore] - public bool GeneralConfigurationSpecified { get; set; } - [XmlIgnore] - public bool HardwareResetResultSpecified { get; set; } - [XmlIgnore] - public bool InterseekDelaySpecified { get; set; } - [XmlIgnore] - public bool MajorVersionSpecified { get; set; } - [XmlIgnore] - public bool MasterPasswordRevisionCodeSpecified { get; set; } - [XmlIgnore] - public bool MaxDownloadMicroMode3Specified { get; set; } - [XmlIgnore] - public bool MaxQueueDepthSpecified { get; set; } - [XmlIgnore] - public bool MDMAActiveSpecified { get; set; } - [XmlIgnore] - public bool MDMASupportedSpecified { get; set; } - [XmlIgnore] - public bool MinDownloadMicroMode3Specified { get; set; } - [XmlIgnore] - public bool MinMDMACycleTimeSpecified { get; set; } - [XmlIgnore] - public bool MinorVersionSpecified { get; set; } - [XmlIgnore] - public bool MinPIOCycleTimeNoFlowSpecified { get; set; } - [XmlIgnore] - public bool MinPIOCycleTimeFlowSpecified { get; set; } - [XmlIgnore] - public bool ModelSpecified { get; set; } - [XmlIgnore] - public bool MultipleMaxSectorsSpecified { get; set; } - [XmlIgnore] - public bool MultipleSectorNumberSpecified { get; set; } - [XmlIgnore] - public bool NVCacheCapsSpecified { get; set; } - [XmlIgnore] - public bool NVCacheSizeSpecified { get; set; } - [XmlIgnore] - public bool NVCacheWriteSpeedSpecified { get; set; } - [XmlIgnore] - public bool NVEstimatedSpinUpSpecified { get; set; } - [XmlIgnore] - public bool PacketBusReleaseSpecified { get; set; } - [XmlIgnore] - public bool PIOTransferTimingModeSpecified { get; set; } - [XmlIgnore] - public bool RecommendedAAMSpecified { get; set; } - [XmlIgnore] - public bool RecommendedMDMACycleTimeSpecified { get; set; } - [XmlIgnore] - public bool RemovableStatusSetSpecified { get; set; } - [XmlIgnore] - public bool SATACapabilitiesSpecified { get; set; } - [XmlIgnore] - public bool SATACapabilities2Specified { get; set; } - [XmlIgnore] - public bool SATAFeaturesSpecified { get; set; } - [XmlIgnore] - public bool SCTCommandTransportSpecified { get; set; } - [XmlIgnore] - public bool SectorsPerCardSpecified { get; set; } - [XmlIgnore] - public bool SecurityEraseTimeSpecified { get; set; } - [XmlIgnore] - public bool SecurityStatusSpecified { get; set; } - [XmlIgnore] - public bool ServiceBusyClearSpecified { get; set; } - [XmlIgnore] - public bool SpecificConfigurationSpecified { get; set; } - [XmlIgnore] - public bool StreamAccessLatencySpecified { get; set; } - [XmlIgnore] - public bool StreamMinReqSizeSpecified { get; set; } - [XmlIgnore] - public bool StreamPerformanceGranularitySpecified { get; set; } - [XmlIgnore] - public bool StreamTransferTimeDMASpecified { get; set; } - [XmlIgnore] - public bool StreamTransferTimePIOSpecified { get; set; } - [XmlIgnore] - public bool TransportMajorVersionSpecified { get; set; } - [XmlIgnore] - public bool TransportMinorVersionSpecified { get; set; } - [XmlIgnore] - public bool TrustedComputingSpecified { get; set; } - [XmlIgnore] - public bool UDMAActiveSpecified { get; set; } - [XmlIgnore] - public bool UDMASupportedSpecified { get; set; } - [XmlIgnore] - public bool WRVModeSpecified { get; set; } - [XmlIgnore] - public bool WRVSectorCountMode3Specified { get; set; } - [XmlIgnore] - public bool WRVSectorCountMode2Specified { get; set; } - } - - public class chsType - { - public ushort Cylinders { get; set; } - public ushort Heads { get; set; } - public ushort Sectors { get; set; } - } - - public class scsiType - { - public scsiInquiryType Inquiry { get; set; } - public pageType[] EVPDPages { get; set; } - public bool SupportsModeSense6 { get; set; } - public bool SupportsModeSense10 { get; set; } - public bool SupportsModeSubpages { get; set; } - public modeType ModeSense { get; set; } - public mmcType MultiMediaDevice { get; set; } - public testedMediaType ReadCapabilities { get; set; } - public testedMediaType[] RemovableMedias { get; set; } - public sscType SequentialDevice { get; set; } - public byte[] ModeSense6Data { get; set; } - public byte[] ModeSense10Data { get; set; } - - [XmlIgnore] - public bool ReadCapabilitiesSpecified { get; set; } - } - - public class scsiInquiryType - { - public bool AccessControlCoordinator { get; set; } - public bool ACKRequests { get; set; } - public bool AERCSupported { get; set; } - public bool Address16 { get; set; } - public bool Address32 { get; set; } - public byte ANSIVersion { get; set; } - public TGPSValues AsymmetricalLUNAccess { get; set; } - public bool BasicQueueing { get; set; } - public byte DeviceTypeModifier { get; set; } - public byte ECMAVersion { get; set; } - public bool EnclosureServices { get; set; } - public bool HierarchicalLUN { get; set; } - public bool IUS { get; set; } - public byte ISOVersion { get; set; } - public bool LinkedCommands { get; set; } - public bool MediumChanger { get; set; } - public bool MultiPortDevice { get; set; } - public bool NormalACA { get; set; } - public PeripheralDeviceTypes PeripheralDeviceType { get; set; } - public PeripheralQualifiers PeripheralQualifier { get; set; } - public string ProductIdentification { get; set; } - public string ProductRevisionLevel { get; set; } - public bool Protection { get; set; } - public bool QAS { get; set; } - public bool RelativeAddressing { get; set; } - public bool Removable { get; set; } - public byte ResponseDataFormat { get; set; } - public bool TaggedCommandQueue { get; set; } - public bool TerminateTaskSupported { get; set; } - public bool ThirdPartyCopy { get; set; } - public bool TranferDisable { get; set; } - public bool SoftReset { get; set; } - public SPIClocking SPIClocking { get; set; } - public bool StorageArrayController { get; set; } - public bool SyncTransfer { get; set; } - public string VendorIdentification { get; set; } - public ushort[] VersionDescriptors { get; set; } - public bool WideBus16 { get; set; } - public bool WideBus32 { get; set; } - public byte[] Data { get; set; } - - [XmlIgnore] - public bool ANSIVersionSpecified { get; set; } - [XmlIgnore] - public bool ECMAVersionSpecified { get; set; } - [XmlIgnore] - public bool DeviceTypeModifierSpecified { get; set; } - [XmlIgnore] - public bool ISOVersionSpecified { get; set; } - [XmlIgnore] - public bool ProductIdentificationSpecified { get; set; } - [XmlIgnore] - public bool ProductRevisionLevelSpecified { get; set; } - [XmlIgnore] - public bool ResponseDataFormatSpecified { get; set; } - [XmlIgnore] - public bool VendorIdentificationSpecified { get; set; } - } - - [Serializable] - public class pageType - { - [XmlAttribute] - public byte page { get; set; } - - [XmlText] - public byte[] value { get; set; } - } - - public class modeType - { - public byte MediumType { get; set; } - public bool WriteProtected { get; set; } - public blockDescriptorType[] BlockDescriptors { get; set; } - public byte Speed { get; set; } - public byte BufferedMode { get; set; } - public bool BlankCheckEnabled { get; set; } - public bool DPOandFUA { get; set; } - public modePageType[] ModePages { get; set; } - - [XmlIgnore] - public bool MediumTypeSpecified { get; set; } - [XmlIgnore] - public bool SpeedSpecified { get; set; } - [XmlIgnore] - public bool BufferedModeSpecified { get; set; } - } - - public class blockDescriptorType - { - public byte Density { get; set; } - public ulong Blocks { get; set; } - public uint BlockLength { get; set; } - - [XmlIgnore] - public bool BlocksSpecified { get; set; } - [XmlIgnore] - public bool BlockLengthSpecified { get; set; } - } - - [Serializable] - public class modePageType - { - [XmlAttribute] - public byte page { get; set; } - - [XmlAttribute] - public byte subpage { get; set; } - - [XmlText] - public byte[] value { get; set; } - } - - public class mmcType - { - public mmcModeType ModeSense2A { get; set; } - public mmcFeaturesType Features { get; set; } - public testedMediaType[] TestedMedia { get; set; } - } - - public class mmcModeType - { - public bool AccurateCDDA { get; set; } - public bool BCK { get; set; } - public ushort BufferSize { get; set; } - public bool BufferUnderRunProtection { get; set; } - public bool CanEject { get; set; } - public bool CanLockMedia { get; set; } - public bool CDDACommand { get; set; } - public bool CompositeAudioVideo { get; set; } - public bool CSSandCPPMSupported { get; set; } - public ushort CurrentSpeed { get; set; } - public ushort CurrentWriteSpeed { get; set; } - public ushort CurrentWriteSpeedSelected { get; set; } - public bool DeterministicSlotChanger { get; set; } - public bool DigitalPort1 { get; set; } - public bool DigitalPort2 { get; set; } - public bool LeadInPW { get; set; } - public byte LoadingMechanismType { get; set; } - public bool LockStatus { get; set; } - public bool LSBF { get; set; } - public ushort MaximumSpeed { get; set; } - public ushort MaximumWriteSpeed { get; set; } - public bool PlaysAudio { get; set; } - public bool PreventJumperStatus { get; set; } - public bool RCK { get; set; } - public bool ReadsBarcode { get; set; } - public bool ReadsBothSides { get; set; } - public bool ReadsCDR { get; set; } - public bool ReadsCDRW { get; set; } - public bool ReadsDeinterlavedSubchannel { get; set; } - public bool ReadsDVDR { get; set; } - public bool ReadsDVDRAM { get; set; } - public bool ReadsDVDROM { get; set; } - public bool ReadsISRC { get; set; } - public bool ReadsMode2Form2 { get; set; } - public bool ReadsMode2Form1 { get; set; } - public bool ReadsPacketCDR { get; set; } - public bool ReadsSubchannel { get; set; } - public bool ReadsUPC { get; set; } - public bool ReturnsC2Pointers { get; set; } - public byte RotationControlSelected { get; set; } - public bool SeparateChannelMute { get; set; } - public bool SeparateChannelVolume { get; set; } - public bool SSS { get; set; } - public bool SupportsMultiSession { get; set; } - public ushort SupportedVolumeLevels { get; set; } - public bool TestWrite { get; set; } - public bool WritesCDR { get; set; } - public bool WritesCDRW { get; set; } - public bool WritesDVDR { get; set; } - public bool WritesDVDRAM { get; set; } - public ModePage_2A_WriteDescriptor[] WriteSpeedPerformanceDescriptors { get; set; } - - [XmlIgnore] - public bool MaximumSpeedSpecified { get; set; } - [XmlIgnore] - public bool SupportedVolumeLevelsSpecified { get; set; } - [XmlIgnore] - public bool BufferSizeSpecified { get; set; } - [XmlIgnore] - public bool CurrentSpeedSpecified { get; set; } - [XmlIgnore] - public bool MaximumWriteSpeedSpecified { get; set; } - [XmlIgnore] - public bool CurrentWriteSpeedSpecified { get; set; } - [XmlIgnore] - public bool RotationControlSelectedSpecified { get; set; } - [XmlIgnore] - public bool CurrentWriteSpeedSelectedSpecified { get; set; } - } - - public class mmcFeaturesType - { - public byte AACSVersion { get; set; } - public byte AGIDs { get; set; } - public byte BindingNonceBlocks { get; set; } - public ushort BlocksPerReadableUnit { get; set; } - public bool BufferUnderrunFreeInDVD { get; set; } - public bool BufferUnderrunFreeInSAO { get; set; } - public bool BufferUnderrunFreeInTAO { get; set; } - public bool CanAudioScan { get; set; } - public bool CanEject { get; set; } - public bool CanEraseSector { get; set; } - public bool CanExpandBDRESpareArea { get; set; } - public bool CanFormat { get; set; } - public bool CanFormatBDREWithoutSpare { get; set; } - public bool CanFormatCert { get; set; } - public bool CanFormatFRF { get; set; } - public bool CanFormatQCert { get; set; } - public bool CanFormatRRM { get; set; } - public bool CanGenerateBindingNonce { get; set; } - public bool CanLoad { get; set; } - public bool CanMuteSeparateChannels { get; set; } - public bool CanOverwriteSAOTrack { get; set; } - public bool CanOverwriteTAOTrack { get; set; } - public bool CanPlayCDAudio { get; set; } - public bool CanPseudoOverwriteBDR { get; set; } - public bool CanReadAllDualR { get; set; } - public bool CanReadAllDualRW { get; set; } - public bool CanReadBD { get; set; } - public bool CanReadBDR { get; set; } - public bool CanReadBDRE1 { get; set; } - public bool CanReadBDRE2 { get; set; } - public bool CanReadBDROM { get; set; } - public bool CanReadBluBCA { get; set; } - public bool CanReadCD { get; set; } - public bool CanReadCDMRW { get; set; } - public bool CanReadCPRM_MKB { get; set; } - public bool CanReadDDCD { get; set; } - public bool CanReadDVD { get; set; } - public bool CanReadDVDPlusMRW { get; set; } - public bool CanReadDVDPlusR { get; set; } - public bool CanReadDVDPlusRDL { get; set; } - public bool CanReadDVDPlusRW { get; set; } - public bool CanReadDVDPlusRWDL { get; set; } - public bool CanReadDriveAACSCertificate { get; set; } - public bool CanReadHDDVD { get; set; } - public bool CanReadHDDVDR { get; set; } - public bool CanReadHDDVDRAM { get; set; } - public bool CanReadLeadInCDText { get; set; } - public bool CanReadOldBDR { get; set; } - public bool CanReadOldBDRE { get; set; } - public bool CanReadOldBDROM { get; set; } - public bool CanReadSpareAreaInformation { get; set; } - public bool CanReportDriveSerial { get; set; } - public bool CanReportMediaSerial { get; set; } - public bool CanTestWriteDDCDR { get; set; } - public bool CanTestWriteDVD { get; set; } - public bool CanTestWriteInSAO { get; set; } - public bool CanTestWriteInTAO { get; set; } - public bool CanUpgradeFirmware { get; set; } - public bool CanWriteBD { get; set; } - public bool CanWriteBDR { get; set; } - public bool CanWriteBDRE1 { get; set; } - public bool CanWriteBDRE2 { get; set; } - public bool CanWriteBusEncryptedBlocks { get; set; } - public bool CanWriteCDMRW { get; set; } - public bool CanWriteCDRW { get; set; } - public bool CanWriteCDRWCAV { get; set; } - public bool CanWriteCDSAO { get; set; } - public bool CanWriteCDTAO { get; set; } - public bool CanWriteCSSManagedDVD { get; set; } - public bool CanWriteDDCDR { get; set; } - public bool CanWriteDDCDRW { get; set; } - public bool CanWriteDVDPlusMRW { get; set; } - public bool CanWriteDVDPlusR { get; set; } - public bool CanWriteDVDPlusRDL { get; set; } - public bool CanWriteDVDPlusRW { get; set; } - public bool CanWriteDVDPlusRWDL { get; set; } - public bool CanWriteDVDR { get; set; } - public bool CanWriteDVDRDL { get; set; } - public bool CanWriteDVDRW { get; set; } - public bool CanWriteHDDVDR { get; set; } - public bool CanWriteHDDVDRAM { get; set; } - public bool CanWriteOldBDR { get; set; } - public bool CanWriteOldBDRE { get; set; } - public bool CanWritePackedSubchannelInTAO { get; set; } - public bool CanWriteRWSubchannelInSAO { get; set; } - public bool CanWriteRWSubchannelInTAO { get; set; } - public bool CanWriteRaw { get; set; } - public bool CanWriteRawMultiSession { get; set; } - public bool CanWriteRawSubchannelInTAO { get; set; } - public bool ChangerIsSideChangeCapable { get; set; } - public byte ChangerSlots { get; set; } - public bool ChangerSupportsDiscPresent { get; set; } - public byte CPRMVersion { get; set; } - public byte CSSVersion { get; set; } - public bool DBML { get; set; } - public bool DVDMultiRead { get; set; } - public bool EmbeddedChanger { get; set; } - public bool ErrorRecoveryPage { get; set; } - [XmlElement(DataType = "date")] - public DateTime FirmwareDate { get; set; } - public byte LoadingMechanismType { get; set; } - public bool Locked { get; set; } - public uint LogicalBlockSize { get; set; } - public bool MultiRead { get; set; } - public PhysicalInterfaces PhysicalInterfaceStandard { get; set; } - public uint PhysicalInterfaceStandardNumber { get; set; } - public bool PreventJumper { get; set; } - public bool SupportsAACS { get; set; } - public bool SupportsBusEncryption { get; set; } - public bool SupportsC2 { get; set; } - public bool SupportsCPRM { get; set; } - public bool SupportsCSS { get; set; } - public bool SupportsDAP { get; set; } - public bool SupportsDeviceBusyEvent { get; set; } - public bool SupportsHybridDiscs { get; set; } - public bool SupportsModePage1Ch { get; set; } - public bool SupportsOSSC { get; set; } - public bool SupportsPWP { get; set; } - public bool SupportsSWPP { get; set; } - public bool SupportsSecurDisc { get; set; } - public bool SupportsSeparateVolume { get; set; } - public bool SupportsVCPS { get; set; } - public bool SupportsWriteInhibitDCB { get; set; } - public bool SupportsWriteProtectPAC { get; set; } - public ushort VolumeLevels { get; set; } - - [XmlIgnore] - public bool PhysicalInterfaceStandardSpecified { get; set; } - [XmlIgnore] - public bool PhysicalInterfaceStandardNumberSpecified { get; set; } - [XmlIgnore] - public bool AACSVersionSpecified { get; set; } - [XmlIgnore] - public bool AGIDsSpecified { get; set; } - [XmlIgnore] - public bool BindingNonceBlocksSpecified { get; set; } - [XmlIgnore] - public bool CPRMVersionSpecified { get; set; } - [XmlIgnore] - public bool CSSVersionSpecified { get; set; } - [XmlIgnore] - public bool ChangerHighestSlotNumberSpecified { get; set; } - [XmlIgnore] - public bool LoadingMechanismTypeSpecified { get; set; } - [XmlIgnore] - public bool LogicalBlockSizeSpecified { get; set; } - [XmlIgnore] - public bool BlocksPerReadableUnitSpecified { get; set; } - [XmlIgnore] - public bool FirmwareDateSpecified { get; set; } - [XmlIgnore] - public bool VolumeLevelsSpecified { get; set; } - } - - public class testedMediaType - { - public ulong Blocks { get; set; } - public uint BlockSize { get; set; } - public bool CanReadAACS { get; set; } - public bool CanReadADIP { get; set; } - public bool CanReadATIP { get; set; } - public bool CanReadBCA { get; set; } - public bool CanReadC2Pointers { get; set; } - public bool CanReadCMI { get; set; } - public bool CanReadCorrectedSubchannel { get; set; } - public bool CanReadCorrectedSubchannelWithC2 { get; set; } - public bool CanReadDCB { get; set; } - public bool CanReadDDS { get; set; } - public bool CanReadDMI { get; set; } - public bool CanReadDiscInformation { get; set; } - public bool CanReadFullTOC { get; set; } - public bool CanReadHDCMI { get; set; } - public bool CanReadLayerCapacity { get; set; } - public bool CanReadLeadIn { get; set; } - public bool CanReadLeadOut { get; set; } - public bool CanReadMediaID { get; set; } - public bool CanReadMediaSerial { get; set; } - public bool CanReadPAC { get; set; } - public bool CanReadPFI { get; set; } - public bool CanReadPMA { get; set; } - public bool CanReadPQSubchannel { get; set; } - public bool CanReadPQSubchannelWithC2 { get; set; } - public bool CanReadPRI { get; set; } - public bool CanReadRWSubchannel { get; set; } - public bool CanReadRWSubchannelWithC2 { get; set; } - public bool CanReadRecordablePFI { get; set; } - public bool CanReadSpareAreaInformation { get; set; } - public bool CanReadTOC { get; set; } - public byte Density { get; set; } - public uint LongBlockSize { get; set; } - public string Manufacturer { get; set; } - public bool MediaIsRecognized { get; set; } - public byte MediumType { get; set; } - public string MediumTypeName { get; set; } - public string Model { get; set; } - public bool SupportsHLDTSTReadRawDVD { get; set; } - public bool SupportsNECReadCDDA { get; set; } - public bool SupportsPioneerReadCDDA { get; set; } - public bool SupportsPioneerReadCDDAMSF { get; set; } - public bool SupportsPlextorReadCDDA { get; set; } - public bool SupportsPlextorReadRawDVD { get; set; } - public bool SupportsRead10 { get; set; } - public bool SupportsRead12 { get; set; } - public bool SupportsRead16 { get; set; } - public bool SupportsRead { get; set; } - public bool SupportsReadCapacity16 { get; set; } - public bool SupportsReadCapacity { get; set; } - public bool SupportsReadCd { get; set; } - public bool SupportsReadCdMsf { get; set; } - public bool SupportsReadCdRaw { get; set; } - public bool SupportsReadCdMsfRaw { get; set; } - public bool SupportsReadLong16 { get; set; } - public bool SupportsReadLong { get; set; } - - public byte[] ModeSense6Data { get; set; } - public byte[] ModeSense10Data { get; set; } - - [XmlIgnore] - public bool BlocksSpecified { get; set; } - [XmlIgnore] - public bool BlockSizeSpecified { get; set; } - [XmlIgnore] - public bool CanReadAACSSpecified { get; set; } - [XmlIgnore] - public bool CanReadADIPSpecified { get; set; } - [XmlIgnore] - public bool CanReadATIPSpecified { get; set; } - [XmlIgnore] - public bool CanReadBCASpecified { get; set; } - [XmlIgnore] - public bool CanReadC2PointersSpecified { get; set; } - [XmlIgnore] - public bool CanReadCMISpecified { get; set; } - [XmlIgnore] - public bool CanReadCorrectedSubchannelSpecified { get; set; } - [XmlIgnore] - public bool CanReadCorrectedSubchannelWithC2Specified { get; set; } - [XmlIgnore] - public bool CanReadDCBSpecified { get; set; } - [XmlIgnore] - public bool CanReadDDSSpecified { get; set; } - [XmlIgnore] - public bool CanReadDMISpecified { get; set; } - [XmlIgnore] - public bool CanReadDiscInformationSpecified { get; set; } - [XmlIgnore] - public bool CanReadFullTOCSpecified { get; set; } - [XmlIgnore] - public bool CanReadHDCMISpecified { get; set; } - [XmlIgnore] - public bool CanReadLayerCapacitySpecified { get; set; } - [XmlIgnore] - public bool CanReadLeadInSpecified { get; set; } - [XmlIgnore] - public bool CanReadLeadOutSpecified { get; set; } - [XmlIgnore] - public bool CanReadMediaIDSpecified { get; set; } - [XmlIgnore] - public bool CanReadMediaSerialSpecified { get; set; } - [XmlIgnore] - public bool CanReadPACSpecified { get; set; } - [XmlIgnore] - public bool CanReadPFISpecified { get; set; } - [XmlIgnore] - public bool CanReadPMASpecified { get; set; } - [XmlIgnore] - public bool CanReadPQSubchannelSpecified { get; set; } - [XmlIgnore] - public bool CanReadPQSubchannelWithC2Specified { get; set; } - [XmlIgnore] - public bool CanReadPRISpecified { get; set; } - [XmlIgnore] - public bool CanReadRWSubchannelSpecified { get; set; } - [XmlIgnore] - public bool CanReadRWSubchannelWithC2Specified { get; set; } - [XmlIgnore] - public bool CanReadRecordablePFISpecified { get; set; } - [XmlIgnore] - public bool CanReadSpareAreaInformationSpecified { get; set; } - [XmlIgnore] - public bool CanReadTOCSpecified { get; set; } - [XmlIgnore] - public bool DensitySpecified { get; set; } - [XmlIgnore] - public bool LongBlockSizeSpecified { get; set; } - [XmlIgnore] - public bool ManufacturerSpecified { get; set; } - [XmlIgnore] - public bool MediumTypeSpecified { get; set; } - [XmlIgnore] - public bool ModelSpecified { get; set; } - [XmlIgnore] - public bool SupportsHLDTSTReadRawDVDSpecified { get; set; } - [XmlIgnore] - public bool SupportsNECReadCDDASpecified { get; set; } - [XmlIgnore] - public bool SupportsPioneerReadCDDASpecified { get; set; } - [XmlIgnore] - public bool SupportsPioneerReadCDDAMSFSpecified { get; set; } - [XmlIgnore] - public bool SupportsPlextorReadCDDASpecified { get; set; } - [XmlIgnore] - public bool SupportsPlextorReadRawDVDSpecified { get; set; } - [XmlIgnore] - public bool SupportsRead10Specified { get; set; } - [XmlIgnore] - public bool SupportsRead12Specified { get; set; } - [XmlIgnore] - public bool SupportsRead16Specified { get; set; } - [XmlIgnore] - public bool SupportsReadSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadCapacity16Specified { get; set; } - [XmlIgnore] - public bool SupportsReadCapacitySpecified { get; set; } - [XmlIgnore] - public bool SupportsReadCdSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadCdMsfSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadCdRawSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadCdMsfRawSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadLong16Specified { get; set; } - [XmlIgnore] - public bool SupportsReadLongSpecified { get; set; } - - public chsType CHS { get; set; } - public chsType CurrentCHS { get; set; } - public uint LBASectors { get; set; } - public ulong LBA48Sectors { get; set; } - public ushort LogicalAlignment { get; set; } - public ushort NominalRotationRate { get; set; } - public uint PhysicalBlockSize { get; set; } - public bool SolidStateDevice { get; set; } - public ushort UnformattedBPT { get; set; } - public ushort UnformattedBPS { get; set; } - - [XmlIgnore] - public bool LBASectorsSpecified { get; set; } - [XmlIgnore] - public bool LBA48SectorsSpecified { get; set; } - [XmlIgnore] - public bool LogicalAlignmentSpecified { get; set; } - [XmlIgnore] - public bool NominalRotationRateSpecified { get; set; } - [XmlIgnore] - public bool PhysicalBlockSizeSpecified { get; set; } - [XmlIgnore] - public bool SolidStateDeviceSpecified { get; set; } - [XmlIgnore] - public bool UnformattedBPTSpecified { get; set; } - [XmlIgnore] - public bool UnformattedBPSSpecified { get; set; } - - public bool SupportsReadDmaLba { get; set; } - public bool SupportsReadDmaRetryLba { get; set; } - public bool SupportsReadLba { get; set; } - public bool SupportsReadRetryLba { get; set; } - public bool SupportsReadLongLba { get; set; } - public bool SupportsReadLongRetryLba { get; set; } - public bool SupportsSeekLba { get; set; } - - public bool SupportsReadDmaLba48 { get; set; } - public bool SupportsReadLba48 { get; set; } - - public bool SupportsReadDma { get; set; } - public bool SupportsReadDmaRetry { get; set; } - public bool SupportsReadRetry { get; set; } - public bool SupportsReadLongRetry { get; set; } - public bool SupportsSeek { get; set; } - - [XmlIgnore] - public bool SupportsReadDmaLbaSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadDmaRetryLbaSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadLbaSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadRetryLbaSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadLongLbaSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadLongRetryLbaSpecified { get; set; } - [XmlIgnore] - public bool SupportsSeekLbaSpecified { get; set; } - - [XmlIgnore] - public bool SupportsReadDmaLba48Specified { get; set; } - [XmlIgnore] - public bool SupportsReadLba48Specified { get; set; } - - [XmlIgnore] - public bool SupportsReadDmaSpecified { get; set; } - [XmlIgnore] - public bool SupportsReadDmaRetrySpecified { get; set; } - [XmlIgnore] - public bool SupportsReadRetrySpecified { get; set; } - [XmlIgnore] - public bool SupportsReadLongRetrySpecified { get; set; } - [XmlIgnore] - public bool SupportsSeekSpecified { get; set; } - } - - public class sscType - { - public byte BlockSizeGranularity { get; set; } - public uint MaxBlockLength { get; set; } - public uint MinBlockLength { get; set; } - - public SupportedDensity[] SupportedDensities { get; set; } - public SupportedMedia[] SupportedMediaTypes { get; set; } - public SequentialMedia[] TestedMedia { get; set; } - - [XmlIgnore] - public bool BlockSizeGranularitySpecified { get; set; } - [XmlIgnore] - public bool MaxBlockLengthSpecified { get; set; } - [XmlIgnore] - public bool MinBlockLengthSpecified { get; set; } - } - - public class SupportedDensity - { - [XmlIgnore, JsonIgnore] - public int Id { get; set; } - [DisplayName("Primary density code")] - public byte PrimaryCode { get; set; } - [DisplayName("Secondary density code")] - public byte SecondaryCode { get; set; } - public bool Writable { get; set; } - public bool Duplicate { get; set; } - [DisplayName("Default density code")] - public bool DefaultDensity { get; set; } - [DisplayName("Bits per mm")] - public uint BitsPerMm { get; set; } - public ushort Width { get; set; } - public ushort Tracks { get; set; } - [DisplayName("Nominal capacity (MiB)")] - public uint Capacity { get; set; } - public string Organization { get; set; } - public string Name { get; set; } - public string Description { get; set; } - } - - public class SupportedMedia - { - [XmlIgnore, JsonIgnore] - public int Id { get; set; } - public byte MediumType { get; set; } - public int[] DensityCodes { get; set; } - public ushort Width { get; set; } - public ushort Length { get; set; } - public string Organization { get; set; } - public string Name { get; set; } - public string Description { get; set; } - } - - public struct SequentialMedia - { - public bool CanReadMediaSerial { get; set; } - public byte Density { get; set; } - public string Manufacturer { get; set; } - public bool MediaIsRecognized { get; set; } - public byte MediumType { get; set; } - public string MediumTypeName { get; set; } - public string Model { get; set; } - public SupportedDensity[] SupportedDensities { get; set; } - public SupportedMedia[] SupportedMediaTypes { get; set; } - - public byte[] ModeSense6Data { get; set; } - public byte[] ModeSense10Data { get; set; } - - [XmlIgnore] - public bool CanReadMediaSerialSpecified { get; set; } - [XmlIgnore] - public bool DensitySpecified { get; set; } - [XmlIgnore] - public bool MediumTypeSpecified { get; set; } - } - - [Serializable] - public class pcmciaType - { - public byte[] CIS { get; set; } - public string Compliance { get; set; } - public ushort ManufacturerCode { get; set; } - public ushort CardCode { get; set; } - public string Manufacturer { get; set; } - public string ProductName { get; set; } - public string[] AdditionalInformation { get; set; } - - [XmlIgnore] - public bool ManufacturerCodeSpecified { get; set; } - [XmlIgnore] - public bool CardCodeSpecified { get; set; } - } - - [Serializable] - public class mmcsdType - { - public byte[] CID { get; set; } - public byte[] CSD { get; set; } - public byte[] OCR { get; set; } - public byte[] SCR { get; set; } - public byte[] ExtendedCSD { get; set; } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Metadata/DeviceReportV2.cs b/Aaru.CommonTypes/Metadata/DeviceReportV2.cs deleted file mode 100644 index 11711cf..0000000 --- a/Aaru.CommonTypes/Metadata/DeviceReportV2.cs +++ /dev/null @@ -1,2307 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : DeviceReportV2.cs -// Author(s) : Natalia Portillo -// -// Component : JSON metadata. -// -// --[ Description ] ---------------------------------------------------------- -// -// Contains classes for a JSON device report. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Structs.Devices.ATA; -using Aaru.CommonTypes.Structs.Devices.SCSI; -using Aaru.CommonTypes.Structs.Devices.SCSI.Modes; -using Newtonsoft.Json; - -// TODO: Re-enable CS1591 in this file -#pragma warning disable 1591 - -// ReSharper disable VirtualMemberNeverOverridden.Global -// ReSharper disable VirtualMemberCallInConstructor - -// ReSharper disable InconsistentNaming -// ReSharper disable UnusedAutoPropertyAccessor.Global - -namespace Aaru.CommonTypes.Metadata -{ - public class DeviceReportV2 - { - public DeviceReportV2() {} - - public DeviceReportV2(DeviceReport reportV1) - { - if(reportV1.USB != null) - USB = new Usb(reportV1.USB); - - if(reportV1.FireWire != null) - FireWire = new FireWire(reportV1.FireWire); - - if(reportV1.PCMCIA != null) - PCMCIA = new Pcmcia(reportV1.PCMCIA); - - if(reportV1.CompactFlashSpecified) - CompactFlash = reportV1.CompactFlash; - - if(reportV1.ATA != null) - { - ATA = new Ata(reportV1.ATA); - Type = DeviceType.ATA; - } - - if(reportV1.SCSI != null) - { - SCSI = new Scsi(reportV1.SCSI); - Type = DeviceType.SCSI; - - if(SCSI.ModeSense?.ModePages?.FirstOrDefault(p => p.page == 0x2A)?.value != null) - { - if(SCSI.MultiMediaDevice != null) - SCSI.MultiMediaDevice.ModeSense2AData = - SCSI.ModeSense?.ModePages?.FirstOrDefault(p => p.page == 0x2A)?.value; - else if(SCSI.Inquiry?.PeripheralDeviceType == (byte)PeripheralDeviceTypes.MultiMediaDevice) - SCSI.MultiMediaDevice = new Mmc - { - ModeSense2AData = SCSI.ModeSense?.ModePages?.FirstOrDefault(p => p.page == 0x2A)?.value - }; - } - } - - if(reportV1.ATAPI != null) - { - ATAPI = new Ata(reportV1.ATAPI); - Type = DeviceType.ATAPI; - } - - if(reportV1.MultiMediaCard != null) - { - MultiMediaCard = new MmcSd(reportV1.MultiMediaCard); - Type = DeviceType.MMC; - } - - if(reportV1.SecureDigital != null) - { - SecureDigital = new MmcSd(reportV1.SecureDigital); - Type = DeviceType.SecureDigital; - } - - if(reportV1.SCSI?.Inquiry != null) - { - Manufacturer = reportV1.SCSI.Inquiry.VendorIdentification; - Model = reportV1.SCSI.Inquiry.ProductIdentification; - Revision = reportV1.SCSI.Inquiry.ProductRevisionLevel; - } - else if(reportV1.ATA != null || - reportV1.ATAPI != null) - { - ataType ata = reportV1.ATA ?? reportV1.ATAPI; - - string[] split = ata.Model.Split(' '); - - if(split.Length > 1) - { - Manufacturer = split[0]; - Model = string.Join(" ", split, 1, split.Length - 1); - } - else - Model = ata.Model; - - Revision = ata.FirmwareRevision; - } - } - - [JsonIgnore] - public int Id { get; set; } - public virtual Usb USB { get; set; } - public virtual FireWire FireWire { get; set; } - public virtual Pcmcia PCMCIA { get; set; } - public bool CompactFlash { get; set; } - public virtual Ata ATA { get; set; } - public virtual Ata ATAPI { get; set; } - public virtual Scsi SCSI { get; set; } - public virtual MmcSd MultiMediaCard { get; set; } - public virtual MmcSd SecureDigital { get; set; } - public virtual GdRomSwapDiscCapabilities GdRomSwapDiscCapabilities { get; set; } - - public string Manufacturer { get; set; } - public string Model { get; set; } - public string Revision { get; set; } - public DeviceType Type { get; set; } - } - - public class Usb - { - public Usb() {} - - public Usb(usbType usb) - { - VendorID = usb.VendorID; - ProductID = usb.ProductID; - Manufacturer = usb.Manufacturer; - Product = usb.Product; - RemovableMedia = usb.RemovableMedia; - Descriptors = usb.Descriptors; - } - - [JsonIgnore] - public int Id { get; set; } - [DisplayName("Vendor ID"), DisplayFormat(DataFormatString = "0x{0:X4}")] - public ushort VendorID { get; set; } - [DisplayName("Product ID"), DisplayFormat(DataFormatString = "0x{0:X4}")] - public ushort ProductID { get; set; } - public string Manufacturer { get; set; } - public string Product { get; set; } - [DisplayName("Removable media")] - public bool RemovableMedia { get; set; } - public byte[] Descriptors { get; set; } - } - - public class FireWire - { - public FireWire() {} - - public FireWire(firewireType firewire) - { - VendorID = firewire.VendorID; - ProductID = firewire.ProductID; - Manufacturer = firewire.Manufacturer; - Product = firewire.Product; - RemovableMedia = firewire.RemovableMedia; - } - - [JsonIgnore] - public int Id { get; set; } - [DisplayName("Vendor ID"), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "0x{0:X8}")] - public uint VendorID { get; set; } - [DisplayName("Product ID"), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "0x{0:X8}")] - public uint ProductID { get; set; } - [DisplayFormat(NullDisplayText = "Unknown")] - public string Manufacturer { get; set; } - [DisplayFormat(NullDisplayText = "Unknown")] - public string Product { get; set; } - [DisplayName("Is media removable?")] - public bool RemovableMedia { get; set; } - } - - public class Ata - { - public Ata() {} - - public Ata(ataType ata) - { - Identify = ata.Identify; - - if(ata.ReadCapabilities != null) - ReadCapabilities = new TestedMedia(ata.ReadCapabilities, true); - - if(ata.RemovableMedias != null) - { - RemovableMedias = new List(); - - foreach(testedMediaType ataRemovableMedia in ata.RemovableMedias) - RemovableMedias.Add(new TestedMedia(ataRemovableMedia, true)); - } - - if(Identify != null) - return; - - var identifyDevice = new Identify.IdentifyDevice(); - - if(ata.AdditionalPIDSpecified) - identifyDevice.AdditionalPID = ata.AdditionalPID; - - if(ata.APIOSupportedSpecified) - identifyDevice.APIOSupported = ata.APIOSupported; - - if(ata.ATAPIByteCountSpecified) - identifyDevice.ATAPIByteCount = ata.ATAPIByteCount; - - if(ata.BufferTypeSpecified) - identifyDevice.BufferType = ata.BufferType; - - if(ata.BufferSizeSpecified) - identifyDevice.BufferSize = ata.BufferSize; - - if(ata.CapabilitiesSpecified) - identifyDevice.Capabilities = ata.Capabilities; - - if(ata.Capabilities2Specified) - identifyDevice.Capabilities2 = ata.Capabilities2; - - if(ata.Capabilities3Specified) - identifyDevice.Capabilities3 = ata.Capabilities3; - - if(ata.CFAPowerModeSpecified) - identifyDevice.CFAPowerMode = ata.CFAPowerMode; - - if(ata.CommandSetSpecified) - identifyDevice.CommandSet = ata.CommandSet; - - if(ata.CommandSet2Specified) - identifyDevice.CommandSet2 = ata.CommandSet2; - - if(ata.CommandSet3Specified) - identifyDevice.CommandSet3 = ata.CommandSet3; - - if(ata.CommandSet4Specified) - identifyDevice.CommandSet4 = ata.CommandSet4; - - if(ata.CommandSet5Specified) - identifyDevice.CommandSet4 = ata.CommandSet4; - - if(ata.CurrentAAMSpecified) - identifyDevice.CurrentAAM = ata.CurrentAAM; - - if(ata.CurrentAPMSpecified) - identifyDevice.CurrentAPM = ata.CurrentAPM; - - if(ata.DataSetMgmtSpecified) - identifyDevice.DataSetMgmt = ata.DataSetMgmt; - - if(ata.DataSetMgmtSizeSpecified) - identifyDevice.DataSetMgmtSize = ata.DataSetMgmtSize; - - if(ata.DeviceFormFactorSpecified) - identifyDevice.DeviceFormFactor = ata.DeviceFormFactor; - - if(ata.DMAActiveSpecified) - identifyDevice.DMAActive = ata.DMAActive; - - if(ata.DMASupportedSpecified) - identifyDevice.DMASupported = ata.DMASupported; - - if(ata.DMATransferTimingModeSpecified) - identifyDevice.DMATransferTimingMode = ata.DMATransferTimingMode; - - if(ata.EnhancedSecurityEraseTimeSpecified) - identifyDevice.EnhancedSecurityEraseTime = ata.EnhancedSecurityEraseTime; - - if(ata.EnabledCommandSetSpecified) - identifyDevice.EnabledCommandSet = ata.EnabledCommandSet; - - if(ata.EnabledCommandSet2Specified) - identifyDevice.EnabledCommandSet2 = ata.EnabledCommandSet2; - - if(ata.EnabledCommandSet3Specified) - identifyDevice.EnabledCommandSet3 = ata.EnabledCommandSet3; - - if(ata.EnabledCommandSet4Specified) - identifyDevice.EnabledCommandSet4 = ata.EnabledCommandSet4; - - if(ata.EnabledSATAFeaturesSpecified) - identifyDevice.EnabledSATAFeatures = ata.EnabledSATAFeatures; - - if(ata.ExtendedUserSectorsSpecified) - identifyDevice.ExtendedUserSectors = ata.ExtendedUserSectors; - - if(ata.FreeFallSensitivitySpecified) - identifyDevice.FreeFallSensitivity = ata.FreeFallSensitivity; - - if(ata.FirmwareRevisionSpecified) - identifyDevice.FirmwareRevision = ata.FirmwareRevision; - - if(ata.GeneralConfigurationSpecified) - identifyDevice.GeneralConfiguration = ata.GeneralConfiguration; - - if(ata.HardwareResetResultSpecified) - identifyDevice.HardwareResetResult = ata.HardwareResetResult; - - if(ata.InterseekDelaySpecified) - identifyDevice.InterseekDelay = ata.InterseekDelay; - - if(ata.MajorVersionSpecified) - identifyDevice.MajorVersion = ata.MajorVersion; - - if(ata.MasterPasswordRevisionCodeSpecified) - identifyDevice.MasterPasswordRevisionCode = ata.MasterPasswordRevisionCode; - - if(ata.MaxDownloadMicroMode3Specified) - identifyDevice.MaxDownloadMicroMode3 = ata.MaxDownloadMicroMode3; - - if(ata.MaxQueueDepthSpecified) - identifyDevice.MaxQueueDepth = ata.MaxQueueDepth; - - if(ata.MDMAActiveSpecified) - identifyDevice.MDMAActive = ata.MDMAActive; - - if(ata.MDMASupportedSpecified) - identifyDevice.MDMASupported = ata.MDMASupported; - - if(ata.MinDownloadMicroMode3Specified) - identifyDevice.MinDownloadMicroMode3 = ata.MinDownloadMicroMode3; - - if(ata.MinMDMACycleTimeSpecified) - identifyDevice.MinMDMACycleTime = ata.MinMDMACycleTime; - - if(ata.MinorVersionSpecified) - identifyDevice.MinorVersion = ata.MinorVersion; - - if(ata.MinPIOCycleTimeNoFlowSpecified) - identifyDevice.MinPIOCycleTimeNoFlow = ata.MinPIOCycleTimeNoFlow; - - if(ata.MinPIOCycleTimeFlowSpecified) - identifyDevice.MinPIOCycleTimeFlow = ata.MinPIOCycleTimeFlow; - - if(ata.ModelSpecified) - identifyDevice.Model = ata.Model; - - if(ata.MultipleMaxSectorsSpecified) - identifyDevice.MultipleMaxSectors = ata.MultipleMaxSectors; - - if(ata.MultipleSectorNumberSpecified) - identifyDevice.MultipleSectorNumber = ata.MultipleSectorNumber; - - if(ata.NVCacheCapsSpecified) - identifyDevice.NVCacheCaps = ata.NVCacheCaps; - - if(ata.NVCacheSizeSpecified) - identifyDevice.NVCacheSize = ata.NVCacheSize; - - if(ata.NVCacheWriteSpeedSpecified) - identifyDevice.NVCacheWriteSpeed = ata.NVCacheWriteSpeed; - - if(ata.NVEstimatedSpinUpSpecified) - identifyDevice.NVEstimatedSpinUp = ata.NVEstimatedSpinUp; - - if(ata.PacketBusReleaseSpecified) - identifyDevice.PacketBusRelease = ata.PacketBusRelease; - - if(ata.PIOTransferTimingModeSpecified) - identifyDevice.PIOTransferTimingMode = ata.PIOTransferTimingMode; - - if(ata.RecommendedAAMSpecified) - identifyDevice.RecommendedAAM = ata.RecommendedAAM; - - if(ata.RecommendedMDMACycleTimeSpecified) - identifyDevice.RecMDMACycleTime = ata.RecommendedMDMACycleTime; - - if(ata.RemovableStatusSetSpecified) - identifyDevice.RemovableStatusSet = ata.RemovableStatusSet; - - if(ata.SATACapabilitiesSpecified) - identifyDevice.SATACapabilities = ata.SATACapabilities; - - if(ata.SATACapabilities2Specified) - identifyDevice.SATACapabilities2 = ata.SATACapabilities2; - - if(ata.SATAFeaturesSpecified) - identifyDevice.SATAFeatures = ata.SATAFeatures; - - if(ata.SCTCommandTransportSpecified) - identifyDevice.SCTCommandTransport = ata.SCTCommandTransport; - - if(ata.SectorsPerCardSpecified) - identifyDevice.SectorsPerCard = ata.SectorsPerCard; - - if(ata.SecurityEraseTimeSpecified) - identifyDevice.SecurityEraseTime = ata.SecurityEraseTime; - - if(ata.SecurityStatusSpecified) - identifyDevice.SecurityStatus = ata.SecurityStatus; - - if(ata.ServiceBusyClearSpecified) - identifyDevice.ServiceBusyClear = ata.ServiceBusyClear; - - if(ata.SpecificConfigurationSpecified) - identifyDevice.SpecificConfiguration = ata.SpecificConfiguration; - - if(ata.StreamAccessLatencySpecified) - identifyDevice.StreamAccessLatency = ata.StreamAccessLatency; - - if(ata.StreamMinReqSizeSpecified) - identifyDevice.StreamMinReqSize = ata.StreamMinReqSize; - - if(ata.StreamPerformanceGranularitySpecified) - identifyDevice.StreamPerformanceGranularity = ata.StreamPerformanceGranularity; - - if(ata.StreamTransferTimeDMASpecified) - identifyDevice.StreamTransferTimeDMA = ata.StreamTransferTimeDMA; - - if(ata.StreamTransferTimePIOSpecified) - identifyDevice.StreamTransferTimePIO = ata.StreamTransferTimePIO; - - if(ata.TransportMajorVersionSpecified) - identifyDevice.TransportMajorVersion = ata.TransportMajorVersion; - - if(ata.TransportMinorVersionSpecified) - identifyDevice.TransportMinorVersion = ata.TransportMinorVersion; - - if(ata.TrustedComputingSpecified) - identifyDevice.TrustedComputing = ata.TrustedComputing; - - if(ata.UDMAActiveSpecified) - identifyDevice.UDMAActive = ata.UDMAActive; - - if(ata.UDMASupportedSpecified) - identifyDevice.UDMASupported = ata.UDMASupported; - - if(ata.WRVModeSpecified) - identifyDevice.WRVMode = ata.WRVMode; - - if(ata.WRVSectorCountMode3Specified) - identifyDevice.WRVSectorCountMode3 = ata.WRVSectorCountMode3; - - if(ata.WRVSectorCountMode2Specified) - identifyDevice.WRVSectorCountMode2 = ata.WRVSectorCountMode2; - - Identify = Structs.Devices.ATA.Identify.Encode(identifyDevice); - } - - public Identify.IdentifyDevice? IdentifyDevice => Structs.Devices.ATA.Identify.Decode(Identify); - - [JsonIgnore] - public int Id { get; set; } - public byte[] Identify { get; set; } - public virtual TestedMedia ReadCapabilities { get; set; } - public virtual List RemovableMedias { get; set; } - } - - public class Chs - { - public Chs() {} - - public Chs(chsType chs) - { - Cylinders = chs.Cylinders; - Heads = chs.Heads; - Sectors = chs.Sectors; - } - - [JsonIgnore] - public int Id { get; set; } - public ushort Cylinders { get; set; } - public ushort Heads { get; set; } - public ushort Sectors { get; set; } - } - - public class Scsi - { - public Scsi() {} - - public Scsi(scsiType scsi) - { - InquiryData = scsi.Inquiry.Data; - SupportsModeSense6 = scsi.SupportsModeSense6; - SupportsModeSense10 = scsi.SupportsModeSense10; - SupportsModeSubpages = scsi.SupportsModeSubpages; - - if(scsi.ReadCapabilitiesSpecified && - scsi.ReadCapabilities != null) - ReadCapabilities = new TestedMedia(scsi.ReadCapabilities, false); - - if(scsi.RemovableMedias != null) - { - RemovableMedias = new List(); - - foreach(testedMediaType scsiRemovableMedia in scsi.RemovableMedias) - RemovableMedias.Add(new TestedMedia(scsiRemovableMedia, false)); - } - - ModeSense6Data = scsi.ModeSense6Data; - ModeSense10Data = scsi.ModeSense10Data; - - if(scsi.EVPDPages != null) - { - EVPDPages = new List(); - - foreach(pageType evpdPage in scsi.EVPDPages) - EVPDPages.Add(new ScsiPage(evpdPage)); - } - - if(scsi.ModeSense != null) - ModeSense = new ScsiMode(scsi.ModeSense); - - if(scsi.MultiMediaDevice != null) - MultiMediaDevice = new Mmc(scsi.MultiMediaDevice); - - if(scsi.SequentialDevice != null) - SequentialDevice = new Ssc(scsi.SequentialDevice); - - if(InquiryData != null) - return; - - var inq = new Inquiry(); - - if(scsi.Inquiry.ANSIVersionSpecified) - inq.ANSIVersion = scsi.Inquiry.ANSIVersion; - - if(scsi.Inquiry.ECMAVersionSpecified) - inq.ECMAVersion = scsi.Inquiry.ECMAVersion; - - if(scsi.Inquiry.DeviceTypeModifierSpecified) - inq.DeviceTypeModifier = scsi.Inquiry.DeviceTypeModifier; - - if(scsi.Inquiry.ISOVersionSpecified) - inq.ISOVersion = scsi.Inquiry.ISOVersion; - - if(scsi.Inquiry.ProductIdentificationSpecified) - { - byte[] tmp = Encoding.ASCII.GetBytes(scsi.Inquiry.ProductIdentification); - inq.ProductIdentification = new byte[tmp.Length + 1]; - Array.Copy(tmp, 0, inq.ProductIdentification, 0, tmp.Length); - } - - if(scsi.Inquiry.ProductRevisionLevelSpecified) - { - byte[] tmp = Encoding.ASCII.GetBytes(scsi.Inquiry.ProductRevisionLevel); - inq.ProductRevisionLevel = new byte[tmp.Length + 1]; - Array.Copy(tmp, 0, inq.ProductRevisionLevel, 0, tmp.Length); - } - - if(scsi.Inquiry.ResponseDataFormatSpecified) - inq.ResponseDataFormat = scsi.Inquiry.ResponseDataFormat; - - if(scsi.Inquiry.VendorIdentificationSpecified) - { - byte[] tmp = Encoding.ASCII.GetBytes(scsi.Inquiry.VendorIdentification); - inq.VendorIdentification = new byte[tmp.Length + 1]; - Array.Copy(tmp, 0, inq.VendorIdentification, 0, tmp.Length); - } - - inq.ACC = scsi.Inquiry.AccessControlCoordinator; - inq.ACKREQQ = scsi.Inquiry.ACKRequests; - inq.AERC = scsi.Inquiry.AERCSupported; - inq.Addr16 = scsi.Inquiry.Address16; - inq.Addr32 = scsi.Inquiry.Address32; - inq.TPGS = (byte)scsi.Inquiry.AsymmetricalLUNAccess; - inq.BQue = scsi.Inquiry.BasicQueueing; - inq.EncServ = scsi.Inquiry.EnclosureServices; - inq.HiSup = scsi.Inquiry.HierarchicalLUN; - inq.IUS = scsi.Inquiry.IUS; - inq.Linked = scsi.Inquiry.LinkedCommands; - inq.MChngr = scsi.Inquiry.MediumChanger; - inq.MultiP = scsi.Inquiry.MultiPortDevice; - inq.NormACA = scsi.Inquiry.NormalACA; - inq.PeripheralDeviceType = (byte)scsi.Inquiry.PeripheralDeviceType; - inq.PeripheralQualifier = (byte)scsi.Inquiry.PeripheralQualifier; - inq.Protect = scsi.Inquiry.Protection; - inq.QAS = scsi.Inquiry.QAS; - inq.RelAddr = scsi.Inquiry.RelativeAddressing; - inq.RMB = scsi.Inquiry.Removable; - inq.CmdQue = scsi.Inquiry.TaggedCommandQueue; - inq.TrmTsk = scsi.Inquiry.TerminateTaskSupported; - inq.ThreePC = scsi.Inquiry.ThirdPartyCopy; - inq.TranDis = scsi.Inquiry.TranferDisable; - inq.SftRe = scsi.Inquiry.SoftReset; - inq.Clocking = (byte)scsi.Inquiry.SPIClocking; - inq.SCCS = scsi.Inquiry.StorageArrayController; - inq.Sync = scsi.Inquiry.SyncTransfer; - inq.VersionDescriptors = scsi.Inquiry.VersionDescriptors; - inq.WBus16 = scsi.Inquiry.WideBus16; - inq.WBus32 = scsi.Inquiry.WideBus32; - - InquiryData = Structs.Devices.SCSI.Inquiry.Encode(inq); - } - - public Inquiry? Inquiry => Structs.Devices.SCSI.Inquiry.Decode(InquiryData); - - [JsonIgnore] - public int Id { get; set; } - [DisplayName("Data from INQUIRY command")] - public byte[] InquiryData { get; set; } - public virtual List EVPDPages { get; set; } - [DisplayName("Supports MODE SENSE(6)")] - public bool SupportsModeSense6 { get; set; } - [DisplayName("Supports MODE SENSE(10)")] - public bool SupportsModeSense10 { get; set; } - [DisplayName("Supports MODE SENSE with subpages")] - public bool SupportsModeSubpages { get; set; } - public virtual ScsiMode ModeSense { get; set; } - public virtual Mmc MultiMediaDevice { get; set; } - public virtual TestedMedia ReadCapabilities { get; set; } - public virtual List RemovableMedias { get; set; } - public virtual Ssc SequentialDevice { get; set; } - [DisplayName("Data from MODE SENSE(6) command")] - public byte[] ModeSense6Data { get; set; } - [DisplayName("Data from MODE SENSE(10) command")] - public byte[] ModeSense10Data { get; set; } - [DisplayName("Data from MODE SENSE(6) command (current)")] - public byte[] ModeSense6CurrentData { get; set; } - [DisplayName("Data from MODE SENSE(10) command (current)")] - public byte[] ModeSense10CurrentData { get; set; } - [DisplayName("Data from MODE SENSE(6) command (changeable)")] - public byte[] ModeSense6ChangeableData { get; set; } - [DisplayName("Data from MODE SENSE(10) command (changeable)")] - public byte[] ModeSense10ChangeableData { get; set; } - - [JsonIgnore] - public int? SequentialDeviceId { get; set; } - } - - public class ScsiMode - { - public ScsiMode() {} - - public ScsiMode(modeType mode) - { - if(mode.MediumTypeSpecified) - MediumType = mode.MediumType; - - WriteProtected = mode.WriteProtected; - - if(mode.SpeedSpecified) - Speed = mode.Speed; - - if(mode.BufferedModeSpecified) - BufferedMode = mode.BufferedMode; - - BlankCheckEnabled = mode.BlankCheckEnabled; - DPOandFUA = mode.DPOandFUA; - - if(mode.ModePages != null) - { - ModePages = new List(); - - foreach(modePageType modePage in mode.ModePages) - ModePages.Add(new ScsiPage(modePage)); - } - - if(mode.BlockDescriptors == null) - return; - - BlockDescriptors = new List(); - - foreach(blockDescriptorType blockDescriptor in mode.BlockDescriptors) - BlockDescriptors.Add(new BlockDescriptor(blockDescriptor)); - } - - [JsonIgnore] - public int Id { get; set; } - [DisplayName("Medium type code")] - public byte? MediumType { get; set; } - [DisplayName("Write protected")] - public bool WriteProtected { get; set; } - public virtual List BlockDescriptors { get; set; } - public byte? Speed { get; set; } - [DisplayName("Buffered mode")] - public byte? BufferedMode { get; set; } - [DisplayName("Blank check enabled")] - public bool BlankCheckEnabled { get; set; } - [DisplayName("DPO and FUA")] - public bool DPOandFUA { get; set; } - public virtual List ModePages { get; set; } - } - - public class BlockDescriptor - { - public BlockDescriptor() {} - - public BlockDescriptor(blockDescriptorType descriptor) - { - Density = descriptor.Density; - - if(descriptor.BlocksSpecified) - Blocks = descriptor.Blocks; - - if(descriptor.BlockLengthSpecified) - BlockLength = descriptor.BlockLength; - } - - [JsonIgnore] - public int Id { get; set; } - public byte Density { get; set; } - public ulong? Blocks { get; set; } - [DisplayName("Block length (bytes)")] - public uint? BlockLength { get; set; } - } - - public class ScsiPage - { - public ScsiPage() {} - - public ScsiPage(pageType evpdPage) - { - page = evpdPage.page; - value = evpdPage.value; - } - - public ScsiPage(modePageType modePage) - { - page = modePage.page; - subpage = modePage.subpage; - value = modePage.value; - } - - [JsonIgnore] - public int Id { get; set; } - public byte page { get; set; } - public byte? subpage { get; set; } - public byte[] value { get; set; } - } - - public class Mmc - { - public Mmc() {} - - public Mmc(mmcType mmc) - { - if(mmc.ModeSense2A != null) - ModeSense2AData = ModePage_2A.Encode(new ModePage_2A - { - AccurateCDDA = mmc.ModeSense2A.AccurateCDDA, - BCK = mmc.ModeSense2A.BCK, - BufferSize = mmc.ModeSense2A.BufferSize, - BUF = mmc.ModeSense2A.BufferUnderRunProtection, - Eject = mmc.ModeSense2A.CanEject, - Lock = mmc.ModeSense2A.CanLockMedia, - CDDACommand = mmc.ModeSense2A.CDDACommand, - Composite = mmc.ModeSense2A.CompositeAudioVideo, - CMRSupported = (ushort)(mmc.ModeSense2A.CSSandCPPMSupported ? 1 : 0), - CurrentSpeed = mmc.ModeSense2A.CurrentSpeed, - CurrentWriteSpeed = mmc.ModeSense2A.CurrentWriteSpeed, - CurrentWriteSpeedSelected = mmc.ModeSense2A.CurrentWriteSpeedSelected, - SDP = mmc.ModeSense2A.DeterministicSlotChanger, - DigitalPort1 = mmc.ModeSense2A.DigitalPort1, - DigitalPort2 = mmc.ModeSense2A.DigitalPort2, - LeadInPW = mmc.ModeSense2A.LeadInPW, - LoadingMechanism = mmc.ModeSense2A.LoadingMechanismType, - LockState = mmc.ModeSense2A.LockStatus, - LSBF = mmc.ModeSense2A.LSBF, - MaximumSpeed = mmc.ModeSense2A.MaximumSpeed, - MaxWriteSpeed = mmc.ModeSense2A.MaximumWriteSpeed, - AudioPlay = mmc.ModeSense2A.PlaysAudio, - PreventJumper = mmc.ModeSense2A.PreventJumperStatus, - RCK = mmc.ModeSense2A.RCK, - ReadBarcode = mmc.ModeSense2A.ReadsBarcode, - SCC = mmc.ModeSense2A.ReadsBothSides, - ReadCDR = mmc.ModeSense2A.ReadsCDR, - ReadCDRW = mmc.ModeSense2A.ReadsCDRW, - DeinterlaveSubchannel = mmc.ModeSense2A.ReadsDeinterlavedSubchannel, - ReadDVDR = mmc.ModeSense2A.ReadsDVDR, - ReadDVDRAM = mmc.ModeSense2A.ReadsDVDRAM, - ReadDVDROM = mmc.ModeSense2A.ReadsDVDROM, - ISRC = mmc.ModeSense2A.ReadsISRC, - Mode2Form2 = mmc.ModeSense2A.ReadsMode2Form2, - Mode2Form1 = mmc.ModeSense2A.ReadsMode2Form1, - Method2 = mmc.ModeSense2A.ReadsPacketCDR, - Subchannel = mmc.ModeSense2A.ReadsSubchannel, - UPC = mmc.ModeSense2A.ReadsUPC, - C2Pointer = mmc.ModeSense2A.ReturnsC2Pointers, - RotationControlSelected = mmc.ModeSense2A.RotationControlSelected, - SeparateChannelMute = mmc.ModeSense2A.SeparateChannelMute, - SeparateChannelVolume = mmc.ModeSense2A.SeparateChannelVolume, - SSS = mmc.ModeSense2A.SSS, - MultiSession = mmc.ModeSense2A.SupportsMultiSession, - SupportedVolumeLevels = mmc.ModeSense2A.SupportedVolumeLevels, - TestWrite = mmc.ModeSense2A.TestWrite, - WriteCDR = mmc.ModeSense2A.WritesCDR, - WriteCDRW = mmc.ModeSense2A.WritesCDRW, - WriteDVDR = mmc.ModeSense2A.WritesDVDR, - WriteDVDRAM = mmc.ModeSense2A.WritesDVDRAM, - WriteSpeedPerformanceDescriptors = mmc.ModeSense2A.WriteSpeedPerformanceDescriptors - }); - - if(mmc.Features != null) - Features = new MmcFeatures(mmc.Features); - - if(mmc.TestedMedia == null) - return; - - TestedMedia = new List(); - - foreach(testedMediaType mediaType in mmc.TestedMedia) - TestedMedia.Add(new TestedMedia(mediaType, false)); - } - - [JsonIgnore] - public int Id { get; set; } - public virtual ModePage_2A ModeSense2A => ModePage_2A.Decode(ModeSense2AData); - public virtual MmcFeatures Features { get; set; } - public virtual List TestedMedia { get; set; } - public byte[] ModeSense2AData { get; set; } - [JsonIgnore] - public int? FeaturesId { get; set; } - } - - public class MmcFeatures - { - public MmcFeatures() {} - - public MmcFeatures(mmcFeaturesType features) - { - if(features.PhysicalInterfaceStandardSpecified && - !features.PhysicalInterfaceStandardNumberSpecified) - PhysicalInterfaceStandardNumber = (uint?)features.PhysicalInterfaceStandard; - - if(features.PhysicalInterfaceStandardNumberSpecified) - PhysicalInterfaceStandardNumber = features.PhysicalInterfaceStandardNumber; - - if(features.AACSVersionSpecified) - AACSVersion = features.AACSVersion; - - if(features.AGIDsSpecified) - AGIDs = features.AGIDs; - - if(features.BindingNonceBlocksSpecified) - BindingNonceBlocks = features.BindingNonceBlocks; - - if(features.CPRMVersionSpecified) - CPRMVersion = features.CPRMVersion; - - if(features.CSSVersionSpecified) - CSSVersion = features.CSSVersion; - - if(features.LoadingMechanismTypeSpecified) - LoadingMechanismType = features.LoadingMechanismType; - - if(features.LogicalBlockSizeSpecified) - LogicalBlockSize = features.LogicalBlockSize; - - if(features.BlocksPerReadableUnitSpecified) - BlocksPerReadableUnit = features.BlocksPerReadableUnit; - - if(features.FirmwareDateSpecified) - FirmwareDate = features.FirmwareDate; - - if(features.VolumeLevelsSpecified) - VolumeLevels = features.VolumeLevels; - - BufferUnderrunFreeInDVD = features.BufferUnderrunFreeInDVD; - BufferUnderrunFreeInSAO = features.BufferUnderrunFreeInSAO; - BufferUnderrunFreeInTAO = features.BufferUnderrunFreeInTAO; - CanAudioScan = features.CanAudioScan; - CanEject = features.CanEject; - CanEraseSector = features.CanEraseSector; - CanExpandBDRESpareArea = features.CanExpandBDRESpareArea; - CanFormat = features.CanFormat; - CanFormatBDREWithoutSpare = features.CanFormatBDREWithoutSpare; - CanFormatCert = features.CanFormatCert; - CanFormatFRF = features.CanFormatFRF; - CanFormatQCert = features.CanFormatQCert; - CanFormatRRM = features.CanFormatRRM; - CanGenerateBindingNonce = features.CanGenerateBindingNonce; - CanLoad = features.CanLoad; - CanMuteSeparateChannels = features.CanMuteSeparateChannels; - CanOverwriteSAOTrack = features.CanOverwriteSAOTrack; - CanOverwriteTAOTrack = features.CanOverwriteTAOTrack; - CanPlayCDAudio = features.CanPlayCDAudio; - CanPseudoOverwriteBDR = features.CanPseudoOverwriteBDR; - CanReadAllDualR = features.CanReadAllDualR; - CanReadAllDualRW = features.CanReadAllDualRW; - CanReadBD = features.CanReadBD; - CanReadBDR = features.CanReadBDR; - CanReadBDRE1 = features.CanReadBDRE1; - CanReadBDRE2 = features.CanReadBDRE2; - CanReadBDROM = features.CanReadBDROM; - CanReadBluBCA = features.CanReadBluBCA; - CanReadCD = features.CanReadCD; - CanReadCDMRW = features.CanReadCDMRW; - CanReadCPRM_MKB = features.CanReadCPRM_MKB; - CanReadDDCD = features.CanReadDDCD; - CanReadDVD = features.CanReadDVD; - CanReadDVDPlusMRW = features.CanReadDVDPlusMRW; - CanReadDVDPlusR = features.CanReadDVDPlusR; - CanReadDVDPlusRDL = features.CanReadDVDPlusRDL; - CanReadDVDPlusRW = features.CanReadDVDPlusRW; - CanReadDVDPlusRWDL = features.CanReadDVDPlusRWDL; - CanReadDriveAACSCertificate = features.CanReadDriveAACSCertificate; - CanReadHDDVD = features.CanReadHDDVD; - CanReadHDDVDR = features.CanReadHDDVDR; - CanReadHDDVDRAM = features.CanReadHDDVDRAM; - CanReadLeadInCDText = features.CanReadLeadInCDText; - CanReadOldBDR = features.CanReadOldBDR; - CanReadOldBDRE = features.CanReadOldBDRE; - CanReadOldBDROM = features.CanReadOldBDROM; - CanReadSpareAreaInformation = features.CanReadSpareAreaInformation; - CanReportDriveSerial = features.CanReportDriveSerial; - CanReportMediaSerial = features.CanReportMediaSerial; - CanTestWriteDDCDR = features.CanTestWriteDDCDR; - CanTestWriteDVD = features.CanTestWriteDVD; - CanTestWriteInSAO = features.CanTestWriteInSAO; - CanTestWriteInTAO = features.CanTestWriteInTAO; - CanUpgradeFirmware = features.CanUpgradeFirmware; - CanWriteBD = features.CanWriteBD; - CanWriteBDR = features.CanWriteBDR; - CanWriteBDRE1 = features.CanWriteBDRE1; - CanWriteBDRE2 = features.CanWriteBDRE2; - CanWriteBusEncryptedBlocks = features.CanWriteBusEncryptedBlocks; - CanWriteCDMRW = features.CanWriteCDMRW; - CanWriteCDRW = features.CanWriteCDRW; - CanWriteCDRWCAV = features.CanWriteCDRWCAV; - CanWriteCDSAO = features.CanWriteCDSAO; - CanWriteCDTAO = features.CanWriteCDTAO; - CanWriteCSSManagedDVD = features.CanWriteCSSManagedDVD; - CanWriteDDCDR = features.CanWriteDDCDR; - CanWriteDDCDRW = features.CanWriteDDCDRW; - CanWriteDVDPlusMRW = features.CanWriteDVDPlusMRW; - CanWriteDVDPlusR = features.CanWriteDVDPlusR; - CanWriteDVDPlusRDL = features.CanWriteDVDPlusRDL; - CanWriteDVDPlusRW = features.CanWriteDVDPlusRW; - CanWriteDVDPlusRWDL = features.CanWriteDVDPlusRWDL; - CanWriteDVDR = features.CanWriteDVDR; - CanWriteDVDRDL = features.CanWriteDVDRDL; - CanWriteDVDRW = features.CanWriteDVDRW; - CanWriteHDDVDR = features.CanWriteHDDVDR; - CanWriteHDDVDRAM = features.CanWriteHDDVDRAM; - CanWriteOldBDR = features.CanWriteOldBDR; - CanWriteOldBDRE = features.CanWriteOldBDRE; - CanWritePackedSubchannelInTAO = features.CanWritePackedSubchannelInTAO; - CanWriteRWSubchannelInSAO = features.CanWriteRWSubchannelInSAO; - CanWriteRWSubchannelInTAO = features.CanWriteRWSubchannelInTAO; - CanWriteRaw = features.CanWriteRaw; - CanWriteRawMultiSession = features.CanWriteRawMultiSession; - CanWriteRawSubchannelInTAO = features.CanWriteRawSubchannelInTAO; - ChangerIsSideChangeCapable = features.ChangerIsSideChangeCapable; - ChangerSlots = features.ChangerSlots; - ChangerSupportsDiscPresent = features.ChangerSupportsDiscPresent; - DBML = features.DBML; - DVDMultiRead = features.DVDMultiRead; - EmbeddedChanger = features.EmbeddedChanger; - ErrorRecoveryPage = features.ErrorRecoveryPage; - Locked = features.Locked; - MultiRead = features.MultiRead; - PreventJumper = features.PreventJumper; - SupportsAACS = features.SupportsAACS; - SupportsBusEncryption = features.SupportsBusEncryption; - SupportsC2 = features.SupportsC2; - SupportsCPRM = features.SupportsCPRM; - SupportsCSS = features.SupportsCSS; - SupportsDAP = features.SupportsDAP; - SupportsDeviceBusyEvent = features.SupportsDeviceBusyEvent; - SupportsHybridDiscs = features.SupportsHybridDiscs; - SupportsModePage1Ch = features.SupportsModePage1Ch; - SupportsOSSC = features.SupportsOSSC; - SupportsPWP = features.SupportsPWP; - SupportsSWPP = features.SupportsSWPP; - SupportsSecurDisc = features.SupportsSecurDisc; - SupportsSeparateVolume = features.SupportsSeparateVolume; - SupportsVCPS = features.SupportsVCPS; - SupportsWriteInhibitDCB = features.SupportsWriteInhibitDCB; - SupportsWriteProtectPAC = features.SupportsWriteProtectPAC; - } - - [JsonIgnore] - public int Id { get; set; } - [DisplayName("AACS version")] - public byte? AACSVersion { get; set; } - [DisplayName("AGIDs")] - public byte? AGIDs { get; set; } - [DisplayName("Binding nonce blocks")] - public byte? BindingNonceBlocks { get; set; } - [DisplayName("Blocks per redable unit")] - public ushort? BlocksPerReadableUnit { get; set; } - [DisplayName("Buffer under-run free in DVD writing")] - public bool BufferUnderrunFreeInDVD { get; set; } - [DisplayName("Buffer under-run free in SAO writing")] - public bool BufferUnderrunFreeInSAO { get; set; } - [DisplayName("Buffer under-run free in TAO writing")] - public bool BufferUnderrunFreeInTAO { get; set; } - [DisplayName("Can audio scan")] - public bool CanAudioScan { get; set; } - [DisplayName("Can eject")] - public bool CanEject { get; set; } - [DisplayName("Can erase sectors")] - public bool CanEraseSector { get; set; } - [DisplayName("Can expand BD-RE spare area")] - public bool CanExpandBDRESpareArea { get; set; } - [DisplayName("Can format media")] - public bool CanFormat { get; set; } - [DisplayName("Can format BD-RE without spare area")] - public bool CanFormatBDREWithoutSpare { get; set; } - [DisplayName("Can do a fully certified format")] - public bool CanFormatCert { get; set; } - [DisplayName("Can do a FRF format")] - public bool CanFormatFRF { get; set; } - [DisplayName("Can do a quick certified format")] - public bool CanFormatQCert { get; set; } - [DisplayName("Can do a RRM format")] - public bool CanFormatRRM { get; set; } - [DisplayName("Can generate binding nonce")] - public bool CanGenerateBindingNonce { get; set; } - [DisplayName("Can load")] - public bool CanLoad { get; set; } - [DisplayName("Can mute separate channels")] - public bool CanMuteSeparateChannels { get; set; } - [DisplayName("Can overwrite track in SAO")] - public bool CanOverwriteSAOTrack { get; set; } - [DisplayName("Can overwrite track in TAO")] - public bool CanOverwriteTAOTrack { get; set; } - [DisplayName("Can play CD-DA")] - public bool CanPlayCDAudio { get; set; } - [DisplayName("Can pseudo-overwrite BD-R")] - public bool CanPseudoOverwriteBDR { get; set; } - [DisplayName("Can read all dual-layer recordables")] - public bool CanReadAllDualR { get; set; } - [DisplayName("Can read all dual-layer rewritables")] - public bool CanReadAllDualRW { get; set; } - [DisplayName("Can read Blu-ray")] - public bool CanReadBD { get; set; } - [DisplayName("Can read BD-R")] - public bool CanReadBDR { get; set; } - [DisplayName("Can read BD-RE v1")] - public bool CanReadBDRE1 { get; set; } - [DisplayName("Can read BD-RE v2")] - public bool CanReadBDRE2 { get; set; } - [DisplayName("Can read BD-ROM")] - public bool CanReadBDROM { get; set; } - [DisplayName("Can read BCA from Blu-ray")] - public bool CanReadBluBCA { get; set; } - [DisplayName("Can read CD")] - public bool CanReadCD { get; set; } - [DisplayName("Can read CD-MRW")] - public bool CanReadCDMRW { get; set; } - [DisplayName("Can read CPRM's MKB")] - public bool CanReadCPRM_MKB { get; set; } - [DisplayName("Can read DDCD")] - public bool CanReadDDCD { get; set; } - [DisplayName("Can read DVD")] - public bool CanReadDVD { get; set; } - [DisplayName("Can read DVD+MRW")] - public bool CanReadDVDPlusMRW { get; set; } - [DisplayName("Can read DVD+R")] - public bool CanReadDVDPlusR { get; set; } - [DisplayName("Can read DVD+R DL")] - public bool CanReadDVDPlusRDL { get; set; } - [DisplayName("Can read DVD+RW")] - public bool CanReadDVDPlusRW { get; set; } - [DisplayName("Can read DVD+RW DL")] - public bool CanReadDVDPlusRWDL { get; set; } - [DisplayName("Can read drive's AACS certificate")] - public bool CanReadDriveAACSCertificate { get; set; } - [DisplayName("Can read HD DVD")] - public bool CanReadHDDVD { get; set; } - [DisplayName("Can read HD DVD-R")] - public bool CanReadHDDVDR { get; set; } - [DisplayName("Can read HD DVD-RAM")] - public bool CanReadHDDVDRAM { get; set; } - [DisplayName("Can read Lead-In's CD-TEXT")] - public bool CanReadLeadInCDText { get; set; } - [DisplayName("Can read old generation BD-R")] - public bool CanReadOldBDR { get; set; } - [DisplayName("Can read old generation BD-RE")] - public bool CanReadOldBDRE { get; set; } - [DisplayName("Can read old generation BD-ROM")] - public bool CanReadOldBDROM { get; set; } - [DisplayName("Can read spare area information")] - public bool CanReadSpareAreaInformation { get; set; } - [DisplayName("Can report drive serial number")] - public bool CanReportDriveSerial { get; set; } - [DisplayName("Can report media serial number")] - public bool CanReportMediaSerial { get; set; } - [DisplayName("Can test write DDCD-R")] - public bool CanTestWriteDDCDR { get; set; } - [DisplayName("Can test write DVD")] - public bool CanTestWriteDVD { get; set; } - [DisplayName("Can test write in SAO mode")] - public bool CanTestWriteInSAO { get; set; } - [DisplayName("Can test write in TAO mode")] - public bool CanTestWriteInTAO { get; set; } - [DisplayName("Can upgrade firmware")] - public bool CanUpgradeFirmware { get; set; } - [DisplayName("Can write Blu-ray")] - public bool CanWriteBD { get; set; } - [DisplayName("Can write BD-R")] - public bool CanWriteBDR { get; set; } - [DisplayName("Can write BD-RE v1")] - public bool CanWriteBDRE1 { get; set; } - [DisplayName("Can write BD-RE v2")] - public bool CanWriteBDRE2 { get; set; } - [DisplayName("Can write bus encrypted blocks")] - public bool CanWriteBusEncryptedBlocks { get; set; } - [DisplayName("Can write CD-MRW")] - public bool CanWriteCDMRW { get; set; } - [DisplayName("Can write CD-RW")] - public bool CanWriteCDRW { get; set; } - [DisplayName("Can write CD-RW CAV")] - public bool CanWriteCDRWCAV { get; set; } - [DisplayName("Can write CD in SAO mode")] - public bool CanWriteCDSAO { get; set; } - [DisplayName("Can write CD in TAO mode")] - public bool CanWriteCDTAO { get; set; } - [DisplayName("Can write CSS managed DVD")] - public bool CanWriteCSSManagedDVD { get; set; } - [DisplayName("Can write DDCD-R")] - public bool CanWriteDDCDR { get; set; } - [DisplayName("Can write DDCD-RW")] - public bool CanWriteDDCDRW { get; set; } - [DisplayName("Can write DVD+MRW")] - public bool CanWriteDVDPlusMRW { get; set; } - [DisplayName("Can write DVD+R")] - public bool CanWriteDVDPlusR { get; set; } - [DisplayName("Can write DVD+R DL")] - public bool CanWriteDVDPlusRDL { get; set; } - [DisplayName("Can write DVD+RW")] - public bool CanWriteDVDPlusRW { get; set; } - [DisplayName("Can write DVD+RW DL")] - public bool CanWriteDVDPlusRWDL { get; set; } - [DisplayName("Can write DVD-R")] - public bool CanWriteDVDR { get; set; } - [DisplayName("Can write DVD-R DL")] - public bool CanWriteDVDRDL { get; set; } - [DisplayName("Can write DVD-RW")] - public bool CanWriteDVDRW { get; set; } - [DisplayName("Can write HD DVD-R")] - public bool CanWriteHDDVDR { get; set; } - [DisplayName("Can write HD DVD-RAM")] - public bool CanWriteHDDVDRAM { get; set; } - [DisplayName("Can write old generation BD-R")] - public bool CanWriteOldBDR { get; set; } - [DisplayName("Can write old generation BD-RE")] - public bool CanWriteOldBDRE { get; set; } - [DisplayName("Can write packet subchannel in TAO")] - public bool CanWritePackedSubchannelInTAO { get; set; } - [DisplayName("Can write RW subchannel in SAO")] - public bool CanWriteRWSubchannelInSAO { get; set; } - [DisplayName("Can write RW subchannel in TAO")] - public bool CanWriteRWSubchannelInTAO { get; set; } - [DisplayName("Can write RAW-96 sectors")] - public bool CanWriteRaw { get; set; } - [DisplayName("Can write RAW-96 sectors in multisession")] - public bool CanWriteRawMultiSession { get; set; } - [DisplayName("Can write RAW-96 sectors in TAO")] - public bool CanWriteRawSubchannelInTAO { get; set; } - [DisplayName("Changer is side change capable")] - public bool ChangerIsSideChangeCapable { get; set; } - [DisplayName("Changer slots")] - public byte ChangerSlots { get; set; } - [DisplayName("Changer supports disc present")] - public bool ChangerSupportsDiscPresent { get; set; } - [DisplayName("CPRM version")] - public byte? CPRMVersion { get; set; } - [DisplayName("CSS version")] - public byte? CSSVersion { get; set; } - [DisplayName("DBML")] - public bool DBML { get; set; } - [DisplayName("DVD Multi-Read Specification")] - public bool DVDMultiRead { get; set; } - [DisplayName("Has an embedded changer")] - public bool EmbeddedChanger { get; set; } - [DisplayName("Has error recovery page")] - public bool ErrorRecoveryPage { get; set; } - [DisplayName("Firmware date")] - public DateTime? FirmwareDate { get; set; } - [DisplayName("Loading mechanism type")] - public byte? LoadingMechanismType { get; set; } - [DisplayName("Locked")] - public bool Locked { get; set; } - [DisplayName("Logical block size")] - public uint? LogicalBlockSize { get; set; } - [DisplayName("Multi-Read Specification")] - public bool MultiRead { get; set; } - [DisplayName("Physical interface standard")] - public PhysicalInterfaces? PhysicalInterfaceStandard => (PhysicalInterfaces?)PhysicalInterfaceStandardNumber; - [DisplayName("Physical interface standard number")] - public uint? PhysicalInterfaceStandardNumber { get; set; } - [DisplayName("Prevent eject jumper")] - public bool PreventJumper { get; set; } - [DisplayName("Supports AACS")] - public bool SupportsAACS { get; set; } - [DisplayName("Supports bus encryption")] - public bool SupportsBusEncryption { get; set; } - [DisplayName("Supports C2 pointers")] - public bool SupportsC2 { get; set; } - [DisplayName("Supports CPRM")] - public bool SupportsCPRM { get; set; } - [DisplayName("Supports CSS")] - public bool SupportsCSS { get; set; } - [DisplayName("Supports DAP")] - public bool SupportsDAP { get; set; } - [DisplayName("Supports device busy event")] - public bool SupportsDeviceBusyEvent { get; set; } - [DisplayName("Supports hybrid discs")] - public bool SupportsHybridDiscs { get; set; } - [DisplayName("Supports MODE PAGE 1Ch")] - public bool SupportsModePage1Ch { get; set; } - [DisplayName("Supports OSSC")] - public bool SupportsOSSC { get; set; } - [DisplayName("Supports PWP")] - public bool SupportsPWP { get; set; } - [DisplayName("Supports SWPP")] - public bool SupportsSWPP { get; set; } - [DisplayName("Supports SecurDisc")] - public bool SupportsSecurDisc { get; set; } - [DisplayName("Support separate volume levels")] - public bool SupportsSeparateVolume { get; set; } - [DisplayName("Supports VCPS")] - public bool SupportsVCPS { get; set; } - [DisplayName("Supports write inhibit DCB")] - public bool SupportsWriteInhibitDCB { get; set; } - [DisplayName("Supports write protect PAC")] - public bool SupportsWriteProtectPAC { get; set; } - [DisplayName("Volume levels")] - public ushort? VolumeLevels { get; set; } - [DisplayName("MMC FEATURES binary data")] - public byte[] BinaryData { get; set; } - } - - public class TestedMedia - { - public Identify.IdentifyDevice? IdentifyDevice; - - public TestedMedia() {} - - public TestedMedia(testedMediaType mediaType, bool ata) - { - if(mediaType.BlocksSpecified) - Blocks = mediaType.Blocks; - - if(mediaType.BlockSizeSpecified) - BlockSize = mediaType.BlockSize; - - if(mediaType.CanReadAACSSpecified) - CanReadAACS = mediaType.CanReadAACS; - - if(mediaType.CanReadADIPSpecified) - CanReadADIP = mediaType.CanReadADIP; - - if(mediaType.CanReadATIPSpecified) - CanReadATIP = mediaType.CanReadATIP; - - if(mediaType.CanReadBCASpecified) - CanReadBCA = mediaType.CanReadBCA; - - if(mediaType.CanReadC2PointersSpecified) - CanReadC2Pointers = mediaType.CanReadC2Pointers; - - if(mediaType.CanReadCMISpecified) - CanReadCMI = mediaType.CanReadCMI; - - if(mediaType.CanReadCorrectedSubchannelSpecified) - CanReadCorrectedSubchannel = mediaType.CanReadCorrectedSubchannel; - - if(mediaType.CanReadCorrectedSubchannelWithC2Specified) - CanReadCorrectedSubchannelWithC2 = mediaType.CanReadCorrectedSubchannelWithC2; - - if(mediaType.CanReadDCBSpecified) - CanReadDCB = mediaType.CanReadDCB; - - if(mediaType.CanReadDDSSpecified) - CanReadDDS = mediaType.CanReadDDS; - - if(mediaType.CanReadDMISpecified) - CanReadDMI = mediaType.CanReadDMI; - - if(mediaType.CanReadDiscInformationSpecified) - CanReadDiscInformation = mediaType.CanReadDiscInformation; - - if(mediaType.CanReadFullTOCSpecified) - CanReadFullTOC = mediaType.CanReadFullTOC; - - if(mediaType.CanReadHDCMISpecified) - CanReadHDCMI = mediaType.CanReadHDCMI; - - if(mediaType.CanReadLayerCapacitySpecified) - CanReadLayerCapacity = mediaType.CanReadLayerCapacity; - - if(mediaType.CanReadLeadInSpecified) - CanReadFirstTrackPreGap = mediaType.CanReadLeadIn; - - if(mediaType.CanReadLeadOutSpecified) - CanReadLeadOut = mediaType.CanReadLeadOut; - - if(mediaType.CanReadMediaIDSpecified) - CanReadMediaID = mediaType.CanReadMediaID; - - if(mediaType.CanReadMediaSerialSpecified) - CanReadMediaSerial = mediaType.CanReadMediaSerial; - - if(mediaType.CanReadPACSpecified) - CanReadPAC = mediaType.CanReadPAC; - - if(mediaType.CanReadPFISpecified) - CanReadPFI = mediaType.CanReadPFI; - - if(mediaType.CanReadPMASpecified) - CanReadPMA = mediaType.CanReadPMA; - - if(mediaType.CanReadPQSubchannelSpecified) - CanReadPQSubchannel = mediaType.CanReadPQSubchannel; - - if(mediaType.CanReadPQSubchannelWithC2Specified) - CanReadPQSubchannelWithC2 = mediaType.CanReadPQSubchannelWithC2; - - if(mediaType.CanReadPRISpecified) - CanReadPRI = mediaType.CanReadPRI; - - if(mediaType.CanReadRWSubchannelSpecified) - CanReadRWSubchannel = mediaType.CanReadRWSubchannel; - - if(mediaType.CanReadRWSubchannelWithC2Specified) - CanReadRWSubchannelWithC2 = mediaType.CanReadRWSubchannelWithC2; - - if(mediaType.CanReadRecordablePFISpecified) - CanReadRecordablePFI = mediaType.CanReadRecordablePFI; - - if(mediaType.CanReadSpareAreaInformationSpecified) - CanReadSpareAreaInformation = mediaType.CanReadSpareAreaInformation; - - if(mediaType.CanReadTOCSpecified) - CanReadTOC = mediaType.CanReadTOC; - - if(mediaType.DensitySpecified) - Density = mediaType.Density; - - if(mediaType.LongBlockSizeSpecified) - LongBlockSize = mediaType.LongBlockSize; - - if(mediaType.ManufacturerSpecified) - Manufacturer = mediaType.Manufacturer; - - if(mediaType.MediumTypeSpecified) - MediumType = mediaType.MediumType; - - if(mediaType.ModelSpecified) - Model = mediaType.Model; - - if(mediaType.SupportsHLDTSTReadRawDVDSpecified) - SupportsHLDTSTReadRawDVD = mediaType.SupportsHLDTSTReadRawDVD; - - if(mediaType.SupportsNECReadCDDASpecified) - SupportsNECReadCDDA = mediaType.SupportsNECReadCDDA; - - if(mediaType.SupportsPioneerReadCDDASpecified) - SupportsPioneerReadCDDA = mediaType.SupportsPioneerReadCDDA; - - if(mediaType.SupportsPioneerReadCDDAMSFSpecified) - SupportsPioneerReadCDDAMSF = mediaType.SupportsPioneerReadCDDAMSF; - - if(mediaType.SupportsPlextorReadCDDASpecified) - SupportsPlextorReadCDDA = mediaType.SupportsPlextorReadCDDA; - - if(mediaType.SupportsPlextorReadRawDVDSpecified) - SupportsPlextorReadRawDVD = mediaType.SupportsPlextorReadRawDVD; - - if(mediaType.SupportsRead10Specified) - SupportsRead10 = mediaType.SupportsRead10; - - if(mediaType.SupportsRead12Specified) - SupportsRead12 = mediaType.SupportsRead12; - - if(mediaType.SupportsRead16Specified) - SupportsRead16 = mediaType.SupportsRead16; - - if(mediaType.SupportsReadSpecified) - { - if(ata) - SupportsReadSectors = mediaType.SupportsRead; - else - SupportsRead6 = mediaType.SupportsRead; - } - - if(mediaType.SupportsReadCapacity16Specified) - SupportsReadCapacity16 = mediaType.SupportsReadCapacity16; - - if(mediaType.SupportsReadCapacitySpecified) - SupportsReadCapacity = mediaType.SupportsReadCapacity; - - if(mediaType.SupportsReadCdSpecified) - SupportsReadCd = mediaType.SupportsReadCd; - - if(mediaType.SupportsReadCdMsfSpecified) - SupportsReadCdMsf = mediaType.SupportsReadCdMsf; - - if(mediaType.SupportsReadCdRawSpecified) - SupportsReadCdRaw = mediaType.SupportsReadCdRaw; - - if(mediaType.SupportsReadCdMsfRawSpecified) - SupportsReadCdMsfRaw = mediaType.SupportsReadCdMsfRaw; - - if(mediaType.SupportsReadLong16Specified) - SupportsReadLong16 = mediaType.SupportsReadLong16; - - if(mediaType.SupportsReadLongSpecified) - SupportsReadLong = mediaType.SupportsReadLong; - - if(mediaType.LBASectorsSpecified) - LBASectors = mediaType.LBASectors; - - if(mediaType.LBA48SectorsSpecified) - LBA48Sectors = mediaType.LBA48Sectors; - - if(mediaType.LogicalAlignmentSpecified) - LogicalAlignment = mediaType.LogicalAlignment; - - if(mediaType.NominalRotationRateSpecified) - NominalRotationRate = mediaType.NominalRotationRate; - - if(mediaType.PhysicalBlockSizeSpecified) - PhysicalBlockSize = mediaType.PhysicalBlockSize; - - if(mediaType.SolidStateDeviceSpecified) - SolidStateDevice = mediaType.SolidStateDevice; - - if(mediaType.UnformattedBPTSpecified) - UnformattedBPT = mediaType.UnformattedBPT; - - if(mediaType.UnformattedBPSSpecified) - UnformattedBPS = mediaType.UnformattedBPS; - - if(mediaType.SupportsReadDmaLbaSpecified) - SupportsReadDmaLba = mediaType.SupportsReadDmaLba; - - if(mediaType.SupportsReadDmaRetryLbaSpecified) - SupportsReadDmaRetryLba = mediaType.SupportsReadDmaRetryLba; - - if(mediaType.SupportsReadLbaSpecified) - SupportsReadLba = mediaType.SupportsReadLba; - - if(mediaType.SupportsReadRetryLbaSpecified) - SupportsReadRetryLba = mediaType.SupportsReadRetryLba; - - if(mediaType.SupportsReadLongLbaSpecified) - SupportsReadLongLba = mediaType.SupportsReadLongLba; - - if(mediaType.SupportsReadLongRetryLbaSpecified) - SupportsReadLongRetryLba = mediaType.SupportsReadLongRetryLba; - - if(mediaType.SupportsSeekLbaSpecified) - SupportsSeekLba = mediaType.SupportsSeekLba; - - if(mediaType.SupportsReadDmaLba48Specified) - SupportsReadDmaLba48 = mediaType.SupportsReadDmaLba48; - - if(mediaType.SupportsReadLba48Specified) - SupportsReadLba48 = mediaType.SupportsReadLba48; - - if(mediaType.SupportsReadDmaSpecified) - SupportsReadDma = mediaType.SupportsReadDma; - - if(mediaType.SupportsReadDmaRetrySpecified) - SupportsReadDmaRetry = mediaType.SupportsReadDmaRetry; - - if(mediaType.SupportsReadRetrySpecified) - SupportsReadRetry = mediaType.SupportsReadRetry; - - if(mediaType.SupportsReadLongRetrySpecified) - SupportsReadLongRetry = mediaType.SupportsReadLongRetry; - - if(mediaType.SupportsSeekSpecified) - SupportsSeek = mediaType.SupportsSeek; - - if(mediaType.CHS != null) - CHS = new Chs(mediaType.CHS); - - if(mediaType.CurrentCHS != null) - CurrentCHS = new Chs(mediaType.CurrentCHS); - - MediaIsRecognized = mediaType.MediaIsRecognized; - MediumTypeName = mediaType.MediumTypeName; - ModeSense6Data = mediaType.ModeSense6Data; - ModeSense10Data = mediaType.ModeSense10Data; - } - - [JsonIgnore] - public int Id { get; set; } - [DisplayName("IDENTIFY DEVICE data")] - public byte[] IdentifyData { get; set; } - [DisplayName("Blocks")] - public ulong? Blocks { get; set; } - [DisplayName("Bytes per block")] - public uint? BlockSize { get; set; } - [DisplayName("Can read AACS")] - public bool? CanReadAACS { get; set; } - [DisplayName("Can read ADIP")] - public bool? CanReadADIP { get; set; } - [DisplayName("Can read ATIP")] - public bool? CanReadATIP { get; set; } - [DisplayName("Can read BCA")] - public bool? CanReadBCA { get; set; } - [DisplayName("Can read C2 pointers")] - public bool? CanReadC2Pointers { get; set; } - [DisplayName("Can read Copyright Management Information")] - public bool? CanReadCMI { get; set; } - [DisplayName("Can read corrected subchannel")] - public bool? CanReadCorrectedSubchannel { get; set; } - [DisplayName("Can read corrected subchannel with C2 pointers")] - public bool? CanReadCorrectedSubchannelWithC2 { get; set; } - [DisplayName("Can read DCBs")] - public bool? CanReadDCB { get; set; } - [DisplayName("Can read DDS")] - public bool? CanReadDDS { get; set; } - [DisplayName("Can read DMI")] - public bool? CanReadDMI { get; set; } - [DisplayName("Can read disc information")] - public bool? CanReadDiscInformation { get; set; } - [DisplayName("Can read full TOC")] - public bool? CanReadFullTOC { get; set; } - [DisplayName("Can read HD-DVD Copyright Management Information")] - public bool? CanReadHDCMI { get; set; } - [DisplayName("Can read layer capacity")] - public bool? CanReadLayerCapacity { get; set; } - [DisplayName("Can read into first track pregap")] - public bool? CanReadFirstTrackPreGap { get; set; } - [DisplayName("Can read into Lead-In")] - public bool? CanReadLeadIn { get; set; } - [DisplayName("Can read into Lead-Out")] - public bool? CanReadLeadOut { get; set; } - [DisplayName("Can read media ID")] - public bool? CanReadMediaID { get; set; } - [DisplayName("Can read media serial number")] - public bool? CanReadMediaSerial { get; set; } - [DisplayName("Can read PAC")] - public bool? CanReadPAC { get; set; } - [DisplayName("Can read PFI")] - public bool? CanReadPFI { get; set; } - [DisplayName("Can read PMA")] - public bool? CanReadPMA { get; set; } - [DisplayName("Can read PQ subchannel")] - public bool? CanReadPQSubchannel { get; set; } - [DisplayName("Can read PQ subchannel with C2 pointers")] - public bool? CanReadPQSubchannelWithC2 { get; set; } - [DisplayName("Can read pre-recorded information")] - public bool? CanReadPRI { get; set; } - [DisplayName("Can read RW subchannel")] - public bool? CanReadRWSubchannel { get; set; } - [DisplayName("Can read RW subchannel with C2 pointers")] - public bool? CanReadRWSubchannelWithC2 { get; set; } - [DisplayName("Can read recordable PFI")] - public bool? CanReadRecordablePFI { get; set; } - [DisplayName("Can read spare area information")] - public bool? CanReadSpareAreaInformation { get; set; } - [DisplayName("Can read TOC")] - public bool? CanReadTOC { get; set; } - [DisplayName("Density code")] - public byte? Density { get; set; } - [DisplayName("Bytes per block in READ LONG commands")] - public uint? LongBlockSize { get; set; } - [DisplayName("Media manufacturer")] - public string Manufacturer { get; set; } - [DisplayName("Media recognized by drive?")] - public bool MediaIsRecognized { get; set; } - [DisplayName("Medium type code")] - public byte? MediumType { get; set; } - [DisplayName("Media type")] - public string MediumTypeName { get; set; } - [DisplayName("Media model")] - public string Model { get; set; } - [DisplayName("Can read scrambled DVD sectors using HL-DT-ST cache trick")] - public bool? SupportsHLDTSTReadRawDVD { get; set; } - [DisplayName("Supports NEC READ CD-DA command")] - public bool? SupportsNECReadCDDA { get; set; } - [DisplayName("Supports Pioneer READ CD-DA command")] - public bool? SupportsPioneerReadCDDA { get; set; } - [DisplayName("Supports Pioneer READ CD-DA MSF command")] - public bool? SupportsPioneerReadCDDAMSF { get; set; } - [DisplayName("Supports Plextor READ CD-DA command")] - public bool? SupportsPlextorReadCDDA { get; set; } - [DisplayName("Can read scrambled DVD sectors using Plextor vendor command")] - public bool? SupportsPlextorReadRawDVD { get; set; } - [DisplayName("Supports READ(10) command")] - public bool? SupportsRead10 { get; set; } - [DisplayName("Supports READ(12) command")] - public bool? SupportsRead12 { get; set; } - [DisplayName("Supports READ(16) command")] - public bool? SupportsRead16 { get; set; } - [DisplayName("Supports READ(6) command")] - public bool? SupportsRead6 { get; set; } - [DisplayName("Supports READ CAPACITY(16) command")] - public bool? SupportsReadCapacity16 { get; set; } - [DisplayName("Supports READ CAPACITY command")] - public bool? SupportsReadCapacity { get; set; } - [DisplayName("Supports READ CD command")] - public bool? SupportsReadCd { get; set; } - [DisplayName("Supports READ CD MSF command")] - public bool? SupportsReadCdMsf { get; set; } - [DisplayName("Supports full sector in READ CD command")] - public bool? SupportsReadCdRaw { get; set; } - [DisplayName("Supports full sector in READ CD MSF command")] - public bool? SupportsReadCdMsfRaw { get; set; } - [DisplayName("Supports READ LONG(16) command")] - public bool? SupportsReadLong16 { get; set; } - [DisplayName("Supports READ LONG command")] - public bool? SupportsReadLong { get; set; } - - [DisplayName("Data from MODE SENSE(6) command")] - public byte[] ModeSense6Data { get; set; } - [DisplayName("Data from MODE SENSE(10) command")] - public byte[] ModeSense10Data { get; set; } - - public virtual Chs CHS { get; set; } - public virtual Chs CurrentCHS { get; set; } - [DisplayName("Sectors in 28-bit LBA mode")] - public uint? LBASectors { get; set; } - [DisplayName("Sectors in 48-bit LBA mode")] - public ulong? LBA48Sectors { get; set; } - [DisplayName("Logical alignment")] - public ushort? LogicalAlignment { get; set; } - [DisplayName("Nominal rotation rate")] - public ushort? NominalRotationRate { get; set; } - [DisplayName("Bytes per block, physical")] - public uint? PhysicalBlockSize { get; set; } - [DisplayName("Is it a SSD?")] - public bool? SolidStateDevice { get; set; } - [DisplayName("Bytes per unformatted track")] - public ushort? UnformattedBPT { get; set; } - [DisplayName("Bytes per unformatted sector")] - public ushort? UnformattedBPS { get; set; } - - [DisplayName("Supports READ DMA (LBA) command")] - public bool? SupportsReadDmaLba { get; set; } - [DisplayName("Supports READ DMA RETRY (LBA) command")] - public bool? SupportsReadDmaRetryLba { get; set; } - [DisplayName("Supports READ SECTORS (LBA) command")] - public bool? SupportsReadLba { get; set; } - [DisplayName("Supports READ SECTORS RETRY (LBA) command")] - public bool? SupportsReadRetryLba { get; set; } - [DisplayName("Supports READ SECTORS LONG (LBA) command")] - public bool? SupportsReadLongLba { get; set; } - [DisplayName("Supports READ SECTORS LONG RETRY (LBA) command")] - public bool? SupportsReadLongRetryLba { get; set; } - [DisplayName("Supports SEEK (LBA) command")] - public bool? SupportsSeekLba { get; set; } - - [DisplayName("Supports READ DMA EXT command")] - public bool? SupportsReadDmaLba48 { get; set; } - [DisplayName("Supports READ SECTORS EXT command")] - public bool? SupportsReadLba48 { get; set; } - - [DisplayName("Supports READ DMA command")] - public bool? SupportsReadDma { get; set; } - [DisplayName("Supports READ DMA RETRY command")] - public bool? SupportsReadDmaRetry { get; set; } - [DisplayName("Supports READ SECTORS RETRY command")] - public bool? SupportsReadRetry { get; set; } - [DisplayName("Supports READ SECTORS command")] - public bool? SupportsReadSectors { get; set; } - [DisplayName("Supports READ SECTORS LONG RETRY command")] - public bool? SupportsReadLongRetry { get; set; } - [DisplayName("Supports SEEK command")] - public bool? SupportsSeek { get; set; } - - [DisplayName("Can read into inter-session Lead-In")] - public bool? CanReadingIntersessionLeadIn { get; set; } - [DisplayName("Can read into inter-session Lead-Out")] - public bool? CanReadingIntersessionLeadOut { get; set; } - [DisplayName("Data from inter-session Lead-In")] - public byte[] IntersessionLeadInData { get; set; } - [DisplayName("Data from inter-session Lead-Out")] - public byte[] IntersessionLeadOutData { get; set; } - - [DisplayName("Can read scrambled data using READ CD command")] - public bool? CanReadCdScrambled { get; set; } - [DisplayName("Data from scrambled READ CD command")] - public byte[] ReadCdScrambledData { get; set; } - - [DisplayName("Can read from cache using F1h command subcommand 06h")] - public bool? CanReadF1_06 { get; set; } - [DisplayName("Can read from cache using F1h command subcommand 06h")] - public byte[] ReadF1_06Data { get; set; } - [DisplayName("Can read from cache using F1h command subcommand 06h targeting Lead-Out")] - public bool? CanReadF1_06LeadOut { get; set; } - [DisplayName("Can read from cache using F1h command subcommand 06h targeting Lead-Out")] - public byte[] ReadF1_06LeadOutData { get; set; } - - [JsonIgnore] - public int? AtaId { get; set; } - [JsonIgnore] - public int? ScsiId { get; set; } - [JsonIgnore] - public int? MmcId { get; set; } - - #region SCSI data - [DisplayName("Data from READ(6) command")] - public byte[] Read6Data { get; set; } - [DisplayName("Data from READ(10) command")] - public byte[] Read10Data { get; set; } - [DisplayName("Data from READ(12) command")] - public byte[] Read12Data { get; set; } - [DisplayName("Data from READ(16) command")] - public byte[] Read16Data { get; set; } - [DisplayName("Data from READ LONG(10) command")] - public byte[] ReadLong10Data { get; set; } - [DisplayName("Data from READ LONG(16) command")] - public byte[] ReadLong16Data { get; set; } - #endregion - - #region ATA data - [DisplayName("Data from READ SECTORS command")] - public byte[] ReadSectorsData { get; set; } - [DisplayName("Data from READ SECTORS RETRY command")] - public byte[] ReadSectorsRetryData { get; set; } - [DisplayName("Data from READ DMA command")] - public byte[] ReadDmaData { get; set; } - [DisplayName("Data from READ DMA RETRY command")] - public byte[] ReadDmaRetryData { get; set; } - [DisplayName("Data from READ SECTORS (LBA) command")] - public byte[] ReadLbaData { get; set; } - [DisplayName("Data from READ SECTORS RETRY (LBA) command")] - public byte[] ReadRetryLbaData { get; set; } - [DisplayName("Data from READ DMA (LBA) command")] - public byte[] ReadDmaLbaData { get; set; } - [DisplayName("Data from READ DMA RETRY (LBA) command")] - public byte[] ReadDmaRetryLbaData { get; set; } - [DisplayName("Data from READ SECTORS EXT command")] - public byte[] ReadLba48Data { get; set; } - [DisplayName("Data from READ DMA EXT command")] - public byte[] ReadDmaLba48Data { get; set; } - [DisplayName("Data from READ SECTORS LONG command")] - public byte[] ReadLongData { get; set; } - [DisplayName("Data from READ SECTORS LONG RETRY command")] - public byte[] ReadLongRetryData { get; set; } - [DisplayName("Data from READ SECTORS LONG (LBA) command")] - public byte[] ReadLongLbaData { get; set; } - [DisplayName("Data from READ SECTORS LONG RETRY (LBA) command")] - public byte[] ReadLongRetryLbaData { get; set; } - #endregion - - #region CompactDisc data - [DisplayName("Data from READ TOC command")] - public byte[] TocData { get; set; } - [DisplayName("Data from READ FULL TOC command")] - public byte[] FullTocData { get; set; } - [DisplayName("Data from READ ATIP command")] - public byte[] AtipData { get; set; } - [DisplayName("Data from READ PMA command")] - public byte[] PmaData { get; set; } - [DisplayName("Data from READ CD command")] - public byte[] ReadCdData { get; set; } - [DisplayName("Data from READ CD MSF command")] - public byte[] ReadCdMsfData { get; set; } - [DisplayName("Data from READ CD (full sector) command")] - public byte[] ReadCdFullData { get; set; } - [DisplayName("Data from READ CD MSF (full sector) command")] - public byte[] ReadCdMsfFullData { get; set; } - [DisplayName("Data from track 1 pregap")] - public byte[] Track1PregapData { get; set; } - [DisplayName("Data from Lead-In")] - public byte[] LeadInData { get; set; } - [DisplayName("Data from Lead-Out")] - public byte[] LeadOutData { get; set; } - [DisplayName("Data from reading C2 pointers")] - public byte[] C2PointersData { get; set; } - [DisplayName("Data from reading with PQ subchannels")] - public byte[] PQSubchannelData { get; set; } - [DisplayName("Data from reading with RW subchannels")] - public byte[] RWSubchannelData { get; set; } - [DisplayName("Data from reading with corrected subchannels")] - public byte[] CorrectedSubchannelData { get; set; } - [DisplayName("Data from reading with PQ subchannels and C2 pointers")] - public byte[] PQSubchannelWithC2Data { get; set; } - [DisplayName("Data from reading with RW subchannels and C2 pointers")] - public byte[] RWSubchannelWithC2Data { get; set; } - [DisplayName("Data from reading with corrected subchannels and C2 pointers")] - public byte[] CorrectedSubchannelWithC2Data { get; set; } - #endregion - - #region DVD data - [DisplayName("Data from PFI")] - public byte[] PfiData { get; set; } - [DisplayName("Data from DMI")] - public byte[] DmiData { get; set; } - [DisplayName("Data from DVD's Copyright Management Information")] - public byte[] CmiData { get; set; } - [DisplayName("Data from DVD's BCA")] - public byte[] DvdBcaData { get; set; } - [DisplayName("Data from DVD's AACS")] - public byte[] DvdAacsData { get; set; } - [DisplayName("Data from DVD's DDS")] - public byte[] DvdDdsData { get; set; } - [DisplayName("Data from DVD's Spare Area Information")] - public byte[] DvdSaiData { get; set; } - [DisplayName("Data from DVD's pre-recorded information")] - public byte[] PriData { get; set; } - [DisplayName("Data from embossed PFI")] - public byte[] EmbossedPfiData { get; set; } - [DisplayName("Data from ADIP")] - public byte[] AdipData { get; set; } - [DisplayName("Data from DCBs")] - public byte[] DcbData { get; set; } - [DisplayName("Data from HD-DVD's Copyright Management Information")] - public byte[] HdCmiData { get; set; } - [DisplayName("Data from DVD's layer information")] - public byte[] DvdLayerData { get; set; } - #endregion - - #region Blu-ray data - [DisplayName("Data from Blu-ray's BCA")] - public byte[] BluBcaData { get; set; } - [DisplayName("Data from Blu-ray's DDS")] - public byte[] BluDdsData { get; set; } - [DisplayName("Data from Blu-ray's Spare Area Information")] - public byte[] BluSaiData { get; set; } - [DisplayName("Data from Blu-ray's Disc Information")] - public byte[] BluDiData { get; set; } - [DisplayName("Data from Blu-ray's PAC")] - public byte[] BluPacData { get; set; } - #endregion - - #region Vendor data - [DisplayName("Data from Plextor's READ CD-DA command")] - public byte[] PlextorReadCddaData { get; set; } - [DisplayName("Data from Pioneer's READ CD-DA command")] - public byte[] PioneerReadCddaData { get; set; } - [DisplayName("Data from Pioneer's READ CD-DA MSF command")] - public byte[] PioneerReadCddaMsfData { get; set; } - [DisplayName("Data from NEC's READ CD-DA command")] - public byte[] NecReadCddaData { get; set; } - [DisplayName("Data from Plextor's scrambled DVD reading command")] - public byte[] PlextorReadRawDVDData { get; set; } - [DisplayName("Data from HL-DT-ST's scrambled DVD reading trick")] - public byte[] HLDTSTReadRawDVDData { get; set; } - #endregion - } - - public class Ssc - { - public Ssc() {} - - public Ssc(sscType ssc) - { - if(ssc.BlockSizeGranularitySpecified) - BlockSizeGranularity = ssc.BlockSizeGranularity; - - if(ssc.MaxBlockLengthSpecified) - MaxBlockLength = ssc.MaxBlockLength; - - if(ssc.MinBlockLengthSpecified) - MinBlockLength = ssc.MinBlockLength; - - if(ssc.SupportedDensities != null) - SupportedDensities = new List(ssc.SupportedDensities); - - if(ssc.SupportedMediaTypes != null) - { - SupportedMediaTypes = new List(); - - foreach(SupportedMedia mediaType in ssc.SupportedMediaTypes) - SupportedMediaTypes.Add(new SscSupportedMedia(mediaType)); - } - - if(ssc.TestedMedia == null) - return; - - TestedMedia = new List(); - - foreach(SequentialMedia testedMedia in ssc.TestedMedia) - TestedMedia.Add(new TestedSequentialMedia(testedMedia)); - } - - [JsonIgnore] - public int Id { get; set; } - [DisplayName("Block size granularity")] - public byte? BlockSizeGranularity { get; set; } - [DisplayName("Maximum block length")] - public uint? MaxBlockLength { get; set; } - [DisplayName("Minimum block length")] - public uint? MinBlockLength { get; set; } - - public virtual List SupportedDensities { get; set; } - public virtual List SupportedMediaTypes { get; set; } - public virtual List TestedMedia { get; set; } - } - - public class TestedSequentialMedia - { - public TestedSequentialMedia() {} - - public TestedSequentialMedia(SequentialMedia media) - { - if(media.CanReadMediaSerialSpecified) - CanReadMediaSerial = media.CanReadMediaSerial; - - if(media.DensitySpecified) - Density = media.Density; - - Manufacturer = media.Manufacturer; - MediaIsRecognized = media.MediaIsRecognized; - - if(media.MediumTypeSpecified) - MediumType = media.MediumType; - - MediumTypeName = media.MediumTypeName; - Model = media.Model; - - if(media.SupportedDensities != null) - SupportedDensities = new List(media.SupportedDensities); - - if(media.SupportedMediaTypes != null) - { - SupportedMediaTypes = new List(); - - foreach(SupportedMedia supportedMedia in media.SupportedMediaTypes) - SupportedMediaTypes.Add(new SscSupportedMedia(supportedMedia)); - } - - ModeSense6Data = media.ModeSense6Data; - ModeSense10Data = media.ModeSense10Data; - } - - [JsonIgnore] - public int Id { get; set; } - [DisplayName("Can read media serial?")] - public bool? CanReadMediaSerial { get; set; } - [DisplayName("Density code")] - public byte? Density { get; set; } - public string Manufacturer { get; set; } - [DisplayName("Media recognized by drive?")] - public bool MediaIsRecognized { get; set; } - [DisplayName("Medium type code")] - public byte? MediumType { get; set; } - [DisplayName("Medium type")] - public string MediumTypeName { get; set; } - public string Model { get; set; } - public virtual List SupportedDensities { get; set; } - public virtual List SupportedMediaTypes { get; set; } - - public byte[] ModeSense6Data { get; set; } - public byte[] ModeSense10Data { get; set; } - - [JsonIgnore] - public int? SscId { get; set; } - } - - public class Pcmcia - { - public string[] AdditionalInformation; - - public Pcmcia() {} - - public Pcmcia(pcmciaType pcmcia) - { - AdditionalInformation = pcmcia.AdditionalInformation; - CIS = pcmcia.CIS; - Compliance = pcmcia.Compliance; - - if(pcmcia.ManufacturerCodeSpecified) - ManufacturerCode = pcmcia.ManufacturerCode; - - if(pcmcia.CardCodeSpecified) - CardCode = pcmcia.CardCode; - - Manufacturer = pcmcia.Manufacturer; - ProductName = pcmcia.ProductName; - } - - [JsonIgnore] - public int Id { get; set; } - public byte[] CIS { get; set; } - public string Compliance { get; set; } - [DisplayName("Manufacturer code")] - public ushort? ManufacturerCode { get; set; } - [DisplayName("Card code")] - public ushort? CardCode { get; set; } - public string Manufacturer { get; set; } - [DisplayName("Product name")] - public string ProductName { get; set; } - } - - public class MmcSd - { - public MmcSd() {} - - public MmcSd(mmcsdType mmcSd) - { - CID = mmcSd.CID; - CSD = mmcSd.CSD; - OCR = mmcSd.OCR; - SCR = mmcSd.SCR; - ExtendedCSD = mmcSd.ExtendedCSD; - } - - [JsonIgnore] - public int Id { get; set; } - public byte[] CID { get; set; } - public byte[] CSD { get; set; } - public byte[] OCR { get; set; } - public byte[] SCR { get; set; } - public byte[] ExtendedCSD { get; set; } - } - - public class SscSupportedMedia - { - public SscSupportedMedia() {} - - public SscSupportedMedia(SupportedMedia media) - { - MediumType = media.MediumType; - Width = media.Width; - Length = media.Length; - Organization = media.Organization; - Name = media.Name; - Description = media.Description; - - if(media.DensityCodes == null) - return; - - DensityCodes = new List(); - - foreach(int densityCode in media.DensityCodes) - DensityCodes.Add(new DensityCode - { - Code = densityCode - }); - } - - [JsonIgnore] - public int Id { get; set; } - public byte MediumType { get; set; } - public virtual List DensityCodes { get; set; } - public ushort Width { get; set; } - public ushort Length { get; set; } - public string Organization { get; set; } - public string Name { get; set; } - public string Description { get; set; } - } - - public class DensityCode : IEquatable - { - [JsonIgnore, Key] - public int Id { get; set; } - - public int Code { get; set; } - - public bool Equals(DensityCode other) - { - if(ReferenceEquals(null, other)) - return false; - - if(ReferenceEquals(this, other)) - return true; - - return Code == other.Code; - } - - public override bool Equals(object obj) - { - if(ReferenceEquals(null, obj)) - return false; - - if(ReferenceEquals(this, obj)) - return true; - - return obj.GetType() == GetType() && Equals((DensityCode)obj); - } - - // ReSharper disable once NonReadonlyMemberInGetHashCode - public override int GetHashCode() => Code; - } - - public class GdRomSwapDiscCapabilities - { - [JsonIgnore, Key] - public int Id { get; set; } - - public bool RecognizedSwapDisc { get; set; } - public bool TestCrashed { get; set; } - public byte SwapDiscLeadOutPMIN { get; set; } - public byte SwapDiscLeadOutPSEC { get; set; } - public byte SwapDiscLeadOutPFRAM { get; set; } - public int SwapDiscLeadOutStart { get; set; } - public bool Lba0Readable { get; set; } - public byte[] Lba0Data { get; set; } - public byte[] Lba0Sense { get; set; } - public string Lba0DecodedSense { get; set; } - public bool Lba0ScrambledReadable { get; set; } - public byte[] Lba0ScrambledData { get; set; } - public byte[] Lba0ScrambledSense { get; set; } - public string Lba0ScrambledDecodedSense { get; set; } - public bool Lba44990Readable { get; set; } - public byte[] Lba44990Data { get; set; } - public byte[] Lba44990Sense { get; set; } - public string Lba44990DecodedSense { get; set; } - public int Lba44990ReadableCluster { get; set; } - public bool Lba45000Readable { get; set; } - public byte[] Lba45000Data { get; set; } - public byte[] Lba45000Sense { get; set; } - public string Lba45000DecodedSense { get; set; } - public int Lba45000ReadableCluster { get; set; } - public bool Lba50000Readable { get; set; } - public byte[] Lba50000Data { get; set; } - public byte[] Lba50000Sense { get; set; } - public string Lba50000DecodedSense { get; set; } - public int Lba50000ReadableCluster { get; set; } - public bool Lba100000Readable { get; set; } - public byte[] Lba100000Data { get; set; } - public byte[] Lba100000Sense { get; set; } - public string Lba100000DecodedSense { get; set; } - public int Lba100000ReadableCluster { get; set; } - public bool Lba400000Readable { get; set; } - public byte[] Lba400000Data { get; set; } - public byte[] Lba400000Sense { get; set; } - public string Lba400000DecodedSense { get; set; } - public int Lba400000ReadableCluster { get; set; } - public bool Lba450000Readable { get; set; } - public byte[] Lba450000Data { get; set; } - public byte[] Lba450000Sense { get; set; } - public string Lba450000DecodedSense { get; set; } - public int Lba450000ReadableCluster { get; set; } - public bool Lba44990PqReadable { get; set; } - public byte[] Lba44990PqData { get; set; } - public byte[] Lba44990PqSense { get; set; } - public string Lba44990PqDecodedSense { get; set; } - public int Lba44990PqReadableCluster { get; set; } - public bool Lba45000PqReadable { get; set; } - public byte[] Lba45000PqData { get; set; } - public byte[] Lba45000PqSense { get; set; } - public string Lba45000PqDecodedSense { get; set; } - public int Lba45000PqReadableCluster { get; set; } - public bool Lba50000PqReadable { get; set; } - public byte[] Lba50000PqData { get; set; } - public byte[] Lba50000PqSense { get; set; } - public string Lba50000PqDecodedSense { get; set; } - public int Lba50000PqReadableCluster { get; set; } - public bool Lba100000PqReadable { get; set; } - public byte[] Lba100000PqData { get; set; } - public byte[] Lba100000PqSense { get; set; } - public string Lba100000PqDecodedSense { get; set; } - public int Lba100000PqReadableCluster { get; set; } - public bool Lba400000PqReadable { get; set; } - public byte[] Lba400000PqData { get; set; } - public byte[] Lba400000PqSense { get; set; } - public string Lba400000PqDecodedSense { get; set; } - public int Lba400000PqReadableCluster { get; set; } - public bool Lba450000PqReadable { get; set; } - public byte[] Lba450000PqData { get; set; } - public byte[] Lba450000PqSense { get; set; } - public string Lba450000PqDecodedSense { get; set; } - public int Lba450000PqReadableCluster { get; set; } - public bool Lba44990RwReadable { get; set; } - public byte[] Lba44990RwData { get; set; } - public byte[] Lba44990RwSense { get; set; } - public string Lba44990RwDecodedSense { get; set; } - public int Lba44990RwReadableCluster { get; set; } - public bool Lba45000RwReadable { get; set; } - public byte[] Lba45000RwData { get; set; } - public byte[] Lba45000RwSense { get; set; } - public string Lba45000RwDecodedSense { get; set; } - public int Lba45000RwReadableCluster { get; set; } - public bool Lba50000RwReadable { get; set; } - public byte[] Lba50000RwData { get; set; } - public byte[] Lba50000RwSense { get; set; } - public string Lba50000RwDecodedSense { get; set; } - public int Lba50000RwReadableCluster { get; set; } - public bool Lba100000RwReadable { get; set; } - public byte[] Lba100000RwData { get; set; } - public byte[] Lba100000RwSense { get; set; } - public string Lba100000RwDecodedSense { get; set; } - public int Lba100000RwReadableCluster { get; set; } - public bool Lba400000RwReadable { get; set; } - public byte[] Lba400000RwData { get; set; } - public byte[] Lba400000RwSense { get; set; } - public string Lba400000RwDecodedSense { get; set; } - public int Lba400000RwReadableCluster { get; set; } - public bool Lba450000RwReadable { get; set; } - public byte[] Lba450000RwData { get; set; } - public byte[] Lba450000RwSense { get; set; } - public string Lba450000RwDecodedSense { get; set; } - public int Lba450000RwReadableCluster { get; set; } - public bool Lba44990AudioReadable { get; set; } - public byte[] Lba44990AudioData { get; set; } - public byte[] Lba44990AudioSense { get; set; } - public string Lba44990AudioDecodedSense { get; set; } - public int Lba44990AudioReadableCluster { get; set; } - public bool Lba45000AudioReadable { get; set; } - public byte[] Lba45000AudioData { get; set; } - public byte[] Lba45000AudioSense { get; set; } - public string Lba45000AudioDecodedSense { get; set; } - public int Lba45000AudioReadableCluster { get; set; } - public bool Lba50000AudioReadable { get; set; } - public byte[] Lba50000AudioData { get; set; } - public byte[] Lba50000AudioSense { get; set; } - public string Lba50000AudioDecodedSense { get; set; } - public int Lba50000AudioReadableCluster { get; set; } - public bool Lba100000AudioReadable { get; set; } - public byte[] Lba100000AudioData { get; set; } - public byte[] Lba100000AudioSense { get; set; } - public string Lba100000AudioDecodedSense { get; set; } - public int Lba100000AudioReadableCluster { get; set; } - public bool Lba400000AudioReadable { get; set; } - public byte[] Lba400000AudioData { get; set; } - public byte[] Lba400000AudioSense { get; set; } - public string Lba400000AudioDecodedSense { get; set; } - public int Lba400000AudioReadableCluster { get; set; } - public bool Lba450000AudioReadable { get; set; } - public byte[] Lba450000AudioData { get; set; } - public byte[] Lba450000AudioSense { get; set; } - public string Lba450000AudioDecodedSense { get; set; } - public int Lba450000AudioReadableCluster { get; set; } - public bool Lba44990AudioPqReadable { get; set; } - public byte[] Lba44990AudioPqData { get; set; } - public byte[] Lba44990AudioPqSense { get; set; } - public string Lba44990AudioPqDecodedSense { get; set; } - public int Lba44990AudioPqReadableCluster { get; set; } - public bool Lba45000AudioPqReadable { get; set; } - public byte[] Lba45000AudioPqData { get; set; } - public byte[] Lba45000AudioPqSense { get; set; } - public string Lba45000AudioPqDecodedSense { get; set; } - public int Lba45000AudioPqReadableCluster { get; set; } - public bool Lba50000AudioPqReadable { get; set; } - public byte[] Lba50000AudioPqData { get; set; } - public byte[] Lba50000AudioPqSense { get; set; } - public string Lba50000AudioPqDecodedSense { get; set; } - public int Lba50000AudioPqReadableCluster { get; set; } - public bool Lba100000AudioPqReadable { get; set; } - public byte[] Lba100000AudioPqData { get; set; } - public byte[] Lba100000AudioPqSense { get; set; } - public string Lba100000AudioPqDecodedSense { get; set; } - public int Lba100000AudioPqReadableCluster { get; set; } - public bool Lba400000AudioPqReadable { get; set; } - public byte[] Lba400000AudioPqData { get; set; } - public byte[] Lba400000AudioPqSense { get; set; } - public string Lba400000AudioPqDecodedSense { get; set; } - public int Lba400000AudioPqReadableCluster { get; set; } - public bool Lba450000AudioPqReadable { get; set; } - public byte[] Lba450000AudioPqData { get; set; } - public byte[] Lba450000AudioPqSense { get; set; } - public string Lba450000AudioPqDecodedSense { get; set; } - public int Lba450000AudioPqReadableCluster { get; set; } - public bool Lba44990AudioRwReadable { get; set; } - public byte[] Lba44990AudioRwData { get; set; } - public byte[] Lba44990AudioRwSense { get; set; } - public string Lba44990AudioRwDecodedSense { get; set; } - public int Lba44990AudioRwReadableCluster { get; set; } - public bool Lba45000AudioRwReadable { get; set; } - public byte[] Lba45000AudioRwData { get; set; } - public byte[] Lba45000AudioRwSense { get; set; } - public string Lba45000AudioRwDecodedSense { get; set; } - public int Lba45000AudioRwReadableCluster { get; set; } - public bool Lba50000AudioRwReadable { get; set; } - public byte[] Lba50000AudioRwData { get; set; } - public byte[] Lba50000AudioRwSense { get; set; } - public string Lba50000AudioRwDecodedSense { get; set; } - public int Lba50000AudioRwReadableCluster { get; set; } - public bool Lba100000AudioRwReadable { get; set; } - public byte[] Lba100000AudioRwData { get; set; } - public byte[] Lba100000AudioRwSense { get; set; } - public string Lba100000AudioRwDecodedSense { get; set; } - public int Lba100000AudioRwReadableCluster { get; set; } - public bool Lba400000AudioRwReadable { get; set; } - public byte[] Lba400000AudioRwData { get; set; } - public byte[] Lba400000AudioRwSense { get; set; } - public string Lba400000AudioRwDecodedSense { get; set; } - public int Lba400000AudioRwReadableCluster { get; set; } - public bool Lba450000AudioRwReadable { get; set; } - public byte[] Lba450000AudioRwData { get; set; } - public byte[] Lba450000AudioRwSense { get; set; } - public string Lba450000AudioRwDecodedSense { get; set; } - public int Lba450000AudioRwReadableCluster { get; set; } - public uint MinimumReadableSectorInHdArea { get; set; } - public uint MaximumReadableSectorInHdArea { get; set; } - public byte[] MaximumReadablePqInHdArea { get; set; } - public byte[] MaximumReadableRwInHdArea { get; set; } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Metadata/Dimensions.cs b/Aaru.CommonTypes/Metadata/Dimensions.cs deleted file mode 100644 index 8215c12..0000000 --- a/Aaru.CommonTypes/Metadata/Dimensions.cs +++ /dev/null @@ -1,1094 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Dimensions.cs -// Author(s) : Natalia Portillo -// -// Component : XML metadata. -// -// --[ Description ] ---------------------------------------------------------- -// -// Gets physical dimensions of a device/media based on its media type. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using Schemas; - -#pragma warning disable 612 - -namespace Aaru.CommonTypes.Metadata -{ - /// Physical dimensions for media types - public static class Dimensions - { - /// Gets the physical dimensions, in metadata expected format, for a given media type - /// Media type - /// Dimensions metadata - public static DimensionsType DimensionsFromMediaType(CommonTypes.MediaType dskType) - { - var dmns = new DimensionsType(); - - switch(dskType) - { - #region 5.25" floppy disk - case CommonTypes.MediaType.Apple32SS: - case CommonTypes.MediaType.Apple32DS: - case CommonTypes.MediaType.Apple33SS: - case CommonTypes.MediaType.Apple33DS: - case CommonTypes.MediaType.AppleFileWare: - case CommonTypes.MediaType.DOS_525_SS_DD_8: - case CommonTypes.MediaType.DOS_525_SS_DD_9: - case CommonTypes.MediaType.DOS_525_DS_DD_8: - case CommonTypes.MediaType.DOS_525_DS_DD_9: - case CommonTypes.MediaType.DOS_525_HD: - case CommonTypes.MediaType.XDF_525: - case CommonTypes.MediaType.ACORN_525_SS_SD_40: - case CommonTypes.MediaType.ACORN_525_SS_SD_80: - case CommonTypes.MediaType.ACORN_525_SS_DD_40: - case CommonTypes.MediaType.ACORN_525_SS_DD_80: - case CommonTypes.MediaType.ACORN_525_DS_DD: - case CommonTypes.MediaType.ATARI_525_SD: - case CommonTypes.MediaType.ATARI_525_ED: - case CommonTypes.MediaType.ATARI_525_DD: - case CommonTypes.MediaType.CBM_1540: - case CommonTypes.MediaType.CBM_1540_Ext: - case CommonTypes.MediaType.CBM_1571: - case CommonTypes.MediaType.ECMA_66: - case CommonTypes.MediaType.ECMA_70: - case CommonTypes.MediaType.NEC_525_HD: - case CommonTypes.MediaType.ECMA_78: - case CommonTypes.MediaType.ECMA_78_2: - case CommonTypes.MediaType.ECMA_99_8: - case CommonTypes.MediaType.ECMA_99_15: - case CommonTypes.MediaType.ECMA_99_26: - case CommonTypes.MediaType.FDFORMAT_525_DD: - case CommonTypes.MediaType.FDFORMAT_525_HD: - // According to ECMA-99 et al - dmns.Height = 133.3; - dmns.HeightSpecified = true; - dmns.Width = 133.3; - dmns.WidthSpecified = true; - dmns.Thickness = 1.65; - - return dmns; - #endregion 5.25" floppy disk - - #region 3.5" floppy disk - case CommonTypes.MediaType.AppleSonySS: - case CommonTypes.MediaType.AppleSonyDS: - case CommonTypes.MediaType.DOS_35_SS_DD_8: - case CommonTypes.MediaType.DOS_35_SS_DD_9: - case CommonTypes.MediaType.DOS_35_DS_DD_8: - case CommonTypes.MediaType.DOS_35_DS_DD_9: - case CommonTypes.MediaType.DOS_35_HD: - case CommonTypes.MediaType.DOS_35_ED: - case CommonTypes.MediaType.DMF: - case CommonTypes.MediaType.DMF_82: - case CommonTypes.MediaType.XDF_35: - case CommonTypes.MediaType.ACORN_35_DS_DD: - case CommonTypes.MediaType.CBM_35_DD: - case CommonTypes.MediaType.CBM_AMIGA_35_DD: - case CommonTypes.MediaType.CBM_AMIGA_35_HD: - case CommonTypes.MediaType.FDFORMAT_35_DD: - case CommonTypes.MediaType.FDFORMAT_35_HD: - case CommonTypes.MediaType.NEC_35_HD_8: - case CommonTypes.MediaType.NEC_35_HD_15: - case CommonTypes.MediaType.Floptical: - case CommonTypes.MediaType.HiFD: - case CommonTypes.MediaType.UHD144: - case CommonTypes.MediaType.Apricot_35: - case CommonTypes.MediaType.FD32MB: - // According to ECMA-100 et al - dmns.Height = 94; - dmns.HeightSpecified = true; - dmns.Width = 90; - dmns.WidthSpecified = true; - dmns.Thickness = 3.3; - - return dmns; - #endregion 3.5" floppy disk - - #region 8" floppy disk - case CommonTypes.MediaType.IBM23FD: - case CommonTypes.MediaType.IBM33FD_128: - case CommonTypes.MediaType.IBM33FD_256: - case CommonTypes.MediaType.IBM33FD_512: - case CommonTypes.MediaType.IBM43FD_128: - case CommonTypes.MediaType.IBM43FD_256: - case CommonTypes.MediaType.IBM53FD_256: - case CommonTypes.MediaType.IBM53FD_512: - case CommonTypes.MediaType.IBM53FD_1024: - case CommonTypes.MediaType.RX01: - case CommonTypes.MediaType.RX02: - case CommonTypes.MediaType.NEC_8_SD: - case CommonTypes.MediaType.NEC_8_DD: - case CommonTypes.MediaType.ECMA_54: - case CommonTypes.MediaType.ECMA_59: - case CommonTypes.MediaType.ECMA_69_8: - case CommonTypes.MediaType.ECMA_69_15: - case CommonTypes.MediaType.ECMA_69_26: - // According to ECMA-59 et al - dmns.Height = 203.2; - dmns.HeightSpecified = true; - dmns.Width = 203.2; - dmns.WidthSpecified = true; - dmns.Thickness = 1.65; - - return dmns; - #endregion 8" floppy disk - - #region 356mm magneto optical - case CommonTypes.MediaType.ECMA_260: - case CommonTypes.MediaType.ECMA_260_Double: - // According to ECMA-260 et al - dmns.Height = 421.84; - dmns.HeightSpecified = true; - dmns.Width = 443.76; - dmns.WidthSpecified = true; - dmns.Thickness = 25.4; - - return dmns; - #endregion 356mm magneto optical - - #region 300mm magneto optical - case CommonTypes.MediaType.ECMA_189: - case CommonTypes.MediaType.ECMA_190: - case CommonTypes.MediaType.ECMA_317: - // According to ECMA-317 et al - dmns.Height = 340; - dmns.HeightSpecified = true; - dmns.Width = 320; - dmns.WidthSpecified = true; - dmns.Thickness = 17; - - return dmns; - #endregion 300mm magneto optical - - #region 5.25" magneto optical - case CommonTypes.MediaType.ECMA_153: - case CommonTypes.MediaType.ECMA_153_512: - case CommonTypes.MediaType.ECMA_183_512: - case CommonTypes.MediaType.ECMA_183: - case CommonTypes.MediaType.ECMA_184_512: - case CommonTypes.MediaType.ECMA_184: - case CommonTypes.MediaType.ECMA_195: - case CommonTypes.MediaType.ECMA_195_512: - case CommonTypes.MediaType.ECMA_238: - case CommonTypes.MediaType.ECMA_280: - case CommonTypes.MediaType.ECMA_322: - case CommonTypes.MediaType.ECMA_322_2k: - case CommonTypes.MediaType.UDO: - case CommonTypes.MediaType.UDO2: - case CommonTypes.MediaType.UDO2_WORM: - case CommonTypes.MediaType.ISO_15286: - case CommonTypes.MediaType.ISO_15286_1024: - case CommonTypes.MediaType.ISO_15286_512: - case CommonTypes.MediaType.ISO_10089: - case CommonTypes.MediaType.ISO_10089_512: - case CommonTypes.MediaType.ECMA_322_1k: - case CommonTypes.MediaType.ECMA_322_512: - case CommonTypes.MediaType.ISO_14517: - case CommonTypes.MediaType.ISO_14517_512: - // According to ECMA-183 et al - dmns.Height = 153; - dmns.HeightSpecified = true; - dmns.Width = 135; - dmns.WidthSpecified = true; - dmns.Thickness = 11; - - return dmns; - #endregion 5.25" magneto optical - - #region 3.5" magneto optical - case CommonTypes.MediaType.ECMA_154: - case CommonTypes.MediaType.ECMA_201: - case CommonTypes.MediaType.ECMA_201_ROM: - case CommonTypes.MediaType.ECMA_223: - case CommonTypes.MediaType.ECMA_223_512: - case CommonTypes.MediaType.GigaMo: - case CommonTypes.MediaType.GigaMo2: - // According to ECMA-154 et al - dmns.Height = 94; - dmns.HeightSpecified = true; - dmns.Width = 90; - dmns.WidthSpecified = true; - dmns.Thickness = 6; - - return dmns; - #endregion 3.5" magneto optical - - case CommonTypes.MediaType.PD650: - case CommonTypes.MediaType.PD650_WORM: - dmns.Height = 135; - dmns.HeightSpecified = true; - dmns.Width = 124; - dmns.WidthSpecified = true; - dmns.Thickness = 7.8; - - return dmns; - case CommonTypes.MediaType.ECMA_239: - dmns.Height = 97; - dmns.HeightSpecified = true; - dmns.Width = 92; - dmns.WidthSpecified = true; - dmns.Thickness = 5; - - return dmns; - case CommonTypes.MediaType.MMCmicro: - dmns.Height = 14; - dmns.HeightSpecified = true; - dmns.Width = 12; - dmns.WidthSpecified = true; - dmns.Thickness = 1.1; - - return dmns; - case CommonTypes.MediaType.MemoryStickMicro: - dmns.Height = 15; - dmns.HeightSpecified = true; - dmns.Width = 12.5; - dmns.WidthSpecified = true; - dmns.Thickness = 1.2; - - return dmns; - case CommonTypes.MediaType.microSD: - dmns.Height = 11; - dmns.HeightSpecified = true; - dmns.Width = 15; - dmns.WidthSpecified = true; - dmns.Thickness = 1; - - return dmns; - case CommonTypes.MediaType.miniSD: - dmns.Height = 21.5; - dmns.HeightSpecified = true; - dmns.Width = 20; - dmns.WidthSpecified = true; - dmns.Thickness = 1.4; - - return dmns; - case CommonTypes.MediaType.QIC3010: - case CommonTypes.MediaType.QIC3020: - case CommonTypes.MediaType.QIC3080: - case CommonTypes.MediaType.QIC3095: - case CommonTypes.MediaType.QIC320: - case CommonTypes.MediaType.QIC40: - case CommonTypes.MediaType.QIC80: - dmns.Height = 20; - dmns.HeightSpecified = true; - dmns.Width = 21.5; - dmns.WidthSpecified = true; - dmns.Thickness = 1.6; - - return dmns; - case CommonTypes.MediaType.RSMMC: - dmns.Height = 18; - dmns.HeightSpecified = true; - dmns.Width = 24; - dmns.WidthSpecified = true; - dmns.Thickness = 1.4; - - return dmns; - case CommonTypes.MediaType.MMC: - dmns.Height = 32; - dmns.HeightSpecified = true; - dmns.Width = 24; - dmns.WidthSpecified = true; - dmns.Thickness = 1.4; - - return dmns; - case CommonTypes.MediaType.SecureDigital: - dmns.Height = 32; - dmns.HeightSpecified = true; - dmns.Width = 24; - dmns.WidthSpecified = true; - dmns.Thickness = 2.1; - - return dmns; - case CommonTypes.MediaType.xD: - dmns.Height = 20; - dmns.HeightSpecified = true; - dmns.Width = 25; - dmns.WidthSpecified = true; - dmns.Thickness = 1.78; - - return dmns; - case CommonTypes.MediaType.XQD: - dmns.Height = 38.5; - dmns.HeightSpecified = true; - dmns.Width = 29.8; - dmns.WidthSpecified = true; - dmns.Thickness = 3.8; - - return dmns; - case CommonTypes.MediaType.MemoryStickDuo: - case CommonTypes.MediaType.MemoryStickProDuo: - dmns.Height = 20; - dmns.HeightSpecified = true; - dmns.Width = 31; - dmns.WidthSpecified = true; - dmns.Thickness = 1.6; - - return dmns; - case CommonTypes.MediaType.Nintendo3DSGameCard: - case CommonTypes.MediaType.NintendoDSGameCard: - case CommonTypes.MediaType.NintendoDSiGameCard: - dmns.Height = 35; - dmns.HeightSpecified = true; - dmns.Width = 33; - dmns.WidthSpecified = true; - dmns.Thickness = 3.8; - - return dmns; - case CommonTypes.MediaType.DataPlay: - dmns.Height = 42; - dmns.HeightSpecified = true; - dmns.Width = 33.5; - dmns.WidthSpecified = true; - dmns.Thickness = 3; - - return dmns; - case CommonTypes.MediaType.Microdrive: - dmns.Height = 44; - dmns.HeightSpecified = true; - dmns.Width = 34; - dmns.WidthSpecified = true; - dmns.Thickness = 8; - - return dmns; - case CommonTypes.MediaType.ExpressCard34: - dmns.Height = 75; - dmns.HeightSpecified = true; - dmns.Width = 34; - dmns.WidthSpecified = true; - dmns.Thickness = 5; - - return dmns; - case CommonTypes.MediaType.SmartMedia: - dmns.Height = 45; - dmns.HeightSpecified = true; - dmns.Width = 37; - dmns.WidthSpecified = true; - dmns.Thickness = 0.76; - - return dmns; - case CommonTypes.MediaType.MiniCard: - dmns.Height = 45; - dmns.HeightSpecified = true; - dmns.Width = 37; - dmns.WidthSpecified = true; - dmns.Thickness = 3.5; - - return dmns; - case CommonTypes.MediaType.PlayStationMemoryCard: - case CommonTypes.MediaType.PlayStationMemoryCard2: - dmns.Height = 55.7; - dmns.HeightSpecified = true; - dmns.Width = 41.5; - dmns.WidthSpecified = true; - dmns.Thickness = 7; - - return dmns; - case CommonTypes.MediaType.CFast: - case CommonTypes.MediaType.CompactFlash: - dmns.Height = 36; - dmns.HeightSpecified = true; - dmns.Width = 43; - dmns.WidthSpecified = true; - dmns.Thickness = 3.3; - - return dmns; - case CommonTypes.MediaType.CompactFlashType2: - dmns.Height = 36; - dmns.HeightSpecified = true; - dmns.Width = 43; - dmns.WidthSpecified = true; - dmns.Thickness = 5; - - return dmns; - case CommonTypes.MediaType.ZXMicrodrive: - dmns.Height = 36; - dmns.HeightSpecified = true; - dmns.Width = 43; - dmns.WidthSpecified = true; - dmns.Thickness = 5; - - return dmns; - case CommonTypes.MediaType.MemoryStick: - case CommonTypes.MediaType.MemoryStickPro: - dmns.Height = 21; - dmns.HeightSpecified = true; - dmns.Width = 50; - dmns.WidthSpecified = true; - dmns.Thickness = 2.6; - - return dmns; - case CommonTypes.MediaType.PocketZip: - dmns.Height = 54.5; - dmns.HeightSpecified = true; - dmns.Width = 50; - dmns.WidthSpecified = true; - dmns.Thickness = 2; - - return dmns; - case CommonTypes.MediaType.ExpressCard54: - dmns.Height = 75; - dmns.HeightSpecified = true; - dmns.Width = 54; - dmns.WidthSpecified = true; - dmns.Thickness = 5; - - return dmns; - case CommonTypes.MediaType.PCCardTypeI: - dmns.Height = 85.6; - dmns.HeightSpecified = true; - dmns.Width = 54; - dmns.WidthSpecified = true; - dmns.Thickness = 3.3; - - return dmns; - case CommonTypes.MediaType.PCCardTypeII: - dmns.Height = 85.6; - dmns.HeightSpecified = true; - dmns.Width = 54; - dmns.WidthSpecified = true; - dmns.Thickness = 5; - - return dmns; - case CommonTypes.MediaType.PCCardTypeIII: - dmns.Height = 85.6; - dmns.HeightSpecified = true; - dmns.Width = 54; - dmns.WidthSpecified = true; - dmns.Thickness = 10.5; - - return dmns; - case CommonTypes.MediaType.PCCardTypeIV: - dmns.Height = 85.6; - dmns.HeightSpecified = true; - dmns.Width = 54; - dmns.WidthSpecified = true; - dmns.Thickness = 16; - - return dmns; - case CommonTypes.MediaType.DataStore: - dmns.Height = 86.5; - dmns.HeightSpecified = true; - dmns.Width = 54; - dmns.WidthSpecified = true; - dmns.Thickness = 2.5; - - return dmns; - case CommonTypes.MediaType.VideoFloppy: - dmns.Height = 54; - dmns.HeightSpecified = true; - dmns.Width = 60; - dmns.WidthSpecified = true; - dmns.Thickness = 3.5; - - return dmns; - case CommonTypes.MediaType.VXA1: - case CommonTypes.MediaType.VXA2: - case CommonTypes.MediaType.VXA3: - dmns.Height = 95; - dmns.HeightSpecified = true; - dmns.Width = 62.5; - dmns.WidthSpecified = true; - dmns.Thickness = 15; - - return dmns; - case CommonTypes.MediaType.MiniDV: - dmns.Height = 47.5; - dmns.HeightSpecified = true; - dmns.Width = 66; - dmns.WidthSpecified = true; - dmns.Thickness = 12; - - return dmns; - case CommonTypes.MediaType.Wafer: - dmns.Height = 46.8; - dmns.HeightSpecified = true; - dmns.Width = 67.1; - dmns.WidthSpecified = true; - dmns.Thickness = 7.9; - - return dmns; - case CommonTypes.MediaType.NintendoDiskCard: - dmns.Height = 76.2; - dmns.HeightSpecified = true; - dmns.Width = 71.12; - dmns.WidthSpecified = true; - dmns.Thickness = 0; - - return dmns; - case CommonTypes.MediaType.HiMD: - case CommonTypes.MediaType.MD: - case CommonTypes.MediaType.MDData: - case CommonTypes.MediaType.MDData2: - case CommonTypes.MediaType.MD60: - case CommonTypes.MediaType.MD74: - case CommonTypes.MediaType.MD80: - dmns.Height = 68; - dmns.HeightSpecified = true; - dmns.Width = 71.5; - dmns.WidthSpecified = true; - dmns.Thickness = 4.8; - - return dmns; - case CommonTypes.MediaType.DAT160: - case CommonTypes.MediaType.DAT320: - case CommonTypes.MediaType.DAT72: - case CommonTypes.MediaType.DDS1: - case CommonTypes.MediaType.DDS2: - case CommonTypes.MediaType.DDS3: - case CommonTypes.MediaType.DDS4: - case CommonTypes.MediaType.DigitalAudioTape: - dmns.Height = 54; - dmns.HeightSpecified = true; - dmns.Width = 73; - dmns.WidthSpecified = true; - dmns.Thickness = 10.5; - - return dmns; - case CommonTypes.MediaType.CompactFloppy: - dmns.Height = 100; - dmns.HeightSpecified = true; - dmns.Width = 80; - dmns.WidthSpecified = true; - dmns.Thickness = 5; - - return dmns; - case CommonTypes.MediaType.DECtapeII: - dmns.Height = 60; - dmns.HeightSpecified = true; - dmns.Width = 81; - dmns.WidthSpecified = true; - dmns.Thickness = 13; - - return dmns; - case CommonTypes.MediaType.Ditto: - dmns.Height = 60; - dmns.HeightSpecified = true; - dmns.Width = 81; - dmns.WidthSpecified = true; - dmns.Thickness = 14; - - return dmns; - case CommonTypes.MediaType.DittoMax: - dmns.Height = 126; - dmns.HeightSpecified = true; - dmns.Width = 81; - dmns.WidthSpecified = true; - dmns.Thickness = 14; - - return dmns; - case CommonTypes.MediaType.RDX: - case CommonTypes.MediaType.RDX320: - dmns.Height = 119; - dmns.HeightSpecified = true; - dmns.Width = 87; - dmns.WidthSpecified = true; - dmns.Thickness = 23; - - return dmns; - case CommonTypes.MediaType.LS120: - case CommonTypes.MediaType.LS240: - dmns.Height = 94; - dmns.HeightSpecified = true; - dmns.Width = 90; - dmns.WidthSpecified = true; - dmns.Thickness = 3.5; - - return dmns; - case CommonTypes.MediaType.Travan: - case CommonTypes.MediaType.Travan3: - case CommonTypes.MediaType.Travan4: - case CommonTypes.MediaType.Travan5: - case CommonTypes.MediaType.Travan7: - dmns.Height = 72; - dmns.HeightSpecified = true; - dmns.Width = 92; - dmns.WidthSpecified = true; - dmns.Thickness = 15; - - return dmns; - case CommonTypes.MediaType.Travan1Ex: - dmns.Height = 0; - dmns.HeightSpecified = true; - dmns.Width = 92; - dmns.WidthSpecified = true; - dmns.Thickness = 15; - - return dmns; - case CommonTypes.MediaType.Travan3Ex: - dmns.Height = 0; - dmns.HeightSpecified = true; - dmns.Width = 92; - dmns.WidthSpecified = true; - dmns.Thickness = 15; - - return dmns; - case CommonTypes.MediaType.ADR2120: - case CommonTypes.MediaType.ADR260: - case CommonTypes.MediaType.ADR30: - case CommonTypes.MediaType.ADR50: - dmns.Height = 129; - dmns.HeightSpecified = true; - dmns.Width = 93; - dmns.WidthSpecified = true; - dmns.Thickness = 14.5; - - return dmns; - case CommonTypes.MediaType.Data8: - case CommonTypes.MediaType.AIT1: - case CommonTypes.MediaType.AIT1Turbo: - case CommonTypes.MediaType.AIT2: - case CommonTypes.MediaType.AIT2Turbo: - case CommonTypes.MediaType.AIT3: - case CommonTypes.MediaType.AIT3Ex: - case CommonTypes.MediaType.AIT3Turbo: - case CommonTypes.MediaType.AIT4: - case CommonTypes.MediaType.AIT5: - case CommonTypes.MediaType.AITETurbo: - case CommonTypes.MediaType.Exatape106m: - case CommonTypes.MediaType.Exatape160mXL: - case CommonTypes.MediaType.Exatape112m: - case CommonTypes.MediaType.Exatape125m: - case CommonTypes.MediaType.Exatape150m: - case CommonTypes.MediaType.Exatape15m: - case CommonTypes.MediaType.Exatape170m: - case CommonTypes.MediaType.Exatape225m: - case CommonTypes.MediaType.Exatape22m: - case CommonTypes.MediaType.Exatape22mAME: - case CommonTypes.MediaType.Exatape28m: - case CommonTypes.MediaType.Exatape40m: - case CommonTypes.MediaType.Exatape45m: - case CommonTypes.MediaType.Exatape54m: - case CommonTypes.MediaType.Exatape75m: - case CommonTypes.MediaType.Exatape76m: - case CommonTypes.MediaType.Exatape80m: - dmns.Height = 62.5; - dmns.HeightSpecified = true; - dmns.Width = 95; - dmns.WidthSpecified = true; - dmns.Thickness = 15; - - return dmns; - case CommonTypes.MediaType.EZ135: - case CommonTypes.MediaType.EZ230: - case CommonTypes.MediaType.SQ327: - dmns.Height = 97; - dmns.HeightSpecified = true; - dmns.Width = 98; - dmns.WidthSpecified = true; - dmns.Thickness = 9.5; - - return dmns; - case CommonTypes.MediaType.SQ400: - case CommonTypes.MediaType.SQ800: - case CommonTypes.MediaType.SQ2000: - dmns.Height = 137; - dmns.HeightSpecified = true; - dmns.Width = 137; - dmns.WidthSpecified = true; - dmns.Thickness = 12; - - return dmns; - case CommonTypes.MediaType.ZIP100: - case CommonTypes.MediaType.ZIP250: - case CommonTypes.MediaType.ZIP750: - dmns.Height = 98.5; - dmns.HeightSpecified = true; - dmns.Width = 98; - dmns.WidthSpecified = true; - dmns.Thickness = 6.5; - - return dmns; - case CommonTypes.MediaType.Jaz: - case CommonTypes.MediaType.Jaz2: - dmns.Height = 102; - dmns.HeightSpecified = true; - dmns.Width = 98; - dmns.WidthSpecified = true; - dmns.Thickness = 12; - - return dmns; - case CommonTypes.MediaType.Orb: - case CommonTypes.MediaType.Orb5: - dmns.Height = 104; - dmns.HeightSpecified = true; - dmns.Width = 98; - dmns.WidthSpecified = true; - dmns.Thickness = 8; - - return dmns; - case CommonTypes.MediaType.SparQ: - dmns.Height = 98; - dmns.HeightSpecified = true; - dmns.Width = 100; - dmns.WidthSpecified = true; - dmns.Thickness = 9.7; - - return dmns; - case CommonTypes.MediaType.ProfessionalDisc: - case CommonTypes.MediaType.ProfessionalDiscDual: - case CommonTypes.MediaType.ProfessionalDiscTriple: - case CommonTypes.MediaType.ProfessionalDiscQuad: - case CommonTypes.MediaType.PDD: - case CommonTypes.MediaType.PDD_WORM: - dmns.Height = 130; - dmns.HeightSpecified = true; - dmns.Width = 128.5; - dmns.WidthSpecified = true; - dmns.Thickness = 9; - - return dmns; - case CommonTypes.MediaType.SLR1: - case CommonTypes.MediaType.SLR2: - case CommonTypes.MediaType.SLR3: - case CommonTypes.MediaType.SLR32: - case CommonTypes.MediaType.SLR32SL: - case CommonTypes.MediaType.SLR4: - case CommonTypes.MediaType.SLR5: - case CommonTypes.MediaType.SLR5SL: - case CommonTypes.MediaType.SLR6: - case CommonTypes.MediaType.SLRtape100: - case CommonTypes.MediaType.SLRtape140: - case CommonTypes.MediaType.SLRtape24: - case CommonTypes.MediaType.SLRtape24SL: - case CommonTypes.MediaType.SLRtape40: - case CommonTypes.MediaType.SLRtape50: - case CommonTypes.MediaType.SLRtape60: - case CommonTypes.MediaType.SLRtape7: - case CommonTypes.MediaType.SLRtape75: - case CommonTypes.MediaType.SLRtape7SL: - dmns.Height = 150; - dmns.HeightSpecified = true; - dmns.Width = 100; - dmns.WidthSpecified = true; - dmns.Thickness = 18; - - return dmns; - case CommonTypes.MediaType.N64DD: - dmns.Height = 103.124; - dmns.HeightSpecified = true; - dmns.Width = 101.092; - dmns.WidthSpecified = true; - dmns.Thickness = 10.16; - - return dmns; - case CommonTypes.MediaType.CompactTapeI: - case CommonTypes.MediaType.CompactTapeII: - case CommonTypes.MediaType.DLTtapeIII: - case CommonTypes.MediaType.DLTtapeIIIxt: - case CommonTypes.MediaType.DLTtapeIV: - case CommonTypes.MediaType.DLTtapeS4: - case CommonTypes.MediaType.SDLT1: - case CommonTypes.MediaType.SDLT2: - case CommonTypes.MediaType.VStapeI: - dmns.Height = 105; - dmns.HeightSpecified = true; - dmns.Width = 105; - dmns.WidthSpecified = true; - dmns.Thickness = 25; - - return dmns; - case CommonTypes.MediaType.LTO: - case CommonTypes.MediaType.LTO2: - case CommonTypes.MediaType.LTO3: - case CommonTypes.MediaType.LTO3WORM: - case CommonTypes.MediaType.LTO4: - case CommonTypes.MediaType.LTO4WORM: - case CommonTypes.MediaType.LTO5: - case CommonTypes.MediaType.LTO5WORM: - case CommonTypes.MediaType.LTO6: - case CommonTypes.MediaType.LTO6WORM: - case CommonTypes.MediaType.LTO7: - case CommonTypes.MediaType.LTO7WORM: - dmns.Height = 101.6; - dmns.HeightSpecified = true; - dmns.Width = 105.41; - dmns.WidthSpecified = true; - dmns.Thickness = 21.59; - - return dmns; - case CommonTypes.MediaType.IBM3480: - case CommonTypes.MediaType.IBM3490: - case CommonTypes.MediaType.IBM3490E: - case CommonTypes.MediaType.IBM3592: - dmns.Height = 125.73; - dmns.HeightSpecified = true; - dmns.Width = 107.95; - dmns.WidthSpecified = true; - dmns.Thickness = 25.4; - - return dmns; - case CommonTypes.MediaType.T9840A: - case CommonTypes.MediaType.T9840B: - case CommonTypes.MediaType.T9840C: - case CommonTypes.MediaType.T9840D: - case CommonTypes.MediaType.T9940A: - case CommonTypes.MediaType.T9940B: - dmns.Height = 124.46; - dmns.HeightSpecified = true; - dmns.Width = 109.22; - dmns.WidthSpecified = true; - dmns.Thickness = 25.4; - - return dmns; - case CommonTypes.MediaType.CompactCassette: - case CommonTypes.MediaType.Dcas25: - case CommonTypes.MediaType.Dcas85: - case CommonTypes.MediaType.Dcas103: - dmns.Height = 63.5; - dmns.HeightSpecified = true; - dmns.Width = 128; - dmns.WidthSpecified = true; - dmns.Thickness = 12; - - return dmns; - case CommonTypes.MediaType.IBM3470: - dmns.Height = 58.42; - dmns.HeightSpecified = true; - dmns.Width = 137.16; - dmns.WidthSpecified = true; - dmns.Thickness = 16.51; - - return dmns; - case CommonTypes.MediaType.MLR1: - case CommonTypes.MediaType.MLR3: - case CommonTypes.MediaType.MLR1SL: - dmns.Height = 101.6; - dmns.HeightSpecified = true; - dmns.Width = 152.4; - dmns.WidthSpecified = true; - dmns.Thickness = 15.24; - - return dmns; - case CommonTypes.MediaType.QIC11: - case CommonTypes.MediaType.QIC120: - case CommonTypes.MediaType.QIC1350: - case CommonTypes.MediaType.QIC150: - case CommonTypes.MediaType.QIC24: - case CommonTypes.MediaType.QIC525: - dmns.Height = 101.6; - dmns.HeightSpecified = true; - dmns.Width = 154.2; - dmns.WidthSpecified = true; - dmns.Thickness = 16.6; - - return dmns; - case CommonTypes.MediaType.Bernoulli: - case CommonTypes.MediaType.Bernoulli10: - case CommonTypes.MediaType.Bernoulli20: - dmns.Height = 280; - dmns.HeightSpecified = true; - dmns.Width = 209; - dmns.WidthSpecified = true; - dmns.Thickness = 18; - - return dmns; - case CommonTypes.MediaType.Bernoulli2: - case CommonTypes.MediaType.BernoulliBox2_20: - case CommonTypes.MediaType.Bernoulli35: - case CommonTypes.MediaType.Bernoulli44: - case CommonTypes.MediaType.Bernoulli65: - case CommonTypes.MediaType.Bernoulli90: - case CommonTypes.MediaType.Bernoulli105: - case CommonTypes.MediaType.Bernoulli150: - case CommonTypes.MediaType.Bernoulli230: - dmns.Height = 138; - dmns.HeightSpecified = true; - dmns.Width = 136; - dmns.WidthSpecified = true; - dmns.Thickness = 9; - - return dmns; - case CommonTypes.MediaType.DTF: - case CommonTypes.MediaType.DTF2: - dmns.Height = 144.78; - dmns.HeightSpecified = true; - dmns.Width = 254; - dmns.WidthSpecified = true; - dmns.Thickness = 25.4; - - return dmns; - case CommonTypes.MediaType.LD: - case CommonTypes.MediaType.LDROM: - case CommonTypes.MediaType.LDROM2: - case CommonTypes.MediaType.MegaLD: - case CommonTypes.MediaType.LVROM: - dmns.Diameter = 300; - dmns.DiameterSpecified = true; - dmns.Thickness = 2.5; - - return dmns; - case CommonTypes.MediaType.REV35: - case CommonTypes.MediaType.REV70: - case CommonTypes.MediaType.REV120: - dmns.Height = 74.8; - dmns.HeightSpecified = true; - dmns.Width = 76.8; - dmns.WidthSpecified = true; - dmns.Thickness = 10; - - return dmns; - - #region CD/DVD/BD - case CommonTypes.MediaType.CDDA: - case CommonTypes.MediaType.CDG: - case CommonTypes.MediaType.CDEG: - case CommonTypes.MediaType.CDI: - case CommonTypes.MediaType.CDROM: - case CommonTypes.MediaType.CDROMXA: - case CommonTypes.MediaType.CDPLUS: - case CommonTypes.MediaType.CDMO: - case CommonTypes.MediaType.CDR: - case CommonTypes.MediaType.CDRW: - case CommonTypes.MediaType.CDMRW: - case CommonTypes.MediaType.VCD: - case CommonTypes.MediaType.SVCD: - case CommonTypes.MediaType.PCD: - case CommonTypes.MediaType.SACD: - case CommonTypes.MediaType.DDCD: - case CommonTypes.MediaType.DDCDR: - case CommonTypes.MediaType.DDCDRW: - case CommonTypes.MediaType.DTSCD: - case CommonTypes.MediaType.CDMIDI: - case CommonTypes.MediaType.CDV: - case CommonTypes.MediaType.CD: - case CommonTypes.MediaType.DVDROM: - case CommonTypes.MediaType.DVDR: - case CommonTypes.MediaType.DVDRW: - case CommonTypes.MediaType.DVDPR: - case CommonTypes.MediaType.DVDPRW: - case CommonTypes.MediaType.DVDPRWDL: - case CommonTypes.MediaType.DVDRDL: - case CommonTypes.MediaType.DVDPRDL: - case CommonTypes.MediaType.DVDRAM: - case CommonTypes.MediaType.DVDRWDL: - case CommonTypes.MediaType.DVDDownload: - case CommonTypes.MediaType.HDDVDROM: - case CommonTypes.MediaType.HDDVDRAM: - case CommonTypes.MediaType.HDDVDR: - case CommonTypes.MediaType.HDDVDRW: - case CommonTypes.MediaType.HDDVDRDL: - case CommonTypes.MediaType.HDDVDRWDL: - case CommonTypes.MediaType.BDROM: - case CommonTypes.MediaType.BDR: - case CommonTypes.MediaType.BDRE: - case CommonTypes.MediaType.BDRXL: - case CommonTypes.MediaType.BDREXL: - case CommonTypes.MediaType.PS1CD: - case CommonTypes.MediaType.PS2CD: - case CommonTypes.MediaType.PS2DVD: - case CommonTypes.MediaType.PS3DVD: - case CommonTypes.MediaType.PS3BD: - case CommonTypes.MediaType.PS4BD: - case CommonTypes.MediaType.PS5BD: - case CommonTypes.MediaType.XGD: - case CommonTypes.MediaType.XGD2: - case CommonTypes.MediaType.XGD3: - case CommonTypes.MediaType.XGD4: - case CommonTypes.MediaType.MEGACD: - case CommonTypes.MediaType.SATURNCD: - case CommonTypes.MediaType.GDROM: - case CommonTypes.MediaType.GDR: - case CommonTypes.MediaType.SuperCDROM2: - case CommonTypes.MediaType.JaguarCD: - case CommonTypes.MediaType.ThreeDO: - case CommonTypes.MediaType.WOD: - case CommonTypes.MediaType.WUOD: - case CommonTypes.MediaType.PCFX: - case CommonTypes.MediaType.CDIREADY: - case CommonTypes.MediaType.FMTOWNS: - case CommonTypes.MediaType.CDTV: - case CommonTypes.MediaType.CD32: - case CommonTypes.MediaType.Nuon: - case CommonTypes.MediaType.Playdia: - case CommonTypes.MediaType.Pippin: - case CommonTypes.MediaType.MilCD: - case CommonTypes.MediaType.CVD: - case CommonTypes.MediaType.UHDBD: - dmns.Diameter = 120; - dmns.DiameterSpecified = true; - dmns.Thickness = 1.2; - - return dmns; - case CommonTypes.MediaType.GOD: - dmns.Diameter = 80; - dmns.DiameterSpecified = true; - dmns.Thickness = 1.2; - - return dmns; - case CommonTypes.MediaType.VideoNow: - dmns.Diameter = 85; - dmns.DiameterSpecified = true; - dmns.Thickness = 1.2; - - return dmns; - case CommonTypes.MediaType.VideoNowColor: - case CommonTypes.MediaType.VideoNowXp: - dmns.Diameter = 108; - dmns.DiameterSpecified = true; - dmns.Thickness = 1.2; - - return dmns; - #endregion CD/DVD/BD - - #region Apple Hard Disks - // TODO: Find Apple Widget size - case CommonTypes.MediaType.AppleProfile: - dmns.Height = 223.8; - dmns.HeightSpecified = true; - dmns.Width = 438.9; - dmns.WidthSpecified = true; - dmns.Thickness = 111.5; - - return dmns; - case CommonTypes.MediaType.AppleHD20: - dmns.Height = 246.4; - dmns.HeightSpecified = true; - dmns.Width = 266.7; - dmns.WidthSpecified = true; - dmns.Thickness = 78.7; - - return dmns; - #endregion Apple Hard Disks - - case CommonTypes.MediaType.UMD: - dmns.Height = 64; - dmns.HeightSpecified = true; - dmns.Width = 63; - dmns.WidthSpecified = true; - dmns.Thickness = 4; - - return dmns; - default: return null; - } - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Metadata/MediaType.cs b/Aaru.CommonTypes/Metadata/MediaType.cs deleted file mode 100644 index 95c1746..0000000 --- a/Aaru.CommonTypes/Metadata/MediaType.cs +++ /dev/null @@ -1,2539 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : MediaType.cs -// Author(s) : Natalia Portillo -// -// Component : XML metadata. -// -// --[ Description ] ---------------------------------------------------------- -// -// Converts a common media type to the XML equivalent. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -#pragma warning disable 612 -namespace Aaru.CommonTypes.Metadata -{ - /// Handles media type for metadata - public static class MediaType - { - /// Converts a media type of a pair of type and subtype strings to use in metadata - /// Media type - /// Media type and subtype for metadata - public static (string type, string subType) MediaTypeToString(CommonTypes.MediaType dskType) - { - string discType; - string discSubType; - - switch(dskType) - { - case CommonTypes.MediaType.BDR: - discType = "Blu-ray"; - discSubType = "BD-R"; - - break; - case CommonTypes.MediaType.BDRE: - discType = "Blu-ray"; - discSubType = "BD-RE"; - - break; - case CommonTypes.MediaType.BDREXL: - discType = "Blu-ray"; - discSubType = "BD-RE XL"; - - break; - case CommonTypes.MediaType.BDROM: - discType = "Blu-ray"; - discSubType = "BD-ROM"; - - break; - case CommonTypes.MediaType.BDRXL: - discType = "Blu-ray"; - discSubType = "BD-R XL"; - - break; - case CommonTypes.MediaType.UHDBD: - discType = "Blu-ray"; - discSubType = "Ultra HD Blu-ray"; - - break; - case CommonTypes.MediaType.CBHD: - discType = "Blu-ray"; - discSubType = "CBHD"; - - break; - case CommonTypes.MediaType.CD: - discType = "Compact Disc"; - discSubType = "CD"; - - break; - case CommonTypes.MediaType.CDDA: - discType = "Compact Disc"; - discSubType = "CD Digital Audio"; - - break; - case CommonTypes.MediaType.CDEG: - discType = "Compact Disc"; - discSubType = "CD+EG"; - - break; - case CommonTypes.MediaType.CDG: - discType = "Compact Disc"; - discSubType = "CD+G"; - - break; - case CommonTypes.MediaType.CDI: - discType = "Compact Disc"; - discSubType = "CD-i"; - - break; - case CommonTypes.MediaType.CDIREADY: - discType = "Compact Disc"; - discSubType = "CD-i Ready"; - - break; - case CommonTypes.MediaType.CDMIDI: - discType = "Compact Disc"; - discSubType = "CD+MIDI"; - - break; - case CommonTypes.MediaType.CDMO: - discType = "Compact Disc"; - discSubType = "CD-MO"; - - break; - case CommonTypes.MediaType.CDMRW: - discType = "Compact Disc"; - discSubType = "CD-MRW"; - - break; - case CommonTypes.MediaType.CDPLUS: - discType = "Compact Disc"; - discSubType = "CD+"; - - break; - case CommonTypes.MediaType.CDR: - discType = "Compact Disc"; - discSubType = "CD-R"; - - break; - case CommonTypes.MediaType.CDROM: - discType = "Compact Disc"; - discSubType = "CD-ROM"; - - break; - case CommonTypes.MediaType.CDROMXA: - discType = "Compact Disc"; - discSubType = "CD-ROM XA"; - - break; - case CommonTypes.MediaType.CDRW: - discType = "Compact Disc"; - discSubType = "CD-RW"; - - break; - case CommonTypes.MediaType.CDV: - discType = "Compact Disc"; - discSubType = "CD-Video"; - - break; - case CommonTypes.MediaType.DDCD: - discType = "DDCD"; - discSubType = "DDCD"; - - break; - case CommonTypes.MediaType.DDCDR: - discType = "DDCD"; - discSubType = "DDCD-R"; - - break; - case CommonTypes.MediaType.DDCDRW: - discType = "DDCD"; - discSubType = "DDCD-RW"; - - break; - case CommonTypes.MediaType.DTSCD: - discType = "Compact Disc"; - discSubType = "DTS CD"; - - break; - case CommonTypes.MediaType.DVDDownload: - discType = "DVD"; - discSubType = "DVD-Download"; - - break; - case CommonTypes.MediaType.DVDPR: - discType = "DVD"; - discSubType = "DVD+R"; - - break; - case CommonTypes.MediaType.DVDPRDL: - discType = "DVD"; - discSubType = "DVD+R DL"; - - break; - case CommonTypes.MediaType.DVDPRW: - discType = "DVD"; - discSubType = "DVD+RW"; - - break; - case CommonTypes.MediaType.DVDPRWDL: - discType = "DVD"; - discSubType = "DVD+RW DL"; - - break; - case CommonTypes.MediaType.DVDR: - discType = "DVD"; - discSubType = "DVD-R"; - - break; - case CommonTypes.MediaType.DVDRAM: - discType = "DVD"; - discSubType = "DVD-RAM"; - - break; - case CommonTypes.MediaType.DVDRDL: - discType = "DVD"; - discSubType = "DVD-R DL"; - - break; - case CommonTypes.MediaType.DVDROM: - discType = "DVD"; - discSubType = "DVD-ROM"; - - break; - case CommonTypes.MediaType.DVDRW: - discType = "DVD"; - discSubType = "DVD-RW"; - - break; - case CommonTypes.MediaType.DVDRWDL: - discType = "DVD"; - discSubType = "DVD-RW DL"; - - break; - case CommonTypes.MediaType.EVD: - discType = "EVD"; - discSubType = "EVD"; - - break; - case CommonTypes.MediaType.FDDVD: - discType = "FDDVD"; - discSubType = "FDDVD"; - - break; - case CommonTypes.MediaType.FVD: - discType = "FVD"; - discSubType = "FVD"; - - break; - case CommonTypes.MediaType.GDR: - discType = "GD"; - discSubType = "GD-R"; - - break; - case CommonTypes.MediaType.GDROM: - discType = "GD"; - discSubType = "GD-ROM"; - - break; - case CommonTypes.MediaType.GOD: - discType = "DVD"; - discSubType = "GameCube Game Disc"; - - break; - case CommonTypes.MediaType.WOD: - discType = "DVD"; - discSubType = "Wii Optical Disc"; - - break; - case CommonTypes.MediaType.WUOD: - discType = "Blu-ray"; - discSubType = "Wii U Optical Disc"; - - break; - case CommonTypes.MediaType.HDDVDR: - discType = "HD DVD"; - discSubType = "HD DVD-R"; - - break; - case CommonTypes.MediaType.HDDVDRAM: - discType = "HD DVD"; - discSubType = "HD DVD-RAM"; - - break; - case CommonTypes.MediaType.HDDVDRDL: - discType = "HD DVD"; - discSubType = "HD DVD-R DL"; - - break; - case CommonTypes.MediaType.HDDVDROM: - discType = "HD DVD"; - discSubType = "HD DVD-ROM"; - - break; - case CommonTypes.MediaType.HDDVDRW: - discType = "HD DVD"; - discSubType = "HD DVD-RW"; - - break; - case CommonTypes.MediaType.HDDVDRWDL: - discType = "HD DVD"; - discSubType = "HD DVD-RW DL"; - - break; - case CommonTypes.MediaType.HDVMD: - discType = "HD VMD"; - discSubType = "HD VMD"; - - break; - case CommonTypes.MediaType.HiMD: - discType = "MiniDisc"; - discSubType = "Hi-MD"; - - break; - case CommonTypes.MediaType.HVD: - discType = "HVD"; - discSubType = "HVD"; - - break; - case CommonTypes.MediaType.LD: - discType = "LaserDisc"; - discSubType = "LaserDisc"; - - break; - case CommonTypes.MediaType.LDROM: - discType = "LaserDisc"; - discSubType = "LD-ROM"; - - break; - case CommonTypes.MediaType.LVROM: - discType = "LaserDisc"; - discSubType = "LV-ROM"; - - break; - case CommonTypes.MediaType.MegaLD: - discType = "LaserDisc"; - discSubType = "MegaLD"; - - break; - case CommonTypes.MediaType.MD: - discType = "MiniDisc"; - discSubType = "MiniDisc"; - - break; - case CommonTypes.MediaType.MD60: - discType = "MiniDisc"; - discSubType = "MiniDisc (60 minute)"; - - break; - case CommonTypes.MediaType.MD74: - discType = "MiniDisc"; - discSubType = "MiniDisc (74 minute)"; - - break; - case CommonTypes.MediaType.MD80: - discType = "MiniDisc"; - discSubType = "MiniDisc (80 minute)"; - - break; - case CommonTypes.MediaType.MEGACD: - discType = "Compact Disc"; - discSubType = "Sega Mega CD"; - - break; - case CommonTypes.MediaType.PCD: - discType = "Compact Disc"; - discSubType = "Photo CD"; - - break; - case CommonTypes.MediaType.PlayStationMemoryCard: - discType = "PlayStation Memory Card"; - discSubType = "PlayStation Memory Card"; - - break; - case CommonTypes.MediaType.PlayStationMemoryCard2: - discType = "PlayStation Memory Card"; - discSubType = "PlayStation 2 Memory Card"; - - break; - case CommonTypes.MediaType.PS1CD: - discType = "Compact Disc"; - discSubType = "PlayStation Game Disc"; - - break; - case CommonTypes.MediaType.PS2CD: - discType = "Compact Disc"; - discSubType = "PlayStation 2 Game Disc"; - - break; - case CommonTypes.MediaType.PS2DVD: - discType = "DVD"; - discSubType = "PlayStation 2 Game Disc"; - - break; - case CommonTypes.MediaType.PS3BD: - discType = "Blu-ray"; - discSubType = "PlayStation 3 Game Disc"; - - break; - case CommonTypes.MediaType.PS3DVD: - discType = "DVD"; - discSubType = "PlayStation 3 Game Disc"; - - break; - case CommonTypes.MediaType.PS4BD: - discType = "Blu-ray"; - discSubType = "PlayStation 4 Game Disc"; - - break; - case CommonTypes.MediaType.PS5BD: - discType = "Blu-ray"; - discSubType = "PlayStation 5 Game Disc"; - - break; - case CommonTypes.MediaType.SACD: - discType = "SACD"; - discSubType = "Super Audio CD"; - - break; - case CommonTypes.MediaType.SegaCard: - discType = "Sega Card"; - discSubType = "Sega Card"; - - break; - case CommonTypes.MediaType.SATURNCD: - discType = "Compact Disc"; - discSubType = "Sega Saturn CD"; - - break; - case CommonTypes.MediaType.SVCD: - discType = "Compact Disc"; - discSubType = "Super Video CD"; - - break; - case CommonTypes.MediaType.CVD: - discType = "Compact Disc"; - discSubType = "China Video Disc"; - - break; - case CommonTypes.MediaType.SVOD: - discType = "SVOD"; - discSubType = "SVOD"; - - break; - case CommonTypes.MediaType.UDO: - discType = "UDO"; - discSubType = "UDO"; - - break; - case CommonTypes.MediaType.UMD: - discType = "UMD"; - discSubType = "Universal Media Disc"; - - break; - case CommonTypes.MediaType.VCD: - discType = "Compact Disc"; - discSubType = "Video CD"; - - break; - case CommonTypes.MediaType.Nuon: - discType = "DVD"; - discSubType = "Nuon"; - - break; - case CommonTypes.MediaType.XGD: - discType = "DVD"; - discSubType = "Xbox Game Disc (XGD)"; - - break; - case CommonTypes.MediaType.XGD2: - discType = "DVD"; - discSubType = "Xbox 360 Game Disc (XGD2)"; - - break; - case CommonTypes.MediaType.XGD3: - discType = "DVD"; - discSubType = "Xbox 360 Game Disc (XGD3)"; - - break; - case CommonTypes.MediaType.XGD4: - discType = "Blu-ray"; - discSubType = "Xbox One Game Disc (XGD4)"; - - break; - case CommonTypes.MediaType.FMTOWNS: - discType = "Compact Disc"; - discSubType = "FM-Towns"; - - break; - case CommonTypes.MediaType.Apple32SS: - discType = "5.25\" floppy"; - discSubType = "Apple DOS 3.2"; - - break; - case CommonTypes.MediaType.Apple32DS: - discType = "5.25\" floppy"; - discSubType = "Apple DOS 3.2 (double-sided)"; - - break; - case CommonTypes.MediaType.Apple33SS: - discType = "5.25\" floppy"; - discSubType = "Apple DOS 3.3"; - - break; - case CommonTypes.MediaType.Apple33DS: - discType = "5.25\" floppy"; - discSubType = "Apple DOS 3.3 (double-sided)"; - - break; - case CommonTypes.MediaType.AppleSonySS: - discType = "3.5\" floppy"; - discSubType = "Apple 400K"; - - break; - case CommonTypes.MediaType.AppleSonyDS: - discType = "3.5\" floppy"; - discSubType = "Apple 800K"; - - break; - case CommonTypes.MediaType.AppleFileWare: - discType = "5.25\" floppy"; - discSubType = "Apple FileWare"; - - break; - case CommonTypes.MediaType.RX50: - discType = "5.25\" floppy"; - discSubType = "DEC RX50"; - - break; - case CommonTypes.MediaType.DOS_525_SS_DD_8: - discType = "5.25\" floppy"; - discSubType = "IBM double-density, single-sided, 8 sectors"; - - break; - case CommonTypes.MediaType.DOS_525_SS_DD_9: - discType = "5.25\" floppy"; - discSubType = "IBM double-density, single-sided, 9 sectors"; - - break; - case CommonTypes.MediaType.DOS_525_DS_DD_8: - discType = "5.25\" floppy"; - discSubType = "IBM double-density, double-sided, 8 sectors"; - - break; - case CommonTypes.MediaType.DOS_525_DS_DD_9: - discType = "5.25\" floppy"; - discSubType = "IBM double-density, double-sided, 9 sectors"; - - break; - case CommonTypes.MediaType.DOS_525_HD: - discType = "5.25\" floppy"; - discSubType = "IBM high-density"; - - break; - case CommonTypes.MediaType.DOS_35_SS_DD_8: - discType = "3.5\" floppy"; - discSubType = "IBM double-density, single-sided, 8 sectors"; - - break; - case CommonTypes.MediaType.DOS_35_SS_DD_9: - discType = "3.5\" floppy"; - discSubType = "IBM double-density, single-sided, 9 sectors"; - - break; - case CommonTypes.MediaType.DOS_35_DS_DD_8: - discType = "3.5\" floppy"; - discSubType = "IBM double-density, double-sided, 8 sectors"; - - break; - case CommonTypes.MediaType.DOS_35_DS_DD_9: - discType = "3.5\" floppy"; - discSubType = "IBM double-density, double-sided, 9 sectors"; - - break; - case CommonTypes.MediaType.DOS_35_HD: - discType = "3.5\" floppy"; - discSubType = "IBM high-density"; - - break; - case CommonTypes.MediaType.DOS_35_ED: - discType = "3.5\" floppy"; - discSubType = "IBM extra-density"; - - break; - case CommonTypes.MediaType.Apricot_35: - discType = "3.5\" floppy"; - discSubType = "Apricot double-density, single-sided, 70 tracks"; - - break; - case CommonTypes.MediaType.DMF: - discType = "3.5\" floppy"; - discSubType = "Microsoft DMF"; - - break; - case CommonTypes.MediaType.DMF_82: - discType = "3.5\" floppy"; - discSubType = "Microsoft DMF (82-track)"; - - break; - case CommonTypes.MediaType.XDF_35: - discType = "3.5\" floppy"; - discSubType = "IBM XDF"; - - break; - case CommonTypes.MediaType.XDF_525: - discType = "5.25\" floppy"; - discSubType = "IBM XDF"; - - break; - case CommonTypes.MediaType.IBM23FD: - discType = "8\" floppy"; - discSubType = "IBM 23FD"; - - break; - case CommonTypes.MediaType.IBM33FD_128: - discType = "8\" floppy"; - discSubType = "IBM 33FD (128 bytes/sector)"; - - break; - case CommonTypes.MediaType.IBM33FD_256: - discType = "8\" floppy"; - discSubType = "IBM 33FD (256 bytes/sector)"; - - break; - case CommonTypes.MediaType.IBM33FD_512: - discType = "8\" floppy"; - discSubType = "IBM 33FD (512 bytes/sector)"; - - break; - case CommonTypes.MediaType.IBM43FD_128: - discType = "8\" floppy"; - discSubType = "IBM 43FD (128 bytes/sector)"; - - break; - case CommonTypes.MediaType.IBM43FD_256: - discType = "8\" floppy"; - discSubType = "IBM 43FD (256 bytes/sector)"; - - break; - case CommonTypes.MediaType.IBM53FD_256: - discType = "8\" floppy"; - discSubType = "IBM 53FD (256 bytes/sector)"; - - break; - case CommonTypes.MediaType.IBM53FD_512: - discType = "8\" floppy"; - discSubType = "IBM 53FD (512 bytes/sector)"; - - break; - case CommonTypes.MediaType.IBM53FD_1024: - discType = "8\" floppy"; - discSubType = "IBM 53FD (1024 bytes/sector)"; - - break; - case CommonTypes.MediaType.RX01: - discType = "8\" floppy"; - discSubType = "DEC RX-01"; - - break; - case CommonTypes.MediaType.RX02: - discType = "8\" floppy"; - discSubType = "DEC RX-02"; - - break; - case CommonTypes.MediaType.RX03: - discType = "8\" floppy"; - discSubType = "DEC RX-03"; - - break; - case CommonTypes.MediaType.ACORN_525_SS_SD_40: - discType = "5.25\" floppy"; - discSubType = "BBC Micro 100K"; - - break; - case CommonTypes.MediaType.ACORN_525_SS_SD_80: - discType = "5.25\" floppy"; - discSubType = "BBC Micro 200K"; - - break; - case CommonTypes.MediaType.ACORN_525_SS_DD_40: - discType = "5.25\" floppy"; - discSubType = "Acorn S"; - - break; - case CommonTypes.MediaType.ACORN_525_SS_DD_80: - discType = "5.25\" floppy"; - discSubType = "Acorn M"; - - break; - case CommonTypes.MediaType.ACORN_525_DS_DD: - discType = "5.25\" floppy"; - discSubType = "Acorn L"; - - break; - case CommonTypes.MediaType.ACORN_35_DS_DD: - discType = "3.5\" floppy"; - discSubType = "Acorn Archimedes"; - - break; - case CommonTypes.MediaType.ACORN_35_DS_HD: - discType = "3.5\" floppy"; - discSubType = "Acorn Archimedes high-density"; - - break; - case CommonTypes.MediaType.ATARI_525_SD: - discType = "5.25\" floppy"; - discSubType = "Atari single-density"; - - break; - case CommonTypes.MediaType.ATARI_525_ED: - discType = "5.25\" floppy"; - discSubType = "Atari enhanced-density"; - - break; - case CommonTypes.MediaType.ATARI_525_DD: - discType = "5.25\" floppy"; - discSubType = "Atari double-density"; - - break; - case CommonTypes.MediaType.ATARI_35_SS_DD: - discType = "3.5\" floppy"; - discSubType = "Atari ST double-density, single-sided, 10 sectors"; - - break; - case CommonTypes.MediaType.ATARI_35_DS_DD: - discType = "3.5\" floppy"; - discSubType = "Atari ST double-density, double-sided, 10 sectors"; - - break; - case CommonTypes.MediaType.ATARI_35_SS_DD_11: - discType = "3.5\" floppy"; - discSubType = "Atari ST double-density, single-sided, 11 sectors"; - - break; - case CommonTypes.MediaType.ATARI_35_DS_DD_11: - discType = "3.5\" floppy"; - discSubType = "Atari ST double-density, double-sided, 11 sectors"; - - break; - case CommonTypes.MediaType.CBM_1540: - case CommonTypes.MediaType.CBM_1540_Ext: - discType = "5.25\" floppy"; - discSubType = "Commodore 1540/1541"; - - break; - case CommonTypes.MediaType.CBM_1571: - discType = "5.25\" floppy"; - discSubType = "Commodore 1571"; - - break; - case CommonTypes.MediaType.CBM_35_DD: - discType = "3.5\" floppy"; - discSubType = "Commodore 1581"; - - break; - case CommonTypes.MediaType.CBM_AMIGA_35_DD: - discType = "3.5\" floppy"; - discSubType = "Amiga double-density"; - - break; - case CommonTypes.MediaType.CBM_AMIGA_35_HD: - discType = "3.5\" floppy"; - discSubType = "Amiga high-density"; - - break; - case CommonTypes.MediaType.NEC_8_SD: - discType = "8\" floppy"; - discSubType = "NEC single-sided"; - - break; - case CommonTypes.MediaType.NEC_8_DD: - discType = "8\" floppy"; - discSubType = "NEC double-sided"; - - break; - case CommonTypes.MediaType.NEC_525_SS: - discType = "5.25\" floppy"; - discSubType = "NEC single-sided"; - - break; - case CommonTypes.MediaType.NEC_525_HD: - discType = "5.25\" floppy"; - discSubType = "NEC high-density"; - - break; - case CommonTypes.MediaType.NEC_35_HD_8: - discType = "3.5\" floppy"; - discSubType = "NEC high-density"; - - break; - case CommonTypes.MediaType.NEC_35_HD_15: - discType = "3.5\" floppy"; - discSubType = "NEC high-density"; - - break; - case CommonTypes.MediaType.NEC_35_TD: - discType = "3.5\" floppy"; - discSubType = "NEC triple-density"; - - break; - case CommonTypes.MediaType.SHARP_525_9: - discType = "5.25\" floppy"; - discSubType = "Sharp (9 sectors per track)"; - - break; - case CommonTypes.MediaType.SHARP_35_9: - discType = "3.5\" floppy"; - discSubType = "Sharp (9 sectors per track)"; - - break; - case CommonTypes.MediaType.ECMA_54: - discType = "8\" floppy"; - discSubType = "ECMA-54"; - - break; - case CommonTypes.MediaType.ECMA_59: - discType = "8\" floppy"; - discSubType = "ECMA-59"; - - break; - case CommonTypes.MediaType.ECMA_69_8: - case CommonTypes.MediaType.ECMA_69_15: - case CommonTypes.MediaType.ECMA_69_26: - discType = "8\" floppy"; - discSubType = "ECMA-69"; - - break; - case CommonTypes.MediaType.ECMA_66: - discType = "5.25\" floppy"; - discSubType = "ECMA-66"; - - break; - case CommonTypes.MediaType.ECMA_70: - discType = "5.25\" floppy"; - discSubType = "ECMA-70"; - - break; - case CommonTypes.MediaType.ECMA_78: - case CommonTypes.MediaType.ECMA_78_2: - discType = "5.25\" floppy"; - discSubType = "ECMA-78"; - - break; - case CommonTypes.MediaType.ECMA_99_8: - case CommonTypes.MediaType.ECMA_99_15: - case CommonTypes.MediaType.ECMA_99_26: - discType = "5.25\" floppy"; - discSubType = "ECMA-99"; - - break; - case CommonTypes.MediaType.FDFORMAT_525_DD: - discType = "5.25\" floppy"; - discSubType = "FDFORMAT double-density"; - - break; - case CommonTypes.MediaType.FDFORMAT_525_HD: - discType = "5.25\" floppy"; - discSubType = "FDFORMAT high-density"; - - break; - case CommonTypes.MediaType.FDFORMAT_35_DD: - discType = "3.5\" floppy"; - discSubType = "FDFORMAT double-density"; - - break; - case CommonTypes.MediaType.FDFORMAT_35_HD: - discType = "3.5\" floppy"; - discSubType = "FDFORMAT high-density"; - - break; - case CommonTypes.MediaType.ECMA_260: - case CommonTypes.MediaType.ECMA_260_Double: - discType = "356mm magneto-optical"; - discSubType = "ECMA-260 / ISO 15898"; - - break; - case CommonTypes.MediaType.ECMA_183_512: - case CommonTypes.MediaType.ECMA_183: - discType = "5.25\" magneto-optical"; - discSubType = "ECMA-183"; - - break; - case CommonTypes.MediaType.ISO_10089: - case CommonTypes.MediaType.ISO_10089_512: - discType = "5.25\" magneto-optical"; - discSubType = "ISO 10089"; - - break; - case CommonTypes.MediaType.ECMA_184_512: - case CommonTypes.MediaType.ECMA_184: - discType = "5.25\" magneto-optical"; - discSubType = "ECMA-184"; - - break; - case CommonTypes.MediaType.ECMA_154: - discType = "3.5\" magneto-optical"; - discSubType = "ECMA-154"; - - break; - case CommonTypes.MediaType.ECMA_201: - case CommonTypes.MediaType.ECMA_201_ROM: - discType = "3.5\" magneto-optical"; - discSubType = "ECMA-201"; - - break; - case CommonTypes.MediaType.FlashDrive: - discType = "USB flash drive"; - discSubType = "USB flash drive"; - - break; - case CommonTypes.MediaType.SuperCDROM2: - discType = "Compact Disc"; - discSubType = "Super CD-ROM²"; - - break; - case CommonTypes.MediaType.LDROM2: - discType = "LaserDisc"; - discSubType = "LD-ROM²"; - - break; - case CommonTypes.MediaType.JaguarCD: - discType = "Compact Disc"; - discSubType = "Atari Jaguar CD"; - - break; - case CommonTypes.MediaType.MilCD: - discType = "Compact Disc"; - discSubType = "Sega MilCD"; - - break; - case CommonTypes.MediaType.ThreeDO: - discType = "Compact Disc"; - discSubType = "3DO"; - - break; - case CommonTypes.MediaType.PCFX: - discType = "Compact Disc"; - discSubType = "PC-FX"; - - break; - case CommonTypes.MediaType.NeoGeoCD: - discType = "Compact Disc"; - discSubType = "NEO-GEO CD"; - - break; - case CommonTypes.MediaType.CDTV: - discType = "Compact Disc"; - discSubType = "Commodore CDTV"; - - break; - case CommonTypes.MediaType.CD32: - discType = "Compact Disc"; - discSubType = "Amiga CD32"; - - break; - case CommonTypes.MediaType.Playdia: - discType = "Compact Disc"; - discSubType = "Bandai Playdia"; - - break; - case CommonTypes.MediaType.Pippin: - discType = "Compact Disc"; - discSubType = "Apple Pippin"; - - break; - case CommonTypes.MediaType.ZIP100: - discType = "Iomega ZIP"; - discSubType = "Iomega ZIP100"; - - break; - case CommonTypes.MediaType.ZIP250: - discType = "Iomega ZIP"; - discSubType = "Iomega ZIP250"; - - break; - case CommonTypes.MediaType.ZIP750: - discType = "Iomega ZIP"; - discSubType = "Iomega ZIP750"; - - break; - case CommonTypes.MediaType.AppleProfile: - discType = "Hard Disk Drive"; - discSubType = "Apple Profile"; - - break; - case CommonTypes.MediaType.AppleWidget: - discType = "Hard Disk Drive"; - discSubType = "Apple Widget"; - - break; - case CommonTypes.MediaType.AppleHD20: - discType = "Hard Disk Drive"; - discSubType = "Apple HD20"; - - break; - case CommonTypes.MediaType.PriamDataTower: - discType = "Hard Disk Drive"; - discSubType = "Priam DataTower"; - - break; - case CommonTypes.MediaType.DDS1: - discType = "Digital Data Storage"; - discSubType = "DDS"; - - break; - case CommonTypes.MediaType.DDS2: - discType = "Digital Data Storage"; - discSubType = "DDS-2"; - - break; - case CommonTypes.MediaType.DDS3: - discType = "Digital Data Storage"; - discSubType = "DDS-3"; - - break; - case CommonTypes.MediaType.DDS4: - discType = "Digital Data Storage"; - discSubType = "DDS-4"; - - break; - case CommonTypes.MediaType.PocketZip: - discType = "Iomega PocketZip"; - discSubType = "Iomega PocketZip"; - - break; - case CommonTypes.MediaType.CompactFloppy: - discType = "3\" floppy"; - discSubType = "Compact Floppy"; - - break; - case CommonTypes.MediaType.GENERIC_HDD: - discType = "Hard Disk Drive"; - discSubType = "Unknown"; - - break; - case CommonTypes.MediaType.MDData: - discType = "MiniDisc"; - discSubType = "MD-DATA"; - - break; - case CommonTypes.MediaType.MDData2: - discType = "MiniDisc"; - discSubType = "MD-DATA2"; - - break; - case CommonTypes.MediaType.UDO2: - discType = "UDO"; - discSubType = "UDO2"; - - break; - case CommonTypes.MediaType.UDO2_WORM: - discType = "UDO"; - discSubType = "UDO2 (WORM)"; - - break; - case CommonTypes.MediaType.ADR30: - discType = "Advanced Digital Recording"; - discSubType = "ADR 30"; - - break; - case CommonTypes.MediaType.ADR50: - discType = "Advanced Digital Recording"; - discSubType = "ADR 50"; - - break; - case CommonTypes.MediaType.ADR260: - discType = "Advanced Digital Recording"; - discSubType = "ADR 2.60"; - - break; - case CommonTypes.MediaType.ADR2120: - discType = "Advanced Digital Recording"; - discSubType = "ADR 2.120"; - - break; - case CommonTypes.MediaType.AIT1: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-1"; - - break; - case CommonTypes.MediaType.AIT1Turbo: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-1 Turbo"; - - break; - case CommonTypes.MediaType.AIT2: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-2"; - - break; - case CommonTypes.MediaType.AIT2Turbo: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-2 Turbo"; - - break; - case CommonTypes.MediaType.AIT3: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-3"; - - break; - case CommonTypes.MediaType.AIT3Ex: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-3Ex"; - - break; - case CommonTypes.MediaType.AIT3Turbo: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-3 Turbo"; - - break; - case CommonTypes.MediaType.AIT4: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-4"; - - break; - case CommonTypes.MediaType.AIT5: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-5"; - - break; - case CommonTypes.MediaType.AITETurbo: - discType = "Advanced Intelligent Tape"; - discSubType = "AIT-E Turbo"; - - break; - case CommonTypes.MediaType.SAIT1: - discType = "Super Advanced Intelligent Tape"; - discSubType = "SAIT-1"; - - break; - case CommonTypes.MediaType.SAIT2: - discType = "Super Advanced Intelligent Tape"; - discSubType = "SAIT-2"; - - break; - case CommonTypes.MediaType.Bernoulli: - case CommonTypes.MediaType.Bernoulli10: - discType = "Iomega Bernoulli Box"; - discSubType = "Iomega Bernoulli Box 10Mb"; - - break; - case CommonTypes.MediaType.Bernoulli20: - discType = "Iomega Bernoulli Box"; - discSubType = "Iomega Bernoulli Box 20Mb"; - - break; - case CommonTypes.MediaType.BernoulliBox2_20: - case CommonTypes.MediaType.Bernoulli2: - discType = "Iomega Bernoulli Box II"; - discSubType = "Iomega Bernoulli Box II 20Mb"; - - break; - case CommonTypes.MediaType.Bernoulli35: - discType = "Iomega Bernoulli Box II"; - discSubType = "Iomega Bernoulli Box II 35Mb"; - - break; - case CommonTypes.MediaType.Bernoulli44: - discType = "Iomega Bernoulli Box II"; - discSubType = "Iomega Bernoulli Box II 44Mb"; - - break; - case CommonTypes.MediaType.Bernoulli65: - discType = "Iomega Bernoulli Box II"; - discSubType = "Iomega Bernoulli Box II 65Mb"; - - break; - case CommonTypes.MediaType.Bernoulli90: - discType = "Iomega Bernoulli Box II"; - discSubType = "Iomega Bernoulli Box II 90Mb"; - - break; - case CommonTypes.MediaType.Bernoulli105: - discType = "Iomega Bernoulli Box II"; - discSubType = "Iomega Bernoulli Box II 105Mb"; - - break; - case CommonTypes.MediaType.Bernoulli150: - discType = "Iomega Bernoulli Box II"; - discSubType = "Iomega Bernoulli Box II 150Mb"; - - break; - case CommonTypes.MediaType.Bernoulli230: - discType = "Iomega Bernoulli Box II"; - discSubType = "Iomega Bernoulli Box II 230Mb"; - - break; - case CommonTypes.MediaType.Ditto: - discType = "Iomega Ditto"; - discSubType = "Iomega Ditto"; - - break; - case CommonTypes.MediaType.DittoMax: - discType = "Iomega Ditto"; - discSubType = "Iomega Ditto Max"; - - break; - case CommonTypes.MediaType.Jaz: - discType = "Iomega Jaz"; - discSubType = "Iomega Jaz 1GB"; - - break; - case CommonTypes.MediaType.Jaz2: - discType = "Iomega Jaz"; - discSubType = "Iomega Jaz 2GB"; - - break; - case CommonTypes.MediaType.REV35: - discType = "Iomega REV"; - discSubType = "Iomega REV-35"; - - break; - case CommonTypes.MediaType.REV70: - discType = "Iomega REV"; - discSubType = "Iomega REV-70"; - - break; - case CommonTypes.MediaType.REV120: - discType = "Iomega REV"; - discSubType = "Iomega REV-120"; - - break; - case CommonTypes.MediaType.CompactFlash: - discType = "Compact Flash"; - discSubType = "Compact Flash"; - - break; - case CommonTypes.MediaType.CompactFlashType2: - discType = "Compact Flash"; - discSubType = "Compact Flash Type 2"; - - break; - case CommonTypes.MediaType.CFast: - discType = "Compact Flash"; - discSubType = "CFast"; - - break; - case CommonTypes.MediaType.DigitalAudioTape: - discType = "Digital Audio Tape"; - discSubType = "Digital Audio Tape"; - - break; - case CommonTypes.MediaType.DAT72: - discType = "Digital Data Storage"; - discSubType = "DAT-72"; - - break; - case CommonTypes.MediaType.DAT160: - discType = "Digital Data Storage"; - discSubType = "DAT-160"; - - break; - case CommonTypes.MediaType.DAT320: - discType = "Digital Data Storage"; - discSubType = "DAT-320"; - - break; - case CommonTypes.MediaType.DECtapeII: - discType = "DECtape"; - discSubType = "DECtape II"; - - break; - case CommonTypes.MediaType.CompactTapeI: - discType = "CompacTape"; - discSubType = "CompacTape"; - - break; - case CommonTypes.MediaType.CompactTapeII: - discType = "CompacTape"; - discSubType = "CompacTape II"; - - break; - case CommonTypes.MediaType.DLTtapeIII: - discType = "Digital Linear Tape"; - discSubType = "DLTtape III"; - - break; - case CommonTypes.MediaType.DLTtapeIIIxt: - discType = "Digital Linear Tape"; - discSubType = "DLTtape IIIXT"; - - break; - case CommonTypes.MediaType.DLTtapeIV: - discType = "Digital Linear Tape"; - discSubType = "DLTtape IV"; - - break; - case CommonTypes.MediaType.DLTtapeS4: - discType = "Digital Linear Tape"; - discSubType = "DLTtape S4"; - - break; - case CommonTypes.MediaType.SDLT1: - discType = "Super Digital Linear Tape"; - discSubType = "SDLTtape I"; - - break; - case CommonTypes.MediaType.SDLT2: - discType = "Super Digital Linear Tape"; - discSubType = "SDLTtape II"; - - break; - case CommonTypes.MediaType.VStapeI: - discType = "Digital Linear Tape"; - discSubType = "DLTtape VS1"; - - break; - case CommonTypes.MediaType.Data8: - discType = "Data8"; - discSubType = "Data8"; - - break; - case CommonTypes.MediaType.MiniDV: - discType = "DV tape"; - discSubType = "MiniDV"; - - break; - case CommonTypes.MediaType.Exatape15m: - discType = "Exatape"; - discSubType = "Exatape (15m)"; - - break; - case CommonTypes.MediaType.Exatape22m: - discType = "Exatape"; - discSubType = "Exatape (22m)"; - - break; - case CommonTypes.MediaType.Exatape22mAME: - discType = "Exatape"; - discSubType = "Exatape (22m AME)"; - - break; - case CommonTypes.MediaType.Exatape28m: - discType = "Exatape"; - discSubType = "Exatape (28m)"; - - break; - case CommonTypes.MediaType.Exatape40m: - discType = "Exatape"; - discSubType = "Exatape (40m)"; - - break; - case CommonTypes.MediaType.Exatape45m: - discType = "Exatape"; - discSubType = "Exatape (45m)"; - - break; - case CommonTypes.MediaType.Exatape54m: - discType = "Exatape"; - discSubType = "Exatape (54m)"; - - break; - case CommonTypes.MediaType.Exatape75m: - discType = "Exatape"; - discSubType = "Exatape (75m)"; - - break; - case CommonTypes.MediaType.Exatape76m: - discType = "Exatape"; - discSubType = "Exatape (76m)"; - - break; - case CommonTypes.MediaType.Exatape80m: - discType = "Exatape"; - discSubType = "Exatape (80m)"; - - break; - case CommonTypes.MediaType.Exatape106m: - discType = "Exatape"; - discSubType = "Exatape (106m)"; - - break; - case CommonTypes.MediaType.Exatape112m: - discType = "Exatape"; - discSubType = "Exatape (112m)"; - - break; - case CommonTypes.MediaType.Exatape125m: - discType = "Exatape"; - discSubType = "Exatape (125m)"; - - break; - case CommonTypes.MediaType.Exatape150m: - discType = "Exatape"; - discSubType = "Exatape (150m)"; - - break; - case CommonTypes.MediaType.Exatape160mXL: - discType = "Exatape"; - discSubType = "Exatape XL (160m)"; - - break; - case CommonTypes.MediaType.Exatape170m: - discType = "Exatape"; - discSubType = "Exatape (170m)"; - - break; - case CommonTypes.MediaType.Exatape225m: - discType = "Exatape"; - discSubType = "Exatape (225m)"; - - break; - case CommonTypes.MediaType.EZ135: - discType = "3.5\" SyQuest cartridge"; - discSubType = "EZ135"; - - break; - case CommonTypes.MediaType.EZ230: - discType = "3.5\" SyQuest cartridge"; - discSubType = "EZ230"; - - break; - case CommonTypes.MediaType.Quest: - discType = "3.5\" SyQuest cartridge"; - discSubType = "Quest"; - - break; - case CommonTypes.MediaType.SparQ: - discType = "3.5\" SyQuest cartridge"; - discSubType = "SparQ"; - - break; - case CommonTypes.MediaType.SQ100: - discType = "3.9\" SyQuest cartridge"; - discSubType = "SQ100"; - - break; - case CommonTypes.MediaType.SQ200: - discType = "3.9\" SyQuest cartridge"; - discSubType = "SQ200"; - - break; - case CommonTypes.MediaType.SQ300: - discType = "3.9\" SyQuest cartridge"; - discSubType = "SQ300"; - - break; - case CommonTypes.MediaType.SQ310: - discType = "3.5\" SyQuest cartridge"; - discSubType = "SQ310"; - - break; - case CommonTypes.MediaType.SQ327: - discType = "3.5\" SyQuest cartridge"; - discSubType = "SQ327"; - - break; - case CommonTypes.MediaType.SQ400: - discType = "5.25\" SyQuest cartridge"; - discSubType = "SQ400"; - - break; - case CommonTypes.MediaType.SQ800: - discType = "5.25\" SyQuest cartridge"; - discSubType = "SQ800"; - - break; - case CommonTypes.MediaType.SQ1500: - discType = "3.5\" SyQuest cartridge"; - discSubType = "SQ1500"; - - break; - case CommonTypes.MediaType.SQ2000: - discType = "5.25\" SyQuest cartridge"; - discSubType = "SQ2000"; - - break; - case CommonTypes.MediaType.SyJet: - discType = "3.5\" SyQuest cartridge"; - discSubType = "SyJet"; - - break; - case CommonTypes.MediaType.LTO: - discType = "Linear Tape-Open"; - discSubType = "LTO"; - - break; - case CommonTypes.MediaType.LTO2: - discType = "Linear Tape-Open"; - discSubType = "LTO-2"; - - break; - case CommonTypes.MediaType.LTO3: - discType = "Linear Tape-Open"; - discSubType = "LTO-3"; - - break; - case CommonTypes.MediaType.LTO3WORM: - discType = "Linear Tape-Open"; - discSubType = "LTO-3 (WORM)"; - - break; - case CommonTypes.MediaType.LTO4: - discType = "Linear Tape-Open"; - discSubType = "LTO-4"; - - break; - case CommonTypes.MediaType.LTO4WORM: - discType = "Linear Tape-Open"; - discSubType = "LTO-4 (WORM)"; - - break; - case CommonTypes.MediaType.LTO5: - discType = "Linear Tape-Open"; - discSubType = "LTO-5"; - - break; - case CommonTypes.MediaType.LTO5WORM: - discType = "Linear Tape-Open"; - discSubType = "LTO-5 (WORM)"; - - break; - case CommonTypes.MediaType.LTO6: - discType = "Linear Tape-Open"; - discSubType = "LTO-6"; - - break; - case CommonTypes.MediaType.LTO6WORM: - discType = "Linear Tape-Open"; - discSubType = "LTO-6 (WORM)"; - - break; - case CommonTypes.MediaType.LTO7: - discType = "Linear Tape-Open"; - discSubType = "LTO-7"; - - break; - case CommonTypes.MediaType.LTO7WORM: - discType = "Linear Tape-Open"; - discSubType = "LTO-7 (WORM)"; - - break; - case CommonTypes.MediaType.MemoryStick: - discType = "Memory Stick"; - discSubType = "Memory Stick"; - - break; - case CommonTypes.MediaType.MemoryStickDuo: - discType = "Memory Stick"; - discSubType = "Memory Stick Duo"; - - break; - case CommonTypes.MediaType.MemoryStickMicro: - discType = "Memory Stick"; - discSubType = "Memory Stick Micro"; - - break; - case CommonTypes.MediaType.MemoryStickPro: - discType = "Memory Stick"; - discSubType = "Memory Stick Pro"; - - break; - case CommonTypes.MediaType.MemoryStickProDuo: - discType = "Memory Stick"; - discSubType = "Memory Stick PRO Duo"; - - break; - case CommonTypes.MediaType.SecureDigital: - discType = "Secure Digital"; - discSubType = "Secure Digital"; - - break; - case CommonTypes.MediaType.miniSD: - discType = "Secure Digital"; - discSubType = "miniSD"; - - break; - case CommonTypes.MediaType.microSD: - discType = "Secure Digital"; - discSubType = "microSD"; - - break; - case CommonTypes.MediaType.MMC: - discType = "MultiMediaCard"; - discSubType = "MultiMediaCard"; - - break; - case CommonTypes.MediaType.MMCmicro: - discType = "MultiMediaCard"; - discSubType = "MMCmicro"; - - break; - case CommonTypes.MediaType.RSMMC: - discType = "MultiMediaCard"; - discSubType = "Reduced-Size MultiMediaCard"; - - break; - case CommonTypes.MediaType.MMCplus: - discType = "MultiMediaCard"; - discSubType = "MMCplus"; - - break; - case CommonTypes.MediaType.MMCmobile: - discType = "MultiMediaCard"; - discSubType = "MMCmobile"; - - break; - case CommonTypes.MediaType.MLR1: - discType = "Scalable Linear Recording"; - discSubType = "MLR1"; - - break; - case CommonTypes.MediaType.MLR1SL: - discType = "Scalable Linear Recording"; - discSubType = "MLR1 SL"; - - break; - case CommonTypes.MediaType.MLR3: - discType = "Scalable Linear Recording"; - discSubType = "MLR3"; - - break; - case CommonTypes.MediaType.SLR1: - discType = "Scalable Linear Recording"; - discSubType = "SLR1"; - - break; - case CommonTypes.MediaType.SLR2: - discType = "Scalable Linear Recording"; - discSubType = "SLR2"; - - break; - case CommonTypes.MediaType.SLR3: - discType = "Scalable Linear Recording"; - discSubType = "SLR3"; - - break; - case CommonTypes.MediaType.SLR32: - discType = "Scalable Linear Recording"; - discSubType = "SLR32"; - - break; - case CommonTypes.MediaType.SLR32SL: - discType = "Scalable Linear Recording"; - discSubType = "SLR32 SL"; - - break; - case CommonTypes.MediaType.SLR4: - discType = "Scalable Linear Recording"; - discSubType = "SLR4"; - - break; - case CommonTypes.MediaType.SLR5: - discType = "Scalable Linear Recording"; - discSubType = "SLR5"; - - break; - case CommonTypes.MediaType.SLR5SL: - discType = "Scalable Linear Recording"; - discSubType = "SLR5 SL"; - - break; - case CommonTypes.MediaType.SLR6: - discType = "Scalable Linear Recording"; - discSubType = "SLR6"; - - break; - case CommonTypes.MediaType.SLRtape7: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape7"; - - break; - case CommonTypes.MediaType.SLRtape7SL: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape7 SL"; - - break; - case CommonTypes.MediaType.SLRtape24: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape24"; - - break; - case CommonTypes.MediaType.SLRtape24SL: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape24 SL"; - - break; - case CommonTypes.MediaType.SLRtape40: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape40"; - - break; - case CommonTypes.MediaType.SLRtape50: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape50"; - - break; - case CommonTypes.MediaType.SLRtape60: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape60"; - - break; - case CommonTypes.MediaType.SLRtape75: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape75"; - - break; - case CommonTypes.MediaType.SLRtape100: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape100"; - - break; - case CommonTypes.MediaType.SLRtape140: - discType = "Scalable Linear Recording"; - discSubType = "SLRtape140"; - - break; - case CommonTypes.MediaType.QIC11: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-11"; - - break; - case CommonTypes.MediaType.QIC24: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-24"; - - break; - case CommonTypes.MediaType.QIC40: - discType = "Quarter-inch mini cartridge"; - discSubType = "QIC-40"; - - break; - case CommonTypes.MediaType.QIC80: - discType = "Quarter-inch mini cartridge"; - discSubType = "QIC-80"; - - break; - case CommonTypes.MediaType.QIC120: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-120"; - - break; - case CommonTypes.MediaType.QIC150: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-150"; - - break; - case CommonTypes.MediaType.QIC320: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-320"; - - break; - case CommonTypes.MediaType.QIC525: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-525"; - - break; - case CommonTypes.MediaType.QIC1350: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-1350"; - - break; - case CommonTypes.MediaType.QIC3010: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-3010"; - - break; - case CommonTypes.MediaType.QIC3020: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-3020"; - - break; - case CommonTypes.MediaType.QIC3080: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-3080"; - - break; - case CommonTypes.MediaType.QIC3095: - discType = "Quarter-inch cartridge"; - discSubType = "QIC-3095"; - - break; - case CommonTypes.MediaType.Travan: - discType = "Travan"; - discSubType = "TR-1"; - - break; - case CommonTypes.MediaType.Travan1Ex: - discType = "Travan"; - discSubType = "TR-1 Ex"; - - break; - case CommonTypes.MediaType.Travan3: - discType = "Travan"; - discSubType = "TR-3"; - - break; - case CommonTypes.MediaType.Travan3Ex: - discType = "Travan"; - discSubType = "TR-3 Ex"; - - break; - case CommonTypes.MediaType.Travan4: - discType = "Travan"; - discSubType = "TR-4"; - - break; - case CommonTypes.MediaType.Travan5: - discType = "Travan"; - discSubType = "TR-5"; - - break; - case CommonTypes.MediaType.Travan7: - discType = "Travan"; - discSubType = "TR-7"; - - break; - case CommonTypes.MediaType.VXA1: - discType = "VXA"; - discSubType = "VXA-1"; - - break; - case CommonTypes.MediaType.VXA2: - discType = "VXA"; - discSubType = "VXA-2"; - - break; - case CommonTypes.MediaType.VXA3: - discType = "VXA"; - discSubType = "VXA-3"; - - break; - case CommonTypes.MediaType.ECMA_153: - case CommonTypes.MediaType.ECMA_153_512: - discType = "5.25\" magneto-optical"; - discSubType = "ECMA-153"; - - break; - case CommonTypes.MediaType.ECMA_189: - discType = "300mm magneto optical"; - discSubType = "ECMA-189"; - - break; - case CommonTypes.MediaType.ECMA_190: - discType = "300mm magneto optical"; - discSubType = "ECMA-190"; - - break; - case CommonTypes.MediaType.ECMA_195: - case CommonTypes.MediaType.ECMA_195_512: - discType = "5.25\" magneto-optical"; - discSubType = "ECMA-195"; - - break; - case CommonTypes.MediaType.ECMA_223: - case CommonTypes.MediaType.ECMA_223_512: - discType = "3.5\" magneto-optical"; - discSubType = "ECMA-223"; - - break; - case CommonTypes.MediaType.ECMA_238: - discType = "5.25\" magneto-optical"; - discSubType = "ECMA-238"; - - break; - case CommonTypes.MediaType.ECMA_239: - discType = "3.5\" magneto-optical"; - discSubType = "ECMA-239"; - - break; - case CommonTypes.MediaType.ECMA_280: - discType = "5.25\" magneto-optical"; - discSubType = "ECMA-280"; - - break; - case CommonTypes.MediaType.ECMA_317: - discType = "300mm magneto optical"; - discSubType = "ECMA-317"; - - break; - case CommonTypes.MediaType.ECMA_322: - case CommonTypes.MediaType.ECMA_322_512: - case CommonTypes.MediaType.ECMA_322_1k: - case CommonTypes.MediaType.ECMA_322_2k: - discType = "5.25\" magneto-optical"; - discSubType = "ECMA-322 / ISO 22092"; - - break; - case CommonTypes.MediaType.ISO_15286: - case CommonTypes.MediaType.ISO_15286_1024: - case CommonTypes.MediaType.ISO_15286_512: - discType = "5.25\" magneto-optical"; - discSubType = "ISO-15286"; - - break; - case CommonTypes.MediaType.ISO_14517: - case CommonTypes.MediaType.ISO_14517_512: - discType = "5.25\" magneto-optical"; - discSubType = "ISO-14517"; - - break; - case CommonTypes.MediaType.GigaMo: - discType = "3.5\" magneto-optical"; - discSubType = "GIGAMO"; - - break; - case CommonTypes.MediaType.GigaMo2: - discType = "3.5\" magneto-optical"; - discSubType = "2.3GB GIGAMO"; - - break; - case CommonTypes.MediaType.UnknownMO: - discType = "Magneto-optical"; - discSubType = "Unknown"; - - break; - case CommonTypes.MediaType.Floptical: - discType = "Floptical"; - discSubType = "Floptical"; - - break; - case CommonTypes.MediaType.HiFD: - discType = "HiFD"; - discSubType = "HiFD"; - - break; - case CommonTypes.MediaType.LS120: - discType = "SuperDisk"; - discSubType = "LS-120"; - - break; - case CommonTypes.MediaType.LS240: - discType = "SuperDisk"; - discSubType = "LS-240"; - - break; - case CommonTypes.MediaType.FD32MB: - discType = "3.5\" floppy"; - discSubType = "FD32MB"; - - break; - case CommonTypes.MediaType.UHD144: - discType = "UHD144"; - discSubType = "UHD144"; - - break; - case CommonTypes.MediaType.VCDHD: - discType = "VCDHD"; - discSubType = "VCDHD"; - - break; - case CommonTypes.MediaType.HuCard: - discType = "HuCard"; - discSubType = "HuCard"; - - break; - case CommonTypes.MediaType.CompactCassette: - discType = "Compact Cassette"; - discSubType = "Compact Cassette"; - - break; - case CommonTypes.MediaType.Dcas25: - discType = "Compact Cassette"; - discSubType = "D/CAS-25"; - - break; - case CommonTypes.MediaType.Dcas85: - discType = "Compact Cassette"; - discSubType = "D/CAS-85"; - - break; - case CommonTypes.MediaType.Dcas103: - discType = "Compact Cassette"; - discSubType = "D/CAS-103"; - - break; - case CommonTypes.MediaType.PCCardTypeI: - discType = "PCMCIA Card"; - discSubType = "PC-Card Type I"; - - break; - case CommonTypes.MediaType.PCCardTypeII: - discType = "PCMCIA Card"; - discSubType = "PC-Card Type II"; - - break; - case CommonTypes.MediaType.PCCardTypeIII: - discType = "PCMCIA Card"; - discSubType = "PC-Card Type III"; - - break; - case CommonTypes.MediaType.PCCardTypeIV: - discType = "PCMCIA Card"; - discSubType = "PC-Card Type IV"; - - break; - case CommonTypes.MediaType.ExpressCard34: - discType = "Express Card"; - discSubType = "Express Card (34mm)"; - - break; - case CommonTypes.MediaType.ExpressCard54: - discType = "Express Card"; - discSubType = "Express Card (54mm)"; - - break; - case CommonTypes.MediaType.FamicomGamePak: - discType = "Nintendo Famicom Game Pak"; - discSubType = "Nintendo Famicom Game Pak"; - - break; - case CommonTypes.MediaType.GameBoyAdvanceGamePak: - discType = "Nintendo Game Boy Advance Game Pak"; - discSubType = "Nintendo Game Boy Advance Game Pak"; - - break; - case CommonTypes.MediaType.GameBoyGamePak: - discType = "Nintendo Game Boy Game Pak"; - discSubType = "Nintendo Game Boy Game Pak"; - - break; - case CommonTypes.MediaType.N64DD: - discType = "Nintendo 64 Disk"; - discSubType = "Nintendo 64 Disk"; - - break; - case CommonTypes.MediaType.N64GamePak: - discType = "Nintendo 64 Game Pak"; - discSubType = "Nintendo 64 Game Pak"; - - break; - case CommonTypes.MediaType.NESGamePak: - discType = "Nintendo Entertainment System Game Pak"; - discSubType = "Nintendo Entertainment System Game Pak"; - - break; - case CommonTypes.MediaType.Nintendo3DSGameCard: - discType = "Nintendo 3DS Game Card"; - discSubType = "Nintendo 3DS Game Card"; - - break; - case CommonTypes.MediaType.NintendoDiskCard: - discType = "Nintendo Disk Card"; - discSubType = "Nintendo Disk Card"; - - break; - case CommonTypes.MediaType.NintendoDSGameCard: - discType = "Nintendo DS Game Card"; - discSubType = "Nintendo DS Game Card"; - - break; - case CommonTypes.MediaType.NintendoDSiGameCard: - discType = "Nintendo DSi Game Card"; - discSubType = "Nintendo DSi Game Card"; - - break; - case CommonTypes.MediaType.SNESGamePak: - discType = "Super Nintendo Game Pak"; - discSubType = "Super Nintendo Game Pak"; - - break; - case CommonTypes.MediaType.SNESGamePakUS: - discType = "Super Nintendo Game Pak (US)"; - discSubType = "Super Nintendo Game Pak (US)"; - - break; - case CommonTypes.MediaType.SwitchGameCard: - discType = "Nintendo Switch Game Card"; - discSubType = "Nintendo Switch Game Card"; - - break; - case CommonTypes.MediaType.IBM3470: - discType = "IBM 3470"; - discSubType = "IBM 3470"; - - break; - case CommonTypes.MediaType.IBM3480: - discType = "IBM 3480"; - discSubType = "IBM 3480"; - - break; - case CommonTypes.MediaType.IBM3490: - discType = "IBM 3490"; - discSubType = "IBM 3490"; - - break; - case CommonTypes.MediaType.IBM3490E: - discType = "IBM 3490E"; - discSubType = "IBM 3490E"; - - break; - case CommonTypes.MediaType.IBM3592: - discType = "IBM 3592"; - discSubType = "IBM 3592"; - - break; - case CommonTypes.MediaType.STK4480: - discType = "STK 4480"; - discSubType = "STK 4480"; - - break; - case CommonTypes.MediaType.STK4490: - discType = "STK 4490"; - discSubType = "STK 4490"; - - break; - case CommonTypes.MediaType.STK9490: - discType = "STK 9490"; - discSubType = "STK 9490"; - - break; - case CommonTypes.MediaType.T9840A: - discType = "STK T-9840"; - discSubType = "STK T-9840A"; - - break; - case CommonTypes.MediaType.T9840B: - discType = "STK T-9840"; - discSubType = "STK T-9840B"; - - break; - case CommonTypes.MediaType.T9840C: - discType = "STK T-9840"; - discSubType = "STK T-9840C"; - - break; - case CommonTypes.MediaType.T9840D: - discType = "STK T-9840"; - discSubType = "STK T-9840D"; - - break; - case CommonTypes.MediaType.T9940A: - discType = "STK T-9940"; - discSubType = "STK T-9940A"; - - break; - case CommonTypes.MediaType.T9940B: - discType = "STK T-9840"; - discSubType = "STK T-9840B"; - - break; - case CommonTypes.MediaType.T10000A: - discType = "STK T-10000"; - discSubType = "STK T-10000A"; - - break; - case CommonTypes.MediaType.T10000B: - discType = "STK T-10000"; - discSubType = "STK T-10000B"; - - break; - case CommonTypes.MediaType.T10000C: - discType = "STK T-10000"; - discSubType = "STK T-10000C"; - - break; - case CommonTypes.MediaType.T10000D: - discType = "STK T-10000"; - discSubType = "STK T-10000D"; - - break; - case CommonTypes.MediaType.DemiDiskette: - discType = "DemiDiskette"; - discSubType = "DemiDiskette"; - - break; - case CommonTypes.MediaType.QuickDisk: - discType = "QuickDisk"; - discSubType = "QuickDisk"; - - break; - case CommonTypes.MediaType.VideoFloppy: - discType = "VideoFloppy"; - discSubType = "VideoFloppy"; - - break; - case CommonTypes.MediaType.Wafer: - discType = "Wafer"; - discSubType = "Wafer"; - - break; - case CommonTypes.MediaType.ZXMicrodrive: - discType = "ZX Microdrive"; - discSubType = "ZX Microdrive"; - - break; - case CommonTypes.MediaType.BeeCard: - discType = "BeeCard"; - discSubType = "BeeCard"; - - break; - case CommonTypes.MediaType.Borsu: - discType = "Borsu"; - discSubType = "Borsu"; - - break; - case CommonTypes.MediaType.DataStore: - discType = "DataStore"; - discSubType = "DataStore"; - - break; - case CommonTypes.MediaType.DIR: - discType = "DIR"; - discSubType = "DIR"; - - break; - case CommonTypes.MediaType.DST: - discType = "DST"; - discSubType = "DST"; - - break; - case CommonTypes.MediaType.DTF: - discType = "DTF"; - discSubType = "DTF"; - - break; - case CommonTypes.MediaType.DTF2: - discType = "DTF2"; - discSubType = "DTF2"; - - break; - case CommonTypes.MediaType.Flextra3020: - discType = "Flextra"; - discSubType = "Flextra 3020"; - - break; - case CommonTypes.MediaType.Flextra3225: - discType = "Flextra"; - discSubType = "Flextra 3225"; - - break; - case CommonTypes.MediaType.HiTC1: - discType = "HiTC"; - discSubType = "HiTC1"; - - break; - case CommonTypes.MediaType.HiTC2: - discType = "HiTC"; - discSubType = "HiTC2"; - - break; - case CommonTypes.MediaType.LT1: - discType = "LT1"; - discSubType = "LT1"; - - break; - case CommonTypes.MediaType.MiniCard: - discType = "MiniCard"; - discSubType = "MiniCard"; - - break; - case CommonTypes.MediaType.Orb: - discType = "Orb"; - discSubType = "Orb"; - - break; - case CommonTypes.MediaType.Orb5: - discType = "Orb"; - discSubType = "Orb5"; - - break; - case CommonTypes.MediaType.SmartMedia: - discType = "SmartMedia"; - discSubType = "SmartMedia"; - - break; - case CommonTypes.MediaType.xD: - discType = "xD"; - discSubType = "xD"; - - break; - case CommonTypes.MediaType.XQD: - discType = "XQD"; - discSubType = "XQD"; - - break; - case CommonTypes.MediaType.DataPlay: - discType = "DataPlay"; - discSubType = "DataPlay"; - - break; - case CommonTypes.MediaType.PD650: - discType = "PD650"; - discSubType = "PD650"; - - break; - case CommonTypes.MediaType.PD650_WORM: - discType = "PD650"; - discSubType = "PD650 (WORM)"; - - break; - case CommonTypes.MediaType.RA60: - discType = "Hard Disk Drive"; - discSubType = "DEC RA-60"; - - break; - case CommonTypes.MediaType.RA80: - discType = "Hard Disk Drive"; - discSubType = "DEC RA-80"; - - break; - case CommonTypes.MediaType.RA81: - discType = "Hard Disk Drive"; - discSubType = "DEC RA-81"; - - break; - case CommonTypes.MediaType.RC25: - discType = "Hard Disk Drive"; - discSubType = "DEC RC-25"; - - break; - case CommonTypes.MediaType.RD31: - discType = "Hard Disk Drive"; - discSubType = "DEC RD-31"; - - break; - case CommonTypes.MediaType.RD32: - discType = "Hard Disk Drive"; - discSubType = "DEC RD-32"; - - break; - case CommonTypes.MediaType.RD51: - discType = "Hard Disk Drive"; - discSubType = "DEC RD-51"; - - break; - case CommonTypes.MediaType.RD52: - discType = "Hard Disk Drive"; - discSubType = "DEC RD-52"; - - break; - case CommonTypes.MediaType.RD53: - discType = "Hard Disk Drive"; - discSubType = "DEC RD-53"; - - break; - case CommonTypes.MediaType.RD54: - discType = "Hard Disk Drive"; - discSubType = "DEC RD-54"; - - break; - case CommonTypes.MediaType.RK06: - case CommonTypes.MediaType.RK06_18: - discType = "Hard Disk Drive"; - discSubType = "DEC RK-06"; - - break; - case CommonTypes.MediaType.RK07: - case CommonTypes.MediaType.RK07_18: - discType = "Hard Disk Drive"; - discSubType = "DEC RK-07"; - - break; - case CommonTypes.MediaType.RM02: - discType = "Hard Disk Drive"; - discSubType = "DEC RM-02"; - - break; - case CommonTypes.MediaType.RM03: - discType = "Hard Disk Drive"; - discSubType = "DEC RM-03"; - - break; - case CommonTypes.MediaType.RM05: - discType = "Hard Disk Drive"; - discSubType = "DEC RM-05"; - - break; - case CommonTypes.MediaType.RP02: - case CommonTypes.MediaType.RP02_18: - discType = "Hard Disk Drive"; - discSubType = "DEC RP-02"; - - break; - case CommonTypes.MediaType.RP03: - case CommonTypes.MediaType.RP03_18: - discType = "Hard Disk Drive"; - discSubType = "DEC RP-03"; - - break; - case CommonTypes.MediaType.RP04: - case CommonTypes.MediaType.RP04_18: - discType = "Hard Disk Drive"; - discSubType = "DEC RP-04"; - - break; - case CommonTypes.MediaType.RP05: - case CommonTypes.MediaType.RP05_18: - discType = "Hard Disk Drive"; - discSubType = "DEC RP-05"; - - break; - case CommonTypes.MediaType.RP06: - case CommonTypes.MediaType.RP06_18: - discType = "Hard Disk Drive"; - discSubType = "DEC RP-06"; - - break; - case CommonTypes.MediaType.RDX: - discType = "RDX"; - discSubType = "RDX"; - - break; - case CommonTypes.MediaType.RDX320: - discType = "RDX"; - discSubType = "RDX 320"; - - break; - case CommonTypes.MediaType.Zone_HDD: - discType = "Zoned Hard Disk Drive"; - discSubType = "Unknown"; - - break; - case CommonTypes.MediaType.Microdrive: - discType = "Hard Disk Drive"; - discSubType = "Microdrive"; - - break; - case CommonTypes.MediaType.VideoNow: - discType = "VideoNow"; - discSubType = "VideoNow"; - - break; - case CommonTypes.MediaType.VideoNowColor: - discType = "VideoNow"; - discSubType = "VideoNow Color"; - - break; - case CommonTypes.MediaType.VideoNowXp: - discType = "VideoNow"; - discSubType = "VideoNow XP"; - - break; - case CommonTypes.MediaType.KodakVerbatim3: - discType = "Kodak Verbatim"; - discSubType = "Kodak Verbatim (3 Mb)"; - - break; - case CommonTypes.MediaType.KodakVerbatim6: - discType = "Kodak Verbatim"; - discSubType = "Kodak Verbatim (6 Mb)"; - - break; - case CommonTypes.MediaType.KodakVerbatim12: - discType = "Kodak Verbatim"; - discSubType = "Kodak Verbatim (12 Mb)"; - - break; - case CommonTypes.MediaType.ProfessionalDisc: - discType = "Sony Professional Disc"; - discSubType = "Sony Professional Disc (single layer)"; - - break; - case CommonTypes.MediaType.ProfessionalDiscDual: - discType = "Sony Professional Disc"; - discSubType = "Sony Professional Disc (double layer)"; - - break; - case CommonTypes.MediaType.ProfessionalDiscTriple: - discType = "Sony Professional Disc"; - discSubType = "Sony Professional Disc (triple layer)"; - - break; - case CommonTypes.MediaType.ProfessionalDiscQuad: - discType = "Sony Professional Disc"; - discSubType = "Sony Professional Disc (quad layer)"; - - break; - case CommonTypes.MediaType.PDD: - discType = "Sony Professional Disc for DATA"; - discSubType = "Sony Professional Disc for DATA"; - - break; - case CommonTypes.MediaType.PDD_WORM: - discType = "Sony Professional Disc for DATA"; - discSubType = "Sony Professional Disc for DATA (write-once)"; - - break; - case CommonTypes.MediaType.ArchivalDisc: - discType = "Archival Disc"; - discSubType = "Archival Disc"; - - break; - case CommonTypes.MediaType.ArchivalDisc2: - discType = "Archival Disc"; - discSubType = "Archival Disc (2nd generation)"; - - break; - case CommonTypes.MediaType.ArchivalDisc3: - discType = "Archival Disc"; - discSubType = "Archival Disc (3rd generation)"; - - break; - case CommonTypes.MediaType.ODC300R: - discType = "Optical Disc Archive"; - discSubType = "ODC300R"; - - break; - case CommonTypes.MediaType.ODC300RE: - discType = "Optical Disc Archive"; - discSubType = "ODC300RE"; - - break; - case CommonTypes.MediaType.ODC600R: - discType = "Optical Disc Archive"; - discSubType = "ODC600R"; - - break; - case CommonTypes.MediaType.ODC600RE: - discType = "Optical Disc Archive"; - discSubType = "ODC600RE"; - - break; - case CommonTypes.MediaType.ODC1200RE: - discType = "Optical Disc Archive"; - discSubType = "ODC1200RE"; - - break; - case CommonTypes.MediaType.ODC1500R: - discType = "Optical Disc Archive"; - discSubType = "ODC1500R"; - - break; - case CommonTypes.MediaType.ODC3300R: - discType = "Optical Disc Archive"; - discSubType = "ODC3300R"; - - break; - case CommonTypes.MediaType.ODC5500R: - discType = "Optical Disc Archive"; - discSubType = "ODC5500R"; - - break; - default: - discType = "Unknown"; - discSubType = "Unknown"; - - break; - } - - return (discType, discSubType); - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Metadata/Resume.cs b/Aaru.CommonTypes/Metadata/Resume.cs deleted file mode 100644 index 6daab87..0000000 --- a/Aaru.CommonTypes/Metadata/Resume.cs +++ /dev/null @@ -1,80 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Resume.cs -// Author(s) : Natalia Portillo -// -// Component : XML metadata. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines XML format of a dump resume file. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Xml.Serialization; -using Schemas; - -namespace Aaru.CommonTypes.Metadata -{ - /// Information that allows to resume a dump - [Serializable, XmlRoot("DicResume", Namespace = "", IsNullable = false)] - public class Resume - { - /// List of blocks that returned an error on reading - [XmlArrayItem("Block")] - public List BadBlocks; - /// Date/time this resume file was created - [XmlElement(DataType = "dateTime")] - public DateTime CreationDate; - /// Last block on media - public ulong LastBlock; - /// Date/time this resume file was last written to - [XmlElement(DataType = "dateTime")] - public DateTime LastWriteDate; - /// Next block to read - public ulong NextBlock; - /// Is media removable? - public bool Removable; - /// Is media a tape? - public bool Tape; - /// List of CD subchannels that did not read correctly - [XmlArrayItem("Block")] - public List BadSubchannels; - /// Extents of BLANK sectors for magneto-opticals - [XmlArrayItem("Extent")] - public ExtentType[] BlankExtents; - /// Title keys that has not been read - [XmlArrayItem("Block")] - public List MissingTitleKeys; - /// List of dump tries - [XmlArrayItem("DumpTry")] - public List Tries; - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Metadata/Statistics.cs b/Aaru.CommonTypes/Metadata/Statistics.cs deleted file mode 100644 index cb49920..0000000 --- a/Aaru.CommonTypes/Metadata/Statistics.cs +++ /dev/null @@ -1,309 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Statistics.cs -// Author(s) : Natalia Portillo -// -// Component : XML metadata. -// -// --[ Description ] ---------------------------------------------------------- -// -// Define XML for statistics. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Xml.Serialization; - -// ReSharper disable ClassNeverInstantiated.Global -// ReSharper disable UnusedMember.Global - -namespace Aaru.CommonTypes.Metadata -{ - /// Statistics - [XmlRoot("DicStats", Namespace = "", IsNullable = false)] - public class Stats - { - /// Executed commands - public CommandsStats Commands; - /// Operating systems Aaru has run from - [XmlArrayItem("OperatingSystem")] - public List OperatingSystems { get; set; } - /// Aaru versions - [XmlArrayItem("Version")] - public List Versions { get; set; } - /// Detected filesystems - [XmlArrayItem("Filesystem")] - public List Filesystems { get; set; } - /// Detected partitioning schemes - [XmlArrayItem("Scheme")] - public List Partitions { get; set; } - /// Media image formats - [XmlArrayItem("Format")] - public List MediaImages { get; set; } - /// Used filters - [XmlArrayItem("Filter", IsNullable = true)] - public List Filters { get; set; } - /// Found devices - [XmlArrayItem("Device", IsNullable = true)] - public List Devices { get; set; } - /// Found media types, real, and in image - [XmlArrayItem("Media")] - public List Medias { get; set; } - /// Benchmark statistics - public BenchmarkStats Benchmark { get; set; } - /// Media scanning statistics - public MediaScanStats MediaScan { get; set; } - /// Image verification statistics - public VerifyStats Verify { get; set; } - } - - /// DTO for statistics - [SuppressMessage("ReSharper", "CollectionNeverQueried.Global")] - public class StatsDto - { - /// Executed commands - public List Commands { get; set; } - /// Operating systems Aaru has run from - public List OperatingSystems { get; set; } - /// Aaru versions - public List Versions { get; set; } - /// Detected filesystems - public List Filesystems { get; set; } - /// Detected partitioning schemes - public List Partitions { get; set; } - /// Media image formats - public List MediaFormats { get; set; } - /// Used filters - public List Filters { get; set; } - /// Found devices - public List Devices { get; set; } - /// Found media types, real, and in image - public List Medias { get; set; } - /// Remote applications - public List RemoteApplications { get; set; } - /// Remote application architectures - public List RemoteArchitectures { get; set; } - /// Operating systems where a remote application has been running - public List RemoteOperatingSystems { get; set; } - } - - /// Command execution statistics - [SuppressMessage("ReSharper", "UnassignedField.Global")] - public class CommandsStats - { - /// Number of times the filesystem info command has been used - public long Analyze; - /// Number of times the benchmark command has been used - public long Benchmark; - /// Number of times the image checksum command has been used - public long Checksum; - /// Number of times the image compare command has been used - public long Compare; - /// Number of times the image convert command has been used - public long ConvertImage; - /// Number of times the image create-sidecar command has been used - public long CreateSidecar; - /// Number of times the image decode command has been used - public long Decode; - /// Number of times the device info command has been used - public long DeviceInfo; - /// Number of times the device report command has been used - public long DeviceReport; - /// Number of times the media dump command has been used - public long DumpMedia; - /// Number of times the image entropy command has been used - public long Entropy; - /// Number of times the filesystem extract command has been used - public long ExtractFiles; - /// Number of times the list formats command has been used - public long Formats; - /// Number of times the image info command has been used - public long ImageInfo; - /// Number of times the device list command has been used - public long ListDevices; - /// Number of times the list encodings command has been used - public long ListEncodings; - /// Number of times the filesystem ls command has been used - public long Ls; - /// Number of times the media info command has been used - public long MediaInfo; - /// Number of times the media scan command has been used - public long MediaScan; - /// Number of times the image printhex command has been used - public long PrintHex; - /// Number of times the image verify command has been used - public long Verify; - } - - /// Statistics of verified media - public class VerifiedItems - { - /// Number of correct images - public long Correct; - /// Number of failed images - public long Failed; - } - - /// Verification statistics - public class VerifyStats - { - /// Image verification statistics - public VerifiedItems MediaImages; - /// Image contents verification statistics - public ScannedSectors Sectors; - } - - /// Image contents verification statistics - public class ScannedSectors - { - /// Sectors found to be correct - public long Correct; - /// Sectors found to be incorrect - public long Error; - /// Total number of verified sectors - public long Total; - /// Total number of sectors that could not be verified - public long Unverifiable; - } - - /// Media scanning time statistics - [SuppressMessage("ReSharper", "InconsistentNaming")] - public class TimeStats - { - /// Number of sectors that took more than 3ms but less than 100ms to read - public long LessThan10ms; - /// Number of sectors that took more than 50ms but less than 150ms to read - public long LessThan150ms; - /// Number of sectors that took less than 3ms to read - public long LessThan3ms; - /// Number of sectors that took more than 150ms but less than 500ms to read - public long LessThan500ms; - /// Number of sectors that took more than 10ms but less than 50ms to read - public long LessThan50ms; - /// Number of sectors that took more than 500ms to read - public long MoreThan500ms; - } - - /// Media scanning statistics - public class MediaScanStats - { - /// Statistics of scanned sectors - public ScannedSectors Sectors; - /// Scan time statistics - public TimeStats Times; - } - - /// Checksum type statistics - [SuppressMessage("ReSharper", "InconsistentNaming")] - public class ChecksumStats - { - /// Checksum algorithm - [XmlAttribute] - public string algorithm; - /// Time taken to execute algorithm - [XmlText] - public double Value; - } - - /// Benchmark statistics - public class BenchmarkStats - { - /// Total time taken to run the checksum algorithms in parallel - public double All; - /// List of time taken by each checksum algorithm - [XmlElement("Checksum")] - public List Checksum; - /// Time taken to benchmark entropy calculation - public double Entropy; - /// Maximum amount of memory used while running the benchmark - public long MaxMemory; - /// Minimum amount of memory used while running the benchmark - public long MinMemory; - /// Total time taken to run the checksum algorithms sequentially - public double Sequential; - } - - /// Media statistics - [SuppressMessage("ReSharper", "InconsistentNaming")] - public class MediaStats - { - /// Found in a real device? - [XmlAttribute] - public bool real; - /// Media type - [XmlAttribute] - public string type; - /// Number of times it has been found - [XmlText] - public long Value; - } - - /// Device statistics - public class DeviceStats - { - /// Is manufacturer null? - [XmlIgnore] - public bool ManufacturerSpecified; - /// Manufacturer string - public string Manufacturer { get; set; } - /// Model string - public string Model { get; set; } - /// Revision or firmware version - public string Revision { get; set; } - /// Bus the device was attached to - public string Bus { get; set; } - } - - /// Name=value pair statistics - [SuppressMessage("ReSharper", "InconsistentNaming")] - public class NameValueStats - { - /// Name - [XmlAttribute] - public string name { get; set; } - /// Number of times it has been used/found - [XmlText] - public long Value { get; set; } - } - - /// Operating system statistics - [SuppressMessage("ReSharper", "InconsistentNaming")] - public class OsStats - { - /// Operating system name - [XmlAttribute] - public string name { get; set; } - /// Operating system version - [XmlAttribute] - public string version { get; set; } - /// Number of times Aaru run on it - [XmlText] - public long Value { get; set; } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Metadata/Version.cs b/Aaru.CommonTypes/Metadata/Version.cs deleted file mode 100644 index 0175d4b..0000000 --- a/Aaru.CommonTypes/Metadata/Version.cs +++ /dev/null @@ -1,56 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Statistics.cs -// Author(s) : Natalia Portillo -// -// Component : XML metadata. -// -// --[ Description ] ---------------------------------------------------------- -// -// Returns Aaru version in XML software type format. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using Aaru.CommonTypes.Interop; -using Schemas; - -namespace Aaru.CommonTypes.Metadata -{ - /// Manages Aaru's version for metadata - public static class Version - { - /// Gets XML software type for the running version - /// XML software type - public static SoftwareType GetSoftwareType() => new SoftwareType - { - Name = "Aaru", - OperatingSystem = DetectOS.GetRealPlatformID().ToString(), - Version = typeof(Version).Assembly.GetName().Version?.ToString() - }; - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Partition.cs b/Aaru.CommonTypes/Partition.cs deleted file mode 100644 index d626b5d..0000000 --- a/Aaru.CommonTypes/Partition.cs +++ /dev/null @@ -1,119 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Partition.cs -// Author(s) : Natalia Portillo -// -// Component : Aaru common types. -// -// --[ Description ] ---------------------------------------------------------- -// -// Contains common partition types. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; - -namespace Aaru.CommonTypes -{ - /// Partition structure. - public struct Partition : IEquatable, IComparable - { - /// Partition number, 0-started - public ulong Sequence; - /// Partition type - public string Type; - /// Partition name (if the scheme supports it) - public string Name; - /// Start of the partition, in bytes - public ulong Offset; - /// LBA of partition start - public ulong Start; - /// Length in bytes of the partition - public ulong Size; - /// Length in sectors of the partition - public ulong Length; - /// Information that does not find space in this struct - public string Description; - /// LBA of last partition sector - public readonly ulong End => Start + Length - 1; - /// Name of partition scheme that contains this partition - public string Scheme; - - /// - /// Compares two partitions - /// Partition to compare with - /// 0 if both partitions start and end at the same sector - public bool Equals(Partition other) => Start == other.Start && Length == other.Length; - - /// - public override bool Equals(object obj) => obj is Partition partition && Equals(partition); - - /// - - // ReSharper disable once NonReadonlyMemberInGetHashCode - public override int GetHashCode() => Start.GetHashCode() + End.GetHashCode(); - - /// - /// Compares this partition with another and returns an integer that indicates whether the current partition - /// precedes, follows, or is in the same place as the other partition. - /// - /// Partition to compare with - /// A value that indicates the relative equality of the partitions being compared. - /// - public int CompareTo(Partition other) - { - if(Start == other.Start && - End == other.End) - return 0; - - if(Start > other.Start || - End > other.End) - return 1; - - return -1; - } - - // Define the equality operator. - public static bool operator ==(Partition operand1, Partition operand2) => operand1.Equals(operand2); - - // Define the inequality operator. - public static bool operator !=(Partition operand1, Partition operand2) => !operand1.Equals(operand2); - - // Define the is greater than operator. - public static bool operator >(Partition operand1, Partition operand2) => operand1.CompareTo(operand2) == 1; - - // Define the is less than operator. - public static bool operator <(Partition operand1, Partition operand2) => operand1.CompareTo(operand2) == -1; - - // Define the is greater than or equal to operator. - public static bool operator >=(Partition operand1, Partition operand2) => operand1.CompareTo(operand2) >= 0; - - // Define the is less than or equal to operator. - public static bool operator <=(Partition operand1, Partition operand2) => operand1.CompareTo(operand2) <= 0; - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/PluginBase.cs b/Aaru.CommonTypes/PluginBase.cs deleted file mode 100644 index 2929db5..0000000 --- a/Aaru.CommonTypes/PluginBase.cs +++ /dev/null @@ -1,149 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : PluginBase.cs -// Author(s) : Natalia Portillo -// -// Component : Core algorithms. -// -// --[ Description ] ---------------------------------------------------------- -// -// Class to hold all installed plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.CommonTypes -{ - /// Contain all plugins (filesystem, partition and image) - public class PluginBase - { - /// List of all archive formats - public readonly SortedDictionary Archives; - /// List of checksum plugins - public readonly List Checksums; - /// List of filter plugins - public readonly SortedDictionary Filters; - /// List of floppy image plugins - public readonly SortedDictionary FloppyImages; - /// List of all media image plugins - public readonly SortedDictionary ImagePluginsList; - /// List of all partition plugins - public readonly SortedDictionary PartPluginsList; - /// List of all filesystem plugins - public readonly SortedDictionary PluginsList; - /// List of read-only filesystem plugins - public readonly SortedDictionary ReadOnlyFilesystems; - /// List of writable floppy image plugins - public readonly SortedDictionary WritableFloppyImages; - /// List of writable media image plugins - public readonly SortedDictionary WritableImages; - - /// Initializes the plugins lists - public PluginBase() - { - PluginsList = new SortedDictionary(); - ReadOnlyFilesystems = new SortedDictionary(); - PartPluginsList = new SortedDictionary(); - ImagePluginsList = new SortedDictionary(); - WritableImages = new SortedDictionary(); - Checksums = new List(); - Filters = new SortedDictionary(); - FloppyImages = new SortedDictionary(); - WritableFloppyImages = new SortedDictionary(); - Archives = new SortedDictionary(); - } - - /// Adds plugins to the central plugin register - /// Plugin register - public void AddPlugins(IPluginRegister pluginRegister) - { - foreach(Type type in pluginRegister.GetAllChecksumPlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IChecksum plugin) - Checksums.Add(plugin); - - foreach(Type type in pluginRegister.GetAllFilesystemPlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IFilesystem plugin && - !PluginsList.ContainsKey(plugin.Name.ToLower())) - PluginsList.Add(plugin.Name.ToLower(), plugin); - - foreach(Type type in pluginRegister.GetAllFilterPlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IFilter plugin && - !Filters.ContainsKey(plugin.Name.ToLower())) - Filters.Add(plugin.Name.ToLower(), plugin); - - foreach(Type type in pluginRegister.GetAllFloppyImagePlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IFloppyImage plugin && - !FloppyImages.ContainsKey(plugin.Name.ToLower())) - FloppyImages.Add(plugin.Name.ToLower(), plugin); - - foreach(Type type in pluginRegister.GetAllMediaImagePlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IMediaImage plugin && - !ImagePluginsList.ContainsKey(plugin.Name.ToLower())) - ImagePluginsList.Add(plugin.Name.ToLower(), plugin); - - foreach(Type type in pluginRegister.GetAllPartitionPlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IPartition plugin && - !PartPluginsList.ContainsKey(plugin.Name.ToLower())) - PartPluginsList.Add(plugin.Name.ToLower(), plugin); - - foreach(Type type in pluginRegister.GetAllReadOnlyFilesystemPlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IReadOnlyFilesystem plugin && - !ReadOnlyFilesystems.ContainsKey(plugin.Name.ToLower())) - ReadOnlyFilesystems.Add(plugin.Name.ToLower(), plugin); - - foreach(Type type in pluginRegister.GetAllWritableFloppyImagePlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IWritableFloppyImage plugin && - !WritableFloppyImages.ContainsKey(plugin.Name.ToLower())) - WritableFloppyImages.Add(plugin.Name.ToLower(), plugin); - - foreach(Type type in pluginRegister.GetAllWritableImagePlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IWritableImage plugin && - !WritableImages.ContainsKey(plugin.Name.ToLower())) - WritableImages.Add(plugin.Name.ToLower(), plugin); - - foreach(Type type in pluginRegister.GetAllArchivePlugins() ?? Enumerable.Empty()) - if(type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] - {}) is IArchive plugin && - !Archives.ContainsKey(plugin.Name.ToLower())) - Archives.Add(plugin.Name.ToLower(), plugin); - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Structs/Devices/ATA/Identify.cs b/Aaru.CommonTypes/Structs/Devices/ATA/Identify.cs deleted file mode 100644 index 1422212..0000000 --- a/Aaru.CommonTypes/Structs/Devices/ATA/Identify.cs +++ /dev/null @@ -1,1127 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Identify.cs -// Author(s) : Natalia Portillo -// -// Component : Common structures for ATA devices. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines a high level interpretation of the ATA IDENTIFY response. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using System.Text; -using Aaru.Console; -using Aaru.Helpers; -using Marshal = Aaru.Helpers.Marshal; - -// ReSharper disable UnusedMember.Global - -namespace Aaru.CommonTypes.Structs.Devices.ATA -{ - /// - /// Information from following standards: T10-791D rev. 4c (ATA) T10-948D rev. 4c (ATA-2) T13-1153D rev. 18 - /// (ATA/ATAPI-4) T13-1321D rev. 3 (ATA/ATAPI-5) T13-1410D rev. 3b (ATA/ATAPI-6) T13-1532D rev. 4b (ATA/ATAPI-7) - /// T13-1699D rev. 3f (ATA8-ACS) T13-1699D rev. 4a (ATA8-ACS) T13-2015D rev. 2 (ACS-2) T13-2161D rev. 5 (ACS-3) CF+ - /// & CF Specification rev. 1.4 (CFA) - /// - [SuppressMessage("ReSharper", "InconsistentNaming"), SuppressMessage("ReSharper", "MemberCanBeInternal"), - SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] - public static class Identify - { - /// Capabilities flag bits. - [Flags] - public enum CapabilitiesBit : ushort - { - /// ATAPI: Interleaved DMA supported - InterleavedDMA = 0x8000, - /// ATAPI: Command queueing supported - CommandQueue = 0x4000, - /// Standby timer values are standard - StandardStandbyTimer = 0x2000, - /// ATAPI: Overlap operation supported - OverlapOperation = 0x2000, - /// ATAPI: ATA software reset required Obsoleted in ATA/ATAPI-4 - RequiresATASoftReset = 0x1000, - /// IORDY is supported - IORDY = 0x0800, - /// IORDY can be disabled - CanDisableIORDY = 0x0400, - /// LBA is supported - LBASupport = 0x0200, - /// DMA is supported - DMASupport = 0x0100, - /// Vendor unique Obsoleted in ATA/ATAPI-4 - VendorBit7 = 0x0080, - /// Vendor unique Obsoleted in ATA/ATAPI-4 - VendorBit6 = 0x0040, - /// Vendor unique Obsoleted in ATA/ATAPI-4 - VendorBit5 = 0x0020, - /// Vendor unique Obsoleted in ATA/ATAPI-4 - VendorBit4 = 0x0010, - /// Vendor unique Obsoleted in ATA/ATAPI-4 - VendorBit3 = 0x0008, - /// Vendor unique Obsoleted in ATA/ATAPI-4 - VendorBit2 = 0x0004, - /// Long Physical Alignment setting bit 1 - PhysicalAlignment1 = 0x0002, - /// Long Physical Alignment setting bit 0 - PhysicalAlignment0 = 0x0001 - } - - /// More capabilities flag bits. - [Flags] - public enum CapabilitiesBit2 : ushort - { - /// MUST NOT be set - MustBeClear = 0x8000, - /// MUST be set - MustBeSet = 0x4000, - #pragma warning disable 1591 - Reserved13 = 0x2000, Reserved12 = 0x1000, Reserved11 = 0x0800, - Reserved10 = 0x0400, Reserved09 = 0x0200, Reserved08 = 0x0100, - Reserved07 = 0x0080, Reserved06 = 0x0040, Reserved05 = 0x0020, - Reserved04 = 0x0010, Reserved03 = 0x0008, Reserved02 = 0x0004, - Reserved01 = 0x0002, - #pragma warning restore 1591 - /// Indicates a device specific minimum standby timer value - SpecificStandbyTimer = 0x0001 - } - - /// Even more capabilities flag bits. - [Flags] - public enum CapabilitiesBit3 : byte - { - /// BLOCK ERASE EXT supported - BlockErase = 0x0080, - /// OVERWRITE EXT supported - Overwrite = 0x0040, - /// CRYPTO SCRAMBLE EXT supported - CryptoScramble = 0x0020, - /// Sanitize feature set is supported - Sanitize = 0x0010, - /// If unset, sanitize commands are specified by ACS-2 - SanitizeCommands = 0x0008, - /// SANITIZE ANTIFREEZE LOCK EXT is supported - SanitizeAntifreeze = 0x0004, - #pragma warning disable 1591 - Reserved01 = 0x0002, - #pragma warning restore 1591 - /// Multiple logical sector setting is valid - MultipleValid = 0x0001 - } - - /// Command set flag bits. - [Flags] - public enum CommandSetBit : ushort - { - /// Already obsolete in ATA/ATAPI-4, reserved in ATA3 - Obsolete15 = 0x8000, - /// NOP is supported - Nop = 0x4000, - /// READ BUFFER is supported - ReadBuffer = 0x2000, - /// WRITE BUFFER is supported - WriteBuffer = 0x1000, - /// Already obsolete in ATA/ATAPI-4, reserved in ATA3 - Obsolete11 = 0x0800, - /// Host Protected Area is supported - HPA = 0x0400, - /// DEVICE RESET is supported - DeviceReset = 0x0200, - /// SERVICE interrupt is supported - Service = 0x0100, - /// Release is supported - Release = 0x0080, - /// Look-ahead is supported - LookAhead = 0x0040, - /// Write cache is supported - WriteCache = 0x0020, - /// PACKET command set is supported - Packet = 0x0010, - /// Power Management feature set is supported - PowerManagement = 0x0008, - /// Removable Media feature set is supported - RemovableMedia = 0x0004, - /// Security Mode feature set is supported - SecurityMode = 0x0002, - /// SMART feature set is supported - SMART = 0x0001 - } - - /// More command set flag bits. - [Flags] - public enum CommandSetBit2 : ushort - { - /// MUST NOT be set - MustBeClear = 0x8000, - /// MUST BE SET - MustBeSet = 0x4000, - /// FLUSH CACHE EXT supported - FlushCacheExt = 0x2000, - /// FLUSH CACHE supported - FlushCache = 0x1000, - /// Device Configuration Overlay feature set supported - DCO = 0x0800, - /// 48-bit LBA supported - LBA48 = 0x0400, - /// Automatic Acoustic Management supported - AAM = 0x0200, - /// SET MAX security extension supported - SetMax = 0x0100, - /// Address Offset Reserved Area Boot NCITS TR27:2001 - AddressOffsetReservedAreaBoot = 0x0080, - /// SET FEATURES required to spin-up - SetFeaturesRequired = 0x0040, - /// Power-Up in standby feature set supported - PowerUpInStandby = 0x0020, - /// Removable Media Status Notification feature set is supported - RemovableNotification = 0x0010, - /// Advanced Power Management feature set is supported - APM = 0x0008, - /// Compact Flash feature set is supported - CompactFlash = 0x0004, - /// READ DMA QUEUED and WRITE DMA QUEUED are supported - RWQueuedDMA = 0x0002, - /// DOWNLOAD MICROCODE is supported - DownloadMicrocode = 0x0001 - } - - /// Even more command set flag bits. - [Flags] - public enum CommandSetBit3 : ushort - { - /// MUST NOT be set - MustBeClear = 0x8000, - /// MUST BE SET - MustBeSet = 0x4000, - /// IDLE IMMEDIATE with UNLOAD FEATURE is supported - IdleImmediate = 0x2000, - /// Reserved for INCITS TR-37/2004 - Reserved12 = 0x1000, - /// Reserved for INCITS TR-37/2004 - Reserved11 = 0x0800, - /// URG bit is supported in WRITE STREAM DMA EXT and WRITE STREAM EXT - WriteURG = 0x0400, - /// URG bit is supported in READ STREAM DMA EXT and READ STREAM EXT - ReadURG = 0x0200, - /// 64-bit World Wide Name is supported - WWN = 0x0100, - /// WRITE DMA QUEUED FUA EXT is supported - FUAWriteQ = 0x0080, - /// WRITE DMA FUA EXT and WRITE MULTIPLE FUA EXT are supported - FUAWrite = 0x0040, - /// General Purpose Logging feature supported - GPL = 0x0020, - /// Streaming feature set is supported - Streaming = 0x0010, - /// Media Card Pass Through command set supported - MCPT = 0x0008, - /// Media serial number supported - MediaSerial = 0x0004, - /// SMART self-test supported - SMARTSelfTest = 0x0002, - /// SMART error logging supported - SMARTLog = 0x0001 - } - - /// Yet more command set flag bits. - [Flags] - public enum CommandSetBit4 : ushort - { - /// MUST NOT be set - MustBeClear = 0x8000, - /// MUST be set - MustBeSet = 0x4000, - #pragma warning disable 1591 - Reserved13 = 0x2000, Reserved12 = 0x1000, Reserved11 = 0x0800, - Reserved10 = 0x0400, - #pragma warning restore 1591 - /// DSN feature set is supported - DSN = 0x0200, - /// Accessible Max Address Configuration is supported - AMAC = 0x0100, - /// Extended Power Conditions is supported - ExtPowerCond = 0x0080, - /// Extended Status Reporting is supported - ExtStatusReport = 0x0040, - /// Free-fall Control feature set is supported - FreeFallControl = 0x0020, - /// Supports segmented feature in DOWNLOAD MICROCODE - SegmentedDownloadMicrocode = 0x0010, - /// READ/WRITE DMA EXT GPL are supported - RWDMAExtGpl = 0x0008, - /// WRITE UNCORRECTABLE is supported - WriteUnc = 0x0004, - /// Write/Read/Verify is supported - WRV = 0x0002, - /// Reserved for DT1825 - DT1825 = 0x0001 - } - - /// Yet again more command set flag bits. - [Flags] - public enum CommandSetBit5 : ushort - { - /// Supports CFast Specification - CFast = 0x8000, - /// Deterministic read after TRIM is supported - DeterministicTrim = 0x4000, - /// Long physical sector alignment error reporting control is supported - LongPhysSectorAligError = 0x2000, - /// DEVICE CONFIGURATION IDENTIFY DMA and DEVICE CONFIGURATION SET DMA are supported - DeviceConfDMA = 0x1000, - /// READ BUFFER DMA is supported - ReadBufferDMA = 0x0800, - /// WRITE BUFFER DMA is supported - WriteBufferDMA = 0x0400, - /// SET PASSWORD DMA and SET UNLOCK DMA are supported - SetMaxDMA = 0x0200, - /// DOWNLOAD MICROCODE DMA is supported - DownloadMicroCodeDMA = 0x0100, - /// Reserved for IEEE-1667 - IEEE1667 = 0x0080, - /// Optional ATA 28-bit commands are supported - Ata28 = 0x0040, - /// Read zero after TRIM is supported - ReadZeroTrim = 0x0020, - /// Device encrypts all user data - Encrypted = 0x0010, - /// Extended number of user addressable sectors is supported - ExtSectors = 0x0008, - /// All write cache is non-volatile - AllCacheNV = 0x0004, - /// Zoned capabilities bit 1 - ZonedBit1 = 0x0002, - /// Zoned capabilities bit 0 - ZonedBit0 = 0x0001 - } - - /// Data set management flag bits. - [Flags] - public enum DataSetMgmtBit : ushort - { - #pragma warning disable 1591 - Reserved15 = 0x8000, Reserved14 = 0x4000, Reserved13 = 0x2000, - Reserved12 = 0x1000, Reserved11 = 0x0800, Reserved10 = 0x0400, - Reserved09 = 0x0200, Reserved08 = 0x0100, Reserved07 = 0x0080, - Reserved06 = 0x0040, Reserved05 = 0x0020, Reserved04 = 0x0010, - Reserved03 = 0x0008, Reserved02 = 0x0004, Reserved01 = 0x0002, - #pragma warning restore 1591 - /// TRIM is supported - Trim = 0x0001 - } - - /// Device form factor - public enum DeviceFormFactorEnum : ushort - { - /// Size not reported - NotReported = 0, - /// 5.25" - FiveAndQuarter = 1, - /// 3.5" - ThreeAndHalf = 2, - /// 2.5" - TwoAndHalf = 3, - /// 1.8" - OnePointEight = 4, - /// Less than 1.8" - LessThanOnePointEight = 5 - } - - /// Extended identify flag bits. - [Flags] - public enum ExtendedIdentifyBit : byte - { - /// Reserved - Reserved07 = 0x80, - /// Reserved - Reserved06 = 0x40, - /// Reserved - Reserved05 = 0x20, - /// Reserved - Reserved04 = 0x10, - /// Reserved - Reserved03 = 0x08, - /// Identify word 88 is valid - Word88Valid = 0x04, - /// Identify words 64 to 70 are valid - Words64to70Valid = 0x02, - /// Identify words 54 to 58 are valid - Words54to58Valid = 0x01 - } - - /// General configuration flag bits. - [Flags] - public enum GeneralConfigurationBit : ushort - { - /// Set on ATAPI - NonMagnetic = 0x8000, - /// Format speed tolerance gap is required Obsoleted in ATA-2 - FormatGapReq = 0x4000, - /// Track offset option is available Obsoleted in ATA-2 - TrackOffset = 0x2000, - /// Data strobe offset option is available Obsoleted in ATA-2 - DataStrobeOffset = 0x1000, - /// Rotational speed tolerance is higher than 0,5% Obsoleted in ATA-2 - RotationalSpeedTolerance = 0x0800, - /// Disk transfer rate is > 10 Mb/s Obsoleted in ATA-2 - UltraFastIDE = 0x0400, - /// Disk transfer rate is > 5 Mb/s but <= 10 Mb/s Obsoleted in ATA-2 - FastIDE = 0x0200, - /// Disk transfer rate is <= 5 Mb/s Obsoleted in ATA-2 - SlowIDE = 0x0100, - /// Drive uses removable media - Removable = 0x0080, - /// Drive is fixed Obsoleted in ATA/ATAPI-6 - Fixed = 0x0040, - /// Spindle motor control is implemented Obsoleted in ATA-2 - SpindleControl = 0x0020, - /// Head switch time is bigger than 15 µsec. Obsoleted in ATA-2 - HighHeadSwitch = 0x0010, - /// Drive is not MFM encoded Obsoleted in ATA-2 - NotMFM = 0x0008, - /// Drive is soft sectored Obsoleted in ATA-2 - SoftSector = 0x0004, - /// Response incomplete Since ATA/ATAPI-5 - IncompleteResponse = 0x0004, - /// Drive is hard sectored Obsoleted in ATA-2 - HardSector = 0x0002, - /// Reserved - Reserved = 0x0001 - } - - /// Word 80 Major version - [Flags] - public enum MajorVersionBit : ushort - { - #pragma warning disable 1591 - Reserved15 = 0x8000, Reserved14 = 0x4000, Reserved13 = 0x2000, - Reserved12 = 0x1000, - #pragma warning restore 1591 - /// ACS-4 - ACS4 = 0x0800, - /// ACS-3 - ACS3 = 0x0400, - /// ACS-2 - ACS2 = 0x0200, - /// ATA8-ACS - Ata8ACS = 0x0100, - /// ATA/ATAPI-7 - AtaAtapi7 = 0x0080, - /// ATA/ATAPI-6 - AtaAtapi6 = 0x0040, - /// ATA/ATAPI-5 - AtaAtapi5 = 0x0020, - /// ATA/ATAPI-4 - AtaAtapi4 = 0x0010, - /// ATA-3 - Ata3 = 0x0008, - /// ATA-2 - Ata2 = 0x0004, - /// ATA-1 - Ata1 = 0x0002, - #pragma warning disable 1591 - Reserved00 = 0x0001 - #pragma warning restore 1591 - } - - /// SATA capabilities flags - [Flags] - public enum SATACapabilitiesBit : ushort - { - /// Supports READ LOG DMA EXT - ReadLogDMAExt = 0x8000, - /// Supports device automatic partial to slumber transitions - DevSlumbTrans = 0x4000, - /// Supports host automatic partial to slumber transitions - HostSlumbTrans = 0x2000, - /// Supports NCQ priority - NCQPriority = 0x1000, - /// Supports unload while NCQ commands are outstanding - UnloadNCQ = 0x0800, - /// Supports PHY Event Counters - PHYEventCounter = 0x0400, - /// Supports receipt of host initiated power management requests - PowerReceipt = 0x0200, - /// Supports NCQ - NCQ = 0x0100, - #pragma warning disable 1591 - Reserved07 = 0x0080, Reserved06 = 0x0040, Reserved05 = 0x0020, - Reserved04 = 0x0010, - #pragma warning restore 1591 - /// Supports SATA Gen. 3 Signaling Speed (6.0Gb/s) - Gen3Speed = 0x0008, - /// Supports SATA Gen. 2 Signaling Speed (3.0Gb/s) - Gen2Speed = 0x0004, - /// Supports SATA Gen. 1 Signaling Speed (1.5Gb/s) - Gen1Speed = 0x0002, - /// MUST NOT be set - Clear = 0x0001 - } - - /// More SATA capabilities flags - [Flags] - public enum SATACapabilitiesBit2 : ushort - { - #pragma warning disable 1591 - Reserved15 = 0x8000, Reserved14 = 0x4000, Reserved13 = 0x2000, - Reserved12 = 0x1000, Reserved11 = 0x0800, Reserved10 = 0x0400, - Reserved09 = 0x0200, Reserved08 = 0x0100, Reserved07 = 0x0080, - #pragma warning restore 1591 - /// Supports RECEIVE FPDMA QUEUED and SEND FPDMA QUEUED - FPDMAQ = 0x0040, - /// Supports NCQ Queue Management - NCQMgmt = 0x0020, - /// ATAPI: Supports host environment detect - HostEnvDetect = 0x0020, - /// Supports NCQ streaming - NCQStream = 0x0010, - /// ATAPI: Supports device attention on slimline connected devices - DevAttSlimline = 0x0010, - /// Coded value indicating current negotiated Serial ATA signal speed - CurrentSpeedBit2 = 0x0008, - /// Coded value indicating current negotiated Serial ATA signal speed - CurrentSpeedBit1 = 0x0004, - /// Coded value indicating current negotiated Serial ATA signal speed - CurrentSpeedBit0 = 0x0002, - /// MUST NOT be set - Clear = 0x0001 - } - - /// SATA features flags - [Flags] - public enum SATAFeaturesBit : ushort - { - #pragma warning disable 1591 - Reserved15 = 0x8000, Reserved14 = 0x4000, Reserved13 = 0x2000, - Reserved12 = 0x1000, Reserved11 = 0x0800, Reserved10 = 0x0400, - Reserved09 = 0x0200, Reserved08 = 0x0100, - #pragma warning restore 1591 - /// Supports NCQ autosense - NCQAutoSense = 0x0080, - /// Automatic Partial to Slumber transitions are enabled - EnabledSlumber = 0x0080, - /// Supports Software Settings Preservation - SettingsPreserve = 0x0040, - /// Supports hardware feature control - HardwareFeatureControl = 0x0020, - /// ATAPI: Asynchronous notification - AsyncNotification = 0x0020, - /// Supports in-order data delivery - InOrderData = 0x0010, - /// Supports initiating power management - InitPowerMgmt = 0x0008, - /// Supports DMA Setup auto-activation - DMASetup = 0x0004, - /// Supports non-zero buffer offsets - NonZeroBufferOffset = 0x0002, - /// MUST NOT be set - Clear = 0x0001 - } - - /// SCT Command Transport flags - [Flags] - public enum SCTCommandTransportBit : ushort - { - #pragma warning disable 1591 - Vendor15 = 0x8000, Vendor14 = 0x4000, Vendor13 = 0x2000, - Vendor12 = 0x1000, Reserved11 = 0x0800, Reserved10 = 0x0400, - Reserved09 = 0x0200, Reserved08 = 0x0100, Reserved07 = 0x0080, - Reserved06 = 0x0040, - #pragma warning restore 1591 - /// SCT Command Transport Data Tables supported - DataTables = 0x0020, - /// SCT Command Transport Features Control supported - FeaturesControl = 0x0010, - /// SCT Command Transport Error Recovery Control supported - ErrorRecoveryControl = 0x0008, - /// SCT Command Transport Write Same supported - WriteSame = 0x0004, - /// SCT Command Transport Long Sector Address supported - LongSectorAccess = 0x0002, - /// SCT Command Transport supported - Supported = 0x0001 - } - - /// Security status flag bits. - [Flags] - public enum SecurityStatusBit : ushort - { - #pragma warning disable 1591 - Reserved15 = 0x8000, Reserved14 = 0x4000, Reserved13 = 0x2000, - Reserved12 = 0x1000, Reserved11 = 0x0800, Reserved10 = 0x0400, - Reserved09 = 0x0200, - #pragma warning restore 1591 - /// Maximum security level - Maximum = 0x0100, - #pragma warning disable 1591 - Reserved07 = 0x0080, Reserved06 = 0x0040, - #pragma warning restore 1591 - /// Supports enhanced security erase - Enhanced = 0x0020, - /// Security count expired - Expired = 0x0010, - /// Security frozen - Frozen = 0x0008, - /// Security locked - Locked = 0x0004, - /// Security enabled - Enabled = 0x0002, - /// Security supported - Supported = 0x0001 - } - - /// Specific configuration flags - public enum SpecificConfigurationEnum : ushort - { - /// Device requires SET FEATURES to spin up and IDENTIFY DEVICE response is incomplete - RequiresSetIncompleteResponse = 0x37C8, - /// Device requires SET FEATURES to spin up and IDENTIFY DEVICE response is complete - RequiresSetCompleteResponse = 0x738C, - /// Device does not requires SET FEATURES to spin up and IDENTIFY DEVICE response is incomplete - NotRequiresSetIncompleteResponse = 0x8C73, - /// Device does not requires SET FEATURES to spin up and IDENTIFY DEVICE response is complete - NotRequiresSetCompleteResponse = 0xC837 - } - - /// Transfer mode flags - [Flags] - public enum TransferMode : byte - { - #pragma warning disable 1591 - Mode7 = 0x80, Mode6 = 0x40, Mode5 = 0x20, - Mode4 = 0x10, Mode3 = 0x08, Mode2 = 0x04, - Mode1 = 0x02, Mode0 = 0x01 - #pragma warning restore 1591 - } - - /// Trusted Computing flags - [Flags] - public enum TrustedComputingBit : ushort - { - /// MUST NOT be set - Clear = 0x8000, - /// MUST be set - Set = 0x4000, - #pragma warning disable 1591 - Reserved13 = 0x2000, Reserved12 = 0x1000, Reserved11 = 0x0800, - Reserved10 = 0x0400, Reserved09 = 0x0200, Reserved08 = 0x0100, - Reserved07 = 0x0080, Reserved06 = 0x0040, Reserved05 = 0x0020, - Reserved04 = 0x0010, Reserved03 = 0x0008, Reserved02 = 0x0004, - Reserved01 = 0x0002, - #pragma warning restore 1591 - /// Trusted Computing feature set is supported - TrustedComputing = 0x0001 - } - - /// IDENTIFY DEVICE decoded response - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 2)] - public struct IdentifyDevice - { - /// - /// Word 0 General device configuration On ATAPI devices: Bits 12 to 8 indicate device type as SCSI defined Bits 6 - /// to 5: 0 = Device shall set DRQ within 3 ms of receiving PACKET 1 = Device shall assert INTRQ when DRQ is set to one - /// 2 = Device shall set DRQ within 50 µs of receiving PACKET Bits 1 to 0: 0 = 12 byte command packet 1 = 16 byte - /// command packet CompactFlash is 0x848A (non magnetic, removable, not MFM, hardsector, and UltraFAST) - /// - public GeneralConfigurationBit GeneralConfiguration; - /// Word 1 Cylinders in default translation mode Obsoleted in ATA/ATAPI-6 - public ushort Cylinders; - /// Word 2 Specific configuration - public SpecificConfigurationEnum SpecificConfiguration; - /// Word 3 Heads in default translation mode Obsoleted in ATA/ATAPI-6 - public ushort Heads; - /// Word 4 Unformatted bytes per track in default translation mode Obsoleted in ATA-2 - public ushort UnformattedBPT; - /// Word 5 Unformatted bytes per sector in default translation mode Obsoleted in ATA-2 - public ushort UnformattedBPS; - /// Word 6 Sectors per track in default translation mode Obsoleted in ATA/ATAPI-6 - public ushort SectorsPerTrack; - /// Words 7 to 8 CFA: Number of sectors per card - public uint SectorsPerCard; - /// Word 9 Vendor unique Obsoleted in ATA/ATAPI-4 - public ushort VendorWord9; - /// Words 10 to 19 Device serial number, right justified, padded with spaces - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] - public string SerialNumber; - /// - /// Word 20 Manufacturer defined Obsoleted in ATA-2 0x0001 = single ported single sector buffer 0x0002 = dual - /// ported multi sector buffer 0x0003 = dual ported multi sector buffer with reading - /// - public ushort BufferType; - /// Word 21 Size of buffer in 512 byte increments Obsoleted in ATA-2 - public ushort BufferSize; - /// Word 22 Bytes of ECC available in READ/WRITE LONG commands Obsoleted in ATA/ATAPI-4 - public ushort EccBytes; - /// Words 23 to 26 Firmware revision, left justified, padded with spaces - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] - public string FirmwareRevision; - /// Words 27 to 46 Model number, left justified, padded with spaces - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)] - public string Model; - /// - /// Word 47 bits 7 to 0 Maximum number of sectors that can be transferred per interrupt on read and write multiple - /// commands - /// - public byte MultipleMaxSectors; - /// Word 47 bits 15 to 8 Vendor unique ATA/ATAPI-4 says it must be 0x80 - public byte VendorWord47; - /// - /// Word 48 ATA-1: Set to 1 if it can perform doubleword I/O ATA-2 to ATA/ATAPI-7: Reserved ATA8-ACS: Trusted - /// Computing feature set - /// - public TrustedComputingBit TrustedComputing; - /// Word 49 Capabilities - public CapabilitiesBit Capabilities; - /// Word 50 Capabilities - public CapabilitiesBit2 Capabilities2; - /// Word 51 bits 7 to 0 Vendor unique Obsoleted in ATA/ATAPI-4 - public byte VendorWord51; - /// Word 51 bits 15 to 8 Transfer timing mode in PIO Obsoleted in ATA/ATAPI-4 - public byte PIOTransferTimingMode; - /// Word 52 bits 7 to 0 Vendor unique Obsoleted in ATA/ATAPI-4 - public byte VendorWord52; - /// Word 52 bits 15 to 8 Transfer timing mode in DMA Obsoleted in ATA/ATAPI-4 - public byte DMATransferTimingMode; - /// Word 53 bits 7 to 0 Reports if words 54 to 58 are valid - public ExtendedIdentifyBit ExtendedIdentify; - /// Word 53 bits 15 to 8 Free-fall Control Sensitivity - public byte FreeFallSensitivity; - /// Word 54 Cylinders in current translation mode Obsoleted in ATA/ATAPI-6 - public ushort CurrentCylinders; - /// Word 55 Heads in current translation mode Obsoleted in ATA/ATAPI-6 - public ushort CurrentHeads; - /// Word 56 Sectors per track in current translation mode Obsoleted in ATA/ATAPI-6 - public ushort CurrentSectorsPerTrack; - /// Words 57 to 58 Total sectors currently user-addressable Obsoleted in ATA/ATAPI-6 - public uint CurrentSectors; - /// Word 59 bits 7 to 0 Number of sectors currently set to transfer on a READ/WRITE MULTIPLE command - public byte MultipleSectorNumber; - /// Word 59 bits 15 to 8 Indicates if is valid - public CapabilitiesBit3 Capabilities3; - /// Words 60 to 61 If drive supports LBA, how many sectors are addressable using LBA - public uint LBASectors; - /// - /// Word 62 bits 7 to 0 Single word DMA modes available Obsoleted in ATA/ATAPI-4 In ATAPI it's not obsolete, - /// indicates UDMA mode (UDMA7 is instead MDMA0) - /// - public TransferMode DMASupported; - /// - /// Word 62 bits 15 to 8 Single word DMA mode currently active Obsoleted in ATA/ATAPI-4 In ATAPI it's not - /// obsolete, bits 0 and 1 indicate MDMA mode+1, bit 10 indicates DMA is supported and bit 15 indicates DMADIR bit in - /// PACKET is required for DMA transfers - /// - public TransferMode DMAActive; - /// Word 63 bits 7 to 0 Multiword DMA modes available - public TransferMode MDMASupported; - /// Word 63 bits 15 to 8 Multiword DMA mode currently active - public TransferMode MDMAActive; - - /// Word 64 bits 7 to 0 Supported Advanced PIO transfer modes - public TransferMode APIOSupported; - /// Word 64 bits 15 to 8 Reserved - public byte ReservedWord64; - /// Word 65 Minimum MDMA transfer cycle time per word in nanoseconds - public ushort MinMDMACycleTime; - /// Word 66 Recommended MDMA transfer cycle time per word in nanoseconds - public ushort RecMDMACycleTime; - /// Word 67 Minimum PIO transfer cycle time without flow control in nanoseconds - public ushort MinPIOCycleTimeNoFlow; - /// Word 68 Minimum PIO transfer cycle time with IORDY flow control in nanoseconds - public ushort MinPIOCycleTimeFlow; - - /// Word 69 Additional supported - public CommandSetBit5 CommandSet5; - /// Word 70 Reserved - public ushort ReservedWord70; - /// Word 71 ATAPI: Typical time in ns from receipt of PACKET to release bus - public ushort PacketBusRelease; - /// Word 72 ATAPI: Typical time in ns from receipt of SERVICE to clear BSY - public ushort ServiceBusyClear; - /// Word 73 Reserved - public ushort ReservedWord73; - /// Word 74 Reserved - public ushort ReservedWord74; - - /// Word 75 Maximum Queue depth - public ushort MaxQueueDepth; - - /// Word 76 Serial ATA Capabilities - public SATACapabilitiesBit SATACapabilities; - /// Word 77 Serial ATA Additional Capabilities - public SATACapabilitiesBit2 SATACapabilities2; - - /// Word 78 Supported Serial ATA features - public SATAFeaturesBit SATAFeatures; - /// Word 79 Enabled Serial ATA features - public SATAFeaturesBit EnabledSATAFeatures; - - /// Word 80 Major version of ATA/ATAPI standard supported - public MajorVersionBit MajorVersion; - /// Word 81 Minimum version of ATA/ATAPI standard supported - public ushort MinorVersion; - - /// Word 82 Supported command/feature sets - public CommandSetBit CommandSet; - /// Word 83 Supported command/feature sets - public CommandSetBit2 CommandSet2; - /// Word 84 Supported command/feature sets - public CommandSetBit3 CommandSet3; - - /// Word 85 Enabled command/feature sets - public CommandSetBit EnabledCommandSet; - /// Word 86 Enabled command/feature sets - public CommandSetBit2 EnabledCommandSet2; - /// Word 87 Enabled command/feature sets - public CommandSetBit3 EnabledCommandSet3; - - /// Word 88 bits 7 to 0 Supported Ultra DMA transfer modes - public TransferMode UDMASupported; - /// Word 88 bits 15 to 8 Selected Ultra DMA transfer modes - public TransferMode UDMAActive; - - /// Word 89 Time required for security erase completion - public ushort SecurityEraseTime; - /// Word 90 Time required for enhanced security erase completion - public ushort EnhancedSecurityEraseTime; - /// Word 91 Current advanced power management value - public ushort CurrentAPM; - - /// Word 92 Master password revision code - public ushort MasterPasswordRevisionCode; - /// Word 93 Hardware reset result - public ushort HardwareResetResult; - - /// Word 94 bits 7 to 0 Current AAM value - public byte CurrentAAM; - /// Word 94 bits 15 to 8 Vendor's recommended AAM value - public byte RecommendedAAM; - - /// Word 95 Stream minimum request size - public ushort StreamMinReqSize; - /// Word 96 Streaming transfer time in DMA - public ushort StreamTransferTimeDMA; - /// Word 97 Streaming access latency in DMA and PIO - public ushort StreamAccessLatency; - /// Words 98 to 99 Streaming performance granularity - public uint StreamPerformanceGranularity; - - /// Words 100 to 103 48-bit LBA addressable sectors - public ulong LBA48Sectors; - - /// Word 104 Streaming transfer time in PIO - public ushort StreamTransferTimePIO; - - /// Word 105 Maximum number of 512-byte block per DATA SET MANAGEMENT command - public ushort DataSetMgmtSize; - - /// - /// Word 106 Bit 15 should be zero Bit 14 should be one Bit 13 set indicates device has multiple logical sectors - /// per physical sector Bit 12 set indicates logical sector has more than 256 words (512 bytes) Bits 11 to 4 are - /// reserved Bits 3 to 0 indicate power of two of logical sectors per physical sector - /// - public ushort PhysLogSectorSize; - - /// Word 107 Interseek delay for ISO-7779 acoustic testing, in microseconds - public ushort InterseekDelay; - - /// Words 108 to 111 World Wide Name - public ulong WWN; - - /// Words 112 to 115 Reserved for WWN extension to 128 bit - public ulong WWNExtension; - - /// Word 116 Reserved for technical report - public ushort ReservedWord116; - - /// Words 117 to 118 Words per logical sector - public uint LogicalSectorWords; - - /// Word 119 Supported command/feature sets - public CommandSetBit4 CommandSet4; - /// Word 120 Supported command/feature sets - public CommandSetBit4 EnabledCommandSet4; - - /// Words 121 to 125 Reserved - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] - public ushort[] ReservedWords121; - - /// Word 126 ATAPI byte count limit - public ushort ATAPIByteCount; - - /// - /// Word 127 Removable Media Status Notification feature set support Bits 15 to 2 are reserved Bits 1 to 0 must be - /// 0 for not supported or 1 for supported. 2 and 3 are reserved. Obsoleted in ATA8-ACS - /// - public ushort RemovableStatusSet; - - /// Word 128 Security status - public SecurityStatusBit SecurityStatus; - - /// Words 129 to 159 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 31)] - public ushort[] ReservedWords129; - - /// - /// Word 160 CFA power mode Bit 15 must be set Bit 13 indicates mode 1 is required for one or more commands Bit 12 - /// indicates mode 1 is disabled Bits 11 to 0 indicates maximum current in mA - /// - public ushort CFAPowerMode; - - /// Words 161 to 167 Reserved for CFA - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] - public ushort[] ReservedCFA; - - /// Word 168 Bits 15 to 4, reserved Bits 3 to 0, device nominal form factor - public DeviceFormFactorEnum DeviceFormFactor; - /// Word 169 DATA SET MANAGEMENT support - public DataSetMgmtBit DataSetMgmt; - /// Words 170 to 173 Additional product identifier - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] - public string AdditionalPID; - - /// Word 174 Reserved - public ushort ReservedWord174; - /// Word 175 Reserved - public ushort ReservedWord175; - - /// Words 176 to 195 Current media serial number - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)] - public string MediaSerial; - /// Words 196 to 205 Current media manufacturer - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] - public string MediaManufacturer; - - /// Word 206 SCT Command Transport features - public SCTCommandTransportBit SCTCommandTransport; - - /// Word 207 Reserved for CE-ATA - public ushort ReservedCEATAWord207; - /// Word 208 Reserved for CE-ATA - public ushort ReservedCEATAWord208; - - /// - /// Word 209 Alignment of logical block within a larger physical block Bit 15 shall be cleared to zero Bit 14 - /// shall be set to one Bits 13 to 0 indicate logical sector offset within the first physical sector - /// - public ushort LogicalAlignment; - - /// Words 210 to 211 Write/Read/Verify sector count mode 3 only - public uint WRVSectorCountMode3; - /// Words 212 to 213 Write/Read/Verify sector count mode 2 only - public uint WRVSectorCountMode2; - - /// - /// Word 214 NV Cache capabilities Bits 15 to 12 feature set version Bits 11 to 18 power mode feature set version - /// Bits 7 to 5 reserved Bit 4 feature set enabled Bits 3 to 2 reserved Bit 1 power mode feature set enabled Bit 0 - /// power mode feature set supported - /// - public ushort NVCacheCaps; - /// Words 215 to 216 NV Cache Size in Logical BLocks - public uint NVCacheSize; - /// Word 217 Nominal media rotation rate In ACS-1 meant NV Cache read speed in MB/s - public ushort NominalRotationRate; - /// Word 218 NV Cache write speed in MB/s Reserved since ACS-2 - public ushort NVCacheWriteSpeed; - /// Word 219 bits 7 to 0 Estimated device spin up in seconds - public byte NVEstimatedSpinUp; - /// Word 219 bits 15 to 8 NV Cache reserved - public byte NVReserved; - - /// Word 220 bits 7 to 0 Write/Read/Verify feature set current mode - public byte WRVMode; - /// Word 220 bits 15 to 8 Reserved - public byte WRVReserved; - - /// Word 221 Reserved - public ushort ReservedWord221; - - /// - /// Word 222 Transport major revision number Bits 15 to 12 indicate transport type. 0 parallel, 1 serial, 0xE - /// PCIe. Bits 11 to 0 indicate revision - /// - public ushort TransportMajorVersion; - /// Word 223 Transport minor revision number - public ushort TransportMinorVersion; - - /// Words 224 to 229 Reserved for CE-ATA - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] - public ushort[] ReservedCEATA224; - - /// Words 230 to 233 48-bit LBA if Word 69 bit 3 is set - public ulong ExtendedUserSectors; - - /// Word 234 Minimum number of 512 byte units per DOWNLOAD MICROCODE mode 3 - public ushort MinDownloadMicroMode3; - /// Word 235 Maximum number of 512 byte units per DOWNLOAD MICROCODE mode 3 - public ushort MaxDownloadMicroMode3; - - /// Words 236 to 254 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 19)] - public ushort[] ReservedWords; - - /// Word 255 bits 7 to 0 Should be 0xA5 - public byte Signature; - /// Word 255 bits 15 to 8 Checksum - public byte Checksum; - } - - /// Decodes a raw IDENTIFY DEVICE response - /// Raw IDENTIFY DEVICE response - /// Decoded IDENTIFY DEVICE - public static IdentifyDevice? Decode(byte[] IdentifyDeviceResponse) - { - if(IdentifyDeviceResponse == null) - return null; - - if(IdentifyDeviceResponse.Length != 512) - { - AaruConsole.DebugWriteLine("ATA/ATAPI IDENTIFY decoder", - "IDENTIFY response is different than 512 bytes, not decoding."); - - return null; - } - - IdentifyDevice ATAID = Marshal.ByteArrayToStructureLittleEndian(IdentifyDeviceResponse); - - ATAID.WWN = DescrambleWWN(ATAID.WWN); - ATAID.WWNExtension = DescrambleWWN(ATAID.WWNExtension); - - ATAID.SerialNumber = DescrambleATAString(IdentifyDeviceResponse, 10 * 2, 20); - ATAID.FirmwareRevision = DescrambleATAString(IdentifyDeviceResponse, 23 * 2, 8); - ATAID.Model = DescrambleATAString(IdentifyDeviceResponse, 27 * 2, 40); - ATAID.AdditionalPID = DescrambleATAString(IdentifyDeviceResponse, 170 * 2, 8); - ATAID.MediaSerial = DescrambleATAString(IdentifyDeviceResponse, 176 * 2, 40); - ATAID.MediaManufacturer = DescrambleATAString(IdentifyDeviceResponse, 196 * 2, 20); - - return ATAID; - } - - /// Encodes a raw IDENTIFY DEVICE response - /// Decoded IDENTIFY DEVICE - /// Raw IDENTIFY DEVICE response - public static byte[] Encode(IdentifyDevice? identify) - { - if(identify is null) - return null; - - IdentifyDevice ataId = identify.Value; - - ataId.WWN = DescrambleWWN(ataId.WWN); - ataId.WWNExtension = DescrambleWWN(ataId.WWNExtension); - - byte[] buf = new byte[512]; - IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(512); - System.Runtime.InteropServices.Marshal.StructureToPtr(ataId, ptr, false); - System.Runtime.InteropServices.Marshal.Copy(ptr, buf, 0, 512); - System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr); - - byte[] str = ScrambleATAString(ataId.SerialNumber, 20); - Array.Copy(str, 0, buf, 10 * 2, 20); - str = ScrambleATAString(ataId.FirmwareRevision, 8); - Array.Copy(str, 0, buf, 23 * 2, 8); - str = ScrambleATAString(ataId.Model, 40); - Array.Copy(str, 0, buf, 27 * 2, 40); - str = ScrambleATAString(ataId.AdditionalPID, 8); - Array.Copy(str, 0, buf, 170 * 2, 8); - str = ScrambleATAString(ataId.MediaSerial, 40); - Array.Copy(str, 0, buf, 176 * 2, 40); - str = ScrambleATAString(ataId.MediaManufacturer, 20); - Array.Copy(str, 0, buf, 196 * 2, 20); - - return buf; - } - - static ulong DescrambleWWN(ulong WWN) - { - byte[] qwb = BitConverter.GetBytes(WWN); - byte[] qword = new byte[8]; - - qword[7] = qwb[1]; - qword[6] = qwb[0]; - qword[5] = qwb[3]; - qword[4] = qwb[2]; - qword[3] = qwb[5]; - qword[2] = qwb[4]; - qword[1] = qwb[7]; - qword[0] = qwb[6]; - - return BitConverter.ToUInt64(qword, 0); - } - - static string DescrambleATAString(IList buffer, int offset, int length) - { - byte[] outbuf = buffer[offset + length - 1] != 0x00 ? new byte[length + 1] : new byte[length]; - - for(int i = 0; i < length; i += 2) - { - outbuf[i] = buffer[offset + i + 1]; - outbuf[i + 1] = buffer[offset + i]; - } - - string outStr = StringHandlers.CToString(outbuf); - - return outStr.Trim(); - } - - static byte[] ScrambleATAString(string str, int length) - { - byte[] buf = new byte[length]; - - for(int i = 0; i < length; i++) - buf[i] = 0x20; - - if(str is null) - return buf; - - byte[] bytes = Encoding.ASCII.GetBytes(str); - - if(bytes.Length % 2 != 0) - { - byte[] tmp = new byte[bytes.Length + 1]; - tmp[^1] = 0x20; - Array.Copy(bytes, 0, tmp, 0, bytes.Length); - bytes = tmp; - } - - for(int i = 0; i < bytes.Length; i += 2) - { - buf[i] = bytes[i + 1]; - buf[i + 1] = bytes[i]; - } - - return buf; - } - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Structs/Devices/SCSI/Enums.cs b/Aaru.CommonTypes/Structs/Devices/SCSI/Enums.cs deleted file mode 100644 index b589267..0000000 --- a/Aaru.CommonTypes/Structs/Devices/SCSI/Enums.cs +++ /dev/null @@ -1,245 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Enums.cs -// Author(s) : Natalia Portillo -// -// Component : Common structures for SCSI devices. -// -// --[ Description ] ---------------------------------------------------------- -// -// Contains various SCSI enumerations. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Diagnostics.CodeAnalysis; - -namespace Aaru.CommonTypes.Structs.Devices.SCSI -{ - /// List of known SCSI peripheral qualifiers - public enum PeripheralQualifiers : byte - { - /// Peripheral qualifier: Device is connected and supported - Supported = 0x00, - /// Peripheral qualifier: Device is supported but not connected - Unconnected = 0x01, - /// Peripheral qualifier: Reserved value - Reserved = 0x02, - /// Peripheral qualifier: Device is connected but unsupported - Unsupported = 0x03, - /// Peripheral qualifier: Vendor values: 0x04, 0x05, 0x06 and 0x07 - VendorMask = 0x04 - } - - /// List of known peripheral device types - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum PeripheralDeviceTypes : byte - { - /// Direct-access device - DirectAccess = 0x00, - /// Sequential-access device - SequentialAccess = 0x01, - /// Printer device - PrinterDevice = 0x02, - /// Processor device - ProcessorDevice = 0x03, - /// Write-once device - WriteOnceDevice = 0x04, - /// CD-ROM/DVD/etc device - MultiMediaDevice = 0x05, - /// Scanner device - ScannerDevice = 0x06, - /// Optical memory device - OpticalDevice = 0x07, - /// Medium change device - MediumChangerDevice = 0x08, - /// Communications device - CommsDevice = 0x09, - /// Graphics arts pre-press device (defined in ASC IT8) - PrePressDevice1 = 0x0A, - /// Graphics arts pre-press device (defined in ASC IT8) - PrePressDevice2 = 0x0B, - /// Array controller device - ArrayControllerDevice = 0x0C, - /// Enclosure services device - EnclosureServiceDevice = 0x0D, - /// Simplified direct-access device - SimplifiedDevice = 0x0E, - /// Optical card reader/writer device - OCRWDevice = 0x0F, - /// Bridging Expanders - BridgingExpander = 0x10, - /// Object-based Storage Device - ObjectDevice = 0x11, - /// Automation/Drive Interface - ADCDevice = 0x12, - /// Security Manager Device - SCSISecurityManagerDevice = 0x13, - /// Host managed zoned block device - SCSIZonedBlockDevice = 0x14, - /// Well known logical unit - WellKnownDevice = 0x1E, - /// Unknown or no device type - UnknownDevice = 0x1F - } - - /// List of known ANSI SCSI standards - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum ANSIVersions : byte - { - /// Device does not claim conformance to any ANSI version - ANSINoVersion = 0x00, - /// Device complies with ANSI X3.131:1986 - ANSI1986Version = 0x01, - /// Device complies with ANSI X3.131:1994 - ANSI1994Version = 0x02, - /// Device complies with ANSI X3.301:1997 - ANSI1997Version = 0x03, - /// Device complies with ANSI X3.351:2001 - ANSI2001Version = 0x04, - /// Device complies with ANSI X3.408:2005. - ANSI2005Version = 0x05, - /// Device complies with SPC-4 - ANSI2008Version = 0x06 - } - - /// List of known ECMA SCSI standards - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum ECMAVersions : byte - { - /// Device does not claim conformance to any ECMA version - ECMANoVersion = 0x00, - /// Device complies with a ECMA-111 standard - ECMA111 = 0x01 - } - - /// List of known ISO SCSI standards - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum ISOVersions : byte - { - /// Device does not claim conformance to any ISO/IEC version - ISONoVersion = 0x00, - /// Device complies with ISO/IEC 9316:1995 - ISO1995Version = 0x02 - } - - /// List of known SCSI Parallel Interface clocking types - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum SPIClocking : byte - { - /// Supports only ST - ST = 0x00, - /// Supports only DT - DT = 0x01, - /// Reserved value - Reserved = 0x02, - /// Supports ST and DT - STandDT = 0x03 - } - - /// List of known TGPS values - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum TGPSValues : byte - { - /// Asymmetrical access not supported - NotSupported = 0x00, - /// Only implicit asymmetrical access is supported - OnlyImplicit = 0x01, - /// Only explicit asymmetrical access is supported - OnlyExplicit = 0x02, - /// Both implicit and explicit asymmetrical access are supported - Both = 0x03 - } - - /// List of known SCSI protocols - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum ProtocolIdentifiers : byte - { - /// Fibre Channel - FibreChannel = 0, - /// Parallel SCSI - SCSI = 1, - /// SSA - SSA = 2, - /// IEEE-1394 - Firewire = 3, - /// SCSI Remote Direct Memory Access Protocol - RDMAP = 4, - /// Internet SCSI - iSCSI = 5, - /// Serial SCSI - SAS = 6, - /// Automation/Drive Interface Transport Protocol - ADT = 7, - /// AT Attachment Interface (ATA/ATAPI) - ATA = 8, - /// USB Attached SCSI - UAS = 9, - /// SCSI over PCI Express - SCSIe = 10, - /// PCI Express - PCIe = 11, - /// No specific protocol - NoProtocol = 15 - } - - /// List of known SCSI definitions - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum ScsiDefinitions : byte - { - /// Unknown - Current = 0, - /// SCSI-1 - SCSI1 = 1, - /// Unknown - CCS = 2, - /// SCSI-2 - SCSI2 = 3, - /// SCSI-3 - SCSI3 = 4 - } - - /// List of known SCSI physical interfaces - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum PhysicalInterfaces : uint - { - /// Unspecified physical interface - Unspecified = 0, - /// SCSI - SCSI = 1, - /// ATAPI - ATAPI = 2, - /// IEEE-1394/1995 - IEEE1394 = 3, - /// IEEE-1394A - IEEE1394A = 4, - /// Fibre Channel - FC = 5, - /// IEEE-1394B - IEEE1394B = 6, - /// Serial ATAPI - SerialATAPI = 7, - /// USB - USB = 8, - /// Vendor unique - Vendor = 0xFFFF - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Structs/Devices/SCSI/Inquiry.cs b/Aaru.CommonTypes/Structs/Devices/SCSI/Inquiry.cs deleted file mode 100644 index a6322f1..0000000 --- a/Aaru.CommonTypes/Structs/Devices/SCSI/Inquiry.cs +++ /dev/null @@ -1,788 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Inquiry.cs -// Author(s) : Natalia Portillo -// -// Component : Common structures for SCSI devices. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines a high level interpretation of the SCSI INQUIRY response. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using Aaru.Console; - -namespace Aaru.CommonTypes.Structs.Devices.SCSI -{ - /// - /// Information from the following standards: T9/375-D revision 10l T10/995-D revision 10 T10/1236-D revision 20 - /// T10/1416-D revision 23 T10/1731-D revision 16 T10/502 revision 05 RFC 7144 ECMA-111 - /// - [SuppressMessage("ReSharper", "InconsistentNaming"), SuppressMessage("ReSharper", "MemberCanBeInternal"), - SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] - public struct Inquiry - { - /// Peripheral qualifier Byte 0, bits 7 to 5 - public byte PeripheralQualifier; - /// Peripheral device type Byte 0, bits 4 to 0 - public byte PeripheralDeviceType; - /// Removable device Byte 1, bit 7 - public bool RMB; - /// SCSI-1 vendor-specific qualification codes Byte 1, bits 6 to 0 - public byte DeviceTypeModifier; - /// ISO/IEC SCSI Standard Version Byte 2, bits 7 to 6, mask = 0xC0, >> 6 - public byte ISOVersion; - /// ECMA SCSI Standard Version Byte 2, bits 5 to 3, mask = 0x38, >> 3 - public byte ECMAVersion; - /// ANSI SCSI Standard Version Byte 2, bits 2 to 0, mask = 0x07 - public byte ANSIVersion; - /// Asynchronous Event Reporting Capability supported Byte 3, bit 7 - public bool AERC; - /// Device supports TERMINATE TASK command Byte 3, bit 6 - public bool TrmTsk; - /// Supports setting Normal ACA Byte 3, bit 5 - public bool NormACA; - /// Supports LUN hierarchical addressing Byte 3, bit 4 - public bool HiSup; - /// Responde data format Byte 3, bit 3 to 0 - public byte ResponseDataFormat; - /// Lenght of total INQUIRY response minus 4 Byte 4 - public byte AdditionalLength; - /// Device contains an embedded storage array controller Byte 5, bit 7 - public bool SCCS; - /// Device contains an Access Control Coordinator Byte 5, bit 6 - public bool ACC; - /// Supports asymetrical logical unit access Byte 5, bits 5 to 4 - public byte TPGS; - /// Supports third-party copy commands Byte 5, bit 3 - public bool ThreePC; - /// Reserved Byte 5, bits 2 to 1 - public byte Reserved2; - /// Supports protection information Byte 5, bit 0 - public bool Protect; - /// Supports basic queueing Byte 6, bit 7 - public bool BQue; - /// Device contains an embedded enclosure services component Byte 6, bit 6 - public bool EncServ; - /// Vendor-specific Byte 6, bit 5 - public bool VS1; - /// Multi-port device Byte 6, bit 4 - public bool MultiP; - /// Device contains or is attached to a medium changer Byte 6, bit 3 - public bool MChngr; - /// Device supports request and acknowledge handshakes Byte 6, bit 2 - public bool ACKREQQ; - /// Supports 32-bit wide SCSI addresses Byte 6, bit 1 - public bool Addr32; - /// Supports 16-bit wide SCSI addresses Byte 6, bit 0 - public bool Addr16; - /// Device supports relative addressing Byte 7, bit 7 - public bool RelAddr; - /// Supports 32-bit wide data transfers Byte 7, bit 6 - public bool WBus32; - /// Supports 16-bit wide data transfers Byte 7, bit 5 - public bool WBus16; - /// Supports synchronous data transfer Byte 7, bit 4 - public bool Sync; - /// Supports linked commands Byte 7, bit 3 - public bool Linked; - /// Supports CONTINUE TASK and TARGET TRANSFER DISABLE commands Byte 7, bit 2 - public bool TranDis; - /// Supports TCQ queue Byte 7, bit 1 - public bool CmdQue; - /// Indicates that the devices responds to RESET with soft reset Byte 7, bit 0 - public bool SftRe; - /// Vendor identification Bytes 8 to 15 - public byte[] VendorIdentification; - /// Product identification Bytes 16 to 31 - public byte[] ProductIdentification; - /// Product revision level Bytes 32 to 35 - public byte[] ProductRevisionLevel; - /// Vendor-specific data Bytes 36 to 55 - public byte[] VendorSpecific; - /// Byte 56, bits 7 to 4 - public byte Reserved3; - /// Supported SPI clocking Byte 56, bits 3 to 2 - public byte Clocking; - /// Device supports Quick Arbitration and Selection Byte 56, bit 1 - public bool QAS; - /// Supports information unit transfers Byte 56, bit 0 - public bool IUS; - /// Reserved Byte 57 - public byte Reserved4; - /// Array of version descriptors Bytes 58 to 73 - public ushort[] VersionDescriptors; - /// Reserved Bytes 74 to 95 - public byte[] Reserved5; - /// Reserved Bytes 96 to end - public byte[] VendorSpecific2; - - // Per DLT4000/DLT4500/DLT4700 Cartridge Tape Subsystem Product Manual - - #region Quantum vendor unique inquiry data structure - /// Means that the INQUIRY response contains 56 bytes or more, so this data has been filled - public bool QuantumPresent; - /// The product family. Byte 36, bits 7 to 5 - public byte Qt_ProductFamily; - /// The released firmware. Byte 36, bits 4 to 0 - public byte Qt_ReleasedFirmware; - /// The firmware major version. Byte 37 - public byte Qt_FirmwareMajorVersion; - /// The firmware minor version. Byte 38 - public byte Qt_FirmwareMinorVersion; - /// The EEPROM format major version. Byte 39 - public byte Qt_EEPROMFormatMajorVersion; - /// The EEPROM format minor version. Byte 40 - public byte Qt_EEPROMFormatMinorVersion; - /// The firmware personality. Byte 41 - public byte Qt_FirmwarePersonality; - /// The firmware sub personality. Byte 42 - public byte Qt_FirmwareSubPersonality; - /// The tape directory format version. Byte 43 - public byte Qt_TapeDirectoryFormatVersion; - /// The controller hardware version. Byte 44 - public byte Qt_ControllerHardwareVersion; - /// The drive EEPROM version. Byte 45 - public byte Qt_DriveEEPROMVersion; - /// The drive hardware version. Byte 46 - public byte Qt_DriveHardwareVersion; - /// The media loader firmware version. Byte 47 - public byte Qt_MediaLoaderFirmwareVersion; - /// The media loader hardware version. Byte 48 - public byte Qt_MediaLoaderHardwareVersion; - /// The media loader mechanical version. Byte 49 - public byte Qt_MediaLoaderMechanicalVersion; - /// Is a media loader present? Byte 50 - public bool Qt_MediaLoaderPresent; - /// Is a library present? Byte 51 - public bool Qt_LibraryPresent; - /// The module revision. Bytes 52 to 55 - public byte[] Qt_ModuleRevision; - #endregion Quantum vendor unique inquiry data structure - - #region IBM vendor unique inquiry data structure - /// Means that the INQUIRY response contains 56 bytes or more, so this data has been filled - public bool IBMPresent; - /// Drive is not capable of automation Byte 36 bit 0 - public bool IBM_AutDis; - /// If not zero, limit in MB/s = Max * (this / 256) Byte 37 - public byte IBM_PerformanceLimit; - /// Byte 41 - public byte IBM_OEMSpecific; - #endregion IBM vendor unique inquiry data structure - - #region HP vendor unique inquiry data structure - /// Means that the INQUIRY response contains 49 bytes or more, so this data has been filled - public bool HPPresent; - /// WORM version Byte 40 bits 7 to 1 - public byte HP_WORMVersion; - /// WORM supported Byte 40 bit 0 - public bool HP_WORM; - /// Bytes 43 to 48 - public byte[] HP_OBDR; - #endregion HP vendor unique inquiry data structure - - #region Seagate vendor unique inquiry data structure - /// Means that bytes 36 to 43 are filled - public bool SeagatePresent; - /// Drive Serial Number Bytes 36 to 43 - public byte[] Seagate_DriveSerialNumber; - /// Means that bytes 96 to 143 are filled - public bool Seagate2Present; - /// Contains Seagate copyright notice Bytes 96 to 143 - public byte[] Seagate_Copyright; - /// Means that bytes 144 to 147 are filled - public bool Seagate3Present; - /// Reserved Seagate field Bytes 144 to 147 - public byte[] Seagate_ServoPROMPartNo; - #endregion Seagate vendor unique inquiry data structure - - #region Kreon vendor unique inquiry data structure - /// Means that firmware is Kreon - public bool KreonPresent; - /// Kreon identifier Bytes 36 to 40 - public byte[] KreonIdentifier; - /// Kreon just a 0x20 Bytes 41 - public byte KreonSpace; - /// Kreon version string Bytes 42 to 46 - public byte[] KreonVersion; - #endregion Kreon vendor unique inquiry data structure - - #region Sony Hi-MD data - /// Set if Hi-MD signature is present - public bool IsHiMD; - /// Hi-MD signature, bytes 36 to 44 - public byte[] HiMDSignature; - /// Unknown data, bytes 44 to 55 - public byte[] HiMDSpecific; - #endregion Sony Hi-MD data - - static readonly byte[] HiMDSignatureContents = - { - 0x48, 0x69, 0x2D, 0x4D, 0x44, 0x20, 0x20, 0x20 - }; - - /// Decodes a SCSI INQUIRY response - /// INQUIRY raw response data - /// Decoded SCSI INQUIRY - #region Public methods - public static Inquiry? Decode(byte[] SCSIInquiryResponse) - { - if(SCSIInquiryResponse == null) - return null; - - if(SCSIInquiryResponse.Length < 36 && - SCSIInquiryResponse.Length != 5) - { - AaruConsole.DebugWriteLine("SCSI INQUIRY decoder", - "INQUIRY response is {0} bytes, less than minimum of 36 bytes, decoded data can be incorrect, not decoding.", - SCSIInquiryResponse.Length); - - return null; - } - - if(SCSIInquiryResponse.Length < SCSIInquiryResponse[4] + 4 && - SCSIInquiryResponse.Length != SCSIInquiryResponse[4]) - { - AaruConsole.DebugWriteLine("SCSI INQUIRY decoder", - "INQUIRY response length ({0} bytes) is different than specified in length field ({1} bytes), decoded data can be incorrect, not decoding.", - SCSIInquiryResponse.Length, SCSIInquiryResponse[4] + 4); - - return null; - } - - var decoded = new Inquiry(); - - if(SCSIInquiryResponse.Length >= 1) - { - decoded.PeripheralQualifier = (byte)((SCSIInquiryResponse[0] & 0xE0) >> 5); - decoded.PeripheralDeviceType = (byte)(SCSIInquiryResponse[0] & 0x1F); - } - - if(SCSIInquiryResponse.Length >= 2) - { - decoded.RMB = Convert.ToBoolean(SCSIInquiryResponse[1] & 0x80); - decoded.DeviceTypeModifier = (byte)(SCSIInquiryResponse[1] & 0x7F); - } - - if(SCSIInquiryResponse.Length >= 3) - { - decoded.ISOVersion = (byte)((SCSIInquiryResponse[2] & 0xC0) >> 6); - decoded.ECMAVersion = (byte)((SCSIInquiryResponse[2] & 0x38) >> 3); - decoded.ANSIVersion = (byte)(SCSIInquiryResponse[2] & 0x07); - } - - if(SCSIInquiryResponse.Length >= 4) - { - decoded.AERC = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x80); - decoded.TrmTsk = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x40); - decoded.NormACA = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x20); - decoded.HiSup = Convert.ToBoolean(SCSIInquiryResponse[3] & 0x10); - decoded.ResponseDataFormat = (byte)(SCSIInquiryResponse[3] & 0x07); - } - - if(SCSIInquiryResponse.Length >= 5) - decoded.AdditionalLength = SCSIInquiryResponse[4]; - - if(SCSIInquiryResponse.Length >= 6) - { - decoded.SCCS = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x80); - decoded.ACC = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x40); - decoded.TPGS = (byte)((SCSIInquiryResponse[5] & 0x30) >> 4); - decoded.ThreePC = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x08); - decoded.Reserved2 = (byte)((SCSIInquiryResponse[5] & 0x06) >> 1); - decoded.Protect = Convert.ToBoolean(SCSIInquiryResponse[5] & 0x01); - } - - if(SCSIInquiryResponse.Length >= 7) - { - decoded.BQue = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x80); - decoded.EncServ = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x40); - decoded.VS1 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x20); - decoded.MultiP = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x10); - decoded.MChngr = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x08); - decoded.ACKREQQ = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x04); - decoded.Addr32 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x02); - decoded.Addr16 = Convert.ToBoolean(SCSIInquiryResponse[6] & 0x01); - } - - if(SCSIInquiryResponse.Length >= 8) - { - decoded.RelAddr = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x80); - decoded.WBus32 = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x40); - decoded.WBus16 = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x20); - decoded.Sync = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x10); - decoded.Linked = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x08); - decoded.TranDis = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x04); - decoded.CmdQue = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x02); - decoded.SftRe = Convert.ToBoolean(SCSIInquiryResponse[7] & 0x01); - } - - if(SCSIInquiryResponse.Length >= 16) - { - decoded.VendorIdentification = new byte[8]; - Array.Copy(SCSIInquiryResponse, 8, decoded.VendorIdentification, 0, 8); - } - - if(SCSIInquiryResponse.Length >= 32) - { - decoded.ProductIdentification = new byte[16]; - Array.Copy(SCSIInquiryResponse, 16, decoded.ProductIdentification, 0, 16); - } - - if(SCSIInquiryResponse.Length >= 36) - { - decoded.ProductRevisionLevel = new byte[4]; - Array.Copy(SCSIInquiryResponse, 32, decoded.ProductRevisionLevel, 0, 4); - } - - if(SCSIInquiryResponse.Length >= 44) - { - // Seagate 1 - decoded.SeagatePresent = true; - decoded.Seagate_DriveSerialNumber = new byte[8]; - Array.Copy(SCSIInquiryResponse, 36, decoded.Seagate_DriveSerialNumber, 0, 8); - - // Hi-MD - decoded.HiMDSignature = new byte[8]; - Array.Copy(SCSIInquiryResponse, 36, decoded.HiMDSignature, 0, 8); - decoded.IsHiMD = HiMDSignatureContents.SequenceEqual(decoded.HiMDSignature); - } - - if(SCSIInquiryResponse.Length >= 46) - { - // Kreon - decoded.KreonIdentifier = new byte[5]; - Array.Copy(SCSIInquiryResponse, 36, decoded.KreonIdentifier, 0, 5); - decoded.KreonSpace = SCSIInquiryResponse[41]; - decoded.KreonVersion = new byte[5]; - Array.Copy(SCSIInquiryResponse, 42, decoded.KreonVersion, 0, 5); - - if(decoded.KreonSpace == 0x20 && - decoded.KreonIdentifier.SequenceEqual(new byte[] - { - 0x4B, 0x52, 0x45, 0x4F, 0x4E - })) - decoded.KreonPresent = true; - } - - if(SCSIInquiryResponse.Length >= 49) - { - // HP - decoded.HPPresent = true; - decoded.HP_WORM |= (SCSIInquiryResponse[40] & 0x01) == 0x01; - decoded.HP_WORMVersion = (byte)((SCSIInquiryResponse[40] & 0x7F) >> 1); - decoded.HP_OBDR = new byte[6]; - Array.Copy(SCSIInquiryResponse, 43, decoded.HP_OBDR, 0, 6); - } - - if(SCSIInquiryResponse.Length >= 56) - { - if(decoded.IsHiMD) - { - decoded.HiMDSpecific = new byte[12]; - Array.Copy(SCSIInquiryResponse, 44, decoded.HiMDSpecific, 0, 12); - } - else - { - decoded.VendorSpecific = new byte[20]; - Array.Copy(SCSIInquiryResponse, 36, decoded.VendorSpecific, 0, 20); - } - - // Quantum - decoded.QuantumPresent = true; - decoded.Qt_ProductFamily = (byte)((SCSIInquiryResponse[36] & 0xF0) >> 4); - decoded.Qt_ReleasedFirmware = (byte)(SCSIInquiryResponse[36] & 0x0F); - decoded.Qt_FirmwareMajorVersion = SCSIInquiryResponse[37]; - decoded.Qt_FirmwareMinorVersion = SCSIInquiryResponse[38]; - decoded.Qt_EEPROMFormatMajorVersion = SCSIInquiryResponse[39]; - decoded.Qt_EEPROMFormatMinorVersion = SCSIInquiryResponse[40]; - decoded.Qt_FirmwarePersonality = SCSIInquiryResponse[41]; - decoded.Qt_FirmwareSubPersonality = SCSIInquiryResponse[42]; - decoded.Qt_TapeDirectoryFormatVersion = SCSIInquiryResponse[43]; - decoded.Qt_ControllerHardwareVersion = SCSIInquiryResponse[44]; - decoded.Qt_DriveEEPROMVersion = SCSIInquiryResponse[45]; - decoded.Qt_DriveHardwareVersion = SCSIInquiryResponse[46]; - decoded.Qt_MediaLoaderFirmwareVersion = SCSIInquiryResponse[47]; - decoded.Qt_MediaLoaderHardwareVersion = SCSIInquiryResponse[48]; - decoded.Qt_MediaLoaderMechanicalVersion = SCSIInquiryResponse[49]; - decoded.Qt_MediaLoaderPresent = SCSIInquiryResponse[50] > 0; - decoded.Qt_LibraryPresent = SCSIInquiryResponse[51] > 0; - decoded.Qt_ModuleRevision = new byte[4]; - Array.Copy(SCSIInquiryResponse, 52, decoded.Qt_ModuleRevision, 0, 4); - - // IBM - decoded.IBMPresent = true; - decoded.IBM_AutDis |= (SCSIInquiryResponse[36] & 0x01) == 0x01; - decoded.IBM_PerformanceLimit = SCSIInquiryResponse[37]; - decoded.IBM_OEMSpecific = SCSIInquiryResponse[41]; - } - - if(SCSIInquiryResponse.Length >= 57) - { - decoded.Reserved3 = (byte)((SCSIInquiryResponse[56] & 0xF0) >> 4); - decoded.Clocking = (byte)((SCSIInquiryResponse[56] & 0x0C) >> 2); - decoded.QAS = Convert.ToBoolean(SCSIInquiryResponse[56] & 0x02); - decoded.IUS = Convert.ToBoolean(SCSIInquiryResponse[56] & 0x01); - } - - if(SCSIInquiryResponse.Length >= 58) - decoded.Reserved4 = SCSIInquiryResponse[57]; - - if(SCSIInquiryResponse.Length >= 60) - { - int descriptorsNo; - - if(SCSIInquiryResponse.Length >= 74) - descriptorsNo = 8; - else - descriptorsNo = (SCSIInquiryResponse.Length - 58) / 2; - - decoded.VersionDescriptors = new ushort[descriptorsNo]; - - for(int i = 0; i < descriptorsNo; i++) - decoded.VersionDescriptors[i] = BitConverter.ToUInt16(SCSIInquiryResponse, 58 + (i * 2)); - } - - if(SCSIInquiryResponse.Length >= 75 && - SCSIInquiryResponse.Length < 96) - { - decoded.Reserved5 = new byte[SCSIInquiryResponse.Length - 74]; - Array.Copy(SCSIInquiryResponse, 74, decoded.Reserved5, 0, SCSIInquiryResponse.Length - 74); - } - - if(SCSIInquiryResponse.Length >= 96) - { - decoded.Reserved5 = new byte[22]; - Array.Copy(SCSIInquiryResponse, 74, decoded.Reserved5, 0, 22); - } - - if(SCSIInquiryResponse.Length > 96) - { - decoded.VendorSpecific2 = new byte[SCSIInquiryResponse.Length - 96]; - Array.Copy(SCSIInquiryResponse, 96, decoded.VendorSpecific2, 0, SCSIInquiryResponse.Length - 96); - } - - if(SCSIInquiryResponse.Length >= 144) - { - // Seagate 2 - decoded.Seagate2Present = true; - decoded.Seagate_Copyright = new byte[48]; - Array.Copy(SCSIInquiryResponse, 96, decoded.Seagate_Copyright, 0, 48); - } - - if(SCSIInquiryResponse.Length < 148) - return decoded; - - // Seagate 2 - decoded.Seagate3Present = true; - decoded.Seagate_ServoPROMPartNo = new byte[4]; - Array.Copy(SCSIInquiryResponse, 144, decoded.Seagate_ServoPROMPartNo, 0, 4); - - return decoded; - } - - /// Encodes a SCSI INQUIRY response - /// Decoded SCSI INQUIRY - /// Raw SCSI INQUIRY response - public static byte[] Encode(Inquiry? inq) - { - if(inq is null) - return null; - - Inquiry decoded = inq.Value; - - byte[] buffer = new byte[512]; - byte length = 0; - - buffer[0] = (byte)(decoded.PeripheralQualifier << 5); - buffer[0] += decoded.PeripheralDeviceType; - - if(decoded.RMB) - buffer[1] = 0x80; - - buffer[1] += decoded.DeviceTypeModifier; - - buffer[2] = (byte)(decoded.ISOVersion << 6); - buffer[2] += (byte)(decoded.ECMAVersion << 3); - buffer[2] += decoded.ANSIVersion; - - if(decoded.AERC) - buffer[3] = 0x80; - - if(decoded.TrmTsk) - buffer[3] += 0x40; - - if(decoded.NormACA) - buffer[3] += 0x20; - - if(decoded.HiSup) - buffer[3] += 0x10; - - buffer[3] += decoded.ResponseDataFormat; - - if(decoded.AdditionalLength > 0) - { - length = 5; - buffer[4] = decoded.AdditionalLength; - } - - if(decoded.SCCS || - decoded.ACC || - decoded.TPGS > 0 || - decoded.ThreePC || - decoded.Reserved2 > 0 || - decoded.Protect) - { - length = 6; - - if(decoded.SCCS) - buffer[5] = 0x80; - - if(decoded.ACC) - buffer[5] += 0x40; - - buffer[5] += (byte)(decoded.TPGS << 4); - - if(decoded.ThreePC) - buffer[5] += 0x08; - - buffer[5] += (byte)(decoded.Reserved2 << 1); - - if(decoded.Protect) - buffer[5] += 0x01; - } - - if(decoded.BQue || - decoded.EncServ || - decoded.VS1 || - decoded.MultiP || - decoded.MChngr || - decoded.ACKREQQ || - decoded.Addr32 || - decoded.Addr16) - { - length = 7; - - if(decoded.BQue) - buffer[6] = 0x80; - - if(decoded.EncServ) - buffer[6] += 0x40; - - if(decoded.VS1) - buffer[6] += 0x20; - - if(decoded.MultiP) - buffer[6] += 0x10; - - if(decoded.MChngr) - buffer[6] += 0x08; - - if(decoded.ACKREQQ) - buffer[6] += 0x04; - - if(decoded.Addr32) - buffer[6] += 0x02; - - if(decoded.Addr16) - buffer[6] += 0x01; - } - - if(decoded.RelAddr || - decoded.WBus32 || - decoded.WBus16 || - decoded.Sync || - decoded.Linked || - decoded.TranDis || - decoded.CmdQue || - decoded.SftRe) - - { - length = 8; - - if(decoded.RelAddr) - buffer[7] = 0x80; - - if(decoded.WBus32) - buffer[7] += 0x40; - - if(decoded.WBus16) - buffer[7] += 0x20; - - if(decoded.Sync) - buffer[7] += 0x10; - - if(decoded.Linked) - buffer[7] += 0x08; - - if(decoded.TranDis) - buffer[7] += 0x04; - - if(decoded.CmdQue) - buffer[7] += 0x02; - - if(decoded.SftRe) - buffer[7] += 0x01; - } - - if(decoded.VendorIdentification != null) - { - length = 16; - - Array.Copy(decoded.VendorIdentification, 0, buffer, 8, - decoded.VendorIdentification.Length >= 8 ? 8 : decoded.VendorIdentification.Length); - } - - if(decoded.ProductIdentification != null) - { - length = 32; - - Array.Copy(decoded.ProductIdentification, 0, buffer, 16, - decoded.ProductIdentification.Length >= 16 ? 16 : decoded.ProductIdentification.Length); - } - - if(decoded.ProductRevisionLevel != null) - { - length = 36; - - Array.Copy(decoded.ProductRevisionLevel, 0, buffer, 32, - decoded.ProductRevisionLevel.Length >= 4 ? 4 : decoded.ProductRevisionLevel.Length); - } - - if(decoded.Seagate_DriveSerialNumber != null) - { - length = 44; - Array.Copy(decoded.Seagate_DriveSerialNumber, 0, buffer, 36, 8); - } - - if(decoded.KreonIdentifier != null && - decoded.KreonVersion != null) - { - length = 46; - Array.Copy(decoded.KreonIdentifier, 0, buffer, 36, 5); - buffer[41] = decoded.KreonSpace; - Array.Copy(decoded.KreonVersion, 0, buffer, 42, 5); - } - - if(decoded.HP_WORM || - decoded.HP_WORMVersion > 0 || - decoded.HP_OBDR != null) - { - length = 49; - - if(decoded.HP_WORM) - buffer[40] = 0x01; - - buffer[40] += (byte)(decoded.HP_WORMVersion << 1); - Array.Copy(decoded.HP_OBDR, 0, buffer, 43, 6); - } - - if(decoded.IsHiMD) - { - length = 56; - Array.Copy(HiMDSignatureContents, 0, buffer, 36, 8); - - if(decoded.HiMDSpecific != null) - Array.Copy(decoded.HiMDSpecific, 0, buffer, 44, 12); - } - - if(decoded.VendorSpecific != null && - !decoded.IsHiMD) - { - length = 56; - Array.Copy(decoded.VendorSpecific, 0, buffer, 36, 20); - } - - if(decoded.Reserved3 > 0 || - decoded.Clocking > 0 || - decoded.QAS || - decoded.IUS) - { - length = 57; - buffer[56] = (byte)(decoded.Reserved3 << 4); - buffer[56] += (byte)(decoded.Clocking << 2); - - if(decoded.QAS) - buffer[56] += 0x02; - - if(decoded.IUS) - buffer[56] += 0x01; - } - - if(decoded.Reserved4 != 0) - { - length = 58; - buffer[57] = decoded.Reserved4; - } - - if(decoded.VersionDescriptors != null) - { - length = (byte)(58 + (decoded.VersionDescriptors.Length * 2)); - - for(int i = 0; i < decoded.VersionDescriptors.Length; i++) - Array.Copy(BitConverter.GetBytes(decoded.VersionDescriptors[i]), 0, buffer, 56 + (i * 2), 2); - } - - if(decoded.Reserved5 != null) - { - length = (byte)(74 + decoded.Reserved5.Length); - Array.Copy(decoded.Reserved5, 0, buffer, 74, decoded.Reserved5.Length); - } - - if(decoded.VendorSpecific2 != null) - { - length = (byte)(96 + decoded.VendorSpecific2.Length); - Array.Copy(decoded.VendorSpecific2, 0, buffer, 96, decoded.VendorSpecific2.Length); - } - - if(decoded.Seagate_Copyright != null) - { - length = 144; - Array.Copy(decoded.Seagate_Copyright, 0, buffer, 96, 48); - } - - if(decoded.Seagate_ServoPROMPartNo != null) - { - length = 148; - Array.Copy(decoded.Seagate_ServoPROMPartNo, 0, buffer, 144, 4); - } - - buffer[4] = length; - byte[] dest = new byte[length]; - Array.Copy(buffer, 0, dest, 0, length); - - return dest; - } - #endregion Public methods - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Structs/Devices/SCSI/Modes/2A.cs b/Aaru.CommonTypes/Structs/Devices/SCSI/Modes/2A.cs deleted file mode 100644 index 6541cf3..0000000 --- a/Aaru.CommonTypes/Structs/Devices/SCSI/Modes/2A.cs +++ /dev/null @@ -1,514 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : 2A.cs -// Author(s) : Natalia Portillo -// -// Component : Common structures for SCSI devices. -// -// --[ Description ] ---------------------------------------------------------- -// -// Decodes SCSI MODE PAGE 2Ah: CD-ROM capabilities page. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.ComponentModel.DataAnnotations; -using System.Diagnostics.CodeAnalysis; -using Newtonsoft.Json; - -namespace Aaru.CommonTypes.Structs.Devices.SCSI.Modes -{ - #region Mode Page 0x2A: CD-ROM capabilities page - /// - /// CD-ROM capabilities page Page code 0x2A 16 bytes in OB-U0077C 20 bytes in SFF-8020i 22 bytes in MMC-1 26 bytes - /// in MMC-2 Variable bytes in MMC-3 - /// - [SuppressMessage("ReSharper", "InconsistentNaming"), SuppressMessage("ReSharper", "MemberCanBeInternal"), - SuppressMessage("ReSharper", "MemberCanBePrivate.Global"), SuppressMessage("ReSharper", "NotAccessedField.Global")] - public class ModePage_2A - { - /// Write speed performance descriptors - public ModePage_2A_WriteDescriptor[] WriteSpeedPerformanceDescriptors; - /// Parameters can be saved - public bool PS { get; set; } - /// Drive supports multi-session and/or Photo-CD - public bool MultiSession { get; set; } - /// Drive is capable of reading sectors in Mode 2 Form 2 format - public bool Mode2Form2 { get; set; } - /// Drive is capable of reading sectors in Mode 2 Form 1 format - public bool Mode2Form1 { get; set; } - /// Drive is capable of playing audio - public bool AudioPlay { get; set; } - /// Drive can return the ISRC - public bool ISRC { get; set; } - /// Drive can return the media catalogue number - public bool UPC { get; set; } - /// Drive can return C2 pointers - public bool C2Pointer { get; set; } - /// Drive can read, deinterlave and correct R-W subchannels - public bool DeinterlaveSubchannel { get; set; } - /// Drive can read interleaved and uncorrected R-W subchannels - public bool Subchannel { get; set; } - /// Drive can continue from a loss of streaming on audio reading - public bool AccurateCDDA { get; set; } - /// Audio can be read as digital data - public bool CDDACommand { get; set; } - /// Loading Mechanism Type - public byte LoadingMechanism { get; set; } - /// Drive can eject discs - public bool Eject { get; set; } - /// Drive's optional prevent jumper status - public bool PreventJumper { get; set; } - /// Current lock status - public bool LockState { get; set; } - /// Drive can lock media - public bool Lock { get; set; } - /// Each channel can be muted independently - public bool SeparateChannelMute { get; set; } - /// Each channel's volume can be controlled independently - public bool SeparateChannelVolume { get; set; } - /// Maximum drive speed in Kbytes/second - public ushort MaximumSpeed { get; set; } - /// Supported volume levels - public ushort SupportedVolumeLevels { get; set; } - /// Buffer size in Kbytes - public ushort BufferSize { get; set; } - /// Current drive speed in Kbytes/second - public ushort CurrentSpeed { get; set; } - - /// Can read packet media - public bool Method2 { get; set; } - /// Can read CD-RW - public bool ReadCDRW { get; set; } - /// Can read CD-R - public bool ReadCDR { get; set; } - /// Can write CD-RW - public bool WriteCDRW { get; set; } - /// Can write CD-R - public bool WriteCDR { get; set; } - /// Supports IEC-958 digital output on port 2 - public bool DigitalPort2 { get; set; } - /// Supports IEC-958 digital output on port 1 - public bool DigitalPort1 { get; set; } - /// Can deliver a composite audio and video data stream - public bool Composite { get; set; } - /// This bit controls the behavior of the LOAD/UNLOAD command when trying to load a Slot with no Disc present - public bool SSS { get; set; } - /// Contains a changer that can report the exact contents of the slots - public bool SDP { get; set; } - /// Page length - public byte Length { get; set; } - /// Set if LSB comes first - public bool LSBF { get; set; } - /// Set if HIGH on LRCK indicates left channel. Clear if HIGH on LRCK indicates right channel. - public bool RCK { get; set; } - /// - /// Set if data valid on the falling edge of the BCK signal. Clear if data valid on the rising edge of the BCK - /// signal - /// - public bool BCK { get; set; } - - /// Can do a test write - public bool TestWrite { get; set; } - /// Maximum write speed - public ushort MaxWriteSpeed { get; set; } - /// Current write speed - public ushort CurrentWriteSpeed { get; set; } - /// Can read disc's barcode - public bool ReadBarcode { get; set; } - /// Can read DVD-RAM - public bool ReadDVDRAM { get; set; } - /// Can read DVD-R - public bool ReadDVDR { get; set; } - /// Can read DVD-ROM - public bool ReadDVDROM { get; set; } - /// Can write DVD-RAM - public bool WriteDVDRAM { get; set; } - /// Can write DVD-R - public bool WriteDVDR { get; set; } - /// Can read raw R-W subchannel from the Lead-In - public bool LeadInPW { get; set; } - /// Can read both sides of a disc - public bool SCC { get; set; } - /// Support copyright management - public ushort CMRSupported { get; set; } - /// Supports buffer under-run free recording - public bool BUF { get; set; } - /// Selected rotational control - public byte RotationControlSelected { get; set; } - /// Current write speed selected - public ushort CurrentWriteSpeedSelected { get; set; } - - /// Database ID - [JsonIgnore, Key] - public int Id { get; set; } - - /// Decodes the page 2Ah of a MODE SENSE response - /// Raw page 2Ah - /// Decoded page 2Ah - public static ModePage_2A Decode(byte[] pageResponse) - { - if((pageResponse?[0] & 0x40) == 0x40) - return null; - - if((pageResponse?[0] & 0x3F) != 0x2A) - return null; - - if(pageResponse[1] + 2 != pageResponse.Length) - return null; - - if(pageResponse.Length < 16) - return null; - - var decoded = new ModePage_2A(); - - decoded.PS |= (pageResponse[0] & 0x80) == 0x80; - - decoded.AudioPlay |= (pageResponse[4] & 0x01) == 0x01; - decoded.Mode2Form1 |= (pageResponse[4] & 0x10) == 0x10; - decoded.Mode2Form2 |= (pageResponse[4] & 0x20) == 0x20; - decoded.MultiSession |= (pageResponse[4] & 0x40) == 0x40; - - decoded.CDDACommand |= (pageResponse[5] & 0x01) == 0x01; - decoded.AccurateCDDA |= (pageResponse[5] & 0x02) == 0x02; - decoded.Subchannel |= (pageResponse[5] & 0x04) == 0x04; - decoded.DeinterlaveSubchannel |= (pageResponse[5] & 0x08) == 0x08; - decoded.C2Pointer |= (pageResponse[5] & 0x10) == 0x10; - decoded.UPC |= (pageResponse[5] & 0x20) == 0x20; - decoded.ISRC |= (pageResponse[5] & 0x40) == 0x40; - - decoded.LoadingMechanism = (byte)((pageResponse[6] & 0xE0) >> 5); - decoded.Lock |= (pageResponse[6] & 0x01) == 0x01; - decoded.LockState |= (pageResponse[6] & 0x02) == 0x02; - decoded.PreventJumper |= (pageResponse[6] & 0x04) == 0x04; - decoded.Eject |= (pageResponse[6] & 0x08) == 0x08; - - decoded.SeparateChannelVolume |= (pageResponse[7] & 0x01) == 0x01; - decoded.SeparateChannelMute |= (pageResponse[7] & 0x02) == 0x02; - - decoded.MaximumSpeed = (ushort)((pageResponse[8] << 8) + pageResponse[9]); - decoded.SupportedVolumeLevels = (ushort)((pageResponse[10] << 8) + pageResponse[11]); - decoded.BufferSize = (ushort)((pageResponse[12] << 8) + pageResponse[13]); - decoded.CurrentSpeed = (ushort)((pageResponse[14] << 8) + pageResponse[15]); - - if(pageResponse.Length < 20) - return decoded; - - decoded.Method2 |= (pageResponse[2] & 0x04) == 0x04; - decoded.ReadCDRW |= (pageResponse[2] & 0x02) == 0x02; - decoded.ReadCDR |= (pageResponse[2] & 0x01) == 0x01; - - decoded.WriteCDRW |= (pageResponse[3] & 0x02) == 0x02; - decoded.WriteCDR |= (pageResponse[3] & 0x01) == 0x01; - - decoded.Composite |= (pageResponse[4] & 0x02) == 0x02; - decoded.DigitalPort1 |= (pageResponse[4] & 0x04) == 0x04; - decoded.DigitalPort2 |= (pageResponse[4] & 0x08) == 0x08; - - decoded.SDP |= (pageResponse[7] & 0x04) == 0x04; - decoded.SSS |= (pageResponse[7] & 0x08) == 0x08; - - decoded.Length = (byte)((pageResponse[17] & 0x30) >> 4); - decoded.LSBF |= (pageResponse[17] & 0x08) == 0x08; - decoded.RCK |= (pageResponse[17] & 0x04) == 0x04; - decoded.BCK |= (pageResponse[17] & 0x02) == 0x02; - - if(pageResponse.Length < 22) - return decoded; - - decoded.TestWrite |= (pageResponse[3] & 0x04) == 0x04; - decoded.MaxWriteSpeed = (ushort)((pageResponse[18] << 8) + pageResponse[19]); - decoded.CurrentWriteSpeed = (ushort)((pageResponse[20] << 8) + pageResponse[21]); - - decoded.ReadBarcode |= (pageResponse[5] & 0x80) == 0x80; - - if(pageResponse.Length < 26) - return decoded; - - decoded.ReadDVDRAM |= (pageResponse[2] & 0x20) == 0x20; - decoded.ReadDVDR |= (pageResponse[2] & 0x10) == 0x10; - decoded.ReadDVDROM |= (pageResponse[2] & 0x08) == 0x08; - - decoded.WriteDVDRAM |= (pageResponse[3] & 0x20) == 0x20; - decoded.WriteDVDR |= (pageResponse[3] & 0x10) == 0x10; - - decoded.LeadInPW |= (pageResponse[3] & 0x20) == 0x20; - decoded.SCC |= (pageResponse[3] & 0x10) == 0x10; - - decoded.CMRSupported = (ushort)((pageResponse[22] << 8) + pageResponse[23]); - - if(pageResponse.Length < 32) - return decoded; - - decoded.BUF |= (pageResponse[4] & 0x80) == 0x80; - decoded.RotationControlSelected = (byte)(pageResponse[27] & 0x03); - decoded.CurrentWriteSpeedSelected = (ushort)((pageResponse[28] << 8) + pageResponse[29]); - - ushort descriptors = (ushort)((pageResponse.Length - 32) / 4); - decoded.WriteSpeedPerformanceDescriptors = new ModePage_2A_WriteDescriptor[descriptors]; - - for(int i = 0; i < descriptors; i++) - decoded.WriteSpeedPerformanceDescriptors[i] = new ModePage_2A_WriteDescriptor - { - RotationControl = (byte)(pageResponse[1 + 32 + (i * 4)] & 0x07), - WriteSpeed = (ushort)((pageResponse[2 + 32 + (i * 4)] << 8) + pageResponse[3 + 32 + (i * 4)]) - }; - - return decoded; - } - - /// Encodes a page 2Ah of a MODE SENSE response - /// Decoded page 2Ah - /// Raw page 2Ah - public static byte[] Encode(ModePage_2A decoded) - { - byte[] pageResponse = new byte[512]; - byte length = 16; - - pageResponse[0] = 0x2A; - - if(decoded.PS) - pageResponse[0] += 0x80; - - if(decoded.AudioPlay) - pageResponse[4] += 0x01; - - if(decoded.Mode2Form1) - pageResponse[4] += 0x10; - - if(decoded.Mode2Form2) - pageResponse[4] += 0x20; - - if(decoded.MultiSession) - pageResponse[4] += 0x40; - - if(decoded.CDDACommand) - pageResponse[5] += 0x01; - - if(decoded.AccurateCDDA) - pageResponse[5] += 0x02; - - if(decoded.Subchannel) - pageResponse[5] += 0x04; - - if(decoded.DeinterlaveSubchannel) - pageResponse[5] += 0x08; - - if(decoded.C2Pointer) - pageResponse[5] += 0x10; - - if(decoded.UPC) - pageResponse[5] += 0x20; - - if(decoded.ISRC) - pageResponse[5] += 0x40; - - decoded.LoadingMechanism = (byte)((pageResponse[6] & 0xE0) >> 5); - - if(decoded.Lock) - pageResponse[6] += 0x01; - - if(decoded.LockState) - pageResponse[6] += 0x02; - - if(decoded.PreventJumper) - pageResponse[6] += 0x04; - - if(decoded.Eject) - pageResponse[6] += 0x08; - - if(decoded.SeparateChannelVolume) - pageResponse[7] += 0x01; - - if(decoded.SeparateChannelMute) - pageResponse[7] += 0x02; - - decoded.MaximumSpeed = (ushort)((pageResponse[8] << 8) + pageResponse[9]); - decoded.SupportedVolumeLevels = (ushort)((pageResponse[10] << 8) + pageResponse[11]); - decoded.BufferSize = (ushort)((pageResponse[12] << 8) + pageResponse[13]); - decoded.CurrentSpeed = (ushort)((pageResponse[14] << 8) + pageResponse[15]); - - if(decoded.Method2 || - decoded.ReadCDRW || - decoded.ReadCDR || - decoded.WriteCDRW || - decoded.WriteCDR || - decoded.Composite || - decoded.DigitalPort1 || - decoded.DigitalPort2 || - decoded.SDP || - decoded.SSS || - decoded.Length > 0 || - decoded.LSBF || - decoded.RCK || - decoded.BCK) - { - length = 20; - - if(decoded.Method2) - pageResponse[2] += 0x04; - - if(decoded.ReadCDRW) - pageResponse[2] += 0x02; - - if(decoded.ReadCDR) - pageResponse[2] += 0x01; - - if(decoded.WriteCDRW) - pageResponse[3] += 0x02; - - if(decoded.WriteCDR) - pageResponse[3] += 0x01; - - if(decoded.Composite) - pageResponse[4] += 0x02; - - if(decoded.DigitalPort1) - pageResponse[4] += 0x04; - - if(decoded.DigitalPort2) - pageResponse[4] += 0x08; - - if(decoded.SDP) - pageResponse[7] += 0x04; - - if(decoded.SSS) - pageResponse[7] += 0x08; - - pageResponse[17] = (byte)(decoded.Length << 4); - - if(decoded.LSBF) - pageResponse[17] += 0x08; - - if(decoded.RCK) - pageResponse[17] += 0x04; - - if(decoded.BCK) - pageResponse[17] += 0x02; - } - - if(decoded.TestWrite || - decoded.MaxWriteSpeed > 0 || - decoded.CurrentWriteSpeed > 0 || - decoded.ReadBarcode) - { - length = 22; - - if(decoded.TestWrite) - pageResponse[3] += 0x04; - - pageResponse[18] = (byte)((decoded.MaxWriteSpeed & 0xFF00) >> 8); - pageResponse[19] = (byte)(decoded.MaxWriteSpeed & 0xFF); - pageResponse[20] = (byte)((decoded.CurrentWriteSpeed & 0xFF00) >> 8); - pageResponse[21] = (byte)(decoded.CurrentWriteSpeed & 0xFF); - - if(decoded.ReadBarcode) - pageResponse[5] += 0x80; - } - - if(decoded.ReadDVDRAM || - decoded.ReadDVDR || - decoded.ReadDVDROM || - decoded.WriteDVDRAM || - decoded.WriteDVDR || - decoded.LeadInPW || - decoded.SCC || - decoded.CMRSupported > 0) - - { - length = 26; - - if(decoded.ReadDVDRAM) - pageResponse[2] += 0x20; - - if(decoded.ReadDVDR) - pageResponse[2] += 0x10; - - if(decoded.ReadDVDROM) - pageResponse[2] += 0x08; - - if(decoded.WriteDVDRAM) - pageResponse[3] += 0x20; - - if(decoded.WriteDVDR) - pageResponse[3] += 0x10; - - if(decoded.LeadInPW) - pageResponse[3] += 0x20; - - if(decoded.SCC) - pageResponse[3] += 0x10; - - pageResponse[22] = (byte)((decoded.CMRSupported & 0xFF00) >> 8); - pageResponse[23] = (byte)(decoded.CMRSupported & 0xFF); - } - - if(decoded.BUF || - decoded.RotationControlSelected > 0 || - decoded.CurrentWriteSpeedSelected > 0) - { - length = 32; - - if(decoded.BUF) - pageResponse[4] += 0x80; - - pageResponse[27] += decoded.RotationControlSelected; - pageResponse[28] = (byte)((decoded.CurrentWriteSpeedSelected & 0xFF00) >> 8); - pageResponse[29] = (byte)(decoded.CurrentWriteSpeedSelected & 0xFF); - } - - if(decoded.WriteSpeedPerformanceDescriptors != null) - { - length = 32; - - for(int i = 0; i < decoded.WriteSpeedPerformanceDescriptors.Length; i++) - { - length += 4; - pageResponse[1 + 32 + (i * 4)] = decoded.WriteSpeedPerformanceDescriptors[i].RotationControl; - - pageResponse[2 + 32 + (i * 4)] = - (byte)((decoded.WriteSpeedPerformanceDescriptors[i].WriteSpeed & 0xFF00) >> 8); - - pageResponse[3 + 32 + (i * 4)] = - (byte)(decoded.WriteSpeedPerformanceDescriptors[i].WriteSpeed & 0xFF); - } - } - - pageResponse[1] = (byte)(length - 2); - byte[] buf = new byte[length]; - Array.Copy(pageResponse, 0, buf, 0, length); - - return buf; - } - } - - /// Page 2Ah write descriptor - [SuppressMessage("ReSharper", "InconsistentNaming")] - public struct ModePage_2A_WriteDescriptor - { - /// Rotational control - public byte RotationControl; - /// Write speed - public ushort WriteSpeed; - } - #endregion Mode Page 0x2A: CD-ROM capabilities page -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Structs/Filesystems.cs b/Aaru.CommonTypes/Structs/Filesystems.cs deleted file mode 100644 index 985ced8..0000000 --- a/Aaru.CommonTypes/Structs/Filesystems.cs +++ /dev/null @@ -1,281 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Structs.cs -// Author(s) : Natalia Portillo -// -// Component : Common structures. -// -// --[ Description ] ---------------------------------------------------------- -// -// Contains enumerations and structures of common usage by filesystem -// plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Runtime.InteropServices; -using Newtonsoft.Json; - -namespace Aaru.CommonTypes.Structs -{ - /// File attributes. - [Flags] - public enum FileAttributes : ulong - { - /// File has no attributes - None = 0, - /// File is an alias (Mac OS) - Alias = 0x01, - /// Indicates that the file can only be writable appended - AppendOnly = 0x02, - /// File is candidate for archival/backup - Archive = 0x04, - /// File is a block device - BlockDevice = 0x08, - /// File is stored on filesystem block units instead of device sectors - BlockUnits = 0x10, - /// Directory is a bundle or file contains a BNDL resource - Bundle = 0x20, - /// File is a char device - CharDevice = 0x40, - /// File is compressed - Compressed = 0x80, - /// File is compressed and should not be uncompressed on read - CompressedRaw = 0x100, - /// File has compression errors - CompressionError = 0x200, - /// Compressed file is dirty - CompressionDirty = 0x400, - /// File is a device - Device = 0x800, - /// File is a directory - Directory = 0x1000, - /// File is encrypted - Encrypted = 0x2000, - /// File is stored on disk using extents - Extents = 0x4000, - /// File is a FIFO - FIFO = 0x8000, - /// File is a normal file - File = 0x10000, - /// File is a Mac OS file containing desktop databases that has already been added to the desktop database - HasBeenInited = 0x20000, - /// File contains an icon resource / EA - HasCustomIcon = 0x40000, - /// File is a Mac OS extension or control panel lacking INIT resources - HasNoINITs = 0x80000, - /// File is hidden/invisible - Hidden = 0x100000, - /// File cannot be written, deleted, modified or linked to - Immutable = 0x200000, - /// Directory is indexed using hashed trees - IndexedDirectory = 0x400000, - /// File contents are stored alongside its inode (or equivalent) - Inline = 0x800000, - /// File contains integrity checks - IntegrityStream = 0x1000000, - /// File is on desktop - IsOnDesk = 0x2000000, - /// File changes are written to filesystem journal before being written to file itself - Journaled = 0x4000000, - /// Access time will not be modified - NoAccessTime = 0x8000000, - /// File will not be subject to copy-on-write - NoCopyOnWrite = 0x10000000, - /// File will not be backed up - NoDump = 0x20000000, - /// File contents should not be scrubbed - NoScrub = 0x40000000, - /// File contents should not be indexed - NotIndexed = 0x80000000, - /// File is offline - Offline = 0x100000000, - /// File is password protected, but contents are not encrypted on disk - Password = 0x200000000, - /// File is read-only - ReadOnly = 0x400000000, - /// File is a reparse point - ReparsePoint = 0x800000000, - /// When file is removed its content will be overwritten with zeroes - Secured = 0x1000000000, - /// File contents are sparse - Sparse = 0x2000000000, - /// File is a shadow (OS/2) - Shadow = 0x4000000000, - /// File is shared - Shared = 0x8000000000, - /// File is a stationery - Stationery = 0x10000000000, - /// File is a symbolic link - Symlink = 0x20000000000, - /// File writes are synchronously written to disk - Sync = 0x40000000000, - /// File belongs to the operating system - System = 0x80000000000, - /// If file end is a partial block its content will be merged with other files - TailMerged = 0x100000000000, - /// File is temporary - Temporary = 0x200000000000, - /// Subdirectories inside of this directory are not related and should be allocated elsewhere - TopDirectory = 0x400000000000, - /// If file is deleted, contents should be stored, for a possible future undeletion - Undeletable = 0x800000000000, - /// File is a pipe - Pipe = 0x1000000000000, - /// File is a socket - Socket = 0x2000000000000 - } - - /// Information about a file entry - public class FileEntryInfo - { - /// File attributes - public FileAttributes Attributes { get; set; } - /// File length in blocks - public long Blocks { get; set; } - /// File block size in bytes - public long BlockSize { get; set; } - /// If file points to a device, device number. Null if the underlying filesystem does not support them. - public ulong? DeviceNo { get; set; } - /// POSIX group ID. Null if the underlying filesystem does not support them. - public ulong? GID { get; set; } - /// inode number for this file (or other unique identifier for the volume) - public ulong Inode { get; set; } - /// File length in bytes - public long Length { get; set; } - /// Number of hard links pointing to this file (. and .. entries count as hard links) - public ulong Links { get; set; } - /// POSIX permissions/mode for this file. Null if the underlying filesystem does not support them. - public uint? Mode { get; set; } - /// POSIX owner ID. Null if the underlying filesystem does not support them. - public ulong? UID { get; set; } - /// File creation date in UTC. Null if the underlying filesystem does not support them. - public DateTime? CreationTimeUtc { get; set; } - /// File last access date in UTC. Null if the underlying filesystem does not support them. - public DateTime? AccessTimeUtc { get; set; } - /// File attributes change date in UTC. Null if the underlying filesystem does not support them. - public DateTime? StatusChangeTimeUtc { get; set; } - /// File last backup date in UTC. Null if the underlying filesystem does not support them. - public DateTime? BackupTimeUtc { get; set; } - /// File last modification date in UTC. Null if the underlying filesystem does not support them. - public DateTime? LastWriteTimeUtc { get; set; } - - /// File creation date. Null if the underlying filesystem does not support them. - [JsonIgnore] - public DateTime? CreationTime - { - get => CreationTimeUtc?.ToLocalTime(); - set => CreationTimeUtc = value?.ToUniversalTime(); - } - - /// File last access date. Null if the underlying filesystem does not support them. - [JsonIgnore] - public DateTime? AccessTime - { - get => AccessTimeUtc?.ToLocalTime(); - set => AccessTimeUtc = value?.ToUniversalTime(); - } - - /// File attributes change date. Null if the underlying filesystem does not support them. - [JsonIgnore] - public DateTime? StatusChangeTime - { - get => StatusChangeTimeUtc?.ToLocalTime(); - set => StatusChangeTimeUtc = value?.ToUniversalTime(); - } - - /// File last backup date. Null if the underlying filesystem does not support them. - [JsonIgnore] - public DateTime? BackupTime - { - get => BackupTimeUtc?.ToLocalTime(); - set => BackupTimeUtc = value?.ToUniversalTime(); - } - - /// File last modification date. Null if the underlying filesystem does not support them. - [JsonIgnore] - public DateTime? LastWriteTime - { - get => LastWriteTimeUtc?.ToLocalTime(); - set => LastWriteTimeUtc = value?.ToUniversalTime(); - } - } - - /// Information about a volume - public class FileSystemInfo - { - /// Blocks for this filesystem - public ulong Blocks; - /// Maximum length of filenames on this filesystem - public ushort FilenameLength; - /// Files on this filesystem - public ulong Files; - /// Blocks free on this filesystem - public ulong FreeBlocks; - /// Free inodes on this filesystem - public ulong FreeFiles; - /// Filesystem ID - public FileSystemId Id; - /// ID of plugin for this file - public Guid PluginId; - /// Filesystem type - public string Type; - - /// Initializes an empty instance of this structure - public FileSystemInfo() => Id = new FileSystemId(); - - /// Gets a clone of this structure - /// Clone of this structure - public FileSystemInfo ShallowCopy() => (FileSystemInfo)MemberwiseClone(); - } - - /// Stores a filesystem volume unique identifier or serial number - [StructLayout(LayoutKind.Explicit)] - public struct FileSystemId - { - /// Set to true if the identifier is a 32-bit integer - [FieldOffset(0)] - public bool IsInt; - /// Set to true if the identifier is a 64-bit integer - [FieldOffset(1)] - public bool IsLong; - /// Set to true if the identifier is a GUID - [FieldOffset(2)] - public bool IsGuid; - - /// Identifier as a 32-bit integer - [FieldOffset(3)] - public uint Serial32; - /// Identifier as a 64-bit integer - [FieldOffset(3)] - public ulong Serial64; - /// Identifier as a GUID - [FieldOffset(3)] - public Guid uuid; - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Structs/Images.cs b/Aaru.CommonTypes/Structs/Images.cs deleted file mode 100644 index 48aad8d..0000000 --- a/Aaru.CommonTypes/Structs/Images.cs +++ /dev/null @@ -1,190 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : IMediaImage.cs -// Author(s) : Natalia Portillo -// -// Component : Common structures. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines structures to be used by media image plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using Aaru.CommonTypes.Enums; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.CommonTypes.Structs -{ - /// Contains information about a dump image and its contents - public struct ImageInfo - { - /// Image contains partitions (or tracks for optical media) - public bool HasPartitions; - /// Image contains sessions (optical media only) - public bool HasSessions; - /// Size of the image without headers - public ulong ImageSize; - /// Sectors contained in the image - public ulong Sectors; - /// Size of sectors contained in the image - public uint SectorSize; - /// Media tags contained by the image - public List ReadableMediaTags; - /// Sector tags contained by the image - public List ReadableSectorTags; - /// Image version - public string Version; - /// Application that created the image - public string Application; - /// Version of the application that created the image - public string ApplicationVersion; - /// Who (person) created the image? - public string Creator; - /// Image creation time - public DateTime CreationTime; - /// Image last modification time - public DateTime LastModificationTime; - /// Title of the media represented by the image - public string MediaTitle; - /// Image comments - public string Comments; - /// Manufacturer of the media represented by the image - public string MediaManufacturer; - /// Model of the media represented by the image - public string MediaModel; - /// Serial number of the media represented by the image - public string MediaSerialNumber; - /// Barcode of the media represented by the image - public string MediaBarcode; - /// Part number of the media represented by the image - public string MediaPartNumber; - /// Media type represented by the image - public MediaType MediaType; - /// Number in sequence for the media represented by the image - public int MediaSequence; - /// Last media of the sequence the media represented by the image corresponds to - public int LastMediaSequence; - /// Manufacturer of the drive used to read the media represented by the image - public string DriveManufacturer; - /// Model of the drive used to read the media represented by the image - public string DriveModel; - /// Serial number of the drive used to read the media represented by the image - public string DriveSerialNumber; - /// Firmware revision of the drive used to read the media represented by the image - public string DriveFirmwareRevision; - /// Type of the media represented by the image to use in XML sidecars - public XmlMediaType XmlMediaType; - - // CHS geometry... - /// Cylinders of the media represented by the image - public uint Cylinders; - /// Heads of the media represented by the image - public uint Heads; - /// Sectors per track of the media represented by the image (for variable image, the smallest) - public uint SectorsPerTrack; - } - - /// Session defining structure. - public struct Session - { - /// Session number, 1-started - public ushort Sequence; - /// First track present on this session - public uint StartTrack; - /// Last track present on this session - public uint EndTrack; - /// First sector present on this session - public ulong StartSector; - /// Last sector present on this session - public ulong EndSector; - } - - /// Track defining structure. - public class Track - { - /// How many main channel / user data bytes are per sector in this track - public int BytesPerSector; - /// Information that does not find space in this struct - public string Description; - /// Track ending sector - public ulong EndSector; - /// Which file stores this track - public string File; - /// Starting at which byte is this track stored - public ulong FileOffset; - /// What kind of file is storing this track - public string FileType; - /// Which filter stores this track - public IFilter Filter; - /// Indexes, 00 to 99 and sector offset - public Dictionary Indexes; - /// Track pre-gap - public ulong Pregap; - /// How many main channel bytes per sector are in the file with this track - public int RawBytesPerSector; - /// Track number, 1-started - public uint Sequence; - /// Session this track belongs to - public ushort Session; - /// Track starting sector - public ulong StartSector; - /// Which file stores this track's subchannel - public string SubchannelFile; - /// Which filter stores this track's subchannel - public IFilter SubchannelFilter; - /// Starting at which byte are this track's subchannel stored - public ulong SubchannelOffset; - /// Type of subchannel stored for this track - public TrackSubchannelType SubchannelType; - /// Partition type - public TrackType Type; - - /// Initializes an empty instance of this structure - public Track() => Indexes = new Dictionary(); - } - - /// Floppy physical characteristics structure. - public struct FloppyInfo - { - /// Physical floppy type. - public FloppyTypes Type; - /// Bitrate in bits per second used to write the floppy, 0 if unknown or track-variable. - public uint Bitrate; - /// Physical magnetic density (coercivity) of floppy medium. - public FloppyDensities Coercivity; - /// How many physical tracks are actually written in the floppy image. - public ushort Tracks; - /// How many physical heads are actually written in the floppy image. - public byte Heads; - /// How many tracks per inch are actually written in the floppy image. - public ushort TrackDensity; - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Structs/TapeFile.cs b/Aaru.CommonTypes/Structs/TapeFile.cs deleted file mode 100644 index 59630a5..0000000 --- a/Aaru.CommonTypes/Structs/TapeFile.cs +++ /dev/null @@ -1,53 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : TapeFile.cs -// Author(s) : Natalia Portillo -// -// Component : Common structures. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines a structure to hold information about a tape file object. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.CommonTypes.Structs -{ - /// Describes a tape file - public struct TapeFile - { - /// File number - public uint File; - /// Partition number - public byte Partition; - /// First block, inclusive, of the file - public ulong FirstBlock; - /// Last block, inclusive, of the file - public ulong LastBlock; - } -} \ No newline at end of file diff --git a/Aaru.CommonTypes/Structs/TapePartition.cs b/Aaru.CommonTypes/Structs/TapePartition.cs deleted file mode 100644 index 06bf96a..0000000 --- a/Aaru.CommonTypes/Structs/TapePartition.cs +++ /dev/null @@ -1,51 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : TapeFile.cs -// Author(s) : Natalia Portillo -// -// Component : Common structures. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines a structure to hold information about a tape partition. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.CommonTypes.Structs -{ - /// Describes a tape partition - public struct TapePartition - { - /// Partition number - public byte Number; - /// First block, inclusive, of the partition - public ulong FirstBlock; - /// Last block, inclusive, of the partition - public ulong LastBlock; - } -} \ No newline at end of file diff --git a/Aaru.Console/.editorconfig b/Aaru.Console/.editorconfig deleted file mode 100644 index 9181fe5..0000000 --- a/Aaru.Console/.editorconfig +++ /dev/null @@ -1,632 +0,0 @@ -root = true - -[*] -charset = utf-8 -next_line = crlf -insert_final_newline = false -indent_style = space -indent_size = 4 - -# Generic non-language specific ones for Resharper and friends -brace_style = next_line -int_align = true -keep_existing_arrangement = false -place_simple_blocks_on_single_line = true -place_simple_declaration_blocks_on_single_line = true -place_attribute_on_same_line = false -space_after_unary_operator = false -space_after_comma = true -space_around_ternary_operator = true -space_around_binary_operator = true -space_around_member_access_operator = false -space_before_open_square_brackets = false -space_after_keywords_in_control_flow_statements = true -space_before_comma = false -space_between_method_call_name_and_opening_parenthesis = false -space_between_method_declaration_name_and_open_parenthesis = false -space_between_square_brackets = false -space_between_parentheses_of_control_flow_statements = false -accessor_owner_declaration_braces = next_line -accessor_declaration_braces = next_line -case_block_braces = next_line -initializer_braces = next_line -other_braces = next_line -allow_comment_after_lbrace = false -empty_block_style = together_same_line -braces_for_ifelse = not_required -braces_for_for = not_required -braces_for_foreach = not_required -braces_for_while = not_required -braces_for_dowhile = not_required -braces_for_using = not_required -braces_for_lock = not_required -braces_for_fixed = not_required -method_or_operator_body = expression_body -local_function_body = expression_body -constructor_or_destructor_body = expression_body -accessor_owner_body = expression_body -force_attribute_style = join -function_braces = next_line -force_control_statements_braces = always_remove -space_in_singleline_accessorholder = true -type_declaration_braces = next_line -invocable_declaration_braces = next_line -anonymous_method_declaration_braces = next_line -space_between_accessors_in_singleline_property = true -indent_nested_usings_stmt = true -space_within_empty_braces = false -indent_nested_fixed_stmt = true -indent_nested_lock_stmt = true -indent_nested_for_stmt = true -indent_nested_foreach_stmt = true -indent_nested_while_stmt = true -use_continuous_indent_inside_parens = true -indent_method_decl_pars = inside -indent_invocation_pars = inside -indent_statement_pars = inside -indent_typeparam_angles = inside -indent_typearg_angles = inside -indent_pars = inside -indent_preprocessor_if = outdent -indent_preprocessor_region = usual_indent -indent_preprocessor_other = usual_indent -indent_switch_labels = true -indent_type_constraints = true -stick_comment = false -alignment_tab_fill_style = use_spaces -align_multiline_parameter = true -align_multiline_extends_list = true -align_linq_query = true -align_multiline_binary_expressions_chain = true -outdent_binary_ops = true -align_multiline_calls_chain = true -outdent_dots = true -align_multiline_array_and_object_initializer = false -indent_anonymous_method_block = false -align_first_arg_by_paren = true -align_multiline_argument = true -align_tuple_components = true -align_multiline_expression = true -align_multiline_for_stmt = true -align_multiple_declaration = true -align_multline_type_parameter_list = true -align_multline_type_parameter_constrains = true -int_align_fields = true -int_align_properties = true -int_align_methods = true -int_align_parameters = false -int_align_variables = true -int_align_assignments = true -int_align_nested_ternary = true -int_align_invocations = false -int_align_binary_expressions = true -int_align_comments = true -int_align_switch_sections = true -keep_user_linebreaks = false -keep_existing_arrangement = false -keep_existing_linebreaks = false -max_line_length = 120 -wrap_before_comma = false -special_else_if_treatment = true -place_type_attribute_on_same_line = never -place_method_attribute_on_same_line = never -place_accessorholder_attribute_on_same_line = never -place_attribute_on_same_line = never -place_accessor_attribute_on_same_line = never -place_attribute_on_same_line = never -place_field_attribute_on_same_line = never -place_attribute_on_same_line = never -wrap_parameters_style = wrap_if_long -keep_existing_declaration_parens_arrangement = false -wrap_before_declaration_lpar = false -wrap_after_declaration_lpar = false -wrap_before_declaration_rpar = false -place_constructor_initializer_on_same_line = true -keep_existing_expr_member_arrangement = false -place_expr_method_on_single_line = true -place_expr_property_on_single_line = true -place_expr_accessor_on_single_line = true -wrap_before_arrow_with_expressions = false -place_type_constraints_on_same_line = true -wrap_before_first_type_parameter_constraint = true -wrap_multiple_type_parameter_constraints_style = wrap_if_long -wrap_before_type_parameter_langle = true -wrap_before_extends_colon = false -wrap_extends_list_style = wrap_if_long -keep_existing_declaration_block_arrangement = false -place_abstract_accessorholder_on_single_line = true -place_simple_accessorholder_on_single_line = false -place_accessor_with_attrs_holder_on_single_line = false -place_simple_accessor_on_single_line = true -place_simple_method_on_single_line = false -keep_existing_enum_arrangement = false -place_simple_enum_on_single_line = false -wrap_enum_declaration = wrap_if_long -new_line_before_else = true -new_line_before_while = false -wrap_for_stmt_header_style = wrap_if_long -wrap_multiple_declaration_style = wrap_if_long -keep_existing_embedded_arrangement = false -place_simple_embedded_statement_on_same_line = false -place_simple_case_statement_on_same_line = true -keep_existing_embedded_block_arrangement = false -place_simple_embedded_block_on_same_line = false -place_simple_anonymousmethod_on_single_line = false -keep_existing_initializer_arrangement = false -place_simple_initializer_on_single_line = false -wrap_object_and_collection_initializer_style = chop_always -wrap_array_initializer_style = wrap_if_long -wrap_arguments_style = wrap_if_long -keep_existing_invocation_parens_arrangement = false -wrap_after_invocation_lpar = false -wrap_before_invocation_rpar = false -wrap_after_dot_in_method_calls = true -wrap_chained_method_calls = wrap_if_long -wrap_before_binary_opsign = false -wrap_chained_binary_expressions = wrap_if_long -force_chop_compound_if_expression = true -force_chop_compound_while_expression = true -force_chop_compound_do_expression = true -wrap_before_ternary_opsigns = true -wrap_ternary_expr_style = wrap_if_long -nested_ternary_style = expanded -wrap_linq_expressions = wrap_if_long -wrap_before_linq_expression = false -place_linq_into_on_new_line = false -wrap_verbatim_interpolated_strings = wrap_if_long -extra_spaces = remove_all -space_after_keywords_in_control_flow_statements = false -space_between_method_call_name_and_opening_parenthesis = false -space_between_method_declaration_name_and_open_parenthesis = false -space_before_typeof_parentheses = false -space_before_checked_parentheses = false -space_before_sizeof_parentheses = false -space_before_nameof_parentheses = false -space_between_keyword_and_expression = true -space_between_keyword_and_type = true -space_around_assignment_op = true -space_around_logical_op = true -space_around_binary_operator = true -space_around_equality_op = true -space_around_relational_op = true -space_around_bitwise_op = true -space_around_additive_op = true -space_around_multiplicative_op = true -space_around_shift_op = true -space_around_nullcoalescing_op = true -space_around_arrow_op = false -space_after_logical_not_op = false -space_after_unary_operator = false -space_after_cast = false -space_around_dot = false -space_around_lambda_arrow = true -space_before_pointer_asterik_declaration = false -space_before_nullable_mark = false -blank_lines_around_class_definition = 1 -namespace_indentation = all -space_within_template_argument = false -align_union_type_usage = true -space_in_singleline_method = true -space_in_singleline_anonymous_method = true -space_within_single_line_array_initializer_braces = true -space_around_arrow_op = false - -# These are for markup languages (HTML, XML, etc) -spaces_around_eq_in_pi_attribute = false -space_after_last_pi_attribute = true -pi_attributes_indent = align_by_first_attribute -blank_line_after_pi = true -spaces_around_eq_in_attribute = false -space_after_last_attribute = false -space_before_self_closing = true -attribute_style = on_single_line -attribute_indent = align_by_first_attribute -sort_attributes = true -sort_class_selectors = true -max_blank_lines_between_tags = 0 -linebreak_before_all_elements = true -linebreak_before_multiline_elements = true -quote_style = doublequoted -delete_quotes_from_solid_values = false -normalize_tag_names = true - - -[{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}] -indent_size = 2 - -[*.js.map] -indent_size = 2 - -[*.{css,scss}] -indent_size = 2 -declarations_style = separate_lines_for_nonsingle -media_query_style = separate_lines -selector_style = same_line -properties_style = separate_lines_for_nonsingle -brace_style = next_line - -[{.analysis_options,*.yml,*.yaml}] -indent_size = 2 - -# Xml project files -[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] -indent_size = 2 - -# Xml files -[*.{xml,stylecop,resx,ruleset}] -indent_size = 2 - -# Xml config files -[*.{props,targets,config,nuspec}] -indent_size = 2 - -# .net files -[*.{cs,vb}] -# These set the this. / Me. -dotnet_style_qualification_for_field = false:warning -dotnet_style_qualification_for_property = false:warning -dotnet_style_qualification_for_method = false:warning -dotnet_style_qualification_for_event = false:warning - -# These make it suggest Int32 instead of int, etc. -dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion -dotnet_style_predefined_type_for_member_access = true:suggestion - -# This controls implicit access modifiers -dotnet_style_require_accessibility_modifiers = never:suggestion - -# Prefer non modified fields to be marked readonly -dotnet_style_readonly_field = true:warning - -# Parenthesis settings -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_other_operators = always_for_clarity:warning - -dotnet_style_object_initializer = true:suggestion -dotnet_style_collection_initializer = true:suggestion -dotnet_style_explicit_tuple_names = true:error -dotnet_style_prefer_inferred_tuple_names = true:warning -dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning -dotnet_style_prefer_conditional_expression_over_return = true:warning -dotnet_style_coalesce_expression = true:warning -dotnet_style_null_propagation = true:error - -dotnet_sort_system_directives_first = true - -# Constants in C style, all-caps -dotnet_naming_rule.constant_fields_caps.symbols = constant_fields -dotnet_naming_rule.constant_fields_caps.severity = warning -dotnet_naming_rule.constant_fields_caps.style = caps_style -dotnet_naming_symbols.constant_fields.applicable_kinds = field -dotnet_naming_symbols.constant_fields.required_modifiers = const -dotnet_naming_style.caps_style.capitalization = all_upper - -# interfaces should be prefixed with I -dotnet_naming_rule.pascal_case_for_interface.severity = error -dotnet_naming_rule.pascal_case_for_interface.symbols = interfaces_fields -dotnet_naming_rule.pascal_case_for_interface.style = pascal_case_interface_style -dotnet_naming_symbols.interfaces_fields.applicable_kinds = interface -dotnet_naming_style.pascal_case_interface_style.required_prefix = I -dotnet_naming_style.pascal_case_interface_style.capitalization = pascal_case - -## internal and private fields should be _camelCase -dotnet_naming_rule.camel_case_for_private_internal_fields.severity = warning -dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields -dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style -dotnet_naming_symbols.private_internal_fields.applicable_kinds = field -dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal -dotnet_naming_style.camel_case_underscore_style.required_prefix = _ -dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case - -# 2018-12-07 NP: This is not yet working in VS2017 -# local variables should be camelCase -#dotnet_naming_rule.camel_case_for_locals.severity = suggestion -#dotnet_naming_rule.camel_case_for_locals.symbols = local_fields -#dotnet_naming_rule.camel_case_for_locals.style = camel_case_style -#dotnet_naming_symbols.local_fields.applicable_kinds = local -#dotnet_naming_style.camel_case_style.capitalization = camel_case - -[*.cs] -# var var var -csharp_style_var_for_built_in_types = false:warning -csharp_style_var_when_type_is_apparent = true:suggestion -csharp_style_var_elsewhere = false:warning - -csharp_style_expression_bodied_methods = when_on_single_line:suggestion -csharp_style_expression_bodied_constructors = when_on_single_line:suggestion -csharp_style_expression_bodied_operators = when_on_single_line:suggestion -csharp_style_expression_bodied_properties = when_on_single_line:suggestion -csharp_style_expression_bodied_indexers = when_on_single_line:suggestion -csharp_style_expression_bodied_accessors = when_on_single_line:suggestion - -csharp_style_pattern_matching_over_is_with_cast_check = true:warning -csharp_style_pattern_matching_over_as_with_null_check = when_on_single_line:warning - -csharp_style_inlined_variable_declaration = true:warning - -csharp_prefer_simple_default_expression = true:warning -csharp_style_deconstructed_variable_declaration = false:warning - -csharp_style_throw_expression = true:warning -csharp_style_conditional_delegate_call = true:warning - -csharp_prefer_braces = false - -csharp_new_line_before_open_brace = all -csharp_new_line_before_else = true -csharp_new_line_before_catch = true -csharp_new_line_before_finally = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_between_query_expression_clauses = true - -csharp_indent_case_contents = true -csharp_indent_switch_labels = true -csharp_indent_labels = flush_left - -csharp_space_after_cast = false -csharp_space_after_keywords_in_control_flow_statements = false -csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = none -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_around_binary_operators = before_and_after -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false - -csharp_preserve_single_line_statements = false -csharp_preserve_single_line_blocks = true - -csharp_blank_lines_around_region = 0 -csharp_blank_lines_inside_region = 0 -csharp_blank_lines_before_single_line_comment = 1 -csharp_keep_blank_lines_in_declarations = 1 -csharp_remove_blank_lines_near_braces_in_declarations = true -csharp_blank_lines_after_start_comment = false -csharp_blank_lines_between_using_groups = 0 -csharp_blank_lines_after_using_list = 1 -csharp_blank_lines_around_namespace = 1 -csharp_blank_lines_inside_namespace = 0 -csharp_blank_lines_around_type = 1 -csharp_blank_lines_inside_type = 0 -csharp_blank_lines_around_field = 0 -csharp_blank_lines_around_single_line_field = 0 -csharp_blank_lines_around_property = 1 -csharp_blank_lines_around_single_line_property = 0 -csharp_blank_lines_around_auto_property = 0 -csharp_blank_lines_around_single_line_auto_property = 0 -csharp_blank_lines_around_invocable = 1 -csharp_blank_lines_around_single_line_invocable = 1 -csharp_keep_blank_lines_in_code = 1 -csharp_remove_blank_lines_near_braces_in_code = true -csharp_blank_lines_around_local_method = 1 -csharp_blank_lines_around_single_line_local_method = 1 -csharp_blank_lines_before_control_transfer_statements = 1 -csharp_blank_lines_after_control_transfer_statements = 1 -csharp_blank_lines_before_block_statements = 1 -csharp_blank_lines_after_block_statements = 1 -csharp_blank_lines_before_multiline_statements = 1 -csharp_blank_lines_after_multiline_statements = 1 - -csharp_type_declaration_braces = next_line -csharp_brace_style = next_line -csharp_indent_inside_namespace = true -csharp_invocable_declaration_braces = next_line -csharp_anonymous_method_declaration_braces = next_line -csharp_accessor_owner_declaration_braces = next_line -csharp_accessor_declaration_braces = next_line -csharp_case_block_braces = next_line -csharp_initializer_braces = next_line -csharp_other_braces = next_line -csharp_allow_comment_after_lbrace = false -csharp_empty_block_style = together_same_line - -csharp_for_built_in_types = use_explicit_type -csharp_for_simple_types = use_var_when_evident -csharp_for_other_types = use_explicit_type -csharp_prefer_separate_deconstructed_variables_declaration = true -csharp_prefer_explicit_discard_declaration = false - -csharp_instance_members_qualify_members = none -csharp_builtin_type_reference_style = use_keyword -csharp_prefer_qualified_reference = false -csharp_add_imports_to_deepest_scope = false -csharp_allow_alias = true -csharp_default_private_modifier = implicit -csharp_default_internal_modifier = explicit -csharp_arguments_literal = positional -csharp_arguments_string_literal = positional -csharp_arguments_named = positional -csharp_arguments_anonymous_function = positional -csharp_arguments_other = positional -csharp_braces_for_ifelse = not_required -csharp_braces_for_for = not_required -csharp_braces_for_foreach = not_required -csharp_braces_for_while = not_required -csharp_braces_for_dowhile = not_required -csharp_braces_for_using = not_required -csharp_braces_for_lock = not_required -csharp_braces_for_fixed = not_required -csharp_method_or_operator_body = expression_body -csharp_local_function_body = expression_body -csharp_constructor_or_destructor_body = expression_body -csharp_accessor_owner_body = expression_body -csharp_force_attribute_style = join -csharp_indent_nested_usings_stmt = true - -csharp_builtin_type_reference_for_member_access_style = use_keyword -csharp_indent_nested_fixed_stmt = true -csharp_indent_nested_lock_stmt = true -csharp_indent_nested_for_stmt = true -csharp_indent_nested_foreach_stmt = true -csharp_indent_nested_while_stmt = true -csharp_use_continuous_indent_inside_parens = true -csharp_indent_method_decl_pars = inside -csharp_indent_invocation_pars = inside -csharp_indent_statement_pars = inside -csharp_indent_typeparam_angles = inside -csharp_indent_typearg_angles = inside -csharp_indent_pars = inside -csharp_indent_preprocessor_if = outdent -csharp_indent_preprocessor_region = usual_indent -csharp_indent_preprocessor_other = usual_indent -csharp_indent_switch_labels = true -csharp_indent_type_constraints = true -csharp_stick_comment = false -csharp_alignment_tab_fill_style = use_spaces -csharp_align_multiline_parameter = true -csharp_align_multiline_extends_list = true -csharp_align_linq_query = true -csharp_align_multiline_binary_expressions_chain = true -csharp_outdent_binary_ops = true -csharp_align_multiline_calls_chain = true -csharp_outdent_dots = true -csharp_align_multiline_array_and_object_initializer = false -csharp_indent_anonymous_method_block = false -csharp_align_first_arg_by_paren = true -csharp_align_multiline_argument = true -csharp_align_tuple_components = true -csharp_align_multiline_expression = true -csharp_align_multiline_for_stmt = true -csharp_align_multiple_declaration = true -csharp_align_multline_type_parameter_list = true -csharp_align_multline_type_parameter_constrains = true -csharp_int_align_fields = true -csharp_int_align_properties = true -csharp_int_align_methods = true -csharp_int_align_parameters = false -csharp_int_align_variables = true -csharp_int_align_assignments = true -csharp_int_align_nested_ternary = true -csharp_int_align_invocations = false -csharp_int_align_binary_expressions = true -csharp_int_align_comments = true -csharp_int_align_switch_sections = true -csharp_int_align = true -csharp_keep_user_linebreaks = false -csharp_keep_existing_arrangement = false -csharp_keep_existing_linebreaks = false -csharp_max_line_length = 120 -csharp_wrap_before_comma = false -csharp_special_else_if_treatment = true -csharp_insert_final_newline = false -csharp_place_type_attribute_on_same_line = never -csharp_place_method_attribute_on_same_line = never -csharp_place_accessorholder_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_place_accessor_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_place_field_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_wrap_parameters_style = wrap_if_long -csharp_keep_existing_declaration_parens_arrangement = false -csharp_wrap_before_declaration_lpar = false -csharp_wrap_after_declaration_lpar = false -csharp_wrap_before_declaration_rpar = false -csharp_place_constructor_initializer_on_same_line = true -csharp_keep_existing_expr_member_arrangement = false -csharp_place_expr_method_on_single_line = true -csharp_place_expr_property_on_single_line = true -csharp_place_expr_accessor_on_single_line = true -csharp_wrap_before_arrow_with_expressions = false -csharp_place_type_constraints_on_same_line = true -csharp_wrap_before_first_type_parameter_constraint = true -csharp_wrap_multiple_type_parameter_constraints_style = wrap_if_long -csharp_wrap_before_type_parameter_langle = true -csharp_wrap_before_extends_colon = false -csharp_wrap_extends_list_style = wrap_if_long -csharp_keep_existing_declaration_block_arrangement = false -csharp_place_abstract_accessorholder_on_single_line = true -csharp_place_simple_accessorholder_on_single_line = false -csharp_place_accessor_with_attrs_holder_on_single_line = false -csharp_place_simple_accessor_on_single_line = true -csharp_place_simple_method_on_single_line = false -csharp_keep_existing_enum_arrangement = false -csharp_place_simple_enum_on_single_line = false -csharp_wrap_enum_declaration = wrap_if_long -csharp_new_line_before_else = true -csharp_new_line_before_while = false -csharp_wrap_for_stmt_header_style = wrap_if_long -csharp_wrap_multiple_declaration_style = wrap_if_long -csharp_keep_existing_embedded_arrangement = false -csharp_place_simple_embedded_statement_on_same_line = false -csharp_place_simple_case_statement_on_same_line = true -csharp_keep_existing_embedded_block_arrangement = false -csharp_place_simple_embedded_block_on_same_line = false -csharp_place_simple_anonymousmethod_on_single_line = false -csharp_keep_existing_initializer_arrangement = false -csharp_place_simple_initializer_on_single_line = false -csharp_wrap_object_and_collection_initializer_style = chop_always -csharp_wrap_array_initializer_style = wrap_if_long -csharp_wrap_arguments_style = wrap_if_long -csharp_keep_existing_invocation_parens_arrangement = false -csharp_wrap_after_invocation_lpar = false -csharp_wrap_before_invocation_rpar = false -csharp_wrap_after_dot_in_method_calls = true -csharp_wrap_chained_method_calls = wrap_if_long -csharp_wrap_before_binary_opsign = false -csharp_wrap_chained_binary_expressions = wrap_if_long -csharp_force_chop_compound_if_expression = true -csharp_force_chop_compound_while_expression = true -csharp_force_chop_compound_do_expression = true -csharp_wrap_before_ternary_opsigns = true -csharp_wrap_ternary_expr_style = wrap_if_long -csharp_nested_ternary_style = expanded -csharp_wrap_linq_expressions = wrap_if_long -csharp_wrap_before_linq_expression = false -csharp_place_linq_into_on_new_line = false -csharp_wrap_verbatim_interpolated_strings = wrap_if_long -csharp_extra_spaces = remove_all -csharp_space_after_keywords_in_control_flow_statements = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_declaration_name_and_open_parenthesis = false -csharp_space_before_typeof_parentheses = false -csharp_space_before_checked_parentheses = false -csharp_space_before_sizeof_parentheses = false -csharp_space_before_nameof_parentheses = false -csharp_space_between_keyword_and_expression = true -csharp_space_between_keyword_and_type = true -csharp_space_around_assignment_op = true -csharp_space_around_logical_op = true -csharp_space_around_binary_operator = true -csharp_space_around_equality_op = true -csharp_space_around_relational_op = true -csharp_space_around_bitwise_op = true -csharp_space_around_additive_op = true -csharp_space_around_multiplicative_op = true -csharp_space_around_shift_op = true -csharp_space_around_nullcoalescing_op = true -csharp_space_around_arrow_op = false -csharp_space_after_logical_not_op = false -csharp_space_after_unary_operator = false -csharp_space_after_cast = false -csharp_space_around_dot = false -csharp_space_around_lambda_arrow = true -csharp_space_before_pointer_asterik_declaration = false -csharp_space_before_nullable_mark = false - -[*.cshtml] -linebreaks_around_razor_statements = true -blank_lines_around_razor_functions = true -blank_lines_around_razor_helpers = true -blank_lines_around_razor_sections = true - -# C++ -[*.{cc,cpp,cxx,h,hpp,hxx}] -cpp_indent_access_specifiers_from_class = true -cpp_indent_wrapped_function_names = false -cpp_align_multiline_type_argument = true - -# C, C++ and ObjectiveC -[*.{c,h,cc,cpp,cxx,m,hpp,hxx}] -indent_preprocessor_directives = normal -indent_type_constraints = true - -# Javascript and Typescript -[*.{js,js.map,ts}] -quote_style = doublequoted -termination_style = ensure_semicolon \ No newline at end of file diff --git a/Aaru.Console/.gitignore b/Aaru.Console/.gitignore deleted file mode 100644 index 05c540d..0000000 --- a/Aaru.Console/.gitignore +++ /dev/null @@ -1,595 +0,0 @@ -### VisualStudio template -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ -### Linux template - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* -### Xcode template -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -### VisualStudioCode template -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -### C++ template -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o - -# Precompiled Headers -*.gch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app -### MonoDevelop template -#User Specific -*.usertasks - -#Mono Project Files -*.resources -test-results/ -### GPG template -secring.* - -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/modules.xml -# .idea/*.iml -# .idea/modules - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests -### CMake template -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -### C template -# Object files -*.ko -*.elf - -# Linker output -*.map -*.exp - -*.so.* - -# Executables -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf -### Windows template -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# NuGet Packages Directory -packages/ -## TODO: If the tool you use requires repositories.config uncomment the next line -#!packages/repositories.config - -# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets -# This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented) -!packages/build/ - - -# Others -sql/ -*.Cache - -# Visual Studio 2017 -.vs - -workspace.xml -cmake-build-debug -### macOS template -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -pkg/**/pkg -pkg/**/src -pkg/**/*.asc -pkg/**/*.sig -pkg/**/*.tar.xz -pkg/**/*.zip -pkg/**/aaru - -.sonarqube \ No newline at end of file diff --git a/Aaru.Console/AaruConsole.cs b/Aaru.Console/AaruConsole.cs deleted file mode 100644 index f5ccbb4..0000000 --- a/Aaru.Console/AaruConsole.cs +++ /dev/null @@ -1,236 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : AaruConsole.cs -// Author(s) : Natalia Portillo -// -// Component : Console. -// -// --[ Description ] ---------------------------------------------------------- -// -// Handlers for normal, verbose and debug consoles. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.Console -{ - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the standard output console using the specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public delegate void WriteLineHandler(string format, params object[] arg); - - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the error output console using the specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public delegate void ErrorWriteLineHandler(string format, params object[] arg); - - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the verbose output console using the specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public delegate void VerboseWriteLineHandler(string format, params object[] arg); - - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the debug output console using the specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public delegate void DebugWriteLineHandler(string format, params object[] arg); - - /// - /// Writes the text representation of the specified array of objects, to the standard output console using the - /// specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public delegate void WriteHandler(string format, params object[] arg); - - /// - /// Writes the text representation of the specified array of objects, to the error output console using the - /// specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public delegate void ErrorWriteHandler(string format, params object[] arg); - - /// - /// Writes the text representation of the specified array of objects, to the verbose output console using the - /// specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public delegate void VerboseWriteHandler(string format, params object[] arg); - - /// - /// Writes the text representation of the specified array of objects, to the debug output console using the - /// specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public delegate void DebugWriteHandler(string format, params object[] arg); - - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the debug output console using the specified format information. - /// - /// Description of the module writing to the debug console - /// A composite format string. - /// An array of objects to write using . - public delegate void DebugWithModuleWriteLineHandler(string module, string format, params object[] arg); - - /// - /// Implements a console abstraction that defines four level of messages that can be routed to different consoles: - /// standard, error, verbose and debug. - /// - public static class AaruConsole - { - /// Event to receive writings to the standard output console that should be followed by a line termination. - public static event WriteLineHandler WriteLineEvent; - /// Event to receive writings to the error output console that should be followed by a line termination. - public static event ErrorWriteLineHandler ErrorWriteLineEvent; - /// Event to receive writings to the verbose output console that should be followed by a line termination. - public static event VerboseWriteLineHandler VerboseWriteLineEvent; - /// Event to receive line terminations to the debug output console. - public static event DebugWriteLineHandler DebugWriteLineEvent; - /// Event to receive writings to the debug output console that should be followed by a line termination. - public static event DebugWithModuleWriteLineHandler DebugWithModuleWriteLineEvent; - /// Event to receive writings to the standard output console. - public static event WriteHandler WriteEvent; - /// Event to receive writings to the error output console. - public static event ErrorWriteHandler ErrorWriteEvent; - /// Event to receive writings to the verbose output console. - public static event VerboseWriteHandler VerboseWriteEvent; - /// Event to receive writings to the debug output console. - public static event DebugWriteHandler DebugWriteEvent; - - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the standard output console using the specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public static void WriteLine(string format, params object[] arg) => WriteLineEvent?.Invoke(format, arg); - - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the error output console using the specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public static void ErrorWriteLine(string format, params object[] arg) => - ErrorWriteLineEvent?.Invoke(format, arg); - - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the verbose output console using the specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public static void VerboseWriteLine(string format, params object[] arg) => - VerboseWriteLineEvent?.Invoke(format, arg); - - /// - /// Writes the text representation of the specified array of objects, followed by the current line terminator, to - /// the debug output console using the specified format information. - /// - /// Description of the module writing to the debug console - /// A composite format string. - /// An array of objects to write using . - public static void DebugWriteLine(string module, string format, params object[] arg) - { - DebugWriteLineEvent?.Invoke("DEBUG (" + module + "): " + format, arg); - DebugWithModuleWriteLineEvent?.Invoke(module, format, arg); - } - - /// Writes the current line terminator to the standard output console. - public static void WriteLine() => WriteLineEvent?.Invoke("", null); - - /// Writes the current line terminator to the error output console. - public static void ErrorWriteLine() => ErrorWriteLineEvent?.Invoke("", null); - - /// Writes the current line terminator to the verbose output console. - public static void VerboseWriteLine() => VerboseWriteLineEvent?.Invoke("", null); - - /// Writes the current line terminator to the debug output console. - public static void DebugWriteLine() => DebugWriteLineEvent?.Invoke("", null); - - /// - /// Writes the text representation of the specified array of objects to the standard output console using the - /// specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public static void Write(string format, params object[] arg) => WriteEvent?.Invoke(format, arg); - - /// - /// Writes the text representation of the specified array of objects to the error output console using the - /// specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public static void ErrorWrite(string format, params object[] arg) => ErrorWriteEvent?.Invoke(format, arg); - - /// - /// Writes the text representation of the specified array of objects to the verbose output console using the - /// specified format information. - /// - /// A composite format string. - /// An array of objects to write using . - public static void VerboseWrite(string format, params object[] arg) => VerboseWriteEvent?.Invoke(format, arg); - - /// - /// Writes the text representation of the specified array of objects to the debug output console using the - /// specified format information. - /// - /// Description of the module writing to the debug console - /// A composite format string. - /// An array of objects to write using . - public static void DebugWrite(string module, string format, params object[] arg) => - DebugWriteEvent?.Invoke("DEBUG (" + module + "): " + format, arg); - - /// Writes the specified string value, followed by the current line terminator, to the standard output console. - /// The value to write. - public static void WriteLine(string value) => WriteLineEvent?.Invoke("{0}", value); - - /// Writes the specified string value, followed by the current line terminator, to the error output console. - /// The value to write. - public static void ErrorWriteLine(string value) => ErrorWriteLineEvent?.Invoke("{0}", value); - - /// Writes the specified string value, followed by the current line terminator, to the verbose output console. - /// The value to write. - public static void VerboseWriteLine(string value) => VerboseWriteLineEvent?.Invoke("{0}", value); - - /// Writes the specified string value, followed by the current line terminator, to the debug output console. - /// Description of the module writing to the debug console - /// The value to write. - public static void DebugWriteLine(string module, string value) => - DebugWriteLineEvent?.Invoke("{0}", "DEBUG (" + module + "): " + value); - } -} \ No newline at end of file diff --git a/Aaru.Helpers/.editorconfig b/Aaru.Helpers/.editorconfig deleted file mode 100644 index 9181fe5..0000000 --- a/Aaru.Helpers/.editorconfig +++ /dev/null @@ -1,632 +0,0 @@ -root = true - -[*] -charset = utf-8 -next_line = crlf -insert_final_newline = false -indent_style = space -indent_size = 4 - -# Generic non-language specific ones for Resharper and friends -brace_style = next_line -int_align = true -keep_existing_arrangement = false -place_simple_blocks_on_single_line = true -place_simple_declaration_blocks_on_single_line = true -place_attribute_on_same_line = false -space_after_unary_operator = false -space_after_comma = true -space_around_ternary_operator = true -space_around_binary_operator = true -space_around_member_access_operator = false -space_before_open_square_brackets = false -space_after_keywords_in_control_flow_statements = true -space_before_comma = false -space_between_method_call_name_and_opening_parenthesis = false -space_between_method_declaration_name_and_open_parenthesis = false -space_between_square_brackets = false -space_between_parentheses_of_control_flow_statements = false -accessor_owner_declaration_braces = next_line -accessor_declaration_braces = next_line -case_block_braces = next_line -initializer_braces = next_line -other_braces = next_line -allow_comment_after_lbrace = false -empty_block_style = together_same_line -braces_for_ifelse = not_required -braces_for_for = not_required -braces_for_foreach = not_required -braces_for_while = not_required -braces_for_dowhile = not_required -braces_for_using = not_required -braces_for_lock = not_required -braces_for_fixed = not_required -method_or_operator_body = expression_body -local_function_body = expression_body -constructor_or_destructor_body = expression_body -accessor_owner_body = expression_body -force_attribute_style = join -function_braces = next_line -force_control_statements_braces = always_remove -space_in_singleline_accessorholder = true -type_declaration_braces = next_line -invocable_declaration_braces = next_line -anonymous_method_declaration_braces = next_line -space_between_accessors_in_singleline_property = true -indent_nested_usings_stmt = true -space_within_empty_braces = false -indent_nested_fixed_stmt = true -indent_nested_lock_stmt = true -indent_nested_for_stmt = true -indent_nested_foreach_stmt = true -indent_nested_while_stmt = true -use_continuous_indent_inside_parens = true -indent_method_decl_pars = inside -indent_invocation_pars = inside -indent_statement_pars = inside -indent_typeparam_angles = inside -indent_typearg_angles = inside -indent_pars = inside -indent_preprocessor_if = outdent -indent_preprocessor_region = usual_indent -indent_preprocessor_other = usual_indent -indent_switch_labels = true -indent_type_constraints = true -stick_comment = false -alignment_tab_fill_style = use_spaces -align_multiline_parameter = true -align_multiline_extends_list = true -align_linq_query = true -align_multiline_binary_expressions_chain = true -outdent_binary_ops = true -align_multiline_calls_chain = true -outdent_dots = true -align_multiline_array_and_object_initializer = false -indent_anonymous_method_block = false -align_first_arg_by_paren = true -align_multiline_argument = true -align_tuple_components = true -align_multiline_expression = true -align_multiline_for_stmt = true -align_multiple_declaration = true -align_multline_type_parameter_list = true -align_multline_type_parameter_constrains = true -int_align_fields = true -int_align_properties = true -int_align_methods = true -int_align_parameters = false -int_align_variables = true -int_align_assignments = true -int_align_nested_ternary = true -int_align_invocations = false -int_align_binary_expressions = true -int_align_comments = true -int_align_switch_sections = true -keep_user_linebreaks = false -keep_existing_arrangement = false -keep_existing_linebreaks = false -max_line_length = 120 -wrap_before_comma = false -special_else_if_treatment = true -place_type_attribute_on_same_line = never -place_method_attribute_on_same_line = never -place_accessorholder_attribute_on_same_line = never -place_attribute_on_same_line = never -place_accessor_attribute_on_same_line = never -place_attribute_on_same_line = never -place_field_attribute_on_same_line = never -place_attribute_on_same_line = never -wrap_parameters_style = wrap_if_long -keep_existing_declaration_parens_arrangement = false -wrap_before_declaration_lpar = false -wrap_after_declaration_lpar = false -wrap_before_declaration_rpar = false -place_constructor_initializer_on_same_line = true -keep_existing_expr_member_arrangement = false -place_expr_method_on_single_line = true -place_expr_property_on_single_line = true -place_expr_accessor_on_single_line = true -wrap_before_arrow_with_expressions = false -place_type_constraints_on_same_line = true -wrap_before_first_type_parameter_constraint = true -wrap_multiple_type_parameter_constraints_style = wrap_if_long -wrap_before_type_parameter_langle = true -wrap_before_extends_colon = false -wrap_extends_list_style = wrap_if_long -keep_existing_declaration_block_arrangement = false -place_abstract_accessorholder_on_single_line = true -place_simple_accessorholder_on_single_line = false -place_accessor_with_attrs_holder_on_single_line = false -place_simple_accessor_on_single_line = true -place_simple_method_on_single_line = false -keep_existing_enum_arrangement = false -place_simple_enum_on_single_line = false -wrap_enum_declaration = wrap_if_long -new_line_before_else = true -new_line_before_while = false -wrap_for_stmt_header_style = wrap_if_long -wrap_multiple_declaration_style = wrap_if_long -keep_existing_embedded_arrangement = false -place_simple_embedded_statement_on_same_line = false -place_simple_case_statement_on_same_line = true -keep_existing_embedded_block_arrangement = false -place_simple_embedded_block_on_same_line = false -place_simple_anonymousmethod_on_single_line = false -keep_existing_initializer_arrangement = false -place_simple_initializer_on_single_line = false -wrap_object_and_collection_initializer_style = chop_always -wrap_array_initializer_style = wrap_if_long -wrap_arguments_style = wrap_if_long -keep_existing_invocation_parens_arrangement = false -wrap_after_invocation_lpar = false -wrap_before_invocation_rpar = false -wrap_after_dot_in_method_calls = true -wrap_chained_method_calls = wrap_if_long -wrap_before_binary_opsign = false -wrap_chained_binary_expressions = wrap_if_long -force_chop_compound_if_expression = true -force_chop_compound_while_expression = true -force_chop_compound_do_expression = true -wrap_before_ternary_opsigns = true -wrap_ternary_expr_style = wrap_if_long -nested_ternary_style = expanded -wrap_linq_expressions = wrap_if_long -wrap_before_linq_expression = false -place_linq_into_on_new_line = false -wrap_verbatim_interpolated_strings = wrap_if_long -extra_spaces = remove_all -space_after_keywords_in_control_flow_statements = false -space_between_method_call_name_and_opening_parenthesis = false -space_between_method_declaration_name_and_open_parenthesis = false -space_before_typeof_parentheses = false -space_before_checked_parentheses = false -space_before_sizeof_parentheses = false -space_before_nameof_parentheses = false -space_between_keyword_and_expression = true -space_between_keyword_and_type = true -space_around_assignment_op = true -space_around_logical_op = true -space_around_binary_operator = true -space_around_equality_op = true -space_around_relational_op = true -space_around_bitwise_op = true -space_around_additive_op = true -space_around_multiplicative_op = true -space_around_shift_op = true -space_around_nullcoalescing_op = true -space_around_arrow_op = false -space_after_logical_not_op = false -space_after_unary_operator = false -space_after_cast = false -space_around_dot = false -space_around_lambda_arrow = true -space_before_pointer_asterik_declaration = false -space_before_nullable_mark = false -blank_lines_around_class_definition = 1 -namespace_indentation = all -space_within_template_argument = false -align_union_type_usage = true -space_in_singleline_method = true -space_in_singleline_anonymous_method = true -space_within_single_line_array_initializer_braces = true -space_around_arrow_op = false - -# These are for markup languages (HTML, XML, etc) -spaces_around_eq_in_pi_attribute = false -space_after_last_pi_attribute = true -pi_attributes_indent = align_by_first_attribute -blank_line_after_pi = true -spaces_around_eq_in_attribute = false -space_after_last_attribute = false -space_before_self_closing = true -attribute_style = on_single_line -attribute_indent = align_by_first_attribute -sort_attributes = true -sort_class_selectors = true -max_blank_lines_between_tags = 0 -linebreak_before_all_elements = true -linebreak_before_multiline_elements = true -quote_style = doublequoted -delete_quotes_from_solid_values = false -normalize_tag_names = true - - -[{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}] -indent_size = 2 - -[*.js.map] -indent_size = 2 - -[*.{css,scss}] -indent_size = 2 -declarations_style = separate_lines_for_nonsingle -media_query_style = separate_lines -selector_style = same_line -properties_style = separate_lines_for_nonsingle -brace_style = next_line - -[{.analysis_options,*.yml,*.yaml}] -indent_size = 2 - -# Xml project files -[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] -indent_size = 2 - -# Xml files -[*.{xml,stylecop,resx,ruleset}] -indent_size = 2 - -# Xml config files -[*.{props,targets,config,nuspec}] -indent_size = 2 - -# .net files -[*.{cs,vb}] -# These set the this. / Me. -dotnet_style_qualification_for_field = false:warning -dotnet_style_qualification_for_property = false:warning -dotnet_style_qualification_for_method = false:warning -dotnet_style_qualification_for_event = false:warning - -# These make it suggest Int32 instead of int, etc. -dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion -dotnet_style_predefined_type_for_member_access = true:suggestion - -# This controls implicit access modifiers -dotnet_style_require_accessibility_modifiers = never:suggestion - -# Prefer non modified fields to be marked readonly -dotnet_style_readonly_field = true:warning - -# Parenthesis settings -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:warning -dotnet_style_parentheses_in_other_operators = always_for_clarity:warning - -dotnet_style_object_initializer = true:suggestion -dotnet_style_collection_initializer = true:suggestion -dotnet_style_explicit_tuple_names = true:error -dotnet_style_prefer_inferred_tuple_names = true:warning -dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning -dotnet_style_prefer_conditional_expression_over_return = true:warning -dotnet_style_coalesce_expression = true:warning -dotnet_style_null_propagation = true:error - -dotnet_sort_system_directives_first = true - -# Constants in C style, all-caps -dotnet_naming_rule.constant_fields_caps.symbols = constant_fields -dotnet_naming_rule.constant_fields_caps.severity = warning -dotnet_naming_rule.constant_fields_caps.style = caps_style -dotnet_naming_symbols.constant_fields.applicable_kinds = field -dotnet_naming_symbols.constant_fields.required_modifiers = const -dotnet_naming_style.caps_style.capitalization = all_upper - -# interfaces should be prefixed with I -dotnet_naming_rule.pascal_case_for_interface.severity = error -dotnet_naming_rule.pascal_case_for_interface.symbols = interfaces_fields -dotnet_naming_rule.pascal_case_for_interface.style = pascal_case_interface_style -dotnet_naming_symbols.interfaces_fields.applicable_kinds = interface -dotnet_naming_style.pascal_case_interface_style.required_prefix = I -dotnet_naming_style.pascal_case_interface_style.capitalization = pascal_case - -## internal and private fields should be _camelCase -dotnet_naming_rule.camel_case_for_private_internal_fields.severity = warning -dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields -dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style -dotnet_naming_symbols.private_internal_fields.applicable_kinds = field -dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal -dotnet_naming_style.camel_case_underscore_style.required_prefix = _ -dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case - -# 2018-12-07 NP: This is not yet working in VS2017 -# local variables should be camelCase -#dotnet_naming_rule.camel_case_for_locals.severity = suggestion -#dotnet_naming_rule.camel_case_for_locals.symbols = local_fields -#dotnet_naming_rule.camel_case_for_locals.style = camel_case_style -#dotnet_naming_symbols.local_fields.applicable_kinds = local -#dotnet_naming_style.camel_case_style.capitalization = camel_case - -[*.cs] -# var var var -csharp_style_var_for_built_in_types = false:warning -csharp_style_var_when_type_is_apparent = true:suggestion -csharp_style_var_elsewhere = false:warning - -csharp_style_expression_bodied_methods = when_on_single_line:suggestion -csharp_style_expression_bodied_constructors = when_on_single_line:suggestion -csharp_style_expression_bodied_operators = when_on_single_line:suggestion -csharp_style_expression_bodied_properties = when_on_single_line:suggestion -csharp_style_expression_bodied_indexers = when_on_single_line:suggestion -csharp_style_expression_bodied_accessors = when_on_single_line:suggestion - -csharp_style_pattern_matching_over_is_with_cast_check = true:warning -csharp_style_pattern_matching_over_as_with_null_check = when_on_single_line:warning - -csharp_style_inlined_variable_declaration = true:warning - -csharp_prefer_simple_default_expression = true:warning -csharp_style_deconstructed_variable_declaration = false:warning - -csharp_style_throw_expression = true:warning -csharp_style_conditional_delegate_call = true:warning - -csharp_prefer_braces = false - -csharp_new_line_before_open_brace = all -csharp_new_line_before_else = true -csharp_new_line_before_catch = true -csharp_new_line_before_finally = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_between_query_expression_clauses = true - -csharp_indent_case_contents = true -csharp_indent_switch_labels = true -csharp_indent_labels = flush_left - -csharp_space_after_cast = false -csharp_space_after_keywords_in_control_flow_statements = false -csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = none -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_around_binary_operators = before_and_after -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false - -csharp_preserve_single_line_statements = false -csharp_preserve_single_line_blocks = true - -csharp_blank_lines_around_region = 0 -csharp_blank_lines_inside_region = 0 -csharp_blank_lines_before_single_line_comment = 1 -csharp_keep_blank_lines_in_declarations = 1 -csharp_remove_blank_lines_near_braces_in_declarations = true -csharp_blank_lines_after_start_comment = false -csharp_blank_lines_between_using_groups = 0 -csharp_blank_lines_after_using_list = 1 -csharp_blank_lines_around_namespace = 1 -csharp_blank_lines_inside_namespace = 0 -csharp_blank_lines_around_type = 1 -csharp_blank_lines_inside_type = 0 -csharp_blank_lines_around_field = 0 -csharp_blank_lines_around_single_line_field = 0 -csharp_blank_lines_around_property = 1 -csharp_blank_lines_around_single_line_property = 0 -csharp_blank_lines_around_auto_property = 0 -csharp_blank_lines_around_single_line_auto_property = 0 -csharp_blank_lines_around_invocable = 1 -csharp_blank_lines_around_single_line_invocable = 1 -csharp_keep_blank_lines_in_code = 1 -csharp_remove_blank_lines_near_braces_in_code = true -csharp_blank_lines_around_local_method = 1 -csharp_blank_lines_around_single_line_local_method = 1 -csharp_blank_lines_before_control_transfer_statements = 1 -csharp_blank_lines_after_control_transfer_statements = 1 -csharp_blank_lines_before_block_statements = 1 -csharp_blank_lines_after_block_statements = 1 -csharp_blank_lines_before_multiline_statements = 1 -csharp_blank_lines_after_multiline_statements = 1 - -csharp_type_declaration_braces = next_line -csharp_brace_style = next_line -csharp_indent_inside_namespace = true -csharp_invocable_declaration_braces = next_line -csharp_anonymous_method_declaration_braces = next_line -csharp_accessor_owner_declaration_braces = next_line -csharp_accessor_declaration_braces = next_line -csharp_case_block_braces = next_line -csharp_initializer_braces = next_line -csharp_other_braces = next_line -csharp_allow_comment_after_lbrace = false -csharp_empty_block_style = together_same_line - -csharp_for_built_in_types = use_explicit_type -csharp_for_simple_types = use_var_when_evident -csharp_for_other_types = use_explicit_type -csharp_prefer_separate_deconstructed_variables_declaration = true -csharp_prefer_explicit_discard_declaration = false - -csharp_instance_members_qualify_members = none -csharp_builtin_type_reference_style = use_keyword -csharp_prefer_qualified_reference = false -csharp_add_imports_to_deepest_scope = false -csharp_allow_alias = true -csharp_default_private_modifier = implicit -csharp_default_internal_modifier = explicit -csharp_arguments_literal = positional -csharp_arguments_string_literal = positional -csharp_arguments_named = positional -csharp_arguments_anonymous_function = positional -csharp_arguments_other = positional -csharp_braces_for_ifelse = not_required -csharp_braces_for_for = not_required -csharp_braces_for_foreach = not_required -csharp_braces_for_while = not_required -csharp_braces_for_dowhile = not_required -csharp_braces_for_using = not_required -csharp_braces_for_lock = not_required -csharp_braces_for_fixed = not_required -csharp_method_or_operator_body = expression_body -csharp_local_function_body = expression_body -csharp_constructor_or_destructor_body = expression_body -csharp_accessor_owner_body = expression_body -csharp_force_attribute_style = join -csharp_indent_nested_usings_stmt = true - -csharp_builtin_type_reference_for_member_access_style = use_keyword -csharp_indent_nested_fixed_stmt = true -csharp_indent_nested_lock_stmt = true -csharp_indent_nested_for_stmt = true -csharp_indent_nested_foreach_stmt = true -csharp_indent_nested_while_stmt = true -csharp_use_continuous_indent_inside_parens = true -csharp_indent_method_decl_pars = inside -csharp_indent_invocation_pars = inside -csharp_indent_statement_pars = inside -csharp_indent_typeparam_angles = inside -csharp_indent_typearg_angles = inside -csharp_indent_pars = inside -csharp_indent_preprocessor_if = outdent -csharp_indent_preprocessor_region = usual_indent -csharp_indent_preprocessor_other = usual_indent -csharp_indent_switch_labels = true -csharp_indent_type_constraints = true -csharp_stick_comment = false -csharp_alignment_tab_fill_style = use_spaces -csharp_align_multiline_parameter = true -csharp_align_multiline_extends_list = true -csharp_align_linq_query = true -csharp_align_multiline_binary_expressions_chain = true -csharp_outdent_binary_ops = true -csharp_align_multiline_calls_chain = true -csharp_outdent_dots = true -csharp_align_multiline_array_and_object_initializer = false -csharp_indent_anonymous_method_block = false -csharp_align_first_arg_by_paren = true -csharp_align_multiline_argument = true -csharp_align_tuple_components = true -csharp_align_multiline_expression = true -csharp_align_multiline_for_stmt = true -csharp_align_multiple_declaration = true -csharp_align_multline_type_parameter_list = true -csharp_align_multline_type_parameter_constrains = true -csharp_int_align_fields = true -csharp_int_align_properties = true -csharp_int_align_methods = true -csharp_int_align_parameters = false -csharp_int_align_variables = true -csharp_int_align_assignments = true -csharp_int_align_nested_ternary = true -csharp_int_align_invocations = false -csharp_int_align_binary_expressions = true -csharp_int_align_comments = true -csharp_int_align_switch_sections = true -csharp_int_align = true -csharp_keep_user_linebreaks = false -csharp_keep_existing_arrangement = false -csharp_keep_existing_linebreaks = false -csharp_max_line_length = 120 -csharp_wrap_before_comma = false -csharp_special_else_if_treatment = true -csharp_insert_final_newline = false -csharp_place_type_attribute_on_same_line = never -csharp_place_method_attribute_on_same_line = never -csharp_place_accessorholder_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_place_accessor_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_place_field_attribute_on_same_line = never -csharp_place_attribute_on_same_line = never -csharp_wrap_parameters_style = wrap_if_long -csharp_keep_existing_declaration_parens_arrangement = false -csharp_wrap_before_declaration_lpar = false -csharp_wrap_after_declaration_lpar = false -csharp_wrap_before_declaration_rpar = false -csharp_place_constructor_initializer_on_same_line = true -csharp_keep_existing_expr_member_arrangement = false -csharp_place_expr_method_on_single_line = true -csharp_place_expr_property_on_single_line = true -csharp_place_expr_accessor_on_single_line = true -csharp_wrap_before_arrow_with_expressions = false -csharp_place_type_constraints_on_same_line = true -csharp_wrap_before_first_type_parameter_constraint = true -csharp_wrap_multiple_type_parameter_constraints_style = wrap_if_long -csharp_wrap_before_type_parameter_langle = true -csharp_wrap_before_extends_colon = false -csharp_wrap_extends_list_style = wrap_if_long -csharp_keep_existing_declaration_block_arrangement = false -csharp_place_abstract_accessorholder_on_single_line = true -csharp_place_simple_accessorholder_on_single_line = false -csharp_place_accessor_with_attrs_holder_on_single_line = false -csharp_place_simple_accessor_on_single_line = true -csharp_place_simple_method_on_single_line = false -csharp_keep_existing_enum_arrangement = false -csharp_place_simple_enum_on_single_line = false -csharp_wrap_enum_declaration = wrap_if_long -csharp_new_line_before_else = true -csharp_new_line_before_while = false -csharp_wrap_for_stmt_header_style = wrap_if_long -csharp_wrap_multiple_declaration_style = wrap_if_long -csharp_keep_existing_embedded_arrangement = false -csharp_place_simple_embedded_statement_on_same_line = false -csharp_place_simple_case_statement_on_same_line = true -csharp_keep_existing_embedded_block_arrangement = false -csharp_place_simple_embedded_block_on_same_line = false -csharp_place_simple_anonymousmethod_on_single_line = false -csharp_keep_existing_initializer_arrangement = false -csharp_place_simple_initializer_on_single_line = false -csharp_wrap_object_and_collection_initializer_style = chop_always -csharp_wrap_array_initializer_style = wrap_if_long -csharp_wrap_arguments_style = wrap_if_long -csharp_keep_existing_invocation_parens_arrangement = false -csharp_wrap_after_invocation_lpar = false -csharp_wrap_before_invocation_rpar = false -csharp_wrap_after_dot_in_method_calls = true -csharp_wrap_chained_method_calls = wrap_if_long -csharp_wrap_before_binary_opsign = false -csharp_wrap_chained_binary_expressions = wrap_if_long -csharp_force_chop_compound_if_expression = true -csharp_force_chop_compound_while_expression = true -csharp_force_chop_compound_do_expression = true -csharp_wrap_before_ternary_opsigns = true -csharp_wrap_ternary_expr_style = wrap_if_long -csharp_nested_ternary_style = expanded -csharp_wrap_linq_expressions = wrap_if_long -csharp_wrap_before_linq_expression = false -csharp_place_linq_into_on_new_line = false -csharp_wrap_verbatim_interpolated_strings = wrap_if_long -csharp_extra_spaces = remove_all -csharp_space_after_keywords_in_control_flow_statements = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_declaration_name_and_open_parenthesis = false -csharp_space_before_typeof_parentheses = false -csharp_space_before_checked_parentheses = false -csharp_space_before_sizeof_parentheses = false -csharp_space_before_nameof_parentheses = false -csharp_space_between_keyword_and_expression = true -csharp_space_between_keyword_and_type = true -csharp_space_around_assignment_op = true -csharp_space_around_logical_op = true -csharp_space_around_binary_operator = true -csharp_space_around_equality_op = true -csharp_space_around_relational_op = true -csharp_space_around_bitwise_op = true -csharp_space_around_additive_op = true -csharp_space_around_multiplicative_op = true -csharp_space_around_shift_op = true -csharp_space_around_nullcoalescing_op = true -csharp_space_around_arrow_op = false -csharp_space_after_logical_not_op = false -csharp_space_after_unary_operator = false -csharp_space_after_cast = false -csharp_space_around_dot = false -csharp_space_around_lambda_arrow = true -csharp_space_before_pointer_asterik_declaration = false -csharp_space_before_nullable_mark = false - -[*.cshtml] -linebreaks_around_razor_statements = true -blank_lines_around_razor_functions = true -blank_lines_around_razor_helpers = true -blank_lines_around_razor_sections = true - -# C++ -[*.{cc,cpp,cxx,h,hpp,hxx}] -cpp_indent_access_specifiers_from_class = true -cpp_indent_wrapped_function_names = false -cpp_align_multiline_type_argument = true - -# C, C++ and ObjectiveC -[*.{c,h,cc,cpp,cxx,m,hpp,hxx}] -indent_preprocessor_directives = normal -indent_type_constraints = true - -# Javascript and Typescript -[*.{js,js.map,ts}] -quote_style = doublequoted -termination_style = ensure_semicolon \ No newline at end of file diff --git a/Aaru.Helpers/.gitignore b/Aaru.Helpers/.gitignore deleted file mode 100644 index 05c540d..0000000 --- a/Aaru.Helpers/.gitignore +++ /dev/null @@ -1,595 +0,0 @@ -### VisualStudio template -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ -### Linux template - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* -### Xcode template -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -### VisualStudioCode template -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -### C++ template -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o - -# Precompiled Headers -*.gch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app -### MonoDevelop template -#User Specific -*.usertasks - -#Mono Project Files -*.resources -test-results/ -### GPG template -secring.* - -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/modules.xml -# .idea/*.iml -# .idea/modules - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests -### CMake template -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -### C template -# Object files -*.ko -*.elf - -# Linker output -*.map -*.exp - -*.so.* - -# Executables -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf -### Windows template -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# NuGet Packages Directory -packages/ -## TODO: If the tool you use requires repositories.config uncomment the next line -#!packages/repositories.config - -# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets -# This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented) -!packages/build/ - - -# Others -sql/ -*.Cache - -# Visual Studio 2017 -.vs - -workspace.xml -cmake-build-debug -### macOS template -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -pkg/**/pkg -pkg/**/src -pkg/**/*.asc -pkg/**/*.sig -pkg/**/*.tar.xz -pkg/**/*.zip -pkg/**/aaru - -.sonarqube \ No newline at end of file diff --git a/Aaru.Helpers/Aaru.Helpers.csproj b/Aaru.Helpers/Aaru.Helpers.csproj deleted file mode 100644 index 9650e64..0000000 --- a/Aaru.Helpers/Aaru.Helpers.csproj +++ /dev/null @@ -1,122 +0,0 @@ - - - - Debug - AnyCPU - 2.0 - {F8BDF57B-1571-4CD0-84B3-B422088D359A} - Library - Aaru.Helpers - Aaru.Helpers - $(Version) - false - true - 6.0.0-alpha6 - Claunia.com - Copyright © 2011-2021 Natalia Portillo - Aaru Data Preservation Suite - Aaru.Helpers - $(Version) - net6 - 10 - Contains helpers used by the Aaru Data Preservation Suite. - https://github.com/aaru-dps/ - LGPL-2.1-only - https://github.com/aaru-dps/Aaru.Helpers - true - en-US - true - true - snupkg - Natalia Portillo <claunia@claunia.com> - true - - - $(Version)+{chash:8} - true - true - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - - - full - true - bin\Release - prompt - 4 - false - - - - - - - - - - - - - - - - - - - - - - {CCAA7AFE-C094-4D82-A66D-630DE8A3F545} - Aaru.Console - - - - - LICENSE.LGPL - - - - - - - - - - - - - - - - - - - - - - /Library/Frameworks/Mono.framework/Versions/Current/lib/mono - /usr/lib/mono - /usr/local/lib/mono - - $(BaseFrameworkPathOverrideForMono)/4.0-api - $(BaseFrameworkPathOverrideForMono)/4.5-api - $(BaseFrameworkPathOverrideForMono)/4.5.1-api - $(BaseFrameworkPathOverrideForMono)/4.5.2-api - $(BaseFrameworkPathOverrideForMono)/4.6-api - $(BaseFrameworkPathOverrideForMono)/4.6.1-api - $(BaseFrameworkPathOverrideForMono)/4.6.2-api - $(BaseFrameworkPathOverrideForMono)/4.7-api - $(BaseFrameworkPathOverrideForMono)/4.7.1-api - true - - $(FrameworkPathOverride)/Facades;$(AssemblySearchPaths) - - \ No newline at end of file diff --git a/Aaru.Helpers/ArrayFill.cs b/Aaru.Helpers/ArrayFill.cs deleted file mode 100644 index ff3ab5a..0000000 --- a/Aaru.Helpers/ArrayFill.cs +++ /dev/null @@ -1,81 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ArrayFill.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Fills an array with a specified value. -// -// --[ License ] -------------------------------------------------------------- -// -// No license specified by creator. -// -// Published on https://github.com/mykohsu/Extensions/blob/master/ArrayExtensions.cs -// -// Assuming open source. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// Copyright(C) 2014 mykohsu -// ****************************************************************************/ - -using System; -using System.Text; - -namespace Aaru.Helpers -{ - public static partial class ArrayHelpers - { - /// Fills an array with the specified value - /// Array - /// Value - /// Array type - public static void ArrayFill(T[] destinationArray, T value) => ArrayFill(destinationArray, new[] - { - value - }); - - /// Fills an array with the contents of the specified array - /// Array - /// Value - /// Array type - public static void ArrayFill(T[] destinationArray, T[] value) - { - if(destinationArray == null) - throw new ArgumentNullException(nameof(destinationArray)); - - if(value.Length > destinationArray.Length) - throw new ArgumentException("Length of value array must not be more than length of destination"); - - // set the initial array value - Array.Copy(value, destinationArray, value.Length); - - int arrayToFillHalfLength = destinationArray.Length / 2; - int copyLength; - - for(copyLength = value.Length; copyLength < arrayToFillHalfLength; copyLength <<= 1) - Array.Copy(destinationArray, 0, destinationArray, copyLength, copyLength); - - Array.Copy(destinationArray, 0, destinationArray, copyLength, destinationArray.Length - copyLength); - } - - /// Converts a byte array to its hexadecimal representation - /// Byte array - /// true to use uppercase - /// - public static string ByteArrayToHex(byte[] array, bool upper = false) - { - var sb = new StringBuilder(); - - for(long i = 0; i < array.LongLength; i++) - sb.AppendFormat("{0:x2}", array[i]); - - return upper ? sb.ToString().ToUpper() : sb.ToString(); - } - } -} \ No newline at end of file diff --git a/Aaru.Helpers/ArrayIsEmpty.cs b/Aaru.Helpers/ArrayIsEmpty.cs deleted file mode 100644 index 100ac96..0000000 --- a/Aaru.Helpers/ArrayIsEmpty.cs +++ /dev/null @@ -1,50 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : ArrayIsEmpty.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Methods for detecting an empty array. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Linq; - -namespace Aaru.Helpers -{ - /// Helper operations to work with arrays - public static partial class ArrayHelpers - { - /// Checks if an array is null, filled with the NULL byte (0x00) or ASCII whitespace (0x20) - /// Array - /// True if null or whitespace - public static bool ArrayIsNullOrWhiteSpace(byte[] array) => array?.All(b => b == 0x00 || b == 0x20) != false; - - /// Checks if an array is null or filled with the NULL byte (0x00) - /// Array - /// True if null - public static bool ArrayIsNullOrEmpty(byte[] array) => array?.All(b => b == 0x00) != false; - } -} \ No newline at end of file diff --git a/Aaru.Helpers/BigEndianBitConverter.cs b/Aaru.Helpers/BigEndianBitConverter.cs deleted file mode 100644 index b2345b3..0000000 --- a/Aaru.Helpers/BigEndianBitConverter.cs +++ /dev/null @@ -1,324 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : BigEndianBitConverter.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Override of System.BitConverter that knows how to handle big-endian. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Linq; - -namespace Aaru.Helpers -{ - /// - /// Converts base data types to an array of bytes, and an array of bytes to base data types. All info taken from - /// the meta data of System.BitConverter. This implementation allows for Endianness consideration. - /// - public static class BigEndianBitConverter - { - /// Converts the specified double-precision floating point number to a 64-bit signed integer. - /// The number to convert. - /// A 64-bit signed integer whose value is equivalent to value. - /// It is not currently implemented - public static long DoubleToInt64Bits(double value) => throw new NotImplementedException(); - - /// Returns the specified Boolean value as an array of bytes. - /// A Boolean value. - /// An array of bytes with length 1. - public static byte[] GetBytes(bool value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified Unicode character value as an array of bytes. - /// A character to convert. - /// An array of bytes with length 2. - public static byte[] GetBytes(char value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified double-precision floating point value as an array of bytes. - /// The number to convert. - /// An array of bytes with length 8. - public static byte[] GetBytes(double value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified single-precision floating point value as an array of bytes. - /// The number to convert. - /// An array of bytes with length 4. - public static byte[] GetBytes(float value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified 32-bit signed integer value as an array of bytes. - /// The number to convert. - /// An array of bytes with length 4. - public static byte[] GetBytes(int value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified 64-bit signed integer value as an array of bytes. - /// The number to convert. - /// An array of bytes with length 8. - public static byte[] GetBytes(long value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified 16-bit signed integer value as an array of bytes. - /// The number to convert. - /// An array of bytes with length 2. - public static byte[] GetBytes(short value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified 32-bit unsigned integer value as an array of bytes. - /// The number to convert. - /// An array of bytes with length 4. - public static byte[] GetBytes(uint value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified 64-bit unsigned integer value as an array of bytes. - /// The number to convert. - /// An array of bytes with length 8. - public static byte[] GetBytes(ulong value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Returns the specified 16-bit unsigned integer value as an array of bytes. - /// The number to convert. - /// An array of bytes with length 2. - public static byte[] GetBytes(ushort value) => BitConverter.GetBytes(value).Reverse().ToArray(); - - /// Converts the specified 64-bit signed integer to a double-precision floating point number. - /// The number to convert. - /// A double-precision floating point number whose value is equivalent to value. - public static double Int64BitsToDouble(long value) => throw new NotImplementedException(); - - /// Returns a Boolean value converted from one byte at a specified position in a byte array. - /// An array of bytes. - /// The starting position within value. - /// true if the byte at in value is nonzero; otherwise, false. - /// value is null. - /// - /// is less than zero or greater than the - /// length of value minus 1. - /// - public static bool ToBoolean(byte[] value, int startIndex) => throw new NotImplementedException(); - - /// Returns a Unicode character converted from two bytes at a specified position in a byte array. - /// An array. - /// The starting position within value. - /// A character formed by two bytes beginning at . - /// equals the length of value minus 1. - /// value is null. - /// - /// is less than zero or greater than the - /// length of value minus 1. - /// - public static char ToChar(byte[] value, int startIndex) => throw new NotImplementedException(); - - /// - /// Returns a double-precision floating point number converted from eight bytes at a specified position in a byte - /// array. - /// - /// An array of bytes. - /// The starting position within value. - /// A double precision floating point number formed by eight bytes beginning at . - /// - /// is greater than or equal to the length of value - /// minus 7, and is less than or equal to the length of value minus 1. - /// - /// value is null. - /// - /// is less than zero or greater than the - /// length of value minus 1. - /// - public static double ToDouble(byte[] value, int startIndex) => throw new NotImplementedException(); - - /// Returns a 16-bit signed integer converted from two bytes at a specified position in a byte array. - /// An array of bytes. - /// The starting position within value. - /// A 16-bit signed integer formed by two bytes beginning at . - /// equals the length of value minus 1. - /// value is null. - /// - /// startIndex is less than zero or greater than the length of value - /// minus 1. - /// - public static short ToInt16(byte[] value, int startIndex) => - BitConverter.ToInt16(value.Reverse().ToArray(), value.Length - sizeof(short) - startIndex); - - /// Returns a 32-bit signed integer converted from four bytes at a specified position in a byte array. - /// An array of bytes. - /// The starting position within value. - /// A 32-bit signed integer formed by four bytes beginning at . - /// - /// is greater than or equal to the length of value - /// minus 3, and is less than or equal to the length of value minus 1. - /// - /// value is null. - /// - /// startIndex is less than zero or greater than the length of value - /// minus 1. - /// - public static int ToInt32(byte[] value, int startIndex) => - BitConverter.ToInt32(value.Reverse().ToArray(), value.Length - sizeof(int) - startIndex); - - /// Returns a 64-bit signed integer converted from eight bytes at a specified position in a byte array. - /// An array of bytes. - /// The starting position within value. - /// A 64-bit signed integer formed by eight bytes beginning at . - /// - /// is greater than or equal to the length of value - /// minus 7, and is less than or equal to the length of value minus 1. - /// - /// value is null. - /// - /// is less than zero or greater than the - /// length of value minus 1. - /// - public static long ToInt64(byte[] value, int startIndex) => - BitConverter.ToInt64(value.Reverse().ToArray(), value.Length - sizeof(long) - startIndex); - - /// - /// Returns a single-precision floating point number converted from four bytes at a specified position in a byte - /// array. - /// - /// An array of bytes. - /// The starting position within value. - /// A single-precision floating point number formed by four bytes beginning at . - /// - /// is greater than or equal to the length of value - /// minus 3, and is less than or equal to the length of value minus 1. - /// - /// value is null. - /// - /// is less than zero or greater than the - /// length of value minus 1. - /// - public static float ToSingle(byte[] value, int startIndex) => - BitConverter.ToSingle(value.Reverse().ToArray(), value.Length - sizeof(float) - startIndex); - - /// - /// Converts the numeric value of each element of a specified array of bytes to its equivalent hexadecimal string - /// representation. - /// - /// An array of bytes. - /// - /// A System.String of hexadecimal pairs separated by hyphens, where each pair represents the corresponding - /// element in value; for example, "7F-2C-4A". - /// - /// value is null. - public static string ToString(byte[] value) => BitConverter.ToString(value.Reverse().ToArray()); - - /// - /// Converts the numeric value of each element of a specified subarray of bytes to its equivalent hexadecimal - /// string representation. - /// - /// An array of bytes. - /// The starting position within value. - /// - /// A System.String of hexadecimal pairs separated by hyphens, where each pair represents the corresponding - /// element in a subarray of value; for example, "7F-2C-4A". - /// - /// value is null. - /// - /// startIndex is less than zero or greater than the length of value - /// minus 1. - /// - public static string ToString(byte[] value, int startIndex) => - BitConverter.ToString(value.Reverse().ToArray(), startIndex); - - /// - /// Converts the numeric value of each element of a specified subarray of bytes to its equivalent hexadecimal - /// string representation. - /// - /// An array of bytes. - /// The starting position within value. - /// The number of array elements in value to convert. - /// - /// A System.String of hexadecimal pairs separated by hyphens, where each pair represents the corresponding - /// element in a subarray of value; for example, "7F-2C-4A". - /// - /// value is null. - /// - /// startIndex or length is less than zero. -or- startIndex is greater - /// than zero and is greater than or equal to the length of value. - /// - /// - /// The combination of startIndex and length does not specify a position within - /// value; that is, the startIndex parameter is greater than the length of value minus the length parameter. - /// - public static string ToString(byte[] value, int startIndex, int length) => - BitConverter.ToString(value.Reverse().ToArray(), startIndex, length); - - /// Returns a 16-bit unsigned integer converted from two bytes at a specified position in a byte array. - /// The array of bytes. - /// The starting position within value. - /// A 16-bit unsigned integer formed by two bytes beginning at startIndex. - /// startIndex equals the length of value minus 1. - /// value is null. - /// - /// startIndex is less than zero or greater than the length of value - /// minus 1. - /// - public static ushort ToUInt16(byte[] value, int startIndex) => - BitConverter.ToUInt16(value.Reverse().ToArray(), value.Length - sizeof(ushort) - startIndex); - - /// Returns a 32-bit unsigned integer converted from four bytes at a specified position in a byte array. - /// An array of bytes. - /// The starting position within value. - /// A 32-bit unsigned integer formed by four bytes beginning at startIndex. - /// - /// startIndex is greater than or equal to the length of value minus 3, and is - /// less than or equal to the length of value minus 1. - /// - /// value is null. - /// - /// startIndex is less than zero or greater than the length of value - /// minus 1. - /// - public static uint ToUInt32(byte[] value, int startIndex) => - BitConverter.ToUInt32(value.Reverse().ToArray(), value.Length - sizeof(uint) - startIndex); - - /// Returns a 64-bit unsigned integer converted from eight bytes at a specified position in a byte array. - /// An array of bytes. - /// The starting position within value. - /// A 64-bit unsigned integer formed by the eight bytes beginning at startIndex. - /// - /// startIndex is greater than or equal to the length of value minus 7, and is - /// less than or equal to the length of value minus 1. - /// - /// value is null. - /// - /// startIndex is less than zero or greater than the length of value - /// minus 1. - /// - public static ulong ToUInt64(byte[] value, int startIndex) => - BitConverter.ToUInt64(value.Reverse().ToArray(), value.Length - sizeof(ulong) - startIndex); - - /// Converts a big endian byte array representation of a GUID into the .NET Guid structure - /// Byte array containing a GUID in big endian - /// Start of the byte array to process - /// Processed Guid - public static Guid ToGuid(byte[] value, int startIndex) => new Guid(ToUInt32(value, 0 + startIndex), - ToUInt16(value, 4 + startIndex), - ToUInt16(value, 6 + startIndex), - value[8 + startIndex + 0], - value[8 + startIndex + 1], - value[8 + startIndex + 2], - value[8 + startIndex + 3], - value[8 + startIndex + 5], - value[8 + startIndex + 5], - value[8 + startIndex + 6], - value[8 + startIndex + 7]); - } -} \ No newline at end of file diff --git a/Aaru.Helpers/BitEndian.cs b/Aaru.Helpers/BitEndian.cs deleted file mode 100644 index 0205652..0000000 --- a/Aaru.Helpers/BitEndian.cs +++ /dev/null @@ -1,51 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : BitEndian.cs -// Author(s) : Natalia Portillo -// -// Component : Common types. -// -// --[ Description ] ---------------------------------------------------------- -// -// Defines enumerations of bit endianness. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.Helpers -{ - /// Describes the endianness of bits on a data structure - public enum BitEndian - { - /// Little-endian, or least significant bit - Little, - /// Big-endian, or most significant bit - Big, - /// PDP-11 endian, little endian except for 32-bit integers where the 16 halves are swapped between them - Pdp - } -} \ No newline at end of file diff --git a/Aaru.Helpers/CHS.cs b/Aaru.Helpers/CHS.cs deleted file mode 100644 index 166e702..0000000 --- a/Aaru.Helpers/CHS.cs +++ /dev/null @@ -1,49 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CHS.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Helpers for CHS<->LBA conversions -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.Helpers -{ - /// Helper operations to work with CHS values - public static class CHS - { - /// Converts a CHS position to a LBA one - /// Cylinder - /// Head - /// Sector - /// Number of heads - /// Number of sectors per track - /// - public static uint ToLBA(uint cyl, uint head, uint sector, uint maxHead, uint maxSector) => - maxHead == 0 || maxSector == 0 ? (((cyl * 16) + head) * 63) + sector - 1 - : (((cyl * maxHead) + head) * maxSector) + sector - 1; - } -} \ No newline at end of file diff --git a/Aaru.Helpers/CompareBytes.cs b/Aaru.Helpers/CompareBytes.cs deleted file mode 100644 index 18acac9..0000000 --- a/Aaru.Helpers/CompareBytes.cs +++ /dev/null @@ -1,72 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CompareBytes.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Compares two byte arrays. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.Helpers -{ - public static partial class ArrayHelpers - { - /// Compares two byte arrays - /// true if they are different in any way - /// true if they have the same size - /// Left array - /// Right array - public static void CompareBytes(out bool different, out bool sameSize, byte[] compareArray1, - byte[] compareArray2) - { - different = false; - sameSize = true; - - long leastBytes; - - if(compareArray1.LongLength < compareArray2.LongLength) - { - sameSize = false; - leastBytes = compareArray1.LongLength; - } - else if(compareArray1.LongLength > compareArray2.LongLength) - { - sameSize = false; - leastBytes = compareArray2.LongLength; - } - else - leastBytes = compareArray1.LongLength; - - for(long i = 0; i < leastBytes; i++) - if(compareArray1[i] != compareArray2[i]) - { - different = true; - - return; - } - } - } -} \ No newline at end of file diff --git a/Aaru.Helpers/CountBits.cs b/Aaru.Helpers/CountBits.cs deleted file mode 100644 index 7351d53..0000000 --- a/Aaru.Helpers/CountBits.cs +++ /dev/null @@ -1,49 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : CountBits.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Counts bits in a number. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -namespace Aaru.Helpers -{ - /// Helper operations to count bits - public static class CountBits - { - /// Counts the number of bits set to true in a number - /// Number - /// Bits set to true - public static int Count(uint number) - { - number -= (number >> 1) & 0x55555555; - number = (number & 0x33333333) + ((number >> 2) & 0x33333333); - - return (int)((((number + (number >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24); - } - } -} \ No newline at end of file diff --git a/Aaru.Helpers/DateHandlers.cs b/Aaru.Helpers/DateHandlers.cs deleted file mode 100644 index 73ae942..0000000 --- a/Aaru.Helpers/DateHandlers.cs +++ /dev/null @@ -1,389 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : DateHandlers.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Convert several timestamp formats to C# DateTime. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Text; -using Aaru.Console; - -namespace Aaru.Helpers -{ - /// Helper operations for timestamp management (date and time) - public static class DateHandlers - { - static readonly DateTime _lisaEpoch = new DateTime(1901, 1, 1, 0, 0, 0); - static readonly DateTime _macEpoch = new DateTime(1904, 1, 1, 0, 0, 0); - static readonly DateTime _unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0); - /// Day 0 of Julian Date system - static readonly DateTime _julianEpoch = new DateTime(1858, 11, 17, 0, 0, 0); - static readonly DateTime _amigaEpoch = new DateTime(1978, 1, 1, 0, 0, 0); - - /// Converts a Macintosh timestamp to a .NET DateTime - /// Macintosh timestamp (seconds since 1st Jan. 1904) - /// .NET DateTime - public static DateTime MacToDateTime(ulong macTimeStamp) => _macEpoch.AddTicks((long)(macTimeStamp * 10000000)); - - /// Converts a Lisa timestamp to a .NET DateTime - /// Lisa timestamp (seconds since 1st Jan. 1901) - /// .NET DateTime - public static DateTime LisaToDateTime(uint lisaTimeStamp) => _lisaEpoch.AddSeconds(lisaTimeStamp); - - /// Converts a UNIX timestamp to a .NET DateTime - /// UNIX timestamp (seconds since 1st Jan. 1970) - /// .NET DateTime - public static DateTime UnixToDateTime(int unixTimeStamp) => _unixEpoch.AddSeconds(unixTimeStamp); - - /// Converts a UNIX timestamp to a .NET DateTime - /// UNIX timestamp (seconds since 1st Jan. 1970) - /// .NET DateTime - public static DateTime UnixToDateTime(long unixTimeStamp) => _unixEpoch.AddSeconds(unixTimeStamp); - - /// Converts a UNIX timestamp to a .NET DateTime - /// UNIX timestamp (seconds since 1st Jan. 1970) - /// .NET DateTime - public static DateTime UnixUnsignedToDateTime(uint unixTimeStamp) => _unixEpoch.AddSeconds(unixTimeStamp); - - /// Converts a UNIX timestamp to a .NET DateTime - /// Seconds since 1st Jan. 1970) - /// Nanoseconds - /// .NET DateTime - public static DateTime UnixUnsignedToDateTime(uint seconds, uint nanoseconds) => - _unixEpoch.AddSeconds(seconds).AddTicks((long)nanoseconds / 100); - - /// Converts a UNIX timestamp to a .NET DateTime - /// UNIX timestamp (seconds since 1st Jan. 1970) - /// .NET DateTime - public static DateTime UnixUnsignedToDateTime(ulong unixTimeStamp) => _unixEpoch.AddSeconds(unixTimeStamp); - - /// Converts a High Sierra Format timestamp to a .NET DateTime - /// High Sierra Format timestamp - /// .NET DateTime - public static DateTime HighSierraToDateTime(byte[] vdDateTime) - { - byte[] isoTime = new byte[17]; - Array.Copy(vdDateTime, 0, isoTime, 0, 16); - - return Iso9660ToDateTime(isoTime); - } - - // TODO: Timezone - /// Converts an ISO9660 timestamp to a .NET DateTime - /// ISO9660 timestamp - /// .NET DateTime - public static DateTime Iso9660ToDateTime(byte[] vdDateTime) - { - byte[] twoCharValue = new byte[2]; - byte[] fourCharValue = new byte[4]; - - fourCharValue[0] = vdDateTime[0]; - fourCharValue[1] = vdDateTime[1]; - fourCharValue[2] = vdDateTime[2]; - fourCharValue[3] = vdDateTime[3]; - - AaruConsole.DebugWriteLine("ISO9600ToDateTime handler", "year = \"{0}\"", - StringHandlers.CToString(fourCharValue, Encoding.ASCII)); - - if(!int.TryParse(StringHandlers.CToString(fourCharValue, Encoding.ASCII), out int year)) - year = 0; - - twoCharValue[0] = vdDateTime[4]; - twoCharValue[1] = vdDateTime[5]; - - AaruConsole.DebugWriteLine("ISO9600ToDateTime handler", "month = \"{0}\"", - StringHandlers.CToString(twoCharValue, Encoding.ASCII)); - - if(!int.TryParse(StringHandlers.CToString(twoCharValue, Encoding.ASCII), out int month)) - month = 0; - - twoCharValue[0] = vdDateTime[6]; - twoCharValue[1] = vdDateTime[7]; - - AaruConsole.DebugWriteLine("ISO9600ToDateTime handler", "day = \"{0}\"", - StringHandlers.CToString(twoCharValue, Encoding.ASCII)); - - if(!int.TryParse(StringHandlers.CToString(twoCharValue, Encoding.ASCII), out int day)) - day = 0; - - twoCharValue[0] = vdDateTime[8]; - twoCharValue[1] = vdDateTime[9]; - - AaruConsole.DebugWriteLine("ISO9600ToDateTime handler", "hour = \"{0}\"", - StringHandlers.CToString(twoCharValue, Encoding.ASCII)); - - if(!int.TryParse(StringHandlers.CToString(twoCharValue, Encoding.ASCII), out int hour)) - hour = 0; - - twoCharValue[0] = vdDateTime[10]; - twoCharValue[1] = vdDateTime[11]; - - AaruConsole.DebugWriteLine("ISO9600ToDateTime handler", "minute = \"{0}\"", - StringHandlers.CToString(twoCharValue, Encoding.ASCII)); - - if(!int.TryParse(StringHandlers.CToString(twoCharValue, Encoding.ASCII), out int minute)) - minute = 0; - - twoCharValue[0] = vdDateTime[12]; - twoCharValue[1] = vdDateTime[13]; - - AaruConsole.DebugWriteLine("ISO9600ToDateTime handler", "second = \"{0}\"", - StringHandlers.CToString(twoCharValue, Encoding.ASCII)); - - if(!int.TryParse(StringHandlers.CToString(twoCharValue, Encoding.ASCII), out int second)) - second = 0; - - twoCharValue[0] = vdDateTime[14]; - twoCharValue[1] = vdDateTime[15]; - - AaruConsole.DebugWriteLine("ISO9600ToDateTime handler", "hundredths = \"{0}\"", - StringHandlers.CToString(twoCharValue, Encoding.ASCII)); - - if(!int.TryParse(StringHandlers.CToString(twoCharValue, Encoding.ASCII), out int hundredths)) - hundredths = 0; - - AaruConsole.DebugWriteLine("ISO9600ToDateTime handler", - "decodedDT = new DateTime({0}, {1}, {2}, {3}, {4}, {5}, {6}, DateTimeKind.Unspecified);", - year, month, day, hour, minute, second, hundredths * 10); - - sbyte difference = (sbyte)vdDateTime[16]; - - var decodedDt = new DateTime(year, month, day, hour, minute, second, hundredths * 10, DateTimeKind.Utc); - - return decodedDt.AddMinutes(difference * -15); - } - - /// Converts a VMS timestamp to a .NET DateTime - /// VMS timestamp (tenths of microseconds since day 0 of the Julian Date) - /// .NET DateTime - /// C# works in UTC, VMS on Julian Date, some displacement may occur on disks created outside UTC - public static DateTime VmsToDateTime(ulong vmsDate) - { - double delta = vmsDate * 0.0001; // Tenths of microseconds to milliseconds, will lose some detail - - return _julianEpoch.AddMilliseconds(delta); - } - - /// Converts an Amiga timestamp to a .NET DateTime - /// Days since the 1st Jan. 1978 - /// Minutes since o'clock - /// Ticks - /// .NET DateTime - public static DateTime AmigaToDateTime(uint days, uint minutes, uint ticks) - { - DateTime temp = _amigaEpoch.AddDays(days); - temp = temp.AddMinutes(minutes); - - return temp.AddMilliseconds(ticks * 20); - } - - /// Converts an UCSD Pascal timestamp to a .NET DateTime - /// UCSD Pascal timestamp - /// .NET DateTime - public static DateTime UcsdPascalToDateTime(short dateRecord) - { - int year = ((dateRecord & 0xFE00) >> 9) + 1900; - int day = (dateRecord & 0x01F0) >> 4; - int month = dateRecord & 0x000F; - - AaruConsole.DebugWriteLine("UCSDPascalToDateTime handler", - "dateRecord = 0x{0:X4}, year = {1}, month = {2}, day = {3}", dateRecord, year, - month, day); - - return new DateTime(year, month, day); - } - - /// Converts a DOS timestamp to a .NET DateTime - /// Date - /// Time - /// .NET DateTime - public static DateTime DosToDateTime(ushort date, ushort time) - { - int year = ((date & 0xFE00) >> 9) + 1980; - int month = (date & 0x1E0) >> 5; - int day = date & 0x1F; - int hour = (time & 0xF800) >> 11; - int minute = (time & 0x7E0) >> 5; - int second = (time & 0x1F) * 2; - - AaruConsole.DebugWriteLine("DOSToDateTime handler", "date = 0x{0:X4}, year = {1}, month = {2}, day = {3}", - date, year, month, day); - - AaruConsole.DebugWriteLine("DOSToDateTime handler", - "time = 0x{0:X4}, hour = {1}, minute = {2}, second = {3}", time, hour, minute, - second); - - DateTime dosDate; - - try - { - dosDate = new DateTime(year, month, day, hour, minute, second); - } - catch(ArgumentOutOfRangeException) - { - dosDate = new DateTime(1980, 1, 1, 0, 0, 0); - } - - return dosDate; - } - - /// Converts a CP/M timestamp to .NET DateTime - /// CP/M timestamp - /// .NET DateTime - public static DateTime CpmToDateTime(byte[] timestamp) - { - ushort days = BitConverter.ToUInt16(timestamp, 0); - int hours = timestamp[2]; - int minutes = timestamp[3]; - - DateTime temp = _amigaEpoch.AddDays(days); - temp = temp.AddHours(hours); - temp = temp.AddMinutes(minutes); - - return temp; - } - - /// Converts an ECMA timestamp to a .NET DateTime - /// Timezone - /// Year - /// Month - /// Day - /// Hour - /// Minute - /// Second - /// Centiseconds - /// Hundreds of microseconds - /// Microseconds - /// - public static DateTime EcmaToDateTime(ushort typeAndTimeZone, short year, byte month, byte day, byte hour, - byte minute, byte second, byte centiseconds, byte hundredsOfMicroseconds, - byte microseconds) - { - byte specification = (byte)((typeAndTimeZone & 0xF000) >> 12); - - long ticks = ((long)centiseconds * 100000) + ((long)hundredsOfMicroseconds * 1000) + - ((long)microseconds * 10); - - if(specification == 0) - return new DateTime(year, month, day, hour, minute, second, DateTimeKind.Utc).AddTicks(ticks); - - ushort preOffset = (ushort)(typeAndTimeZone & 0xFFF); - short offset; - - if((preOffset & 0x800) == 0x800) - offset = (short)(preOffset | 0xF000); - else - offset = (short)(preOffset & 0x7FF); - - if(offset == -2047) - return new DateTime(year, month, day, hour, minute, second, DateTimeKind.Unspecified).AddTicks(ticks); - - if(offset < -1440 || - offset > 1440) - offset = 0; - - return new DateTimeOffset(year, month, day, hour, minute, second, new TimeSpan(0, offset, 0)). - AddTicks(ticks).DateTime; - } - - /// Converts a Solaris high resolution timestamp to .NET DateTime - /// Solaris high resolution timestamp - /// .NET DateTime - public static DateTime UnixHrTimeToDateTime(ulong hrTimeStamp) => - _unixEpoch.AddTicks((long)(hrTimeStamp / 100)); - - /// Converts an OS-9 timestamp to .NET DateTime - /// OS-9 timestamp - /// .NET DateTime - public static DateTime Os9ToDateTime(byte[] date) - { - if(date == null || - (date.Length != 3 && date.Length != 5)) - return DateTime.MinValue; - - DateTime os9Date; - - try - { - os9Date = date.Length == 5 ? new DateTime(1900 + date[0], date[1], date[2], date[3], date[4], 0) - : new DateTime(1900 + date[0], date[1], date[2], 0, 0, 0); - } - catch(ArgumentOutOfRangeException) - { - os9Date = new DateTime(1900, 0, 0, 0, 0, 0); - } - - return os9Date; - } - - /// Converts a LIF timestamp to .NET DateTime - /// LIF timestamp - /// .NET DateTime - public static DateTime LifToDateTime(byte[] date) - { - if(date == null || - date.Length != 6) - return new DateTime(1970, 1, 1, 0, 0, 0); - - return LifToDateTime(date[0], date[1], date[2], date[3], date[4], date[5]); - } - - /// Converts a LIF timestamp to .NET DateTime - /// Yer - /// Month - /// Day - /// Hour - /// Minute - /// Second - /// .NET DateTime - public static DateTime LifToDateTime(byte year, byte month, byte day, byte hour, byte minute, byte second) - { - try - { - int iyear = ((year >> 4) * 10) + (year & 0xF); - int imonth = ((month >> 4) * 10) + (month & 0xF); - int iday = ((day >> 4) * 10) + (day & 0xF); - int iminute = ((minute >> 4) * 10) + (minute & 0xF); - int ihour = ((hour >> 4) * 10) + (hour & 0xF); - int isecond = ((second >> 4) * 10) + (second & 0xF); - - if(iyear >= 70) - iyear += 1900; - else - iyear += 2000; - - return new DateTime(iyear, imonth, iday, ihour, iminute, isecond); - } - catch(ArgumentOutOfRangeException) - { - return new DateTime(1970, 1, 1, 0, 0, 0); - } - } - } -} \ No newline at end of file diff --git a/Aaru.Helpers/Marshal.cs b/Aaru.Helpers/Marshal.cs deleted file mode 100644 index 3bbc099..0000000 --- a/Aaru.Helpers/Marshal.cs +++ /dev/null @@ -1,498 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Marshal.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Provides marshalling for binary data. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Diagnostics.CodeAnalysis; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace Aaru.Helpers -{ - /// Provides methods to marshal binary data into C# structs - public static class Marshal - { - /// Returns the size of an unmanaged type in bytes. - /// The type whose size is to be returned. - /// The size, in bytes, of the type that is specified by the generic type parameter. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int SizeOf() => System.Runtime.InteropServices.Marshal.SizeOf(); - - /// Marshal little-endian binary data to a structure - /// Byte array containing the binary data - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T ByteArrayToStructureLittleEndian(byte[] bytes) where T : struct - { - var ptr = GCHandle.Alloc(bytes, GCHandleType.Pinned); - - var str = (T)System.Runtime.InteropServices.Marshal.PtrToStructure(ptr.AddrOfPinnedObject(), typeof(T)); - - ptr.Free(); - - return str; - } - - /// Marshal little-endian binary data to a structure - /// Byte array containing the binary data - /// Start on the array where the structure begins - /// Length of the structure in bytes - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T ByteArrayToStructureLittleEndian(byte[] bytes, int start, int length) where T : struct - { - Span span = bytes; - - return ByteArrayToStructureLittleEndian(span.Slice(start, length).ToArray()); - } - - /// Marshal big-endian binary data to a structure - /// Byte array containing the binary data - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T ByteArrayToStructureBigEndian(byte[] bytes) where T : struct - { - var ptr = GCHandle.Alloc(bytes, GCHandleType.Pinned); - - object str = (T)System.Runtime.InteropServices.Marshal.PtrToStructure(ptr.AddrOfPinnedObject(), typeof(T)); - - ptr.Free(); - - return (T)SwapStructureMembersEndian(str); - } - - /// Marshal big-endian binary data to a structure - /// Byte array containing the binary data - /// Start on the array where the structure begins - /// Length of the structure in bytes - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T ByteArrayToStructureBigEndian(byte[] bytes, int start, int length) where T : struct - { - Span span = bytes; - - return ByteArrayToStructureBigEndian(span.Slice(start, length).ToArray()); - } - - /// Marshal PDP-11 binary data to a structure - /// Byte array containing the binary data - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T ByteArrayToStructurePdpEndian(byte[] bytes) where T : struct - { - { - var ptr = GCHandle.Alloc(bytes, GCHandleType.Pinned); - - object str = - (T)System.Runtime.InteropServices.Marshal.PtrToStructure(ptr.AddrOfPinnedObject(), typeof(T)); - - ptr.Free(); - - return (T)SwapStructureMembersEndianPdp(str); - } - } - - /// Marshal PDP-11 binary data to a structure - /// Byte array containing the binary data - /// Start on the array where the structure begins - /// Length of the structure in bytes - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T ByteArrayToStructurePdpEndian(byte[] bytes, int start, int length) where T : struct - { - Span span = bytes; - - return ByteArrayToStructurePdpEndian(span.Slice(start, length).ToArray()); - } - - /// - /// Marshal little-endian binary data to a structure. If the structure type contains any non value type, this - /// method will crash. - /// - /// Byte array containing the binary data - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T SpanToStructureLittleEndian(ReadOnlySpan bytes) where T : struct => - MemoryMarshal.Read(bytes); - - /// - /// Marshal little-endian binary data to a structure. If the structure type contains any non value type, this - /// method will crash. - /// - /// Byte span containing the binary data - /// Start on the span where the structure begins - /// Length of the structure in bytes - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T SpanToStructureLittleEndian(ReadOnlySpan bytes, int start, int length) - where T : struct => MemoryMarshal.Read(bytes.Slice(start, length)); - - /// - /// Marshal big-endian binary data to a structure. If the structure type contains any non value type, this method - /// will crash. - /// - /// Byte array containing the binary data - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T SpanToStructureBigEndian(ReadOnlySpan bytes) where T : struct - { - T str = SpanToStructureLittleEndian(bytes); - - return (T)SwapStructureMembersEndian(str); - } - - /// - /// Marshal big-endian binary data to a structure. If the structure type contains any non value type, this method - /// will crash. - /// - /// Byte span containing the binary data - /// Start on the span where the structure begins - /// Length of the structure in bytes - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T SpanToStructureBigEndian(ReadOnlySpan bytes, int start, int length) where T : struct - { - T str = SpanToStructureLittleEndian(bytes.Slice(start, length)); - - return (T)SwapStructureMembersEndian(str); - } - - /// - /// Marshal PDP-11 binary data to a structure. If the structure type contains any non value type, this method will - /// crash. - /// - /// Byte array containing the binary data - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T SpanToStructurePdpEndian(ReadOnlySpan bytes) where T : struct - { - object str = SpanToStructureLittleEndian(bytes); - - return (T)SwapStructureMembersEndianPdp(str); - } - - /// - /// Marshal PDP-11 binary data to a structure. If the structure type contains any non value type, this method will - /// crash. - /// - /// Byte array containing the binary data - /// Start on the span where the structure begins - /// Length of the structure in bytes - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T SpanToStructurePdpEndian(ReadOnlySpan bytes, int start, int length) where T : struct - { - object str = SpanToStructureLittleEndian(bytes.Slice(start, length)); - - return (T)SwapStructureMembersEndianPdp(str); - } - - /// - /// Marshal a structure depending on the decoration of . If the - /// decoration is not present it will marshal as a reference type containing little endian structure. - /// - /// Byte array containing the binary data - /// Type of the structure to marshal - /// The binary data marshalled in a structure with the specified type - /// - /// The contains an unsupported - /// endian - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T MarshalStructure(byte[] bytes) where T : struct - { - if(!(typeof(T).GetCustomAttribute(typeof(MarshallingPropertiesAttribute)) is MarshallingPropertiesAttribute - properties)) - return ByteArrayToStructureLittleEndian(bytes); - - switch(properties.Endian) - { - case BitEndian.Little: - return properties.HasReferences ? ByteArrayToStructureLittleEndian(bytes) - : SpanToStructureLittleEndian(bytes); - - case BitEndian.Big: - return properties.HasReferences ? ByteArrayToStructureBigEndian(bytes) - : SpanToStructureBigEndian(bytes); - - case BitEndian.Pdp: - return properties.HasReferences ? ByteArrayToStructurePdpEndian(bytes) - : SpanToStructurePdpEndian(bytes); - default: throw new ArgumentOutOfRangeException(); - } - } - - /// Swaps all members of a structure - /// - /// - [MethodImpl(MethodImplOptions.AggressiveInlining), SuppressMessage("ReSharper", "InconsistentNaming")] - public static object SwapStructureMembersEndian(object str) - { - Type t = str.GetType(); - FieldInfo[] fieldInfo = t.GetFields(); - - foreach(FieldInfo fi in fieldInfo) - if(fi.FieldType == typeof(short) || - (fi.FieldType.IsEnum && fi.FieldType.GetEnumUnderlyingType() == typeof(short))) - { - short x = (short)fi.GetValue(str); - fi.SetValue(str, (short)((x << 8) | ((x >> 8) & 0xFF))); - } - else if(fi.FieldType == typeof(int) || - (fi.FieldType.IsEnum && fi.FieldType.GetEnumUnderlyingType() == typeof(int))) - { - int x = (int)fi.GetValue(str); - x = (int)(((x << 8) & 0xFF00FF00) | (((uint)x >> 8) & 0xFF00FF)); - fi.SetValue(str, (int)(((uint)x << 16) | (((uint)x >> 16) & 0xFFFF))); - } - else if(fi.FieldType == typeof(long) || - (fi.FieldType.IsEnum && fi.FieldType.GetEnumUnderlyingType() == typeof(long))) - { - long x = (long)fi.GetValue(str); - x = ((x & 0x00000000FFFFFFFF) << 32) | (long)(((ulong)x & 0xFFFFFFFF00000000) >> 32); - x = ((x & 0x0000FFFF0000FFFF) << 16) | (long)(((ulong)x & 0xFFFF0000FFFF0000) >> 16); - x = ((x & 0x00FF00FF00FF00FF) << 8) | (long)(((ulong)x & 0xFF00FF00FF00FF00) >> 8); - - fi.SetValue(str, x); - } - else if(fi.FieldType == typeof(ushort) || - (fi.FieldType.IsEnum && fi.FieldType.GetEnumUnderlyingType() == typeof(ushort))) - { - ushort x = (ushort)fi.GetValue(str); - fi.SetValue(str, (ushort)((x << 8) | (x >> 8))); - } - else if(fi.FieldType == typeof(uint) || - (fi.FieldType.IsEnum && fi.FieldType.GetEnumUnderlyingType() == typeof(uint))) - { - uint x = (uint)fi.GetValue(str); - x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); - fi.SetValue(str, (x << 16) | (x >> 16)); - } - else if(fi.FieldType == typeof(ulong) || - (fi.FieldType.IsEnum && fi.FieldType.GetEnumUnderlyingType() == typeof(ulong))) - { - ulong x = (ulong)fi.GetValue(str); - x = ((x & 0x00000000FFFFFFFF) << 32) | ((x & 0xFFFFFFFF00000000) >> 32); - x = ((x & 0x0000FFFF0000FFFF) << 16) | ((x & 0xFFFF0000FFFF0000) >> 16); - x = ((x & 0x00FF00FF00FF00FF) << 8) | ((x & 0xFF00FF00FF00FF00) >> 8); - fi.SetValue(str, x); - } - else if(fi.FieldType == typeof(float)) - { - float flt = (float)fi.GetValue(str); - byte[] flt_b = BitConverter.GetBytes(flt); - - fi.SetValue(str, BitConverter.ToSingle(new[] - { - flt_b[3], flt_b[2], flt_b[1], flt_b[0] - }, 0)); - } - else if(fi.FieldType == typeof(double)) - { - double dbl = (double)fi.GetValue(str); - byte[] dbl_b = BitConverter.GetBytes(dbl); - - fi.SetValue(str, BitConverter.ToDouble(new[] - { - dbl_b[7], dbl_b[6], dbl_b[5], dbl_b[4], dbl_b[3], dbl_b[2], dbl_b[1], dbl_b[0] - }, 0)); - } - else if(fi.FieldType == typeof(byte) || - fi.FieldType == typeof(sbyte)) - { - // Do nothing, can't byteswap them! - } - else if(fi.FieldType == typeof(Guid)) - { - // TODO: Swap GUID - } - - // TODO: Swap arrays - else if(fi.FieldType.IsValueType && - !fi.FieldType.IsEnum && - !fi.FieldType.IsArray) - { - object obj = fi.GetValue(str); - object strc = SwapStructureMembersEndian(obj); - fi.SetValue(str, strc); - } - - return str; - } - - /// Swaps all fields in an structure considering them to follow PDP endian conventions - /// Source structure - /// Resulting structure - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static object SwapStructureMembersEndianPdp(object str) - { - Type t = str.GetType(); - FieldInfo[] fieldInfo = t.GetFields(); - - foreach(FieldInfo fi in fieldInfo) - if(fi.FieldType == typeof(short) || - fi.FieldType == typeof(long) || - fi.FieldType == typeof(ushort) || - fi.FieldType == typeof(ulong) || - fi.FieldType == typeof(float) || - fi.FieldType == typeof(double) || - fi.FieldType == typeof(byte) || - fi.FieldType == typeof(sbyte) || - fi.FieldType == typeof(Guid)) - { - // Do nothing - } - else if(fi.FieldType == typeof(int) || - (fi.FieldType.IsEnum && fi.FieldType.GetEnumUnderlyingType() == typeof(int))) - { - int x = (int)fi.GetValue(str); - fi.SetValue(str, ((x & 0xffffu) << 16) | ((x & 0xffff0000u) >> 16)); - } - else if(fi.FieldType == typeof(uint) || - (fi.FieldType.IsEnum && fi.FieldType.GetEnumUnderlyingType() == typeof(uint))) - { - uint x = (uint)fi.GetValue(str); - fi.SetValue(str, ((x & 0xffffu) << 16) | ((x & 0xffff0000u) >> 16)); - } - - // TODO: Swap arrays - else if(fi.FieldType.IsValueType && - !fi.FieldType.IsEnum && - !fi.FieldType.IsArray) - { - object obj = fi.GetValue(str); - object strc = SwapStructureMembersEndianPdp(obj); - fi.SetValue(str, strc); - } - - return str; - } - - /// Marshal a structure to little-endian binary data - /// The structure you want to marshal to binary - /// Type of the structure to marshal - /// The byte array representing the given structure - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static byte[] StructureToByteArrayLittleEndian(T str) where T : struct - { - byte[] buf = new byte[SizeOf()]; - var ptr = GCHandle.Alloc(buf, GCHandleType.Pinned); - System.Runtime.InteropServices.Marshal.StructureToPtr(str, ptr.AddrOfPinnedObject(), false); - ptr.Free(); - - return buf; - } - - /// Marshal a structure to little-endian binary data - /// The structure you want to marshal to binary - /// Type of the structure to marshal - /// The byte array representing the given structure - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static byte[] StructureToByteArrayBigEndian(T str) where T : struct => - StructureToByteArrayLittleEndian((T)SwapStructureMembersEndian(str)); - - /// Converts a hexadecimal string into a byte array - /// Hexadecimal string - /// Resulting byte array - /// Number of output bytes processed - public static int ConvertFromHexAscii(string hex, out byte[] outBuf) - { - outBuf = null; - - if(hex is null || - hex == "") - return -1; - - int off = 0; - - if(hex[0] == '0' && - (hex[1] == 'x' || hex[1] == 'X')) - { - off = 2; - } - - outBuf = new byte[(hex.Length - off) / 2]; - int count = 0; - - for(int i = off; i < hex.Length; i += 2) - { - char c = hex[i]; - - if(c < '0' || - (c > '9' && c < 'A') || - (c > 'F' && c < 'a') || - c > 'f') - break; - - c -= c >= 'a' && c <= 'f' - ? '\u0057' - : c >= 'A' && c <= 'F' - ? '\u0037' - : '\u0030'; - - outBuf[(i - off) / 2] = (byte)(c << 4); - - c = hex[i + 1]; - - if(c < '0' || - (c > '9' && c < 'A') || - (c > 'F' && c < 'a') || - c > 'f') - break; - - c -= c >= 'a' && c <= 'f' - ? '\u0057' - : c >= 'A' && c <= 'F' - ? '\u0037' - : '\u0030'; - - outBuf[(i - off) / 2] += (byte)c; - - count++; - } - - return count; - } - } -} \ No newline at end of file diff --git a/Aaru.Helpers/MarshallingPropertiesAttribute.cs b/Aaru.Helpers/MarshallingPropertiesAttribute.cs deleted file mode 100644 index c148ac9..0000000 --- a/Aaru.Helpers/MarshallingPropertiesAttribute.cs +++ /dev/null @@ -1,62 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : MarshallingPropertiesAttribute.cs -// Author(s) : Natalia Portillo -// -// Component : Common types. -// -// --[ Description ] ---------------------------------------------------------- -// -// Declares properties of structs for marshalling. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; - -namespace Aaru.Helpers -{ - /// - /// Defines properties to help marshalling structs from binary data - [AttributeUsage(AttributeTargets.Struct)] - public sealed class MarshallingPropertiesAttribute : Attribute - { - /// - /// Defines properties to help marshalling structs from binary data - /// Defines properties to help marshalling structs from binary data - public MarshallingPropertiesAttribute(BitEndian endian) - { - Endian = endian; - HasReferences = true; - } - - /// c - public BitEndian Endian { get; } - /// Tells if the structure, or any nested structure, has any non-value type (e.g. arrays, strings, etc). - public bool HasReferences { get; set; } - } -} \ No newline at end of file diff --git a/Aaru.Helpers/PrintHex.cs b/Aaru.Helpers/PrintHex.cs deleted file mode 100644 index a06870b..0000000 --- a/Aaru.Helpers/PrintHex.cs +++ /dev/null @@ -1,136 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : PrintHex.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Prints a byte array as hexadecimal. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Text; -using Aaru.Console; - -namespace Aaru.Helpers -{ - /// Helper operations to get hexadecimal representations of byte arrays - public static class PrintHex - { - /// Prints a byte array as hexadecimal values to the console - /// Array - /// Width of line - public static void PrintHexArray(byte[] array, int width = 16) => - AaruConsole.WriteLine(ByteArrayToHexArrayString(array, width)); - - /// Prints a byte array as hexadecimal values to a string - /// Array - /// Width of line - /// Use ANSI escape colors for sections - /// String containing hexadecimal values - public static string ByteArrayToHexArrayString(byte[] array, int width = 16, bool color = false) - { - if(array is null) - return null; - - // TODO: Color list - // TODO: Allow to change width - string str = "Offset"; - int rows = array.Length / 16; - int last = array.Length % 16; - int offsetLength = $"{array.Length:X}".Length; - var sb = new StringBuilder(); - - if(last > 0) - rows++; - - if(last == 0) - last = 16; - - if(offsetLength < str.Length) - offsetLength = str.Length; - - while(str.Length < offsetLength) - str += ' '; - - if(color) - sb.Append("\u001b[36m"); - - sb.Append(str); - sb.Append(" "); - - for(int i = 0; i < 16; i++) - { - sb.AppendFormat(" {0:X2}", i); - } - - if(color) - sb.Append("\u001b[0m"); - - sb.AppendLine(); - - int b = 0; - - string format = $"{{0:X{offsetLength}}}"; - - for(int i = 0; i < rows; i++) - { - if(color) - sb.Append("\u001b[36m"); - - sb.AppendFormat(format, b); - - if(color) - sb.Append("\u001b[0m"); - - sb.Append(" "); - int lastBytes = i == rows - 1 ? last : 16; - int lastSpaces = 16 - lastBytes; - - for(int j = 0; j < lastBytes; j++) - { - sb.AppendFormat(" {0:X2}", array[b]); - b++; - } - - for(int j = 0; j < lastSpaces; j++) - sb.Append(" "); - - b -= lastBytes; - sb.Append(" "); - - for(int j = 0; j < lastBytes; j++) - { - int v = array[b]; - sb.Append((v > 31 && v < 127) || v > 159 ? (char)v : '.'); - b++; - } - - sb.AppendLine(); - } - - return sb.ToString(); - } - } -} \ No newline at end of file diff --git a/Aaru.Helpers/StringHandlers.cs b/Aaru.Helpers/StringHandlers.cs deleted file mode 100644 index 42fb176..0000000 --- a/Aaru.Helpers/StringHandlers.cs +++ /dev/null @@ -1,185 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : StringHandlers.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Convert byte arrays to C# strings. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Text; - -namespace Aaru.Helpers -{ - /// Helper operations to work with strings - public static class StringHandlers - { - /// Converts a null-terminated (aka C string) ASCII byte array to a C# string - /// The corresponding C# string - /// A null-terminated (aka C string) ASCII byte array - public static string CToString(byte[] cString) => CToString(cString, Encoding.ASCII); - - /// Converts a null-terminated (aka C string) byte array with the specified encoding to a C# string - /// The corresponding C# string - /// A null-terminated (aka C string) byte array in the specified encoding - /// Encoding. - /// Set if encoding uses 16-bit characters. - /// Start decoding at this position - public static string CToString(byte[] cString, Encoding encoding, bool twoBytes = false, int start = 0) - { - if(cString == null) - return null; - - int len = 0; - - for(int i = start; i < cString.Length; i++) - { - if(cString[i] == 0) - if(twoBytes) - { - if(i + 1 < cString.Length && - cString[i + 1] == 0) - { - len++; - - break; - } - } - else - break; - - len++; - } - - if(twoBytes && len % 2 > 0) - len--; - - byte[] dest = new byte[len]; - Array.Copy(cString, start, dest, 0, len); - - return len == 0 ? "" : encoding.GetString(dest); - } - - /// Converts a length-prefixed (aka Pascal string) ASCII byte array to a C# string - /// The corresponding C# string - /// A length-prefixed (aka Pascal string) ASCII byte array - public static string PascalToString(byte[] pascalString) => PascalToString(pascalString, Encoding.ASCII); - - /// Converts a length-prefixed (aka Pascal string) ASCII byte array to a C# string - /// The corresponding C# string - /// A length-prefixed (aka Pascal string) ASCII byte array - /// Encoding. - /// Start decoding at this position - public static string PascalToString(byte[] pascalString, Encoding encoding, int start = 0) - { - if(pascalString == null) - return null; - - byte length = pascalString[start]; - int len = 0; - - for(int i = start + 1; i < length + 1 && i < pascalString.Length; i++) - { - if(pascalString[i] == 0) - break; - - len++; - } - - byte[] dest = new byte[len]; - Array.Copy(pascalString, start + 1, dest, 0, len); - - return len == 0 ? "" : encoding.GetString(dest); - } - - /// Converts a space (' ', 0x20, ASCII SPACE) padded ASCII byte array to a C# string - /// The corresponding C# string - /// A space (' ', 0x20, ASCII SPACE) padded ASCII byte array - public static string SpacePaddedToString(byte[] spacePaddedString) => - SpacePaddedToString(spacePaddedString, Encoding.ASCII); - - /// Converts a space (' ', 0x20, ASCII SPACE) padded ASCII byte array to a C# string - /// The corresponding C# string - /// A space (' ', 0x20, ASCII SPACE) padded ASCII byte array - /// Encoding. - /// Start decoding at this position - public static string SpacePaddedToString(byte[] spacePaddedString, Encoding encoding, int start = 0) - { - if(spacePaddedString == null) - return null; - - int len = start; - - for(int i = spacePaddedString.Length; i >= start; i--) - { - if(i == start) - return ""; - - if(spacePaddedString[i - 1] == 0x20) - continue; - - len = i; - - break; - } - - return len == 0 ? "" : encoding.GetString(spacePaddedString, start, len); - } - - /// Converts an OSTA compressed unicode byte array to a C# string - /// The C# string. - /// OSTA compressed unicode byte array. - public static string DecompressUnicode(byte[] dstring) - { - ushort unicode; - byte compId = dstring[0]; - string temp = ""; - - if(compId != 8 && - compId != 16) - return null; - - for(int byteIndex = 1; byteIndex < dstring.Length;) - { - if(compId == 16) - unicode = (ushort)(dstring[byteIndex++] << 8); - else - unicode = 0; - - if(byteIndex < dstring.Length) - unicode |= dstring[byteIndex++]; - - if(unicode == 0) - break; - - temp += Encoding.Unicode.GetString(BitConverter.GetBytes(unicode)); - } - - return temp; - } - } -} \ No newline at end of file diff --git a/Aaru.Helpers/Swapping.cs b/Aaru.Helpers/Swapping.cs deleted file mode 100644 index 29134ca..0000000 --- a/Aaru.Helpers/Swapping.cs +++ /dev/null @@ -1,112 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : Swapping.cs -// Author(s) : Natalia Portillo -// -// Component : Helpers. -// -// --[ Description ] ---------------------------------------------------------- -// -// Byte-swapping methods. -// -// --[ License ] -------------------------------------------------------------- -// -// This library 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 2.1 of the -// License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, see . -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2021 Natalia Portillo -// ****************************************************************************/ - -using System.Runtime.CompilerServices; - -namespace Aaru.Helpers -{ - /// Helper operations to work with swapping endians - public static class Swapping - { - /// Gets the PDP endian equivalent of the given little endian unsigned integer - /// Little endian unsigned integer - /// PDP unsigned integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static uint PDPFromLittleEndian(uint x) => ((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16); - - /// Gets the PDP endian equivalent of the given big endian unsigned integer - /// Big endian unsigned integer - /// PDP unsigned integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static uint PDPFromBigEndian(uint x) => ((x & 0xff00ff) << 8) | ((x & 0xff00ff00) >> 8); - - /// Swaps the endian of the specified unsigned short integer - /// Unsigned short integer - /// Swapped unsigned short integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ushort Swap(ushort x) => (ushort)((x << 8) | (x >> 8)); - - /// Swaps the endian of the specified signed short integer - /// Signed short integer - /// Swapped signed short integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static short Swap(short x) => (short)((x << 8) | ((x >> 8) & 0xFF)); - - /// Swaps the endian of the specified unsigned integer - /// Unsigned integer - /// Swapped unsigned integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static uint Swap(uint x) - { - x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); - - return (x << 16) | (x >> 16); - } - - /// Swaps the endian of the specified signed integer - /// Signed integer - /// Swapped signed integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int Swap(int x) - { - x = (int)(((x << 8) & 0xFF00FF00) | (((uint)x >> 8) & 0xFF00FF)); - - return (int)(((uint)x << 16) | (((uint)x >> 16) & 0xFFFF)); - } - - /// Swaps the endian of the specified unsigned long integer - /// Unsigned long integer - /// Swapped unsigned long integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ulong Swap(ulong x) - { - x = ((x & 0x00000000FFFFFFFF) << 32) | ((x & 0xFFFFFFFF00000000) >> 32); - x = ((x & 0x0000FFFF0000FFFF) << 16) | ((x & 0xFFFF0000FFFF0000) >> 16); - x = ((x & 0x00FF00FF00FF00FF) << 8) | ((x & 0xFF00FF00FF00FF00) >> 8); - - return x; - } - - /// Swaps the endian of the specified signed long integer - /// Signed long integer - /// Swapped signed long integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static long Swap(long x) - { - x = ((x & 0x00000000FFFFFFFF) << 32) | (long)(((ulong)x & 0xFFFFFFFF00000000) >> 32); - x = ((x & 0x0000FFFF0000FFFF) << 16) | (long)(((ulong)x & 0xFFFF0000FFFF0000) >> 16); - x = ((x & 0x00FF00FF00FF00FF) << 8) | (long)(((ulong)x & 0xFF00FF00FF00FF00) >> 8); - - return x; - } - } -} \ No newline at end of file diff --git a/Aaru.Checksums/.editorconfig b/Aaru6.Checksums/.editorconfig similarity index 100% rename from Aaru.Checksums/.editorconfig rename to Aaru6.Checksums/.editorconfig diff --git a/Aaru.Checksums/.gitignore b/Aaru6.Checksums/.gitignore similarity index 100% rename from Aaru.Checksums/.gitignore rename to Aaru6.Checksums/.gitignore diff --git a/Aaru.Console/Aaru.Console.csproj b/Aaru6.Checksums/Aaru6.Checksums.csproj similarity index 88% rename from Aaru.Console/Aaru.Console.csproj rename to Aaru6.Checksums/Aaru6.Checksums.csproj index 2847562..282591f 100644 --- a/Aaru.Console/Aaru.Console.csproj +++ b/Aaru6.Checksums/Aaru6.Checksums.csproj @@ -4,10 +4,10 @@ Debug AnyCPU 2.0 - {CCAA7AFE-C094-4D82-A66D-630DE8A3F545} + {CC48B324-A532-4A45-87A6-6F91F7141E8D} Library - Aaru.Console - Aaru.Console + Aaru.Checksums + Aaru6.Checksums $(Version) false true @@ -15,14 +15,14 @@ Claunia.com Copyright © 2011-2021 Natalia Portillo Aaru Data Preservation Suite - Aaru.Console + Aaru6.Checksums $(Version) net6 10 - Contains console implementation used by the Aaru Data Preservation Suite. + C# implementation of CRC16, CRC32, CRC64, Fletcher, MD5, SHA1, SHA2 and SpamSum. https://github.com/aaru-dps/ LGPL-2.1-only - https://github.com/aaru-dps/Aaru.Console + https://github.com/aaru-dps/Aaru.Checksums true en-US true @@ -31,11 +31,6 @@ Natalia Portillo <claunia@claunia.com> true - - $(Version)+{chash:8} - true - true - true full @@ -47,18 +42,27 @@ false - full true bin\Release prompt 4 false + true - + - + + + + + + + + + + @@ -66,15 +70,16 @@ - + + - - - + + + diff --git a/Aaru.Checksums/Adler32Context.cs b/Aaru6.Checksums/Adler32Context.cs similarity index 52% rename from Aaru.Checksums/Adler32Context.cs rename to Aaru6.Checksums/Adler32Context.cs index 3b72244..4b91f13 100644 --- a/Aaru.Checksums/Adler32Context.cs +++ b/Aaru6.Checksums/Adler32Context.cs @@ -35,14 +35,15 @@ using System.Text; using Aaru.CommonTypes.Interfaces; using Aaru.Helpers; -namespace Aaru.Checksums +namespace Aaru6.Checksums { /// /// Implements the Adler-32 algorithm public sealed class Adler32Context : IChecksum { - const ushort ADLER_MODULE = 65521; - ushort _sum1, _sum2; + const uint ADLER_MODULE = 65521; + const uint NMAX = 5552; + ushort _sum1, _sum2; /// Initializes the Adler-32 sums public Adler32Context() @@ -57,11 +58,153 @@ namespace Aaru.Checksums /// Length of buffer to hash. public void Update(byte[] data, uint len) { - for(int i = 0; i < len; i++) + uint sum1 = _sum1; + uint sum2 = _sum2; + uint n; + int dataOff = 0; + + /* in case user likes doing a byte at a time, keep it fast */ + if(len == 1) { - _sum1 = (ushort)((_sum1 + data[i]) % ADLER_MODULE); - _sum2 = (ushort)((_sum2 + _sum1) % ADLER_MODULE); + sum1 += data[dataOff]; + + if(sum1 >= ADLER_MODULE) + sum1 -= ADLER_MODULE; + + sum2 += sum1; + + if(sum2 >= ADLER_MODULE) + sum2 -= ADLER_MODULE; + + _sum1 = (ushort)(sum1 & 0xFFFF); + _sum2 = (ushort)(sum2 & 0xFFFF); + + return; } + + /* in case short lengths are provided, keep it somewhat fast */ + if(len < 16) + { + while(len-- > 0) + { + sum1 += data[dataOff++]; + sum2 += sum1; + } + + if(sum1 >= ADLER_MODULE) + sum1 -= ADLER_MODULE; + + sum2 %= ADLER_MODULE; /* only added so many ADLER_MODULE's */ + _sum1 = (ushort)(sum1 & 0xFFFF); + _sum2 = (ushort)(sum2 & 0xFFFF); + + return; + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while(len >= NMAX) + { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + + do + { + sum1 += data[dataOff]; + sum2 += sum1; + sum1 += data[dataOff + 1]; + sum2 += sum1; + sum1 += data[dataOff + 2]; + sum2 += sum1; + sum1 += data[dataOff + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 2 + 1]; + sum2 += sum1; + + /* 16 sums unrolled */ + dataOff += 16; + } while(--n != 0); + + sum1 %= ADLER_MODULE; + sum2 %= ADLER_MODULE; + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if(len != 0) + { + /* avoid modulos if none remaining */ + while(len >= 16) + { + len -= 16; + sum1 += data[dataOff]; + sum2 += sum1; + sum1 += data[dataOff + 1]; + sum2 += sum1; + sum1 += data[dataOff + 2]; + sum2 += sum1; + sum1 += data[dataOff + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 2 + 1]; + sum2 += sum1; + + dataOff += 16; + } + + while(len-- != 0) + { + sum1 += data[dataOff++]; + sum2 += sum1; + } + + sum1 %= ADLER_MODULE; + sum2 %= ADLER_MODULE; + } + + _sum1 = (ushort)(sum1 & 0xFFFF); + _sum2 = (ushort)(sum2 & 0xFFFF); } /// diff --git a/Aaru6.Checksums/CRC16CCITTContext.cs b/Aaru6.Checksums/CRC16CCITTContext.cs new file mode 100644 index 0000000..0c62b6b --- /dev/null +++ b/Aaru6.Checksums/CRC16CCITTContext.cs @@ -0,0 +1,320 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : CRC16CCITTContext.cs +// Author(s) : Natalia Portillo +// +// Component : Checksums. +// +// --[ Description ] ---------------------------------------------------------- +// +// Implements a CRC16 algorithm with the CCITT polynomial. +// +// --[ License ] -------------------------------------------------------------- +// +// This library 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 2.1 of the +// License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2021 Natalia Portillo +// ****************************************************************************/ + +using System; +using Aaru.CommonTypes.Interfaces; +using Aaru.Helpers; + +namespace Aaru6.Checksums +{ + /// + /// Implements the CRC16 algorithm with CCITT polynomial and seed + public sealed class CRC16CCITTContext : IChecksum + { + /// CCITT CRC16 polynomial + public const ushort CRC16_CCITT_POLY = 0x8408; + /// CCITT CRC16 seed + public const ushort CRC16_CCITT_SEED = 0x0000; + + static readonly ushort[][] crc16_ccitt_table = + { + new ushort[] + { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, + 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318, + 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, + 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, 0x3653, 0x2672, 0x1611, 0x0630, + 0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4, + 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, + 0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF, + 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, + 0x2E32, 0x1E51, 0x0E70, 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 0x9188, 0x81A9, + 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, + 0x6067, 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2, + 0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 0x34E2, + 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, + 0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, 0xD94C, 0xC96D, 0xF90E, + 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, + 0x1AD0, 0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07, + 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, + 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 + }, + new ushort[] + { + 0x0000, 0x3331, 0x6662, 0x5553, 0xCCC4, 0xFFF5, 0xAAA6, 0x9997, 0x89A9, 0xBA98, 0xEFCB, 0xDCFA, 0x456D, + 0x765C, 0x230F, 0x103E, 0x0373, 0x3042, 0x6511, 0x5620, 0xCFB7, 0xFC86, 0xA9D5, 0x9AE4, 0x8ADA, 0xB9EB, + 0xECB8, 0xDF89, 0x461E, 0x752F, 0x207C, 0x134D, 0x06E6, 0x35D7, 0x6084, 0x53B5, 0xCA22, 0xF913, 0xAC40, + 0x9F71, 0x8F4F, 0xBC7E, 0xE92D, 0xDA1C, 0x438B, 0x70BA, 0x25E9, 0x16D8, 0x0595, 0x36A4, 0x63F7, 0x50C6, + 0xC951, 0xFA60, 0xAF33, 0x9C02, 0x8C3C, 0xBF0D, 0xEA5E, 0xD96F, 0x40F8, 0x73C9, 0x269A, 0x15AB, 0x0DCC, + 0x3EFD, 0x6BAE, 0x589F, 0xC108, 0xF239, 0xA76A, 0x945B, 0x8465, 0xB754, 0xE207, 0xD136, 0x48A1, 0x7B90, + 0x2EC3, 0x1DF2, 0x0EBF, 0x3D8E, 0x68DD, 0x5BEC, 0xC27B, 0xF14A, 0xA419, 0x9728, 0x8716, 0xB427, 0xE174, + 0xD245, 0x4BD2, 0x78E3, 0x2DB0, 0x1E81, 0x0B2A, 0x381B, 0x6D48, 0x5E79, 0xC7EE, 0xF4DF, 0xA18C, 0x92BD, + 0x8283, 0xB1B2, 0xE4E1, 0xD7D0, 0x4E47, 0x7D76, 0x2825, 0x1B14, 0x0859, 0x3B68, 0x6E3B, 0x5D0A, 0xC49D, + 0xF7AC, 0xA2FF, 0x91CE, 0x81F0, 0xB2C1, 0xE792, 0xD4A3, 0x4D34, 0x7E05, 0x2B56, 0x1867, 0x1B98, 0x28A9, + 0x7DFA, 0x4ECB, 0xD75C, 0xE46D, 0xB13E, 0x820F, 0x9231, 0xA100, 0xF453, 0xC762, 0x5EF5, 0x6DC4, 0x3897, + 0x0BA6, 0x18EB, 0x2BDA, 0x7E89, 0x4DB8, 0xD42F, 0xE71E, 0xB24D, 0x817C, 0x9142, 0xA273, 0xF720, 0xC411, + 0x5D86, 0x6EB7, 0x3BE4, 0x08D5, 0x1D7E, 0x2E4F, 0x7B1C, 0x482D, 0xD1BA, 0xE28B, 0xB7D8, 0x84E9, 0x94D7, + 0xA7E6, 0xF2B5, 0xC184, 0x5813, 0x6B22, 0x3E71, 0x0D40, 0x1E0D, 0x2D3C, 0x786F, 0x4B5E, 0xD2C9, 0xE1F8, + 0xB4AB, 0x879A, 0x97A4, 0xA495, 0xF1C6, 0xC2F7, 0x5B60, 0x6851, 0x3D02, 0x0E33, 0x1654, 0x2565, 0x7036, + 0x4307, 0xDA90, 0xE9A1, 0xBCF2, 0x8FC3, 0x9FFD, 0xACCC, 0xF99F, 0xCAAE, 0x5339, 0x6008, 0x355B, 0x066A, + 0x1527, 0x2616, 0x7345, 0x4074, 0xD9E3, 0xEAD2, 0xBF81, 0x8CB0, 0x9C8E, 0xAFBF, 0xFAEC, 0xC9DD, 0x504A, + 0x637B, 0x3628, 0x0519, 0x10B2, 0x2383, 0x76D0, 0x45E1, 0xDC76, 0xEF47, 0xBA14, 0x8925, 0x991B, 0xAA2A, + 0xFF79, 0xCC48, 0x55DF, 0x66EE, 0x33BD, 0x008C, 0x13C1, 0x20F0, 0x75A3, 0x4692, 0xDF05, 0xEC34, 0xB967, + 0x8A56, 0x9A68, 0xA959, 0xFC0A, 0xCF3B, 0x56AC, 0x659D, 0x30CE, 0x03FF + }, + new ushort[] + { + 0x0000, 0x3730, 0x6E60, 0x5950, 0xDCC0, 0xEBF0, 0xB2A0, 0x8590, 0xA9A1, 0x9E91, 0xC7C1, 0xF0F1, 0x7561, + 0x4251, 0x1B01, 0x2C31, 0x4363, 0x7453, 0x2D03, 0x1A33, 0x9FA3, 0xA893, 0xF1C3, 0xC6F3, 0xEAC2, 0xDDF2, + 0x84A2, 0xB392, 0x3602, 0x0132, 0x5862, 0x6F52, 0x86C6, 0xB1F6, 0xE8A6, 0xDF96, 0x5A06, 0x6D36, 0x3466, + 0x0356, 0x2F67, 0x1857, 0x4107, 0x7637, 0xF3A7, 0xC497, 0x9DC7, 0xAAF7, 0xC5A5, 0xF295, 0xABC5, 0x9CF5, + 0x1965, 0x2E55, 0x7705, 0x4035, 0x6C04, 0x5B34, 0x0264, 0x3554, 0xB0C4, 0x87F4, 0xDEA4, 0xE994, 0x1DAD, + 0x2A9D, 0x73CD, 0x44FD, 0xC16D, 0xF65D, 0xAF0D, 0x983D, 0xB40C, 0x833C, 0xDA6C, 0xED5C, 0x68CC, 0x5FFC, + 0x06AC, 0x319C, 0x5ECE, 0x69FE, 0x30AE, 0x079E, 0x820E, 0xB53E, 0xEC6E, 0xDB5E, 0xF76F, 0xC05F, 0x990F, + 0xAE3F, 0x2BAF, 0x1C9F, 0x45CF, 0x72FF, 0x9B6B, 0xAC5B, 0xF50B, 0xC23B, 0x47AB, 0x709B, 0x29CB, 0x1EFB, + 0x32CA, 0x05FA, 0x5CAA, 0x6B9A, 0xEE0A, 0xD93A, 0x806A, 0xB75A, 0xD808, 0xEF38, 0xB668, 0x8158, 0x04C8, + 0x33F8, 0x6AA8, 0x5D98, 0x71A9, 0x4699, 0x1FC9, 0x28F9, 0xAD69, 0x9A59, 0xC309, 0xF439, 0x3B5A, 0x0C6A, + 0x553A, 0x620A, 0xE79A, 0xD0AA, 0x89FA, 0xBECA, 0x92FB, 0xA5CB, 0xFC9B, 0xCBAB, 0x4E3B, 0x790B, 0x205B, + 0x176B, 0x7839, 0x4F09, 0x1659, 0x2169, 0xA4F9, 0x93C9, 0xCA99, 0xFDA9, 0xD198, 0xE6A8, 0xBFF8, 0x88C8, + 0x0D58, 0x3A68, 0x6338, 0x5408, 0xBD9C, 0x8AAC, 0xD3FC, 0xE4CC, 0x615C, 0x566C, 0x0F3C, 0x380C, 0x143D, + 0x230D, 0x7A5D, 0x4D6D, 0xC8FD, 0xFFCD, 0xA69D, 0x91AD, 0xFEFF, 0xC9CF, 0x909F, 0xA7AF, 0x223F, 0x150F, + 0x4C5F, 0x7B6F, 0x575E, 0x606E, 0x393E, 0x0E0E, 0x8B9E, 0xBCAE, 0xE5FE, 0xD2CE, 0x26F7, 0x11C7, 0x4897, + 0x7FA7, 0xFA37, 0xCD07, 0x9457, 0xA367, 0x8F56, 0xB866, 0xE136, 0xD606, 0x5396, 0x64A6, 0x3DF6, 0x0AC6, + 0x6594, 0x52A4, 0x0BF4, 0x3CC4, 0xB954, 0x8E64, 0xD734, 0xE004, 0xCC35, 0xFB05, 0xA255, 0x9565, 0x10F5, + 0x27C5, 0x7E95, 0x49A5, 0xA031, 0x9701, 0xCE51, 0xF961, 0x7CF1, 0x4BC1, 0x1291, 0x25A1, 0x0990, 0x3EA0, + 0x67F0, 0x50C0, 0xD550, 0xE260, 0xBB30, 0x8C00, 0xE352, 0xD462, 0x8D32, 0xBA02, 0x3F92, 0x08A2, 0x51F2, + 0x66C2, 0x4AF3, 0x7DC3, 0x2493, 0x13A3, 0x9633, 0xA103, 0xF853, 0xCF63 + }, + new ushort[] + { + 0x0000, 0x76B4, 0xED68, 0x9BDC, 0xCAF1, 0xBC45, 0x2799, 0x512D, 0x85C3, 0xF377, 0x68AB, 0x1E1F, 0x4F32, + 0x3986, 0xA25A, 0xD4EE, 0x1BA7, 0x6D13, 0xF6CF, 0x807B, 0xD156, 0xA7E2, 0x3C3E, 0x4A8A, 0x9E64, 0xE8D0, + 0x730C, 0x05B8, 0x5495, 0x2221, 0xB9FD, 0xCF49, 0x374E, 0x41FA, 0xDA26, 0xAC92, 0xFDBF, 0x8B0B, 0x10D7, + 0x6663, 0xB28D, 0xC439, 0x5FE5, 0x2951, 0x787C, 0x0EC8, 0x9514, 0xE3A0, 0x2CE9, 0x5A5D, 0xC181, 0xB735, + 0xE618, 0x90AC, 0x0B70, 0x7DC4, 0xA92A, 0xDF9E, 0x4442, 0x32F6, 0x63DB, 0x156F, 0x8EB3, 0xF807, 0x6E9C, + 0x1828, 0x83F4, 0xF540, 0xA46D, 0xD2D9, 0x4905, 0x3FB1, 0xEB5F, 0x9DEB, 0x0637, 0x7083, 0x21AE, 0x571A, + 0xCCC6, 0xBA72, 0x753B, 0x038F, 0x9853, 0xEEE7, 0xBFCA, 0xC97E, 0x52A2, 0x2416, 0xF0F8, 0x864C, 0x1D90, + 0x6B24, 0x3A09, 0x4CBD, 0xD761, 0xA1D5, 0x59D2, 0x2F66, 0xB4BA, 0xC20E, 0x9323, 0xE597, 0x7E4B, 0x08FF, + 0xDC11, 0xAAA5, 0x3179, 0x47CD, 0x16E0, 0x6054, 0xFB88, 0x8D3C, 0x4275, 0x34C1, 0xAF1D, 0xD9A9, 0x8884, + 0xFE30, 0x65EC, 0x1358, 0xC7B6, 0xB102, 0x2ADE, 0x5C6A, 0x0D47, 0x7BF3, 0xE02F, 0x969B, 0xDD38, 0xAB8C, + 0x3050, 0x46E4, 0x17C9, 0x617D, 0xFAA1, 0x8C15, 0x58FB, 0x2E4F, 0xB593, 0xC327, 0x920A, 0xE4BE, 0x7F62, + 0x09D6, 0xC69F, 0xB02B, 0x2BF7, 0x5D43, 0x0C6E, 0x7ADA, 0xE106, 0x97B2, 0x435C, 0x35E8, 0xAE34, 0xD880, + 0x89AD, 0xFF19, 0x64C5, 0x1271, 0xEA76, 0x9CC2, 0x071E, 0x71AA, 0x2087, 0x5633, 0xCDEF, 0xBB5B, 0x6FB5, + 0x1901, 0x82DD, 0xF469, 0xA544, 0xD3F0, 0x482C, 0x3E98, 0xF1D1, 0x8765, 0x1CB9, 0x6A0D, 0x3B20, 0x4D94, + 0xD648, 0xA0FC, 0x7412, 0x02A6, 0x997A, 0xEFCE, 0xBEE3, 0xC857, 0x538B, 0x253F, 0xB3A4, 0xC510, 0x5ECC, + 0x2878, 0x7955, 0x0FE1, 0x943D, 0xE289, 0x3667, 0x40D3, 0xDB0F, 0xADBB, 0xFC96, 0x8A22, 0x11FE, 0x674A, + 0xA803, 0xDEB7, 0x456B, 0x33DF, 0x62F2, 0x1446, 0x8F9A, 0xF92E, 0x2DC0, 0x5B74, 0xC0A8, 0xB61C, 0xE731, + 0x9185, 0x0A59, 0x7CED, 0x84EA, 0xF25E, 0x6982, 0x1F36, 0x4E1B, 0x38AF, 0xA373, 0xD5C7, 0x0129, 0x779D, + 0xEC41, 0x9AF5, 0xCBD8, 0xBD6C, 0x26B0, 0x5004, 0x9F4D, 0xE9F9, 0x7225, 0x0491, 0x55BC, 0x2308, 0xB8D4, + 0xCE60, 0x1A8E, 0x6C3A, 0xF7E6, 0x8152, 0xD07F, 0xA6CB, 0x3D17, 0x4BA3 + }, + new ushort[] + { + 0x0000, 0xAA51, 0x4483, 0xEED2, 0x8906, 0x2357, 0xCD85, 0x67D4, 0x022D, 0xA87C, 0x46AE, 0xECFF, 0x8B2B, + 0x217A, 0xCFA8, 0x65F9, 0x045A, 0xAE0B, 0x40D9, 0xEA88, 0x8D5C, 0x270D, 0xC9DF, 0x638E, 0x0677, 0xAC26, + 0x42F4, 0xE8A5, 0x8F71, 0x2520, 0xCBF2, 0x61A3, 0x08B4, 0xA2E5, 0x4C37, 0xE666, 0x81B2, 0x2BE3, 0xC531, + 0x6F60, 0x0A99, 0xA0C8, 0x4E1A, 0xE44B, 0x839F, 0x29CE, 0xC71C, 0x6D4D, 0x0CEE, 0xA6BF, 0x486D, 0xE23C, + 0x85E8, 0x2FB9, 0xC16B, 0x6B3A, 0x0EC3, 0xA492, 0x4A40, 0xE011, 0x87C5, 0x2D94, 0xC346, 0x6917, 0x1168, + 0xBB39, 0x55EB, 0xFFBA, 0x986E, 0x323F, 0xDCED, 0x76BC, 0x1345, 0xB914, 0x57C6, 0xFD97, 0x9A43, 0x3012, + 0xDEC0, 0x7491, 0x1532, 0xBF63, 0x51B1, 0xFBE0, 0x9C34, 0x3665, 0xD8B7, 0x72E6, 0x171F, 0xBD4E, 0x539C, + 0xF9CD, 0x9E19, 0x3448, 0xDA9A, 0x70CB, 0x19DC, 0xB38D, 0x5D5F, 0xF70E, 0x90DA, 0x3A8B, 0xD459, 0x7E08, + 0x1BF1, 0xB1A0, 0x5F72, 0xF523, 0x92F7, 0x38A6, 0xD674, 0x7C25, 0x1D86, 0xB7D7, 0x5905, 0xF354, 0x9480, + 0x3ED1, 0xD003, 0x7A52, 0x1FAB, 0xB5FA, 0x5B28, 0xF179, 0x96AD, 0x3CFC, 0xD22E, 0x787F, 0x22D0, 0x8881, + 0x6653, 0xCC02, 0xABD6, 0x0187, 0xEF55, 0x4504, 0x20FD, 0x8AAC, 0x647E, 0xCE2F, 0xA9FB, 0x03AA, 0xED78, + 0x4729, 0x268A, 0x8CDB, 0x6209, 0xC858, 0xAF8C, 0x05DD, 0xEB0F, 0x415E, 0x24A7, 0x8EF6, 0x6024, 0xCA75, + 0xADA1, 0x07F0, 0xE922, 0x4373, 0x2A64, 0x8035, 0x6EE7, 0xC4B6, 0xA362, 0x0933, 0xE7E1, 0x4DB0, 0x2849, + 0x8218, 0x6CCA, 0xC69B, 0xA14F, 0x0B1E, 0xE5CC, 0x4F9D, 0x2E3E, 0x846F, 0x6ABD, 0xC0EC, 0xA738, 0x0D69, + 0xE3BB, 0x49EA, 0x2C13, 0x8642, 0x6890, 0xC2C1, 0xA515, 0x0F44, 0xE196, 0x4BC7, 0x33B8, 0x99E9, 0x773B, + 0xDD6A, 0xBABE, 0x10EF, 0xFE3D, 0x546C, 0x3195, 0x9BC4, 0x7516, 0xDF47, 0xB893, 0x12C2, 0xFC10, 0x5641, + 0x37E2, 0x9DB3, 0x7361, 0xD930, 0xBEE4, 0x14B5, 0xFA67, 0x5036, 0x35CF, 0x9F9E, 0x714C, 0xDB1D, 0xBCC9, + 0x1698, 0xF84A, 0x521B, 0x3B0C, 0x915D, 0x7F8F, 0xD5DE, 0xB20A, 0x185B, 0xF689, 0x5CD8, 0x3921, 0x9370, + 0x7DA2, 0xD7F3, 0xB027, 0x1A76, 0xF4A4, 0x5EF5, 0x3F56, 0x9507, 0x7BD5, 0xD184, 0xB650, 0x1C01, 0xF2D3, + 0x5882, 0x3D7B, 0x972A, 0x79F8, 0xD3A9, 0xB47D, 0x1E2C, 0xF0FE, 0x5AAF + }, + new ushort[] + { + 0x0000, 0x45A0, 0x8B40, 0xCEE0, 0x06A1, 0x4301, 0x8DE1, 0xC841, 0x0D42, 0x48E2, 0x8602, 0xC3A2, 0x0BE3, + 0x4E43, 0x80A3, 0xC503, 0x1A84, 0x5F24, 0x91C4, 0xD464, 0x1C25, 0x5985, 0x9765, 0xD2C5, 0x17C6, 0x5266, + 0x9C86, 0xD926, 0x1167, 0x54C7, 0x9A27, 0xDF87, 0x3508, 0x70A8, 0xBE48, 0xFBE8, 0x33A9, 0x7609, 0xB8E9, + 0xFD49, 0x384A, 0x7DEA, 0xB30A, 0xF6AA, 0x3EEB, 0x7B4B, 0xB5AB, 0xF00B, 0x2F8C, 0x6A2C, 0xA4CC, 0xE16C, + 0x292D, 0x6C8D, 0xA26D, 0xE7CD, 0x22CE, 0x676E, 0xA98E, 0xEC2E, 0x246F, 0x61CF, 0xAF2F, 0xEA8F, 0x6A10, + 0x2FB0, 0xE150, 0xA4F0, 0x6CB1, 0x2911, 0xE7F1, 0xA251, 0x6752, 0x22F2, 0xEC12, 0xA9B2, 0x61F3, 0x2453, + 0xEAB3, 0xAF13, 0x7094, 0x3534, 0xFBD4, 0xBE74, 0x7635, 0x3395, 0xFD75, 0xB8D5, 0x7DD6, 0x3876, 0xF696, + 0xB336, 0x7B77, 0x3ED7, 0xF037, 0xB597, 0x5F18, 0x1AB8, 0xD458, 0x91F8, 0x59B9, 0x1C19, 0xD2F9, 0x9759, + 0x525A, 0x17FA, 0xD91A, 0x9CBA, 0x54FB, 0x115B, 0xDFBB, 0x9A1B, 0x459C, 0x003C, 0xCEDC, 0x8B7C, 0x433D, + 0x069D, 0xC87D, 0x8DDD, 0x48DE, 0x0D7E, 0xC39E, 0x863E, 0x4E7F, 0x0BDF, 0xC53F, 0x809F, 0xD420, 0x9180, + 0x5F60, 0x1AC0, 0xD281, 0x9721, 0x59C1, 0x1C61, 0xD962, 0x9CC2, 0x5222, 0x1782, 0xDFC3, 0x9A63, 0x5483, + 0x1123, 0xCEA4, 0x8B04, 0x45E4, 0x0044, 0xC805, 0x8DA5, 0x4345, 0x06E5, 0xC3E6, 0x8646, 0x48A6, 0x0D06, + 0xC547, 0x80E7, 0x4E07, 0x0BA7, 0xE128, 0xA488, 0x6A68, 0x2FC8, 0xE789, 0xA229, 0x6CC9, 0x2969, 0xEC6A, + 0xA9CA, 0x672A, 0x228A, 0xEACB, 0xAF6B, 0x618B, 0x242B, 0xFBAC, 0xBE0C, 0x70EC, 0x354C, 0xFD0D, 0xB8AD, + 0x764D, 0x33ED, 0xF6EE, 0xB34E, 0x7DAE, 0x380E, 0xF04F, 0xB5EF, 0x7B0F, 0x3EAF, 0xBE30, 0xFB90, 0x3570, + 0x70D0, 0xB891, 0xFD31, 0x33D1, 0x7671, 0xB372, 0xF6D2, 0x3832, 0x7D92, 0xB5D3, 0xF073, 0x3E93, 0x7B33, + 0xA4B4, 0xE114, 0x2FF4, 0x6A54, 0xA215, 0xE7B5, 0x2955, 0x6CF5, 0xA9F6, 0xEC56, 0x22B6, 0x6716, 0xAF57, + 0xEAF7, 0x2417, 0x61B7, 0x8B38, 0xCE98, 0x0078, 0x45D8, 0x8D99, 0xC839, 0x06D9, 0x4379, 0x867A, 0xC3DA, + 0x0D3A, 0x489A, 0x80DB, 0xC57B, 0x0B9B, 0x4E3B, 0x91BC, 0xD41C, 0x1AFC, 0x5F5C, 0x971D, 0xD2BD, 0x1C5D, + 0x59FD, 0x9CFE, 0xD95E, 0x17BE, 0x521E, 0x9A5F, 0xDFFF, 0x111F, 0x54BF + }, + new ushort[] + { + 0x0000, 0xB861, 0x60E3, 0xD882, 0xC1C6, 0x79A7, 0xA125, 0x1944, 0x93AD, 0x2BCC, 0xF34E, 0x4B2F, 0x526B, + 0xEA0A, 0x3288, 0x8AE9, 0x377B, 0x8F1A, 0x5798, 0xEFF9, 0xF6BD, 0x4EDC, 0x965E, 0x2E3F, 0xA4D6, 0x1CB7, + 0xC435, 0x7C54, 0x6510, 0xDD71, 0x05F3, 0xBD92, 0x6EF6, 0xD697, 0x0E15, 0xB674, 0xAF30, 0x1751, 0xCFD3, + 0x77B2, 0xFD5B, 0x453A, 0x9DB8, 0x25D9, 0x3C9D, 0x84FC, 0x5C7E, 0xE41F, 0x598D, 0xE1EC, 0x396E, 0x810F, + 0x984B, 0x202A, 0xF8A8, 0x40C9, 0xCA20, 0x7241, 0xAAC3, 0x12A2, 0x0BE6, 0xB387, 0x6B05, 0xD364, 0xDDEC, + 0x658D, 0xBD0F, 0x056E, 0x1C2A, 0xA44B, 0x7CC9, 0xC4A8, 0x4E41, 0xF620, 0x2EA2, 0x96C3, 0x8F87, 0x37E6, + 0xEF64, 0x5705, 0xEA97, 0x52F6, 0x8A74, 0x3215, 0x2B51, 0x9330, 0x4BB2, 0xF3D3, 0x793A, 0xC15B, 0x19D9, + 0xA1B8, 0xB8FC, 0x009D, 0xD81F, 0x607E, 0xB31A, 0x0B7B, 0xD3F9, 0x6B98, 0x72DC, 0xCABD, 0x123F, 0xAA5E, + 0x20B7, 0x98D6, 0x4054, 0xF835, 0xE171, 0x5910, 0x8192, 0x39F3, 0x8461, 0x3C00, 0xE482, 0x5CE3, 0x45A7, + 0xFDC6, 0x2544, 0x9D25, 0x17CC, 0xAFAD, 0x772F, 0xCF4E, 0xD60A, 0x6E6B, 0xB6E9, 0x0E88, 0xABF9, 0x1398, + 0xCB1A, 0x737B, 0x6A3F, 0xD25E, 0x0ADC, 0xB2BD, 0x3854, 0x8035, 0x58B7, 0xE0D6, 0xF992, 0x41F3, 0x9971, + 0x2110, 0x9C82, 0x24E3, 0xFC61, 0x4400, 0x5D44, 0xE525, 0x3DA7, 0x85C6, 0x0F2F, 0xB74E, 0x6FCC, 0xD7AD, + 0xCEE9, 0x7688, 0xAE0A, 0x166B, 0xC50F, 0x7D6E, 0xA5EC, 0x1D8D, 0x04C9, 0xBCA8, 0x642A, 0xDC4B, 0x56A2, + 0xEEC3, 0x3641, 0x8E20, 0x9764, 0x2F05, 0xF787, 0x4FE6, 0xF274, 0x4A15, 0x9297, 0x2AF6, 0x33B2, 0x8BD3, + 0x5351, 0xEB30, 0x61D9, 0xD9B8, 0x013A, 0xB95B, 0xA01F, 0x187E, 0xC0FC, 0x789D, 0x7615, 0xCE74, 0x16F6, + 0xAE97, 0xB7D3, 0x0FB2, 0xD730, 0x6F51, 0xE5B8, 0x5DD9, 0x855B, 0x3D3A, 0x247E, 0x9C1F, 0x449D, 0xFCFC, + 0x416E, 0xF90F, 0x218D, 0x99EC, 0x80A8, 0x38C9, 0xE04B, 0x582A, 0xD2C3, 0x6AA2, 0xB220, 0x0A41, 0x1305, + 0xAB64, 0x73E6, 0xCB87, 0x18E3, 0xA082, 0x7800, 0xC061, 0xD925, 0x6144, 0xB9C6, 0x01A7, 0x8B4E, 0x332F, + 0xEBAD, 0x53CC, 0x4A88, 0xF2E9, 0x2A6B, 0x920A, 0x2F98, 0x97F9, 0x4F7B, 0xF71A, 0xEE5E, 0x563F, 0x8EBD, + 0x36DC, 0xBC35, 0x0454, 0xDCD6, 0x64B7, 0x7DF3, 0xC592, 0x1D10, 0xA571 + }, + new ushort[] + { + 0x0000, 0x47D3, 0x8FA6, 0xC875, 0x0F6D, 0x48BE, 0x80CB, 0xC718, 0x1EDA, 0x5909, 0x917C, 0xD6AF, 0x11B7, + 0x5664, 0x9E11, 0xD9C2, 0x3DB4, 0x7A67, 0xB212, 0xF5C1, 0x32D9, 0x750A, 0xBD7F, 0xFAAC, 0x236E, 0x64BD, + 0xACC8, 0xEB1B, 0x2C03, 0x6BD0, 0xA3A5, 0xE476, 0x7B68, 0x3CBB, 0xF4CE, 0xB31D, 0x7405, 0x33D6, 0xFBA3, + 0xBC70, 0x65B2, 0x2261, 0xEA14, 0xADC7, 0x6ADF, 0x2D0C, 0xE579, 0xA2AA, 0x46DC, 0x010F, 0xC97A, 0x8EA9, + 0x49B1, 0x0E62, 0xC617, 0x81C4, 0x5806, 0x1FD5, 0xD7A0, 0x9073, 0x576B, 0x10B8, 0xD8CD, 0x9F1E, 0xF6D0, + 0xB103, 0x7976, 0x3EA5, 0xF9BD, 0xBE6E, 0x761B, 0x31C8, 0xE80A, 0xAFD9, 0x67AC, 0x207F, 0xE767, 0xA0B4, + 0x68C1, 0x2F12, 0xCB64, 0x8CB7, 0x44C2, 0x0311, 0xC409, 0x83DA, 0x4BAF, 0x0C7C, 0xD5BE, 0x926D, 0x5A18, + 0x1DCB, 0xDAD3, 0x9D00, 0x5575, 0x12A6, 0x8DB8, 0xCA6B, 0x021E, 0x45CD, 0x82D5, 0xC506, 0x0D73, 0x4AA0, + 0x9362, 0xD4B1, 0x1CC4, 0x5B17, 0x9C0F, 0xDBDC, 0x13A9, 0x547A, 0xB00C, 0xF7DF, 0x3FAA, 0x7879, 0xBF61, + 0xF8B2, 0x30C7, 0x7714, 0xAED6, 0xE905, 0x2170, 0x66A3, 0xA1BB, 0xE668, 0x2E1D, 0x69CE, 0xFD81, 0xBA52, + 0x7227, 0x35F4, 0xF2EC, 0xB53F, 0x7D4A, 0x3A99, 0xE35B, 0xA488, 0x6CFD, 0x2B2E, 0xEC36, 0xABE5, 0x6390, + 0x2443, 0xC035, 0x87E6, 0x4F93, 0x0840, 0xCF58, 0x888B, 0x40FE, 0x072D, 0xDEEF, 0x993C, 0x5149, 0x169A, + 0xD182, 0x9651, 0x5E24, 0x19F7, 0x86E9, 0xC13A, 0x094F, 0x4E9C, 0x8984, 0xCE57, 0x0622, 0x41F1, 0x9833, + 0xDFE0, 0x1795, 0x5046, 0x975E, 0xD08D, 0x18F8, 0x5F2B, 0xBB5D, 0xFC8E, 0x34FB, 0x7328, 0xB430, 0xF3E3, + 0x3B96, 0x7C45, 0xA587, 0xE254, 0x2A21, 0x6DF2, 0xAAEA, 0xED39, 0x254C, 0x629F, 0x0B51, 0x4C82, 0x84F7, + 0xC324, 0x043C, 0x43EF, 0x8B9A, 0xCC49, 0x158B, 0x5258, 0x9A2D, 0xDDFE, 0x1AE6, 0x5D35, 0x9540, 0xD293, + 0x36E5, 0x7136, 0xB943, 0xFE90, 0x3988, 0x7E5B, 0xB62E, 0xF1FD, 0x283F, 0x6FEC, 0xA799, 0xE04A, 0x2752, + 0x6081, 0xA8F4, 0xEF27, 0x7039, 0x37EA, 0xFF9F, 0xB84C, 0x7F54, 0x3887, 0xF0F2, 0xB721, 0x6EE3, 0x2930, + 0xE145, 0xA696, 0x618E, 0x265D, 0xEE28, 0xA9FB, 0x4D8D, 0x0A5E, 0xC22B, 0x85F8, 0x42E0, 0x0533, 0xCD46, + 0x8A95, 0x5357, 0x1484, 0xDCF1, 0x9B22, 0x5C3A, 0x1BE9, 0xD39C, 0x944F + } + }; + ushort _crc; + + /// Initializes an instance of the CRC16 with IBM polynomial and seed. + /// + public CRC16CCITTContext() => _crc = 0; + + /// + public void Update(byte[] data, uint len) + { + // Unroll according to Intel slicing by uint8_t + // http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf + // http://sourceforge.net/projects/slicing-by-8/ + + ushort crc; + int current_pos = 0; + const int unroll = 4; + const int bytes_at_once = 8 * unroll; + + crc = _crc; + + while(len >= bytes_at_once) + { + int unrolling; + + for(unrolling = 0; unrolling < unroll; unrolling++) + { + crc = (ushort)(crc16_ccitt_table[7][data[current_pos + 0] ^ (crc >> 8)] ^ + crc16_ccitt_table[6][data[current_pos + 1] ^ (crc & 0xFF)] ^ + crc16_ccitt_table[5][data[current_pos + 2]] ^ + crc16_ccitt_table[4][data[current_pos + 3]] ^ + crc16_ccitt_table[3][data[current_pos + 4]] ^ + crc16_ccitt_table[2][data[current_pos + 5]] ^ + crc16_ccitt_table[1][data[current_pos + 6]] ^ + crc16_ccitt_table[0][data[current_pos + 7]]); + + current_pos += 8; + } + + len -= bytes_at_once; + } + + while(len-- != 0) + crc = (ushort)((crc << 8) ^ crc16_ccitt_table[0][(crc >> 8) ^ data[current_pos++]]); + + _crc = crc; + } + + /// + public void Update(byte[] data) => Update(data, (uint)data.Length); + + /// + public byte[] Final() => BigEndianBitConverter.GetBytes(_crc); + + /// + public string End() => throw new NotImplementedException(); + + /// Gets the hash of a file + /// File path. + public static byte[] File(string filename) + { + File(filename, out byte[] hash); + + return hash; + } + + /// Gets the hash of a file in hexadecimal and as a byte array. + /// File path. + /// Byte array of the hash value. + public static string File(string filename, out byte[] hash) => throw new NotImplementedException(); + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Length of the data buffer to hash. + /// Byte array of the hash value. + public static string Data(byte[] data, uint len, out byte[] hash) => throw new NotImplementedException(); + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Byte array of the hash value. + public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); + + /// Calculates the IBM CRC16 of the specified buffer with the specified parameters + /// Buffer + public static ushort Calculate(byte[] buffer) => throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/Aaru.Checksums/CRC16Context.cs b/Aaru6.Checksums/CRC16Context.cs similarity index 98% rename from Aaru.Checksums/CRC16Context.cs rename to Aaru6.Checksums/CRC16Context.cs index 12ad0cf..e981da7 100644 --- a/Aaru.Checksums/CRC16Context.cs +++ b/Aaru6.Checksums/CRC16Context.cs @@ -66,7 +66,7 @@ namespace Aaru.Checksums for(int i = 0; i < len; i++) { if(_inverse) - _hashInt = (ushort)(_table[(_hashInt >> 8) ^ data[i]] ^ (_hashInt << 8)); + _hashInt = (ushort)((_hashInt << 8) ^ _table[data[i] ^ (_hashInt >> 8)]); else _hashInt = (ushort)((_hashInt >> 8) ^ _table[data[i] ^ (_hashInt & 0xFF)]); } diff --git a/Aaru6.Checksums/CRC16IBMContext.cs b/Aaru6.Checksums/CRC16IBMContext.cs new file mode 100644 index 0000000..6e65933 --- /dev/null +++ b/Aaru6.Checksums/CRC16IBMContext.cs @@ -0,0 +1,317 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : CRC16IBMContext.cs +// Author(s) : Natalia Portillo +// +// Component : Checksums. +// +// --[ Description ] ---------------------------------------------------------- +// +// Implements a CRC16 algorithm with the IBM polynomial. +// +// --[ License ] -------------------------------------------------------------- +// +// This library 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 2.1 of the +// License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2021 Natalia Portillo +// ****************************************************************************/ + +using System; +using Aaru.CommonTypes.Interfaces; +using Aaru.Helpers; + +namespace Aaru6.Checksums +{ + /// + /// Implements the CRC16 algorithm with IBM polynomial and seed + public sealed class CRC16IBMContext : IChecksum + { + const ushort CRC16_IBM_POLY = 0xA001; + const ushort CRC16_IBM_SEED = 0x0000; + + static readonly ushort[][] crc16_table = + { + new ushort[] + { + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, + 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, + 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, + 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, + 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, + 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, + 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, + 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, + 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, + 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, + 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, + 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, + 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, + 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, + 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, + 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, + 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, + 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 + }, + new ushort[] + { + 0x0000, 0x9001, 0x6001, 0xF000, 0xC002, 0x5003, 0xA003, 0x3002, 0xC007, 0x5006, 0xA006, 0x3007, 0x0005, + 0x9004, 0x6004, 0xF005, 0xC00D, 0x500C, 0xA00C, 0x300D, 0x000F, 0x900E, 0x600E, 0xF00F, 0x000A, 0x900B, + 0x600B, 0xF00A, 0xC008, 0x5009, 0xA009, 0x3008, 0xC019, 0x5018, 0xA018, 0x3019, 0x001B, 0x901A, 0x601A, + 0xF01B, 0x001E, 0x901F, 0x601F, 0xF01E, 0xC01C, 0x501D, 0xA01D, 0x301C, 0x0014, 0x9015, 0x6015, 0xF014, + 0xC016, 0x5017, 0xA017, 0x3016, 0xC013, 0x5012, 0xA012, 0x3013, 0x0011, 0x9010, 0x6010, 0xF011, 0xC031, + 0x5030, 0xA030, 0x3031, 0x0033, 0x9032, 0x6032, 0xF033, 0x0036, 0x9037, 0x6037, 0xF036, 0xC034, 0x5035, + 0xA035, 0x3034, 0x003C, 0x903D, 0x603D, 0xF03C, 0xC03E, 0x503F, 0xA03F, 0x303E, 0xC03B, 0x503A, 0xA03A, + 0x303B, 0x0039, 0x9038, 0x6038, 0xF039, 0x0028, 0x9029, 0x6029, 0xF028, 0xC02A, 0x502B, 0xA02B, 0x302A, + 0xC02F, 0x502E, 0xA02E, 0x302F, 0x002D, 0x902C, 0x602C, 0xF02D, 0xC025, 0x5024, 0xA024, 0x3025, 0x0027, + 0x9026, 0x6026, 0xF027, 0x0022, 0x9023, 0x6023, 0xF022, 0xC020, 0x5021, 0xA021, 0x3020, 0xC061, 0x5060, + 0xA060, 0x3061, 0x0063, 0x9062, 0x6062, 0xF063, 0x0066, 0x9067, 0x6067, 0xF066, 0xC064, 0x5065, 0xA065, + 0x3064, 0x006C, 0x906D, 0x606D, 0xF06C, 0xC06E, 0x506F, 0xA06F, 0x306E, 0xC06B, 0x506A, 0xA06A, 0x306B, + 0x0069, 0x9068, 0x6068, 0xF069, 0x0078, 0x9079, 0x6079, 0xF078, 0xC07A, 0x507B, 0xA07B, 0x307A, 0xC07F, + 0x507E, 0xA07E, 0x307F, 0x007D, 0x907C, 0x607C, 0xF07D, 0xC075, 0x5074, 0xA074, 0x3075, 0x0077, 0x9076, + 0x6076, 0xF077, 0x0072, 0x9073, 0x6073, 0xF072, 0xC070, 0x5071, 0xA071, 0x3070, 0x0050, 0x9051, 0x6051, + 0xF050, 0xC052, 0x5053, 0xA053, 0x3052, 0xC057, 0x5056, 0xA056, 0x3057, 0x0055, 0x9054, 0x6054, 0xF055, + 0xC05D, 0x505C, 0xA05C, 0x305D, 0x005F, 0x905E, 0x605E, 0xF05F, 0x005A, 0x905B, 0x605B, 0xF05A, 0xC058, + 0x5059, 0xA059, 0x3058, 0xC049, 0x5048, 0xA048, 0x3049, 0x004B, 0x904A, 0x604A, 0xF04B, 0x004E, 0x904F, + 0x604F, 0xF04E, 0xC04C, 0x504D, 0xA04D, 0x304C, 0x0044, 0x9045, 0x6045, 0xF044, 0xC046, 0x5047, 0xA047, + 0x3046, 0xC043, 0x5042, 0xA042, 0x3043, 0x0041, 0x9040, 0x6040, 0xF041 + }, + new ushort[] + { + 0x0000, 0xC051, 0xC0A1, 0x00F0, 0xC141, 0x0110, 0x01E0, 0xC1B1, 0xC281, 0x02D0, 0x0220, 0xC271, 0x03C0, + 0xC391, 0xC361, 0x0330, 0xC501, 0x0550, 0x05A0, 0xC5F1, 0x0440, 0xC411, 0xC4E1, 0x04B0, 0x0780, 0xC7D1, + 0xC721, 0x0770, 0xC6C1, 0x0690, 0x0660, 0xC631, 0xCA01, 0x0A50, 0x0AA0, 0xCAF1, 0x0B40, 0xCB11, 0xCBE1, + 0x0BB0, 0x0880, 0xC8D1, 0xC821, 0x0870, 0xC9C1, 0x0990, 0x0960, 0xC931, 0x0F00, 0xCF51, 0xCFA1, 0x0FF0, + 0xCE41, 0x0E10, 0x0EE0, 0xCEB1, 0xCD81, 0x0DD0, 0x0D20, 0xCD71, 0x0CC0, 0xCC91, 0xCC61, 0x0C30, 0xD401, + 0x1450, 0x14A0, 0xD4F1, 0x1540, 0xD511, 0xD5E1, 0x15B0, 0x1680, 0xD6D1, 0xD621, 0x1670, 0xD7C1, 0x1790, + 0x1760, 0xD731, 0x1100, 0xD151, 0xD1A1, 0x11F0, 0xD041, 0x1010, 0x10E0, 0xD0B1, 0xD381, 0x13D0, 0x1320, + 0xD371, 0x12C0, 0xD291, 0xD261, 0x1230, 0x1E00, 0xDE51, 0xDEA1, 0x1EF0, 0xDF41, 0x1F10, 0x1FE0, 0xDFB1, + 0xDC81, 0x1CD0, 0x1C20, 0xDC71, 0x1DC0, 0xDD91, 0xDD61, 0x1D30, 0xDB01, 0x1B50, 0x1BA0, 0xDBF1, 0x1A40, + 0xDA11, 0xDAE1, 0x1AB0, 0x1980, 0xD9D1, 0xD921, 0x1970, 0xD8C1, 0x1890, 0x1860, 0xD831, 0xE801, 0x2850, + 0x28A0, 0xE8F1, 0x2940, 0xE911, 0xE9E1, 0x29B0, 0x2A80, 0xEAD1, 0xEA21, 0x2A70, 0xEBC1, 0x2B90, 0x2B60, + 0xEB31, 0x2D00, 0xED51, 0xEDA1, 0x2DF0, 0xEC41, 0x2C10, 0x2CE0, 0xECB1, 0xEF81, 0x2FD0, 0x2F20, 0xEF71, + 0x2EC0, 0xEE91, 0xEE61, 0x2E30, 0x2200, 0xE251, 0xE2A1, 0x22F0, 0xE341, 0x2310, 0x23E0, 0xE3B1, 0xE081, + 0x20D0, 0x2020, 0xE071, 0x21C0, 0xE191, 0xE161, 0x2130, 0xE701, 0x2750, 0x27A0, 0xE7F1, 0x2640, 0xE611, + 0xE6E1, 0x26B0, 0x2580, 0xE5D1, 0xE521, 0x2570, 0xE4C1, 0x2490, 0x2460, 0xE431, 0x3C00, 0xFC51, 0xFCA1, + 0x3CF0, 0xFD41, 0x3D10, 0x3DE0, 0xFDB1, 0xFE81, 0x3ED0, 0x3E20, 0xFE71, 0x3FC0, 0xFF91, 0xFF61, 0x3F30, + 0xF901, 0x3950, 0x39A0, 0xF9F1, 0x3840, 0xF811, 0xF8E1, 0x38B0, 0x3B80, 0xFBD1, 0xFB21, 0x3B70, 0xFAC1, + 0x3A90, 0x3A60, 0xFA31, 0xF601, 0x3650, 0x36A0, 0xF6F1, 0x3740, 0xF711, 0xF7E1, 0x37B0, 0x3480, 0xF4D1, + 0xF421, 0x3470, 0xF5C1, 0x3590, 0x3560, 0xF531, 0x3300, 0xF351, 0xF3A1, 0x33F0, 0xF241, 0x3210, 0x32E0, + 0xF2B1, 0xF181, 0x31D0, 0x3120, 0xF171, 0x30C0, 0xF091, 0xF061, 0x3030 + }, + new ushort[] + { + 0x0000, 0xFC01, 0xB801, 0x4400, 0x3001, 0xCC00, 0x8800, 0x7401, 0x6002, 0x9C03, 0xD803, 0x2402, 0x5003, + 0xAC02, 0xE802, 0x1403, 0xC004, 0x3C05, 0x7805, 0x8404, 0xF005, 0x0C04, 0x4804, 0xB405, 0xA006, 0x5C07, + 0x1807, 0xE406, 0x9007, 0x6C06, 0x2806, 0xD407, 0xC00B, 0x3C0A, 0x780A, 0x840B, 0xF00A, 0x0C0B, 0x480B, + 0xB40A, 0xA009, 0x5C08, 0x1808, 0xE409, 0x9008, 0x6C09, 0x2809, 0xD408, 0x000F, 0xFC0E, 0xB80E, 0x440F, + 0x300E, 0xCC0F, 0x880F, 0x740E, 0x600D, 0x9C0C, 0xD80C, 0x240D, 0x500C, 0xAC0D, 0xE80D, 0x140C, 0xC015, + 0x3C14, 0x7814, 0x8415, 0xF014, 0x0C15, 0x4815, 0xB414, 0xA017, 0x5C16, 0x1816, 0xE417, 0x9016, 0x6C17, + 0x2817, 0xD416, 0x0011, 0xFC10, 0xB810, 0x4411, 0x3010, 0xCC11, 0x8811, 0x7410, 0x6013, 0x9C12, 0xD812, + 0x2413, 0x5012, 0xAC13, 0xE813, 0x1412, 0x001E, 0xFC1F, 0xB81F, 0x441E, 0x301F, 0xCC1E, 0x881E, 0x741F, + 0x601C, 0x9C1D, 0xD81D, 0x241C, 0x501D, 0xAC1C, 0xE81C, 0x141D, 0xC01A, 0x3C1B, 0x781B, 0x841A, 0xF01B, + 0x0C1A, 0x481A, 0xB41B, 0xA018, 0x5C19, 0x1819, 0xE418, 0x9019, 0x6C18, 0x2818, 0xD419, 0xC029, 0x3C28, + 0x7828, 0x8429, 0xF028, 0x0C29, 0x4829, 0xB428, 0xA02B, 0x5C2A, 0x182A, 0xE42B, 0x902A, 0x6C2B, 0x282B, + 0xD42A, 0x002D, 0xFC2C, 0xB82C, 0x442D, 0x302C, 0xCC2D, 0x882D, 0x742C, 0x602F, 0x9C2E, 0xD82E, 0x242F, + 0x502E, 0xAC2F, 0xE82F, 0x142E, 0x0022, 0xFC23, 0xB823, 0x4422, 0x3023, 0xCC22, 0x8822, 0x7423, 0x6020, + 0x9C21, 0xD821, 0x2420, 0x5021, 0xAC20, 0xE820, 0x1421, 0xC026, 0x3C27, 0x7827, 0x8426, 0xF027, 0x0C26, + 0x4826, 0xB427, 0xA024, 0x5C25, 0x1825, 0xE424, 0x9025, 0x6C24, 0x2824, 0xD425, 0x003C, 0xFC3D, 0xB83D, + 0x443C, 0x303D, 0xCC3C, 0x883C, 0x743D, 0x603E, 0x9C3F, 0xD83F, 0x243E, 0x503F, 0xAC3E, 0xE83E, 0x143F, + 0xC038, 0x3C39, 0x7839, 0x8438, 0xF039, 0x0C38, 0x4838, 0xB439, 0xA03A, 0x5C3B, 0x183B, 0xE43A, 0x903B, + 0x6C3A, 0x283A, 0xD43B, 0xC037, 0x3C36, 0x7836, 0x8437, 0xF036, 0x0C37, 0x4837, 0xB436, 0xA035, 0x5C34, + 0x1834, 0xE435, 0x9034, 0x6C35, 0x2835, 0xD434, 0x0033, 0xFC32, 0xB832, 0x4433, 0x3032, 0xCC33, 0x8833, + 0x7432, 0x6031, 0x9C30, 0xD830, 0x2431, 0x5030, 0xAC31, 0xE831, 0x1430 + }, + new ushort[] + { + 0x0000, 0xC03D, 0xC079, 0x0044, 0xC0F1, 0x00CC, 0x0088, 0xC0B5, 0xC1E1, 0x01DC, 0x0198, 0xC1A5, 0x0110, + 0xC12D, 0xC169, 0x0154, 0xC3C1, 0x03FC, 0x03B8, 0xC385, 0x0330, 0xC30D, 0xC349, 0x0374, 0x0220, 0xC21D, + 0xC259, 0x0264, 0xC2D1, 0x02EC, 0x02A8, 0xC295, 0xC781, 0x07BC, 0x07F8, 0xC7C5, 0x0770, 0xC74D, 0xC709, + 0x0734, 0x0660, 0xC65D, 0xC619, 0x0624, 0xC691, 0x06AC, 0x06E8, 0xC6D5, 0x0440, 0xC47D, 0xC439, 0x0404, + 0xC4B1, 0x048C, 0x04C8, 0xC4F5, 0xC5A1, 0x059C, 0x05D8, 0xC5E5, 0x0550, 0xC56D, 0xC529, 0x0514, 0xCF01, + 0x0F3C, 0x0F78, 0xCF45, 0x0FF0, 0xCFCD, 0xCF89, 0x0FB4, 0x0EE0, 0xCEDD, 0xCE99, 0x0EA4, 0xCE11, 0x0E2C, + 0x0E68, 0xCE55, 0x0CC0, 0xCCFD, 0xCCB9, 0x0C84, 0xCC31, 0x0C0C, 0x0C48, 0xCC75, 0xCD21, 0x0D1C, 0x0D58, + 0xCD65, 0x0DD0, 0xCDED, 0xCDA9, 0x0D94, 0x0880, 0xC8BD, 0xC8F9, 0x08C4, 0xC871, 0x084C, 0x0808, 0xC835, + 0xC961, 0x095C, 0x0918, 0xC925, 0x0990, 0xC9AD, 0xC9E9, 0x09D4, 0xCB41, 0x0B7C, 0x0B38, 0xCB05, 0x0BB0, + 0xCB8D, 0xCBC9, 0x0BF4, 0x0AA0, 0xCA9D, 0xCAD9, 0x0AE4, 0xCA51, 0x0A6C, 0x0A28, 0xCA15, 0xDE01, 0x1E3C, + 0x1E78, 0xDE45, 0x1EF0, 0xDECD, 0xDE89, 0x1EB4, 0x1FE0, 0xDFDD, 0xDF99, 0x1FA4, 0xDF11, 0x1F2C, 0x1F68, + 0xDF55, 0x1DC0, 0xDDFD, 0xDDB9, 0x1D84, 0xDD31, 0x1D0C, 0x1D48, 0xDD75, 0xDC21, 0x1C1C, 0x1C58, 0xDC65, + 0x1CD0, 0xDCED, 0xDCA9, 0x1C94, 0x1980, 0xD9BD, 0xD9F9, 0x19C4, 0xD971, 0x194C, 0x1908, 0xD935, 0xD861, + 0x185C, 0x1818, 0xD825, 0x1890, 0xD8AD, 0xD8E9, 0x18D4, 0xDA41, 0x1A7C, 0x1A38, 0xDA05, 0x1AB0, 0xDA8D, + 0xDAC9, 0x1AF4, 0x1BA0, 0xDB9D, 0xDBD9, 0x1BE4, 0xDB51, 0x1B6C, 0x1B28, 0xDB15, 0x1100, 0xD13D, 0xD179, + 0x1144, 0xD1F1, 0x11CC, 0x1188, 0xD1B5, 0xD0E1, 0x10DC, 0x1098, 0xD0A5, 0x1010, 0xD02D, 0xD069, 0x1054, + 0xD2C1, 0x12FC, 0x12B8, 0xD285, 0x1230, 0xD20D, 0xD249, 0x1274, 0x1320, 0xD31D, 0xD359, 0x1364, 0xD3D1, + 0x13EC, 0x13A8, 0xD395, 0xD681, 0x16BC, 0x16F8, 0xD6C5, 0x1670, 0xD64D, 0xD609, 0x1634, 0x1760, 0xD75D, + 0xD719, 0x1724, 0xD791, 0x17AC, 0x17E8, 0xD7D5, 0x1540, 0xD57D, 0xD539, 0x1504, 0xD5B1, 0x158C, 0x15C8, + 0xD5F5, 0xD4A1, 0x149C, 0x14D8, 0xD4E5, 0x1450, 0xD46D, 0xD429, 0x1414 + }, + new ushort[] + { + 0x0000, 0xD101, 0xE201, 0x3300, 0x8401, 0x5500, 0x6600, 0xB701, 0x4801, 0x9900, 0xAA00, 0x7B01, 0xCC00, + 0x1D01, 0x2E01, 0xFF00, 0x9002, 0x4103, 0x7203, 0xA302, 0x1403, 0xC502, 0xF602, 0x2703, 0xD803, 0x0902, + 0x3A02, 0xEB03, 0x5C02, 0x8D03, 0xBE03, 0x6F02, 0x6007, 0xB106, 0x8206, 0x5307, 0xE406, 0x3507, 0x0607, + 0xD706, 0x2806, 0xF907, 0xCA07, 0x1B06, 0xAC07, 0x7D06, 0x4E06, 0x9F07, 0xF005, 0x2104, 0x1204, 0xC305, + 0x7404, 0xA505, 0x9605, 0x4704, 0xB804, 0x6905, 0x5A05, 0x8B04, 0x3C05, 0xED04, 0xDE04, 0x0F05, 0xC00E, + 0x110F, 0x220F, 0xF30E, 0x440F, 0x950E, 0xA60E, 0x770F, 0x880F, 0x590E, 0x6A0E, 0xBB0F, 0x0C0E, 0xDD0F, + 0xEE0F, 0x3F0E, 0x500C, 0x810D, 0xB20D, 0x630C, 0xD40D, 0x050C, 0x360C, 0xE70D, 0x180D, 0xC90C, 0xFA0C, + 0x2B0D, 0x9C0C, 0x4D0D, 0x7E0D, 0xAF0C, 0xA009, 0x7108, 0x4208, 0x9309, 0x2408, 0xF509, 0xC609, 0x1708, + 0xE808, 0x3909, 0x0A09, 0xDB08, 0x6C09, 0xBD08, 0x8E08, 0x5F09, 0x300B, 0xE10A, 0xD20A, 0x030B, 0xB40A, + 0x650B, 0x560B, 0x870A, 0x780A, 0xA90B, 0x9A0B, 0x4B0A, 0xFC0B, 0x2D0A, 0x1E0A, 0xCF0B, 0xC01F, 0x111E, + 0x221E, 0xF31F, 0x441E, 0x951F, 0xA61F, 0x771E, 0x881E, 0x591F, 0x6A1F, 0xBB1E, 0x0C1F, 0xDD1E, 0xEE1E, + 0x3F1F, 0x501D, 0x811C, 0xB21C, 0x631D, 0xD41C, 0x051D, 0x361D, 0xE71C, 0x181C, 0xC91D, 0xFA1D, 0x2B1C, + 0x9C1D, 0x4D1C, 0x7E1C, 0xAF1D, 0xA018, 0x7119, 0x4219, 0x9318, 0x2419, 0xF518, 0xC618, 0x1719, 0xE819, + 0x3918, 0x0A18, 0xDB19, 0x6C18, 0xBD19, 0x8E19, 0x5F18, 0x301A, 0xE11B, 0xD21B, 0x031A, 0xB41B, 0x651A, + 0x561A, 0x871B, 0x781B, 0xA91A, 0x9A1A, 0x4B1B, 0xFC1A, 0x2D1B, 0x1E1B, 0xCF1A, 0x0011, 0xD110, 0xE210, + 0x3311, 0x8410, 0x5511, 0x6611, 0xB710, 0x4810, 0x9911, 0xAA11, 0x7B10, 0xCC11, 0x1D10, 0x2E10, 0xFF11, + 0x9013, 0x4112, 0x7212, 0xA313, 0x1412, 0xC513, 0xF613, 0x2712, 0xD812, 0x0913, 0x3A13, 0xEB12, 0x5C13, + 0x8D12, 0xBE12, 0x6F13, 0x6016, 0xB117, 0x8217, 0x5316, 0xE417, 0x3516, 0x0616, 0xD717, 0x2817, 0xF916, + 0xCA16, 0x1B17, 0xAC16, 0x7D17, 0x4E17, 0x9F16, 0xF014, 0x2115, 0x1215, 0xC314, 0x7415, 0xA514, 0x9614, + 0x4715, 0xB815, 0x6914, 0x5A14, 0x8B15, 0x3C14, 0xED15, 0xDE15, 0x0F14 + }, + new ushort[] + { + 0x0000, 0xC010, 0xC023, 0x0033, 0xC045, 0x0055, 0x0066, 0xC076, 0xC089, 0x0099, 0x00AA, 0xC0BA, 0x00CC, + 0xC0DC, 0xC0EF, 0x00FF, 0xC111, 0x0101, 0x0132, 0xC122, 0x0154, 0xC144, 0xC177, 0x0167, 0x0198, 0xC188, + 0xC1BB, 0x01AB, 0xC1DD, 0x01CD, 0x01FE, 0xC1EE, 0xC221, 0x0231, 0x0202, 0xC212, 0x0264, 0xC274, 0xC247, + 0x0257, 0x02A8, 0xC2B8, 0xC28B, 0x029B, 0xC2ED, 0x02FD, 0x02CE, 0xC2DE, 0x0330, 0xC320, 0xC313, 0x0303, + 0xC375, 0x0365, 0x0356, 0xC346, 0xC3B9, 0x03A9, 0x039A, 0xC38A, 0x03FC, 0xC3EC, 0xC3DF, 0x03CF, 0xC441, + 0x0451, 0x0462, 0xC472, 0x0404, 0xC414, 0xC427, 0x0437, 0x04C8, 0xC4D8, 0xC4EB, 0x04FB, 0xC48D, 0x049D, + 0x04AE, 0xC4BE, 0x0550, 0xC540, 0xC573, 0x0563, 0xC515, 0x0505, 0x0536, 0xC526, 0xC5D9, 0x05C9, 0x05FA, + 0xC5EA, 0x059C, 0xC58C, 0xC5BF, 0x05AF, 0x0660, 0xC670, 0xC643, 0x0653, 0xC625, 0x0635, 0x0606, 0xC616, + 0xC6E9, 0x06F9, 0x06CA, 0xC6DA, 0x06AC, 0xC6BC, 0xC68F, 0x069F, 0xC771, 0x0761, 0x0752, 0xC742, 0x0734, + 0xC724, 0xC717, 0x0707, 0x07F8, 0xC7E8, 0xC7DB, 0x07CB, 0xC7BD, 0x07AD, 0x079E, 0xC78E, 0xC881, 0x0891, + 0x08A2, 0xC8B2, 0x08C4, 0xC8D4, 0xC8E7, 0x08F7, 0x0808, 0xC818, 0xC82B, 0x083B, 0xC84D, 0x085D, 0x086E, + 0xC87E, 0x0990, 0xC980, 0xC9B3, 0x09A3, 0xC9D5, 0x09C5, 0x09F6, 0xC9E6, 0xC919, 0x0909, 0x093A, 0xC92A, + 0x095C, 0xC94C, 0xC97F, 0x096F, 0x0AA0, 0xCAB0, 0xCA83, 0x0A93, 0xCAE5, 0x0AF5, 0x0AC6, 0xCAD6, 0xCA29, + 0x0A39, 0x0A0A, 0xCA1A, 0x0A6C, 0xCA7C, 0xCA4F, 0x0A5F, 0xCBB1, 0x0BA1, 0x0B92, 0xCB82, 0x0BF4, 0xCBE4, + 0xCBD7, 0x0BC7, 0x0B38, 0xCB28, 0xCB1B, 0x0B0B, 0xCB7D, 0x0B6D, 0x0B5E, 0xCB4E, 0x0CC0, 0xCCD0, 0xCCE3, + 0x0CF3, 0xCC85, 0x0C95, 0x0CA6, 0xCCB6, 0xCC49, 0x0C59, 0x0C6A, 0xCC7A, 0x0C0C, 0xCC1C, 0xCC2F, 0x0C3F, + 0xCDD1, 0x0DC1, 0x0DF2, 0xCDE2, 0x0D94, 0xCD84, 0xCDB7, 0x0DA7, 0x0D58, 0xCD48, 0xCD7B, 0x0D6B, 0xCD1D, + 0x0D0D, 0x0D3E, 0xCD2E, 0xCEE1, 0x0EF1, 0x0EC2, 0xCED2, 0x0EA4, 0xCEB4, 0xCE87, 0x0E97, 0x0E68, 0xCE78, + 0xCE4B, 0x0E5B, 0xCE2D, 0x0E3D, 0x0E0E, 0xCE1E, 0x0FF0, 0xCFE0, 0xCFD3, 0x0FC3, 0xCFB5, 0x0FA5, 0x0F96, + 0xCF86, 0xCF79, 0x0F69, 0x0F5A, 0xCF4A, 0x0F3C, 0xCF2C, 0xCF1F, 0x0F0F + }, + new ushort[] + { + 0x0000, 0xCCC1, 0xD981, 0x1540, 0xF301, 0x3FC0, 0x2A80, 0xE641, 0xA601, 0x6AC0, 0x7F80, 0xB341, 0x5500, + 0x99C1, 0x8C81, 0x4040, 0x0C01, 0xC0C0, 0xD580, 0x1941, 0xFF00, 0x33C1, 0x2681, 0xEA40, 0xAA00, 0x66C1, + 0x7381, 0xBF40, 0x5901, 0x95C0, 0x8080, 0x4C41, 0x1802, 0xD4C3, 0xC183, 0x0D42, 0xEB03, 0x27C2, 0x3282, + 0xFE43, 0xBE03, 0x72C2, 0x6782, 0xAB43, 0x4D02, 0x81C3, 0x9483, 0x5842, 0x1403, 0xD8C2, 0xCD82, 0x0143, + 0xE702, 0x2BC3, 0x3E83, 0xF242, 0xB202, 0x7EC3, 0x6B83, 0xA742, 0x4103, 0x8DC2, 0x9882, 0x5443, 0x3004, + 0xFCC5, 0xE985, 0x2544, 0xC305, 0x0FC4, 0x1A84, 0xD645, 0x9605, 0x5AC4, 0x4F84, 0x8345, 0x6504, 0xA9C5, + 0xBC85, 0x7044, 0x3C05, 0xF0C4, 0xE584, 0x2945, 0xCF04, 0x03C5, 0x1685, 0xDA44, 0x9A04, 0x56C5, 0x4385, + 0x8F44, 0x6905, 0xA5C4, 0xB084, 0x7C45, 0x2806, 0xE4C7, 0xF187, 0x3D46, 0xDB07, 0x17C6, 0x0286, 0xCE47, + 0x8E07, 0x42C6, 0x5786, 0x9B47, 0x7D06, 0xB1C7, 0xA487, 0x6846, 0x2407, 0xE8C6, 0xFD86, 0x3147, 0xD706, + 0x1BC7, 0x0E87, 0xC246, 0x8206, 0x4EC7, 0x5B87, 0x9746, 0x7107, 0xBDC6, 0xA886, 0x6447, 0x6008, 0xACC9, + 0xB989, 0x7548, 0x9309, 0x5FC8, 0x4A88, 0x8649, 0xC609, 0x0AC8, 0x1F88, 0xD349, 0x3508, 0xF9C9, 0xEC89, + 0x2048, 0x6C09, 0xA0C8, 0xB588, 0x7949, 0x9F08, 0x53C9, 0x4689, 0x8A48, 0xCA08, 0x06C9, 0x1389, 0xDF48, + 0x3909, 0xF5C8, 0xE088, 0x2C49, 0x780A, 0xB4CB, 0xA18B, 0x6D4A, 0x8B0B, 0x47CA, 0x528A, 0x9E4B, 0xDE0B, + 0x12CA, 0x078A, 0xCB4B, 0x2D0A, 0xE1CB, 0xF48B, 0x384A, 0x740B, 0xB8CA, 0xAD8A, 0x614B, 0x870A, 0x4BCB, + 0x5E8B, 0x924A, 0xD20A, 0x1ECB, 0x0B8B, 0xC74A, 0x210B, 0xEDCA, 0xF88A, 0x344B, 0x500C, 0x9CCD, 0x898D, + 0x454C, 0xA30D, 0x6FCC, 0x7A8C, 0xB64D, 0xF60D, 0x3ACC, 0x2F8C, 0xE34D, 0x050C, 0xC9CD, 0xDC8D, 0x104C, + 0x5C0D, 0x90CC, 0x858C, 0x494D, 0xAF0C, 0x63CD, 0x768D, 0xBA4C, 0xFA0C, 0x36CD, 0x238D, 0xEF4C, 0x090D, + 0xC5CC, 0xD08C, 0x1C4D, 0x480E, 0x84CF, 0x918F, 0x5D4E, 0xBB0F, 0x77CE, 0x628E, 0xAE4F, 0xEE0F, 0x22CE, + 0x378E, 0xFB4F, 0x1D0E, 0xD1CF, 0xC48F, 0x084E, 0x440F, 0x88CE, 0x9D8E, 0x514F, 0xB70E, 0x7BCF, 0x6E8F, + 0xA24E, 0xE20E, 0x2ECF, 0x3B8F, 0xF74E, 0x110F, 0xDDCE, 0xC88E, 0x044F + } + }; + ushort _crc; + + /// Initializes an instance of the CRC16 with IBM polynomial and seed. + /// + public CRC16IBMContext() => _crc = 0; + + /// + public void Update(byte[] data, uint len) + { + // Unroll according to Intel slicing by uint8_t + // http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf + // http://sourceforge.net/projects/slicing-by-8/ + + ushort crc; + int current_pos = 0; + const int unroll = 4; + const int bytes_at_once = 8 * unroll; + + crc = _crc; + + while(len >= bytes_at_once) + { + int unrolling; + + for(unrolling = 0; unrolling < unroll; unrolling++) + { + uint one = BitConverter.ToUInt32(data, current_pos) ^ crc; + current_pos += 4; + uint two = BitConverter.ToUInt32(data, current_pos); + current_pos += 4; + + crc = (ushort)(crc16_table[0][(two >> 24) & 0xFF] ^ crc16_table[1][(two >> 16) & 0xFF] ^ + crc16_table[2][(two >> 8) & 0xFF] ^ crc16_table[3][two & 0xFF] ^ + crc16_table[4][(one >> 24) & 0xFF] ^ crc16_table[5][(one >> 16) & 0xFF] ^ + crc16_table[6][(one >> 8) & 0xFF] ^ crc16_table[7][one & 0xFF]); + } + + len -= bytes_at_once; + } + + while(len-- != 0) + crc = (ushort)((crc >> 8) ^ crc16_table[0][(crc & 0xFF) ^ data[current_pos++]]); + + _crc = crc; + } + + /// + public void Update(byte[] data) => Update(data, (uint)data.Length); + + /// + public byte[] Final() => BigEndianBitConverter.GetBytes(_crc); + + /// + public string End() => throw new NotImplementedException(); + + /// Gets the hash of a file + /// File path. + public static byte[] File(string filename) + { + File(filename, out byte[] hash); + + return hash; + } + + /// Gets the hash of a file in hexadecimal and as a byte array. + /// File path. + /// Byte array of the hash value. + public static string File(string filename, out byte[] hash) => throw new NotImplementedException(); + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Length of the data buffer to hash. + /// Byte array of the hash value. + public static string Data(byte[] data, uint len, out byte[] hash) => throw new NotImplementedException(); + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Byte array of the hash value. + public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); + + /// Calculates the IBM CRC16 of the specified buffer with the specified parameters + /// Buffer + public static ushort Calculate(byte[] buffer) => throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/Aaru6.Checksums/CRC32CLMUL.cs b/Aaru6.Checksums/CRC32CLMUL.cs new file mode 100644 index 0000000..a6e6c9b --- /dev/null +++ b/Aaru6.Checksums/CRC32CLMUL.cs @@ -0,0 +1,562 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : clmul.cs +// Author(s) : Natalia Portillo +// Wajdi Feghali +// Jim Guilford +// Vinodh Gopal +// Erdinc Ozturk +// Jim Kukunas +// Marian Beermann +// +// Component : Checksums. +// +// --[ Description ] ---------------------------------------------------------- +// +// Compute the CRC32 using a parallelized folding approach with the PCLMULQDQ +// instruction. +// +// A white paper describing this algorithm can be found at: +// http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf +// +// --[ License ] -------------------------------------------------------------- +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from +// the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2021 Natalia Portillo +// Copyright (c) 2016 Marian Beermann (add support for initial value, restructuring) +// Copyright (C) 2013 Intel Corporation. All rights reserved. +// ****************************************************************************/ + +using System; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; + +namespace Aaru6.Checksums +{ + public static class CRC32CLMUL + { + static readonly uint[] crc_k = + { + 0xccaa009e, 0x00000000, /* rk1 */ 0x751997d0, 0x00000001, /* rk2 */ 0xccaa009e, 0x00000000, /* rk5 */ + 0x63cd6124, 0x00000001, /* rk6 */ 0xf7011640, 0x00000001, /* rk7 */ 0xdb710640, 0x00000001 /* rk8 */ + }; + + static readonly Vector128[] pshufb_shf_table = + { + Vector128.Create(0x84838281, 0x88878685, 0x8c8b8a89, 0x008f8e8d), /* shl 15 (16 - 1)/shr1 */ + Vector128.Create(0x85848382, 0x89888786, 0x8d8c8b8a, 0x01008f8e), /* shl 14 (16 - 3)/shr2 */ + Vector128.Create(0x86858483, 0x8a898887, 0x8e8d8c8b, 0x0201008f), /* shl 13 (16 - 4)/shr3 */ + Vector128.Create(0x87868584, 0x8b8a8988, 0x8f8e8d8c, 0x03020100), /* shl 12 (16 - 4)/shr4 */ + Vector128.Create(0x88878685, 0x8c8b8a89, 0x008f8e8d, 0x04030201), /* shl 11 (16 - 5)/shr5 */ + Vector128.Create(0x89888786, 0x8d8c8b8a, 0x01008f8e, 0x05040302), /* shl 10 (16 - 6)/shr6 */ + Vector128.Create(0x8a898887, 0x8e8d8c8b, 0x0201008f, 0x06050403), /* shl 9 (16 - 7)/shr7 */ + Vector128.Create(0x8b8a8988, 0x8f8e8d8c, 0x03020100, 0x07060504), /* shl 8 (16 - 8)/shr8 */ + Vector128.Create(0x8c8b8a89, 0x008f8e8d, 0x04030201, 0x08070605), /* shl 7 (16 - 9)/shr9 */ + Vector128.Create(0x8d8c8b8a, 0x01008f8e, 0x05040302, 0x09080706), /* shl 6 (16 -10)/shr10*/ + Vector128.Create(0x8e8d8c8b, 0x0201008f, 0x06050403, 0x0a090807), /* shl 5 (16 -11)/shr11*/ + Vector128.Create(0x8f8e8d8c, 0x03020100, 0x07060504, 0x0b0a0908), /* shl 4 (16 -12)/shr12*/ + Vector128.Create(0x008f8e8du, 0x04030201, 0x08070605, 0x0c0b0a09), /* shl 3 (16 -13)/shr13*/ + Vector128.Create(0x01008f8eu, 0x05040302, 0x09080706, 0x0d0c0b0a), /* shl 2 (16 -14)/shr14*/ + Vector128.Create(0x0201008fu, 0x06050403, 0x0a090807, 0x0e0d0c0b) /* shl 1 (16 -15)/shr15*/ + }; + + static void fold_1(ref Vector128 xmm_crc0, ref Vector128 xmm_crc1, ref Vector128 xmm_crc2, + ref Vector128 xmm_crc3) + { + Vector128 xmm_fold4 = Vector128.Create(0xc6e41596, 0x00000001, 0x54442bd4, 0x00000001); + + Vector128 x_tmp3; + Vector128 ps_crc0, ps_crc3, ps_res; + + x_tmp3 = xmm_crc3; + + xmm_crc3 = xmm_crc0; + xmm_crc0 = Pclmulqdq.CarrylessMultiply(xmm_crc0.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + xmm_crc3 = Pclmulqdq.CarrylessMultiply(xmm_crc3.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc0 = xmm_crc0.AsSingle(); + ps_crc3 = xmm_crc3.AsSingle(); + ps_res = Sse.Xor(ps_crc0, ps_crc3); + + xmm_crc0 = xmm_crc1; + xmm_crc1 = xmm_crc2; + xmm_crc2 = x_tmp3; + xmm_crc3 = ps_res.AsUInt32(); + } + + static void fold_2(ref Vector128 xmm_crc0, ref Vector128 xmm_crc1, ref Vector128 xmm_crc2, + ref Vector128 xmm_crc3) + { + Vector128 xmm_fold4 = Vector128.Create(0xc6e41596, 0x00000001, 0x54442bd4, 0x00000001); + + Vector128 x_tmp3, x_tmp2; + Vector128 ps_crc0, ps_crc1, ps_crc2, ps_crc3, ps_res31, ps_res20; + + x_tmp3 = xmm_crc3; + x_tmp2 = xmm_crc2; + + xmm_crc3 = xmm_crc1; + xmm_crc1 = Pclmulqdq.CarrylessMultiply(xmm_crc1.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + xmm_crc3 = Pclmulqdq.CarrylessMultiply(xmm_crc3.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc3 = xmm_crc3.AsSingle(); + ps_crc1 = xmm_crc1.AsSingle(); + ps_res31 = Sse.Xor(ps_crc3, ps_crc1); + + xmm_crc2 = xmm_crc0; + xmm_crc0 = Pclmulqdq.CarrylessMultiply(xmm_crc0.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + xmm_crc2 = Pclmulqdq.CarrylessMultiply(xmm_crc2.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc0 = xmm_crc0.AsSingle(); + ps_crc2 = xmm_crc2.AsSingle(); + ps_res20 = Sse.Xor(ps_crc0, ps_crc2); + + xmm_crc0 = x_tmp2; + xmm_crc1 = x_tmp3; + xmm_crc2 = ps_res20.AsUInt32(); + xmm_crc3 = ps_res31.AsUInt32(); + } + + static void fold_3(ref Vector128 xmm_crc0, ref Vector128 xmm_crc1, ref Vector128 xmm_crc2, + ref Vector128 xmm_crc3) + { + Vector128 xmm_fold4 = Vector128.Create(0x54442bd4, 0x00000001, 0xc6e41596, 0x00000001); + + Vector128 x_tmp3; + Vector128 ps_crc0, ps_crc1, ps_crc2, ps_crc3, ps_res32, ps_res21, ps_res10; + + x_tmp3 = xmm_crc3; + + xmm_crc3 = xmm_crc2; + xmm_crc2 = Pclmulqdq.CarrylessMultiply(xmm_crc2.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + xmm_crc3 = Pclmulqdq.CarrylessMultiply(xmm_crc3.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc2 = xmm_crc2.AsSingle(); + ps_crc3 = xmm_crc3.AsSingle(); + ps_res32 = Sse.Xor(ps_crc2, ps_crc3); + + xmm_crc2 = xmm_crc1; + xmm_crc1 = Pclmulqdq.CarrylessMultiply(xmm_crc1.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + xmm_crc2 = Pclmulqdq.CarrylessMultiply(xmm_crc2.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc1 = xmm_crc1.AsSingle(); + ps_crc2 = xmm_crc2.AsSingle(); + ps_res21 = Sse.Xor(ps_crc1, ps_crc2); + + xmm_crc1 = xmm_crc0; + xmm_crc0 = Pclmulqdq.CarrylessMultiply(xmm_crc0.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + xmm_crc1 = Pclmulqdq.CarrylessMultiply(xmm_crc1.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc0 = xmm_crc0.AsSingle(); + ps_crc1 = xmm_crc1.AsSingle(); + ps_res10 = Sse.Xor(ps_crc0, ps_crc1); + + xmm_crc0 = x_tmp3; + xmm_crc1 = ps_res10.AsUInt32(); + xmm_crc2 = ps_res21.AsUInt32(); + xmm_crc3 = ps_res32.AsUInt32(); + } + + static void fold_4(ref Vector128 xmm_crc0, ref Vector128 xmm_crc1, ref Vector128 xmm_crc2, + ref Vector128 xmm_crc3) + { + Vector128 xmm_fold4 = Vector128.Create(0xc6e41596, 0x00000001, 0x54442bd4, 0x00000001); + + Vector128 x_tmp0, x_tmp1, x_tmp2, x_tmp3; + Vector128 ps_crc0, ps_crc1, ps_crc2, ps_crc3; + Vector128 ps_t0, ps_t1, ps_t2, ps_t3; + Vector128 ps_res0, ps_res1, ps_res2, ps_res3; + + x_tmp0 = xmm_crc0; + x_tmp1 = xmm_crc1; + x_tmp2 = xmm_crc2; + x_tmp3 = xmm_crc3; + + xmm_crc0 = Pclmulqdq.CarrylessMultiply(xmm_crc0.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + x_tmp0 = Pclmulqdq.CarrylessMultiply(x_tmp0.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc0 = xmm_crc0.AsSingle(); + ps_t0 = x_tmp0.AsSingle(); + ps_res0 = Sse.Xor(ps_crc0, ps_t0); + + xmm_crc1 = Pclmulqdq.CarrylessMultiply(xmm_crc1.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + x_tmp1 = Pclmulqdq.CarrylessMultiply(x_tmp1.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc1 = xmm_crc1.AsSingle(); + ps_t1 = x_tmp1.AsSingle(); + ps_res1 = Sse.Xor(ps_crc1, ps_t1); + + xmm_crc2 = Pclmulqdq.CarrylessMultiply(xmm_crc2.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + x_tmp2 = Pclmulqdq.CarrylessMultiply(x_tmp2.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc2 = xmm_crc2.AsSingle(); + ps_t2 = x_tmp2.AsSingle(); + ps_res2 = Sse.Xor(ps_crc2, ps_t2); + + xmm_crc3 = Pclmulqdq.CarrylessMultiply(xmm_crc3.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + x_tmp3 = Pclmulqdq.CarrylessMultiply(x_tmp3.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + ps_crc3 = xmm_crc3.AsSingle(); + ps_t3 = x_tmp3.AsSingle(); + ps_res3 = Sse.Xor(ps_crc3, ps_t3); + + xmm_crc0 = ps_res0.AsUInt32(); + xmm_crc1 = ps_res1.AsUInt32(); + xmm_crc2 = ps_res2.AsUInt32(); + xmm_crc3 = ps_res3.AsUInt32(); + } + + static void partial_fold(long len, ref Vector128 xmm_crc0, ref Vector128 xmm_crc1, + ref Vector128 xmm_crc2, ref Vector128 xmm_crc3, + ref Vector128 xmm_crc_part) + { + Vector128 xmm_fold4 = Vector128.Create(0x54442bd4, 0x00000001, 0xc6e41596, 0x00000001); + Vector128 xmm_mask3 = Vector128.Create(0x80808080); + + Vector128 xmm_shl, xmm_shr, xmm_tmp1, xmm_tmp2, xmm_tmp3; + Vector128 xmm_a0_0, xmm_a0_1; + Vector128 ps_crc3, psa0_0, psa0_1, ps_res; + + xmm_shl = pshufb_shf_table[len - 1]; + xmm_shr = xmm_shl; + xmm_shr = Sse2.Xor(xmm_shr, xmm_mask3); + + xmm_a0_0 = Ssse3.Shuffle(xmm_crc0.AsByte(), xmm_shl.AsByte()).AsUInt32(); + + xmm_crc0 = Ssse3.Shuffle(xmm_crc0.AsByte(), xmm_shr.AsByte()).AsUInt32(); + xmm_tmp1 = Ssse3.Shuffle(xmm_crc1.AsByte(), xmm_shl.AsByte()).AsUInt32(); + xmm_crc0 = Sse2.Or(xmm_crc0, xmm_tmp1); + + xmm_crc1 = Ssse3.Shuffle(xmm_crc1.AsByte(), xmm_shr.AsByte()).AsUInt32(); + xmm_tmp2 = Ssse3.Shuffle(xmm_crc2.AsByte(), xmm_shl.AsByte()).AsUInt32(); + xmm_crc1 = Sse2.Or(xmm_crc1, xmm_tmp2); + + xmm_crc2 = Ssse3.Shuffle(xmm_crc2.AsByte(), xmm_shr.AsByte()).AsUInt32(); + xmm_tmp3 = Ssse3.Shuffle(xmm_crc3.AsByte(), xmm_shl.AsByte()).AsUInt32(); + xmm_crc2 = Sse2.Or(xmm_crc2, xmm_tmp3); + + xmm_crc3 = Ssse3.Shuffle(xmm_crc3.AsByte(), xmm_shr.AsByte()).AsUInt32(); + xmm_crc_part = Ssse3.Shuffle(xmm_crc_part.AsByte(), xmm_shl.AsByte()).AsUInt32(); + xmm_crc3 = Sse2.Or(xmm_crc3, xmm_crc_part); + + xmm_a0_1 = Pclmulqdq.CarrylessMultiply(xmm_a0_0.AsUInt64(), xmm_fold4.AsUInt64(), 0x10).AsUInt32(); + xmm_a0_0 = Pclmulqdq.CarrylessMultiply(xmm_a0_0.AsUInt64(), xmm_fold4.AsUInt64(), 0x01).AsUInt32(); + + ps_crc3 = xmm_crc3.AsSingle(); + psa0_0 = xmm_a0_0.AsSingle(); + psa0_1 = xmm_a0_1.AsSingle(); + + ps_res = Sse.Xor(ps_crc3, psa0_0); + ps_res = Sse.Xor(ps_res, psa0_1); + + xmm_crc3 = ps_res.AsUInt32(); + } + + internal static uint crc32_clmul(byte[] src, long len, uint initial_crc) + { + Vector128 xmm_t0, xmm_t1, xmm_t2, xmm_t3; + Vector128 xmm_initial = Sse2.ConvertScalarToVector128UInt32(initial_crc); + Vector128 xmm_crc0 = Sse2.ConvertScalarToVector128UInt32(0x9db42487); + Vector128 xmm_crc1 = Vector128.Zero; + Vector128 xmm_crc2 = Vector128.Zero; + Vector128 xmm_crc3 = Vector128.Zero; + Vector128 xmm_crc_part; + int bufPos = 0; + + bool first = true; + + /* fold 512 to 32 step variable declarations for ISO-C90 compat. */ + Vector128 xmm_mask = Vector128.Create(0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000); + Vector128 xmm_mask2 = Vector128.Create(0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); + + uint crc; + Vector128 x_tmp0, x_tmp1, x_tmp2, crc_fold; + + if(len < 16) + { + if(len == 0) + return initial_crc; + + if(len < 4) + { + /* + * no idea how to do this for <4 bytes, delegate to classic impl. + */ + crc = ~initial_crc; + + switch(len) + { + case 3: + crc = (crc >> 8) ^ Crc32Context._isoCrc32Table[0][(crc & 0xFF) ^ src[bufPos++]]; + goto case 2; + case 2: + crc = (crc >> 8) ^ Crc32Context._isoCrc32Table[0][(crc & 0xFF) ^ src[bufPos++]]; + goto case 1; + case 1: + crc = (crc >> 8) ^ Crc32Context._isoCrc32Table[0][(crc & 0xFF) ^ src[bufPos++]]; + + break; + } + + return ~crc; + } + + xmm_crc_part = Vector128.Create(BitConverter.ToUInt32(src, 0), BitConverter.ToUInt32(src, 4), + BitConverter.ToUInt32(src, 8), BitConverter.ToUInt32(src, 12)); + + if(first) + { + first = false; + xmm_crc_part = Sse2.Xor(xmm_crc_part, xmm_initial); + } + + goto partial; + } + + while((len -= 64) >= 0) + { + xmm_t0 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + xmm_t1 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + xmm_t2 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + xmm_t3 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + if(first) + { + first = false; + xmm_t0 = Sse2.Xor(xmm_t0, xmm_initial); + } + + fold_4(ref xmm_crc0, ref xmm_crc1, ref xmm_crc2, ref xmm_crc3); + + xmm_crc0 = Sse2.Xor(xmm_crc0, xmm_t0); + xmm_crc1 = Sse2.Xor(xmm_crc1, xmm_t1); + xmm_crc2 = Sse2.Xor(xmm_crc2, xmm_t2); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_t3); + } + + /* + * len = num bytes left - 64 + */ + if(len + 16 >= 0) + { + len += 16; + + xmm_t0 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + xmm_t1 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + xmm_t2 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + if(first) + { + first = false; + xmm_t0 = Sse2.Xor(xmm_t0, xmm_initial); + } + + fold_3(ref xmm_crc0, ref xmm_crc1, ref xmm_crc2, ref xmm_crc3); + + xmm_crc1 = Sse2.Xor(xmm_crc1, xmm_t0); + xmm_crc2 = Sse2.Xor(xmm_crc2, xmm_t1); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_t2); + + if(len == 0) + goto done; + + xmm_crc_part = Vector128.Create(BitConverter.ToUInt32(src, bufPos), + BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + } + else if(len + 32 >= 0) + { + len += 32; + + xmm_t0 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + xmm_t1 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + if(first) + { + first = false; + xmm_t0 = Sse2.Xor(xmm_t0, xmm_initial); + } + + fold_2(ref xmm_crc0, ref xmm_crc1, ref xmm_crc2, ref xmm_crc3); + + xmm_crc2 = Sse2.Xor(xmm_crc2, xmm_t0); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_t1); + + if(len == 0) + goto done; + + xmm_crc_part = Vector128.Create(BitConverter.ToUInt32(src, bufPos), + BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + } + else if(len + 48 >= 0) + { + len += 48; + + xmm_t0 = Vector128.Create(BitConverter.ToUInt32(src, bufPos), BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + bufPos += 16; + + if(first) + { + first = false; + xmm_t0 = Sse2.Xor(xmm_t0, xmm_initial); + } + + fold_1(ref xmm_crc0, ref xmm_crc1, ref xmm_crc2, ref xmm_crc3); + + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_t0); + + if(len == 0) + goto done; + + xmm_crc_part = Vector128.Create(BitConverter.ToUInt32(src, bufPos), + BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + } + else + { + len += 64; + + if(len == 0) + goto done; + + xmm_crc_part = Vector128.Create(BitConverter.ToUInt32(src, bufPos), + BitConverter.ToUInt32(src, bufPos + 4), + BitConverter.ToUInt32(src, bufPos + 8), + BitConverter.ToUInt32(src, bufPos + 12)); + + if(first) + { + first = false; + xmm_crc_part = Sse2.Xor(xmm_crc_part, xmm_initial); + } + } + + partial: + partial_fold(len, ref xmm_crc0, ref xmm_crc1, ref xmm_crc2, ref xmm_crc3, ref xmm_crc_part); + + done: + + /* fold 512 to 32 */ + + /* + * k1 + */ + crc_fold = Vector128.Create(crc_k[0], crc_k[1], crc_k[2], crc_k[3]); + + x_tmp0 = Pclmulqdq.CarrylessMultiply(xmm_crc0.AsUInt64(), crc_fold.AsUInt64(), 0x10).AsUInt32(); + xmm_crc0 = Pclmulqdq.CarrylessMultiply(xmm_crc0.AsUInt64(), crc_fold.AsUInt64(), 0x01).AsUInt32(); + xmm_crc1 = Sse2.Xor(xmm_crc1, x_tmp0); + xmm_crc1 = Sse2.Xor(xmm_crc1, xmm_crc0); + + x_tmp1 = Pclmulqdq.CarrylessMultiply(xmm_crc1.AsUInt64(), crc_fold.AsUInt64(), 0x10).AsUInt32(); + xmm_crc1 = Pclmulqdq.CarrylessMultiply(xmm_crc1.AsUInt64(), crc_fold.AsUInt64(), 0x01).AsUInt32(); + xmm_crc2 = Sse2.Xor(xmm_crc2, x_tmp1); + xmm_crc2 = Sse2.Xor(xmm_crc2, xmm_crc1); + + x_tmp2 = Pclmulqdq.CarrylessMultiply(xmm_crc2.AsUInt64(), crc_fold.AsUInt64(), 0x10).AsUInt32(); + xmm_crc2 = Pclmulqdq.CarrylessMultiply(xmm_crc2.AsUInt64(), crc_fold.AsUInt64(), 0x01).AsUInt32(); + xmm_crc3 = Sse2.Xor(xmm_crc3, x_tmp2); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_crc2); + + /* + * k5 + */ + crc_fold = Vector128.Create(crc_k[4], crc_k[5], crc_k[6], crc_k[7]); + + xmm_crc0 = xmm_crc3; + xmm_crc3 = Pclmulqdq.CarrylessMultiply(xmm_crc3.AsUInt64(), crc_fold.AsUInt64(), 0).AsUInt32(); + xmm_crc0 = Sse2.ShiftRightLogical128BitLane(xmm_crc0, 8); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_crc0); + + xmm_crc0 = xmm_crc3; + xmm_crc3 = Sse2.ShiftLeftLogical128BitLane(xmm_crc3, 4); + xmm_crc3 = Pclmulqdq.CarrylessMultiply(xmm_crc3.AsUInt64(), crc_fold.AsUInt64(), 0x10).AsUInt32(); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_crc0); + xmm_crc3 = Sse2.And(xmm_crc3, xmm_mask2); + + /* + * k7 + */ + xmm_crc1 = xmm_crc3; + xmm_crc2 = xmm_crc3; + crc_fold = Vector128.Create(crc_k[8], crc_k[9], crc_k[10], crc_k[11]); + + xmm_crc3 = Pclmulqdq.CarrylessMultiply(xmm_crc3.AsUInt64(), crc_fold.AsUInt64(), 0).AsUInt32(); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_crc2); + xmm_crc3 = Sse2.And(xmm_crc3, xmm_mask); + + xmm_crc2 = xmm_crc3; + xmm_crc3 = Pclmulqdq.CarrylessMultiply(xmm_crc3.AsUInt64(), crc_fold.AsUInt64(), 0x10).AsUInt32(); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_crc2); + xmm_crc3 = Sse2.Xor(xmm_crc3, xmm_crc1); + + /* + * could just as well write xmm_crc3[2], doing a movaps and truncating, but + * no real advantage - it's a tiny bit slower per call, while no additional CPUs + * would be supported by only requiring SSSE3 and CLMUL instead of SSE4.1 + CLMUL + */ + crc = Sse41.Extract(xmm_crc3, 2); + + return ~crc; + } + } +} \ No newline at end of file diff --git a/Aaru6.Checksums/CRC32Context.cs b/Aaru6.Checksums/CRC32Context.cs new file mode 100644 index 0000000..13667ba --- /dev/null +++ b/Aaru6.Checksums/CRC32Context.cs @@ -0,0 +1,549 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : CRC32Context.cs +// Author(s) : Natalia Portillo +// +// Component : Checksums. +// +// --[ Description ] ---------------------------------------------------------- +// +// Implements a CRC32 algorithm. +// +// --[ License ] -------------------------------------------------------------- +// +// This library 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 2.1 of the +// License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2021 Natalia Portillo +// ****************************************************************************/ + +using System; +using System.IO; +using System.Runtime.Intrinsics.X86; +using System.Text; +using Aaru.CommonTypes.Interfaces; +using Aaru.Helpers; + +namespace Aaru6.Checksums +{ + /// + /// Implements a CRC32 algorithm + public sealed class Crc32Context : IChecksum + { + const uint CRC32_ISO_POLY = 0xEDB88320; + const uint CRC32_ISO_SEED = 0xFFFFFFFF; + + internal static readonly uint[][] _isoCrc32Table = + { + new uint[] + { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }, + new uint[] + { + 0x00000000, 0x191B3141, 0x32366282, 0x2B2D53C3, 0x646CC504, 0x7D77F445, 0x565AA786, 0x4F4196C7, + 0xC8D98A08, 0xD1C2BB49, 0xFAEFE88A, 0xE3F4D9CB, 0xACB54F0C, 0xB5AE7E4D, 0x9E832D8E, 0x87981CCF, + 0x4AC21251, 0x53D92310, 0x78F470D3, 0x61EF4192, 0x2EAED755, 0x37B5E614, 0x1C98B5D7, 0x05838496, + 0x821B9859, 0x9B00A918, 0xB02DFADB, 0xA936CB9A, 0xE6775D5D, 0xFF6C6C1C, 0xD4413FDF, 0xCD5A0E9E, + 0x958424A2, 0x8C9F15E3, 0xA7B24620, 0xBEA97761, 0xF1E8E1A6, 0xE8F3D0E7, 0xC3DE8324, 0xDAC5B265, + 0x5D5DAEAA, 0x44469FEB, 0x6F6BCC28, 0x7670FD69, 0x39316BAE, 0x202A5AEF, 0x0B07092C, 0x121C386D, + 0xDF4636F3, 0xC65D07B2, 0xED705471, 0xF46B6530, 0xBB2AF3F7, 0xA231C2B6, 0x891C9175, 0x9007A034, + 0x179FBCFB, 0x0E848DBA, 0x25A9DE79, 0x3CB2EF38, 0x73F379FF, 0x6AE848BE, 0x41C51B7D, 0x58DE2A3C, + 0xF0794F05, 0xE9627E44, 0xC24F2D87, 0xDB541CC6, 0x94158A01, 0x8D0EBB40, 0xA623E883, 0xBF38D9C2, + 0x38A0C50D, 0x21BBF44C, 0x0A96A78F, 0x138D96CE, 0x5CCC0009, 0x45D73148, 0x6EFA628B, 0x77E153CA, + 0xBABB5D54, 0xA3A06C15, 0x888D3FD6, 0x91960E97, 0xDED79850, 0xC7CCA911, 0xECE1FAD2, 0xF5FACB93, + 0x7262D75C, 0x6B79E61D, 0x4054B5DE, 0x594F849F, 0x160E1258, 0x0F152319, 0x243870DA, 0x3D23419B, + 0x65FD6BA7, 0x7CE65AE6, 0x57CB0925, 0x4ED03864, 0x0191AEA3, 0x188A9FE2, 0x33A7CC21, 0x2ABCFD60, + 0xAD24E1AF, 0xB43FD0EE, 0x9F12832D, 0x8609B26C, 0xC94824AB, 0xD05315EA, 0xFB7E4629, 0xE2657768, + 0x2F3F79F6, 0x362448B7, 0x1D091B74, 0x04122A35, 0x4B53BCF2, 0x52488DB3, 0x7965DE70, 0x607EEF31, + 0xE7E6F3FE, 0xFEFDC2BF, 0xD5D0917C, 0xCCCBA03D, 0x838A36FA, 0x9A9107BB, 0xB1BC5478, 0xA8A76539, + 0x3B83984B, 0x2298A90A, 0x09B5FAC9, 0x10AECB88, 0x5FEF5D4F, 0x46F46C0E, 0x6DD93FCD, 0x74C20E8C, + 0xF35A1243, 0xEA412302, 0xC16C70C1, 0xD8774180, 0x9736D747, 0x8E2DE606, 0xA500B5C5, 0xBC1B8484, + 0x71418A1A, 0x685ABB5B, 0x4377E898, 0x5A6CD9D9, 0x152D4F1E, 0x0C367E5F, 0x271B2D9C, 0x3E001CDD, + 0xB9980012, 0xA0833153, 0x8BAE6290, 0x92B553D1, 0xDDF4C516, 0xC4EFF457, 0xEFC2A794, 0xF6D996D5, + 0xAE07BCE9, 0xB71C8DA8, 0x9C31DE6B, 0x852AEF2A, 0xCA6B79ED, 0xD37048AC, 0xF85D1B6F, 0xE1462A2E, + 0x66DE36E1, 0x7FC507A0, 0x54E85463, 0x4DF36522, 0x02B2F3E5, 0x1BA9C2A4, 0x30849167, 0x299FA026, + 0xE4C5AEB8, 0xFDDE9FF9, 0xD6F3CC3A, 0xCFE8FD7B, 0x80A96BBC, 0x99B25AFD, 0xB29F093E, 0xAB84387F, + 0x2C1C24B0, 0x350715F1, 0x1E2A4632, 0x07317773, 0x4870E1B4, 0x516BD0F5, 0x7A468336, 0x635DB277, + 0xCBFAD74E, 0xD2E1E60F, 0xF9CCB5CC, 0xE0D7848D, 0xAF96124A, 0xB68D230B, 0x9DA070C8, 0x84BB4189, + 0x03235D46, 0x1A386C07, 0x31153FC4, 0x280E0E85, 0x674F9842, 0x7E54A903, 0x5579FAC0, 0x4C62CB81, + 0x8138C51F, 0x9823F45E, 0xB30EA79D, 0xAA1596DC, 0xE554001B, 0xFC4F315A, 0xD7626299, 0xCE7953D8, + 0x49E14F17, 0x50FA7E56, 0x7BD72D95, 0x62CC1CD4, 0x2D8D8A13, 0x3496BB52, 0x1FBBE891, 0x06A0D9D0, + 0x5E7EF3EC, 0x4765C2AD, 0x6C48916E, 0x7553A02F, 0x3A1236E8, 0x230907A9, 0x0824546A, 0x113F652B, + 0x96A779E4, 0x8FBC48A5, 0xA4911B66, 0xBD8A2A27, 0xF2CBBCE0, 0xEBD08DA1, 0xC0FDDE62, 0xD9E6EF23, + 0x14BCE1BD, 0x0DA7D0FC, 0x268A833F, 0x3F91B27E, 0x70D024B9, 0x69CB15F8, 0x42E6463B, 0x5BFD777A, + 0xDC656BB5, 0xC57E5AF4, 0xEE530937, 0xF7483876, 0xB809AEB1, 0xA1129FF0, 0x8A3FCC33, 0x9324FD72 + }, + new uint[] + { + 0x00000000, 0x01C26A37, 0x0384D46E, 0x0246BE59, 0x0709A8DC, 0x06CBC2EB, 0x048D7CB2, 0x054F1685, + 0x0E1351B8, 0x0FD13B8F, 0x0D9785D6, 0x0C55EFE1, 0x091AF964, 0x08D89353, 0x0A9E2D0A, 0x0B5C473D, + 0x1C26A370, 0x1DE4C947, 0x1FA2771E, 0x1E601D29, 0x1B2F0BAC, 0x1AED619B, 0x18ABDFC2, 0x1969B5F5, + 0x1235F2C8, 0x13F798FF, 0x11B126A6, 0x10734C91, 0x153C5A14, 0x14FE3023, 0x16B88E7A, 0x177AE44D, + 0x384D46E0, 0x398F2CD7, 0x3BC9928E, 0x3A0BF8B9, 0x3F44EE3C, 0x3E86840B, 0x3CC03A52, 0x3D025065, + 0x365E1758, 0x379C7D6F, 0x35DAC336, 0x3418A901, 0x3157BF84, 0x3095D5B3, 0x32D36BEA, 0x331101DD, + 0x246BE590, 0x25A98FA7, 0x27EF31FE, 0x262D5BC9, 0x23624D4C, 0x22A0277B, 0x20E69922, 0x2124F315, + 0x2A78B428, 0x2BBADE1F, 0x29FC6046, 0x283E0A71, 0x2D711CF4, 0x2CB376C3, 0x2EF5C89A, 0x2F37A2AD, + 0x709A8DC0, 0x7158E7F7, 0x731E59AE, 0x72DC3399, 0x7793251C, 0x76514F2B, 0x7417F172, 0x75D59B45, + 0x7E89DC78, 0x7F4BB64F, 0x7D0D0816, 0x7CCF6221, 0x798074A4, 0x78421E93, 0x7A04A0CA, 0x7BC6CAFD, + 0x6CBC2EB0, 0x6D7E4487, 0x6F38FADE, 0x6EFA90E9, 0x6BB5866C, 0x6A77EC5B, 0x68315202, 0x69F33835, + 0x62AF7F08, 0x636D153F, 0x612BAB66, 0x60E9C151, 0x65A6D7D4, 0x6464BDE3, 0x662203BA, 0x67E0698D, + 0x48D7CB20, 0x4915A117, 0x4B531F4E, 0x4A917579, 0x4FDE63FC, 0x4E1C09CB, 0x4C5AB792, 0x4D98DDA5, + 0x46C49A98, 0x4706F0AF, 0x45404EF6, 0x448224C1, 0x41CD3244, 0x400F5873, 0x4249E62A, 0x438B8C1D, + 0x54F16850, 0x55330267, 0x5775BC3E, 0x56B7D609, 0x53F8C08C, 0x523AAABB, 0x507C14E2, 0x51BE7ED5, + 0x5AE239E8, 0x5B2053DF, 0x5966ED86, 0x58A487B1, 0x5DEB9134, 0x5C29FB03, 0x5E6F455A, 0x5FAD2F6D, + 0xE1351B80, 0xE0F771B7, 0xE2B1CFEE, 0xE373A5D9, 0xE63CB35C, 0xE7FED96B, 0xE5B86732, 0xE47A0D05, + 0xEF264A38, 0xEEE4200F, 0xECA29E56, 0xED60F461, 0xE82FE2E4, 0xE9ED88D3, 0xEBAB368A, 0xEA695CBD, + 0xFD13B8F0, 0xFCD1D2C7, 0xFE976C9E, 0xFF5506A9, 0xFA1A102C, 0xFBD87A1B, 0xF99EC442, 0xF85CAE75, + 0xF300E948, 0xF2C2837F, 0xF0843D26, 0xF1465711, 0xF4094194, 0xF5CB2BA3, 0xF78D95FA, 0xF64FFFCD, + 0xD9785D60, 0xD8BA3757, 0xDAFC890E, 0xDB3EE339, 0xDE71F5BC, 0xDFB39F8B, 0xDDF521D2, 0xDC374BE5, + 0xD76B0CD8, 0xD6A966EF, 0xD4EFD8B6, 0xD52DB281, 0xD062A404, 0xD1A0CE33, 0xD3E6706A, 0xD2241A5D, + 0xC55EFE10, 0xC49C9427, 0xC6DA2A7E, 0xC7184049, 0xC25756CC, 0xC3953CFB, 0xC1D382A2, 0xC011E895, + 0xCB4DAFA8, 0xCA8FC59F, 0xC8C97BC6, 0xC90B11F1, 0xCC440774, 0xCD866D43, 0xCFC0D31A, 0xCE02B92D, + 0x91AF9640, 0x906DFC77, 0x922B422E, 0x93E92819, 0x96A63E9C, 0x976454AB, 0x9522EAF2, 0x94E080C5, + 0x9FBCC7F8, 0x9E7EADCF, 0x9C381396, 0x9DFA79A1, 0x98B56F24, 0x99770513, 0x9B31BB4A, 0x9AF3D17D, + 0x8D893530, 0x8C4B5F07, 0x8E0DE15E, 0x8FCF8B69, 0x8A809DEC, 0x8B42F7DB, 0x89044982, 0x88C623B5, + 0x839A6488, 0x82580EBF, 0x801EB0E6, 0x81DCDAD1, 0x8493CC54, 0x8551A663, 0x8717183A, 0x86D5720D, + 0xA9E2D0A0, 0xA820BA97, 0xAA6604CE, 0xABA46EF9, 0xAEEB787C, 0xAF29124B, 0xAD6FAC12, 0xACADC625, + 0xA7F18118, 0xA633EB2F, 0xA4755576, 0xA5B73F41, 0xA0F829C4, 0xA13A43F3, 0xA37CFDAA, 0xA2BE979D, + 0xB5C473D0, 0xB40619E7, 0xB640A7BE, 0xB782CD89, 0xB2CDDB0C, 0xB30FB13B, 0xB1490F62, 0xB08B6555, + 0xBBD72268, 0xBA15485F, 0xB853F606, 0xB9919C31, 0xBCDE8AB4, 0xBD1CE083, 0xBF5A5EDA, 0xBE9834ED + }, + new uint[] + { + 0x00000000, 0xB8BC6765, 0xAA09C88B, 0x12B5AFEE, 0x8F629757, 0x37DEF032, 0x256B5FDC, 0x9DD738B9, + 0xC5B428EF, 0x7D084F8A, 0x6FBDE064, 0xD7018701, 0x4AD6BFB8, 0xF26AD8DD, 0xE0DF7733, 0x58631056, + 0x5019579F, 0xE8A530FA, 0xFA109F14, 0x42ACF871, 0xDF7BC0C8, 0x67C7A7AD, 0x75720843, 0xCDCE6F26, + 0x95AD7F70, 0x2D111815, 0x3FA4B7FB, 0x8718D09E, 0x1ACFE827, 0xA2738F42, 0xB0C620AC, 0x087A47C9, + 0xA032AF3E, 0x188EC85B, 0x0A3B67B5, 0xB28700D0, 0x2F503869, 0x97EC5F0C, 0x8559F0E2, 0x3DE59787, + 0x658687D1, 0xDD3AE0B4, 0xCF8F4F5A, 0x7733283F, 0xEAE41086, 0x525877E3, 0x40EDD80D, 0xF851BF68, + 0xF02BF8A1, 0x48979FC4, 0x5A22302A, 0xE29E574F, 0x7F496FF6, 0xC7F50893, 0xD540A77D, 0x6DFCC018, + 0x359FD04E, 0x8D23B72B, 0x9F9618C5, 0x272A7FA0, 0xBAFD4719, 0x0241207C, 0x10F48F92, 0xA848E8F7, + 0x9B14583D, 0x23A83F58, 0x311D90B6, 0x89A1F7D3, 0x1476CF6A, 0xACCAA80F, 0xBE7F07E1, 0x06C36084, + 0x5EA070D2, 0xE61C17B7, 0xF4A9B859, 0x4C15DF3C, 0xD1C2E785, 0x697E80E0, 0x7BCB2F0E, 0xC377486B, + 0xCB0D0FA2, 0x73B168C7, 0x6104C729, 0xD9B8A04C, 0x446F98F5, 0xFCD3FF90, 0xEE66507E, 0x56DA371B, + 0x0EB9274D, 0xB6054028, 0xA4B0EFC6, 0x1C0C88A3, 0x81DBB01A, 0x3967D77F, 0x2BD27891, 0x936E1FF4, + 0x3B26F703, 0x839A9066, 0x912F3F88, 0x299358ED, 0xB4446054, 0x0CF80731, 0x1E4DA8DF, 0xA6F1CFBA, + 0xFE92DFEC, 0x462EB889, 0x549B1767, 0xEC277002, 0x71F048BB, 0xC94C2FDE, 0xDBF98030, 0x6345E755, + 0x6B3FA09C, 0xD383C7F9, 0xC1366817, 0x798A0F72, 0xE45D37CB, 0x5CE150AE, 0x4E54FF40, 0xF6E89825, + 0xAE8B8873, 0x1637EF16, 0x048240F8, 0xBC3E279D, 0x21E91F24, 0x99557841, 0x8BE0D7AF, 0x335CB0CA, + 0xED59B63B, 0x55E5D15E, 0x47507EB0, 0xFFEC19D5, 0x623B216C, 0xDA874609, 0xC832E9E7, 0x708E8E82, + 0x28ED9ED4, 0x9051F9B1, 0x82E4565F, 0x3A58313A, 0xA78F0983, 0x1F336EE6, 0x0D86C108, 0xB53AA66D, + 0xBD40E1A4, 0x05FC86C1, 0x1749292F, 0xAFF54E4A, 0x322276F3, 0x8A9E1196, 0x982BBE78, 0x2097D91D, + 0x78F4C94B, 0xC048AE2E, 0xD2FD01C0, 0x6A4166A5, 0xF7965E1C, 0x4F2A3979, 0x5D9F9697, 0xE523F1F2, + 0x4D6B1905, 0xF5D77E60, 0xE762D18E, 0x5FDEB6EB, 0xC2098E52, 0x7AB5E937, 0x680046D9, 0xD0BC21BC, + 0x88DF31EA, 0x3063568F, 0x22D6F961, 0x9A6A9E04, 0x07BDA6BD, 0xBF01C1D8, 0xADB46E36, 0x15080953, + 0x1D724E9A, 0xA5CE29FF, 0xB77B8611, 0x0FC7E174, 0x9210D9CD, 0x2AACBEA8, 0x38191146, 0x80A57623, + 0xD8C66675, 0x607A0110, 0x72CFAEFE, 0xCA73C99B, 0x57A4F122, 0xEF189647, 0xFDAD39A9, 0x45115ECC, + 0x764DEE06, 0xCEF18963, 0xDC44268D, 0x64F841E8, 0xF92F7951, 0x41931E34, 0x5326B1DA, 0xEB9AD6BF, + 0xB3F9C6E9, 0x0B45A18C, 0x19F00E62, 0xA14C6907, 0x3C9B51BE, 0x842736DB, 0x96929935, 0x2E2EFE50, + 0x2654B999, 0x9EE8DEFC, 0x8C5D7112, 0x34E11677, 0xA9362ECE, 0x118A49AB, 0x033FE645, 0xBB838120, + 0xE3E09176, 0x5B5CF613, 0x49E959FD, 0xF1553E98, 0x6C820621, 0xD43E6144, 0xC68BCEAA, 0x7E37A9CF, + 0xD67F4138, 0x6EC3265D, 0x7C7689B3, 0xC4CAEED6, 0x591DD66F, 0xE1A1B10A, 0xF3141EE4, 0x4BA87981, + 0x13CB69D7, 0xAB770EB2, 0xB9C2A15C, 0x017EC639, 0x9CA9FE80, 0x241599E5, 0x36A0360B, 0x8E1C516E, + 0x866616A7, 0x3EDA71C2, 0x2C6FDE2C, 0x94D3B949, 0x090481F0, 0xB1B8E695, 0xA30D497B, 0x1BB12E1E, + 0x43D23E48, 0xFB6E592D, 0xE9DBF6C3, 0x516791A6, 0xCCB0A91F, 0x740CCE7A, 0x66B96194, 0xDE0506F1 + }, + new uint[] + { + 0x00000000, 0x3D6029B0, 0x7AC05360, 0x47A07AD0, 0xF580A6C0, 0xC8E08F70, 0x8F40F5A0, 0xB220DC10, + 0x30704BC1, 0x0D106271, 0x4AB018A1, 0x77D03111, 0xC5F0ED01, 0xF890C4B1, 0xBF30BE61, 0x825097D1, + 0x60E09782, 0x5D80BE32, 0x1A20C4E2, 0x2740ED52, 0x95603142, 0xA80018F2, 0xEFA06222, 0xD2C04B92, + 0x5090DC43, 0x6DF0F5F3, 0x2A508F23, 0x1730A693, 0xA5107A83, 0x98705333, 0xDFD029E3, 0xE2B00053, + 0xC1C12F04, 0xFCA106B4, 0xBB017C64, 0x866155D4, 0x344189C4, 0x0921A074, 0x4E81DAA4, 0x73E1F314, + 0xF1B164C5, 0xCCD14D75, 0x8B7137A5, 0xB6111E15, 0x0431C205, 0x3951EBB5, 0x7EF19165, 0x4391B8D5, + 0xA121B886, 0x9C419136, 0xDBE1EBE6, 0xE681C256, 0x54A11E46, 0x69C137F6, 0x2E614D26, 0x13016496, + 0x9151F347, 0xAC31DAF7, 0xEB91A027, 0xD6F18997, 0x64D15587, 0x59B17C37, 0x1E1106E7, 0x23712F57, + 0x58F35849, 0x659371F9, 0x22330B29, 0x1F532299, 0xAD73FE89, 0x9013D739, 0xD7B3ADE9, 0xEAD38459, + 0x68831388, 0x55E33A38, 0x124340E8, 0x2F236958, 0x9D03B548, 0xA0639CF8, 0xE7C3E628, 0xDAA3CF98, + 0x3813CFCB, 0x0573E67B, 0x42D39CAB, 0x7FB3B51B, 0xCD93690B, 0xF0F340BB, 0xB7533A6B, 0x8A3313DB, + 0x0863840A, 0x3503ADBA, 0x72A3D76A, 0x4FC3FEDA, 0xFDE322CA, 0xC0830B7A, 0x872371AA, 0xBA43581A, + 0x9932774D, 0xA4525EFD, 0xE3F2242D, 0xDE920D9D, 0x6CB2D18D, 0x51D2F83D, 0x167282ED, 0x2B12AB5D, + 0xA9423C8C, 0x9422153C, 0xD3826FEC, 0xEEE2465C, 0x5CC29A4C, 0x61A2B3FC, 0x2602C92C, 0x1B62E09C, + 0xF9D2E0CF, 0xC4B2C97F, 0x8312B3AF, 0xBE729A1F, 0x0C52460F, 0x31326FBF, 0x7692156F, 0x4BF23CDF, + 0xC9A2AB0E, 0xF4C282BE, 0xB362F86E, 0x8E02D1DE, 0x3C220DCE, 0x0142247E, 0x46E25EAE, 0x7B82771E, + 0xB1E6B092, 0x8C869922, 0xCB26E3F2, 0xF646CA42, 0x44661652, 0x79063FE2, 0x3EA64532, 0x03C66C82, + 0x8196FB53, 0xBCF6D2E3, 0xFB56A833, 0xC6368183, 0x74165D93, 0x49767423, 0x0ED60EF3, 0x33B62743, + 0xD1062710, 0xEC660EA0, 0xABC67470, 0x96A65DC0, 0x248681D0, 0x19E6A860, 0x5E46D2B0, 0x6326FB00, + 0xE1766CD1, 0xDC164561, 0x9BB63FB1, 0xA6D61601, 0x14F6CA11, 0x2996E3A1, 0x6E369971, 0x5356B0C1, + 0x70279F96, 0x4D47B626, 0x0AE7CCF6, 0x3787E546, 0x85A73956, 0xB8C710E6, 0xFF676A36, 0xC2074386, + 0x4057D457, 0x7D37FDE7, 0x3A978737, 0x07F7AE87, 0xB5D77297, 0x88B75B27, 0xCF1721F7, 0xF2770847, + 0x10C70814, 0x2DA721A4, 0x6A075B74, 0x576772C4, 0xE547AED4, 0xD8278764, 0x9F87FDB4, 0xA2E7D404, + 0x20B743D5, 0x1DD76A65, 0x5A7710B5, 0x67173905, 0xD537E515, 0xE857CCA5, 0xAFF7B675, 0x92979FC5, + 0xE915E8DB, 0xD475C16B, 0x93D5BBBB, 0xAEB5920B, 0x1C954E1B, 0x21F567AB, 0x66551D7B, 0x5B3534CB, + 0xD965A31A, 0xE4058AAA, 0xA3A5F07A, 0x9EC5D9CA, 0x2CE505DA, 0x11852C6A, 0x562556BA, 0x6B457F0A, + 0x89F57F59, 0xB49556E9, 0xF3352C39, 0xCE550589, 0x7C75D999, 0x4115F029, 0x06B58AF9, 0x3BD5A349, + 0xB9853498, 0x84E51D28, 0xC34567F8, 0xFE254E48, 0x4C059258, 0x7165BBE8, 0x36C5C138, 0x0BA5E888, + 0x28D4C7DF, 0x15B4EE6F, 0x521494BF, 0x6F74BD0F, 0xDD54611F, 0xE03448AF, 0xA794327F, 0x9AF41BCF, + 0x18A48C1E, 0x25C4A5AE, 0x6264DF7E, 0x5F04F6CE, 0xED242ADE, 0xD044036E, 0x97E479BE, 0xAA84500E, + 0x4834505D, 0x755479ED, 0x32F4033D, 0x0F942A8D, 0xBDB4F69D, 0x80D4DF2D, 0xC774A5FD, 0xFA148C4D, + 0x78441B9C, 0x4524322C, 0x028448FC, 0x3FE4614C, 0x8DC4BD5C, 0xB0A494EC, 0xF704EE3C, 0xCA64C78C + }, + new uint[] + { + 0x00000000, 0xCB5CD3A5, 0x4DC8A10B, 0x869472AE, 0x9B914216, 0x50CD91B3, 0xD659E31D, 0x1D0530B8, + 0xEC53826D, 0x270F51C8, 0xA19B2366, 0x6AC7F0C3, 0x77C2C07B, 0xBC9E13DE, 0x3A0A6170, 0xF156B2D5, + 0x03D6029B, 0xC88AD13E, 0x4E1EA390, 0x85427035, 0x9847408D, 0x531B9328, 0xD58FE186, 0x1ED33223, + 0xEF8580F6, 0x24D95353, 0xA24D21FD, 0x6911F258, 0x7414C2E0, 0xBF481145, 0x39DC63EB, 0xF280B04E, + 0x07AC0536, 0xCCF0D693, 0x4A64A43D, 0x81387798, 0x9C3D4720, 0x57619485, 0xD1F5E62B, 0x1AA9358E, + 0xEBFF875B, 0x20A354FE, 0xA6372650, 0x6D6BF5F5, 0x706EC54D, 0xBB3216E8, 0x3DA66446, 0xF6FAB7E3, + 0x047A07AD, 0xCF26D408, 0x49B2A6A6, 0x82EE7503, 0x9FEB45BB, 0x54B7961E, 0xD223E4B0, 0x197F3715, + 0xE82985C0, 0x23755665, 0xA5E124CB, 0x6EBDF76E, 0x73B8C7D6, 0xB8E41473, 0x3E7066DD, 0xF52CB578, + 0x0F580A6C, 0xC404D9C9, 0x4290AB67, 0x89CC78C2, 0x94C9487A, 0x5F959BDF, 0xD901E971, 0x125D3AD4, + 0xE30B8801, 0x28575BA4, 0xAEC3290A, 0x659FFAAF, 0x789ACA17, 0xB3C619B2, 0x35526B1C, 0xFE0EB8B9, + 0x0C8E08F7, 0xC7D2DB52, 0x4146A9FC, 0x8A1A7A59, 0x971F4AE1, 0x5C439944, 0xDAD7EBEA, 0x118B384F, + 0xE0DD8A9A, 0x2B81593F, 0xAD152B91, 0x6649F834, 0x7B4CC88C, 0xB0101B29, 0x36846987, 0xFDD8BA22, + 0x08F40F5A, 0xC3A8DCFF, 0x453CAE51, 0x8E607DF4, 0x93654D4C, 0x58399EE9, 0xDEADEC47, 0x15F13FE2, + 0xE4A78D37, 0x2FFB5E92, 0xA96F2C3C, 0x6233FF99, 0x7F36CF21, 0xB46A1C84, 0x32FE6E2A, 0xF9A2BD8F, + 0x0B220DC1, 0xC07EDE64, 0x46EAACCA, 0x8DB67F6F, 0x90B34FD7, 0x5BEF9C72, 0xDD7BEEDC, 0x16273D79, + 0xE7718FAC, 0x2C2D5C09, 0xAAB92EA7, 0x61E5FD02, 0x7CE0CDBA, 0xB7BC1E1F, 0x31286CB1, 0xFA74BF14, + 0x1EB014D8, 0xD5ECC77D, 0x5378B5D3, 0x98246676, 0x852156CE, 0x4E7D856B, 0xC8E9F7C5, 0x03B52460, + 0xF2E396B5, 0x39BF4510, 0xBF2B37BE, 0x7477E41B, 0x6972D4A3, 0xA22E0706, 0x24BA75A8, 0xEFE6A60D, + 0x1D661643, 0xD63AC5E6, 0x50AEB748, 0x9BF264ED, 0x86F75455, 0x4DAB87F0, 0xCB3FF55E, 0x006326FB, + 0xF135942E, 0x3A69478B, 0xBCFD3525, 0x77A1E680, 0x6AA4D638, 0xA1F8059D, 0x276C7733, 0xEC30A496, + 0x191C11EE, 0xD240C24B, 0x54D4B0E5, 0x9F886340, 0x828D53F8, 0x49D1805D, 0xCF45F2F3, 0x04192156, + 0xF54F9383, 0x3E134026, 0xB8873288, 0x73DBE12D, 0x6EDED195, 0xA5820230, 0x2316709E, 0xE84AA33B, + 0x1ACA1375, 0xD196C0D0, 0x5702B27E, 0x9C5E61DB, 0x815B5163, 0x4A0782C6, 0xCC93F068, 0x07CF23CD, + 0xF6999118, 0x3DC542BD, 0xBB513013, 0x700DE3B6, 0x6D08D30E, 0xA65400AB, 0x20C07205, 0xEB9CA1A0, + 0x11E81EB4, 0xDAB4CD11, 0x5C20BFBF, 0x977C6C1A, 0x8A795CA2, 0x41258F07, 0xC7B1FDA9, 0x0CED2E0C, + 0xFDBB9CD9, 0x36E74F7C, 0xB0733DD2, 0x7B2FEE77, 0x662ADECF, 0xAD760D6A, 0x2BE27FC4, 0xE0BEAC61, + 0x123E1C2F, 0xD962CF8A, 0x5FF6BD24, 0x94AA6E81, 0x89AF5E39, 0x42F38D9C, 0xC467FF32, 0x0F3B2C97, + 0xFE6D9E42, 0x35314DE7, 0xB3A53F49, 0x78F9ECEC, 0x65FCDC54, 0xAEA00FF1, 0x28347D5F, 0xE368AEFA, + 0x16441B82, 0xDD18C827, 0x5B8CBA89, 0x90D0692C, 0x8DD55994, 0x46898A31, 0xC01DF89F, 0x0B412B3A, + 0xFA1799EF, 0x314B4A4A, 0xB7DF38E4, 0x7C83EB41, 0x6186DBF9, 0xAADA085C, 0x2C4E7AF2, 0xE712A957, + 0x15921919, 0xDECECABC, 0x585AB812, 0x93066BB7, 0x8E035B0F, 0x455F88AA, 0xC3CBFA04, 0x089729A1, + 0xF9C19B74, 0x329D48D1, 0xB4093A7F, 0x7F55E9DA, 0x6250D962, 0xA90C0AC7, 0x2F987869, 0xE4C4ABCC + }, + new uint[] + { + 0x00000000, 0xA6770BB4, 0x979F1129, 0x31E81A9D, 0xF44F2413, 0x52382FA7, 0x63D0353A, 0xC5A73E8E, + 0x33EF4E67, 0x959845D3, 0xA4705F4E, 0x020754FA, 0xC7A06A74, 0x61D761C0, 0x503F7B5D, 0xF64870E9, + 0x67DE9CCE, 0xC1A9977A, 0xF0418DE7, 0x56368653, 0x9391B8DD, 0x35E6B369, 0x040EA9F4, 0xA279A240, + 0x5431D2A9, 0xF246D91D, 0xC3AEC380, 0x65D9C834, 0xA07EF6BA, 0x0609FD0E, 0x37E1E793, 0x9196EC27, + 0xCFBD399C, 0x69CA3228, 0x582228B5, 0xFE552301, 0x3BF21D8F, 0x9D85163B, 0xAC6D0CA6, 0x0A1A0712, + 0xFC5277FB, 0x5A257C4F, 0x6BCD66D2, 0xCDBA6D66, 0x081D53E8, 0xAE6A585C, 0x9F8242C1, 0x39F54975, + 0xA863A552, 0x0E14AEE6, 0x3FFCB47B, 0x998BBFCF, 0x5C2C8141, 0xFA5B8AF5, 0xCBB39068, 0x6DC49BDC, + 0x9B8CEB35, 0x3DFBE081, 0x0C13FA1C, 0xAA64F1A8, 0x6FC3CF26, 0xC9B4C492, 0xF85CDE0F, 0x5E2BD5BB, + 0x440B7579, 0xE27C7ECD, 0xD3946450, 0x75E36FE4, 0xB044516A, 0x16335ADE, 0x27DB4043, 0x81AC4BF7, + 0x77E43B1E, 0xD19330AA, 0xE07B2A37, 0x460C2183, 0x83AB1F0D, 0x25DC14B9, 0x14340E24, 0xB2430590, + 0x23D5E9B7, 0x85A2E203, 0xB44AF89E, 0x123DF32A, 0xD79ACDA4, 0x71EDC610, 0x4005DC8D, 0xE672D739, + 0x103AA7D0, 0xB64DAC64, 0x87A5B6F9, 0x21D2BD4D, 0xE47583C3, 0x42028877, 0x73EA92EA, 0xD59D995E, + 0x8BB64CE5, 0x2DC14751, 0x1C295DCC, 0xBA5E5678, 0x7FF968F6, 0xD98E6342, 0xE86679DF, 0x4E11726B, + 0xB8590282, 0x1E2E0936, 0x2FC613AB, 0x89B1181F, 0x4C162691, 0xEA612D25, 0xDB8937B8, 0x7DFE3C0C, + 0xEC68D02B, 0x4A1FDB9F, 0x7BF7C102, 0xDD80CAB6, 0x1827F438, 0xBE50FF8C, 0x8FB8E511, 0x29CFEEA5, + 0xDF879E4C, 0x79F095F8, 0x48188F65, 0xEE6F84D1, 0x2BC8BA5F, 0x8DBFB1EB, 0xBC57AB76, 0x1A20A0C2, + 0x8816EAF2, 0x2E61E146, 0x1F89FBDB, 0xB9FEF06F, 0x7C59CEE1, 0xDA2EC555, 0xEBC6DFC8, 0x4DB1D47C, + 0xBBF9A495, 0x1D8EAF21, 0x2C66B5BC, 0x8A11BE08, 0x4FB68086, 0xE9C18B32, 0xD82991AF, 0x7E5E9A1B, + 0xEFC8763C, 0x49BF7D88, 0x78576715, 0xDE206CA1, 0x1B87522F, 0xBDF0599B, 0x8C184306, 0x2A6F48B2, + 0xDC27385B, 0x7A5033EF, 0x4BB82972, 0xEDCF22C6, 0x28681C48, 0x8E1F17FC, 0xBFF70D61, 0x198006D5, + 0x47ABD36E, 0xE1DCD8DA, 0xD034C247, 0x7643C9F3, 0xB3E4F77D, 0x1593FCC9, 0x247BE654, 0x820CEDE0, + 0x74449D09, 0xD23396BD, 0xE3DB8C20, 0x45AC8794, 0x800BB91A, 0x267CB2AE, 0x1794A833, 0xB1E3A387, + 0x20754FA0, 0x86024414, 0xB7EA5E89, 0x119D553D, 0xD43A6BB3, 0x724D6007, 0x43A57A9A, 0xE5D2712E, + 0x139A01C7, 0xB5ED0A73, 0x840510EE, 0x22721B5A, 0xE7D525D4, 0x41A22E60, 0x704A34FD, 0xD63D3F49, + 0xCC1D9F8B, 0x6A6A943F, 0x5B828EA2, 0xFDF58516, 0x3852BB98, 0x9E25B02C, 0xAFCDAAB1, 0x09BAA105, + 0xFFF2D1EC, 0x5985DA58, 0x686DC0C5, 0xCE1ACB71, 0x0BBDF5FF, 0xADCAFE4B, 0x9C22E4D6, 0x3A55EF62, + 0xABC30345, 0x0DB408F1, 0x3C5C126C, 0x9A2B19D8, 0x5F8C2756, 0xF9FB2CE2, 0xC813367F, 0x6E643DCB, + 0x982C4D22, 0x3E5B4696, 0x0FB35C0B, 0xA9C457BF, 0x6C636931, 0xCA146285, 0xFBFC7818, 0x5D8B73AC, + 0x03A0A617, 0xA5D7ADA3, 0x943FB73E, 0x3248BC8A, 0xF7EF8204, 0x519889B0, 0x6070932D, 0xC6079899, + 0x304FE870, 0x9638E3C4, 0xA7D0F959, 0x01A7F2ED, 0xC400CC63, 0x6277C7D7, 0x539FDD4A, 0xF5E8D6FE, + 0x647E3AD9, 0xC209316D, 0xF3E12BF0, 0x55962044, 0x90311ECA, 0x3646157E, 0x07AE0FE3, 0xA1D90457, + 0x579174BE, 0xF1E67F0A, 0xC00E6597, 0x66796E23, 0xA3DE50AD, 0x05A95B19, 0x34414184, 0x92364A30 + }, + new uint[] + { + 0x00000000, 0xCCAA009E, 0x4225077D, 0x8E8F07E3, 0x844A0EFA, 0x48E00E64, 0xC66F0987, 0x0AC50919, + 0xD3E51BB5, 0x1F4F1B2B, 0x91C01CC8, 0x5D6A1C56, 0x57AF154F, 0x9B0515D1, 0x158A1232, 0xD92012AC, + 0x7CBB312B, 0xB01131B5, 0x3E9E3656, 0xF23436C8, 0xF8F13FD1, 0x345B3F4F, 0xBAD438AC, 0x767E3832, + 0xAF5E2A9E, 0x63F42A00, 0xED7B2DE3, 0x21D12D7D, 0x2B142464, 0xE7BE24FA, 0x69312319, 0xA59B2387, + 0xF9766256, 0x35DC62C8, 0xBB53652B, 0x77F965B5, 0x7D3C6CAC, 0xB1966C32, 0x3F196BD1, 0xF3B36B4F, + 0x2A9379E3, 0xE639797D, 0x68B67E9E, 0xA41C7E00, 0xAED97719, 0x62737787, 0xECFC7064, 0x205670FA, + 0x85CD537D, 0x496753E3, 0xC7E85400, 0x0B42549E, 0x01875D87, 0xCD2D5D19, 0x43A25AFA, 0x8F085A64, + 0x562848C8, 0x9A824856, 0x140D4FB5, 0xD8A74F2B, 0xD2624632, 0x1EC846AC, 0x9047414F, 0x5CED41D1, + 0x299DC2ED, 0xE537C273, 0x6BB8C590, 0xA712C50E, 0xADD7CC17, 0x617DCC89, 0xEFF2CB6A, 0x2358CBF4, + 0xFA78D958, 0x36D2D9C6, 0xB85DDE25, 0x74F7DEBB, 0x7E32D7A2, 0xB298D73C, 0x3C17D0DF, 0xF0BDD041, + 0x5526F3C6, 0x998CF358, 0x1703F4BB, 0xDBA9F425, 0xD16CFD3C, 0x1DC6FDA2, 0x9349FA41, 0x5FE3FADF, + 0x86C3E873, 0x4A69E8ED, 0xC4E6EF0E, 0x084CEF90, 0x0289E689, 0xCE23E617, 0x40ACE1F4, 0x8C06E16A, + 0xD0EBA0BB, 0x1C41A025, 0x92CEA7C6, 0x5E64A758, 0x54A1AE41, 0x980BAEDF, 0x1684A93C, 0xDA2EA9A2, + 0x030EBB0E, 0xCFA4BB90, 0x412BBC73, 0x8D81BCED, 0x8744B5F4, 0x4BEEB56A, 0xC561B289, 0x09CBB217, + 0xAC509190, 0x60FA910E, 0xEE7596ED, 0x22DF9673, 0x281A9F6A, 0xE4B09FF4, 0x6A3F9817, 0xA6959889, + 0x7FB58A25, 0xB31F8ABB, 0x3D908D58, 0xF13A8DC6, 0xFBFF84DF, 0x37558441, 0xB9DA83A2, 0x7570833C, + 0x533B85DA, 0x9F918544, 0x111E82A7, 0xDDB48239, 0xD7718B20, 0x1BDB8BBE, 0x95548C5D, 0x59FE8CC3, + 0x80DE9E6F, 0x4C749EF1, 0xC2FB9912, 0x0E51998C, 0x04949095, 0xC83E900B, 0x46B197E8, 0x8A1B9776, + 0x2F80B4F1, 0xE32AB46F, 0x6DA5B38C, 0xA10FB312, 0xABCABA0B, 0x6760BA95, 0xE9EFBD76, 0x2545BDE8, + 0xFC65AF44, 0x30CFAFDA, 0xBE40A839, 0x72EAA8A7, 0x782FA1BE, 0xB485A120, 0x3A0AA6C3, 0xF6A0A65D, + 0xAA4DE78C, 0x66E7E712, 0xE868E0F1, 0x24C2E06F, 0x2E07E976, 0xE2ADE9E8, 0x6C22EE0B, 0xA088EE95, + 0x79A8FC39, 0xB502FCA7, 0x3B8DFB44, 0xF727FBDA, 0xFDE2F2C3, 0x3148F25D, 0xBFC7F5BE, 0x736DF520, + 0xD6F6D6A7, 0x1A5CD639, 0x94D3D1DA, 0x5879D144, 0x52BCD85D, 0x9E16D8C3, 0x1099DF20, 0xDC33DFBE, + 0x0513CD12, 0xC9B9CD8C, 0x4736CA6F, 0x8B9CCAF1, 0x8159C3E8, 0x4DF3C376, 0xC37CC495, 0x0FD6C40B, + 0x7AA64737, 0xB60C47A9, 0x3883404A, 0xF42940D4, 0xFEEC49CD, 0x32464953, 0xBCC94EB0, 0x70634E2E, + 0xA9435C82, 0x65E95C1C, 0xEB665BFF, 0x27CC5B61, 0x2D095278, 0xE1A352E6, 0x6F2C5505, 0xA386559B, + 0x061D761C, 0xCAB77682, 0x44387161, 0x889271FF, 0x825778E6, 0x4EFD7878, 0xC0727F9B, 0x0CD87F05, + 0xD5F86DA9, 0x19526D37, 0x97DD6AD4, 0x5B776A4A, 0x51B26353, 0x9D1863CD, 0x1397642E, 0xDF3D64B0, + 0x83D02561, 0x4F7A25FF, 0xC1F5221C, 0x0D5F2282, 0x079A2B9B, 0xCB302B05, 0x45BF2CE6, 0x89152C78, + 0x50353ED4, 0x9C9F3E4A, 0x121039A9, 0xDEBA3937, 0xD47F302E, 0x18D530B0, 0x965A3753, 0x5AF037CD, + 0xFF6B144A, 0x33C114D4, 0xBD4E1337, 0x71E413A9, 0x7B211AB0, 0xB78B1A2E, 0x39041DCD, 0xF5AE1D53, + 0x2C8E0FFF, 0xE0240F61, 0x6EAB0882, 0xA201081C, 0xA8C40105, 0x646E019B, 0xEAE10678, 0x264B06E6 + } + }; + + readonly uint _finalSeed; + readonly uint[][] _table; + uint _hashInt; + + /// Initializes the CRC32 table and seed as CRC32-ISO + public Crc32Context() + { + _hashInt = CRC32_ISO_SEED; + _finalSeed = CRC32_ISO_SEED; + + _table = _isoCrc32Table; + } + + /// Initializes the CRC32 table with a custom polynomial and seed + public Crc32Context(uint polynomial, uint seed) + { + _hashInt = seed; + _finalSeed = seed; + /* + _table = new uint[256]; + + for(int i = 0; i < 256; i++) + { + uint entry = (uint)i; + + for(int j = 0; j < 8; j++) + if((entry & 1) == 1) + entry = (entry >> 1) ^ polynomial; + else + entry >>= 1; + + _table[i] = entry; + }*/ + } + + /// + /// Updates the hash with data. + /// Data buffer. + /// Length of buffer to hash. + public void Update(byte[] data, uint len) + { + if(Pclmulqdq.IsSupported && + Sse41.IsSupported && + Ssse3.IsSupported && + Sse2.IsSupported) + { + _hashInt = ~CRC32CLMUL.crc32_clmul(data, len, ~_hashInt); + + return; + } + + // Unroll according to Intel slicing by uint8_t + // http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf + // http://sourceforge.net/projects/slicing-by-8/ + + uint crc; + int current_pos = 0; + const int unroll = 4; + const int bytes_at_once = 8 * unroll; + + crc = _hashInt; + + while(len >= bytes_at_once) + { + int unrolling; + + for(unrolling = 0; unrolling < unroll; unrolling++) + { + uint one = BitConverter.ToUInt32(data, current_pos) ^ crc; + current_pos += 4; + uint two = BitConverter.ToUInt32(data, current_pos); + current_pos += 4; + + crc = _table[0][(two >> 24) & 0xFF] ^ _table[1][(two >> 16) & 0xFF] ^ _table[2][(two >> 8) & 0xFF] ^ + _table[3][two & 0xFF] ^ _table[4][(one >> 24) & 0xFF] ^ _table[5][(one >> 16) & 0xFF] ^ + _table[6][(one >> 8) & 0xFF] ^ _table[7][one & 0xFF]; + } + + len -= bytes_at_once; + } + + while(len-- != 0) + crc = (crc >> 8) ^ _table[0][(crc & 0xFF) ^ data[current_pos++]]; + + _hashInt = crc; + } + + /// + /// Updates the hash with data. + /// Data buffer. + public void Update(byte[] data) => Update(data, (uint)data.Length); + + /// + /// Returns a byte array of the hash value. + public byte[] Final() => BigEndianBitConverter.GetBytes(_hashInt ^ _finalSeed); + + /// + /// Returns a hexadecimal representation of the hash value. + public string End() + { + var crc32Output = new StringBuilder(); + + for(int i = 0; i < BigEndianBitConverter.GetBytes(_hashInt ^ _finalSeed).Length; i++) + crc32Output.Append(BigEndianBitConverter.GetBytes(_hashInt ^ _finalSeed)[i].ToString("x2")); + + return crc32Output.ToString(); + } + + /// Gets the hash of a file + /// File path. + public static byte[] File(string filename) + { + File(filename, out byte[] hash); + + return hash; + } + + /// Gets the hash of a file in hexadecimal and as a byte array. + /// File path. + /// Byte array of the hash value. + public static string File(string filename, out byte[] hash) => + File(filename, out hash, CRC32_ISO_POLY, CRC32_ISO_SEED); + + /// Gets the hash of a file in hexadecimal and as a byte array. + /// File path. + /// Byte array of the hash value. + /// CRC polynomial + /// CRC seed + public static string File(string filename, out byte[] hash, uint polynomial, uint seed) + { + var fileStream = new FileStream(filename, FileMode.Open); + + uint localHashInt = seed; + + uint[] localTable = new uint[256]; + + for(int i = 0; i < 256; i++) + { + uint entry = (uint)i; + + for(int j = 0; j < 8; j++) + if((entry & 1) == 1) + entry = (entry >> 1) ^ polynomial; + else + entry >>= 1; + + localTable[i] = entry; + } + + for(int i = 0; i < fileStream.Length; i++) + localHashInt = (localHashInt >> 8) ^ localTable[fileStream.ReadByte() ^ (localHashInt & 0xff)]; + + localHashInt ^= seed; + hash = BigEndianBitConverter.GetBytes(localHashInt); + + var crc32Output = new StringBuilder(); + + foreach(byte h in hash) + crc32Output.Append(h.ToString("x2")); + + fileStream.Close(); + + return crc32Output.ToString(); + } + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Length of the data buffer to hash. + /// Byte array of the hash value. + public static string Data(byte[] data, uint len, out byte[] hash) => + Data(data, len, out hash, CRC32_ISO_POLY, CRC32_ISO_SEED); + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Length of the data buffer to hash. + /// Byte array of the hash value. + /// CRC polynomial + /// CRC seed + public static string Data(byte[] data, uint len, out byte[] hash, uint polynomial, uint seed) + { + uint localHashInt = seed; + + uint[] localTable = new uint[256]; + + for(int i = 0; i < 256; i++) + { + uint entry = (uint)i; + + for(int j = 0; j < 8; j++) + if((entry & 1) == 1) + entry = (entry >> 1) ^ polynomial; + else + entry >>= 1; + + localTable[i] = entry; + } + + for(int i = 0; i < len; i++) + localHashInt = (localHashInt >> 8) ^ localTable[data[i] ^ (localHashInt & 0xff)]; + + localHashInt ^= seed; + hash = BigEndianBitConverter.GetBytes(localHashInt); + + var crc32Output = new StringBuilder(); + + foreach(byte h in hash) + crc32Output.Append(h.ToString("x2")); + + return crc32Output.ToString(); + } + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Byte array of the hash value. + public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); + } +} \ No newline at end of file diff --git a/Aaru6.Checksums/CRC64CLMUL.cs b/Aaru6.Checksums/CRC64CLMUL.cs new file mode 100644 index 0000000..665a363 --- /dev/null +++ b/Aaru6.Checksums/CRC64CLMUL.cs @@ -0,0 +1,111 @@ +using System; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; + +namespace Aaru6.Checksums +{ + public class CRC64CLMUL + { + static readonly byte[] shuffleMasks = + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x8f, 0x8e, + 0x8d, 0x8c, 0x8b, 0x8a, 0x89, 0x88, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80 + }; + + static void shiftRight128(Vector128 initial, uint n, out Vector128 outLeft, + out Vector128 outRight) + { + uint maskPos = 16 - n; + + Vector128 maskA = Vector128.Create(shuffleMasks[maskPos], shuffleMasks[maskPos + 1], + shuffleMasks[maskPos + 2], shuffleMasks[maskPos + 3], + shuffleMasks[maskPos + 4], shuffleMasks[maskPos + 5], + shuffleMasks[maskPos + 6], shuffleMasks[maskPos + 7], + shuffleMasks[maskPos + 8], shuffleMasks[maskPos + 9], + shuffleMasks[maskPos + 10], shuffleMasks[maskPos + 11], + shuffleMasks[maskPos + 12], shuffleMasks[maskPos + 13], + shuffleMasks[maskPos + 14], shuffleMasks[maskPos + 15]); + + Vector128 maskB = Sse2.Xor(maskA, Sse2.CompareEqual(Vector128.Zero, Vector128.Zero)); + + outLeft = Ssse3.Shuffle(initial.AsByte(), maskB).AsUInt64(); + outRight = Ssse3.Shuffle(initial.AsByte(), maskA).AsUInt64(); + } + + static Vector128 fold(Vector128 input, Vector128 foldConstants) => + Sse2.Xor(Pclmulqdq.CarrylessMultiply(input, foldConstants, 0x00), + Pclmulqdq.CarrylessMultiply(input, foldConstants, 0x11)); + + internal static ulong crc64_clmul(ulong crc, byte[] data, uint length) + { + int bufPos = 16; + + const ulong k1 = 0xe05dd497ca393ae4; // bitReflect(expMod65(128 + 64, poly, 1)) << 1; + const ulong k2 = 0xdabe95afc7875f40; // bitReflect(expMod65(128, poly, 1)) << 1; + const ulong mu = 0x9c3e466c172963d5; // (bitReflect(div129by65(poly)) << 1) | 1; + const ulong p = 0x92d8af2baf0e1e85; // (bitReflect(poly) << 1) | 1; + + Vector128 foldConstants1 = Vector128.Create(k1, k2); + Vector128 foldConstants2 = Vector128.Create(mu, p); + + uint leadOutSize = length % 16; + Vector128 initialCrc = Vector128.Create(~crc, 0); + + Vector128 R; + length -= 16; + + // Initial CRC can simply be added to data + shiftRight128(initialCrc, 0, out Vector128 crc0, out Vector128 crc1); + + Vector128 accumulator = + Sse2.Xor(fold(Sse2.Xor(crc0, Vector128.Create(BitConverter.ToUInt64(data, 0), BitConverter.ToUInt64(data, 8))), foldConstants1), + crc1); + + while(length >= 32) + { + accumulator = + fold(Sse2.Xor(Vector128.Create(BitConverter.ToUInt64(data, bufPos), BitConverter.ToUInt64(data, bufPos + 8)), accumulator), + foldConstants1); + + length -= 16; + bufPos += 16; + } + + Vector128 P; + + if(length == 16) + { + P = Sse2.Xor(accumulator, + Vector128.Create(BitConverter.ToUInt64(data, bufPos), + BitConverter.ToUInt64(data, bufPos + 8))); + } + else + { + Vector128 end0 = Sse2.Xor(accumulator, + Vector128.Create(BitConverter.ToUInt64(data, bufPos), + BitConverter.ToUInt64(data, bufPos + 8))); + + bufPos += 16; + + Vector128 end1 = + Vector128.Create(BitConverter.ToUInt64(data, bufPos), BitConverter.ToUInt64(data, bufPos + 8)); + + shiftRight128(end0, leadOutSize, out Vector128 A, out Vector128 B); + shiftRight128(end1, leadOutSize, out Vector128 C, out Vector128 D); + + P = Sse2.Xor(fold(A, foldConstants1), Sse2.Or(B, C)); + } + + R = Sse2.Xor(Pclmulqdq.CarrylessMultiply(P, foldConstants1, 0x10), Sse2.ShiftRightLogical128BitLane(P, 8)); + + // Final Barrett reduction + Vector128 T1 = Pclmulqdq.CarrylessMultiply(R, foldConstants2, 0x00); + + Vector128 T2 = + Sse2.Xor(Sse2.Xor(Pclmulqdq.CarrylessMultiply(T1, foldConstants2, 0x10), Sse2.ShiftLeftLogical128BitLane(T1, 8)), + R); + + return ~(((ulong)Sse41.Extract(T2.AsUInt32(), 3) << 32) | Sse41.Extract(T2.AsUInt32(), 2)); + } + } +} \ No newline at end of file diff --git a/Aaru6.Checksums/CRC64Context.cs b/Aaru6.Checksums/CRC64Context.cs new file mode 100644 index 0000000..653cf3d --- /dev/null +++ b/Aaru6.Checksums/CRC64Context.cs @@ -0,0 +1,480 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : CRC64Context.cs +// Author(s) : Natalia Portillo +// +// Component : Checksums. +// +// --[ Description ] ---------------------------------------------------------- +// +// Implements a CRC64 algorithm. +// +// --[ License ] -------------------------------------------------------------- +// +// This library 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 2.1 of the +// License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2021 Natalia Portillo +// ****************************************************************************/ + +using System; +using System.IO; +using System.Text; +using Aaru.CommonTypes.Interfaces; +using Aaru.Helpers; + +namespace Aaru6.Checksums +{ + /// + /// Implements a CRC64 algorithm + public sealed class Crc64Context : IChecksum + { + /// ECMA CRC64 polynomial + public const ulong CRC64_ECMA_POLY = 0xC96C5795D7870F42; + /// ECMA CRC64 seed + public const ulong CRC64_ECMA_SEED = 0xFFFFFFFFFFFFFFFF; + + static readonly ulong[][] _ecmaCrc64Table = + { + new ulong[] + { + 0x0000000000000000, 0xB32E4CBE03A75F6F, 0xF4843657A840A05B, 0x47AA7AE9ABE7FF34, 0x7BD0C384FF8F5E33, + 0xC8FE8F3AFC28015C, 0x8F54F5D357CFFE68, 0x3C7AB96D5468A107, 0xF7A18709FF1EBC66, 0x448FCBB7FCB9E309, + 0x0325B15E575E1C3D, 0xB00BFDE054F94352, 0x8C71448D0091E255, 0x3F5F08330336BD3A, 0x78F572DAA8D1420E, + 0xCBDB3E64AB761D61, 0x7D9BA13851336649, 0xCEB5ED8652943926, 0x891F976FF973C612, 0x3A31DBD1FAD4997D, + 0x064B62BCAEBC387A, 0xB5652E02AD1B6715, 0xF2CF54EB06FC9821, 0x41E11855055BC74E, 0x8A3A2631AE2DDA2F, + 0x39146A8FAD8A8540, 0x7EBE1066066D7A74, 0xCD905CD805CA251B, 0xF1EAE5B551A2841C, 0x42C4A90B5205DB73, + 0x056ED3E2F9E22447, 0xB6409F5CFA457B28, 0xFB374270A266CC92, 0x48190ECEA1C193FD, 0x0FB374270A266CC9, + 0xBC9D3899098133A6, 0x80E781F45DE992A1, 0x33C9CD4A5E4ECDCE, 0x7463B7A3F5A932FA, 0xC74DFB1DF60E6D95, + 0x0C96C5795D7870F4, 0xBFB889C75EDF2F9B, 0xF812F32EF538D0AF, 0x4B3CBF90F69F8FC0, 0x774606FDA2F72EC7, + 0xC4684A43A15071A8, 0x83C230AA0AB78E9C, 0x30EC7C140910D1F3, 0x86ACE348F355AADB, 0x3582AFF6F0F2F5B4, + 0x7228D51F5B150A80, 0xC10699A158B255EF, 0xFD7C20CC0CDAF4E8, 0x4E526C720F7DAB87, 0x09F8169BA49A54B3, + 0xBAD65A25A73D0BDC, 0x710D64410C4B16BD, 0xC22328FF0FEC49D2, 0x85895216A40BB6E6, 0x36A71EA8A7ACE989, + 0x0ADDA7C5F3C4488E, 0xB9F3EB7BF06317E1, 0xFE5991925B84E8D5, 0x4D77DD2C5823B7BA, 0x64B62BCAEBC387A1, + 0xD7986774E864D8CE, 0x90321D9D438327FA, 0x231C512340247895, 0x1F66E84E144CD992, 0xAC48A4F017EB86FD, + 0xEBE2DE19BC0C79C9, 0x58CC92A7BFAB26A6, 0x9317ACC314DD3BC7, 0x2039E07D177A64A8, 0x67939A94BC9D9B9C, + 0xD4BDD62ABF3AC4F3, 0xE8C76F47EB5265F4, 0x5BE923F9E8F53A9B, 0x1C4359104312C5AF, 0xAF6D15AE40B59AC0, + 0x192D8AF2BAF0E1E8, 0xAA03C64CB957BE87, 0xEDA9BCA512B041B3, 0x5E87F01B11171EDC, 0x62FD4976457FBFDB, + 0xD1D305C846D8E0B4, 0x96797F21ED3F1F80, 0x2557339FEE9840EF, 0xEE8C0DFB45EE5D8E, 0x5DA24145464902E1, + 0x1A083BACEDAEFDD5, 0xA9267712EE09A2BA, 0x955CCE7FBA6103BD, 0x267282C1B9C65CD2, 0x61D8F8281221A3E6, + 0xD2F6B4961186FC89, 0x9F8169BA49A54B33, 0x2CAF25044A02145C, 0x6B055FEDE1E5EB68, 0xD82B1353E242B407, + 0xE451AA3EB62A1500, 0x577FE680B58D4A6F, 0x10D59C691E6AB55B, 0xA3FBD0D71DCDEA34, 0x6820EEB3B6BBF755, + 0xDB0EA20DB51CA83A, 0x9CA4D8E41EFB570E, 0x2F8A945A1D5C0861, 0x13F02D374934A966, 0xA0DE61894A93F609, + 0xE7741B60E174093D, 0x545A57DEE2D35652, 0xE21AC88218962D7A, 0x5134843C1B317215, 0x169EFED5B0D68D21, + 0xA5B0B26BB371D24E, 0x99CA0B06E7197349, 0x2AE447B8E4BE2C26, 0x6D4E3D514F59D312, 0xDE6071EF4CFE8C7D, + 0x15BB4F8BE788911C, 0xA6950335E42FCE73, 0xE13F79DC4FC83147, 0x521135624C6F6E28, 0x6E6B8C0F1807CF2F, + 0xDD45C0B11BA09040, 0x9AEFBA58B0476F74, 0x29C1F6E6B3E0301B, 0xC96C5795D7870F42, 0x7A421B2BD420502D, + 0x3DE861C27FC7AF19, 0x8EC62D7C7C60F076, 0xB2BC941128085171, 0x0192D8AF2BAF0E1E, 0x4638A2468048F12A, + 0xF516EEF883EFAE45, 0x3ECDD09C2899B324, 0x8DE39C222B3EEC4B, 0xCA49E6CB80D9137F, 0x7967AA75837E4C10, + 0x451D1318D716ED17, 0xF6335FA6D4B1B278, 0xB199254F7F564D4C, 0x02B769F17CF11223, 0xB4F7F6AD86B4690B, + 0x07D9BA1385133664, 0x4073C0FA2EF4C950, 0xF35D8C442D53963F, 0xCF273529793B3738, 0x7C0979977A9C6857, + 0x3BA3037ED17B9763, 0x888D4FC0D2DCC80C, 0x435671A479AAD56D, 0xF0783D1A7A0D8A02, 0xB7D247F3D1EA7536, + 0x04FC0B4DD24D2A59, 0x3886B22086258B5E, 0x8BA8FE9E8582D431, 0xCC0284772E652B05, 0x7F2CC8C92DC2746A, + 0x325B15E575E1C3D0, 0x8175595B76469CBF, 0xC6DF23B2DDA1638B, 0x75F16F0CDE063CE4, 0x498BD6618A6E9DE3, + 0xFAA59ADF89C9C28C, 0xBD0FE036222E3DB8, 0x0E21AC88218962D7, 0xC5FA92EC8AFF7FB6, 0x76D4DE52895820D9, + 0x317EA4BB22BFDFED, 0x8250E80521188082, 0xBE2A516875702185, 0x0D041DD676D77EEA, 0x4AAE673FDD3081DE, + 0xF9802B81DE97DEB1, 0x4FC0B4DD24D2A599, 0xFCEEF8632775FAF6, 0xBB44828A8C9205C2, 0x086ACE348F355AAD, + 0x34107759DB5DFBAA, 0x873E3BE7D8FAA4C5, 0xC094410E731D5BF1, 0x73BA0DB070BA049E, 0xB86133D4DBCC19FF, + 0x0B4F7F6AD86B4690, 0x4CE50583738CB9A4, 0xFFCB493D702BE6CB, 0xC3B1F050244347CC, 0x709FBCEE27E418A3, + 0x3735C6078C03E797, 0x841B8AB98FA4B8F8, 0xADDA7C5F3C4488E3, 0x1EF430E13FE3D78C, 0x595E4A08940428B8, + 0xEA7006B697A377D7, 0xD60ABFDBC3CBD6D0, 0x6524F365C06C89BF, 0x228E898C6B8B768B, 0x91A0C532682C29E4, + 0x5A7BFB56C35A3485, 0xE955B7E8C0FD6BEA, 0xAEFFCD016B1A94DE, 0x1DD181BF68BDCBB1, 0x21AB38D23CD56AB6, + 0x9285746C3F7235D9, 0xD52F0E859495CAED, 0x6601423B97329582, 0xD041DD676D77EEAA, 0x636F91D96ED0B1C5, + 0x24C5EB30C5374EF1, 0x97EBA78EC690119E, 0xAB911EE392F8B099, 0x18BF525D915FEFF6, 0x5F1528B43AB810C2, + 0xEC3B640A391F4FAD, 0x27E05A6E926952CC, 0x94CE16D091CE0DA3, 0xD3646C393A29F297, 0x604A2087398EADF8, + 0x5C3099EA6DE60CFF, 0xEF1ED5546E415390, 0xA8B4AFBDC5A6ACA4, 0x1B9AE303C601F3CB, 0x56ED3E2F9E224471, + 0xE5C372919D851B1E, 0xA26908783662E42A, 0x114744C635C5BB45, 0x2D3DFDAB61AD1A42, 0x9E13B115620A452D, + 0xD9B9CBFCC9EDBA19, 0x6A978742CA4AE576, 0xA14CB926613CF817, 0x1262F598629BA778, 0x55C88F71C97C584C, + 0xE6E6C3CFCADB0723, 0xDA9C7AA29EB3A624, 0x69B2361C9D14F94B, 0x2E184CF536F3067F, 0x9D36004B35545910, + 0x2B769F17CF112238, 0x9858D3A9CCB67D57, 0xDFF2A94067518263, 0x6CDCE5FE64F6DD0C, 0x50A65C93309E7C0B, + 0xE388102D33392364, 0xA4226AC498DEDC50, 0x170C267A9B79833F, 0xDCD7181E300F9E5E, 0x6FF954A033A8C131, + 0x28532E49984F3E05, 0x9B7D62F79BE8616A, 0xA707DB9ACF80C06D, 0x14299724CC279F02, 0x5383EDCD67C06036, + 0xE0ADA17364673F59 + }, + new ulong[] + { + 0x0000000000000000, 0x54E979925CD0F10D, 0xA9D2F324B9A1E21A, 0xFD3B8AB6E5711317, 0xC17D4962DC4DDAB1, + 0x959430F0809D2BBC, 0x68AFBA4665EC38AB, 0x3C46C3D4393CC9A6, 0x10223DEE1795ABE7, 0x44CB447C4B455AEA, + 0xB9F0CECAAE3449FD, 0xED19B758F2E4B8F0, 0xD15F748CCBD87156, 0x85B60D1E9708805B, 0x788D87A87279934C, + 0x2C64FE3A2EA96241, 0x20447BDC2F2B57CE, 0x74AD024E73FBA6C3, 0x899688F8968AB5D4, 0xDD7FF16ACA5A44D9, + 0xE13932BEF3668D7F, 0xB5D04B2CAFB67C72, 0x48EBC19A4AC76F65, 0x1C02B80816179E68, 0x3066463238BEFC29, + 0x648F3FA0646E0D24, 0x99B4B516811F1E33, 0xCD5DCC84DDCFEF3E, 0xF11B0F50E4F32698, 0xA5F276C2B823D795, + 0x58C9FC745D52C482, 0x0C2085E60182358F, 0x4088F7B85E56AF9C, 0x14618E2A02865E91, 0xE95A049CE7F74D86, + 0xBDB37D0EBB27BC8B, 0x81F5BEDA821B752D, 0xD51CC748DECB8420, 0x28274DFE3BBA9737, 0x7CCE346C676A663A, + 0x50AACA5649C3047B, 0x0443B3C41513F576, 0xF9783972F062E661, 0xAD9140E0ACB2176C, 0x91D78334958EDECA, + 0xC53EFAA6C95E2FC7, 0x380570102C2F3CD0, 0x6CEC098270FFCDDD, 0x60CC8C64717DF852, 0x3425F5F62DAD095F, + 0xC91E7F40C8DC1A48, 0x9DF706D2940CEB45, 0xA1B1C506AD3022E3, 0xF558BC94F1E0D3EE, 0x086336221491C0F9, + 0x5C8A4FB0484131F4, 0x70EEB18A66E853B5, 0x2407C8183A38A2B8, 0xD93C42AEDF49B1AF, 0x8DD53B3C839940A2, + 0xB193F8E8BAA58904, 0xE57A817AE6757809, 0x18410BCC03046B1E, 0x4CA8725E5FD49A13, 0x8111EF70BCAD5F38, + 0xD5F896E2E07DAE35, 0x28C31C54050CBD22, 0x7C2A65C659DC4C2F, 0x406CA61260E08589, 0x1485DF803C307484, + 0xE9BE5536D9416793, 0xBD572CA48591969E, 0x9133D29EAB38F4DF, 0xC5DAAB0CF7E805D2, 0x38E121BA129916C5, + 0x6C0858284E49E7C8, 0x504E9BFC77752E6E, 0x04A7E26E2BA5DF63, 0xF99C68D8CED4CC74, 0xAD75114A92043D79, + 0xA15594AC938608F6, 0xF5BCED3ECF56F9FB, 0x088767882A27EAEC, 0x5C6E1E1A76F71BE1, 0x6028DDCE4FCBD247, + 0x34C1A45C131B234A, 0xC9FA2EEAF66A305D, 0x9D135778AABAC150, 0xB177A9428413A311, 0xE59ED0D0D8C3521C, + 0x18A55A663DB2410B, 0x4C4C23F46162B006, 0x700AE020585E79A0, 0x24E399B2048E88AD, 0xD9D81304E1FF9BBA, + 0x8D316A96BD2F6AB7, 0xC19918C8E2FBF0A4, 0x9570615ABE2B01A9, 0x684BEBEC5B5A12BE, 0x3CA2927E078AE3B3, + 0x00E451AA3EB62A15, 0x540D28386266DB18, 0xA936A28E8717C80F, 0xFDDFDB1CDBC73902, 0xD1BB2526F56E5B43, + 0x85525CB4A9BEAA4E, 0x7869D6024CCFB959, 0x2C80AF90101F4854, 0x10C66C44292381F2, 0x442F15D675F370FF, + 0xB9149F60908263E8, 0xEDFDE6F2CC5292E5, 0xE1DD6314CDD0A76A, 0xB5341A8691005667, 0x480F903074714570, + 0x1CE6E9A228A1B47D, 0x20A02A76119D7DDB, 0x744953E44D4D8CD6, 0x8972D952A83C9FC1, 0xDD9BA0C0F4EC6ECC, + 0xF1FF5EFADA450C8D, 0xA51627688695FD80, 0x582DADDE63E4EE97, 0x0CC4D44C3F341F9A, 0x308217980608D63C, + 0x646B6E0A5AD82731, 0x9950E4BCBFA93426, 0xCDB99D2EE379C52B, 0x90FB71CAD654A0F5, 0xC41208588A8451F8, + 0x392982EE6FF542EF, 0x6DC0FB7C3325B3E2, 0x518638A80A197A44, 0x056F413A56C98B49, 0xF854CB8CB3B8985E, + 0xACBDB21EEF686953, 0x80D94C24C1C10B12, 0xD43035B69D11FA1F, 0x290BBF007860E908, 0x7DE2C69224B01805, + 0x41A405461D8CD1A3, 0x154D7CD4415C20AE, 0xE876F662A42D33B9, 0xBC9F8FF0F8FDC2B4, 0xB0BF0A16F97FF73B, + 0xE4567384A5AF0636, 0x196DF93240DE1521, 0x4D8480A01C0EE42C, 0x71C2437425322D8A, 0x252B3AE679E2DC87, + 0xD810B0509C93CF90, 0x8CF9C9C2C0433E9D, 0xA09D37F8EEEA5CDC, 0xF4744E6AB23AADD1, 0x094FC4DC574BBEC6, + 0x5DA6BD4E0B9B4FCB, 0x61E07E9A32A7866D, 0x350907086E777760, 0xC8328DBE8B066477, 0x9CDBF42CD7D6957A, + 0xD073867288020F69, 0x849AFFE0D4D2FE64, 0x79A1755631A3ED73, 0x2D480CC46D731C7E, 0x110ECF10544FD5D8, + 0x45E7B682089F24D5, 0xB8DC3C34EDEE37C2, 0xEC3545A6B13EC6CF, 0xC051BB9C9F97A48E, 0x94B8C20EC3475583, + 0x698348B826364694, 0x3D6A312A7AE6B799, 0x012CF2FE43DA7E3F, 0x55C58B6C1F0A8F32, 0xA8FE01DAFA7B9C25, + 0xFC177848A6AB6D28, 0xF037FDAEA72958A7, 0xA4DE843CFBF9A9AA, 0x59E50E8A1E88BABD, 0x0D0C771842584BB0, + 0x314AB4CC7B648216, 0x65A3CD5E27B4731B, 0x989847E8C2C5600C, 0xCC713E7A9E159101, 0xE015C040B0BCF340, + 0xB4FCB9D2EC6C024D, 0x49C73364091D115A, 0x1D2E4AF655CDE057, 0x216889226CF129F1, 0x7581F0B03021D8FC, + 0x88BA7A06D550CBEB, 0xDC53039489803AE6, 0x11EA9EBA6AF9FFCD, 0x4503E72836290EC0, 0xB8386D9ED3581DD7, + 0xECD1140C8F88ECDA, 0xD097D7D8B6B4257C, 0x847EAE4AEA64D471, 0x794524FC0F15C766, 0x2DAC5D6E53C5366B, + 0x01C8A3547D6C542A, 0x5521DAC621BCA527, 0xA81A5070C4CDB630, 0xFCF329E2981D473D, 0xC0B5EA36A1218E9B, + 0x945C93A4FDF17F96, 0x6967191218806C81, 0x3D8E608044509D8C, 0x31AEE56645D2A803, 0x65479CF41902590E, + 0x987C1642FC734A19, 0xCC956FD0A0A3BB14, 0xF0D3AC04999F72B2, 0xA43AD596C54F83BF, 0x59015F20203E90A8, + 0x0DE826B27CEE61A5, 0x218CD888524703E4, 0x7565A11A0E97F2E9, 0x885E2BACEBE6E1FE, 0xDCB7523EB73610F3, + 0xE0F191EA8E0AD955, 0xB418E878D2DA2858, 0x492362CE37AB3B4F, 0x1DCA1B5C6B7BCA42, 0x5162690234AF5051, + 0x058B1090687FA15C, 0xF8B09A268D0EB24B, 0xAC59E3B4D1DE4346, 0x901F2060E8E28AE0, 0xC4F659F2B4327BED, + 0x39CDD344514368FA, 0x6D24AAD60D9399F7, 0x414054EC233AFBB6, 0x15A92D7E7FEA0ABB, 0xE892A7C89A9B19AC, + 0xBC7BDE5AC64BE8A1, 0x803D1D8EFF772107, 0xD4D4641CA3A7D00A, 0x29EFEEAA46D6C31D, 0x7D0697381A063210, + 0x712612DE1B84079F, 0x25CF6B4C4754F692, 0xD8F4E1FAA225E585, 0x8C1D9868FEF51488, 0xB05B5BBCC7C9DD2E, + 0xE4B2222E9B192C23, 0x1989A8987E683F34, 0x4D60D10A22B8CE39, 0x61042F300C11AC78, 0x35ED56A250C15D75, + 0xC8D6DC14B5B04E62, 0x9C3FA586E960BF6F, 0xA0796652D05C76C9, 0xF4901FC08C8C87C4, 0x09AB957669FD94D3, + 0x5D42ECE4352D65DE + }, + new ulong[] + { + 0x0000000000000000, 0x3F0BE14A916A6DCB, 0x7E17C29522D4DB96, 0x411C23DFB3BEB65D, 0xFC2F852A45A9B72C, + 0xC3246460D4C3DAE7, 0x823847BF677D6CBA, 0xBD33A6F5F6170171, 0x6A87A57F245D70DD, 0x558C4435B5371D16, + 0x149067EA0689AB4B, 0x2B9B86A097E3C680, 0x96A8205561F4C7F1, 0xA9A3C11FF09EAA3A, 0xE8BFE2C043201C67, + 0xD7B4038AD24A71AC, 0xD50F4AFE48BAE1BA, 0xEA04ABB4D9D08C71, 0xAB18886B6A6E3A2C, 0x94136921FB0457E7, + 0x2920CFD40D135696, 0x162B2E9E9C793B5D, 0x57370D412FC78D00, 0x683CEC0BBEADE0CB, 0xBF88EF816CE79167, + 0x80830ECBFD8DFCAC, 0xC19F2D144E334AF1, 0xFE94CC5EDF59273A, 0x43A76AAB294E264B, 0x7CAC8BE1B8244B80, + 0x3DB0A83E0B9AFDDD, 0x02BB49749AF09016, 0x38C63AD73E7BDDF1, 0x07CDDB9DAF11B03A, 0x46D1F8421CAF0667, + 0x79DA19088DC56BAC, 0xC4E9BFFD7BD26ADD, 0xFBE25EB7EAB80716, 0xBAFE7D685906B14B, 0x85F59C22C86CDC80, + 0x52419FA81A26AD2C, 0x6D4A7EE28B4CC0E7, 0x2C565D3D38F276BA, 0x135DBC77A9981B71, 0xAE6E1A825F8F1A00, + 0x9165FBC8CEE577CB, 0xD079D8177D5BC196, 0xEF72395DEC31AC5D, 0xEDC9702976C13C4B, 0xD2C29163E7AB5180, + 0x93DEB2BC5415E7DD, 0xACD553F6C57F8A16, 0x11E6F50333688B67, 0x2EED1449A202E6AC, 0x6FF1379611BC50F1, + 0x50FAD6DC80D63D3A, 0x874ED556529C4C96, 0xB845341CC3F6215D, 0xF95917C370489700, 0xC652F689E122FACB, + 0x7B61507C1735FBBA, 0x446AB136865F9671, 0x057692E935E1202C, 0x3A7D73A3A48B4DE7, 0x718C75AE7CF7BBE2, + 0x4E8794E4ED9DD629, 0x0F9BB73B5E236074, 0x30905671CF490DBF, 0x8DA3F084395E0CCE, 0xB2A811CEA8346105, + 0xF3B432111B8AD758, 0xCCBFD35B8AE0BA93, 0x1B0BD0D158AACB3F, 0x2400319BC9C0A6F4, 0x651C12447A7E10A9, + 0x5A17F30EEB147D62, 0xE72455FB1D037C13, 0xD82FB4B18C6911D8, 0x9933976E3FD7A785, 0xA6387624AEBDCA4E, + 0xA4833F50344D5A58, 0x9B88DE1AA5273793, 0xDA94FDC5169981CE, 0xE59F1C8F87F3EC05, 0x58ACBA7A71E4ED74, + 0x67A75B30E08E80BF, 0x26BB78EF533036E2, 0x19B099A5C25A5B29, 0xCE049A2F10102A85, 0xF10F7B65817A474E, + 0xB01358BA32C4F113, 0x8F18B9F0A3AE9CD8, 0x322B1F0555B99DA9, 0x0D20FE4FC4D3F062, 0x4C3CDD90776D463F, + 0x73373CDAE6072BF4, 0x494A4F79428C6613, 0x7641AE33D3E60BD8, 0x375D8DEC6058BD85, 0x08566CA6F132D04E, + 0xB565CA530725D13F, 0x8A6E2B19964FBCF4, 0xCB7208C625F10AA9, 0xF479E98CB49B6762, 0x23CDEA0666D116CE, + 0x1CC60B4CF7BB7B05, 0x5DDA28934405CD58, 0x62D1C9D9D56FA093, 0xDFE26F2C2378A1E2, 0xE0E98E66B212CC29, + 0xA1F5ADB901AC7A74, 0x9EFE4CF390C617BF, 0x9C4505870A3687A9, 0xA34EE4CD9B5CEA62, 0xE252C71228E25C3F, + 0xDD592658B98831F4, 0x606A80AD4F9F3085, 0x5F6161E7DEF55D4E, 0x1E7D42386D4BEB13, 0x2176A372FC2186D8, + 0xF6C2A0F82E6BF774, 0xC9C941B2BF019ABF, 0x88D5626D0CBF2CE2, 0xB7DE83279DD54129, 0x0AED25D26BC24058, + 0x35E6C498FAA82D93, 0x74FAE74749169BCE, 0x4BF1060DD87CF605, 0xE318EB5CF9EF77C4, 0xDC130A1668851A0F, + 0x9D0F29C9DB3BAC52, 0xA204C8834A51C199, 0x1F376E76BC46C0E8, 0x203C8F3C2D2CAD23, 0x6120ACE39E921B7E, + 0x5E2B4DA90FF876B5, 0x899F4E23DDB20719, 0xB694AF694CD86AD2, 0xF7888CB6FF66DC8F, 0xC8836DFC6E0CB144, + 0x75B0CB09981BB035, 0x4ABB2A430971DDFE, 0x0BA7099CBACF6BA3, 0x34ACE8D62BA50668, 0x3617A1A2B155967E, + 0x091C40E8203FFBB5, 0x4800633793814DE8, 0x770B827D02EB2023, 0xCA382488F4FC2152, 0xF533C5C265964C99, + 0xB42FE61DD628FAC4, 0x8B2407574742970F, 0x5C9004DD9508E6A3, 0x639BE59704628B68, 0x2287C648B7DC3D35, + 0x1D8C270226B650FE, 0xA0BF81F7D0A1518F, 0x9FB460BD41CB3C44, 0xDEA84362F2758A19, 0xE1A3A228631FE7D2, + 0xDBDED18BC794AA35, 0xE4D530C156FEC7FE, 0xA5C9131EE54071A3, 0x9AC2F254742A1C68, 0x27F154A1823D1D19, + 0x18FAB5EB135770D2, 0x59E69634A0E9C68F, 0x66ED777E3183AB44, 0xB15974F4E3C9DAE8, 0x8E5295BE72A3B723, + 0xCF4EB661C11D017E, 0xF045572B50776CB5, 0x4D76F1DEA6606DC4, 0x727D1094370A000F, 0x3361334B84B4B652, + 0x0C6AD20115DEDB99, 0x0ED19B758F2E4B8F, 0x31DA7A3F1E442644, 0x70C659E0ADFA9019, 0x4FCDB8AA3C90FDD2, + 0xF2FE1E5FCA87FCA3, 0xCDF5FF155BED9168, 0x8CE9DCCAE8532735, 0xB3E23D8079394AFE, 0x64563E0AAB733B52, + 0x5B5DDF403A195699, 0x1A41FC9F89A7E0C4, 0x254A1DD518CD8D0F, 0x9879BB20EEDA8C7E, 0xA7725A6A7FB0E1B5, + 0xE66E79B5CC0E57E8, 0xD96598FF5D643A23, 0x92949EF28518CC26, 0xAD9F7FB81472A1ED, 0xEC835C67A7CC17B0, + 0xD388BD2D36A67A7B, 0x6EBB1BD8C0B17B0A, 0x51B0FA9251DB16C1, 0x10ACD94DE265A09C, 0x2FA73807730FCD57, + 0xF8133B8DA145BCFB, 0xC718DAC7302FD130, 0x8604F9188391676D, 0xB90F185212FB0AA6, 0x043CBEA7E4EC0BD7, + 0x3B375FED7586661C, 0x7A2B7C32C638D041, 0x45209D785752BD8A, 0x479BD40CCDA22D9C, 0x789035465CC84057, + 0x398C1699EF76F60A, 0x0687F7D37E1C9BC1, 0xBBB45126880B9AB0, 0x84BFB06C1961F77B, 0xC5A393B3AADF4126, + 0xFAA872F93BB52CED, 0x2D1C7173E9FF5D41, 0x121790397895308A, 0x530BB3E6CB2B86D7, 0x6C0052AC5A41EB1C, + 0xD133F459AC56EA6D, 0xEE3815133D3C87A6, 0xAF2436CC8E8231FB, 0x902FD7861FE85C30, 0xAA52A425BB6311D7, + 0x9559456F2A097C1C, 0xD44566B099B7CA41, 0xEB4E87FA08DDA78A, 0x567D210FFECAA6FB, 0x6976C0456FA0CB30, + 0x286AE39ADC1E7D6D, 0x176102D04D7410A6, 0xC0D5015A9F3E610A, 0xFFDEE0100E540CC1, 0xBEC2C3CFBDEABA9C, + 0x81C922852C80D757, 0x3CFA8470DA97D626, 0x03F1653A4BFDBBED, 0x42ED46E5F8430DB0, 0x7DE6A7AF6929607B, + 0x7F5DEEDBF3D9F06D, 0x40560F9162B39DA6, 0x014A2C4ED10D2BFB, 0x3E41CD0440674630, 0x83726BF1B6704741, + 0xBC798ABB271A2A8A, 0xFD65A96494A49CD7, 0xC26E482E05CEF11C, 0x15DA4BA4D78480B0, 0x2AD1AAEE46EEED7B, + 0x6BCD8931F5505B26, 0x54C6687B643A36ED, 0xE9F5CE8E922D379C, 0xD6FE2FC403475A57, 0x97E20C1BB0F9EC0A, + 0xA8E9ED51219381C1 + }, + new ulong[] + { + 0x0000000000000000, 0x1DEE8A5E222CA1DC, 0x3BDD14BC445943B8, 0x26339EE26675E264, 0x77BA297888B28770, + 0x6A54A326AA9E26AC, 0x4C673DC4CCEBC4C8, 0x5189B79AEEC76514, 0xEF7452F111650EE0, 0xF29AD8AF3349AF3C, + 0xD4A9464D553C4D58, 0xC947CC137710EC84, 0x98CE7B8999D78990, 0x8520F1D7BBFB284C, 0xA3136F35DD8ECA28, + 0xBEFDE56BFFA26BF4, 0x4C300AC98DC40345, 0x51DE8097AFE8A299, 0x77ED1E75C99D40FD, 0x6A03942BEBB1E121, + 0x3B8A23B105768435, 0x2664A9EF275A25E9, 0x0057370D412FC78D, 0x1DB9BD5363036651, 0xA34458389CA10DA5, + 0xBEAAD266BE8DAC79, 0x98994C84D8F84E1D, 0x8577C6DAFAD4EFC1, 0xD4FE714014138AD5, 0xC910FB1E363F2B09, + 0xEF2365FC504AC96D, 0xF2CDEFA2726668B1, 0x986015931B88068A, 0x858E9FCD39A4A756, 0xA3BD012F5FD14532, + 0xBE538B717DFDE4EE, 0xEFDA3CEB933A81FA, 0xF234B6B5B1162026, 0xD4072857D763C242, 0xC9E9A209F54F639E, + 0x771447620AED086A, 0x6AFACD3C28C1A9B6, 0x4CC953DE4EB44BD2, 0x5127D9806C98EA0E, 0x00AE6E1A825F8F1A, + 0x1D40E444A0732EC6, 0x3B737AA6C606CCA2, 0x269DF0F8E42A6D7E, 0xD4501F5A964C05CF, 0xC9BE9504B460A413, + 0xEF8D0BE6D2154677, 0xF26381B8F039E7AB, 0xA3EA36221EFE82BF, 0xBE04BC7C3CD22363, 0x9837229E5AA7C107, + 0x85D9A8C0788B60DB, 0x3B244DAB87290B2F, 0x26CAC7F5A505AAF3, 0x00F95917C3704897, 0x1D17D349E15CE94B, + 0x4C9E64D30F9B8C5F, 0x5170EE8D2DB72D83, 0x7743706F4BC2CFE7, 0x6AADFA3169EE6E3B, 0xA218840D981E1391, + 0xBFF60E53BA32B24D, 0x99C590B1DC475029, 0x842B1AEFFE6BF1F5, 0xD5A2AD7510AC94E1, 0xC84C272B3280353D, + 0xEE7FB9C954F5D759, 0xF391339776D97685, 0x4D6CD6FC897B1D71, 0x50825CA2AB57BCAD, 0x76B1C240CD225EC9, + 0x6B5F481EEF0EFF15, 0x3AD6FF8401C99A01, 0x273875DA23E53BDD, 0x010BEB384590D9B9, 0x1CE5616667BC7865, + 0xEE288EC415DA10D4, 0xF3C6049A37F6B108, 0xD5F59A785183536C, 0xC81B102673AFF2B0, 0x9992A7BC9D6897A4, + 0x847C2DE2BF443678, 0xA24FB300D931D41C, 0xBFA1395EFB1D75C0, 0x015CDC3504BF1E34, 0x1CB2566B2693BFE8, + 0x3A81C88940E65D8C, 0x276F42D762CAFC50, 0x76E6F54D8C0D9944, 0x6B087F13AE213898, 0x4D3BE1F1C854DAFC, + 0x50D56BAFEA787B20, 0x3A78919E8396151B, 0x27961BC0A1BAB4C7, 0x01A58522C7CF56A3, 0x1C4B0F7CE5E3F77F, + 0x4DC2B8E60B24926B, 0x502C32B8290833B7, 0x761FAC5A4F7DD1D3, 0x6BF126046D51700F, 0xD50CC36F92F31BFB, + 0xC8E24931B0DFBA27, 0xEED1D7D3D6AA5843, 0xF33F5D8DF486F99F, 0xA2B6EA171A419C8B, 0xBF586049386D3D57, + 0x996BFEAB5E18DF33, 0x848574F57C347EEF, 0x76489B570E52165E, 0x6BA611092C7EB782, 0x4D958FEB4A0B55E6, + 0x507B05B56827F43A, 0x01F2B22F86E0912E, 0x1C1C3871A4CC30F2, 0x3A2FA693C2B9D296, 0x27C12CCDE095734A, + 0x993CC9A61F3718BE, 0x84D243F83D1BB962, 0xA2E1DD1A5B6E5B06, 0xBF0F57447942FADA, 0xEE86E0DE97859FCE, + 0xF3686A80B5A93E12, 0xD55BF462D3DCDC76, 0xC8B57E3CF1F07DAA, 0xD6E9A7309F3239A7, 0xCB072D6EBD1E987B, + 0xED34B38CDB6B7A1F, 0xF0DA39D2F947DBC3, 0xA1538E481780BED7, 0xBCBD041635AC1F0B, 0x9A8E9AF453D9FD6F, + 0x876010AA71F55CB3, 0x399DF5C18E573747, 0x24737F9FAC7B969B, 0x0240E17DCA0E74FF, 0x1FAE6B23E822D523, + 0x4E27DCB906E5B037, 0x53C956E724C911EB, 0x75FAC80542BCF38F, 0x6814425B60905253, 0x9AD9ADF912F63AE2, + 0x873727A730DA9B3E, 0xA104B94556AF795A, 0xBCEA331B7483D886, 0xED6384819A44BD92, 0xF08D0EDFB8681C4E, + 0xD6BE903DDE1DFE2A, 0xCB501A63FC315FF6, 0x75ADFF0803933402, 0x6843755621BF95DE, 0x4E70EBB447CA77BA, + 0x539E61EA65E6D666, 0x0217D6708B21B372, 0x1FF95C2EA90D12AE, 0x39CAC2CCCF78F0CA, 0x24244892ED545116, + 0x4E89B2A384BA3F2D, 0x536738FDA6969EF1, 0x7554A61FC0E37C95, 0x68BA2C41E2CFDD49, 0x39339BDB0C08B85D, + 0x24DD11852E241981, 0x02EE8F674851FBE5, 0x1F0005396A7D5A39, 0xA1FDE05295DF31CD, 0xBC136A0CB7F39011, + 0x9A20F4EED1867275, 0x87CE7EB0F3AAD3A9, 0xD647C92A1D6DB6BD, 0xCBA943743F411761, 0xED9ADD965934F505, + 0xF07457C87B1854D9, 0x02B9B86A097E3C68, 0x1F5732342B529DB4, 0x3964ACD64D277FD0, 0x248A26886F0BDE0C, + 0x7503911281CCBB18, 0x68ED1B4CA3E01AC4, 0x4EDE85AEC595F8A0, 0x53300FF0E7B9597C, 0xEDCDEA9B181B3288, + 0xF02360C53A379354, 0xD610FE275C427130, 0xCBFE74797E6ED0EC, 0x9A77C3E390A9B5F8, 0x879949BDB2851424, + 0xA1AAD75FD4F0F640, 0xBC445D01F6DC579C, 0x74F1233D072C2A36, 0x691FA96325008BEA, 0x4F2C37814375698E, + 0x52C2BDDF6159C852, 0x034B0A458F9EAD46, 0x1EA5801BADB20C9A, 0x38961EF9CBC7EEFE, 0x257894A7E9EB4F22, + 0x9B8571CC164924D6, 0x866BFB923465850A, 0xA05865705210676E, 0xBDB6EF2E703CC6B2, 0xEC3F58B49EFBA3A6, + 0xF1D1D2EABCD7027A, 0xD7E24C08DAA2E01E, 0xCA0CC656F88E41C2, 0x38C129F48AE82973, 0x252FA3AAA8C488AF, + 0x031C3D48CEB16ACB, 0x1EF2B716EC9DCB17, 0x4F7B008C025AAE03, 0x52958AD220760FDF, 0x74A614304603EDBB, + 0x69489E6E642F4C67, 0xD7B57B059B8D2793, 0xCA5BF15BB9A1864F, 0xEC686FB9DFD4642B, 0xF186E5E7FDF8C5F7, + 0xA00F527D133FA0E3, 0xBDE1D8233113013F, 0x9BD246C15766E35B, 0x863CCC9F754A4287, 0xEC9136AE1CA42CBC, + 0xF17FBCF03E888D60, 0xD74C221258FD6F04, 0xCAA2A84C7AD1CED8, 0x9B2B1FD69416ABCC, 0x86C59588B63A0A10, + 0xA0F60B6AD04FE874, 0xBD188134F26349A8, 0x03E5645F0DC1225C, 0x1E0BEE012FED8380, 0x383870E3499861E4, + 0x25D6FABD6BB4C038, 0x745F4D278573A52C, 0x69B1C779A75F04F0, 0x4F82599BC12AE694, 0x526CD3C5E3064748, + 0xA0A13C6791602FF9, 0xBD4FB639B34C8E25, 0x9B7C28DBD5396C41, 0x8692A285F715CD9D, 0xD71B151F19D2A889, + 0xCAF59F413BFE0955, 0xECC601A35D8BEB31, 0xF1288BFD7FA74AED, 0x4FD56E9680052119, 0x523BE4C8A22980C5, + 0x74087A2AC45C62A1, 0x69E6F074E670C37D, 0x386F47EE08B7A669, 0x2581CDB02A9B07B5, 0x03B253524CEEE5D1, + 0x1E5CD90C6EC2440D + } + }; + + readonly ulong _finalSeed; + readonly ulong[][] _table; + ulong _hashInt; + + /// Initializes the CRC64 table and seed as CRC64-ECMA + public Crc64Context() + { + _hashInt = CRC64_ECMA_SEED; + + _table = _ecmaCrc64Table; + + _finalSeed = CRC64_ECMA_SEED; + } + + /// Initializes the CRC16 table with a custom polynomial and seed + public Crc64Context(ulong polynomial, ulong seed) + { + _hashInt = seed; + /* + _table = new ulong[256]; + + for(int i = 0; i < 256; i++) + { + ulong entry = (ulong)i; + + for(int j = 0; j < 8; j++) + if((entry & 1) == 1) + entry = (entry >> 1) ^ polynomial; + else + entry >>= 1; + + _table[i] = entry; + } + */ + _finalSeed = seed; + } + + /// + /// Updates the hash with data. + /// Data buffer. + /// Length of buffer to hash. + public void Update(byte[] data, uint len) + { + _hashInt = ~CRC64CLMUL.crc64_clmul(~_hashInt, data, len); + + return; + + // Unroll according to Intel slicing by uint8_t + // http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf + // http://sourceforge.net/projects/slicing-by-8/ + + ulong crc = _hashInt; + int dataOff = 0; + + if(len > 4) + { + long limit; + + limit = dataOff + (len & ~(uint)3); + len &= 3; + + while(dataOff < limit) + { + uint tmp = (uint)(crc ^ BitConverter.ToUInt32(data, dataOff)); + dataOff += 4; + + crc = _table[3][tmp & 0xFF] ^ _table[2][(tmp >> 8) & 0xFF] ^ (crc >> 32) ^ + _table[1][(tmp >> 16) & 0xFF] ^ _table[0][tmp >> 24]; + } + } + + while(len-- != 0) + crc = _table[0][data[dataOff++] ^ (crc & 0xFF)] ^ (crc >> 8); + + _hashInt = crc; + } + + /// + /// Updates the hash with data. + /// Data buffer. + public void Update(byte[] data) => Update(data, (uint)data.Length); + + /// + /// Returns a byte array of the hash value. + public byte[] Final() => BigEndianBitConverter.GetBytes(_hashInt ^= _finalSeed); + + /// + /// Returns a hexadecimal representation of the hash value. + public string End() + { + var crc64Output = new StringBuilder(); + + for(int i = 0; i < BigEndianBitConverter.GetBytes(_hashInt ^= _finalSeed).Length; i++) + crc64Output.Append(BigEndianBitConverter.GetBytes(_hashInt ^= _finalSeed)[i].ToString("x2")); + + return crc64Output.ToString(); + } + + /// Gets the hash of a file + /// File path. + public static byte[] File(string filename) + { + File(filename, out byte[] localHash); + + return localHash; + } + + /// Gets the hash of a file in hexadecimal and as a byte array. + /// File path. + /// Byte array of the hash value. + public static string File(string filename, out byte[] hash) => + File(filename, out hash, CRC64_ECMA_POLY, CRC64_ECMA_SEED); + + /// Gets the hash of a file in hexadecimal and as a byte array. + /// File path. + /// Byte array of the hash value. + /// CRC polynomial + /// CRC seed + public static string File(string filename, out byte[] hash, ulong polynomial, ulong seed) + { + var fileStream = new FileStream(filename, FileMode.Open); + + ulong localHashInt = seed; + + ulong[] localTable = new ulong[256]; + + for(int i = 0; i < 256; i++) + { + ulong entry = (ulong)i; + + for(int j = 0; j < 8; j++) + if((entry & 1) == 1) + entry = (entry >> 1) ^ polynomial; + else + entry >>= 1; + + localTable[i] = entry; + } + + for(int i = 0; i < fileStream.Length; i++) + localHashInt = (localHashInt >> 8) ^ localTable[(ulong)fileStream.ReadByte() ^ (localHashInt & 0xffL)]; + + localHashInt ^= seed; + hash = BigEndianBitConverter.GetBytes(localHashInt); + + var crc64Output = new StringBuilder(); + + foreach(byte h in hash) + crc64Output.Append(h.ToString("x2")); + + fileStream.Close(); + + return crc64Output.ToString(); + } + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Length of the data buffer to hash. + /// Byte array of the hash value. + public static string Data(byte[] data, uint len, out byte[] hash) => + Data(data, len, out hash, CRC64_ECMA_POLY, CRC64_ECMA_SEED); + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Length of the data buffer to hash. + /// Byte array of the hash value. + /// CRC polynomial + /// CRC seed + public static string Data(byte[] data, uint len, out byte[] hash, ulong polynomial, ulong seed) + { + ulong localHashInt = seed; + + ulong[] localTable = new ulong[256]; + + for(int i = 0; i < 256; i++) + { + ulong entry = (ulong)i; + + for(int j = 0; j < 8; j++) + if((entry & 1) == 1) + entry = (entry >> 1) ^ polynomial; + else + entry >>= 1; + + localTable[i] = entry; + } + + for(int i = 0; i < len; i++) + localHashInt = (localHashInt >> 8) ^ localTable[data[i] ^ (localHashInt & 0xff)]; + + localHashInt ^= seed; + hash = BigEndianBitConverter.GetBytes(localHashInt); + + var crc64Output = new StringBuilder(); + + foreach(byte h in hash) + crc64Output.Append(h.ToString("x2")); + + return crc64Output.ToString(); + } + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Byte array of the hash value. + public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); + } +} \ No newline at end of file diff --git a/Aaru.Checksums/FletcherContext.cs b/Aaru6.Checksums/FletcherContext.cs similarity index 52% rename from Aaru.Checksums/FletcherContext.cs rename to Aaru6.Checksums/FletcherContext.cs index 480cca3..0cf4214 100644 --- a/Aaru.Checksums/FletcherContext.cs +++ b/Aaru6.Checksums/FletcherContext.cs @@ -37,12 +37,13 @@ using System.Text; using Aaru.CommonTypes.Interfaces; using Aaru.Helpers; -namespace Aaru.Checksums +namespace Aaru6.Checksums { /// Implements the Fletcher-32 algorithm public sealed class Fletcher32Context : IChecksum { const ushort FLETCHER_MODULE = 0xFFFF; + const uint NMAX = 5552; ushort _sum1, _sum2; /// Initializes the Fletcher-32 sums @@ -58,11 +59,153 @@ namespace Aaru.Checksums /// Length of buffer to hash. public void Update(byte[] data, uint len) { - for(int i = 0; i < len; i++) + uint sum1 = _sum1; + uint sum2 = _sum2; + uint n; + int dataOff = 0; + + /* in case user likes doing a byte at a time, keep it fast */ + if(len == 1) { - _sum1 = (ushort)((_sum1 + data[i]) % FLETCHER_MODULE); - _sum2 = (ushort)((_sum2 + _sum1) % FLETCHER_MODULE); + sum1 += data[dataOff]; + + if(sum1 >= FLETCHER_MODULE) + sum1 -= FLETCHER_MODULE; + + sum2 += sum1; + + if(sum2 >= FLETCHER_MODULE) + sum2 -= FLETCHER_MODULE; + + _sum1 = (ushort)(sum1 & 0xFFFF); + _sum2 = (ushort)(sum2 & 0xFFFF); + + return; } + + /* in case short lengths are provided, keep it somewhat fast */ + if(len < 16) + { + while(len-- > 0) + { + sum1 += data[dataOff++]; + sum2 += sum1; + } + + if(sum1 >= FLETCHER_MODULE) + sum1 -= FLETCHER_MODULE; + + sum2 %= FLETCHER_MODULE; /* only added so many FLETCHER_MODULE's */ + _sum1 = (ushort)(sum1 & 0xFFFF); + _sum2 = (ushort)(sum2 & 0xFFFF); + + return; + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while(len >= NMAX) + { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + + do + { + sum1 += data[dataOff]; + sum2 += sum1; + sum1 += data[dataOff + 1]; + sum2 += sum1; + sum1 += data[dataOff + 2]; + sum2 += sum1; + sum1 += data[dataOff + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 2 + 1]; + sum2 += sum1; + + /* 16 sums unrolled */ + dataOff += 16; + } while(--n != 0); + + sum1 %= FLETCHER_MODULE; + sum2 %= FLETCHER_MODULE; + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if(len != 0) + { + /* avoid modulos if none remaining */ + while(len >= 16) + { + len -= 16; + sum1 += data[dataOff]; + sum2 += sum1; + sum1 += data[dataOff + 1]; + sum2 += sum1; + sum1 += data[dataOff + 2]; + sum2 += sum1; + sum1 += data[dataOff + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 4 + 2 + 1]; + sum2 += sum1; + + dataOff += 16; + } + + while(len-- != 0) + { + sum1 += data[dataOff++]; + sum2 += sum1; + } + + sum1 %= FLETCHER_MODULE; + sum2 %= FLETCHER_MODULE; + } + + _sum1 = (ushort)(sum1 & 0xFFFF); + _sum2 = (ushort)(sum2 & 0xFFFF); } /// @@ -169,6 +312,7 @@ namespace Aaru.Checksums public sealed class Fletcher16Context : IChecksum { const byte FLETCHER_MODULE = 0xFF; + const byte NMAX = 22; byte _sum1, _sum2; /// Initializes the Fletcher-16 sums @@ -184,11 +328,133 @@ namespace Aaru.Checksums /// Length of buffer to hash. public void Update(byte[] data, uint len) { - for(int i = 0; i < len; i++) + uint sum1 = _sum1; + uint sum2 = _sum2; + uint n; + int dataOff = 0; + + /* in case user likes doing a byte at a time, keep it fast */ + if(len == 1) { - _sum1 = (byte)((_sum1 + data[i]) % FLETCHER_MODULE); - _sum2 = (byte)((_sum2 + _sum1) % FLETCHER_MODULE); + sum1 += data[dataOff]; + + if(sum1 >= FLETCHER_MODULE) + sum1 -= FLETCHER_MODULE; + + sum2 += sum1; + + if(sum2 >= FLETCHER_MODULE) + sum2 -= FLETCHER_MODULE; + + _sum1 = (byte)(sum1 & 0xFF); + _sum2 = (byte)(sum2 & 0xFF); + + return; } + + /* in case short lengths are provided, keep it somewhat fast */ + if(len < 11) + { + while(len-- > 0) + { + sum1 += data[dataOff++]; + sum2 += sum1; + } + + if(sum1 >= FLETCHER_MODULE) + sum1 -= FLETCHER_MODULE; + + sum2 %= FLETCHER_MODULE; /* only added so many FLETCHER_MODULE's */ + _sum1 = (byte)(sum1 & 0xFF); + _sum2 = (byte)(sum2 & 0xFF); + + return; + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while(len >= NMAX) + { + len -= NMAX; + n = NMAX / 11; /* NMAX is divisible by 16 */ + + do + { + sum1 += data[dataOff]; + sum2 += sum1; + sum1 += data[dataOff + 1]; + sum2 += sum1; + sum1 += data[dataOff + 2]; + sum2 += sum1; + sum1 += data[dataOff + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2]; + sum2 += sum1; + + /* 11 sums unrolled */ + dataOff += 11; + } while(--n != 0); + + sum1 %= FLETCHER_MODULE; + sum2 %= FLETCHER_MODULE; + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if(len != 0) + { + /* avoid modulos if none remaining */ + while(len >= 11) + { + len -= 11; + sum1 += data[dataOff]; + sum2 += sum1; + sum1 += data[dataOff + 1]; + sum2 += sum1; + sum1 += data[dataOff + 2]; + sum2 += sum1; + sum1 += data[dataOff + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2]; + sum2 += sum1; + sum1 += data[dataOff + 4 + 2 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 1]; + sum2 += sum1; + sum1 += data[dataOff + 8 + 2]; + sum2 += sum1; + + dataOff += 11; + } + + while(len-- != 0) + { + sum1 += data[dataOff++]; + sum2 += sum1; + } + + sum1 %= FLETCHER_MODULE; + sum2 %= FLETCHER_MODULE; + } + + _sum1 = (byte)(sum1 & 0xFF); + _sum2 = (byte)(sum2 & 0xFF); } /// diff --git a/Aaru6.Checksums/SpamSumContext.cs b/Aaru6.Checksums/SpamSumContext.cs new file mode 100644 index 0000000..3342615 --- /dev/null +++ b/Aaru6.Checksums/SpamSumContext.cs @@ -0,0 +1,1043 @@ +// /*************************************************************************** +// Aaru Data Preservation Suite +// ---------------------------------------------------------------------------- +// +// Filename : SpamSumContext.cs +// Author(s) : Natalia Portillo +// +// Component : Checksums. +// +// --[ Description ] ---------------------------------------------------------- +// +// Implements the SpamSum fuzzy hashing algorithm. +// +// --[ License ] -------------------------------------------------------------- +// +// This library 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 2.1 of the +// License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2021 Natalia Portillo +// ****************************************************************************/ + +// Based on ssdeep +// Copyright (C) 2002 Andrew Tridgell +// Copyright (C) 2006 ManTech International Corporation +// Copyright (C) 2013 Helmut Grohne +// +// Earlier versions of this code were named fuzzy.c and can be found at: +// http://www.samba.org/ftp/unpacked/junkcode/spamsum/ +// http://ssdeep.sf.net/ + +using System; +using System.Runtime.CompilerServices; +using System.Text; +using Aaru.CommonTypes.Interfaces; + +namespace Aaru6.Checksums +{ + /// + /// Implements the SpamSum fuzzy hashing algorithm. + public sealed class SpamSumContext : IChecksum + { + const uint ROLLING_WINDOW = 7; + const uint MIN_BLOCKSIZE = 3; + const uint HASH_INIT = 0x27; + const uint NUM_BLOCKHASHES = 31; + const uint SPAMSUM_LENGTH = 64; + const uint FUZZY_MAX_RESULT = (2 * SPAMSUM_LENGTH) + 20; + + // Precomputed patrial FNV hash table + static readonly byte[][] sum_table = + { + new byte[] + { + // 0x00 + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, + 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f + }, + new byte[] + { + // 0x01 + 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x03, + 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x33, 0x32, + 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x23, 0x22, 0x21, + 0x20, 0x27, 0x26, 0x25, 0x24, 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c + }, + new byte[] + { + // 0x02 + 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x36, + 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x06, 0x07, + 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x16, 0x17, 0x14, + 0x15, 0x12, 0x13, 0x10, 0x11, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19 + }, + new byte[] + { + // 0x03 + 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x29, + 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x19, 0x18, + 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x09, 0x08, 0x0b, + 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06 + }, + new byte[] + { + // 0x04 + 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x1c, + 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x2c, 0x2d, + 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x3c, 0x3d, 0x3e, + 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33 + }, + new byte[] + { + // 0x05 + 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, + 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x3f, 0x3e, + 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2f, 0x2e, 0x2d, + 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20 + }, + new byte[] + { + // 0x06 + 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x22, + 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x12, 0x13, + 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x02, 0x03, 0x00, + 0x01, 0x06, 0x07, 0x04, 0x05, 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d + }, + new byte[] + { + // 0x07 + 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x15, + 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x25, 0x24, + 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x35, 0x34, 0x37, + 0x36, 0x31, 0x30, 0x33, 0x32, 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a + }, + new byte[] + { + // 0x08 + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x38, 0x39, + 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x28, 0x29, 0x2a, + 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27 + }, + new byte[] + { + // 0x09 + 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x3b, + 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x0b, 0x0a, + 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x1b, 0x1a, 0x19, + 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14 + }, + new byte[] + { + // 0x0a + 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x2e, + 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x1e, 0x1f, + 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x0e, 0x0f, 0x0c, + 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01 + }, + new byte[] + { + // 0x0b + 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x01, + 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x31, 0x30, + 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x21, 0x20, 0x23, + 0x22, 0x25, 0x24, 0x27, 0x26, 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e + }, + new byte[] + { + // 0x0c + 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x34, + 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x05, + 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x14, 0x15, 0x16, + 0x17, 0x10, 0x11, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b + }, + new byte[] + { + // 0x0d + 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x27, + 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x17, 0x16, + 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x07, 0x06, 0x05, + 0x04, 0x03, 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08 + }, + new byte[] + { + // 0x0e + 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x1a, + 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x2a, 0x2b, + 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x3a, 0x3b, 0x38, + 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35 + }, + new byte[] + { + // 0x0f + 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x0d, + 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x3d, 0x3c, + 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x2d, 0x2c, 0x2f, + 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22 + }, + new byte[] + { + // 0x10 + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x10, 0x11, + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x00, 0x01, 0x02, + 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f + }, + new byte[] + { + // 0x11 + 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x13, + 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x23, 0x22, + 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x33, 0x32, 0x31, + 0x30, 0x37, 0x36, 0x35, 0x34, 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c + }, + new byte[] + { + // 0x12 + 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x06, + 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x36, 0x37, + 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x26, 0x27, 0x24, + 0x25, 0x22, 0x23, 0x20, 0x21, 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29 + }, + new byte[] + { + // 0x13 + 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x39, + 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x09, 0x08, + 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x19, 0x18, 0x1b, + 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16 + }, + new byte[] + { + // 0x14 + 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x2c, + 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x1c, 0x1d, + 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x0c, 0x0d, 0x0e, + 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03 + }, + new byte[] + { + // 0x15 + 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x1f, + 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x2f, 0x2e, + 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x3f, 0x3e, 0x3d, + 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30 + }, + new byte[] + { + // 0x16 + 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x32, + 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x02, 0x03, + 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x12, 0x13, 0x10, + 0x11, 0x16, 0x17, 0x14, 0x15, 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d + }, + new byte[] + { + // 0x17 + 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x25, + 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x15, 0x14, + 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x05, 0x04, 0x07, + 0x06, 0x01, 0x00, 0x03, 0x02, 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a + }, + new byte[] + { + // 0x18 + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x28, 0x29, + 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x38, 0x39, 0x3a, + 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37 + }, + new byte[] + { + // 0x19 + 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x0b, + 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x3b, 0x3a, + 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x2b, 0x2a, 0x29, + 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24 + }, + new byte[] + { + // 0x1a + 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x3e, + 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x0e, 0x0f, + 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x1e, 0x1f, 0x1c, + 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11 + }, + new byte[] + { + // 0x1b + 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x11, + 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x21, 0x20, + 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x31, 0x30, 0x33, + 0x32, 0x35, 0x34, 0x37, 0x36, 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e + }, + new byte[] + { + // 0x1c + 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x04, + 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x34, 0x35, + 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x24, 0x25, 0x26, + 0x27, 0x20, 0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b + }, + new byte[] + { + // 0x1d + 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x37, + 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x07, 0x06, + 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x17, 0x16, 0x15, + 0x14, 0x13, 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18 + }, + new byte[] + { + // 0x1e + 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x2a, + 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x1a, 0x1b, + 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x0a, 0x0b, 0x08, + 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05 + }, + new byte[] + { + // 0x1f + 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x1d, + 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x2d, 0x2c, + 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x3d, 0x3c, 0x3f, + 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32 + }, + new byte[] + { + // 0x20 + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f + }, + new byte[] + { + // 0x21 + 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x23, + 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x13, 0x12, + 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x03, 0x02, 0x01, + 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c + }, + new byte[] + { + // 0x22 + 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x16, + 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x26, 0x27, + 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x36, 0x37, 0x34, + 0x35, 0x32, 0x33, 0x30, 0x31, 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39 + }, + new byte[] + { + // 0x23 + 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x09, + 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x39, 0x38, + 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x29, 0x28, 0x2b, + 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26 + }, + new byte[] + { + // 0x24 + 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x3c, + 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x0c, 0x0d, + 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x1c, 0x1d, 0x1e, + 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13 + }, + new byte[] + { + // 0x25 + 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2f, + 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1f, 0x1e, + 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, + 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 + }, + new byte[] + { + // 0x26 + 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x02, + 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x32, 0x33, + 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x22, 0x23, 0x20, + 0x21, 0x26, 0x27, 0x24, 0x25, 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d + }, + new byte[] + { + // 0x27 + 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x35, + 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x05, 0x04, + 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x15, 0x14, 0x17, + 0x16, 0x11, 0x10, 0x13, 0x12, 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a + }, + new byte[] + { + // 0x28 + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x18, 0x19, + 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 + }, + new byte[] + { + // 0x29 + 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x1b, + 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x2b, 0x2a, + 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x3b, 0x3a, 0x39, + 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34 + }, + new byte[] + { + // 0x2a + 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x0e, + 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x3e, 0x3f, + 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x2e, 0x2f, 0x2c, + 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21 + }, + new byte[] + { + // 0x2b + 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x21, + 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x11, 0x10, + 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x01, 0x00, 0x03, + 0x02, 0x05, 0x04, 0x07, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e + }, + new byte[] + { + // 0x2c + 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x14, + 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x24, 0x25, + 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x34, 0x35, 0x36, + 0x37, 0x30, 0x31, 0x32, 0x33, 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b + }, + new byte[] + { + // 0x2d + 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x07, + 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x37, 0x36, + 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x27, 0x26, 0x25, + 0x24, 0x23, 0x22, 0x21, 0x20, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28 + }, + new byte[] + { + // 0x2e + 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x3a, + 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x0a, 0x0b, + 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x1a, 0x1b, 0x18, + 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15 + }, + new byte[] + { + // 0x2f + 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x2d, + 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x1d, 0x1c, + 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x0d, 0x0c, 0x0f, + 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02 + }, + new byte[] + { + // 0x30 + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x00, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x20, 0x21, 0x22, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f + }, + new byte[] + { + // 0x31 + 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x2b, 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x33, + 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x03, 0x02, + 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x13, 0x12, 0x11, + 0x10, 0x17, 0x16, 0x15, 0x14, 0x1b, 0x1a, 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c + }, + new byte[] + { + // 0x32 + 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31, 0x3e, 0x3f, 0x3c, 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x26, + 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x2e, 0x2f, 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x16, 0x17, + 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x06, 0x07, 0x04, + 0x05, 0x02, 0x03, 0x00, 0x01, 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09 + }, + new byte[] + { + // 0x33 + 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x01, 0x00, 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x19, + 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e, 0x11, 0x10, 0x13, 0x12, 0x15, 0x14, 0x17, 0x16, 0x29, 0x28, + 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x39, 0x38, 0x3b, + 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x31, 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36 + }, + new byte[] + { + // 0x34 + 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x14, 0x15, 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x0c, + 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x3c, 0x3d, + 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x2c, 0x2d, 0x2e, + 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23 + }, + new byte[] + { + // 0x35 + 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x3f, + 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x0f, 0x0e, + 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x1f, 0x1e, 0x1d, + 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10 + }, + new byte[] + { + // 0x36 + 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x12, + 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x22, 0x23, + 0x20, 0x21, 0x26, 0x27, 0x24, 0x25, 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x32, 0x33, 0x30, + 0x31, 0x36, 0x37, 0x34, 0x35, 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d + }, + new byte[] + { + // 0x37 + 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12, 0x1d, 0x1c, 0x1f, 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x05, + 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x0d, 0x0c, 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x35, 0x34, + 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x3d, 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x25, 0x24, 0x27, + 0x26, 0x21, 0x20, 0x23, 0x22, 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a + }, + new byte[] + { + // 0x38 + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x38, + 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x18, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 + }, + new byte[] + { + // 0x39 + 0x3b, 0x3a, 0x39, 0x38, 0x3f, 0x3e, 0x3d, 0x3c, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x2b, + 0x2a, 0x29, 0x28, 0x2f, 0x2e, 0x2d, 0x2c, 0x23, 0x22, 0x21, 0x20, 0x27, 0x26, 0x25, 0x24, 0x1b, 0x1a, + 0x19, 0x18, 0x1f, 0x1e, 0x1d, 0x1c, 0x13, 0x12, 0x11, 0x10, 0x17, 0x16, 0x15, 0x14, 0x0b, 0x0a, 0x09, + 0x08, 0x0f, 0x0e, 0x0d, 0x0c, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04 + }, + new byte[] + { + // 0x3a + 0x0e, 0x0f, 0x0c, 0x0d, 0x0a, 0x0b, 0x08, 0x09, 0x06, 0x07, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01, 0x1e, + 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x18, 0x19, 0x16, 0x17, 0x14, 0x15, 0x12, 0x13, 0x10, 0x11, 0x2e, 0x2f, + 0x2c, 0x2d, 0x2a, 0x2b, 0x28, 0x29, 0x26, 0x27, 0x24, 0x25, 0x22, 0x23, 0x20, 0x21, 0x3e, 0x3f, 0x3c, + 0x3d, 0x3a, 0x3b, 0x38, 0x39, 0x36, 0x37, 0x34, 0x35, 0x32, 0x33, 0x30, 0x31 + }, + new byte[] + { + // 0x3b + 0x21, 0x20, 0x23, 0x22, 0x25, 0x24, 0x27, 0x26, 0x29, 0x28, 0x2b, 0x2a, 0x2d, 0x2c, 0x2f, 0x2e, 0x31, + 0x30, 0x33, 0x32, 0x35, 0x34, 0x37, 0x36, 0x39, 0x38, 0x3b, 0x3a, 0x3d, 0x3c, 0x3f, 0x3e, 0x01, 0x00, + 0x03, 0x02, 0x05, 0x04, 0x07, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e, 0x11, 0x10, 0x13, + 0x12, 0x15, 0x14, 0x17, 0x16, 0x19, 0x18, 0x1b, 0x1a, 0x1d, 0x1c, 0x1f, 0x1e + }, + new byte[] + { + // 0x3c + 0x34, 0x35, 0x36, 0x37, 0x30, 0x31, 0x32, 0x33, 0x3c, 0x3d, 0x3e, 0x3f, 0x38, 0x39, 0x3a, 0x3b, 0x24, + 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x2f, 0x28, 0x29, 0x2a, 0x2b, 0x14, 0x15, + 0x16, 0x17, 0x10, 0x11, 0x12, 0x13, 0x1c, 0x1d, 0x1e, 0x1f, 0x18, 0x19, 0x1a, 0x1b, 0x04, 0x05, 0x06, + 0x07, 0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b + }, + new byte[] + { + // 0x3d + 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x17, + 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x27, 0x26, + 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x37, 0x36, 0x35, + 0x34, 0x33, 0x32, 0x31, 0x30, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38 + }, + new byte[] + { + // 0x3e + 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x0a, + 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d, 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, 0x3a, 0x3b, + 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d, 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35, 0x2a, 0x2b, 0x28, + 0x29, 0x2e, 0x2f, 0x2c, 0x2d, 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25 + }, + new byte[] + { + // 0x3f + 0x2d, 0x2c, 0x2f, 0x2e, 0x29, 0x28, 0x2b, 0x2a, 0x25, 0x24, 0x27, 0x26, 0x21, 0x20, 0x23, 0x22, 0x3d, + 0x3c, 0x3f, 0x3e, 0x39, 0x38, 0x3b, 0x3a, 0x35, 0x34, 0x37, 0x36, 0x31, 0x30, 0x33, 0x32, 0x0d, 0x0c, + 0x0f, 0x0e, 0x09, 0x08, 0x0b, 0x0a, 0x05, 0x04, 0x07, 0x06, 0x01, 0x00, 0x03, 0x02, 0x1d, 0x1c, 0x1f, + 0x1e, 0x19, 0x18, 0x1b, 0x1a, 0x15, 0x14, 0x17, 0x16, 0x11, 0x10, 0x13, 0x12 + } + }; + + //"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + readonly byte[] _b64 = + { + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, + 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, + 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2B, 0x2F + }; + + FuzzyState _self; + + /// Initializes the SpamSum structures + public SpamSumContext() + { + _self = new FuzzyState + { + Bh = new BlockhashContext[NUM_BLOCKHASHES] + }; + + for(int i = 0; i < NUM_BLOCKHASHES; i++) + _self.Bh[i].Digest = new byte[SPAMSUM_LENGTH]; + + _self.Bhstart = 0; + _self.Bhend = 1; + _self.Bh[0].H = HASH_INIT; + _self.Bh[0].Halfh = HASH_INIT; + _self.Bh[0].Digest[0] = 0; + _self.Bh[0].Halfdigest = 0; + _self.Bh[0].Dlen = 0; + _self.TotalSize = 0; + roll_init(); + } + + /// + /// Updates the hash with data. + /// Data buffer. + /// Length of buffer to hash. + public void Update(byte[] data, uint len) + { + _self.TotalSize += len; + + for(int i = 0; i < len; i++) + fuzzy_engine_step(data[i]); + } + + /// + /// Updates the hash with data. + /// Data buffer. + public void Update(byte[] data) => Update(data, (uint)data.Length); + + /// + /// Returns a byte array of the hash value. + public byte[] Final() => throw new NotImplementedException("SpamSum does not have a binary representation."); + + /// + /// Returns a base64 representation of the hash value. + public string End() + { + FuzzyDigest(out byte[] result); + + return CToString(result); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void roll_init() => _self.Roll = new RollState + { + Window = new byte[ROLLING_WINDOW] + }; + + /* + * a rolling hash, based on the Adler checksum. By using a rolling hash + * we can perform auto resynchronisation after inserts/deletes + + * internally, h1 is the sum of the bytes in the window and h2 + * is the sum of the bytes times the index + + * h3 is a shift/xor based rolling hash, and is mostly needed to ensure that + * we can cope with large blocksize values + */ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void roll_hash(uint c) + { + _self.Roll.H2 -= _self.Roll.H1; + _self.Roll.H2 += ROLLING_WINDOW * c; + + _self.Roll.H1 += c; + _self.Roll.H1 -= _self.Roll.Window[_self.Roll.N % ROLLING_WINDOW]; + + _self.Roll.Window[_self.Roll.N % ROLLING_WINDOW] = (byte)c; + _self.Roll.N++; + + /* The original spamsum AND'ed this value with 0xFFFFFFFF which + * in theory should have no effect. This AND has been removed + * for performance (jk) */ + _self.Roll.H3 <<= 5; + _self.Roll.H3 ^= c; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + uint roll_sum() => _self.Roll.H1 + _self.Roll.H2 + _self.Roll.H3; + + /* A simple non-rolling hash, based on the FNV hash. */ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static uint sum_hash(uint c, uint h) => sum_table[h][c & 0x3f]; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static uint SSDEEP_BS(uint index) => MIN_BLOCKSIZE << (int)index; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void fuzzy_try_fork_blockhash() + { + if(_self.Bhend >= NUM_BLOCKHASHES) + return; + + /* if(_self.Bhend == 0) // assert + throw new Exception("Assertion failed");*/ + + uint obh = _self.Bhend - 1; + uint nbh = _self.Bhend; + _self.Bh[nbh].H = _self.Bh[obh].H; + _self.Bh[nbh].Halfh = _self.Bh[obh].Halfh; + _self.Bh[nbh].Digest[0] = 0; + _self.Bh[nbh].Halfdigest = 0; + _self.Bh[nbh].Dlen = 0; + ++_self.Bhend; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void fuzzy_try_reduce_blockhash() + { + /* if(_self.Bhstart >= _self.Bhend) + throw new Exception("Assertion failed");*/ + + if(_self.Bhend - _self.Bhstart < 2) + /* Need at least two working hashes. */ + return; + + if((ulong)SSDEEP_BS(_self.Bhstart) * SPAMSUM_LENGTH >= _self.TotalSize) + /* Initial blocksize estimate would select this or a smaller + * blocksize. */ + return; + + if(_self.Bh[_self.Bhstart + 1].Dlen < SPAMSUM_LENGTH / 2) + /* Estimate adjustment would select this blocksize. */ + return; + + /* At this point we are clearly no longer interested in the + * start_blocksize. Get rid of it. */ + ++_self.Bhstart; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void fuzzy_engine_step(uint c) + { + uint i; + /* At each character we update the rolling hash and the normal hashes. + * When the rolling hash hits a reset value then we emit a normal hash + * as a element of the signature and reset the normal hash. */ + roll_hash(c); + ulong h = roll_sum(); + + for(i = _self.Bhstart; i < _self.Bhend; ++i) + { + _self.Bh[i].H = sum_hash(c, _self.Bh[i].H); + _self.Bh[i].Halfh = sum_hash(c, _self.Bh[i].Halfh); + } + + for(i = _self.Bhstart; i < _self.Bhend; ++i) + { + /* With growing blocksize almost no runs fail the next test. */ + if(h % SSDEEP_BS(i) != SSDEEP_BS(i) - 1) + /* Once this condition is false for one bs, it is + * automatically false for all further bs. I.e. if + * h === -1 (mod 2*bs) then h === -1 (mod bs). */ + break; + + /* We have hit a reset point. We now emit hashes which are + * based on all characters in the piece of the message between + * the last reset point and this one */ + if(0 == _self.Bh[i].Dlen) + fuzzy_try_fork_blockhash(); + + _self.Bh[i].Digest[_self.Bh[i].Dlen] = _b64[_self.Bh[i].H % 64]; + _self.Bh[i].Halfdigest = _b64[_self.Bh[i].Halfh % 64]; + + if(_self.Bh[i].Dlen < SPAMSUM_LENGTH - 1) + { + /* We can have a problem with the tail overflowing. The + * easiest way to cope with this is to only reset the + * normal hash if we have room for more characters in + * our signature. This has the effect of combining the + * last few pieces of the message into a single piece + * */ + _self.Bh[i].Digest[++_self.Bh[i].Dlen] = 0; + _self.Bh[i].H = HASH_INIT; + + if(_self.Bh[i].Dlen >= SPAMSUM_LENGTH / 2) + continue; + + _self.Bh[i].Halfh = HASH_INIT; + _self.Bh[i].Halfdigest = 0; + } + else + fuzzy_try_reduce_blockhash(); + } + } + + // CLAUNIA: Flags seems to never be used in ssdeep, so I just removed it for code simplicity + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void FuzzyDigest(out byte[] result) + { + var sb = new StringBuilder(); + uint bi = _self.Bhstart; + uint h = roll_sum(); + int remain = (int)(FUZZY_MAX_RESULT - 1); /* Exclude terminating '\0'. */ + result = new byte[FUZZY_MAX_RESULT]; + + /* Verify that our elimination was not overeager. */ + /* if(!(bi == 0 || (ulong)SSDEEP_BS(bi) / 2 * SPAMSUM_LENGTH < _self.TotalSize)) + throw new Exception("Assertion failed");*/ + + int resultOff; + + /* Initial blocksize guess. */ + while((ulong)SSDEEP_BS(bi) * SPAMSUM_LENGTH < _self.TotalSize) + { + ++bi; + + if(bi >= NUM_BLOCKHASHES) + throw new OverflowException("The input exceeds data types."); + } + + /* Adapt blocksize guess to actual digest length. */ + while(bi >= _self.Bhend) + --bi; + + while(bi > _self.Bhstart && + _self.Bh[bi].Dlen < SPAMSUM_LENGTH / 2) + --bi; + + /* if(bi > 0 && + _self.Bh[bi].Dlen < SPAMSUM_LENGTH / 2) + throw new Exception("Assertion failed");*/ + + sb.AppendFormat("{0}:", SSDEEP_BS(bi)); + int i = Encoding.ASCII.GetBytes(sb.ToString()).Length; + + if(i <= 0) + /* Maybe snprintf has set errno here? */ + throw new OverflowException("The input exceeds data types."); + + /* if(i >= remain) + throw new Exception("Assertion failed");*/ + + remain -= i; + + Array.Copy(Encoding.ASCII.GetBytes(sb.ToString()), 0, result, 0, i); + + resultOff = i; + + i = (int)_self.Bh[bi].Dlen; + + /* if(i > remain) + throw new Exception("Assertion failed");*/ + + Array.Copy(_self.Bh[bi].Digest, 0, result, resultOff, i); + resultOff += i; + remain -= i; + + if(h != 0) + { + /* if(remain <= 0) + throw new Exception("Assertion failed");*/ + + result[resultOff] = _b64[_self.Bh[bi].H % 64]; + + if(i < 3 || + result[resultOff] != result[resultOff - 1] || + result[resultOff] != result[resultOff - 2] || + result[resultOff] != result[resultOff - 3]) + { + ++resultOff; + --remain; + } + } + else if(_self.Bh[bi].Digest[i] != 0) + { + if(remain <= 0) + throw new Exception("Assertion failed"); + + result[resultOff] = _self.Bh[bi].Digest[i]; + + if(i < 3 || + result[resultOff] != result[resultOff - 1] || + result[resultOff] != result[resultOff - 2] || + result[resultOff] != result[resultOff - 3]) + { + ++resultOff; + --remain; + } + } + + /* if(remain <= 0) + throw new Exception("Assertion failed");*/ + + result[resultOff++] = 0x3A; // ':' + --remain; + + if(bi < _self.Bhend - 1) + { + ++bi; + i = (int)_self.Bh[bi].Dlen; + + /* if(i > remain) + throw new Exception("Assertion failed");*/ + + Array.Copy(_self.Bh[bi].Digest, 0, result, resultOff, i); + resultOff += i; + remain -= i; + + if(h != 0) + { + /* if(remain <= 0) + throw new Exception("Assertion failed");*/ + + h = _self.Bh[bi].Halfh; + result[resultOff] = _b64[h % 64]; + + if(i < 3 || + result[resultOff] != result[resultOff - 1] || + result[resultOff] != result[resultOff - 2] || + result[resultOff] != result[resultOff - 3]) + { + ++resultOff; + --remain; + } + } + else + { + i = _self.Bh[bi].Halfdigest; + + if(i != 0) + { + /* if(remain <= 0) + throw new Exception("Assertion failed");*/ + + result[resultOff] = (byte)i; + + if(i < 3 || + result[resultOff] != result[resultOff - 1] || + result[resultOff] != result[resultOff - 2] || + result[resultOff] != result[resultOff - 3]) + { + ++resultOff; + --remain; + } + } + } + } + else if(h != 0) + { + /* if(_self.Bh[bi].Dlen != 0) + throw new Exception("Assertion failed"); + + if(remain <= 0) + throw new Exception("Assertion failed");*/ + + result[resultOff++] = _b64[_self.Bh[bi].H % 64]; + /* No need to bother with FUZZY_FLAG_ELIMSEQ, because this + * digest has length 1. */ + --remain; + } + + result[resultOff] = 0; + } + + /// Gets the hash of a file + /// File path. + public static byte[] File(string filename) => + throw new NotImplementedException("SpamSum does not have a binary representation."); + + /// Gets the hash of a file in hexadecimal and as a byte array. + /// File path. + /// Byte array of the hash value. + public static string File(string filename, out byte[] hash) => + throw new NotImplementedException("Not yet implemented."); + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// Length of the data buffer to hash. + /// null + /// Base64 representation of SpamSum $blocksize:$hash:$hash + public static string Data(byte[] data, uint len, out byte[] hash) + { + var fuzzyContext = new SpamSumContext(); + + fuzzyContext.Update(data, len); + + hash = null; + + return fuzzyContext.End(); + } + + /// Gets the hash of the specified data buffer. + /// Data buffer. + /// null + /// Base64 representation of SpamSum $blocksize:$hash:$hash + public static string Data(byte[] data, out byte[] hash) => Data(data, (uint)data.Length, out hash); + + // Converts an ASCII null-terminated string to .NET string + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static string CToString(byte[] cString) + { + int count = 0; + + // ReSharper disable once LoopCanBeConvertedToQuery + // LINQ is six times slower + foreach(byte c in cString) + { + if(c == 0) + break; + + count++; + } + + return Encoding.ASCII.GetString(cString, 0, count); + } + + struct RollState + { + public byte[] Window; + + // ROLLING_WINDOW + public uint H1; + public uint H2; + public uint H3; + public uint N; + } + + /* A blockhash contains a signature state for a specific (implicit) blocksize. + * The blocksize is given by SSDEEP_BS(index). The h and halfh members are the + * FNV hashes, where halfh stops to be reset after digest is SPAMSUM_LENGTH/2 + * long. The halfh hash is needed be able to truncate digest for the second + * output hash to stay compatible with ssdeep output. */ + struct BlockhashContext + { + public uint H; + public uint Halfh; + public byte[] Digest; + + // SPAMSUM_LENGTH + public byte Halfdigest; + public uint Dlen; + } + + struct FuzzyState + { + public uint Bhstart; + public uint Bhend; + public BlockhashContext[] Bh; + + //NUM_BLOCKHASHES + public ulong TotalSize; + public RollState Roll; + } + } +} \ No newline at end of file diff --git a/AaruBenchmark.sln b/AaruBenchmark.sln index 229f802..982cf4c 100644 --- a/AaruBenchmark.sln +++ b/AaruBenchmark.sln @@ -2,13 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AaruBenchmark", "AaruBenchmark\AaruBenchmark.csproj", "{19D6E240-64A0-4F06-BF38-EEE93BE86F30}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aaru.Checksums", "Aaru.Checksums\Aaru.Checksums.csproj", "{CC48B324-A532-4A45-87A6-6F91F7141E8D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aaru.CommonTypes", "Aaru.CommonTypes\Aaru.CommonTypes.csproj", "{F2B84194-26EB-4227-B1C5-6602517E85AE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aaru.Console", "Aaru.Console\Aaru.Console.csproj", "{CCAA7AFE-C094-4D82-A66D-630DE8A3F545}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aaru.Helpers", "Aaru.Helpers\Aaru.Helpers.csproj", "{F8BDF57B-1571-4CD0-84B3-B422088D359A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aaru6.Checksums", "Aaru6.Checksums\Aaru6.Checksums.csproj", "{CC48B324-A532-4A45-87A6-6F91F7141E8D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -24,17 +18,5 @@ Global {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Debug|Any CPU.Build.0 = Debug|Any CPU {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Release|Any CPU.ActiveCfg = Release|Any CPU {CC48B324-A532-4A45-87A6-6F91F7141E8D}.Release|Any CPU.Build.0 = Release|Any CPU - {F2B84194-26EB-4227-B1C5-6602517E85AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2B84194-26EB-4227-B1C5-6602517E85AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2B84194-26EB-4227-B1C5-6602517E85AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2B84194-26EB-4227-B1C5-6602517E85AE}.Release|Any CPU.Build.0 = Release|Any CPU - {CCAA7AFE-C094-4D82-A66D-630DE8A3F545}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCAA7AFE-C094-4D82-A66D-630DE8A3F545}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCAA7AFE-C094-4D82-A66D-630DE8A3F545}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCAA7AFE-C094-4D82-A66D-630DE8A3F545}.Release|Any CPU.Build.0 = Release|Any CPU - {F8BDF57B-1571-4CD0-84B3-B422088D359A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8BDF57B-1571-4CD0-84B3-B422088D359A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F8BDF57B-1571-4CD0-84B3-B422088D359A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8BDF57B-1571-4CD0-84B3-B422088D359A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/AaruBenchmark/AaruBenchmark.csproj b/AaruBenchmark/AaruBenchmark.csproj index 7c7e8f5..76146f6 100644 --- a/AaruBenchmark/AaruBenchmark.csproj +++ b/AaruBenchmark/AaruBenchmark.csproj @@ -2,24 +2,25 @@ Exe - netcoreapp3.1;net5;net6 + net6 - - - + + + + - + Always - + diff --git a/AaruBenchmark/Checksums/Aaru.cs b/AaruBenchmark/Checksums/Aaru.cs index b818bbf..bdc5550 100644 --- a/AaruBenchmark/Checksums/Aaru.cs +++ b/AaruBenchmark/Checksums/Aaru.cs @@ -14,6 +14,16 @@ namespace AaruBenchmark.Checksums 0x37, 0x28, 0xd1, 0x86 }; + static readonly byte[] _expectedRandomFletcher16 = + { + 0x33, 0x57 + }; + + static readonly byte[] _expectedRandomFletcher32 = + { + 0x21, 0x12, 0x61, 0xF5 + }; + static readonly byte[] _expectedRandomCrc16Ccitt = { 0x36, 0x40 @@ -79,6 +89,12 @@ namespace AaruBenchmark.Checksums IChecksum ctx = new Fletcher16Context(); ctx.Update(data); byte[] result = ctx.Final(); + + if(result?.Length != _expectedRandomFletcher16.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomFletcher16[i]).Any()) + throw new Exception("Invalid hash value"); } public static void Fletcher32() @@ -94,6 +110,12 @@ namespace AaruBenchmark.Checksums IChecksum ctx = new Fletcher32Context(); ctx.Update(data); byte[] result = ctx.Final(); + + if(result?.Length != _expectedRandomFletcher32.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomFletcher32[i]).Any()) + throw new Exception("Invalid hash value"); } public static void Adler32() diff --git a/AaruBenchmark/Checksums/Aaru6.cs b/AaruBenchmark/Checksums/Aaru6.cs new file mode 100644 index 0000000..861540b --- /dev/null +++ b/AaruBenchmark/Checksums/Aaru6.cs @@ -0,0 +1,225 @@ +using System; +using System.IO; +using System.Linq; +using Aaru.CommonTypes.Interfaces; +using Aaru6.Checksums; + +namespace AaruBenchmark.Checksums +{ + public class Aaru6 + { + static readonly byte[] _expectedRandomAdler32 = + { + 0x37, 0x28, 0xd1, 0x86 + }; + + static readonly byte[] _expectedRandomFletcher16 = + { + 0x33, 0x57 + }; + + static readonly byte[] _expectedRandomFletcher32 = + { + 0x21, 0x12, 0x61, 0xF5 + }; + + static readonly byte[] _expectedRandomCrc16Ccitt = + { + 0x36, 0x40 + }; + + static readonly byte[] _expectedRandomCrc16 = + { + 0x2d, 0x6d + }; + + static readonly byte[] _expectedRandomCrc32 = + { + 0x2b, 0x6e, 0x68, 0x54 + }; + + static readonly byte[] _expectedRandomCrc64 = + { + 0xbf, 0x09, 0x99, 0x2c, 0xc5, 0xed, 0xe3, 0x8e + }; + + static readonly byte[] _expectedRandomMd5 = + { + 0xd7, 0x8f, 0x0e, 0xec, 0x41, 0x7b, 0xe3, 0x86, 0x21, 0x9b, 0x21, 0xb7, 0x00, 0x04, 0x4b, 0x95 + }; + + static readonly byte[] _expectedRandomSha1 = + { + 0x72, 0x0d, 0x3b, 0x71, 0x7d, 0xe0, 0xc7, 0x4c, 0x77, 0xdd, 0x9c, 0xaa, 0x9e, 0xba, 0x50, 0x60, 0xdc, 0xbd, + 0x28, 0x8d + }; + + static readonly byte[] _expectedRandomSha256 = + { + 0x4d, 0x1a, 0x6b, 0x8a, 0x54, 0x67, 0x00, 0xc4, 0x8e, 0xda, 0x70, 0xd3, 0x39, 0x1c, 0x8f, 0x15, 0x8a, 0x8d, + 0x12, 0xb2, 0x38, 0x92, 0x89, 0x29, 0x50, 0x47, 0x8c, 0x41, 0x8e, 0x25, 0xcc, 0x39 + }; + + static readonly byte[] _expectedRandomSha384 = + { + 0xdb, 0x53, 0x0e, 0x17, 0x9b, 0x81, 0xfe, 0x5f, 0x6d, 0x20, 0x41, 0x04, 0x6e, 0x77, 0xd9, 0x85, 0xf2, 0x85, + 0x8a, 0x66, 0xca, 0xd3, 0x8d, 0x1a, 0xd5, 0xac, 0x67, 0xa9, 0x74, 0xe1, 0xef, 0x3f, 0x4d, 0xdf, 0x94, 0x15, + 0x2e, 0xac, 0x2e, 0xfe, 0x16, 0x95, 0x81, 0x54, 0xdc, 0x59, 0xd4, 0xc3 + }; + + static readonly byte[] _expectedRandomSha512 = + { + 0x6a, 0x0a, 0x18, 0xc2, 0xad, 0xf8, 0x83, 0xac, 0x58, 0xe6, 0x21, 0x96, 0xdb, 0x8d, 0x3d, 0x0e, 0xb9, 0x87, + 0xd1, 0x49, 0x24, 0x97, 0xdb, 0x15, 0xb9, 0xfc, 0xcc, 0xb0, 0x36, 0xdf, 0x64, 0xae, 0xdb, 0x3e, 0x82, 0xa0, + 0x4d, 0xdc, 0xd1, 0x37, 0x48, 0x92, 0x95, 0x51, 0xf9, 0xdd, 0xab, 0x82, 0xf4, 0x8a, 0x85, 0x3f, 0x9a, 0x01, + 0xb5, 0xf2, 0x8c, 0xbb, 0x4a, 0xa5, 0x1b, 0x40, 0x7c, 0xb6 + }; + + public static void Fletcher16() + { + byte[] data = new byte[1048576]; + + var fs = new FileStream(Path.Combine("/mnt/DiscImageChef", "Checksum test files", "random"), FileMode.Open, + FileAccess.Read); + + fs.Read(data, 0, 1048576); + fs.Close(); + fs.Dispose(); + IChecksum ctx = new Fletcher16Context(); + ctx.Update(data); + byte[] result = ctx.Final(); + + if(result?.Length != _expectedRandomFletcher16.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomFletcher16[i]).Any()) + throw new Exception("Invalid hash value"); + } + + public static void Fletcher32() + { + byte[] data = new byte[1048576]; + + var fs = new FileStream(Path.Combine("/mnt/DiscImageChef", "Checksum test files", "random"), FileMode.Open, + FileAccess.Read); + + fs.Read(data, 0, 1048576); + fs.Close(); + fs.Dispose(); + IChecksum ctx = new Fletcher32Context(); + ctx.Update(data); + byte[] result = ctx.Final(); + + if(result?.Length != _expectedRandomFletcher32.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomFletcher32[i]).Any()) + throw new Exception("Invalid hash value"); + } + + public static void Adler32() + { + byte[] data = new byte[1048576]; + + var fs = new FileStream(Path.Combine("/mnt/DiscImageChef", "Checksum test files", "random"), FileMode.Open, + FileAccess.Read); + + fs.Read(data, 0, 1048576); + fs.Close(); + fs.Dispose(); + IChecksum ctx = new Adler32Context(); + ctx.Update(data); + byte[] result = ctx.Final(); + + if(result?.Length != _expectedRandomAdler32.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomAdler32[i]).Any()) + throw new Exception("Invalid hash value"); + } + + public static void Crc16Ccitt() + { + byte[] data = new byte[1048576]; + + var fs = new FileStream(Path.Combine("/mnt/DiscImageChef", "Checksum test files", "random"), FileMode.Open, + FileAccess.Read); + + fs.Read(data, 0, 1048576); + fs.Close(); + fs.Dispose(); + IChecksum ctx = new CRC16CCITTContext(); + ctx.Update(data); + byte[] result = ctx.Final(); + /* + if(result?.Length != _expectedRandomCrc16Ccitt.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomCrc16Ccitt[i]).Any()) + throw new Exception("Invalid hash value");*/ + } + + public static void Crc16() + { + byte[] data = new byte[1048576]; + + var fs = new FileStream(Path.Combine("/mnt/DiscImageChef", "Checksum test files", "random"), FileMode.Open, + FileAccess.Read); + + fs.Read(data, 0, 1048576); + fs.Close(); + fs.Dispose(); + IChecksum ctx = new CRC16IBMContext(); + ctx.Update(data); + byte[] result = ctx.Final(); + + if(result?.Length != _expectedRandomCrc16.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomCrc16[i]).Any()) + throw new Exception("Invalid hash value"); + } + + public static void Crc32() + { + byte[] data = new byte[1048576]; + + var fs = new FileStream(Path.Combine("/mnt/DiscImageChef", "Checksum test files", "random"), FileMode.Open, + FileAccess.Read); + + fs.Read(data, 0, 1048576); + fs.Close(); + fs.Dispose(); + IChecksum ctx = new Crc32Context(); + ctx.Update(data); + byte[] result = ctx.Final(); + + if(result?.Length != _expectedRandomCrc32.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomCrc32[i]).Any()) + throw new Exception("Invalid hash value"); + } + + public static void Crc64() + { + byte[] data = new byte[1048576]; + + var fs = new FileStream(Path.Combine("/mnt/DiscImageChef", "Checksum test files", "random"), FileMode.Open, + FileAccess.Read); + + fs.Read(data, 0, 1048576); + fs.Close(); + fs.Dispose(); + IChecksum ctx = new Crc64Context(); + ctx.Update(data); + byte[] result = ctx.Final(); + + if(result?.Length != _expectedRandomCrc64.Length) + throw new Exception("Invalid hash length"); + + if(result.Where((t, i) => t != _expectedRandomCrc64[i]).Any()) + throw new Exception("Invalid hash value"); + } + } +} \ No newline at end of file diff --git a/AaruBenchmark/Checksums/AaruNative.cs b/AaruBenchmark/Checksums/AaruNative.cs index 8767ee8..3ae0684 100644 --- a/AaruBenchmark/Checksums/AaruNative.cs +++ b/AaruBenchmark/Checksums/AaruNative.cs @@ -12,6 +12,16 @@ namespace AaruBenchmark.Checksums 0x37, 0x28, 0xd1, 0x86 }; + static readonly byte[] _expectedRandomFletcher16 = + { + 0x33, 0x57 + }; + + static readonly byte[] _expectedRandomFletcher32 = + { + 0x21, 0x12, 0x61, 0xF5 + }; + static readonly byte[] _expectedRandomCrc16Ccitt = { 0x36, 0x40 @@ -189,6 +199,13 @@ namespace AaruBenchmark.Checksums throw new Exception("Could not finalize hash"); fletcher16_free(ctx); + + fletcher16 = (ushort)((fletcher16 << 8) | (fletcher16 >> 8)); + + hash = BitConverter.GetBytes(fletcher16); + + if(hash.Where((t, i) => t != _expectedRandomFletcher16[i]).Any()) + throw new Exception("Invalid hash value"); } public static void Fletcher32() @@ -220,6 +237,14 @@ namespace AaruBenchmark.Checksums throw new Exception("Could not finalize hash"); fletcher32_free(ctx); + + fletcher32 = ((fletcher32 << 8) & 0xFF00FF00) | ((fletcher32 >> 8) & 0xFF00FF); + fletcher32 = (fletcher32 << 16) | (fletcher32 >> 16); + + hash = BitConverter.GetBytes(fletcher32); + + if(hash.Where((t, i) => t != _expectedRandomFletcher32[i]).Any()) + throw new Exception("Invalid hash value"); } public static void Adler32() diff --git a/AaruBenchmark/Program.cs b/AaruBenchmark/Program.cs index 8ccda9e..5b14489 100644 --- a/AaruBenchmark/Program.cs +++ b/AaruBenchmark/Program.cs @@ -1,7 +1,4 @@ -using BenchmarkDotNet.Configs; -using BenchmarkDotNet.Reports; -using BenchmarkDotNet.Running; -using AaruBenchmark.Checksums; +using BenchmarkDotNet.Running; namespace AaruBenchmark { @@ -9,25 +6,21 @@ namespace AaruBenchmark { static void Main(string[] args) { - - var summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - // var summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //var foo = new BenchmarkRunner(); - //Checksums.Aaru.Crc64(); - - //Summary summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //Summary summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //Summary summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - // Summary summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //Summary summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //Summary summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //Summary summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //var summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //var summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //var summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //var summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //var summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); - //var summary = BenchmarkRunner.Run(ManualConfig.Create(DefaultConfig.Instance).WithOptions(ConfigOptions.DisableOptimizationsValidator)); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); } } } \ No newline at end of file diff --git a/Benchmarks.ods b/Benchmarks.ods index 48b80ff51ec0d533e07ed164ad18e1d2aaee8868..c14c844b99e579a66b9584aae79c200511e5a88f 100644 GIT binary patch delta 29141 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 A-2eap diff --git a/CICMMetadata/.editorconfig b/CICMMetadata/.editorconfig deleted file mode 100644 index 8b506da..0000000 --- a/CICMMetadata/.editorconfig +++ /dev/null @@ -1,632 +0,0 @@ -root = true - -[*] -charset=utf-8 -next_line=crlf -insert_final_newline=false -indent_style=space -indent_size=4 - -# Generic non-language specific ones for Resharper and friends -brace_style=next_line -int_align=true -keep_existing_arrangement=false -place_simple_blocks_on_single_line=true -place_simple_declaration_blocks_on_single_line=true -place_attribute_on_same_line=false -space_after_unary_operator=false -space_after_comma=true -space_around_ternary_operator=true -space_around_binary_operator=true -space_around_member_access_operator=false -space_before_open_square_brackets=false -space_after_keywords_in_control_flow_statements=true -space_before_comma=false -space_between_method_call_name_and_opening_parenthesis=false -space_between_method_declaration_name_and_open_parenthesis=false -space_between_square_brackets=false -space_between_parentheses_of_control_flow_statements=false -accessor_owner_declaration_braces=next_line -accessor_declaration_braces=next_line -case_block_braces=next_line -initializer_braces=next_line -other_braces=next_line -allow_comment_after_lbrace=false -empty_block_style=together_same_line -braces_for_ifelse=not_required -braces_for_for=not_required -braces_for_foreach=not_required -braces_for_while=not_required -braces_for_dowhile=not_required -braces_for_using=not_required -braces_for_lock=not_required -braces_for_fixed=not_required -method_or_operator_body=expression_body -local_function_body=expression_body -constructor_or_destructor_body=expression_body -accessor_owner_body=expression_body -force_attribute_style=join -function_braces=next_line -force_control_statements_braces=always_remove -space_in_singleline_accessorholder=true -type_declaration_braces=next_line -invocable_declaration_braces=next_line -anonymous_method_declaration_braces=next_line -space_between_accessors_in_singleline_property=true -indent_nested_usings_stmt=true -space_within_empty_braces=false -indent_nested_fixed_stmt=true -indent_nested_lock_stmt=true -indent_nested_for_stmt=true -indent_nested_foreach_stmt=true -indent_nested_while_stmt=true -use_continuous_indent_inside_parens=true -indent_method_decl_pars=inside -indent_invocation_pars=inside -indent_statement_pars=inside -indent_typeparam_angles=inside -indent_typearg_angles=inside -indent_pars=inside -indent_preprocessor_if=outdent -indent_preprocessor_region=usual_indent -indent_preprocessor_other=usual_indent -indent_switch_labels=true -indent_type_constraints=true -stick_comment=false -alignment_tab_fill_style=use_spaces -align_multiline_parameter=true -align_multiline_extends_list=true -align_linq_query=true -align_multiline_binary_expressions_chain=true -outdent_binary_ops=true -align_multiline_calls_chain=true -outdent_dots=true -align_multiline_array_and_object_initializer=false -indent_anonymous_method_block=false -align_first_arg_by_paren=true -align_multiline_argument=true -align_tuple_components=true -align_multiline_expression=true -align_multiline_for_stmt=true -align_multiple_declaration=true -align_multline_type_parameter_list=true -align_multline_type_parameter_constrains=true -int_align_fields=true -int_align_properties=true -int_align_methods=true -int_align_parameters=false -int_align_variables=true -int_align_assignments=true -int_align_nested_ternary=true -int_align_invocations=false -int_align_binary_expressions=true -int_align_comments=true -int_align_switch_sections=true -keep_user_linebreaks=false -keep_existing_arrangement=false -keep_existing_linebreaks=false -max_line_length=120 -wrap_before_comma=false -special_else_if_treatment=true -place_type_attribute_on_same_line=never -place_method_attribute_on_same_line=never -place_accessorholder_attribute_on_same_line=never -place_attribute_on_same_line=never -place_accessor_attribute_on_same_line=never -place_attribute_on_same_line=never -place_field_attribute_on_same_line=never -place_attribute_on_same_line=never -wrap_parameters_style=wrap_if_long -keep_existing_declaration_parens_arrangement=false -wrap_before_declaration_lpar=false -wrap_after_declaration_lpar=false -wrap_before_declaration_rpar=false -place_constructor_initializer_on_same_line=true -keep_existing_expr_member_arrangement=false -place_expr_method_on_single_line=true -place_expr_property_on_single_line=true -place_expr_accessor_on_single_line=true -wrap_before_arrow_with_expressions=false -place_type_constraints_on_same_line=true -wrap_before_first_type_parameter_constraint=true -wrap_multiple_type_parameter_constraints_style=wrap_if_long -wrap_before_type_parameter_langle=true -wrap_before_extends_colon=false -wrap_extends_list_style=wrap_if_long -keep_existing_declaration_block_arrangement=false -place_abstract_accessorholder_on_single_line=true -place_simple_accessorholder_on_single_line=false -place_accessor_with_attrs_holder_on_single_line=false -place_simple_accessor_on_single_line=true -place_simple_method_on_single_line=false -keep_existing_enum_arrangement=false -place_simple_enum_on_single_line=false -wrap_enum_declaration=wrap_if_long -new_line_before_else=true -new_line_before_while=false -wrap_for_stmt_header_style=wrap_if_long -wrap_multiple_declaration_style=wrap_if_long -keep_existing_embedded_arrangement=false -place_simple_embedded_statement_on_same_line=false -place_simple_case_statement_on_same_line=true -keep_existing_embedded_block_arrangement=false -place_simple_embedded_block_on_same_line=false -place_simple_anonymousmethod_on_single_line=false -keep_existing_initializer_arrangement=false -place_simple_initializer_on_single_line=false -wrap_object_and_collection_initializer_style=chop_always -wrap_array_initializer_style=wrap_if_long -wrap_arguments_style=wrap_if_long -keep_existing_invocation_parens_arrangement=false -wrap_after_invocation_lpar=false -wrap_before_invocation_rpar=false -wrap_after_dot_in_method_calls=true -wrap_chained_method_calls=wrap_if_long -wrap_before_binary_opsign=false -wrap_chained_binary_expressions=wrap_if_long -force_chop_compound_if_expression=true -force_chop_compound_while_expression=true -force_chop_compound_do_expression=true -wrap_before_ternary_opsigns=true -wrap_ternary_expr_style=wrap_if_long -nested_ternary_style=expanded -wrap_linq_expressions=wrap_if_long -wrap_before_linq_expression=false -place_linq_into_on_new_line=false -wrap_verbatim_interpolated_strings=wrap_if_long -extra_spaces=remove_all -space_after_keywords_in_control_flow_statements=false -space_between_method_call_name_and_opening_parenthesis=false -space_between_method_declaration_name_and_open_parenthesis=false -space_before_typeof_parentheses=false -space_before_checked_parentheses=false -space_before_sizeof_parentheses=false -space_before_nameof_parentheses=false -space_between_keyword_and_expression=true -space_between_keyword_and_type=true -space_around_assignment_op=true -space_around_logical_op=true -space_around_binary_operator=true -space_around_equality_op=true -space_around_relational_op=true -space_around_bitwise_op=true -space_around_additive_op=true -space_around_multiplicative_op=true -space_around_shift_op=true -space_around_nullcoalescing_op=true -space_around_arrow_op=false -space_after_logical_not_op=false -space_after_unary_operator=false -space_after_cast=false -space_around_dot=false -space_around_lambda_arrow=true -space_before_pointer_asterik_declaration=false -space_before_nullable_mark=false -blank_lines_around_class_definition=1 -namespace_indentation=all -space_within_template_argument=false -align_union_type_usage=true -space_in_singleline_method=true -space_in_singleline_anonymous_method=true -space_within_single_line_array_initializer_braces=true -space_around_arrow_op=false - -# These are for markup languages (HTML, XML, etc) -spaces_around_eq_in_pi_attribute=false -space_after_last_pi_attribute=true -pi_attributes_indent=align_by_first_attribute -blank_line_after_pi=true -spaces_around_eq_in_attribute=false -space_after_last_attribute=false -space_before_self_closing=true -attribute_style=on_single_line -attribute_indent=align_by_first_attribute -sort_attributes=true -sort_class_selectors=true -max_blank_lines_between_tags=0 -linebreak_before_all_elements=true -linebreak_before_multiline_elements=true -quote_style=doublequoted -delete_quotes_from_solid_values=false -normalize_tag_names=true - - -[{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}] -indent_size=2 - -[*.js.map] -indent_size=2 - -[*.{css,scss}] -indent_size=2 -declarations_style=separate_lines_for_nonsingle -media_query_style=separate_lines -selector_style=same_line -properties_style=separate_lines_for_nonsingle -brace_style=next_line - -[{.analysis_options,*.yml,*.yaml}] -indent_size=2 - -# Xml project files -[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] -indent_size = 2 - -# Xml files -[*.{xml,stylecop,resx,ruleset}] -indent_size = 2 - -# Xml config files -[*.{props,targets,config,nuspec}] -indent_size = 2 - -# .net files -[*.{cs,vb}] -# These set the this. / Me. -dotnet_style_qualification_for_field=false:warning -dotnet_style_qualification_for_property=false:warning -dotnet_style_qualification_for_method=false:warning -dotnet_style_qualification_for_event=false:warning - -# These make it suggest Int32 instead of int, etc. -dotnet_style_predefined_type_for_locals_parameters_members=true:suggestion -dotnet_style_predefined_type_for_member_access=true:suggestion - -# This controls implicit access modifiers -dotnet_style_require_accessibility_modifiers=never:suggestion - -# Prefer non modified fields to be marked readonly -dotnet_style_readonly_field=true:warning - -# Parenthesis settings -dotnet_style_parentheses_in_arithmetic_binary_operators=always_for_clarity:warning -dotnet_style_parentheses_in_relational_binary_operators=always_for_clarity:warning -dotnet_style_parentheses_in_other_binary_operators=always_for_clarity:warning -dotnet_style_parentheses_in_other_operators=always_for_clarity:warning - -dotnet_style_object_initializer=true:suggestion -dotnet_style_collection_initializer=true:suggestion -dotnet_style_explicit_tuple_names=true:error -dotnet_style_prefer_inferred_tuple_names=true:warning -dotnet_style_prefer_inferred_anonymous_type_member_names=true:warning -dotnet_style_prefer_is_null_check_over_reference_equality_method=true:warning -dotnet_style_prefer_conditional_expression_over_return=true:warning -dotnet_style_coalesce_expression=true:warning -dotnet_style_null_propagation=true:error - -dotnet_sort_system_directives_first=true - -# Constants in C style, all-caps -dotnet_naming_rule.constant_fields_caps.symbols = constant_fields -dotnet_naming_rule.constant_fields_caps.severity = warning -dotnet_naming_rule.constant_fields_caps.style = caps_style -dotnet_naming_symbols.constant_fields.applicable_kinds = field -dotnet_naming_symbols.constant_fields.required_modifiers = const -dotnet_naming_style.caps_style.capitalization = all_upper - -# interfaces should be prefixed with I -dotnet_naming_rule.pascal_case_for_interface.severity = error -dotnet_naming_rule.pascal_case_for_interface.symbols = interfaces_fields -dotnet_naming_rule.pascal_case_for_interface.style = pascal_case_interface_style -dotnet_naming_symbols.interfaces_fields.applicable_kinds = interface -dotnet_naming_style.pascal_case_interface_style.required_prefix = I -dotnet_naming_style.pascal_case_interface_style.capitalization = pascal_case - -## internal and private fields should be _camelCase -dotnet_naming_rule.camel_case_for_private_internal_fields.severity = warning -dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields -dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style -dotnet_naming_symbols.private_internal_fields.applicable_kinds = field -dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal -dotnet_naming_style.camel_case_underscore_style.required_prefix = _ -dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case - -# 2018-12-07 NP: This is not yet working in VS2017 -# local variables should be camelCase -#dotnet_naming_rule.camel_case_for_locals.severity = suggestion -#dotnet_naming_rule.camel_case_for_locals.symbols = local_fields -#dotnet_naming_rule.camel_case_for_locals.style = camel_case_style -#dotnet_naming_symbols.local_fields.applicable_kinds = local -#dotnet_naming_style.camel_case_style.capitalization = camel_case - -[*.cs] -# var var var -csharp_style_var_for_built_in_types=false:warning -csharp_style_var_when_type_is_apparent=true:suggestion -csharp_style_var_elsewhere=false:warning - -csharp_style_expression_bodied_methods=when_on_single_line:suggestion -csharp_style_expression_bodied_constructors=when_on_single_line:suggestion -csharp_style_expression_bodied_operators=when_on_single_line:suggestion -csharp_style_expression_bodied_properties=when_on_single_line:suggestion -csharp_style_expression_bodied_indexers=when_on_single_line:suggestion -csharp_style_expression_bodied_accessors=when_on_single_line:suggestion - -csharp_style_pattern_matching_over_is_with_cast_check=true:warning -csharp_style_pattern_matching_over_as_with_null_check=when_on_single_line:warning - -csharp_style_inlined_variable_declaration=true:warning - -csharp_prefer_simple_default_expression=true:warning -csharp_style_deconstructed_variable_declaration=false:warning - -csharp_style_throw_expression=true:warning -csharp_style_conditional_delegate_call=true:warning - -csharp_prefer_braces=false - -csharp_new_line_before_open_brace=all -csharp_new_line_before_else=true -csharp_new_line_before_catch=true -csharp_new_line_before_finally=true -csharp_new_line_before_members_in_object_initializers=true -csharp_new_line_before_members_in_anonymous_types=true -csharp_new_line_between_query_expression_clauses=true - -csharp_indent_case_contents=true -csharp_indent_switch_labels=true -csharp_indent_labels=flush_left - -csharp_space_after_cast=false -csharp_space_after_keywords_in_control_flow_statements=false -csharp_space_between_method_declaration_parameter_list_parentheses=false -csharp_space_between_parentheses=none -csharp_space_before_colon_in_inheritance_clause=true -csharp_space_after_colon_in_inheritance_clause=true -csharp_space_around_binary_operators=before_and_after -csharp_space_between_method_declaration_empty_parameter_list_parentheses=false -csharp_space_between_method_call_name_and_opening_parenthesis=false -csharp_space_between_method_call_empty_parameter_list_parentheses=false - -csharp_preserve_single_line_statements=false -csharp_preserve_single_line_blocks=true - -csharp_blank_lines_around_region=0 -csharp_blank_lines_inside_region=0 -csharp_blank_lines_before_single_line_comment=1 -csharp_keep_blank_lines_in_declarations=1 -csharp_remove_blank_lines_near_braces_in_declarations=true -csharp_blank_lines_after_start_comment=false -csharp_blank_lines_between_using_groups=0 -csharp_blank_lines_after_using_list=1 -csharp_blank_lines_around_namespace=1 -csharp_blank_lines_inside_namespace=0 -csharp_blank_lines_around_type=1 -csharp_blank_lines_inside_type=0 -csharp_blank_lines_around_field=0 -csharp_blank_lines_around_single_line_field=0 -csharp_blank_lines_around_property=1 -csharp_blank_lines_around_single_line_property=0 -csharp_blank_lines_around_auto_property=0 -csharp_blank_lines_around_single_line_auto_property=0 -csharp_blank_lines_around_invocable=1 -csharp_blank_lines_around_single_line_invocable=1 -csharp_keep_blank_lines_in_code=1 -csharp_remove_blank_lines_near_braces_in_code=true -csharp_blank_lines_around_local_method=1 -csharp_blank_lines_around_single_line_local_method=1 -csharp_blank_lines_before_control_transfer_statements=1 -csharp_blank_lines_after_control_transfer_statements=1 -csharp_blank_lines_before_block_statements=1 -csharp_blank_lines_after_block_statements=1 -csharp_blank_lines_before_multiline_statements=1 -csharp_blank_lines_after_multiline_statements=1 - -csharp_type_declaration_braces=next_line -csharp_brace_style=next_line -csharp_indent_inside_namespace=true -csharp_invocable_declaration_braces=next_line -csharp_anonymous_method_declaration_braces=next_line -csharp_accessor_owner_declaration_braces=next_line -csharp_accessor_declaration_braces=next_line -csharp_case_block_braces=next_line -csharp_initializer_braces=next_line -csharp_other_braces=next_line -csharp_allow_comment_after_lbrace=false -csharp_empty_block_style=together_same_line - -csharp_for_built_in_types=use_explicit_type -csharp_for_simple_types=use_var_when_evident -csharp_for_other_types=use_explicit_type -csharp_prefer_separate_deconstructed_variables_declaration=true -csharp_prefer_explicit_discard_declaration=false - -csharp_instance_members_qualify_members=none -csharp_builtin_type_reference_style=use_keyword -csharp_prefer_qualified_reference=false -csharp_add_imports_to_deepest_scope=false -csharp_allow_alias=true -csharp_default_private_modifier=implicit -csharp_default_internal_modifier=explicit -csharp_arguments_literal=positional -csharp_arguments_string_literal=positional -csharp_arguments_named=positional -csharp_arguments_anonymous_function=positional -csharp_arguments_other=positional -csharp_braces_for_ifelse=not_required -csharp_braces_for_for=not_required -csharp_braces_for_foreach=not_required -csharp_braces_for_while=not_required -csharp_braces_for_dowhile=not_required -csharp_braces_for_using=not_required -csharp_braces_for_lock=not_required -csharp_braces_for_fixed=not_required -csharp_method_or_operator_body=expression_body -csharp_local_function_body=expression_body -csharp_constructor_or_destructor_body=expression_body -csharp_accessor_owner_body=expression_body -csharp_force_attribute_style=join -csharp_indent_nested_usings_stmt=true - -csharp_builtin_type_reference_for_member_access_style=use_keyword -csharp_indent_nested_fixed_stmt=true -csharp_indent_nested_lock_stmt=true -csharp_indent_nested_for_stmt=true -csharp_indent_nested_foreach_stmt=true -csharp_indent_nested_while_stmt=true -csharp_use_continuous_indent_inside_parens=true -csharp_indent_method_decl_pars=inside -csharp_indent_invocation_pars=inside -csharp_indent_statement_pars=inside -csharp_indent_typeparam_angles=inside -csharp_indent_typearg_angles=inside -csharp_indent_pars=inside -csharp_indent_preprocessor_if=outdent -csharp_indent_preprocessor_region=usual_indent -csharp_indent_preprocessor_other=usual_indent -csharp_indent_switch_labels=true -csharp_indent_type_constraints=true -csharp_stick_comment=false -csharp_alignment_tab_fill_style=use_spaces -csharp_align_multiline_parameter=true -csharp_align_multiline_extends_list=true -csharp_align_linq_query=true -csharp_align_multiline_binary_expressions_chain=true -csharp_outdent_binary_ops=true -csharp_align_multiline_calls_chain=true -csharp_outdent_dots=true -csharp_align_multiline_array_and_object_initializer=false -csharp_indent_anonymous_method_block=false -csharp_align_first_arg_by_paren=true -csharp_align_multiline_argument=true -csharp_align_tuple_components=true -csharp_align_multiline_expression=true -csharp_align_multiline_for_stmt=true -csharp_align_multiple_declaration=true -csharp_align_multline_type_parameter_list=true -csharp_align_multline_type_parameter_constrains=true -csharp_int_align_fields=true -csharp_int_align_properties=true -csharp_int_align_methods=true -csharp_int_align_parameters=false -csharp_int_align_variables=true -csharp_int_align_assignments=true -csharp_int_align_nested_ternary=true -csharp_int_align_invocations=false -csharp_int_align_binary_expressions=true -csharp_int_align_comments=true -csharp_int_align_switch_sections=true -csharp_int_align=true -csharp_keep_user_linebreaks=false -csharp_keep_existing_arrangement=false -csharp_keep_existing_linebreaks=false -csharp_max_line_length=120 -csharp_wrap_before_comma=false -csharp_special_else_if_treatment=true -csharp_insert_final_newline=false -csharp_place_type_attribute_on_same_line=never -csharp_place_method_attribute_on_same_line=never -csharp_place_accessorholder_attribute_on_same_line=never -csharp_place_attribute_on_same_line=never -csharp_place_accessor_attribute_on_same_line=never -csharp_place_attribute_on_same_line=never -csharp_place_field_attribute_on_same_line=never -csharp_place_attribute_on_same_line=never -csharp_wrap_parameters_style=wrap_if_long -csharp_keep_existing_declaration_parens_arrangement=false -csharp_wrap_before_declaration_lpar=false -csharp_wrap_after_declaration_lpar=false -csharp_wrap_before_declaration_rpar=false -csharp_place_constructor_initializer_on_same_line=true -csharp_keep_existing_expr_member_arrangement=false -csharp_place_expr_method_on_single_line=true -csharp_place_expr_property_on_single_line=true -csharp_place_expr_accessor_on_single_line=true -csharp_wrap_before_arrow_with_expressions=false -csharp_place_type_constraints_on_same_line=true -csharp_wrap_before_first_type_parameter_constraint=true -csharp_wrap_multiple_type_parameter_constraints_style=wrap_if_long -csharp_wrap_before_type_parameter_langle=true -csharp_wrap_before_extends_colon=false -csharp_wrap_extends_list_style=wrap_if_long -csharp_keep_existing_declaration_block_arrangement=false -csharp_place_abstract_accessorholder_on_single_line=true -csharp_place_simple_accessorholder_on_single_line=false -csharp_place_accessor_with_attrs_holder_on_single_line=false -csharp_place_simple_accessor_on_single_line=true -csharp_place_simple_method_on_single_line=false -csharp_keep_existing_enum_arrangement=false -csharp_place_simple_enum_on_single_line=false -csharp_wrap_enum_declaration=wrap_if_long -csharp_new_line_before_else=true -csharp_new_line_before_while=false -csharp_wrap_for_stmt_header_style=wrap_if_long -csharp_wrap_multiple_declaration_style=wrap_if_long -csharp_keep_existing_embedded_arrangement=false -csharp_place_simple_embedded_statement_on_same_line=false -csharp_place_simple_case_statement_on_same_line=true -csharp_keep_existing_embedded_block_arrangement=false -csharp_place_simple_embedded_block_on_same_line=false -csharp_place_simple_anonymousmethod_on_single_line=false -csharp_keep_existing_initializer_arrangement=false -csharp_place_simple_initializer_on_single_line=false -csharp_wrap_object_and_collection_initializer_style=chop_always -csharp_wrap_array_initializer_style=wrap_if_long -csharp_wrap_arguments_style=wrap_if_long -csharp_keep_existing_invocation_parens_arrangement=false -csharp_wrap_after_invocation_lpar=false -csharp_wrap_before_invocation_rpar=false -csharp_wrap_after_dot_in_method_calls=true -csharp_wrap_chained_method_calls=wrap_if_long -csharp_wrap_before_binary_opsign=false -csharp_wrap_chained_binary_expressions=wrap_if_long -csharp_force_chop_compound_if_expression=true -csharp_force_chop_compound_while_expression=true -csharp_force_chop_compound_do_expression=true -csharp_wrap_before_ternary_opsigns=true -csharp_wrap_ternary_expr_style=wrap_if_long -csharp_nested_ternary_style=expanded -csharp_wrap_linq_expressions=wrap_if_long -csharp_wrap_before_linq_expression=false -csharp_place_linq_into_on_new_line=false -csharp_wrap_verbatim_interpolated_strings=wrap_if_long -csharp_extra_spaces=remove_all -csharp_space_after_keywords_in_control_flow_statements=false -csharp_space_between_method_call_name_and_opening_parenthesis=false -csharp_space_between_method_declaration_name_and_open_parenthesis=false -csharp_space_before_typeof_parentheses=false -csharp_space_before_checked_parentheses=false -csharp_space_before_sizeof_parentheses=false -csharp_space_before_nameof_parentheses=false -csharp_space_between_keyword_and_expression=true -csharp_space_between_keyword_and_type=true -csharp_space_around_assignment_op=true -csharp_space_around_logical_op=true -csharp_space_around_binary_operator=true -csharp_space_around_equality_op=true -csharp_space_around_relational_op=true -csharp_space_around_bitwise_op=true -csharp_space_around_additive_op=true -csharp_space_around_multiplicative_op=true -csharp_space_around_shift_op=true -csharp_space_around_nullcoalescing_op=true -csharp_space_around_arrow_op=false -csharp_space_after_logical_not_op=false -csharp_space_after_unary_operator=false -csharp_space_after_cast=false -csharp_space_around_dot=false -csharp_space_around_lambda_arrow=true -csharp_space_before_pointer_asterik_declaration=false -csharp_space_before_nullable_mark=false - -[*.cshtml] -linebreaks_around_razor_statements=true -blank_lines_around_razor_functions=true -blank_lines_around_razor_helpers=true -blank_lines_around_razor_sections=true - -# C++ -[*.{cc,cpp,cxx,h,hpp,hxx}] -cpp_indent_access_specifiers_from_class=true -cpp_indent_wrapped_function_names=false -cpp_align_multiline_type_argument=true - -# C, C++ and ObjectiveC -[*.{c,h,cc,cpp,cxx,m,hpp,hxx}] -indent_preprocessor_directives=normal -indent_type_constraints=true - -# Javascript and Typescript -[*.{js,js.map,ts}] -quote_style=doublequoted -termination_style=ensure_semicolon \ No newline at end of file diff --git a/CICMMetadata/.externalToolBuilders/New_Builder.launch b/CICMMetadata/.externalToolBuilders/New_Builder.launch deleted file mode 100644 index 9ca5b2e..0000000 --- a/CICMMetadata/.externalToolBuilders/New_Builder.launch +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CICMMetadata/.gitignore b/CICMMetadata/.gitignore deleted file mode 100644 index 09ecec4..0000000 --- a/CICMMetadata/.gitignore +++ /dev/null @@ -1,597 +0,0 @@ -### VisualStudio template -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ -### Linux template - -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* - -# KDE directory preferences -.directory - -# Linux trash folder which might appear on any partition or disk -.Trash-* - -# .nfs files are created when an open file is removed but is still being accessed -.nfs* -### Xcode template -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -### VisualStudioCode template -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -### C++ template -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o - -# Precompiled Headers -*.gch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app -### MonoDevelop template -#User Specific -*.usertasks - -#Mono Project Files -*.resources -test-results/ -### GPG template -secring.* - -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/modules.xml -# .idea/*.iml -# .idea/modules - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests -### CMake template -CMakeCache.txt -CMakeFiles -CMakeScripts -Testing -Makefile -cmake_install.cmake -install_manifest.txt -compile_commands.json -CTestTestfile.cmake -### C template -# Object files -*.ko -*.elf - -# Linker output -*.map -*.exp - -*.so.* - -# Executables -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf -### Windows template -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# NuGet Packages Directory -packages/ -## TODO: If the tool you use requires repositories.config uncomment the next line -#!packages/repositories.config - -# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets -# This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented) -!packages/build/ - - -# Others -sql/ -*.Cache - -# Visual Studio 2017 -.vs - -workspace.xml -cmake-build-debug -### macOS template -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -pkg/**/pkg -pkg/**/src -pkg/**/*.asc -pkg/**/*.sig -pkg/**/*.tar.xz -pkg/**/*.zip -pkg/**/aaru - -.sonarqube - -build/* \ No newline at end of file diff --git a/CICMMetadata/.project b/CICMMetadata/.project deleted file mode 100644 index 9b6a5c8..0000000 --- a/CICMMetadata/.project +++ /dev/null @@ -1,21 +0,0 @@ - - - CICMMetadata - - - - - - org.eclipse.ui.externaltools.ExternalToolBuilder - full,incremental, - - - LaunchConfigHandle - <project>/.externalToolBuilders/New_Builder.launch - - - - - - - diff --git a/CICMMetadata/.settings/org.eclipse.wst.xsl.core.prefs b/CICMMetadata/.settings/org.eclipse.wst.xsl.core.prefs deleted file mode 100644 index e28962c..0000000 --- a/CICMMetadata/.settings/org.eclipse.wst.xsl.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -CHECK_CALL_TEMPLATES=2 -CHECK_XPATHS=2 -CIRCULAR_REF=2 -DUPLICATE_PARAMETER=2 -EMPTY_PARAM=1 -MISSING_INCLUDE=2 -MISSING_PARAM=1 -NAME_ATTRIBUTE_EMPTY=2 -NAME_ATTRIBUTE_MISSING=2 -TEMPLATE_CONFLICT=2 -eclipse.preferences.version=1 diff --git a/CICMMetadata/CICMMetadata.iml b/CICMMetadata/CICMMetadata.iml deleted file mode 100644 index 48426fc..0000000 --- a/CICMMetadata/CICMMetadata.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor.sln b/CICMMetadata/CICMMetadataEditor.sln deleted file mode 100644 index fea9617..0000000 --- a/CICMMetadata/CICMMetadataEditor.sln +++ /dev/null @@ -1,29 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CICMMetadataEditor", "CICMMetadataEditor\CICMMetadataEditor\CICMMetadataEditor.csproj", "{189CFDC5-2630-46DE-A934-FF182F9F54AB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CICMMetadataEditor.Desktop", "CICMMetadataEditor\CICMMetadataEditor.Desktop\CICMMetadataEditor.Desktop.csproj", "{4D52B7A6-E945-4BDD-BAD3-0EB9A48FABB4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CICMMetadataEditor.XamMac", "CICMMetadataEditor\CICMMetadataEditor.XamMac\CICMMetadataEditor.XamMac.csproj", "{00CE3E32-7D00-4CB0-8951-3C27BF2D02CD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {189CFDC5-2630-46DE-A934-FF182F9F54AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {189CFDC5-2630-46DE-A934-FF182F9F54AB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {189CFDC5-2630-46DE-A934-FF182F9F54AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {189CFDC5-2630-46DE-A934-FF182F9F54AB}.Release|Any CPU.Build.0 = Release|Any CPU - {4D52B7A6-E945-4BDD-BAD3-0EB9A48FABB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D52B7A6-E945-4BDD-BAD3-0EB9A48FABB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D52B7A6-E945-4BDD-BAD3-0EB9A48FABB4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D52B7A6-E945-4BDD-BAD3-0EB9A48FABB4}.Release|Any CPU.Build.0 = Release|Any CPU - {00CE3E32-7D00-4CB0-8951-3C27BF2D02CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00CE3E32-7D00-4CB0-8951-3C27BF2D02CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00CE3E32-7D00-4CB0-8951-3C27BF2D02CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00CE3E32-7D00-4CB0-8951-3C27BF2D02CD}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/CICMMetadataEditor.Desktop.csproj b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/CICMMetadataEditor.Desktop.csproj deleted file mode 100644 index 05fddc8..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/CICMMetadataEditor.Desktop.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - WinExe - net461 - - - - - - - - - - - - LICENSE - Always - - - \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/Info.plist b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/Info.plist deleted file mode 100644 index f307f6e..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/Info.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - CFBundleName - CICMMetadataEditor - CFBundleIdentifier - com.example.CICMMetadataEditor - CFBundleShortVersionString - 1.0 - LSMinimumSystemVersion - 10.7 - CFBundleDevelopmentRegion - en - NSHumanReadableCopyright - - CFBundleIconFile - MacIcon.icns - - diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/MacIcon.icns b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.Desktop/MacIcon.icns deleted file mode 100644 index 8f385bb4a566b103508f8e67794100af1354a65c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114177 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

_xJ5xY4e=C?^i2tFTK5P<-I5CRJQvn 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 SL>L$t7(8A5T-G@yGywpmy?smo diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png deleted file mode 100644 index f4c8d29047b85e28ae6929073e0e6e7ad07633c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20798 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 J%Q~loCIB^EXWRe) diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png deleted file mode 100644 index ebb5a0fe4e7e4ac7ed527449ad2c0e9848b0389a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z|`pJ z;uvBf*gE;FpKzea@&Cqer#NK_t_<+;WnSCcd*K1QPRYYVM_O81FZNCpe{pC>;o`Oy zb_1_R%sUJY{$Nm3J2qj$fhLy?W{VbHZ8>&@Nw?&ep|f@I^6SOX%QiJlp0o4$y#D($ ztDo@|Y_ib2UF+GyRsE=droJ zGm+SwY!D%wKW+Pj@aW^YKT|!MqMrF1{;gt_mp6Z7{viI^wSBupW?xUM`8TgwbLU0z zxlQUutlwX#Jh@O>agOikh2!tL*YG7278*V-(>z)nR)bI6(Rs-n?IuE-PiFoyS)ttFSav3K2~oIXL^@oym{B{clYKszSy$&SK`u`TlMW< zw_EU~Ths zaSVyz+!`L89}+4OmwxWdoSnwTx^E{$xoJ#S(poB{lGG$%vgk+)`vvwmEknDH>=hS} zEOAl%@MgA3!h|*n;pFB{w>2RgjL~{i#nPjy65mZPdzXH0&f}<}_qUL$ z#G1v|Z?}I|)vZ6W;pQS|SGJN*PduMbRCX`hQfXs--D0k7Soc@a%_py%{JcjsUgy=3 zMJ$z5)~GnI-kqv^i&G;~S3#F)>ITVk^X>0%Oh11wu6%X&^0RsO6Sv+li$0^~?>ViN ziAh97WKHr-CXr{x3p7p{@${d5mo@9a_waRZtT+5WU~aZLwK+i~W|7KENr6VuZh^iVA zhS9~dSbFuhDBh?8|C-sWw?518@oliK{+7Le-gD8FD%UT^f3y%Ru)MqbLV)qZt1MHZ zx91&A-5C;N=*7&e^q|Z#-dQxx+t;_@nK3svci_PVQ)fp#J1?)y#MhoIoF%n&OE#y- zqKh}CEQq&dnsFjwYt-#ostWCg7PhaJWQ;Oh{!1|tIlgSD3nwe3G_ofleLCKPo?r1811!&07UmCW&{ zeV-P#`YI*FZ%)&mrEAR@rO{fUWSMMYvd1;trBT*(_uHjuoE{GYUR=z2*4Q(BietV( zwT;{^(di;5~!%xTNcVAv!zFS*c zE4X!%7~|7tA3oT>um7+xYJJ}Bj_=3%w=X~N;2q2NU11szvr_j=_4N9&&}wS$q4Mj; zAME|AzrVAu?aH}nsj7ZOYLidyp5XQS*mI{S%SGGTKtisx&i%bEZe%7o~=!%qGesp~jmx1*811CzD9$n)Na43k< ztxOBbOqM-0MIr5N%gK~N>6$NBr=`nHi#z`6V~x>F4ihhzU7Iw&H0@?qa+QmB?oK@J zw$%6J@e>Q4zck@L6t!Ns=b8V*x%#W4*NZYLDX}>##w#;j|IgcWLNXyJk5%&Uxo1P}Q81tqXWeVu1^UM(ZrGA1(DmdVRPU`KpEgXKO$!ImAV%ug7%3Ei`5p-%b6~E>g+u~b_=EN4Dt7TG(Jau zOP)W`(K}LfYL{|dkp<664!NU@W+BrLym*n}qjz%AHOmVxOA0E!iwQiD*=pi9L5!al z@ErRlzu2)x z;qj_-g?*x~XWA7d|A?i@s}&}k+!NNPJ8R?hZdq$T5hk?*OkAq` xmMgDZS(fr`!HmGH+DkS!*#cKBJZ`4_pZQJAuGL{zZ-Yu{22WQ%mvv4FO#o%3uXX?c diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png deleted file mode 100644 index f4c8d29047b85e28ae6929073e0e6e7ad07633c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20798 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 J%Q~loCIB^EXWRe) diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png deleted file mode 100644 index a142c83fb1c390d168ade09b98f6108ae5083f44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59335 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 diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png deleted file mode 100644 index 0986d31bebb1199716226839d289d54925f9319c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1484 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U~Ths zaSVyz+!`L89}+4OmwxWdoSnwTx^E{$xoJ#S(poB{lGG$%vgk+)`vvwmEknDH>=hS} zEOAl%@MgA3!h|*n;pFB{w>2RgjL~{i#nPjy65mZPdzXH0&f}<}_qUL$ z#G1v|Z?}I|)vZ6W;pQS|SGJN*PduMbRCX`hQfXs--D0k7Soc@a%_py%{JcjsUgy=3 zMJ$z5)~GnI-kqv^i&G;~S3#F)>ITVk^X>0%Oh11wu6%X&^0RsO6Sv+li$0^~?>ViN ziAh97WKHr-CXr{x3p7p{@${d5mo@9a_waRZtT+5WU~aZLwK+i~W|7KENr6VuZh^iVA zhS9~dSbFuhDBh?8|C-sWw?518@oliK{+7Le-gD8FD%UT^f3y%Ru)MqbLV)qZt1MHZ zx91&A-5C;N=*7&e^q|Z#-dQxx+t;_@nK3svci_PVQ)fp#J1?)y#MhoIoF%n&OE#y- zqKh}CEQq&dnsFjwYt-#ostWCg7PhaJWQ;Oh{!1|tIlgSD3nwe3G_ofleLCKPo?r1811!&07UmCW&{ zeV-P#`YI*FZ%)&mrEAR@rO{fUWSMMYvd1;trBT*(_uHjuoE{GYUR=z2*4Q(BietV( zwT;{^(di;5~!%xTNcVAv!zFS*c zE4X!%7~|7tA3oT>um7+xYJJ}Bj_=3%w=X~N;2q2NU11szvr_j=_4N9&&}wS$q4Mj; zAME|AzrVAu?aH}nsj7ZOYLidyp5XQS*mI{S%SGGTKtisx&i%bEZe%7o~=!%qGesp~jmx1*811CzD9$n)Na43k< ztxOBbOqM-0MIr5N%gK~N>6$NBr=`nHi#z`6V~x>F4ihhzU7Iw&H0@?qa+QmB?oK@J zw$%6J@e>Q4zck@L6t!Ns=b8V*x%#W4*NZYLDX}>##w#;j|IgcWLNXyJk5%&Uxo1P}Q81tqXWeVu1^UM(ZrGA1(DmdVRPU`KpEgXKO$!ImAV%ug7%3Ei`5p-%b6~E>g+u~b_=EN4Dt7TG(Jau zOP)W`(K}LfYL{|dkp<664!NU@W+BrLym*n}qjz%AHOmVxOA0E!iwQiD*=pi9L5!al z@ErRlzu2)x z;qj_-g?*x~XWA7d|A?i@s}&}k+!NNPJ8R?hZdq$T5hk?*OkAq` xmMgDZS(fr`!HmGH+DkS!*#cKBJZ`4_pZQJAuGL{zZ-Yu{22WQ%mvv4FO#o%3uXX?c diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png deleted file mode 100644 index 412d6ca9b42cc0776ffd2cf3a35c3ace3a337e50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3428 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z$@qJ z;uuoF_%=E_XZBN3yM0H>-rVq;Q+?~gge{uBLAP3Nt2z9MIJ)#zKxSg_Qp1IRZ}K1E zZ)-X7@6CNR#VuYuYu~tU&CG~7;(Ar>T2QH0z%{3ru3IuE?OM2Vw_ncltmE5%d_MQN zu1@%P;hgh+67RMw-c$Gfx$Sey=X-13e{X&9za(0DLGnw%f6qC+q%5Zt706i>Bz$I< zm$_a2@zK%v@AqXY-oLoGc=wJy3JM3dM0jX1%=EID5nuUq>Mh&qZza33vaC+eeY$%N z-*L0-%*^JSAxV#_ZqBn=d|SWZpHw?5U**N`j13|(UNhd5?S8rSdfe?>*Der->I-kKGKgxop&c7b=3v(aY%b$`k^ z8APrYH<x4 z&5PD9T^hDSmu1S^)*4RNg&sQlR?G=8+O^>9l4H*!8%qW^-g{*gU7*# z+f?6ddlnvFyLD;q^K<7;b)8z*#g$$?^X|o%wBLN%x@t>~nc*3^_eW;_y7lV! zC2i5N+a=*sGb5Dr?|Y~3>MQBJ>}UG4?AM3G$@(^bzXaDOg?+5KvGy4wgPXnGySMBN zlZzFDbay)xmOW2Ws*uk3EZbXN-14%W)n&8p2CwyQyBL_9BJhxmp4n4HX&Zr% z*xvx-S5a>5^oy3DNz)cs6mnxkCt_^mE4ab8}{P9ZUL{WXFBL z;R93m&6Lc%JiXfi3^O7t^d!Da{ops@2 zc2`QBC|ywdT<;G5vst%J_bgkQc*p$VTj%w+85@4>vicdYZ?`|kvzHID#X0}g_XzUu5{PwyZ4-QwT-7sKSkbma+>;mON>o+XD zy}dWM5?7i!Ua(>nT71}f<=h1w`Rz}>MwE*3InOF%(q%Bv_lnt7@={Ca=o`jIX;Rmd zpFXPMVaS=muHoJ%Q}{V6;?DKtHHL93Z|0^>opYtccG*?tDGmw-@_g>kx^FT^WHyO^ zxUKp4-{0Sb?mL#TXV~8ATw9P;b!_v>ePzYjP&w1Kc@923G#{IYA|G(Y+ves?k&n(X~{bUfBIfv&9GlN}@0mDzu9n;t< zYQH@{e@Ddp)`=?@+@`W^-Z90+^1|`A>p6_h7FNZUC_3$(oc!fiXa0-wcDY5l(a{@4 z_Z?SMf6DBT^k&-f>h$W{!ZX+wzBtBIP232b4#Qiap zsCgyo$g1usX67|_Z|f8X^V)mQ7v6fMRcXuScu_|?GnV;+<->O`fBKa%>BKBwUzu@l zSEmzCQ%HnY?;oYYs>-mh6Mj}qa!dbV-L%Q~%Xe<`lWFC7kL|MW@ny0yBx}9j_gin> z@e1`DH#Q&GfA?{U!SqS~&qeZhUpEPOK3%%|bgHf_%T2RGvdm|cr(C!^y*ZdSX5X{F z3&I!-+KS%Y+4(X<=iK$=sC2$vPnRXA_&vWPEV3a-jCX00k>7h=#*3;nZ zxqkbShx3lV+F5^Yu7W-&nV02VYxfWS5VJwBWY=+LvDwXOCwFE1EpdIwdt&+iFYagp;-JBEZeM;<&_aD(&OYewZpfxBPYGmdQV+_8OwPXC4_3JwwL_H5a*>fNRF zZDN&mGIW_U(S zyBtts`t+jP8;(V?%XiLa;5U@`D9>?mZ9-6ac(ptG%P;nVt&w$~7#Z#g?-8x~q1&@* z-rNQ0IkWy8wBVI|)w&>nE025O(=v5_8;$0sZpW;SB0hziZp%__WJ6c1$~>;O`|P&4 zbyYjKpU#}3&mf^K#M8E{P)4sMA@a=MjX9z`F7>=N4vh=-CchmZbGT<32}xK;xp&Xls(iv$!Xp3v>%G;v%>!eu1Z<0 zugP!QqW4ExWMbi}7_AdGQ@c*>xfQu~@`D9>N7P-qvxBoc=b3$u3TWI^a!Q=xOYi6F z$=4@pJaLIgx)4}lwH8l} zw9ERozM|ozIKzplAF7UV)v0NiN}f!-80?x+;#rusi-T$TbP;v|?^E4oo7QHuTWyK( zoB4Cbb=yfj?SH?#ls|kr`q@W5-L=V&R?mzEqm6{kBxpGTZ z;zG0QD^GbB9Qk$NmZRg8#wD9hc*|w={#t!qb<+K~AAhWT`}Q4HP1xAO^^xIeulc{w^}Q>h9Lcz)+}UTw~j&f4smpjN|Gq znJ*{$s)~N?{yBHvDaE^wk^&zmUA?vHCBu{-!HZqrPh?0vby4W;^4i$)OWgMNRcr@?byI)uK%jAx|_S5}cD~(htw4cmPcpk?f(6#19>?Xcxkr`&QU#$GS{Zjn? z9gbH5+&$+8?l8V}QgcH_>6E3XE+=m}tFmvCZ=6l-qneTjk6x$8+y7&|e!lQTm1R^1 zd%_+U|MK;_gr8I@9ocL>Pi1aRadh;%1$+6oT&^t-yLj!!*(pbZKhG8vh?dFbZe6Or zX6YV*bG6^9OiVtT##+~PeGZmUN@(2Wqs79Ycs@G+FKhU@)p7ljU#vE5YSliqCM5jf z0$o$RtlSj~w;ijxb*eCVt9Q-w_>=d4|Nr!{dh*5t5qBIN6AOOYC`@_k7<6wwlLxCx zu;9$?$I>4=zkBB>wXdq>beiP>+s#q(wOliqUQFLn^YfEW%lqSJ)E2KilO(qOjDc** ziBI#5{{((M)Kp)Tb?H5SPY)0O{T&a>zR$BN-PHg7z3r9C2OHP9FWMgvCI5If&r~sS z2Ze)Ex~`nj+Q0pr{QfCCZ2uhZ*I6C$-4tcJH+vz2!?Y7I1$m2hZ7M1b&P}yCpJE}@ z>-Xc&GzN>u1WFUpF5%c5ZxK^0s+@;runX zW!!vKO)h53nZSQ0Zju}<$I_S|#|Pg(X@B8NNWh0D^S5fezPBSxeVw~~jOA{N10exS zT&E`ZdhR^!IXmsxgHH2Zp)woto7ao|J;?r;@k_MK9~qO#`L|Q;WfnLwKV)Xvqu{_Z z>6#1A!W4(OA!09MSOgZBG&roe>QIzZYE|gIc1dZ&)gP(fuCIEL_2<%Q)^!nJ>zaJK@^mbh^(Jj-SRm#!PVdkv7UAuO_Shw!gtoAi$R-HOC`*8WZ9p88E ze1CF>`Fq=`hkJLNKPkHN`_1(C#x{cH-};0Ll@@t;a&RyzDzLOP2naAaISdKT3f{(L zx2`PJg*aN$alx(6|AX9)txl}q2&rbMNIS&^_K^dZz=~%w^Oppld>O9g&8YH9Nzmig zM;&2Nus<716arqx#I0L1M@HGN=+nM4=a(~Ue%;jJu#|bh3KcgAs(?=>ME= zZ`k&&JKv@`_8Co^Y!w*D7N_aT@q^vDYuCDUVD|;}IxPL1A2d^c^^|l;%?7VWv**hA z?R)#-;o;c#mFKJ9Srt7wvGL>D=ze})Uinw=-rV_~A7Az6|Id~4f32)9vMTw-!!o1X z^{CMYFHJ`V!FiJ)@wY~v>DtF%YgML3&U~5}t(X7wiSE;@HMdX4|NC^WeBbAV%HQSg z)aNACoZi@Yu(5jg?pj zy}wGGrNzNYV8LeJSGhZlw71*5+VJyg#k9v+a?ih%ZQpA9<%09${EEZUefhVyzWy=o zW9Q+$du@MLS67v7+qUIO$vycOZ|&c`a=zQ0=j~PW$8*IJhp@|y6PiA*=mw>^#;-07 z=ge02E-{J^(>!k!v}NLv?G~2H-rjz{>-9Q6^W6Qv_f6mX=EpVN=zd=QewlYKU*5WX z_onH+J9koY1H%Jey?t-}fXDi-*<&+%j)u?f)?7?79GTu+441YYzY?#gz+%SK=ylF` z<(X4D{rje!j<&4yF04Ct?cb&8`?fsa`@Z)5!)iVm3p+Erx{`u~2La{f=g+-6*SD|b z*W8S^LHXt1&BCSAM4xeOHRAX%*Z$W!hXo8lQXNbUCT~=~26AvTesusj{#{XOSYG9o z#Lufg>ah2&f95D(^Wose`4x|)``_N$`}@d|8%Gx2+jp<}?v}rO+pdYd$nna`&wni= zBlBig-QQojml;_YWtfi^{c}-Ly>h=%^X0Z(nxLe$LaNd0`A%5ClxTH6-%@*fTkdVE zd*Anczx#CEtNz@(`~Lp8@ZrP5efRe5wY?jgoOey``>oe{e{atJd((ga@4N5+ZF+s9 z>Gp#^Z`qFLn@x$aHpd@aSbNcDpJI^OBU!4Dc=KP;C z8|VLSjlWTU-j=z)2)Y|guU@UZ*);<>-ew_m)Nyynh@ z{J6i)ZgNFSt=t?K9c16jl=^aTG`g@nNSPF5S`>f$S@`2fzEhdMua)n4EW0@W*UkC1 z`>L}~5iS1NE)o}Jcu8tK+$HmSm5&y9=x{QTSNKQznV`Ml}(d;5L4x4$JT zFIH}^uC97t#(&~r=I>o|w)r#Zg_s#xv`l5F5D?I2Y?!+L<*NIQleR5kP{^(J`76qF z)9HX!Tz!gXYFJw3jcKQ&cb->1pZR;+_5J_8{@wrQ^!`2X?=`pk_xSh7%D$1expMjP z=H07TCm+y^ir&9|=DF`*zP&4Aep4VF#&qE3Z+=E5X;wzQ786xghRj>huT~3q=rc{7 zlO8m4YNQ;;jXzm7ryUFTb;nQo{B8UG+9&Dv|2$i4UH;a}(9o)GN&SNJdwJJa&z`;Q zy%V$7QjQ(wtVuf+)0_=%Gd@3moAH3?>^b|H6>~iq9d3P_@k^WKl{ll-?Im*4v^N)> zUd%UJ-9KvGo|IenY;*U&cCUXk_4u~j`$bIex5>YFzx%f3W?kL0XJ^je=6{QGq0yaZ zKMt_l6^2_VdwXB~g9W?o_aFDY&2QzJ-TiF} zlVHWu?6~41tPJ-HpB=dp^r7fqo)^YW(Hip#EdYJT-8^l@G~9bN4LH z&96Ki-FENO>HRfV_NqMp@#Dskjg5`}s_)$T`Bpaf;}+Z83)3!HDQrmo&9{by;oQG% zd}~*p>UD5nJm9uqjaiGsU!{PPh2S7bo?_-dZ%d5j^0&9|e6qC3-Tzs1ecb`u-2JTY zx0RoM_3O^%Zy&eVuKP9BjI;6M$BoVFGJo*w;o&YwR2e%iC5i;J{BU%vFnYv%gN zQ{KOPCs$hZCi+csy|>ZCHRl8aU=hyAap9(#$W)8m=)7DVe%aank0z(g*mnGiyrVt>b^b3YWjVG5NXS_q^ZAd-v}BZJ7IhpY8h0YK1*)nT3THV~_ssvlEZMdOhgx zn%SHjp6{Anbid!Pum2CqPSWS(j=NkcWRz6m2|BKIRhx;6;Z^DR74c3BzOcN0oanz# z=X0uAe&q{e|E$z$`hK_PTNEyO{lD(|?r-w8HD6}zo@H-nW7D$w=k8s*tlICo=j7OK z2Vm>P_a2~6Ff6ku7;?6-F_ z7sIPs{+0E;4GjJZJd=IFNqb++y;CQnqe{N~=;)0OD=#^JZ|`xpajadAb=sje7BSANeiZ_e$&8BhK5tmCjThf^vFG@?s<7#`fq0bJ@0;8 zlfB*7+tVZS_U+5t*Kc3mdiCs=S9>6n{x9e{_9W@(Xtlh7GBw z#n!NF&<}i6nD#P_FE^JVYeLi)=llt>YZLP%m}~^qOlO2VJDqdy(~ADeAnnaI>!01` zle4+;^j=%}_eN*;cegjCK3cKczW&78x%*G=<;{1w{H-A;H|XV-+J7snEpBd|wJm;j zoZj`OeXUClE?ii9jxU(qa{EV%Eg|RZS#J1l3S`*ed0_R;E6N8Z$6a!mbZX6+PaE{7 zZ!h{Z?b5~V|DX8(OW9w&|L?=y@9)(oRir$bVI6q?_T9TXH?Lm2SbgEYC3fE1xR_>a z+kX00g=zoGFRcgEUx#NF-R&xTt*G+#`?tKpvJcW0d^=l1RA*Z`fa;bvETs$c1VOEl z1XycCW#1f~xS;26ZrgoX$e&w%HaosL=lZ(XY<>uvY7cSny#*y$+ z=GvLt)t`5`@4tEZTeiWLB+-S&40%7(j$gPC@O*3b^<`aCb=jG0>KwlsEMQy_7s<-- zbyxb8^}Q|)>g$%6O+HldR|{YM_U&JGP`&DEp~k6~zx`bKyK3&X^+ge(E1%x!Vmgz-qH{0f*WLU7{~nhA z`Jr9DnD?Q@vyC|`=hTN*Cw`tP!jSXNE`Z;Rk8$3TNl`vXN%K@@^`6^x7xrpAe-Qio zyS%)-to5_F%IXd4x0k!8yI1Es{q?M!mLtmIwfybe=K1IKSI?d~yZrLEAFFbc)haU1 zFqQ1u&U9^-pNw_mREGE>>Avi|tzpW4;X#||3kup*TViHTjg~9DQ6m)Z*LFYb&!jou z_y7MZyuSADYyUTQ_Wix_;l_=L`{v1g7o0tB?c3b7Th|}oWU(B|}^VRBEW%#<)UTUlPR6hl9wmxtH+~AS2 zuDtMl-}k-3>+Ao%?$5ow_4Sb(CvH64w{IS(^}YR(W`@avlII)`GJpTsQv2_rwZ)P@ zTmIJkX}C3a`vNH~MFA;>9SP#+SA2NL`1`kFf7-!pH3p9>g+UAf$F0?yV>hdF)K_?> z?pqTyFLlWZ`_AKAYTvwQZ*RA@`*pGZUg@8Gzx(oM-l$5-NcoYF@BiKI`=mJ+r#(xv z&3*rV;Q^a_ZSK$If{Rn-BbJ`I#=v;TiqkWq^HJE!H$Nxa|D2qCPHw;9|ME7QIrdMv zSY#x=&Jba^@;J`3e*TZc{!*UcHq5uDpTgdKJ|X`8{Qif$`7f$(-~PA0xm^Cn^Lg9k zZOse}3J%z|Y~Q^)`0_VTYmE@I_jaDA%WsLVtbY2ohS@$>zU!&mji>j^HwbLq{)jI; z_vP{WKgaubFg&<@jBCH;Z)+3Rq}QU1;M{lV;`$={A6ZZK^_^XRY_p8Waf4;bx9|Nt zSKjyc%K1NMKFZ$SE-x=DX?yGb{q6gA@2-xnj<(75pIxF5y?pPHzdtYeU(%~ztM~Hu z=Ta-4($x(NVZJRa4A$lE?V?sN?brUhEvU*xlfmO<-|Yi=;lB#ir~cgJRXJ^9QiNws z;jMeMTbBJjEdTFAtbX;)(|!HAiCOhnYk8TjjF&PMZg79@y^?V%Q&@w?bggvVV;(vg)i1rF)9ac4S}s z_{&!v-0T7M*X;UjmcP9n_xslMZ+rjBzTffvz+QI$9zK3qX$cvt8<($dUcGv6?SZ{} z&)oV|8@i8;#UMAnsD9rEg}8Gkr*7(J$h+FIWZ}VuchB(|=NEH+`%!!9r#eG$z7i|L z*KO|C_S?f6pSD{;{kP^vUbc0f=kotO%kSIwGQIxW3%T!G{yw;HV&cKZy6=Ls^?YuZ zSAE^RCWwP+&NlsZ^ZVrwoz`D{c}p$FqMI8zYXvUsomO>XVL~|5gYvVw)(ojNDqIYk zb~eAvnd~+lscn9upedvL`@`EGw*2k?)BnFPCn@Q4r{H(bTle)W&Wb)R1>xBI%%lbyHj_0w~VGdLY)rm@Iy ze4Qr3aOJk#%C+|2+@D87nnutt+;-#Q{rdlZZTanfJZNlg=a(=4&e6~N<*WRwmoM*L zzI*lJ`pjyFJ!YPlzhyTs&MGwjaF>f$=Q2;^*H>xp`gSlph-_9q&o0n7{j>RlE6S@G z7RY@+b;|DH@en;#P)r53gHz!ai`@U)w(rgTAzt@Uy#MX3owsWzmA#0#f8c=a-n(~i z-}Nps$&Js`zp8P3OYNUYGMm%n!ao`3Mb2IJHk&2*m8jqW9fxxFxAT|osJ_21dEKM) zJ9wY7&(qf0w)D_1CkIA{zi;}z>=%Ihl|84Potzw|b^L10p4vCb^0)scudn#}ac#7E zAOG(B^X1=5-oAhNN-n?n^S2caFV6`cxGFyFYT?~Ie`oYQ^LZ~5e|3Wu6Nip7Q-iK> z^ah~=`wY0Bi|1uX?BPpR2wd*Tc;MK3iPtTEuT4HxGxKb;T&W?b!S(#|x3}tkb6(WF zSlIr~w&u%^j}s?8eC+J}F7x-iyzi6doKyUMOh20c%~U4A8Sw{hf0%at%yIvFyH{7o zJk{oGJnO=6Jk>)=PU_b4HwL8*Tz`sLKNbDsYpL?%Vz`$7{)aus?I3UoQf9Va>U>c^ z%*x~8pYv|j9jQI>?8Lgg)&4uCKaqL){=I#`jBUrY5^h<9X^J#f+_FoIl(qBRy<$yyH3N)wekYRD;=W{Hd~U4$p7H zxUlc;^A?h3&3@h^7A3V^VJ_#Cn zM&QufQhWR1;r892Zn~^R&5suwCw{yreE6NJRpDp@1MO*TvGC!LuW_k?;rPS z67Sa7TD{!w|GTz*U+IapTWxn`pTGBb@#4epl+B#K?+Cy5?#-JF zXuEal>}|(I|28dq%PcU}Q%caG;P%b9-zpC`Cbxg|Z8(0XtyseRxYkm}MmJuD7X^Q7 zLwfIA2M1!$?uc(%a{d!LT9sc%L)h?xN=w2fB>@9%*oqUFOEg@P_f!-3_zO zOpBKL2JT4}n#x=M+Wmgt?$6HqfA9V-cXZ3&7auscuX(p%_pJS=Ypdn_Z#(;E@(LX2 z_Vt=m^YCOfxVTuQw3*|9x$q=6H~062WfsR5GR@=Ho%)%dv8*{~lN`eb2bDQy@!a#5 zcuQs!-ukDTUwQh0{@+XbvNyM;_eY1BSCuT-|9?TX=sUjeZ-3@3cbER=Zo<&`XUpDb z`}l%)B|mn=_cJ(na&R=>65!xv_*M10Y{#?@44-lqy3T!^)m#_6b+Zh^4d#h8TScr@ zJ;f`Io_=NbX<~m){ngcS7W-$`Q79#wSRx#75yt_p4%_qd`U_nV9vJqk4OI2 z{JC&R%4DHdOM^fGN6S9$1*;b?zCQDF*izf{N$mR`mRbD^Z?DcTPrtsQ`c~ZKZw@)ULUEHOZ&~Aa z`CB%_x>W*9p$Y=Oq7ScH%wPZGaQWYl^8Y`YUhlEpzbN$C!#|bxLKPTNUa6$&GCXi( zt2p^t;mhZv<+u00^v##5Ic|Ngu;Tf-yXtpr*FI)$X8yio`@^@d-n@8G=(c6`He=ZTq!%LUn(puD5x`)Q~^(-sd^lE=jKi z8*hCtv+YYto&RD>r9xBL|A+Gb99DWGcYyS?MYm6?1|mq+6yxeOn<-| z`E5`3`IBA$vX7K1U)e0e5V7ZtV@LH@@5$zQHd~E@7!n*;we{P3zV_q!IQiShskQ%_ z&1P*|&u06Qqw$M^z%HSLga!HArB&z6p5-l}d+un_Kh6VJnl-c;8+uJ@pZC{%zA1jL z=KTr9n!Q0M-5G*ES8#N^-`qd9_TbB8uXs@UdZR2L#ZXdS%5PaxApLdO?KeNCKY#kB zdHN;6G*yNV54W=`rZLRg|L5uPec#*6|MG(!^X$@ z7pARSx9;HV?RmD(xmG;y+BCC>bN-T}SNAS^yLsn+Q!T{}VH`4dcB*D&9$UG2+n4bA zui^ZA|Gv$yzY+ORQ6Z;7u0eX*&je?N17|mS&F*!$md5bnj-&Us+uQTc-``XDIx64) z`-imVePVC*{cq1sEuFP3o;xG7T_7WZCGFX>#q-YH5_f%jbNl-a=C_yg9#?KpH1xTA zV6zwlL$zGPk~y3ab7sx6o4bu+LCURr(Q(t4G5gkvGC3{yCwRao5!Cz5VUlOv6wGe( zze%a_RpTOwu3tZ=w=y)aO9Xtae6mwFZcoY2m1~6`tG{CZ_jKMFb-&x^-DjK&7XnQL zPtuzV68d zeO1YvmNg}}_LaPf^S_;cL@q$u$$=xpi9!Djm*-wv+vqv6e>l(Y{3at4v^2+zp;3p8 z;oE`D?8%qS_kWG=-~X}q^?$tut~Ha)5+h~j9SE1$!|1+smH?BJ0te%q#ZE!))z!0q zmwA1^xjB7#&t6+`=N=os#w8OpbCsAXJQ^Q@y8)-T(Wp+|-|mbtsjW8KRrk59Gr%f<75FGLdXT`tvzvM{CWLt1a zP@0_;WLf^bSu=NDy?gU!toEnvbCvf;7CieY{`AS6?axbXu6Hf|0vc1!XDO(Ao%3A0 zZuR@u2M@Dv6nfB|_t-UJX>rk4QSair0tcoR-V)wxuu`_)mf@hjkFW3i&0JSMndhB% zdA|N`M?q@;>MG0sSraGE6A)m^bW-@z>JYs>*Z$S9m-CAaOHO%QW^rHkdsZvMf@!iQ z^*>KNP0uo1kmr6N-6&IA3p8f#!OgUg@xX}>C+y7Kek&-n`7HOJB_<)YXnrI=!=K2; zrJK{^YK&6Omu*RXndiyDv`LW3X@Q`?f!z#FmmKQv^QE^hZ7BJ+MDgm$G-iPlRSX-L z4ynuifA>9{W3|AROtuAFQBR6`E-afQ z7=DERZ84u#|FJv1W?EBJMz(kHm1~n)U4^&yMD22N;4qP5`eBsekyYl+{_g?*KZfm$ zFTSkZyqqUA+HQ&F%{78dkvt3>yv&Rj9(|j6zUEm`UY%V=pZ9h~jKRyBqzg~X7(c|ia&q$K5zH=%wvITvqTuKbj<)I77t~n zg^Uj2;m;RHzt7TUyu{(D_Iu7$h6R_-MGDH;{CZ)}x|e&w)wN73{)*n5x@(ycXs*)X zFSuX)^pb9V?dxduI~^8Z^Vk16`FqPhhKvbvsiq7O55L^~_oU~*B~Y)SSkHOxtg_N{ z>E_$B&MeUZrx0GI9~F@=*w6gC?*Dg6EN6qEv4ldtX2nupCxvcC2HD;IjDm{qBXe`44#*ni(%mQJ(Ve-R-$k{$14ZfBifB|C!{T z2hY#PTgZP4RHzkJ;6C1YOo654fEK7AKg`@*zI)Y9p#$aL>guM(t*EdSJQ2j;p#DDi z5qo7}^}n5$qc|N>Tv|aBxN@Md%+G(nW3|@HScam1a>r)RJsZR@p(XX=!`)7wE=2!& zR$u$LQ>FQ8O77ZUatE>`R>p8}G=5Pwu(p>s>FE2mZJTZNw+DwEJo)Au&1c)Hy4c!T z;WQ(IOkGgdQ~vr#!sk^**QpiD@9FrW@E}VAta*#_gkpKtsG|F<93H;%zb>>-l4JQY z*X}c;?}-#$ffHE_2NsK&6k1n)da^cpdwO1L!wLok7So#?jEWP?Skj6TH#4yF%h|m; z#>Jk$eG9Ms=f7vO7$$6aEWxpWrzWo`>s8LAM_ER!467BF6e%jOY-(_LQOt0ATfY61 zWBKbpocwLVZLqYACz6NZ!JXVqeey-mp0A79RdPxz?6fw+3Ng)>oQ#SS(pb`p6W=pQ zNJ-v%f9&mgmIUs~q;Ty$=x_&F9^juqvM0zrWwTY3(}JkV`u+_ zpZGc!2A7h5k!{+g$)}?j4#)EJ78GhU=v8oUF=15R=@F-fnbQWm*=8+l0+0s>4c9TG0;GV|=^E%@L6Z^d5?0olF0EJ2Nq)2wGcWoY<) z)~f!LM{)4wVDXtNTeTQgu>MYu=rjy8681!fQ(y7K9yHqR-OeASK8V%Vl9@SGHbSU!G;jWp!4OY5vM4E8iD~ zF*g*2|K(xX@c4j!oK5{ZcE##IMhA{8P#LR`3rfy^Yiq0TMC=q1IJ}MT{wIy#TP)!6 z^4xsC`=`1$EuUX!mZ93f)Zl9ob#;k=0FyMR-*DmbUDF3vyKi|l@XGf~#keVSGamT# zBCN=a!{Oy6`+tv>9p5u$l&)sD)4WbQdV&jR?tX$Ii<3N4$@3G_;{RTazx!yxfzC^7g9DU6|MJ6vO zyZ`?7);30Bb?Ki>>AJMvv%fMNxL;WC>z`SDZPBMK>mz*Q7#&PCJl#1s8n=Mjdp&)< zj~6>sWJ@tKcr$XRGadk^7e0oH*7!cAtSM*X_Y^!#;dm#zHsawT6;J_o!VFZ!UHEVz zmTzX!cdw^^%zth;nZ*!r@+EW86!GoP=hy4KaCA7!kn`!{>SwJD0yhLe-Pn8c?r~ms zWMTMrYW|;E3xH%(*O_Hwa?RTplg);`Op0lt0ZCdJP83uu1tI8)Yf1DJ5`MAISePK$L z@7pNO0PU1Z;!I8ot)S#TSN84Qw|b&&KF|5ROw|Tn7N=EH z&&n!Y&|qXpOj2;jdb)Gv%9Y+CSDZja*%q*+QGy(Mc{e0KFRKx~pk`Gc6s=a*EReB< zfnkH#^1r7?Xf3sGx0WXm@zAo8i~*-(|a3?GO>z8r7a(x!yJPx^N>n z;yji-nYq2>@X6((T`K z$x3;`SB3>bHP?PR=fB+i{{z2&n2|woR}{eZPJ>y}{^-vYHAp!S0UmtaIh zOwY5s?Tt>CUdMf}vf;>>YhCfIR_anqPL|7piA)SuW%HSgPTlcpc$saQB(Yi>Ic2jm ze!o|1zMm^Yw*FSz{FVRAf*2mWx3H+KpS|C%^08(7##wuq8nOZ=^?{mG?g}Oh64LUv zFOJ=NWX8rYjY;erQ$zSI1{Nt*h6kc`mRu_W&FVj1YMrdO1H}@Cgp76a=uj~ad7+r45lul}weaK|e}ym3x6>w_@wR-O$nW8YUzuT|af{>|SS59v)S z85`ZW87i(cspUOCH+OgK>u+byN*U;^dS%(5B$Cw9AaKHf>D}Q>$Hlw9KS zEM$7mI~kC!Ndn0V4Mra_s@NLdfK@;ma<=b8CV%sT7A13si?rh zB*?+bP*q*MZKvALP=_sg%jI|QUpurWkf}js&5Iv_#~Kut_1Ay@?a0^=#-wskXC|n9 z4=P>?qs{I`?qgy-WnbTgPhkNbmyCS1YN)H#>MdBgXhN0FMgbytT)%H z(kMgKp?Y;3JCDFrP*MTaln&+P*BhMK7#W0Q?KCR2+1GFJ<1h(g2;g*LV|D%Y;V?gY zy$Hu@#wp-ckdbZ*Ulbk6>vHNo9Aw{ao%7;L?eX`|H}gDR*0*+|ZRo|D;@=q3nUj9q zJYV;15~OVK+{GIp91|o4F6DJ}^xS?J1b9?EXuST=(c%8Z+cvAdepd87xr~XaSBl}n z#@`|Vfo)S6rfVmJZ}VVuh|CC4U}*F2acCB7#)PRm~nK-);ngtyf0U+qrs4oeeldQNDKBh#~IdrJS*02 z-TGBkztVHQbNjjbOh*+CEDv-4Bc*WR1tY^;`-LfX%j$n`um9boy`aZx^`&LYmaW+A z`<^*MR6`TgEy!Xi;_jXptt)EMR=)4^+~Yk9-@p00Cs1^E7>7v_s5>!5xjq%byKc+Rjb?{?jZ-uu54{;!(uBWnJ zUm0BR&STo75#!-U}Li7JnxMAEDJV&&(t#X z^j;l=ycx1X)r%*Zge-bq_%Ejv@M z1cS=Mh(}+zxe6OTyv?tF{}I$hd%HG@bAyzdmN=7>!e5Rv=gzb9E?T^JZ*fM(io=r8 z$NA?;ze<(VO!3NYX<%x2dYhrar0f@~6gz9b-LL-hZ3%Dpl?!Tea5(ybo28tMJMYwp ze7Y&}{Nil89|!s6G>M}nef_Qt^f^& zv)C4h!5b;O48ML?mG3k(W;pO+?cwb;Q43eTt~1YKNSJG1E+A|7XB78&44)U632Z3(Sl-aU)Ntu# zokOOq?aw<`zMMU+Xn|6t-)5*Td;ch$ak5PPtptzIdQpZocVdrf*N3~*{k!!w`~3Ql z*w{r338g(t6j@pvehG5aDnIz~!y=BYC49LN!v>K93hTG#_H%H4khAmsSZTWYj|L={4!wr7-=NW-I^AmD^Nr*7$yl1kgojs%fC8+bZ z_W_sY<|@&jpkiY2+|x1It5yYoyLeG7&&0(RA3b_>!N2`~W#3!ON_b&i`%E}QmCMnA z(Lv7Csw^N+Lvg=}rKP2D?eA|TaeKG@-^Cjs9d`*-P|xK!vqPV`ZHY5GpCUs;^Y&9WWbCsSsmfMR1%R#yIfXU0!(Cu4qC#H(%h zd*v7|T>LF!&0~~T`0vcj%~6~TDv)Z36H@xxM#q+#F-*AZf1rG=Yp)!G%0tiP{#gsMd-q=6E3o49!$ev8ioAxd)Fl%%?=muRF?bzp zUi>}SP@v+;<@t6`#lt4&m&vmP2?X#4T@qw+QaH=;P<}t63)6N8qBKWZsT;lm_ z^q_P49+vwo3qGs+staho+{)B&wR{RM&$B!q|M~HEQYsCR|BEtQX`8;KwL!o`9h}+y-|Lwt zu`x*4%&oU-^l)4+%AoUJ#j4T++-&&!V5K~ZF6$NNhK2ypEX*2Z0Xc?}@0K|~LLIE? z|DT%wY0cpsijRXC0wmMeSa~?6$^HKGeE!OuNinxx*>PQY6~?T=3EFh9smCFM;liCO zSN>dZ=6_pqmjQPItr1IL98&H>1S3jLGu*W_$`Ih+^RD!d8pGSCZ#s`y1+X$KU7%)JpS3}!{PVT7r$w$gi85Si znpOhxpf=OO%?!K0zp;#w*evs(?M)3U!&Jv-SNAV1zP>KbGWMp<&JaciBfUwWc+zD_ zE8e+)vA4fhzNAeT+;Vv35|`O404keR)_<71Vyf=E{RJP{Pp4fi=3-cN+-nx7jVIn1 z`Q7cn1QUY`_0u;WZf@}Gv-1?Y)RV)-p}}y1IZ@U|vmMu!TbJfYTw8aK zH50rY!9IxHF_2~dJKhMsIYL<297=D=89=HVSILi; z>`VCE7ceZ?H8-i5@x$lK!NK|==~1heGAt0`e+o*^YM}Id?6}$nkqf`n*ck23suf6E zXmNjHGmGBtdvK?6q?cX%B>mHK_m>#H=xyL);8+YAPKa~^_3Q~LzXQyXX@g+!d7lPtW9Mm8y%ej55pGi=L zjbX`@?t7pzER6lURb7Vh{M|)AKW$z;d;OIFh7Cf(;GzUH@_pdNixYM2ZM6ad4=(&{ zp41+rDZt3eu=K#ioz7X6v)gUX&9D9VCYW`f+9C#6Pu>gMJNx~+Y^UPwex{QT*B>@q zz@Q)*VpTcimP5m*h;L7X{cYyu#6_-ZXV8AUI0!U0+z3jVcW+*OF7V)RP|3f4Q|+JL zWXKkFTgb4W>Vo&2{l?M19zD00|6;V@+O%mL@@&xVu4LoR1J@aMUk&n=|8ao54Aidx zP5E4iv^yQJ?(~f(ty+h(=GvJ&*8bmg^3q{``cnSD7>EEmrj7;AmWgm<7~47hrtmQ6 zu*Q^?F;p&<5)5FNz#{=EA>wvaC>E$P%+L3H*8nP-IU02o1f&>v`1sxyK7JnLAkSr4 zFF&zi4^zX`1(EFiK~HuD&i=V{xxd}wekMUt*vL-?!-cz7O<%2gGihP93eAzrdAcFgkZ`VX=7I;!XMl;-cQ_~>*&no*QNzzq~S;CjTs z#%9ZTq%vV$axlXL9(_=mz$>}k;{TuG=-K|S@%K5RI4>-l&KTOi&jeI!=z@klW#8t?R)2f*vXFUu`0och8HJ}! zbXpd|%EZO6is9tS0~ddk!KU>R)K5!dd3NVJ!?Zi) zj7&k7ci;Ogw?|N5C8$qvJ~`xaJuAcN!$%iStzv7ZxGi7>P*P?H7?zqElD z5GB1mz z*0i+Yo1=q+%Jcnf>|IO^pA@2=`@8$+K3loDcOeS!zCf0Q~NLe-_w^YdqZ7+Xb6~rmY=jZOcR`O zy7er>4p5=+>q7fCiyX*2Fj#x2z=Y?KtO~(7bM20l{4@N2Lb*TY+*y4V*@snp2Nvjr zad0&HC~bH#jqx1oJ+_LYtK*JNWjNw?Zl1>-#!!X;*$U5d^QY;|-fd`G+j=M}!(BRk zd)7v9Dt1zcHlqYbgA!;_K)fgu7eiQkXZR2B9PnKG@6A_NN3XoNa698V7FQuf1s0=rP}mz7 zY`ERnxbl*U`+SwtGG(s~6<8Uj25#k(n{}divFc~<w+J~HGqePSaBwv0faXF< z%1iq!Vm62faPr;H+Zgaa%iV#|;q8ozi(dTTZd!VL--q@6n>UDcg)+QzydLGVL>t`a zmt|VW*zmg`>h$dUf6`bOJ^SXX`_Es-H^2AY2BwBv0_~UGH*JyN`13XX|JUw!&Eh(z zv%@~hpWDBgcl&lweJa3o(={Qn(D0Dhq`G&{>-e-8bCL`gX3p8~y38w%(P65CrKwff z{6%dM(@sBqwk+@7tTp>irTX4wi#X;q2Q(TDDi#vH-z_iJTu}PwCTkY6+cE|PnG}oK z`or#x=UPHmq8139A31A8PW;kgW7_qL--bhHMq{W+%gp+#=l96kq1*I>>IZlFe_xcC&fJ%fzFOB`1R+_#{ zb=az;Rtw5C9S$#e9OCoew@9!5uh(GW6kuK(#vrgw`^6W}K<_j4pI^swM{!=bc1!4* za3r_|8`J`--Y(v|wy*yGKRNS|>aG0qqyrK_;|!@F``Bi1C0SJ2i!wL**E|wl9+Nn! zFF$xvx%{4v66pmjLaCs3kOEWjXKulL+yWD3-TV9Q{-I(9kEwI^&8e4L9Qt3IAwqPK z5UbqQk{{YHPEJ(18s7Ew-7A~U<-F`OyK2AEY4H%(Ndf^36IxEa zGO`zFU}bJv>MmdV<>l4Y5i2iVx+Al7CqJ_$I6^k{99R?0De&Q@NR7$bm(21%4&3FF zwyJ&oMw7W@+IgcXxeyYx9rOhUo8Rm{XsZsF=~9 z|No=>@gN7QI;*N@&98Dolvx=bR?ll>Sh+S6G=d|ly<*z+<_47EZtHFDpM*2kE`R_0 zGSB(8FR_dV<{plj^Q$~`;`!L!b#L1hLs5n(7!q=7{=}JwLDq^mG%`$#Xw_nfU{zQ@ z1G-#fzV(0R^V?RfVQN^FFliEKOawf`A@kz?x)rJ!!bw4x=~*8k>WSatlGRYip2 z`QEJt`@ej-?4PNr5GV+4%vOM+?(W@K=XF}Ug&K?*KnopKr;0MHX$vTQ>UumrARgQT z6Jgl0b;|?K>#w4wP6Jo{OF{b9>gww5|IxkQ;$7R^CqF7beaZ9+jJltv&A@S7+)w`G zr6h$9)9ZguPro~P9jKW2xj*fEu*|jWc&HxO(a0z1rVzycnc8 zQUsQMm7c`Zu+=WOI0<$Zz(Fy;`}d2ktE0e(L{!_Wqor)~6+t-Xuv*W6Tm;pkt#2TK}fZ zu_J$(OLt=T(pmSuu50HLNoY8%|NM*Qd5)xPYaUjHhZUDLHml_=_nW(`HaqQEnTIga zs-pxw@iOTL4<vXt~=K^ zuWUNk2T*^;ed1H@RZ1=nj0_Vwme(mX%#sk$vHf&HS>1V6US?k3heQQClz%?5)Rt8h&u%v*CKdsL$)vtNTeZA=OXUF20D!v6Q+0X*K;9mrv z#H6|>?scHioX5)-r`s(#)dt$=XSRDbsK_uaPtN+aNHhdxnT^wZjvdM0^VYC9e44v& z{`u^e^_-xgrw2P8`xL&qf7QjV{Ozr)&z-Wu7zCPT<$!`znrY#A#-85Z$Egngv>Vrc z-d=MnA@ch_Ee4KuM3M2mc|sa$L(t&H{r$Ilr^>S)+5j5yy`^w-0!UBuO{X$?h9<={^ zIlY;wA#6L>f}6GC@bO+JW`^>`#XYj6I{ z(EBiXQ{?gNy~o?1PuXQ1wYc%!w~Xfn{#(-5nD46IW6xFD`7(zu-tYaYou{3Z5C5Jc zxR2A|z1h5e-J_L}C!HM_8`wR1BVYeHZCNK*;jKTX?jd_SzwDoQ(`^suF+Sj$9;Lff zpJh|?0iQg@U#~8UFaBTmuIS38Ym%kk`CYyL9uEASkbdRTokvRV|Fo#p7d&7=Qwcb^Z};IQ$12$pI9r`{itvC+Y}YIf5DkwieKLT-FMt-U(mj7 zKlZQHzE=9b!(Yhk*p`g_Tee7?)jQ`NK0R%*^!4S7^5@&io9f!g?@c+M@#WLs$ARh5 zU-^yN&oO-Y{`FmfY?J-tcM4y3ui4}1z}Ud}m@neDHPiX|F`TuJI*-fOKbEdv^ek^t+{J9xiJI2Mw3BguGzqUh-a_r#b<|J@B&w@#_)T)UAmTF1EP+x?EDYe|o%E6xuQ zZ(gi2Cr9?^KXX&}ozuQ)Jl8ugJ?hsT)<4@;6u&I{GPhfN@%s6{>b|^Uj$SN(*F4Sl z^rwZ44&mwP<@x#f$G?2}5|S8^!F>4eu_F&B1>M_lrRnkpg*y)qG%A|K)HNvGdD_O% z9esOs{NGox{kGq3?6-_O`*NkR_@bBxyEkR$`LH=H@DrFZ@1*PeU&o3sZoRo|MQxJ5 z$^AQ`yI;*N?!I{T=h6(b?Gk5o^<25TE1!4DE6iQ7cam>W+Lglry7K&UnW7UX#jSbs zW@Wr1`>Jn~6%00B{rz)CaEOAdYHP|YolN_z7PPt04feeIJ=Jh$Q?TkAfGBdw>p^+ycV}9JM?2>as_V)j8*SFd5Z<$f|(mQ^aowa%U z>=;vZTlN6s6eAByrtoFyi~oP`_IEYTWe)s2t@&b1aCphnYe^-qqV%k+P33*h>9}o= z6<~PY?=n4bN#DZ5O09DBQy$FBI9wAW+44tKJR-jTYgGN#AoX}p)#v?XneMxktQsbH zcmCCvdRjW+Xxc9M4$(TiO;sIVpxfQr?cK460Tl3x|ZdC8PoBM*Luf=yKkTSIls*Dz~{W;$tD*=zJJRo zOsL-DzcF8X>4n=2)@5&wgfr$o`rwf}v!cC$so|?7PlenD5#6Wj;&zs4E%5|5a@2Y` z&YU^xUjJGCyc@Id?nSp{7hnAOvh~Fw-|v%V97=fLv(xd&X6w3~C&@ccSJZ8Pu^_O| zMLJuYJJ4fc@FF=4Gqo%E%sk0KCd>7j#rE?}bN2fk(bki@X2FZ@3wFN+tY0_Dz3#eQ z{Qr@WyRMqXV!1OFU*EGc7S0T9IpFOXai^s5fTp>!f#q(IyG6e@RTfn5$=}$2dg%po zroO)3yN_QzX>NFV2QdKOeQU3BToT`#6L9>&;y+{(PP~?ceq)jg5{BrrI~1 zk00Na@m%7}jR(`tUcLQpC+~Lu;DDmR`?Z>YU1UWdlbgk0u-!sYC zf$_jxdA2`)Be?E8yXd83{qu}5cyzwtxwV(+6?3Knj`MTo_srXEC483mUEkdQI(you zzp(I#%rSjAA%e||-(l|$_Ds=L4a!aE(oJeVpNc|7;dboFlV(YV>F1X7Sn33PS`l|rVFAN|hK+nW_3W;{{OA9DGgvx4+bRGqql){QnmpUo&SF^;K+b zpIbUhMrt=>a(vq9u=O^JrMMWb)gAvdW4lPrp4v~7=iBU;_;IxRTp8Q;?E9HlHCW7q z87)q&w=Fiz%6i?m&WzX1{Elt%yp4bB3$2mXsv~ z>utQ(^3FZ|ZtmRKZx4UmEwkaguGxzGgSxNh@W*`mBW(ZCZ5>O(^+^dHuf)DecWE(1 z+`fDE@xA34t($hPoNd0o)nxT;&@}t9dx8zjGxphv|NVWEJMi?2buT7Gd$k#x)EWG_ zn7~uA?7`oVRqV0puUoDaZuGlfW}5F{z502);O%eWSKez|vtILzy(NBo0TZ{)>_u`< z^d9$LHh16o)~$2zYGyzA>;F7Y-cp_FeC*rG*W3AJuf0=acofaJx!L-0ZC~wscE*L< z8Na=|-Oa$jd3NK;hz0f9pw$>clebQJ@cecD=j-a~^Z7Gfz&*~DTI{SRm|6ukh=kD{fTxgR`FY^6acVpj^*D)*4nh8F+ z8}+L1)^E4RwfTlkp&1MYc4l=KW)+A8GUi`^E{X0yuJTRzt_e8Yxq<5+wah{&ujAL3aocqIXy)G?F!-G z#UAe&cM49A@tuA{>`TRY`6+v@ZhpHd?oz~gEfF5?Q*+Ps_1m0Tk-plY(zH*;_ogj_ z^|jtjOO8}|E=<0?jQ4k|%@6MF&lX45S}#(Mo72VMt$7n@1Vx*-@lR)+HhwtEmBB$m$JADc8#Hxtzpx?s-u(-=E?wXE zZR>)m47u+%&-QXs(B^p1^8d)p>~~-HabN81`^dr9*eN4xr#ZK!ROQN2U5&Y7Up*$5 ztety4{F7YCvJHuUug$C7X0#>0R5$)g^Q7y6uPPtiI3mB=G+o|vWpvJJuC{HVE1vy+ z{BJS;8{?KIfB(%dUd@zOn%k-8bN={ortkR~3>WTQyH)o8@AvQGvr;y{U=sRlcXqnj zgL+nm*PAc@eLQFFkx!t(n;#2>r(9n6j;l+!E01|igKN_ir3Tf6|G$3RTv2{H@B4%M zNi}8P>O~4T?pXM|YWU>Ccbv`rskOz60`E=B*ZjzC+2pxpYtlAHuF`4ZD|L0Qv>Sby zZpHestEMnOCgxz6KGunk};T zJ{Rz6+qIP+JI*wn_0i$LSlpU(-ncaHlY5@`(nAR3p#Ha? za8i`)2klp1Qv*Is?a^3xV(P4Ky?V#m>?R-US~jQhLel@qEjlHsIrlq+nB`vlv^sF) zIP2Ms=WOzeCp-zBBzxN7;gLxD(u@DP>O^|}>^t~RDUI<~+oGS>-u;-tkms>*J~_5%MrZbZHi+uk(c+|gHJHOIPE2fo@+7cwy={tbh)-UXrR>5kSVC3Ue^ zT0i%nmRV}-Ecf)rr={AJFOG0>g%s($J}a*G|NHMIp;wn=tnOrV8odY<|FlH=e?;C? zg%3h)r+zt3ykVBPQ)>Z#^_pKhN~#r4@xJNW_vuROj~fhm3-wuU?JAW{W4KWhG(AW1 zl(d;9L&WXa_wuh#L`#C!`LDMTzEt8Ky^}r0IcsvSz>Nx)f}-P__8+|1`66iD;vbgr zw}q{0t%9dKTys`F;F9DVK8{_URjY3v?(6(^rdjMy)te7qPt1ZJ+^mm2Vz)R?<(cQ_ zpzrsy=R95FYJ2!Xi&f#hzsd7GGo5UoIpzv5=xqF17B+v+dg1M|*QZ}kh+eW~v&edm zd3mpTtk{lson~^L&nzJ;dGr0NXXcDI*7)as<~^;=5V1S9|M9%e{fzehbC*7kw~+m! zuwWje!jeUqE)0Di|CDZjb6)rFthaZ?_6x8*esFVU@}n*GUuGT%%#WO<|8=gwmkp77 zU8=P6V9}-tC?sA1^ey2aqaKs zQpaQ885-Q3?r!_Hr{rnMH=Ks0(eV_cLlJ+pBmIG?DtsEKn z{sw;E_kUvU?#11CH|2%uB#z3n+j6C}waZPeH*1#)jpQ#m`TLh@Wy*qxfMvZ~+0VC> z)ugANd2F}%e%Z68ZPTWGIVg7H6jxE%#Z@=$e$=MTtKGV5#o>JE@PFT4&3`Kp{A{wu zT#M41wYQID{Y~E+yg5%SVV~tInY)7W$_p7C($n3)U$_vEzA&zgb&5^biOFJDq`Ng3 zBKH41dtWh1;r#vMm+b!>wrAPPbE5XW(xsvUUvFows{AX^kX-Ypb@j!oGmpNgdYxhN zcG};E?1|?O6wJBsd9KFSAIwSm4=dI*JI7vdOxn98QSx-MYRZa;gtc{R9{;;pcEGsu znd|ZXf45V<9+*B&%w+8(!JAbF7H8$1*!+8+gKwmn;G6sK3HM!VZVQDi8f^9z(=iYTQ-=n*~w=|_pQHHACfMc6eG*p>Nh3RC~WCr)z%5mHa7ik zH+tkGsrkC?^6~hLq~AI0riGhJe;Ix2{dQsN-{aPbd0Y99oMy8B{`Pse4F9%wMSuEa zZ~q8XShavt<%RREF0D<9HffmTeP-H?-9}bB_FOylpY`(&hT8bG z|5x0cGB3Kzf?v^v9?D|Ll&|d)IHwc;)l$1$Tm8Y>+(> zsBiviqwO}y*E@Ue>%VF~w_BVccGuP?`*=5M|9bv@Uf;U=b5>e%%#gTW)W4c5ds*&u zuU(DXq--@AB7Q43>~|0Nl+pTAX>Y;1Iblp|Z2zs=cuv59;lt1O^Gi?v+vYO;+3iQA z_unk4-^#Od>cgJ1@@F>jmV7$bZWQpU(Ma{Cxah)^DZ+1KSu;*s>AZ@}KlJUw_t4+* z0e+kGuRVS_BX8Xc?;zVF$IG8w&|SHD!e(Q}e-$^?y*t@8Petf!rsSMImGSsH?=PPU z+b?UMom;Uq-Qw4k>;6*{yykjs*}uPhy7u!RhZRvXbmCXeIx`(yXrFmJM`UYr`n^j_ zm(QLc;;{JoyIu3F?BA|?vCZ{*-e>iIThgyhA`i*?UAlQIuF`4# zR<&1~oV*u$C?8h4rOsjdc~SGH_5UuqG*w>*A%G zds8{9Dl3Ed1B2|=UfZ|TXI1Uhzt4L<%x!r6&YJQ6*E>&N{PYfX?a96S^vAq)?;OLA zO<%Twd%=^$tjZ_SdYTM3cEp~$pE0rS*~9i`riN?NrmZ--mMuVt>1!W@%y0Yp?>;7b zQr$~Fnk}0>UHH@kgVUDv^X7Wze(JkmWp?F+v304gs{HmIo+;ifoZniDwj|%yN|x(C z+}B!_u{l8W#ti?AI#>2JwK)+#j_*72w`kLmT^IUtuY@I3#C@H-h@)&@vALS7S>F9E zi66JuHgyGRUwi-k{H?`;Q-oJY$n63Gv;`fyKFQk4gifoWNFzMAYg$7}>X@6tO z<*PsL|MtB6#Qvghrzh%{|J!b_ck5^R?+8EFlpdy|OA0q?`WJO9+wo$?n&wSUpLoCO zw+{Jnoaxe~ccP|$KW>iGh?rMZx8L{cQLDez|1}oW25L5be7#L8qx~2n5HM%uLSH@^8*)id)wAjDRvH{bopKWyB^mv2l1vU}soZ8<>j8lDC z!%~jthj^X28Q(4ZTEX?VhlBLFddX7tVy}`tm1{r!zbR%KU~hJf-!gT9&z<@$%X_ab z)GJAQw)jWxMDyL-cBM1U>n-}c^tfQ@Ce>avUU)&}^#+Z$#|P8q zDt@&oUVd08O8@_f>8hvuE^gQVc3Q*v`1NGt7t`l!Y_htN{N7{b>+6D((yKS5{@pfD zCDJlxt!&AS`V;!Q!dc?8U-hNk+0G>Q_uS{g3#ngEe|#LR_5rl8eWCV0w#`fQobDNT zG9LK#ChOn1Nh_wFoo`?NF2zF}Jm)gI*MZ?&{ika=U#_O>x%xU=E8ASm6<&VIGq6pb z_1v*Pg$`{l=?St-rKfIwSmQTqJ;&6YXE}0hH~KxCUz#(;`MR;bm6A2zi_M%tCnmk= zZccSy@IvUVhoUmygPDK+Iq=!uuHTkDdqepDJ**Da-Nv^+YLg5v>A=CpM%#6@b{rYIneH8WJ>AqNj`6^)_gQl1 z?Y8PJ)VUW|@o(n>c1BT#2#cfFg_#OE=GXr@nsKA{?R%wt-;T#SIjKj6yvyNHKXBH( zo%e07Wa^SaNoj*ao4&EizJ4Hd=JD$K`#%@!nmKYsPO8<};uTQRsT6eL1o-Dp>@$Gk~^RC~m{$II??P%KavoAG%JpOQ;Nj=~WSL?O3)_oT>r%hccll0%b zW!r=`o3%PVu|C^xFD4Rr{hIeo!?T+;Hgr9GGgt0+>T8cx)2rUtm+ZJWt?&N+|NTX` zg0BZn+n6`yX6?a$1s*!dvKx-ORlf+HzO8VspNH&|i~ds{Hy-$WR{3JReZ6YcyGy*` z)3-LIWftA{$*g{=9pCx1A*0PVu(NXhrag))m>Ry`Kl?B6RE^Jn&|$Qe*I7@kddKUx zXcp@VDLu_R0VWGg`(JO3FJ8D7d$IESR{QFN%O8KM=gn)(6|YTiGu8KMH$w-U-!&^#{PEEpC?bAy!rC>_WZUIXYlw(q&~}o8~dw&dDTpsmm}Ss z_jJx~%{gx!PcE+g-yX2epY`(&2{Vi0&&OF5Uq6(bTRBB^>cQDfF4f_TvLO@2&aAOp z<#Z@Q;KB{Vjr>bC%9WgDiwtBq>a_pBrF9;%hd)k^D*m+K&E~7lwym$Yef8{ro_Ao_ z=CS4c^GW{~=f(Gb-F*J!w91ulrQbT7yj+$lUCI09=bq|$Pm(S>e0kKn^M(CtP#~n$g;=Iml z;`{3LUd_BA9J|Xh-p2Ctsr%RB&Ltl3RI!}pwe1^w>esG$N3+kIKKAya<;L18%~dZ= zy4G(TwHu7T$Sz8cyHx*;dCJ$I`QewAT-lnuY>m*?zm9h^+H)tS z&wlz!Gko3^@h{UEPp|nM^`P{-*~!_q(Tm&n7i!HqJ=HGZ)%NYVx2GNUOZzJ```gO= zTLP8bKF&N9%yfB5`!y|_IebXvCtoCPmzzb?!e!&%RI`d`(r#opd~FRrQH zD=KS$>P>&6J&U&U{en-+iy8BUH(4Y%-%>iYHZQPodBt)U>3~lg5@%;jw|SjZeP;5f zRr9Zy2!Eeg_4G}*tVYR_HG8!`6gu49_W#7<_eXk7rahkT{nPOI+70S&?md{XHum1C zFZN#@a_0wV|K{iZv~SM0HKzBapMAP=z46Moskg*q3Mxxis?W-O*=4u=)TRRuA5N@2 zcg~KZBkP85P}tpq5K#G9BzJ$oof|@*UFV9&+em*=Sir>Kq_t}%#{ogVdvkjKeV%zb z(4-@^{wMqY7YY~6=VVqM_`Jrut7zUIPsPnAZ$(>HT#KF(d{ZQVrK`8Ium5e6Qe(p6 zSRHKkvsGKWuwJ^JIz|3{qxoQT|1r~=ehjUY`e~fYJHdR<$1gJ-MqF! z(lt-@fZ6oN;f#S3u6)_#*j&iPV3ybZm}9GSRA2wC_qETf``b$v?-hN&BS460b~l6H zzW<+g{JwSnhD(X!^>@?$s?P7Z={;@N`hC+>W;NbY`e5d-e5xzGL~Bz+mt1P$9X{iX z!yo2(dQLlcZ11t%A#szuPi$DsYJA?Nu!nQ2$k&?RDzRoWL)d<2z1pztnq~2q9OlZr zYsd22%a&YO8t2o!IA!I+b01dyUh?IMQ}mTL`^0{Des6PlC%jm6bL?E%SYct|SiR=F zO{<^e%KbXioZqp8AtAYJbN!mdp(h@_6`ud2;(~5N+IL3q(qv-ZSR`CqgDkUQ@ji+atcoYwTDSH|ayPEFMR6!0i4KxdljlZ$HGvTo_m zINsM5{x5@zGj~Eit6KaeJ0rK5W^OK@mE>N`_6?gpt!+JXOX0oxi=t&s+Zi71$vq)CclNPO2R^>Iy?njfay`Fk+)T6TUT?3< zu3yMoCKy?Ec{%IVV+vdh*Xr#*Z*cW~5T0}Y&olGjW;C~~@{YB`5nd>FobNa0ghzQNq_`IO( zPT0I7!Plp4tP7elQN6W?v2AVh(|Z>d$f>{BbiPhuLimZ-cjrX+33#C6z`k!|NZXwOQSd)3~W|`29{(u|GRk7CL=Ga>Q$1*?YUeGP6?CGN+~o5zbn79 zY5&Tf%Q80Qn(Uex{cnS+tSH~RCBn5QMHen_ShF=fe67^!$gnSVVJic6IEjC)u6p|G z&yBVzxG{~FFv%PYwC?{8ZCRbCjPyWI^X+OuC(rl=XZ4uv@ZSk;!la*uc(=+jkn9+ zK5%c$`TQWaS0`Iz6+=RDxp`k@UdGJ*jXO_=ubap9(yMxP8iP~8 zdAjdg`9_1U=b5FZq=%onpydBW_1syF394VKJu7`?HVR1{4x6x%W6GXn;oI$ZzD=!( zyT4PROp0l8guZ5%j{It;4Nel%MUHN}k-w^`@?^v((`U1_UhdCkt@rHAojC3C#;0pe zz8AlBBuq!&V8hq9YvpdYJl@{eR{BTvufExY{Oogk(|@h1zWpTR`?QM42RY|z?JjsH zD<^-q3fwuB;ey+ADI-mWi2HZ*_^v<7XV!I!+cbB7!9RAz*o(UvoB}4FovXyK{735c zH|rO#x8Jqriul=`UvK)HmQk(Dl4V@~#mkhd%F{_bI#A#LwvIySE*+=PY3_0>Z+$Dg zdS3f~QKQ4YV^9Atlm2<^B4ds!Yvtc1`=&k!G0;t(xBkfQ{MiSmn*5vKC9^U;SdV*- zPS_j$%zgK!UQ;y-+qodiRYqSki_}{Opb3Jg) z{=)vtnMMo^6Lar<`pG5zVn0*E*V{L3VmvPjRXo#;wfcEPxKW<RQFQ?k9H??)KjC#41@CTcl;$6aTFPfd&sTjZJzLe7mn<-qK zi*D?j;3%K-J8b$d*O|dbA|}i1U(YRlqU*1ASdhjCo)y_gUraBZvx4dAoeAkp>*gzb zy4`;H`26{k-b^l8FnvjOw#uKdwp|(STr<~q8@&^ray#Tweh6Q3euF@==}A^`mYAZ` zO#i?BPG6*bZ_|Ny>-=i?85kLavOi=mwpo8w;lC(D&bhv0h20@b`fWaWT-ePJb=SQy z>P{Aes^W$~jsuGSPJch=<}4h&*t3*3|v3?7sBB>U&Jihlf4eK<#cK) zWAJTpiH-eh7RVgC;JxL$R>}q^sq3fR&iJL)=6t{NrKV(Es>!c+GhbiaEbcX(b>FY6 z{12ucIJQfI=Yq_YY0;Hwm7tb*c4fzJk+s3oX794BRb65YnOx#vD(LzDC-(c+{kqnR zxwlW_kBb(c!#;;W^VFm{Oy{=Q{P2FWFkU12YfsFIhN>;jwcGNxy|*@7%`C0bW2niI zAYHlkPyG$&bGp-lJZ6Ra{yG0|LH!$L(bWd}eHXX!m-9dOJoRhU(mVM}roOpxeA2hM z0?7|=B;=pYt-Z1_*?s>+kHbR&$-z|yfF1gRq^{iSgtVXxsdhG80qi#=k z2WjN#EMiC~{$}16T|aw&UG1lz6W&3NOW3N!aQw&H=j&X|#b+&EeQ%TfwbZ$7rA!k( zr<@fw|Gb5DtI;db(}5kltZ|EEHM<{|%@w%fFYq(;;!o%4+Zi&rvT{!Z^GT_Pz2a@C z(rMF^mH$0+y~6+d#{I_`Y;PU;#>#wc?)0b82?7BDo?FsqE?sl~o&A)}yx-(2zfDZN zu=(4G#XKip9jR1bp!c1B?!T_p|97-qs$X;6%aFUkP^v?3=X$n($4?gLovB>g*{RDu zM^0{r)AYZ*p#>2Sq}4PTBL2soeQeShb@R{9;^*`EUiN_xFbLLW`gr}{yb8lt5_jL; zJNj<#$Mdo$OZ*nx$&tPm`6E60kHCh&b9=VxYwBp8NKZ%>{>>~Y+pGJ%(yBfnZ)2|G z#c#TvaclbLez$sZTl}lAL|9_C1zS({Ru*@!bg#R!-o#4RS=arash(=R;W3-!Y0s6< zgTGAg+rQ+!iHd2Ph@gIr%!jUMv5LLPO24-Jj#8M;%E!m|t~BlKu`8R_96Ke|6wa_= z-|m_Aq285iHl;qBKF|Jd%ms5s5e5OTi(j1>_&(mBS91Da75m*y_TRVKZ~rIN>37IV z{L`Cm+aHz7miAbM`OQl$OljybRPx?+=-A4|@^9odS1**+e6r_}dMi(-)slT@P9--l zIVbWeQSdi&*V*Gb>yH1PzNCHI#*K03m#EB6iC?tAi|y^7|8MsGoUC%Z^!dwJ_wui` z@fi#%@1#{6`0@ix0vEYt<)k>jY>&M?b#0ja+jTc@%_@Ap|KcpSDPe~SES(;$n_j}!`uj}1wl;SJgQbN<&7$bL zF6ZL&mmO-7)LW*{`c67WWzxUPY?B3Fzdb!mgw=7)3imf>COvudt)nwG*7Egw#m;47 zr@j;_{3|k=lq)v>ORnad{X)z~||VXQ{>JrG2UGYoAcC|Hy>%ZdcGvcWuu0f z>=Dsdn)cU1Z-4oFk+JWr(09deH~cOL8fNu)h(sKjelf9vX~osaF?ZxjSTA~hSR$s+ zH0$N_oTbN9^1E|qedv&NS<7FtR;JKPZ=3#4i)R-MvK36ZIA`4aTJzz<>xS;yywm5L z-|c?6?LdCr=h^8s~RykJ)KsyP&zGiQ}_X{hr=KOOe|9V?2z zu5a?!CwVHrHR4TJ_aML|w&t!t9$<=geJWd{b1)W0A)`i<#@(MflzO^0e8)Z+rY` zi|Nuzo9gs`n`4)<;90xeSVJvNu3L+=-22{jhKZRfZ1S4-$5D97x~to5x|PFKvTHfF zpFP@kb^E6ejgz`>uXpWEI^X4J9MyGz=}`Y`;eWY}i~q^4{=B>YXKrKqoco*$tQpLn z7kVXkoaE)tP0#spY+W+50cg$c7<8BD6T0JS&lV8K~-={+xX2-oM zRjy?}Z1?)zI%L7N(`nm<`~lD9rg?#{hm?QAM6FN070 zc`h}R>+-QVby1y@<-c_+{LNiIYh$d+dY4nO3?DtWh3)s?pY>#o&d1C0ld_-LZ=S3a zc7GddOw!IH`Me&I%xqgXdc-Ih_L{|fFK29hRmYJRf8+E_k>4RMxixYwibsy&Qb~?lour-}j@=?@wKu zVenXb-m6)$xv^VfY{NZg3hJ(U_QkVcQ#QBNkL7xj)lc)^Gbku?$UXTwQS43NdCs&W zF7cbJ9wkkVKeM=xr?Y3*4>PkTjdvIw;(i@ksT|HW@hJPp;OX;@dcR%L<5ZjM@bMO_ zcbdOZ&@qQ&Cw?Cn2}s)Fm^=TwKG%-7^=cI*zYV|NVs}1%=iK7mL911-^)B{p2;*+} zYI#y>{kH&-h5u&9|J${e)!}Q@gRhnorLV3QdYrxd@9Mhp_r>Pfx95Hf4>k#SyGJKx z%MJ(a$IqXvE$Ey0qe*t-rmQ&+K4{uXYjfFrao;<$Hiz-z$pl8`Nn5>*rpa~6N{8{; zb@E7Zr`{J^x5#tZk4e2Zre9@V{(r*OkH_~d5xzX@C<&&4rbu$hTZ#P+BnXA}Fjl@m%D+-yJRXLi}uVg(o0EO)Tx261C#eM(JqWx1jlZl(=UB~AwX+9=eLM8sbPhNF zpOW~txx2N_U{YO5jsAqAvm#9=rLu9kTryxfe#<>1pIhdVKFhD|ta3IVPh7vF9B=ue za!ygFU>1+z#>B*}3=y}3Pe+LA*xalAez)`HPRsug?igF|r0>^V$$WHWK}v(s#YN1rlBe6nQ&xH~B=#)1(52AUG51PqaJzno z-IfPxqAEYd@BZqqefov_4O`tCovEAOPM6szr0?nZ>IZ9-q>yCZg!~Qfqt`xJx%#D2 z?a>QsJlNyI`erPc`pf*+q`--J&2?Jg`SnU`cXZxg>}klRz<4w$P*&dImcCuClYam| z%R8HYCl)hTf46^Z_kX|Lq*(`~mo*w~e(1fGA!2{<8pD$dH6&ISAKso9pP|0y)pl^v zdHmafOP40y|5kqVt=+E%=~;PmxFwgoF!4IjsnE2s(ZeUS^GH(UqYpeEn69!3{r=Oa z!y?7P%lN+~C*tP;F4m$;H`kUXZS&+hxnu1lM?UeUBdu~1qF-KP|8>Hod1KB*`9~ee zQ)9oZ_0d^=LnVB=Yt&n>rHU)1ChBpH1ZB1MHPF>NnuIS!=-GW5#^TqRjoe6$- zBKiNl$&dcejM_YNZEsHqcf(fe-95p^dzy=1N$#<$_*-I~2rc*9mi1F!}tmU%QO__)2mzxZ17$ zGzkbRaz?d=1TsiVwmetdm~21U^K7Ty%(Pr*^%KkPO|dB6ey&&cH9g#8nQE=ziua6y$zpH=I`nSFB&ilIW z(euA6oof7a;^D&Pg?DWm0Bcm83lBrr=p&OBelF4_vqZih0Ui z^pt;!j;qy=b~O%Oi3-<)OE>*+JEEq1bRCmV)>r?U1MEtIx7+k)+_f@yd3n4x<%Z=J zpJ_AJ804P5$W`OHF5tdI!o?twdYctXjwRM|Z{PRATw&7=)?fG8KJDk+@WSrrP5qj6 z>DM>r?{N0d_4id2a`wsfh|p!Y_J7N#+LI5y|36)ynaz0N`t8S6)vJPc{ae1}w^G2S zE4Tk`dw=tNp58C>l^?g+-xuNasWxynN+@0{D#+;AV#DHkuZyey=cHhx#}51v%ltQq zZ|P=yBP>?>hSO;=XCwPXt|gnUi6yBhI!-FgXuil zq*qQ%{J)#wcKQ4NKRVmxEFanZJ|6#F$!Asz?~yZYttK^x%{DkoAFJ4A&=V-1|8{D4 zoMc=?jLyFQyL_72etkW5dR2(+hEH+;G-`v5JNgGdUYKomz0Vas$_c zi3@UEmh9=A;(4e;y_nPdy8n(W{`S&_de58R60TorUV0?vuFIM!MM*`Ge@+}tD@?ep zEh+oLqwNU4p2tD;ZvGdk0+tDH^w-_CSaWvSuX`Ld3cJ4PIV?EJXB(*UhsiZ~;k+x8 z&Zqu9ukD$3@jdsId}f=!hr0LQ-CX;B`d#(^FFFh*XZO9nmU{g$sIlj-m~7G3#d7P< zktbIQtQY346=Qf?a(mgez)e@S?f>iUw`1YVdpQEDf+Z##ShHAxVWwIryML=-qiROx z4HZv@h0N2h`^yxwGuSHpTJ>07PVxB*B_{zE|G*njk{*J)$=D~u-d5qL zQuYON<8JS<^7<#w*ZVWK-Z<~h{ zUFcFc$=}iQN91Rdn0futUn?6U?E36y|K-qV-B|yKK`HLqzXRJ zt0q~(a!^(Hb^8z3FRf*)bGKZdl>I-%!D(aT6csT;PZr*8Z?|nv+2b3R@y8eaS~;gT zes|2VXIX#e|G4seUSYfcpNYl4zy1$ixiG76=ADA2Q4DMDYHm%Ah?6{hp?FKb-kkhm z?S%igwyyYe<*Mz1CqJ*Xo8P@Nt*(6a_lDU~C-P2QOOJ6|y3EOK)m%C5Du%$$=Hz7# zHa?GL&1mMat2z2A+PX94-{pIZ9A!$i85xr1k((c+Iz}(NGA|{gPECK_^iZKivLABp z%-DR=tH{-=u}_fS^IzMPg&XUR8F&QdBwZFuYF<{=H*K45SdG71U-FDya|9^Clxi0#_`@iqwKa~_MI;3FL86ESL zH!$N(TZWIgdDF*p*B5--Jpb>Ty=Av9zb|Jx67Kl+#>x`2I)0z?x-H`WzR1;`xcfyo z@$j1L-3=2pqq>d@XW4Z0uGl)o_s9$5&S=G(n~d|$)vofmw7p9E;KtlsHd{f9SrShD zKLodyraXw$u$+|A_fFgOo%Fg{!K!~mzs}#9U8o)Xpphd?&hyKZ2RjHU%pqRV0hC5xw{ddSh@eR=lJSZ zGVgBR|Mx95zB6@NZ`jHGzZ@5&?#{f-tx?&w{qI}b2W`)`@3wT43Z9!_Ce^*0J1}Ho zlb`I0lTqzz5APh2mHxox`p)ymopdpGaT-1^s^It&6ImjoDi?|ltw2F?#Y zF+u!^!lZ!tvu4ejJ7dnAh8tXK#2D6ox%O;wsFJMQ?6UVUdmcagX7eKNr~0DJhcZNZ zxKvz@Y%@8sFtyZqgRohRLQ>O%4>~D|37Lm3MuypkZTadEXcjNN;`d8bl%ih(VtbJ8)`OJ4C$Aqh! zf@fB}i3`wWuzG$c^UST}#G0HxUe*soL5;@T&o49@|9vnIzjIId_}^{&L$p z^s*Z@$}*zf+tp^wnb~r*IqfNvt(r^e(VX>v9@iHOdM}w4dUU(tbBR?63lwUziGjivKzYBJ8ZCe|2Xky-{>A&Y!p3>RW8pqT9=&=5#Px6-^i2mHP=}>80_n#AN z-4btDB_uOm-Pb{q4VZvfp9$|H005xSA<~C8Dr< z`L$i*pk|kSc~2_$!A`fYKOfFEKktyin)iBj9nXrX|8Dtg@>=q|{n*{96D`g6y`3Tb z_4YrhwD9|iJRXjGUnehJy^cxuL1t@1Ch>uDbo7D>wI+DVo);oHt*w&Aqas z*Z9K5#|yuDpIOw%Ug^If*TMb5BbAg#lh<)|OFT?eOrFZq=Rfhl(#2Lu3+IJBDqDDY z!F$frNA-7W-4grp@%X$yr~2;xo>v(EcmMoPDo@>aa~$9e$cl|!#d_e@JiB8>Jff`` zG7IZop1NvQ&J@DUP?``bRjqLITlvkmcHa!kldUA%c-)pew%Q!)bN-2P+uVYQj7i;A z0VUaO+BJ?J7PT_`YO?%0MRE6!Eq|uOvU5~=&76}f&bdBsL0@F8cDn9EjhnEu0KUGy z#F=)d`u{bj*iAF*VzsuW^W2h{VEl$H|Jv@7wRTkwZz3}uhg{m*%|B z?=!=uL^QCz+WGCsN9Funr`eZoGo@$Op0E4$`TWkk?*DJ>bgqhC;PRMx>bmx;ObLJe z7arSfD-yV3|KD%3)o*jI|E1edR+answMOHm(fGt zAvku=4ug~2S(8Lr+|4dr>e{L}XIE=s6My*6dmcX1Jzokc3q(I!z2cl8$2aCgX2(?i z*()xX-46SBLGX&AZM2hoMcV@16Ha0(A19lv^w$5DpF8#84<5rMPFqg@>dm~tT@@!_ zEqPb@Mfw&e%dHAOo%Nb0GKMM#tq{MMx_Ii0H93*do!JFR2W2g*-n2Hm_uYHH@8kZz z)0W@1X6WENw*1zoU2N;c7+zPedStjhW0T?kxzpqAreBNh+I0MUQ1tId;j!CO775); zuw9^HWoj*d@7wjq_rIB&q{{u#&d9!aKt~{Y+7TVjDX|3!IW0%zFNf-PaZ7y*X}^|m z*eIZ*rR&SoAE7x$fqRd%L_|88E9*3isGhBOc=1e2l1}$!vv{+vNACMI@?MI+RN(f> z5%)O8=y5?@rE!`V%O(EX>-Ma7QCOa@{h~U;!Efik|Lgu`FPzS5`~T(nx|Qk28|@4F zYZAj(DVbKMSl#Uj;cob9U0ox}!rgy)xxfFpb7#+P6HfZ7kYK%c+s4v3+tRylxo-bs zyVF$vC9>JiSc*At?e>Zl%ULEl`CL}XQBN&+!*T2IuhS`egu;J1{M^VY?fPrd>72?K zBdr4gk;fXY@_%~C{+8`o#R-X|H1;E(UkD#bV068H^TO2nqOb`*CEYdGRizAtlmmo5 zEmgj*p7bN>alqYIE7v7`O|F!d&+WZEQF5cYfxzo+ACnWcgc@>ge+>H`n$NuPp!5F7 zKPMQr>K5ESx0m1U$BD!4ca8V2&u#p;pGiRXm0v|H<7!ri=X00k@ch2;%0XT1G#d+&FvC-^UUwI)jyhfC}FW)hPwYG#tWy8Zu*cixpJPQ zki_rcoImsD|NokN{7}%}5RQEcb`6d!jWQecw9S-Oo^&}YeD&L+Z{BuB;w4w=CvE?m zksCF~<>dd9jVB)LK4EWUctk&-=IAP+lgeH{N>I^LF|@k7Dy;%PBsSGFhew{NtI z9S^(0ej-8n$9I>LLbEfbt*_dwv{$+=`hoEIeLt@Ldt1HliQRvD`R||pXgjQ0J0ts9 z*4@ghObK`W9XT8x&v0h>@blrrho2o69qoU`=g=*?t?}s8l==tt@9Wq9-~Mbt{q6bR zY^RI*)|D*^o$G9MsGBQgL5hiYka*Afcb@;6WG-!1eNo9&mLzBA_0&tU^K8WZTjGAV zAD1O>^O*OKS;*Szlc(ZC?aWW?{u|EhpSsba@R9Y639{N#9xb{V;o@d5%E=J>s9ins zkHGSZEu1qfk2|~yxw`0|x|)LFL*>siU!7K8)_Rz|Yk3n-nQ+#}^i8@O^3Oj$zyHGm z>u)@_nUrYt^X&PD%Bx(eW9mt%!a8-g=x+YH||>ZLG-*A*RLDQVlTx$MHvJv@t2?A z^1=Jd3x>5e7QU`*9lSYWjyXsEb*H#?KXty#@%Z)xseqRc{4H2x6}}jqaB?#c5otWO z?Z*V+hbebFSPYYxZr$Mex;H7KK8xYE!<$FzdD?Ot`R)Hj-!6Y!d#v`Yz0KpNU)D3c zV>uzC)|k4?YFeBw!?pKUZWL65)5uIFGzN!Fy)P$pfiuF2`O?`obE?5;1FPZ{ZupqucEcChvV?#q0XO z>uYec+07Fzw=!#!rae(H?Oxr-W3W)wbW&>BR-I+~n-2c;)HrMZG4ru%Smv|Z>#wKv z@hZqoWMr$}7bF&cXWE&ah6+=D@L28;xhr;yMP&WTx)g@r4%xdU<+ib&)Bg%85p18A z$$u?p+3ZG=G(8@R9Wrd`Az(J z{;t+}jQii_*Kc}zzJFCkQ#k)qwd*A!%N8tTUi{PaLwAbjCzZcP{5NrIa9g{sK-Sgn zLgq2=eWoi_+LT*Y+`3Tq)iqFl>d)ymf2SV~X8ox=Wmj*FNR00DFUhJ?lru_oxWDdM zer%s=*~_TtFnO8ZsecbQshwCDa)GhX=f+g7tP5RYQcHiu-Q4DG#&svTDzYLu>7=Yx z)t|}i{j#qXL;D{G`SZ@{>--4cx;1Xq zZicnrZ@OI!_%!#+?SFOO{w;WI`(=UjCw^1IOk+o;$7aSq-W<`CD*bVQ?eCQhzJDeK z#}V{AQ%tCI^~-mKfWqaw^Kul_+b_D( zB(*}Owp6h~WzuS~lY*Nw>(3zS`jW_EhZO=@Jv7mPnoHa65Bj ztKEzKpxW~eYM0qHH{?bveX*xL!RvHsZCc3nIZQy0cf-CO#6-EaAtFB=!XySYARMQ-C&ri7c9 z_b+3TTKv(l{Q0-J-EUn2bwLAw@2&?Pl9ifUwtt_^qqOq*C-%S9mrcl0W%jiYUb?jN z-kKBqC-17&W~A==w2(<>&IRF#Z-j65D5&s>De^mZAK9?5#VLrh$nE3;$2-?9GTw6O zc$+psg>#C|N$tLsE9aVM{8@eKVu*g~v3(i-#<3qKFe~NXo@~v?v1GzNmaa2DoK3dz z#s*YvwE5dUXDjd8SdD1&Kh;e0s-7La|MLFE=iTo%*H_I~|G1uEW~hbh;fOtbdZ5;g zAAj-|j;LFg9`qjEHjjBl9e2WCzjswtVNBO<|NAEY@%F!Ee{cW0bWvr&VZV7|>S@-K z4F!&F?u^|r$*xoWuEeu1sfXn^`fE4a8GXp{IgxT%&&}BFuDfxqDz8xc0$taCFWpNf zwEM*h6#o$S>r-1^UXDGz2y&%gR5 zMn1x)Cu`|ZX|{PYLvtTZpSQM|`DpmTd0!_Mys~-aQ1YnaDE}TMMrY%U3DfgswLUPt z(>6Kpl)_SKa(VjP9Y=nBm~8CeyKUl{`z)U<{dUX0{?;`nhusV%tzlEoUS{^L zyM15#eO&47{vX@_`s%ebrno!geKNT#q+U>+%Fj1t*3r=IWz6#v5&$^0Bz& z_Jk7}bxE@=YY*r6qow|b@7-9gE0Q$-gvl1~HVb<-1CJMx8Aq5T<8=aDa#qPpI+!U%PuG2XnfqUEngE#StGX1 zHtT6)%RGhm z9bM=tXXEVhKqE-#toUngn}<*Ae~K|aT%;WS;L*{dE3B&C6Z`lwzVs>VNV&Lu2Poeu zaJy`~Sbr$c=7EZtt&4`o8b)@jtN*>3ey_7>$l+W*q;r>qQ86L+Q(JbApepQebEL z@JwB8`7y<9OzgkD-WCnL$z!`<$)9ICXXm|sclce}!Q213gm(T?U3R?mm)^3;8WKxp z%6PCOTb}L{cAVBaBS@O%)vX)7iLputPfg;gI&r&dmmb%e2>ZNxKmF{6O-@QHT{7Q3 z%wKBotzWLLaglIz&*IBEeRE{#EBe@4q-#kik``0E6-R`oMJK0d*q z@Ops$#Y^R{Hy)o~cjc|+hv<6?idMuFK6o6r7%Xkceowo{fr zdNr$q_1$ZwR$k|-?!Iq*$XTBKdSS`!`Tmyk&Mnmb^#qy5UZ(F6$$VwcYgOLb6ZeMa zuwcj^tpjNv)hB)RkKu@_{k24IW{Li%3lp8icO?YQb}C-HMZAW+a`oIFo1dROrs28O z_=o@14&Kj?6q#MrUi{{d_CLFZYlrFH7kxG#Hi}pOVxL#yKJV_!-c1}6YFj;KtST>A z3F_TcNh}s?5}x_$vw7Y<8}@~w5qB9gmTun_9(MBAVd=$r*Vo17Rd`KKpLFBuqD4pe zV*@sAyCG#PdEwKA&dhCnau+^b$ZrsenwYRivU`=KmB+NE2PRW1QW7oy9`XK}-n?&n z#0-U}+G2X<(iTT}UG``G`6PUE>#qkBJ;Kh`M5t?C-_~s{Ju`_>Nmz#UO;C`SvzDVq z;qD`D*QB&3ZT_?S;8&xy8+YnP^S`;h{jlx--~N@+f211>-XHrj>s1(cgX!CMbBvE= z@TjUtxvz-dSF&;~JL76=hFAM~W2YSW`r*F&zgPGFCw0z_PVrEED`xNa=~2Y2s~2?K z<~nlpRCc!S+Vg57&#oIT>dhP-3Ue|=W=y)c{X&O_^%RSPnvOSAF0QgGYYf}(=e@#f zf{NRMln%#@HzO|SH@}FKeQlq&zv4o}rrxs)t?!+cRl8O@5s&Yj_F3;_8)sWpXjX( z<8Ijf=0Ipz`Wog`y9fFEf2Kw2v);NDZp*yk)bkaO&$P0<7iVx@Y@D|%-Cb)WycrZT91frQ5_F^^MQ0L+L9&EPRnhfz zcFR1PRH_{_98RWnt~#N3EXd zwJ$a`$`z>ox}^M3`{rkLE7xxp3v}5(>U!85bX&FJM<(~S3~qzP<{$MVe;qm%{eRKs z2@7ktSh6HGd(KT34okDXaq9Px@JRWKa*n?ay^6SfXkvSve&Tt)|6ATpyO(^={ibX~ z^~<`@oN(@j(3i({n;qK0`}j_Dc0>C4d2{E?oI5-Bc<|TmhPPj$%3n;*S_F+$Q*l4JDM@*}zv{*XCR zAjMIH#d*#(-lRvm;ap$$GA3zfo%ed9_k6qPKd1L*|C1KzR#^&ck36~DWUFZLYbEak zuOICxy0wM^~|g73|>}g%@ekA%=n)F`{Kq2`fhLD9A1*aK6zH| z%hbCH)?xk?g1lADbCn({MKveQ4G>!{)abRjB_Y;RCi+FBhtt7z6~14Cvw6dh27Ph; zR+7L!qhNNukhjj#AEJ}Fav6`6oSgD=I$xE;6J3#YPKVf+9bsrv%vM<_R_E1YA(&D2 zZvvy&w0#Th3uSM+K94)J^Qi7$yLoln|1JCq7oDIemyvSbk1k}zgHN_jH_zyTzM*{5 z*0-Iv=Nnh`Yjb=5(|x;j7Jp)AJ>!jk@Z^eTdn~E+RTCtU9 zHOn~;zo{Mus~!mlW@~*`+!)eND0#*XowIY&Q$pzBI(%WtNAQ=4%As+#dc%if=#Wm!0GK%kKDVi)i%1y(=4@lm^WDsqgbA=tzg@lu4b2o98PD zwTeG7+;v3rqR+7hi;fp|ElYZKiuuh;$c{`MDH>9$!8#tqrxA>H#_8)R>=vm2N zo0V+(L?`U^d^2|GOQyBzQopA8%)YSk!l}q#dyk1PJEnH$(xH-9?uo*`_Ll9<`nH<& zz^c-xtE7`+xZ57T-~a#b_uC&Y-M;+zOVWZ>IeX+3esaINzw;{ZnLbmKNsKIq`E)Xx zEUiSf8TkAKVr&W&J_(9gPZv=D!RTL-R{~Mn0it| z!Lc*tMA%x!{?xVeY^J0NS9pq)ZoaX(?8w%lYigfLxwVfNaD2)7GGC`7Cqn7zt54qb ztZBa*?e&5y&E2{n0PJgB6@VfR|t`z%UrUmtRCM{=M&OAsgTa)}Q zG`bKZu{ms&UsJ-Pa9h0z8zeu6s^2_tSnjJrvbNmuyhEqAH$2goGZeikQomEF_Lk&n zEw;*S_YOWhYPBj^cwWh;w~fKmb-U*8mfp5E(&5?ybN86i)1Ceob@}a6bKUOGn(lXJ z*^a;0*v;OVuF*ZWd*?>$@;hg)T-f`qRR3)_cSH5f-EVKE*)XTF*5u_RIccAp=Dn36 zW9R8zPLB4US1bK^a8Ney^qC#eQ88!OcqVHyYh;VCERcB6^x(|4D{JQz1Pf%k&RwEl z{GjPU=4Yq9C-yC!8Bp}=nw(K;l_KBKNo5S%53Ef8wUY4>%b|R>T$`}-$5_t&-2Cl9 zXWG}5(NPayerB7%$aZ(j*{tk!d#@?7Eq&0PsygLKa7m}wvG`?Eqy%Q~DEZeKJe}i} z>$YIw?=n}OExUVV?rY_|H*Iof)Rt7gE8i*`!rgH7-Nmb$#rLt_o74JPx!lbz>-f=a z`~H<((VDCGf>DgIU*_i9wDe`M?_)m6G&t$co%!hIW{(LI#ZQZU@m!-fRqRT!@E+5A z^*U*`Zxgo`EfQ7bOJTkrk`&Ep|8xF+A;s{+ZmKtypHpi6<)!dZQTltlkNAF#b3S^e z3CWq){`datzAgFYu|&sZ5wVF2ZN8}A((knKYzkqZ_73vfs;G_FSu>7 zkTJE{B{TET(&L#TewvpA`(68T%P(XKF_bkt|k)k7C*L;ep+AwftY&Q+~xZ#FQ<2nZh2OeuVMi(hV(hJP)#`@qFQJ zJ}Eo1t?HD5A(vF?6{eoanqO}$yV^fHpZ8YF{KeAD8*{b8+w{f7pEYiB{@ohA>(#a! z6{ntj(BHeKCQkYKzf>lTSI75kt(tPJe(tP zI}c{YSHye$`?h2HyYRbZTNxt0>cxgOOMR9xiurxAKdy4UEdSqswG37I4xwgo{2785 zE~bH%v8GFBoVM`qm`9on^%^L@J?Ho zYXU9Px>yA=rakzWaM|JXv^`x9ip(}D|2+0X*x9S<*JCe>8)B-Tf}eSRay|O0yWeh; zk-yJ{h9h&^7%Uxb=Lv?m`+ZBAed4iww|1`aTmEA|GlUrSH3SLj?cdh2!-l#3)B2`0 ztzm5z!Y_B#uT-GhkMtRe_6HK zx8HnQBCB%y!DA`fE10VmUu>D=`z|g(dCD$@A6{7&Lt<(`ouy09U-l@q zxeAjypFZi{p!Csn^{bQrm+pLdbRzfr*b?#kzgCv7Dc_vIxWM^grlLdO-pAfs8D6Xj zKC+;5;i48ZdrQ-)Z@y+3e#>IKkknql)@@~s2)6ZJDE=(L=cYk#G+ z>y~blWt0?0-A750@DGhO6YH|9ToRLy=G^&zVXg1Q73?;mhsvVP{+eeYbo0|U_PtFE zOBNnJ)~#RB`8GkZn|FWe#z$T?z0%t4w%PU@_u0+&u5+~gcyagsD2cswC+GgXnO`Gv zYtq{0dPWU{U9LO4V*FRgeu~s(uzKP$rRCs_?FES`C2z7iYl4fmGGyGcjXll7&G7$! z{a@|{*Z;3hPe?eh_sa{$?G|Qlex8DJ-ls{oSN@pQymY7J zb^~iW%c`$`a=#zUw*SWXLY!ghpSSxNUKl=@b^PY4!&!_Mvik2@SF-u?tabnRET4~e z0`^-Q{G7N==jpRAIg8BJ zUOkZXK(ffeb5m1UQGekN-d~!G@}Kzoa$?TESm}Q=47?(5*_$=ITQ=$`&Oa&NxjypK z^m&see$CFE`q0d7wSMKTh%0q(F7iq5?>%^H`kJk+dfQl3=gUUE*O>O?{3$jWWi}OrTcc(*Dhv^c?f8Tem ztrB~1@o-*d)tR?5B+E?q?$pucF?!XM*ksnTLr+qz?BfAfeeD^_(-~aZ*-y2-VfxrF zukgpk=zr#0u6|*g@O_J#lMnu4R+meeCR5`G0qQU!UG_*p6XEfwkh3X}eZL zF>JXKo2_(4A<4n?fOhygpR;FvEf2b-5&ie=!&NzF^Ik)Xwq~Bye!|nPlf#{;J<0~ra zPbPU7T$eXm#NZ=vL$&VJjo`V=vle{imyLCdY5BIKC*t@o7rE$c-fZsTf3NDR5}zDe zufLoBe#P1UyW`j2(%JQQ{e_(1gV(K|O#2(k-7sx;POON@0*R2O&x@0jo8P(^1%Re1 zwynF!+0F1jpCOm?N-Tpe(-z$iFZ`bK`Nx-dfBssU9JuL1OH9a&8ArR-pH&nr%J)4f zzU|}ela-DY4i!IGo%$F0W}Ow<|E25C@o%%PPQR=kc8mYWvLD+_KJ0Dyb?_Uj*;4V> z-D;7yk1qpq4$Np|RFw?qjlV97FNwSgqrf!RBTW$P+ zaps0x_nS{rKQ5TBWp<&LF~_;<^+7+e&PhpspW2ogHtcKt!5VeXtKj9$l+#TPhD9cu zoueC0oYG_8qSO&5vw!XJ+6k-E*@9lbbEy9x_Wi*}=XWQaZ~xhLz}wH?boGQCk|EpNk94yy z{IO`^@?BmF_lYaboT$*8GqGU9r0vnq>_vGUJmXcT-(gz%FL83xgs=Z{ZAwo*HM}jC zef?3FM(3)F^JcA6e)jx}?d4W4E^K-jT`=xz$-bKAUCO@TsorZVRxyT?%#9~w8FIP*EV?fi;k}(z zZ|Q9&$qge5xF>S3WlKavyBYjrTm8ep2nBdWdSxq&gne zA|35sG!Mnp}-Oq;|VVrPSWN75-oRmQSw|H;>t+e}R|yJMC|H zhzc>*UNf!?I{ioDKr z56|z>|9ih@_5Vd{>rHm9u>5XxW%ssNU50nNxUU~!VAht-xc~p(_w!pG@4RlWdhdC? z;W{np{p?@L4m_z*KhGp%wc&d0uYYs%zCUrT7e8PxFr$po)9q@-Avd*my0f<&**w{5 z(<0G}NA*7kyZM*A+J9&H5w}m``rnd;>t$9yiPpT4wanT6=tpmNlOL&OkAA4C%gVNz z@fzmIciKm)NuGC8=i}1UUL+CX(k#!hNYb&po8Q|i?EE)ntFW+LuVZg~Gp~O+S9`1W z`@IjBx##_uG3Covh6nETU3q`km%qsUx!%Yz`fl0zsc*{L-v{)4d$oG~y?OBw7aDSQ zhV19KQ8c}DE>k(`Z?@Gt94hvO#*q+1-C{iM^O#6qeW!Ij2R1L+;1Q4NJv8 zs;*ATy}j$jhla{JC)LiIDf3T6uB~!X5=)qHw!3Rfj$^z)jMp_0iwmC?ayGH=TbUrP zVdt9UdQvdbvHSX0A@;)hgXfzj*17rAoRl}=KB$^k8zmDQCKe^g^Kp64)K?-mBXehM z`)hl}{25nbzj!s+c#;y+`q@)?DPKx-;j|z>!oh0&b^9fr5Ho1?PbXlHsOH4 z#`C?tKKHWJ&*c8Ss?W6Ta{k?Ahm{WGao^dRz5Ms0dtw&v#2M-~1t%&kuU(ZMo?)lm z5N(<9Vv6IW89#Vp9!^`gOV=yz&aP)!VShF)Nqfvyv~uy(V;Qy4wJ*-T5!rfpo3QlS z14gyC&!rho{Tlp^iLyq^`M%dqQlh~W;MIs1#BpKC2UwEi8#mdn|9 zR|<go51+TbTs@@(petx@3-QjETf$TCn>qCP7xi;KpdjCD2yXMsgv+|5n`_&WF zZi-2;O_$A7tMX>se&NxIsj95iSEXuxDau~nz_{gPze>cko(r1IVev+;+b)LgezVZ* z;R? z^7|G{zH;ro@y&1M59QuVe&Rp*u8e=a#iMWUZ!foI;F_pg@AYrng&c0({n{V07%zw} z*JP38-*Rj9`hPpt-e-F8eZT1a!;|(^-->s=mBzn;VS_#2lHA7l3)>FNG~8bNY}xz` zrR~O=QW=FCPcqE&Z99}aQ_1=T*Q;0aRor4PsBvEnJ=K;yF=x@nKg)g74t-2~yexLh z*-uXzt%^2=ze(E`=)t-&s`j?pmxgO~cj_hm-BJY}OD-04Z21;xT5;*n{$AgblneYO z{!{j(Tom3L?0xqCqx%bWC+GdXH0AfL;_th2Z*SY#n0veG-v|Ex9~SgScFxzXH+A$~ zc5_vEDX3Pj{UwnhX2g(P|8shMWohU9((H}0SNAhUz1hI4ur9ap<83DU&jwef& zpSxjRxmVh@J1O%nZE}46T7{EMwQ8H*EU%*6`2`0&W6XXkYiCSuo5bNhL9tFF06{!SL>VvT(0x-jwjuS0$_>+aN@WVc?~zUd!#+1kJ+Z&{&amvdJhEPup# zS2(kIDfjkuEvr4I{doDjW%7w=*%z-l4{zJQQ}erF`Q_TDADiF3SjhaZeeO_#Qc(_eBQE!S^+m~yh>CZ|v2 zr>i<_A45AD|1qlFdF21{hTSq-4`ZRQNAh#4c@J;f|1WTR{_91*KLx8heM)Ei@Z_?; z-P6D2K|5C8lfBB6aCP^Wd6HKgdisBEytwi7+ln=ito-`J`i4K-4#d7&x@ATK)hKe@{Y;dfylukbx>`rqc&5#zVtzfFJhU9TyTcX;3GIBepq}NT`|(?Xes>%$ zhOCKmdfDTj`}_6G`DN^Xw(ZZiDZcXd-d^k7zpkI&(kH+BJ*WIiKTBt(8b zU&|Lt=0p~0zG$*IsjSTrw_w`DoJkxfRZFuz`s`qBX;Bq@_-Qe-)rDD8URTZjykn}c z-cAed6KZ9;a<7B-OV@r~`}TLjWiyACEryyLADgBhn_!gTZZKJ^a9xLVhwklXGV{1R z?7sECt2*>++y1rhezx~LUH5M*gGI%Q2hMhO_vXu)SKB(ro8AY7`>vv^JRf5_7s_-@ zv(}5&ySU+`H*v%~`37-E$DY9#M)0zce zSQl1qNt}3T#e9#|`(H-i{(exR@#F&i8^`0F*47_0ykhzF-(vlv!hL5W#CIlOX^*&>T)iGHn6x#)T|i}8Z2diVRe ztzCP*eY>5%?R${Ie&GdLvp2K<2zSVfesHn*-ORUvpuEMxh@#MtVuAcQ1+W0#s_k3vQymMr;dCAE}?pGT;dFDOInJ8bw_;4|Qi=6Wp zBZ;s3pS-*sVa{!p`k=caS)(rIgSORkb@$IDZzAqSh{>LOr69I?^F52(|KwipeEIKe z^X|LO-(?GLi5~v{@9Ty&`;`A3&HNkx=aG2%^0NWKIoBJH7wnyVebWCd#tT8^Yr6|B ze)nr+`4#`?X#5=Zd{ryn53lqbv~9N)rbIH_*v*g_y`bK|VbcF|GZn+5PvuwZdD-33 zT##<^b27sMMqOE%4xiNlzpk;BdTVbwDbCf=^U9ESUh56^Ni4-i+a48Wi`yos%nIH4 z=sbsl1oJXYk5E3BZiOs|lPh?;+7G{)dQ)f8)~dN(*|+aMoYz@$`+nz!xBXAnNB`Gh z5cxm<&&l~VvRj?^%Bt7CnwarCd^M{>`h4Ymi)+}WA3S*Q;LDdYZ%VAst^j4+TgNUW z3MOo4mAkS3dhIvI{kjE@y6STcZZk9l$+5GFrarKYR%k?y@FXhJD|NQQq_psHl=k!D`FY%em7r5?ia+@js#}CEro73;*bMJYR_4(y( zCdu5)%To&wzdX~@8@Yx|Jf)em=r%L(9uU=j*A4# zrT(J7F5aH@(|@epRM6vI^5@u_w6C8cgdVs4ea^dxeM_RCyGWdS$kzw=57#QcyRdE6 z?@N=vKb8B_J$XNqUELqMyNnx_3)-~FUfdVfyh4m&?YA4ZPKwv&>-N6C`RDAz+49?j z!%D%M=q#-6uxi{9voL&d=SxI}PI#q*;OP(5SFOEF&eq)0ck4J`|A94eS)Q2mFV{^! zSjBES+COvD@4A1=%=d@T6h+o{$BRCVF%tWyH|K{KZCMe!L+f&P>8U41>aqup^2&G(Z(EV9~i z>#FwkRdX4>|LVyJ_zjNzZ~3MEHU&3qH|)MHJNN5;ffxUGr>y_UyIm;e9!8ryMt zUF`06pG|UETR3}McW;W*Ww83a<>|iNb|J6CuHCc$8dq)2_(%U>Xln6yhact*^M6z* zY`EXwnaj-lZmB!}j$21`_v?NryXN?D$$Y~w!OrzMsk16Azn%9vGriGZ#o_*!2i1-+ z-FTpGDsp-4Dwhx1R)*Y7=9j1YP5aZ#So=fi@XG&lnh&h0S5WGDw4tjGiTQT`DxBr!0U3PcdO~LQH|F`XbdwYAj|KG`fy2TinnQxc9xxc?&p?AKX zAd5J+%#5ybyA@&#bL;y=6z}VHcZ>DCumAu1efPzzmtSwk{;FQBcp+&p~pMsVoGdl_A6G-KN*&@`*`r_m9kjWILV zeEFb!U;AVK+6CEPLc=H8_O%54f3oWSp*!1cBqmJ!vSKxx&l9%)D|=pOZF{>d_o<<( znef{yrCBQ1wi}u8y_m~#^V|1~_Y;1fX|BF=ykGv@r231^^=4)Fx9R@BzJ1@<70Xx7 zl%%(jt8ecAT;B73qY|t5nZE0B)wwBkiGlCe=Iw;^19L4{#Tf3eUa$rY3w^GO zejxV$^MT!Ic{^?;{mpI6zR0LD=Z1JZgLi-CwsUKAPKY0SCH63tGicMbvWa;UJ~}=9 zXdZQ9-5<_vo(puNm9ot#!j^%UT zF|9nRyR}lhp+zyHuyp<_FP#euSy%AKo7{N2FfzPUG@<9X(F=CfmrJ|EqGT+y#icjq zrY!Z3_Lz3yNZ+NJPy6eH>wO&@aBKp8878Fo-S?j6;p9c zSd*RlaAHKrb)M4;cU5c)*luiSvS8}=9Z84w7bI<|y1^PXFDJ4#$C3w~DT=r|rhF5$J>HG~_d-`@W zltn){H`n^EcmJE>y^qcRtY>+4-zHaB#^Pl2j?m`t3^T4CXAow z^F^C&Rq@f+RjPk^K5LqLW!=}zm{OUj+4H~N{(0-M<*%yy4qqVl6NZ~?ao{HcU}{F#k)T@w{2qzD`&7OXISH&k|-#U z%U$#5pYywedu`v%s8=Z1c(UJ5%X5N>hmC8lfW972+UyvvBS~9h?w(?=)>QP%IHH+a z;b^y&ZQiQqH6o!K5-U~e*8OP=Q#;HZ#9?@VDb0#a^U=lst{Ww<%ABfnoNndxN%%PH zdf|ota=$*gX8rD?^X)sI`Q_s;Zri`8?9H8x$@7;NvpXoc#>OqV^>IrUbD!77 zd$LK9W$z06O$T4iG(6X%WmS>0*u#B`k*xImoSQ9dd|T{v^O7CHHgIg;bZF|AosZbr zB&AI%maLH|=~&Ce5-z*%X=grnVOQIn1xF`7mtk7Sywv&r0{-=vA6$Af<@Q#Sr`yi{ z$gMv=H{v76;Xi(Ee187loAY0)8Kl>Ra5ucOTw3#7M?|jgea&<0>td$H+XGj{v*awk zY_@^xKi7pv6LK4m|J`;Vy+5~{Jx#AoobBk@^QyB-M5gh&P3qX1n0l}=%+KQ2H2ydd zcJ9U-e5EhbezCR7AGUD3^+YeG-t6b`Uy;mG5-+D)E)^Dj>uR&kSv=%-=@G-InGy1` ztK|z8yXZ7++$Z>&BjonKX@9)e%DvtD((d=hyYG^Z^QUhA7yj!({GAE+|L(ni*{@;8 zjddF;bgpmwn#Fiw<8n3e8GrwEI^KQsd2(>DvgKOQuvM%FxU91#cWh*MpvQ2V$^QEb z#p~wwPs{vY=QeWR3@x~$%j0*p<3ZCEUEOP;vUZ;?tT^0X>RF>=GHJo9Z7aAu1IkKQ zFif5`-J3P}w&eZjN8ju^<82=9bPB!j$ju|=&+#3h8+QbrSFL;0)^F?h<>=yAok=f@ zKZ!{z})||N6fA?3$Z*toH5B-?R6<&0m^Z@nT{7{K$nmceglw{3^OyjN$d| z|8J|FSLZzZ^Ww#gr)4~0`&lpetx8=H+_?=64rdSK!`&NEI)@sB5 zb?g6K-FMi%@5Xedi=qeoUNuciS}De$TY7yLhw+J13z~%T6F(e#aI;Kl4S4KII$qs| z|3SUthVARG|F>H3ztv%X>X)PK{kv>yPi{M)`hSXPbI@MJImxPflT$qlrnQ~D5jJhf z9)pSrzONUZ)L6 zRoh^0?JJW9Go%~MlGsujrt8Jo{mhT6`PjeafY*mC#toC=Zq*pwVNHmB@F;2j?R~}V z)h{3JeJAh7ze~6F-*l$m{VkCf`TV-G6M`hpTv1&f)~-=*9$F0WroZiGobcJFFL!9&G&0zq>znc0u$r zz1`WHcgLLHCcD$+;DIYMf&yjd>{=jOJZWJ>jEPXpF>@xBO$yKL*Z4l%Ht%IM%j^R^ z={e5biYMbsy3=`&w#`|+;vGMubpO#n#~6bkaZQn1Ig__%xPDuzP-XF_{pv=GA~Us% zk9K9ujVk&2zvTXg>ZJ2w-|skoe_HqD`2Pc;xiv*aMI|X;em(g5`nmm|7msF|-}~|N z_y7C#zx3wyY&-w{LJy1-A|oBl06 zGyO+us^#t%gk3IkG?m}ae&l6o5z68an3mz12Nn7|dS|;9g%O=SR)v{E5zaNW4)oM*oi8XmK zEASmz5iQ#7{%V?N!O{C`j{MppF1xy4$L3(_ndpms2Tkq7|E>;jyI=Wq?#AHt`(OI~ zdtCqh;7ieIvo3i2^1721chT{a*c6!yYSrC`r|UknS`!=pwlBz*<%aC@l{#K*bAKFq ze*F0H^;0>`7l)r`GotZ!wtVy52oKfM(O($_zxK5kc&IDLCpZu%Pe6SH_*uT)W`G+XrLTmy~E z6Q$MVUp4*Fmx@~UzH((1oAEsNDF=?QA7VZ=&(=l%v+BIPd-Gpka6R2s8Y9%;@@C@8 zWhGbFN$HL%x|U{aT^+uDPTq3QtNDyu zE@#j7cJFRDww+b3^!G2ZyAyAo&dap>DK2!bpw!B@%_SMIai>d#&IJjAWp(tEoTJ*_ShEmzP>~EI5i!_^-#ke6yytJo5Ho=uy z|HFOz+FyIilKy1SX-3|NgZBp0fHpbUo`G4cokqNKo%JIMQ+NKgU zNz&li)St;4j4w2L)l6&O_tkyVcAFoICKmU+?qpz4kM(qM47sDb#iEKaD*cc*(}pB7 z%jY>ur#?-Y-fwT{VzIG5!v2~5bNgxUuk70PSNE*%xxP3n($z#v6HWuINRXt%JCG4g<4)VxyQLUdOctI`cXCg!N z{6!PfJ(nGbkgL8S-omzJn{J-`E8%tf1J(%3FzcS@4sO-u;GH3%`%h<*VqU_;Wnb3l zYd6bX_>{EgM7_@Cm0wl=@Be?%IRAgu$8%FZzq_^4*v_x|>-r<>ojGm&ewf`nzGKq9 zSQd?s-N%>?-21ouchZZayBCAnau)tBCmn)iV+^eCRXpy!xbr6~?~iHTUu7Il$8LKm za%ewe&9tk`jkOQ;9OmCPGk6ep={D1H_d90)w;h;u-_XHHjg!+T;ibt{&!i6xlN!}y zN^(}NTV%y)f8%>;$_M!;LFad!x-Q>2e|25Trd=|@P08_sJzXA0Zn)?KyB?c$T&0lt z^GEfdjr(4Sd}+|W=)PTg;kLiJK0SA4?kFrgGxyg=|61uS)BorFd!H}P&~o6TBf`0{{`lI+O^Wz>W`xmUgg%8pZoLZ?yU9He=3nO8ayO(bYK_nFhgX>vJoY=;#hfH?tl;0ZwbAlxZ*&Q+5o1_p zthHqedjx|@Ipd^qmM{5l%jegB+3=eCHdB5}ZlhNOkDsJ)oJ(_G&jMYQTA>t=zMxM> zA8{`Im%0AS)GwR0YhJcyyxMg0l(UM_+C*;OST>I{O&8Yg@VO9nG1>CA+AYy1J%(Q{ zny$%FY?0kvFhO=|+OJNR^15p^pXN*NtIPcLt=I7TJN~+7(F^ClN@YCo|IcHU{Km0QFnJi>t0r$zr@-g~v^4d+9@OXLGju?KffP#Y{^TT)@us z`)@Hrl~}_2dA9G0`QMdQFI#8z_H0_1ir~uQF2Q%FO*j(F#OWJaplV*=I7!wl$H@Ou z%_B*x@P8-F9Xi#uI9c)qd^nE8tBB2>#P;c0jI(r5@-?*|MZaE6UQ^#QIqjF*n$;Jc z<*8>G1O6efvnaX;6v{(*DJp-H;Y7q**xnEFEbc5lJS_a-y3Zn(yim*ra}O@{Q99+zh3bp7I(}?6KnWrC!7`uV!_)K4;Y>2gw%6Kga9; ztk3-`)=>9k>GJl>Zm?fBbx;elu&sB+HZW7VW#Nj=4S-iMTU)^FzfwtGnx*_i5d|&RmwDRmGOkaR2YS z^7Z<QqKB`V)w*$7(aLKT%(~l=|O{~YWzmedH>%>&x|>A-TYu$Qh{d2 zaweaw$g5q;);Kj-eY(P$xmYB(I%l_P`#ObRmo^@~B_vzzaB`&$j08zT1pE zcII}LhP%qYzx%t^%zr;egf2tW+pX`WzyCN>)AP$$mi@V_{eRWg+C@%YCUsl#AMb;o zd;jG%{9|3Poh|SFzPq)Le+s`l<9}{ zCpqntURW2Ol=$e}+s@h3-R`^$uX}WRL2kVc!<0Wi=i8r*4~RYd@L~gZ&=GB|)Gtam z*DVX>Zdhkmt60Idqm^5EakBXBNQRuR!gZl$dHgR{?X5Gt|D3Jn(!E>vUr(<8{oJ-% z!624J=f`$7yMi|pejhrXZ&m)Zt-3s||MlH{=C7|TQc+VoIj?2i>OZOLzZkDR=unrr z#wTJD@7L5uRgcJ%XZm@5&0Lp$<7jU|^!X=2M_wfxPxj0eed+D?DNNqBV%xp96`S7X zU%LD6K>qLDh2L_`tyYN7oA~GL+W(85=+E-Hb2N2}!k$RGTmP@+Pm_DKrtH}LYBtk= zi(K(L3@s|&C4Zm)BW3l&*YOOYFaOECc)o3~{~MJ*jQd0Vxf`zPl`&p;{`aNdfop4{ z?}pFcdw*~7(<#>5N>20YzAK2X`g-iuBd1I4*~0seJ~Vgu&D#*^;$7)AZ=1p`ot07Z zj;1cp2n=>Py!@;D?MXepf5hTf+7(GNX5GI3=EK$gG`GB-UElxRe!b7P>VrRb!zS(j zi&oc{vM!IT2(94{*^D@xXp-=GWpK z;T^Nnb8kwRGo9PE-#Y!i<$Jwn;Xm5b?}!Sc6+C^b^TjVwfSyW zUqBDLHS^wY&!qF`{CS*TxB02U*ZKz)O_?`6mTp*OD{y}sKWBXSEvxX9d7)o#%-dKY zxZpXX-R~c@?|S>+?RdG<@%zI)^{=8UF|H(e*_v35( z*Zr&f(63#$U{~8a#=Il%cD^>t)CpT!UFGoHyZzl`u2*kuWund$etCa)_xA^LCr;eH zXTp;xEl8)%HaK|d);Em>x9{EA6u#*C{}7UvuB6;8eYE4{Jz>) z{O+ee8dHlt1EgUF2qOZGH==+1Ph~&dz`O|KH9RtN;9W`d{w)dtcvPy0+i5{zg5s z#>e6n)o&iI4%K|!_=?XV@_dO|Ec2YogM8n37N zEeVlU+O_I3bNR{K>Vv<6zh~Fp-q-tKdT8f+rWf&y{y%dY&(D!B+j>#@UG09|g45e% zkCr{+InFVC%hB$w#;f+RXsw9Y{6VPm(|IFHp>0=1&Wf!ne=J{pq)+$7Y{s_Sdig(} z<{q^M9YY?RUORi|+w=ebJ=U%(wLPBpV$trrWbihVHxkTc54h)lw`N@Tll4IITDKKX zLZ%&E@{{v2y$IyJg9> z%>No4io=~3hqmgl`>Z%R{nG~qwsYa>mS`dcl+Otujl#ytyulWsUc5juh!`=4yKp&FFVSfNXt_&x%xI? zxn245Yiowy&TxhtEoDmy2Z||w_rZC08+e`GVHa@t2 zE9aTK{6^bs;oE25c+@SPnsfX9@BJ0)%N{pxzjLHC_xIyh@e}0#1YXzpx%z_dftILR zv$u^|j2E_4TlK9xcveRF4qw@;3t7|kW3B$4x$IxN_i9*3Im0L0Wqj8sfBoq)|IV)a z9NXW1Uc2}AtXPHuafjPX_0M;*AKG@{_q4XV4;IzQoX|IsJnMTW%OQHB(j3S5lw~vP zbo`Ur;-)Mxp68yUb0N9IH)pD@+LH9!8-;FfT;CfI|4Dz+ti6>_51n~&p~LzsbMEhM z`9GJh?%#DP?&oU1?~Jx9wa!*8h+;5#J@?%MQQkivSS?ClJvn**|KI!BJ4JWJ?v?Dm z*L+}Y)!UiR>%S(ZvrKQAy)pS##^zX-58REv|86_5-nMkbx4ZXw^kU0@SO3}O@N~ze zMUFa*Egl^g4lC$iY-?Y4WKG=~G4)8_{-zzgD$VKKe-iyR^owM=SqV|G(_L z{rukAgRwQw(_e10xBakOyZ-l;`Z<4IE;@UwbjyC#9hT|8rtMm>xb)L733tU!2-~RkB^IdO5SN`qa-*5dk3r{VrI;Hd#^{)TE_dV~~JwNRK-Bv#DXSeP9Onv*ims6q@P6h}@#*|v$2-VjLW3PPT zan51V<{x72aRFv)d^4I{kKRgbY@D-Ib@q+k$1Zi74=jDjX?|Bj*S@%EBgza_z&})8Xr5t?U22xp~?C z=Slx_f8O5z_cryuhuoE*YE!oDzmgBkt^9j6x|;v}{jVF-msNkezkTjOZ=op#l6rA5 zw=RYkExYk#&f&ccg3dPL(QZD1UvfWfxA=5T@8jXyYYg_h%`Z!;dh_YG`CWGV-y7ev z=YGHZwqBP>!h4q%=jYjta=c4lc~vE~f=;j6u-Gc1$B|zps@Kt#_ew>|G%jIfA;#k+v{Idu0DI_+_~Q__9hjNj~&$x*PCDa{%-mG|L@B8 z72nb~a^Iuwdv2FixBLku4%<)s=XX9V78lEpv#EZ4q(r%)Mvb{O^7H z{%yTje(bLUyz^|{-}e7>{l+DU?)=}YwJmL;riN87h+^1sD|xQw`RNCoT&>D~f1AtQ zek+EdBq;c6NbRRbvz{c{?A`1T{$tnN_^DT4GS*+;XJ%G2A?BR=~_M8m1JfuD4Odh@+tbxOZmS!IsZHR-^=bR%D(;a zIA5OU`%?)KUSiu%O2imxg`IoEY5r5ikh|${x}(G0TiYvU=Dxhy(qEe`Zr$|Y$La;= z-~7w1|NMA+n|hmm@6O==vEl#syzT%0x0u~w`9VFF7yHtdv(MymvklN?Sj6{o(keFV z&mFQq4iz8ol{WXY|93+urc#Fq%q6uEn)A-BHVZ~xc0+z)5;@BFy1;Jv`_{q>XfAM586EnUrJ zurhSM?$-mi&VSNv4d)d9!tj|hKUU>WPT%*XmC5+5=l3GU1#62{zFA!f z{yz8X?QdtRS3KTnYWv^N%B-w7JqL$AqSSsOH#*MB)b*UakN4c;@Tt>tCC#%DY|sRae+*;hZaBA0n1V+J0NS>(c@;hA!2Mv2&yg#qa-H z{&4Q^vRwObADZ{>{`TFAegDswM{hsx|8pYtPwLjU>+hLnH-&OHn7({g{i;Rtgww-^ zKX&i`z5Af+|2DDzZkC^Kuh#B%w@mizb9*WsT}{(t%Y=!9$){rbpDI~uNM8^TdP|6&wjmM$8jgYwLWUg{{Md)8=aqg zRn+ceiqTB(8P=&grrcXF#pr_HRrXt6p-UHez4dPW;a!`3f8qpzwG|D5QW_jH%Df!4 zCLB6rQhfSIp`M)e%n7@b(oNxXd3mqjv57xQu( zue_wR)?7-b-RjxH)vNv8>mRGKe8{iwJ}GVf>GS37%?tm3=?ato`}(Z*gOcWh5$a6a z7*_}%koD_hT=-ny_IW_u;X{Q#8s8;vy(Y?SWzO&~xw=xo|J|#Pm&6yhDJb~gUjJ+d@78YrW&iifWlPP*`{%D$<@BF=d2;i#3f+Bgil2C_=9G1< z=WX!KtQPqHGRE;B5mo0-y^OP~PL;PVW@8+~$AUc$RSIm9;5*wtp}B z|9bs?yNcJ>bmeX*Z@kWLQ@APl_oG?bC-Y`SJ>JD*o;#zr>a1dNugi{dW&=xuEq2zo z%*{WfUO#EP|F3KGb;Tdzp6_*c?l>&4)k6I3(JS%#7dk#My_@AUQ;*$G=k!%$<|p0U z$^V{gk^Zh6FyZ~b=j{5ik@G#jvI}n%{J84t?)v&;%hpOU-ew5l4LxnycGmhrF(1=; ze_vldn}08q?bm+g`gZ-_zXegfUW)bx&}whEOv27F#L)w^=xv7~c*PCRsb-o&-v9rqnZ@;DW=v9w`g=o8 zW5fCkNh{gqKI`6I`Dsz2p!ct8Z%a=))2(LKpOFt-{&dg0v9Xq4*7E0UTlPMMv$i5- z;_GB14c9LAkrw-*QFMBt^`+pns%Iy6e9U0sl74;k{@>+~Kjqh7dUomC|*y;nAg-scq+PT)R$dgs%dB~?XL zMOqWR)Y$dn_ubH6zeiS1QgWyA^#ko63=$h}h}lKHeh}_`=WFTZ?A_C1?PagmO*y&x zDQ!ZulKdH#$V?y^!X?2Xg8m4(sa9dwpac-Tt9jI$zF!z)?aor&Jf%g*K>1YE$iX? zu`dpnTu|nJcD80E|7rQM#iuxObkdnCpV!;j{@EWgVb71wEtdB@7mC;CFx;`O=iNO` zTRcN7luwN3WNUN3j)o#&?SirVq* zs?q1GRwrhCiSm*xuc{DhTFxMQ@I!j|=jHRN%HBPD{=47)^Xm9*@-|Wl!UtF-C9@<8 zC#-Yu4F0v}d0(8&PRWAYGwoA9PhI@kY^NE^hspbUr!Gy{xBq!}O_h?OJ>yBJge|JfgP6%wQybQ`WYc^W8unRC>&Ei|PjH!Usg#lv>FJ^JPh zpVZANJpIbt;wBl}+0|(qn%G?U?CSp}fBoKR6ZS7Tex!+&t=sk^gWb9{r5gUS=A#!Q;;WuS8SVJ@?)Oo%do|zt>kjO$FEC@TtQFmOC5|PB`9W)HxW?C* zqdR*X7EEs9N>(f3PZU2b5Js`ML$YpX?W|B+0+Jnze8X~t6<5{(b6Pu?K$;B^CQq=rzd zetdm)-Pfby(=K1`Rr~mt!{5d?g-m&D${%-oVckUz2^Xwi28FhM&+CQv0ify#vabace@#G@iT6gw@~ww-Ei=>_QJV&&for#dh3*FWC`|51Hgpf>rTv*YfsH{uf3RV6#c%YT3QCB*;_ruTEzeS~fi#%KTy?>w9>Z%R#hZ=V?>a$n~+I;>!f6LseUuO;q zFW<#q?_Q@=@!^E$_jmDsP95=DEO6pUD!cHkE{D3pI;+V$>~`4vzUq|tCoTWN_k*IE z1z}9{ejUGSe`pg+Pifw($}j%s(p1F57rQAn6eez|7A#N?^jmU+CE?@shXr}5Pe1KD z=jXHGwp;ekuQh3kv!^BhzVddXVWp>^&bN>5;*Xx6n=3ut>%%&JnInySackfF3hmk~ z6EB$;^;TN#wTYeltE`8&!cXgXzgB48a#o!GvLk=d<>^~`|38`Y`1S5L>wmZ_u;j7u zb=4@ncvYuR@v8NC)8l^It=}(PT*vG#_vW2d)vFyR+;3U!=3{yL_UOLeo=U?gv8{o^ z0vb6vYfdrOd1sej`m9|Xe^zg)`nxr{sneQghS*5_xIR^3dxP~qNzRHF{M~lUehgn8 zoo|(wX-P{778Ct;F@nWHLVEV-%pwa5276XoEkKIpYlu zg}%!Td6rLJ@$4&pw(-G>?ecuP`s=k{+^E;cc>f~n_Gb1>$20pyHlI&Z3eZ?{TDVU7 zXUv9OHR=&_X7W4>if27}FHrKG#l7Q?`Yjo{ZN=(}ZdCl~XPw_||4XmAWA-oWM{c|> z4b00LBcsA@_b{+=tJ&CQ1h5|Yx**E;{L=QEB)t1i*bxIg*#L>DE&>E*YN z->dn2_Q;hhB5da3mD5gFEzp~Ca_hONvt_?uJ-Gbx*9CKJ&baOFZ-2Q(&Zy((?xKq? zZmd+kp1CqRv~Sm@eGl%aEZVnap}k}OZr7dNG4>L7cFmYPVTy$r?@`_si(+TRRZ2JA z8azyowtwg|NUWWZ^6{}=clOrttrKnesaLa`0dOKM#KIUl(Fud8^KL^M(n2=g%z-N?v@p`D4YK`OnYu z@A>=f_I6cWwTEu@x&2x%tF8-Q&pezm#Z`Kzzk9T4%SrsAf35QV@bFQ;Fyj|{9fcj6kNjz!%s5BlLAHJli-QdJ6VRSF{#D!6eSG99cRP90Q3ckY zpVlqu_d2}Gus^Cc_Wy>O73$Yt#>hSnypw*}D!lBmj(nAGV$~0qnD%}mJG#F@NTG0ooOqO8V z{c%4MFTb2H?`LPmmROD(Yzez3K+|z|5x&}e)_NY z+NV<|rWke3wPat{arDc(l#`7oZ5}?K9J}A`Sm{iw__g0pUYYp&(jm50N5i~6mP*CX z`FWA;-Q|mNsf*A5Jyv-3&E{XXE~qcO&dqAh5D~D0@xY<;3*P^mc zSmwNEEo%Zp;v<$s1}C-lz9Wq%IHye3edEJFlX=p=sgHbwpNc&MfZ z`CRS?x;*qZU|;F{JM5%>-uSt>MtCuK#@>V_GhJX`Q_mJJsUX~(!aR&nwP#g+;h3T zYCC`M{TotIc`gkH(!-Rm%s+$hFuS`Zyu?7@KU)>@7spr zLrc!>m6*%^)JvxFg8OMZ+0)&de%7o|zW#Ehab3OQg4;9xhP|!{k3RX%J9*byWr4Qx z8FjB!BTuy{9yoYq1CQ=vS=WZQD=kyZ7fiac@sLmR4(klb@|~}}cdssge2d>~f`9lX zm)kFr|IF@gc(?n0j7ZeuQ;UxkW?#9G73g+=%}=uHw_C#OEIGBui!whmE?_rKE&Ant zG*`&I=B5xcL6#)jPH6wi-*x>|L9ruZJ!=yWL^;F0aBTuYbMR zv?%A+`4r~^Ak~d(iU&ORd)|!RX5G<{cRMR(`>JqS5M1U$<@5{ZeYy rplS|s4%i+>h;@UBYRuTXpj7nsU(N^y1_lOCS3j3^P6 diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png deleted file mode 100644 index e99022ae84d056ebf09328dcdd69a44b8ff8c74d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177632 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 &28mIrFBuGvk3(D?R!0SZ1&o zcSC!})6<@9em}?N{*Ubc_x`ePJ|%nnaQu(*6z;PpbgyqzITz>kNad^d+5M~UpJ;oW z66iViOXa?)6K2KyEH~yhtUj8yah2}QU$-km3tw}YO(}ok+gX{h?n`Bzl;Me)##dtO zmuy>d=IZ&c`OTH?=a$@F6Kq$=3N+<*V;&`|ka3H>p1?C~;QE?h|qM z)uVzpov`!Iuf7^(w$5~^`O4(dy&vYMBv#r)OGuyJv{5;7TZ!%Oqf@nSZeG7ze34-`+ZPMd{va=sX>$>NN%$5WcEWerl`JOP`ph*YndX}x zHh@F#t@{G8P2bIe=?z8So5&nK}{@L9}>NR8D*W0H2-Q4Z%sF%KV!i(F2 z>MMSwrYHYueRluo>a{Kxmk6oMPHz9TQUC9!DfdNR&z5Yf@xK4zsr9vK!Y>zlew;OH zk!k9?$J4b>mL9)fBDUG2UW?^KxsGW6m$}FEe@9o`a46oqQGcN@_sc@Xt z_%Zqsf7_?!JFoTM{-mr~uO>Qwom0fcyL;>%V>m8U)yckJAA0+r^o`ZGe*E7s=d5nj zpM^qVeBHV38Z2+*WKXHNv28vWz_TG)Q^#cY<8wI)e+tUVJ|=yux2x6q-TV7{`u^fa z=iC$*CSF;p4?c+T;X`-%+LA}l?f>tLRoTMy=-GcO=Oq2Pi}c3{!y46=W6%ky^U-w9vJUh(gHd}889`yb8rKQdOmy*0c4D=8zSv#v%qr!F*No4udEw^qZT+2yQ+j)1&o2`{#C!hD`ag=& zo9~NPwr}~y7oWTNbFTL@le_9=yw>R%zCS;{y)pmm+Yj5Wm9JY<{dvN|lP@mF%*=?W zdOcmNe)8%YURrENpDaD5BDy>$sdn+@7b}jz&H{MPzBadA&C4v*$aL$idv|VG9dUgg zcInvPnx7Xh&APuKd!2r~)aQLB_m4esPV_dbX$=i!xlqgTC6Lu~f8VVr?;yhxCDY?I zHi_rO zt7zfy)`Sp>{EVy_)JdLE#}LzZ=Mdm>SpNs;dS%W zoV@e3H~$=oy=mX}zxzJdfA!s^A%}w*)+9{-RB^ug{`Y{0^K}z`Tz=)O0UrL$@NDR3 z*mC4>0u$4>$)@kyXVyK+T65xD`wGit(N?v;zTCe4{CWNxiOtq0mRM>qEO~fF3p`jj z`9RXzd9^R^pGy&6ub(dbeUEjtL`|%?W<0r2M#Lvi{=ZktyzZoLL8oV)(_i{j`j^3i_w4r9 zw~O}w$=vsS=e0QFJ>Sx-L(|SX)MvY5?>bBR) z)teVut8adOZr(Y)v->91zN!75q8$4pV_7Xvf{o2GPsNoz`6(P8pA)%p z-%nFM^LO{R>^XV(+NtP#UjsXXt#db@d&K{m#W^|A=zYiI-rpZ(J}(ZpS!N(QyZ86D z?cc*0*W9=(wcuK&=>G4KSFU|`N}ikcr*fOv|D+w!&vxF7`d0PBKHdE4mc#1~%)I|S zq3qqUf^YWwYqe^0jPHabG#_``y33LO_3VB1|M&eq#3Rb^Cxy9QyC&aJnn_k@0mB7F zjWd%3H_U(i>uyT-wye`(L5^8|Uq4ON*7u(2)ED-tE^T=Pw3oLahv{3z{{PA<|C@L7 zr(WIr-7L?;OkD4yy>aaMWny7b;E&~&u(vcc6$5IEzZBE#az7i%QQ~u-F>U%quc)+yRV$KKBBAU=F)%P z&UZ0<%TMh~GutdcDny$w`|8YCRPOm$+{>WAtp7g_)zvT72 zJ^%0ccE7ag>CaQ^qK&@xGN`MozvF4VHT$IKgSCslnO*xmZ9 z*RK1UTl~2^Y>#Sw`rBL4>F4)KNKd^fFZpQStkh3O%|Rv9S%rj?Pq%)U{=dHFS;)5E zeaSZu^;t`uoP77r`?WiNo!$NGIm_}R_uIZ)uRkgCx$S;i?!AQI=aUt)f4iJKAL^E{ zU*PT3>8urVw|?!u^7?H0;|Y!OU*0Ax`FU1y^`Y0dkFNK87UeB=?ERdl8>i_{{-mlo zcl*aeu~%ms`^3)WcpN_Z@pRw@-eXqN^P*R?eNxS2zV@yCS@qnld+(jkeCpk~U!Ubj zUG1E=kNTfK`zpHpdv@8SXzRZHa%|_%uZ`hN=)bt-`SaB`|M@zP967l7=ARq;j;a1nf6G?? zaQ(k;-X8lqRB98<;yW_~g_1sh@r!-`ZtuB2KUq9#=NHU8C*O7S_r!B=9&KAI{aWhZ z5|fo>$qRm}zSy%%qt5>5t!?vpkG^lHIQA@hkM!#s(+eVc?9R0rxnIxx!<*iEA#Yu3 z_Nlh5|FPYxTd$^}~<&U%5 z?mo;l7up}o`{7l{+K*d!x!=E?`1j_gcgi>af4v)gGvA%pm}?fd`CKX>fAEMNUk`x&iyJD%*Hc608(w;lJV-oKQemN;$7tAU%}%;x;}aNgXexQWR>yRNK$ogGuRTWCMK z(s8k*3)TCgq8HBYd3@zd#QJ?TC-QomquIjOZ0VDayZmi#=<)3Hn^&f$1?eAsy3BOe zyw#dl`U8Ld{3QQ-)BbBcS6#hus7!G*IRalo4v}e30?0tp-`eMzae~m zsBtyR^0&o#ZxXhd6l(mDuiN>t{$_o?g?a1QqXohTzMj)8x%Titeck`xZ#^0IF-$NI zj-GyIvm<+B3}}h=#szm&nEsUq#c@bY|6;bR`|DTG>M^e$58u8!{$}}<%gY!7_`>&q z&P(v{bjbg;|I_5_n;*(nZ)%-eZZ^-mPVG*~8nHa9wD-F{*L^f8ITbUDakl>6N477- zr=L`sZ|1J&8|9RupY8qr@2TZKC!cTQ&%cuMyL9hcsbJ$z`qC!J**grc?rT~6 z`XhV0*DuxZuw6g5Zrr!_Zp}>(k-B7`-{#i6-s#0s?QEtAe_u@Svb!?<%d&Wr!sYPL<>M zz+LL4LIF)5^4G_lI(IH)^R0Q+MyDCyY^qmP{>JV0ewV7~l>grQe+J!Oa%=Urv&VGp zQWkt%)~H%i_Cv*U*VKu#$O-i?wqc$wcj>x+aC|Hv!QF|tuC3BTq|8~8?*9r z*$?3fU+>>5_5XJ3>d`mHAO7DW`^)~`i!DDV{Yqx|{rzpdLCX{Qt9j8M^j&kTWL>PeSO)ocw^U9%}fqjm%xqk1;1IQNW{$8 zH?j6}`18%O<#PEpX>ZOxJNxg8_wjqVuf=;k|G$e4JbH5F&uR6WKYp&Y&olq!o9z8! zijDTp$yaQSE}Nl}dq=)2`cl8?t)diJ<4dazD_)D+=e*ss`0|h3yudr3w5O@{Zv7=? zzS2Tu_OHr)sgIvm#`kXPNiwtKD-OxN^K#G3El0v@^Osa?UGuAQU+%sdkE-}<)8uFC z$4}CJY+k)q=zm-8_lvH1`}^JwaJ?lAs<%#d-ebDG=cjaLs&V1{ zEz7#UZsmS{e*YFD)wAJT44D?2xj?m6o^XIuz-s-}_=;~=bNHJEU*=x#x#=Rk#kq0i z{zb8WwSs4^<#XZf-k-sr_Ui8GBh=+a|Y+J}@uq zmNg5NGKwsb;8%S!uRm#1rCGfG>*J?2Ij`4Du5AB4(Y~&D(Z65%ncpg18yEff{73xd zF7f|oMSCWy{!2g9%eZ>sMhlZ!y>dIOe;?|P;|>3Eqoc6j)9gz2KAn)&*}qcD%ic)b z7rk~tl%aCDj(@nwwX?!eDUEfvK}!qY`c=l~N7ye_?KWFnIJsMY&xh6GT|B2R@V75# z5c&H^H`x|)XobUfjtHj@Z(epsnr%{!mbgDZc30eau~{eg|9_hFHthYHsehtV>>N$^ z{>j+)JvF!Yc8u(_U%fpoMl94L7=Ty!gJbZoQ_?*KB{Ae-)Rs8FU&xP82-a2pM{@Q@G%9 z#(7ae?ZRocpD!KFsrY|)rfpcxuAeLHZ#N04dH!}?yltC?z1Od+*LR$(=sVW+#m+J7 zOum$s=cSs-zm{smzp9p&zO3(g)3a)~TQpya!b_f|leQ>smA*W?TXW{*p6{uj{}g4J zFTY*zSRneVYA8#<{UtRTa+9-8>%F@z^YYpn-K9&+b6)+a%3A+1abI)py`941M^l6B zwk+}7nks(&bIf0>S?Zblu1?EQ`H>j<+k5{lwZ9wZ{rJ0QQQ7VvTX!W*In!U?I`ig@ z9dXwW&t+UYBi%jsd+bePb$ye6>!1JqpChqTzdQ52>fMN+{QqC{zp-O@d(VffbxHRu zHI^>U00xb;!zZ2zTsZ%;Z1wB(UE8}$udT2Dx;lQZOv>`Qz58$HeKu^k?RMM+G&gmU zGeRh#{p9la3hmpQ-#e5kOP|);vv-ogi@RIvCeG+7*ekCr->+wVIOjbwlYBkvos{><_9e$u z-r7h;tL7I*m#Lj?-z(DZxz)LNtM1%uTlU>byKa&4gnh4`M5gWL{i$__Po5H=8@$nA zE!ug|9k-oAY^#@Z%)Yq;CBccB|kPG6$>@7wx^t2IsUpZ0tFz4+6uuIM1cYO%_V z&t9I{|I$=#W$9Xmg#Pz) zzLfMgs4|5=7uz&{zv0xY-|tL~m+s^D5?ALM)g51(a!BpxlPkZ)Gl_imI_vA)A)$JGx}Ym1{GmM;TAMmsYxXnMrzC#v!l#-cxN|*Lo&f&t73` zI>%&x#>`_oZnlJUNU0e1&_x175kN5re-v95{`lJJ={%kdlI-37&uFS3a z@<;o3F8a86djE}E&(p%^@zmCS%J{bV`f{oN&%fFh7k^v3_Gi{5b+7bxKDi)9hl3G6 z{yqKbn!CUDrUG>OZ93#v`$kp5nkA3t~2th&pfZ3KL;@9CzlZ>a~RErA;x zjH<8H=KuIP`{uvH?wfAj3V5vF`YHSUqQCkQdslz6n!P?{OKA1kIZXSb!a3(mQhqtr zB=gRfXW=&+Z*BS>^m_J}-2BTKzkRb0Pn`H{_N`k{_kY!O_1{lA*M0x|ME%P@%ND;k zTU(r7WqoA-MZWl)b+UEZugux*h_79|Lp9v@iBFr_(rl^BJ|7?1?Xf?$tGs!X^ttBD zzO{yv{|SWuobbi$T9}R6+o$}hzo-2X-@142+Lzyhw=A0=H#^6lrfNAnL|JAXNIw$$gcOIO#$>@0#Ej0xF-W#;CP|HF6QPMhg_E%(j{Reyg* zFFt;!^N#Q9RD3S=M@FAq{xc{#=(Wk4L*jpny6*RS=a-d5IHg*4?!7WCX5)^Zq5ICX zCrx>`?CLGUUT;t_)h99|<+4HkJRg;(!G+#l^4_!6_fNVv-B8s3<5d2aSHC}8otu1b z{`RXgwqN}*Yrzu-MlZA4)!LfHpPzou&#k{v`K_II_Nln6+Z8EktJ>lx|EoUw>*K?} zE~m|XYCpa2X1Le?C`Ww%{LAZfZAxG&Ee)Bt#z`Tn)<>+kbYASbu} z`f^%dOmf=7^*q0&w@=&11lbs~K$_(Z@BY2>{`|a|^L}o5dhqAdHl(}S8SA1Gs8Tab$j-Q*h)p)(nUAy+liCcM^ug&;o>&q_-h~AVq<+JPKNvqYC zbxgH9c+#b)bYJ$9quGbEzdd<#R9T;8rshZUV~_SeDpoyVF>lU=r>hhnZ@qTryX^h2 z1@wazxL`3&2nLan=_K#-ypBpT*Zxtm~T@Rb%cQqsG()!c?eV@s8 zZNB{Db4|tEpOM0wqpz7>cL|pHf66X*-u&0sH-Eafbo=2@hJ}Wk{;xas|8Lm;_}si# z+6>3+0Mt@s?v8!g`fU$IOgp4p0&A#Hw4?IzlX2MtJ~_-@bB)G zbz4N1Uo%;ofBf6qU%eKye{bJrf2H?v@9(<4t-15!KF&B=U%GEzs59e(svq|D!Lk{D zcs9J3-}}gt`)bx2t-b%3*Z*36{IJs03`NC>QMH~gCkkkQj*=7LWuEPEpl)4x(Turq zY2d@A{(qXjzh<3q``s-I87}zF`T<%F7{J$fG|Kk(H}2<~W!w8(mn@ieQ+EI3cqK2D zFWyJp7cIHG#Q#UPP^W3}?72VY?iSLS{4J;{<(brEdHK~PlcYB9TYGWUdP`nS=gHrM z8kS9bbalhZzf+b)I%~wKcDyowmJw9E?~mEBSytKNvPtiE&R%;*%T9jZu_wW`o-gw! zK2tI4`ej!)JO8jz=W(gWXB{^h&b2q$pZdpFe%|VuiddPtJJ)6OOH~_Qu8|Os{}eA$ zpELjZbpDez(wC2ZJoa}_<)h_4H=g~u^V!_L-|yc2A(>#$-PMk9tzt3r+e-7Jrb`x^w}*etUO#OwlY6@$?sD8x;yLL zOGECgSaqiS{@&W(=T6D8zu6Ke&+w+CUAz9R!&`^92mY2eoZb1P{JzzEK6(3@dGD>~ zt$Q;6-|N}zU^C|*9@NR$LB1# z)0eCL((uym|8~u#2Oae%Z1TU(U!_qS`ee_>T{H8Zn}6TG+5Z2szYm4aZauJ`*ST$q z*xzV|^Y;In>V+DnomzOQ=H=#+??+Xy{+v{{z>Xo}lJNf1)7HM;6@NQ&-tBAaV)xgv z9anm?kon{GZDJF*K3gFRfispf@4C2u=cZ|Kwa=4oRew7A=UBb;TmRd;6ZSQF6tVaE zPB^&CxcH~rm9Ks4eyTnFnCCt{rTCDWhtaK;V!fBE1ZTg#p>lEat$xkf`eJ+C{Y8#W zWaoRrvea(tSMN<~-@U(E6dtlxuD$#}Xntp7u+gm~zvHKtH?9p&dC|+er1qqlx%PCv znGK(Hh57e?ThCkna{0g77(PYytqKRv zOzNA;H$5q4xshkd^WJZ7zx}^+_S@sX@8s$g{|4_9dok<5|LwNd@3Phl9auTJ|9{!J z_+2ySd|mofHGFT`f*Xy$7#7@^mi1>wi9+1FM>H1%jLYu^mv_ z6;phL4+L}8GyfCbm%ne?{U7gFre9iX%YL~xbYJY2nw&>-?!Mo(^`}nnrDY)&3p*7i z-&UHQ-}Ir-Mv{T7NDpot!nNUUmP&=T~>n z&dk04@Q*ix|FZmlZx%m$-TnHAir0R|3wAmMxBXtJ_sLt&{h9ukvtjx7)JuBb7hCg1 zPxZdm_=_Roq~8y{2)*mY(}bR@?lyS+zW&2MCwtBZ34c`>&bdzA$_#??-FzDgr`XiL z^{aaP=IoZAKe*3YH&r**BtO)fWm(j4HYVrS#CPuMVw!m`&m8pJx)Xw2Un)u-%?{Z6WTD-U%HF+M2E3bmH>UoTmEV(G0Ro-;%2SE`EJ> zYvX$DB}wns>3?H9F!69ZzwO^Im)oaU^Xs-QHkqD#ZGq}$gR9$BWLNMrOnc(;epBkF zxf~}yrJcS0@9A;-xEJb-Z*K24zuM3IhU@$1 zsf&kyn*HbP&FOtMKRdth{?={ay!@!1S>gG;&;S2i|Nm>H&g1!vM^dY1hOU>rv5EOB zYFCziu=}y>h`I6;i}Z8T=k9ZqysZ+beCe}S zy6mNs+A9Ok@Ov;cF!HDrP5+T}H)=8;Th^3M$*(uYDm)LIUH6jrnn&tFvn;1WtvZPx zO@)+vS)OIgxvc+gTAY+tDEspW3GMm~?>6pwSSt7Y@cn{v;jG2$gvx(!{x9~>{;T|l z)a}o6iyU4Zuq?SI`_o1w%aiZt>95-*es)fN=e#q??yUav?+lUWr#H=ZpXV(f7n{3I zux9PY(rvT;voPGXED!o`|Nrm)|98*G%QGCAvV~dlZ)u#h!3&3427?Uuxivjj24!!T zx%}~XGij6S?`PZheO-Hcb$0h(=5@d980w-{#X(ZY?Dq|Jr(WmB+fVkJ^Dm_C`u{)M z_y5dqF#WOYpzIbEvlM2XJwMVytn4R-&H3z^E@!!w^Wp_JzE0koRmz!j?zdu$w zJ7w<1WgCB$N?Od9XUcd}{c7nmDM9;h{|3!8;kJltD`Xcf2=VXSwn4Sf5=UiuJu)cZsR4h0! z4C2}Us8`xod{2tHUv02f#%8MCb9M%)Uu*|ujqhhnxFH?0-TUG4hFd*{boaNNXW#g# zw7o#;-SuNG&AkFb)vt5o_ij7!(&9P0`c5y{1P*xSl49FfOZDyfD*T_4(xv=pS)3P66$7g z=kF}n+tK>f;$z`~=9JItE$x50ziMP?-t$Dk{$Hi4&5`VPRqxH6vZnVqo2@$1e`K9R zg{rN3P59@p5AyyMFR=c3tDyR`!=aJ5hpgzCqm9gd8|5lpblU%|x*JYoR z*!*~X5vO&4JcG_d&-x?N)@bWpFPv)U&Hh@VKXQN7*IU&_I$2lP8M_ zck6POyx&u4CR_RIY01lTRj2mzTk!&=7)6$c~bPe0vY7xJSf!&&{L;nd9u4a&Qgnf<<-H_>Os(6h6%HcsOnU7Rjk|cNhFnz4$b}xK$_DujR92?zyLP`gEU`*T?g) z=*+5QbDtceI=dp&KHK4xo!Ns)F8vYp50vgltbe+A-HPmU3jCI-)8k~6t}rs(Y@Dfd z@_dZJuLG9fdeyh}t@C7M7m}Y;adHx$UyzK|3U?vf)sgw>9&&6MeRlqT3uPb4NhiEt zURTKXI)8J*;`CXIw|AV>ww-)5`{JK#xAvA~n=YOD*ZuOoWcA7GB>&h?kNJ|%AXEEh z9Y)zDJZ4S@z`%PP)~zK~eBnX}@DTe`oBZIqRku{MGaHW361!^!b3uR)Z-d)afN{M7u7Q`Dx+2|RTBgy*b}Y$*$hC)6L9tUl$<>*;5o zcXeu-w#V0%Jeu&y@Pz125pSD_lXa8lo96zi6i}G|n%7KV$|vsaR~7t(=FV9A>U*hX z+a#5z#rt0$I%YU^H}jm+?^zezus$Atrk<@}=gzVZrQ2VyGyD`@`t8rp`Tu`@-Z`f> zZ2z>=iO*JD<2!R5lw|hVg6H#5lwI%-8n+y1M?)A=&N={W5o6osAX`bUhmg z$x$`37ksUco7b1A*?xVae(CJlzdzM$-fn08-==u?{fec(6POiFx?Rcbo4T%I-%l64 z4LM~d)89!i+F|)Jc@vZQ9}j~`2^UnC7Z@c>2@yD|WF6d6nbBs_JS(!hCoq5F+w3PB zrtmiWyOf`F^T*@qcTc;&|EMAB7kpl~Hfx21%*G9TGL|gNT_Pd14`a^1VmEvwd-E}E-IeDW%? z+t8?(rn;a1z|}v}POq!^mni$&OfPwR;rgt;sjUAw8?t^c{{LnE7dr;_mBlVWc10{< zXSXtIUS((ay86N6JB^{1NWwvsxB-oOi#Z>>}*tcxJZ2SxwRX*nuTA+$nmRNCe0UJA7Sy(annup zxJm4c{|X$+iq4+WzY~@m_NVOi_n3Ry*K9wOHw4vPQ?uE-Yr%b{9oyCKR=xT8sG_=i#X=^Ra|=JV<|)k_bx^S}I7`RO}% z`+@)!y+Z5d&U@p`A~x-e{m7GaRDG_@jf09;v)jJ!+MdeFck{x;2aAsMzxf;7cF#DV zK~X)_FX0~Z`%c}J>%#-TIM4aucO$Ad;^W2q%BpG(jjK;5?6~>8a?N~;^WC{|H?La; z)jzqp>tEvfJ^7!nyqEa3f13HP=lS`|&c?hss2-oOPVv{R%Z25&8~GXLRlb{f{@J`A z>nE@BvCo*fUF(${d;HT$WefhX9hfxlhkL=z=GQx~%D1WOnd^c_D?HdIWd@dCV@b~Oo z!uC4gFVD3jcT^2NPAxh9X+i71=~aHQ8*6S#KKZ!w_eS$evM&Ul>|ALZvtdTO-}~P0 zDHm3^r5?I{M049_cgHn9F0?v+w|LcMYOTKi*ZSW2KWiHz>KOev6N3r^?%)b}v?(HdE zZXEg#97>J17~dcGbu8`Iwb$vFKVH^fe)^~JzU%7y|K30F!j;=?{}EB z{b}<59JD9L>e#zOu6Hl`dlqILh+ZWa-#w>pYW(qtf5$jIr^w2teKPL9xrOh(z^_|M z(=1~OlHFJBx4QB>=znXobC8YQhm&H(M|K|P^-yfHIqxg$aP*<&?8@|j{IstvCRY|# zJ~`AbGQaJ6Z1JN90ej;%8}QWK>OUf<`gQl*KY6$N{Qfjwy`PqHHu-1r-@>@A%g0;h z?Y>#3^WffcyPGlICBBhgq#5Pxf8Ch8(=Jc#Z%Nh7IY~=?$J{^l{>G~Jm-s+6^_L@h zCpYc5r+j=`Z+y|)yW8t`USMZn|MpvYd*9RuXhpS^nSU{Jj+APA?eCgfGRmD&)k2{##&%>eRo2U z)fR@=<_nW&@9JA8C>Q^TUE2KL(tp;|A4Sw}Iqj~eVs^5wLxIiTbb~ARvw-UlKliFV zm*RArbR+U>^Y@D9)9;^NZg)zZ-Dc81;rf?090k@DMMwYqcs|u|-g?PLD~tF2>ddOP zSY01yZ@E{@P>}!i)~jc?OsaqUzieOInz!|9b}n19W}O-TvXb7&BNiL#|NjH6leL&x z{Bxh~woJjLS7dfCVgA>;#d})F^gwHa(!bxPt*QNOUH^TWbXnAO-qR16ZFby!nKN~N z*#a`g%zi!s^X3a~rmv-))ex)=$4)JKe-X0RdKMQ zs>=6&>%nU;SWeF4e_kZ(=UKu%cUz$G5)h%hw-j zJ>tl-)x&M}hMX@KYd`m|ohUo;(~+2W)A!9))cY0G_4?Ac=V1~#s&nU^d~RiWK6-yr z=kzNU)!B1AZl2i>`r3XLzg^@G2eO4(dVK zeJt5Ew{OYo@~_*^PCjVPcJq#%V@9#jpEH#|Z~XY}wq;{^Q7IJFLbzLy-YMI{n>kmeR_sRE#G`zGXHA*#{ls;9yh)JT#^5K zL{!y9Q8Ml5gDxSvbIVn#-f(X`xB7=g`{at}N7_Zwd(`_4md^h${mm60Jb{Sc`7a-9vr|p@6tE%Y?BUJ- z^#A{g{~woj*?;mMld7hS{^H|dwI@MEiq22*1IH_V#*`;_ZrXkRYe(w48E3!WumAsT zt#x_c_`h7oGGr54+@Vw_}=_-@Xa=_juPIzFqg&VU=-? z$RBAI*=FzA0rxwS*wsDvJjpp{<~3X1O!-pjkBpqW6T1{-cI?=#9&_pQWAS|lT^2Me zzEuf0GpjhkIcWcqYgezxbMC4*dSdAn<4fk!+KJEK+Q)btJ?8j#ids$~1B-yi-nyg4 z<(~czmaFH5uQw4{ZrE|Y_>#HbPwNFw)~uI*_)w&MdVj1$Tb*#j{C~Z)uLnftbTQV(U*_$m5p*C%!mu zUmZ1{<-q#MtJYLZa4U1WQp>mOlb2ALBd_Pm7VgN^trvMPljFw8%D=n~ zbKm4WT?cN;WLPhdE|mRsW52q;{rtQ&@4dHw_J8kHe(IlZ;+pyoy+2c*_epVlxBgIbWK3)r&n#ewsXR-gfO}_@fD%_tkZTab+Dc^L~}s(7*54 zx_3c;`{pkVHZQXNdj8c}9r>>T=0RoGt|eQke!4jE>Yo4mw-o8;zPml2&%V&=Z~gjx zcVn`@nC|K*{M0#l{<+Fm{*%QnzEM39D9@mC(DRo?hzTc1Aq-tNoS)8Tsi zc?$$L*)c@8Ooyb7)VB=Mt|#MT_sp!T%{5&sZ#`GU<_!0}Gt2$nikEamU8?Q9H*41Qh{X?LJs!LF2l?gjUWk8kL9xie!#H*8{W)IO z6}HTMS}87`+HC6A-p-^+#xb0x)N&WJu+{QJ{O z-&ewWCtZA8EB7_+UgN_VU%xu*Ye;L#$$wn_|J`J{;tAG|wi&l87ae}MS7!C?jh8wX z&i^4D|3dn2|8q7uiwWnJ-dDSIqA%LrfBE)vcYX5b?z~mAx9D%-o5R=oSbR%8P~LQ+Pdpe+iovi|NqtA@2}Mvbqs>+V!{>hDFYilSQ9YWq;byw9mbBf=rH*_*mrOpq zF~?%UyW+daE2TB({O+9G`_)4~@xZwi@Vv^1<8Cpy?mGH{ayb!-6||z)SH=F+LnL6AGqkcOlKoxz?dhPw%>dirTV^Cu1%x{ZPy3 zDGeRUtPy^o^km=O>fpZ?2V6^bfhP$fw((^=KJoGV{#{eT%)T$3>g@ll{NMdI=1jY+ zpUq~v^m|E#*}NQ=iJKlPv+-4!KKF~Us{1hMmdT3*kNH~#g+%;5X@r$!e6YUu_Ygl@ zqfylbhAVz|Y^Uyjys$3bJ4XEq*ULjvlRuv}xcYcqB>$!QU&?i#s(CkkXEtC^`NnfZ zWhJxtw|U;ZX|x~=SffA0#Bj$8!wsKY){f(pQHBI^1xSS^~+DK zHEX}G-CU_VIXggltMdBleIHu&_sp4DDbFyeqVvY8HL^2qg1VDw)vG=WzHxZ@>#Wg- zwfjGv(w0w%nX;yyZNmz`>o%ZX_URjqSHJdtd24=d+2QkbTKWI3&+h;Gc#;0eSffkT zA-8Ih9zUyVI4@k7HRVT?|L;@B4x1~#NS-bD>g%t$#X8St)UJwX&^dJCq$WpI%gTR2 zZ`YiDAr<;@$rMK0Pp91X%SZh`nrS(8_Mb>ye*O(goz7M~vpKFxSA|&pf4byx>Ba0{ z-ACTltUCER>79hxzfGRyH+|lyUh~gu&RH3xzR~06Ma6}2p{;r^ndj%+D?h&Ae6YQY z$J1ilYxVD*r8(C>-gxs*JMCaYgMwJ-T))V~|{y!)A-Ni$A5rxC{dQrf>{gNJKJw2+;O#1b?AH6Fr0nx`^Rh{DAD0}rQ?7kBH>GrL zgy+%2oZ^=XFSRnS-dVt`Bdqe$)IEFwZ@FNbNRO&Qs(y?fx<=SjTvQ@ug` z#{^IRKgyeO)*at?$FTay<lap6l-JsC?bTTo$!{KjVhWvg`gp5)I?siu)0f-s|@j z8@{#u8nkOc|KHQ$m3qJGzQ4BGn>1PTq_2&g9G5}Aklm8sq0G)zcREfSKep(2s%zq- z#dS4$C)GRq_WR$~zR9e4q`|p>N0G;3(ymD1GS6$WJ6BwNt5|#g|D~NDWRAGLlsMna zcdxLP`KgG&28VUoa&AwO-!^$Z-y`gHe}=bT;f~Fh9|rDu-cd6pKC0{TvH8D@%X^+X z_WzWz_trmpTI}bZyZfe{@I9|`@!$bRzndpTKc95pqhgtQy(31hUT?p6!yb|} zp7tUjTbqqKOO)le$%*@ z&39I4FR?68dU~2!!@x6#S7HB#y00ld?Anr+PN(F4Er_?b4V=7rZPb77TmLmzDX&|y zc7E~cs5$A@yROSuKekyDe|1Vp;@+T_cIs{x=U-acdCEU&Vb<(99=zW!?u%EQeZ$m0 z%s=-Y_gku8_kQlP>>KMf&;2*}^7wdvz0zly5YOTdmTtSw+t!?UH)GZNP2ld+n-;x? zMSpIse|p@~Y`b^7efhIH(M5V$GHdFYHmnGPltH`qFz-5fZGufXVp8tqpS6E3|IfKD ztGnso%catPN+N^Je*gIMY_80Y9o}ubJKxXwaX{&&#fHomr{r>GRp%@ZFb_(5*%MS( z)0dsopjhk~pdQ)me1~n0X{O#?_Sc8Qy!7vf%)NPRXTW_+_Ztr;w**i6;&I&a+I5xc z`TIpA4$5iD`Ao#{gRjrtFgZT9?_Sg`9zd&}w5$JyM1?B8B*ix2w0!PKkb zVN9^S(Sc{P4zEb^HiRpgpZfw6~^+2h<(|b>W*Zzv?&6VpXe*Qh* z%l=Hh!>`w;&1Yv%s`>a!@pg0H;(pt*KL;9_|FAW9Ez4QqZB`R_?8b}rpJVTUN^SA^ zcT}UKu4g{Eap~^E?c`{k`$ z_qJ@h7x!%E4drArvuXQoim>f|Joj+vU0Y*!q2;`8nUfpsy^dP5TNyo?`Plti`4 zZ+#P1e73H+wrhd&vEHd>?o#KL?_7S}hVPtenVG-Go4`rzo$;SD4x3MCm|&5c_p0IY zZ-M-kFSh=u_w%H^Q2ffWbGkDsQ&+|vwVHq3^Y5me zcRycL|9SBA{oBWx<{tSn(BG`|9;9Gab`H0eN$%E^+4+lsqC-vQcjD79#Fo)xbCS(Jk#~BU-$oe zt-t?mpX-aS=NZHB8zcC9Oj5_SyNXJ&O6^EOEV4-R-l`^go*(J0Gif$fm%^y+p2m-36wQXLT#gW%h0i zUeP+mX!pB{DxdwP{mjC9er(LP+j{c6SRFHi&863B^3TQ2?78&#qUhr0m< z)-+6(kF6^?-|YAI%-sH%u71md)q8!{@l5mI&$?mWeZB{G?oEDq*Sq|Z|GoV;>{%Y% zdbCq6fubGpauhKZlisjnE#`SZ*UQU?T zw5slZpX77dy9#-IU(Tj^I?m~4>{so1-TT=w#$5AhdCcYtF}bCM9=cDJUFx($FQ=Vo zt9|o_JL1u_xfMq*<^OnceF2;2#~%mOXPf>0C!lbSy)ZW6%=;OYrLT0a_WQ?dtUJ5+ zUy$9O;MebDmj1F;uZ*4c>4e+gcjDpucuec7RDQquc==`b{d)74x3&a7-d_KDd!2sq zYjcJzZ+4U{?cHV}zN}C6J*cw<3Zny`j;~t;>X&Xzt?c=7HQPKdMwa<~%U(N%8=dRI z&Vjn5sV^JMI%V$HKX;zZG}Yu@|bulsxW*{nlbyMDAQ&aeEo^L(1ze_jUNgZ!6{ zEZupx_QvX%MWC|VyJS=O$)M7?@-eS-V=wYud&}nkI(&U>{e52RwV-LxyAMyrTL)Ng z;E~<2d)vf+51&83G;w+Ssr^m6C+?E}$G^|=0=wDwWb?;A4l4gVrg-wMk=Zj_vGxr& zEw=?S=zDf7dEF;@*s|@$J-0#&mBqTV3$*!UH7$0T`AJQBv36-~@3t9U4{x*;rU>M( zR&I4>SM9WW@X_gnNE-JUD+! z!d<=C_T$ajDJ4gCHatDowhAl^1B0NhfI8$}ww$~K$-FtiFk+atI5IN@Aw^|I`t@=w|>3@25?p}=d*{v^* z?QPEd{Ndx5tMYrNfA(J&`N4LD&9@uL{%L&oSOT6Nn>3Y4I%wOa8>iyCR&I;E0ItpE z9NE>fjJd|%p>Hee{wJ?)@Bi_1cJhI_8{}_n&sWdTPKV4#1eG|LUkT4!w?uw#x#e5S zuP00XopZ~o|5?AOCic!_w)^=uc)gkzIS(?_T2b_!SsFG%3jtL-WyIV`^V#O>Ri;p9WAR5J{3QEyzN~3 zxz^Jip?l;%9sfF6Sf(!OQZWHrpI>{#Q)}9;4b4+S z_O$(Ya7AW!30sZc$DJvc`>#Bczgu`|Z{2zM!sO2p%b&>{=?GsOou#~2eeP~n(Sp9W zj&q&-U|x{{P+k{eQb% z%iPQ@+kf{L#HKu(wHiG9`rzW*hP*|VUyjxL+mu_~y?H7?6^2l(7W!>q!({bbsDfU#4t+SJ)pw8<>r=?>r8)LOi+$E zc4&t1HJ4+>PHVEhIVaTkCOn@mcU`>D_JAx)soDHfM`DEL7M!b}vg#;%;fWKkBTCHX z6eO2(&cE$tW&d{imHivf*7xk4|5y9#v0tg>^NRxOr)=zdao_L1()Am2io51-4K@#| zt4X+edH2ut4C|hKSB~7f-Ttlhzmi{%zTbPfKKf(!>>a-+)_+T{|29*m+~CM1r88$H z-dMdxR>H=1)!P-aKX#NW#LYhbO0+!!Xxyy>(={xPr{%3D=nN6%OXl+w~ z^#_mg2I=&Z{QCF3-pB2kd#&I0{-3w@+@JIL9z0FneE+dg`|pj)Kiw8ur@g#mseDlJ zCW}W_@qw7S>$5AxMT#G2KkYC}vR;+>kl`hdvX*0tF-KstX{N1=t%8PXp5vU`zx(wh z&x;m5y3#PaGFx_E6Qli?GGhlVE+bFJ^wbj+nNPOzS!z9-%wHh z=&Gs5>-jvp=PtK&t>^#cyxEy6^7c(T*{}03{btgf@9u?h_MbDF@4vlNyZ47wpUuqe zbc4=ARGS4#E&a15Z0bL1exLX0m&2V_vgUfvj{doM;#P$4qzV<&L+U3B-rcA_Yw7-A zVu4a>d0fGy1h1d6*S{a{<@%&#EkDO&rmg+n30LI&CoNw5g0=9(JwXwRRI%l!%gp|2 zo#V5Lm}j;m=Zosk>jmEgb>(-S(C_56oLjlgweW+5e&Cm+HFX7(`bw>>OsnK_JT?SY z)qM}#pL6cDL`l`&ojcWI_iUc|?rB4{y5I8sf0l2b{hI%}`Uifc`PJ{fJTJ0&&#a)O zdyxO8Nk+71c|7wv{nM901z6>|uSV-a?(_eg_u_T=?Wlhm2l(&qyj)ewfC#Ro%)2t5 z{kXY){gT%|d$+xltJC`b#s1&Z{dpH||BlStGVxVwzQJ9;`Coh;FVFkkjQpyJ4t;F)sm0I&YHYu1%tefhK9`~oI#J)kW= zXWBl?>Am`sU)U7Hc|CWrNLsnM^QyPRDb_YAub;mcF-&CG@bOfObly(x3;+JCHkWa` zx?1k_AKL>WA2VLa6v#!LUc&aONbhBA#=7~UC(M4b_y0cW7^hN}v`x8lY775Mo8+(V zJg+C+O*T=VUc&q7gx%9@#pd-h&zT6wvCCg-e6^;^vt9q$ceRV{3^6;(mFDi;IIZr( zxt}rq-^$vL-|Me?b!FxKQ-vS>8J;bjRTFqdISm=gV)_$zPsH zdz@I_%P7rwUuDXv%txD#C z5lcRMUAMgOK#}*-d114MQCqfzmD?338sxcGcL~De)Cwo_g=xM zk5Wrqlk)ez&3fz) z-rPL1^ge@x_U&NHW2FW+Cfrzk=O}n!^W(|bPfH7P`*RC+fBE|TUTyit`79gu*9ke; zXqG~j-w9YBI2QZq>h|-?Yuo#mS^w@|e!BdR(K_ibWqn_Im%Kjrp662ObL~#OHOY^B z_XnL)ySeoJ(xloB>AE-PdU-kHieE#Idcu|o(ZWxZ!A`c z-1PNlpw-DwCaUrR&rSsW+c&X6MR~*LlRexkV_LkvFWmRzI+Ja2PlX77`;ub*4L2Ft zFa5pL*)Cl7Qz?J<-T8Z7%JZ|dTlzdgn-bMWRrmKP0@I{L@k7Olw_a&!S+Qt9=*kAuctk3mCZT0tM&0iG{ zC`HABmqXh;lD%;D)7wA0xBUOn-JSV=vi?%<*8acA%9=0Dudh39_JVKb!(BQ5c$s+2 z|DTzdV=&={>RflL@~3(FPmk$)&iP@Yv@fG&LE$$286y31J6pe$dR>1wd;TS>m7IA$ zZl8I(`dlm9^Hp2@&fA9V;;RsK)_cjbU9frmbOHAb=Zz(1JbF;n@w(vnybAt<9o`$Q zPBilNsMwav2;;xX$EhPQB~gvzif}KU8h^*DT$7!tQ(ncihnlryoC-QVaDD z_~I4u=Z4w}&%aM(R?nXk=%)AV!<5(gkymd2D0rIlFT$bsH2Zwd_}|mNUtT+P>z&{* zhTpX(ZRgSQ*m)GVUetGNeH}#A)oO7OC+Ilc$awkjo zmwdJwc@(cne{pOcm2Lldstq6 z(~9TYufJRR`sb|D-}eq~dA@P-%hUEX=GU*q9scp3;dnPLzA#Zx{O#=Z`+mLpI(7HzpKF(jnZIIgIQn&0+A7%< zvK3pb4)kt(a#ULTrMi5Kw{(BKQtS!&^-CYlKDp!M^Jh^O6-$0!m}_vK<58?(+404j z6&+5UJI2H*=Bf8_(dqD0&boc2(sP)V7%aGt%sA1nqT+SmW~1IsufydV zMo*Mof2*6`hX*sP&wV|{FF9#}LUP^CxvNY5E$paO5}l*h=~%V?;>2^@%a`!+rdZG3 zv*}}cvDV7QmU^LywUSD^pO^d(v-)`Gpz$%$*Lka@(t$D9{fp_hWpCd&`(UR*_56pkxBq|C zFj;Qn&z5@amp`TLIJR@?{Ma77KTA#at9#V;=F*<){&hd^zN;wNF=4N*^tLY1X?Dtg z6B%Mw|6I?Y_uM`<%KP`FdB^Ab)_>hwK8u~<-+!hzWlt{q+kbu8^L@7GEtO6^uj{7i zJvTpw@9YLmQM`FHdH3n*%U*Ad-<_*D04eTcgdco2GBL zczx$Yx#x#OvtPYYy}#zqgOm0O(}fvSQiGY9ZxxqvJ&&{1df6x59`tfT+#{W@_Rhc8 zo4yQNx6C%)_+{LIA8sPG*VLvKuiYBZ{rO%$UwUVL(DRhoFPhI5#dqC&`ETOvTc*qF z?9bb-v!4BG1zexL-J-Hv3Wxw;upLxMA*A|;!K7T&ur99J=b&<7ic%I(an5>_& zU5??xBFPtwX={4B=C@~u&3jet0-6}LQBq$u%`%+*$2=yBbE(tMzP)t){G6X3o`VLM zSL8G8fDJJBC$N_U|M~jo^8d-__fN6^_CD^C|HYck=O^u`)caZGv;4)mYx@5R`Qj$c zuJx47;h149c6aApwcYm%t^KTuRW?pyj$WC-@ag6Oot4dh&hT1AXwR1YnZ9;v#iuD= zuML$>H5VVToSeIWTRGW$#ns{m&b#f!idNu7nJaI^>mk65k;n>#B_`Me;qPzbH9^S(_ zWxuh^vW-JZzPYZ+`u&`(03#vC(liyDtI`MYi@A{^YOUwx5;ZN!^o; z$K|Zc9voo2#}aV*;={!$#rt0yUaJkg-wJMHJoJqHr26!9w(*4Iw*~)iov-`$EJ>c> z&F$%5G8sxCqk>oXw#Z&coA7vkeW~T$n|J1i@!3wSuPyuZ^Jb3H#IBOPSG@1uEIR1! zZuU{JL;Byb>5aQSPCxrrF~vZ2x^$}c&CqtfwvvLpUezUpu#l%rDlITbD7NUr)u%lTEtr*`E}vyg$|ZMNPAHA8em=MZPd^`;_K+J7Pc1 zdL8gy?Arc0C#wDZ_xy|TGrkfnx8}rys_u*)-;cZc);?vQDSm0=A8Fs&FL&q9J^Q?> z=-c}4 z#KnIFHh4w-=W&Q#0UB{$P?m6`@oLTVKX1*?Em1zd=T6O=`@hnvS3XOt?6}s}>HYIU zbLb^=LFbU|I~jCx%3t%WP1(|U*y-0<&YdUBU+c}O@VtI>ZR6T-nHx^GuFKuvH#Kk|D&^r~M4u!QL)4%6fN-v4`4V^#CUW!L8a5&ypaKU?E` z@7{K=MdyomzI(TmUG@>5MckXe%kDF$)rL2m{utO_`C+&0JdK0jcFQwb%vr$BC+eu& zBjdE`Sz?Iw?5%lc~{+Zdu(*#XJ@$1$1Bgx3iNKy_!MxU_KE!DzPn!S%Gb`y*xOuLZ<&3l zeM+pw_r=vV6-$aHiqBq>l)UG*OgG>8lE0I=UgS9UULdGoHgwqwp28@FG# zuD&*3=X1w;{Z)1b>-&#qEd*^4xcIUmuOWZUnx*0Qch2}`^RZ~xjQ?rVqRW0-LAAkI@)}GN&cR1iMz^v=N0EN?~?ubB-p>s?D6q`EDhf}i>AHX_jbwp8}2(m zeM;q;PgyUUvv=Nlcwc(axzhV@?;ZM@eSO{j_ib~py=HEh`>x>WdQb~Y#OlDYxKH_? zc|WdPKHqoyJ6Rv|u+O@s+g>Ipul%~;^t;6+;-_2h7rt=$-Mg>mOtp*yPw}Y;{^BJW z7bn`9vWXpt5wg9~y7T!7u7`QM<7MlXEI%%`)BCx8(y^q)b1j2@UYs~_cm4s5ghPVK z$sF(?^QXBH|xyz3qQE}XSQ$oJ6VtFzIk5pTl!ghu5URZ z|6E_W|0(pg9=K`m?UxekcE7R0x4)P%^>AOz?t*uBobIzP zuw!^}J~9-vtYO*~<~tv}=It(1-&^@D?Uuzyr@G^BzOL-G*Hv;W)_b5A``k~AlYP?c z>gns6i#hk_TsrzTsEqgc&zNr={Sgmm3v#PV)K7S))~+zI&0uY)w8r!w6CPb`kbXHQ zK`KV=va{4&b-8OMEUn^?RE{2x3AjG<^s$FO7{i3;#4YhSq;Sr;;lbwcm4lQU43LF?}~q!le=;@3U9gYfA@;wo4-8I3-=yb`mdtD<>H)&zm{a} zaele;#bW`(hidvoJ+tE!j+$Fs_f1!~op!%^ZKZwEB)y+IqoqCbbBpr+Uw+B{KGtjh zzM9QH|1YxGzwfJ!@~Ml9`{$n0t7CS!ndIi0(;;Z)PB9| zWuE!OSLegbkM1hI+8T3-fB%W}>n}c>Z7$jWu;1}fzq47J_#_m z{E>O$-Zr7`)$8}Yk&VG-7Ax(Giu!JRxqtrWXPZm5$HRVB8?bsgHHc&;T1>GKJa(Nm zUiy~8uY@Z3m%rN?&Z)=FIrn_)#C{30g@0ORwKM3RXE|%tF_K>0`5&JkEYIvsEs8-NU_kx_7l%6`~7no!I@~ z`{!haYwzEBR?FAx)$2UapPeo9znx9SSdIPL`}^OI*Z(>0pVsmI`J+kc1|iosl^xih zFl{S)>D|+p8DpDDeH17c;SA=1+y0)X5U`*IZS`+E6_5Lt<1ZZGw-_jwBq%d zttEE^ylrW>;IupS7um+U`ozKhvIg`Gu=A>gS|` z%4&{ux;Lk0@=bq!KuxDCDYf{2!6jA(DF$`jBR13GAM#YW@uxn|UUt!1;j7}*W*gZh z|9@3o_;*nM>HEbJ9rL_i$?rYNm#-Yzp!VoO%;L$@KUL3J^W5LUcD9`V`?y_` z>puNEI>*?!)Sdg@udn|9zxdnF4P@h(z-`lYpDDl+Uh zF4g?ij{kY;CLed+@zlS@4YK)#;L+<3hVKug{mZ-o+VC^i;&0LC?Hg;1#AdshP1?t^ ze|}%teD8d{A5|L@b2bsUheXXi(K8S=9KJv_+YvVf9lqSat(1T+Y0Ji z!_B_5E$U8R>ycY@Vd6RUy`AQE6(2p1Ei8WaTz{T(VTtP3Qa8S5OaEM9V87vZjNuvE zr$1?W*A~egwY#W&)7v?1z2PCyP}hkQ%Ojo(>)#PPU6WJn#g`Hz{_(r^!`_c;=I@%g zPcNxv?~5bNfpWjvbA1ju`gwji!QKA-=;sX&-K*wrJZR{#$VKHX!!Kb5+b>skRKEcY z_TTs2C6-rS^X_|n{Ct)L_RJraTKb-l(JsumI(;dq(BCxY<=xHaHm+U_sxx!G_U$Zx zcW0-ydH(&Krfl~(e=q#|=jAoO4dLLq+gpwO>Fhr=r$70Af9C|VZ?azHd~r1}+`qA3mQ70$KJ-#uc!1z4xz9qLe_#chd`+1`CUC=K6cc(-bD|X(Kc+`D=-EO(U zyK|x*s2(ZqSsO31?_W??(BHn~;{KG!`aQ3kC4PQ#Jo~9~?=0h_x|`h*Jthtg*G=EI zEtqHj>VeAD-8&vGN$BXndm(x|G1Mkn_dhWc_D_*#7 zW_Ww|uZLeNuC8~yJL%#z1}kej6}u(ROJe`ch?lXlG2iv!O0SAsT;ih-_b!#E95E}_ zKfq9Bd|>L=>X$`UxBk4mygmNE!S%^AcO71^_|?nj^RBBi{#ZYGQ;N#QS;mXr6&r-U zdjy)$-TmXqwWYjP3trn^uUW#dZhh?DD&PIA8#V;iGbbdjUDpY!B<$K`BO;^y@BjR{ zv*ZP6NkHe>{0VpO{5cl%*XixPOR?FU()sTmK1h?-w2pW_ab1knhUC-B>K;s9xMcdP zx6PbQ5kj>LQhrLypR=Bv^~kE0Pwb`53&ZIfaz3fnK7M31$D?A=5q(d;lEl&-vHR*C zh#dGTXAt=0n!~ou-$d)G)K-^#^=iLu>lf4Y_OWmIoY!CEU)oiqIO|_M-4-7NTKT=} z-JKUp_xyM^_1waHQ+_@Ey4d^J*9XCQFI9VLp17PkrcnPRXx$8d!vc?EzaBPOd%drH z-0d03@Xd+wdEV3g%qJe-diebE{~sT#U!KdVW1f=RGkLk(|F=Bf*%@wk=xs}}{wVqz zQ7PkJHyb^Xetgw3#pAj&L%l-7c~!wl>#W_X&hU%H zANlU9Ua%yiV%wSdk0a-OUw<rJ0@)O`=!rme`#aa@@s+X

v$o4*X6eW`DX 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 FCIAfJ$iM&q diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/Contents.json b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 6b28545..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images": [ - { - "filename": "AppIcon-16.png", - "size": "16x16", - "scale": "1x", - "idiom": "mac" - }, - { - "filename": "AppIcon-16@2x.png", - "size": "16x16", - "scale": "2x", - "idiom": "mac" - }, - { - "filename": "AppIcon-32.png", - "size": "32x32", - "scale": "1x", - "idiom": "mac" - }, - { - "filename": "AppIcon-32@2x.png", - "size": "32x32", - "scale": "2x", - "idiom": "mac" - }, - { - "filename": "AppIcon-128.png", - "size": "128x128", - "scale": "1x", - "idiom": "mac" - }, - { - "filename": "AppIcon-128@2x.png", - "size": "128x128", - "scale": "2x", - "idiom": "mac" - }, - { - "filename": "AppIcon-256.png", - "size": "256x256", - "scale": "1x", - "idiom": "mac" - }, - { - "filename": "AppIcon-256@2x.png", - "size": "256x256", - "scale": "2x", - "idiom": "mac" - }, - { - "filename": "AppIcon-512.png", - "size": "512x512", - "scale": "1x", - "idiom": "mac" - }, - { - "filename": "AppIcon-512@2x.png", - "size": "512x512", - "scale": "2x", - "idiom": "mac" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -} \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/Contents.json b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/Contents.json deleted file mode 100644 index 033a618..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info": { - "version": 1, - "author": "xcode" - } -} \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/CICMMetadataEditor.XamMac.csproj b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/CICMMetadataEditor.XamMac.csproj deleted file mode 100644 index 66ae033..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/CICMMetadataEditor.XamMac.csproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - Debug - AnyCPU - {00CE3E32-7D00-4CB0-8951-3C27BF2D02CD} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Exe - CICMMetadataEditor.XamMac - CICMMetadataEditor.XamMac - v2.0 - Xamarin.Mac - Resources - - - true - portable - false - bin\Debug - DEBUG; - prompt - 4 - false - Mac Developer - false - false - false - true - true - HttpClientHandler - None - - - - - false - - - true - bin\Release - - - prompt - 4 - false - true - false - true - true - true - SdkOnly - HttpClientHandler - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {189CFDC5-2630-46DE-A934-FF182F9F54AB} - CICMMetadataEditor - - - - - 2.4.1 - - - - - LICENSE - Always - - - - \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Info.plist b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Info.plist deleted file mode 100644 index 3c15930..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleName - EtoApp - CFBundleIdentifier - com.example.EtoApp - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSMinimumSystemVersion - 10.7 - CFBundleDevelopmentRegion - en - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - APPL - CFBundleSignature - ???? - NSHumanReadableCopyright - - NSPrincipalClass - NSApplication - XSAppIconAssets - Assets.xcassets/AppIcon.appiconset - - diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Program.cs b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Program.cs deleted file mode 100644 index 2b6f661..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor.XamMac/Program.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// Author: -// Natalia Portillo claunia@claunia.com -// -// Copyright (c) 2017-2018, © Natalia Portillo -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the -// following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, this list of conditions and the -// following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the -// following disclaimer in the documentation and/or other materials provided with the distribution. -// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote -// products derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -using AppKit; -using Eto.Forms; - -namespace CICMMetadataEditor.XamMac -{ - static class MainClass - { - static void Main(string[] args) - { - new Application(Eto.Platforms.XamMac2).Run(new dlgMetadata()); - } - } -} diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/CICMMetadataEditor.csproj b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/CICMMetadataEditor.csproj deleted file mode 100644 index ad10a77..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/CICMMetadataEditor.csproj +++ /dev/null @@ -1,34 +0,0 @@ - - - netstandard1.6 - CICMMetadataEditor - 1.0 - CICMMetadataEditor - Copyright © 2018 - Description of CICMMetadataEditor - - - - - - - - - - cicm.xsd - Always - - - cicm.xml - - - LICENSE - Always - - - - - cicm.cs - - - \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/WrappersForEto.cs b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/WrappersForEto.cs deleted file mode 100644 index 2a9ae67..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/WrappersForEto.cs +++ /dev/null @@ -1,64 +0,0 @@ -// -// Author: -// Natalia Portillo claunia@claunia.com -// -// Copyright (c) 2017-2018, © Natalia Portillo -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the -// following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, this list of conditions and the -// following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the -// following disclaimer in the documentation and/or other materials provided with the distribution. -// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote -// products derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -using Schemas; - -namespace CICMMetadataEditor -{ - class StringEntry - { - public string str { get; set; } - } - - class BarcodeEntry - { - public string code { get; set; } - public BarcodeTypeType type { get; set; } - } - - class DiscEntry - { - public string path { get; set; } - public OpticalDiscType disc { get; set; } - } - - class DiskEntry - { - public string path { get; set; } - public BlockMediaType disk { get; set; } - } - - class TargetOsEntry - { - public string name { get; set; } - public string version { get; set; } - } -} \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgBlockMedia.xeto b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgBlockMedia.xeto deleted file mode 100644 index 9ec79d2..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgBlockMedia.xeto +++ /dev/null @@ -1,678 +0,0 @@ - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sequenced - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Known dimensions - - - - Round? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Has ATA IDENTIFY information? - - - - - - - - Is PCI? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Is PCMCIA? - Has CIS? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Is Secure Digital or MMC? - - - - - - - Has CSD? - - - - Has Extended CSD? - - - - - - - - Is SCSI? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Is USB? - - - - - - - - - - - - - - - - - - - - - - - - - - Has MAM? - - - - - - - - Has tracks? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Known dumping - hardware - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgBlockMedia.xeto.cs b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgBlockMedia.xeto.cs deleted file mode 100644 index 904d13c..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgBlockMedia.xeto.cs +++ /dev/null @@ -1,1769 +0,0 @@ -// -// Author: -// Natalia Portillo claunia@claunia.com -// -// Copyright (c) 2017-2018, © Natalia Portillo -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the -// following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, this list of conditions and the -// following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the -// following disclaimer in the documentation and/or other materials provided with the distribution. -// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote -// products derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using Eto.Forms; -using Eto.Serialization.Xaml; -using Schemas; - -namespace CICMMetadataEditor -{ - public class dlgBlockMedia : Dialog - { - ChecksumType[] checksums; - ChecksumType[] contentChks; - DumpHardwareType dumpHwIter; - bool editingDumpHw; - bool editingPartition; - FileSystemType filesystemIter; - ObservableCollection lstAdditionalInformation; - ObservableCollection lstAta; - ObservableCollection lstCID; - ObservableCollection lstCSD; - ObservableCollection lstDumpHw; - ObservableCollection lstECSD; - ObservableCollection lstEVPDs; - ObservableCollection lstInquiry; - ObservableCollection lstLogSense; - ObservableCollection lstMAM; - ObservableCollection lstModeSense; - ObservableCollection lstModeSense10; - ObservableCollection lstPartitions; - ObservableCollection lstPCIConfiguration; - ObservableCollection lstPCIOptionROM; - ObservableCollection lstPCMCIACIS; - ObservableCollection lstTracks; - ObservableCollection lstUSBDescriptors; - public BlockMediaType Metadata; - public bool Modified; - PartitionType partitionIter; - ScansType scans; - TapePartitionType[] tapeInformation; - BlockSizeType[] variableBlockSize; - - public dlgBlockMedia() - { - XamlReader.Load(this); - - Modified = false; - - #region Set partitions table - lstPartitions = new ObservableCollection(); - - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Sequence).Convert(v => v.ToString()) - }, - HeaderText = "Sequence" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.StartSector).Convert(v => v.ToString()) - }, - HeaderText = "Start" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.EndSector).Convert(v => v.ToString()) - }, - HeaderText = "End" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Type)}, - HeaderText = "Type" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Name)}, - HeaderText = "Name" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Description)}, - HeaderText = "Description" - }); - - treePartitions.DataStore = lstPartitions; - - treePartitions.AllowMultipleSelection = false; - #endregion Set partitions table - - #region Set filesystems table - treeFilesystems.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Type)}, - HeaderText = "Type" - }); - treeFilesystems.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.VolumeName)}, - HeaderText = "Name" - }); - - treeFilesystems.AllowMultipleSelection = false; - #endregion Set filesystems table - - #region Set dump hardware table - lstDumpHw = new ObservableCollection(); - - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = - new TextBoxCell {Binding = Binding.Property(r => r.Manufacturer)}, - HeaderText = "Manufacturer" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Model)}, - HeaderText = "Model" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Revision)}, - HeaderText = "Revision" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Firmware)}, - HeaderText = "Firmware" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Serial)}, - HeaderText = "Serial" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Software).Convert(v => v?.Name) - }, - HeaderText = "Software" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Software).Convert(v => v?.Version) - }, - HeaderText = "Version" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Software) - .Convert(v => v?.OperatingSystem) - }, - HeaderText = "Operating system" - }); - - treeDumpHardware.DataStore = lstDumpHw; - - treeDumpHardware.AllowMultipleSelection = false; - - treeExtents.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Start).Convert(v => v.ToString()) - }, - HeaderText = "Start" - }); - treeExtents.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.End).Convert(v => v.ToString()) - }, - HeaderText = "End" - }); - #endregion Set dump hardware table - - #region Set ATA IDENTIFY table - lstAta = new ObservableCollection(); - treeATA.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeATA.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeATA.DataStore = lstAta; - #endregion Set ATA IDENTIFY table - - #region Set PCI configuration table - lstPCIConfiguration = new ObservableCollection(); - treeConfiguration.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeConfiguration.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeConfiguration.DataStore = lstPCIConfiguration; - #endregion Set PCI configuration table - - #region Set PCMCIA CIS table - lstPCMCIACIS = new ObservableCollection(); - treeCIS.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeCIS.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeCIS.DataStore = lstPCMCIACIS; - #endregion Set PCI option ROM table - - #region Set CID table - lstCID = new ObservableCollection(); - treeCID.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeCID.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeCID.DataStore = lstCID; - #endregion Set CID table - - #region Set CSD table - lstCSD = new ObservableCollection(); - treeCSD.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeCSD.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeCSD.DataStore = lstCSD; - #endregion Set CSD table - - #region Set Extended CSD table - lstECSD = new ObservableCollection(); - treeECSD.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeECSD.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeECSD.DataStore = lstECSD; - #endregion Set Extended CSD table - - #region Set SCSI INQUIRY table - lstInquiry = new ObservableCollection(); - treeInquiry.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeInquiry.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeInquiry.DataStore = lstInquiry; - #endregion Set SCSI INQUIRY table - - #region Set SCSI MODE SENSE table - lstModeSense = new ObservableCollection(); - treeModeSense.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeModeSense.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeModeSense.DataStore = lstModeSense; - #endregion Set SCSI MODE SENSE table - - #region Set SCSI MODE SENSE (10) table - lstModeSense10 = new ObservableCollection(); - treeModeSense10.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeModeSense10.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeModeSense10.DataStore = lstModeSense10; - #endregion Set SCSI MODE SENSE (10) table - - #region Set SCSI LOG SENSE table - lstLogSense = new ObservableCollection(); - treeLogSense.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeLogSense.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeLogSense.DataStore = lstLogSense; - #endregion Set SCSI MODE SENSE (10) table - - #region Set SCSI EVPDs table - lstEVPDs = new ObservableCollection(); - - treeEVPDs.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.page).Convert(v => v.ToString()) - }, - HeaderText = "Page" - }); - treeEVPDs.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeEVPDs.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - - treeEVPDs.DataStore = lstEVPDs; - - treeEVPDs.AllowMultipleSelection = false; - #endregion Set SCSI EVPDs table - - #region Set USB descriptors table - lstUSBDescriptors = new ObservableCollection(); - treeDescriptors.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeDescriptors.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeDescriptors.DataStore = lstUSBDescriptors; - #endregion Set USB descriptors table - - #region Set MAM table - lstMAM = new ObservableCollection(); - treeMAM.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeMAM.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeMAM.DataStore = lstMAM; - #endregion Set MAM table - - #region Set Option ROM table - lstPCIOptionROM = new ObservableCollection(); - - treeOptionROM.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image.Value)}, - HeaderText = "File" - }); - treeOptionROM.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Image.offset).Convert(v => v.ToString()) - }, - HeaderText = "Offset" - }); - treeOptionROM.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - - treeOptionROM.DataStore = lstPCIOptionROM; - - treeOptionROM.AllowMultipleSelection = false; - #endregion Set Option ROM table - - #region Set tracks table - lstTracks = new ObservableCollection(); - - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image.Value)}, - HeaderText = "File" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Image.offset).Convert(v => v.ToString()) - }, - HeaderText = "Offset" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image.format)}, - HeaderText = "Image format" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Head).Convert(v => v.ToString()) - }, - HeaderText = "Head" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Cylinder).Convert(v => v.ToString()) - }, - HeaderText = "Cylinder" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.StartSector).Convert(v => v.ToString()) - }, - HeaderText = "Start" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.EndSector).Convert(v => v.ToString()) - }, - HeaderText = "End" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Sectors).Convert(v => v.ToString()) - }, - HeaderText = "Sectors" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.BytesPerSector).Convert(v => v.ToString()) - }, - HeaderText = "Bytes per sector" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Format)}, - HeaderText = "Track format" - }); - - treeTracks.DataStore = lstTracks; - - treeTracks.AllowMultipleSelection = false; - #endregion Set tracks table - - lstAdditionalInformation = new ObservableCollection(); - treeAdditionalInformation.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.str)}, - HeaderText = "Information" - }); - treeAdditionalInformation.DataStore = lstAdditionalInformation; - treeAdditionalInformation.AllowMultipleSelection = false; - - txtImage.ToolTip = "This is the disk image containing this media."; - txtFormat.ToolTip = "This is the format of the disk image."; - txtOffset.ToolTip = "Byte offset where the media dump starts in the disk image."; - txtSize.ToolTip = "Size of the disk dump."; - txtManufacturer.ToolTip = "Disk manufacturer."; - txtModel.ToolTip = "Disk model."; - txtSerial.ToolTip = "Disk serial number."; - txtFirmware.ToolTip = "Disk firmware revision."; - txtInterface.ToolTip = "Disk interface."; - txtCopyProtection.ToolTip = "Disk copy protection."; - txtMediaType.ToolTip = "Disk type."; - txtMediaSubtype.ToolTip = "Disk subtype."; - chkSequence.ToolTip = "If checked means this disk is one in a sequence of several."; - txtMediaTitle.ToolTip = "Title of disk."; - spSequence.ToolTip = "Number of this disk in the sequence."; - spTotalMedia.ToolTip = "How many disks make the sequence."; - spSide.ToolTip = "On flippy disks, which side of the disk is represented by this dump."; - spLayer.ToolTip = - "On PTP layered disks, which layer of the side of the disk is represented by this dump."; - txtBlocks.ToolTip = "How many individual blocks (sectors) are in this dump."; - spPhysicalBlockSize.ToolTip = "Size of the biggest physical block in bytes."; - spLogicalBlockSize.ToolTip = "Size of the biggest logical block in bytes."; - spCylinders.ToolTip = "Cylinders of disk."; - spHeads.ToolTip = "Heads of disk."; - spSectors.ToolTip = "Sectors per track of disk."; - chkDimensions.ToolTip = "If checked, physical dimensions of disk are known."; - chkRound.ToolTip = "If checked, disk is physicaly round."; - spDiameter.ToolTip = "Diameter in milimeters of disk."; - spHeight.ToolTip = "Height in milimeters of disk."; - spWidth.ToolTip = "Width in milimeters of disk."; - spThickness.ToolTip = "Thickness in milimeters of disk."; - chkATA.ToolTip = "If checked, disk dump contains ATA(PI) IDENTIFY information."; - } - - public void FillFields() - { - if(Metadata == null) return; - - txtImage.Text = Metadata.Image.Value; - txtFormat.Text = Metadata.Image.format; - if(Metadata.Image.offsetSpecified) txtOffset.Text = Metadata.Image.offset.ToString(); - txtSize.Text = Metadata.Size.ToString(); - checksums = Metadata.Checksums; - contentChks = Metadata.ContentChecksums; - if(Metadata.Sequence != null) - { - lblMediaTitle.Visible = true; - txtMediaTitle.Visible = true; - lblSequence.Visible = true; - spSequence.Visible = true; - lblTotalMedia.Visible = true; - spTotalMedia.Visible = true; - lblSide.Visible = true; - spSide.Visible = true; - lblLayer.Visible = true; - spLayer.Visible = true; - chkSequence.Checked = true; - txtMediaTitle.Text = Metadata.Sequence.MediaTitle; - spSequence.Value = Metadata.Sequence.MediaSequence; - spTotalMedia.Value = Metadata.Sequence.TotalMedia; - if(Metadata.Sequence.SideSpecified) spSide.Value = Metadata.Sequence.Side; - if(Metadata.Sequence.LayerSpecified) spLayer.Value = Metadata.Sequence.Layer; - } - - if(Metadata.Manufacturer != null) txtManufacturer.Text = Metadata.Manufacturer; - if(Metadata.Model != null) txtModel.Text = Metadata.Model; - if(Metadata.Serial != null) txtSerial.Text = Metadata.Serial; - if(Metadata.Firmware != null) txtFirmware.Text = Metadata.Firmware; - if(Metadata.Interface != null) txtInterface.Text = Metadata.Interface; - spPhysicalBlockSize.Value = Metadata.PhysicalBlockSize; - spLogicalBlockSize.Value = Metadata.LogicalBlockSize; - txtBlocks.Text = Metadata.LogicalBlocks.ToString(); - variableBlockSize = Metadata.VariableBlockSize; - tapeInformation = Metadata.TapeInformation; - scans = Metadata.Scans; - if(Metadata.ATA?.Identify != null) - { - chkATA.Checked = true; - treeATA.Visible = true; - lstAta.Add(Metadata.ATA.Identify); - } - - if(Metadata.PCI != null) - { - chkPCI.Checked = true; - lblPCIVendor.Visible = true; - txtPCIVendor.Visible = true; - lblPCIProduct.Visible = true; - txtPCIProduct.Visible = true; - txtPCIVendor.Text = $"0x{Metadata.PCI.VendorID:X4}"; - txtPCIProduct.Text = $"0x{Metadata.PCI.DeviceID:X4}"; - if(Metadata.PCI.Configuration != null) - { - frmPCIConfiguration.Visible = true; - lstPCIConfiguration.Add(Metadata.PCI.Configuration); - } - - if(Metadata.PCI.ExpansionROM != null) - { - frmOptionROM.Visible = true; - lstPCIOptionROM.Add(Metadata.PCI.ExpansionROM); - } - } - - if(Metadata.PCMCIA != null) - { - chkPCMCIA.Checked = true; - chkCIS.Visible = true; - lblPCMCIAManufacturer.Visible = true; - txtPCMCIAManufacturer.Visible = true; - lblMfgCode.Visible = true; - txtMfgCode.Visible = true; - lblPCMCIAProductName.Visible = true; - txtPCMCIAProductName.Visible = true; - lblCardCode.Visible = true; - txtCardCode.Visible = true; - lblCompliance.Visible = true; - txtCompliance.Visible = true; - - if(Metadata.PCMCIA.CIS != null) - { - treeCIS.Visible = true; - lstPCMCIACIS.Add(Metadata.PCMCIA.CIS); - } - - if(Metadata.PCMCIA.Compliance != null) txtCompliance.Text = Metadata.PCMCIA.Compliance; - if(Metadata.PCMCIA.ManufacturerCodeSpecified) - txtMfgCode.Text = $"0x{Metadata.PCMCIA.ManufacturerCode:X4}"; - if(Metadata.PCMCIA.CardCodeSpecified) - txtCardCode.Text = $"0x{Metadata.PCMCIA.CardCode:X4}"; - if(Metadata.PCMCIA.Manufacturer != null) txtPCMCIAManufacturer.Text = Metadata.PCMCIA.Manufacturer; - if(Metadata.PCMCIA.ProductName != null) txtPCMCIAProductName.Text = Metadata.PCMCIA.ProductName; - if(Metadata.PCMCIA.AdditionalInformation != null) - { - lblAdditionalInformation.Visible = true; - treeAdditionalInformation.Visible = true; - - foreach(string addinfo in Metadata.PCMCIA.AdditionalInformation) - lstAdditionalInformation.Add(new StringEntry {str = addinfo}); - } - } - - if(Metadata.SecureDigital?.CID != null) - { - chkSecureDigital.Checked = true; - chkCSD.Visible = true; - chkECSD.Visible = true; - lblCID.Visible = true; - treeCID.Visible = true; - lstCID.Add(Metadata.SecureDigital.CID); - - if(Metadata.SecureDigital.CSD != null) - { - chkCSD.Checked = true; - treeCSD.Visible = true; - lstCSD.Add(Metadata.SecureDigital.CSD); - } - - if(Metadata.MultiMediaCard.ExtendedCSD != null) - { - chkECSD.Checked = true; - treeECSD.Visible = true; - lstECSD.Add(Metadata.MultiMediaCard.ExtendedCSD); - } - } - - if(Metadata.SCSI?.Inquiry != null) - { - chkSCSI.Checked = true; - frmInquiry.Visible = true; - lstInquiry.Add(Metadata.SCSI.Inquiry); - - if(Metadata.SCSI.ModeSense != null) - { - frmModeSense.Visible = true; - lstModeSense.Add(Metadata.SCSI.ModeSense); - } - - if(Metadata.SCSI.ModeSense10 != null) - { - frmModeSense10.Visible = true; - lstModeSense10.Add(Metadata.SCSI.ModeSense10); - } - - if(Metadata.SCSI.LogSense != null) - { - frmLogSense.Visible = true; - lstLogSense.Add(Metadata.SCSI.LogSense); - } - - if(Metadata.SCSI.EVPD != null) - { - frmEVPDs.Visible = true; - lstEVPDs = new ObservableCollection(Metadata.SCSI.EVPD); - treeEVPDs.DataStore = lstEVPDs; // TODO: Really needed? - } - } - - if(Metadata.USB != null) - { - chkUSB.Checked = true; - lblUSBVendor.Visible = true; - txtUSBVendor.Visible = true; - lblUSBProduct.Visible = true; - txtUSBProduct.Visible = true; - txtUSBVendor.Text = $"0x{Metadata.USB.VendorID:X4}"; - txtUSBProduct.Text = $"0x{Metadata.USB.ProductID:X4}"; - if(Metadata.USB.Descriptors != null) - { - frmDescriptors.Visible = true; - lstUSBDescriptors.Add(Metadata.USB.Descriptors); - } - } - - if(Metadata.MAM != null) - { - chkMAM.Checked = true; - treeMAM.Visible = true; - lstMAM.Add(Metadata.MAM); - } - - if(Metadata.HeadsSpecified) spHeads.Value = Metadata.Heads; - if(Metadata.CylindersSpecified) spCylinders.Value = Metadata.Cylinders; - if(Metadata.SectorsPerTrackSpecified) spSectors.Value = Metadata.SectorsPerTrack; - if(Metadata.Track != null) - { - chkTracks.Checked = true; - treeTracks.Visible = true; - lstTracks = new ObservableCollection(Metadata.Track); - treeTracks.DataStore = lstTracks; // TODO: Really needed? - } - - if(Metadata.CopyProtection != null) txtCopyProtection.Text = Metadata.CopyProtection; - if(Metadata.Dimensions != null) - { - chkDimensions.Checked = true; - if(Metadata.Dimensions.DiameterSpecified) - { - chkRound.Checked = true; - stkDiameter.Visible = true; - stkHeight.Visible = false; - stkWidth.Visible = false; - spDiameter.Value = Metadata.Dimensions.Diameter; - } - else - { - stkDiameter.Visible = false; - stkHeight.Visible = true; - stkWidth.Visible = true; - spHeight.Value = Metadata.Dimensions.Height; - spWidth.Value = Metadata.Dimensions.Width; - } - - stkThickness.Visible = true; - spThickness.Value = Metadata.Dimensions.Thickness; - } - - if(Metadata.FileSystemInformation != null) - { - lstPartitions = new ObservableCollection(Metadata.FileSystemInformation); - treePartitions.DataStore = lstPartitions; // TODO: Really needed? - } - - if(Metadata.DumpHardwareArray != null) - { - chkDumpHardware.Checked = true; - treeDumpHardware.Visible = true; - btnAddHardware.Visible = true; - btnEditHardware.Visible = true; - btnRemoveHardware.Visible = true; - - lstDumpHw = new ObservableCollection(Metadata.DumpHardwareArray); - treeDumpHardware.DataStore = lstDumpHw; // TODO: Really needed? - } - - if(Metadata.DiskType != null) txtMediaType.Text = Metadata.DiskType; - if(Metadata.DiskSubType != null) txtMediaSubtype.Text = Metadata.DiskSubType; - } - - protected void OnChkSequenceToggled(object sender, EventArgs e) - { - lblMediaTitle.Visible = chkSequence.Checked.Value; - txtMediaTitle.Visible = chkSequence.Checked.Value; - lblSequence.Visible = chkSequence.Checked.Value; - spSequence.Visible = chkSequence.Checked.Value; - lblTotalMedia.Visible = chkSequence.Checked.Value; - spTotalMedia.Visible = chkSequence.Checked.Value; - lblSide.Visible = chkSequence.Checked.Value; - spSide.Visible = chkSequence.Checked.Value; - lblLayer.Visible = chkSequence.Checked.Value; - spLayer.Visible = chkSequence.Checked.Value; - } - - protected void OnChkDimensionsToggled(object sender, EventArgs e) - { - chkRound.Visible = chkDimensions.Checked.Value; - stkThickness.Visible = chkDimensions.Checked.Value; - if(chkDimensions.Checked.Value) OnChkRoundToggled(sender, e); - else - { - stkDiameter.Visible = false; - stkHeight.Visible = false; - stkWidth.Visible = false; - } - } - - protected void OnChkRoundToggled(object sender, EventArgs e) - { - stkDiameter.Visible = chkRound.Checked.Value; - stkHeight.Visible = !chkRound.Checked.Value; - stkWidth.Visible = !chkRound.Checked.Value; - } - - protected void OnChkPCMCIAToggled(object sender, EventArgs e) - { - chkCIS.Visible = chkPCMCIA.Checked.Value; - treeCIS.Visible = chkPCMCIA.Checked.Value; - lblPCMCIAManufacturer.Visible = chkPCMCIA.Checked.Value; - txtPCMCIAManufacturer.Visible = chkPCMCIA.Checked.Value; - lblMfgCode.Visible = chkPCMCIA.Checked.Value; - txtMfgCode.Visible = chkPCMCIA.Checked.Value; - lblPCMCIAProductName.Visible = chkPCMCIA.Checked.Value; - txtPCMCIAProductName.Visible = chkPCMCIA.Checked.Value; - lblCardCode.Visible = chkPCMCIA.Checked.Value; - txtCardCode.Visible = chkPCMCIA.Checked.Value; - lblCompliance.Visible = chkPCMCIA.Checked.Value; - txtCompliance.Visible = chkPCMCIA.Checked.Value; - lblAdditionalInformation.Visible = false; - treeAdditionalInformation.Visible = false; - } - - protected void OnBtnCancelPartitionClicked(object sender, EventArgs e) - { - btnCancelPartition.Visible = false; - btnApplyPartition.Visible = false; - btnRemovePartition.Visible = true; - btnEditPartition.Visible = true; - btnAddPartition.Visible = true; - stkPartitionFields1.Visible = false; - stkPartitionFields2.Visible = false; - frmFilesystems.Visible = false; - } - - protected void OnBtnRemovePartitionClicked(object sender, EventArgs e) - { - if(treePartitions.SelectedItem != null) lstPartitions.Remove((PartitionType)treePartitions.SelectedItem); - } - - protected void OnBtnEditPartitionClicked(object sender, EventArgs e) - { - if(treePartitions.SelectedItem == null) return; - - partitionIter = (PartitionType)treePartitions.SelectedItem; - - spPartitionSequence.Value = partitionIter.Sequence; - txtPartitionStart.Text = partitionIter.StartSector.ToString(); - txtPartitionEnd.Text = partitionIter.EndSector.ToString(); - txtPartitionType.Text = partitionIter.Type; - txtPartitionName.Text = partitionIter.Name; - txtPartitionDescription.Text = partitionIter.Description; - treeFilesystems.DataStore = new ObservableCollection(partitionIter.FileSystems); - - btnCancelPartition.Visible = true; - btnApplyPartition.Visible = true; - btnRemovePartition.Visible = false; - btnEditPartition.Visible = false; - btnAddPartition.Visible = false; - stkPartitionFields1.Visible = true; - stkPartitionFields2.Visible = true; - frmFilesystems.Visible = true; - - editingPartition = true; - } - - protected void OnBtnApplyPartitionClicked(object sender, EventArgs e) - { - if(!int.TryParse(txtPartitionStart.Text, out int temp)) - { - MessageBox.Show("Partition start must be a number", MessageBoxType.Error); - return; - } - - if(!int.TryParse(txtPartitionEnd.Text, out int temp2)) - { - MessageBox.Show("Partition end must be a number", MessageBoxType.Error); - return; - } - - if(temp2 <= temp) - { - MessageBox.Show("Partition must end after start, and be bigger than 1 sector", MessageBoxType.Error); - return; - } - - if(editingPartition) lstPartitions.Remove(partitionIter); - - partitionIter = new PartitionType - { - Sequence = (uint)spPartitionSequence.Value, - StartSector = ulong.Parse(txtPartitionStart.Text), - EndSector = ulong.Parse(txtPartitionEnd.Text), - Type = txtPartitionType.Text, - Name = txtPartitionName.Text, - Description = txtPartitionDescription.Text - }; - if(((ObservableCollection)treeFilesystems.DataStore).Count > 0) - partitionIter.FileSystems = ((ObservableCollection)treeFilesystems.DataStore).ToArray(); - - btnCancelPartition.Visible = false; - btnApplyPartition.Visible = false; - btnRemovePartition.Visible = true; - btnEditPartition.Visible = true; - btnAddPartition.Visible = true; - stkPartitionFields1.Visible = false; - stkPartitionFields2.Visible = false; - frmFilesystems.Visible = false; - } - - protected void OnBtnAddPartitionClicked(object sender, EventArgs e) - { - spPartitionSequence.Value = 0; - txtPartitionStart.Text = ""; - txtPartitionEnd.Text = ""; - txtPartitionType.Text = ""; - txtPartitionName.Text = ""; - txtPartitionDescription.Text = ""; - treeFilesystems.DataStore = new ObservableCollection(); - - btnCancelPartition.Visible = true; - btnApplyPartition.Visible = true; - btnRemovePartition.Visible = false; - btnEditPartition.Visible = false; - btnAddPartition.Visible = false; - stkPartitionFields1.Visible = true; - stkPartitionFields2.Visible = true; - frmFilesystems.Visible = true; - - editingPartition = false; - } - - protected void OnBtnRemoveFilesystemClicked(object sender, EventArgs e) - { - if(treeFilesystems.SelectedItem != null) - ((ObservableCollection)treeFilesystems.DataStore).Remove((FileSystemType)treeFilesystems - .SelectedItem); - } - - protected void OnBtnEditFilesystemClicked(object sender, EventArgs e) - { - /* - if(treeFilesystems.SelectedItem == null) return; - - filesystemIter = (FileSystemType)treeFilesystems.SelectedItem; - - dlgFilesystem _dlgFilesystem = new dlgFilesystem {Metadata = filesystemIter}; - _dlgFilesystem.FillFields(); - _dlgFilesystem.ShowModal(this); - - if(!_dlgFilesystem.Modified) return; - - ((ObservableCollection)treeFilesystems.DataStore).Remove(filesystemIter); - ((ObservableCollection)treeFilesystems.DataStore).Add(_dlgFilesystem.Metadata);*/ - } - - protected void OnBtnAddFilesystemClicked(object sender, EventArgs e) - { - /* - dlgFilesystem _dlgFilesystem = new dlgFilesystem(); - _dlgFilesystem.ShowModal(this); - - if(_dlgFilesystem.Modified) - ((ObservableCollection)treeFilesystems.DataStore).Add(_dlgFilesystem.Metadata);*/ - } - - protected void OnChkDumpHardwareToggled(object sender, EventArgs e) - { - treeDumpHardware.Visible = chkDumpHardware.Checked.Value; - btnAddHardware.Visible = chkDumpHardware.Checked.Value; - btnRemoveHardware.Visible = chkDumpHardware.Checked.Value; - btnEditHardware.Visible = chkDumpHardware.Checked.Value; - - btnCancelHardware.Visible = false; - btnApplyHardware.Visible = false; - frmHardware.Visible = false; - } - - protected void OnBtnCancelHardwareClicked(object sender, EventArgs e) - { - btnAddHardware.Visible = true; - btnRemoveHardware.Visible = true; - btnCancelHardware.Visible = false; - btnEditHardware.Visible = true; - btnApplyHardware.Visible = false; - frmHardware.Visible = false; - } - - protected void OnBtnRemoveHardwareClicked(object sender, EventArgs e) - { - if(treeDumpHardware.SelectedItem != null) lstDumpHw.Remove((DumpHardwareType)treeDumpHardware.SelectedItem); - } - - protected void OnBtnEditHardwareClicked(object sender, EventArgs e) - { - if(treeDumpHardware.SelectedItem == null) return; - - dumpHwIter = (DumpHardwareType)treeDumpHardware.SelectedItem; - - txtHWManufacturer.Text = dumpHwIter.Manufacturer; - txtHWModel.Text = dumpHwIter.Model; - txtHWRevision.Text = dumpHwIter.Revision; - txtHWFirmware.Text = dumpHwIter.Firmware; - txtHWSerial.Text = dumpHwIter.Serial; - if(dumpHwIter.Software != null) - { - txtDumpName.Text = dumpHwIter.Software.Name; - txtDumpVersion.Text = dumpHwIter.Software.Version; - txtDumpOS.Text = dumpHwIter.Software.OperatingSystem; - } - - treeExtents.DataStore = new ObservableCollection(dumpHwIter.Extents); - - btnAddHardware.Visible = false; - btnRemoveHardware.Visible = false; - btnCancelHardware.Visible = true; - btnEditHardware.Visible = false; - btnApplyHardware.Visible = true; - frmHardware.Visible = true; - - editingDumpHw = true; - } - - protected void OnBtnApplyHardwareClicked(object sender, EventArgs e) - { - if(editingDumpHw) lstDumpHw.Remove(dumpHwIter); - - dumpHwIter = new DumpHardwareType - { - Manufacturer = txtHWManufacturer.Text, - Model = txtHWModel.Text, - Revision = txtHWRevision.Text, - Firmware = txtHWFirmware.Text, - Serial = txtHWSerial.Text - }; - if(!string.IsNullOrWhiteSpace(txtDumpName.Text) || !string.IsNullOrWhiteSpace(txtDumpVersion.Text) || - !string.IsNullOrWhiteSpace(txtDumpOS.Text)) - dumpHwIter.Software = new SoftwareType - { - Name = txtDumpName.Text, - Version = txtDumpVersion.Text, - OperatingSystem = txtDumpOS.Text - }; - if(((ObservableCollection)treeExtents.DataStore).Count > 0) - dumpHwIter.Extents = ((ObservableCollection)treeExtents.DataStore).ToArray(); - - lstDumpHw.Add(dumpHwIter); - - btnAddHardware.Visible = true; - btnRemoveHardware.Visible = true; - btnCancelHardware.Visible = false; - btnEditHardware.Visible = true; - btnApplyHardware.Visible = false; - frmHardware.Visible = false; - } - - protected void OnBtnAddHardwareClicked(object sender, EventArgs e) - { - txtHWManufacturer.Text = ""; - txtHWModel.Text = ""; - txtHWRevision.Text = ""; - txtHWFirmware.Text = ""; - txtHWSerial.Text = ""; - txtDumpName.Text = ""; - txtDumpVersion.Text = ""; - txtDumpOS.Text = ""; - treeExtents.DataStore = new ObservableCollection(); - - btnAddHardware.Visible = false; - btnRemoveHardware.Visible = false; - btnCancelHardware.Visible = true; - btnEditHardware.Visible = false; - btnApplyHardware.Visible = true; - frmHardware.Visible = true; - - editingDumpHw = false; - } - - protected void OnBtnRemoveExtentClicked(object sender, EventArgs e) - { - if(treeExtents.SelectedItem != null) - ((ObservableCollection)treeExtents.DataStore).Remove((ExtentType)treeExtents.SelectedItem); - } - - protected void OnBtnAddExtentClicked(object sender, EventArgs e) - { - ((ObservableCollection)treeExtents.DataStore).Add(new ExtentType - { - Start = (ulong)spExtentStart.Value, - End = (ulong)spExtentEnd.Value - }); - } - - protected void OnBtnCancelClicked(object sender, EventArgs e) - { - Close(); - } - - protected void OnBtnSaveClicked(object sender, EventArgs e) - { - #region Sanity checks - if(string.IsNullOrEmpty(txtFormat.Text)) - { - MessageBox.Show("Image format cannot be null", MessageBoxType.Error); - return; - } - - if(chkSequence.Checked.Value) - { - if(spSequence.Value < 1) - { - MessageBox.Show("Media sequence must be bigger than 0", MessageBoxType.Error); - return; - } - - if(spTotalMedia.Value < 1) - { - MessageBox.Show("Total medias must be bigger than 0", MessageBoxType.Error); - return; - } - - if(spSequence.Value > spTotalMedia.Value) - { - MessageBox.Show("Media sequence cannot be bigger than total medias", MessageBoxType.Error); - return; - } - } - - if(string.IsNullOrEmpty(txtBlocks.Text) || !long.TryParse(txtBlocks.Text, out long ltmp)) - { - MessageBox.Show("Blocks must be a number", MessageBoxType.Error); - return; - } - - if(ltmp < 1) - { - MessageBox.Show("Blocks must be bigger than 0", MessageBoxType.Error); - return; - } - - if(spPhysicalBlockSize.Value < 1) - { - MessageBox.Show("Physical Block Size must be bigger than 0", MessageBoxType.Error); - return; - } - - if(spLogicalBlockSize.Value < 1) - { - MessageBox.Show("Logical Block Size must be bigger than 0", MessageBoxType.Error); - return; - } - - if(spPhysicalBlockSize.Value < spLogicalBlockSize.Value) - { - MessageBox.Show("Physical Block Size must be bigger than Logical Block Size", MessageBoxType.Error); - return; - } - - if(chkDimensions.Checked.Value) - { - if(chkRound.Checked.Value) - { - if(spDiameter.Value <= 0) - { - MessageBox.Show("Diameter must be bigger than 0", MessageBoxType.Error); - return; - } - } - else - { - if(spHeight.Value <= 0) - { - MessageBox.Show("Height must be bigger than 0", MessageBoxType.Error); - return; - } - - if(spWidth.Value <= 0) - { - MessageBox.Show("Width must be bigger than 0", MessageBoxType.Error); - return; - } - } - - if(spThickness.Value <= 0) - { - MessageBox.Show("Thickness must be bigger than 0", MessageBoxType.Error); - return; - } - } - - if(chkPCI.Checked.Value) - { - if(string.IsNullOrWhiteSpace(txtPCIVendor.Text)) - { - MessageBox.Show("PCI Vendor ID must be set", MessageBoxType.Error); - return; - } - - if(string.IsNullOrWhiteSpace(txtPCIProduct.Text)) - { - MessageBox.Show("PCI Product ID must be set", MessageBoxType.Error); - return; - } - - try - { - if(Convert.ToInt32(txtPCIVendor.Text, 16) < 0 || Convert.ToInt32(txtPCIVendor.Text, 16) > 0xFFFF) - { - MessageBox.Show("PCI Vendor ID must be between 0x0000 and 0xFFFF", MessageBoxType.Error); - return; - } - } - catch(FormatException) - { - MessageBox.Show("PCI Vendor ID must be a number in hexadecimal format", MessageBoxType.Error); - return; - } - catch(OverflowException) - { - MessageBox.Show("PCI Vendor ID must not be negative", MessageBoxType.Error); - return; - } - - try - { - if(Convert.ToInt32(txtPCIProduct.Text, 16) < 0 || Convert.ToInt32(txtPCIProduct.Text, 16) > 0xFFFF) - { - MessageBox.Show("PCI Product ID must be between 0x0000 and 0xFFFF", MessageBoxType.Error); - return; - } - } - catch(FormatException) - { - MessageBox.Show("PCI Product ID must be a number in hexadecimal format", MessageBoxType.Error); - return; - } - catch(OverflowException) - { - MessageBox.Show("PCI Product ID must not be negative", MessageBoxType.Error); - return; - } - } - - if(chkPCMCIA.Checked.Value) - { - if(string.IsNullOrWhiteSpace(txtPCMCIAManufacturer.Text)) - { - MessageBox.Show("PCMCIA Manufacturer Code must be set", MessageBoxType.Error); - return; - } - - if(string.IsNullOrWhiteSpace(txtCardCode.Text)) - { - MessageBox.Show("PCMCIA Card Code must be set", MessageBoxType.Error); - return; - } - - try - { - if(Convert.ToInt32(txtMfgCode.Text, 16) < 0 || Convert.ToInt32(txtMfgCode.Text, 16) > 0xFFFF) - { - MessageBox.Show("PCMCIA Manufacturer Code must be between 0x0000 and 0xFFFF", - MessageBoxType.Error); - return; - } - } - catch(FormatException) - { - MessageBox.Show("PCMCIA Manufacturer Code must be a number in hexadecimal format", - MessageBoxType.Error); - return; - } - catch(OverflowException) - { - MessageBox.Show("PCMCIA Manufacturer Code must not be negative", MessageBoxType.Error); - return; - } - - try - { - if(Convert.ToInt32(txtCardCode.Text, 16) < 0 || Convert.ToInt32(txtCardCode.Text, 16) > 0xFFFF) - { - MessageBox.Show("PCMCIA Card Code must be between 0x0000 and 0xFFFF", MessageBoxType.Error); - return; - } - } - catch(FormatException) - { - MessageBox.Show("PCMCIA Card Code must be a number in hexadecimal format", MessageBoxType.Error); - return; - } - catch(OverflowException) - { - MessageBox.Show("PCMCIA Card Code must not be negative", MessageBoxType.Error); - return; - } - } - - if(chkUSB.Checked.Value) - { - if(string.IsNullOrWhiteSpace(txtUSBVendor.Text)) - { - MessageBox.Show("USB Vendor ID must be set", MessageBoxType.Error); - return; - } - - if(string.IsNullOrWhiteSpace(txtUSBProduct.Text)) - { - MessageBox.Show("USB Product ID must be set", MessageBoxType.Error); - return; - } - - try - { - if(Convert.ToInt32(txtUSBVendor.Text, 16) < 0 || Convert.ToInt32(txtUSBVendor.Text, 16) > 0xFFFF) - { - MessageBox.Show("USB Vendor ID must be between 0x0000 and 0xFFFF", MessageBoxType.Error); - return; - } - } - catch(FormatException) - { - MessageBox.Show("USB Vendor ID must be a number in hexadecimal format", MessageBoxType.Error); - return; - } - catch(OverflowException) - { - MessageBox.Show("USB Vendor ID must not be negative", MessageBoxType.Error); - return; - } - - try - { - if(Convert.ToInt32(txtUSBProduct.Text, 16) < 0 || Convert.ToInt32(txtUSBProduct.Text, 16) > 0xFFFF) - { - MessageBox.Show("USB Product ID must be between 0x0000 and 0xFFFF", MessageBoxType.Error); - return; - } - } - catch(FormatException) - { - MessageBox.Show("USB Product ID must be a number in hexadecimal format", MessageBoxType.Error); - return; - } - catch(OverflowException) - { - MessageBox.Show("USB Product ID must not be negative", MessageBoxType.Error); - return; - } - } - - if(chkDumpHardware.Checked.Value) - if(lstDumpHw.Count < 1) - { - MessageBox.Show("If dump hardware is known at least an entry must be created"); - return; - } - #endregion Sanity checks - - Metadata = new BlockMediaType {Image = new ImageType {Value = txtImage.Text, format = txtFormat.Text}}; - - if(!string.IsNullOrWhiteSpace(txtOffset.Text) && long.TryParse(txtOffset.Text, out ltmp)) - { - Metadata.Image.offsetSpecified = true; - Metadata.Image.offset = ulong.Parse(txtOffset.Text); - } - - Metadata.Size = ulong.Parse(txtSize.Text); - Metadata.Checksums = checksums; - Metadata.ContentChecksums = contentChks; - - if(chkSequence.Checked.Value) - { - Metadata.Sequence = new SequenceType - { - MediaTitle = txtMediaTitle.Text, - MediaSequence = (uint)spSequence.Value, - TotalMedia = (uint)spTotalMedia.Value - }; - if(spSide.Value > 0) - { - Metadata.Sequence.SideSpecified = true; - Metadata.Sequence.Side = (byte)spSide.Value; - } - - if(spLayer.Value > 0) - { - Metadata.Sequence.LayerSpecified = true; - Metadata.Sequence.Layer = (byte)spLayer.Value; - } - } - - if(!string.IsNullOrWhiteSpace(txtManufacturer.Text)) Metadata.Manufacturer = txtManufacturer.Text; - if(!string.IsNullOrWhiteSpace(txtModel.Text)) Metadata.Model = txtModel.Text; - if(!string.IsNullOrWhiteSpace(txtSerial.Text)) Metadata.Serial = txtSerial.Text; - if(!string.IsNullOrWhiteSpace(txtFirmware.Text)) Metadata.Firmware = txtFirmware.Text; - if(!string.IsNullOrWhiteSpace(txtInterface.Text)) Metadata.Interface = txtInterface.Text; - - Metadata.PhysicalBlockSize = (uint)spPhysicalBlockSize.Value; - Metadata.LogicalBlockSize = (uint)spLogicalBlockSize.Value; - Metadata.LogicalBlocks = ulong.Parse(txtBlocks.Text); - Metadata.VariableBlockSize = variableBlockSize; - Metadata.TapeInformation = tapeInformation; - Metadata.Scans = scans; - - if(chkATA.Checked.Value && lstAta.Count == 1) Metadata.ATA = new ATAType {Identify = lstAta[0]}; - - if(chkPCI.Checked.Value) - { - Metadata.PCI = new PCIType - { - VendorID = Convert.ToUInt16(txtPCIVendor.Text, 16), - DeviceID = Convert.ToUInt16(txtPCIProduct.Text, 16) - }; - - if(lstPCIConfiguration.Count == 1) Metadata.PCI.Configuration = lstPCIConfiguration[0]; - - if(lstPCIOptionROM.Count == 1) Metadata.PCI.ExpansionROM = lstPCIOptionROM[0]; - } - - if(chkPCMCIA.Checked.Value) - { - Metadata.PCMCIA = new PCMCIAType(); - - if(lstPCMCIACIS.Count == 1) Metadata.PCMCIA.CIS = lstPCMCIACIS[0]; - - if(!string.IsNullOrWhiteSpace(txtCompliance.Text)) Metadata.PCMCIA.Compliance = txtCompliance.Text; - if(!string.IsNullOrWhiteSpace(txtPCMCIAManufacturer.Text)) - Metadata.PCMCIA.Manufacturer = txtPCMCIAManufacturer.Text; - if(!string.IsNullOrWhiteSpace(txtPCMCIAProductName.Text)) - Metadata.PCMCIA.ProductName = txtPCMCIAProductName.Text; - if(!string.IsNullOrWhiteSpace(txtMfgCode.Text)) - { - Metadata.PCMCIA.ManufacturerCodeSpecified = true; - Metadata.PCMCIA.ManufacturerCode = Convert.ToUInt16(txtMfgCode.Text, 16); - } - - if(!string.IsNullOrWhiteSpace(txtCardCode.Text)) - { - Metadata.PCMCIA.CardCodeSpecified = true; - Metadata.PCMCIA.CardCode = Convert.ToUInt16(txtCardCode.Text, 16); - } - - if(lstAdditionalInformation.Count > 0) - { - List addinfos = new List(); - foreach(StringEntry entry in lstAdditionalInformation) addinfos.Add(entry.str); - Metadata.PCMCIA.AdditionalInformation = addinfos.ToArray(); - } - } - - if(chkSecureDigital.Checked.Value) - { - Metadata.SecureDigital = new SecureDigitalType(); - - if(lstCID.Count == 1) Metadata.SecureDigital.CID = lstCID[0]; - if(lstCSD.Count == 1) Metadata.SecureDigital.CSD = lstCSD[0]; - if(lstECSD.Count == 1) Metadata.MultiMediaCard.ExtendedCSD = lstECSD[0]; - } - - if(chkSCSI.Checked.Value) - { - Metadata.SCSI = new SCSIType(); - - if(lstInquiry.Count == 1) Metadata.SCSI.Inquiry = lstInquiry[0]; - if(lstModeSense.Count == 1) Metadata.SCSI.ModeSense = lstModeSense[0]; - if(lstModeSense10.Count == 1) Metadata.SCSI.ModeSense10 = lstModeSense10[0]; - if(lstLogSense.Count == 1) Metadata.SCSI.LogSense = lstLogSense[0]; - if(lstEVPDs.Count > 0) Metadata.SCSI.EVPD = lstEVPDs.ToArray(); - } - - if(chkUSB.Checked.Value) - { - Metadata.USB = new USBType - { - VendorID = Convert.ToUInt16(txtUSBVendor.Text, 16), - ProductID = Convert.ToUInt16(txtUSBProduct.Text, 16) - }; - - if(lstUSBDescriptors.Count == 1) Metadata.USB.Descriptors = lstUSBDescriptors[0]; - } - - if(chkMAM.Checked.Value && lstMAM.Count == 1) Metadata.MAM = lstMAM[0]; - - if(spHeads.Value > 0 && spCylinders.Value > 0 && spSectors.Value > 0) - { - Metadata.HeadsSpecified = true; - Metadata.CylindersSpecified = true; - Metadata.SectorsPerTrackSpecified = true; - Metadata.Heads = (ushort)spHeads.Value; - Metadata.Cylinders = (uint)spCylinders.Value; - Metadata.SectorsPerTrack = (ulong)spSectors.Value; - } - - if(lstTracks.Count > 0) Metadata.Track = lstTracks.ToArray(); - - if(!string.IsNullOrWhiteSpace(txtCopyProtection.Text)) Metadata.CopyProtection = txtCopyProtection.Text; - - if(chkDimensions.Checked.Value) - { - Metadata.Dimensions = new DimensionsType(); - if(chkRound.Checked.Value) - { - Metadata.Dimensions.DiameterSpecified = true; - Metadata.Dimensions.Diameter = spDiameter.Value; - } - else - { - Metadata.Dimensions.HeightSpecified = true; - Metadata.Dimensions.WidthSpecified = true; - Metadata.Dimensions.Height = spHeight.Value; - Metadata.Dimensions.Width = spWidth.Value; - } - - Metadata.Dimensions.Thickness = spThickness.Value; - } - - if(lstPartitions.Count > 0) Metadata.FileSystemInformation = lstPartitions.ToArray(); - - if(chkDumpHardware.Checked.Value && lstDumpHw.Count > 0) Metadata.DumpHardwareArray = lstDumpHw.ToArray(); - - if(!string.IsNullOrWhiteSpace(txtMediaType.Text)) Metadata.DiskType = txtMediaType.Text; - if(!string.IsNullOrWhiteSpace(txtMediaSubtype.Text)) Metadata.DiskSubType = txtMediaSubtype.Text; - - Modified = true; - Close(); - } - - class StringEntry - { - public string str; - } - - #region XAML UI elements - #pragma warning disable 0649 - TextBox txtImage; - TextBox txtFormat; - TextBox txtOffset; - TextBox txtSize; - TextBox txtManufacturer; - TextBox txtModel; - TextBox txtSerial; - TextBox txtFirmware; - TextBox txtInterface; - TextBox txtCopyProtection; - TextBox txtMediaType; - TextBox txtMediaSubtype; - CheckBox chkSequence; - Label lblMediaTitle; - TextBox txtMediaTitle; - Label lblSequence; - NumericUpDown spSequence; - Label lblTotalMedia; - NumericUpDown spTotalMedia; - Label lblSide; - NumericUpDown spSide; - Label lblLayer; - NumericUpDown spLayer; - TextBox txtBlocks; - NumericUpDown spPhysicalBlockSize; - NumericUpDown spLogicalBlockSize; - NumericUpDown spCylinders; - NumericUpDown spHeads; - NumericUpDown spSectors; - CheckBox chkDimensions; - CheckBox chkRound; - StackLayout stkDiameter; - NumericUpDown spDiameter; - StackLayout stkHeight; - NumericUpDown spHeight; - StackLayout stkWidth; - NumericUpDown spWidth; - StackLayout stkThickness; - NumericUpDown spThickness; - CheckBox chkATA; - GridView treeATA; - CheckBox chkPCI; - Label lblPCIVendor; - TextBox txtPCIVendor; - Label lblPCIProduct; - TextBox txtPCIProduct; - GroupBox frmPCIConfiguration; - GridView treeConfiguration; - GroupBox frmOptionROM; - GridView treeOptionROM; - CheckBox chkPCMCIA; - CheckBox chkCIS; - GridView treeCIS; - Label lblPCMCIAManufacturer; - Label lblMfgCode; - Label lblPCMCIAProductName; - Label lblCardCode; - Label lblCompliance; - TextBox txtPCMCIAManufacturer; - TextBox txtMfgCode; - TextBox txtPCMCIAProductName; - TextBox txtCardCode; - TextBox txtCompliance; - GroupBox lblAdditionalInformation; - GridView treeAdditionalInformation; - CheckBox chkSecureDigital; - GridView treeCID; - CheckBox chkCSD; - GridView treeCSD; - CheckBox chkECSD; - GridView treeECSD; - CheckBox chkSCSI; - GroupBox frmInquiry; - GridView treeInquiry; - GroupBox frmModeSense; - GridView treeModeSense; - GroupBox frmModeSense10; - GridView treeModeSense10; - GroupBox frmLogSense; - GridView treeLogSense; - GroupBox frmEVPDs; - GridView treeEVPDs; - CheckBox chkUSB; - TextBox txtUSBVendor; - TextBox txtUSBProduct; - GridView treeDescriptors; - CheckBox chkMAM; - GridView treeMAM; - CheckBox chkTracks; - GridView treeTracks; - GridView treePartitions; - Button btnCancelPartition; - Button btnRemovePartition; - Button btnEditPartition; - Button btnApplyPartition; - Button btnAddPartition; - NumericUpDown spPartitionSequence; - TextBox txtPartitionStart; - TextBox txtPartitionEnd; - TextBox txtPartitionType; - TextBox txtPartitionName; - TextBox txtPartitionDescription; - GroupBox frmFilesystems; - GridView treeFilesystems; - CheckBox chkDumpHardware; - GridView treeDumpHardware; - Button btnCancelHardware; - Button btnRemoveHardware; - Button btnEditHardware; - Button btnApplyHardware; - Button btnAddHardware; - GroupBox frmHardware; - TextBox txtHWManufacturer; - TextBox txtHWModel; - TextBox txtHWRevision; - TextBox txtHWFirmware; - TextBox txtHWSerial; - GridView treeExtents; - NumericUpDown spExtentStart; - NumericUpDown spExtentEnd; - TextBox txtDumpName; - TextBox txtDumpVersion; - TextBox txtDumpOS; - Label lblCID; - Label lblUSBVendor; - Label lblUSBProduct; - GroupBox frmDescriptors; - StackLayout stkPartitionFields1; - StackLayout stkPartitionFields2; - #pragma warning restore 0649 - #endregion XAML UI elements - } -} \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgMetadata.xeto b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgMetadata.xeto deleted file mode 100644 index bfb0245..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgMetadata.xeto +++ /dev/null @@ -1,373 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Known release type? - - - - - - - Unknown or unreleased - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgMetadata.xeto.cs b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgMetadata.xeto.cs deleted file mode 100644 index 7e2e922..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgMetadata.xeto.cs +++ /dev/null @@ -1,1291 +0,0 @@ -// -// Author: -// Natalia Portillo claunia@claunia.com -// -// Copyright (c) 2017-2018, © Natalia Portillo -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the -// following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, this list of conditions and the -// following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the -// following disclaimer in the documentation and/or other materials provided with the distribution. -// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote -// products derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Xml; -using System.Xml.Serialization; -using Eto.Forms; -using Eto.Serialization.Xaml; -using Eto.Threading; -using Schemas; -using BorderType = Schemas.BorderType; - -namespace CICMMetadataEditor -{ - public class dlgMetadata : Form - { - AdvertisementType[] adverts; - AudioMediaType[] audiomedias; - BookType[] books; - string currentFile; - LinearMediaType[] linearmedias; - ObservableCollection lstArchitectures; - ObservableCollection lstArchitecturesTypes; - ObservableCollection lstBarcodes; - ObservableCollection lstBarcodeTypes; - ObservableCollection lstCategories; - ObservableCollection lstDiscs; - ObservableCollection lstDisks; - ObservableCollection lstFilesForMedia; - ObservableCollection lstKeywords; - ObservableCollection lstLanguages; - ObservableCollection lstLanguageTypes; - ObservableCollection lstOses; - ObservableCollection lstSubcategories; - - // TODO: Add the options to edit these fields - MagazineType[] magazines; - CICMMetadataType metadata; - - bool modified; - PCIType[] pcis; - bool stopped; - - Thread thdDisc; - Thread thdDisk; - UserManualType[] usermanuals; - - public dlgMetadata() - { - XamlReader.Load(this); - - cmbReleaseType = new EnumDropDown(); - stkReleaseType.Items.Add(new StackLayoutItem {Control = cmbReleaseType, Expand = true}); - - treeKeywords.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.str)}, - HeaderText = "Keyword" - }); - treeBarcodes.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.code)}, - HeaderText = "Barcode" - }); - treeBarcodes.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.type).Convert(v => v.ToString()) - }, - HeaderText = "Type" - }); - treeCategories.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.str)}, - HeaderText = "Category" - }); - treeSubcategories.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.str)}, - HeaderText = "Subcategory" - }); - treeLanguages.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.str)}, - HeaderText = "Language" - }); - treeOses.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.name)}, - HeaderText = "Name" - }); - treeOses.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.version)}, - HeaderText = "Version" - }); - treeArchitectures.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.str)}, - HeaderText = "Architecture" - }); - treeDiscs.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.path)}, - HeaderText = "File" - }); - treeDisks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.path)}, - HeaderText = "File" - }); - - treeKeywords.AllowMultipleSelection = false; - treeBarcodes.AllowMultipleSelection = false; - treeCategories.AllowMultipleSelection = false; - treeSubcategories.AllowMultipleSelection = false; - treeLanguages.AllowMultipleSelection = false; - treeOses.AllowMultipleSelection = false; - treeArchitectures.AllowMultipleSelection = false; - treeDiscs.AllowMultipleSelection = false; - treeDisks.AllowMultipleSelection = false; - - txtDeveloper.ToolTip = "Who developed the application."; - txtPublisher.ToolTip = "Who published the application."; - txtAuthor.ToolTip = "Author of the audiovisual media."; - txtPerformer.ToolTip = "Performer of the audiovisual media."; - txtName.ToolTip = "Application name."; - txtVersion.ToolTip = "Application version."; - txtPartNumber.ToolTip = "Part number of the application distribution."; - txtSerialNumber.ToolTip = - "Serial number of the application distribution. Not to be confused with serial number required to install."; - - lstBarcodeTypes = new ObservableCollection(); - lstLanguageTypes = new ObservableCollection(); - lstArchitecturesTypes = new ObservableCollection(); - lstFilesForMedia = new ObservableCollection(); - - //cmbBarcodes.ItemTextBinding = Binding.Property(r => r.str); - cmbBarcodes.DataStore = lstBarcodeTypes; - cmbLanguages.DataStore = lstLanguageTypes; - cmbArchitectures.DataStore = lstArchitecturesTypes; - cmbFilesForNewDisc.DataStore = lstFilesForMedia; - cmbFilesForNewDisk.DataStore = lstFilesForMedia; - - FillBarcodeCombo(); - FillLanguagesCombo(); - FillArchitecturesCombo(); - FillFilesCombos(); - } - - protected void OnAboutClicked(object sender, EventArgs e) - { - new AboutDialog().ShowDialog(this); - } - - protected void OnQuitClicked(object sender, EventArgs e) - { - Application.Instance.Quit(); - } - - protected void OnNewClicked(object sender, EventArgs e) - { - metadata = null; - modified = false; - currentFile = null; - LoadData(); - } - - protected void OnOpenClicked(object sender, EventArgs e) - { - OpenFileDialog dlgOpen = new OpenFileDialog - { - CheckFileExists = true, - MultiSelect = false, - Title = "Choose existing metadata file" - }; - dlgOpen.Filters.Add(new FileFilter("Metadata files", ".xml")); - - DialogResult result = dlgOpen.ShowDialog(this); - - if(result != DialogResult.Ok) return; - - try - { - XmlSerializer reader = new XmlSerializer(typeof(CICMMetadataType)); - FileStream fs = new FileStream(dlgOpen.FileName, FileMode.Open, FileAccess.Read); - metadata = (CICMMetadataType)reader.Deserialize(fs); - fs.Dispose(); - LoadData(); - currentFile = dlgOpen.FileName; - } - catch(XmlException) - { - MessageBox.Show("The chosen file is not a correct CICM Metadata file.", MessageBoxType.Error); - } - } - - protected void OnSaveClicked(object sender, EventArgs e) - { - if(!string.IsNullOrEmpty(currentFile)) OnSaveAsClicked(sender, e); - else Save(currentFile); - } - - protected void OnSaveAsClicked(object sender, EventArgs e) - { - SaveFileDialog dlgSave = new SaveFileDialog {CheckFileExists = true, Title = "Choose new metadata file"}; - dlgSave.Filters.Add(new FileFilter("Metadata files", ".xml")); - DialogResult result = dlgSave.ShowDialog(this); - - if(result != DialogResult.Ok) return; - - Save(dlgSave.FileName); - } - - void Save(string destination) - { - try - { - XmlSerializer writer = new XmlSerializer(typeof(CICMMetadataType)); - FileStream fs = new FileStream(destination, FileMode.Create, FileAccess.Write); - writer.Serialize(fs, metadata); - fs.Dispose(); - currentFile = destination; - } - catch(Exception) - { - if(Debugger.IsAttached) throw; - - MessageBox.Show("Could not save metadata.", MessageBoxType.Error); - } - } - - void LoadData() - { - modified = false; - - lstKeywords = new ObservableCollection(); - lstBarcodes = new ObservableCollection(); - lstCategories = new ObservableCollection(); - lstSubcategories = new ObservableCollection(); - lstLanguages = new ObservableCollection(); - lstOses = new ObservableCollection(); - lstArchitectures = new ObservableCollection(); - lstDiscs = new ObservableCollection(); - lstDisks = new ObservableCollection(); - - treeKeywords.DataStore = lstKeywords; - treeBarcodes.DataStore = lstBarcodes; - treeCategories.DataStore = lstCategories; - treeSubcategories.DataStore = lstSubcategories; - treeLanguages.DataStore = lstLanguages; - treeOses.DataStore = lstOses; - treeArchitectures.DataStore = lstArchitectures; - treeDiscs.DataStore = lstDiscs; - treeDisks.DataStore = lstDisks; - - txtDeveloper.Text = ""; - txtPublisher.Text = ""; - txtAuthor.Text = ""; - txtPerformer.Text = ""; - txtName.Text = ""; - txtVersion.Text = ""; - chkKnownReleaseType.Checked = false; - cldReleaseDate.Value = DateTime.UtcNow; - chkReleaseDate.Checked = false; - txtPartNumber.Text = ""; - txtSerialNumber.Text = ""; - txtNewKeyword.Text = ""; - txtNewBarcode.Text = ""; - txtNewCategory.Text = ""; - txtNewSubcategory.Text = ""; - txtNewOsName.Text = ""; - txtNewOsVersion.Text = ""; - - FillFields(); - } - - void FillBarcodeCombo() - { - lstBarcodeTypes.Clear(); - foreach(BarcodeTypeType type in Enum.GetValues(typeof(BarcodeTypeType))) - lstBarcodeTypes.Add(type.ToString()); - } - - void FillLanguagesCombo() - { - lstLanguageTypes.Clear(); - foreach(LanguagesTypeLanguage type in Enum.GetValues(typeof(LanguagesTypeLanguage))) - lstLanguageTypes.Add(type.ToString()); - } - - void FillArchitecturesCombo() - { - lstArchitecturesTypes.Clear(); - foreach(ArchitecturesTypeArchitecture type in Enum.GetValues(typeof(ArchitecturesTypeArchitecture))) - lstArchitecturesTypes.Add(type.ToString()); - } - - void FillFilesCombos() - { - /* TODO - foreach(KeyValuePair files in Context.Hashes) lstFilesForMedia.Add(files.Key); - */ - } - - void FillFields() - { - if(metadata == null) return; - - if(metadata.Developer != null) - foreach(string developer in metadata.Developer) - { - if(!string.IsNullOrWhiteSpace(txtDeveloper.Text)) txtDeveloper.Text += ","; - txtDeveloper.Text += developer; - } - - if(metadata.Publisher != null) - foreach(string publisher in metadata.Publisher) - { - if(!string.IsNullOrWhiteSpace(txtPublisher.Text)) txtPublisher.Text += ","; - txtPublisher.Text += publisher; - } - - if(metadata.Author != null) - foreach(string author in metadata.Author) - { - if(!string.IsNullOrWhiteSpace(txtPublisher.Text)) txtPublisher.Text += ","; - txtPublisher.Text += author; - } - - if(metadata.Performer != null) - foreach(string performer in metadata.Performer) - { - if(!string.IsNullOrWhiteSpace(txtPublisher.Text)) txtPublisher.Text += ","; - txtPublisher.Text += performer; - } - - txtName.Text = metadata.Name; - txtVersion.Text = metadata.Version; - txtPartNumber.Text = metadata.PartNumber; - txtSerialNumber.Text = metadata.SerialNumber; - - if(metadata.ReleaseTypeSpecified) - { - chkKnownReleaseType.Checked = true; - cmbReleaseType.Enabled = true; - cmbReleaseType.SelectedValue = metadata.ReleaseType; - } - - if(metadata.ReleaseDateSpecified) - { - chkReleaseDate.Checked = false; - cldReleaseDate.Enabled = true; - cldReleaseDate.Value = metadata.ReleaseDate; - } - - if(metadata.Keywords != null) - foreach(string keyword in metadata.Keywords) - lstKeywords.Add(new StringEntry {str = keyword}); - if(metadata.Categories != null) - foreach(string category in metadata.Categories) - lstCategories.Add(new StringEntry {str = category}); - if(metadata.Subcategories != null) - foreach(string subcategory in metadata.Subcategories) - lstSubcategories.Add(new StringEntry {str = subcategory}); - - if(metadata.Languages != null) - foreach(LanguagesTypeLanguage language in metadata.Languages) - { - lstLanguages.Add(new StringEntry {str = language.ToString()}); - lstLanguageTypes.Remove(language.ToString()); - } - - if(metadata.RequiredOperatingSystems != null) - foreach(RequiredOperatingSystemType reqos in metadata.RequiredOperatingSystems) - foreach(string reqver in reqos.Version) - lstOses.Add(new TargetOsEntry {name = reqos.Name, version = reqver}); - - if(metadata.Architectures != null) - foreach(ArchitecturesTypeArchitecture architecture in metadata.Architectures) - { - lstArchitectures.Add(new StringEntry {str = architecture.ToString()}); - lstArchitecturesTypes.Remove(architecture.ToString()); - } - - if(metadata.OpticalDisc != null) - foreach(OpticalDiscType disc in metadata.OpticalDisc) - { - lstDiscs.Add(new DiscEntry {path = disc.Image.Value, disc = disc}); - List files = new List {disc.Image.Value}; - if(disc.ADIP != null) files.Add(disc.ADIP.Image); - if(disc.ATIP != null) files.Add(disc.ATIP.Image); - if(disc.BCA != null) files.Add(disc.BCA.Image); - if(disc.CMI != null) files.Add(disc.CMI.Image); - if(disc.DCB != null) files.Add(disc.DCB.Image); - if(disc.DDS != null) files.Add(disc.DDS.Image); - if(disc.DMI != null) files.Add(disc.DMI.Image); - if(disc.LastRMD != null) files.Add(disc.LastRMD.Image); - if(disc.LeadIn != null) - foreach(BorderType border in disc.LeadIn) - files.Add(border.Image); - if(disc.LeadInCdText != null) files.Add(disc.LeadInCdText.Image); - if(disc.LeadOut != null) - foreach(BorderType border in disc.LeadOut) - files.Add(border.Image); - if(disc.MediaID != null) files.Add(disc.MediaID.Image); - if(disc.PAC != null) files.Add(disc.PAC.Image); - if(disc.PFI != null) files.Add(disc.PFI.Image); - if(disc.PFIR != null) files.Add(disc.PFIR.Image); - if(disc.PMA != null) files.Add(disc.PMA.Image); - if(disc.PRI != null) files.Add(disc.PRI.Image); - if(disc.SAI != null) files.Add(disc.SAI.Image); - if(disc.TOC != null) files.Add(disc.TOC.Image); - if(disc.Track != null) files.AddRange(disc.Track.Select(track => track.Image.Value)); - - foreach(string file in files) - if(lstFilesForMedia.Contains(file)) - lstFilesForMedia.Remove(file); - } - - if(metadata.BlockMedia != null) - foreach(BlockMediaType disk in metadata.BlockMedia) - { - lstDisks.Add(new DiskEntry {path = disk.Image.Value, disk = disk}); - List files = new List {disk.Image.Value}; - if(disk.ATA?.Identify != null) files.Add(disk.ATA.Identify.Image); - if(disk.MAM != null) files.Add(disk.MAM.Image); - if(disk.PCI?.ExpansionROM != null) files.Add(disk.PCI.ExpansionROM.Image.Value); - if(disk.PCMCIA?.CIS != null) files.Add(disk.PCMCIA.CIS.Image); - if(disk.SCSI != null) - { - if(disk.SCSI.Inquiry != null) files.Add(disk.SCSI.Inquiry.Image); - if(disk.SCSI.LogSense != null) files.Add(disk.SCSI.LogSense.Image); - if(disk.SCSI.ModeSense != null) files.Add(disk.SCSI.ModeSense.Image); - if(disk.SCSI.ModeSense10 != null) files.Add(disk.SCSI.ModeSense10.Image); - if(disk.SCSI.EVPD != null) files.AddRange(disk.SCSI.EVPD.Select(evpd => evpd.Image)); - } - - if(disk.SecureDigital != null) - { - if(disk.SecureDigital.CID != null) files.Add(disk.SecureDigital.CID.Image); - if(disk.SecureDigital.CSD != null) files.Add(disk.SecureDigital.CSD.Image); - if(disk.MultiMediaCard.ExtendedCSD != null) files.Add(disk.MultiMediaCard.ExtendedCSD.Image); - } - - if(disk.TapeInformation != null) - files.AddRange(disk.TapeInformation.Select(tapePart => tapePart.Image.Value)); - if(disk.Track != null) files.AddRange(disk.Track.Select(track => track.Image.Value)); - if(disk.USB?.Descriptors != null) files.Add(disk.USB.Descriptors.Image); - - foreach(string file in files) - if(lstFilesForMedia.Contains(file)) - lstFilesForMedia.Remove(file); - } - - magazines = metadata.Magazine; - books = metadata.Book; - usermanuals = metadata.UserManual; - adverts = metadata.Advertisement; - linearmedias = metadata.LinearMedia; - pcis = metadata.PCICard; - audiomedias = metadata.AudioMedia; - } - - protected void OnChkKnownReleaseTypeToggled(object sender, EventArgs e) - { - cmbReleaseType.Enabled = chkKnownReleaseType.Checked.Value; - } - - protected void OnChkReleaseDateToggled(object sender, EventArgs e) - { - cldReleaseDate.Enabled = !chkReleaseDate.Checked.Value; - } - - protected void OnBtnAddKeywordClicked(object sender, EventArgs e) - { - lstKeywords.Add(new StringEntry {str = txtNewKeyword.Text}); - txtNewKeyword.Text = ""; - } - - protected void OnBtnRemoveKeywordClicked(object sender, EventArgs e) - { - if(treeKeywords.SelectedItem != null) lstKeywords.Remove((StringEntry)treeKeywords.SelectedItem); - } - - protected void OnBtnClearKeywordsClicked(object sender, EventArgs e) - { - lstKeywords.Clear(); - } - - protected void OnBtnAddBarcodeClicked(object sender, EventArgs e) - { - if(string.IsNullOrEmpty(cmbBarcodes.Text)) return; - - lstBarcodes.Add(new BarcodeEntry - { - code = txtNewBarcode.Text, - type = (BarcodeTypeType)Enum.Parse(typeof(BarcodeTypeType), cmbBarcodes.Text) - }); - txtNewBarcode.Text = ""; - } - - protected void OnBtnClearBarcodesClicked(object sender, EventArgs e) - { - lstBarcodes.Clear(); - } - - protected void OnBtnRemoveBarcodeClicked(object sender, EventArgs e) - { - if(treeBarcodes.SelectedItem != null) lstBarcodes.Remove((BarcodeEntry)treeBarcodes.SelectedItem); - } - - protected void OnBtnAddCategoryClicked(object sender, EventArgs e) - { - lstCategories.Add(new StringEntry {str = txtNewCategory.Text}); - txtNewCategory.Text = ""; - } - - protected void OnBtnAddSubcategoryClicked(object sender, EventArgs e) - { - lstSubcategories.Add(new StringEntry {str = txtNewSubcategory.Text}); - txtNewSubcategory.Text = ""; - } - - protected void OnBtnRemoveSubcategoryClicked(object sender, EventArgs e) - { - if(treeSubcategories.SelectedItem != null) - lstSubcategories.Remove((StringEntry)treeSubcategories.SelectedItem); - } - - protected void OnBtnClearSubcategoriesClicked(object sender, EventArgs e) - { - lstSubcategories.Clear(); - } - - protected void OnBtnRemoveCategoryClicked(object sender, EventArgs e) - { - if(treeCategories.SelectedItem != null) lstCategories.Remove((StringEntry)treeCategories.SelectedItem); - } - - protected void OnBtnClearCategoriesClicked(object sender, EventArgs e) - { - lstCategories.Clear(); - } - - protected void OnBtnAddLanguageClicked(object sender, EventArgs e) - { - if(string.IsNullOrWhiteSpace(cmbLanguages.Text)) return; - - lstLanguages.Add(new StringEntry {str = cmbLanguages.Text}); - lstLanguageTypes.Remove(cmbLanguages.Text); - } - - protected void OnBtnRemoveLanguageClicked(object sender, EventArgs e) - { - if(treeLanguages.SelectedItem == null) return; - - lstLanguageTypes.Add(((StringEntry)treeLanguages.SelectedItem).str); - lstLanguages.Remove((StringEntry)treeLanguages.SelectedItem); - } - - protected void OnBtnClearLanguagesClicked(object sender, EventArgs e) - { - lstLanguages.Clear(); - FillLanguagesCombo(); - } - - protected void OnBtnAddNewOsClicked(object sender, EventArgs e) - { - if(string.IsNullOrWhiteSpace(txtNewOsName.Text)) - { - MessageBox.Show("Operating system name cannot be empty.", MessageBoxType.Error); - return; - } - - if(string.IsNullOrWhiteSpace(txtNewOsVersion.Text)) - { - MessageBox.Show("Operating system version cannot be empty.", MessageBoxType.Error); - return; - } - - lstOses.Add(new TargetOsEntry {name = txtNewOsName.Text, version = txtNewOsVersion.Text}); - txtNewOsName.Text = ""; - txtNewOsVersion.Text = ""; - } - - protected void OnBtnClearOsesClicked(object sender, EventArgs e) - { - lstOses.Clear(); - } - - protected void OnBtnRemoveOsClicked(object sender, EventArgs e) - { - if(treeOses.SelectedItem != null) lstOses.Remove((TargetOsEntry)treeOses.SelectedItem); - } - - protected void OnBtnAddArchitectureClicked(object sender, EventArgs e) - { - if(string.IsNullOrWhiteSpace(cmbArchitectures.Text)) return; - - lstArchitectures.Add(new StringEntry {str = cmbArchitectures.Text}); - lstArchitecturesTypes.Remove(cmbArchitectures.Text); - } - - protected void OnBtnClearArchitecturesClicked(object sender, EventArgs e) - { - lstArchitectures.Clear(); - FillArchitecturesCombo(); - } - - protected void OnBtnRemoveArchitectureClicked(object sender, EventArgs e) - { - if(treeArchitectures.SelectedItem == null) return; - - lstArchitecturesTypes.Add(((StringEntry)treeArchitectures.SelectedItem).str); - lstArchitectures.Remove((StringEntry)treeArchitectures.SelectedItem); - } - - protected void OnBtnAddDiscClicked(object sender, EventArgs e) - { - /* TODO - Context.SelectedFile = cmbFilesForNewDisc.Text; - */ - tabGeneral.Visible = false; - tabKeywords.Visible = false; - tabBarcodes.Visible = false; - tabCategories.Visible = false; - tabLanguages.Visible = false; - tabTargetOs.Visible = false; - tabArchitectures.Visible = false; - tabDisks.Visible = false; - prgAddDisc1.Visible = true; - prgAddDisc2.Visible = true; - lblAddDisc1.Visible = true; - lblAddDisc2.Visible = true; - btnCancel.Visible = false; - btnOK.Visible = false; - btnEditDisc.Visible = false; - btnClearDiscs.Visible = false; - /* TODO - Workers.Failed += OnDiscAddFailed; - Workers.Finished += OnDiscAddFinished; - Workers.UpdateProgress += UpdateDiscProgress1; - Workers.UpdateProgress2 += UpdateDiscProgress2; - Context.WorkingDisc = null; - */ - btnStopAddDisc.Visible = true; - btnAddDisc.Visible = false; - btnRemoveDisc.Visible = false; - /* TODO - thdDisc = new Thread(Workers.AddMedia); - thdDisc.Start(); - */ - } - - protected void OnBtnStopAddDiscClicked(object sender, EventArgs e) - { - thdDisc?.Abort(); - stopped = true; - OnDiscAddFailed(null); - } - - void UpdateDiscProgress1(string text, string inner, long current, long maximum) - { - Application.Instance.Invoke(delegate - { - lblAddDisc1.Text = !string.IsNullOrWhiteSpace(inner) ? inner : text; - if(maximum > 0) - { - if(current < int.MinValue || current > int.MaxValue || maximum < int.MinValue || - maximum > int.MaxValue) - { - current /= 100; - maximum /= 100; - } - - prgAddDisc1.Indeterminate = false; - prgAddDisc1.MinValue = 0; - prgAddDisc1.MaxValue = (int)maximum; - prgAddDisc1.Value = (int)current; - } - else prgAddDisc1.Indeterminate = true; - }); - } - - void UpdateDiscProgress2(string text, string inner, long current, long maximum) - { - Application.Instance.Invoke(delegate - { - lblAddDisc2.Text = !string.IsNullOrWhiteSpace(inner) ? inner : text; - if(maximum > 0) - { - if(current < int.MinValue || current > int.MaxValue || maximum < int.MinValue || - maximum > int.MaxValue) - { - current /= 100; - maximum /= 100; - } - - prgAddDisc2.Indeterminate = false; - prgAddDisc2.MinValue = 0; - prgAddDisc2.MaxValue = (int)maximum; - prgAddDisc2.Value = (int)current; - } - else prgAddDisc2.Indeterminate = true; - }); - } - - void OnDiscAddFailed(string text) - { - Application.Instance.Invoke(delegate - { - if(!stopped) MessageBox.Show(text, MessageBoxType.Error); - /* TODO - Context.SelectedFile = ""; - */ - tabGeneral.Visible = true; - tabKeywords.Visible = true; - tabBarcodes.Visible = true; - tabCategories.Visible = true; - tabLanguages.Visible = true; - tabTargetOs.Visible = true; - tabArchitectures.Visible = true; - tabDisks.Visible = true; - prgAddDisc1.Visible = false; - prgAddDisc2.Visible = false; - lblAddDisc1.Visible = false; - lblAddDisc2.Visible = false; - btnCancel.Visible = true; - btnOK.Visible = true; - btnEditDisc.Visible = true; - btnClearDiscs.Visible = true; - /* TODO - Workers.Failed -= OnDiscAddFailed; - Workers.Finished -= OnDiscAddFinished; - Workers.UpdateProgress -= UpdateDiscProgress1; - Workers.UpdateProgress2 -= UpdateDiscProgress2; - Context.WorkingDisc = null; - */ - btnStopAddDisc.Visible = false; - btnAddDisc.Visible = true; - btnRemoveDisc.Visible = true; - thdDisc = null; - }); - } - - void OnDiscAddFinished() - { - Application.Instance.Invoke(delegate - { - /* TODO - if(Context.WorkingDisc == null) return; - - OpticalDiscType disc = Context.WorkingDisc; - - lstDiscs.Add(new DiscEntry {path = Context.SelectedFile, disc = disc}); - List files = new List {disc.Image.Value}; - if(disc.ADIP != null) files.Add(disc.ADIP.Image); - if(disc.ATIP != null) files.Add(disc.ATIP.Image); - if(disc.BCA != null) files.Add(disc.BCA.Image); - if(disc.CMI != null) files.Add(disc.CMI.Image); - if(disc.DCB != null) files.Add(disc.DCB.Image); - if(disc.DDS != null) files.Add(disc.DDS.Image); - if(disc.DMI != null) files.Add(disc.DMI.Image); - if(disc.LastRMD != null) files.Add(disc.LastRMD.Image); - if(disc.LeadIn != null) files.AddRange(disc.LeadIn.Select(border => border.Image)); - if(disc.LeadInCdText != null) files.Add(disc.LeadInCdText.Image); - if(disc.LeadOut != null) files.AddRange(disc.LeadOut.Select(border => border.Image)); - if(disc.MediaID != null) files.Add(disc.MediaID.Image); - if(disc.PAC != null) files.Add(disc.PAC.Image); - if(disc.PFI != null) files.Add(disc.PFI.Image); - if(disc.PFIR != null) files.Add(disc.PFIR.Image); - if(disc.PMA != null) files.Add(disc.PMA.Image); - if(disc.PRI != null) files.Add(disc.PRI.Image); - if(disc.SAI != null) files.Add(disc.SAI.Image); - if(disc.TOC != null) files.Add(disc.TOC.Image); - if(disc.Track != null) files.AddRange(disc.Track.Select(track => track.Image.Value)); - - foreach(string file in files) lstFilesForMedia.Remove(file); -*/ - /* TODO - Context.SelectedFile = ""; - */ - tabGeneral.Visible = true; - tabKeywords.Visible = true; - tabBarcodes.Visible = true; - tabCategories.Visible = true; - tabLanguages.Visible = true; - tabTargetOs.Visible = true; - tabArchitectures.Visible = true; - tabDisks.Visible = true; - prgAddDisc1.Visible = false; - prgAddDisc2.Visible = false; - lblAddDisc1.Visible = false; - lblAddDisc2.Visible = false; - btnCancel.Visible = true; - btnOK.Visible = true; - btnEditDisc.Visible = true; - btnClearDiscs.Visible = true; - /* TODO - Workers.Failed -= OnDiscAddFailed; - Workers.Finished -= OnDiscAddFinished; - Workers.UpdateProgress -= UpdateDiscProgress1; - Workers.UpdateProgress2 -= UpdateDiscProgress2; - Context.WorkingDisc = null; - */ - btnStopAddDisc.Visible = false; - btnAddDisc.Visible = true; - btnRemoveDisc.Visible = true; - thdDisc = null; - }); - } - - protected void OnBtnClearDiscsClicked(object sender, EventArgs e) - { - lstDiscs.Clear(); - // TODO: Don't add files that are in disks - FillFilesCombos(); - } - - protected void OnBtnRemoveDiscClicked(object sender, EventArgs e) - { - if(treeDiscs.SelectedItem == null) return; - - lstFilesForMedia.Add(((DiscEntry)treeDiscs.SelectedItem).path); - lstDiscs.Remove((DiscEntry)treeDiscs.SelectedItem); - } - - protected void OnBtnAddDiskClicked(object sender, EventArgs e) - { - /* TODO - Context.SelectedFile = cmbFilesForNewDisk.Text; - */ - tabGeneral.Visible = false; - tabKeywords.Visible = false; - tabBarcodes.Visible = false; - tabCategories.Visible = false; - tabLanguages.Visible = false; - tabTargetOs.Visible = false; - tabArchitectures.Visible = false; - tabDiscs.Visible = false; - prgAddDisk1.Visible = true; - prgAddDisk2.Visible = true; - lblAddDisk1.Visible = true; - lblAddDisk2.Visible = true; - btnCancel.Visible = false; - btnOK.Visible = false; - btnEditDisk.Visible = false; - btnClearDisks.Visible = false; - /* TODO - Workers.Failed += OnDiskAddFailed; - Workers.Finished += OnDiskAddFinished; - Workers.UpdateProgress += UpdateDiskProgress1; - Workers.UpdateProgress2 += UpdateDiskProgress2; - Context.WorkingDisk = null; - */ - btnStopAddDisk.Visible = true; - btnAddDisk.Visible = false; - btnRemoveDisk.Visible = false; - /* TODO - -thdDisk = new Thread(Workers.AddMedia); -thdDisk.Start(); -*/ - } - - protected void OnBtnStopAddDiskClicked(object sender, EventArgs e) - { - thdDisk?.Abort(); - stopped = true; - OnDiskAddFailed(null); - } - - void UpdateDiskProgress1(string text, string inner, long current, long maximum) - { - Application.Instance.Invoke(delegate - { - lblAddDisk1.Text = !string.IsNullOrWhiteSpace(inner) ? inner : text; - if(maximum > 0) - { - if(current < int.MinValue || current > int.MaxValue || maximum < int.MinValue || - maximum > int.MaxValue) - { - current /= 100; - maximum /= 100; - } - - prgAddDisk1.Indeterminate = false; - prgAddDisk1.MinValue = 0; - prgAddDisk1.MaxValue = (int)maximum; - prgAddDisk1.Value = (int)current; - } - else prgAddDisk1.Indeterminate = true; - }); - } - - void UpdateDiskProgress2(string text, string inner, long current, long maximum) - { - Application.Instance.Invoke(delegate - { - lblAddDisk2.Text = !string.IsNullOrWhiteSpace(inner) ? inner : text; - if(maximum > 0) - { - if(current < int.MinValue || current > int.MaxValue || maximum < int.MinValue || - maximum > int.MaxValue) - { - current /= 100; - maximum /= 100; - } - - prgAddDisk2.Indeterminate = false; - prgAddDisk2.MinValue = 0; - prgAddDisk2.MaxValue = (int)maximum; - prgAddDisk2.Value = (int)current; - } - else prgAddDisk2.Indeterminate = true; - }); - } - - void OnDiskAddFailed(string text) - { - Application.Instance.Invoke(delegate - { - if(!stopped) MessageBox.Show(text, MessageBoxType.Error); - /* TODO - Context.SelectedFile = ""; - */ - tabGeneral.Visible = true; - tabKeywords.Visible = true; - tabBarcodes.Visible = true; - tabCategories.Visible = true; - tabLanguages.Visible = true; - tabTargetOs.Visible = true; - tabArchitectures.Visible = true; - tabDiscs.Visible = true; - prgAddDisk1.Visible = false; - prgAddDisk2.Visible = false; - lblAddDisk1.Visible = false; - lblAddDisk2.Visible = false; - btnCancel.Visible = true; - btnOK.Visible = true; - btnEditDisk.Visible = true; - btnClearDisks.Visible = true; - /* TODO - Workers.Failed -= OnDiskAddFailed; - Workers.Finished -= OnDiskAddFinished; - Workers.UpdateProgress -= UpdateDiskProgress1; - Workers.UpdateProgress2 -= UpdateDiskProgress2; - Context.WorkingDisk = null; - */ - btnStopAddDisk.Visible = false; - btnAddDisk.Visible = true; - btnRemoveDisk.Visible = true; - thdDisk = null; - }); - } - - void OnDiskAddFinished() - { - Application.Instance.Invoke(delegate - { - /* TODO - if(Context.WorkingDisk == null) return; - - BlockMediaType disk = Context.WorkingDisk; - - - lstDisks.Add(new DiskEntry {path = disk.Image.Value, disk = disk}); - List files = new List {disk.Image.Value}; - if(disk.ATA?.Identify != null) files.Add(disk.ATA.Identify.Image); - if(disk.MAM != null) files.Add(disk.MAM.Image); - if(disk.PCI?.ExpansionROM != null) files.Add(disk.PCI.ExpansionROM.Image.Value); - if(disk.PCMCIA?.CIS != null) files.Add(disk.PCMCIA.CIS.Image); - if(disk.SCSI != null) - { - if(disk.SCSI.Inquiry != null) files.Add(disk.SCSI.Inquiry.Image); - if(disk.SCSI.LogSense != null) files.Add(disk.SCSI.LogSense.Image); - if(disk.SCSI.ModeSense != null) files.Add(disk.SCSI.ModeSense.Image); - if(disk.SCSI.ModeSense10 != null) files.Add(disk.SCSI.ModeSense10.Image); - if(disk.SCSI.EVPD != null) files.AddRange(disk.SCSI.EVPD.Select(evpd => evpd.Image)); - } - - if(disk.SecureDigital != null) - { - if(disk.SecureDigital.CID != null) files.Add(disk.SecureDigital.CID.Image); - if(disk.SecureDigital.CSD != null) files.Add(disk.SecureDigital.CSD.Image); - if(disk.MultiMediaCard.ExtendedCSD != null) files.Add(disk.MultiMediaCard.ExtendedCSD.Image); - } - - if(disk.TapeInformation != null) - files.AddRange(disk.TapeInformation.Select(tapePart => tapePart.Image.Value)); - if(disk.Track != null) files.AddRange(disk.Track.Select(track => track.Image.Value)); - if(disk.USB?.Descriptors != null) files.Add(disk.USB.Descriptors.Image); - - foreach(string file in files) lstFilesForMedia.Remove(file); -*/ - /* TODO - Context.SelectedFile = ""; - */ - tabGeneral.Visible = true; - tabKeywords.Visible = true; - tabBarcodes.Visible = true; - tabCategories.Visible = true; - tabLanguages.Visible = true; - tabTargetOs.Visible = true; - tabArchitectures.Visible = true; - tabDiscs.Visible = true; - prgAddDisk1.Visible = false; - prgAddDisk2.Visible = false; - lblAddDisk1.Visible = false; - lblAddDisk2.Visible = false; - btnCancel.Visible = true; - btnOK.Visible = true; - btnEditDisk.Visible = true; - btnClearDisks.Visible = true; - /* TODO - Workers.Failed -= OnDiskAddFailed; - Workers.Finished -= OnDiskAddFinished; - Workers.UpdateProgress -= UpdateDiskProgress1; - Workers.UpdateProgress2 -= UpdateDiskProgress2; - Context.WorkingDisk = null;*/ - btnStopAddDisk.Visible = false; - btnAddDisk.Visible = true; - btnRemoveDisk.Visible = true; - thdDisk = null; - }); - } - - protected void OnBtnClearDisksClicked(object sender, EventArgs e) - { - lstDisks.Clear(); - // TODO: Don't add files that are discs - FillFilesCombos(); - } - - protected void OnBtnRemoveDiskClicked(object sender, EventArgs e) - { - if(treeDisks.SelectedItem == null) return; - - lstFilesForMedia.Add(((DiskEntry)treeDisks.SelectedItem).path); - lstDisks.Remove((DiskEntry)treeDisks.SelectedItem); - } - - protected void OnBtnCancelClicked(object sender, EventArgs e) - { - modified = false; - Close(); - } - - protected void OnBtnOKClicked(object sender, EventArgs e) - { - metadata = new CICMMetadataType(); - List architectures = new List(); - List barcodes = new List(); - List disks = new List(); - List categories = new List(); - List keywords = new List(); - List languages = new List(); - List discs = new List(); - List subcategories = new List(); - List systems = new List(); - - if(!string.IsNullOrEmpty(txtAuthor.Text)) metadata.Author = txtAuthor.Text.Split(','); - if(!string.IsNullOrEmpty(txtDeveloper.Text)) metadata.Developer = txtDeveloper.Text.Split(','); - if(!string.IsNullOrEmpty(txtName.Text)) metadata.Name = txtName.Text; - if(!string.IsNullOrEmpty(txtPartNumber.Text)) metadata.PartNumber = txtPartNumber.Text; - if(!string.IsNullOrEmpty(txtPerformer.Text)) metadata.Performer = txtPerformer.Text.Split(','); - if(!string.IsNullOrEmpty(txtPublisher.Text)) metadata.Publisher = txtPublisher.Text.Split(','); - if(!string.IsNullOrEmpty(txtSerialNumber.Text)) metadata.SerialNumber = txtSerialNumber.Text; - if(!string.IsNullOrEmpty(txtVersion.Text)) metadata.Version = txtVersion.Text; - if(!chkReleaseDate.Checked.Value) - { - metadata.ReleaseDate = cldReleaseDate.Value.Value; - metadata.ReleaseDateSpecified = true; - } - - if(chkKnownReleaseType.Checked.Value) - { - metadata.ReleaseType = cmbReleaseType.SelectedValue; - metadata.ReleaseTypeSpecified = true; - } - - foreach(StringEntry entry in lstArchitectures) - architectures.Add((ArchitecturesTypeArchitecture)Enum.Parse(typeof(ArchitecturesTypeArchitecture), - entry.str)); - - foreach(BarcodeEntry entry in lstBarcodes) - { - BarcodeType barcode = new BarcodeType {type = entry.type, Value = entry.code}; - barcodes.Add(barcode); - } - - foreach(DiskEntry entry in lstDisks) disks.Add(entry.disk); - - foreach(StringEntry entry in lstCategories) categories.Add(entry.str); - - foreach(StringEntry entry in lstKeywords) keywords.Add(entry.str); - - foreach(StringEntry entry in lstLanguages) - languages.Add((LanguagesTypeLanguage)Enum.Parse(typeof(LanguagesTypeLanguage), entry.str)); - - foreach(DiscEntry entry in lstDiscs) discs.Add(entry.disc); - - foreach(StringEntry entry in lstSubcategories) subcategories.Add(entry.str); - - if(lstOses.Count > 0) - { - Dictionary> osesDict = new Dictionary>(); - foreach(TargetOsEntry entry in lstOses.OrderBy(t => t.name).ThenBy(t => t.version)) - { - osesDict.TryGetValue(entry.name, out List versList); - - if(versList == null) versList = new List(); - - if(versList.Contains(entry.version)) continue; - - versList.Add(entry.version); - versList.Sort(); - osesDict.Remove(entry.name); - osesDict.Add(entry.name, versList); - } - - metadata.RequiredOperatingSystems = osesDict - .OrderBy(t => t.Key) - .Select(entry => new RequiredOperatingSystemType - { - Name = entry.Key, - Version = entry.Value.ToArray() - }).ToArray(); - } - - if(architectures.Count > 0) metadata.Architectures = architectures.ToArray(); - if(barcodes.Count > 0) metadata.Barcodes = barcodes.ToArray(); - if(disks.Count > 0) metadata.BlockMedia = disks.ToArray(); - if(categories.Count > 0) metadata.Categories = categories.ToArray(); - if(keywords.Count > 0) metadata.Keywords = keywords.ToArray(); - if(languages.Count > 0) metadata.Languages = languages.ToArray(); - if(discs.Count > 0) metadata.OpticalDisc = discs.ToArray(); - if(subcategories.Count > 0) metadata.Subcategories = subcategories.ToArray(); - if(systems.Count > 0) metadata.Systems = systems.ToArray(); - - metadata.Magazine = magazines; - metadata.Book = books; - metadata.UserManual = usermanuals; - metadata.Advertisement = adverts; - metadata.LinearMedia = linearmedias; - metadata.PCICard = pcis; - metadata.AudioMedia = audiomedias; - - modified = true; - Close(); - } - - protected void OnBtnEditDiscClicked(object sender, EventArgs e) - { - if(treeDiscs.SelectedItem == null) return; - - dlgOpticalDisc _dlgOpticalDisc = new dlgOpticalDisc - { - Title = $"Editing disc metadata for {((DiscEntry)treeDiscs.SelectedItem).path}", - Metadata = ((DiscEntry)treeDiscs.SelectedItem).disc - }; - _dlgOpticalDisc.FillFields(); - _dlgOpticalDisc.ShowModal(this); - - if(!_dlgOpticalDisc.Modified) return; - - lstDiscs.Remove((DiscEntry)treeDiscs.SelectedItem); - lstDiscs.Add(new DiscEntry {path = _dlgOpticalDisc.Metadata.Image.Value, disc = _dlgOpticalDisc.Metadata}); - } - - protected void OnBtnEditDiskClicked(object sender, EventArgs e) - { - if(treeDisks.SelectedItem == null) return; - - dlgBlockMedia _dlgBlockMedia = new dlgBlockMedia - { - Title = $"Editing disk metadata for {((DiskEntry)treeDisks.SelectedItem).path}", - Metadata = ((DiskEntry)treeDisks.SelectedItem).disk - }; - _dlgBlockMedia.FillFields(); - _dlgBlockMedia.ShowModal(this); - - if(!_dlgBlockMedia.Modified) return; - - lstDisks.Remove((DiskEntry)treeDisks.SelectedItem); - lstDisks.Add(new DiskEntry {path = _dlgBlockMedia.Metadata.Image.Value, disk = _dlgBlockMedia.Metadata}); - } - - #region XAML UI elements - #pragma warning disable 0649 - TabPage tabGeneral; - TextBox txtDeveloper; - TextBox txtPublisher; - TextBox txtAuthor; - TextBox txtPerformer; - TextBox txtName; - TextBox txtVersion; - StackLayout stkReleaseType; - CheckBox chkKnownReleaseType; - EnumDropDown cmbReleaseType; - DateTimePicker cldReleaseDate; - CheckBox chkReleaseDate; - TextBox txtPartNumber; - TextBox txtSerialNumber; - TabPage tabKeywords; - TextBox txtNewKeyword; - GridView treeKeywords; - TabPage tabBarcodes; - TextBox txtNewBarcode; - ComboBox cmbBarcodes; - GridView treeBarcodes; - TabPage tabCategories; - TextBox txtNewCategory; - GridView treeCategories; - TextBox txtNewSubcategory; - GridView treeSubcategories; - TabPage tabLanguages; - ComboBox cmbLanguages; - GridView treeLanguages; - TabPage tabTargetOs; - TextBox txtNewOsName; - TextBox txtNewOsVersion; - GridView treeOses; - TabPage tabArchitectures; - ComboBox cmbArchitectures; - GridView treeArchitectures; - TabPage tabDiscs; - ComboBox cmbFilesForNewDisc; - Button btnAddDisc; - GridView treeDiscs; - Button btnStopAddDisc; - Button btnEditDisc; - Button btnClearDiscs; - Button btnRemoveDisc; - Label lblAddDisc1; - ProgressBar prgAddDisc1; - Label lblAddDisc2; - ProgressBar prgAddDisc2; - TabPage tabDisks; - ComboBox cmbFilesForNewDisk; - Button btnAddDisk; - GridView treeDisks; - Button btnStopAddDisk; - Button btnEditDisk; - Button btnClearDisks; - Button btnRemoveDisk; - Label lblAddDisk1; - ProgressBar prgAddDisk1; - Label lblAddDisk2; - ProgressBar prgAddDisk2; - Button btnCancel; - Button btnOK; - #pragma warning restore 0649 - #endregion XAML UI elements - } -} \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgOpticalDisc.xeto b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgOpticalDisc.xeto deleted file mode 100644 index 59de361..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgOpticalDisc.xeto +++ /dev/null @@ -1,778 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sequenced - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Known dimensions - - - - Round? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Has layers? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Known dumping - hardware - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgOpticalDisc.xeto.cs b/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgOpticalDisc.xeto.cs deleted file mode 100644 index cb4ec08..0000000 --- a/CICMMetadata/CICMMetadataEditor/CICMMetadataEditor/dlgOpticalDisc.xeto.cs +++ /dev/null @@ -1,1979 +0,0 @@ -// -// Author: -// Natalia Portillo claunia@claunia.com -// -// Copyright (c) 2017-2018, © Natalia Portillo -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the -// following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, this list of conditions and the -// following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the -// following disclaimer in the documentation and/or other materials provided with the distribution. -// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote -// products derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -using System; -using System.Collections.ObjectModel; -using System.Linq; -using Eto.Forms; -using Eto.Serialization.Xaml; -using Schemas; -using BorderType = Schemas.BorderType; - -namespace CICMMetadataEditor -{ - public class dlgOpticalDisc : Dialog - { - ChecksumType[] checksums; - DumpHardwareType dumpHwIter; - bool editingDumpHw; - bool editingPartition; - FileSystemType filesystemIter; - ObservableCollection lstADIP; - ObservableCollection lstATIP; - ObservableCollection lstBCA; - ObservableCollection lstCDText; - ObservableCollection lstCMI; - ObservableCollection lstDCB; - ObservableCollection lstDDS; - ObservableCollection lstDI; - ObservableCollection lstDMI; - ObservableCollection lstDumpHw; - ObservableCollection lstLastRMD; - ObservableCollection lstLayers; - ObservableCollection lstLeadIns; - ObservableCollection lstLeadOuts; - ObservableCollection lstMasteringSIDs; - ObservableCollection lstMediaID; - ObservableCollection lstMouldSIDs; - ObservableCollection lstMouldTexts; - ObservableCollection lstPAC; - ObservableCollection lstPFI; - ObservableCollection lstPFIR; - ObservableCollection lstPMA; - ObservableCollection lstPRI; - ObservableCollection lstRingCodes; - ObservableCollection lstSAI; - ObservableCollection lstTOC; - ObservableCollection lstToolstamps; - ObservableCollection lstTracks; - CaseType mediaCase; - public OpticalDiscType Metadata; - public bool Modified; - PartitionType partitionIter; - ScansType scans; - TrackType trackIter; - XboxType xbox; - - public dlgOpticalDisc() - { - XamlReader.Load(this); - - Modified = false; - - #region Set partitions table - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Sequence).Convert(v => v.ToString()) - }, - HeaderText = "Sequence" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.StartSector).Convert(v => v.ToString()) - }, - HeaderText = "Start" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.EndSector).Convert(v => v.ToString()) - }, - HeaderText = "End" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Type)}, - HeaderText = "Type" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Name)}, - HeaderText = "Name" - }); - treePartitions.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Description)}, - HeaderText = "Description" - }); - - treePartitions.AllowMultipleSelection = false; - #endregion Set partitions table - - #region Set filesystems table - treeFilesystems.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Type)}, - HeaderText = "Type" - }); - treeFilesystems.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.VolumeName)}, - HeaderText = "Name" - }); - - treeFilesystems.AllowMultipleSelection = false; - #endregion Set filesystems table - - #region Set dump hardware table - lstDumpHw = new ObservableCollection(); - - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = - new TextBoxCell {Binding = Binding.Property(r => r.Manufacturer)}, - HeaderText = "Manufacturer" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Model)}, - HeaderText = "Model" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Revision)}, - HeaderText = "Revision" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Firmware)}, - HeaderText = "Firmware" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Serial)}, - HeaderText = "Serial" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Software).Convert(v => v?.Name) - }, - HeaderText = "Software" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Software).Convert(v => v?.Version) - }, - HeaderText = "Version" - }); - treeDumpHardware.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Software) - .Convert(v => v?.OperatingSystem) - }, - HeaderText = "Operating system" - }); - - treeDumpHardware.DataStore = lstDumpHw; - - treeDumpHardware.AllowMultipleSelection = false; - - treeExtents.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Start).Convert(v => v.ToString()) - }, - HeaderText = "Start" - }); - treeExtents.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.End).Convert(v => v.ToString()) - }, - HeaderText = "End" - }); - #endregion Set dump hardware table - - #region Set TOC table - lstTOC = new ObservableCollection(); - treeTOC.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeTOC.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeTOC.DataStore = lstTOC; - #endregion Set TOC table - - #region Set CD-Text table - lstCDText = new ObservableCollection(); - treeCDText.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeCDText.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeCDText.DataStore = lstCDText; - #endregion Set CD-Text table - - #region Set ATIP table - lstATIP = new ObservableCollection(); - treeATIP.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeATIP.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeATIP.DataStore = lstATIP; - #endregion Set ATIP table - - #region Set PMA table - lstPMA = new ObservableCollection(); - treePMA.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treePMA.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treePMA.DataStore = lstPMA; - #endregion Set PMA table - - #region Set PFI table - lstPFI = new ObservableCollection(); - treePFI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treePFI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treePFI.DataStore = lstPFI; - #endregion Set PFI table - - #region Set DMI table - lstDMI = new ObservableCollection(); - treeDMI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeDMI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeDMI.DataStore = lstDMI; - #endregion Set DMI table - - #region Set CMI table - lstCMI = new ObservableCollection(); - treeCMI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeCMI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeCMI.DataStore = lstCMI; - #endregion Set CMI table - - #region Set BCA table - lstBCA = new ObservableCollection(); - treeBCA.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeBCA.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeBCA.DataStore = lstBCA; - #endregion Set BCA table - - #region Set DCB table - lstDCB = new ObservableCollection(); - treeDCB.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeDCB.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeDCB.DataStore = lstDCB; - #endregion Set DCB table - - #region Set PRI table - lstPRI = new ObservableCollection(); - treePRI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treePRI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treePRI.DataStore = lstPRI; - #endregion Set PRI table - - #region Set MediaID table - lstMediaID = new ObservableCollection(); - treeMediaID.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeMediaID.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeMediaID.DataStore = lstMediaID; - #endregion Set MediaID table - - #region Set PFIR table - lstPFIR = new ObservableCollection(); - treePFIR.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treePFIR.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treePFIR.DataStore = lstPFIR; - #endregion Set PFIR table - - #region Set LastRMD table - lstLastRMD = new ObservableCollection(); - treeLastRMD.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeLastRMD.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeLastRMD.DataStore = lstLastRMD; - #endregion Set LastRMD table - - #region Set ADIP table - lstADIP = new ObservableCollection(); - treeADIP.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeADIP.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeADIP.DataStore = lstADIP; - #endregion Set ADIP table - - #region Set DDS table - lstDDS = new ObservableCollection(); - treeDDS.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeDDS.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeDDS.DataStore = lstDDS; - #endregion Set DDS table - - #region Set SAI table - lstSAI = new ObservableCollection(); - treeSAI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeSAI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeSAI.DataStore = lstSAI; - #endregion Set SAI table - - #region Set DI table - lstDI = new ObservableCollection(); - treeDI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeDI.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeDI.DataStore = lstDI; - #endregion Set DI table - - #region Set PAC table - lstPAC = new ObservableCollection(); - treePAC.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treePAC.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treePAC.DataStore = lstPAC; - #endregion Set PAC table - - #region Set ring code table - lstRingCodes = new ObservableCollection(); - treeRingCodes.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.layer).Convert(v => v.ToString()) - }, - HeaderText = "Layer" - }); - treeRingCodes.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Value)}, - HeaderText = "Code" - }); - treeRingCodes.DataStore = lstRingCodes; - #endregion Set ring code table - - #region Set mastering sid table - lstMasteringSIDs = new ObservableCollection(); - treeMasteringSIDs.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.layer).Convert(v => v.ToString()) - }, - HeaderText = "Layer" - }); - treeMasteringSIDs.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Value)}, - HeaderText = "Code" - }); - treeMasteringSIDs.DataStore = lstMasteringSIDs; - #endregion Set mastering sid table - - #region Set toolstamp table - lstToolstamps = new ObservableCollection(); - treeToolstamps.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.layer).Convert(v => v.ToString()) - }, - HeaderText = "Layer" - }); - treeToolstamps.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Value)}, - HeaderText = "Code" - }); - treeToolstamps.DataStore = lstToolstamps; - #endregion Set toolstamp table - - #region Set mould sid table - lstMouldSIDs = new ObservableCollection(); - treeMouldSIDs.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.layer).Convert(v => v.ToString()) - }, - HeaderText = "Layer" - }); - treeMouldSIDs.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Value)}, - HeaderText = "Code" - }); - treeMouldSIDs.DataStore = lstMouldSIDs; - #endregion Set mould sid table - - #region Set mould text table - lstMouldTexts = new ObservableCollection(); - treeMouldTexts.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.layer).Convert(v => v.ToString()) - }, - HeaderText = "Layer" - }); - treeMouldTexts.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Value)}, - HeaderText = "Code" - }); - treeMouldTexts.DataStore = lstMouldTexts; - #endregion Set mould text table - - #region Set layer type combo box - cmbLayerType = new EnumDropDown(); - stkLayers.Items.Add(new StackLayoutItem {Control = cmbLayerType}); - #endregion Set layer type combo box - - #region Set layers table - lstLayers = new ObservableCollection(); - - treeLayers.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.layer).Convert(v => v.ToString()) - }, - HeaderText = "Layer" - }); - treeLayers.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Value).Convert(v => v.ToString()) - }, - HeaderText = "Start" - }); - - treeLayers.DataStore = lstLayers; - - treeLayers.AllowMultipleSelection = false; - #endregion Set layers table - - #region Set Lead-In table - lstLeadIns = new ObservableCollection(); - treeLeadIn.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeLeadIn.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeLeadIn.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.session).Convert(v => v.ToString()) - }, - HeaderText = "Session" - }); - treeLeadIn.DataStore = lstLeadIns; - #endregion Set Lead-In table - - #region Set Lead-Out table - lstLeadOuts = new ObservableCollection(); - treeLeadOut.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image)}, - HeaderText = "File" - }); - treeLeadOut.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeLeadOut.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.session).Convert(v => v.ToString()) - }, - HeaderText = "Session" - }); - treeLeadOut.DataStore = lstLeadOuts; - #endregion Set Lead-Out table - - #region Set tracks table - lstTracks = new ObservableCollection(); - - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Sequence.TrackNumber).Convert(v => v.ToString()) - }, - HeaderText = "Track" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Sequence.Session).Convert(v => v.ToString()) - }, - HeaderText = "Session" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image.Value)}, - HeaderText = "File" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Size).Convert(v => v.ToString()) - }, - HeaderText = "Size" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.Image.format)}, - HeaderText = "Format" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.Image.offset).Convert(v => v.ToString()) - }, - HeaderText = "Offset" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.StartMSF)}, - HeaderText = "MSF Start" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.EndMSF)}, - HeaderText = "MSF End" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.StartSector).Convert(v => v.ToString()) - }, - HeaderText = "LBA Start" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.EndSector).Convert(v => v.ToString()) - }, - HeaderText = "LBA End" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.TrackType1) - .Convert(v => v.ToString()) - }, - HeaderText = "Type" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell - { - Binding = Binding.Property(r => r.BytesPerSector).Convert(v => v.ToString()) - }, - HeaderText = "Bytes per sector" - }); - treeTracks.Columns.Add(new GridColumn - { - DataCell = new TextBoxCell {Binding = Binding.Property(r => r.AccoustID)}, - HeaderText = "Accoust ID" - }); - - treeTracks.DataStore = lstTracks; - - treeTracks.AllowMultipleSelection = false; - #endregion Set tracks table - - spExtentStart.MaxValue = double.MaxValue; - spExtentEnd.MaxValue = double.MaxValue; - - txtImage.ToolTip = "This is the disc image containing this media."; - txtFormat.ToolTip = "This is the format of the disc image."; - txtOffset.ToolTip = "Byte offset where the media dump starts in the disc image."; - txtSize.ToolTip = "Size of the disc dump."; - txtWriteOffset.ToolTip = "Write offset in bytes (can be negative)."; - txtMediaTracks.ToolTip = "How many tracks?"; - txtMediaSessions.ToolTip = "How many sessions?"; - txtCopyProtection.ToolTip = "Disc copy protection."; - txtDiscType.ToolTip = "Disc type."; - txtDiscSubtype.ToolTip = "Disc subtype."; - chkSequence.ToolTip = "If checked means this disc is one in a sequence of several."; - txtDiscTitle.ToolTip = "Title of disc."; - spSequence.ToolTip = "Number of this disc in the sequence."; - spTotalMedia.ToolTip = "How many diskc make the sequence."; - spSide.ToolTip = "On double sided discs, which side of the disc is represented by this dump."; - spLayer.ToolTip = - "On PTP layered discs, which layer of the side of the disc is represented by this dump."; - chkDimensions.ToolTip = "If checked, physical dimensions of disk are known."; - chkRound.ToolTip = "If checked, disk is physicaly round."; - spDiameter.ToolTip = "Diameter in milimeters of disk."; - spHeight.ToolTip = "Height in milimeters of disk."; - spWidth.ToolTip = "Width in milimeters of disk."; - spThickness.ToolTip = "Thickness in milimeters of disk."; - } - - public void FillFields() - { - if(Metadata == null) return; - - txtImage.Text = Metadata.Image.Value; - txtFormat.Text = Metadata.Image.format; - if(Metadata.Image.offsetSpecified) txtOffset.Text = Metadata.Image.offset.ToString(); - txtSize.Text = Metadata.Size.ToString(); - if(Metadata.Sequence != null) - { - lblDiscTitle.Visible = true; - lblDiscTitle.Visible = true; - lblSequence.Visible = true; - spSequence.Visible = true; - lblTotalMedia.Visible = true; - spTotalMedia.Visible = true; - lblSide.Visible = true; - spSide.Visible = true; - lblLayer.Visible = true; - spLayer.Visible = true; - chkSequence.Checked = true; - txtDiscTitle.Text = Metadata.Sequence.MediaTitle; - spSequence.Value = Metadata.Sequence.MediaSequence; - spTotalMedia.Value = Metadata.Sequence.TotalMedia; - if(Metadata.Sequence.SideSpecified) spSide.Value = Metadata.Sequence.Side; - if(Metadata.Sequence.LayerSpecified) spLayer.Value = Metadata.Sequence.Layer; - } - - if(Metadata.Layers != null) - { - chkLayers.Checked = true; - frmLayers.Visible = true; - - cmbLayerType.SelectedValue = Metadata.Layers.type; - lstLayers = new ObservableCollection(Metadata.Layers.Sectors); - treeLayers.DataStore = lstLayers; - } - - checksums = Metadata.Checksums; - xbox = Metadata.Xbox; - - if(Metadata.RingCode != null) - { - lstRingCodes = new ObservableCollection(Metadata.RingCode); - treeRingCodes.DataStore = lstRingCodes; - } - - if(Metadata.MasteringSID != null) - { - lstMasteringSIDs = new ObservableCollection(Metadata.MasteringSID); - treeMasteringSIDs.DataStore = lstMasteringSIDs; - } - - if(Metadata.Toolstamp != null) - { - lstToolstamps = new ObservableCollection(Metadata.Toolstamp); - treeToolstamps.DataStore = lstToolstamps; - } - - if(Metadata.MouldSID != null) - { - lstMouldSIDs = new ObservableCollection(Metadata.MouldSID); - treeMouldSIDs.DataStore = lstMouldSIDs; - } - - if(Metadata.MouldText != null) - { - lstMouldTexts = new ObservableCollection(Metadata.MouldText); - treeMouldTexts.DataStore = lstMouldTexts; - } - - if(Metadata.DiscType != null) txtDiscType.Text = Metadata.DiscType; - if(Metadata.DiscSubType != null) txtDiscSubtype.Text = Metadata.DiscSubType; - if(Metadata.OffsetSpecified) txtWriteOffset.Text = Metadata.Offset.ToString(); - txtMediaTracks.Text = Metadata.Tracks[0].ToString(); - txtMediaSessions.Text = Metadata.Sessions.ToString(); - if(Metadata.CopyProtection != null) txtCopyProtection.Text = Metadata.CopyProtection; - - if(Metadata.Dimensions != null) - { - chkDimensions.Checked = true; - if(Metadata.Dimensions.DiameterSpecified) - { - chkRound.Checked = true; - stkDiameter.Visible = true; - spDiameter.Value = Metadata.Dimensions.Diameter; - } - else - { - stkHeight.Visible = true; - spHeight.Value = Metadata.Dimensions.Height; - stkWidth.Visible = true; - spWidth.Value = Metadata.Dimensions.Width; - } - - stkThickness.Visible = true; - spThickness.Value = Metadata.Dimensions.Thickness; - } - - mediaCase = Metadata.Case; - scans = Metadata.Scans; - - if(Metadata.PFI != null) - { - frmPFI.Visible = true; - lstPFI.Add(Metadata.PFI); - } - - if(Metadata.DMI != null) - { - frmDMI.Visible = true; - lstDMI.Add(Metadata.DMI); - } - - if(Metadata.CMI != null) - { - frmCMI.Visible = true; - lstCMI.Add(Metadata.CMI); - } - - if(Metadata.BCA != null) - { - frmBCA.Visible = true; - lstBCA.Add(Metadata.BCA); - } - - if(Metadata.ATIP != null) - { - frmATIP.Visible = true; - lstATIP.Add(Metadata.ATIP); - } - - if(Metadata.ADIP != null) - { - frmADIP.Visible = true; - lstADIP.Add(Metadata.ADIP); - } - - if(Metadata.PMA != null) - { - frmPMA.Visible = true; - lstPMA.Add(Metadata.PMA); - } - - if(Metadata.DDS != null) - { - frmDDS.Visible = true; - lstDDS.Add(Metadata.DDS); - } - - if(Metadata.SAI != null) - { - frmSAI.Visible = true; - lstSAI.Add(Metadata.SAI); - } - - if(Metadata.LastRMD != null) - { - frmLastRMD.Visible = true; - lstLastRMD.Add(Metadata.LastRMD); - } - - if(Metadata.PRI != null) - { - frmPRI.Visible = true; - lstPRI.Add(Metadata.PRI); - } - - if(Metadata.MediaID != null) - { - frmMediaID.Visible = true; - lstMediaID.Add(Metadata.MediaID); - } - - if(Metadata.PFIR != null) - { - frmPFIR.Visible = true; - lstPFIR.Add(Metadata.PFIR); - } - - if(Metadata.DCB != null) - { - frmDCB.Visible = true; - lstDCB.Add(Metadata.DCB); - } - - if(Metadata.DI != null) - { - frmDI.Visible = true; - lstDI.Add(Metadata.DI); - } - - if(Metadata.PAC != null) - { - frmPAC.Visible = true; - lstPAC.Add(Metadata.PAC); - } - - if(Metadata.TOC != null) - { - frmTOC.Visible = true; - lstTOC.Add(Metadata.TOC); - } - - if(Metadata.LeadInCdText != null) - { - frmCDText.Visible = true; - lstCDText.Add(Metadata.LeadInCdText); - } - - if(Metadata.LeadIn != null) - { - frmLeadIns.Visible = true; - lstLeadIns = new ObservableCollection(Metadata.LeadIn); - treeLeadIn.DataStore = lstLeadIns; - } - - if(Metadata.LeadOut != null) - { - frmLeadOuts.Visible = true; - lstLeadOuts = new ObservableCollection(Metadata.LeadOut); - treeLeadOut.DataStore = lstLeadOuts; - } - - if(Metadata.PS3Encryption != null) - { - txtPS3Key.Text = Metadata.PS3Encryption.Key; - txtPS3Serial.Text = Metadata.PS3Encryption.Serial; - } - - lstTracks = new ObservableCollection(Metadata.Track); - treeTracks.DataStore = lstTracks; - - if(Metadata.DumpHardwareArray != null) - { - chkDumpHardware.Checked = true; - treeDumpHardware.Visible = true; - btnAddHardware.Visible = true; - btnEditHardware.Visible = true; - btnRemoveHardware.Visible = true; - - lstDumpHw = new ObservableCollection(Metadata.DumpHardwareArray); - treeDumpHardware.DataStore = lstDumpHw; - } - } - - protected void OnChkSequenceToggled(object sender, EventArgs e) - { - lblDiscTitle.Visible = chkSequence.Checked.Value; - txtDiscTitle.Visible = chkSequence.Checked.Value; - lblSequence.Visible = chkSequence.Checked.Value; - spSequence.Visible = chkSequence.Checked.Value; - lblTotalMedia.Visible = chkSequence.Checked.Value; - spTotalMedia.Visible = chkSequence.Checked.Value; - lblSide.Visible = chkSequence.Checked.Value; - spSide.Visible = chkSequence.Checked.Value; - lblLayer.Visible = chkSequence.Checked.Value; - spLayer.Visible = chkSequence.Checked.Value; - } - - protected void OnChkDimensionsToggled(object sender, EventArgs e) - { - chkRound.Visible = chkDimensions.Checked.Value; - stkThickness.Visible = chkDimensions.Checked.Value; - if(chkDimensions.Checked.Value) OnChkRoundToggled(sender, e); - else - { - stkDiameter.Visible = false; - stkHeight.Visible = false; - stkWidth.Visible = false; - } - } - - void OnChkRoundToggled(object sender, EventArgs e) - { - stkDiameter.Visible = chkRound.Checked.Value; - stkHeight.Visible = !chkRound.Checked.Value; - stkWidth.Visible = !chkRound.Checked.Value; - } - - protected void OnChkLayersToggled(object sender, EventArgs e) - { - frmLayers.Visible = chkLayers.Checked.Value; - } - - static void ErrorMessageBox(string text) - { - MessageBox.Show(text, MessageBoxType.Error); - } - - protected void OnBtnAddLayerClicked(object sender, EventArgs e) - { - if(string.IsNullOrWhiteSpace(txtLayerSize.Text)) ErrorMessageBox("Layer size must not be empty"); - - if(!long.TryParse(txtLayerSize.Text, out long ltmp)) ErrorMessageBox("Layer size must be a number"); - - if(ltmp < 0) ErrorMessageBox("Layer size must be a positive"); - - if(ltmp == 0) ErrorMessageBox("Layer size must be bigger than 0"); - - lstLayers.Add(new SectorsType - { - layer = (byte)spNewLayer.Value, - layerSpecified = true, - Value = ulong.Parse(txtLayerSize.Text) - }); - } - - protected void OnBtnRemoveLayerClicked(object sender, EventArgs e) - { - if(treeLayers.SelectedItem != null) lstLayers.Remove((SectorsType)treeLayers.SelectedItem); - } - - protected void OnBtnRemovePartitionClicked(object sender, EventArgs e) - { - if(treePartitions.SelectedItem != null) - ((ObservableCollection)treePartitions.DataStore).Remove((PartitionType)treePartitions - .SelectedItem); - } - - protected void OnBtnEditPartitionClicked(object sender, EventArgs e) - { - if(treePartitions.SelectedItem == null) return; - - partitionIter = (PartitionType)treePartitions.SelectedItem; - - spPartitionSequence.Value = partitionIter.Sequence; - txtPartitionStart.Text = partitionIter.StartSector.ToString(); - txtPartitionEnd.Text = partitionIter.EndSector.ToString(); - txtPartitionType.Text = partitionIter.Type; - txtPartitionName.Text = partitionIter.Name; - txtPartitionDescription.Text = partitionIter.Description; - treeFilesystems.DataStore = partitionIter.FileSystems != null - ? new ObservableCollection(partitionIter.FileSystems) - : new ObservableCollection(); - btnCancelPartition.Visible = true; - btnApplyPartition.Visible = true; - btnRemovePartition.Visible = false; - btnEditPartition.Visible = false; - btnAddPartition.Visible = false; - stkPartitionFields1.Visible = true; - stkPartitionFields2.Visible = true; - frmFilesystems.Visible = true; - - editingPartition = true; - } - - protected void OnBtnApplyPartitionClicked(object sender, EventArgs e) - { - if(!int.TryParse(txtPartitionStart.Text, out int temp)) - { - ErrorMessageBox("Partition start must be a number"); - return; - } - - if(!int.TryParse(txtPartitionEnd.Text, out int temp2)) - { - ErrorMessageBox("Partition end must be a number"); - return; - } - - if(temp2 <= temp) - { - ErrorMessageBox("Partition must end after start, and be bigger than 1 sector"); - return; - } - - if(editingPartition) ((ObservableCollection)treePartitions.DataStore).Remove(partitionIter); - partitionIter = new PartitionType - { - Sequence = (uint)spPartitionSequence.Value, - StartSector = ulong.Parse(txtPartitionStart.Text), - EndSector = ulong.Parse(txtPartitionEnd.Text), - Type = txtPartitionType.Text, - Name = txtPartitionName.Text, - Description = txtPartitionDescription.Text - }; - if(((ObservableCollection)treeFilesystems.DataStore).Count > 0) - partitionIter.FileSystems = ((ObservableCollection)treeFilesystems.DataStore).ToArray(); - - ((ObservableCollection)treePartitions.DataStore).Add(partitionIter); - btnCancelPartition.Visible = false; - btnApplyPartition.Visible = false; - btnRemovePartition.Visible = true; - btnEditPartition.Visible = true; - btnAddPartition.Visible = true; - stkPartitionFields1.Visible = false; - stkPartitionFields2.Visible = false; - frmFilesystems.Visible = false; - } - - protected void OnBtnAddPartitionClicked(object sender, EventArgs e) - { - spPartitionSequence.Value = 0; - txtPartitionStart.Text = ""; - txtPartitionEnd.Text = ""; - txtPartitionType.Text = ""; - txtPartitionName.Text = ""; - txtPartitionDescription.Text = ""; - treeFilesystems.DataStore = new ObservableCollection(); - - btnCancelPartition.Visible = true; - btnApplyPartition.Visible = true; - btnRemovePartition.Visible = false; - btnEditPartition.Visible = false; - btnAddPartition.Visible = false; - stkPartitionFields1.Visible = true; - stkPartitionFields2.Visible = true; - frmFilesystems.Visible = true; - - editingPartition = false; - } - - protected void OnBtnRemoveFilesystemClicked(object sender, EventArgs e) - { - if(treeFilesystems.SelectedItem != null) - ((ObservableCollection)treeFilesystems.DataStore).Remove((FileSystemType)treeFilesystems - .SelectedItem); - } - - protected void OnBtnEditFilesystemClicked(object sender, EventArgs e) - { - /* - if(treeFilesystems.SelectedItem == null) return; - - filesystemIter = (FileSystemType)treeFilesystems.SelectedItem; - - dlgFilesystem _dlgFilesystem = new dlgFilesystem {Metadata = filesystemIter}; - _dlgFilesystem.FillFields(); - _dlgFilesystem.ShowModal(this); - - if(!_dlgFilesystem.Modified) return; - - ((ObservableCollection)treeFilesystems.DataStore).Remove(filesystemIter); - ((ObservableCollection)treeFilesystems.DataStore).Add(_dlgFilesystem.Metadata);*/ - } - - protected void OnBtnAddFilesystemClicked(object sender, EventArgs e) - { - /* - dlgFilesystem _dlgFilesystem = new dlgFilesystem(); - _dlgFilesystem.ShowModal(this); - - if(_dlgFilesystem.Modified) - ((ObservableCollection)treeFilesystems.DataStore).Add(_dlgFilesystem.Metadata);*/ - } - - protected void OnBtnCancelTrackClicked(object sender, EventArgs e) - { - btnEditTrack.Visible = true; - btnApplyTrack.Visible = false; - btnCancelTrack.Visible = false; - - frmPartitions.Visible = false; - stkTrackFields1.Visible = false; - stkTrackFields2.Visible = false; - stkTrackFields3.Visible = false; - } - - protected void OnBtnApplyTrackClicked(object sender, EventArgs e) - { - string file = trackIter.Image.Value; - ulong filesize = trackIter.Size; - string fileformat = trackIter.Image.format; - ulong fileoffset = trackIter.Image.offset; - ChecksumType[] checksums = trackIter.Checksums; - SubChannelType subchannel = trackIter.SubChannel; - TrackTypeTrackType trackType = - (TrackTypeTrackType)Enum.Parse(typeof(TrackTypeTrackType), cmbTrackType.Text); - - lstTracks.Remove(trackIter); - - trackIter = new TrackType - { - AccoustID = txtAcoustID.Text, - BytesPerSector = uint.Parse(txtBytesPerSector.Text), - Checksums = checksums, - EndMSF = txtMSFEnd.Text, - EndSector = ulong.Parse(txtTrackEnd.Text), - Image = - new ImageType {format = fileformat, offset = fileoffset, offsetSpecified = true, Value = file}, - Sequence = - new TrackSequenceType - { - Session = uint.Parse(txtSessionSequence.Text), - TrackNumber = uint.Parse(txtTrackSequence.Text) - }, - Size = filesize, - StartMSF = txtMSFStart.Text, - StartSector = ulong.Parse(txtTrackStart.Text), - SubChannel = subchannel, - TrackType1 = trackType - }; - if(((ObservableCollection)treePartitions.DataStore).Count > 0) - trackIter.FileSystemInformation = - ((ObservableCollection)treePartitions.DataStore).ToArray(); - lstTracks.Add(trackIter); - - btnEditTrack.Visible = true; - btnApplyTrack.Visible = false; - btnCancelTrack.Visible = false; - frmPartitions.Visible = false; - stkTrackFields1.Visible = false; - stkTrackFields2.Visible = false; - stkTrackFields3.Visible = false; - } - - protected void OnBtnEditTrackClicked(object sender, EventArgs e) - { - if(treeTracks.SelectedItem == null) return; - - trackIter = (TrackType)treeTracks.SelectedItem; - - txtTrackSequence.Text = trackIter.Sequence.TrackNumber.ToString(); - txtSessionSequence.Text = trackIter.Sequence.Session.ToString(); - txtMSFStart.Text = trackIter.StartMSF; - txtMSFEnd.Text = trackIter.EndMSF; - txtTrackStart.Text = trackIter.StartSector.ToString(); - txtTrackEnd.Text = trackIter.EndSector.ToString(); - cmbTrackType.Text = trackIter.TrackType1.ToString(); - txtBytesPerSector.Text = trackIter.BytesPerSector.ToString(); - txtAcoustID.Text = trackIter.AccoustID; - treePartitions.DataStore = new ObservableCollection(trackIter.FileSystemInformation); - - btnEditTrack.Visible = false; - btnApplyTrack.Visible = true; - btnCancelTrack.Visible = true; - frmPartitions.Visible = true; - stkTrackFields1.Visible = true; - stkTrackFields2.Visible = true; - stkTrackFields3.Visible = true; - } - - protected void OnChkDumpHardwareToggled(object sender, EventArgs e) - { - treeDumpHardware.Visible = chkDumpHardware.Checked.Value; - btnAddHardware.Visible = chkDumpHardware.Checked.Value; - btnRemoveHardware.Visible = chkDumpHardware.Checked.Value; - btnEditHardware.Visible = chkDumpHardware.Checked.Value; - - btnCancelHardware.Visible = false; - btnApplyHardware.Visible = false; - frmHardware.Visible = false; - } - - protected void OnBtnCancelHardwareClicked(object sender, EventArgs e) - { - btnAddHardware.Visible = true; - btnRemoveHardware.Visible = true; - btnCancelHardware.Visible = false; - btnEditHardware.Visible = true; - btnApplyHardware.Visible = false; - frmHardware.Visible = false; - } - - protected void OnBtnRemoveHardwareClicked(object sender, EventArgs e) - { - if(treeDumpHardware.SelectedItem != null) lstDumpHw.Remove((DumpHardwareType)treeDumpHardware.SelectedItem); - } - - protected void OnBtnApplyHardwareClicked(object sender, EventArgs e) - { - if(editingDumpHw) lstDumpHw.Remove(dumpHwIter); - - dumpHwIter = new DumpHardwareType - { - Manufacturer = txtHWManufacturer.Text, - Model = txtHWModel.Text, - Revision = txtHWRevision.Text, - Firmware = txtHWFirmware.Text, - Serial = txtHWSerial.Text - }; - if(!string.IsNullOrWhiteSpace(txtDumpName.Text) || !string.IsNullOrWhiteSpace(txtDumpVersion.Text) || - !string.IsNullOrWhiteSpace(txtDumpOS.Text)) - dumpHwIter.Software = new SoftwareType - { - Name = txtDumpName.Text, - Version = txtDumpVersion.Text, - OperatingSystem = txtDumpOS.Text - }; - if(((ObservableCollection)treeExtents.DataStore).Count > 0) - dumpHwIter.Extents = ((ObservableCollection)treeExtents.DataStore).ToArray(); - - lstDumpHw.Add(dumpHwIter); - - btnAddHardware.Visible = true; - btnRemoveHardware.Visible = true; - btnCancelHardware.Visible = false; - btnEditHardware.Visible = true; - btnApplyHardware.Visible = false; - frmHardware.Visible = false; - } - - protected void OnBtnAddHardwareClicked(object sender, EventArgs e) - { - txtHWManufacturer.Text = ""; - txtHWModel.Text = ""; - txtHWRevision.Text = ""; - txtHWFirmware.Text = ""; - txtHWSerial.Text = ""; - txtDumpName.Text = ""; - txtDumpVersion.Text = ""; - txtDumpOS.Text = ""; - treeExtents.DataStore = new ObservableCollection(); - - btnAddHardware.Visible = false; - btnRemoveHardware.Visible = false; - btnCancelHardware.Visible = true; - btnEditHardware.Visible = false; - btnApplyHardware.Visible = true; - frmHardware.Visible = true; - - editingDumpHw = false; - } - - protected void OnBtnRemoveExtentClicked(object sender, EventArgs e) - { - if(treeExtents.SelectedItem != null) - ((ObservableCollection)treeExtents.DataStore).Remove((ExtentType)treeExtents.SelectedItem); - } - - protected void OnBtnEditHardwareClicked(object sender, EventArgs e) - { - if(treeDumpHardware.SelectedItem == null) return; - - dumpHwIter = (DumpHardwareType)treeDumpHardware.SelectedItem; - - txtHWManufacturer.Text = dumpHwIter.Manufacturer; - txtHWModel.Text = dumpHwIter.Model; - txtHWRevision.Text = dumpHwIter.Revision; - txtHWFirmware.Text = dumpHwIter.Firmware; - txtHWSerial.Text = dumpHwIter.Serial; - if(dumpHwIter.Software != null) - { - txtDumpName.Text = dumpHwIter.Software.Name; - txtDumpVersion.Text = dumpHwIter.Software.Version; - txtDumpOS.Text = dumpHwIter.Software.OperatingSystem; - } - - treeExtents.DataStore = new ObservableCollection(dumpHwIter.Extents); - - btnAddHardware.Visible = false; - btnRemoveHardware.Visible = false; - btnCancelHardware.Visible = true; - btnEditHardware.Visible = false; - btnApplyHardware.Visible = true; - frmHardware.Visible = true; - - editingDumpHw = true; - } - - protected void OnBtnAddExtentClicked(object sender, EventArgs e) - { - ((ObservableCollection)treeExtents.DataStore).Add(new ExtentType - { - Start = (ulong)spExtentStart.Value, - End = (ulong)spExtentEnd.Value - }); - } - - protected void OnBtnAddRingCodeClicked(object sender, EventArgs e) - { - lstRingCodes.Add(new LayeredTextType - { - layer = (uint)spRingCodeLayer.Value, - layerSpecified = true, - Value = txtRingCode.Text - }); - } - - protected void OnBtnRemoveRingCodeClicked(object sender, EventArgs e) - { - if(treeRingCodes.SelectedItem != null) lstRingCodes.Remove((LayeredTextType)treeRingCodes.SelectedItem); - } - - protected void OnBtnAddMasteringSIDClicked(object sender, EventArgs e) - { - lstMasteringSIDs.Add(new LayeredTextType - { - layer = (uint)spMasteringSIDLayer.Value, - layerSpecified = true, - Value = txtMasteringSID.Text - }); - } - - protected void OnBtnRemoveMasteringSIDClicked(object sender, EventArgs e) - { - if(treeMasteringSIDs.SelectedItem != null) - lstMasteringSIDs.Remove((LayeredTextType)treeMasteringSIDs.SelectedItem); - } - - protected void OnBtnAddToolstampClicked(object sender, EventArgs e) - { - lstToolstamps.Add(new LayeredTextType - { - layer = (uint)spToolstampLayer.Value, - layerSpecified = true, - Value = txtToolstamp.Text - }); - } - - protected void OnBtnRemoveToolstampClicked(object sender, EventArgs e) - { - if(treeToolstamps.SelectedItem != null) lstToolstamps.Remove((LayeredTextType)treeToolstamps.SelectedItem); - } - - protected void OnBtnAddMouldSIDClicked(object sender, EventArgs e) - { - lstMouldSIDs.Add(new LayeredTextType - { - layer = (uint)spMouldSIDLayer.Value, - layerSpecified = true, - Value = txtMouldSID.Text - }); - } - - protected void OnBtnRemoveMouldSIDClicked(object sender, EventArgs e) - { - if(treeMouldSIDs.SelectedItem != null) lstMouldSIDs.Remove((LayeredTextType)treeMouldSIDs.SelectedItem); - } - - protected void OnBtnAddMouldTextClicked(object sender, EventArgs e) - { - lstMouldTexts.Add(new LayeredTextType - { - layer = (uint)spMouldTextLayer.Value, - layerSpecified = true, - Value = txtMouldText.Text - }); - } - - protected void OnBtnRemoveMouldTextClicked(object sender, EventArgs e) - { - if(treeMouldTexts.SelectedItem != null) lstMouldTexts.Remove((LayeredTextType)treeMouldTexts.SelectedItem); - } - - protected void OnBtnSaveClicked(object sender, EventArgs e) - { - #region Sanity checks - if(string.IsNullOrEmpty(txtFormat.Text)) - { - ErrorMessageBox("Image format cannot be null"); - return; - } - - if(chkSequence.Checked.Value) - { - if(spSequence.Value < 1) - { - ErrorMessageBox("Media sequence must be bigger than 0"); - return; - } - - if(spTotalMedia.Value < 1) - { - ErrorMessageBox("Total medias must be bigger than 0"); - return; - } - - if(spSequence.Value > spTotalMedia.Value) - { - ErrorMessageBox("Media sequence cannot be bigger than total medias"); - return; - } - } - - if(!string.IsNullOrEmpty(txtWriteOffset.Text) && !long.TryParse(txtWriteOffset.Text, out long ltmp)) - { - ErrorMessageBox("Write offset must be a number"); - return; - } - - if(string.IsNullOrEmpty(txtMediaTracks.Text) || !long.TryParse(txtMediaTracks.Text, out ltmp)) - { - ErrorMessageBox("Tracks must be a number"); - return; - } - - if(ltmp < 1) - { - ErrorMessageBox("Tracks must be bigger than 0"); - return; - } - - if(string.IsNullOrEmpty(txtMediaSessions.Text) || !long.TryParse(txtMediaSessions.Text, out ltmp)) - { - ErrorMessageBox("Sessions must be a number"); - return; - } - - if(ltmp < 1) - { - ErrorMessageBox("Sessions must be bigger than 0"); - return; - } - - if(chkDimensions.Checked.Value) - { - if(chkRound.Checked.Value) - { - if(spDiameter.Value <= 0) - { - ErrorMessageBox("Diameter must be bigger than 0"); - return; - } - } - else - { - if(spHeight.Value <= 0) - { - ErrorMessageBox("Height must be bigger than 0"); - return; - } - - if(spWidth.Value <= 0) - { - ErrorMessageBox("Width must be bigger than 0"); - return; - } - } - - if(spThickness.Value <= 0) - { - ErrorMessageBox("Thickness must be bigger than 0"); - return; - } - } - - if(chkDumpHardware.Checked.Value) - if(lstDumpHw.Count < 1) - { - ErrorMessageBox("If dump hardware is known at least an entry must be created"); - return; - } - #endregion Sanity checks - - Metadata = new OpticalDiscType {Image = new ImageType {Value = txtImage.Text, format = txtFormat.Text}}; - - if(!string.IsNullOrWhiteSpace(txtOffset.Text) && long.TryParse(txtOffset.Text, out ltmp)) - { - Metadata.Image.offsetSpecified = true; - Metadata.Image.offset = ulong.Parse(txtOffset.Text); - } - - Metadata.Size = ulong.Parse(txtSize.Text); - - if(chkSequence.Checked.Value) - { - Metadata.Sequence = new SequenceType - { - MediaTitle = txtDiscTitle.Text, - MediaSequence = (uint)spSequence.Value, - TotalMedia = (uint)spTotalMedia.Value - }; - if(spSide.Value > 0) - { - Metadata.Sequence.SideSpecified = true; - Metadata.Sequence.Side = (byte)spSide.Value; - } - - if(spLayer.Value > 0) - { - Metadata.Sequence.LayerSpecified = true; - Metadata.Sequence.Layer = (byte)spLayer.Value; - } - } - - if(lstLayers.Count > 0) - Metadata.Layers = new LayersType - { - type = cmbLayerType.SelectedValue, - typeSpecified = true, - Sectors = lstLayers.ToArray() - }; - - Metadata.Checksums = checksums; - Metadata.Xbox = xbox; - - if(lstRingCodes.Count > 0) Metadata.RingCode = lstRingCodes.ToArray(); - - if(lstMasteringSIDs.Count > 0) Metadata.MasteringSID = lstMasteringSIDs.ToArray(); - - if(lstToolstamps.Count > 0) Metadata.Toolstamp = lstToolstamps.ToArray(); - - if(lstMouldSIDs.Count > 0) Metadata.MouldSID = lstMouldSIDs.ToArray(); - - if(lstMouldTexts.Count > 0) Metadata.MouldText = lstMouldTexts.ToArray(); - - if(!string.IsNullOrWhiteSpace(txtDiscType.Text)) Metadata.DiscType = txtDiscType.Text; - if(!string.IsNullOrWhiteSpace(txtDiscSubtype.Text)) Metadata.DiscSubType = txtDiscSubtype.Text; - if(!string.IsNullOrWhiteSpace(txtWriteOffset.Text)) - { - Metadata.Offset = int.Parse(txtWriteOffset.Text); - Metadata.OffsetSpecified = true; - } - - Metadata.Tracks = !string.IsNullOrWhiteSpace(txtMediaTracks.Text) - ? new[] {uint.Parse(txtMediaTracks.Text)} - : new[] {(uint)1}; - - Metadata.Sessions = - !string.IsNullOrWhiteSpace(txtMediaSessions.Text) ? uint.Parse(txtMediaSessions.Text) : 1; - - if(!string.IsNullOrWhiteSpace(txtCopyProtection.Text)) Metadata.CopyProtection = txtCopyProtection.Text; - - if(chkDimensions.Checked.Value) - { - Metadata.Dimensions = new DimensionsType(); - if(chkRound.Checked.Value) - { - Metadata.Dimensions.DiameterSpecified = true; - Metadata.Dimensions.Diameter = spDiameter.Value; - } - else - { - Metadata.Dimensions.HeightSpecified = true; - Metadata.Dimensions.WidthSpecified = true; - Metadata.Dimensions.Height = spHeight.Value; - Metadata.Dimensions.Width = spWidth.Value; - } - - Metadata.Dimensions.Thickness = spThickness.Value; - } - - Metadata.Case = mediaCase; - Metadata.Scans = scans; - - if(lstPFI.Count == 1) Metadata.PFI = lstPFI[0]; - if(lstDMI.Count == 1) Metadata.DMI = lstDMI[0]; - if(lstCMI.Count == 1) Metadata.CMI = lstCMI[0]; - if(lstBCA.Count == 1) Metadata.BCA = lstBCA[0]; - if(lstATIP.Count == 1) Metadata.ATIP = lstATIP[0]; - if(lstADIP.Count == 1) Metadata.ADIP = lstADIP[0]; - if(lstPMA.Count == 1) Metadata.PMA = lstPMA[0]; - if(lstDDS.Count == 1) Metadata.DDS = lstDDS[0]; - if(lstSAI.Count == 1) Metadata.SAI = lstSAI[0]; - if(lstLastRMD.Count == 1) Metadata.LastRMD = lstLastRMD[0]; - if(lstPRI.Count == 1) Metadata.PRI = lstPRI[0]; - if(lstMediaID.Count == 1) Metadata.MediaID = lstMediaID[0]; - if(lstPFIR.Count == 1) Metadata.PFIR = lstPFIR[0]; - if(lstDCB.Count == 1) Metadata.DCB = lstDCB[0]; - if(lstDI.Count == 1) Metadata.DI = lstDI[0]; - if(lstPAC.Count == 1) Metadata.PAC = lstPAC[0]; - if(lstTOC.Count == 1) Metadata.TOC = lstTOC[0]; - if(lstCDText.Count == 1) Metadata.LeadInCdText = lstCDText[0]; - - if(lstLeadIns.Count == 1) Metadata.LeadIn = lstLeadIns.ToArray(); - if(lstLeadOuts.Count == 1) Metadata.LeadOut = lstLeadOuts.ToArray(); - - if(!string.IsNullOrWhiteSpace(txtPS3Key.Text) && !string.IsNullOrWhiteSpace(txtPS3Serial.Text)) - Metadata.PS3Encryption = new PS3EncryptionType {Key = txtPS3Key.Text, Serial = txtPS3Serial.Text}; - - Metadata.Track = lstTracks.ToArray(); - - if(chkDumpHardware.Checked.Value && lstDumpHw.Count >= 1) Metadata.DumpHardwareArray = lstDumpHw.ToArray(); - - Modified = true; - Close(); - } - - protected void OnBtnCancelClicked(object sender, EventArgs e) - { - Close(); - } - - protected void OnBtnCancelPartitionClicked(object sender, EventArgs e) - { - btnCancelPartition.Visible = false; - btnApplyPartition.Visible = false; - btnRemovePartition.Visible = true; - btnEditPartition.Visible = true; - btnAddPartition.Visible = true; - stkPartitionFields1.Visible = false; - stkPartitionFields2.Visible = false; - frmFilesystems.Visible = false; - } - - #region XAML UI elements - #pragma warning disable 0649 - TextBox txtImage; - TextBox txtFormat; - TextBox txtOffset; - TextBox txtSize; - TextBox txtWriteOffset; - TextBox txtMediaTracks; - TextBox txtMediaSessions; - TextBox txtCopyProtection; - TextBox txtDiscType; - TextBox txtDiscSubtype; - CheckBox chkSequence; - Label lblDiscTitle; - TextBox txtDiscTitle; - Label lblSequence; - NumericUpDown spSequence; - Label lblTotalMedia; - NumericUpDown spTotalMedia; - Label lblSide; - NumericUpDown spSide; - Label lblLayer; - NumericUpDown spLayer; - CheckBox chkDimensions; - CheckBox chkRound; - StackLayout stkDiameter; - NumericUpDown spDiameter; - StackLayout stkHeight; - NumericUpDown spHeight; - StackLayout stkWidth; - NumericUpDown spWidth; - StackLayout stkThickness; - NumericUpDown spThickness; - CheckBox chkLayers; - StackLayout stkLayers; - EnumDropDown cmbLayerType; - GridView treeLayers; - NumericUpDown spNewLayer; - TextBox txtLayerSize; - GridView treeRingCodes; - NumericUpDown spRingCodeLayer; - TextBox txtRingCode; - GridView treeMasteringSIDs; - NumericUpDown spMasteringSIDLayer; - TextBox txtMasteringSID; - GridView treeToolstamps; - NumericUpDown spToolstampLayer; - TextBox txtToolstamp; - GridView treeMouldSIDs; - NumericUpDown spMouldSIDLayer; - TextBox txtMouldSID; - GridView treeMouldTexts; - NumericUpDown spMouldTextLayer; - TextBox txtMouldText; - GroupBox frmTOC; - GridView treeTOC; - GroupBox frmCDText; - GridView treeCDText; - GroupBox frmATIP; - GridView treeATIP; - GroupBox frmPMA; - GridView treePMA; - GroupBox frmLeadIns; - GridView treeLeadIn; - GroupBox frmLeadOuts; - GridView treeLeadOut; - GroupBox frmPFI; - GridView treePFI; - GroupBox frmDMI; - GridView treeDMI; - GroupBox frmCMI; - GridView treeCMI; - GroupBox frmBCA; - GridView treeBCA; - GroupBox frmDCB; - GridView treeDCB; - GroupBox frmPRI; - GridView treePRI; - GroupBox frmMediaID; - GridView treeMediaID; - GroupBox frmPFIR; - GridView treePFIR; - GroupBox frmLastRMD; - GridView treeLastRMD; - GroupBox frmADIP; - GridView treeADIP; - GroupBox frmDDS; - GridView treeDDS; - GroupBox frmSAI; - GridView treeSAI; - GroupBox frmDI; - GridView treeDI; - GroupBox frmPAC; - GridView treePAC; - TextBox txtPS3Key; - TextBox txtPS3Serial; - GridView treeTracks; - TextBox txtTrackStart; - TextBox txtTrackEnd; - TextBox txtMSFStart; - TextBox txtMSFEnd; - TextBox txtTrackSequence; - TextBox txtSessionSequence; - ComboBox cmbTrackType; - TextBox txtBytesPerSector; - TextBox txtAcoustID; - GridView treePartitions; - Button btnCancelPartition; - Button btnRemovePartition; - Button btnEditPartition; - Button btnApplyPartition; - Button btnAddPartition; - NumericUpDown spPartitionSequence; - TextBox txtPartitionStart; - TextBox txtPartitionEnd; - TextBox txtPartitionType; - StackLayout stkPartitionFields1; - StackLayout stkPartitionFields2; - TextBox txtPartitionName; - TextBox txtPartitionDescription; - GroupBox frmFilesystems; - GridView treeFilesystems; - Button btnCancelTrack; - Button btnApplyTrack; - Button btnEditTrack; - CheckBox chkDumpHardware; - GridView treeDumpHardware; - Button btnCancelHardware; - Button btnRemoveHardware; - Button btnEditHardware; - Button btnApplyHardware; - Button btnAddHardware; - GroupBox frmHardware; - TextBox txtHWManufacturer; - TextBox txtHWModel; - TextBox txtHWRevision; - TextBox txtHWFirmware; - TextBox txtHWSerial; - GridView treeExtents; - NumericUpDown spExtentStart; - NumericUpDown spExtentEnd; - TextBox txtDumpName; - TextBox txtDumpVersion; - TextBox txtDumpOS; - GroupBox frmLayers; - GroupBox frmPartitions; - StackLayout stkTrackFields1; - StackLayout stkTrackFields2; - StackLayout stkTrackFields3; - #pragma warning restore 0649 - #endregion XAML UI elements - } -} \ No newline at end of file diff --git a/CICMMetadata/CICMMetadataEditor/LICENSE b/CICMMetadata/CICMMetadataEditor/LICENSE deleted file mode 100644 index c702685..0000000 --- a/CICMMetadata/CICMMetadataEditor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2017-2018, © Natalia Portillo - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the -following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the - following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote - products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/CICMMetadata/README.md b/CICMMetadata/README.md deleted file mode 100644 index 5db4819..0000000 --- a/CICMMetadata/README.md +++ /dev/null @@ -1,23 +0,0 @@ -Canary Islands Computer Museum -============================== -Digital Asset Metadata Sidecar -============================== - -This repository contains a XML Schema defining a digital asset metadata sidecar. -The idea of this sidecar is to accompany any kind of digital asset that may be archived in a computer museum. - -Also the repository contains autogenerated C#, VisualBasic.NET and Java code. - -The sidecar schema is under public domain as long as any change you made is compatible and upstreamed, -or you change the root element type from CICMMetadata to anything else. -Besides that, you can use it anywhere. - -If you want to give due credit, this schema is created by Natalia Portillo. - -The schema is set-oriented, that is, each sidecar file should accompany a single set, that can contain one or -more of the following elements (or newer ones): -* Magazines -* Books -* User manuals, user guides, installation guides, instruction manuals -* Optical discs (CD and successors) -* Advertisements \ No newline at end of file diff --git a/CICMMetadata/build.sh b/CICMMetadata/build.sh deleted file mode 100755 index bd32004..0000000 --- a/CICMMetadata/build.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -xsd=`which xsd` -xjc=`which xjc` -if [ -x "$xsd" ] -then - mkdir -p dotnet - echo Building C# code... - xsd cicm.xsd /classes /language:CS > /dev/null - if [ -e "cicm.cs" ] - then - mv cicm.cs dotnet/ - fi - echo Building VB.NET code... - xsd cicm.xsd /classes /language:VB > /dev/null - if [ -e "cicm.vb" ] - then - mv cicm.vb dotnet/ - fi -fi - -if [ -x "$xjc" ] -then - mkdir -p java - echo Building Java code... - xjc -d java cicm.xsd > /dev/null -fi \ No newline at end of file diff --git a/CICMMetadata/cicm.xml b/CICMMetadata/cicm.xml deleted file mode 100644 index 0f110be..0000000 --- a/CICMMetadata/cicm.xml +++ /dev/null @@ -1,1773 +0,0 @@ - - - string - - string - - string - - string - string - - string - - Donationware - - 2007-10-26 - - - - string - - - string - - string - - - - string - - - - - - - string - - - - string - - - string - - dmVycmFudHF1ZQ== - - string - - string - - 2008-11-15 - - 7 - - - - ypk - - - 7 - - string - - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - arw - - - - - - - - - string - - - - string - - - string - - ZmVyYW50 - - string - - string - string - - 2016-01-01 - - - - kru - - - 7 - - string - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - pon - - - - - - - - string - - - - - string - - - - - dgr - - - - - string - - - - - renesasrx - - - - - - string - - string - - - - - - - - cau - - 7 - - string - - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - mao - - - - - - - string - 11 - - - string - 7 - 7 - - 2 - - 1 - - - - - 11 - - - - string - - - string - - string - - string - - string - - string - - string - - string - string - string - - 3 - - 7 - 7 - - string - - - 1.051732E7 - - 1.051732E7 - - 1.051732E7 - 1.051732E7 - - - - compacplus - - - - frontfull - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - geo - - - - - - - right - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - sme - - - - - - - - - - - boxback - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - afr - - - - - - - down - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - jpr - - - - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - - string - 11 - - - string - - - - string - 11 - - - string - - - - - 7 - 7 - - string - 11 - - - string - - - - - - - string - string - - - string - - - string - 11 - - 7 - 7 - - - string - - string - 11 - 11 - - - - 3 - - - - true - true - true - false - - - string - dvd - 7 - - string - - - string - - - - string - 11 - - - string - - - - - - - 7 - - string - - string - 11 - 11 - - string - - - - string - - 2007-09-09T03:38:42 - - 2001-07-25T22:15:31 - - 2002-05-25T15:08:08 - 7 - 11 - - 11 - false - - string - - string - - 11 - false - - 2019-05-04T04:54:29 - - 2010-04-24T16:59:19+01:00 - - string - - string - - string - - string - - string - - - - - - - string - - - - - - - string - - - - - - - - - - - string - - - - - - - string - - - - - - - - - - - - - - - - - - string - string - string - string - string - - - - 11 - 11 - - - - string - string - string - - - - - - - string - string - string - 11 - - 11 - 1.051732E7 - - 1.5E2 - - - string - - - - - - - eng - - - - - - - - sit - - - - - - - - yid - - - - - - string - - string - PAL-K - 2015-12-11T05:11:19 - - - string - string - string - - - - 1.051732E7 - 1.051732E7 - - - - - - string - 11 - - - string - - - - - string - - - string - - string - string - - 7 - - 7 - - 7 - - string - - string - string - - string - - - - 1.051732E7 - - 1.051732E7 - - 1.051732E7 - 1.051732E7 - - - - - - boxspine - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - nso - - - - - - - back - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - ale - - - - - - - - - - string - string - string - string - string - - - - 11 - 11 - - - - string - string - string - - - - - - - string - 11 - - - string - - - - string - - 5 - - 5 - - string - - string - - string - - - string - - - - 5 - 5 - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - - - string - - string - string - - 7 - - 7 - - 7 - - string - - string - string - - string - - - - 1.051732E7 - - 1.051732E7 - - 1.051732E7 - 1.051732E7 - - - - - - frontfull - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - srp - - - - - - - right - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - lub - - - - - - - - - - string - string - string - string - string - - - - 11 - 11 - - - - string - string - string - - - - - - - string - 11 - - - string - - - - string - - 5 - - 5 - - string - - string - - string - - - string - - - - - string - 11 - - - string - - - - string - - - - string - 7 - 7 - - 2 - - 1 - - - string - - string - - string - - string - - string - - string - - string - 7 - 7 - 11 - - - - 7 - - - - - - string - 11 - 11 - 11 - 11 - - - string - - - - string - 11 - 11 - 11 - 11 - 11 - - - string - - - - - - - - - inner - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - wol - - - - - - - front - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - chy - - - - - - - - - string - 11 - - - string - - - - - - 5 - 5 - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - - - string - - string - string - - 7 - - 7 - - 7 - - string - - string - string - - string - - - - 1.051732E7 - - 1.051732E7 - - 1.051732E7 - 1.051732E7 - - - - - - external - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - fre - - - - - - - right - - string - - - string - - - - string - string - string - string - string - string - - - - string - string - string - - - - string - string - string - - - swa - - - - - - - - - - string - string - string - string - string - - - - 11 - 11 - - - - string - string - string - - - - - - - string - 11 - - - string - - - - string - - 5 - - 5 - - string - - string - - string - - - string - - - - - - string - 11 - - - string - - - - string - - 5 - - 5 - - string - - string - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - string - 11 - - - string - - - - - - 5 - 5 - - - string - 11 - - - string - - - - - - string - 11 - - - string - - - - - - - - - - - - 1.051732E7 - - - - string - string - - - \ No newline at end of file diff --git a/CICMMetadata/cicm.xsd b/CICMMetadata/cicm.xsd deleted file mode 100644 index 2fb36d7..0000000 --- a/CICMMetadata/cicm.xsd +++ /dev/null @@ -1,3419 +0,0 @@ - - - - - - - - File containing the scan - - - - - Checksum of scan file pointed above - - - - - Information about scanning - - - - - Information about any scan processing done - - - - - Information about OCR - - - - - - - - - Original case type: jewel, bigjewel, dvdcase, etc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - File containing track dump, and format, binary, yranib, or audio/video container - - - - - - - - - - - - CPU architectures this set is intended to be run on - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Starting sector - - - - - Ending sector - - - - - - - - - File containing border dump - - - - - Size of border dump - - - - - Checksums of border dump - - - - - - - - - - - - - - Track information - - - - - File containing track dump, and format, binary, yranib, or audio/video container - - - - - - Size of track dump in bytes - - - - - Track sequence information - - - - - Track start address in MM:SS:FF - - - - - Track end address in MM:SS:FF - - - - - Track start sector - - - - - Track end sector - - - - - Track indexes - - - - - Track indexes - - - - - ISRC - - - - - Track type: audio, mode0, mode1, mode2 - - - - - - - - - - - - - - - - - - - Bytes per sector: 2048, 2352, 2448, etc, etc (as stored in image, not in physical - format) - - - - - - AccoustID for audio tracks - - - - - Checksums of track dump - - - - - Track's subchannel information - - - - - Information about filesystems and partitions contained in that track - - - - - - - - - - Barcodes for this magazine - - - - - Cover of this magazine - - - - - Name of this magazine - - - - - Editorial of this magazine - - - - - Publication date of this magazine - - - - - Sequential number of this magazine - - - - - Languages this magazine is written in - - - - - Pages of this magazine, including cover and back - - - - - Page size of this magazine, standard or in WxH milimeters - - - - - Scan of this magazine - - - - - - - Information about a filesystem - - - - - Filesystem type - - - - - Filesystem creation date - - - - - Filesystem last modification date - - - - - Filesystem last backup date - - - - - Bytes per cluster - - - - - Clusters in filesystem - - - - - Files in filesystem - - - - - Bootable filesystem? - - - - - Filesystem serial number - - - - - Filesystem volume name - - - - - Free clusters in filesystem - - - - - Dirty/unclean filesystem - - - - - Filesystem expiration date - - - - - Filesystem effective date - - - - - System identifier filesystem applies to - - - - - Volume set identifier - - - - - Filesystem publisher identifier - - - - - Filesystem data preparer - - - - - Filesystem application preparer - - - - - Contents of filesystem - - - - - - - - - Scanned element: cover, back, inlay, etc - - - - - - - - - - - - - - - - - - Scanning information - - - - - - - - - Array of dumped extents - - - - - - - - - Drive manufacturer - - - - - Drive model - - - - - Drive revision - - - - - Drive firmware version - - - - - Drive serial number - - - - - Extents of sectors read with this drive - - - - - Software used to read with this drive - - - - - - - File - - - - - - - - - - - - Cover file - - - - - Cover file checksum - - - - - Base64 of JPEG thumbnail - - - - - - - - - Image file, or image description file, plus format (cue, toc, etc, etc) - - - - - - Image file size - - - - - Sequence information about this disc - - - - - Layering type and sizes - - - - - Checksum of image file pointed above - - - - - Manufacturer part no. or SKU - - - - - Manufacturer serial no., not to be confused with software registration serial - number - - - - - - Disc/side ring code - - - - - Disc/side mastering SID - - - - - Disc/side toolstamp - - - - - Disc/side mould SID - - - - - Disc/side mould text - - - - - Disc type (CD, GD, SACD, DDCD, DVD, HDDVD, BD) - - - - - Disc subtype (CD-ROM, CD-DA, CD+G, etc) - - - - - Offset between subchannel servo and data sectors servo, in bytes - - - - - - Tracks on this disc/side - - - - - Sessions on this disc/side - - - - - Copy protection, if applicable - - - - - Dimensions of the disc - - - - - Case where the disk came from factory - - - - - Disc scans - - - - - Physical Manufacturing Information (DVD and HD DVD) - - - - - Disc Manufacturing Information - - - - - Lead-In Copyright Management Information - - - - - Burst Cutting Area - - - - - Absolute Time In Pre-groove - - - - - ADdress In Pre-groove - - - - - PMA - - - - - Disc Definition Structure - - - - - Spare Area Information - - - - - Last RMD - - - - - Pre-Recorded Information - - - - - Media Identification - - - - - PFI for recordables - - - - - Disc Control Blocks - - - - - Disc Information - - - - - PAC - - - - - CD TOC - - - - - CD-Text in Lead-In - - - - - Data between first Lead-In/Border-In and first data track - - - - - Lead-In, Border-In, or equivalent - - - - - Lead-Out, Border-Out, or equivalent - - - - - XGD information - - - - - PS3 Encryption Key - - - - - Media catalogue number or MCN - - - - - Array of disc tracks - - - - - Array of drives used to dump disc - - - - - - - Software used for disc reading - - - - - Software name - - - - - Software version - - - - - Operating system name and version where the software was run - - - - - - - - - Partition sequence number, starting on 1 - - - - - - - - - - Partition name if supported by partition scheme - - - - - Partition type - - - - - Partition starting sector - - - - - Partition ending sector - - - - - Partition description if supported by partition scheme - - - - - Array of filesystems contained in the partition - - - - - - - Array of drives information - - - - - Drives information - - - - - - - - - - - - - - - - - - - - - - PS3 encryption key - - - - - PS3 encryption key - - - - - - - - - XGD unlocked PFI - - - - - XGD unlocked DMI - - - - - XGD security sectors - - - - - - - - - Xbox SS Request Version - - - - - Xbox SS Request Number - - - - - XGD Security Sectors - - - - - - - Dimensions of media - - - - - Diameter in milimeters for circular discs - - - - - Height in milimeters for non-circular disks - - - - - Width in milimeters for non-circular disks - - - - - Thickness in milimeters for non-circular disks - - - - - - - Information about scanning - - - - - Who scanned it? - - - - - Who built the scanner - - - - - Scanner model - - - - - Scanner serial number - - - - - Software used for scanning - - - - - Software version - - - - - - - - - Keywords - - - - - - - - - Operating systems this set is intended to be run on - - - - - - - Sequence information about a disc - - - - - - Sequence information about this media - - - - - Media title as printed in label - - - - - Total number of discs in this set - - - - - - - - - - Side of disc described by this field - - - - - - - - - - - On PTP layering, layer of disc described by this field, starting on 0 - - - - - - - - - - - - - - Sequence information about a track - - - - - - Track number - - - - - Session this track belongs to - - - - - - - - - - - - - - Barcodes from this book - - - - - Book cover - - - - - Book name - - - - - Book publisher - - - - - Book author - - - - - Book's publication date - - - - - Book language - - - - - Book pages - - - - - Magazine page size in WxH milimeters - - - - - Scan of the book - - - - - - - - - Partition - - - - - - - - - Layering type and sizes - - - - - - - - - - - - - - - Information about dumped structure - - - - - - File containing dump - - - - - Size of dump - - - - - Checksums of dump - - - - - - - - - Array of filesystems - - - - - - - - - Minimal supported operating system - - - - - - - - Digital Asset Metadata - - - - - Developer of the set - - - - - Publisher of the set - - - - - Author/writer of the set - - - - - Performer/narrator of the set - - - - - Name of the set - - - - - Version of the set if applicable - - - - - Kind of release: OEM, Bundle, Coverdisc, Retail, Demo - - - - - - - - - - - - - - - - - - - - - Date of release in YYYY-MM-DD - - - - - Barcodes for this release - - - - - Manufacturer part no. or SKU - - - - - Manufacturer serial no., not to be confused with software registration serial - number - - - - - - Keywords - - - - - Magazine on this set - - - - - Books on this set - - - - - Categories this set belongs to - - - - - Subcategories this set belongs to - - - - - Languages this set comes in - - - - - Systems this set is designed to run on, if it includes software - - - - - CPU architectures this set is designed to run on, if it includes software - - - - - - Required operating systems and versions this set runs on, if it includes - software - - - - - - User manual/guide, installation manual/guide and any applicable entity - - - - - - Optical discs this set contains - - - - - Advertisement - - - - - Linear media (flash, ram, rom, cartridges) - - - - - Dump of a PCI/PCI-X/PCIe configuration space and/or expansion ROM - - - - - - Dump of media that is block constructed (floppy, hard drive) or abstracted (most - memory cards, flash drives, SSDs) - - - - - - Dump of media that is stored as audio, like C64/Speccy/CPC cassettes. - - - - - - - - Barcodes for this release - - - - - - - - Information about any scan processing done - - - - - - Who processed it? - - - - - Software used for processing - - - - - Software version - - - - - - - - - - - - - - - - Category of the set - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Scanned element: up, down, label, data, etc - - - - - - - - - - - - - - - Scan of disk part - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Subcategory of the set - - - - - - - User manual or user guide accompanying this set. Can be more than one. - - - - - - Language of the user manual - - - - - Pages of the user manual - - - - - Paper size in standard name or in WxH milimeters - - - - - User manual scanning - - - - - - - Checksum of file element - - - - - - - - Start and end of XGD's security sectors - - - - - - Start of XGD's security sectors - - - - - End of XGD's security sectors - - - - - - - - - Who did the OCR - - - - - Using what software - - - - - And the software version - - - - - OCR applied for which languages - - - - - - - - - Languages included in the set, ISO 3-letter code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Track's subchannel information - - - - - File containing track's subchannel dump and format, packed, rw_raw - - - - - - Size of subchannel dump - - - - - Checksum of subchannel dump - - - - - - - - - Case scans - - - - - Disc scans - - - - - - - - - Track languages - - - - - - Track number in media container - - - - - - - - - - Track's AccoustID - - - - - Track's codec - - - - - Audio channels - - - - - Audio sampling rate - - - - - Mean bitrate, or constant bitrate, in bits per second - - - - - - - - - Track languages - - - - - - Track number in media container - - - - - - - - - - Track's codec - - - - - Horizontal resolution in pixels - - - - - Vertical resolution in pixels - - - - - Mean bitrate, or constant bitrate, in bits per second - - - - - - Is this video track in 3D? - - - - - - - - Track languages - - - - - - Track number in media container - - - - - - - - - - Track's codec - - - - - - - - Approximate latitude of recording - - - - - Approximate longitude of recording - - - - - - - - - Name of the television channel this recording was broadcasted, if applicable - - - - - - Platform that broadcasted the television channel, if applicable - - - - - Format of the source of this recording - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Date and time of broadcast - - - - - Software used to capture, process, convert, the recording - - - - - Approximate coordinates where the recording was done - - - - - - - - - Manufactured of the advertised product - - - - - Advertised product - - - - - File containing advertising - - - - - Size of file - - - - - Total video frames - - - - - Duration in seconds - - - - - Mean framerate - - - - - Checksums of advertisement - - - - - Audio tracks of advertisement - - - - - Video tracks of advertisement - - - - - Subtitle tracks of advertisement - - - - - If advertisement has been capture from a television/radio broadcast, here is the - capture information - - - - - - - - Describes a dump of a linear media, that is, a media that is read byte-by-byte like for - example, a ROM chip, a game cartridge, a PCMCIA SRAM card, etc... - - - - - - Image file, or image description file, plus format (cue, toc, etc, etc) - - - - - - Image file size - - - - - Checksums of image file - - - - - If image file contains several deinterleaved dumps, here are the checkums of the - interleaved dump - - - - - - Manufacturer part no. or SKU - - - - - Manufacturer serial no., not to be confused with software registration serial - number - - - - - - Title as it is labeled on media - - - - - Sequence of media - - - - - How many bytes must be read in image file for each byte in media - - - - - - How many bytes must be skipped in image file for each byte in media - - - - - - Media manufacturer - - - - - Media model - - - - - Media packaging (DIP, PCMCIA, Cartridge, etc) - - - - - Media interface - - - - - Dimensions of media - - - - - Scan of media - - - - - Array of hardware used to dump media - - - - - Present if media is a PCMCIA Linear Flash or SRAM card, to contain PCMCIA specific - information - - - - - - Copy protection, if applicable - - - - - - - Contains PCMCIA card information - - - - - Contains the PCMCIA Card Information Structure dump. - - - - - Contains the PCMCIA version standard compliance - - - - - Contains the PCMCIA manufacturer ID - - - - - Contains the PCMCIA card ID - - - - - Contains the PCMCIA manufacturer string - - - - - Contains the PCMCIA product name string - - - - - Contains additional PCMCIA information strings - - - - - - - Contains PCI/PCI-X/PCIe card information - - - - - Contains PCI Vendor ID - - - - - - - - - - - Contains PCI Device ID - - - - - - - - - - - Binary dump of the PCI configuration space - - - - - Binary dump of the PCI expansion rom - - - - - - - - - File containing SCSI Extended Vendor Page Descriptor dump - - - - - Size of SCSI Extended Vendor Page Descriptor dump - - - - - Checksums of SCSI Extended Vendor Page Descriptor dump - - - - - - EVPD page - - - - - - - - - - - - Contains SCSI device information - - - - - Contains SCSI INQUIRY result dump - - - - - Contains SCSI EVPD dumps - - - - - Contains SCSI MODE SENSE(6) dump - - - - - Contains SCSI MODE SENSE(10) dump - - - - - Contains SCSI LOG SENSE dump - - - - - - - Contains USB device information - - - - - Contains USB Vendor ID - - - - - - - - - - - Contains USB Product ID - - - - - - - - - - - Binary dump of the USB descriptors - - - - - - - Contains SecureDigital device information - - - - - Contains SD Card Identification Data - - - - - Contains SD Card Status Data - - - - - Contains SD Card Register - - - - - Contains SD Operation Conditions Register - - - - - - - Contains MultiMediaCard device information - - - - - Contains MultiMediaCard Card Identification Data - - - - - Contains MultiMediaCard Card Status Data - - - - - Contains MultiMediaCard extended CSD - - - - - Contains MultiMediaCard Operation Conditions Register - - - - - - - Contains ATA/ATAPI device information - - - - - Contains ATA/ATAPI IDENTIFY binary dump - - - - - - - Information about track in non-abstracted block based media - - - - - File containing track dump, and format - - - - - Size of track dump in bytes - - - - - Head (from 0) where this track resides - - - - - Cylinder where this track resides - - - - - Track start sector - - - - - Track end sector - - - - - Sectors in track. Not necessarily EndSector-StartSector, as there can be hidden - sectors - - - - - - Bytes per sector, physical undecoded tag-less - - - - - Checksums of track dump - - - - - Track format (IBM FM, IBM MFM, Amiga MFM, Apple GCR, etc) - - - - - - - Describes a dump of a block (sector) layered media - - - - - Image file, or image description file, plus format (cue, toc, etc, etc) - - - - - - Image file size - - - - - Checksums of image file - - - - - Checksums of media - - - - - Media sequence information - - - - - Media manufacturer (for fixed AND removable media) - - - - - Media model (for fixed AND removable media) - - - - - Media serial number (for fixed and, if applicable, removable media) - - - - - - Media firmware version, for fixed media only - - - - - Media physical interface, for fixed media only - - - - - Manufacturer part no. or SKU - - - - - Manufacturer serial no., not to be confused with software registration serial - number - - - - - - Physical block size in bytes - - - - - Logical block size in bytes - - - - - User accessible logical blocks - - - - - List size for variable blocks - - - - - Presents information specific about a digital tape - - - - - Media scans - - - - - If media responds to native ATA/ATAPI commands, information here - - - - - - If media is PCI/PCI-X/PCIe attached, information here - - - - - If media is PCMCIA attached, information here - - - - - If media is SecureDigital, information here - - - - - If media is MultiMediaCard, information here - - - - - If media conforms to SCSI specifications, information here - - - - - If media is USB attached, information here - - - - - Medium Auxiliary Memory - - - - - Real physical heads - - - - - Real physical cylinders - - - - - Sectors per track, if constant, if not, this field is ommited and separate tracks - must be indicated - - - - - - Tracks for block media that allow separate cylinder/head addressing, like - floppies. It can be ommitted for media that strictly follows a standard (no copy protection - either). - - - - - - Copy protection, if applicable - - - - - Dimensions of the media - - - - - Information about filesystems and partitions contained in this media - - - - - - Array of hardware used to dump media, if removable - - - - - Disk type (Floppy, Twiggy, Hard Disk) - - - - - Disk subtype - - - - - - - Information about "blocks" in audio based media - - - - - File containing block dump, and format - - - - - Size of block dump in bytes - - - - - AccoustID of block - - - - - Checksums of block dump - - - - - Block format/encoding - - - - - - - Describes a dump of a media that is stored in an audio device (like a ZX Spectrum - cassette) - - - - - - Image file, or image description file, plus format (cue, toc, etc, etc) - - - - - - Image file size - - - - - Checksums of image file - - - - - Media sequence information - - - - - Manufacturer part no. or SKU - - - - - Manufacturer serial no., not to be confused with software registration serial - number - - - - - - Media manufacturer (if known) - - - - - Media model (if known) - - - - - AccoustID of media in audio form - - - - - Blocks on audio media that uses separate blocks - - - - - Copy protection, if applicable - - - - - Dimensions of the media - - - - - Scan of media - - - - - Array of hardware used to dump media, if removable - - - - - - - - - - - - - - - - - - - - - - - - Partition information - - - - - File containing partition dump, and format, binary, yranib, or audio/video - container - - - - - - Size of partition dump in bytes - - - - - Partition sequence - - - - - Partition start block - - - - - Partition end block - - - - - Checksums of track dump - - - - - - - - - - Tape file information - - - - - File containing file dump, and format, binary, yranib, or audio/video container - - - - - - Size of file in bytes - - - - - File sequence - - - - - Size of blocks in this file - - - - - File start block - - - - - File end block - - - - - Checksums of track dump - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/CICMMetadata/dotnet/cicm.cs b/CICMMetadata/dotnet/cicm.cs deleted file mode 100644 index 10dd7db..0000000 --- a/CICMMetadata/dotnet/cicm.cs +++ /dev/null @@ -1,9090 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -// -//This source code was auto-generated by MonoXSD -// -namespace Schemas { - - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlRootAttribute("CICMMetadata", Namespace="", IsNullable=false)] - public partial class CICMMetadataType { - - private string[] developerField; - - private string[] publisherField; - - private string[] authorField; - - private string[] performerField; - - private string nameField; - - private string versionField; - - private CICMMetadataTypeReleaseType releaseTypeField; - - private bool releaseTypeFieldSpecified; - - private System.DateTime releaseDateField; - - private bool releaseDateFieldSpecified; - - private BarcodeType[] barcodesField; - - private string partNumberField; - - private string serialNumberField; - - private string[] keywordsField; - - private MagazineType[] magazineField; - - private BookType[] bookField; - - private string[] categoriesField; - - private string[] subcategoriesField; - - private LanguagesTypeLanguage[] languagesField; - - private string[] systemsField; - - private ArchitecturesTypeArchitecture[] architecturesField; - - private RequiredOperatingSystemType[] requiredOperatingSystemsField; - - private UserManualType[] userManualField; - - private OpticalDiscType[] opticalDiscField; - - private AdvertisementType[] advertisementField; - - private LinearMediaType[] linearMediaField; - - private PCIType[] pCICardField; - - private BlockMediaType[] blockMediaField; - - private AudioMediaType[] audioMediaField; - - /// - [System.Xml.Serialization.XmlElementAttribute("Developer")] - public string[] Developer { - get { - return this.developerField; - } - set { - this.developerField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Publisher")] - public string[] Publisher { - get { - return this.publisherField; - } - set { - this.publisherField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Author")] - public string[] Author { - get { - return this.authorField; - } - set { - this.authorField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Performer")] - public string[] Performer { - get { - return this.performerField; - } - set { - this.performerField = value; - } - } - - /// - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - public string Version { - get { - return this.versionField; - } - set { - this.versionField = value; - } - } - - /// - public CICMMetadataTypeReleaseType ReleaseType { - get { - return this.releaseTypeField; - } - set { - this.releaseTypeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool ReleaseTypeSpecified { - get { - return this.releaseTypeFieldSpecified; - } - set { - this.releaseTypeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(DataType="date")] - public System.DateTime ReleaseDate { - get { - return this.releaseDateField; - } - set { - this.releaseDateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool ReleaseDateSpecified { - get { - return this.releaseDateFieldSpecified; - } - set { - this.releaseDateFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Barcode", IsNullable=false)] - public BarcodeType[] Barcodes { - get { - return this.barcodesField; - } - set { - this.barcodesField = value; - } - } - - /// - public string PartNumber { - get { - return this.partNumberField; - } - set { - this.partNumberField = value; - } - } - - /// - public string SerialNumber { - get { - return this.serialNumberField; - } - set { - this.serialNumberField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Keyword", IsNullable=false)] - public string[] Keywords { - get { - return this.keywordsField; - } - set { - this.keywordsField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Magazine")] - public MagazineType[] Magazine { - get { - return this.magazineField; - } - set { - this.magazineField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Book")] - public BookType[] Book { - get { - return this.bookField; - } - set { - this.bookField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Category", IsNullable=false)] - public string[] Categories { - get { - return this.categoriesField; - } - set { - this.categoriesField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Subcategory", IsNullable=false)] - public string[] Subcategories { - get { - return this.subcategoriesField; - } - set { - this.subcategoriesField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Language", IsNullable=false)] - public LanguagesTypeLanguage[] Languages { - get { - return this.languagesField; - } - set { - this.languagesField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("System", IsNullable=false)] - public string[] Systems { - get { - return this.systemsField; - } - set { - this.systemsField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Architecture", IsNullable=false)] - public ArchitecturesTypeArchitecture[] Architectures { - get { - return this.architecturesField; - } - set { - this.architecturesField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("RequiredOperatingSystem", IsNullable=false)] - public RequiredOperatingSystemType[] RequiredOperatingSystems { - get { - return this.requiredOperatingSystemsField; - } - set { - this.requiredOperatingSystemsField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("UserManual")] - public UserManualType[] UserManual { - get { - return this.userManualField; - } - set { - this.userManualField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("OpticalDisc")] - public OpticalDiscType[] OpticalDisc { - get { - return this.opticalDiscField; - } - set { - this.opticalDiscField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Advertisement")] - public AdvertisementType[] Advertisement { - get { - return this.advertisementField; - } - set { - this.advertisementField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("LinearMedia")] - public LinearMediaType[] LinearMedia { - get { - return this.linearMediaField; - } - set { - this.linearMediaField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("PCICard")] - public PCIType[] PCICard { - get { - return this.pCICardField; - } - set { - this.pCICardField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("BlockMedia")] - public BlockMediaType[] BlockMedia { - get { - return this.blockMediaField; - } - set { - this.blockMediaField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("AudioMedia")] - public AudioMediaType[] AudioMedia { - get { - return this.audioMediaField; - } - set { - this.audioMediaField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum CICMMetadataTypeReleaseType { - - /// - Retail, - - /// - Bundle, - - /// - Coverdisc, - - /// - Subscription, - - /// - Demo, - - /// - OEM, - - /// - Shareware, - - /// - FOSS, - - /// - Adware, - - /// - Donationware, - - /// - [System.Xml.Serialization.XmlEnumAttribute("Digital download")] - Digitaldownload, - - /// - SaaS, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class BarcodeType { - - private BarcodeTypeType typeField; - - private string valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public BarcodeTypeType type { - get { - return this.typeField; - } - set { - this.typeField = value; - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public string Value { - get { - return this.valueField; - } - set { - this.valueField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum BarcodeTypeType { - - /// - aztec, - - /// - codabar, - - /// - code11, - - /// - code128, - - /// - code39, - - /// - code93, - - /// - cpcbinary, - - /// - ezcode, - - /// - fim, - - /// - itf, - - /// - itf14, - - /// - ean13, - - /// - ean8, - - /// - maxicode, - - /// - isbn, - - /// - isrc, - - /// - msi, - - /// - tof, - - /// - shotcode, - - /// - rm4scc, - - /// - qr, - - /// - ean5, - - /// - ean2, - - /// - [System.Xml.Serialization.XmlEnumAttribute("qr")] - qr1, - - /// - postnet, - - /// - postbar, - - /// - plessey, - - /// - pharmacode, - - /// - pdf417, - - /// - patchcode, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class AudioBlockType { - - private ImageType imageField; - - private ulong sizeField; - - private string accoustIDField; - - private ChecksumType[] checksumsField; - - private string formatField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - public string AccoustID { - get { - return this.accoustIDField; - } - set { - this.accoustIDField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - public string Format { - get { - return this.formatField; - } - set { - this.formatField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ImageType { - - private string formatField; - - private ulong offsetField; - - private bool offsetFieldSpecified; - - private string valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string format { - get { - return this.formatField; - } - set { - this.formatField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool offsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public string Value { - get { - return this.valueField; - } - set { - this.valueField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ChecksumType { - - private ChecksumTypeType typeField; - - private string valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ChecksumTypeType type { - get { - return this.typeField; - } - set { - this.typeField = value; - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public string Value { - get { - return this.valueField; - } - set { - this.valueField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum ChecksumTypeType { - - /// - fletcher16, - - /// - fletcher32, - - /// - adler32, - - /// - crc16, - - /// - crc16ccitt, - - /// - crc32, - - /// - crc64, - - /// - md4, - - /// - md5, - - /// - dm6, - - /// - ripemd128, - - /// - ripemd160, - - /// - ripemed320, - - /// - sha1, - - /// - sha224, - - /// - sha256, - - /// - sha384, - - /// - sha512, - - /// - sha3, - - /// - skein, - - /// - snefru, - - /// - blake256, - - /// - blake512, - - /// - tiger, - - /// - whirlpool, - - /// - spamsum, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class AudioMediaType { - - private ImageType imageField; - - private ulong sizeField; - - private ChecksumType[] checksumsField; - - private SequenceType sequenceField; - - private string partNumberField; - - private string serialNumberField; - - private string manufacturerField; - - private string modelField; - - private string accoustIDField; - - private AudioBlockType[] blockField; - - private string copyProtectionField; - - private DimensionsType dimensionsField; - - private ScansType scansField; - - private DumpHardwareType[] dumpHardwareArrayField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - public SequenceType Sequence { - get { - return this.sequenceField; - } - set { - this.sequenceField = value; - } - } - - /// - public string PartNumber { - get { - return this.partNumberField; - } - set { - this.partNumberField = value; - } - } - - /// - public string SerialNumber { - get { - return this.serialNumberField; - } - set { - this.serialNumberField = value; - } - } - - /// - public string Manufacturer { - get { - return this.manufacturerField; - } - set { - this.manufacturerField = value; - } - } - - /// - public string Model { - get { - return this.modelField; - } - set { - this.modelField = value; - } - } - - /// - public string AccoustID { - get { - return this.accoustIDField; - } - set { - this.accoustIDField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Block")] - public AudioBlockType[] Block { - get { - return this.blockField; - } - set { - this.blockField = value; - } - } - - /// - public string CopyProtection { - get { - return this.copyProtectionField; - } - set { - this.copyProtectionField = value; - } - } - - /// - public DimensionsType Dimensions { - get { - return this.dimensionsField; - } - set { - this.dimensionsField = value; - } - } - - /// - public ScansType Scans { - get { - return this.scansField; - } - set { - this.scansField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("DumpHardware", IsNullable=false)] - public DumpHardwareType[] DumpHardwareArray { - get { - return this.dumpHardwareArrayField; - } - set { - this.dumpHardwareArrayField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class SequenceType { - - private string mediaTitleField; - - private uint mediaSequenceField; - - private uint totalMediaField; - - private byte sideField; - - private bool sideFieldSpecified; - - private byte layerField; - - private bool layerFieldSpecified; - - /// - public string MediaTitle { - get { - return this.mediaTitleField; - } - set { - this.mediaTitleField = value; - } - } - - /// - public uint MediaSequence { - get { - return this.mediaSequenceField; - } - set { - this.mediaSequenceField = value; - } - } - - /// - public uint TotalMedia { - get { - return this.totalMediaField; - } - set { - this.totalMediaField = value; - } - } - - /// - public byte Side { - get { - return this.sideField; - } - set { - this.sideField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool SideSpecified { - get { - return this.sideFieldSpecified; - } - set { - this.sideFieldSpecified = value; - } - } - - /// - public byte Layer { - get { - return this.layerField; - } - set { - this.layerField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool LayerSpecified { - get { - return this.layerFieldSpecified; - } - set { - this.layerFieldSpecified = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class DimensionsType { - - private double diameterField; - - private bool diameterFieldSpecified; - - private double heightField; - - private bool heightFieldSpecified; - - private double widthField; - - private bool widthFieldSpecified; - - private double thicknessField; - - /// - public double Diameter { - get { - return this.diameterField; - } - set { - this.diameterField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool DiameterSpecified { - get { - return this.diameterFieldSpecified; - } - set { - this.diameterFieldSpecified = value; - } - } - - /// - public double Height { - get { - return this.heightField; - } - set { - this.heightField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool HeightSpecified { - get { - return this.heightFieldSpecified; - } - set { - this.heightFieldSpecified = value; - } - } - - /// - public double Width { - get { - return this.widthField; - } - set { - this.widthField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool WidthSpecified { - get { - return this.widthFieldSpecified; - } - set { - this.widthFieldSpecified = value; - } - } - - /// - public double Thickness { - get { - return this.thicknessField; - } - set { - this.thicknessField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ScansType { - - private CaseScanType caseScanField; - - private MediaScanType scanField; - - /// - public CaseScanType CaseScan { - get { - return this.caseScanField; - } - set { - this.caseScanField = value; - } - } - - /// - public MediaScanType Scan { - get { - return this.scanField; - } - set { - this.scanField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class CaseScanType { - - private CaseScanTypeCaseScanElement caseScanElementField; - - private ScanType scanField; - - /// - public CaseScanTypeCaseScanElement CaseScanElement { - get { - return this.caseScanElementField; - } - set { - this.caseScanElementField = value; - } - } - - /// - public ScanType Scan { - get { - return this.scanField; - } - set { - this.scanField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum CaseScanTypeCaseScanElement { - - /// - sleeve, - - /// - inner, - - /// - inlay, - - /// - frontback, - - /// - frontfull, - - /// - boxfront, - - /// - boxback, - - /// - boxspine, - - /// - external, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ScanType { - - private FileType fileField; - - private ChecksumType[] checksumsField; - - private ScannerType[] scannerField; - - private ScanProcessingType[] scanProcessingField; - - private OCRType[] oCRField; - - /// - public FileType File { - get { - return this.fileField; - } - set { - this.fileField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Scanner")] - public ScannerType[] Scanner { - get { - return this.scannerField; - } - set { - this.scannerField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("ScanProcessing")] - public ScanProcessingType[] ScanProcessing { - get { - return this.scanProcessingField; - } - set { - this.scanProcessingField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("OCR")] - public OCRType[] OCR { - get { - return this.oCRField; - } - set { - this.oCRField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class FileType { - - private string formatField; - - private string valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string format { - get { - return this.formatField; - } - set { - this.formatField = value; - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public string Value { - get { - return this.valueField; - } - set { - this.valueField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ScannerType { - - private string authorField; - - private string manufacturerField; - - private string modelField; - - private string serialField; - - private string softwareField; - - private string softwareVersionField; - - /// - public string Author { - get { - return this.authorField; - } - set { - this.authorField = value; - } - } - - /// - public string Manufacturer { - get { - return this.manufacturerField; - } - set { - this.manufacturerField = value; - } - } - - /// - public string Model { - get { - return this.modelField; - } - set { - this.modelField = value; - } - } - - /// - public string Serial { - get { - return this.serialField; - } - set { - this.serialField = value; - } - } - - /// - public string Software { - get { - return this.softwareField; - } - set { - this.softwareField = value; - } - } - - /// - public string SoftwareVersion { - get { - return this.softwareVersionField; - } - set { - this.softwareVersionField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ScanProcessingType { - - private string authorField; - - private string softwareField; - - private string softwareVersionField; - - /// - public string Author { - get { - return this.authorField; - } - set { - this.authorField = value; - } - } - - /// - public string Software { - get { - return this.softwareField; - } - set { - this.softwareField = value; - } - } - - /// - public string SoftwareVersion { - get { - return this.softwareVersionField; - } - set { - this.softwareVersionField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class OCRType { - - private string authorField; - - private string softwareField; - - private string softwareVersionField; - - private LanguagesTypeLanguage[] languageField; - - /// - public string Author { - get { - return this.authorField; - } - set { - this.authorField = value; - } - } - - /// - public string Software { - get { - return this.softwareField; - } - set { - this.softwareField = value; - } - } - - /// - public string SoftwareVersion { - get { - return this.softwareVersionField; - } - set { - this.softwareVersionField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Language", IsNullable=false)] - public LanguagesTypeLanguage[] Language { - get { - return this.languageField; - } - set { - this.languageField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum LanguagesTypeLanguage { - - /// - aar, - - /// - abk, - - /// - ace, - - /// - ach, - - /// - ada, - - /// - ady, - - /// - afa, - - /// - afh, - - /// - afr, - - /// - ain, - - /// - aka, - - /// - akk, - - /// - alb, - - /// - ale, - - /// - alg, - - /// - alt, - - /// - amh, - - /// - ang, - - /// - anp, - - /// - apa, - - /// - ara, - - /// - arc, - - /// - arg, - - /// - arm, - - /// - arn, - - /// - arp, - - /// - art, - - /// - arw, - - /// - asm, - - /// - ast, - - /// - ath, - - /// - aus, - - /// - ava, - - /// - ave, - - /// - awa, - - /// - aym, - - /// - aze, - - /// - bad, - - /// - bai, - - /// - bak, - - /// - bal, - - /// - bam, - - /// - ban, - - /// - baq, - - /// - bas, - - /// - bat, - - /// - bej, - - /// - bel, - - /// - bem, - - /// - ben, - - /// - ber, - - /// - bho, - - /// - bih, - - /// - bik, - - /// - bin, - - /// - bis, - - /// - bla, - - /// - bnt, - - /// - bos, - - /// - bra, - - /// - bre, - - /// - btk, - - /// - bua, - - /// - bug, - - /// - bul, - - /// - bur, - - /// - byn, - - /// - cad, - - /// - cai, - - /// - car, - - /// - cat, - - /// - cau, - - /// - ceb, - - /// - cel, - - /// - cha, - - /// - chb, - - /// - che, - - /// - chg, - - /// - chi, - - /// - chk, - - /// - chm, - - /// - chn, - - /// - cho, - - /// - chp, - - /// - chr, - - /// - chu, - - /// - chv, - - /// - chy, - - /// - cmc, - - /// - cop, - - /// - cor, - - /// - cos, - - /// - cpe, - - /// - cpf, - - /// - cpp, - - /// - cre, - - /// - crh, - - /// - crp, - - /// - csb, - - /// - cus, - - /// - cze, - - /// - dak, - - /// - dan, - - /// - dar, - - /// - day, - - /// - del, - - /// - den, - - /// - dgr, - - /// - din, - - /// - div, - - /// - doi, - - /// - dra, - - /// - dsb, - - /// - dua, - - /// - dum, - - /// - dut, - - /// - dyu, - - /// - dzo, - - /// - efi, - - /// - egy, - - /// - eka, - - /// - elx, - - /// - eng, - - /// - enm, - - /// - epo, - - /// - est, - - /// - ewe, - - /// - ewo, - - /// - fan, - - /// - fao, - - /// - fat, - - /// - fij, - - /// - fil, - - /// - fin, - - /// - fiu, - - /// - fon, - - /// - fre, - - /// - frm, - - /// - fro, - - /// - frr, - - /// - frs, - - /// - fry, - - /// - ful, - - /// - fur, - - /// - gaa, - - /// - gay, - - /// - gba, - - /// - gem, - - /// - geo, - - /// - ger, - - /// - gez, - - /// - gil, - - /// - gla, - - /// - gle, - - /// - glg, - - /// - glv, - - /// - gmh, - - /// - goh, - - /// - gon, - - /// - gor, - - /// - got, - - /// - grb, - - /// - grc, - - /// - gre, - - /// - grn, - - /// - gsw, - - /// - guj, - - /// - gwi, - - /// - hai, - - /// - hat, - - /// - hau, - - /// - haw, - - /// - heb, - - /// - her, - - /// - hil, - - /// - him, - - /// - hin, - - /// - hit, - - /// - hmn, - - /// - hmo, - - /// - hrv, - - /// - hsb, - - /// - hun, - - /// - hup, - - /// - iba, - - /// - ibo, - - /// - ice, - - /// - ido, - - /// - iii, - - /// - ijo, - - /// - iku, - - /// - ile, - - /// - ilo, - - /// - ina, - - /// - inc, - - /// - ind, - - /// - ine, - - /// - inh, - - /// - ipk, - - /// - ira, - - /// - iro, - - /// - ita, - - /// - jav, - - /// - jbo, - - /// - jpn, - - /// - jpr, - - /// - jrb, - - /// - kaa, - - /// - kab, - - /// - kac, - - /// - kal, - - /// - kam, - - /// - kan, - - /// - kar, - - /// - kas, - - /// - kau, - - /// - kaw, - - /// - kaz, - - /// - kbd, - - /// - kha, - - /// - khi, - - /// - khm, - - /// - kho, - - /// - kik, - - /// - kin, - - /// - kir, - - /// - kmb, - - /// - kok, - - /// - kom, - - /// - kon, - - /// - kor, - - /// - kos, - - /// - kpe, - - /// - krc, - - /// - krl, - - /// - kro, - - /// - kru, - - /// - kua, - - /// - kum, - - /// - kur, - - /// - kut, - - /// - lad, - - /// - lah, - - /// - lam, - - /// - lao, - - /// - lat, - - /// - lav, - - /// - lez, - - /// - lim, - - /// - lin, - - /// - lit, - - /// - lol, - - /// - loz, - - /// - ltz, - - /// - lua, - - /// - lub, - - /// - lug, - - /// - lui, - - /// - lun, - - /// - luo, - - /// - lus, - - /// - mac, - - /// - mad, - - /// - mag, - - /// - mah, - - /// - mai, - - /// - mak, - - /// - mal, - - /// - man, - - /// - mao, - - /// - map, - - /// - mar, - - /// - mas, - - /// - may, - - /// - mdf, - - /// - mdr, - - /// - men, - - /// - mga, - - /// - mic, - - /// - min, - - /// - mis, - - /// - mkh, - - /// - mlg, - - /// - mlt, - - /// - mnc, - - /// - mni, - - /// - mno, - - /// - moh, - - /// - mon, - - /// - mos, - - /// - mul, - - /// - mun, - - /// - mus, - - /// - mwl, - - /// - mwr, - - /// - myn, - - /// - myv, - - /// - nah, - - /// - nai, - - /// - nap, - - /// - nau, - - /// - nav, - - /// - nbl, - - /// - nde, - - /// - ndo, - - /// - nds, - - /// - nep, - - /// - @new, - - /// - nia, - - /// - nic, - - /// - niu, - - /// - nno, - - /// - nob, - - /// - nog, - - /// - non, - - /// - nor, - - /// - nqo, - - /// - nso, - - /// - nub, - - /// - nwc, - - /// - nya, - - /// - nym, - - /// - nyn, - - /// - nyo, - - /// - nzi, - - /// - oci, - - /// - oji, - - /// - ori, - - /// - orm, - - /// - osa, - - /// - oss, - - /// - ota, - - /// - oto, - - /// - paa, - - /// - pag, - - /// - pal, - - /// - pam, - - /// - pan, - - /// - pap, - - /// - pau, - - /// - peo, - - /// - per, - - /// - phi, - - /// - phn, - - /// - pli, - - /// - pol, - - /// - pon, - - /// - por, - - /// - pra, - - /// - pro, - - /// - pus, - - /// - [System.Xml.Serialization.XmlEnumAttribute("qaa-qtz")] - qaaqtz, - - /// - que, - - /// - raj, - - /// - rap, - - /// - rar, - - /// - roa, - - /// - roh, - - /// - rom, - - /// - rum, - - /// - run, - - /// - rup, - - /// - rus, - - /// - sad, - - /// - sag, - - /// - sah, - - /// - sai, - - /// - sal, - - /// - sam, - - /// - san, - - /// - sas, - - /// - sat, - - /// - scn, - - /// - sco, - - /// - sel, - - /// - sem, - - /// - sga, - - /// - sgn, - - /// - shn, - - /// - sid, - - /// - sin, - - /// - sio, - - /// - sit, - - /// - sla, - - /// - slo, - - /// - slv, - - /// - sma, - - /// - sme, - - /// - smi, - - /// - smj, - - /// - smn, - - /// - smo, - - /// - sms, - - /// - sna, - - /// - snd, - - /// - snk, - - /// - sog, - - /// - som, - - /// - son, - - /// - sot, - - /// - spa, - - /// - srd, - - /// - srn, - - /// - srp, - - /// - srr, - - /// - ssa, - - /// - ssw, - - /// - suk, - - /// - sun, - - /// - sus, - - /// - sux, - - /// - swa, - - /// - swe, - - /// - syc, - - /// - syr, - - /// - tah, - - /// - tai, - - /// - tam, - - /// - tat, - - /// - tel, - - /// - tem, - - /// - ter, - - /// - tet, - - /// - tgk, - - /// - tgl, - - /// - tha, - - /// - tib, - - /// - tig, - - /// - tir, - - /// - tiv, - - /// - tkl, - - /// - tlh, - - /// - tli, - - /// - tmh, - - /// - tog, - - /// - ton, - - /// - tpi, - - /// - tsi, - - /// - tsn, - - /// - tso, - - /// - tuk, - - /// - tum, - - /// - tup, - - /// - tur, - - /// - tut, - - /// - tvl, - - /// - twi, - - /// - tyv, - - /// - udm, - - /// - uga, - - /// - uig, - - /// - ukr, - - /// - umb, - - /// - und, - - /// - urd, - - /// - uzb, - - /// - vai, - - /// - ven, - - /// - vie, - - /// - vol, - - /// - vot, - - /// - wak, - - /// - wal, - - /// - war, - - /// - was, - - /// - wel, - - /// - wen, - - /// - wln, - - /// - wol, - - /// - xal, - - /// - xho, - - /// - yao, - - /// - yap, - - /// - yid, - - /// - yor, - - /// - ypk, - - /// - zap, - - /// - zbl, - - /// - zen, - - /// - zgh, - - /// - zha, - - /// - znd, - - /// - zul, - - /// - zun, - - /// - zxx, - - /// - zza, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class MediaScanType { - - private MediaScanTypeMediaScanElement mediaScanElementField; - - private ScanType scanField; - - /// - public MediaScanTypeMediaScanElement MediaScanElement { - get { - return this.mediaScanElementField; - } - set { - this.mediaScanElementField = value; - } - } - - /// - public ScanType Scan { - get { - return this.scanField; - } - set { - this.scanField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum MediaScanTypeMediaScanElement { - - /// - up, - - /// - down, - - /// - front, - - /// - back, - - /// - left, - - /// - right, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class DumpHardwareType { - - private string manufacturerField; - - private string modelField; - - private string revisionField; - - private string firmwareField; - - private string serialField; - - private ExtentType[] extentsField; - - private SoftwareType softwareField; - - /// - public string Manufacturer { - get { - return this.manufacturerField; - } - set { - this.manufacturerField = value; - } - } - - /// - public string Model { - get { - return this.modelField; - } - set { - this.modelField = value; - } - } - - /// - public string Revision { - get { - return this.revisionField; - } - set { - this.revisionField = value; - } - } - - /// - public string Firmware { - get { - return this.firmwareField; - } - set { - this.firmwareField = value; - } - } - - /// - public string Serial { - get { - return this.serialField; - } - set { - this.serialField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Extent", IsNullable=false)] - public ExtentType[] Extents { - get { - return this.extentsField; - } - set { - this.extentsField = value; - } - } - - /// - public SoftwareType Software { - get { - return this.softwareField; - } - set { - this.softwareField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ExtentType { - - private ulong startField; - - private ulong endField; - - /// - public ulong Start { - get { - return this.startField; - } - set { - this.startField = value; - } - } - - /// - public ulong End { - get { - return this.endField; - } - set { - this.endField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class SoftwareType { - - private string nameField; - - private string versionField; - - private string operatingSystemField; - - /// - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - public string Version { - get { - return this.versionField; - } - set { - this.versionField = value; - } - } - - /// - public string OperatingSystem { - get { - return this.operatingSystemField; - } - set { - this.operatingSystemField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class BlockTrackType { - - private ImageType imageField; - - private ulong sizeField; - - private ushort headField; - - private uint cylinderField; - - private ulong startSectorField; - - private ulong endSectorField; - - private ulong sectorsField; - - private uint bytesPerSectorField; - - private ChecksumType[] checksumsField; - - private string formatField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - public ushort Head { - get { - return this.headField; - } - set { - this.headField = value; - } - } - - /// - public uint Cylinder { - get { - return this.cylinderField; - } - set { - this.cylinderField = value; - } - } - - /// - public ulong StartSector { - get { - return this.startSectorField; - } - set { - this.startSectorField = value; - } - } - - /// - public ulong EndSector { - get { - return this.endSectorField; - } - set { - this.endSectorField = value; - } - } - - /// - public ulong Sectors { - get { - return this.sectorsField; - } - set { - this.sectorsField = value; - } - } - - /// - public uint BytesPerSector { - get { - return this.bytesPerSectorField; - } - set { - this.bytesPerSectorField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - public string Format { - get { - return this.formatField; - } - set { - this.formatField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class USBType { - - private ushort vendorIDField; - - private ushort productIDField; - - private DumpType descriptorsField; - - /// - public ushort VendorID { - get { - return this.vendorIDField; - } - set { - this.vendorIDField = value; - } - } - - /// - public ushort ProductID { - get { - return this.productIDField; - } - set { - this.productIDField = value; - } - } - - /// - public DumpType Descriptors { - get { - return this.descriptorsField; - } - set { - this.descriptorsField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class DumpType { - - private string imageField; - - private ulong sizeField; - - private ChecksumType[] checksumsField; - - /// - public string Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class EVPDType { - - private string imageField; - - private ulong sizeField; - - private ChecksumType[] checksumsField; - - private byte pageField; - - private bool pageFieldSpecified; - - /// - public string Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public byte page { - get { - return this.pageField; - } - set { - this.pageField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool pageSpecified { - get { - return this.pageFieldSpecified; - } - set { - this.pageFieldSpecified = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class SCSIType { - - private DumpType inquiryField; - - private EVPDType[] eVPDField; - - private DumpType modeSenseField; - - private DumpType modeSense10Field; - - private DumpType logSenseField; - - /// - public DumpType Inquiry { - get { - return this.inquiryField; - } - set { - this.inquiryField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("EVPD")] - public EVPDType[] EVPD { - get { - return this.eVPDField; - } - set { - this.eVPDField = value; - } - } - - /// - public DumpType ModeSense { - get { - return this.modeSenseField; - } - set { - this.modeSenseField = value; - } - } - - /// - public DumpType ModeSense10 { - get { - return this.modeSense10Field; - } - set { - this.modeSense10Field = value; - } - } - - /// - public DumpType LogSense { - get { - return this.logSenseField; - } - set { - this.logSenseField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class MultiMediaCardType { - - private DumpType cIDField; - - private DumpType cSDField; - - private DumpType extendedCSDField; - - private DumpType oCRField; - - /// - public DumpType CID { - get { - return this.cIDField; - } - set { - this.cIDField = value; - } - } - - /// - public DumpType CSD { - get { - return this.cSDField; - } - set { - this.cSDField = value; - } - } - - /// - public DumpType ExtendedCSD { - get { - return this.extendedCSDField; - } - set { - this.extendedCSDField = value; - } - } - - /// - public DumpType OCR { - get { - return this.oCRField; - } - set { - this.oCRField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class SecureDigitalType { - - private DumpType cIDField; - - private DumpType cSDField; - - private DumpType sCRField; - - private DumpType oCRField; - - /// - public DumpType CID { - get { - return this.cIDField; - } - set { - this.cIDField = value; - } - } - - /// - public DumpType CSD { - get { - return this.cSDField; - } - set { - this.cSDField = value; - } - } - - /// - public DumpType SCR { - get { - return this.sCRField; - } - set { - this.sCRField = value; - } - } - - /// - public DumpType OCR { - get { - return this.oCRField; - } - set { - this.oCRField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ATAType { - - private DumpType identifyField; - - /// - public DumpType Identify { - get { - return this.identifyField; - } - set { - this.identifyField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class TapeFileType { - - private ImageType imageField; - - private ulong sizeField; - - private ulong sequenceField; - - private ulong blockSizeField; - - private ulong startBlockField; - - private ulong endBlockField; - - private ChecksumType[] checksumsField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - public ulong Sequence { - get { - return this.sequenceField; - } - set { - this.sequenceField = value; - } - } - - /// - public ulong BlockSize { - get { - return this.blockSizeField; - } - set { - this.blockSizeField = value; - } - } - - /// - public ulong StartBlock { - get { - return this.startBlockField; - } - set { - this.startBlockField = value; - } - } - - /// - public ulong EndBlock { - get { - return this.endBlockField; - } - set { - this.endBlockField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class TapePartitionType { - - private ImageType imageField; - - private ulong sizeField; - - private ulong sequenceField; - - private ulong startBlockField; - - private ulong endBlockField; - - private ChecksumType[] checksumsField; - - private TapeFileType[] fileField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - public ulong Sequence { - get { - return this.sequenceField; - } - set { - this.sequenceField = value; - } - } - - /// - public ulong StartBlock { - get { - return this.startBlockField; - } - set { - this.startBlockField = value; - } - } - - /// - public ulong EndBlock { - get { - return this.endBlockField; - } - set { - this.endBlockField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("File")] - public TapeFileType[] File { - get { - return this.fileField; - } - set { - this.fileField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class BlockSizeType { - - private uint startingBlockField; - - private uint valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint startingBlock { - get { - return this.startingBlockField; - } - set { - this.startingBlockField = value; - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public uint Value { - get { - return this.valueField; - } - set { - this.valueField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class BlockMediaType { - - private ImageType imageField; - - private ulong sizeField; - - private ChecksumType[] checksumsField; - - private ChecksumType[] contentChecksumsField; - - private SequenceType sequenceField; - - private string manufacturerField; - - private string modelField; - - private string serialField; - - private string firmwareField; - - private string interfaceField; - - private string partNumberField; - - private string serialNumberField; - - private uint physicalBlockSizeField; - - private uint logicalBlockSizeField; - - private ulong logicalBlocksField; - - private BlockSizeType[] variableBlockSizeField; - - private TapePartitionType[] tapeInformationField; - - private ScansType scansField; - - private ATAType aTAField; - - private PCIType pCIField; - - private PCMCIAType pCMCIAField; - - private SecureDigitalType secureDigitalField; - - private MultiMediaCardType multiMediaCardField; - - private SCSIType sCSIField; - - private USBType uSBField; - - private DumpType mAMField; - - private ushort headsField; - - private bool headsFieldSpecified; - - private uint cylindersField; - - private bool cylindersFieldSpecified; - - private ulong sectorsPerTrackField; - - private bool sectorsPerTrackFieldSpecified; - - private BlockTrackType[] trackField; - - private string copyProtectionField; - - private DimensionsType dimensionsField; - - private PartitionType[] fileSystemInformationField; - - private DumpHardwareType[] dumpHardwareArrayField; - - private string diskTypeField; - - private string diskSubTypeField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] ContentChecksums { - get { - return this.contentChecksumsField; - } - set { - this.contentChecksumsField = value; - } - } - - /// - public SequenceType Sequence { - get { - return this.sequenceField; - } - set { - this.sequenceField = value; - } - } - - /// - public string Manufacturer { - get { - return this.manufacturerField; - } - set { - this.manufacturerField = value; - } - } - - /// - public string Model { - get { - return this.modelField; - } - set { - this.modelField = value; - } - } - - /// - public string Serial { - get { - return this.serialField; - } - set { - this.serialField = value; - } - } - - /// - public string Firmware { - get { - return this.firmwareField; - } - set { - this.firmwareField = value; - } - } - - /// - public string Interface { - get { - return this.interfaceField; - } - set { - this.interfaceField = value; - } - } - - /// - public string PartNumber { - get { - return this.partNumberField; - } - set { - this.partNumberField = value; - } - } - - /// - public string SerialNumber { - get { - return this.serialNumberField; - } - set { - this.serialNumberField = value; - } - } - - /// - public uint PhysicalBlockSize { - get { - return this.physicalBlockSizeField; - } - set { - this.physicalBlockSizeField = value; - } - } - - /// - public uint LogicalBlockSize { - get { - return this.logicalBlockSizeField; - } - set { - this.logicalBlockSizeField = value; - } - } - - /// - public ulong LogicalBlocks { - get { - return this.logicalBlocksField; - } - set { - this.logicalBlocksField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("BlockSize", IsNullable=false)] - public BlockSizeType[] VariableBlockSize { - get { - return this.variableBlockSizeField; - } - set { - this.variableBlockSizeField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Partition", IsNullable=false)] - public TapePartitionType[] TapeInformation { - get { - return this.tapeInformationField; - } - set { - this.tapeInformationField = value; - } - } - - /// - public ScansType Scans { - get { - return this.scansField; - } - set { - this.scansField = value; - } - } - - /// - public ATAType ATA { - get { - return this.aTAField; - } - set { - this.aTAField = value; - } - } - - /// - public PCIType PCI { - get { - return this.pCIField; - } - set { - this.pCIField = value; - } - } - - /// - public PCMCIAType PCMCIA { - get { - return this.pCMCIAField; - } - set { - this.pCMCIAField = value; - } - } - - /// - public SecureDigitalType SecureDigital { - get { - return this.secureDigitalField; - } - set { - this.secureDigitalField = value; - } - } - - /// - public MultiMediaCardType MultiMediaCard { - get { - return this.multiMediaCardField; - } - set { - this.multiMediaCardField = value; - } - } - - /// - public SCSIType SCSI { - get { - return this.sCSIField; - } - set { - this.sCSIField = value; - } - } - - /// - public USBType USB { - get { - return this.uSBField; - } - set { - this.uSBField = value; - } - } - - /// - public DumpType MAM { - get { - return this.mAMField; - } - set { - this.mAMField = value; - } - } - - /// - public ushort Heads { - get { - return this.headsField; - } - set { - this.headsField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool HeadsSpecified { - get { - return this.headsFieldSpecified; - } - set { - this.headsFieldSpecified = value; - } - } - - /// - public uint Cylinders { - get { - return this.cylindersField; - } - set { - this.cylindersField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CylindersSpecified { - get { - return this.cylindersFieldSpecified; - } - set { - this.cylindersFieldSpecified = value; - } - } - - /// - public ulong SectorsPerTrack { - get { - return this.sectorsPerTrackField; - } - set { - this.sectorsPerTrackField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool SectorsPerTrackSpecified { - get { - return this.sectorsPerTrackFieldSpecified; - } - set { - this.sectorsPerTrackFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Track")] - public BlockTrackType[] Track { - get { - return this.trackField; - } - set { - this.trackField = value; - } - } - - /// - public string CopyProtection { - get { - return this.copyProtectionField; - } - set { - this.copyProtectionField = value; - } - } - - /// - public DimensionsType Dimensions { - get { - return this.dimensionsField; - } - set { - this.dimensionsField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Partition", IsNullable=false)] - public PartitionType[] FileSystemInformation { - get { - return this.fileSystemInformationField; - } - set { - this.fileSystemInformationField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("DumpHardware", IsNullable=false)] - public DumpHardwareType[] DumpHardwareArray { - get { - return this.dumpHardwareArrayField; - } - set { - this.dumpHardwareArrayField = value; - } - } - - /// - public string DiskType { - get { - return this.diskTypeField; - } - set { - this.diskTypeField = value; - } - } - - /// - public string DiskSubType { - get { - return this.diskSubTypeField; - } - set { - this.diskSubTypeField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class PCIType { - - private ushort vendorIDField; - - private ushort deviceIDField; - - private DumpType configurationField; - - private LinearMediaType expansionROMField; - - /// - public ushort VendorID { - get { - return this.vendorIDField; - } - set { - this.vendorIDField = value; - } - } - - /// - public ushort DeviceID { - get { - return this.deviceIDField; - } - set { - this.deviceIDField = value; - } - } - - /// - public DumpType Configuration { - get { - return this.configurationField; - } - set { - this.configurationField = value; - } - } - - /// - public LinearMediaType ExpansionROM { - get { - return this.expansionROMField; - } - set { - this.expansionROMField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class LinearMediaType { - - private ImageType imageField; - - private ulong sizeField; - - private ChecksumType[] imageChecksumsField; - - private ChecksumType[] checksumsField; - - private string partNumberField; - - private string serialNumberField; - - private string titleField; - - private uint sequenceField; - - private bool sequenceFieldSpecified; - - private uint imageInterleaveField; - - private bool imageInterleaveFieldSpecified; - - private uint interleaveField; - - private bool interleaveFieldSpecified; - - private string manufacturerField; - - private string modelField; - - private string packageField; - - private string interfaceField; - - private DimensionsType dimensionsField; - - private ScansType scansField; - - private DumpHardwareType[] dumpHardwareArrayField; - - private PCMCIAType pCMCIAField; - - private string copyProtectionField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] ImageChecksums { - get { - return this.imageChecksumsField; - } - set { - this.imageChecksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - public string PartNumber { - get { - return this.partNumberField; - } - set { - this.partNumberField = value; - } - } - - /// - public string SerialNumber { - get { - return this.serialNumberField; - } - set { - this.serialNumberField = value; - } - } - - /// - public string Title { - get { - return this.titleField; - } - set { - this.titleField = value; - } - } - - /// - public uint Sequence { - get { - return this.sequenceField; - } - set { - this.sequenceField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool SequenceSpecified { - get { - return this.sequenceFieldSpecified; - } - set { - this.sequenceFieldSpecified = value; - } - } - - /// - public uint ImageInterleave { - get { - return this.imageInterleaveField; - } - set { - this.imageInterleaveField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool ImageInterleaveSpecified { - get { - return this.imageInterleaveFieldSpecified; - } - set { - this.imageInterleaveFieldSpecified = value; - } - } - - /// - public uint Interleave { - get { - return this.interleaveField; - } - set { - this.interleaveField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool InterleaveSpecified { - get { - return this.interleaveFieldSpecified; - } - set { - this.interleaveFieldSpecified = value; - } - } - - /// - public string Manufacturer { - get { - return this.manufacturerField; - } - set { - this.manufacturerField = value; - } - } - - /// - public string Model { - get { - return this.modelField; - } - set { - this.modelField = value; - } - } - - /// - public string Package { - get { - return this.packageField; - } - set { - this.packageField = value; - } - } - - /// - public string Interface { - get { - return this.interfaceField; - } - set { - this.interfaceField = value; - } - } - - /// - public DimensionsType Dimensions { - get { - return this.dimensionsField; - } - set { - this.dimensionsField = value; - } - } - - /// - public ScansType Scans { - get { - return this.scansField; - } - set { - this.scansField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("DumpHardware", IsNullable=false)] - public DumpHardwareType[] DumpHardwareArray { - get { - return this.dumpHardwareArrayField; - } - set { - this.dumpHardwareArrayField = value; - } - } - - /// - public PCMCIAType PCMCIA { - get { - return this.pCMCIAField; - } - set { - this.pCMCIAField = value; - } - } - - /// - public string CopyProtection { - get { - return this.copyProtectionField; - } - set { - this.copyProtectionField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class PCMCIAType { - - private DumpType cISField; - - private string complianceField; - - private ushort manufacturerCodeField; - - private bool manufacturerCodeFieldSpecified; - - private ushort cardCodeField; - - private bool cardCodeFieldSpecified; - - private string manufacturerField; - - private string productNameField; - - private string[] additionalInformationField; - - /// - public DumpType CIS { - get { - return this.cISField; - } - set { - this.cISField = value; - } - } - - /// - public string Compliance { - get { - return this.complianceField; - } - set { - this.complianceField = value; - } - } - - /// - public ushort ManufacturerCode { - get { - return this.manufacturerCodeField; - } - set { - this.manufacturerCodeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool ManufacturerCodeSpecified { - get { - return this.manufacturerCodeFieldSpecified; - } - set { - this.manufacturerCodeFieldSpecified = value; - } - } - - /// - public ushort CardCode { - get { - return this.cardCodeField; - } - set { - this.cardCodeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CardCodeSpecified { - get { - return this.cardCodeFieldSpecified; - } - set { - this.cardCodeFieldSpecified = value; - } - } - - /// - public string Manufacturer { - get { - return this.manufacturerField; - } - set { - this.manufacturerField = value; - } - } - - /// - public string ProductName { - get { - return this.productNameField; - } - set { - this.productNameField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("AdditionalInformation")] - public string[] AdditionalInformation { - get { - return this.additionalInformationField; - } - set { - this.additionalInformationField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class PartitionType { - - private uint sequenceField; - - private string nameField; - - private string typeField; - - private ulong startSectorField; - - private ulong endSectorField; - - private string descriptionField; - - private FileSystemType[] fileSystemsField; - - /// - public uint Sequence { - get { - return this.sequenceField; - } - set { - this.sequenceField = value; - } - } - - /// - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - public string Type { - get { - return this.typeField; - } - set { - this.typeField = value; - } - } - - /// - public ulong StartSector { - get { - return this.startSectorField; - } - set { - this.startSectorField = value; - } - } - - /// - public ulong EndSector { - get { - return this.endSectorField; - } - set { - this.endSectorField = value; - } - } - - /// - public string Description { - get { - return this.descriptionField; - } - set { - this.descriptionField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("FileSystem", IsNullable=false)] - public FileSystemType[] FileSystems { - get { - return this.fileSystemsField; - } - set { - this.fileSystemsField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class FileSystemType { - - private string typeField; - - private System.DateTime creationDateField; - - private bool creationDateFieldSpecified; - - private System.DateTime modificationDateField; - - private bool modificationDateFieldSpecified; - - private System.DateTime backupDateField; - - private bool backupDateFieldSpecified; - - private uint clusterSizeField; - - private ulong clustersField; - - private ulong filesField; - - private bool filesFieldSpecified; - - private bool bootableField; - - private string volumeSerialField; - - private string volumeNameField; - - private ulong freeClustersField; - - private bool freeClustersFieldSpecified; - - private bool dirtyField; - - private System.DateTime expirationDateField; - - private bool expirationDateFieldSpecified; - - private System.DateTime effectiveDateField; - - private bool effectiveDateFieldSpecified; - - private string systemIdentifierField; - - private string volumeSetIdentifierField; - - private string publisherIdentifierField; - - private string dataPreparerIdentifierField; - - private string applicationIdentifierField; - - private FilesystemContentsType contentsField; - - /// - public string Type { - get { - return this.typeField; - } - set { - this.typeField = value; - } - } - - /// - public System.DateTime CreationDate { - get { - return this.creationDateField; - } - set { - this.creationDateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool CreationDateSpecified { - get { - return this.creationDateFieldSpecified; - } - set { - this.creationDateFieldSpecified = value; - } - } - - /// - public System.DateTime ModificationDate { - get { - return this.modificationDateField; - } - set { - this.modificationDateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool ModificationDateSpecified { - get { - return this.modificationDateFieldSpecified; - } - set { - this.modificationDateFieldSpecified = value; - } - } - - /// - public System.DateTime BackupDate { - get { - return this.backupDateField; - } - set { - this.backupDateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool BackupDateSpecified { - get { - return this.backupDateFieldSpecified; - } - set { - this.backupDateFieldSpecified = value; - } - } - - /// - public uint ClusterSize { - get { - return this.clusterSizeField; - } - set { - this.clusterSizeField = value; - } - } - - /// - public ulong Clusters { - get { - return this.clustersField; - } - set { - this.clustersField = value; - } - } - - /// - public ulong Files { - get { - return this.filesField; - } - set { - this.filesField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool FilesSpecified { - get { - return this.filesFieldSpecified; - } - set { - this.filesFieldSpecified = value; - } - } - - /// - public bool Bootable { - get { - return this.bootableField; - } - set { - this.bootableField = value; - } - } - - /// - public string VolumeSerial { - get { - return this.volumeSerialField; - } - set { - this.volumeSerialField = value; - } - } - - /// - public string VolumeName { - get { - return this.volumeNameField; - } - set { - this.volumeNameField = value; - } - } - - /// - public ulong FreeClusters { - get { - return this.freeClustersField; - } - set { - this.freeClustersField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool FreeClustersSpecified { - get { - return this.freeClustersFieldSpecified; - } - set { - this.freeClustersFieldSpecified = value; - } - } - - /// - public bool Dirty { - get { - return this.dirtyField; - } - set { - this.dirtyField = value; - } - } - - /// - public System.DateTime ExpirationDate { - get { - return this.expirationDateField; - } - set { - this.expirationDateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool ExpirationDateSpecified { - get { - return this.expirationDateFieldSpecified; - } - set { - this.expirationDateFieldSpecified = value; - } - } - - /// - public System.DateTime EffectiveDate { - get { - return this.effectiveDateField; - } - set { - this.effectiveDateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool EffectiveDateSpecified { - get { - return this.effectiveDateFieldSpecified; - } - set { - this.effectiveDateFieldSpecified = value; - } - } - - /// - public string SystemIdentifier { - get { - return this.systemIdentifierField; - } - set { - this.systemIdentifierField = value; - } - } - - /// - public string VolumeSetIdentifier { - get { - return this.volumeSetIdentifierField; - } - set { - this.volumeSetIdentifierField = value; - } - } - - /// - public string PublisherIdentifier { - get { - return this.publisherIdentifierField; - } - set { - this.publisherIdentifierField = value; - } - } - - /// - public string DataPreparerIdentifier { - get { - return this.dataPreparerIdentifierField; - } - set { - this.dataPreparerIdentifierField = value; - } - } - - /// - public string ApplicationIdentifier { - get { - return this.applicationIdentifierField; - } - set { - this.applicationIdentifierField = value; - } - } - - /// - public FilesystemContentsType Contents { - get { - return this.contentsField; - } - set { - this.contentsField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class FilesystemContentsType { - - private ContentsFileType[] fileField; - - private DirectoryType[] directoryField; - - private string namespaceField; - - /// - [System.Xml.Serialization.XmlElementAttribute("File")] - public ContentsFileType[] File { - get { - return this.fileField; - } - set { - this.fileField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Directory")] - public DirectoryType[] Directory { - get { - return this.directoryField; - } - set { - this.directoryField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string @namespace { - get { - return this.namespaceField; - } - set { - this.namespaceField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ContentsFileType { - - private ChecksumType[] checksumsField; - - private ExtendedAttributeType[] extendedAttributesField; - - private string nameField; - - private System.DateTime creationTimeField; - - private bool creationTimeFieldSpecified; - - private System.DateTime accessTimeField; - - private bool accessTimeFieldSpecified; - - private System.DateTime statusChangeTimeField; - - private bool statusChangeTimeFieldSpecified; - - private System.DateTime backupTimeField; - - private bool backupTimeFieldSpecified; - - private System.DateTime lastWriteTimeField; - - private bool lastWriteTimeFieldSpecified; - - private ulong attributesField; - - private uint posixModeField; - - private bool posixModeFieldSpecified; - - private ulong deviceNumberField; - - private bool deviceNumberFieldSpecified; - - private ulong posixGroupIdField; - - private bool posixGroupIdFieldSpecified; - - private ulong inodeField; - - private ulong linksField; - - private ulong posixUserIdField; - - private bool posixUserIdFieldSpecified; - - private ulong lengthField; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("ExtendedAttribute", IsNullable=false)] - public ExtendedAttributeType[] ExtendedAttributes { - get { - return this.extendedAttributesField; - } - set { - this.extendedAttributesField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime creationTime { - get { - return this.creationTimeField; - } - set { - this.creationTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool creationTimeSpecified { - get { - return this.creationTimeFieldSpecified; - } - set { - this.creationTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime accessTime { - get { - return this.accessTimeField; - } - set { - this.accessTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool accessTimeSpecified { - get { - return this.accessTimeFieldSpecified; - } - set { - this.accessTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime statusChangeTime { - get { - return this.statusChangeTimeField; - } - set { - this.statusChangeTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool statusChangeTimeSpecified { - get { - return this.statusChangeTimeFieldSpecified; - } - set { - this.statusChangeTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime backupTime { - get { - return this.backupTimeField; - } - set { - this.backupTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool backupTimeSpecified { - get { - return this.backupTimeFieldSpecified; - } - set { - this.backupTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime lastWriteTime { - get { - return this.lastWriteTimeField; - } - set { - this.lastWriteTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool lastWriteTimeSpecified { - get { - return this.lastWriteTimeFieldSpecified; - } - set { - this.lastWriteTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong attributes { - get { - return this.attributesField; - } - set { - this.attributesField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint posixMode { - get { - return this.posixModeField; - } - set { - this.posixModeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool posixModeSpecified { - get { - return this.posixModeFieldSpecified; - } - set { - this.posixModeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong deviceNumber { - get { - return this.deviceNumberField; - } - set { - this.deviceNumberField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool deviceNumberSpecified { - get { - return this.deviceNumberFieldSpecified; - } - set { - this.deviceNumberFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong posixGroupId { - get { - return this.posixGroupIdField; - } - set { - this.posixGroupIdField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool posixGroupIdSpecified { - get { - return this.posixGroupIdFieldSpecified; - } - set { - this.posixGroupIdFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong inode { - get { - return this.inodeField; - } - set { - this.inodeField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong links { - get { - return this.linksField; - } - set { - this.linksField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong posixUserId { - get { - return this.posixUserIdField; - } - set { - this.posixUserIdField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool posixUserIdSpecified { - get { - return this.posixUserIdFieldSpecified; - } - set { - this.posixUserIdFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong length { - get { - return this.lengthField; - } - set { - this.lengthField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class ExtendedAttributeType { - - private ChecksumType[] checksumsField; - - private string nameField; - - private ulong lengthField; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong length { - get { - return this.lengthField; - } - set { - this.lengthField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class DirectoryType { - - private ContentsFileType[] fileField; - - private DirectoryType[] directoryField; - - private string nameField; - - private System.DateTime creationTimeField; - - private bool creationTimeFieldSpecified; - - private System.DateTime accessTimeField; - - private bool accessTimeFieldSpecified; - - private System.DateTime statusChangeTimeField; - - private bool statusChangeTimeFieldSpecified; - - private System.DateTime backupTimeField; - - private bool backupTimeFieldSpecified; - - private System.DateTime lastWriteTimeField; - - private bool lastWriteTimeFieldSpecified; - - private ulong attributesField; - - private uint posixModeField; - - private bool posixModeFieldSpecified; - - private ulong deviceNumberField; - - private bool deviceNumberFieldSpecified; - - private ulong posixGroupIdField; - - private bool posixGroupIdFieldSpecified; - - private ulong inodeField; - - private bool inodeFieldSpecified; - - private ulong linksField; - - private bool linksFieldSpecified; - - private ulong posixUserIdField; - - private bool posixUserIdFieldSpecified; - - /// - [System.Xml.Serialization.XmlElementAttribute("File")] - public ContentsFileType[] File { - get { - return this.fileField; - } - set { - this.fileField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Directory")] - public DirectoryType[] Directory { - get { - return this.directoryField; - } - set { - this.directoryField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime creationTime { - get { - return this.creationTimeField; - } - set { - this.creationTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool creationTimeSpecified { - get { - return this.creationTimeFieldSpecified; - } - set { - this.creationTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime accessTime { - get { - return this.accessTimeField; - } - set { - this.accessTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool accessTimeSpecified { - get { - return this.accessTimeFieldSpecified; - } - set { - this.accessTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime statusChangeTime { - get { - return this.statusChangeTimeField; - } - set { - this.statusChangeTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool statusChangeTimeSpecified { - get { - return this.statusChangeTimeFieldSpecified; - } - set { - this.statusChangeTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime backupTime { - get { - return this.backupTimeField; - } - set { - this.backupTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool backupTimeSpecified { - get { - return this.backupTimeFieldSpecified; - } - set { - this.backupTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public System.DateTime lastWriteTime { - get { - return this.lastWriteTimeField; - } - set { - this.lastWriteTimeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool lastWriteTimeSpecified { - get { - return this.lastWriteTimeFieldSpecified; - } - set { - this.lastWriteTimeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong attributes { - get { - return this.attributesField; - } - set { - this.attributesField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint posixMode { - get { - return this.posixModeField; - } - set { - this.posixModeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool posixModeSpecified { - get { - return this.posixModeFieldSpecified; - } - set { - this.posixModeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong deviceNumber { - get { - return this.deviceNumberField; - } - set { - this.deviceNumberField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool deviceNumberSpecified { - get { - return this.deviceNumberFieldSpecified; - } - set { - this.deviceNumberFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong posixGroupId { - get { - return this.posixGroupIdField; - } - set { - this.posixGroupIdField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool posixGroupIdSpecified { - get { - return this.posixGroupIdFieldSpecified; - } - set { - this.posixGroupIdFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong inode { - get { - return this.inodeField; - } - set { - this.inodeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool inodeSpecified { - get { - return this.inodeFieldSpecified; - } - set { - this.inodeFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong links { - get { - return this.linksField; - } - set { - this.linksField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool linksSpecified { - get { - return this.linksFieldSpecified; - } - set { - this.linksFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ulong posixUserId { - get { - return this.posixUserIdField; - } - set { - this.posixUserIdField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool posixUserIdSpecified { - get { - return this.posixUserIdFieldSpecified; - } - set { - this.posixUserIdFieldSpecified = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class CoordinatesType { - - private double latitudeField; - - private double longitudeField; - - /// - public double Latitude { - get { - return this.latitudeField; - } - set { - this.latitudeField = value; - } - } - - /// - public double Longitude { - get { - return this.longitudeField; - } - set { - this.longitudeField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class RecordingType { - - private string broadcasterField; - - private string broadcastPlatformField; - - private RecordingTypeSourceFormat sourceFormatField; - - private System.DateTime timestampField; - - private SoftwareType[] softwareField; - - private CoordinatesType coordinatesField; - - /// - public string Broadcaster { - get { - return this.broadcasterField; - } - set { - this.broadcasterField = value; - } - } - - /// - public string BroadcastPlatform { - get { - return this.broadcastPlatformField; - } - set { - this.broadcastPlatformField = value; - } - } - - /// - public RecordingTypeSourceFormat SourceFormat { - get { - return this.sourceFormatField; - } - set { - this.sourceFormatField = value; - } - } - - /// - public System.DateTime Timestamp { - get { - return this.timestampField; - } - set { - this.timestampField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Software")] - public SoftwareType[] Software { - get { - return this.softwareField; - } - set { - this.softwareField = value; - } - } - - /// - public CoordinatesType Coordinates { - get { - return this.coordinatesField; - } - set { - this.coordinatesField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum RecordingTypeSourceFormat { - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-A")] - ITUA, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-B")] - ITUB, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-C")] - ITUC, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-D")] - ITUD, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-E")] - ITUE, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-F")] - ITUF, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-G")] - ITUG, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-H")] - ITUH, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-I")] - ITUI, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-J")] - ITUJ, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-K")] - ITUK, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-L")] - ITUL, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-M")] - ITUM, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ITU-N")] - ITUN, - - /// - [System.Xml.Serialization.XmlEnumAttribute("PAL-B")] - PALB, - - /// - [System.Xml.Serialization.XmlEnumAttribute("SECAM-B")] - SECAMB, - - /// - [System.Xml.Serialization.XmlEnumAttribute("PAL-D")] - PALD, - - /// - [System.Xml.Serialization.XmlEnumAttribute("SECAM-D")] - SECAMD, - - /// - [System.Xml.Serialization.XmlEnumAttribute("PAL-G")] - PALG, - - /// - [System.Xml.Serialization.XmlEnumAttribute("SECAM-G")] - SECAMG, - - /// - [System.Xml.Serialization.XmlEnumAttribute("PAL-H")] - PALH, - - /// - [System.Xml.Serialization.XmlEnumAttribute("PAL-I")] - PALI, - - /// - [System.Xml.Serialization.XmlEnumAttribute("PAL-K")] - PALK, - - /// - [System.Xml.Serialization.XmlEnumAttribute("SECAM-K")] - SECAMK, - - /// - [System.Xml.Serialization.XmlEnumAttribute("NTSC-M")] - NTSCM, - - /// - [System.Xml.Serialization.XmlEnumAttribute("PAL-N")] - PALN, - - /// - [System.Xml.Serialization.XmlEnumAttribute("PAL-M")] - PALM, - - /// - [System.Xml.Serialization.XmlEnumAttribute("SECAM-M")] - SECAMM, - - /// - MUSE, - - /// - PALplus, - - /// - FM, - - /// - AM, - - /// - COFDM, - - /// - [System.Xml.Serialization.XmlEnumAttribute("CAM-D")] - CAMD, - - /// - DAB, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DAB+")] - DAB1, - - /// - DRM, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DRM+")] - DRM1, - - /// - FMeXtra, - - /// - ATSC, - - /// - ATSC2, - - /// - ATSC3, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ATSC-M/H")] - ATSCMH, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-T")] - DVBT, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-T2")] - DVBT2, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-S")] - DVBS, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-S2")] - DVBS2, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-S2X")] - DVBS2X, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-C")] - DVBC, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-C2")] - DVBC2, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-H")] - DVBH, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-NGH")] - DVBNGH, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-SH")] - DVBSH, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ISDB-T")] - ISDBT, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ISDB-Tb")] - ISDBTb, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ISDB-S")] - ISDBS, - - /// - [System.Xml.Serialization.XmlEnumAttribute("ISDB-C")] - ISDBC, - - /// - [System.Xml.Serialization.XmlEnumAttribute("1seg")] - Item1seg, - - /// - DTMB, - - /// - CCMB, - - /// - [System.Xml.Serialization.XmlEnumAttribute("T-DMB")] - TDMB, - - /// - [System.Xml.Serialization.XmlEnumAttribute("S-DMB")] - SDMB, - - /// - IPTV, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-MT")] - DVBMT, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-MC")] - DVBMC, - - /// - [System.Xml.Serialization.XmlEnumAttribute("DVB-MS")] - DVBMS, - - /// - ADR, - - /// - SDR, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class SubtitleTracksType { - - private LanguagesTypeLanguage[] languagesField; - - private uint trackNumberField; - - private string codecField; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Language", IsNullable=false)] - public LanguagesTypeLanguage[] Languages { - get { - return this.languagesField; - } - set { - this.languagesField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint TrackNumber { - get { - return this.trackNumberField; - } - set { - this.trackNumberField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string Codec { - get { - return this.codecField; - } - set { - this.codecField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class VideoTracksType { - - private LanguagesTypeLanguage[] languagesField; - - private uint trackNumberField; - - private string codecField; - - private uint horizontalField; - - private uint verticalField; - - private long meanBitrateField; - - private bool threeDField; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Language", IsNullable=false)] - public LanguagesTypeLanguage[] Languages { - get { - return this.languagesField; - } - set { - this.languagesField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint TrackNumber { - get { - return this.trackNumberField; - } - set { - this.trackNumberField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string Codec { - get { - return this.codecField; - } - set { - this.codecField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint Horizontal { - get { - return this.horizontalField; - } - set { - this.horizontalField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint Vertical { - get { - return this.verticalField; - } - set { - this.verticalField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public long MeanBitrate { - get { - return this.meanBitrateField; - } - set { - this.meanBitrateField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public bool ThreeD { - get { - return this.threeDField; - } - set { - this.threeDField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class AudioTracksType { - - private LanguagesTypeLanguage[] languagesField; - - private uint trackNumberField; - - private string accoustIDField; - - private string codecField; - - private uint channelsField; - - private double sampleRateField; - - private long meanBitrateField; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Language", IsNullable=false)] - public LanguagesTypeLanguage[] Languages { - get { - return this.languagesField; - } - set { - this.languagesField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint TrackNumber { - get { - return this.trackNumberField; - } - set { - this.trackNumberField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string AccoustID { - get { - return this.accoustIDField; - } - set { - this.accoustIDField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string Codec { - get { - return this.codecField; - } - set { - this.codecField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint Channels { - get { - return this.channelsField; - } - set { - this.channelsField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public double SampleRate { - get { - return this.sampleRateField; - } - set { - this.sampleRateField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public long MeanBitrate { - get { - return this.meanBitrateField; - } - set { - this.meanBitrateField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class AdvertisementType { - - private string manufacturerField; - - private string productField; - - private FileType fileField; - - private ulong fileSizeField; - - private ulong framesField; - - private bool framesFieldSpecified; - - private double durationField; - - private float meanFrameRateField; - - private bool meanFrameRateFieldSpecified; - - private ChecksumType[] checksumsField; - - private AudioTracksType[] audioTrackField; - - private VideoTracksType[] videoTrackField; - - private SubtitleTracksType[] subtitleTrackField; - - private RecordingType recordingField; - - /// - public string Manufacturer { - get { - return this.manufacturerField; - } - set { - this.manufacturerField = value; - } - } - - /// - public string Product { - get { - return this.productField; - } - set { - this.productField = value; - } - } - - /// - public FileType File { - get { - return this.fileField; - } - set { - this.fileField = value; - } - } - - /// - public ulong FileSize { - get { - return this.fileSizeField; - } - set { - this.fileSizeField = value; - } - } - - /// - public ulong Frames { - get { - return this.framesField; - } - set { - this.framesField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool FramesSpecified { - get { - return this.framesFieldSpecified; - } - set { - this.framesFieldSpecified = value; - } - } - - /// - public double Duration { - get { - return this.durationField; - } - set { - this.durationField = value; - } - } - - /// - public float MeanFrameRate { - get { - return this.meanFrameRateField; - } - set { - this.meanFrameRateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool MeanFrameRateSpecified { - get { - return this.meanFrameRateFieldSpecified; - } - set { - this.meanFrameRateFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("AudioTrack")] - public AudioTracksType[] AudioTrack { - get { - return this.audioTrackField; - } - set { - this.audioTrackField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("VideoTrack")] - public VideoTracksType[] VideoTrack { - get { - return this.videoTrackField; - } - set { - this.videoTrackField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("SubtitleTrack")] - public SubtitleTracksType[] SubtitleTrack { - get { - return this.subtitleTrackField; - } - set { - this.subtitleTrackField = value; - } - } - - /// - public RecordingType Recording { - get { - return this.recordingField; - } - set { - this.recordingField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class SubChannelType { - - private ImageType imageField; - - private ulong sizeField; - - private ChecksumType[] checksumsField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class TrackFlagsType { - - private bool quadraphonicField; - - private bool dataField; - - private bool copyPermittedField; - - private bool preEmphasisField; - - /// - public bool Quadraphonic { - get { - return this.quadraphonicField; - } - set { - this.quadraphonicField = value; - } - } - - /// - public bool Data { - get { - return this.dataField; - } - set { - this.dataField = value; - } - } - - /// - public bool CopyPermitted { - get { - return this.copyPermittedField; - } - set { - this.copyPermittedField = value; - } - } - - /// - public bool PreEmphasis { - get { - return this.preEmphasisField; - } - set { - this.preEmphasisField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class TrackIndexType { - - private ushort indexField; - - private int valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public ushort index { - get { - return this.indexField; - } - set { - this.indexField = value; - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public int Value { - get { - return this.valueField; - } - set { - this.valueField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class TrackSequenceType { - - private uint trackNumberField; - - private uint sessionField; - - /// - public uint TrackNumber { - get { - return this.trackNumberField; - } - set { - this.trackNumberField = value; - } - } - - /// - public uint Session { - get { - return this.sessionField; - } - set { - this.sessionField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class TrackType { - - private ImageType imageField; - - private ulong sizeField; - - private TrackSequenceType sequenceField; - - private string startMSFField; - - private string endMSFField; - - private ulong startSectorField; - - private ulong endSectorField; - - private TrackIndexType[] indexesField; - - private TrackFlagsType flagsField; - - private string iSRCField; - - private TrackTypeTrackType trackType1Field; - - private uint bytesPerSectorField; - - private string accoustIDField; - - private ChecksumType[] checksumsField; - - private SubChannelType subChannelField; - - private PartitionType[] fileSystemInformationField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - public TrackSequenceType Sequence { - get { - return this.sequenceField; - } - set { - this.sequenceField = value; - } - } - - /// - public string StartMSF { - get { - return this.startMSFField; - } - set { - this.startMSFField = value; - } - } - - /// - public string EndMSF { - get { - return this.endMSFField; - } - set { - this.endMSFField = value; - } - } - - /// - public ulong StartSector { - get { - return this.startSectorField; - } - set { - this.startSectorField = value; - } - } - - /// - public ulong EndSector { - get { - return this.endSectorField; - } - set { - this.endSectorField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Index", IsNullable=false)] - public TrackIndexType[] Indexes { - get { - return this.indexesField; - } - set { - this.indexesField = value; - } - } - - /// - public TrackFlagsType Flags { - get { - return this.flagsField; - } - set { - this.flagsField = value; - } - } - - /// - public string ISRC { - get { - return this.iSRCField; - } - set { - this.iSRCField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("TrackType")] - public TrackTypeTrackType TrackType1 { - get { - return this.trackType1Field; - } - set { - this.trackType1Field = value; - } - } - - /// - public uint BytesPerSector { - get { - return this.bytesPerSectorField; - } - set { - this.bytesPerSectorField = value; - } - } - - /// - public string AccoustID { - get { - return this.accoustIDField; - } - set { - this.accoustIDField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - public SubChannelType SubChannel { - get { - return this.subChannelField; - } - set { - this.subChannelField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Partition", IsNullable=false)] - public PartitionType[] FileSystemInformation { - get { - return this.fileSystemInformationField; - } - set { - this.fileSystemInformationField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum TrackTypeTrackType { - - /// - audio, - - /// - mode0, - - /// - mode1, - - /// - mode2, - - /// - m2f1, - - /// - m2f2, - - /// - dvd, - - /// - hddvd, - - /// - bluray, - - /// - ddcd, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class PS3EncryptionType { - - private string keyField; - - private string serialField; - - /// - public string Key { - get { - return this.keyField; - } - set { - this.keyField = value; - } - } - - /// - public string Serial { - get { - return this.serialField; - } - set { - this.serialField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class XboxSecuritySectorsType { - - private uint requestVersionField; - - private uint requestNumberField; - - private DumpType securitySectorsField; - - /// - public uint RequestVersion { - get { - return this.requestVersionField; - } - set { - this.requestVersionField = value; - } - } - - /// - public uint RequestNumber { - get { - return this.requestNumberField; - } - set { - this.requestNumberField = value; - } - } - - /// - public DumpType SecuritySectors { - get { - return this.securitySectorsField; - } - set { - this.securitySectorsField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class XboxType { - - private DumpType pFIField; - - private DumpType dMIField; - - private XboxSecuritySectorsType[] securitySectorsField; - - /// - public DumpType PFI { - get { - return this.pFIField; - } - set { - this.pFIField = value; - } - } - - /// - public DumpType DMI { - get { - return this.dMIField; - } - set { - this.dMIField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("SecuritySectors")] - public XboxSecuritySectorsType[] SecuritySectors { - get { - return this.securitySectorsField; - } - set { - this.securitySectorsField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class BorderType { - - private string imageField; - - private ulong sizeField; - - private ChecksumType[] checksumsField; - - private uint sessionField; - - private bool sessionFieldSpecified; - - /// - public string Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint session { - get { - return this.sessionField; - } - set { - this.sessionField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool sessionSpecified { - get { - return this.sessionFieldSpecified; - } - set { - this.sessionFieldSpecified = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class CaseType { - - private CaseTypeCaseType caseType1Field; - - private ScansType scansField; - - /// - [System.Xml.Serialization.XmlElementAttribute("CaseType")] - public CaseTypeCaseType CaseType1 { - get { - return this.caseType1Field; - } - set { - this.caseType1Field = value; - } - } - - /// - public ScansType Scans { - get { - return this.scansField; - } - set { - this.scansField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum CaseTypeCaseType { - - /// - jewel, - - /// - bigjewel, - - /// - slimjewel, - - /// - sleeve, - - /// - qpack, - - /// - digisleeve, - - /// - discboxslider, - - /// - compacplus, - - /// - keepcase, - - /// - snapcase, - - /// - softcase, - - /// - ecopack, - - /// - liftlock, - - /// - spindle, - - /// - ps2case, - - /// - ps3case, - - /// - bluraykeepcase, - - /// - pscase, - - /// - dccase, - - /// - saturncase, - - /// - xboxcase, - - /// - xbox360case, - - /// - xboxonecase, - - /// - saturnbigcase, - - /// - gccase, - - /// - wiicase, - - /// - unknown, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class LayeredTextType { - - private uint layerField; - - private bool layerFieldSpecified; - - private string valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint layer { - get { - return this.layerField; - } - set { - this.layerField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool layerSpecified { - get { - return this.layerFieldSpecified; - } - set { - this.layerFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public string Value { - get { - return this.valueField; - } - set { - this.valueField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class SectorsType { - - private uint layerField; - - private bool layerFieldSpecified; - - private ulong valueField; - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public uint layer { - get { - return this.layerField; - } - set { - this.layerField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool layerSpecified { - get { - return this.layerFieldSpecified; - } - set { - this.layerFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlTextAttribute()] - public ulong Value { - get { - return this.valueField; - } - set { - this.valueField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class LayersType { - - private SectorsType[] sectorsField; - - private LayersTypeType typeField; - - private bool typeFieldSpecified; - - /// - [System.Xml.Serialization.XmlElementAttribute("Sectors")] - public SectorsType[] Sectors { - get { - return this.sectorsField; - } - set { - this.sectorsField = value; - } - } - - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public LayersTypeType type { - get { - return this.typeField; - } - set { - this.typeField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool typeSpecified { - get { - return this.typeFieldSpecified; - } - set { - this.typeFieldSpecified = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum LayersTypeType { - - /// - PTP, - - /// - OTP, - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class OpticalDiscType { - - private ImageType imageField; - - private ulong sizeField; - - private SequenceType sequenceField; - - private LayersType layersField; - - private ChecksumType[] checksumsField; - - private string partNumberField; - - private string serialNumberField; - - private LayeredTextType[] ringCodeField; - - private LayeredTextType[] masteringSIDField; - - private LayeredTextType[] toolstampField; - - private LayeredTextType[] mouldSIDField; - - private LayeredTextType[] mouldTextField; - - private string discTypeField; - - private string discSubTypeField; - - private int offsetField; - - private bool offsetFieldSpecified; - - private uint[] tracksField; - - private uint sessionsField; - - private string copyProtectionField; - - private DimensionsType dimensionsField; - - private CaseType caseField; - - private ScansType scansField; - - private DumpType pFIField; - - private DumpType dMIField; - - private DumpType cMIField; - - private DumpType bCAField; - - private DumpType aTIPField; - - private DumpType aDIPField; - - private DumpType pMAField; - - private DumpType dDSField; - - private DumpType sAIField; - - private DumpType lastRMDField; - - private DumpType pRIField; - - private DumpType mediaIDField; - - private DumpType pFIRField; - - private DumpType dCBField; - - private DumpType diField; - - private DumpType pACField; - - private DumpType tOCField; - - private DumpType leadInCdTextField; - - private BorderType[] firstTrackPregrapField; - - private BorderType[] leadInField; - - private BorderType[] leadOutField; - - private XboxType xboxField; - - private PS3EncryptionType pS3EncryptionField; - - private string mediaCatalogueNumberField; - - private TrackType[] trackField; - - private DumpHardwareType[] dumpHardwareArrayField; - - /// - public ImageType Image { - get { - return this.imageField; - } - set { - this.imageField = value; - } - } - - /// - public ulong Size { - get { - return this.sizeField; - } - set { - this.sizeField = value; - } - } - - /// - public SequenceType Sequence { - get { - return this.sequenceField; - } - set { - this.sequenceField = value; - } - } - - /// - public LayersType Layers { - get { - return this.layersField; - } - set { - this.layersField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - public string PartNumber { - get { - return this.partNumberField; - } - set { - this.partNumberField = value; - } - } - - /// - public string SerialNumber { - get { - return this.serialNumberField; - } - set { - this.serialNumberField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("RingCode")] - public LayeredTextType[] RingCode { - get { - return this.ringCodeField; - } - set { - this.ringCodeField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("MasteringSID")] - public LayeredTextType[] MasteringSID { - get { - return this.masteringSIDField; - } - set { - this.masteringSIDField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Toolstamp")] - public LayeredTextType[] Toolstamp { - get { - return this.toolstampField; - } - set { - this.toolstampField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("MouldSID")] - public LayeredTextType[] MouldSID { - get { - return this.mouldSIDField; - } - set { - this.mouldSIDField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("MouldText")] - public LayeredTextType[] MouldText { - get { - return this.mouldTextField; - } - set { - this.mouldTextField = value; - } - } - - /// - public string DiscType { - get { - return this.discTypeField; - } - set { - this.discTypeField = value; - } - } - - /// - public string DiscSubType { - get { - return this.discSubTypeField; - } - set { - this.discSubTypeField = value; - } - } - - /// - public int Offset { - get { - return this.offsetField; - } - set { - this.offsetField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool OffsetSpecified { - get { - return this.offsetFieldSpecified; - } - set { - this.offsetFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Tracks")] - public uint[] Tracks { - get { - return this.tracksField; - } - set { - this.tracksField = value; - } - } - - /// - public uint Sessions { - get { - return this.sessionsField; - } - set { - this.sessionsField = value; - } - } - - /// - public string CopyProtection { - get { - return this.copyProtectionField; - } - set { - this.copyProtectionField = value; - } - } - - /// - public DimensionsType Dimensions { - get { - return this.dimensionsField; - } - set { - this.dimensionsField = value; - } - } - - /// - public CaseType Case { - get { - return this.caseField; - } - set { - this.caseField = value; - } - } - - /// - public ScansType Scans { - get { - return this.scansField; - } - set { - this.scansField = value; - } - } - - /// - public DumpType PFI { - get { - return this.pFIField; - } - set { - this.pFIField = value; - } - } - - /// - public DumpType DMI { - get { - return this.dMIField; - } - set { - this.dMIField = value; - } - } - - /// - public DumpType CMI { - get { - return this.cMIField; - } - set { - this.cMIField = value; - } - } - - /// - public DumpType BCA { - get { - return this.bCAField; - } - set { - this.bCAField = value; - } - } - - /// - public DumpType ATIP { - get { - return this.aTIPField; - } - set { - this.aTIPField = value; - } - } - - /// - public DumpType ADIP { - get { - return this.aDIPField; - } - set { - this.aDIPField = value; - } - } - - /// - public DumpType PMA { - get { - return this.pMAField; - } - set { - this.pMAField = value; - } - } - - /// - public DumpType DDS { - get { - return this.dDSField; - } - set { - this.dDSField = value; - } - } - - /// - public DumpType SAI { - get { - return this.sAIField; - } - set { - this.sAIField = value; - } - } - - /// - public DumpType LastRMD { - get { - return this.lastRMDField; - } - set { - this.lastRMDField = value; - } - } - - /// - public DumpType PRI { - get { - return this.pRIField; - } - set { - this.pRIField = value; - } - } - - /// - public DumpType MediaID { - get { - return this.mediaIDField; - } - set { - this.mediaIDField = value; - } - } - - /// - public DumpType PFIR { - get { - return this.pFIRField; - } - set { - this.pFIRField = value; - } - } - - /// - public DumpType DCB { - get { - return this.dCBField; - } - set { - this.dCBField = value; - } - } - - /// - public DumpType DI { - get { - return this.diField; - } - set { - this.diField = value; - } - } - - /// - public DumpType PAC { - get { - return this.pACField; - } - set { - this.pACField = value; - } - } - - /// - public DumpType TOC { - get { - return this.tOCField; - } - set { - this.tOCField = value; - } - } - - /// - public DumpType LeadInCdText { - get { - return this.leadInCdTextField; - } - set { - this.leadInCdTextField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("FirstTrackPregrap")] - public BorderType[] FirstTrackPregrap { - get { - return this.firstTrackPregrapField; - } - set { - this.firstTrackPregrapField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("LeadIn")] - public BorderType[] LeadIn { - get { - return this.leadInField; - } - set { - this.leadInField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("LeadOut")] - public BorderType[] LeadOut { - get { - return this.leadOutField; - } - set { - this.leadOutField = value; - } - } - - /// - public XboxType Xbox { - get { - return this.xboxField; - } - set { - this.xboxField = value; - } - } - - /// - public PS3EncryptionType PS3Encryption { - get { - return this.pS3EncryptionField; - } - set { - this.pS3EncryptionField = value; - } - } - - /// - public string MediaCatalogueNumber { - get { - return this.mediaCatalogueNumberField; - } - set { - this.mediaCatalogueNumberField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Track")] - public TrackType[] Track { - get { - return this.trackField; - } - set { - this.trackField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("DumpHardware", IsNullable=false)] - public DumpHardwareType[] DumpHardwareArray { - get { - return this.dumpHardwareArrayField; - } - set { - this.dumpHardwareArrayField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class UserManualType { - - private LanguagesTypeLanguage[] languageField; - - private uint pagesField; - - private string pageSizeField; - - private ScanType scanField; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Language", IsNullable=false)] - public LanguagesTypeLanguage[] Language { - get { - return this.languageField; - } - set { - this.languageField = value; - } - } - - /// - public uint Pages { - get { - return this.pagesField; - } - set { - this.pagesField = value; - } - } - - /// - public string PageSize { - get { - return this.pageSizeField; - } - set { - this.pageSizeField = value; - } - } - - /// - public ScanType Scan { - get { - return this.scanField; - } - set { - this.scanField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class RequiredOperatingSystemType { - - private string nameField; - - private string[] versionField; - - /// - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute("Version")] - public string[] Version { - get { - return this.versionField; - } - set { - this.versionField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class BookType { - - private BarcodeType[] barcodesField; - - private CoverType coverField; - - private string nameField; - - private string editorialField; - - private string authorField; - - private System.DateTime publicationDateField; - - private bool publicationDateFieldSpecified; - - private LanguagesTypeLanguage[] languageField; - - private uint pagesField; - - private bool pagesFieldSpecified; - - private string pageSizeField; - - private ScanType scanField; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Barcode", IsNullable=false)] - public BarcodeType[] Barcodes { - get { - return this.barcodesField; - } - set { - this.barcodesField = value; - } - } - - /// - public CoverType Cover { - get { - return this.coverField; - } - set { - this.coverField = value; - } - } - - /// - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - public string Editorial { - get { - return this.editorialField; - } - set { - this.editorialField = value; - } - } - - /// - public string Author { - get { - return this.authorField; - } - set { - this.authorField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(DataType="date")] - public System.DateTime PublicationDate { - get { - return this.publicationDateField; - } - set { - this.publicationDateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool PublicationDateSpecified { - get { - return this.publicationDateFieldSpecified; - } - set { - this.publicationDateFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Language", IsNullable=false)] - public LanguagesTypeLanguage[] Language { - get { - return this.languageField; - } - set { - this.languageField = value; - } - } - - /// - public uint Pages { - get { - return this.pagesField; - } - set { - this.pagesField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool PagesSpecified { - get { - return this.pagesFieldSpecified; - } - set { - this.pagesFieldSpecified = value; - } - } - - /// - public string PageSize { - get { - return this.pageSizeField; - } - set { - this.pageSizeField = value; - } - } - - /// - public ScanType Scan { - get { - return this.scanField; - } - set { - this.scanField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class CoverType { - - private FileType fileField; - - private ChecksumType[] checksumsField; - - private byte[] thumbnailField; - - /// - public FileType File { - get { - return this.fileField; - } - set { - this.fileField = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Checksum", IsNullable=false)] - public ChecksumType[] Checksums { - get { - return this.checksumsField; - } - set { - this.checksumsField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] - public byte[] Thumbnail { - get { - return this.thumbnailField; - } - set { - this.thumbnailField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - public partial class MagazineType { - - private BarcodeType[] barcodesField; - - private CoverType coverField; - - private string nameField; - - private string editorialField; - - private System.DateTime publicationDateField; - - private bool publicationDateFieldSpecified; - - private uint numberField; - - private bool numberFieldSpecified; - - private LanguagesTypeLanguage[] languageField; - - private uint pagesField; - - private bool pagesFieldSpecified; - - private string pageSizeField; - - private ScanType scanField; - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Barcode", IsNullable=false)] - public BarcodeType[] Barcodes { - get { - return this.barcodesField; - } - set { - this.barcodesField = value; - } - } - - /// - public CoverType Cover { - get { - return this.coverField; - } - set { - this.coverField = value; - } - } - - /// - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - - /// - public string Editorial { - get { - return this.editorialField; - } - set { - this.editorialField = value; - } - } - - /// - [System.Xml.Serialization.XmlElementAttribute(DataType="date")] - public System.DateTime PublicationDate { - get { - return this.publicationDateField; - } - set { - this.publicationDateField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool PublicationDateSpecified { - get { - return this.publicationDateFieldSpecified; - } - set { - this.publicationDateFieldSpecified = value; - } - } - - /// - public uint Number { - get { - return this.numberField; - } - set { - this.numberField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool NumberSpecified { - get { - return this.numberFieldSpecified; - } - set { - this.numberFieldSpecified = value; - } - } - - /// - [System.Xml.Serialization.XmlArrayItemAttribute("Language", IsNullable=false)] - public LanguagesTypeLanguage[] Language { - get { - return this.languageField; - } - set { - this.languageField = value; - } - } - - /// - public uint Pages { - get { - return this.pagesField; - } - set { - this.pagesField = value; - } - } - - /// - [System.Xml.Serialization.XmlIgnoreAttribute()] - public bool PagesSpecified { - get { - return this.pagesFieldSpecified; - } - set { - this.pagesFieldSpecified = value; - } - } - - /// - public string PageSize { - get { - return this.pageSizeField; - } - set { - this.pageSizeField = value; - } - } - - /// - public ScanType Scan { - get { - return this.scanField; - } - set { - this.scanField = value; - } - } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "0.0.0.0")] - [System.SerializableAttribute()] - [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] - public enum ArchitecturesTypeArchitecture { - - /// - [System.Xml.Serialization.XmlEnumAttribute("4004")] - Item4004, - - /// - [System.Xml.Serialization.XmlEnumAttribute("4040")] - Item4040, - - /// - [System.Xml.Serialization.XmlEnumAttribute("6502")] - Item6502, - - /// - [System.Xml.Serialization.XmlEnumAttribute("65816")] - Item65816, - - /// - [System.Xml.Serialization.XmlEnumAttribute("8008")] - Item8008, - - /// - [System.Xml.Serialization.XmlEnumAttribute("8051")] - Item8051, - - /// - [System.Xml.Serialization.XmlEnumAttribute("8080")] - Item8080, - - /// - [System.Xml.Serialization.XmlEnumAttribute("8085")] - Item8085, - - /// - aarch64, - - /// - am29000, - - /// - amd64, - - /// - apx432, - - /// - arm, - - /// - avr, - - /// - avr32, - - /// - axp, - - /// - clipper, - - /// - cray, - - /// - esa390, - - /// - hobbit, - - /// - i86, - - /// - i860, - - /// - i960, - - /// - ia32, - - /// - ia64, - - /// - m56k, - - /// - m6800, - - /// - m6801, - - /// - m6805, - - /// - m6809, - - /// - m68k, - - /// - m88k, - - /// - mcs41, - - /// - mcs48, - - /// - mips32, - - /// - mips64, - - /// - msp430, - - /// - nios2, - - /// - openrisc, - - /// - parisc, - - /// - pdp1, - - /// - pdp10, - - /// - pdp11, - - /// - pdp7, - - /// - pdp8, - - /// - pic, - - /// - power, - - /// - ppc, - - /// - ppc64, - - /// - prism, - - /// - renesasrx, - - /// - riscv, - - /// - s360, - - /// - s370, - - /// - sh, - - /// - sh1, - - /// - sh2, - - /// - sh3, - - /// - sh4, - - /// - sh5, - - /// - sh64, - - /// - sparc, - - /// - sparc64, - - /// - transputer, - - /// - vax, - - /// - we32000, - - /// - x32, - - /// - z80, - - /// - z800, - - /// - z8000, - - /// - z80000, - - /// - zarch, - } -} diff --git a/CICMMetadata/dotnet/cicm.vb b/CICMMetadata/dotnet/cicm.vb deleted file mode 100644 index ea33ddb..0000000 --- a/CICMMetadata/dotnet/cicm.vb +++ /dev/null @@ -1,9093 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' Runtime Version:4.0.30319.42000 -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - -Option Strict Off -Option Explicit On - - -' -'This source code was auto-generated by MonoXSD -' -Namespace Schemas - - ''' - _ - Partial Public Class CICMMetadataType - - Private developerField() As String - - Private publisherField() As String - - Private authorField() As String - - Private performerField() As String - - Private nameField As String - - Private versionField As String - - Private releaseTypeField As CICMMetadataTypeReleaseType - - Private releaseTypeFieldSpecified As Boolean - - Private releaseDateField As Date - - Private releaseDateFieldSpecified As Boolean - - Private barcodesField() As BarcodeType - - Private partNumberField As String - - Private serialNumberField As String - - Private keywordsField() As String - - Private magazineField() As MagazineType - - Private bookField() As BookType - - Private categoriesField() As String - - Private subcategoriesField() As String - - Private languagesField() As LanguagesTypeLanguage - - Private systemsField() As String - - Private architecturesField() As ArchitecturesTypeArchitecture - - Private requiredOperatingSystemsField() As RequiredOperatingSystemType - - Private userManualField() As UserManualType - - Private opticalDiscField() As OpticalDiscType - - Private advertisementField() As AdvertisementType - - Private linearMediaField() As LinearMediaType - - Private pCICardField() As PCIType - - Private blockMediaField() As BlockMediaType - - Private audioMediaField() As AudioMediaType - - ''' - _ - Public Property Developer() As String() - Get - Return Me.developerField - End Get - Set - Me.developerField = value - End Set - End Property - - ''' - _ - Public Property Publisher() As String() - Get - Return Me.publisherField - End Get - Set - Me.publisherField = value - End Set - End Property - - ''' - _ - Public Property Author() As String() - Get - Return Me.authorField - End Get - Set - Me.authorField = value - End Set - End Property - - ''' - _ - Public Property Performer() As String() - Get - Return Me.performerField - End Get - Set - Me.performerField = value - End Set - End Property - - ''' - Public Property Name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - Public Property Version() As String - Get - Return Me.versionField - End Get - Set - Me.versionField = value - End Set - End Property - - ''' - Public Property ReleaseType() As CICMMetadataTypeReleaseType - Get - Return Me.releaseTypeField - End Get - Set - Me.releaseTypeField = value - End Set - End Property - - ''' - _ - Public Property ReleaseTypeSpecified() As Boolean - Get - Return Me.releaseTypeFieldSpecified - End Get - Set - Me.releaseTypeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property ReleaseDate() As Date - Get - Return Me.releaseDateField - End Get - Set - Me.releaseDateField = value - End Set - End Property - - ''' - _ - Public Property ReleaseDateSpecified() As Boolean - Get - Return Me.releaseDateFieldSpecified - End Get - Set - Me.releaseDateFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Barcodes() As BarcodeType() - Get - Return Me.barcodesField - End Get - Set - Me.barcodesField = value - End Set - End Property - - ''' - Public Property PartNumber() As String - Get - Return Me.partNumberField - End Get - Set - Me.partNumberField = value - End Set - End Property - - ''' - Public Property SerialNumber() As String - Get - Return Me.serialNumberField - End Get - Set - Me.serialNumberField = value - End Set - End Property - - ''' - _ - Public Property Keywords() As String() - Get - Return Me.keywordsField - End Get - Set - Me.keywordsField = value - End Set - End Property - - ''' - _ - Public Property Magazine() As MagazineType() - Get - Return Me.magazineField - End Get - Set - Me.magazineField = value - End Set - End Property - - ''' - _ - Public Property Book() As BookType() - Get - Return Me.bookField - End Get - Set - Me.bookField = value - End Set - End Property - - ''' - _ - Public Property Categories() As String() - Get - Return Me.categoriesField - End Get - Set - Me.categoriesField = value - End Set - End Property - - ''' - _ - Public Property Subcategories() As String() - Get - Return Me.subcategoriesField - End Get - Set - Me.subcategoriesField = value - End Set - End Property - - ''' - _ - Public Property Languages() As LanguagesTypeLanguage() - Get - Return Me.languagesField - End Get - Set - Me.languagesField = value - End Set - End Property - - ''' - _ - Public Property Systems() As String() - Get - Return Me.systemsField - End Get - Set - Me.systemsField = value - End Set - End Property - - ''' - _ - Public Property Architectures() As ArchitecturesTypeArchitecture() - Get - Return Me.architecturesField - End Get - Set - Me.architecturesField = value - End Set - End Property - - ''' - _ - Public Property RequiredOperatingSystems() As RequiredOperatingSystemType() - Get - Return Me.requiredOperatingSystemsField - End Get - Set - Me.requiredOperatingSystemsField = value - End Set - End Property - - ''' - _ - Public Property UserManual() As UserManualType() - Get - Return Me.userManualField - End Get - Set - Me.userManualField = value - End Set - End Property - - ''' - _ - Public Property OpticalDisc() As OpticalDiscType() - Get - Return Me.opticalDiscField - End Get - Set - Me.opticalDiscField = value - End Set - End Property - - ''' - _ - Public Property Advertisement() As AdvertisementType() - Get - Return Me.advertisementField - End Get - Set - Me.advertisementField = value - End Set - End Property - - ''' - _ - Public Property LinearMedia() As LinearMediaType() - Get - Return Me.linearMediaField - End Get - Set - Me.linearMediaField = value - End Set - End Property - - ''' - _ - Public Property PCICard() As PCIType() - Get - Return Me.pCICardField - End Get - Set - Me.pCICardField = value - End Set - End Property - - ''' - _ - Public Property BlockMedia() As BlockMediaType() - Get - Return Me.blockMediaField - End Get - Set - Me.blockMediaField = value - End Set - End Property - - ''' - _ - Public Property AudioMedia() As AudioMediaType() - Get - Return Me.audioMediaField - End Get - Set - Me.audioMediaField = value - End Set - End Property - End Class - - ''' - _ - Public Enum CICMMetadataTypeReleaseType - - ''' - Retail - - ''' - Bundle - - ''' - Coverdisc - - ''' - Subscription - - ''' - Demo - - ''' - OEM - - ''' - Shareware - - ''' - FOSS - - ''' - Adware - - ''' - Donationware - - ''' - _ - Digitaldownload - - ''' - SaaS - End Enum - - ''' - _ - Partial Public Class BarcodeType - - Private typeField As BarcodeTypeType - - Private valueField As String - - ''' - _ - Public Property type() As BarcodeTypeType - Get - Return Me.typeField - End Get - Set - Me.typeField = value - End Set - End Property - - ''' - _ - Public Property Value() As String - Get - Return Me.valueField - End Get - Set - Me.valueField = value - End Set - End Property - End Class - - ''' - _ - Public Enum BarcodeTypeType - - ''' - aztec - - ''' - codabar - - ''' - code11 - - ''' - code128 - - ''' - code39 - - ''' - code93 - - ''' - cpcbinary - - ''' - ezcode - - ''' - fim - - ''' - itf - - ''' - itf14 - - ''' - ean13 - - ''' - ean8 - - ''' - maxicode - - ''' - isbn - - ''' - isrc - - ''' - msi - - ''' - tof - - ''' - shotcode - - ''' - rm4scc - - ''' - qr - - ''' - ean5 - - ''' - ean2 - - ''' - _ - qr1 - - ''' - postnet - - ''' - postbar - - ''' - plessey - - ''' - pharmacode - - ''' - pdf417 - - ''' - patchcode - End Enum - - ''' - _ - Partial Public Class AudioBlockType - - Private imageField As ImageType - - Private sizeField As ULong - - Private accoustIDField As String - - Private checksumsField() As ChecksumType - - Private formatField As String - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - Public Property AccoustID() As String - Get - Return Me.accoustIDField - End Get - Set - Me.accoustIDField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - Public Property Format() As String - Get - Return Me.formatField - End Get - Set - Me.formatField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ImageType - - Private formatField As String - - Private offsetField As ULong - - Private offsetFieldSpecified As Boolean - - Private valueField As String - - ''' - _ - Public Property format() As String - Get - Return Me.formatField - End Get - Set - Me.formatField = value - End Set - End Property - - ''' - _ - Public Property offset() As ULong - Get - Return Me.offsetField - End Get - Set - Me.offsetField = value - End Set - End Property - - ''' - _ - Public Property offsetSpecified() As Boolean - Get - Return Me.offsetFieldSpecified - End Get - Set - Me.offsetFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Value() As String - Get - Return Me.valueField - End Get - Set - Me.valueField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ChecksumType - - Private typeField As ChecksumTypeType - - Private valueField As String - - ''' - _ - Public Property type() As ChecksumTypeType - Get - Return Me.typeField - End Get - Set - Me.typeField = value - End Set - End Property - - ''' - _ - Public Property Value() As String - Get - Return Me.valueField - End Get - Set - Me.valueField = value - End Set - End Property - End Class - - ''' - _ - Public Enum ChecksumTypeType - - ''' - fletcher16 - - ''' - fletcher32 - - ''' - adler32 - - ''' - crc16 - - ''' - crc16ccitt - - ''' - crc32 - - ''' - crc64 - - ''' - md4 - - ''' - md5 - - ''' - dm6 - - ''' - ripemd128 - - ''' - ripemd160 - - ''' - ripemed320 - - ''' - sha1 - - ''' - sha224 - - ''' - sha256 - - ''' - sha384 - - ''' - sha512 - - ''' - sha3 - - ''' - skein - - ''' - snefru - - ''' - blake256 - - ''' - blake512 - - ''' - tiger - - ''' - whirlpool - - ''' - spamsum - End Enum - - ''' - _ - Partial Public Class AudioMediaType - - Private imageField As ImageType - - Private sizeField As ULong - - Private checksumsField() As ChecksumType - - Private sequenceField As SequenceType - - Private partNumberField As String - - Private serialNumberField As String - - Private manufacturerField As String - - Private modelField As String - - Private accoustIDField As String - - Private blockField() As AudioBlockType - - Private copyProtectionField As String - - Private dimensionsField As DimensionsType - - Private scansField As ScansType - - Private dumpHardwareArrayField() As DumpHardwareType - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - Public Property Sequence() As SequenceType - Get - Return Me.sequenceField - End Get - Set - Me.sequenceField = value - End Set - End Property - - ''' - Public Property PartNumber() As String - Get - Return Me.partNumberField - End Get - Set - Me.partNumberField = value - End Set - End Property - - ''' - Public Property SerialNumber() As String - Get - Return Me.serialNumberField - End Get - Set - Me.serialNumberField = value - End Set - End Property - - ''' - Public Property Manufacturer() As String - Get - Return Me.manufacturerField - End Get - Set - Me.manufacturerField = value - End Set - End Property - - ''' - Public Property Model() As String - Get - Return Me.modelField - End Get - Set - Me.modelField = value - End Set - End Property - - ''' - Public Property AccoustID() As String - Get - Return Me.accoustIDField - End Get - Set - Me.accoustIDField = value - End Set - End Property - - ''' - _ - Public Property Block() As AudioBlockType() - Get - Return Me.blockField - End Get - Set - Me.blockField = value - End Set - End Property - - ''' - Public Property CopyProtection() As String - Get - Return Me.copyProtectionField - End Get - Set - Me.copyProtectionField = value - End Set - End Property - - ''' - Public Property Dimensions() As DimensionsType - Get - Return Me.dimensionsField - End Get - Set - Me.dimensionsField = value - End Set - End Property - - ''' - Public Property Scans() As ScansType - Get - Return Me.scansField - End Get - Set - Me.scansField = value - End Set - End Property - - ''' - _ - Public Property DumpHardwareArray() As DumpHardwareType() - Get - Return Me.dumpHardwareArrayField - End Get - Set - Me.dumpHardwareArrayField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class SequenceType - - Private mediaTitleField As String - - Private mediaSequenceField As UInteger - - Private totalMediaField As UInteger - - Private sideField As Byte - - Private sideFieldSpecified As Boolean - - Private layerField As Byte - - Private layerFieldSpecified As Boolean - - ''' - Public Property MediaTitle() As String - Get - Return Me.mediaTitleField - End Get - Set - Me.mediaTitleField = value - End Set - End Property - - ''' - Public Property MediaSequence() As UInteger - Get - Return Me.mediaSequenceField - End Get - Set - Me.mediaSequenceField = value - End Set - End Property - - ''' - Public Property TotalMedia() As UInteger - Get - Return Me.totalMediaField - End Get - Set - Me.totalMediaField = value - End Set - End Property - - ''' - Public Property Side() As Byte - Get - Return Me.sideField - End Get - Set - Me.sideField = value - End Set - End Property - - ''' - _ - Public Property SideSpecified() As Boolean - Get - Return Me.sideFieldSpecified - End Get - Set - Me.sideFieldSpecified = value - End Set - End Property - - ''' - Public Property Layer() As Byte - Get - Return Me.layerField - End Get - Set - Me.layerField = value - End Set - End Property - - ''' - _ - Public Property LayerSpecified() As Boolean - Get - Return Me.layerFieldSpecified - End Get - Set - Me.layerFieldSpecified = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class DimensionsType - - Private diameterField As Double - - Private diameterFieldSpecified As Boolean - - Private heightField As Double - - Private heightFieldSpecified As Boolean - - Private widthField As Double - - Private widthFieldSpecified As Boolean - - Private thicknessField As Double - - ''' - Public Property Diameter() As Double - Get - Return Me.diameterField - End Get - Set - Me.diameterField = value - End Set - End Property - - ''' - _ - Public Property DiameterSpecified() As Boolean - Get - Return Me.diameterFieldSpecified - End Get - Set - Me.diameterFieldSpecified = value - End Set - End Property - - ''' - Public Property Height() As Double - Get - Return Me.heightField - End Get - Set - Me.heightField = value - End Set - End Property - - ''' - _ - Public Property HeightSpecified() As Boolean - Get - Return Me.heightFieldSpecified - End Get - Set - Me.heightFieldSpecified = value - End Set - End Property - - ''' - Public Property Width() As Double - Get - Return Me.widthField - End Get - Set - Me.widthField = value - End Set - End Property - - ''' - _ - Public Property WidthSpecified() As Boolean - Get - Return Me.widthFieldSpecified - End Get - Set - Me.widthFieldSpecified = value - End Set - End Property - - ''' - Public Property Thickness() As Double - Get - Return Me.thicknessField - End Get - Set - Me.thicknessField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ScansType - - Private caseScanField As CaseScanType - - Private scanField As MediaScanType - - ''' - Public Property CaseScan() As CaseScanType - Get - Return Me.caseScanField - End Get - Set - Me.caseScanField = value - End Set - End Property - - ''' - Public Property Scan() As MediaScanType - Get - Return Me.scanField - End Get - Set - Me.scanField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class CaseScanType - - Private caseScanElementField As CaseScanTypeCaseScanElement - - Private scanField As ScanType - - ''' - Public Property CaseScanElement() As CaseScanTypeCaseScanElement - Get - Return Me.caseScanElementField - End Get - Set - Me.caseScanElementField = value - End Set - End Property - - ''' - Public Property Scan() As ScanType - Get - Return Me.scanField - End Get - Set - Me.scanField = value - End Set - End Property - End Class - - ''' - _ - Public Enum CaseScanTypeCaseScanElement - - ''' - sleeve - - ''' - inner - - ''' - inlay - - ''' - frontback - - ''' - frontfull - - ''' - boxfront - - ''' - boxback - - ''' - boxspine - - ''' - external - End Enum - - ''' - _ - Partial Public Class ScanType - - Private fileField As FileType - - Private checksumsField() As ChecksumType - - Private scannerField() As ScannerType - - Private scanProcessingField() As ScanProcessingType - - Private oCRField() As OCRType - - ''' - Public Property File() As FileType - Get - Return Me.fileField - End Get - Set - Me.fileField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property Scanner() As ScannerType() - Get - Return Me.scannerField - End Get - Set - Me.scannerField = value - End Set - End Property - - ''' - _ - Public Property ScanProcessing() As ScanProcessingType() - Get - Return Me.scanProcessingField - End Get - Set - Me.scanProcessingField = value - End Set - End Property - - ''' - _ - Public Property OCR() As OCRType() - Get - Return Me.oCRField - End Get - Set - Me.oCRField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class FileType - - Private formatField As String - - Private valueField As String - - ''' - _ - Public Property format() As String - Get - Return Me.formatField - End Get - Set - Me.formatField = value - End Set - End Property - - ''' - _ - Public Property Value() As String - Get - Return Me.valueField - End Get - Set - Me.valueField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ScannerType - - Private authorField As String - - Private manufacturerField As String - - Private modelField As String - - Private serialField As String - - Private softwareField As String - - Private softwareVersionField As String - - ''' - Public Property Author() As String - Get - Return Me.authorField - End Get - Set - Me.authorField = value - End Set - End Property - - ''' - Public Property Manufacturer() As String - Get - Return Me.manufacturerField - End Get - Set - Me.manufacturerField = value - End Set - End Property - - ''' - Public Property Model() As String - Get - Return Me.modelField - End Get - Set - Me.modelField = value - End Set - End Property - - ''' - Public Property Serial() As String - Get - Return Me.serialField - End Get - Set - Me.serialField = value - End Set - End Property - - ''' - Public Property Software() As String - Get - Return Me.softwareField - End Get - Set - Me.softwareField = value - End Set - End Property - - ''' - Public Property SoftwareVersion() As String - Get - Return Me.softwareVersionField - End Get - Set - Me.softwareVersionField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ScanProcessingType - - Private authorField As String - - Private softwareField As String - - Private softwareVersionField As String - - ''' - Public Property Author() As String - Get - Return Me.authorField - End Get - Set - Me.authorField = value - End Set - End Property - - ''' - Public Property Software() As String - Get - Return Me.softwareField - End Get - Set - Me.softwareField = value - End Set - End Property - - ''' - Public Property SoftwareVersion() As String - Get - Return Me.softwareVersionField - End Get - Set - Me.softwareVersionField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class OCRType - - Private authorField As String - - Private softwareField As String - - Private softwareVersionField As String - - Private languageField() As LanguagesTypeLanguage - - ''' - Public Property Author() As String - Get - Return Me.authorField - End Get - Set - Me.authorField = value - End Set - End Property - - ''' - Public Property Software() As String - Get - Return Me.softwareField - End Get - Set - Me.softwareField = value - End Set - End Property - - ''' - Public Property SoftwareVersion() As String - Get - Return Me.softwareVersionField - End Get - Set - Me.softwareVersionField = value - End Set - End Property - - ''' - _ - Public Property Language() As LanguagesTypeLanguage() - Get - Return Me.languageField - End Get - Set - Me.languageField = value - End Set - End Property - End Class - - ''' - _ - Public Enum LanguagesTypeLanguage - - ''' - aar - - ''' - abk - - ''' - ace - - ''' - ach - - ''' - ada - - ''' - ady - - ''' - afa - - ''' - afh - - ''' - afr - - ''' - ain - - ''' - aka - - ''' - akk - - ''' - alb - - ''' - ale - - ''' - alg - - ''' - alt - - ''' - amh - - ''' - ang - - ''' - anp - - ''' - apa - - ''' - ara - - ''' - arc - - ''' - arg - - ''' - arm - - ''' - arn - - ''' - arp - - ''' - art - - ''' - arw - - ''' - asm - - ''' - ast - - ''' - ath - - ''' - aus - - ''' - ava - - ''' - ave - - ''' - awa - - ''' - aym - - ''' - aze - - ''' - bad - - ''' - bai - - ''' - bak - - ''' - bal - - ''' - bam - - ''' - ban - - ''' - baq - - ''' - bas - - ''' - bat - - ''' - bej - - ''' - bel - - ''' - bem - - ''' - ben - - ''' - ber - - ''' - bho - - ''' - bih - - ''' - bik - - ''' - bin - - ''' - bis - - ''' - bla - - ''' - bnt - - ''' - bos - - ''' - bra - - ''' - bre - - ''' - btk - - ''' - bua - - ''' - bug - - ''' - bul - - ''' - bur - - ''' - byn - - ''' - cad - - ''' - cai - - ''' - car - - ''' - cat - - ''' - cau - - ''' - ceb - - ''' - cel - - ''' - cha - - ''' - chb - - ''' - che - - ''' - chg - - ''' - chi - - ''' - chk - - ''' - chm - - ''' - chn - - ''' - cho - - ''' - chp - - ''' - chr - - ''' - chu - - ''' - chv - - ''' - chy - - ''' - cmc - - ''' - cop - - ''' - cor - - ''' - cos - - ''' - cpe - - ''' - cpf - - ''' - cpp - - ''' - cre - - ''' - crh - - ''' - crp - - ''' - csb - - ''' - cus - - ''' - cze - - ''' - dak - - ''' - dan - - ''' - dar - - ''' - day - - ''' - del - - ''' - den - - ''' - dgr - - ''' - din - - ''' - div - - ''' - doi - - ''' - dra - - ''' - dsb - - ''' - dua - - ''' - dum - - ''' - dut - - ''' - dyu - - ''' - dzo - - ''' - efi - - ''' - egy - - ''' - eka - - ''' - elx - - ''' - eng - - ''' - enm - - ''' - epo - - ''' - est - - ''' - ewe - - ''' - ewo - - ''' - fan - - ''' - fao - - ''' - fat - - ''' - fij - - ''' - fil - - ''' - fin - - ''' - fiu - - ''' - fon - - ''' - fre - - ''' - frm - - ''' - fro - - ''' - frr - - ''' - frs - - ''' - fry - - ''' - ful - - ''' - fur - - ''' - gaa - - ''' - gay - - ''' - gba - - ''' - gem - - ''' - geo - - ''' - ger - - ''' - gez - - ''' - gil - - ''' - gla - - ''' - gle - - ''' - glg - - ''' - glv - - ''' - gmh - - ''' - goh - - ''' - gon - - ''' - gor - - ''' - got - - ''' - grb - - ''' - grc - - ''' - gre - - ''' - grn - - ''' - gsw - - ''' - guj - - ''' - gwi - - ''' - hai - - ''' - hat - - ''' - hau - - ''' - haw - - ''' - heb - - ''' - her - - ''' - hil - - ''' - him - - ''' - hin - - ''' - hit - - ''' - hmn - - ''' - hmo - - ''' - hrv - - ''' - hsb - - ''' - hun - - ''' - hup - - ''' - iba - - ''' - ibo - - ''' - ice - - ''' - ido - - ''' - iii - - ''' - ijo - - ''' - iku - - ''' - ile - - ''' - ilo - - ''' - ina - - ''' - inc - - ''' - ind - - ''' - ine - - ''' - inh - - ''' - ipk - - ''' - ira - - ''' - iro - - ''' - ita - - ''' - jav - - ''' - jbo - - ''' - jpn - - ''' - jpr - - ''' - jrb - - ''' - kaa - - ''' - kab - - ''' - kac - - ''' - kal - - ''' - kam - - ''' - kan - - ''' - kar - - ''' - kas - - ''' - kau - - ''' - kaw - - ''' - kaz - - ''' - kbd - - ''' - kha - - ''' - khi - - ''' - khm - - ''' - kho - - ''' - kik - - ''' - kin - - ''' - kir - - ''' - kmb - - ''' - kok - - ''' - kom - - ''' - kon - - ''' - kor - - ''' - kos - - ''' - kpe - - ''' - krc - - ''' - krl - - ''' - kro - - ''' - kru - - ''' - kua - - ''' - kum - - ''' - kur - - ''' - kut - - ''' - lad - - ''' - lah - - ''' - lam - - ''' - lao - - ''' - lat - - ''' - lav - - ''' - lez - - ''' - lim - - ''' - lin - - ''' - lit - - ''' - lol - - ''' - loz - - ''' - ltz - - ''' - lua - - ''' - lub - - ''' - lug - - ''' - lui - - ''' - lun - - ''' - luo - - ''' - lus - - ''' - mac - - ''' - mad - - ''' - mag - - ''' - mah - - ''' - mai - - ''' - mak - - ''' - mal - - ''' - man - - ''' - mao - - ''' - map - - ''' - mar - - ''' - mas - - ''' - may - - ''' - mdf - - ''' - mdr - - ''' - men - - ''' - mga - - ''' - mic - - ''' - min - - ''' - mis - - ''' - mkh - - ''' - mlg - - ''' - mlt - - ''' - mnc - - ''' - mni - - ''' - mno - - ''' - moh - - ''' - mon - - ''' - mos - - ''' - mul - - ''' - mun - - ''' - mus - - ''' - mwl - - ''' - mwr - - ''' - myn - - ''' - myv - - ''' - nah - - ''' - nai - - ''' - nap - - ''' - nau - - ''' - nav - - ''' - nbl - - ''' - nde - - ''' - ndo - - ''' - nds - - ''' - nep - - ''' - [new] - - ''' - nia - - ''' - nic - - ''' - niu - - ''' - nno - - ''' - nob - - ''' - nog - - ''' - non - - ''' - nor - - ''' - nqo - - ''' - nso - - ''' - nub - - ''' - nwc - - ''' - nya - - ''' - nym - - ''' - nyn - - ''' - nyo - - ''' - nzi - - ''' - oci - - ''' - oji - - ''' - ori - - ''' - orm - - ''' - osa - - ''' - oss - - ''' - ota - - ''' - oto - - ''' - paa - - ''' - pag - - ''' - pal - - ''' - pam - - ''' - pan - - ''' - pap - - ''' - pau - - ''' - peo - - ''' - per - - ''' - phi - - ''' - phn - - ''' - pli - - ''' - pol - - ''' - pon - - ''' - por - - ''' - pra - - ''' - pro - - ''' - pus - - ''' - _ - qaaqtz - - ''' - que - - ''' - raj - - ''' - rap - - ''' - rar - - ''' - roa - - ''' - roh - - ''' - rom - - ''' - rum - - ''' - run - - ''' - rup - - ''' - rus - - ''' - sad - - ''' - sag - - ''' - sah - - ''' - sai - - ''' - sal - - ''' - sam - - ''' - san - - ''' - sas - - ''' - sat - - ''' - scn - - ''' - sco - - ''' - sel - - ''' - sem - - ''' - sga - - ''' - sgn - - ''' - shn - - ''' - sid - - ''' - sin - - ''' - sio - - ''' - sit - - ''' - sla - - ''' - slo - - ''' - slv - - ''' - sma - - ''' - sme - - ''' - smi - - ''' - smj - - ''' - smn - - ''' - smo - - ''' - sms - - ''' - sna - - ''' - snd - - ''' - snk - - ''' - sog - - ''' - som - - ''' - son - - ''' - sot - - ''' - spa - - ''' - srd - - ''' - srn - - ''' - srp - - ''' - srr - - ''' - ssa - - ''' - ssw - - ''' - suk - - ''' - sun - - ''' - sus - - ''' - sux - - ''' - swa - - ''' - swe - - ''' - syc - - ''' - syr - - ''' - tah - - ''' - tai - - ''' - tam - - ''' - tat - - ''' - tel - - ''' - tem - - ''' - ter - - ''' - tet - - ''' - tgk - - ''' - tgl - - ''' - tha - - ''' - tib - - ''' - tig - - ''' - tir - - ''' - tiv - - ''' - tkl - - ''' - tlh - - ''' - tli - - ''' - tmh - - ''' - tog - - ''' - ton - - ''' - tpi - - ''' - tsi - - ''' - tsn - - ''' - tso - - ''' - tuk - - ''' - tum - - ''' - tup - - ''' - tur - - ''' - tut - - ''' - tvl - - ''' - twi - - ''' - tyv - - ''' - udm - - ''' - uga - - ''' - uig - - ''' - ukr - - ''' - umb - - ''' - und - - ''' - urd - - ''' - uzb - - ''' - vai - - ''' - ven - - ''' - vie - - ''' - vol - - ''' - vot - - ''' - wak - - ''' - wal - - ''' - war - - ''' - was - - ''' - wel - - ''' - wen - - ''' - wln - - ''' - wol - - ''' - xal - - ''' - xho - - ''' - yao - - ''' - yap - - ''' - yid - - ''' - yor - - ''' - ypk - - ''' - zap - - ''' - zbl - - ''' - zen - - ''' - zgh - - ''' - zha - - ''' - znd - - ''' - zul - - ''' - zun - - ''' - zxx - - ''' - zza - End Enum - - ''' - _ - Partial Public Class MediaScanType - - Private mediaScanElementField As MediaScanTypeMediaScanElement - - Private scanField As ScanType - - ''' - Public Property MediaScanElement() As MediaScanTypeMediaScanElement - Get - Return Me.mediaScanElementField - End Get - Set - Me.mediaScanElementField = value - End Set - End Property - - ''' - Public Property Scan() As ScanType - Get - Return Me.scanField - End Get - Set - Me.scanField = value - End Set - End Property - End Class - - ''' - _ - Public Enum MediaScanTypeMediaScanElement - - ''' - up - - ''' - down - - ''' - front - - ''' - back - - ''' - left - - ''' - right - End Enum - - ''' - _ - Partial Public Class DumpHardwareType - - Private manufacturerField As String - - Private modelField As String - - Private revisionField As String - - Private firmwareField As String - - Private serialField As String - - Private extentsField() As ExtentType - - Private softwareField As SoftwareType - - ''' - Public Property Manufacturer() As String - Get - Return Me.manufacturerField - End Get - Set - Me.manufacturerField = value - End Set - End Property - - ''' - Public Property Model() As String - Get - Return Me.modelField - End Get - Set - Me.modelField = value - End Set - End Property - - ''' - Public Property Revision() As String - Get - Return Me.revisionField - End Get - Set - Me.revisionField = value - End Set - End Property - - ''' - Public Property Firmware() As String - Get - Return Me.firmwareField - End Get - Set - Me.firmwareField = value - End Set - End Property - - ''' - Public Property Serial() As String - Get - Return Me.serialField - End Get - Set - Me.serialField = value - End Set - End Property - - ''' - _ - Public Property Extents() As ExtentType() - Get - Return Me.extentsField - End Get - Set - Me.extentsField = value - End Set - End Property - - ''' - Public Property Software() As SoftwareType - Get - Return Me.softwareField - End Get - Set - Me.softwareField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ExtentType - - Private startField As ULong - - Private endField As ULong - - ''' - Public Property Start() As ULong - Get - Return Me.startField - End Get - Set - Me.startField = value - End Set - End Property - - ''' - Public Property [End]() As ULong - Get - Return Me.endField - End Get - Set - Me.endField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class SoftwareType - - Private nameField As String - - Private versionField As String - - Private operatingSystemField As String - - ''' - Public Property Name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - Public Property Version() As String - Get - Return Me.versionField - End Get - Set - Me.versionField = value - End Set - End Property - - ''' - Public Property OperatingSystem() As String - Get - Return Me.operatingSystemField - End Get - Set - Me.operatingSystemField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class BlockTrackType - - Private imageField As ImageType - - Private sizeField As ULong - - Private headField As UShort - - Private cylinderField As UInteger - - Private startSectorField As ULong - - Private endSectorField As ULong - - Private sectorsField As ULong - - Private bytesPerSectorField As UInteger - - Private checksumsField() As ChecksumType - - Private formatField As String - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - Public Property Head() As UShort - Get - Return Me.headField - End Get - Set - Me.headField = value - End Set - End Property - - ''' - Public Property Cylinder() As UInteger - Get - Return Me.cylinderField - End Get - Set - Me.cylinderField = value - End Set - End Property - - ''' - Public Property StartSector() As ULong - Get - Return Me.startSectorField - End Get - Set - Me.startSectorField = value - End Set - End Property - - ''' - Public Property EndSector() As ULong - Get - Return Me.endSectorField - End Get - Set - Me.endSectorField = value - End Set - End Property - - ''' - Public Property Sectors() As ULong - Get - Return Me.sectorsField - End Get - Set - Me.sectorsField = value - End Set - End Property - - ''' - Public Property BytesPerSector() As UInteger - Get - Return Me.bytesPerSectorField - End Get - Set - Me.bytesPerSectorField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - Public Property Format() As String - Get - Return Me.formatField - End Get - Set - Me.formatField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class USBType - - Private vendorIDField As UShort - - Private productIDField As UShort - - Private descriptorsField As DumpType - - ''' - Public Property VendorID() As UShort - Get - Return Me.vendorIDField - End Get - Set - Me.vendorIDField = value - End Set - End Property - - ''' - Public Property ProductID() As UShort - Get - Return Me.productIDField - End Get - Set - Me.productIDField = value - End Set - End Property - - ''' - Public Property Descriptors() As DumpType - Get - Return Me.descriptorsField - End Get - Set - Me.descriptorsField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class DumpType - - Private imageField As String - - Private sizeField As ULong - - Private checksumsField() As ChecksumType - - ''' - Public Property Image() As String - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class EVPDType - - Private imageField As String - - Private sizeField As ULong - - Private checksumsField() As ChecksumType - - Private pageField As Byte - - Private pageFieldSpecified As Boolean - - ''' - Public Property Image() As String - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property page() As Byte - Get - Return Me.pageField - End Get - Set - Me.pageField = value - End Set - End Property - - ''' - _ - Public Property pageSpecified() As Boolean - Get - Return Me.pageFieldSpecified - End Get - Set - Me.pageFieldSpecified = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class SCSIType - - Private inquiryField As DumpType - - Private eVPDField() As EVPDType - - Private modeSenseField As DumpType - - Private modeSense10Field As DumpType - - Private logSenseField As DumpType - - ''' - Public Property Inquiry() As DumpType - Get - Return Me.inquiryField - End Get - Set - Me.inquiryField = value - End Set - End Property - - ''' - _ - Public Property EVPD() As EVPDType() - Get - Return Me.eVPDField - End Get - Set - Me.eVPDField = value - End Set - End Property - - ''' - Public Property ModeSense() As DumpType - Get - Return Me.modeSenseField - End Get - Set - Me.modeSenseField = value - End Set - End Property - - ''' - Public Property ModeSense10() As DumpType - Get - Return Me.modeSense10Field - End Get - Set - Me.modeSense10Field = value - End Set - End Property - - ''' - Public Property LogSense() As DumpType - Get - Return Me.logSenseField - End Get - Set - Me.logSenseField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class MultiMediaCardType - - Private cIDField As DumpType - - Private cSDField As DumpType - - Private extendedCSDField As DumpType - - Private oCRField As DumpType - - ''' - Public Property CID() As DumpType - Get - Return Me.cIDField - End Get - Set - Me.cIDField = value - End Set - End Property - - ''' - Public Property CSD() As DumpType - Get - Return Me.cSDField - End Get - Set - Me.cSDField = value - End Set - End Property - - ''' - Public Property ExtendedCSD() As DumpType - Get - Return Me.extendedCSDField - End Get - Set - Me.extendedCSDField = value - End Set - End Property - - ''' - Public Property OCR() As DumpType - Get - Return Me.oCRField - End Get - Set - Me.oCRField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class SecureDigitalType - - Private cIDField As DumpType - - Private cSDField As DumpType - - Private sCRField As DumpType - - Private oCRField As DumpType - - ''' - Public Property CID() As DumpType - Get - Return Me.cIDField - End Get - Set - Me.cIDField = value - End Set - End Property - - ''' - Public Property CSD() As DumpType - Get - Return Me.cSDField - End Get - Set - Me.cSDField = value - End Set - End Property - - ''' - Public Property SCR() As DumpType - Get - Return Me.sCRField - End Get - Set - Me.sCRField = value - End Set - End Property - - ''' - Public Property OCR() As DumpType - Get - Return Me.oCRField - End Get - Set - Me.oCRField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ATAType - - Private identifyField As DumpType - - ''' - Public Property Identify() As DumpType - Get - Return Me.identifyField - End Get - Set - Me.identifyField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class TapeFileType - - Private imageField As ImageType - - Private sizeField As ULong - - Private sequenceField As ULong - - Private blockSizeField As ULong - - Private startBlockField As ULong - - Private endBlockField As ULong - - Private checksumsField() As ChecksumType - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - Public Property Sequence() As ULong - Get - Return Me.sequenceField - End Get - Set - Me.sequenceField = value - End Set - End Property - - ''' - Public Property BlockSize() As ULong - Get - Return Me.blockSizeField - End Get - Set - Me.blockSizeField = value - End Set - End Property - - ''' - Public Property StartBlock() As ULong - Get - Return Me.startBlockField - End Get - Set - Me.startBlockField = value - End Set - End Property - - ''' - Public Property EndBlock() As ULong - Get - Return Me.endBlockField - End Get - Set - Me.endBlockField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class TapePartitionType - - Private imageField As ImageType - - Private sizeField As ULong - - Private sequenceField As ULong - - Private startBlockField As ULong - - Private endBlockField As ULong - - Private checksumsField() As ChecksumType - - Private fileField() As TapeFileType - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - Public Property Sequence() As ULong - Get - Return Me.sequenceField - End Get - Set - Me.sequenceField = value - End Set - End Property - - ''' - Public Property StartBlock() As ULong - Get - Return Me.startBlockField - End Get - Set - Me.startBlockField = value - End Set - End Property - - ''' - Public Property EndBlock() As ULong - Get - Return Me.endBlockField - End Get - Set - Me.endBlockField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property File() As TapeFileType() - Get - Return Me.fileField - End Get - Set - Me.fileField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class BlockSizeType - - Private startingBlockField As UInteger - - Private valueField As UInteger - - ''' - _ - Public Property startingBlock() As UInteger - Get - Return Me.startingBlockField - End Get - Set - Me.startingBlockField = value - End Set - End Property - - ''' - _ - Public Property Value() As UInteger - Get - Return Me.valueField - End Get - Set - Me.valueField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class BlockMediaType - - Private imageField As ImageType - - Private sizeField As ULong - - Private checksumsField() As ChecksumType - - Private contentChecksumsField() As ChecksumType - - Private sequenceField As SequenceType - - Private manufacturerField As String - - Private modelField As String - - Private serialField As String - - Private firmwareField As String - - Private interfaceField As String - - Private partNumberField As String - - Private serialNumberField As String - - Private physicalBlockSizeField As UInteger - - Private logicalBlockSizeField As UInteger - - Private logicalBlocksField As ULong - - Private variableBlockSizeField() As BlockSizeType - - Private tapeInformationField() As TapePartitionType - - Private scansField As ScansType - - Private aTAField As ATAType - - Private pCIField As PCIType - - Private pCMCIAField As PCMCIAType - - Private secureDigitalField As SecureDigitalType - - Private multiMediaCardField As MultiMediaCardType - - Private sCSIField As SCSIType - - Private uSBField As USBType - - Private mAMField As DumpType - - Private headsField As UShort - - Private headsFieldSpecified As Boolean - - Private cylindersField As UInteger - - Private cylindersFieldSpecified As Boolean - - Private sectorsPerTrackField As ULong - - Private sectorsPerTrackFieldSpecified As Boolean - - Private trackField() As BlockTrackType - - Private copyProtectionField As String - - Private dimensionsField As DimensionsType - - Private fileSystemInformationField() As PartitionType - - Private dumpHardwareArrayField() As DumpHardwareType - - Private diskTypeField As String - - Private diskSubTypeField As String - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property ContentChecksums() As ChecksumType() - Get - Return Me.contentChecksumsField - End Get - Set - Me.contentChecksumsField = value - End Set - End Property - - ''' - Public Property Sequence() As SequenceType - Get - Return Me.sequenceField - End Get - Set - Me.sequenceField = value - End Set - End Property - - ''' - Public Property Manufacturer() As String - Get - Return Me.manufacturerField - End Get - Set - Me.manufacturerField = value - End Set - End Property - - ''' - Public Property Model() As String - Get - Return Me.modelField - End Get - Set - Me.modelField = value - End Set - End Property - - ''' - Public Property Serial() As String - Get - Return Me.serialField - End Get - Set - Me.serialField = value - End Set - End Property - - ''' - Public Property Firmware() As String - Get - Return Me.firmwareField - End Get - Set - Me.firmwareField = value - End Set - End Property - - ''' - Public Property [Interface]() As String - Get - Return Me.interfaceField - End Get - Set - Me.interfaceField = value - End Set - End Property - - ''' - Public Property PartNumber() As String - Get - Return Me.partNumberField - End Get - Set - Me.partNumberField = value - End Set - End Property - - ''' - Public Property SerialNumber() As String - Get - Return Me.serialNumberField - End Get - Set - Me.serialNumberField = value - End Set - End Property - - ''' - Public Property PhysicalBlockSize() As UInteger - Get - Return Me.physicalBlockSizeField - End Get - Set - Me.physicalBlockSizeField = value - End Set - End Property - - ''' - Public Property LogicalBlockSize() As UInteger - Get - Return Me.logicalBlockSizeField - End Get - Set - Me.logicalBlockSizeField = value - End Set - End Property - - ''' - Public Property LogicalBlocks() As ULong - Get - Return Me.logicalBlocksField - End Get - Set - Me.logicalBlocksField = value - End Set - End Property - - ''' - _ - Public Property VariableBlockSize() As BlockSizeType() - Get - Return Me.variableBlockSizeField - End Get - Set - Me.variableBlockSizeField = value - End Set - End Property - - ''' - _ - Public Property TapeInformation() As TapePartitionType() - Get - Return Me.tapeInformationField - End Get - Set - Me.tapeInformationField = value - End Set - End Property - - ''' - Public Property Scans() As ScansType - Get - Return Me.scansField - End Get - Set - Me.scansField = value - End Set - End Property - - ''' - Public Property ATA() As ATAType - Get - Return Me.aTAField - End Get - Set - Me.aTAField = value - End Set - End Property - - ''' - Public Property PCI() As PCIType - Get - Return Me.pCIField - End Get - Set - Me.pCIField = value - End Set - End Property - - ''' - Public Property PCMCIA() As PCMCIAType - Get - Return Me.pCMCIAField - End Get - Set - Me.pCMCIAField = value - End Set - End Property - - ''' - Public Property SecureDigital() As SecureDigitalType - Get - Return Me.secureDigitalField - End Get - Set - Me.secureDigitalField = value - End Set - End Property - - ''' - Public Property MultiMediaCard() As MultiMediaCardType - Get - Return Me.multiMediaCardField - End Get - Set - Me.multiMediaCardField = value - End Set - End Property - - ''' - Public Property SCSI() As SCSIType - Get - Return Me.sCSIField - End Get - Set - Me.sCSIField = value - End Set - End Property - - ''' - Public Property USB() As USBType - Get - Return Me.uSBField - End Get - Set - Me.uSBField = value - End Set - End Property - - ''' - Public Property MAM() As DumpType - Get - Return Me.mAMField - End Get - Set - Me.mAMField = value - End Set - End Property - - ''' - Public Property Heads() As UShort - Get - Return Me.headsField - End Get - Set - Me.headsField = value - End Set - End Property - - ''' - _ - Public Property HeadsSpecified() As Boolean - Get - Return Me.headsFieldSpecified - End Get - Set - Me.headsFieldSpecified = value - End Set - End Property - - ''' - Public Property Cylinders() As UInteger - Get - Return Me.cylindersField - End Get - Set - Me.cylindersField = value - End Set - End Property - - ''' - _ - Public Property CylindersSpecified() As Boolean - Get - Return Me.cylindersFieldSpecified - End Get - Set - Me.cylindersFieldSpecified = value - End Set - End Property - - ''' - Public Property SectorsPerTrack() As ULong - Get - Return Me.sectorsPerTrackField - End Get - Set - Me.sectorsPerTrackField = value - End Set - End Property - - ''' - _ - Public Property SectorsPerTrackSpecified() As Boolean - Get - Return Me.sectorsPerTrackFieldSpecified - End Get - Set - Me.sectorsPerTrackFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Track() As BlockTrackType() - Get - Return Me.trackField - End Get - Set - Me.trackField = value - End Set - End Property - - ''' - Public Property CopyProtection() As String - Get - Return Me.copyProtectionField - End Get - Set - Me.copyProtectionField = value - End Set - End Property - - ''' - Public Property Dimensions() As DimensionsType - Get - Return Me.dimensionsField - End Get - Set - Me.dimensionsField = value - End Set - End Property - - ''' - _ - Public Property FileSystemInformation() As PartitionType() - Get - Return Me.fileSystemInformationField - End Get - Set - Me.fileSystemInformationField = value - End Set - End Property - - ''' - _ - Public Property DumpHardwareArray() As DumpHardwareType() - Get - Return Me.dumpHardwareArrayField - End Get - Set - Me.dumpHardwareArrayField = value - End Set - End Property - - ''' - Public Property DiskType() As String - Get - Return Me.diskTypeField - End Get - Set - Me.diskTypeField = value - End Set - End Property - - ''' - Public Property DiskSubType() As String - Get - Return Me.diskSubTypeField - End Get - Set - Me.diskSubTypeField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class PCIType - - Private vendorIDField As UShort - - Private deviceIDField As UShort - - Private configurationField As DumpType - - Private expansionROMField As LinearMediaType - - ''' - Public Property VendorID() As UShort - Get - Return Me.vendorIDField - End Get - Set - Me.vendorIDField = value - End Set - End Property - - ''' - Public Property DeviceID() As UShort - Get - Return Me.deviceIDField - End Get - Set - Me.deviceIDField = value - End Set - End Property - - ''' - Public Property Configuration() As DumpType - Get - Return Me.configurationField - End Get - Set - Me.configurationField = value - End Set - End Property - - ''' - Public Property ExpansionROM() As LinearMediaType - Get - Return Me.expansionROMField - End Get - Set - Me.expansionROMField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class LinearMediaType - - Private imageField As ImageType - - Private sizeField As ULong - - Private imageChecksumsField() As ChecksumType - - Private checksumsField() As ChecksumType - - Private partNumberField As String - - Private serialNumberField As String - - Private titleField As String - - Private sequenceField As UInteger - - Private sequenceFieldSpecified As Boolean - - Private imageInterleaveField As UInteger - - Private imageInterleaveFieldSpecified As Boolean - - Private interleaveField As UInteger - - Private interleaveFieldSpecified As Boolean - - Private manufacturerField As String - - Private modelField As String - - Private packageField As String - - Private interfaceField As String - - Private dimensionsField As DimensionsType - - Private scansField As ScansType - - Private dumpHardwareArrayField() As DumpHardwareType - - Private pCMCIAField As PCMCIAType - - Private copyProtectionField As String - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - _ - Public Property ImageChecksums() As ChecksumType() - Get - Return Me.imageChecksumsField - End Get - Set - Me.imageChecksumsField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - Public Property PartNumber() As String - Get - Return Me.partNumberField - End Get - Set - Me.partNumberField = value - End Set - End Property - - ''' - Public Property SerialNumber() As String - Get - Return Me.serialNumberField - End Get - Set - Me.serialNumberField = value - End Set - End Property - - ''' - Public Property Title() As String - Get - Return Me.titleField - End Get - Set - Me.titleField = value - End Set - End Property - - ''' - Public Property Sequence() As UInteger - Get - Return Me.sequenceField - End Get - Set - Me.sequenceField = value - End Set - End Property - - ''' - _ - Public Property SequenceSpecified() As Boolean - Get - Return Me.sequenceFieldSpecified - End Get - Set - Me.sequenceFieldSpecified = value - End Set - End Property - - ''' - Public Property ImageInterleave() As UInteger - Get - Return Me.imageInterleaveField - End Get - Set - Me.imageInterleaveField = value - End Set - End Property - - ''' - _ - Public Property ImageInterleaveSpecified() As Boolean - Get - Return Me.imageInterleaveFieldSpecified - End Get - Set - Me.imageInterleaveFieldSpecified = value - End Set - End Property - - ''' - Public Property Interleave() As UInteger - Get - Return Me.interleaveField - End Get - Set - Me.interleaveField = value - End Set - End Property - - ''' - _ - Public Property InterleaveSpecified() As Boolean - Get - Return Me.interleaveFieldSpecified - End Get - Set - Me.interleaveFieldSpecified = value - End Set - End Property - - ''' - Public Property Manufacturer() As String - Get - Return Me.manufacturerField - End Get - Set - Me.manufacturerField = value - End Set - End Property - - ''' - Public Property Model() As String - Get - Return Me.modelField - End Get - Set - Me.modelField = value - End Set - End Property - - ''' - Public Property Package() As String - Get - Return Me.packageField - End Get - Set - Me.packageField = value - End Set - End Property - - ''' - Public Property [Interface]() As String - Get - Return Me.interfaceField - End Get - Set - Me.interfaceField = value - End Set - End Property - - ''' - Public Property Dimensions() As DimensionsType - Get - Return Me.dimensionsField - End Get - Set - Me.dimensionsField = value - End Set - End Property - - ''' - Public Property Scans() As ScansType - Get - Return Me.scansField - End Get - Set - Me.scansField = value - End Set - End Property - - ''' - _ - Public Property DumpHardwareArray() As DumpHardwareType() - Get - Return Me.dumpHardwareArrayField - End Get - Set - Me.dumpHardwareArrayField = value - End Set - End Property - - ''' - Public Property PCMCIA() As PCMCIAType - Get - Return Me.pCMCIAField - End Get - Set - Me.pCMCIAField = value - End Set - End Property - - ''' - Public Property CopyProtection() As String - Get - Return Me.copyProtectionField - End Get - Set - Me.copyProtectionField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class PCMCIAType - - Private cISField As DumpType - - Private complianceField As String - - Private manufacturerCodeField As UShort - - Private manufacturerCodeFieldSpecified As Boolean - - Private cardCodeField As UShort - - Private cardCodeFieldSpecified As Boolean - - Private manufacturerField As String - - Private productNameField As String - - Private additionalInformationField() As String - - ''' - Public Property CIS() As DumpType - Get - Return Me.cISField - End Get - Set - Me.cISField = value - End Set - End Property - - ''' - Public Property Compliance() As String - Get - Return Me.complianceField - End Get - Set - Me.complianceField = value - End Set - End Property - - ''' - Public Property ManufacturerCode() As UShort - Get - Return Me.manufacturerCodeField - End Get - Set - Me.manufacturerCodeField = value - End Set - End Property - - ''' - _ - Public Property ManufacturerCodeSpecified() As Boolean - Get - Return Me.manufacturerCodeFieldSpecified - End Get - Set - Me.manufacturerCodeFieldSpecified = value - End Set - End Property - - ''' - Public Property CardCode() As UShort - Get - Return Me.cardCodeField - End Get - Set - Me.cardCodeField = value - End Set - End Property - - ''' - _ - Public Property CardCodeSpecified() As Boolean - Get - Return Me.cardCodeFieldSpecified - End Get - Set - Me.cardCodeFieldSpecified = value - End Set - End Property - - ''' - Public Property Manufacturer() As String - Get - Return Me.manufacturerField - End Get - Set - Me.manufacturerField = value - End Set - End Property - - ''' - Public Property ProductName() As String - Get - Return Me.productNameField - End Get - Set - Me.productNameField = value - End Set - End Property - - ''' - _ - Public Property AdditionalInformation() As String() - Get - Return Me.additionalInformationField - End Get - Set - Me.additionalInformationField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class PartitionType - - Private sequenceField As UInteger - - Private nameField As String - - Private typeField As String - - Private startSectorField As ULong - - Private endSectorField As ULong - - Private descriptionField As String - - Private fileSystemsField() As FileSystemType - - ''' - Public Property Sequence() As UInteger - Get - Return Me.sequenceField - End Get - Set - Me.sequenceField = value - End Set - End Property - - ''' - Public Property Name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - Public Property Type() As String - Get - Return Me.typeField - End Get - Set - Me.typeField = value - End Set - End Property - - ''' - Public Property StartSector() As ULong - Get - Return Me.startSectorField - End Get - Set - Me.startSectorField = value - End Set - End Property - - ''' - Public Property EndSector() As ULong - Get - Return Me.endSectorField - End Get - Set - Me.endSectorField = value - End Set - End Property - - ''' - Public Property Description() As String - Get - Return Me.descriptionField - End Get - Set - Me.descriptionField = value - End Set - End Property - - ''' - _ - Public Property FileSystems() As FileSystemType() - Get - Return Me.fileSystemsField - End Get - Set - Me.fileSystemsField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class FileSystemType - - Private typeField As String - - Private creationDateField As Date - - Private creationDateFieldSpecified As Boolean - - Private modificationDateField As Date - - Private modificationDateFieldSpecified As Boolean - - Private backupDateField As Date - - Private backupDateFieldSpecified As Boolean - - Private clusterSizeField As UInteger - - Private clustersField As ULong - - Private filesField As ULong - - Private filesFieldSpecified As Boolean - - Private bootableField As Boolean - - Private volumeSerialField As String - - Private volumeNameField As String - - Private freeClustersField As ULong - - Private freeClustersFieldSpecified As Boolean - - Private dirtyField As Boolean - - Private expirationDateField As Date - - Private expirationDateFieldSpecified As Boolean - - Private effectiveDateField As Date - - Private effectiveDateFieldSpecified As Boolean - - Private systemIdentifierField As String - - Private volumeSetIdentifierField As String - - Private publisherIdentifierField As String - - Private dataPreparerIdentifierField As String - - Private applicationIdentifierField As String - - Private contentsField As FilesystemContentsType - - ''' - Public Property Type() As String - Get - Return Me.typeField - End Get - Set - Me.typeField = value - End Set - End Property - - ''' - Public Property CreationDate() As Date - Get - Return Me.creationDateField - End Get - Set - Me.creationDateField = value - End Set - End Property - - ''' - _ - Public Property CreationDateSpecified() As Boolean - Get - Return Me.creationDateFieldSpecified - End Get - Set - Me.creationDateFieldSpecified = value - End Set - End Property - - ''' - Public Property ModificationDate() As Date - Get - Return Me.modificationDateField - End Get - Set - Me.modificationDateField = value - End Set - End Property - - ''' - _ - Public Property ModificationDateSpecified() As Boolean - Get - Return Me.modificationDateFieldSpecified - End Get - Set - Me.modificationDateFieldSpecified = value - End Set - End Property - - ''' - Public Property BackupDate() As Date - Get - Return Me.backupDateField - End Get - Set - Me.backupDateField = value - End Set - End Property - - ''' - _ - Public Property BackupDateSpecified() As Boolean - Get - Return Me.backupDateFieldSpecified - End Get - Set - Me.backupDateFieldSpecified = value - End Set - End Property - - ''' - Public Property ClusterSize() As UInteger - Get - Return Me.clusterSizeField - End Get - Set - Me.clusterSizeField = value - End Set - End Property - - ''' - Public Property Clusters() As ULong - Get - Return Me.clustersField - End Get - Set - Me.clustersField = value - End Set - End Property - - ''' - Public Property Files() As ULong - Get - Return Me.filesField - End Get - Set - Me.filesField = value - End Set - End Property - - ''' - _ - Public Property FilesSpecified() As Boolean - Get - Return Me.filesFieldSpecified - End Get - Set - Me.filesFieldSpecified = value - End Set - End Property - - ''' - Public Property Bootable() As Boolean - Get - Return Me.bootableField - End Get - Set - Me.bootableField = value - End Set - End Property - - ''' - Public Property VolumeSerial() As String - Get - Return Me.volumeSerialField - End Get - Set - Me.volumeSerialField = value - End Set - End Property - - ''' - Public Property VolumeName() As String - Get - Return Me.volumeNameField - End Get - Set - Me.volumeNameField = value - End Set - End Property - - ''' - Public Property FreeClusters() As ULong - Get - Return Me.freeClustersField - End Get - Set - Me.freeClustersField = value - End Set - End Property - - ''' - _ - Public Property FreeClustersSpecified() As Boolean - Get - Return Me.freeClustersFieldSpecified - End Get - Set - Me.freeClustersFieldSpecified = value - End Set - End Property - - ''' - Public Property Dirty() As Boolean - Get - Return Me.dirtyField - End Get - Set - Me.dirtyField = value - End Set - End Property - - ''' - Public Property ExpirationDate() As Date - Get - Return Me.expirationDateField - End Get - Set - Me.expirationDateField = value - End Set - End Property - - ''' - _ - Public Property ExpirationDateSpecified() As Boolean - Get - Return Me.expirationDateFieldSpecified - End Get - Set - Me.expirationDateFieldSpecified = value - End Set - End Property - - ''' - Public Property EffectiveDate() As Date - Get - Return Me.effectiveDateField - End Get - Set - Me.effectiveDateField = value - End Set - End Property - - ''' - _ - Public Property EffectiveDateSpecified() As Boolean - Get - Return Me.effectiveDateFieldSpecified - End Get - Set - Me.effectiveDateFieldSpecified = value - End Set - End Property - - ''' - Public Property SystemIdentifier() As String - Get - Return Me.systemIdentifierField - End Get - Set - Me.systemIdentifierField = value - End Set - End Property - - ''' - Public Property VolumeSetIdentifier() As String - Get - Return Me.volumeSetIdentifierField - End Get - Set - Me.volumeSetIdentifierField = value - End Set - End Property - - ''' - Public Property PublisherIdentifier() As String - Get - Return Me.publisherIdentifierField - End Get - Set - Me.publisherIdentifierField = value - End Set - End Property - - ''' - Public Property DataPreparerIdentifier() As String - Get - Return Me.dataPreparerIdentifierField - End Get - Set - Me.dataPreparerIdentifierField = value - End Set - End Property - - ''' - Public Property ApplicationIdentifier() As String - Get - Return Me.applicationIdentifierField - End Get - Set - Me.applicationIdentifierField = value - End Set - End Property - - ''' - Public Property Contents() As FilesystemContentsType - Get - Return Me.contentsField - End Get - Set - Me.contentsField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class FilesystemContentsType - - Private fileField() As ContentsFileType - - Private directoryField() As DirectoryType - - Private namespaceField As String - - ''' - _ - Public Property File() As ContentsFileType() - Get - Return Me.fileField - End Get - Set - Me.fileField = value - End Set - End Property - - ''' - _ - Public Property Directory() As DirectoryType() - Get - Return Me.directoryField - End Get - Set - Me.directoryField = value - End Set - End Property - - ''' - _ - Public Property [namespace]() As String - Get - Return Me.namespaceField - End Get - Set - Me.namespaceField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ContentsFileType - - Private checksumsField() As ChecksumType - - Private extendedAttributesField() As ExtendedAttributeType - - Private nameField As String - - Private creationTimeField As Date - - Private creationTimeFieldSpecified As Boolean - - Private accessTimeField As Date - - Private accessTimeFieldSpecified As Boolean - - Private statusChangeTimeField As Date - - Private statusChangeTimeFieldSpecified As Boolean - - Private backupTimeField As Date - - Private backupTimeFieldSpecified As Boolean - - Private lastWriteTimeField As Date - - Private lastWriteTimeFieldSpecified As Boolean - - Private attributesField As ULong - - Private posixModeField As UInteger - - Private posixModeFieldSpecified As Boolean - - Private deviceNumberField As ULong - - Private deviceNumberFieldSpecified As Boolean - - Private posixGroupIdField As ULong - - Private posixGroupIdFieldSpecified As Boolean - - Private inodeField As ULong - - Private linksField As ULong - - Private posixUserIdField As ULong - - Private posixUserIdFieldSpecified As Boolean - - Private lengthField As ULong - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property ExtendedAttributes() As ExtendedAttributeType() - Get - Return Me.extendedAttributesField - End Get - Set - Me.extendedAttributesField = value - End Set - End Property - - ''' - _ - Public Property name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - _ - Public Property creationTime() As Date - Get - Return Me.creationTimeField - End Get - Set - Me.creationTimeField = value - End Set - End Property - - ''' - _ - Public Property creationTimeSpecified() As Boolean - Get - Return Me.creationTimeFieldSpecified - End Get - Set - Me.creationTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property accessTime() As Date - Get - Return Me.accessTimeField - End Get - Set - Me.accessTimeField = value - End Set - End Property - - ''' - _ - Public Property accessTimeSpecified() As Boolean - Get - Return Me.accessTimeFieldSpecified - End Get - Set - Me.accessTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property statusChangeTime() As Date - Get - Return Me.statusChangeTimeField - End Get - Set - Me.statusChangeTimeField = value - End Set - End Property - - ''' - _ - Public Property statusChangeTimeSpecified() As Boolean - Get - Return Me.statusChangeTimeFieldSpecified - End Get - Set - Me.statusChangeTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property backupTime() As Date - Get - Return Me.backupTimeField - End Get - Set - Me.backupTimeField = value - End Set - End Property - - ''' - _ - Public Property backupTimeSpecified() As Boolean - Get - Return Me.backupTimeFieldSpecified - End Get - Set - Me.backupTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property lastWriteTime() As Date - Get - Return Me.lastWriteTimeField - End Get - Set - Me.lastWriteTimeField = value - End Set - End Property - - ''' - _ - Public Property lastWriteTimeSpecified() As Boolean - Get - Return Me.lastWriteTimeFieldSpecified - End Get - Set - Me.lastWriteTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property attributes() As ULong - Get - Return Me.attributesField - End Get - Set - Me.attributesField = value - End Set - End Property - - ''' - _ - Public Property posixMode() As UInteger - Get - Return Me.posixModeField - End Get - Set - Me.posixModeField = value - End Set - End Property - - ''' - _ - Public Property posixModeSpecified() As Boolean - Get - Return Me.posixModeFieldSpecified - End Get - Set - Me.posixModeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property deviceNumber() As ULong - Get - Return Me.deviceNumberField - End Get - Set - Me.deviceNumberField = value - End Set - End Property - - ''' - _ - Public Property deviceNumberSpecified() As Boolean - Get - Return Me.deviceNumberFieldSpecified - End Get - Set - Me.deviceNumberFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property posixGroupId() As ULong - Get - Return Me.posixGroupIdField - End Get - Set - Me.posixGroupIdField = value - End Set - End Property - - ''' - _ - Public Property posixGroupIdSpecified() As Boolean - Get - Return Me.posixGroupIdFieldSpecified - End Get - Set - Me.posixGroupIdFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property inode() As ULong - Get - Return Me.inodeField - End Get - Set - Me.inodeField = value - End Set - End Property - - ''' - _ - Public Property links() As ULong - Get - Return Me.linksField - End Get - Set - Me.linksField = value - End Set - End Property - - ''' - _ - Public Property posixUserId() As ULong - Get - Return Me.posixUserIdField - End Get - Set - Me.posixUserIdField = value - End Set - End Property - - ''' - _ - Public Property posixUserIdSpecified() As Boolean - Get - Return Me.posixUserIdFieldSpecified - End Get - Set - Me.posixUserIdFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property length() As ULong - Get - Return Me.lengthField - End Get - Set - Me.lengthField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class ExtendedAttributeType - - Private checksumsField() As ChecksumType - - Private nameField As String - - Private lengthField As ULong - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - _ - Public Property length() As ULong - Get - Return Me.lengthField - End Get - Set - Me.lengthField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class DirectoryType - - Private fileField() As ContentsFileType - - Private directoryField() As DirectoryType - - Private nameField As String - - Private creationTimeField As Date - - Private creationTimeFieldSpecified As Boolean - - Private accessTimeField As Date - - Private accessTimeFieldSpecified As Boolean - - Private statusChangeTimeField As Date - - Private statusChangeTimeFieldSpecified As Boolean - - Private backupTimeField As Date - - Private backupTimeFieldSpecified As Boolean - - Private lastWriteTimeField As Date - - Private lastWriteTimeFieldSpecified As Boolean - - Private attributesField As ULong - - Private posixModeField As UInteger - - Private posixModeFieldSpecified As Boolean - - Private deviceNumberField As ULong - - Private deviceNumberFieldSpecified As Boolean - - Private posixGroupIdField As ULong - - Private posixGroupIdFieldSpecified As Boolean - - Private inodeField As ULong - - Private inodeFieldSpecified As Boolean - - Private linksField As ULong - - Private linksFieldSpecified As Boolean - - Private posixUserIdField As ULong - - Private posixUserIdFieldSpecified As Boolean - - ''' - _ - Public Property File() As ContentsFileType() - Get - Return Me.fileField - End Get - Set - Me.fileField = value - End Set - End Property - - ''' - _ - Public Property Directory() As DirectoryType() - Get - Return Me.directoryField - End Get - Set - Me.directoryField = value - End Set - End Property - - ''' - _ - Public Property name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - _ - Public Property creationTime() As Date - Get - Return Me.creationTimeField - End Get - Set - Me.creationTimeField = value - End Set - End Property - - ''' - _ - Public Property creationTimeSpecified() As Boolean - Get - Return Me.creationTimeFieldSpecified - End Get - Set - Me.creationTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property accessTime() As Date - Get - Return Me.accessTimeField - End Get - Set - Me.accessTimeField = value - End Set - End Property - - ''' - _ - Public Property accessTimeSpecified() As Boolean - Get - Return Me.accessTimeFieldSpecified - End Get - Set - Me.accessTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property statusChangeTime() As Date - Get - Return Me.statusChangeTimeField - End Get - Set - Me.statusChangeTimeField = value - End Set - End Property - - ''' - _ - Public Property statusChangeTimeSpecified() As Boolean - Get - Return Me.statusChangeTimeFieldSpecified - End Get - Set - Me.statusChangeTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property backupTime() As Date - Get - Return Me.backupTimeField - End Get - Set - Me.backupTimeField = value - End Set - End Property - - ''' - _ - Public Property backupTimeSpecified() As Boolean - Get - Return Me.backupTimeFieldSpecified - End Get - Set - Me.backupTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property lastWriteTime() As Date - Get - Return Me.lastWriteTimeField - End Get - Set - Me.lastWriteTimeField = value - End Set - End Property - - ''' - _ - Public Property lastWriteTimeSpecified() As Boolean - Get - Return Me.lastWriteTimeFieldSpecified - End Get - Set - Me.lastWriteTimeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property attributes() As ULong - Get - Return Me.attributesField - End Get - Set - Me.attributesField = value - End Set - End Property - - ''' - _ - Public Property posixMode() As UInteger - Get - Return Me.posixModeField - End Get - Set - Me.posixModeField = value - End Set - End Property - - ''' - _ - Public Property posixModeSpecified() As Boolean - Get - Return Me.posixModeFieldSpecified - End Get - Set - Me.posixModeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property deviceNumber() As ULong - Get - Return Me.deviceNumberField - End Get - Set - Me.deviceNumberField = value - End Set - End Property - - ''' - _ - Public Property deviceNumberSpecified() As Boolean - Get - Return Me.deviceNumberFieldSpecified - End Get - Set - Me.deviceNumberFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property posixGroupId() As ULong - Get - Return Me.posixGroupIdField - End Get - Set - Me.posixGroupIdField = value - End Set - End Property - - ''' - _ - Public Property posixGroupIdSpecified() As Boolean - Get - Return Me.posixGroupIdFieldSpecified - End Get - Set - Me.posixGroupIdFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property inode() As ULong - Get - Return Me.inodeField - End Get - Set - Me.inodeField = value - End Set - End Property - - ''' - _ - Public Property inodeSpecified() As Boolean - Get - Return Me.inodeFieldSpecified - End Get - Set - Me.inodeFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property links() As ULong - Get - Return Me.linksField - End Get - Set - Me.linksField = value - End Set - End Property - - ''' - _ - Public Property linksSpecified() As Boolean - Get - Return Me.linksFieldSpecified - End Get - Set - Me.linksFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property posixUserId() As ULong - Get - Return Me.posixUserIdField - End Get - Set - Me.posixUserIdField = value - End Set - End Property - - ''' - _ - Public Property posixUserIdSpecified() As Boolean - Get - Return Me.posixUserIdFieldSpecified - End Get - Set - Me.posixUserIdFieldSpecified = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class CoordinatesType - - Private latitudeField As Double - - Private longitudeField As Double - - ''' - Public Property Latitude() As Double - Get - Return Me.latitudeField - End Get - Set - Me.latitudeField = value - End Set - End Property - - ''' - Public Property Longitude() As Double - Get - Return Me.longitudeField - End Get - Set - Me.longitudeField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class RecordingType - - Private broadcasterField As String - - Private broadcastPlatformField As String - - Private sourceFormatField As RecordingTypeSourceFormat - - Private timestampField As Date - - Private softwareField() As SoftwareType - - Private coordinatesField As CoordinatesType - - ''' - Public Property Broadcaster() As String - Get - Return Me.broadcasterField - End Get - Set - Me.broadcasterField = value - End Set - End Property - - ''' - Public Property BroadcastPlatform() As String - Get - Return Me.broadcastPlatformField - End Get - Set - Me.broadcastPlatformField = value - End Set - End Property - - ''' - Public Property SourceFormat() As RecordingTypeSourceFormat - Get - Return Me.sourceFormatField - End Get - Set - Me.sourceFormatField = value - End Set - End Property - - ''' - Public Property Timestamp() As Date - Get - Return Me.timestampField - End Get - Set - Me.timestampField = value - End Set - End Property - - ''' - _ - Public Property Software() As SoftwareType() - Get - Return Me.softwareField - End Get - Set - Me.softwareField = value - End Set - End Property - - ''' - Public Property Coordinates() As CoordinatesType - Get - Return Me.coordinatesField - End Get - Set - Me.coordinatesField = value - End Set - End Property - End Class - - ''' - _ - Public Enum RecordingTypeSourceFormat - - ''' - _ - ITUA - - ''' - _ - ITUB - - ''' - _ - ITUC - - ''' - _ - ITUD - - ''' - _ - ITUE - - ''' - _ - ITUF - - ''' - _ - ITUG - - ''' - _ - ITUH - - ''' - _ - ITUI - - ''' - _ - ITUJ - - ''' - _ - ITUK - - ''' - _ - ITUL - - ''' - _ - ITUM - - ''' - _ - ITUN - - ''' - _ - PALB - - ''' - _ - SECAMB - - ''' - _ - PALD - - ''' - _ - SECAMD - - ''' - _ - PALG - - ''' - _ - SECAMG - - ''' - _ - PALH - - ''' - _ - PALI - - ''' - _ - PALK - - ''' - _ - SECAMK - - ''' - _ - NTSCM - - ''' - _ - PALN - - ''' - _ - PALM - - ''' - _ - SECAMM - - ''' - MUSE - - ''' - PALplus - - ''' - FM - - ''' - AM - - ''' - COFDM - - ''' - _ - CAMD - - ''' - DAB - - ''' - _ - DAB1 - - ''' - DRM - - ''' - _ - DRM1 - - ''' - FMeXtra - - ''' - ATSC - - ''' - ATSC2 - - ''' - ATSC3 - - ''' - _ - ATSCMH - - ''' - _ - DVBT - - ''' - _ - DVBT2 - - ''' - _ - DVBS - - ''' - _ - DVBS2 - - ''' - _ - DVBS2X - - ''' - _ - DVBC - - ''' - _ - DVBC2 - - ''' - _ - DVBH - - ''' - _ - DVBNGH - - ''' - _ - DVBSH - - ''' - _ - ISDBT - - ''' - _ - ISDBTb - - ''' - _ - ISDBS - - ''' - _ - ISDBC - - ''' - _ - Item1seg - - ''' - DTMB - - ''' - CCMB - - ''' - _ - TDMB - - ''' - _ - SDMB - - ''' - IPTV - - ''' - _ - DVBMT - - ''' - _ - DVBMC - - ''' - _ - DVBMS - - ''' - ADR - - ''' - SDR - End Enum - - ''' - _ - Partial Public Class SubtitleTracksType - - Private languagesField() As LanguagesTypeLanguage - - Private trackNumberField As UInteger - - Private codecField As String - - ''' - _ - Public Property Languages() As LanguagesTypeLanguage() - Get - Return Me.languagesField - End Get - Set - Me.languagesField = value - End Set - End Property - - ''' - _ - Public Property TrackNumber() As UInteger - Get - Return Me.trackNumberField - End Get - Set - Me.trackNumberField = value - End Set - End Property - - ''' - _ - Public Property Codec() As String - Get - Return Me.codecField - End Get - Set - Me.codecField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class VideoTracksType - - Private languagesField() As LanguagesTypeLanguage - - Private trackNumberField As UInteger - - Private codecField As String - - Private horizontalField As UInteger - - Private verticalField As UInteger - - Private meanBitrateField As Long - - Private threeDField As Boolean - - ''' - _ - Public Property Languages() As LanguagesTypeLanguage() - Get - Return Me.languagesField - End Get - Set - Me.languagesField = value - End Set - End Property - - ''' - _ - Public Property TrackNumber() As UInteger - Get - Return Me.trackNumberField - End Get - Set - Me.trackNumberField = value - End Set - End Property - - ''' - _ - Public Property Codec() As String - Get - Return Me.codecField - End Get - Set - Me.codecField = value - End Set - End Property - - ''' - _ - Public Property Horizontal() As UInteger - Get - Return Me.horizontalField - End Get - Set - Me.horizontalField = value - End Set - End Property - - ''' - _ - Public Property Vertical() As UInteger - Get - Return Me.verticalField - End Get - Set - Me.verticalField = value - End Set - End Property - - ''' - _ - Public Property MeanBitrate() As Long - Get - Return Me.meanBitrateField - End Get - Set - Me.meanBitrateField = value - End Set - End Property - - ''' - _ - Public Property ThreeD() As Boolean - Get - Return Me.threeDField - End Get - Set - Me.threeDField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class AudioTracksType - - Private languagesField() As LanguagesTypeLanguage - - Private trackNumberField As UInteger - - Private accoustIDField As String - - Private codecField As String - - Private channelsField As UInteger - - Private sampleRateField As Double - - Private meanBitrateField As Long - - ''' - _ - Public Property Languages() As LanguagesTypeLanguage() - Get - Return Me.languagesField - End Get - Set - Me.languagesField = value - End Set - End Property - - ''' - _ - Public Property TrackNumber() As UInteger - Get - Return Me.trackNumberField - End Get - Set - Me.trackNumberField = value - End Set - End Property - - ''' - _ - Public Property AccoustID() As String - Get - Return Me.accoustIDField - End Get - Set - Me.accoustIDField = value - End Set - End Property - - ''' - _ - Public Property Codec() As String - Get - Return Me.codecField - End Get - Set - Me.codecField = value - End Set - End Property - - ''' - _ - Public Property Channels() As UInteger - Get - Return Me.channelsField - End Get - Set - Me.channelsField = value - End Set - End Property - - ''' - _ - Public Property SampleRate() As Double - Get - Return Me.sampleRateField - End Get - Set - Me.sampleRateField = value - End Set - End Property - - ''' - _ - Public Property MeanBitrate() As Long - Get - Return Me.meanBitrateField - End Get - Set - Me.meanBitrateField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class AdvertisementType - - Private manufacturerField As String - - Private productField As String - - Private fileField As FileType - - Private fileSizeField As ULong - - Private framesField As ULong - - Private framesFieldSpecified As Boolean - - Private durationField As Double - - Private meanFrameRateField As Single - - Private meanFrameRateFieldSpecified As Boolean - - Private checksumsField() As ChecksumType - - Private audioTrackField() As AudioTracksType - - Private videoTrackField() As VideoTracksType - - Private subtitleTrackField() As SubtitleTracksType - - Private recordingField As RecordingType - - ''' - Public Property Manufacturer() As String - Get - Return Me.manufacturerField - End Get - Set - Me.manufacturerField = value - End Set - End Property - - ''' - Public Property Product() As String - Get - Return Me.productField - End Get - Set - Me.productField = value - End Set - End Property - - ''' - Public Property File() As FileType - Get - Return Me.fileField - End Get - Set - Me.fileField = value - End Set - End Property - - ''' - Public Property FileSize() As ULong - Get - Return Me.fileSizeField - End Get - Set - Me.fileSizeField = value - End Set - End Property - - ''' - Public Property Frames() As ULong - Get - Return Me.framesField - End Get - Set - Me.framesField = value - End Set - End Property - - ''' - _ - Public Property FramesSpecified() As Boolean - Get - Return Me.framesFieldSpecified - End Get - Set - Me.framesFieldSpecified = value - End Set - End Property - - ''' - Public Property Duration() As Double - Get - Return Me.durationField - End Get - Set - Me.durationField = value - End Set - End Property - - ''' - Public Property MeanFrameRate() As Single - Get - Return Me.meanFrameRateField - End Get - Set - Me.meanFrameRateField = value - End Set - End Property - - ''' - _ - Public Property MeanFrameRateSpecified() As Boolean - Get - Return Me.meanFrameRateFieldSpecified - End Get - Set - Me.meanFrameRateFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property AudioTrack() As AudioTracksType() - Get - Return Me.audioTrackField - End Get - Set - Me.audioTrackField = value - End Set - End Property - - ''' - _ - Public Property VideoTrack() As VideoTracksType() - Get - Return Me.videoTrackField - End Get - Set - Me.videoTrackField = value - End Set - End Property - - ''' - _ - Public Property SubtitleTrack() As SubtitleTracksType() - Get - Return Me.subtitleTrackField - End Get - Set - Me.subtitleTrackField = value - End Set - End Property - - ''' - Public Property Recording() As RecordingType - Get - Return Me.recordingField - End Get - Set - Me.recordingField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class SubChannelType - - Private imageField As ImageType - - Private sizeField As ULong - - Private checksumsField() As ChecksumType - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class TrackFlagsType - - Private quadraphonicField As Boolean - - Private dataField As Boolean - - Private copyPermittedField As Boolean - - Private preEmphasisField As Boolean - - ''' - Public Property Quadraphonic() As Boolean - Get - Return Me.quadraphonicField - End Get - Set - Me.quadraphonicField = value - End Set - End Property - - ''' - Public Property Data() As Boolean - Get - Return Me.dataField - End Get - Set - Me.dataField = value - End Set - End Property - - ''' - Public Property CopyPermitted() As Boolean - Get - Return Me.copyPermittedField - End Get - Set - Me.copyPermittedField = value - End Set - End Property - - ''' - Public Property PreEmphasis() As Boolean - Get - Return Me.preEmphasisField - End Get - Set - Me.preEmphasisField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class TrackIndexType - - Private indexField As UShort - - Private valueField As Integer - - ''' - _ - Public Property index() As UShort - Get - Return Me.indexField - End Get - Set - Me.indexField = value - End Set - End Property - - ''' - _ - Public Property Value() As Integer - Get - Return Me.valueField - End Get - Set - Me.valueField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class TrackSequenceType - - Private trackNumberField As UInteger - - Private sessionField As UInteger - - ''' - Public Property TrackNumber() As UInteger - Get - Return Me.trackNumberField - End Get - Set - Me.trackNumberField = value - End Set - End Property - - ''' - Public Property Session() As UInteger - Get - Return Me.sessionField - End Get - Set - Me.sessionField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class TrackType - - Private imageField As ImageType - - Private sizeField As ULong - - Private sequenceField As TrackSequenceType - - Private startMSFField As String - - Private endMSFField As String - - Private startSectorField As ULong - - Private endSectorField As ULong - - Private indexesField() As TrackIndexType - - Private flagsField As TrackFlagsType - - Private iSRCField As String - - Private trackType1Field As TrackTypeTrackType - - Private bytesPerSectorField As UInteger - - Private accoustIDField As String - - Private checksumsField() As ChecksumType - - Private subChannelField As SubChannelType - - Private fileSystemInformationField() As PartitionType - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - Public Property Sequence() As TrackSequenceType - Get - Return Me.sequenceField - End Get - Set - Me.sequenceField = value - End Set - End Property - - ''' - Public Property StartMSF() As String - Get - Return Me.startMSFField - End Get - Set - Me.startMSFField = value - End Set - End Property - - ''' - Public Property EndMSF() As String - Get - Return Me.endMSFField - End Get - Set - Me.endMSFField = value - End Set - End Property - - ''' - Public Property StartSector() As ULong - Get - Return Me.startSectorField - End Get - Set - Me.startSectorField = value - End Set - End Property - - ''' - Public Property EndSector() As ULong - Get - Return Me.endSectorField - End Get - Set - Me.endSectorField = value - End Set - End Property - - ''' - _ - Public Property Indexes() As TrackIndexType() - Get - Return Me.indexesField - End Get - Set - Me.indexesField = value - End Set - End Property - - ''' - Public Property Flags() As TrackFlagsType - Get - Return Me.flagsField - End Get - Set - Me.flagsField = value - End Set - End Property - - ''' - Public Property ISRC() As String - Get - Return Me.iSRCField - End Get - Set - Me.iSRCField = value - End Set - End Property - - ''' - _ - Public Property TrackType1() As TrackTypeTrackType - Get - Return Me.trackType1Field - End Get - Set - Me.trackType1Field = value - End Set - End Property - - ''' - Public Property BytesPerSector() As UInteger - Get - Return Me.bytesPerSectorField - End Get - Set - Me.bytesPerSectorField = value - End Set - End Property - - ''' - Public Property AccoustID() As String - Get - Return Me.accoustIDField - End Get - Set - Me.accoustIDField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - Public Property SubChannel() As SubChannelType - Get - Return Me.subChannelField - End Get - Set - Me.subChannelField = value - End Set - End Property - - ''' - _ - Public Property FileSystemInformation() As PartitionType() - Get - Return Me.fileSystemInformationField - End Get - Set - Me.fileSystemInformationField = value - End Set - End Property - End Class - - ''' - _ - Public Enum TrackTypeTrackType - - ''' - audio - - ''' - mode0 - - ''' - mode1 - - ''' - mode2 - - ''' - m2f1 - - ''' - m2f2 - - ''' - dvd - - ''' - hddvd - - ''' - bluray - - ''' - ddcd - End Enum - - ''' - _ - Partial Public Class PS3EncryptionType - - Private keyField As String - - Private serialField As String - - ''' - Public Property Key() As String - Get - Return Me.keyField - End Get - Set - Me.keyField = value - End Set - End Property - - ''' - Public Property Serial() As String - Get - Return Me.serialField - End Get - Set - Me.serialField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class XboxSecuritySectorsType - - Private requestVersionField As UInteger - - Private requestNumberField As UInteger - - Private securitySectorsField As DumpType - - ''' - Public Property RequestVersion() As UInteger - Get - Return Me.requestVersionField - End Get - Set - Me.requestVersionField = value - End Set - End Property - - ''' - Public Property RequestNumber() As UInteger - Get - Return Me.requestNumberField - End Get - Set - Me.requestNumberField = value - End Set - End Property - - ''' - Public Property SecuritySectors() As DumpType - Get - Return Me.securitySectorsField - End Get - Set - Me.securitySectorsField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class XboxType - - Private pFIField As DumpType - - Private dMIField As DumpType - - Private securitySectorsField() As XboxSecuritySectorsType - - ''' - Public Property PFI() As DumpType - Get - Return Me.pFIField - End Get - Set - Me.pFIField = value - End Set - End Property - - ''' - Public Property DMI() As DumpType - Get - Return Me.dMIField - End Get - Set - Me.dMIField = value - End Set - End Property - - ''' - _ - Public Property SecuritySectors() As XboxSecuritySectorsType() - Get - Return Me.securitySectorsField - End Get - Set - Me.securitySectorsField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class BorderType - - Private imageField As String - - Private sizeField As ULong - - Private checksumsField() As ChecksumType - - Private sessionField As UInteger - - Private sessionFieldSpecified As Boolean - - ''' - Public Property Image() As String - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property session() As UInteger - Get - Return Me.sessionField - End Get - Set - Me.sessionField = value - End Set - End Property - - ''' - _ - Public Property sessionSpecified() As Boolean - Get - Return Me.sessionFieldSpecified - End Get - Set - Me.sessionFieldSpecified = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class CaseType - - Private caseType1Field As CaseTypeCaseType - - Private scansField As ScansType - - ''' - _ - Public Property CaseType1() As CaseTypeCaseType - Get - Return Me.caseType1Field - End Get - Set - Me.caseType1Field = value - End Set - End Property - - ''' - Public Property Scans() As ScansType - Get - Return Me.scansField - End Get - Set - Me.scansField = value - End Set - End Property - End Class - - ''' - _ - Public Enum CaseTypeCaseType - - ''' - jewel - - ''' - bigjewel - - ''' - slimjewel - - ''' - sleeve - - ''' - qpack - - ''' - digisleeve - - ''' - discboxslider - - ''' - compacplus - - ''' - keepcase - - ''' - snapcase - - ''' - softcase - - ''' - ecopack - - ''' - liftlock - - ''' - spindle - - ''' - ps2case - - ''' - ps3case - - ''' - bluraykeepcase - - ''' - pscase - - ''' - dccase - - ''' - saturncase - - ''' - xboxcase - - ''' - xbox360case - - ''' - xboxonecase - - ''' - saturnbigcase - - ''' - gccase - - ''' - wiicase - - ''' - unknown - End Enum - - ''' - _ - Partial Public Class LayeredTextType - - Private layerField As UInteger - - Private layerFieldSpecified As Boolean - - Private valueField As String - - ''' - _ - Public Property layer() As UInteger - Get - Return Me.layerField - End Get - Set - Me.layerField = value - End Set - End Property - - ''' - _ - Public Property layerSpecified() As Boolean - Get - Return Me.layerFieldSpecified - End Get - Set - Me.layerFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Value() As String - Get - Return Me.valueField - End Get - Set - Me.valueField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class SectorsType - - Private layerField As UInteger - - Private layerFieldSpecified As Boolean - - Private valueField As ULong - - ''' - _ - Public Property layer() As UInteger - Get - Return Me.layerField - End Get - Set - Me.layerField = value - End Set - End Property - - ''' - _ - Public Property layerSpecified() As Boolean - Get - Return Me.layerFieldSpecified - End Get - Set - Me.layerFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Value() As ULong - Get - Return Me.valueField - End Get - Set - Me.valueField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class LayersType - - Private sectorsField() As SectorsType - - Private typeField As LayersTypeType - - Private typeFieldSpecified As Boolean - - ''' - _ - Public Property Sectors() As SectorsType() - Get - Return Me.sectorsField - End Get - Set - Me.sectorsField = value - End Set - End Property - - ''' - _ - Public Property type() As LayersTypeType - Get - Return Me.typeField - End Get - Set - Me.typeField = value - End Set - End Property - - ''' - _ - Public Property typeSpecified() As Boolean - Get - Return Me.typeFieldSpecified - End Get - Set - Me.typeFieldSpecified = value - End Set - End Property - End Class - - ''' - _ - Public Enum LayersTypeType - - ''' - PTP - - ''' - OTP - End Enum - - ''' - _ - Partial Public Class OpticalDiscType - - Private imageField As ImageType - - Private sizeField As ULong - - Private sequenceField As SequenceType - - Private layersField As LayersType - - Private checksumsField() As ChecksumType - - Private partNumberField As String - - Private serialNumberField As String - - Private ringCodeField() As LayeredTextType - - Private masteringSIDField() As LayeredTextType - - Private toolstampField() As LayeredTextType - - Private mouldSIDField() As LayeredTextType - - Private mouldTextField() As LayeredTextType - - Private discTypeField As String - - Private discSubTypeField As String - - Private offsetField As Integer - - Private offsetFieldSpecified As Boolean - - Private tracksField() As UInteger - - Private sessionsField As UInteger - - Private copyProtectionField As String - - Private dimensionsField As DimensionsType - - Private caseField As CaseType - - Private scansField As ScansType - - Private pFIField As DumpType - - Private dMIField As DumpType - - Private cMIField As DumpType - - Private bCAField As DumpType - - Private aTIPField As DumpType - - Private aDIPField As DumpType - - Private pMAField As DumpType - - Private dDSField As DumpType - - Private sAIField As DumpType - - Private lastRMDField As DumpType - - Private pRIField As DumpType - - Private mediaIDField As DumpType - - Private pFIRField As DumpType - - Private dCBField As DumpType - - Private diField As DumpType - - Private pACField As DumpType - - Private tOCField As DumpType - - Private leadInCdTextField As DumpType - - Private firstTrackPregrapField() As BorderType - - Private leadInField() As BorderType - - Private leadOutField() As BorderType - - Private xboxField As XboxType - - Private pS3EncryptionField As PS3EncryptionType - - Private mediaCatalogueNumberField As String - - Private trackField() As TrackType - - Private dumpHardwareArrayField() As DumpHardwareType - - ''' - Public Property Image() As ImageType - Get - Return Me.imageField - End Get - Set - Me.imageField = value - End Set - End Property - - ''' - Public Property Size() As ULong - Get - Return Me.sizeField - End Get - Set - Me.sizeField = value - End Set - End Property - - ''' - Public Property Sequence() As SequenceType - Get - Return Me.sequenceField - End Get - Set - Me.sequenceField = value - End Set - End Property - - ''' - Public Property Layers() As LayersType - Get - Return Me.layersField - End Get - Set - Me.layersField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - Public Property PartNumber() As String - Get - Return Me.partNumberField - End Get - Set - Me.partNumberField = value - End Set - End Property - - ''' - Public Property SerialNumber() As String - Get - Return Me.serialNumberField - End Get - Set - Me.serialNumberField = value - End Set - End Property - - ''' - _ - Public Property RingCode() As LayeredTextType() - Get - Return Me.ringCodeField - End Get - Set - Me.ringCodeField = value - End Set - End Property - - ''' - _ - Public Property MasteringSID() As LayeredTextType() - Get - Return Me.masteringSIDField - End Get - Set - Me.masteringSIDField = value - End Set - End Property - - ''' - _ - Public Property Toolstamp() As LayeredTextType() - Get - Return Me.toolstampField - End Get - Set - Me.toolstampField = value - End Set - End Property - - ''' - _ - Public Property MouldSID() As LayeredTextType() - Get - Return Me.mouldSIDField - End Get - Set - Me.mouldSIDField = value - End Set - End Property - - ''' - _ - Public Property MouldText() As LayeredTextType() - Get - Return Me.mouldTextField - End Get - Set - Me.mouldTextField = value - End Set - End Property - - ''' - Public Property DiscType() As String - Get - Return Me.discTypeField - End Get - Set - Me.discTypeField = value - End Set - End Property - - ''' - Public Property DiscSubType() As String - Get - Return Me.discSubTypeField - End Get - Set - Me.discSubTypeField = value - End Set - End Property - - ''' - Public Property Offset() As Integer - Get - Return Me.offsetField - End Get - Set - Me.offsetField = value - End Set - End Property - - ''' - _ - Public Property OffsetSpecified() As Boolean - Get - Return Me.offsetFieldSpecified - End Get - Set - Me.offsetFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Tracks() As UInteger() - Get - Return Me.tracksField - End Get - Set - Me.tracksField = value - End Set - End Property - - ''' - Public Property Sessions() As UInteger - Get - Return Me.sessionsField - End Get - Set - Me.sessionsField = value - End Set - End Property - - ''' - Public Property CopyProtection() As String - Get - Return Me.copyProtectionField - End Get - Set - Me.copyProtectionField = value - End Set - End Property - - ''' - Public Property Dimensions() As DimensionsType - Get - Return Me.dimensionsField - End Get - Set - Me.dimensionsField = value - End Set - End Property - - ''' - Public Property [Case]() As CaseType - Get - Return Me.caseField - End Get - Set - Me.caseField = value - End Set - End Property - - ''' - Public Property Scans() As ScansType - Get - Return Me.scansField - End Get - Set - Me.scansField = value - End Set - End Property - - ''' - Public Property PFI() As DumpType - Get - Return Me.pFIField - End Get - Set - Me.pFIField = value - End Set - End Property - - ''' - Public Property DMI() As DumpType - Get - Return Me.dMIField - End Get - Set - Me.dMIField = value - End Set - End Property - - ''' - Public Property CMI() As DumpType - Get - Return Me.cMIField - End Get - Set - Me.cMIField = value - End Set - End Property - - ''' - Public Property BCA() As DumpType - Get - Return Me.bCAField - End Get - Set - Me.bCAField = value - End Set - End Property - - ''' - Public Property ATIP() As DumpType - Get - Return Me.aTIPField - End Get - Set - Me.aTIPField = value - End Set - End Property - - ''' - Public Property ADIP() As DumpType - Get - Return Me.aDIPField - End Get - Set - Me.aDIPField = value - End Set - End Property - - ''' - Public Property PMA() As DumpType - Get - Return Me.pMAField - End Get - Set - Me.pMAField = value - End Set - End Property - - ''' - Public Property DDS() As DumpType - Get - Return Me.dDSField - End Get - Set - Me.dDSField = value - End Set - End Property - - ''' - Public Property SAI() As DumpType - Get - Return Me.sAIField - End Get - Set - Me.sAIField = value - End Set - End Property - - ''' - Public Property LastRMD() As DumpType - Get - Return Me.lastRMDField - End Get - Set - Me.lastRMDField = value - End Set - End Property - - ''' - Public Property PRI() As DumpType - Get - Return Me.pRIField - End Get - Set - Me.pRIField = value - End Set - End Property - - ''' - Public Property MediaID() As DumpType - Get - Return Me.mediaIDField - End Get - Set - Me.mediaIDField = value - End Set - End Property - - ''' - Public Property PFIR() As DumpType - Get - Return Me.pFIRField - End Get - Set - Me.pFIRField = value - End Set - End Property - - ''' - Public Property DCB() As DumpType - Get - Return Me.dCBField - End Get - Set - Me.dCBField = value - End Set - End Property - - ''' - Public Property DI() As DumpType - Get - Return Me.diField - End Get - Set - Me.diField = value - End Set - End Property - - ''' - Public Property PAC() As DumpType - Get - Return Me.pACField - End Get - Set - Me.pACField = value - End Set - End Property - - ''' - Public Property TOC() As DumpType - Get - Return Me.tOCField - End Get - Set - Me.tOCField = value - End Set - End Property - - ''' - Public Property LeadInCdText() As DumpType - Get - Return Me.leadInCdTextField - End Get - Set - Me.leadInCdTextField = value - End Set - End Property - - ''' - _ - Public Property FirstTrackPregrap() As BorderType() - Get - Return Me.firstTrackPregrapField - End Get - Set - Me.firstTrackPregrapField = value - End Set - End Property - - ''' - _ - Public Property LeadIn() As BorderType() - Get - Return Me.leadInField - End Get - Set - Me.leadInField = value - End Set - End Property - - ''' - _ - Public Property LeadOut() As BorderType() - Get - Return Me.leadOutField - End Get - Set - Me.leadOutField = value - End Set - End Property - - ''' - Public Property Xbox() As XboxType - Get - Return Me.xboxField - End Get - Set - Me.xboxField = value - End Set - End Property - - ''' - Public Property PS3Encryption() As PS3EncryptionType - Get - Return Me.pS3EncryptionField - End Get - Set - Me.pS3EncryptionField = value - End Set - End Property - - ''' - Public Property MediaCatalogueNumber() As String - Get - Return Me.mediaCatalogueNumberField - End Get - Set - Me.mediaCatalogueNumberField = value - End Set - End Property - - ''' - _ - Public Property Track() As TrackType() - Get - Return Me.trackField - End Get - Set - Me.trackField = value - End Set - End Property - - ''' - _ - Public Property DumpHardwareArray() As DumpHardwareType() - Get - Return Me.dumpHardwareArrayField - End Get - Set - Me.dumpHardwareArrayField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class UserManualType - - Private languageField() As LanguagesTypeLanguage - - Private pagesField As UInteger - - Private pageSizeField As String - - Private scanField As ScanType - - ''' - _ - Public Property Language() As LanguagesTypeLanguage() - Get - Return Me.languageField - End Get - Set - Me.languageField = value - End Set - End Property - - ''' - Public Property Pages() As UInteger - Get - Return Me.pagesField - End Get - Set - Me.pagesField = value - End Set - End Property - - ''' - Public Property PageSize() As String - Get - Return Me.pageSizeField - End Get - Set - Me.pageSizeField = value - End Set - End Property - - ''' - Public Property Scan() As ScanType - Get - Return Me.scanField - End Get - Set - Me.scanField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class RequiredOperatingSystemType - - Private nameField As String - - Private versionField() As String - - ''' - Public Property Name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - _ - Public Property Version() As String() - Get - Return Me.versionField - End Get - Set - Me.versionField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class BookType - - Private barcodesField() As BarcodeType - - Private coverField As CoverType - - Private nameField As String - - Private editorialField As String - - Private authorField As String - - Private publicationDateField As Date - - Private publicationDateFieldSpecified As Boolean - - Private languageField() As LanguagesTypeLanguage - - Private pagesField As UInteger - - Private pagesFieldSpecified As Boolean - - Private pageSizeField As String - - Private scanField As ScanType - - ''' - _ - Public Property Barcodes() As BarcodeType() - Get - Return Me.barcodesField - End Get - Set - Me.barcodesField = value - End Set - End Property - - ''' - Public Property Cover() As CoverType - Get - Return Me.coverField - End Get - Set - Me.coverField = value - End Set - End Property - - ''' - Public Property Name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - Public Property Editorial() As String - Get - Return Me.editorialField - End Get - Set - Me.editorialField = value - End Set - End Property - - ''' - Public Property Author() As String - Get - Return Me.authorField - End Get - Set - Me.authorField = value - End Set - End Property - - ''' - _ - Public Property PublicationDate() As Date - Get - Return Me.publicationDateField - End Get - Set - Me.publicationDateField = value - End Set - End Property - - ''' - _ - Public Property PublicationDateSpecified() As Boolean - Get - Return Me.publicationDateFieldSpecified - End Get - Set - Me.publicationDateFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Language() As LanguagesTypeLanguage() - Get - Return Me.languageField - End Get - Set - Me.languageField = value - End Set - End Property - - ''' - Public Property Pages() As UInteger - Get - Return Me.pagesField - End Get - Set - Me.pagesField = value - End Set - End Property - - ''' - _ - Public Property PagesSpecified() As Boolean - Get - Return Me.pagesFieldSpecified - End Get - Set - Me.pagesFieldSpecified = value - End Set - End Property - - ''' - Public Property PageSize() As String - Get - Return Me.pageSizeField - End Get - Set - Me.pageSizeField = value - End Set - End Property - - ''' - Public Property Scan() As ScanType - Get - Return Me.scanField - End Get - Set - Me.scanField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class CoverType - - Private fileField As FileType - - Private checksumsField() As ChecksumType - - Private thumbnailField() As Byte - - ''' - Public Property File() As FileType - Get - Return Me.fileField - End Get - Set - Me.fileField = value - End Set - End Property - - ''' - _ - Public Property Checksums() As ChecksumType() - Get - Return Me.checksumsField - End Get - Set - Me.checksumsField = value - End Set - End Property - - ''' - _ - Public Property Thumbnail() As Byte() - Get - Return Me.thumbnailField - End Get - Set - Me.thumbnailField = value - End Set - End Property - End Class - - ''' - _ - Partial Public Class MagazineType - - Private barcodesField() As BarcodeType - - Private coverField As CoverType - - Private nameField As String - - Private editorialField As String - - Private publicationDateField As Date - - Private publicationDateFieldSpecified As Boolean - - Private numberField As UInteger - - Private numberFieldSpecified As Boolean - - Private languageField() As LanguagesTypeLanguage - - Private pagesField As UInteger - - Private pagesFieldSpecified As Boolean - - Private pageSizeField As String - - Private scanField As ScanType - - ''' - _ - Public Property Barcodes() As BarcodeType() - Get - Return Me.barcodesField - End Get - Set - Me.barcodesField = value - End Set - End Property - - ''' - Public Property Cover() As CoverType - Get - Return Me.coverField - End Get - Set - Me.coverField = value - End Set - End Property - - ''' - Public Property Name() As String - Get - Return Me.nameField - End Get - Set - Me.nameField = value - End Set - End Property - - ''' - Public Property Editorial() As String - Get - Return Me.editorialField - End Get - Set - Me.editorialField = value - End Set - End Property - - ''' - _ - Public Property PublicationDate() As Date - Get - Return Me.publicationDateField - End Get - Set - Me.publicationDateField = value - End Set - End Property - - ''' - _ - Public Property PublicationDateSpecified() As Boolean - Get - Return Me.publicationDateFieldSpecified - End Get - Set - Me.publicationDateFieldSpecified = value - End Set - End Property - - ''' - Public Property Number() As UInteger - Get - Return Me.numberField - End Get - Set - Me.numberField = value - End Set - End Property - - ''' - _ - Public Property NumberSpecified() As Boolean - Get - Return Me.numberFieldSpecified - End Get - Set - Me.numberFieldSpecified = value - End Set - End Property - - ''' - _ - Public Property Language() As LanguagesTypeLanguage() - Get - Return Me.languageField - End Get - Set - Me.languageField = value - End Set - End Property - - ''' - Public Property Pages() As UInteger - Get - Return Me.pagesField - End Get - Set - Me.pagesField = value - End Set - End Property - - ''' - _ - Public Property PagesSpecified() As Boolean - Get - Return Me.pagesFieldSpecified - End Get - Set - Me.pagesFieldSpecified = value - End Set - End Property - - ''' - Public Property PageSize() As String - Get - Return Me.pageSizeField - End Get - Set - Me.pageSizeField = value - End Set - End Property - - ''' - Public Property Scan() As ScanType - Get - Return Me.scanField - End Get - Set - Me.scanField = value - End Set - End Property - End Class - - ''' - _ - Public Enum ArchitecturesTypeArchitecture - - ''' - _ - Item4004 - - ''' - _ - Item4040 - - ''' - _ - Item6502 - - ''' - _ - Item65816 - - ''' - _ - Item8008 - - ''' - _ - Item8051 - - ''' - _ - Item8080 - - ''' - _ - Item8085 - - ''' - aarch64 - - ''' - am29000 - - ''' - amd64 - - ''' - apx432 - - ''' - arm - - ''' - avr - - ''' - avr32 - - ''' - axp - - ''' - clipper - - ''' - cray - - ''' - esa390 - - ''' - hobbit - - ''' - i86 - - ''' - i860 - - ''' - i960 - - ''' - ia32 - - ''' - ia64 - - ''' - m56k - - ''' - m6800 - - ''' - m6801 - - ''' - m6805 - - ''' - m6809 - - ''' - m68k - - ''' - m88k - - ''' - mcs41 - - ''' - mcs48 - - ''' - mips32 - - ''' - mips64 - - ''' - msp430 - - ''' - nios2 - - ''' - openrisc - - ''' - parisc - - ''' - pdp1 - - ''' - pdp10 - - ''' - pdp11 - - ''' - pdp7 - - ''' - pdp8 - - ''' - pic - - ''' - power - - ''' - ppc - - ''' - ppc64 - - ''' - prism - - ''' - renesasrx - - ''' - riscv - - ''' - s360 - - ''' - s370 - - ''' - sh - - ''' - sh1 - - ''' - sh2 - - ''' - sh3 - - ''' - sh4 - - ''' - sh5 - - ''' - sh64 - - ''' - sparc - - ''' - sparc64 - - ''' - transputer - - ''' - vax - - ''' - we32000 - - ''' - x32 - - ''' - z80 - - ''' - z800 - - ''' - z8000 - - ''' - z80000 - - ''' - zarch - End Enum -End Namespace diff --git a/CICMMetadata/java/generated/ATAType.java b/CICMMetadata/java/generated/ATAType.java deleted file mode 100644 index 044a1b1..0000000 --- a/CICMMetadata/java/generated/ATAType.java +++ /dev/null @@ -1,71 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Contains ATA/ATAPI device information - * - *

Clase Java para ATAType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ATAType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Identify" type="{}DumpType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ATAType", propOrder = { - "identify" -}) -public class ATAType { - - @XmlElement(name = "Identify", required = true) - protected DumpType identify; - - /** - * Obtiene el valor de la propiedad identify. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getIdentify() { - return identify; - } - - /** - * Define el valor de la propiedad identify. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setIdentify(DumpType value) { - this.identify = value; - } - -} diff --git a/CICMMetadata/java/generated/AdvertisementType.java b/CICMMetadata/java/generated/AdvertisementType.java deleted file mode 100644 index d6fbdf5..0000000 --- a/CICMMetadata/java/generated/AdvertisementType.java +++ /dev/null @@ -1,390 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para AdvertisementType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="AdvertisementType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Manufacturer" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Product" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="File" type="{}FileType"/>
- *         <element name="FileSize" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Frames" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" minOccurs="0"/>
- *         <element name="Duration" type="{http://www.w3.org/2001/XMLSchema}double"/>
- *         <element name="MeanFrameRate" type="{http://www.w3.org/2001/XMLSchema}float" minOccurs="0"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="AudioTrack" type="{}AudioTracksType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="VideoTrack" type="{}VideoTracksType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="SubtitleTrack" type="{}SubtitleTracksType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Recording" type="{}RecordingType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "AdvertisementType", propOrder = { - "manufacturer", - "product", - "file", - "fileSize", - "frames", - "duration", - "meanFrameRate", - "checksums", - "audioTrack", - "videoTrack", - "subtitleTrack", - "recording" -}) -public class AdvertisementType { - - @XmlElement(name = "Manufacturer", required = true) - protected String manufacturer; - @XmlElement(name = "Product", required = true) - protected String product; - @XmlElement(name = "File", required = true) - protected FileType file; - @XmlElement(name = "FileSize", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger fileSize; - @XmlElement(name = "Frames") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger frames; - @XmlElement(name = "Duration") - protected double duration; - @XmlElement(name = "MeanFrameRate") - protected Float meanFrameRate; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "AudioTrack") - protected List audioTrack; - @XmlElement(name = "VideoTrack") - protected List videoTrack; - @XmlElement(name = "SubtitleTrack") - protected List subtitleTrack; - @XmlElement(name = "Recording") - protected RecordingType recording; - - /** - * Obtiene el valor de la propiedad manufacturer. - * - * @return - * possible object is - * {@link String } - * - */ - public String getManufacturer() { - return manufacturer; - } - - /** - * Define el valor de la propiedad manufacturer. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setManufacturer(String value) { - this.manufacturer = value; - } - - /** - * Obtiene el valor de la propiedad product. - * - * @return - * possible object is - * {@link String } - * - */ - public String getProduct() { - return product; - } - - /** - * Define el valor de la propiedad product. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setProduct(String value) { - this.product = value; - } - - /** - * Obtiene el valor de la propiedad file. - * - * @return - * possible object is - * {@link FileType } - * - */ - public FileType getFile() { - return file; - } - - /** - * Define el valor de la propiedad file. - * - * @param value - * allowed object is - * {@link FileType } - * - */ - public void setFile(FileType value) { - this.file = value; - } - - /** - * Obtiene el valor de la propiedad fileSize. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getFileSize() { - return fileSize; - } - - /** - * Define el valor de la propiedad fileSize. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setFileSize(BigInteger value) { - this.fileSize = value; - } - - /** - * Obtiene el valor de la propiedad frames. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getFrames() { - return frames; - } - - /** - * Define el valor de la propiedad frames. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setFrames(BigInteger value) { - this.frames = value; - } - - /** - * Obtiene el valor de la propiedad duration. - * - */ - public double getDuration() { - return duration; - } - - /** - * Define el valor de la propiedad duration. - * - */ - public void setDuration(double value) { - this.duration = value; - } - - /** - * Obtiene el valor de la propiedad meanFrameRate. - * - * @return - * possible object is - * {@link Float } - * - */ - public Float getMeanFrameRate() { - return meanFrameRate; - } - - /** - * Define el valor de la propiedad meanFrameRate. - * - * @param value - * allowed object is - * {@link Float } - * - */ - public void setMeanFrameRate(Float value) { - this.meanFrameRate = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Gets the value of the audioTrack property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the audioTrack property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAudioTrack().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link AudioTracksType } - * - * - */ - public List getAudioTrack() { - if (audioTrack == null) { - audioTrack = new ArrayList(); - } - return this.audioTrack; - } - - /** - * Gets the value of the videoTrack property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the videoTrack property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getVideoTrack().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link VideoTracksType } - * - * - */ - public List getVideoTrack() { - if (videoTrack == null) { - videoTrack = new ArrayList(); - } - return this.videoTrack; - } - - /** - * Gets the value of the subtitleTrack property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the subtitleTrack property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSubtitleTrack().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link SubtitleTracksType } - * - * - */ - public List getSubtitleTrack() { - if (subtitleTrack == null) { - subtitleTrack = new ArrayList(); - } - return this.subtitleTrack; - } - - /** - * Obtiene el valor de la propiedad recording. - * - * @return - * possible object is - * {@link RecordingType } - * - */ - public RecordingType getRecording() { - return recording; - } - - /** - * Define el valor de la propiedad recording. - * - * @param value - * allowed object is - * {@link RecordingType } - * - */ - public void setRecording(RecordingType value) { - this.recording = value; - } - -} diff --git a/CICMMetadata/java/generated/ArchitecturesType.java b/CICMMetadata/java/generated/ArchitecturesType.java deleted file mode 100644 index 1838f6c..0000000 --- a/CICMMetadata/java/generated/ArchitecturesType.java +++ /dev/null @@ -1,156 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * CPU architectures this set is intended to be run on - * - * - *

Clase Java para ArchitecturesType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ArchitecturesType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Architecture" maxOccurs="unbounded">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="4004"/>
- *               <enumeration value="4040"/>
- *               <enumeration value="6502"/>
- *               <enumeration value="65816"/>
- *               <enumeration value="8008"/>
- *               <enumeration value="8051"/>
- *               <enumeration value="8080"/>
- *               <enumeration value="8085"/>
- *               <enumeration value="aarch64"/>
- *               <enumeration value="am29000"/>
- *               <enumeration value="amd64"/>
- *               <enumeration value="apx432"/>
- *               <enumeration value="arm"/>
- *               <enumeration value="avr"/>
- *               <enumeration value="avr32"/>
- *               <enumeration value="axp"/>
- *               <enumeration value="clipper"/>
- *               <enumeration value="cray"/>
- *               <enumeration value="esa390"/>
- *               <enumeration value="hobbit"/>
- *               <enumeration value="i86"/>
- *               <enumeration value="i860"/>
- *               <enumeration value="i960"/>
- *               <enumeration value="ia32"/>
- *               <enumeration value="ia64"/>
- *               <enumeration value="m56k"/>
- *               <enumeration value="m6800"/>
- *               <enumeration value="m6801"/>
- *               <enumeration value="m6805"/>
- *               <enumeration value="m6809"/>
- *               <enumeration value="m68k"/>
- *               <enumeration value="m88k"/>
- *               <enumeration value="mcs41"/>
- *               <enumeration value="mcs48"/>
- *               <enumeration value="mips32"/>
- *               <enumeration value="mips64"/>
- *               <enumeration value="msp430"/>
- *               <enumeration value="nios2"/>
- *               <enumeration value="openrisc"/>
- *               <enumeration value="parisc"/>
- *               <enumeration value="pdp1"/>
- *               <enumeration value="pdp10"/>
- *               <enumeration value="pdp11"/>
- *               <enumeration value="pdp7"/>
- *               <enumeration value="pdp8"/>
- *               <enumeration value="pic"/>
- *               <enumeration value="power"/>
- *               <enumeration value="ppc"/>
- *               <enumeration value="ppc64"/>
- *               <enumeration value="prism"/>
- *               <enumeration value="renesasrx"/>
- *               <enumeration value="riscv"/>
- *               <enumeration value="s360"/>
- *               <enumeration value="s370"/>
- *               <enumeration value="sh"/>
- *               <enumeration value="sh1"/>
- *               <enumeration value="sh2"/>
- *               <enumeration value="sh3"/>
- *               <enumeration value="sh4"/>
- *               <enumeration value="sh5"/>
- *               <enumeration value="sh64"/>
- *               <enumeration value="sparc"/>
- *               <enumeration value="sparc64"/>
- *               <enumeration value="transputer"/>
- *               <enumeration value="vax"/>
- *               <enumeration value="we32000"/>
- *               <enumeration value="x32"/>
- *               <enumeration value="z80"/>
- *               <enumeration value="z800"/>
- *               <enumeration value="z8000"/>
- *               <enumeration value="z80000"/>
- *               <enumeration value="zarch"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ArchitecturesType", propOrder = { - "architecture" -}) -public class ArchitecturesType { - - @XmlElement(name = "Architecture", required = true) - protected List architecture; - - /** - * Gets the value of the architecture property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the architecture property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getArchitecture().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getArchitecture() { - if (architecture == null) { - architecture = new ArrayList(); - } - return this.architecture; - } - -} diff --git a/CICMMetadata/java/generated/AudioBlockType.java b/CICMMetadata/java/generated/AudioBlockType.java deleted file mode 100644 index 70a785a..0000000 --- a/CICMMetadata/java/generated/AudioBlockType.java +++ /dev/null @@ -1,186 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Information about "blocks" in audio based media - * - *

Clase Java para AudioBlockType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="AudioBlockType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="AccoustID" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="Format" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "AudioBlockType", propOrder = { - "image", - "size", - "accoustID", - "checksums", - "format" -}) -public class AudioBlockType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "AccoustID", required = true) - protected String accoustID; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "Format") - protected String format; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad accoustID. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAccoustID() { - return accoustID; - } - - /** - * Define el valor de la propiedad accoustID. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAccoustID(String value) { - this.accoustID = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad format. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFormat() { - return format; - } - - /** - * Define el valor de la propiedad format. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFormat(String value) { - this.format = value; - } - -} diff --git a/CICMMetadata/java/generated/AudioMediaType.java b/CICMMetadata/java/generated/AudioMediaType.java deleted file mode 100644 index 6bc6206..0000000 --- a/CICMMetadata/java/generated/AudioMediaType.java +++ /dev/null @@ -1,447 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Describes a dump of a media that is stored in an audio device (like a ZX Spectrum - * cassette) - * - * - *

Clase Java para AudioMediaType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="AudioMediaType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="Sequence" type="{}SequenceType"/>
- *         <element name="PartNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="SerialNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Manufacturer" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Model" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="AccoustID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Block" type="{}AudioBlockType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="CopyProtection" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Dimensions" type="{}DimensionsType"/>
- *         <element name="Scans" type="{}ScansType" minOccurs="0"/>
- *         <element name="DumpHardwareArray" type="{}DumpHardwareArrayType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "AudioMediaType", propOrder = { - "image", - "size", - "checksums", - "sequence", - "partNumber", - "serialNumber", - "manufacturer", - "model", - "accoustID", - "block", - "copyProtection", - "dimensions", - "scans", - "dumpHardwareArray" -}) -public class AudioMediaType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "Sequence", required = true) - protected SequenceType sequence; - @XmlElement(name = "PartNumber") - protected String partNumber; - @XmlElement(name = "SerialNumber") - protected String serialNumber; - @XmlElement(name = "Manufacturer") - protected String manufacturer; - @XmlElement(name = "Model") - protected String model; - @XmlElement(name = "AccoustID") - protected String accoustID; - @XmlElement(name = "Block") - protected List block; - @XmlElement(name = "CopyProtection") - protected String copyProtection; - @XmlElement(name = "Dimensions", required = true) - protected DimensionsType dimensions; - @XmlElement(name = "Scans") - protected ScansType scans; - @XmlElement(name = "DumpHardwareArray") - protected DumpHardwareArrayType dumpHardwareArray; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad sequence. - * - * @return - * possible object is - * {@link SequenceType } - * - */ - public SequenceType getSequence() { - return sequence; - } - - /** - * Define el valor de la propiedad sequence. - * - * @param value - * allowed object is - * {@link SequenceType } - * - */ - public void setSequence(SequenceType value) { - this.sequence = value; - } - - /** - * Obtiene el valor de la propiedad partNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPartNumber() { - return partNumber; - } - - /** - * Define el valor de la propiedad partNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPartNumber(String value) { - this.partNumber = value; - } - - /** - * Obtiene el valor de la propiedad serialNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerialNumber() { - return serialNumber; - } - - /** - * Define el valor de la propiedad serialNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerialNumber(String value) { - this.serialNumber = value; - } - - /** - * Obtiene el valor de la propiedad manufacturer. - * - * @return - * possible object is - * {@link String } - * - */ - public String getManufacturer() { - return manufacturer; - } - - /** - * Define el valor de la propiedad manufacturer. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setManufacturer(String value) { - this.manufacturer = value; - } - - /** - * Obtiene el valor de la propiedad model. - * - * @return - * possible object is - * {@link String } - * - */ - public String getModel() { - return model; - } - - /** - * Define el valor de la propiedad model. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setModel(String value) { - this.model = value; - } - - /** - * Obtiene el valor de la propiedad accoustID. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAccoustID() { - return accoustID; - } - - /** - * Define el valor de la propiedad accoustID. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAccoustID(String value) { - this.accoustID = value; - } - - /** - * Gets the value of the block property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the block property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getBlock().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link AudioBlockType } - * - * - */ - public List getBlock() { - if (block == null) { - block = new ArrayList(); - } - return this.block; - } - - /** - * Obtiene el valor de la propiedad copyProtection. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCopyProtection() { - return copyProtection; - } - - /** - * Define el valor de la propiedad copyProtection. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCopyProtection(String value) { - this.copyProtection = value; - } - - /** - * Obtiene el valor de la propiedad dimensions. - * - * @return - * possible object is - * {@link DimensionsType } - * - */ - public DimensionsType getDimensions() { - return dimensions; - } - - /** - * Define el valor de la propiedad dimensions. - * - * @param value - * allowed object is - * {@link DimensionsType } - * - */ - public void setDimensions(DimensionsType value) { - this.dimensions = value; - } - - /** - * Obtiene el valor de la propiedad scans. - * - * @return - * possible object is - * {@link ScansType } - * - */ - public ScansType getScans() { - return scans; - } - - /** - * Define el valor de la propiedad scans. - * - * @param value - * allowed object is - * {@link ScansType } - * - */ - public void setScans(ScansType value) { - this.scans = value; - } - - /** - * Obtiene el valor de la propiedad dumpHardwareArray. - * - * @return - * possible object is - * {@link DumpHardwareArrayType } - * - */ - public DumpHardwareArrayType getDumpHardwareArray() { - return dumpHardwareArray; - } - - /** - * Define el valor de la propiedad dumpHardwareArray. - * - * @param value - * allowed object is - * {@link DumpHardwareArrayType } - * - */ - public void setDumpHardwareArray(DumpHardwareArrayType value) { - this.dumpHardwareArray = value; - } - -} diff --git a/CICMMetadata/java/generated/AudioTracksType.java b/CICMMetadata/java/generated/AudioTracksType.java deleted file mode 100644 index d471eb7..0000000 --- a/CICMMetadata/java/generated/AudioTracksType.java +++ /dev/null @@ -1,208 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para AudioTracksType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="AudioTracksType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Languages" type="{}LanguagesType" minOccurs="0"/>
- *       </sequence>
- *       <attribute name="TrackNumber" use="required">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
- *             <minInclusive value="1"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *       <attribute name="AccoustID" type="{http://www.w3.org/2001/XMLSchema}string" />
- *       <attribute name="Codec" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- *       <attribute name="Channels" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
- *       <attribute name="SampleRate" use="required" type="{http://www.w3.org/2001/XMLSchema}double" />
- *       <attribute name="MeanBitrate" use="required" type="{http://www.w3.org/2001/XMLSchema}long" />
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "AudioTracksType", propOrder = { - "languages" -}) -public class AudioTracksType { - - @XmlElement(name = "Languages") - protected LanguagesType languages; - @XmlAttribute(name = "TrackNumber", required = true) - protected long trackNumber; - @XmlAttribute(name = "AccoustID") - protected String accoustID; - @XmlAttribute(name = "Codec", required = true) - protected String codec; - @XmlAttribute(name = "Channels", required = true) - @XmlSchemaType(name = "unsignedInt") - protected long channels; - @XmlAttribute(name = "SampleRate", required = true) - protected double sampleRate; - @XmlAttribute(name = "MeanBitrate", required = true) - protected long meanBitrate; - - /** - * Obtiene el valor de la propiedad languages. - * - * @return - * possible object is - * {@link LanguagesType } - * - */ - public LanguagesType getLanguages() { - return languages; - } - - /** - * Define el valor de la propiedad languages. - * - * @param value - * allowed object is - * {@link LanguagesType } - * - */ - public void setLanguages(LanguagesType value) { - this.languages = value; - } - - /** - * Obtiene el valor de la propiedad trackNumber. - * - */ - public long getTrackNumber() { - return trackNumber; - } - - /** - * Define el valor de la propiedad trackNumber. - * - */ - public void setTrackNumber(long value) { - this.trackNumber = value; - } - - /** - * Obtiene el valor de la propiedad accoustID. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAccoustID() { - return accoustID; - } - - /** - * Define el valor de la propiedad accoustID. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAccoustID(String value) { - this.accoustID = value; - } - - /** - * Obtiene el valor de la propiedad codec. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCodec() { - return codec; - } - - /** - * Define el valor de la propiedad codec. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCodec(String value) { - this.codec = value; - } - - /** - * Obtiene el valor de la propiedad channels. - * - */ - public long getChannels() { - return channels; - } - - /** - * Define el valor de la propiedad channels. - * - */ - public void setChannels(long value) { - this.channels = value; - } - - /** - * Obtiene el valor de la propiedad sampleRate. - * - */ - public double getSampleRate() { - return sampleRate; - } - - /** - * Define el valor de la propiedad sampleRate. - * - */ - public void setSampleRate(double value) { - this.sampleRate = value; - } - - /** - * Obtiene el valor de la propiedad meanBitrate. - * - */ - public long getMeanBitrate() { - return meanBitrate; - } - - /** - * Define el valor de la propiedad meanBitrate. - * - */ - public void setMeanBitrate(long value) { - this.meanBitrate = value; - } - -} diff --git a/CICMMetadata/java/generated/BarcodeType.java b/CICMMetadata/java/generated/BarcodeType.java deleted file mode 100644 index b4c191d..0000000 --- a/CICMMetadata/java/generated/BarcodeType.java +++ /dev/null @@ -1,129 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - - -/** - *

Clase Java para BarcodeType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="BarcodeType">
- *   <simpleContent>
- *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
- *       <attribute name="type" use="required">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *             <enumeration value="aztec"/>
- *             <enumeration value="codabar"/>
- *             <enumeration value="code11"/>
- *             <enumeration value="code128"/>
- *             <enumeration value="code39"/>
- *             <enumeration value="code93"/>
- *             <enumeration value="cpcbinary"/>
- *             <enumeration value="ezcode"/>
- *             <enumeration value="fim"/>
- *             <enumeration value="itf"/>
- *             <enumeration value="itf14"/>
- *             <enumeration value="ean13"/>
- *             <enumeration value="ean8"/>
- *             <enumeration value="maxicode"/>
- *             <enumeration value="isbn"/>
- *             <enumeration value="isrc"/>
- *             <enumeration value="msi"/>
- *             <enumeration value="tof"/>
- *             <enumeration value="shotcode"/>
- *             <enumeration value="rm4scc"/>
- *             <enumeration value="qr"/>
- *             <enumeration value="ean5"/>
- *             <enumeration value="ean2"/>
- *             <enumeration value="qr"/>
- *             <enumeration value="postnet"/>
- *             <enumeration value="postbar"/>
- *             <enumeration value="plessey"/>
- *             <enumeration value="pharmacode"/>
- *             <enumeration value="pdf417"/>
- *             <enumeration value="patchcode"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *     </extension>
- *   </simpleContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BarcodeType", propOrder = { - "value" -}) -public class BarcodeType { - - @XmlValue - protected String value; - @XmlAttribute(name = "type", required = true) - protected String type; - - /** - * Obtiene el valor de la propiedad value. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Define el valor de la propiedad value. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Obtiene el valor de la propiedad type. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Define el valor de la propiedad type. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - -} diff --git a/CICMMetadata/java/generated/BarcodesType.java b/CICMMetadata/java/generated/BarcodesType.java deleted file mode 100644 index 0aef5f6..0000000 --- a/CICMMetadata/java/generated/BarcodesType.java +++ /dev/null @@ -1,78 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Barcodes for this release - * - *

Clase Java para BarcodesType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="BarcodesType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Barcode" type="{}BarcodeType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BarcodesType", propOrder = { - "barcode" -}) -public class BarcodesType { - - @XmlElement(name = "Barcode", required = true) - protected List barcode; - - /** - * Gets the value of the barcode property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the barcode property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getBarcode().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link BarcodeType } - * - * - */ - public List getBarcode() { - if (barcode == null) { - barcode = new ArrayList(); - } - return this.barcode; - } - -} diff --git a/CICMMetadata/java/generated/BlockMediaType.java b/CICMMetadata/java/generated/BlockMediaType.java deleted file mode 100644 index 8e1ba38..0000000 --- a/CICMMetadata/java/generated/BlockMediaType.java +++ /dev/null @@ -1,1051 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Describes a dump of a block (sector) layered media - * - *

Clase Java para BlockMediaType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="BlockMediaType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="ContentChecksums" type="{}ChecksumsType"/>
- *         <element name="Sequence" type="{}SequenceType"/>
- *         <element name="Manufacturer" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Model" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Serial" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Firmware" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Interface" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="PartNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="SerialNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="PhysicalBlockSize" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="LogicalBlockSize" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="LogicalBlocks" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="VariableBlockSize" type="{}VariableBlockSizeType" minOccurs="0"/>
- *         <element name="TapeInformation" type="{}TapeInformationType" minOccurs="0"/>
- *         <element name="Scans" type="{}ScansType" minOccurs="0"/>
- *         <element name="ATA" type="{}ATAType" minOccurs="0"/>
- *         <element name="PCI" type="{}PCIType" minOccurs="0"/>
- *         <element name="PCMCIA" type="{}PCMCIAType" minOccurs="0"/>
- *         <element name="SecureDigital" type="{}SecureDigitalType" minOccurs="0"/>
- *         <element name="MultiMediaCard" type="{}MultiMediaCardType" minOccurs="0"/>
- *         <element name="SCSI" type="{}SCSIType" minOccurs="0"/>
- *         <element name="USB" type="{}USBType" minOccurs="0"/>
- *         <element name="MAM" type="{}DumpType" minOccurs="0"/>
- *         <element name="Heads" type="{http://www.w3.org/2001/XMLSchema}unsignedShort" minOccurs="0"/>
- *         <element name="Cylinders" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" minOccurs="0"/>
- *         <element name="SectorsPerTrack" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" minOccurs="0"/>
- *         <element name="Track" type="{}BlockTrackType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="CopyProtection" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Dimensions" type="{}DimensionsType"/>
- *         <element name="FileSystemInformation" type="{}FileSystemInformationType" minOccurs="0"/>
- *         <element name="DumpHardwareArray" type="{}DumpHardwareArrayType" minOccurs="0"/>
- *         <element name="DiskType" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="DiskSubType" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BlockMediaType", propOrder = { - "image", - "size", - "checksums", - "contentChecksums", - "sequence", - "manufacturer", - "model", - "serial", - "firmware", - "_interface", - "partNumber", - "serialNumber", - "physicalBlockSize", - "logicalBlockSize", - "logicalBlocks", - "variableBlockSize", - "tapeInformation", - "scans", - "ata", - "pci", - "pcmcia", - "secureDigital", - "multiMediaCard", - "scsi", - "usb", - "mam", - "heads", - "cylinders", - "sectorsPerTrack", - "track", - "copyProtection", - "dimensions", - "fileSystemInformation", - "dumpHardwareArray", - "diskType", - "diskSubType" -}) -public class BlockMediaType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "ContentChecksums", required = true) - protected ChecksumsType contentChecksums; - @XmlElement(name = "Sequence", required = true) - protected SequenceType sequence; - @XmlElement(name = "Manufacturer") - protected String manufacturer; - @XmlElement(name = "Model") - protected String model; - @XmlElement(name = "Serial") - protected String serial; - @XmlElement(name = "Firmware") - protected String firmware; - @XmlElement(name = "Interface") - protected String _interface; - @XmlElement(name = "PartNumber") - protected String partNumber; - @XmlElement(name = "SerialNumber") - protected String serialNumber; - @XmlElement(name = "PhysicalBlockSize") - @XmlSchemaType(name = "unsignedInt") - protected long physicalBlockSize; - @XmlElement(name = "LogicalBlockSize") - @XmlSchemaType(name = "unsignedInt") - protected long logicalBlockSize; - @XmlElement(name = "LogicalBlocks", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger logicalBlocks; - @XmlElement(name = "VariableBlockSize") - protected VariableBlockSizeType variableBlockSize; - @XmlElement(name = "TapeInformation") - protected TapeInformationType tapeInformation; - @XmlElement(name = "Scans") - protected ScansType scans; - @XmlElement(name = "ATA") - protected ATAType ata; - @XmlElement(name = "PCI") - protected PCIType pci; - @XmlElement(name = "PCMCIA") - protected PCMCIAType pcmcia; - @XmlElement(name = "SecureDigital") - protected SecureDigitalType secureDigital; - @XmlElement(name = "MultiMediaCard") - protected MultiMediaCardType multiMediaCard; - @XmlElement(name = "SCSI") - protected SCSIType scsi; - @XmlElement(name = "USB") - protected USBType usb; - @XmlElement(name = "MAM") - protected DumpType mam; - @XmlElement(name = "Heads") - @XmlSchemaType(name = "unsignedShort") - protected Integer heads; - @XmlElement(name = "Cylinders") - @XmlSchemaType(name = "unsignedInt") - protected Long cylinders; - @XmlElement(name = "SectorsPerTrack") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger sectorsPerTrack; - @XmlElement(name = "Track") - protected List track; - @XmlElement(name = "CopyProtection") - protected String copyProtection; - @XmlElement(name = "Dimensions", required = true) - protected DimensionsType dimensions; - @XmlElement(name = "FileSystemInformation") - protected FileSystemInformationType fileSystemInformation; - @XmlElement(name = "DumpHardwareArray") - protected DumpHardwareArrayType dumpHardwareArray; - @XmlElement(name = "DiskType", required = true) - protected String diskType; - @XmlElement(name = "DiskSubType", required = true) - protected String diskSubType; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad contentChecksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getContentChecksums() { - return contentChecksums; - } - - /** - * Define el valor de la propiedad contentChecksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setContentChecksums(ChecksumsType value) { - this.contentChecksums = value; - } - - /** - * Obtiene el valor de la propiedad sequence. - * - * @return - * possible object is - * {@link SequenceType } - * - */ - public SequenceType getSequence() { - return sequence; - } - - /** - * Define el valor de la propiedad sequence. - * - * @param value - * allowed object is - * {@link SequenceType } - * - */ - public void setSequence(SequenceType value) { - this.sequence = value; - } - - /** - * Obtiene el valor de la propiedad manufacturer. - * - * @return - * possible object is - * {@link String } - * - */ - public String getManufacturer() { - return manufacturer; - } - - /** - * Define el valor de la propiedad manufacturer. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setManufacturer(String value) { - this.manufacturer = value; - } - - /** - * Obtiene el valor de la propiedad model. - * - * @return - * possible object is - * {@link String } - * - */ - public String getModel() { - return model; - } - - /** - * Define el valor de la propiedad model. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setModel(String value) { - this.model = value; - } - - /** - * Obtiene el valor de la propiedad serial. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerial() { - return serial; - } - - /** - * Define el valor de la propiedad serial. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerial(String value) { - this.serial = value; - } - - /** - * Obtiene el valor de la propiedad firmware. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFirmware() { - return firmware; - } - - /** - * Define el valor de la propiedad firmware. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFirmware(String value) { - this.firmware = value; - } - - /** - * Obtiene el valor de la propiedad interface. - * - * @return - * possible object is - * {@link String } - * - */ - public String getInterface() { - return _interface; - } - - /** - * Define el valor de la propiedad interface. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setInterface(String value) { - this._interface = value; - } - - /** - * Obtiene el valor de la propiedad partNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPartNumber() { - return partNumber; - } - - /** - * Define el valor de la propiedad partNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPartNumber(String value) { - this.partNumber = value; - } - - /** - * Obtiene el valor de la propiedad serialNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerialNumber() { - return serialNumber; - } - - /** - * Define el valor de la propiedad serialNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerialNumber(String value) { - this.serialNumber = value; - } - - /** - * Obtiene el valor de la propiedad physicalBlockSize. - * - */ - public long getPhysicalBlockSize() { - return physicalBlockSize; - } - - /** - * Define el valor de la propiedad physicalBlockSize. - * - */ - public void setPhysicalBlockSize(long value) { - this.physicalBlockSize = value; - } - - /** - * Obtiene el valor de la propiedad logicalBlockSize. - * - */ - public long getLogicalBlockSize() { - return logicalBlockSize; - } - - /** - * Define el valor de la propiedad logicalBlockSize. - * - */ - public void setLogicalBlockSize(long value) { - this.logicalBlockSize = value; - } - - /** - * Obtiene el valor de la propiedad logicalBlocks. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getLogicalBlocks() { - return logicalBlocks; - } - - /** - * Define el valor de la propiedad logicalBlocks. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setLogicalBlocks(BigInteger value) { - this.logicalBlocks = value; - } - - /** - * Obtiene el valor de la propiedad variableBlockSize. - * - * @return - * possible object is - * {@link VariableBlockSizeType } - * - */ - public VariableBlockSizeType getVariableBlockSize() { - return variableBlockSize; - } - - /** - * Define el valor de la propiedad variableBlockSize. - * - * @param value - * allowed object is - * {@link VariableBlockSizeType } - * - */ - public void setVariableBlockSize(VariableBlockSizeType value) { - this.variableBlockSize = value; - } - - /** - * Obtiene el valor de la propiedad tapeInformation. - * - * @return - * possible object is - * {@link TapeInformationType } - * - */ - public TapeInformationType getTapeInformation() { - return tapeInformation; - } - - /** - * Define el valor de la propiedad tapeInformation. - * - * @param value - * allowed object is - * {@link TapeInformationType } - * - */ - public void setTapeInformation(TapeInformationType value) { - this.tapeInformation = value; - } - - /** - * Obtiene el valor de la propiedad scans. - * - * @return - * possible object is - * {@link ScansType } - * - */ - public ScansType getScans() { - return scans; - } - - /** - * Define el valor de la propiedad scans. - * - * @param value - * allowed object is - * {@link ScansType } - * - */ - public void setScans(ScansType value) { - this.scans = value; - } - - /** - * Obtiene el valor de la propiedad ata. - * - * @return - * possible object is - * {@link ATAType } - * - */ - public ATAType getATA() { - return ata; - } - - /** - * Define el valor de la propiedad ata. - * - * @param value - * allowed object is - * {@link ATAType } - * - */ - public void setATA(ATAType value) { - this.ata = value; - } - - /** - * Obtiene el valor de la propiedad pci. - * - * @return - * possible object is - * {@link PCIType } - * - */ - public PCIType getPCI() { - return pci; - } - - /** - * Define el valor de la propiedad pci. - * - * @param value - * allowed object is - * {@link PCIType } - * - */ - public void setPCI(PCIType value) { - this.pci = value; - } - - /** - * Obtiene el valor de la propiedad pcmcia. - * - * @return - * possible object is - * {@link PCMCIAType } - * - */ - public PCMCIAType getPCMCIA() { - return pcmcia; - } - - /** - * Define el valor de la propiedad pcmcia. - * - * @param value - * allowed object is - * {@link PCMCIAType } - * - */ - public void setPCMCIA(PCMCIAType value) { - this.pcmcia = value; - } - - /** - * Obtiene el valor de la propiedad secureDigital. - * - * @return - * possible object is - * {@link SecureDigitalType } - * - */ - public SecureDigitalType getSecureDigital() { - return secureDigital; - } - - /** - * Define el valor de la propiedad secureDigital. - * - * @param value - * allowed object is - * {@link SecureDigitalType } - * - */ - public void setSecureDigital(SecureDigitalType value) { - this.secureDigital = value; - } - - /** - * Obtiene el valor de la propiedad multiMediaCard. - * - * @return - * possible object is - * {@link MultiMediaCardType } - * - */ - public MultiMediaCardType getMultiMediaCard() { - return multiMediaCard; - } - - /** - * Define el valor de la propiedad multiMediaCard. - * - * @param value - * allowed object is - * {@link MultiMediaCardType } - * - */ - public void setMultiMediaCard(MultiMediaCardType value) { - this.multiMediaCard = value; - } - - /** - * Obtiene el valor de la propiedad scsi. - * - * @return - * possible object is - * {@link SCSIType } - * - */ - public SCSIType getSCSI() { - return scsi; - } - - /** - * Define el valor de la propiedad scsi. - * - * @param value - * allowed object is - * {@link SCSIType } - * - */ - public void setSCSI(SCSIType value) { - this.scsi = value; - } - - /** - * Obtiene el valor de la propiedad usb. - * - * @return - * possible object is - * {@link USBType } - * - */ - public USBType getUSB() { - return usb; - } - - /** - * Define el valor de la propiedad usb. - * - * @param value - * allowed object is - * {@link USBType } - * - */ - public void setUSB(USBType value) { - this.usb = value; - } - - /** - * Obtiene el valor de la propiedad mam. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getMAM() { - return mam; - } - - /** - * Define el valor de la propiedad mam. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setMAM(DumpType value) { - this.mam = value; - } - - /** - * Obtiene el valor de la propiedad heads. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getHeads() { - return heads; - } - - /** - * Define el valor de la propiedad heads. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setHeads(Integer value) { - this.heads = value; - } - - /** - * Obtiene el valor de la propiedad cylinders. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getCylinders() { - return cylinders; - } - - /** - * Define el valor de la propiedad cylinders. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setCylinders(Long value) { - this.cylinders = value; - } - - /** - * Obtiene el valor de la propiedad sectorsPerTrack. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSectorsPerTrack() { - return sectorsPerTrack; - } - - /** - * Define el valor de la propiedad sectorsPerTrack. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSectorsPerTrack(BigInteger value) { - this.sectorsPerTrack = value; - } - - /** - * Gets the value of the track property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the track property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getTrack().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link BlockTrackType } - * - * - */ - public List getTrack() { - if (track == null) { - track = new ArrayList(); - } - return this.track; - } - - /** - * Obtiene el valor de la propiedad copyProtection. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCopyProtection() { - return copyProtection; - } - - /** - * Define el valor de la propiedad copyProtection. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCopyProtection(String value) { - this.copyProtection = value; - } - - /** - * Obtiene el valor de la propiedad dimensions. - * - * @return - * possible object is - * {@link DimensionsType } - * - */ - public DimensionsType getDimensions() { - return dimensions; - } - - /** - * Define el valor de la propiedad dimensions. - * - * @param value - * allowed object is - * {@link DimensionsType } - * - */ - public void setDimensions(DimensionsType value) { - this.dimensions = value; - } - - /** - * Obtiene el valor de la propiedad fileSystemInformation. - * - * @return - * possible object is - * {@link FileSystemInformationType } - * - */ - public FileSystemInformationType getFileSystemInformation() { - return fileSystemInformation; - } - - /** - * Define el valor de la propiedad fileSystemInformation. - * - * @param value - * allowed object is - * {@link FileSystemInformationType } - * - */ - public void setFileSystemInformation(FileSystemInformationType value) { - this.fileSystemInformation = value; - } - - /** - * Obtiene el valor de la propiedad dumpHardwareArray. - * - * @return - * possible object is - * {@link DumpHardwareArrayType } - * - */ - public DumpHardwareArrayType getDumpHardwareArray() { - return dumpHardwareArray; - } - - /** - * Define el valor de la propiedad dumpHardwareArray. - * - * @param value - * allowed object is - * {@link DumpHardwareArrayType } - * - */ - public void setDumpHardwareArray(DumpHardwareArrayType value) { - this.dumpHardwareArray = value; - } - - /** - * Obtiene el valor de la propiedad diskType. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDiskType() { - return diskType; - } - - /** - * Define el valor de la propiedad diskType. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDiskType(String value) { - this.diskType = value; - } - - /** - * Obtiene el valor de la propiedad diskSubType. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDiskSubType() { - return diskSubType; - } - - /** - * Define el valor de la propiedad diskSubType. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDiskSubType(String value) { - this.diskSubType = value; - } - -} diff --git a/CICMMetadata/java/generated/BlockSizeType.java b/CICMMetadata/java/generated/BlockSizeType.java deleted file mode 100644 index 89fd262..0000000 --- a/CICMMetadata/java/generated/BlockSizeType.java +++ /dev/null @@ -1,81 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - - -/** - *

Clase Java para BlockSizeType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="BlockSizeType">
- *   <simpleContent>
- *     <extension base="<http://www.w3.org/2001/XMLSchema>unsignedInt">
- *       <attribute name="startingBlock" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
- *     </extension>
- *   </simpleContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BlockSizeType", propOrder = { - "value" -}) -public class BlockSizeType { - - @XmlValue - @XmlSchemaType(name = "unsignedInt") - protected long value; - @XmlAttribute(name = "startingBlock", required = true) - @XmlSchemaType(name = "unsignedInt") - protected long startingBlock; - - /** - * Obtiene el valor de la propiedad value. - * - */ - public long getValue() { - return value; - } - - /** - * Define el valor de la propiedad value. - * - */ - public void setValue(long value) { - this.value = value; - } - - /** - * Obtiene el valor de la propiedad startingBlock. - * - */ - public long getStartingBlock() { - return startingBlock; - } - - /** - * Define el valor de la propiedad startingBlock. - * - */ - public void setStartingBlock(long value) { - this.startingBlock = value; - } - -} diff --git a/CICMMetadata/java/generated/BlockTrackType.java b/CICMMetadata/java/generated/BlockTrackType.java deleted file mode 100644 index 6e26813..0000000 --- a/CICMMetadata/java/generated/BlockTrackType.java +++ /dev/null @@ -1,308 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Information about track in non-abstracted block based media - * - *

Clase Java para BlockTrackType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="BlockTrackType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Head" type="{http://www.w3.org/2001/XMLSchema}unsignedShort"/>
- *         <element name="Cylinder" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="StartSector" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="EndSector" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Sectors" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="BytesPerSector" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="Format" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BlockTrackType", propOrder = { - "image", - "size", - "head", - "cylinder", - "startSector", - "endSector", - "sectors", - "bytesPerSector", - "checksums", - "format" -}) -public class BlockTrackType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Head") - @XmlSchemaType(name = "unsignedShort") - protected int head; - @XmlElement(name = "Cylinder") - @XmlSchemaType(name = "unsignedInt") - protected long cylinder; - @XmlElement(name = "StartSector", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger startSector; - @XmlElement(name = "EndSector", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger endSector; - @XmlElement(name = "Sectors", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger sectors; - @XmlElement(name = "BytesPerSector") - @XmlSchemaType(name = "unsignedInt") - protected long bytesPerSector; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "Format") - protected String format; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad head. - * - */ - public int getHead() { - return head; - } - - /** - * Define el valor de la propiedad head. - * - */ - public void setHead(int value) { - this.head = value; - } - - /** - * Obtiene el valor de la propiedad cylinder. - * - */ - public long getCylinder() { - return cylinder; - } - - /** - * Define el valor de la propiedad cylinder. - * - */ - public void setCylinder(long value) { - this.cylinder = value; - } - - /** - * Obtiene el valor de la propiedad startSector. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getStartSector() { - return startSector; - } - - /** - * Define el valor de la propiedad startSector. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setStartSector(BigInteger value) { - this.startSector = value; - } - - /** - * Obtiene el valor de la propiedad endSector. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEndSector() { - return endSector; - } - - /** - * Define el valor de la propiedad endSector. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEndSector(BigInteger value) { - this.endSector = value; - } - - /** - * Obtiene el valor de la propiedad sectors. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSectors() { - return sectors; - } - - /** - * Define el valor de la propiedad sectors. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSectors(BigInteger value) { - this.sectors = value; - } - - /** - * Obtiene el valor de la propiedad bytesPerSector. - * - */ - public long getBytesPerSector() { - return bytesPerSector; - } - - /** - * Define el valor de la propiedad bytesPerSector. - * - */ - public void setBytesPerSector(long value) { - this.bytesPerSector = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad format. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFormat() { - return format; - } - - /** - * Define el valor de la propiedad format. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFormat(String value) { - this.format = value; - } - -} diff --git a/CICMMetadata/java/generated/BookType.java b/CICMMetadata/java/generated/BookType.java deleted file mode 100644 index 556d5b9..0000000 --- a/CICMMetadata/java/generated/BookType.java +++ /dev/null @@ -1,325 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.datatype.XMLGregorianCalendar; - - -/** - *

Clase Java para BookType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="BookType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Barcodes" type="{}BarcodesType"/>
- *         <element name="Cover" type="{}CoverType" minOccurs="0"/>
- *         <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Editorial" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Author" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="PublicationDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/>
- *         <element name="Language" type="{}LanguagesType" minOccurs="0"/>
- *         <element name="Pages" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" minOccurs="0"/>
- *         <element name="PageSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Scan" type="{}ScanType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BookType", propOrder = { - "barcodes", - "cover", - "name", - "editorial", - "author", - "publicationDate", - "language", - "pages", - "pageSize", - "scan" -}) -public class BookType { - - @XmlElement(name = "Barcodes", required = true) - protected BarcodesType barcodes; - @XmlElement(name = "Cover") - protected CoverType cover; - @XmlElement(name = "Name", required = true) - protected String name; - @XmlElement(name = "Editorial") - protected String editorial; - @XmlElement(name = "Author", required = true) - protected String author; - @XmlElement(name = "PublicationDate") - @XmlSchemaType(name = "date") - protected XMLGregorianCalendar publicationDate; - @XmlElement(name = "Language") - protected LanguagesType language; - @XmlElement(name = "Pages") - @XmlSchemaType(name = "unsignedInt") - protected Long pages; - @XmlElement(name = "PageSize") - protected String pageSize; - @XmlElement(name = "Scan", required = true) - protected ScanType scan; - - /** - * Obtiene el valor de la propiedad barcodes. - * - * @return - * possible object is - * {@link BarcodesType } - * - */ - public BarcodesType getBarcodes() { - return barcodes; - } - - /** - * Define el valor de la propiedad barcodes. - * - * @param value - * allowed object is - * {@link BarcodesType } - * - */ - public void setBarcodes(BarcodesType value) { - this.barcodes = value; - } - - /** - * Obtiene el valor de la propiedad cover. - * - * @return - * possible object is - * {@link CoverType } - * - */ - public CoverType getCover() { - return cover; - } - - /** - * Define el valor de la propiedad cover. - * - * @param value - * allowed object is - * {@link CoverType } - * - */ - public void setCover(CoverType value) { - this.cover = value; - } - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Obtiene el valor de la propiedad editorial. - * - * @return - * possible object is - * {@link String } - * - */ - public String getEditorial() { - return editorial; - } - - /** - * Define el valor de la propiedad editorial. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setEditorial(String value) { - this.editorial = value; - } - - /** - * Obtiene el valor de la propiedad author. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAuthor() { - return author; - } - - /** - * Define el valor de la propiedad author. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAuthor(String value) { - this.author = value; - } - - /** - * Obtiene el valor de la propiedad publicationDate. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getPublicationDate() { - return publicationDate; - } - - /** - * Define el valor de la propiedad publicationDate. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setPublicationDate(XMLGregorianCalendar value) { - this.publicationDate = value; - } - - /** - * Obtiene el valor de la propiedad language. - * - * @return - * possible object is - * {@link LanguagesType } - * - */ - public LanguagesType getLanguage() { - return language; - } - - /** - * Define el valor de la propiedad language. - * - * @param value - * allowed object is - * {@link LanguagesType } - * - */ - public void setLanguage(LanguagesType value) { - this.language = value; - } - - /** - * Obtiene el valor de la propiedad pages. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getPages() { - return pages; - } - - /** - * Define el valor de la propiedad pages. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setPages(Long value) { - this.pages = value; - } - - /** - * Obtiene el valor de la propiedad pageSize. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPageSize() { - return pageSize; - } - - /** - * Define el valor de la propiedad pageSize. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPageSize(String value) { - this.pageSize = value; - } - - /** - * Obtiene el valor de la propiedad scan. - * - * @return - * possible object is - * {@link ScanType } - * - */ - public ScanType getScan() { - return scan; - } - - /** - * Define el valor de la propiedad scan. - * - * @param value - * allowed object is - * {@link ScanType } - * - */ - public void setScan(ScanType value) { - this.scan = value; - } - -} diff --git a/CICMMetadata/java/generated/BorderType.java b/CICMMetadata/java/generated/BorderType.java deleted file mode 100644 index 8d9b450..0000000 --- a/CICMMetadata/java/generated/BorderType.java +++ /dev/null @@ -1,162 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para BorderType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="BorderType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *       </sequence>
- *       <attribute name="session">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
- *             <minInclusive value="1"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BorderType", propOrder = { - "image", - "size", - "checksums" -}) -public class BorderType { - - @XmlElement(name = "Image", required = true) - protected String image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlAttribute(name = "session") - protected Long session; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link String } - * - */ - public String getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setImage(String value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad session. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getSession() { - return session; - } - - /** - * Define el valor de la propiedad session. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setSession(Long value) { - this.session = value; - } - -} diff --git a/CICMMetadata/java/generated/CICMMetadataType.java b/CICMMetadata/java/generated/CICMMetadataType.java deleted file mode 100644 index 09bf383..0000000 --- a/CICMMetadata/java/generated/CICMMetadataType.java +++ /dev/null @@ -1,886 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.datatype.XMLGregorianCalendar; - - -/** - * Digital Asset Metadata - * - *

Clase Java para CICMMetadataType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="CICMMetadataType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Developer" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Publisher" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Author" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Performer" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Version" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="ReleaseType" minOccurs="0">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="Retail"/>
- *               <enumeration value="Bundle"/>
- *               <enumeration value="Coverdisc"/>
- *               <enumeration value="Subscription"/>
- *               <enumeration value="Demo"/>
- *               <enumeration value="OEM"/>
- *               <enumeration value="Shareware"/>
- *               <enumeration value="FOSS"/>
- *               <enumeration value="Adware"/>
- *               <enumeration value="Donationware"/>
- *               <enumeration value="Digital download"/>
- *               <enumeration value="SaaS"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="ReleaseDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/>
- *         <element name="Barcodes" type="{}BarcodesType" minOccurs="0"/>
- *         <element name="PartNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="SerialNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Keywords" type="{}KeywordsType" minOccurs="0"/>
- *         <element name="Magazine" type="{}MagazineType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Book" type="{}BookType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Categories" type="{}CategoriesType" minOccurs="0"/>
- *         <element name="Subcategories" type="{}SubcategoriesType" minOccurs="0"/>
- *         <element name="Languages" type="{}LanguagesType" minOccurs="0"/>
- *         <element name="Systems" type="{}SystemsType" minOccurs="0"/>
- *         <element name="Architectures" type="{}ArchitecturesType" minOccurs="0"/>
- *         <element name="RequiredOperatingSystems" type="{}RequiredOperatingSystemsType" minOccurs="0"/>
- *         <element name="UserManual" type="{}UserManualType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="OpticalDisc" type="{}OpticalDiscType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Advertisement" type="{}AdvertisementType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="LinearMedia" type="{}LinearMediaType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="PCICard" type="{}PCIType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="BlockMedia" type="{}BlockMediaType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="AudioMedia" type="{}AudioMediaType" maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CICMMetadataType", propOrder = { - "developer", - "publisher", - "author", - "performer", - "name", - "version", - "releaseType", - "releaseDate", - "barcodes", - "partNumber", - "serialNumber", - "keywords", - "magazine", - "book", - "categories", - "subcategories", - "languages", - "systems", - "architectures", - "requiredOperatingSystems", - "userManual", - "opticalDisc", - "advertisement", - "linearMedia", - "pciCard", - "blockMedia", - "audioMedia" -}) -public class CICMMetadataType { - - @XmlElement(name = "Developer") - protected List developer; - @XmlElement(name = "Publisher") - protected List publisher; - @XmlElement(name = "Author") - protected List author; - @XmlElement(name = "Performer") - protected List performer; - @XmlElement(name = "Name", required = true) - protected String name; - @XmlElement(name = "Version") - protected String version; - @XmlElement(name = "ReleaseType") - protected String releaseType; - @XmlElement(name = "ReleaseDate") - @XmlSchemaType(name = "date") - protected XMLGregorianCalendar releaseDate; - @XmlElement(name = "Barcodes") - protected BarcodesType barcodes; - @XmlElement(name = "PartNumber") - protected String partNumber; - @XmlElement(name = "SerialNumber") - protected String serialNumber; - @XmlElement(name = "Keywords") - protected KeywordsType keywords; - @XmlElement(name = "Magazine") - protected List magazine; - @XmlElement(name = "Book") - protected List book; - @XmlElement(name = "Categories") - protected CategoriesType categories; - @XmlElement(name = "Subcategories") - protected SubcategoriesType subcategories; - @XmlElement(name = "Languages") - protected LanguagesType languages; - @XmlElement(name = "Systems") - protected SystemsType systems; - @XmlElement(name = "Architectures") - protected ArchitecturesType architectures; - @XmlElement(name = "RequiredOperatingSystems") - protected RequiredOperatingSystemsType requiredOperatingSystems; - @XmlElement(name = "UserManual") - protected List userManual; - @XmlElement(name = "OpticalDisc") - protected List opticalDisc; - @XmlElement(name = "Advertisement") - protected List advertisement; - @XmlElement(name = "LinearMedia") - protected List linearMedia; - @XmlElement(name = "PCICard") - protected List pciCard; - @XmlElement(name = "BlockMedia") - protected List blockMedia; - @XmlElement(name = "AudioMedia") - protected List audioMedia; - - /** - * Gets the value of the developer property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the developer property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getDeveloper().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getDeveloper() { - if (developer == null) { - developer = new ArrayList(); - } - return this.developer; - } - - /** - * Gets the value of the publisher property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the publisher property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getPublisher().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getPublisher() { - if (publisher == null) { - publisher = new ArrayList(); - } - return this.publisher; - } - - /** - * Gets the value of the author property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the author property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAuthor().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getAuthor() { - if (author == null) { - author = new ArrayList(); - } - return this.author; - } - - /** - * Gets the value of the performer property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the performer property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getPerformer().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getPerformer() { - if (performer == null) { - performer = new ArrayList(); - } - return this.performer; - } - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Obtiene el valor de la propiedad version. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVersion() { - return version; - } - - /** - * Define el valor de la propiedad version. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVersion(String value) { - this.version = value; - } - - /** - * Obtiene el valor de la propiedad releaseType. - * - * @return - * possible object is - * {@link String } - * - */ - public String getReleaseType() { - return releaseType; - } - - /** - * Define el valor de la propiedad releaseType. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setReleaseType(String value) { - this.releaseType = value; - } - - /** - * Obtiene el valor de la propiedad releaseDate. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getReleaseDate() { - return releaseDate; - } - - /** - * Define el valor de la propiedad releaseDate. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setReleaseDate(XMLGregorianCalendar value) { - this.releaseDate = value; - } - - /** - * Obtiene el valor de la propiedad barcodes. - * - * @return - * possible object is - * {@link BarcodesType } - * - */ - public BarcodesType getBarcodes() { - return barcodes; - } - - /** - * Define el valor de la propiedad barcodes. - * - * @param value - * allowed object is - * {@link BarcodesType } - * - */ - public void setBarcodes(BarcodesType value) { - this.barcodes = value; - } - - /** - * Obtiene el valor de la propiedad partNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPartNumber() { - return partNumber; - } - - /** - * Define el valor de la propiedad partNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPartNumber(String value) { - this.partNumber = value; - } - - /** - * Obtiene el valor de la propiedad serialNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerialNumber() { - return serialNumber; - } - - /** - * Define el valor de la propiedad serialNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerialNumber(String value) { - this.serialNumber = value; - } - - /** - * Obtiene el valor de la propiedad keywords. - * - * @return - * possible object is - * {@link KeywordsType } - * - */ - public KeywordsType getKeywords() { - return keywords; - } - - /** - * Define el valor de la propiedad keywords. - * - * @param value - * allowed object is - * {@link KeywordsType } - * - */ - public void setKeywords(KeywordsType value) { - this.keywords = value; - } - - /** - * Gets the value of the magazine property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the magazine property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMagazine().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link MagazineType } - * - * - */ - public List getMagazine() { - if (magazine == null) { - magazine = new ArrayList(); - } - return this.magazine; - } - - /** - * Gets the value of the book property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the book property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getBook().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link BookType } - * - * - */ - public List getBook() { - if (book == null) { - book = new ArrayList(); - } - return this.book; - } - - /** - * Obtiene el valor de la propiedad categories. - * - * @return - * possible object is - * {@link CategoriesType } - * - */ - public CategoriesType getCategories() { - return categories; - } - - /** - * Define el valor de la propiedad categories. - * - * @param value - * allowed object is - * {@link CategoriesType } - * - */ - public void setCategories(CategoriesType value) { - this.categories = value; - } - - /** - * Obtiene el valor de la propiedad subcategories. - * - * @return - * possible object is - * {@link SubcategoriesType } - * - */ - public SubcategoriesType getSubcategories() { - return subcategories; - } - - /** - * Define el valor de la propiedad subcategories. - * - * @param value - * allowed object is - * {@link SubcategoriesType } - * - */ - public void setSubcategories(SubcategoriesType value) { - this.subcategories = value; - } - - /** - * Obtiene el valor de la propiedad languages. - * - * @return - * possible object is - * {@link LanguagesType } - * - */ - public LanguagesType getLanguages() { - return languages; - } - - /** - * Define el valor de la propiedad languages. - * - * @param value - * allowed object is - * {@link LanguagesType } - * - */ - public void setLanguages(LanguagesType value) { - this.languages = value; - } - - /** - * Obtiene el valor de la propiedad systems. - * - * @return - * possible object is - * {@link SystemsType } - * - */ - public SystemsType getSystems() { - return systems; - } - - /** - * Define el valor de la propiedad systems. - * - * @param value - * allowed object is - * {@link SystemsType } - * - */ - public void setSystems(SystemsType value) { - this.systems = value; - } - - /** - * Obtiene el valor de la propiedad architectures. - * - * @return - * possible object is - * {@link ArchitecturesType } - * - */ - public ArchitecturesType getArchitectures() { - return architectures; - } - - /** - * Define el valor de la propiedad architectures. - * - * @param value - * allowed object is - * {@link ArchitecturesType } - * - */ - public void setArchitectures(ArchitecturesType value) { - this.architectures = value; - } - - /** - * Obtiene el valor de la propiedad requiredOperatingSystems. - * - * @return - * possible object is - * {@link RequiredOperatingSystemsType } - * - */ - public RequiredOperatingSystemsType getRequiredOperatingSystems() { - return requiredOperatingSystems; - } - - /** - * Define el valor de la propiedad requiredOperatingSystems. - * - * @param value - * allowed object is - * {@link RequiredOperatingSystemsType } - * - */ - public void setRequiredOperatingSystems(RequiredOperatingSystemsType value) { - this.requiredOperatingSystems = value; - } - - /** - * Gets the value of the userManual property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the userManual property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getUserManual().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link UserManualType } - * - * - */ - public List getUserManual() { - if (userManual == null) { - userManual = new ArrayList(); - } - return this.userManual; - } - - /** - * Gets the value of the opticalDisc property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the opticalDisc property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getOpticalDisc().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link OpticalDiscType } - * - * - */ - public List getOpticalDisc() { - if (opticalDisc == null) { - opticalDisc = new ArrayList(); - } - return this.opticalDisc; - } - - /** - * Gets the value of the advertisement property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the advertisement property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAdvertisement().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link AdvertisementType } - * - * - */ - public List getAdvertisement() { - if (advertisement == null) { - advertisement = new ArrayList(); - } - return this.advertisement; - } - - /** - * Gets the value of the linearMedia property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the linearMedia property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLinearMedia().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LinearMediaType } - * - * - */ - public List getLinearMedia() { - if (linearMedia == null) { - linearMedia = new ArrayList(); - } - return this.linearMedia; - } - - /** - * Gets the value of the pciCard property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the pciCard property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getPCICard().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link PCIType } - * - * - */ - public List getPCICard() { - if (pciCard == null) { - pciCard = new ArrayList(); - } - return this.pciCard; - } - - /** - * Gets the value of the blockMedia property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the blockMedia property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getBlockMedia().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link BlockMediaType } - * - * - */ - public List getBlockMedia() { - if (blockMedia == null) { - blockMedia = new ArrayList(); - } - return this.blockMedia; - } - - /** - * Gets the value of the audioMedia property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the audioMedia property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAudioMedia().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link AudioMediaType } - * - * - */ - public List getAudioMedia() { - if (audioMedia == null) { - audioMedia = new ArrayList(); - } - return this.audioMedia; - } - -} diff --git a/CICMMetadata/java/generated/CaseScanType.java b/CICMMetadata/java/generated/CaseScanType.java deleted file mode 100644 index c982b55..0000000 --- a/CICMMetadata/java/generated/CaseScanType.java +++ /dev/null @@ -1,111 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para CaseScanType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="CaseScanType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="CaseScanElement">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="sleeve"/>
- *               <enumeration value="inner"/>
- *               <enumeration value="inlay"/>
- *               <enumeration value="frontback"/>
- *               <enumeration value="frontfull"/>
- *               <enumeration value="boxfront"/>
- *               <enumeration value="boxback"/>
- *               <enumeration value="boxspine"/>
- *               <enumeration value="external"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Scan" type="{}ScanType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CaseScanType", propOrder = { - "caseScanElement", - "scan" -}) -public class CaseScanType { - - @XmlElement(name = "CaseScanElement", required = true) - protected String caseScanElement; - @XmlElement(name = "Scan", required = true) - protected ScanType scan; - - /** - * Obtiene el valor de la propiedad caseScanElement. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCaseScanElement() { - return caseScanElement; - } - - /** - * Define el valor de la propiedad caseScanElement. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCaseScanElement(String value) { - this.caseScanElement = value; - } - - /** - * Obtiene el valor de la propiedad scan. - * - * @return - * possible object is - * {@link ScanType } - * - */ - public ScanType getScan() { - return scan; - } - - /** - * Define el valor de la propiedad scan. - * - * @param value - * allowed object is - * {@link ScanType } - * - */ - public void setScan(ScanType value) { - this.scan = value; - } - -} diff --git a/CICMMetadata/java/generated/CaseType.java b/CICMMetadata/java/generated/CaseType.java deleted file mode 100644 index 9482fc2..0000000 --- a/CICMMetadata/java/generated/CaseType.java +++ /dev/null @@ -1,129 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para CaseType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="CaseType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="CaseType">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="jewel"/>
- *               <enumeration value="bigjewel"/>
- *               <enumeration value="slimjewel"/>
- *               <enumeration value="sleeve"/>
- *               <enumeration value="qpack"/>
- *               <enumeration value="digisleeve"/>
- *               <enumeration value="discboxslider"/>
- *               <enumeration value="compacplus"/>
- *               <enumeration value="keepcase"/>
- *               <enumeration value="snapcase"/>
- *               <enumeration value="softcase"/>
- *               <enumeration value="ecopack"/>
- *               <enumeration value="liftlock"/>
- *               <enumeration value="spindle"/>
- *               <enumeration value="ps2case"/>
- *               <enumeration value="ps3case"/>
- *               <enumeration value="bluraykeepcase"/>
- *               <enumeration value="pscase"/>
- *               <enumeration value="dccase"/>
- *               <enumeration value="saturncase"/>
- *               <enumeration value="xboxcase"/>
- *               <enumeration value="xbox360case"/>
- *               <enumeration value="xboxonecase"/>
- *               <enumeration value="saturnbigcase"/>
- *               <enumeration value="gccase"/>
- *               <enumeration value="wiicase"/>
- *               <enumeration value="unknown"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Scans" type="{}ScansType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CaseType", propOrder = { - "caseType", - "scans" -}) -public class CaseType { - - @XmlElement(name = "CaseType", required = true) - protected String caseType; - @XmlElement(name = "Scans", required = true) - protected ScansType scans; - - /** - * Obtiene el valor de la propiedad caseType. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCaseType() { - return caseType; - } - - /** - * Define el valor de la propiedad caseType. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCaseType(String value) { - this.caseType = value; - } - - /** - * Obtiene el valor de la propiedad scans. - * - * @return - * possible object is - * {@link ScansType } - * - */ - public ScansType getScans() { - return scans; - } - - /** - * Define el valor de la propiedad scans. - * - * @param value - * allowed object is - * {@link ScansType } - * - */ - public void setScans(ScansType value) { - this.scans = value; - } - -} diff --git a/CICMMetadata/java/generated/CategoriesType.java b/CICMMetadata/java/generated/CategoriesType.java deleted file mode 100644 index 372cbec..0000000 --- a/CICMMetadata/java/generated/CategoriesType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para CategoriesType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="CategoriesType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Category" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CategoriesType", propOrder = { - "category" -}) -public class CategoriesType { - - @XmlElement(name = "Category", required = true) - protected List category; - - /** - * Gets the value of the category property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the category property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getCategory().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getCategory() { - if (category == null) { - category = new ArrayList(); - } - return this.category; - } - -} diff --git a/CICMMetadata/java/generated/ChecksumType.java b/CICMMetadata/java/generated/ChecksumType.java deleted file mode 100644 index 33d2430..0000000 --- a/CICMMetadata/java/generated/ChecksumType.java +++ /dev/null @@ -1,125 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - - -/** - *

Clase Java para ChecksumType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ChecksumType">
- *   <simpleContent>
- *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
- *       <attribute name="type" use="required">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *             <enumeration value="fletcher16"/>
- *             <enumeration value="fletcher32"/>
- *             <enumeration value="adler32"/>
- *             <enumeration value="crc16"/>
- *             <enumeration value="crc16ccitt"/>
- *             <enumeration value="crc32"/>
- *             <enumeration value="crc64"/>
- *             <enumeration value="md4"/>
- *             <enumeration value="md5"/>
- *             <enumeration value="dm6"/>
- *             <enumeration value="ripemd128"/>
- *             <enumeration value="ripemd160"/>
- *             <enumeration value="ripemed320"/>
- *             <enumeration value="sha1"/>
- *             <enumeration value="sha224"/>
- *             <enumeration value="sha256"/>
- *             <enumeration value="sha384"/>
- *             <enumeration value="sha512"/>
- *             <enumeration value="sha3"/>
- *             <enumeration value="skein"/>
- *             <enumeration value="snefru"/>
- *             <enumeration value="blake256"/>
- *             <enumeration value="blake512"/>
- *             <enumeration value="tiger"/>
- *             <enumeration value="whirlpool"/>
- *             <enumeration value="spamsum"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *     </extension>
- *   </simpleContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ChecksumType", propOrder = { - "value" -}) -public class ChecksumType { - - @XmlValue - protected String value; - @XmlAttribute(name = "type", required = true) - protected String type; - - /** - * Obtiene el valor de la propiedad value. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Define el valor de la propiedad value. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Obtiene el valor de la propiedad type. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Define el valor de la propiedad type. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - -} diff --git a/CICMMetadata/java/generated/ChecksumsType.java b/CICMMetadata/java/generated/ChecksumsType.java deleted file mode 100644 index 328f0bf..0000000 --- a/CICMMetadata/java/generated/ChecksumsType.java +++ /dev/null @@ -1,78 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Checksum of file element - * - *

Clase Java para ChecksumsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ChecksumsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Checksum" type="{}ChecksumType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ChecksumsType", propOrder = { - "checksum" -}) -public class ChecksumsType { - - @XmlElement(name = "Checksum", required = true) - protected List checksum; - - /** - * Gets the value of the checksum property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the checksum property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getChecksum().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ChecksumType } - * - * - */ - public List getChecksum() { - if (checksum == null) { - checksum = new ArrayList(); - } - return this.checksum; - } - -} diff --git a/CICMMetadata/java/generated/ContentsFileType.java b/CICMMetadata/java/generated/ContentsFileType.java deleted file mode 100644 index fb9fef9..0000000 --- a/CICMMetadata/java/generated/ContentsFileType.java +++ /dev/null @@ -1,492 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.datatype.XMLGregorianCalendar; - - -/** - *

Clase Java para ContentsFileType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ContentsFileType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="ExtendedAttributes" type="{}ExtendedAttributesType"/>
- *       </sequence>
- *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- *       <attribute name="creationTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="accessTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="statusChangeTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="backupTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="lastWriteTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="attributes" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="posixMode" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
- *       <attribute name="deviceNumber" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="posixGroupId" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="inode" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="links" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="posixUserId" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="length" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ContentsFileType", propOrder = { - "checksums", - "extendedAttributes" -}) -public class ContentsFileType { - - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "ExtendedAttributes", required = true) - protected ExtendedAttributesType extendedAttributes; - @XmlAttribute(name = "name", required = true) - protected String name; - @XmlAttribute(name = "creationTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar creationTime; - @XmlAttribute(name = "accessTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar accessTime; - @XmlAttribute(name = "statusChangeTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar statusChangeTime; - @XmlAttribute(name = "backupTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar backupTime; - @XmlAttribute(name = "lastWriteTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar lastWriteTime; - @XmlAttribute(name = "attributes", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger attributes; - @XmlAttribute(name = "posixMode") - @XmlSchemaType(name = "unsignedInt") - protected Long posixMode; - @XmlAttribute(name = "deviceNumber") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger deviceNumber; - @XmlAttribute(name = "posixGroupId") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger posixGroupId; - @XmlAttribute(name = "inode", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger inode; - @XmlAttribute(name = "links", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger links; - @XmlAttribute(name = "posixUserId") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger posixUserId; - @XmlAttribute(name = "length", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger length; - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad extendedAttributes. - * - * @return - * possible object is - * {@link ExtendedAttributesType } - * - */ - public ExtendedAttributesType getExtendedAttributes() { - return extendedAttributes; - } - - /** - * Define el valor de la propiedad extendedAttributes. - * - * @param value - * allowed object is - * {@link ExtendedAttributesType } - * - */ - public void setExtendedAttributes(ExtendedAttributesType value) { - this.extendedAttributes = value; - } - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Obtiene el valor de la propiedad creationTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getCreationTime() { - return creationTime; - } - - /** - * Define el valor de la propiedad creationTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setCreationTime(XMLGregorianCalendar value) { - this.creationTime = value; - } - - /** - * Obtiene el valor de la propiedad accessTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getAccessTime() { - return accessTime; - } - - /** - * Define el valor de la propiedad accessTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setAccessTime(XMLGregorianCalendar value) { - this.accessTime = value; - } - - /** - * Obtiene el valor de la propiedad statusChangeTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getStatusChangeTime() { - return statusChangeTime; - } - - /** - * Define el valor de la propiedad statusChangeTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setStatusChangeTime(XMLGregorianCalendar value) { - this.statusChangeTime = value; - } - - /** - * Obtiene el valor de la propiedad backupTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getBackupTime() { - return backupTime; - } - - /** - * Define el valor de la propiedad backupTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setBackupTime(XMLGregorianCalendar value) { - this.backupTime = value; - } - - /** - * Obtiene el valor de la propiedad lastWriteTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getLastWriteTime() { - return lastWriteTime; - } - - /** - * Define el valor de la propiedad lastWriteTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setLastWriteTime(XMLGregorianCalendar value) { - this.lastWriteTime = value; - } - - /** - * Obtiene el valor de la propiedad attributes. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getAttributes() { - return attributes; - } - - /** - * Define el valor de la propiedad attributes. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setAttributes(BigInteger value) { - this.attributes = value; - } - - /** - * Obtiene el valor de la propiedad posixMode. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getPosixMode() { - return posixMode; - } - - /** - * Define el valor de la propiedad posixMode. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setPosixMode(Long value) { - this.posixMode = value; - } - - /** - * Obtiene el valor de la propiedad deviceNumber. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getDeviceNumber() { - return deviceNumber; - } - - /** - * Define el valor de la propiedad deviceNumber. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setDeviceNumber(BigInteger value) { - this.deviceNumber = value; - } - - /** - * Obtiene el valor de la propiedad posixGroupId. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPosixGroupId() { - return posixGroupId; - } - - /** - * Define el valor de la propiedad posixGroupId. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPosixGroupId(BigInteger value) { - this.posixGroupId = value; - } - - /** - * Obtiene el valor de la propiedad inode. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getInode() { - return inode; - } - - /** - * Define el valor de la propiedad inode. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setInode(BigInteger value) { - this.inode = value; - } - - /** - * Obtiene el valor de la propiedad links. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getLinks() { - return links; - } - - /** - * Define el valor de la propiedad links. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setLinks(BigInteger value) { - this.links = value; - } - - /** - * Obtiene el valor de la propiedad posixUserId. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPosixUserId() { - return posixUserId; - } - - /** - * Define el valor de la propiedad posixUserId. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPosixUserId(BigInteger value) { - this.posixUserId = value; - } - - /** - * Obtiene el valor de la propiedad length. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getLength() { - return length; - } - - /** - * Define el valor de la propiedad length. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setLength(BigInteger value) { - this.length = value; - } - -} diff --git a/CICMMetadata/java/generated/CoordinatesType.java b/CICMMetadata/java/generated/CoordinatesType.java deleted file mode 100644 index 39fd6ea..0000000 --- a/CICMMetadata/java/generated/CoordinatesType.java +++ /dev/null @@ -1,81 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para CoordinatesType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="CoordinatesType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Latitude" type="{http://www.w3.org/2001/XMLSchema}double"/>
- *         <element name="Longitude" type="{http://www.w3.org/2001/XMLSchema}double"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CoordinatesType", propOrder = { - "latitude", - "longitude" -}) -public class CoordinatesType { - - @XmlElement(name = "Latitude") - protected double latitude; - @XmlElement(name = "Longitude") - protected double longitude; - - /** - * Obtiene el valor de la propiedad latitude. - * - */ - public double getLatitude() { - return latitude; - } - - /** - * Define el valor de la propiedad latitude. - * - */ - public void setLatitude(double value) { - this.latitude = value; - } - - /** - * Obtiene el valor de la propiedad longitude. - * - */ - public double getLongitude() { - return longitude; - } - - /** - * Define el valor de la propiedad longitude. - * - */ - public void setLongitude(double value) { - this.longitude = value; - } - -} diff --git a/CICMMetadata/java/generated/CoverType.java b/CICMMetadata/java/generated/CoverType.java deleted file mode 100644 index f3923db..0000000 --- a/CICMMetadata/java/generated/CoverType.java +++ /dev/null @@ -1,123 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para CoverType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="CoverType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="File" type="{}FileType"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="Thumbnail" type="{http://www.w3.org/2001/XMLSchema}base64Binary"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CoverType", propOrder = { - "file", - "checksums", - "thumbnail" -}) -public class CoverType { - - @XmlElement(name = "File", required = true) - protected FileType file; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "Thumbnail", required = true) - protected byte[] thumbnail; - - /** - * Obtiene el valor de la propiedad file. - * - * @return - * possible object is - * {@link FileType } - * - */ - public FileType getFile() { - return file; - } - - /** - * Define el valor de la propiedad file. - * - * @param value - * allowed object is - * {@link FileType } - * - */ - public void setFile(FileType value) { - this.file = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad thumbnail. - * - * @return - * possible object is - * byte[] - */ - public byte[] getThumbnail() { - return thumbnail; - } - - /** - * Define el valor de la propiedad thumbnail. - * - * @param value - * allowed object is - * byte[] - */ - public void setThumbnail(byte[] value) { - this.thumbnail = value; - } - -} diff --git a/CICMMetadata/java/generated/DimensionsType.java b/CICMMetadata/java/generated/DimensionsType.java deleted file mode 100644 index dd020b6..0000000 --- a/CICMMetadata/java/generated/DimensionsType.java +++ /dev/null @@ -1,147 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Dimensions of media - * - *

Clase Java para DimensionsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="DimensionsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Diameter" type="{http://www.w3.org/2001/XMLSchema}double" minOccurs="0"/>
- *         <element name="Height" type="{http://www.w3.org/2001/XMLSchema}double" minOccurs="0"/>
- *         <element name="Width" type="{http://www.w3.org/2001/XMLSchema}double" minOccurs="0"/>
- *         <element name="Thickness" type="{http://www.w3.org/2001/XMLSchema}double"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "DimensionsType", propOrder = { - "diameter", - "height", - "width", - "thickness" -}) -public class DimensionsType { - - @XmlElement(name = "Diameter") - protected Double diameter; - @XmlElement(name = "Height") - protected Double height; - @XmlElement(name = "Width") - protected Double width; - @XmlElement(name = "Thickness") - protected double thickness; - - /** - * Obtiene el valor de la propiedad diameter. - * - * @return - * possible object is - * {@link Double } - * - */ - public Double getDiameter() { - return diameter; - } - - /** - * Define el valor de la propiedad diameter. - * - * @param value - * allowed object is - * {@link Double } - * - */ - public void setDiameter(Double value) { - this.diameter = value; - } - - /** - * Obtiene el valor de la propiedad height. - * - * @return - * possible object is - * {@link Double } - * - */ - public Double getHeight() { - return height; - } - - /** - * Define el valor de la propiedad height. - * - * @param value - * allowed object is - * {@link Double } - * - */ - public void setHeight(Double value) { - this.height = value; - } - - /** - * Obtiene el valor de la propiedad width. - * - * @return - * possible object is - * {@link Double } - * - */ - public Double getWidth() { - return width; - } - - /** - * Define el valor de la propiedad width. - * - * @param value - * allowed object is - * {@link Double } - * - */ - public void setWidth(Double value) { - this.width = value; - } - - /** - * Obtiene el valor de la propiedad thickness. - * - */ - public double getThickness() { - return thickness; - } - - /** - * Define el valor de la propiedad thickness. - * - */ - public void setThickness(double value) { - this.thickness = value; - } - -} diff --git a/CICMMetadata/java/generated/DirectoryType.java b/CICMMetadata/java/generated/DirectoryType.java deleted file mode 100644 index ec3e432..0000000 --- a/CICMMetadata/java/generated/DirectoryType.java +++ /dev/null @@ -1,476 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.datatype.XMLGregorianCalendar; - - -/** - *

Clase Java para DirectoryType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="DirectoryType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="File" type="{}ContentsFileType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Directory" type="{}DirectoryType" maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- *       <attribute name="creationTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="accessTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="statusChangeTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="backupTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="lastWriteTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" />
- *       <attribute name="attributes" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="posixMode" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
- *       <attribute name="deviceNumber" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="posixGroupId" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="inode" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="links" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *       <attribute name="posixUserId" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "DirectoryType", propOrder = { - "file", - "directory" -}) -public class DirectoryType { - - @XmlElement(name = "File") - protected List file; - @XmlElement(name = "Directory") - protected List directory; - @XmlAttribute(name = "name", required = true) - protected String name; - @XmlAttribute(name = "creationTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar creationTime; - @XmlAttribute(name = "accessTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar accessTime; - @XmlAttribute(name = "statusChangeTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar statusChangeTime; - @XmlAttribute(name = "backupTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar backupTime; - @XmlAttribute(name = "lastWriteTime") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar lastWriteTime; - @XmlAttribute(name = "attributes", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger attributes; - @XmlAttribute(name = "posixMode") - @XmlSchemaType(name = "unsignedInt") - protected Long posixMode; - @XmlAttribute(name = "deviceNumber") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger deviceNumber; - @XmlAttribute(name = "posixGroupId") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger posixGroupId; - @XmlAttribute(name = "inode") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger inode; - @XmlAttribute(name = "links") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger links; - @XmlAttribute(name = "posixUserId") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger posixUserId; - - /** - * Gets the value of the file property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the file property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getFile().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ContentsFileType } - * - * - */ - public List getFile() { - if (file == null) { - file = new ArrayList(); - } - return this.file; - } - - /** - * Gets the value of the directory property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the directory property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getDirectory().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link DirectoryType } - * - * - */ - public List getDirectory() { - if (directory == null) { - directory = new ArrayList(); - } - return this.directory; - } - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Obtiene el valor de la propiedad creationTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getCreationTime() { - return creationTime; - } - - /** - * Define el valor de la propiedad creationTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setCreationTime(XMLGregorianCalendar value) { - this.creationTime = value; - } - - /** - * Obtiene el valor de la propiedad accessTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getAccessTime() { - return accessTime; - } - - /** - * Define el valor de la propiedad accessTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setAccessTime(XMLGregorianCalendar value) { - this.accessTime = value; - } - - /** - * Obtiene el valor de la propiedad statusChangeTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getStatusChangeTime() { - return statusChangeTime; - } - - /** - * Define el valor de la propiedad statusChangeTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setStatusChangeTime(XMLGregorianCalendar value) { - this.statusChangeTime = value; - } - - /** - * Obtiene el valor de la propiedad backupTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getBackupTime() { - return backupTime; - } - - /** - * Define el valor de la propiedad backupTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setBackupTime(XMLGregorianCalendar value) { - this.backupTime = value; - } - - /** - * Obtiene el valor de la propiedad lastWriteTime. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getLastWriteTime() { - return lastWriteTime; - } - - /** - * Define el valor de la propiedad lastWriteTime. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setLastWriteTime(XMLGregorianCalendar value) { - this.lastWriteTime = value; - } - - /** - * Obtiene el valor de la propiedad attributes. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getAttributes() { - return attributes; - } - - /** - * Define el valor de la propiedad attributes. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setAttributes(BigInteger value) { - this.attributes = value; - } - - /** - * Obtiene el valor de la propiedad posixMode. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getPosixMode() { - return posixMode; - } - - /** - * Define el valor de la propiedad posixMode. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setPosixMode(Long value) { - this.posixMode = value; - } - - /** - * Obtiene el valor de la propiedad deviceNumber. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getDeviceNumber() { - return deviceNumber; - } - - /** - * Define el valor de la propiedad deviceNumber. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setDeviceNumber(BigInteger value) { - this.deviceNumber = value; - } - - /** - * Obtiene el valor de la propiedad posixGroupId. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPosixGroupId() { - return posixGroupId; - } - - /** - * Define el valor de la propiedad posixGroupId. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPosixGroupId(BigInteger value) { - this.posixGroupId = value; - } - - /** - * Obtiene el valor de la propiedad inode. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getInode() { - return inode; - } - - /** - * Define el valor de la propiedad inode. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setInode(BigInteger value) { - this.inode = value; - } - - /** - * Obtiene el valor de la propiedad links. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getLinks() { - return links; - } - - /** - * Define el valor de la propiedad links. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setLinks(BigInteger value) { - this.links = value; - } - - /** - * Obtiene el valor de la propiedad posixUserId. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getPosixUserId() { - return posixUserId; - } - - /** - * Define el valor de la propiedad posixUserId. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setPosixUserId(BigInteger value) { - this.posixUserId = value; - } - -} diff --git a/CICMMetadata/java/generated/DiscScanType.java b/CICMMetadata/java/generated/DiscScanType.java deleted file mode 100644 index ba8ab06..0000000 --- a/CICMMetadata/java/generated/DiscScanType.java +++ /dev/null @@ -1,108 +0,0 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2015.11.07 at 05:27:06 AM WET -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Java class for DiscScanType complex type. - * - *

The following schema fragment specifies the expected content contained within this class. - * - *

- * <complexType name="DiscScanType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="DiscScanElement">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="up"/>
- *               <enumeration value="down"/>
- *               <enumeration value="front"/>
- *               <enumeration value="back"/>
- *               <enumeration value="left"/>
- *               <enumeration value="right"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Scan" type="{}ScanType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "DiscScanType", propOrder = { - "discScanElement", - "scan" -}) -public class DiscScanType { - - @XmlElement(name = "DiscScanElement", required = true) - protected String discScanElement; - @XmlElement(name = "Scan", required = true) - protected ScanType scan; - - /** - * Gets the value of the discScanElement property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDiscScanElement() { - return discScanElement; - } - - /** - * Sets the value of the discScanElement property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDiscScanElement(String value) { - this.discScanElement = value; - } - - /** - * Gets the value of the scan property. - * - * @return - * possible object is - * {@link ScanType } - * - */ - public ScanType getScan() { - return scan; - } - - /** - * Sets the value of the scan property. - * - * @param value - * allowed object is - * {@link ScanType } - * - */ - public void setScan(ScanType value) { - this.scan = value; - } - -} diff --git a/CICMMetadata/java/generated/DumpHardwareArrayType.java b/CICMMetadata/java/generated/DumpHardwareArrayType.java deleted file mode 100644 index de9565b..0000000 --- a/CICMMetadata/java/generated/DumpHardwareArrayType.java +++ /dev/null @@ -1,78 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Array of drives information - * - *

Clase Java para DumpHardwareArrayType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="DumpHardwareArrayType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="DumpHardware" type="{}DumpHardwareType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "DumpHardwareArrayType", propOrder = { - "dumpHardware" -}) -public class DumpHardwareArrayType { - - @XmlElement(name = "DumpHardware", required = true) - protected List dumpHardware; - - /** - * Gets the value of the dumpHardware property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the dumpHardware property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getDumpHardware().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link DumpHardwareType } - * - * - */ - public List getDumpHardware() { - if (dumpHardware == null) { - dumpHardware = new ArrayList(); - } - return this.dumpHardware; - } - -} diff --git a/CICMMetadata/java/generated/DumpHardwareType.java b/CICMMetadata/java/generated/DumpHardwareType.java deleted file mode 100644 index 4c37cb1..0000000 --- a/CICMMetadata/java/generated/DumpHardwareType.java +++ /dev/null @@ -1,237 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para DumpHardwareType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="DumpHardwareType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Manufacturer" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Model" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Revision" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Firmware" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Serial" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Extents" type="{}ExtentsType"/>
- *         <element name="Software" type="{}SoftwareType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "DumpHardwareType", propOrder = { - "manufacturer", - "model", - "revision", - "firmware", - "serial", - "extents", - "software" -}) -public class DumpHardwareType { - - @XmlElement(name = "Manufacturer", required = true) - protected String manufacturer; - @XmlElement(name = "Model", required = true) - protected String model; - @XmlElement(name = "Revision", required = true) - protected String revision; - @XmlElement(name = "Firmware", required = true) - protected String firmware; - @XmlElement(name = "Serial", required = true) - protected String serial; - @XmlElement(name = "Extents", required = true) - protected ExtentsType extents; - @XmlElement(name = "Software", required = true) - protected SoftwareType software; - - /** - * Obtiene el valor de la propiedad manufacturer. - * - * @return - * possible object is - * {@link String } - * - */ - public String getManufacturer() { - return manufacturer; - } - - /** - * Define el valor de la propiedad manufacturer. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setManufacturer(String value) { - this.manufacturer = value; - } - - /** - * Obtiene el valor de la propiedad model. - * - * @return - * possible object is - * {@link String } - * - */ - public String getModel() { - return model; - } - - /** - * Define el valor de la propiedad model. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setModel(String value) { - this.model = value; - } - - /** - * Obtiene el valor de la propiedad revision. - * - * @return - * possible object is - * {@link String } - * - */ - public String getRevision() { - return revision; - } - - /** - * Define el valor de la propiedad revision. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setRevision(String value) { - this.revision = value; - } - - /** - * Obtiene el valor de la propiedad firmware. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFirmware() { - return firmware; - } - - /** - * Define el valor de la propiedad firmware. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFirmware(String value) { - this.firmware = value; - } - - /** - * Obtiene el valor de la propiedad serial. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerial() { - return serial; - } - - /** - * Define el valor de la propiedad serial. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerial(String value) { - this.serial = value; - } - - /** - * Obtiene el valor de la propiedad extents. - * - * @return - * possible object is - * {@link ExtentsType } - * - */ - public ExtentsType getExtents() { - return extents; - } - - /** - * Define el valor de la propiedad extents. - * - * @param value - * allowed object is - * {@link ExtentsType } - * - */ - public void setExtents(ExtentsType value) { - this.extents = value; - } - - /** - * Obtiene el valor de la propiedad software. - * - * @return - * possible object is - * {@link SoftwareType } - * - */ - public SoftwareType getSoftware() { - return software; - } - - /** - * Define el valor de la propiedad software. - * - * @param value - * allowed object is - * {@link SoftwareType } - * - */ - public void setSoftware(SoftwareType value) { - this.software = value; - } - -} diff --git a/CICMMetadata/java/generated/DumpType.java b/CICMMetadata/java/generated/DumpType.java deleted file mode 100644 index 749bf9a..0000000 --- a/CICMMetadata/java/generated/DumpType.java +++ /dev/null @@ -1,131 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Information about dumped structure - * - * - *

Clase Java para DumpType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="DumpType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "DumpType", propOrder = { - "image", - "size", - "checksums" -}) -public class DumpType { - - @XmlElement(name = "Image", required = true) - protected String image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link String } - * - */ - public String getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setImage(String value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - -} diff --git a/CICMMetadata/java/generated/EVPDType.java b/CICMMetadata/java/generated/EVPDType.java deleted file mode 100644 index 901ece1..0000000 --- a/CICMMetadata/java/generated/EVPDType.java +++ /dev/null @@ -1,163 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para EVPDType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="EVPDType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *       </sequence>
- *       <attribute name="page">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
- *             <minInclusive value="1"/>
- *             <maxInclusive value="255"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "EVPDType", propOrder = { - "image", - "size", - "checksums" -}) -public class EVPDType { - - @XmlElement(name = "Image", required = true) - protected String image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlAttribute(name = "page") - protected Short page; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link String } - * - */ - public String getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setImage(String value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad page. - * - * @return - * possible object is - * {@link Short } - * - */ - public Short getPage() { - return page; - } - - /** - * Define el valor de la propiedad page. - * - * @param value - * allowed object is - * {@link Short } - * - */ - public void setPage(Short value) { - this.page = value; - } - -} diff --git a/CICMMetadata/java/generated/ExtendedAttributeType.java b/CICMMetadata/java/generated/ExtendedAttributeType.java deleted file mode 100644 index a7c441f..0000000 --- a/CICMMetadata/java/generated/ExtendedAttributeType.java +++ /dev/null @@ -1,127 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para ExtendedAttributeType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ExtendedAttributeType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *       </sequence>
- *       <attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- *       <attribute name="length" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ExtendedAttributeType", propOrder = { - "checksums" -}) -public class ExtendedAttributeType { - - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlAttribute(name = "name", required = true) - protected String name; - @XmlAttribute(name = "length", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger length; - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Obtiene el valor de la propiedad length. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getLength() { - return length; - } - - /** - * Define el valor de la propiedad length. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setLength(BigInteger value) { - this.length = value; - } - -} diff --git a/CICMMetadata/java/generated/ExtendedAttributesType.java b/CICMMetadata/java/generated/ExtendedAttributesType.java deleted file mode 100644 index b4f48dd..0000000 --- a/CICMMetadata/java/generated/ExtendedAttributesType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para ExtendedAttributesType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ExtendedAttributesType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="ExtendedAttribute" type="{}ExtendedAttributeType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ExtendedAttributesType", propOrder = { - "extendedAttribute" -}) -public class ExtendedAttributesType { - - @XmlElement(name = "ExtendedAttribute", required = true) - protected List extendedAttribute; - - /** - * Gets the value of the extendedAttribute property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the extendedAttribute property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getExtendedAttribute().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ExtendedAttributeType } - * - * - */ - public List getExtendedAttribute() { - if (extendedAttribute == null) { - extendedAttribute = new ArrayList(); - } - return this.extendedAttribute; - } - -} diff --git a/CICMMetadata/java/generated/ExtentType.java b/CICMMetadata/java/generated/ExtentType.java deleted file mode 100644 index 21860e4..0000000 --- a/CICMMetadata/java/generated/ExtentType.java +++ /dev/null @@ -1,101 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para ExtentType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ExtentType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Start" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="End" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ExtentType", propOrder = { - "start", - "end" -}) -public class ExtentType { - - @XmlElement(name = "Start", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger start; - @XmlElement(name = "End", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger end; - - /** - * Obtiene el valor de la propiedad start. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getStart() { - return start; - } - - /** - * Define el valor de la propiedad start. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setStart(BigInteger value) { - this.start = value; - } - - /** - * Obtiene el valor de la propiedad end. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEnd() { - return end; - } - - /** - * Define el valor de la propiedad end. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEnd(BigInteger value) { - this.end = value; - } - -} diff --git a/CICMMetadata/java/generated/ExtentsType.java b/CICMMetadata/java/generated/ExtentsType.java deleted file mode 100644 index ab5d4ee..0000000 --- a/CICMMetadata/java/generated/ExtentsType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para ExtentsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ExtentsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Extent" type="{}ExtentType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ExtentsType", propOrder = { - "extent" -}) -public class ExtentsType { - - @XmlElement(name = "Extent", required = true) - protected List extent; - - /** - * Gets the value of the extent property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the extent property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getExtent().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ExtentType } - * - * - */ - public List getExtent() { - if (extent == null) { - extent = new ArrayList(); - } - return this.extent; - } - -} diff --git a/CICMMetadata/java/generated/FileSystemInformationType.java b/CICMMetadata/java/generated/FileSystemInformationType.java deleted file mode 100644 index 1df2c74..0000000 --- a/CICMMetadata/java/generated/FileSystemInformationType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para FileSystemInformationType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="FileSystemInformationType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Partition" type="{}PartitionType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "FileSystemInformationType", propOrder = { - "partition" -}) -public class FileSystemInformationType { - - @XmlElement(name = "Partition", required = true) - protected List partition; - - /** - * Gets the value of the partition property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the partition property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getPartition().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link PartitionType } - * - * - */ - public List getPartition() { - if (partition == null) { - partition = new ArrayList(); - } - return this.partition; - } - -} diff --git a/CICMMetadata/java/generated/FileSystemType.java b/CICMMetadata/java/generated/FileSystemType.java deleted file mode 100644 index bf7fa70..0000000 --- a/CICMMetadata/java/generated/FileSystemType.java +++ /dev/null @@ -1,591 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.datatype.XMLGregorianCalendar; - - -/** - * Information about a filesystem - * - *

Clase Java para FileSystemType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="FileSystemType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Type" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="CreationDate" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>
- *         <element name="ModificationDate" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>
- *         <element name="BackupDate" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>
- *         <element name="ClusterSize" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="Clusters" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Files" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" minOccurs="0"/>
- *         <element name="Bootable" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *         <element name="VolumeSerial" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="VolumeName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="FreeClusters" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" minOccurs="0"/>
- *         <element name="Dirty" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *         <element name="ExpirationDate" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>
- *         <element name="EffectiveDate" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>
- *         <element name="SystemIdentifier" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="VolumeSetIdentifier" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="PublisherIdentifier" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="DataPreparerIdentifier" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="ApplicationIdentifier" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Contents" type="{}FilesystemContentsType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "FileSystemType", propOrder = { - "type", - "creationDate", - "modificationDate", - "backupDate", - "clusterSize", - "clusters", - "files", - "bootable", - "volumeSerial", - "volumeName", - "freeClusters", - "dirty", - "expirationDate", - "effectiveDate", - "systemIdentifier", - "volumeSetIdentifier", - "publisherIdentifier", - "dataPreparerIdentifier", - "applicationIdentifier", - "contents" -}) -public class FileSystemType { - - @XmlElement(name = "Type", required = true) - protected String type; - @XmlElement(name = "CreationDate") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar creationDate; - @XmlElement(name = "ModificationDate") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar modificationDate; - @XmlElement(name = "BackupDate") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar backupDate; - @XmlElement(name = "ClusterSize") - @XmlSchemaType(name = "unsignedInt") - protected long clusterSize; - @XmlElement(name = "Clusters", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger clusters; - @XmlElement(name = "Files") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger files; - @XmlElement(name = "Bootable") - protected boolean bootable; - @XmlElement(name = "VolumeSerial") - protected String volumeSerial; - @XmlElement(name = "VolumeName") - protected String volumeName; - @XmlElement(name = "FreeClusters") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger freeClusters; - @XmlElement(name = "Dirty") - protected boolean dirty; - @XmlElement(name = "ExpirationDate") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar expirationDate; - @XmlElement(name = "EffectiveDate") - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar effectiveDate; - @XmlElement(name = "SystemIdentifier") - protected String systemIdentifier; - @XmlElement(name = "VolumeSetIdentifier") - protected String volumeSetIdentifier; - @XmlElement(name = "PublisherIdentifier") - protected String publisherIdentifier; - @XmlElement(name = "DataPreparerIdentifier") - protected String dataPreparerIdentifier; - @XmlElement(name = "ApplicationIdentifier") - protected String applicationIdentifier; - @XmlElement(name = "Contents") - protected FilesystemContentsType contents; - - /** - * Obtiene el valor de la propiedad type. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Define el valor de la propiedad type. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Obtiene el valor de la propiedad creationDate. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getCreationDate() { - return creationDate; - } - - /** - * Define el valor de la propiedad creationDate. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setCreationDate(XMLGregorianCalendar value) { - this.creationDate = value; - } - - /** - * Obtiene el valor de la propiedad modificationDate. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getModificationDate() { - return modificationDate; - } - - /** - * Define el valor de la propiedad modificationDate. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setModificationDate(XMLGregorianCalendar value) { - this.modificationDate = value; - } - - /** - * Obtiene el valor de la propiedad backupDate. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getBackupDate() { - return backupDate; - } - - /** - * Define el valor de la propiedad backupDate. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setBackupDate(XMLGregorianCalendar value) { - this.backupDate = value; - } - - /** - * Obtiene el valor de la propiedad clusterSize. - * - */ - public long getClusterSize() { - return clusterSize; - } - - /** - * Define el valor de la propiedad clusterSize. - * - */ - public void setClusterSize(long value) { - this.clusterSize = value; - } - - /** - * Obtiene el valor de la propiedad clusters. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getClusters() { - return clusters; - } - - /** - * Define el valor de la propiedad clusters. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setClusters(BigInteger value) { - this.clusters = value; - } - - /** - * Obtiene el valor de la propiedad files. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getFiles() { - return files; - } - - /** - * Define el valor de la propiedad files. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setFiles(BigInteger value) { - this.files = value; - } - - /** - * Obtiene el valor de la propiedad bootable. - * - */ - public boolean isBootable() { - return bootable; - } - - /** - * Define el valor de la propiedad bootable. - * - */ - public void setBootable(boolean value) { - this.bootable = value; - } - - /** - * Obtiene el valor de la propiedad volumeSerial. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVolumeSerial() { - return volumeSerial; - } - - /** - * Define el valor de la propiedad volumeSerial. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVolumeSerial(String value) { - this.volumeSerial = value; - } - - /** - * Obtiene el valor de la propiedad volumeName. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVolumeName() { - return volumeName; - } - - /** - * Define el valor de la propiedad volumeName. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVolumeName(String value) { - this.volumeName = value; - } - - /** - * Obtiene el valor de la propiedad freeClusters. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getFreeClusters() { - return freeClusters; - } - - /** - * Define el valor de la propiedad freeClusters. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setFreeClusters(BigInteger value) { - this.freeClusters = value; - } - - /** - * Obtiene el valor de la propiedad dirty. - * - */ - public boolean isDirty() { - return dirty; - } - - /** - * Define el valor de la propiedad dirty. - * - */ - public void setDirty(boolean value) { - this.dirty = value; - } - - /** - * Obtiene el valor de la propiedad expirationDate. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getExpirationDate() { - return expirationDate; - } - - /** - * Define el valor de la propiedad expirationDate. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setExpirationDate(XMLGregorianCalendar value) { - this.expirationDate = value; - } - - /** - * Obtiene el valor de la propiedad effectiveDate. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getEffectiveDate() { - return effectiveDate; - } - - /** - * Define el valor de la propiedad effectiveDate. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setEffectiveDate(XMLGregorianCalendar value) { - this.effectiveDate = value; - } - - /** - * Obtiene el valor de la propiedad systemIdentifier. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSystemIdentifier() { - return systemIdentifier; - } - - /** - * Define el valor de la propiedad systemIdentifier. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSystemIdentifier(String value) { - this.systemIdentifier = value; - } - - /** - * Obtiene el valor de la propiedad volumeSetIdentifier. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVolumeSetIdentifier() { - return volumeSetIdentifier; - } - - /** - * Define el valor de la propiedad volumeSetIdentifier. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVolumeSetIdentifier(String value) { - this.volumeSetIdentifier = value; - } - - /** - * Obtiene el valor de la propiedad publisherIdentifier. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPublisherIdentifier() { - return publisherIdentifier; - } - - /** - * Define el valor de la propiedad publisherIdentifier. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPublisherIdentifier(String value) { - this.publisherIdentifier = value; - } - - /** - * Obtiene el valor de la propiedad dataPreparerIdentifier. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDataPreparerIdentifier() { - return dataPreparerIdentifier; - } - - /** - * Define el valor de la propiedad dataPreparerIdentifier. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDataPreparerIdentifier(String value) { - this.dataPreparerIdentifier = value; - } - - /** - * Obtiene el valor de la propiedad applicationIdentifier. - * - * @return - * possible object is - * {@link String } - * - */ - public String getApplicationIdentifier() { - return applicationIdentifier; - } - - /** - * Define el valor de la propiedad applicationIdentifier. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setApplicationIdentifier(String value) { - this.applicationIdentifier = value; - } - - /** - * Obtiene el valor de la propiedad contents. - * - * @return - * possible object is - * {@link FilesystemContentsType } - * - */ - public FilesystemContentsType getContents() { - return contents; - } - - /** - * Define el valor de la propiedad contents. - * - * @param value - * allowed object is - * {@link FilesystemContentsType } - * - */ - public void setContents(FilesystemContentsType value) { - this.contents = value; - } - -} diff --git a/CICMMetadata/java/generated/FileSystemsType.java b/CICMMetadata/java/generated/FileSystemsType.java deleted file mode 100644 index 1d41f4a..0000000 --- a/CICMMetadata/java/generated/FileSystemsType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para FileSystemsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="FileSystemsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="FileSystem" type="{}FileSystemType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "FileSystemsType", propOrder = { - "fileSystem" -}) -public class FileSystemsType { - - @XmlElement(name = "FileSystem", required = true) - protected List fileSystem; - - /** - * Gets the value of the fileSystem property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the fileSystem property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getFileSystem().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link FileSystemType } - * - * - */ - public List getFileSystem() { - if (fileSystem == null) { - fileSystem = new ArrayList(); - } - return this.fileSystem; - } - -} diff --git a/CICMMetadata/java/generated/FileType.java b/CICMMetadata/java/generated/FileType.java deleted file mode 100644 index 7541bca..0000000 --- a/CICMMetadata/java/generated/FileType.java +++ /dev/null @@ -1,96 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - - -/** - * File - * - *

Clase Java para FileType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="FileType">
- *   <simpleContent>
- *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
- *       <attribute name="format" type="{http://www.w3.org/2001/XMLSchema}string" />
- *     </extension>
- *   </simpleContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "FileType", propOrder = { - "value" -}) -public class FileType { - - @XmlValue - protected String value; - @XmlAttribute(name = "format") - protected String format; - - /** - * Obtiene el valor de la propiedad value. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Define el valor de la propiedad value. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Obtiene el valor de la propiedad format. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFormat() { - return format; - } - - /** - * Define el valor de la propiedad format. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFormat(String value) { - this.format = value; - } - -} diff --git a/CICMMetadata/java/generated/FilesystemContentsType.java b/CICMMetadata/java/generated/FilesystemContentsType.java deleted file mode 100644 index 204c355..0000000 --- a/CICMMetadata/java/generated/FilesystemContentsType.java +++ /dev/null @@ -1,137 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para FilesystemContentsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="FilesystemContentsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="File" type="{}ContentsFileType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Directory" type="{}DirectoryType" maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *       <attribute name="namespace" type="{http://www.w3.org/2001/XMLSchema}string" />
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "FilesystemContentsType", propOrder = { - "file", - "directory" -}) -public class FilesystemContentsType { - - @XmlElement(name = "File") - protected List file; - @XmlElement(name = "Directory") - protected List directory; - @XmlAttribute(name = "namespace") - protected String namespace; - - /** - * Gets the value of the file property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the file property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getFile().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ContentsFileType } - * - * - */ - public List getFile() { - if (file == null) { - file = new ArrayList(); - } - return this.file; - } - - /** - * Gets the value of the directory property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the directory property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getDirectory().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link DirectoryType } - * - * - */ - public List getDirectory() { - if (directory == null) { - directory = new ArrayList(); - } - return this.directory; - } - - /** - * Obtiene el valor de la propiedad namespace. - * - * @return - * possible object is - * {@link String } - * - */ - public String getNamespace() { - return namespace; - } - - /** - * Define el valor de la propiedad namespace. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setNamespace(String value) { - this.namespace = value; - } - -} diff --git a/CICMMetadata/java/generated/ImageType.java b/CICMMetadata/java/generated/ImageType.java deleted file mode 100644 index 565733b..0000000 --- a/CICMMetadata/java/generated/ImageType.java +++ /dev/null @@ -1,127 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - - -/** - * File containing track dump, and format, binary, yranib, or audio/video container - * - * - *

Clase Java para ImageType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ImageType">
- *   <simpleContent>
- *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
- *       <attribute name="format" type="{http://www.w3.org/2001/XMLSchema}string" />
- *       <attribute name="offset" type="{http://www.w3.org/2001/XMLSchema}unsignedLong" />
- *     </extension>
- *   </simpleContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ImageType", propOrder = { - "value" -}) -public class ImageType { - - @XmlValue - protected String value; - @XmlAttribute(name = "format") - protected String format; - @XmlAttribute(name = "offset") - @XmlSchemaType(name = "unsignedLong") - protected BigInteger offset; - - /** - * Obtiene el valor de la propiedad value. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Define el valor de la propiedad value. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Obtiene el valor de la propiedad format. - * - * @return - * possible object is - * {@link String } - * - */ - public String getFormat() { - return format; - } - - /** - * Define el valor de la propiedad format. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setFormat(String value) { - this.format = value; - } - - /** - * Obtiene el valor de la propiedad offset. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getOffset() { - return offset; - } - - /** - * Define el valor de la propiedad offset. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setOffset(BigInteger value) { - this.offset = value; - } - -} diff --git a/CICMMetadata/java/generated/KeywordsType.java b/CICMMetadata/java/generated/KeywordsType.java deleted file mode 100644 index bdab9c5..0000000 --- a/CICMMetadata/java/generated/KeywordsType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para KeywordsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="KeywordsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Keyword" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "KeywordsType", propOrder = { - "keyword" -}) -public class KeywordsType { - - @XmlElement(name = "Keyword", required = true) - protected List keyword; - - /** - * Gets the value of the keyword property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the keyword property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getKeyword().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getKeyword() { - if (keyword == null) { - keyword = new ArrayList(); - } - return this.keyword; - } - -} diff --git a/CICMMetadata/java/generated/LanguagesType.java b/CICMMetadata/java/generated/LanguagesType.java deleted file mode 100644 index a99bc2f..0000000 --- a/CICMMetadata/java/generated/LanguagesType.java +++ /dev/null @@ -1,567 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para LanguagesType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="LanguagesType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Language" maxOccurs="unbounded">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="aar"/>
- *               <enumeration value="abk"/>
- *               <enumeration value="ace"/>
- *               <enumeration value="ach"/>
- *               <enumeration value="ada"/>
- *               <enumeration value="ady"/>
- *               <enumeration value="afa"/>
- *               <enumeration value="afh"/>
- *               <enumeration value="afr"/>
- *               <enumeration value="ain"/>
- *               <enumeration value="aka"/>
- *               <enumeration value="akk"/>
- *               <enumeration value="alb"/>
- *               <enumeration value="ale"/>
- *               <enumeration value="alg"/>
- *               <enumeration value="alt"/>
- *               <enumeration value="amh"/>
- *               <enumeration value="ang"/>
- *               <enumeration value="anp"/>
- *               <enumeration value="apa"/>
- *               <enumeration value="ara"/>
- *               <enumeration value="arc"/>
- *               <enumeration value="arg"/>
- *               <enumeration value="arm"/>
- *               <enumeration value="arn"/>
- *               <enumeration value="arp"/>
- *               <enumeration value="art"/>
- *               <enumeration value="arw"/>
- *               <enumeration value="asm"/>
- *               <enumeration value="ast"/>
- *               <enumeration value="ath"/>
- *               <enumeration value="aus"/>
- *               <enumeration value="ava"/>
- *               <enumeration value="ave"/>
- *               <enumeration value="awa"/>
- *               <enumeration value="aym"/>
- *               <enumeration value="aze"/>
- *               <enumeration value="bad"/>
- *               <enumeration value="bai"/>
- *               <enumeration value="bak"/>
- *               <enumeration value="bal"/>
- *               <enumeration value="bam"/>
- *               <enumeration value="ban"/>
- *               <enumeration value="baq"/>
- *               <enumeration value="bas"/>
- *               <enumeration value="bat"/>
- *               <enumeration value="bej"/>
- *               <enumeration value="bel"/>
- *               <enumeration value="bem"/>
- *               <enumeration value="ben"/>
- *               <enumeration value="ber"/>
- *               <enumeration value="bho"/>
- *               <enumeration value="bih"/>
- *               <enumeration value="bik"/>
- *               <enumeration value="bin"/>
- *               <enumeration value="bis"/>
- *               <enumeration value="bla"/>
- *               <enumeration value="bnt"/>
- *               <enumeration value="bos"/>
- *               <enumeration value="bra"/>
- *               <enumeration value="bre"/>
- *               <enumeration value="btk"/>
- *               <enumeration value="bua"/>
- *               <enumeration value="bug"/>
- *               <enumeration value="bul"/>
- *               <enumeration value="bur"/>
- *               <enumeration value="byn"/>
- *               <enumeration value="cad"/>
- *               <enumeration value="cai"/>
- *               <enumeration value="car"/>
- *               <enumeration value="cat"/>
- *               <enumeration value="cau"/>
- *               <enumeration value="ceb"/>
- *               <enumeration value="cel"/>
- *               <enumeration value="cha"/>
- *               <enumeration value="chb"/>
- *               <enumeration value="che"/>
- *               <enumeration value="chg"/>
- *               <enumeration value="chi"/>
- *               <enumeration value="chk"/>
- *               <enumeration value="chm"/>
- *               <enumeration value="chn"/>
- *               <enumeration value="cho"/>
- *               <enumeration value="chp"/>
- *               <enumeration value="chr"/>
- *               <enumeration value="chu"/>
- *               <enumeration value="chv"/>
- *               <enumeration value="chy"/>
- *               <enumeration value="cmc"/>
- *               <enumeration value="cop"/>
- *               <enumeration value="cor"/>
- *               <enumeration value="cos"/>
- *               <enumeration value="cpe"/>
- *               <enumeration value="cpf"/>
- *               <enumeration value="cpp"/>
- *               <enumeration value="cre"/>
- *               <enumeration value="crh"/>
- *               <enumeration value="crp"/>
- *               <enumeration value="csb"/>
- *               <enumeration value="cus"/>
- *               <enumeration value="cze"/>
- *               <enumeration value="dak"/>
- *               <enumeration value="dan"/>
- *               <enumeration value="dar"/>
- *               <enumeration value="day"/>
- *               <enumeration value="del"/>
- *               <enumeration value="den"/>
- *               <enumeration value="dgr"/>
- *               <enumeration value="din"/>
- *               <enumeration value="div"/>
- *               <enumeration value="doi"/>
- *               <enumeration value="dra"/>
- *               <enumeration value="dsb"/>
- *               <enumeration value="dua"/>
- *               <enumeration value="dum"/>
- *               <enumeration value="dut"/>
- *               <enumeration value="dyu"/>
- *               <enumeration value="dzo"/>
- *               <enumeration value="efi"/>
- *               <enumeration value="egy"/>
- *               <enumeration value="eka"/>
- *               <enumeration value="elx"/>
- *               <enumeration value="eng"/>
- *               <enumeration value="enm"/>
- *               <enumeration value="epo"/>
- *               <enumeration value="est"/>
- *               <enumeration value="ewe"/>
- *               <enumeration value="ewo"/>
- *               <enumeration value="fan"/>
- *               <enumeration value="fao"/>
- *               <enumeration value="fat"/>
- *               <enumeration value="fij"/>
- *               <enumeration value="fil"/>
- *               <enumeration value="fin"/>
- *               <enumeration value="fiu"/>
- *               <enumeration value="fon"/>
- *               <enumeration value="fre"/>
- *               <enumeration value="frm"/>
- *               <enumeration value="fro"/>
- *               <enumeration value="frr"/>
- *               <enumeration value="frs"/>
- *               <enumeration value="fry"/>
- *               <enumeration value="ful"/>
- *               <enumeration value="fur"/>
- *               <enumeration value="gaa"/>
- *               <enumeration value="gay"/>
- *               <enumeration value="gba"/>
- *               <enumeration value="gem"/>
- *               <enumeration value="geo"/>
- *               <enumeration value="ger"/>
- *               <enumeration value="gez"/>
- *               <enumeration value="gil"/>
- *               <enumeration value="gla"/>
- *               <enumeration value="gle"/>
- *               <enumeration value="glg"/>
- *               <enumeration value="glv"/>
- *               <enumeration value="gmh"/>
- *               <enumeration value="goh"/>
- *               <enumeration value="gon"/>
- *               <enumeration value="gor"/>
- *               <enumeration value="got"/>
- *               <enumeration value="grb"/>
- *               <enumeration value="grc"/>
- *               <enumeration value="gre"/>
- *               <enumeration value="grn"/>
- *               <enumeration value="gsw"/>
- *               <enumeration value="guj"/>
- *               <enumeration value="gwi"/>
- *               <enumeration value="hai"/>
- *               <enumeration value="hat"/>
- *               <enumeration value="hau"/>
- *               <enumeration value="haw"/>
- *               <enumeration value="heb"/>
- *               <enumeration value="her"/>
- *               <enumeration value="hil"/>
- *               <enumeration value="him"/>
- *               <enumeration value="hin"/>
- *               <enumeration value="hit"/>
- *               <enumeration value="hmn"/>
- *               <enumeration value="hmo"/>
- *               <enumeration value="hrv"/>
- *               <enumeration value="hsb"/>
- *               <enumeration value="hun"/>
- *               <enumeration value="hup"/>
- *               <enumeration value="iba"/>
- *               <enumeration value="ibo"/>
- *               <enumeration value="ice"/>
- *               <enumeration value="ido"/>
- *               <enumeration value="iii"/>
- *               <enumeration value="ijo"/>
- *               <enumeration value="iku"/>
- *               <enumeration value="ile"/>
- *               <enumeration value="ilo"/>
- *               <enumeration value="ina"/>
- *               <enumeration value="inc"/>
- *               <enumeration value="ind"/>
- *               <enumeration value="ine"/>
- *               <enumeration value="inh"/>
- *               <enumeration value="ipk"/>
- *               <enumeration value="ira"/>
- *               <enumeration value="iro"/>
- *               <enumeration value="ita"/>
- *               <enumeration value="jav"/>
- *               <enumeration value="jbo"/>
- *               <enumeration value="jpn"/>
- *               <enumeration value="jpr"/>
- *               <enumeration value="jrb"/>
- *               <enumeration value="kaa"/>
- *               <enumeration value="kab"/>
- *               <enumeration value="kac"/>
- *               <enumeration value="kal"/>
- *               <enumeration value="kam"/>
- *               <enumeration value="kan"/>
- *               <enumeration value="kar"/>
- *               <enumeration value="kas"/>
- *               <enumeration value="kau"/>
- *               <enumeration value="kaw"/>
- *               <enumeration value="kaz"/>
- *               <enumeration value="kbd"/>
- *               <enumeration value="kha"/>
- *               <enumeration value="khi"/>
- *               <enumeration value="khm"/>
- *               <enumeration value="kho"/>
- *               <enumeration value="kik"/>
- *               <enumeration value="kin"/>
- *               <enumeration value="kir"/>
- *               <enumeration value="kmb"/>
- *               <enumeration value="kok"/>
- *               <enumeration value="kom"/>
- *               <enumeration value="kon"/>
- *               <enumeration value="kor"/>
- *               <enumeration value="kos"/>
- *               <enumeration value="kpe"/>
- *               <enumeration value="krc"/>
- *               <enumeration value="krl"/>
- *               <enumeration value="kro"/>
- *               <enumeration value="kru"/>
- *               <enumeration value="kua"/>
- *               <enumeration value="kum"/>
- *               <enumeration value="kur"/>
- *               <enumeration value="kut"/>
- *               <enumeration value="lad"/>
- *               <enumeration value="lah"/>
- *               <enumeration value="lam"/>
- *               <enumeration value="lao"/>
- *               <enumeration value="lat"/>
- *               <enumeration value="lav"/>
- *               <enumeration value="lez"/>
- *               <enumeration value="lim"/>
- *               <enumeration value="lin"/>
- *               <enumeration value="lit"/>
- *               <enumeration value="lol"/>
- *               <enumeration value="loz"/>
- *               <enumeration value="ltz"/>
- *               <enumeration value="lua"/>
- *               <enumeration value="lub"/>
- *               <enumeration value="lug"/>
- *               <enumeration value="lui"/>
- *               <enumeration value="lun"/>
- *               <enumeration value="luo"/>
- *               <enumeration value="lus"/>
- *               <enumeration value="mac"/>
- *               <enumeration value="mad"/>
- *               <enumeration value="mag"/>
- *               <enumeration value="mah"/>
- *               <enumeration value="mai"/>
- *               <enumeration value="mak"/>
- *               <enumeration value="mal"/>
- *               <enumeration value="man"/>
- *               <enumeration value="mao"/>
- *               <enumeration value="map"/>
- *               <enumeration value="mar"/>
- *               <enumeration value="mas"/>
- *               <enumeration value="may"/>
- *               <enumeration value="mdf"/>
- *               <enumeration value="mdr"/>
- *               <enumeration value="men"/>
- *               <enumeration value="mga"/>
- *               <enumeration value="mic"/>
- *               <enumeration value="min"/>
- *               <enumeration value="mis"/>
- *               <enumeration value="mkh"/>
- *               <enumeration value="mlg"/>
- *               <enumeration value="mlt"/>
- *               <enumeration value="mnc"/>
- *               <enumeration value="mni"/>
- *               <enumeration value="mno"/>
- *               <enumeration value="moh"/>
- *               <enumeration value="mon"/>
- *               <enumeration value="mos"/>
- *               <enumeration value="mul"/>
- *               <enumeration value="mun"/>
- *               <enumeration value="mus"/>
- *               <enumeration value="mwl"/>
- *               <enumeration value="mwr"/>
- *               <enumeration value="myn"/>
- *               <enumeration value="myv"/>
- *               <enumeration value="nah"/>
- *               <enumeration value="nai"/>
- *               <enumeration value="nap"/>
- *               <enumeration value="nau"/>
- *               <enumeration value="nav"/>
- *               <enumeration value="nbl"/>
- *               <enumeration value="nde"/>
- *               <enumeration value="ndo"/>
- *               <enumeration value="nds"/>
- *               <enumeration value="nep"/>
- *               <enumeration value="new"/>
- *               <enumeration value="nia"/>
- *               <enumeration value="nic"/>
- *               <enumeration value="niu"/>
- *               <enumeration value="nno"/>
- *               <enumeration value="nob"/>
- *               <enumeration value="nog"/>
- *               <enumeration value="non"/>
- *               <enumeration value="nor"/>
- *               <enumeration value="nqo"/>
- *               <enumeration value="nso"/>
- *               <enumeration value="nub"/>
- *               <enumeration value="nwc"/>
- *               <enumeration value="nya"/>
- *               <enumeration value="nym"/>
- *               <enumeration value="nyn"/>
- *               <enumeration value="nyo"/>
- *               <enumeration value="nzi"/>
- *               <enumeration value="oci"/>
- *               <enumeration value="oji"/>
- *               <enumeration value="ori"/>
- *               <enumeration value="orm"/>
- *               <enumeration value="osa"/>
- *               <enumeration value="oss"/>
- *               <enumeration value="ota"/>
- *               <enumeration value="oto"/>
- *               <enumeration value="paa"/>
- *               <enumeration value="pag"/>
- *               <enumeration value="pal"/>
- *               <enumeration value="pam"/>
- *               <enumeration value="pan"/>
- *               <enumeration value="pap"/>
- *               <enumeration value="pau"/>
- *               <enumeration value="peo"/>
- *               <enumeration value="per"/>
- *               <enumeration value="phi"/>
- *               <enumeration value="phn"/>
- *               <enumeration value="pli"/>
- *               <enumeration value="pol"/>
- *               <enumeration value="pon"/>
- *               <enumeration value="por"/>
- *               <enumeration value="pra"/>
- *               <enumeration value="pro"/>
- *               <enumeration value="pus"/>
- *               <enumeration value="qaa-qtz"/>
- *               <enumeration value="que"/>
- *               <enumeration value="raj"/>
- *               <enumeration value="rap"/>
- *               <enumeration value="rar"/>
- *               <enumeration value="roa"/>
- *               <enumeration value="roh"/>
- *               <enumeration value="rom"/>
- *               <enumeration value="rum"/>
- *               <enumeration value="run"/>
- *               <enumeration value="rup"/>
- *               <enumeration value="rus"/>
- *               <enumeration value="sad"/>
- *               <enumeration value="sag"/>
- *               <enumeration value="sah"/>
- *               <enumeration value="sai"/>
- *               <enumeration value="sal"/>
- *               <enumeration value="sam"/>
- *               <enumeration value="san"/>
- *               <enumeration value="sas"/>
- *               <enumeration value="sat"/>
- *               <enumeration value="scn"/>
- *               <enumeration value="sco"/>
- *               <enumeration value="sel"/>
- *               <enumeration value="sem"/>
- *               <enumeration value="sga"/>
- *               <enumeration value="sgn"/>
- *               <enumeration value="shn"/>
- *               <enumeration value="sid"/>
- *               <enumeration value="sin"/>
- *               <enumeration value="sio"/>
- *               <enumeration value="sit"/>
- *               <enumeration value="sla"/>
- *               <enumeration value="slo"/>
- *               <enumeration value="slv"/>
- *               <enumeration value="sma"/>
- *               <enumeration value="sme"/>
- *               <enumeration value="smi"/>
- *               <enumeration value="smj"/>
- *               <enumeration value="smn"/>
- *               <enumeration value="smo"/>
- *               <enumeration value="sms"/>
- *               <enumeration value="sna"/>
- *               <enumeration value="snd"/>
- *               <enumeration value="snk"/>
- *               <enumeration value="sog"/>
- *               <enumeration value="som"/>
- *               <enumeration value="son"/>
- *               <enumeration value="sot"/>
- *               <enumeration value="spa"/>
- *               <enumeration value="srd"/>
- *               <enumeration value="srn"/>
- *               <enumeration value="srp"/>
- *               <enumeration value="srr"/>
- *               <enumeration value="ssa"/>
- *               <enumeration value="ssw"/>
- *               <enumeration value="suk"/>
- *               <enumeration value="sun"/>
- *               <enumeration value="sus"/>
- *               <enumeration value="sux"/>
- *               <enumeration value="swa"/>
- *               <enumeration value="swe"/>
- *               <enumeration value="syc"/>
- *               <enumeration value="syr"/>
- *               <enumeration value="tah"/>
- *               <enumeration value="tai"/>
- *               <enumeration value="tam"/>
- *               <enumeration value="tat"/>
- *               <enumeration value="tel"/>
- *               <enumeration value="tem"/>
- *               <enumeration value="ter"/>
- *               <enumeration value="tet"/>
- *               <enumeration value="tgk"/>
- *               <enumeration value="tgl"/>
- *               <enumeration value="tha"/>
- *               <enumeration value="tib"/>
- *               <enumeration value="tig"/>
- *               <enumeration value="tir"/>
- *               <enumeration value="tiv"/>
- *               <enumeration value="tkl"/>
- *               <enumeration value="tlh"/>
- *               <enumeration value="tli"/>
- *               <enumeration value="tmh"/>
- *               <enumeration value="tog"/>
- *               <enumeration value="ton"/>
- *               <enumeration value="tpi"/>
- *               <enumeration value="tsi"/>
- *               <enumeration value="tsn"/>
- *               <enumeration value="tso"/>
- *               <enumeration value="tuk"/>
- *               <enumeration value="tum"/>
- *               <enumeration value="tup"/>
- *               <enumeration value="tur"/>
- *               <enumeration value="tut"/>
- *               <enumeration value="tvl"/>
- *               <enumeration value="twi"/>
- *               <enumeration value="tyv"/>
- *               <enumeration value="udm"/>
- *               <enumeration value="uga"/>
- *               <enumeration value="uig"/>
- *               <enumeration value="ukr"/>
- *               <enumeration value="umb"/>
- *               <enumeration value="und"/>
- *               <enumeration value="urd"/>
- *               <enumeration value="uzb"/>
- *               <enumeration value="vai"/>
- *               <enumeration value="ven"/>
- *               <enumeration value="vie"/>
- *               <enumeration value="vol"/>
- *               <enumeration value="vot"/>
- *               <enumeration value="wak"/>
- *               <enumeration value="wal"/>
- *               <enumeration value="war"/>
- *               <enumeration value="was"/>
- *               <enumeration value="wel"/>
- *               <enumeration value="wen"/>
- *               <enumeration value="wln"/>
- *               <enumeration value="wol"/>
- *               <enumeration value="xal"/>
- *               <enumeration value="xho"/>
- *               <enumeration value="yao"/>
- *               <enumeration value="yap"/>
- *               <enumeration value="yid"/>
- *               <enumeration value="yor"/>
- *               <enumeration value="ypk"/>
- *               <enumeration value="zap"/>
- *               <enumeration value="zbl"/>
- *               <enumeration value="zen"/>
- *               <enumeration value="zgh"/>
- *               <enumeration value="zha"/>
- *               <enumeration value="znd"/>
- *               <enumeration value="zul"/>
- *               <enumeration value="zun"/>
- *               <enumeration value="zxx"/>
- *               <enumeration value="zza"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "LanguagesType", propOrder = { - "language" -}) -public class LanguagesType { - - @XmlElement(name = "Language", required = true) - protected List language; - - /** - * Gets the value of the language property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the language property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLanguage().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getLanguage() { - if (language == null) { - language = new ArrayList(); - } - return this.language; - } - -} diff --git a/CICMMetadata/java/generated/LayeredTextType.java b/CICMMetadata/java/generated/LayeredTextType.java deleted file mode 100644 index cb452be..0000000 --- a/CICMMetadata/java/generated/LayeredTextType.java +++ /dev/null @@ -1,100 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - - -/** - *

Clase Java para LayeredTextType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="LayeredTextType">
- *   <simpleContent>
- *     <extension base="<http://www.w3.org/2001/XMLSchema>string">
- *       <attribute name="layer">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
- *             <minInclusive value="0"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *     </extension>
- *   </simpleContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "LayeredTextType", propOrder = { - "value" -}) -public class LayeredTextType { - - @XmlValue - protected String value; - @XmlAttribute(name = "layer") - protected Long layer; - - /** - * Obtiene el valor de la propiedad value. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Define el valor de la propiedad value. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Obtiene el valor de la propiedad layer. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getLayer() { - return layer; - } - - /** - * Define el valor de la propiedad layer. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setLayer(Long value) { - this.layer = value; - } - -} diff --git a/CICMMetadata/java/generated/LayersType.java b/CICMMetadata/java/generated/LayersType.java deleted file mode 100644 index fea8757..0000000 --- a/CICMMetadata/java/generated/LayersType.java +++ /dev/null @@ -1,111 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para LayersType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="LayersType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Sectors" type="{}SectorsType" maxOccurs="unbounded"/>
- *       </sequence>
- *       <attribute name="type">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *             <enumeration value="PTP"/>
- *             <enumeration value="OTP"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "LayersType", propOrder = { - "sectors" -}) -public class LayersType { - - @XmlElement(name = "Sectors", required = true) - protected List sectors; - @XmlAttribute(name = "type") - protected String type; - - /** - * Gets the value of the sectors property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the sectors property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSectors().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link SectorsType } - * - * - */ - public List getSectors() { - if (sectors == null) { - sectors = new ArrayList(); - } - return this.sectors; - } - - /** - * Obtiene el valor de la propiedad type. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Define el valor de la propiedad type. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - -} diff --git a/CICMMetadata/java/generated/LinearMediaType.java b/CICMMetadata/java/generated/LinearMediaType.java deleted file mode 100644 index 95998da..0000000 --- a/CICMMetadata/java/generated/LinearMediaType.java +++ /dev/null @@ -1,583 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Describes a dump of a linear media, that is, a media that is read byte-by-byte like for - * example, a ROM chip, a game cartridge, a PCMCIA SRAM card, etc... - * - * - *

Clase Java para LinearMediaType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="LinearMediaType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="ImageChecksums" type="{}ChecksumsType"/>
- *         <element name="Checksums" type="{}ChecksumsType" minOccurs="0"/>
- *         <element name="PartNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="SerialNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Title" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Sequence" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" minOccurs="0"/>
- *         <element name="ImageInterleave" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" minOccurs="0"/>
- *         <element name="Interleave" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" minOccurs="0"/>
- *         <element name="Manufacturer" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Model" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Package" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Interface" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Dimensions" type="{}DimensionsType" minOccurs="0"/>
- *         <element name="Scans" type="{}ScansType" minOccurs="0"/>
- *         <element name="DumpHardwareArray" type="{}DumpHardwareArrayType" minOccurs="0"/>
- *         <element name="PCMCIA" type="{}PCMCIAType" minOccurs="0"/>
- *         <element name="CopyProtection" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "LinearMediaType", propOrder = { - "image", - "size", - "imageChecksums", - "checksums", - "partNumber", - "serialNumber", - "title", - "sequence", - "imageInterleave", - "interleave", - "manufacturer", - "model", - "_package", - "_interface", - "dimensions", - "scans", - "dumpHardwareArray", - "pcmcia", - "copyProtection" -}) -public class LinearMediaType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "ImageChecksums", required = true) - protected ChecksumsType imageChecksums; - @XmlElement(name = "Checksums") - protected ChecksumsType checksums; - @XmlElement(name = "PartNumber") - protected String partNumber; - @XmlElement(name = "SerialNumber") - protected String serialNumber; - @XmlElement(name = "Title", required = true) - protected String title; - @XmlElement(name = "Sequence") - @XmlSchemaType(name = "unsignedInt") - protected Long sequence; - @XmlElement(name = "ImageInterleave") - @XmlSchemaType(name = "unsignedInt") - protected Long imageInterleave; - @XmlElement(name = "Interleave") - @XmlSchemaType(name = "unsignedInt") - protected Long interleave; - @XmlElement(name = "Manufacturer") - protected String manufacturer; - @XmlElement(name = "Model") - protected String model; - @XmlElement(name = "Package", required = true) - protected String _package; - @XmlElement(name = "Interface") - protected String _interface; - @XmlElement(name = "Dimensions") - protected DimensionsType dimensions; - @XmlElement(name = "Scans") - protected ScansType scans; - @XmlElement(name = "DumpHardwareArray") - protected DumpHardwareArrayType dumpHardwareArray; - @XmlElement(name = "PCMCIA") - protected PCMCIAType pcmcia; - @XmlElement(name = "CopyProtection") - protected String copyProtection; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad imageChecksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getImageChecksums() { - return imageChecksums; - } - - /** - * Define el valor de la propiedad imageChecksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setImageChecksums(ChecksumsType value) { - this.imageChecksums = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad partNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPartNumber() { - return partNumber; - } - - /** - * Define el valor de la propiedad partNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPartNumber(String value) { - this.partNumber = value; - } - - /** - * Obtiene el valor de la propiedad serialNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerialNumber() { - return serialNumber; - } - - /** - * Define el valor de la propiedad serialNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerialNumber(String value) { - this.serialNumber = value; - } - - /** - * Obtiene el valor de la propiedad title. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTitle() { - return title; - } - - /** - * Define el valor de la propiedad title. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTitle(String value) { - this.title = value; - } - - /** - * Obtiene el valor de la propiedad sequence. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getSequence() { - return sequence; - } - - /** - * Define el valor de la propiedad sequence. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setSequence(Long value) { - this.sequence = value; - } - - /** - * Obtiene el valor de la propiedad imageInterleave. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getImageInterleave() { - return imageInterleave; - } - - /** - * Define el valor de la propiedad imageInterleave. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setImageInterleave(Long value) { - this.imageInterleave = value; - } - - /** - * Obtiene el valor de la propiedad interleave. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getInterleave() { - return interleave; - } - - /** - * Define el valor de la propiedad interleave. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setInterleave(Long value) { - this.interleave = value; - } - - /** - * Obtiene el valor de la propiedad manufacturer. - * - * @return - * possible object is - * {@link String } - * - */ - public String getManufacturer() { - return manufacturer; - } - - /** - * Define el valor de la propiedad manufacturer. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setManufacturer(String value) { - this.manufacturer = value; - } - - /** - * Obtiene el valor de la propiedad model. - * - * @return - * possible object is - * {@link String } - * - */ - public String getModel() { - return model; - } - - /** - * Define el valor de la propiedad model. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setModel(String value) { - this.model = value; - } - - /** - * Obtiene el valor de la propiedad package. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPackage() { - return _package; - } - - /** - * Define el valor de la propiedad package. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPackage(String value) { - this._package = value; - } - - /** - * Obtiene el valor de la propiedad interface. - * - * @return - * possible object is - * {@link String } - * - */ - public String getInterface() { - return _interface; - } - - /** - * Define el valor de la propiedad interface. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setInterface(String value) { - this._interface = value; - } - - /** - * Obtiene el valor de la propiedad dimensions. - * - * @return - * possible object is - * {@link DimensionsType } - * - */ - public DimensionsType getDimensions() { - return dimensions; - } - - /** - * Define el valor de la propiedad dimensions. - * - * @param value - * allowed object is - * {@link DimensionsType } - * - */ - public void setDimensions(DimensionsType value) { - this.dimensions = value; - } - - /** - * Obtiene el valor de la propiedad scans. - * - * @return - * possible object is - * {@link ScansType } - * - */ - public ScansType getScans() { - return scans; - } - - /** - * Define el valor de la propiedad scans. - * - * @param value - * allowed object is - * {@link ScansType } - * - */ - public void setScans(ScansType value) { - this.scans = value; - } - - /** - * Obtiene el valor de la propiedad dumpHardwareArray. - * - * @return - * possible object is - * {@link DumpHardwareArrayType } - * - */ - public DumpHardwareArrayType getDumpHardwareArray() { - return dumpHardwareArray; - } - - /** - * Define el valor de la propiedad dumpHardwareArray. - * - * @param value - * allowed object is - * {@link DumpHardwareArrayType } - * - */ - public void setDumpHardwareArray(DumpHardwareArrayType value) { - this.dumpHardwareArray = value; - } - - /** - * Obtiene el valor de la propiedad pcmcia. - * - * @return - * possible object is - * {@link PCMCIAType } - * - */ - public PCMCIAType getPCMCIA() { - return pcmcia; - } - - /** - * Define el valor de la propiedad pcmcia. - * - * @param value - * allowed object is - * {@link PCMCIAType } - * - */ - public void setPCMCIA(PCMCIAType value) { - this.pcmcia = value; - } - - /** - * Obtiene el valor de la propiedad copyProtection. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCopyProtection() { - return copyProtection; - } - - /** - * Define el valor de la propiedad copyProtection. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCopyProtection(String value) { - this.copyProtection = value; - } - -} diff --git a/CICMMetadata/java/generated/MagazineType.java b/CICMMetadata/java/generated/MagazineType.java deleted file mode 100644 index 3d4f9fd..0000000 --- a/CICMMetadata/java/generated/MagazineType.java +++ /dev/null @@ -1,326 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.datatype.XMLGregorianCalendar; - - -/** - *

Clase Java para MagazineType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="MagazineType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Barcodes" type="{}BarcodesType" minOccurs="0"/>
- *         <element name="Cover" type="{}CoverType" minOccurs="0"/>
- *         <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Editorial" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="PublicationDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/>
- *         <element name="Number" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" minOccurs="0"/>
- *         <element name="Language" type="{}LanguagesType" minOccurs="0"/>
- *         <element name="Pages" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" minOccurs="0"/>
- *         <element name="PageSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Scan" type="{}ScanType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "MagazineType", propOrder = { - "barcodes", - "cover", - "name", - "editorial", - "publicationDate", - "number", - "language", - "pages", - "pageSize", - "scan" -}) -public class MagazineType { - - @XmlElement(name = "Barcodes") - protected BarcodesType barcodes; - @XmlElement(name = "Cover") - protected CoverType cover; - @XmlElement(name = "Name", required = true) - protected String name; - @XmlElement(name = "Editorial") - protected String editorial; - @XmlElement(name = "PublicationDate") - @XmlSchemaType(name = "date") - protected XMLGregorianCalendar publicationDate; - @XmlElement(name = "Number") - @XmlSchemaType(name = "unsignedInt") - protected Long number; - @XmlElement(name = "Language") - protected LanguagesType language; - @XmlElement(name = "Pages") - @XmlSchemaType(name = "unsignedInt") - protected Long pages; - @XmlElement(name = "PageSize") - protected String pageSize; - @XmlElement(name = "Scan") - protected ScanType scan; - - /** - * Obtiene el valor de la propiedad barcodes. - * - * @return - * possible object is - * {@link BarcodesType } - * - */ - public BarcodesType getBarcodes() { - return barcodes; - } - - /** - * Define el valor de la propiedad barcodes. - * - * @param value - * allowed object is - * {@link BarcodesType } - * - */ - public void setBarcodes(BarcodesType value) { - this.barcodes = value; - } - - /** - * Obtiene el valor de la propiedad cover. - * - * @return - * possible object is - * {@link CoverType } - * - */ - public CoverType getCover() { - return cover; - } - - /** - * Define el valor de la propiedad cover. - * - * @param value - * allowed object is - * {@link CoverType } - * - */ - public void setCover(CoverType value) { - this.cover = value; - } - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Obtiene el valor de la propiedad editorial. - * - * @return - * possible object is - * {@link String } - * - */ - public String getEditorial() { - return editorial; - } - - /** - * Define el valor de la propiedad editorial. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setEditorial(String value) { - this.editorial = value; - } - - /** - * Obtiene el valor de la propiedad publicationDate. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getPublicationDate() { - return publicationDate; - } - - /** - * Define el valor de la propiedad publicationDate. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setPublicationDate(XMLGregorianCalendar value) { - this.publicationDate = value; - } - - /** - * Obtiene el valor de la propiedad number. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getNumber() { - return number; - } - - /** - * Define el valor de la propiedad number. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setNumber(Long value) { - this.number = value; - } - - /** - * Obtiene el valor de la propiedad language. - * - * @return - * possible object is - * {@link LanguagesType } - * - */ - public LanguagesType getLanguage() { - return language; - } - - /** - * Define el valor de la propiedad language. - * - * @param value - * allowed object is - * {@link LanguagesType } - * - */ - public void setLanguage(LanguagesType value) { - this.language = value; - } - - /** - * Obtiene el valor de la propiedad pages. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getPages() { - return pages; - } - - /** - * Define el valor de la propiedad pages. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setPages(Long value) { - this.pages = value; - } - - /** - * Obtiene el valor de la propiedad pageSize. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPageSize() { - return pageSize; - } - - /** - * Define el valor de la propiedad pageSize. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPageSize(String value) { - this.pageSize = value; - } - - /** - * Obtiene el valor de la propiedad scan. - * - * @return - * possible object is - * {@link ScanType } - * - */ - public ScanType getScan() { - return scan; - } - - /** - * Define el valor de la propiedad scan. - * - * @param value - * allowed object is - * {@link ScanType } - * - */ - public void setScan(ScanType value) { - this.scan = value; - } - -} diff --git a/CICMMetadata/java/generated/MediaScanType.java b/CICMMetadata/java/generated/MediaScanType.java deleted file mode 100644 index 3fb4213..0000000 --- a/CICMMetadata/java/generated/MediaScanType.java +++ /dev/null @@ -1,108 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para MediaScanType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="MediaScanType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="MediaScanElement">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="up"/>
- *               <enumeration value="down"/>
- *               <enumeration value="front"/>
- *               <enumeration value="back"/>
- *               <enumeration value="left"/>
- *               <enumeration value="right"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Scan" type="{}ScanType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "MediaScanType", propOrder = { - "mediaScanElement", - "scan" -}) -public class MediaScanType { - - @XmlElement(name = "MediaScanElement", required = true) - protected String mediaScanElement; - @XmlElement(name = "Scan", required = true) - protected ScanType scan; - - /** - * Obtiene el valor de la propiedad mediaScanElement. - * - * @return - * possible object is - * {@link String } - * - */ - public String getMediaScanElement() { - return mediaScanElement; - } - - /** - * Define el valor de la propiedad mediaScanElement. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setMediaScanElement(String value) { - this.mediaScanElement = value; - } - - /** - * Obtiene el valor de la propiedad scan. - * - * @return - * possible object is - * {@link ScanType } - * - */ - public ScanType getScan() { - return scan; - } - - /** - * Define el valor de la propiedad scan. - * - * @param value - * allowed object is - * {@link ScanType } - * - */ - public void setScan(ScanType value) { - this.scan = value; - } - -} diff --git a/CICMMetadata/java/generated/MultiMediaCardType.java b/CICMMetadata/java/generated/MultiMediaCardType.java deleted file mode 100644 index e5d73d5..0000000 --- a/CICMMetadata/java/generated/MultiMediaCardType.java +++ /dev/null @@ -1,155 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Contains MultiMediaCard device information - * - *

Clase Java para MultiMediaCardType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="MultiMediaCardType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="CID" type="{}DumpType"/>
- *         <element name="CSD" type="{}DumpType" minOccurs="0"/>
- *         <element name="ExtendedCSD" type="{}DumpType" minOccurs="0"/>
- *         <element name="OCR" type="{}DumpType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "MultiMediaCardType", propOrder = { - "cid", - "csd", - "extendedCSD", - "ocr" -}) -public class MultiMediaCardType { - - @XmlElement(name = "CID", required = true) - protected DumpType cid; - @XmlElement(name = "CSD") - protected DumpType csd; - @XmlElement(name = "ExtendedCSD") - protected DumpType extendedCSD; - @XmlElement(name = "OCR") - protected DumpType ocr; - - /** - * Obtiene el valor de la propiedad cid. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getCID() { - return cid; - } - - /** - * Define el valor de la propiedad cid. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setCID(DumpType value) { - this.cid = value; - } - - /** - * Obtiene el valor de la propiedad csd. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getCSD() { - return csd; - } - - /** - * Define el valor de la propiedad csd. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setCSD(DumpType value) { - this.csd = value; - } - - /** - * Obtiene el valor de la propiedad extendedCSD. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getExtendedCSD() { - return extendedCSD; - } - - /** - * Define el valor de la propiedad extendedCSD. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setExtendedCSD(DumpType value) { - this.extendedCSD = value; - } - - /** - * Obtiene el valor de la propiedad ocr. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getOCR() { - return ocr; - } - - /** - * Define el valor de la propiedad ocr. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setOCR(DumpType value) { - this.ocr = value; - } - -} diff --git a/CICMMetadata/java/generated/OCRType.java b/CICMMetadata/java/generated/OCRType.java deleted file mode 100644 index f98aabf..0000000 --- a/CICMMetadata/java/generated/OCRType.java +++ /dev/null @@ -1,153 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para OCRType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="OCRType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Author" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Software" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="SoftwareVersion" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Language" type="{}LanguagesType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "OCRType", propOrder = { - "author", - "software", - "softwareVersion", - "language" -}) -public class OCRType { - - @XmlElement(name = "Author", required = true) - protected String author; - @XmlElement(name = "Software", required = true) - protected String software; - @XmlElement(name = "SoftwareVersion", required = true) - protected String softwareVersion; - @XmlElement(name = "Language", required = true) - protected LanguagesType language; - - /** - * Obtiene el valor de la propiedad author. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAuthor() { - return author; - } - - /** - * Define el valor de la propiedad author. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAuthor(String value) { - this.author = value; - } - - /** - * Obtiene el valor de la propiedad software. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSoftware() { - return software; - } - - /** - * Define el valor de la propiedad software. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSoftware(String value) { - this.software = value; - } - - /** - * Obtiene el valor de la propiedad softwareVersion. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSoftwareVersion() { - return softwareVersion; - } - - /** - * Define el valor de la propiedad softwareVersion. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSoftwareVersion(String value) { - this.softwareVersion = value; - } - - /** - * Obtiene el valor de la propiedad language. - * - * @return - * possible object is - * {@link LanguagesType } - * - */ - public LanguagesType getLanguage() { - return language; - } - - /** - * Define el valor de la propiedad language. - * - * @param value - * allowed object is - * {@link LanguagesType } - * - */ - public void setLanguage(LanguagesType value) { - this.language = value; - } - -} diff --git a/CICMMetadata/java/generated/ObjectFactory.java b/CICMMetadata/java/generated/ObjectFactory.java deleted file mode 100644 index 3659c13..0000000 --- a/CICMMetadata/java/generated/ObjectFactory.java +++ /dev/null @@ -1,716 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElementDecl; -import javax.xml.bind.annotation.XmlRegistry; -import javax.xml.namespace.QName; - - -/** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the generated package. - *

An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. - * - */ -@XmlRegistry -public class ObjectFactory { - - private final static QName _CICMMetadata_QNAME = new QName("", "CICMMetadata"); - - /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: generated - * - */ - public ObjectFactory() { - } - - /** - * Create an instance of {@link CICMMetadataType } - * - */ - public CICMMetadataType createCICMMetadataType() { - return new CICMMetadataType(); - } - - /** - * Create an instance of {@link VideoTracksType } - * - */ - public VideoTracksType createVideoTracksType() { - return new VideoTracksType(); - } - - /** - * Create an instance of {@link CoverType } - * - */ - public CoverType createCoverType() { - return new CoverType(); - } - - /** - * Create an instance of {@link ExtentsType } - * - */ - public ExtentsType createExtentsType() { - return new ExtentsType(); - } - - /** - * Create an instance of {@link FileSystemInformationType } - * - */ - public FileSystemInformationType createFileSystemInformationType() { - return new FileSystemInformationType(); - } - - /** - * Create an instance of {@link SecuritySectorsType } - * - */ - public SecuritySectorsType createSecuritySectorsType() { - return new SecuritySectorsType(); - } - - /** - * Create an instance of {@link DumpHardwareType } - * - */ - public DumpHardwareType createDumpHardwareType() { - return new DumpHardwareType(); - } - - /** - * Create an instance of {@link ArchitecturesType } - * - */ - public ArchitecturesType createArchitecturesType() { - return new ArchitecturesType(); - } - - /** - * Create an instance of {@link FileSystemsType } - * - */ - public FileSystemsType createFileSystemsType() { - return new FileSystemsType(); - } - - /** - * Create an instance of {@link ChecksumType } - * - */ - public ChecksumType createChecksumType() { - return new ChecksumType(); - } - - /** - * Create an instance of {@link SoftwareType } - * - */ - public SoftwareType createSoftwareType() { - return new SoftwareType(); - } - - /** - * Create an instance of {@link ImageType } - * - */ - public ImageType createImageType() { - return new ImageType(); - } - - /** - * Create an instance of {@link SubtitleTracksType } - * - */ - public SubtitleTracksType createSubtitleTracksType() { - return new SubtitleTracksType(); - } - - /** - * Create an instance of {@link DirectoryType } - * - */ - public DirectoryType createDirectoryType() { - return new DirectoryType(); - } - - /** - * Create an instance of {@link TrackIndexesType } - * - */ - public TrackIndexesType createTrackIndexesType() { - return new TrackIndexesType(); - } - - /** - * Create an instance of {@link DumpHardwareArrayType } - * - */ - public DumpHardwareArrayType createDumpHardwareArrayType() { - return new DumpHardwareArrayType(); - } - - /** - * Create an instance of {@link SubChannelType } - * - */ - public SubChannelType createSubChannelType() { - return new SubChannelType(); - } - - /** - * Create an instance of {@link MediaScanType } - * - */ - public MediaScanType createMediaScanType() { - return new MediaScanType(); - } - - /** - * Create an instance of {@link SCSIType } - * - */ - public SCSIType createSCSIType() { - return new SCSIType(); - } - - /** - * Create an instance of {@link ScanProcessingType } - * - */ - public ScanProcessingType createScanProcessingType() { - return new ScanProcessingType(); - } - - /** - * Create an instance of {@link RecordingType } - * - */ - public RecordingType createRecordingType() { - return new RecordingType(); - } - - /** - * Create an instance of {@link LinearMediaType } - * - */ - public LinearMediaType createLinearMediaType() { - return new LinearMediaType(); - } - - /** - * Create an instance of {@link FilesystemContentsType } - * - */ - public FilesystemContentsType createFilesystemContentsType() { - return new FilesystemContentsType(); - } - - /** - * Create an instance of {@link RequiredOperatingSystemType } - * - */ - public RequiredOperatingSystemType createRequiredOperatingSystemType() { - return new RequiredOperatingSystemType(); - } - - /** - * Create an instance of {@link RequiredOperatingSystemsType } - * - */ - public RequiredOperatingSystemsType createRequiredOperatingSystemsType() { - return new RequiredOperatingSystemsType(); - } - - /** - * Create an instance of {@link SecureDigitalType } - * - */ - public SecureDigitalType createSecureDigitalType() { - return new SecureDigitalType(); - } - - /** - * Create an instance of {@link TapeInformationType } - * - */ - public TapeInformationType createTapeInformationType() { - return new TapeInformationType(); - } - - /** - * Create an instance of {@link TrackIndexType } - * - */ - public TrackIndexType createTrackIndexType() { - return new TrackIndexType(); - } - - /** - * Create an instance of {@link VariableBlockSizeType } - * - */ - public VariableBlockSizeType createVariableBlockSizeType() { - return new VariableBlockSizeType(); - } - - /** - * Create an instance of {@link BlockTrackType } - * - */ - public BlockTrackType createBlockTrackType() { - return new BlockTrackType(); - } - - /** - * Create an instance of {@link SystemsType } - * - */ - public SystemsType createSystemsType() { - return new SystemsType(); - } - - /** - * Create an instance of {@link TrackSequenceType } - * - */ - public TrackSequenceType createTrackSequenceType() { - return new TrackSequenceType(); - } - - /** - * Create an instance of {@link TapePartitionType } - * - */ - public TapePartitionType createTapePartitionType() { - return new TapePartitionType(); - } - - /** - * Create an instance of {@link PartitionType } - * - */ - public PartitionType createPartitionType() { - return new PartitionType(); - } - - /** - * Create an instance of {@link CaseScanType } - * - */ - public CaseScanType createCaseScanType() { - return new CaseScanType(); - } - - /** - * Create an instance of {@link TapeFileType } - * - */ - public TapeFileType createTapeFileType() { - return new TapeFileType(); - } - - /** - * Create an instance of {@link ScanType } - * - */ - public ScanType createScanType() { - return new ScanType(); - } - - /** - * Create an instance of {@link KeywordsType } - * - */ - public KeywordsType createKeywordsType() { - return new KeywordsType(); - } - - /** - * Create an instance of {@link BookType } - * - */ - public BookType createBookType() { - return new BookType(); - } - - /** - * Create an instance of {@link SubcategoriesType } - * - */ - public SubcategoriesType createSubcategoriesType() { - return new SubcategoriesType(); - } - - /** - * Create an instance of {@link CaseType } - * - */ - public CaseType createCaseType() { - return new CaseType(); - } - - /** - * Create an instance of {@link MagazineType } - * - */ - public MagazineType createMagazineType() { - return new MagazineType(); - } - - /** - * Create an instance of {@link DumpType } - * - */ - public DumpType createDumpType() { - return new DumpType(); - } - - /** - * Create an instance of {@link TrackFlagsType } - * - */ - public TrackFlagsType createTrackFlagsType() { - return new TrackFlagsType(); - } - - /** - * Create an instance of {@link LayersType } - * - */ - public LayersType createLayersType() { - return new LayersType(); - } - - /** - * Create an instance of {@link CategoriesType } - * - */ - public CategoriesType createCategoriesType() { - return new CategoriesType(); - } - - /** - * Create an instance of {@link BarcodeType } - * - */ - public BarcodeType createBarcodeType() { - return new BarcodeType(); - } - - /** - * Create an instance of {@link BorderType } - * - */ - public BorderType createBorderType() { - return new BorderType(); - } - - /** - * Create an instance of {@link ATAType } - * - */ - public ATAType createATAType() { - return new ATAType(); - } - - /** - * Create an instance of {@link LanguagesType } - * - */ - public LanguagesType createLanguagesType() { - return new LanguagesType(); - } - - /** - * Create an instance of {@link ChecksumsType } - * - */ - public ChecksumsType createChecksumsType() { - return new ChecksumsType(); - } - - /** - * Create an instance of {@link ScannerType } - * - */ - public ScannerType createScannerType() { - return new ScannerType(); - } - - /** - * Create an instance of {@link SequenceType } - * - */ - public SequenceType createSequenceType() { - return new SequenceType(); - } - - /** - * Create an instance of {@link EVPDType } - * - */ - public EVPDType createEVPDType() { - return new EVPDType(); - } - - /** - * Create an instance of {@link BlockSizeType } - * - */ - public BlockSizeType createBlockSizeType() { - return new BlockSizeType(); - } - - /** - * Create an instance of {@link OpticalDiscType } - * - */ - public OpticalDiscType createOpticalDiscType() { - return new OpticalDiscType(); - } - - /** - * Create an instance of {@link OCRType } - * - */ - public OCRType createOCRType() { - return new OCRType(); - } - - /** - * Create an instance of {@link ExtentType } - * - */ - public ExtentType createExtentType() { - return new ExtentType(); - } - - /** - * Create an instance of {@link ExtendedAttributeType } - * - */ - public ExtendedAttributeType createExtendedAttributeType() { - return new ExtendedAttributeType(); - } - - /** - * Create an instance of {@link XboxSecuritySectorsType } - * - */ - public XboxSecuritySectorsType createXboxSecuritySectorsType() { - return new XboxSecuritySectorsType(); - } - - /** - * Create an instance of {@link PCMCIAType } - * - */ - public PCMCIAType createPCMCIAType() { - return new PCMCIAType(); - } - - /** - * Create an instance of {@link ScansType } - * - */ - public ScansType createScansType() { - return new ScansType(); - } - - /** - * Create an instance of {@link PCIType } - * - */ - public PCIType createPCIType() { - return new PCIType(); - } - - /** - * Create an instance of {@link USBType } - * - */ - public USBType createUSBType() { - return new USBType(); - } - - /** - * Create an instance of {@link MultiMediaCardType } - * - */ - public MultiMediaCardType createMultiMediaCardType() { - return new MultiMediaCardType(); - } - - /** - * Create an instance of {@link UserManualType } - * - */ - public UserManualType createUserManualType() { - return new UserManualType(); - } - - /** - * Create an instance of {@link AdvertisementType } - * - */ - public AdvertisementType createAdvertisementType() { - return new AdvertisementType(); - } - - /** - * Create an instance of {@link BarcodesType } - * - */ - public BarcodesType createBarcodesType() { - return new BarcodesType(); - } - - /** - * Create an instance of {@link AudioMediaType } - * - */ - public AudioMediaType createAudioMediaType() { - return new AudioMediaType(); - } - - /** - * Create an instance of {@link ExtendedAttributesType } - * - */ - public ExtendedAttributesType createExtendedAttributesType() { - return new ExtendedAttributesType(); - } - - /** - * Create an instance of {@link CoordinatesType } - * - */ - public CoordinatesType createCoordinatesType() { - return new CoordinatesType(); - } - - /** - * Create an instance of {@link ContentsFileType } - * - */ - public ContentsFileType createContentsFileType() { - return new ContentsFileType(); - } - - /** - * Create an instance of {@link SectorsType } - * - */ - public SectorsType createSectorsType() { - return new SectorsType(); - } - - /** - * Create an instance of {@link AudioTracksType } - * - */ - public AudioTracksType createAudioTracksType() { - return new AudioTracksType(); - } - - /** - * Create an instance of {@link LayeredTextType } - * - */ - public LayeredTextType createLayeredTextType() { - return new LayeredTextType(); - } - - /** - * Create an instance of {@link BlockMediaType } - * - */ - public BlockMediaType createBlockMediaType() { - return new BlockMediaType(); - } - - /** - * Create an instance of {@link FileType } - * - */ - public FileType createFileType() { - return new FileType(); - } - - /** - * Create an instance of {@link DimensionsType } - * - */ - public DimensionsType createDimensionsType() { - return new DimensionsType(); - } - - /** - * Create an instance of {@link TrackType } - * - */ - public TrackType createTrackType() { - return new TrackType(); - } - - /** - * Create an instance of {@link FileSystemType } - * - */ - public FileSystemType createFileSystemType() { - return new FileSystemType(); - } - - /** - * Create an instance of {@link XboxType } - * - */ - public XboxType createXboxType() { - return new XboxType(); - } - - /** - * Create an instance of {@link PS3EncryptionType } - * - */ - public PS3EncryptionType createPS3EncryptionType() { - return new PS3EncryptionType(); - } - - /** - * Create an instance of {@link AudioBlockType } - * - */ - public AudioBlockType createAudioBlockType() { - return new AudioBlockType(); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link CICMMetadataType }{@code >}} - * - */ - @XmlElementDecl(namespace = "", name = "CICMMetadata") - public JAXBElement createCICMMetadata(CICMMetadataType value) { - return new JAXBElement(_CICMMetadata_QNAME, CICMMetadataType.class, null, value); - } - -} diff --git a/CICMMetadata/java/generated/OpticalDiscType.java b/CICMMetadata/java/generated/OpticalDiscType.java deleted file mode 100644 index 4084b01..0000000 --- a/CICMMetadata/java/generated/OpticalDiscType.java +++ /dev/null @@ -1,1406 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para OpticalDiscType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="OpticalDiscType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Sequence" type="{}SequenceType"/>
- *         <element name="Layers" type="{}LayersType" minOccurs="0"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="PartNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="SerialNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="RingCode" type="{}LayeredTextType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="MasteringSID" type="{}LayeredTextType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Toolstamp" type="{}LayeredTextType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="MouldSID" type="{}LayeredTextType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="MouldText" type="{}LayeredTextType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="DiscType" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="DiscSubType" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Offset" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
- *         <element name="Tracks" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" maxOccurs="unbounded"/>
- *         <element name="Sessions" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="CopyProtection" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Dimensions" type="{}DimensionsType"/>
- *         <element name="Case" type="{}CaseType" minOccurs="0"/>
- *         <element name="Scans" type="{}ScansType" minOccurs="0"/>
- *         <element name="PFI" type="{}DumpType" minOccurs="0"/>
- *         <element name="DMI" type="{}DumpType" minOccurs="0"/>
- *         <element name="CMI" type="{}DumpType" minOccurs="0"/>
- *         <element name="BCA" type="{}DumpType" minOccurs="0"/>
- *         <element name="ATIP" type="{}DumpType" minOccurs="0"/>
- *         <element name="ADIP" type="{}DumpType" minOccurs="0"/>
- *         <element name="PMA" type="{}DumpType" minOccurs="0"/>
- *         <element name="DDS" type="{}DumpType" minOccurs="0"/>
- *         <element name="SAI" type="{}DumpType" minOccurs="0"/>
- *         <element name="LastRMD" type="{}DumpType" minOccurs="0"/>
- *         <element name="PRI" type="{}DumpType" minOccurs="0"/>
- *         <element name="MediaID" type="{}DumpType" minOccurs="0"/>
- *         <element name="PFIR" type="{}DumpType" minOccurs="0"/>
- *         <element name="DCB" type="{}DumpType" minOccurs="0"/>
- *         <element name="DI" type="{}DumpType" minOccurs="0"/>
- *         <element name="PAC" type="{}DumpType" minOccurs="0"/>
- *         <element name="TOC" type="{}DumpType" minOccurs="0"/>
- *         <element name="LeadInCdText" type="{}DumpType" minOccurs="0"/>
- *         <element name="FirstTrackPregrap" type="{}BorderType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="LeadIn" type="{}BorderType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="LeadOut" type="{}BorderType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Xbox" type="{}XboxType" minOccurs="0"/>
- *         <element name="PS3Encryption" type="{}PS3EncryptionType" minOccurs="0"/>
- *         <element name="MediaCatalogueNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Track" type="{}TrackType" maxOccurs="unbounded"/>
- *         <element name="DumpHardwareArray" type="{}DumpHardwareArrayType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "OpticalDiscType", propOrder = { - "image", - "size", - "sequence", - "layers", - "checksums", - "partNumber", - "serialNumber", - "ringCode", - "masteringSID", - "toolstamp", - "mouldSID", - "mouldText", - "discType", - "discSubType", - "offset", - "tracks", - "sessions", - "copyProtection", - "dimensions", - "_case", - "scans", - "pfi", - "dmi", - "cmi", - "bca", - "atip", - "adip", - "pma", - "dds", - "sai", - "lastRMD", - "pri", - "mediaID", - "pfir", - "dcb", - "di", - "pac", - "toc", - "leadInCdText", - "firstTrackPregrap", - "leadIn", - "leadOut", - "xbox", - "ps3Encryption", - "mediaCatalogueNumber", - "track", - "dumpHardwareArray" -}) -public class OpticalDiscType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Sequence", required = true) - protected SequenceType sequence; - @XmlElement(name = "Layers") - protected LayersType layers; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "PartNumber") - protected String partNumber; - @XmlElement(name = "SerialNumber") - protected String serialNumber; - @XmlElement(name = "RingCode") - protected List ringCode; - @XmlElement(name = "MasteringSID") - protected List masteringSID; - @XmlElement(name = "Toolstamp") - protected List toolstamp; - @XmlElement(name = "MouldSID") - protected List mouldSID; - @XmlElement(name = "MouldText") - protected List mouldText; - @XmlElement(name = "DiscType", required = true) - protected String discType; - @XmlElement(name = "DiscSubType", required = true) - protected String discSubType; - @XmlElement(name = "Offset") - protected Integer offset; - @XmlElement(name = "Tracks", type = Long.class) - @XmlSchemaType(name = "unsignedInt") - protected List tracks; - @XmlElement(name = "Sessions") - @XmlSchemaType(name = "unsignedInt") - protected long sessions; - @XmlElement(name = "CopyProtection") - protected String copyProtection; - @XmlElement(name = "Dimensions", required = true) - protected DimensionsType dimensions; - @XmlElement(name = "Case") - protected CaseType _case; - @XmlElement(name = "Scans") - protected ScansType scans; - @XmlElement(name = "PFI") - protected DumpType pfi; - @XmlElement(name = "DMI") - protected DumpType dmi; - @XmlElement(name = "CMI") - protected DumpType cmi; - @XmlElement(name = "BCA") - protected DumpType bca; - @XmlElement(name = "ATIP") - protected DumpType atip; - @XmlElement(name = "ADIP") - protected DumpType adip; - @XmlElement(name = "PMA") - protected DumpType pma; - @XmlElement(name = "DDS") - protected DumpType dds; - @XmlElement(name = "SAI") - protected DumpType sai; - @XmlElement(name = "LastRMD") - protected DumpType lastRMD; - @XmlElement(name = "PRI") - protected DumpType pri; - @XmlElement(name = "MediaID") - protected DumpType mediaID; - @XmlElement(name = "PFIR") - protected DumpType pfir; - @XmlElement(name = "DCB") - protected DumpType dcb; - @XmlElement(name = "DI") - protected DumpType di; - @XmlElement(name = "PAC") - protected DumpType pac; - @XmlElement(name = "TOC") - protected DumpType toc; - @XmlElement(name = "LeadInCdText") - protected DumpType leadInCdText; - @XmlElement(name = "FirstTrackPregrap") - protected List firstTrackPregrap; - @XmlElement(name = "LeadIn") - protected List leadIn; - @XmlElement(name = "LeadOut") - protected List leadOut; - @XmlElement(name = "Xbox") - protected XboxType xbox; - @XmlElement(name = "PS3Encryption") - protected PS3EncryptionType ps3Encryption; - @XmlElement(name = "MediaCatalogueNumber") - protected String mediaCatalogueNumber; - @XmlElement(name = "Track", required = true) - protected List track; - @XmlElement(name = "DumpHardwareArray") - protected DumpHardwareArrayType dumpHardwareArray; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad sequence. - * - * @return - * possible object is - * {@link SequenceType } - * - */ - public SequenceType getSequence() { - return sequence; - } - - /** - * Define el valor de la propiedad sequence. - * - * @param value - * allowed object is - * {@link SequenceType } - * - */ - public void setSequence(SequenceType value) { - this.sequence = value; - } - - /** - * Obtiene el valor de la propiedad layers. - * - * @return - * possible object is - * {@link LayersType } - * - */ - public LayersType getLayers() { - return layers; - } - - /** - * Define el valor de la propiedad layers. - * - * @param value - * allowed object is - * {@link LayersType } - * - */ - public void setLayers(LayersType value) { - this.layers = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad partNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPartNumber() { - return partNumber; - } - - /** - * Define el valor de la propiedad partNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPartNumber(String value) { - this.partNumber = value; - } - - /** - * Obtiene el valor de la propiedad serialNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerialNumber() { - return serialNumber; - } - - /** - * Define el valor de la propiedad serialNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerialNumber(String value) { - this.serialNumber = value; - } - - /** - * Gets the value of the ringCode property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the ringCode property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getRingCode().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LayeredTextType } - * - * - */ - public List getRingCode() { - if (ringCode == null) { - ringCode = new ArrayList(); - } - return this.ringCode; - } - - /** - * Gets the value of the masteringSID property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the masteringSID property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMasteringSID().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LayeredTextType } - * - * - */ - public List getMasteringSID() { - if (masteringSID == null) { - masteringSID = new ArrayList(); - } - return this.masteringSID; - } - - /** - * Gets the value of the toolstamp property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the toolstamp property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getToolstamp().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LayeredTextType } - * - * - */ - public List getToolstamp() { - if (toolstamp == null) { - toolstamp = new ArrayList(); - } - return this.toolstamp; - } - - /** - * Gets the value of the mouldSID property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mouldSID property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMouldSID().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LayeredTextType } - * - * - */ - public List getMouldSID() { - if (mouldSID == null) { - mouldSID = new ArrayList(); - } - return this.mouldSID; - } - - /** - * Gets the value of the mouldText property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mouldText property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMouldText().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link LayeredTextType } - * - * - */ - public List getMouldText() { - if (mouldText == null) { - mouldText = new ArrayList(); - } - return this.mouldText; - } - - /** - * Obtiene el valor de la propiedad discType. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDiscType() { - return discType; - } - - /** - * Define el valor de la propiedad discType. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDiscType(String value) { - this.discType = value; - } - - /** - * Obtiene el valor de la propiedad discSubType. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDiscSubType() { - return discSubType; - } - - /** - * Define el valor de la propiedad discSubType. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDiscSubType(String value) { - this.discSubType = value; - } - - /** - * Obtiene el valor de la propiedad offset. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getOffset() { - return offset; - } - - /** - * Define el valor de la propiedad offset. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setOffset(Integer value) { - this.offset = value; - } - - /** - * Gets the value of the tracks property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the tracks property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getTracks().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link Long } - * - * - */ - public List getTracks() { - if (tracks == null) { - tracks = new ArrayList(); - } - return this.tracks; - } - - /** - * Obtiene el valor de la propiedad sessions. - * - */ - public long getSessions() { - return sessions; - } - - /** - * Define el valor de la propiedad sessions. - * - */ - public void setSessions(long value) { - this.sessions = value; - } - - /** - * Obtiene el valor de la propiedad copyProtection. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCopyProtection() { - return copyProtection; - } - - /** - * Define el valor de la propiedad copyProtection. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCopyProtection(String value) { - this.copyProtection = value; - } - - /** - * Obtiene el valor de la propiedad dimensions. - * - * @return - * possible object is - * {@link DimensionsType } - * - */ - public DimensionsType getDimensions() { - return dimensions; - } - - /** - * Define el valor de la propiedad dimensions. - * - * @param value - * allowed object is - * {@link DimensionsType } - * - */ - public void setDimensions(DimensionsType value) { - this.dimensions = value; - } - - /** - * Obtiene el valor de la propiedad case. - * - * @return - * possible object is - * {@link CaseType } - * - */ - public CaseType getCase() { - return _case; - } - - /** - * Define el valor de la propiedad case. - * - * @param value - * allowed object is - * {@link CaseType } - * - */ - public void setCase(CaseType value) { - this._case = value; - } - - /** - * Obtiene el valor de la propiedad scans. - * - * @return - * possible object is - * {@link ScansType } - * - */ - public ScansType getScans() { - return scans; - } - - /** - * Define el valor de la propiedad scans. - * - * @param value - * allowed object is - * {@link ScansType } - * - */ - public void setScans(ScansType value) { - this.scans = value; - } - - /** - * Obtiene el valor de la propiedad pfi. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getPFI() { - return pfi; - } - - /** - * Define el valor de la propiedad pfi. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setPFI(DumpType value) { - this.pfi = value; - } - - /** - * Obtiene el valor de la propiedad dmi. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getDMI() { - return dmi; - } - - /** - * Define el valor de la propiedad dmi. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setDMI(DumpType value) { - this.dmi = value; - } - - /** - * Obtiene el valor de la propiedad cmi. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getCMI() { - return cmi; - } - - /** - * Define el valor de la propiedad cmi. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setCMI(DumpType value) { - this.cmi = value; - } - - /** - * Obtiene el valor de la propiedad bca. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getBCA() { - return bca; - } - - /** - * Define el valor de la propiedad bca. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setBCA(DumpType value) { - this.bca = value; - } - - /** - * Obtiene el valor de la propiedad atip. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getATIP() { - return atip; - } - - /** - * Define el valor de la propiedad atip. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setATIP(DumpType value) { - this.atip = value; - } - - /** - * Obtiene el valor de la propiedad adip. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getADIP() { - return adip; - } - - /** - * Define el valor de la propiedad adip. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setADIP(DumpType value) { - this.adip = value; - } - - /** - * Obtiene el valor de la propiedad pma. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getPMA() { - return pma; - } - - /** - * Define el valor de la propiedad pma. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setPMA(DumpType value) { - this.pma = value; - } - - /** - * Obtiene el valor de la propiedad dds. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getDDS() { - return dds; - } - - /** - * Define el valor de la propiedad dds. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setDDS(DumpType value) { - this.dds = value; - } - - /** - * Obtiene el valor de la propiedad sai. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getSAI() { - return sai; - } - - /** - * Define el valor de la propiedad sai. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setSAI(DumpType value) { - this.sai = value; - } - - /** - * Obtiene el valor de la propiedad lastRMD. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getLastRMD() { - return lastRMD; - } - - /** - * Define el valor de la propiedad lastRMD. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setLastRMD(DumpType value) { - this.lastRMD = value; - } - - /** - * Obtiene el valor de la propiedad pri. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getPRI() { - return pri; - } - - /** - * Define el valor de la propiedad pri. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setPRI(DumpType value) { - this.pri = value; - } - - /** - * Obtiene el valor de la propiedad mediaID. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getMediaID() { - return mediaID; - } - - /** - * Define el valor de la propiedad mediaID. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setMediaID(DumpType value) { - this.mediaID = value; - } - - /** - * Obtiene el valor de la propiedad pfir. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getPFIR() { - return pfir; - } - - /** - * Define el valor de la propiedad pfir. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setPFIR(DumpType value) { - this.pfir = value; - } - - /** - * Obtiene el valor de la propiedad dcb. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getDCB() { - return dcb; - } - - /** - * Define el valor de la propiedad dcb. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setDCB(DumpType value) { - this.dcb = value; - } - - /** - * Obtiene el valor de la propiedad di. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getDI() { - return di; - } - - /** - * Define el valor de la propiedad di. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setDI(DumpType value) { - this.di = value; - } - - /** - * Obtiene el valor de la propiedad pac. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getPAC() { - return pac; - } - - /** - * Define el valor de la propiedad pac. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setPAC(DumpType value) { - this.pac = value; - } - - /** - * Obtiene el valor de la propiedad toc. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getTOC() { - return toc; - } - - /** - * Define el valor de la propiedad toc. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setTOC(DumpType value) { - this.toc = value; - } - - /** - * Obtiene el valor de la propiedad leadInCdText. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getLeadInCdText() { - return leadInCdText; - } - - /** - * Define el valor de la propiedad leadInCdText. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setLeadInCdText(DumpType value) { - this.leadInCdText = value; - } - - /** - * Gets the value of the firstTrackPregrap property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the firstTrackPregrap property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getFirstTrackPregrap().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link BorderType } - * - * - */ - public List getFirstTrackPregrap() { - if (firstTrackPregrap == null) { - firstTrackPregrap = new ArrayList(); - } - return this.firstTrackPregrap; - } - - /** - * Gets the value of the leadIn property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the leadIn property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLeadIn().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link BorderType } - * - * - */ - public List getLeadIn() { - if (leadIn == null) { - leadIn = new ArrayList(); - } - return this.leadIn; - } - - /** - * Gets the value of the leadOut property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the leadOut property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getLeadOut().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link BorderType } - * - * - */ - public List getLeadOut() { - if (leadOut == null) { - leadOut = new ArrayList(); - } - return this.leadOut; - } - - /** - * Obtiene el valor de la propiedad xbox. - * - * @return - * possible object is - * {@link XboxType } - * - */ - public XboxType getXbox() { - return xbox; - } - - /** - * Define el valor de la propiedad xbox. - * - * @param value - * allowed object is - * {@link XboxType } - * - */ - public void setXbox(XboxType value) { - this.xbox = value; - } - - /** - * Obtiene el valor de la propiedad ps3Encryption. - * - * @return - * possible object is - * {@link PS3EncryptionType } - * - */ - public PS3EncryptionType getPS3Encryption() { - return ps3Encryption; - } - - /** - * Define el valor de la propiedad ps3Encryption. - * - * @param value - * allowed object is - * {@link PS3EncryptionType } - * - */ - public void setPS3Encryption(PS3EncryptionType value) { - this.ps3Encryption = value; - } - - /** - * Obtiene el valor de la propiedad mediaCatalogueNumber. - * - * @return - * possible object is - * {@link String } - * - */ - public String getMediaCatalogueNumber() { - return mediaCatalogueNumber; - } - - /** - * Define el valor de la propiedad mediaCatalogueNumber. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setMediaCatalogueNumber(String value) { - this.mediaCatalogueNumber = value; - } - - /** - * Gets the value of the track property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the track property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getTrack().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link TrackType } - * - * - */ - public List getTrack() { - if (track == null) { - track = new ArrayList(); - } - return this.track; - } - - /** - * Obtiene el valor de la propiedad dumpHardwareArray. - * - * @return - * possible object is - * {@link DumpHardwareArrayType } - * - */ - public DumpHardwareArrayType getDumpHardwareArray() { - return dumpHardwareArray; - } - - /** - * Define el valor de la propiedad dumpHardwareArray. - * - * @param value - * allowed object is - * {@link DumpHardwareArrayType } - * - */ - public void setDumpHardwareArray(DumpHardwareArrayType value) { - this.dumpHardwareArray = value; - } - -} diff --git a/CICMMetadata/java/generated/PCIType.java b/CICMMetadata/java/generated/PCIType.java deleted file mode 100644 index c106305..0000000 --- a/CICMMetadata/java/generated/PCIType.java +++ /dev/null @@ -1,153 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Contains PCI/PCI-X/PCIe card information - * - *

Clase Java para PCIType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="PCIType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="VendorID">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedShort">
- *               <minInclusive value="1"/>
- *               <maxInclusive value="65534"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="DeviceID">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedShort">
- *               <minInclusive value="1"/>
- *               <maxInclusive value="65534"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Configuration" type="{}DumpType" minOccurs="0"/>
- *         <element name="ExpansionROM" type="{}LinearMediaType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "PCIType", propOrder = { - "vendorID", - "deviceID", - "configuration", - "expansionROM" -}) -public class PCIType { - - @XmlElement(name = "VendorID") - protected int vendorID; - @XmlElement(name = "DeviceID") - protected int deviceID; - @XmlElement(name = "Configuration") - protected DumpType configuration; - @XmlElement(name = "ExpansionROM") - protected LinearMediaType expansionROM; - - /** - * Obtiene el valor de la propiedad vendorID. - * - */ - public int getVendorID() { - return vendorID; - } - - /** - * Define el valor de la propiedad vendorID. - * - */ - public void setVendorID(int value) { - this.vendorID = value; - } - - /** - * Obtiene el valor de la propiedad deviceID. - * - */ - public int getDeviceID() { - return deviceID; - } - - /** - * Define el valor de la propiedad deviceID. - * - */ - public void setDeviceID(int value) { - this.deviceID = value; - } - - /** - * Obtiene el valor de la propiedad configuration. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getConfiguration() { - return configuration; - } - - /** - * Define el valor de la propiedad configuration. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setConfiguration(DumpType value) { - this.configuration = value; - } - - /** - * Obtiene el valor de la propiedad expansionROM. - * - * @return - * possible object is - * {@link LinearMediaType } - * - */ - public LinearMediaType getExpansionROM() { - return expansionROM; - } - - /** - * Define el valor de la propiedad expansionROM. - * - * @param value - * allowed object is - * {@link LinearMediaType } - * - */ - public void setExpansionROM(LinearMediaType value) { - this.expansionROM = value; - } - -} diff --git a/CICMMetadata/java/generated/PCMCIAType.java b/CICMMetadata/java/generated/PCMCIAType.java deleted file mode 100644 index 0b40c6b..0000000 --- a/CICMMetadata/java/generated/PCMCIAType.java +++ /dev/null @@ -1,249 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Contains PCMCIA card information - * - *

Clase Java para PCMCIAType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="PCMCIAType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="CIS" type="{}DumpType"/>
- *         <element name="Compliance" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="ManufacturerCode" type="{http://www.w3.org/2001/XMLSchema}unsignedShort" minOccurs="0"/>
- *         <element name="CardCode" type="{http://www.w3.org/2001/XMLSchema}unsignedShort" minOccurs="0"/>
- *         <element name="Manufacturer" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="ProductName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="AdditionalInformation" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "PCMCIAType", propOrder = { - "cis", - "compliance", - "manufacturerCode", - "cardCode", - "manufacturer", - "productName", - "additionalInformation" -}) -public class PCMCIAType { - - @XmlElement(name = "CIS", required = true) - protected DumpType cis; - @XmlElement(name = "Compliance") - protected String compliance; - @XmlElement(name = "ManufacturerCode") - @XmlSchemaType(name = "unsignedShort") - protected Integer manufacturerCode; - @XmlElement(name = "CardCode") - @XmlSchemaType(name = "unsignedShort") - protected Integer cardCode; - @XmlElement(name = "Manufacturer") - protected String manufacturer; - @XmlElement(name = "ProductName") - protected String productName; - @XmlElement(name = "AdditionalInformation") - protected List additionalInformation; - - /** - * Obtiene el valor de la propiedad cis. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getCIS() { - return cis; - } - - /** - * Define el valor de la propiedad cis. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setCIS(DumpType value) { - this.cis = value; - } - - /** - * Obtiene el valor de la propiedad compliance. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCompliance() { - return compliance; - } - - /** - * Define el valor de la propiedad compliance. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCompliance(String value) { - this.compliance = value; - } - - /** - * Obtiene el valor de la propiedad manufacturerCode. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getManufacturerCode() { - return manufacturerCode; - } - - /** - * Define el valor de la propiedad manufacturerCode. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setManufacturerCode(Integer value) { - this.manufacturerCode = value; - } - - /** - * Obtiene el valor de la propiedad cardCode. - * - * @return - * possible object is - * {@link Integer } - * - */ - public Integer getCardCode() { - return cardCode; - } - - /** - * Define el valor de la propiedad cardCode. - * - * @param value - * allowed object is - * {@link Integer } - * - */ - public void setCardCode(Integer value) { - this.cardCode = value; - } - - /** - * Obtiene el valor de la propiedad manufacturer. - * - * @return - * possible object is - * {@link String } - * - */ - public String getManufacturer() { - return manufacturer; - } - - /** - * Define el valor de la propiedad manufacturer. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setManufacturer(String value) { - this.manufacturer = value; - } - - /** - * Obtiene el valor de la propiedad productName. - * - * @return - * possible object is - * {@link String } - * - */ - public String getProductName() { - return productName; - } - - /** - * Define el valor de la propiedad productName. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setProductName(String value) { - this.productName = value; - } - - /** - * Gets the value of the additionalInformation property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the additionalInformation property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getAdditionalInformation().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getAdditionalInformation() { - if (additionalInformation == null) { - additionalInformation = new ArrayList(); - } - return this.additionalInformation; - } - -} diff --git a/CICMMetadata/java/generated/PS3EncryptionType.java b/CICMMetadata/java/generated/PS3EncryptionType.java deleted file mode 100644 index 22c10cf..0000000 --- a/CICMMetadata/java/generated/PS3EncryptionType.java +++ /dev/null @@ -1,97 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para PS3EncryptionType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="PS3EncryptionType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Key" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Serial" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "PS3EncryptionType", propOrder = { - "key", - "serial" -}) -public class PS3EncryptionType { - - @XmlElement(name = "Key", required = true) - protected String key; - @XmlElement(name = "Serial", required = true) - protected String serial; - - /** - * Obtiene el valor de la propiedad key. - * - * @return - * possible object is - * {@link String } - * - */ - public String getKey() { - return key; - } - - /** - * Define el valor de la propiedad key. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setKey(String value) { - this.key = value; - } - - /** - * Obtiene el valor de la propiedad serial. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerial() { - return serial; - } - - /** - * Define el valor de la propiedad serial. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerial(String value) { - this.serial = value; - } - -} diff --git a/CICMMetadata/java/generated/PartitionType.java b/CICMMetadata/java/generated/PartitionType.java deleted file mode 100644 index a876b9e..0000000 --- a/CICMMetadata/java/generated/PartitionType.java +++ /dev/null @@ -1,239 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para PartitionType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="PartitionType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Sequence">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
- *               <minInclusive value="1"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Type" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="StartSector" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="EndSector" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Description" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="FileSystems" type="{}FileSystemsType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "PartitionType", propOrder = { - "sequence", - "name", - "type", - "startSector", - "endSector", - "description", - "fileSystems" -}) -public class PartitionType { - - @XmlElement(name = "Sequence") - protected long sequence; - @XmlElement(name = "Name") - protected String name; - @XmlElement(name = "Type") - protected String type; - @XmlElement(name = "StartSector", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger startSector; - @XmlElement(name = "EndSector", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger endSector; - @XmlElement(name = "Description") - protected String description; - @XmlElement(name = "FileSystems", required = true) - protected FileSystemsType fileSystems; - - /** - * Obtiene el valor de la propiedad sequence. - * - */ - public long getSequence() { - return sequence; - } - - /** - * Define el valor de la propiedad sequence. - * - */ - public void setSequence(long value) { - this.sequence = value; - } - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Obtiene el valor de la propiedad type. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Define el valor de la propiedad type. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Obtiene el valor de la propiedad startSector. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getStartSector() { - return startSector; - } - - /** - * Define el valor de la propiedad startSector. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setStartSector(BigInteger value) { - this.startSector = value; - } - - /** - * Obtiene el valor de la propiedad endSector. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEndSector() { - return endSector; - } - - /** - * Define el valor de la propiedad endSector. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEndSector(BigInteger value) { - this.endSector = value; - } - - /** - * Obtiene el valor de la propiedad description. - * - * @return - * possible object is - * {@link String } - * - */ - public String getDescription() { - return description; - } - - /** - * Define el valor de la propiedad description. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setDescription(String value) { - this.description = value; - } - - /** - * Obtiene el valor de la propiedad fileSystems. - * - * @return - * possible object is - * {@link FileSystemsType } - * - */ - public FileSystemsType getFileSystems() { - return fileSystems; - } - - /** - * Define el valor de la propiedad fileSystems. - * - * @param value - * allowed object is - * {@link FileSystemsType } - * - */ - public void setFileSystems(FileSystemsType value) { - this.fileSystems = value; - } - -} diff --git a/CICMMetadata/java/generated/RecordingType.java b/CICMMetadata/java/generated/RecordingType.java deleted file mode 100644 index 1267e5d..0000000 --- a/CICMMetadata/java/generated/RecordingType.java +++ /dev/null @@ -1,292 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.datatype.XMLGregorianCalendar; - - -/** - *

Clase Java para RecordingType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="RecordingType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Broadcaster" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="BroadcastPlatform" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="SourceFormat">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="ITU-A"/>
- *               <enumeration value="ITU-B"/>
- *               <enumeration value="ITU-C"/>
- *               <enumeration value="ITU-D"/>
- *               <enumeration value="ITU-E"/>
- *               <enumeration value="ITU-F"/>
- *               <enumeration value="ITU-G"/>
- *               <enumeration value="ITU-H"/>
- *               <enumeration value="ITU-I"/>
- *               <enumeration value="ITU-J"/>
- *               <enumeration value="ITU-K"/>
- *               <enumeration value="ITU-L"/>
- *               <enumeration value="ITU-M"/>
- *               <enumeration value="ITU-N"/>
- *               <enumeration value="PAL-B"/>
- *               <enumeration value="SECAM-B"/>
- *               <enumeration value="PAL-D"/>
- *               <enumeration value="SECAM-D"/>
- *               <enumeration value="PAL-G"/>
- *               <enumeration value="SECAM-G"/>
- *               <enumeration value="PAL-H"/>
- *               <enumeration value="PAL-I"/>
- *               <enumeration value="PAL-K"/>
- *               <enumeration value="SECAM-K"/>
- *               <enumeration value="NTSC-M"/>
- *               <enumeration value="PAL-N"/>
- *               <enumeration value="PAL-M"/>
- *               <enumeration value="SECAM-M"/>
- *               <enumeration value="MUSE"/>
- *               <enumeration value="PALplus"/>
- *               <enumeration value="FM"/>
- *               <enumeration value="AM"/>
- *               <enumeration value="COFDM"/>
- *               <enumeration value="CAM-D"/>
- *               <enumeration value="DAB"/>
- *               <enumeration value="DAB+"/>
- *               <enumeration value="DRM"/>
- *               <enumeration value="DRM+"/>
- *               <enumeration value="FMeXtra"/>
- *               <enumeration value="ATSC"/>
- *               <enumeration value="ATSC2"/>
- *               <enumeration value="ATSC3"/>
- *               <enumeration value="ATSC-M/H"/>
- *               <enumeration value="DVB-T"/>
- *               <enumeration value="DVB-T2"/>
- *               <enumeration value="DVB-S"/>
- *               <enumeration value="DVB-S2"/>
- *               <enumeration value="DVB-S2X"/>
- *               <enumeration value="DVB-C"/>
- *               <enumeration value="DVB-C2"/>
- *               <enumeration value="DVB-H"/>
- *               <enumeration value="DVB-NGH"/>
- *               <enumeration value="DVB-SH"/>
- *               <enumeration value="ISDB-T"/>
- *               <enumeration value="ISDB-Tb"/>
- *               <enumeration value="ISDB-S"/>
- *               <enumeration value="ISDB-C"/>
- *               <enumeration value="1seg"/>
- *               <enumeration value="DTMB"/>
- *               <enumeration value="CCMB"/>
- *               <enumeration value="T-DMB"/>
- *               <enumeration value="S-DMB"/>
- *               <enumeration value="IPTV"/>
- *               <enumeration value="DVB-MT"/>
- *               <enumeration value="DVB-MC"/>
- *               <enumeration value="DVB-MS"/>
- *               <enumeration value="ADR"/>
- *               <enumeration value="SDR"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Timestamp" type="{http://www.w3.org/2001/XMLSchema}dateTime"/>
- *         <element name="Software" type="{}SoftwareType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="Coordinates" type="{}CoordinatesType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RecordingType", propOrder = { - "broadcaster", - "broadcastPlatform", - "sourceFormat", - "timestamp", - "software", - "coordinates" -}) -public class RecordingType { - - @XmlElement(name = "Broadcaster") - protected String broadcaster; - @XmlElement(name = "BroadcastPlatform") - protected String broadcastPlatform; - @XmlElement(name = "SourceFormat", required = true) - protected String sourceFormat; - @XmlElement(name = "Timestamp", required = true) - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar timestamp; - @XmlElement(name = "Software") - protected List software; - @XmlElement(name = "Coordinates") - protected CoordinatesType coordinates; - - /** - * Obtiene el valor de la propiedad broadcaster. - * - * @return - * possible object is - * {@link String } - * - */ - public String getBroadcaster() { - return broadcaster; - } - - /** - * Define el valor de la propiedad broadcaster. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setBroadcaster(String value) { - this.broadcaster = value; - } - - /** - * Obtiene el valor de la propiedad broadcastPlatform. - * - * @return - * possible object is - * {@link String } - * - */ - public String getBroadcastPlatform() { - return broadcastPlatform; - } - - /** - * Define el valor de la propiedad broadcastPlatform. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setBroadcastPlatform(String value) { - this.broadcastPlatform = value; - } - - /** - * Obtiene el valor de la propiedad sourceFormat. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSourceFormat() { - return sourceFormat; - } - - /** - * Define el valor de la propiedad sourceFormat. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSourceFormat(String value) { - this.sourceFormat = value; - } - - /** - * Obtiene el valor de la propiedad timestamp. - * - * @return - * possible object is - * {@link XMLGregorianCalendar } - * - */ - public XMLGregorianCalendar getTimestamp() { - return timestamp; - } - - /** - * Define el valor de la propiedad timestamp. - * - * @param value - * allowed object is - * {@link XMLGregorianCalendar } - * - */ - public void setTimestamp(XMLGregorianCalendar value) { - this.timestamp = value; - } - - /** - * Gets the value of the software property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the software property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSoftware().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link SoftwareType } - * - * - */ - public List getSoftware() { - if (software == null) { - software = new ArrayList(); - } - return this.software; - } - - /** - * Obtiene el valor de la propiedad coordinates. - * - * @return - * possible object is - * {@link CoordinatesType } - * - */ - public CoordinatesType getCoordinates() { - return coordinates; - } - - /** - * Define el valor de la propiedad coordinates. - * - * @param value - * allowed object is - * {@link CoordinatesType } - * - */ - public void setCoordinates(CoordinatesType value) { - this.coordinates = value; - } - -} diff --git a/CICMMetadata/java/generated/RequiredOperatingSystemType.java b/CICMMetadata/java/generated/RequiredOperatingSystemType.java deleted file mode 100644 index 7f381d9..0000000 --- a/CICMMetadata/java/generated/RequiredOperatingSystemType.java +++ /dev/null @@ -1,104 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para RequiredOperatingSystemType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="RequiredOperatingSystemType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Version" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequiredOperatingSystemType", propOrder = { - "name", - "version" -}) -public class RequiredOperatingSystemType { - - @XmlElement(name = "Name", required = true) - protected String name; - @XmlElement(name = "Version", required = true) - protected List version; - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Gets the value of the version property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the version property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getVersion().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getVersion() { - if (version == null) { - version = new ArrayList(); - } - return this.version; - } - -} diff --git a/CICMMetadata/java/generated/RequiredOperatingSystemsType.java b/CICMMetadata/java/generated/RequiredOperatingSystemsType.java deleted file mode 100644 index 7a355e6..0000000 --- a/CICMMetadata/java/generated/RequiredOperatingSystemsType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para RequiredOperatingSystemsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="RequiredOperatingSystemsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="RequiredOperatingSystem" type="{}RequiredOperatingSystemType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequiredOperatingSystemsType", propOrder = { - "requiredOperatingSystem" -}) -public class RequiredOperatingSystemsType { - - @XmlElement(name = "RequiredOperatingSystem", required = true) - protected List requiredOperatingSystem; - - /** - * Gets the value of the requiredOperatingSystem property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the requiredOperatingSystem property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getRequiredOperatingSystem().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link RequiredOperatingSystemType } - * - * - */ - public List getRequiredOperatingSystem() { - if (requiredOperatingSystem == null) { - requiredOperatingSystem = new ArrayList(); - } - return this.requiredOperatingSystem; - } - -} diff --git a/CICMMetadata/java/generated/SCSIType.java b/CICMMetadata/java/generated/SCSIType.java deleted file mode 100644 index 6b588a4..0000000 --- a/CICMMetadata/java/generated/SCSIType.java +++ /dev/null @@ -1,190 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Contains SCSI device information - * - *

Clase Java para SCSIType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SCSIType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Inquiry" type="{}DumpType"/>
- *         <element name="EVPD" type="{}EVPDType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="ModeSense" type="{}DumpType" minOccurs="0"/>
- *         <element name="ModeSense10" type="{}DumpType" minOccurs="0"/>
- *         <element name="LogSense" type="{}DumpType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SCSIType", propOrder = { - "inquiry", - "evpd", - "modeSense", - "modeSense10", - "logSense" -}) -public class SCSIType { - - @XmlElement(name = "Inquiry", required = true) - protected DumpType inquiry; - @XmlElement(name = "EVPD") - protected List evpd; - @XmlElement(name = "ModeSense") - protected DumpType modeSense; - @XmlElement(name = "ModeSense10") - protected DumpType modeSense10; - @XmlElement(name = "LogSense") - protected DumpType logSense; - - /** - * Obtiene el valor de la propiedad inquiry. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getInquiry() { - return inquiry; - } - - /** - * Define el valor de la propiedad inquiry. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setInquiry(DumpType value) { - this.inquiry = value; - } - - /** - * Gets the value of the evpd property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the evpd property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getEVPD().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link EVPDType } - * - * - */ - public List getEVPD() { - if (evpd == null) { - evpd = new ArrayList(); - } - return this.evpd; - } - - /** - * Obtiene el valor de la propiedad modeSense. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getModeSense() { - return modeSense; - } - - /** - * Define el valor de la propiedad modeSense. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setModeSense(DumpType value) { - this.modeSense = value; - } - - /** - * Obtiene el valor de la propiedad modeSense10. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getModeSense10() { - return modeSense10; - } - - /** - * Define el valor de la propiedad modeSense10. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setModeSense10(DumpType value) { - this.modeSense10 = value; - } - - /** - * Obtiene el valor de la propiedad logSense. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getLogSense() { - return logSense; - } - - /** - * Define el valor de la propiedad logSense. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setLogSense(DumpType value) { - this.logSense = value; - } - -} diff --git a/CICMMetadata/java/generated/ScanProcessingType.java b/CICMMetadata/java/generated/ScanProcessingType.java deleted file mode 100644 index e0f1d8f..0000000 --- a/CICMMetadata/java/generated/ScanProcessingType.java +++ /dev/null @@ -1,128 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Information about any scan processing done - * - * - *

Clase Java para ScanProcessingType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ScanProcessingType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Author" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Software" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="SoftwareVersion" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ScanProcessingType", propOrder = { - "author", - "software", - "softwareVersion" -}) -public class ScanProcessingType { - - @XmlElement(name = "Author", required = true) - protected String author; - @XmlElement(name = "Software", required = true) - protected String software; - @XmlElement(name = "SoftwareVersion", required = true) - protected String softwareVersion; - - /** - * Obtiene el valor de la propiedad author. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAuthor() { - return author; - } - - /** - * Define el valor de la propiedad author. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAuthor(String value) { - this.author = value; - } - - /** - * Obtiene el valor de la propiedad software. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSoftware() { - return software; - } - - /** - * Define el valor de la propiedad software. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSoftware(String value) { - this.software = value; - } - - /** - * Obtiene el valor de la propiedad softwareVersion. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSoftwareVersion() { - return softwareVersion; - } - - /** - * Define el valor de la propiedad softwareVersion. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSoftwareVersion(String value) { - this.softwareVersion = value; - } - -} diff --git a/CICMMetadata/java/generated/ScanType.java b/CICMMetadata/java/generated/ScanType.java deleted file mode 100644 index c523ca2..0000000 --- a/CICMMetadata/java/generated/ScanType.java +++ /dev/null @@ -1,198 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para ScanType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ScanType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="File" type="{}FileType"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="Scanner" type="{}ScannerType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="ScanProcessing" type="{}ScanProcessingType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="OCR" type="{}OCRType" maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ScanType", propOrder = { - "file", - "checksums", - "scanner", - "scanProcessing", - "ocr" -}) -public class ScanType { - - @XmlElement(name = "File", required = true) - protected FileType file; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "Scanner") - protected List scanner; - @XmlElement(name = "ScanProcessing") - protected List scanProcessing; - @XmlElement(name = "OCR") - protected List ocr; - - /** - * Obtiene el valor de la propiedad file. - * - * @return - * possible object is - * {@link FileType } - * - */ - public FileType getFile() { - return file; - } - - /** - * Define el valor de la propiedad file. - * - * @param value - * allowed object is - * {@link FileType } - * - */ - public void setFile(FileType value) { - this.file = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Gets the value of the scanner property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the scanner property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getScanner().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ScannerType } - * - * - */ - public List getScanner() { - if (scanner == null) { - scanner = new ArrayList(); - } - return this.scanner; - } - - /** - * Gets the value of the scanProcessing property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the scanProcessing property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getScanProcessing().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link ScanProcessingType } - * - * - */ - public List getScanProcessing() { - if (scanProcessing == null) { - scanProcessing = new ArrayList(); - } - return this.scanProcessing; - } - - /** - * Gets the value of the ocr property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the ocr property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getOCR().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link OCRType } - * - * - */ - public List getOCR() { - if (ocr == null) { - ocr = new ArrayList(); - } - return this.ocr; - } - -} diff --git a/CICMMetadata/java/generated/ScannerType.java b/CICMMetadata/java/generated/ScannerType.java deleted file mode 100644 index 292a2af..0000000 --- a/CICMMetadata/java/generated/ScannerType.java +++ /dev/null @@ -1,211 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Information about scanning - * - *

Clase Java para ScannerType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ScannerType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Author" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Manufacturer" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Model" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Serial" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Software" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="SoftwareVersion" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ScannerType", propOrder = { - "author", - "manufacturer", - "model", - "serial", - "software", - "softwareVersion" -}) -public class ScannerType { - - @XmlElement(name = "Author", required = true) - protected String author; - @XmlElement(name = "Manufacturer", required = true) - protected String manufacturer; - @XmlElement(name = "Model", required = true) - protected String model; - @XmlElement(name = "Serial", required = true) - protected String serial; - @XmlElement(name = "Software", required = true) - protected String software; - @XmlElement(name = "SoftwareVersion", required = true) - protected String softwareVersion; - - /** - * Obtiene el valor de la propiedad author. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAuthor() { - return author; - } - - /** - * Define el valor de la propiedad author. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAuthor(String value) { - this.author = value; - } - - /** - * Obtiene el valor de la propiedad manufacturer. - * - * @return - * possible object is - * {@link String } - * - */ - public String getManufacturer() { - return manufacturer; - } - - /** - * Define el valor de la propiedad manufacturer. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setManufacturer(String value) { - this.manufacturer = value; - } - - /** - * Obtiene el valor de la propiedad model. - * - * @return - * possible object is - * {@link String } - * - */ - public String getModel() { - return model; - } - - /** - * Define el valor de la propiedad model. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setModel(String value) { - this.model = value; - } - - /** - * Obtiene el valor de la propiedad serial. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSerial() { - return serial; - } - - /** - * Define el valor de la propiedad serial. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSerial(String value) { - this.serial = value; - } - - /** - * Obtiene el valor de la propiedad software. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSoftware() { - return software; - } - - /** - * Define el valor de la propiedad software. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSoftware(String value) { - this.software = value; - } - - /** - * Obtiene el valor de la propiedad softwareVersion. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSoftwareVersion() { - return softwareVersion; - } - - /** - * Define el valor de la propiedad softwareVersion. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSoftwareVersion(String value) { - this.softwareVersion = value; - } - -} diff --git a/CICMMetadata/java/generated/ScansType.java b/CICMMetadata/java/generated/ScansType.java deleted file mode 100644 index 1833ae2..0000000 --- a/CICMMetadata/java/generated/ScansType.java +++ /dev/null @@ -1,97 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para ScansType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="ScansType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="CaseScan" type="{}CaseScanType" minOccurs="0"/>
- *         <element name="Scan" type="{}MediaScanType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ScansType", propOrder = { - "caseScan", - "scan" -}) -public class ScansType { - - @XmlElement(name = "CaseScan") - protected CaseScanType caseScan; - @XmlElement(name = "Scan") - protected MediaScanType scan; - - /** - * Obtiene el valor de la propiedad caseScan. - * - * @return - * possible object is - * {@link CaseScanType } - * - */ - public CaseScanType getCaseScan() { - return caseScan; - } - - /** - * Define el valor de la propiedad caseScan. - * - * @param value - * allowed object is - * {@link CaseScanType } - * - */ - public void setCaseScan(CaseScanType value) { - this.caseScan = value; - } - - /** - * Obtiene el valor de la propiedad scan. - * - * @return - * possible object is - * {@link MediaScanType } - * - */ - public MediaScanType getScan() { - return scan; - } - - /** - * Define el valor de la propiedad scan. - * - * @param value - * allowed object is - * {@link MediaScanType } - * - */ - public void setScan(MediaScanType value) { - this.scan = value; - } - -} diff --git a/CICMMetadata/java/generated/SectorsType.java b/CICMMetadata/java/generated/SectorsType.java deleted file mode 100644 index 3a27ec9..0000000 --- a/CICMMetadata/java/generated/SectorsType.java +++ /dev/null @@ -1,98 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - - -/** - *

Clase Java para SectorsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SectorsType">
- *   <simpleContent>
- *     <extension base="<http://www.w3.org/2001/XMLSchema>unsignedLong">
- *       <attribute name="layer" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
- *     </extension>
- *   </simpleContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SectorsType", propOrder = { - "value" -}) -public class SectorsType { - - @XmlValue - @XmlSchemaType(name = "unsignedLong") - protected BigInteger value; - @XmlAttribute(name = "layer") - @XmlSchemaType(name = "unsignedInt") - protected Long layer; - - /** - * Obtiene el valor de la propiedad value. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getValue() { - return value; - } - - /** - * Define el valor de la propiedad value. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setValue(BigInteger value) { - this.value = value; - } - - /** - * Obtiene el valor de la propiedad layer. - * - * @return - * possible object is - * {@link Long } - * - */ - public Long getLayer() { - return layer; - } - - /** - * Define el valor de la propiedad layer. - * - * @param value - * allowed object is - * {@link Long } - * - */ - public void setLayer(Long value) { - this.layer = value; - } - -} diff --git a/CICMMetadata/java/generated/SecureDigitalType.java b/CICMMetadata/java/generated/SecureDigitalType.java deleted file mode 100644 index 8ab9337..0000000 --- a/CICMMetadata/java/generated/SecureDigitalType.java +++ /dev/null @@ -1,155 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Contains SecureDigital device information - * - *

Clase Java para SecureDigitalType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SecureDigitalType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="CID" type="{}DumpType"/>
- *         <element name="CSD" type="{}DumpType" minOccurs="0"/>
- *         <element name="SCR" type="{}DumpType" minOccurs="0"/>
- *         <element name="OCR" type="{}DumpType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SecureDigitalType", propOrder = { - "cid", - "csd", - "scr", - "ocr" -}) -public class SecureDigitalType { - - @XmlElement(name = "CID", required = true) - protected DumpType cid; - @XmlElement(name = "CSD") - protected DumpType csd; - @XmlElement(name = "SCR") - protected DumpType scr; - @XmlElement(name = "OCR") - protected DumpType ocr; - - /** - * Obtiene el valor de la propiedad cid. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getCID() { - return cid; - } - - /** - * Define el valor de la propiedad cid. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setCID(DumpType value) { - this.cid = value; - } - - /** - * Obtiene el valor de la propiedad csd. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getCSD() { - return csd; - } - - /** - * Define el valor de la propiedad csd. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setCSD(DumpType value) { - this.csd = value; - } - - /** - * Obtiene el valor de la propiedad scr. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getSCR() { - return scr; - } - - /** - * Define el valor de la propiedad scr. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setSCR(DumpType value) { - this.scr = value; - } - - /** - * Obtiene el valor de la propiedad ocr. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getOCR() { - return ocr; - } - - /** - * Define el valor de la propiedad ocr. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setOCR(DumpType value) { - this.ocr = value; - } - -} diff --git a/CICMMetadata/java/generated/SecuritySectorsType.java b/CICMMetadata/java/generated/SecuritySectorsType.java deleted file mode 100644 index 15017ae..0000000 --- a/CICMMetadata/java/generated/SecuritySectorsType.java +++ /dev/null @@ -1,104 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Start and end of XGD's security sectors - * - * - *

Clase Java para SecuritySectorsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SecuritySectorsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Start" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="End" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SecuritySectorsType", propOrder = { - "start", - "end" -}) -public class SecuritySectorsType { - - @XmlElement(name = "Start", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger start; - @XmlElement(name = "End", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger end; - - /** - * Obtiene el valor de la propiedad start. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getStart() { - return start; - } - - /** - * Define el valor de la propiedad start. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setStart(BigInteger value) { - this.start = value; - } - - /** - * Obtiene el valor de la propiedad end. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEnd() { - return end; - } - - /** - * Define el valor de la propiedad end. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEnd(BigInteger value) { - this.end = value; - } - -} diff --git a/CICMMetadata/java/generated/SequenceType.java b/CICMMetadata/java/generated/SequenceType.java deleted file mode 100644 index f9eec7d..0000000 --- a/CICMMetadata/java/generated/SequenceType.java +++ /dev/null @@ -1,190 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Sequence information about a disc - * - * - *

Clase Java para SequenceType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SequenceType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="MediaTitle" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="MediaSequence" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="TotalMedia">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
- *               <minInclusive value="1"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Side" minOccurs="0">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
- *               <maxInclusive value="2"/>
- *               <minInclusive value="1"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Layer" minOccurs="0">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
- *               <minInclusive value="0"/>
- *               <maxInclusive value="1"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SequenceType", propOrder = { - "mediaTitle", - "mediaSequence", - "totalMedia", - "side", - "layer" -}) -public class SequenceType { - - @XmlElement(name = "MediaTitle") - protected String mediaTitle; - @XmlElement(name = "MediaSequence") - @XmlSchemaType(name = "unsignedInt") - protected long mediaSequence; - @XmlElement(name = "TotalMedia") - protected long totalMedia; - @XmlElement(name = "Side") - protected Short side; - @XmlElement(name = "Layer") - protected Short layer; - - /** - * Obtiene el valor de la propiedad mediaTitle. - * - * @return - * possible object is - * {@link String } - * - */ - public String getMediaTitle() { - return mediaTitle; - } - - /** - * Define el valor de la propiedad mediaTitle. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setMediaTitle(String value) { - this.mediaTitle = value; - } - - /** - * Obtiene el valor de la propiedad mediaSequence. - * - */ - public long getMediaSequence() { - return mediaSequence; - } - - /** - * Define el valor de la propiedad mediaSequence. - * - */ - public void setMediaSequence(long value) { - this.mediaSequence = value; - } - - /** - * Obtiene el valor de la propiedad totalMedia. - * - */ - public long getTotalMedia() { - return totalMedia; - } - - /** - * Define el valor de la propiedad totalMedia. - * - */ - public void setTotalMedia(long value) { - this.totalMedia = value; - } - - /** - * Obtiene el valor de la propiedad side. - * - * @return - * possible object is - * {@link Short } - * - */ - public Short getSide() { - return side; - } - - /** - * Define el valor de la propiedad side. - * - * @param value - * allowed object is - * {@link Short } - * - */ - public void setSide(Short value) { - this.side = value; - } - - /** - * Obtiene el valor de la propiedad layer. - * - * @return - * possible object is - * {@link Short } - * - */ - public Short getLayer() { - return layer; - } - - /** - * Define el valor de la propiedad layer. - * - * @param value - * allowed object is - * {@link Short } - * - */ - public void setLayer(Short value) { - this.layer = value; - } - -} diff --git a/CICMMetadata/java/generated/SoftwareType.java b/CICMMetadata/java/generated/SoftwareType.java deleted file mode 100644 index 78649bd..0000000 --- a/CICMMetadata/java/generated/SoftwareType.java +++ /dev/null @@ -1,127 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Software used for disc reading - * - *

Clase Java para SoftwareType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SoftwareType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="Version" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="OperatingSystem" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SoftwareType", propOrder = { - "name", - "version", - "operatingSystem" -}) -public class SoftwareType { - - @XmlElement(name = "Name", required = true) - protected String name; - @XmlElement(name = "Version", required = true) - protected String version; - @XmlElement(name = "OperatingSystem", required = true) - protected String operatingSystem; - - /** - * Obtiene el valor de la propiedad name. - * - * @return - * possible object is - * {@link String } - * - */ - public String getName() { - return name; - } - - /** - * Define el valor de la propiedad name. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setName(String value) { - this.name = value; - } - - /** - * Obtiene el valor de la propiedad version. - * - * @return - * possible object is - * {@link String } - * - */ - public String getVersion() { - return version; - } - - /** - * Define el valor de la propiedad version. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setVersion(String value) { - this.version = value; - } - - /** - * Obtiene el valor de la propiedad operatingSystem. - * - * @return - * possible object is - * {@link String } - * - */ - public String getOperatingSystem() { - return operatingSystem; - } - - /** - * Define el valor de la propiedad operatingSystem. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setOperatingSystem(String value) { - this.operatingSystem = value; - } - -} diff --git a/CICMMetadata/java/generated/SubChannelType.java b/CICMMetadata/java/generated/SubChannelType.java deleted file mode 100644 index d43affc..0000000 --- a/CICMMetadata/java/generated/SubChannelType.java +++ /dev/null @@ -1,130 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Track's subchannel information - * - *

Clase Java para SubChannelType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SubChannelType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SubChannelType", propOrder = { - "image", - "size", - "checksums" -}) -public class SubChannelType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - -} diff --git a/CICMMetadata/java/generated/SubcategoriesType.java b/CICMMetadata/java/generated/SubcategoriesType.java deleted file mode 100644 index 6a334b5..0000000 --- a/CICMMetadata/java/generated/SubcategoriesType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para SubcategoriesType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SubcategoriesType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Subcategory" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SubcategoriesType", propOrder = { - "subcategory" -}) -public class SubcategoriesType { - - @XmlElement(name = "Subcategory", required = true) - protected List subcategory; - - /** - * Gets the value of the subcategory property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the subcategory property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSubcategory().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getSubcategory() { - if (subcategory == null) { - subcategory = new ArrayList(); - } - return this.subcategory; - } - -} diff --git a/CICMMetadata/java/generated/SubtitleTracksType.java b/CICMMetadata/java/generated/SubtitleTracksType.java deleted file mode 100644 index 17616fe..0000000 --- a/CICMMetadata/java/generated/SubtitleTracksType.java +++ /dev/null @@ -1,122 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para SubtitleTracksType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SubtitleTracksType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Languages" type="{}LanguagesType" minOccurs="0"/>
- *       </sequence>
- *       <attribute name="TrackNumber" use="required">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
- *             <minInclusive value="1"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *       <attribute name="Codec" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SubtitleTracksType", propOrder = { - "languages" -}) -public class SubtitleTracksType { - - @XmlElement(name = "Languages") - protected LanguagesType languages; - @XmlAttribute(name = "TrackNumber", required = true) - protected long trackNumber; - @XmlAttribute(name = "Codec", required = true) - protected String codec; - - /** - * Obtiene el valor de la propiedad languages. - * - * @return - * possible object is - * {@link LanguagesType } - * - */ - public LanguagesType getLanguages() { - return languages; - } - - /** - * Define el valor de la propiedad languages. - * - * @param value - * allowed object is - * {@link LanguagesType } - * - */ - public void setLanguages(LanguagesType value) { - this.languages = value; - } - - /** - * Obtiene el valor de la propiedad trackNumber. - * - */ - public long getTrackNumber() { - return trackNumber; - } - - /** - * Define el valor de la propiedad trackNumber. - * - */ - public void setTrackNumber(long value) { - this.trackNumber = value; - } - - /** - * Obtiene el valor de la propiedad codec. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCodec() { - return codec; - } - - /** - * Define el valor de la propiedad codec. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCodec(String value) { - this.codec = value; - } - -} diff --git a/CICMMetadata/java/generated/SystemsType.java b/CICMMetadata/java/generated/SystemsType.java deleted file mode 100644 index 0dc9d85..0000000 --- a/CICMMetadata/java/generated/SystemsType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para SystemsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="SystemsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="System" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SystemsType", propOrder = { - "system" -}) -public class SystemsType { - - @XmlElement(name = "System") - protected List system; - - /** - * Gets the value of the system property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the system property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSystem().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getSystem() { - if (system == null) { - system = new ArrayList(); - } - return this.system; - } - -} diff --git a/CICMMetadata/java/generated/TapeFileType.java b/CICMMetadata/java/generated/TapeFileType.java deleted file mode 100644 index ec401ba..0000000 --- a/CICMMetadata/java/generated/TapeFileType.java +++ /dev/null @@ -1,246 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Tape file information - * - *

Clase Java para TapeFileType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="TapeFileType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Sequence" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="BlockSize" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="StartBlock" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="EndBlock" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "TapeFileType", propOrder = { - "image", - "size", - "sequence", - "blockSize", - "startBlock", - "endBlock", - "checksums" -}) -public class TapeFileType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Sequence", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger sequence; - @XmlElement(name = "BlockSize", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger blockSize; - @XmlElement(name = "StartBlock", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger startBlock; - @XmlElement(name = "EndBlock", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger endBlock; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad sequence. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSequence() { - return sequence; - } - - /** - * Define el valor de la propiedad sequence. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSequence(BigInteger value) { - this.sequence = value; - } - - /** - * Obtiene el valor de la propiedad blockSize. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getBlockSize() { - return blockSize; - } - - /** - * Define el valor de la propiedad blockSize. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setBlockSize(BigInteger value) { - this.blockSize = value; - } - - /** - * Obtiene el valor de la propiedad startBlock. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getStartBlock() { - return startBlock; - } - - /** - * Define el valor de la propiedad startBlock. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setStartBlock(BigInteger value) { - this.startBlock = value; - } - - /** - * Obtiene el valor de la propiedad endBlock. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEndBlock() { - return endBlock; - } - - /** - * Define el valor de la propiedad endBlock. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEndBlock(BigInteger value) { - this.endBlock = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - -} diff --git a/CICMMetadata/java/generated/TapeInformationType.java b/CICMMetadata/java/generated/TapeInformationType.java deleted file mode 100644 index 556cd86..0000000 --- a/CICMMetadata/java/generated/TapeInformationType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para TapeInformationType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="TapeInformationType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Partition" type="{}TapePartitionType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "TapeInformationType", propOrder = { - "partition" -}) -public class TapeInformationType { - - @XmlElement(name = "Partition", required = true) - protected List partition; - - /** - * Gets the value of the partition property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the partition property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getPartition().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link TapePartitionType } - * - * - */ - public List getPartition() { - if (partition == null) { - partition = new ArrayList(); - } - return this.partition; - } - -} diff --git a/CICMMetadata/java/generated/TapePartitionType.java b/CICMMetadata/java/generated/TapePartitionType.java deleted file mode 100644 index 570dad0..0000000 --- a/CICMMetadata/java/generated/TapePartitionType.java +++ /dev/null @@ -1,254 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Partition information - * - *

Clase Java para TapePartitionType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="TapePartitionType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Sequence" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="StartBlock" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="EndBlock" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <sequence>
- *           <element name="File" type="{}TapeFileType" maxOccurs="unbounded"/>
- *         </sequence>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "TapePartitionType", propOrder = { - "image", - "size", - "sequence", - "startBlock", - "endBlock", - "checksums", - "file" -}) -public class TapePartitionType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Sequence", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger sequence; - @XmlElement(name = "StartBlock", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger startBlock; - @XmlElement(name = "EndBlock", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger endBlock; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "File", required = true) - protected List file; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad sequence. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSequence() { - return sequence; - } - - /** - * Define el valor de la propiedad sequence. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSequence(BigInteger value) { - this.sequence = value; - } - - /** - * Obtiene el valor de la propiedad startBlock. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getStartBlock() { - return startBlock; - } - - /** - * Define el valor de la propiedad startBlock. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setStartBlock(BigInteger value) { - this.startBlock = value; - } - - /** - * Obtiene el valor de la propiedad endBlock. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEndBlock() { - return endBlock; - } - - /** - * Define el valor de la propiedad endBlock. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEndBlock(BigInteger value) { - this.endBlock = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Gets the value of the file property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the file property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getFile().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link TapeFileType } - * - * - */ - public List getFile() { - if (file == null) { - file = new ArrayList(); - } - return this.file; - } - -} diff --git a/CICMMetadata/java/generated/TrackFlagsType.java b/CICMMetadata/java/generated/TrackFlagsType.java deleted file mode 100644 index 964a867..0000000 --- a/CICMMetadata/java/generated/TrackFlagsType.java +++ /dev/null @@ -1,141 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para TrackFlagsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="TrackFlagsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Quadraphonic">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}boolean">
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Data">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}boolean">
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="CopyPermitted">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}boolean">
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="PreEmphasis">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}boolean">
- *             </restriction>
- *           </simpleType>
- *         </element>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "TrackFlagsType", propOrder = { - "quadraphonic", - "data", - "copyPermitted", - "preEmphasis" -}) -public class TrackFlagsType { - - @XmlElement(name = "Quadraphonic") - protected boolean quadraphonic; - @XmlElement(name = "Data") - protected boolean data; - @XmlElement(name = "CopyPermitted") - protected boolean copyPermitted; - @XmlElement(name = "PreEmphasis") - protected boolean preEmphasis; - - /** - * Obtiene el valor de la propiedad quadraphonic. - * - */ - public boolean isQuadraphonic() { - return quadraphonic; - } - - /** - * Define el valor de la propiedad quadraphonic. - * - */ - public void setQuadraphonic(boolean value) { - this.quadraphonic = value; - } - - /** - * Obtiene el valor de la propiedad data. - * - */ - public boolean isData() { - return data; - } - - /** - * Define el valor de la propiedad data. - * - */ - public void setData(boolean value) { - this.data = value; - } - - /** - * Obtiene el valor de la propiedad copyPermitted. - * - */ - public boolean isCopyPermitted() { - return copyPermitted; - } - - /** - * Define el valor de la propiedad copyPermitted. - * - */ - public void setCopyPermitted(boolean value) { - this.copyPermitted = value; - } - - /** - * Obtiene el valor de la propiedad preEmphasis. - * - */ - public boolean isPreEmphasis() { - return preEmphasis; - } - - /** - * Define el valor de la propiedad preEmphasis. - * - */ - public void setPreEmphasis(boolean value) { - this.preEmphasis = value; - } - -} diff --git a/CICMMetadata/java/generated/TrackIndexType.java b/CICMMetadata/java/generated/TrackIndexType.java deleted file mode 100644 index b6c4ecb..0000000 --- a/CICMMetadata/java/generated/TrackIndexType.java +++ /dev/null @@ -1,80 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.XmlValue; - - -/** - *

Clase Java para TrackIndexType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="TrackIndexType">
- *   <simpleContent>
- *     <extension base="<http://www.w3.org/2001/XMLSchema>int">
- *       <attribute name="index" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedShort" />
- *     </extension>
- *   </simpleContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "TrackIndexType", propOrder = { - "value" -}) -public class TrackIndexType { - - @XmlValue - protected int value; - @XmlAttribute(name = "index", required = true) - @XmlSchemaType(name = "unsignedShort") - protected int index; - - /** - * Obtiene el valor de la propiedad value. - * - */ - public int getValue() { - return value; - } - - /** - * Define el valor de la propiedad value. - * - */ - public void setValue(int value) { - this.value = value; - } - - /** - * Obtiene el valor de la propiedad index. - * - */ - public int getIndex() { - return index; - } - - /** - * Define el valor de la propiedad index. - * - */ - public void setIndex(int value) { - this.index = value; - } - -} diff --git a/CICMMetadata/java/generated/TrackIndexesType.java b/CICMMetadata/java/generated/TrackIndexesType.java deleted file mode 100644 index 52ab2a1..0000000 --- a/CICMMetadata/java/generated/TrackIndexesType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para TrackIndexesType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="TrackIndexesType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Index" type="{}TrackIndexType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "TrackIndexesType", propOrder = { - "index" -}) -public class TrackIndexesType { - - @XmlElement(name = "Index", required = true) - protected List index; - - /** - * Gets the value of the index property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the index property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getIndex().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link TrackIndexType } - * - * - */ - public List getIndex() { - if (index == null) { - index = new ArrayList(); - } - return this.index; - } - -} diff --git a/CICMMetadata/java/generated/TrackSequenceType.java b/CICMMetadata/java/generated/TrackSequenceType.java deleted file mode 100644 index 83fc43c..0000000 --- a/CICMMetadata/java/generated/TrackSequenceType.java +++ /dev/null @@ -1,92 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Sequence information about a track - * - * - *

Clase Java para TrackSequenceType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="TrackSequenceType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="TrackNumber" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="Session">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
- *               <minInclusive value="1"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "TrackSequenceType", propOrder = { - "trackNumber", - "session" -}) -public class TrackSequenceType { - - @XmlElement(name = "TrackNumber") - @XmlSchemaType(name = "unsignedInt") - protected long trackNumber; - @XmlElement(name = "Session") - protected long session; - - /** - * Obtiene el valor de la propiedad trackNumber. - * - */ - public long getTrackNumber() { - return trackNumber; - } - - /** - * Define el valor de la propiedad trackNumber. - * - */ - public void setTrackNumber(long value) { - this.trackNumber = value; - } - - /** - * Obtiene el valor de la propiedad session. - * - */ - public long getSession() { - return session; - } - - /** - * Define el valor de la propiedad session. - * - */ - public void setSession(long value) { - this.session = value; - } - -} diff --git a/CICMMetadata/java/generated/TrackType.java b/CICMMetadata/java/generated/TrackType.java deleted file mode 100644 index f69657a..0000000 --- a/CICMMetadata/java/generated/TrackType.java +++ /dev/null @@ -1,504 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.math.BigInteger; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * Track information - * - *

Clase Java para TrackType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="TrackType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Image" type="{}ImageType"/>
- *         <element name="Size" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Sequence" type="{}TrackSequenceType"/>
- *         <element name="StartMSF" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="EndMSF" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="StartSector" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="EndSector" type="{http://www.w3.org/2001/XMLSchema}unsignedLong"/>
- *         <element name="Indexes" type="{}TrackIndexesType" minOccurs="0"/>
- *         <element name="Flags" type="{}TrackFlagsType" minOccurs="0"/>
- *         <element name="ISRC" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="TrackType">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- *               <enumeration value="audio"/>
- *               <enumeration value="mode0"/>
- *               <enumeration value="mode1"/>
- *               <enumeration value="mode2"/>
- *               <enumeration value="m2f1"/>
- *               <enumeration value="m2f2"/>
- *               <enumeration value="dvd"/>
- *               <enumeration value="hddvd"/>
- *               <enumeration value="bluray"/>
- *               <enumeration value="ddcd"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="BytesPerSector" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="AccoustID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Checksums" type="{}ChecksumsType"/>
- *         <element name="SubChannel" type="{}SubChannelType" minOccurs="0"/>
- *         <element name="FileSystemInformation" type="{}FileSystemInformationType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "TrackType", propOrder = { - "image", - "size", - "sequence", - "startMSF", - "endMSF", - "startSector", - "endSector", - "indexes", - "flags", - "isrc", - "trackType", - "bytesPerSector", - "accoustID", - "checksums", - "subChannel", - "fileSystemInformation" -}) -public class TrackType { - - @XmlElement(name = "Image", required = true) - protected ImageType image; - @XmlElement(name = "Size", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger size; - @XmlElement(name = "Sequence", required = true) - protected TrackSequenceType sequence; - @XmlElement(name = "StartMSF") - protected String startMSF; - @XmlElement(name = "EndMSF") - protected String endMSF; - @XmlElement(name = "StartSector", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger startSector; - @XmlElement(name = "EndSector", required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger endSector; - @XmlElement(name = "Indexes") - protected TrackIndexesType indexes; - @XmlElement(name = "Flags") - protected TrackFlagsType flags; - @XmlElement(name = "ISRC") - protected String isrc; - @XmlElement(name = "TrackType", required = true) - protected String trackType; - @XmlElement(name = "BytesPerSector") - @XmlSchemaType(name = "unsignedInt") - protected long bytesPerSector; - @XmlElement(name = "AccoustID") - protected String accoustID; - @XmlElement(name = "Checksums", required = true) - protected ChecksumsType checksums; - @XmlElement(name = "SubChannel") - protected SubChannelType subChannel; - @XmlElement(name = "FileSystemInformation") - protected FileSystemInformationType fileSystemInformation; - - /** - * Obtiene el valor de la propiedad image. - * - * @return - * possible object is - * {@link ImageType } - * - */ - public ImageType getImage() { - return image; - } - - /** - * Define el valor de la propiedad image. - * - * @param value - * allowed object is - * {@link ImageType } - * - */ - public void setImage(ImageType value) { - this.image = value; - } - - /** - * Obtiene el valor de la propiedad size. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getSize() { - return size; - } - - /** - * Define el valor de la propiedad size. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setSize(BigInteger value) { - this.size = value; - } - - /** - * Obtiene el valor de la propiedad sequence. - * - * @return - * possible object is - * {@link TrackSequenceType } - * - */ - public TrackSequenceType getSequence() { - return sequence; - } - - /** - * Define el valor de la propiedad sequence. - * - * @param value - * allowed object is - * {@link TrackSequenceType } - * - */ - public void setSequence(TrackSequenceType value) { - this.sequence = value; - } - - /** - * Obtiene el valor de la propiedad startMSF. - * - * @return - * possible object is - * {@link String } - * - */ - public String getStartMSF() { - return startMSF; - } - - /** - * Define el valor de la propiedad startMSF. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setStartMSF(String value) { - this.startMSF = value; - } - - /** - * Obtiene el valor de la propiedad endMSF. - * - * @return - * possible object is - * {@link String } - * - */ - public String getEndMSF() { - return endMSF; - } - - /** - * Define el valor de la propiedad endMSF. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setEndMSF(String value) { - this.endMSF = value; - } - - /** - * Obtiene el valor de la propiedad startSector. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getStartSector() { - return startSector; - } - - /** - * Define el valor de la propiedad startSector. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setStartSector(BigInteger value) { - this.startSector = value; - } - - /** - * Obtiene el valor de la propiedad endSector. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getEndSector() { - return endSector; - } - - /** - * Define el valor de la propiedad endSector. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setEndSector(BigInteger value) { - this.endSector = value; - } - - /** - * Obtiene el valor de la propiedad indexes. - * - * @return - * possible object is - * {@link TrackIndexesType } - * - */ - public TrackIndexesType getIndexes() { - return indexes; - } - - /** - * Define el valor de la propiedad indexes. - * - * @param value - * allowed object is - * {@link TrackIndexesType } - * - */ - public void setIndexes(TrackIndexesType value) { - this.indexes = value; - } - - /** - * Obtiene el valor de la propiedad flags. - * - * @return - * possible object is - * {@link TrackFlagsType } - * - */ - public TrackFlagsType getFlags() { - return flags; - } - - /** - * Define el valor de la propiedad flags. - * - * @param value - * allowed object is - * {@link TrackFlagsType } - * - */ - public void setFlags(TrackFlagsType value) { - this.flags = value; - } - - /** - * Obtiene el valor de la propiedad isrc. - * - * @return - * possible object is - * {@link String } - * - */ - public String getISRC() { - return isrc; - } - - /** - * Define el valor de la propiedad isrc. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setISRC(String value) { - this.isrc = value; - } - - /** - * Obtiene el valor de la propiedad trackType. - * - * @return - * possible object is - * {@link String } - * - */ - public String getTrackType() { - return trackType; - } - - /** - * Define el valor de la propiedad trackType. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setTrackType(String value) { - this.trackType = value; - } - - /** - * Obtiene el valor de la propiedad bytesPerSector. - * - */ - public long getBytesPerSector() { - return bytesPerSector; - } - - /** - * Define el valor de la propiedad bytesPerSector. - * - */ - public void setBytesPerSector(long value) { - this.bytesPerSector = value; - } - - /** - * Obtiene el valor de la propiedad accoustID. - * - * @return - * possible object is - * {@link String } - * - */ - public String getAccoustID() { - return accoustID; - } - - /** - * Define el valor de la propiedad accoustID. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setAccoustID(String value) { - this.accoustID = value; - } - - /** - * Obtiene el valor de la propiedad checksums. - * - * @return - * possible object is - * {@link ChecksumsType } - * - */ - public ChecksumsType getChecksums() { - return checksums; - } - - /** - * Define el valor de la propiedad checksums. - * - * @param value - * allowed object is - * {@link ChecksumsType } - * - */ - public void setChecksums(ChecksumsType value) { - this.checksums = value; - } - - /** - * Obtiene el valor de la propiedad subChannel. - * - * @return - * possible object is - * {@link SubChannelType } - * - */ - public SubChannelType getSubChannel() { - return subChannel; - } - - /** - * Define el valor de la propiedad subChannel. - * - * @param value - * allowed object is - * {@link SubChannelType } - * - */ - public void setSubChannel(SubChannelType value) { - this.subChannel = value; - } - - /** - * Obtiene el valor de la propiedad fileSystemInformation. - * - * @return - * possible object is - * {@link FileSystemInformationType } - * - */ - public FileSystemInformationType getFileSystemInformation() { - return fileSystemInformation; - } - - /** - * Define el valor de la propiedad fileSystemInformation. - * - * @param value - * allowed object is - * {@link FileSystemInformationType } - * - */ - public void setFileSystemInformation(FileSystemInformationType value) { - this.fileSystemInformation = value; - } - -} diff --git a/CICMMetadata/java/generated/USBType.java b/CICMMetadata/java/generated/USBType.java deleted file mode 100644 index 66c5159..0000000 --- a/CICMMetadata/java/generated/USBType.java +++ /dev/null @@ -1,125 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - * Contains USB device information - * - *

Clase Java para USBType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="USBType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="VendorID">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedShort">
- *               <minInclusive value="1"/>
- *               <maxInclusive value="65534"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="ProductID">
- *           <simpleType>
- *             <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedShort">
- *               <minInclusive value="1"/>
- *               <maxInclusive value="65534"/>
- *             </restriction>
- *           </simpleType>
- *         </element>
- *         <element name="Descriptors" type="{}DumpType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "USBType", propOrder = { - "vendorID", - "productID", - "descriptors" -}) -public class USBType { - - @XmlElement(name = "VendorID") - protected int vendorID; - @XmlElement(name = "ProductID") - protected int productID; - @XmlElement(name = "Descriptors") - protected DumpType descriptors; - - /** - * Obtiene el valor de la propiedad vendorID. - * - */ - public int getVendorID() { - return vendorID; - } - - /** - * Define el valor de la propiedad vendorID. - * - */ - public void setVendorID(int value) { - this.vendorID = value; - } - - /** - * Obtiene el valor de la propiedad productID. - * - */ - public int getProductID() { - return productID; - } - - /** - * Define el valor de la propiedad productID. - * - */ - public void setProductID(int value) { - this.productID = value; - } - - /** - * Obtiene el valor de la propiedad descriptors. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getDescriptors() { - return descriptors; - } - - /** - * Define el valor de la propiedad descriptors. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setDescriptors(DumpType value) { - this.descriptors = value; - } - -} diff --git a/CICMMetadata/java/generated/UserManualType.java b/CICMMetadata/java/generated/UserManualType.java deleted file mode 100644 index ab538b0..0000000 --- a/CICMMetadata/java/generated/UserManualType.java +++ /dev/null @@ -1,150 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - * User manual or user guide accompanying this set. Can be more than one. - * - * - *

Clase Java para UserManualType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="UserManualType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Language" type="{}LanguagesType" minOccurs="0"/>
- *         <element name="Pages" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="PageSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         <element name="Scan" type="{}ScanType" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "UserManualType", propOrder = { - "language", - "pages", - "pageSize", - "scan" -}) -public class UserManualType { - - @XmlElement(name = "Language") - protected LanguagesType language; - @XmlElement(name = "Pages") - @XmlSchemaType(name = "unsignedInt") - protected long pages; - @XmlElement(name = "PageSize") - protected String pageSize; - @XmlElement(name = "Scan") - protected ScanType scan; - - /** - * Obtiene el valor de la propiedad language. - * - * @return - * possible object is - * {@link LanguagesType } - * - */ - public LanguagesType getLanguage() { - return language; - } - - /** - * Define el valor de la propiedad language. - * - * @param value - * allowed object is - * {@link LanguagesType } - * - */ - public void setLanguage(LanguagesType value) { - this.language = value; - } - - /** - * Obtiene el valor de la propiedad pages. - * - */ - public long getPages() { - return pages; - } - - /** - * Define el valor de la propiedad pages. - * - */ - public void setPages(long value) { - this.pages = value; - } - - /** - * Obtiene el valor de la propiedad pageSize. - * - * @return - * possible object is - * {@link String } - * - */ - public String getPageSize() { - return pageSize; - } - - /** - * Define el valor de la propiedad pageSize. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setPageSize(String value) { - this.pageSize = value; - } - - /** - * Obtiene el valor de la propiedad scan. - * - * @return - * possible object is - * {@link ScanType } - * - */ - public ScanType getScan() { - return scan; - } - - /** - * Define el valor de la propiedad scan. - * - * @param value - * allowed object is - * {@link ScanType } - * - */ - public void setScan(ScanType value) { - this.scan = value; - } - -} diff --git a/CICMMetadata/java/generated/VariableBlockSizeType.java b/CICMMetadata/java/generated/VariableBlockSizeType.java deleted file mode 100644 index e458a01..0000000 --- a/CICMMetadata/java/generated/VariableBlockSizeType.java +++ /dev/null @@ -1,76 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para VariableBlockSizeType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="VariableBlockSizeType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="BlockSize" type="{}BlockSizeType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "VariableBlockSizeType", propOrder = { - "blockSize" -}) -public class VariableBlockSizeType { - - @XmlElement(name = "BlockSize", required = true) - protected List blockSize; - - /** - * Gets the value of the blockSize property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the blockSize property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getBlockSize().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link BlockSizeType } - * - * - */ - public List getBlockSize() { - if (blockSize == null) { - blockSize = new ArrayList(); - } - return this.blockSize; - } - -} diff --git a/CICMMetadata/java/generated/VideoTracksType.java b/CICMMetadata/java/generated/VideoTracksType.java deleted file mode 100644 index 4cd675f..0000000 --- a/CICMMetadata/java/generated/VideoTracksType.java +++ /dev/null @@ -1,201 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para VideoTracksType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="VideoTracksType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Languages" type="{}LanguagesType" minOccurs="0"/>
- *       </sequence>
- *       <attribute name="TrackNumber" use="required">
- *         <simpleType>
- *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
- *             <minInclusive value="1"/>
- *           </restriction>
- *         </simpleType>
- *       </attribute>
- *       <attribute name="Codec" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- *       <attribute name="Horizontal" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
- *       <attribute name="Vertical" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
- *       <attribute name="MeanBitrate" use="required" type="{http://www.w3.org/2001/XMLSchema}long" />
- *       <attribute name="ThreeD" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" />
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "VideoTracksType", propOrder = { - "languages" -}) -public class VideoTracksType { - - @XmlElement(name = "Languages") - protected LanguagesType languages; - @XmlAttribute(name = "TrackNumber", required = true) - protected long trackNumber; - @XmlAttribute(name = "Codec", required = true) - protected String codec; - @XmlAttribute(name = "Horizontal", required = true) - @XmlSchemaType(name = "unsignedInt") - protected long horizontal; - @XmlAttribute(name = "Vertical", required = true) - @XmlSchemaType(name = "unsignedInt") - protected long vertical; - @XmlAttribute(name = "MeanBitrate", required = true) - protected long meanBitrate; - @XmlAttribute(name = "ThreeD", required = true) - protected boolean threeD; - - /** - * Obtiene el valor de la propiedad languages. - * - * @return - * possible object is - * {@link LanguagesType } - * - */ - public LanguagesType getLanguages() { - return languages; - } - - /** - * Define el valor de la propiedad languages. - * - * @param value - * allowed object is - * {@link LanguagesType } - * - */ - public void setLanguages(LanguagesType value) { - this.languages = value; - } - - /** - * Obtiene el valor de la propiedad trackNumber. - * - */ - public long getTrackNumber() { - return trackNumber; - } - - /** - * Define el valor de la propiedad trackNumber. - * - */ - public void setTrackNumber(long value) { - this.trackNumber = value; - } - - /** - * Obtiene el valor de la propiedad codec. - * - * @return - * possible object is - * {@link String } - * - */ - public String getCodec() { - return codec; - } - - /** - * Define el valor de la propiedad codec. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setCodec(String value) { - this.codec = value; - } - - /** - * Obtiene el valor de la propiedad horizontal. - * - */ - public long getHorizontal() { - return horizontal; - } - - /** - * Define el valor de la propiedad horizontal. - * - */ - public void setHorizontal(long value) { - this.horizontal = value; - } - - /** - * Obtiene el valor de la propiedad vertical. - * - */ - public long getVertical() { - return vertical; - } - - /** - * Define el valor de la propiedad vertical. - * - */ - public void setVertical(long value) { - this.vertical = value; - } - - /** - * Obtiene el valor de la propiedad meanBitrate. - * - */ - public long getMeanBitrate() { - return meanBitrate; - } - - /** - * Define el valor de la propiedad meanBitrate. - * - */ - public void setMeanBitrate(long value) { - this.meanBitrate = value; - } - - /** - * Obtiene el valor de la propiedad threeD. - * - */ - public boolean isThreeD() { - return threeD; - } - - /** - * Define el valor de la propiedad threeD. - * - */ - public void setThreeD(boolean value) { - this.threeD = value; - } - -} diff --git a/CICMMetadata/java/generated/XboxSecuritySectorsType.java b/CICMMetadata/java/generated/XboxSecuritySectorsType.java deleted file mode 100644 index 2e541dc..0000000 --- a/CICMMetadata/java/generated/XboxSecuritySectorsType.java +++ /dev/null @@ -1,112 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para XboxSecuritySectorsType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="XboxSecuritySectorsType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="RequestVersion" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="RequestNumber" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="SecuritySectors" type="{}DumpType"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "XboxSecuritySectorsType", propOrder = { - "requestVersion", - "requestNumber", - "securitySectors" -}) -public class XboxSecuritySectorsType { - - @XmlElement(name = "RequestVersion") - @XmlSchemaType(name = "unsignedInt") - protected long requestVersion; - @XmlElement(name = "RequestNumber") - @XmlSchemaType(name = "unsignedInt") - protected long requestNumber; - @XmlElement(name = "SecuritySectors", required = true) - protected DumpType securitySectors; - - /** - * Obtiene el valor de la propiedad requestVersion. - * - */ - public long getRequestVersion() { - return requestVersion; - } - - /** - * Define el valor de la propiedad requestVersion. - * - */ - public void setRequestVersion(long value) { - this.requestVersion = value; - } - - /** - * Obtiene el valor de la propiedad requestNumber. - * - */ - public long getRequestNumber() { - return requestNumber; - } - - /** - * Define el valor de la propiedad requestNumber. - * - */ - public void setRequestNumber(long value) { - this.requestNumber = value; - } - - /** - * Obtiene el valor de la propiedad securitySectors. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getSecuritySectors() { - return securitySectors; - } - - /** - * Define el valor de la propiedad securitySectors. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setSecuritySectors(DumpType value) { - this.securitySectors = value; - } - -} diff --git a/CICMMetadata/java/generated/XboxType.java b/CICMMetadata/java/generated/XboxType.java deleted file mode 100644 index fcc3a14..0000000 --- a/CICMMetadata/java/generated/XboxType.java +++ /dev/null @@ -1,132 +0,0 @@ -// -// Este archivo ha sido generado por la arquitectura JavaTM para la implantación de la referencia de enlace (JAXB) XML v2.2.8-b130911.1802 -// Visite http://java.sun.com/xml/jaxb -// Todas las modificaciones realizadas en este archivo se perderán si se vuelve a compilar el esquema de origen. -// Generado el: 2020.07.12 a las 10:42:39 PM WEST -// - - -package generated; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - - -/** - *

Clase Java para XboxType complex type. - * - *

El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase. - * - *

- * <complexType name="XboxType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="PFI" type="{}DumpType"/>
- *         <element name="DMI" type="{}DumpType"/>
- *         <element name="SecuritySectors" type="{}XboxSecuritySectorsType" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "XboxType", propOrder = { - "pfi", - "dmi", - "securitySectors" -}) -public class XboxType { - - @XmlElement(name = "PFI", required = true) - protected DumpType pfi; - @XmlElement(name = "DMI", required = true) - protected DumpType dmi; - @XmlElement(name = "SecuritySectors", required = true) - protected List securitySectors; - - /** - * Obtiene el valor de la propiedad pfi. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getPFI() { - return pfi; - } - - /** - * Define el valor de la propiedad pfi. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setPFI(DumpType value) { - this.pfi = value; - } - - /** - * Obtiene el valor de la propiedad dmi. - * - * @return - * possible object is - * {@link DumpType } - * - */ - public DumpType getDMI() { - return dmi; - } - - /** - * Define el valor de la propiedad dmi. - * - * @param value - * allowed object is - * {@link DumpType } - * - */ - public void setDMI(DumpType value) { - this.dmi = value; - } - - /** - * Gets the value of the securitySectors property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the securitySectors property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getSecuritySectors().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link XboxSecuritySectorsType } - * - * - */ - public List getSecuritySectors() { - if (securitySectors == null) { - securitySectors = new ArrayList(); - } - return this.securitySectors; - } - -} diff --git a/CICMMetadata/samples/advertisement.xml b/CICMMetadata/samples/advertisement.xml deleted file mode 100644 index 1587e8e..0000000 --- a/CICMMetadata/samples/advertisement.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - Nintendo - Luigi's Mansion 2 - - advertising - nintendo - 3DS - - - Game - - - Platformer - - - spa - - - System - - - Nintendo - Luigi's Mansion 2 - luigi_mansion2_ad.ts - 8509632 - 501 - 20 - 25 - - 8818e1db - bdc169fd31d3142067c532013e7c2446 - 521709692e8551748f0d14c791fba823d268cef3 - d28bf7829846cdcc633699f51e551b332bb10ef3f596bdf8948ec0b390f4f3e0 - 8b4aaa13b8f417482a8e37293aa33235a1236582fefd63e9 - 5ac087379b37afb22f65b0f6f2208c2e44708ea0bec0c233ab3ee5b85312fa4e656cc092e160f8626343033937aec90eadd674ee3e714f1243ff9e47285f8fae - 196608:KPzYb83jgXvTbe8Z48I5qKki6VaBK+qxLrP:szYbOjovTjvjKWV5xX - - - - - Xplora - DVB-T - 2013-04-02T07:15:00 - - ArgusTV - 2.0 - Windows 8 Professional - - - 28.1666667 - 15.4166667 - - - - diff --git a/CICMMetadata/samples/floppy_and_cd.xml b/CICMMetadata/samples/floppy_and_cd.xml deleted file mode 100644 index e200ab3..0000000 --- a/CICMMetadata/samples/floppy_and_cd.xml +++ /dev/null @@ -1,241 +0,0 @@ - - - Be - BeOS - R4 - Retail - 1998-11-04 - - BeOS - - - Operating System - - - eng - - - i686 - Gestalt 67 - Gestalt 58 - Gestalt 69 - Gestalt 68 - Gestalt 108 - Gestalt 109 - Gestalt 514 - - - ia32 - ppc - - - BeOS R4 (Retail).cue - 174 - - 1 - 1 - - - c7e095e1fc98e98b36b8cde5b003f08d - 4f5a6b4e11bf644b1f77566b8149acab15db4276 - d7eba58afdc121da4fb47418c9d328393670bb58095baf035ca6c29d33300ccf - e5c5f17baa5dfcc6793808321b90ca8a2a396acdf5ea950d - f1902ad54a53c45a535b5ae456f000980463ddeef51e4b1510f1a5e0b79f6fa4e1460eb2d97253b7d68b83995003f6a6faeae7b5faf097fa9604441428b9c28c - - CD - CD-ROM - 3 - 1 - - 120 - 1.2 - - - jewel - - - - BeOS R4 (Retail).bin - 6967296 - - 1 - 1 - - 00:00:00 - 00:45:26 - 0 - 3401 - mode1 - 2048 - - 0xa66c658c - 0x9e60 - 0x26d3d260 - 0xfaf6cd8f8534541e - 9c3facd2d33cc29b4d80850c3387230a - 2800a377d2b9c2afe85ea2327f691f91f9b6600f - 9cf4335ca0b8b12fd343f46e69fc1e183d011456 - 44e780def14f136f082ab4ddfb8f1c3af0d58089edeaab706040eb2642335000 - 7c37209d84239d4c65eca58dcab9f4940731711b4d35725f15e464fd1dfb1729269b298ae16a6e7bd4f4a98cb9368b1c - a803a4d28aa6604db9c09b5cf7ce2937cce422311607f6d34b3560be07bb1634814a912cb94581305d2ffef3236b47941501a30909f11c236dd0e35ebb2a4d12 - 98304:Qddx6TKP6TK4oRdrcHcUTvwoRdrcHjkF4xGbUd8LtV1yV:Qddxb7I38k2xGYdzV - - - - 1 - 0 - 3401 - - - HFS - 1998-11-12T18:11:46 - 1998-11-12T18:11:46 - 2048 - 3251 - 53 - false - BEOS_TOOLS - false - - - ISO9660 - 1998-11-12T18:11:46 - 1998-11-12T18:11:46 - 2001-12-31T12:00:00 - 2048 - 3402 - false - BEOS_TOOLS - false - 1998-11-12T18:11:46 - LINUX - - - - - - - BeOS R4 (Retail).bin - 321093632 - - 2 - 1 - - 00:45:27 - 35:35:61 - 3402 - 160185 - mode1 - 2048 - - 0x37a31ed0 - 0x5eeb - 0x0c662ba1 - 0x4b5b4492dc1cc3f8 - f80c9ca884734c09af0f47b2d1d7651c - 05e62ddecaee1bcd11698420c4543f7c41cbbe95 - 153fe34de33d95b07d7a9be4cd3db9f4be1c31ae - b58f269bb7fbb7cf2a9bb65c05d64c9ec9179b63217ba9fe940198f6861e5cfb - 897f8a0beb90748599514fa9c2ae397af955c14d1e1234135ce8a1239cdf839fce17056778b3e2c270dacc000ab1dd0b - 683a79dfbd8c0322060e8758fd25e300276583dcfdbc50eddf039fefc2ce9ee9434d70a41a70a4aa9f24c33e8ffddb0b6012a08370822fdf329f8594c60e9499 - 3145728:3r8ksS8IcP98ENRE9n5HaT0aIYgAd4Rd4Td4BDXr6sN/LG6SVULduen89Jk9:QVYgRE9sTEYghv6sN/L9SURF0Jg - - - - 1 - 3402 - 160185 - - - BeFS - 2048 - 156633 - true - BeOS Intel R4 - 26875 - false - - - - - - - BeOS R4 (Retail).bin - 315621376 - - 3 - 1 - - 35:35:61 - 69:50:47 - 160186 - 314297 - mode1 - 2048 - - 0x668b9c98 - 0x133c - 0xee1fb301 - 0x620f86425be5befb - fa7b1d52ce2ed23368a10ffe2b1fc7a2 - 56cc151dfde1b61f6618bb94b5426b68be44a3a7 - 519a04b69ce217715c0956a2920c5236d6c61f0a - 45029b9e510fe693d19289a42b721e8ff3e42e64b788db039e9fe5d1012337f6 - e9e19e326eac5354a3385d0a9feaa678bf52911e94ddb5fa9aaa6959b9d2413334f4d4175f61154ab8f08ae930e2db30 - b6e81acb40dac35df3024caad103f175fb41df379722d9ae72b6a61076392b08c1269708f2a7068a660b054ad81e4d9687b95f7dc9584dd37c838f2555072cc9 - 3145728:fn9GWd4Rd4Td4Mkw8EIfIaT0aImglUrl6sN/LGxRZeL8dVXLdye:fn9Gy2ZTEmgg6sN/L6awXRJ - - - - 1 - 160186 - 314297 - - - BeFS (big-endian) - 2048 - 154112 - true - BeOS PPC R4 - 33959 - false - - - - - - - - BeOS R4 (Retail).dsk - 1474560 - - 0x80e618cd - 0x9dcc - 0x72d3b76c - 0xc179638a190b4a91 - 49b8f5d1465eca87dcc572143d182f83 - 95b57c12e48484ca47de69a048c895cce3fe1606 - 46ddb1d066270cfff6307b360976846fda0862ad - 899c49eaee12e42b789ecaca0e52297a52fde74072339a0a59e480dd961f265f - dfefa36cb6b91a25387d2230a6704e115c8fa22f3a58475177f20149ac468607044f9a5f6459b183ac3e3c35f9e1b3bf - b23716bfbbdf188a927c63d0ee3b000d452796ff7ec13047c61b501629b42e9f9631caf5bb09a6f7a8e3016f25bf1e098c0b8b6373f6fb5850c720e37654fccf - 6144:RAfUvvrKRWRe3PrBZZpPV4rnJP8W93Fh8Vg3k+0jN1rGs+gaAeCeV1:NvjKpTB38F0gwV+n0jj+zmeV1 - - - 1 - 1 - - 512 - 512 - 2880 - - 2 - 80 - 18 - - 93.7 - 90.0 - 3.3 - - - diff --git a/CICMMetadata/samples/mixedcd.xml b/CICMMetadata/samples/mixedcd.xml deleted file mode 100644 index 1e684ff..0000000 --- a/CICMMetadata/samples/mixedcd.xml +++ /dev/null @@ -1,258 +0,0 @@ - - - id Software - Quake - 1.10 - Retail - 1996-06-22 - - Games - - - First-person shooter - - - eng - - - i486 - - - ia32 - - - Image - 1082 - - 1 - 1 - - - a8ddf932 - a7cc48685663e781d6e4500bae9ddeb7 - def9f25a68bfe05c7e3bc352ca70438abd1411bf - - CD - CD-ROM - 11 - 1 - - 93.7 - 90.0 - 3.3 - - - jewel - - - - - cdrom (Track 01).bin - 39010272 - - 1 - 1 - - 0 - 16585 - mode2 - 2352 - - 124b015f - c36160718b39c97bf02fd3dcf94dfc2a - 0654a3a9f8f6ba09b6cca9a1bd00ad67c7603fd3 - 786432:spNjXNBnlKQ4jYf6YN1t6gCQss+fyPra7JBCpRk3qxlIVWnuL4D+9YbYXZje:spdMQ4UXCq+6ProIRk3qxaVWnuLzJje, - - - - cdrom (Track 02).bin - 54818064 - - 2 - 1 - - 16586 - 39892 - audio - 2352 - AQADtEkUhVEURVKA4_gPHfgLLc-OC02mCF2YoZ9wMTr4F-eO9ESPPoXB_OiN1LnBQx9BZfhwHt20xMKlHD_uoA8axhUOvTnSXLiW40YzJxT6zPhyDT_6FM2LHLo6hE8sPGdRkcKL2heaEU-GMKUiIlHI6Ph049JRheHRVMGPH9fYCCEHfUiTJhYYLpPxp8JFD-VDNIyOPLGhZT9CSce1DE2eoxSJJ8dx6QhTZcmhq4jF49uH6ikeFV-GRN8RZtJxZTE20UX1oKmYIzwFfQku6uiD5_g1-Mck64Mu46MO6RZ-MsM5CebxQZ_h_YidXLg2NBF1oS_OCznaZYeWMyGOT4qHbnVQWQqOMz1ERmCXXMh9OHqOT8Gbo4l81EmOS8fR5_CLnPgYaE-CmxcuEtmPJkfIJfxwIuG-Bs-Db0eTxAmLXniGJ0TyC2EoEeVxH8_ENDgFZJegM8mFvKgUBb8x8gt89NLxJviFPsmRy4f6Y2eIfDxsKailCS9u1DvCUDp4EVp2FSGZHZ9yootgR0f1VsOFX3jUI8uPD-otNCKDnFGOU-hDNIyIPNDegwnDHXeUIVwoNOHxBPmLC30GVwwu_GrRVTfOHCdRmRe0HF_Q80KT5oee7WjkDKGoCZ-OWkd6HHpU5IfTxMRPNI9S3MOF7EgqBs9onHmG6jP8RBdq4fiLS9nR0zjDDA-YzwiPxqXwC3oO87jD4oSY5niPb8oRJiT6Feg_AX6IvHB1QU_g7Aj3Dt9FNHHRhza-LEhvPDnuHZoi7fCIkrmMXHiEMM-CnniPT7KgV8FX_EOYo-Iu5Ao0Gw0f5E2OSxr6F67yoheOXFkcnNCk5bC0GBXFUHgDqWzRp0g5jJISWHxx6oOfIaQP5czQ3saV44Frgs9i_IdIbNrR44qL9kcTqsh3PDycHVdyvEHj6BKq78jVCdCPehHMo5c6PJJyPMWOG_SPidJxpUQNvYrx9WgUoWpyXBKuox0FLVWWGscbHZ04Dro-VI_QhzAf1Ar6I0x-4Q-6SIHTCHUtPEGuF9-hKyzynagSHk2-DN-D08gn6EoQShosKYcj-Tj8oMeHq0GdJMeRZoe2W7iObw72RXgDHuER5uDRQ8txKgpC_fBY9CJKwuiHagqDMHcD2UGYo_iFvkezF090hLlRWYK-RDiqjfC3oqSO4guLL0d64b3QL0duHIdz_LiooIlvhMcl7agEl3ERPtCv4DeypMpClNlRNZkpfDf6DZyP-II-EdGDJ8lxHV0P_yjyjviHp0apfWjGEl-gPEYpHQfTcdtwMDm0oz3CHI8a4mi6HP3xCR-FF9Uj_Mi14YrhHNqPo_lRjUXI7_DRHf-FkIetGfoOf8jx0MUtHTluHjo14Ucu-Cx6CsyPNHUObTqLGyELW8GHHsxVOFrCI9c3HOKYpfCJ58EtCd8hJlOU4qIQzZXxfMGHX_DKI7TxXNB8_Di2yCouLqAP_5Cv4xy-IMdX_MORn1itBzr8IjeOej36HfmEy_jxJMRWyyiu49fQN3iK_tCPHo1-TJtwwT_s4JF0fDlc4E18uMKP3zj8HYd7PBR-KB_8GFePXAif4KrQH1NenMR7QTt8C8J__DCPFz4N4RssSugjBhcKv8GH_viaHOEueD-qEznR7MeJ9yjJ44rxHHmUox985IwkPDnS4EbQqDR-5MgT6JSKloh2rsEBV1txTYimjfgm6B92w__RJ7gIXQXZo1cR7cfx5vAzD_nR31DwLbiPLMWHK7hwscLGo8ePcBc-ZTh1-MQjfCfEE31xhDz84_i2HOl34RCv4cYbGofO43kDv9DxC76M8A-e4xe6RvCN_jhFow-OyzoeuCGNi7h7_EB4XBm0Mdg5pP3h8zgF1zJ6XGiOyPgDLcd340d_iL_wDz7qo2oOQ3uHR8jxIjfKJxceC_4hZtyLl8jDw-fRE0XzFWdwI993fMehY9Jx5fAlTN5xsg7y4EFTMSF6XMcr4UlwlJEOTza-4wvCPbiFv9B3XMiL_8d1ND_6HeFlNDz0B2eOMGLdIK-GD-J5XEd-D9_xHDnsQruQ8zhOEc0TC11u5EQrRYE4_GgeB0fjHqWGH_2Nk4mhHfuJLE9xXhh_PMeV43ik40qJJmyoCPmH4zoe5agf6Mcf-Bq640mG89izGH0pNFVu_MjyDl6ObdaF-vgOf8dz9Dsa9cN__OvQXEXXDBeNS8h3HIcelBph0ciPw6804VXgrSeO44Gp8Lh8-EePXzhyH9ojeCPCS8d5ATeuojr8o8e1BydR6UeYQz_yF79wdGhq8fgO_Gh2_PjhbD36TPjRB3Y45McPPQiPHz18_LC2dArC406Q4Mfl-OgRBn9x6yv0Scd1oYd-pDp6TsN_5EN9NMd76IWWcAz6IQ9yHSjJ9GgeC9-hZYzToQ-uyACSlAIEOYTEANAAQ4AERDBAiGPIIESBcsYYYYAgCAoBCEKAMKCUEcAQIgwjAgAkDBIACCEUEMUgYQQwjiFBgDQGESaUQUIJoQQRADDpgBBACEIEKAAEx4AxTBgjJBFEmCGBYQAAQQwCDDEDjGAgOAoAoIQYIQgBgiEigDDAAAMEo0YBogwBABFjEAEKEAGUAsAAppQgggEAmDEAOAEIEEARAZ4QVBABoCcCACEgQAQI4YRhCBEEmDRIKAIIIEIBgwQwiAEgBAAFCKAEAI4gQQAAACgg2GGCIAGMFQYgowgQAAAEABMKCCYEAMIgA4ERAAGAoAKAKUoYCMgJAIAgBhjAjCCKEGWAA8whQEDVkDhmCARGKIyhI1YQYQhAAABhGFFACEIcAMAIAqBjxikhBCAIEcEEIEYgRBhRiAiAlCIMGXGRJUQAogQxDDAFFFbAEgQAJEAAKYxEDBAAgDHACaGAAYApIQAAiBkEETCKM4OUIBRYJAASgBlQmHHCCaGkIgQocIWxAimhFCCQEEERYAAABQAwwAEjlELOKURAkMQpIxRSwghmhAJMISAQIQIIwYghTjkDlVJEAoYAg8QgAsiiikiAAEIGCcYYUEAJghAwIiIFzCREAQMocgSQIhgkSgBGLKACCaIMEUQB5QhUxAHFiKAUAMkEAsIAoYWiRJBhmDEGAUEBR8IpIAYQAACCCBCEKCgEMIggwAhQRIilnIAMcOAcQxISxggAwChBBDIEIaKUAwApQYSyilmiHDFCOYKoEkQBwo1STAgECXKEIMgEJIYYhoxDQBBiDECMSMgAgQAQToRBwghiiDGORCeEGEaAQhlxwDAqEFBAEEOskkIyJShBCEjAHBEFCEIcs8gJoZhyRAhhEFOWSEsMIMAQJIAQSGDiIBESeIAJkJI6QAxwygE - - 9b64e30b - 4770ac46843190af09bd1a77b54c06f5 - 5bcb4bdd387aad4c8836b6151e57dac945a13ace - 786432:9062IpIjKxEtfyWPRVLLHjUcvmjoozcIInI0fLYcYqVuwI:906/Wo8fyERTIcujvzcjrT8Uy - - - - cdrom (Track 03).bin - 26137776 - - 3 - 1 - - 39893 - 51005 - audio - 2352 - AQADtFEShVEURYlw4PmL_EDQ5LmhIxcaaeuO7gp-vOHQH7Y840ZOSLqOsNTw4ZyFc8N5hD9EHjmXwz3CP3hu6B36E3Hi4_zAI1eTQteEEL-GxxHaollx8ciFpyJ0VGKCnXhwHn-aQKcNH72GFz-D_mjWIT-aH9PpCP2RUzn6Q018ZFHTo0Gt8PCHx3DEFuGRPMp09Dn8o1YufMwxP0NoHlrSMBvy8EHFIwxHQJz241-C3MJ3tCR89NSDaz--E6nyHHeGjzOa8YHMI09QNQz-40d0XNohZUWa4x-oSKrRHmeC5j2SnchxoTr8DH1D9MglnkieHD2u4NoxH3U5IU0jZXjeQ10gDmiO3ArxR7imUMh_9IJvlDfiP7h0NGMWPDAniQm-E2m8Q3wYhKJxYYzLCD94DSH0I2RGJ-B53CHCoUkTltCZHKGVBT4OJ81ShD90ok4S5Uh5oo0ePAr2HKhIIxV7qBQNHeaDBj8uXUK-zMG1IrwKj0I_mcQfPPnhZ8eHcskc-LjRNctx4Rpm9dAvPOnR5IHWH4_xSId3HJUzQ9RzXAoNnzoejXgI8eJgjkf4LLiOPceTI3fQQ0yq1Tic44c-2JdRHvmJEzvO4Ea6FzzaHc2HH1qcHI-NoORxHzdxRXuEuIf2I62EHr2DZgSP68ihH5Gswzf8o9-Rx4KuIM-OZ8f1BX2QN4I9aPKOnMrxDOeF8ETzUNB-pERfPBJ-PEOzH_3RH9ulHGV3_FEKhtkjIcf2DDd6nA9-hFoUo5EcHI9k9EGDHxH0IPw04x9q_eAp9EJKaCdKuUmMn3CVoWeGQ3l6vMdnQxMaDnlw_PiT48sR5mQNTWKLZ8VzVHck-FKgw1zQB70Ojzk8MuiN73jS5MGPSLlQHjf-5Gh3hDn0I1dxB73h_IgTBvp0_ES-HHlkKoF-PGjOILrU4iq-JEeVHOnZQDv-HMGHl8LrHD1X-Ai5SPgfqMllNHXQUsGlCM3pIMdzXEMvHE-PfISeF9GFSxLxHDdRb0eYC4eeg_tR5YYd6Dk8hF2GcxeOK0d_o9mDRydySJGzFM1l7MoNXD1xQdPloA_aLLB91PtxVNvRJC2u5ei1QEv140N4-GiaBqd4PNWDiDv0a0j74mpxwcd1_Lii4xfC9EEf4zeqNEJ4_LiSXMGTB3ngE8oT5PiOanmQJrGIH-IVhMEnXMenUUH4HeLR54euIs5RmanQXDn6CQ3XBiGvQjyPPEPzAE-P-8R5JBcRHT_-EL3ho89xBMdz3BF6Kbh0tEqWKtD1IIef4Qr24tGLWHohlxRCHd5Rmzh_PMfzIAxVSXgGjaQH9cd_hDoaZ8nxoo0yw3vw5bgyIeSaC190yGKOvB-aP8iFK4fmhC7K5GiiN3gU7EFTRZPwMHAXHYfzGVU6HbmGS9mRJ7mCB3qwvUeObzyupA-qnIJ39FmQG9-hIwyV7EE-4zx09Mfz4L-g5UuOdokQsjOaBz2uow--6HhE4U4s_Gg4HeHx59AtF1eOFB-m_LiWGUZ_hEoawfEEjZTwJMuDJ7bwB30w5dB1PEmE_M9R5TqaGBcuJ8h56EeYZxwe4Tla4vtxHc8Pn5ZxomRg9vjhVYefHJUsJJ4Q28QfOBZ-fNKIOy_S5cFN6MX0R3AVJYdODsadGU1SRTh0bUee5AoeNMd0HHmyIBn1oEku8fhx4lTwH3mQ7MoT-MyEH2eJysfz44fnHUfD1UTpFT3xHD1zxInx6cL3QEfIW0NTHvlxMjgfeDp0Yc83-FFinD7CdQ8c58KF5sEVHc87nE_Q50SYCzoVRFYyfM_R7EaVoySqxUEOPT_eBs2DdjmeGz9iPXiO5rnRZ8EllNIiBr7x5EMuMYem9viEWFfwB5dy9A-a-shjosyOZhJTKM-KKxfCWEKt0KiOOD0e5ehx5ngSerieQA_EE3twQZ1m4Yl6NN-hHb9wPOuRo5UW43GRHtqDH89__DAzCaegPQ_sycXRZzny8XiE-MdP6NmhZb6GXjlO5vh2lFKO5niOKUe9xdB04amOZ-gjnD30JNlxPXjgIzpy4VpeqIk-NLGO_viPWzjxPDm0j0LjaNA5EX9kHH8gJs9xCjl3eAwb3EV_PEH54BOPpwnyKBd-Bc2M_sGdQw8fNOPRF9dkROtxqfiNJ8eTo2eQ89CTJHOC0E7RB82JPbiIXDySKZF4Dj4nVD9e4tKRC1-OZNec45F1nIc59Hhu4XoceNSOo-HCBqVX9Dmeo2-Oi0OuQl10oUcz6tAjXB_x8PAfHIeidB_Chyh5XEeVDjkT4Qz0JFmqIJcdHH7wYRZy8YUq8QhXUmjy48fj4DnyHM8DkWOKT8cvxDp-VL_gD89hKyvatUEpLTL8IL1yaErkI5aS4MevoBfS54Fm53iUIOQZNG-B6UIYh1ClJsZ7VNehSzmOPNFR6h3-BH0Q5lB-PEmEXK1Q5YGD8sKZIyf01Aiv_LBDKvB5-Efx43l-NJfRh0dDHv1RmkifD5-gZcej6Th-CvmHkFouNLvwHyVzND1OKMrRL0MzGZUPNY1i9AODADDMCKIAYIYpgBghSAAGjABEKIEYEQAYYIgQyFAEJBWHGkgEEkIAhYBSBggAiGBAEGABEwYoIowBwAEiBSHIOUMFAAooIQAAhikCDDMcEMOMIAAIhigQTAhDMGICCgFIg4QQIQAQBDDHCCCAQQEAFQAAgoEySBDEHAEQOIoEkQAACgAQxFAAgAEIAUKEkIY4ZgQBBjDEBHFEMmEQAQYQBBkxrVGojgDFGAAwEQAJa5VDTipnGAKGQKYIMcQoaYAggAmlHDFKU2EQsAQYoRDgCKFioADKGgiBIwgwRBQQBACghHTMIAUMA0xAApS1AHBjAAAAUGQYMIJwQ7UQCBBlhCCKAUOAgcARwZBTgpgghCPAM8QUAEYrgQgRDADlBCIGEQLEEkoIgkAiiCAhCDGAZGIAAqAJgASQTACFFBPEIaSYU8AIpgghSgFnCFLMEgQCMUIAQyAQjgAgFAIGACIUcIgAxoRBFEAgiAJKASgIEpwYYJRixAkioDCAOCaQAEoIQACDgglnFICAKCIEAgkwQwQARAhjMAXICaQggEAIwChYSBEEAGKCGwAAMlAAIgwChBmhiCUCAMAEJMQaBpQFDBAgACDAESoUAsQ5hQBhCgADELBACAQGI0QBAQRBBiEFBFDOYAEIoIwBhoQAxCAlEEPECOQMAAAIAhFBBhAjGCLGAAGaEcghoBgRDkAjhEHMCCGEcoIZRARCBgFtmDEEGaIQcAQIAEwB2DDxTAAGAAKQI4IwAYQBQjAhjCCEAAOMYgAIIJghQBDCGIDCACMUIoQhowwgghkCCGGECCUUE8AAQphQAgFADHPMAQUAU0IRIIAjBACBDGHQGASAEk6gQABgDijmgADAYAEKIAQYC4IwQAomBAOQACIkwcZRpJwgigkwJAGEUUCEcIQJYQQgBkihAECAEgSYEcpYIqBgziAghBDAAgkEEEQAKhBATAAEDGFAUCMAQVYQZQA - - b390a7f7 - c97130e7c689edfa0d031572c7f37982 - b7f9d5076028f94eef095c6e680c55d085594382 - 786432:TCbF/70nHyRynTGUpO3cf1xqHeedPBbF0f0U5kcDaOU4:TGFgH/TGUpscedPxF0f0UKcv5 - - - - cdrom (Track 04).bin - 88625712 - - 4 - 1 - - 51006 - 88686 - audio - 2352 - AQADtEmSKFIURRGDBznwB8fRPAbSLJo23IFO5D-aZ2NQCz_CHL1y49CLnsdxAccNAxYu4ADgHMYPAMDxHjgu4LhhANZxHADw4zgA4HgPHBdw3DAACxcOAPhxHABwvAeO4zhgGYCFCwcA_DgOADh-HAcu4LAMwMKFAwCcw_gBAPjx4sAFHDcMGDeOA4BzGMcBAMd74DiO44YBWMdxAMCP4wCA4z1wXAAOywAsXDgA4MdxAMDx4zhwAYdlABYuHADgHMYPAMCPFwcu4LAMwLgFHACcw_gBAPjx4sAFHDcMwDqOAwB-HAcAHO-B4ziOGwZgHccBAD-OAwCO98BxATgsA7Bw4QCAH8cBAMeP48CFA5YBWLhwAIBzGD8AAD9eHLiA44YB4xZwAHAO4wcA4HgPHBdw3DCOwzqOA8BxHAcAHO-BH8eBH_4BWLhwADgOHAcA_DiO4zh--IBxXDgA4MeN4wdwHD8O3LhwwMcBH8cPHIAPB8cB5PjxIy8OXNBx40aKw8ctBIeAI_5x_AhgAD7yHgcuHEeqFz-An_BVHNBhHM6PA8BxHHIPHBeAm4KPA9ZxHQcA_DgOADh-HMcFHLB8HId1XDgAwDmMHwCAHy8OXMBxwzh83AIOAM5h_MAB4C9eHMeBH4dxWDiAGzdw4MAPwz9w4DhuHIdz_IAP4IcPwAcOHMeBu8AB_MBhHDDi48dx4PhxHAGE4MWPH_gEBOKD-0gPHK8GxIeB4DisCzgA_wjeBz6OA4eo44Bx4_hxAM7h4xCA4zjeA8cFHLfhQ4fxdzgOAMKPHwCA4z3w4ziOw8DhH8e143ih47C06HjhQw8OvHhwHA9-HG-A93gD-JPwGPCLH8cL5_Dx47jh4_DxCzeO4zF-vLgPHz8OP7hHHD8eCd8JH98By_GE4zieZviFH3ePc8bxD74U_HiOMzgPHzpx4g78Gj9eWD10HMd_nBQ-XMfxCyd-XMJ__PCFAz4uvC8ufPgpnFzx4wtOOD4Oy8SJEydwHCcO4-txmCSO4zSs4vBD4T5--LhrHFaL4zgeHG9x43h4-PjxDT6DEy_xhcJx4_AHfTzuSLB66McJhCEhCQlIhAAKKSBIEcRJKxwAgjkhmLRCOACA4E4IJq1wAADBnRBMWusAAII7wRiT1gEgmAOCSSuEBEBwJwST1grhAACCOyGYtA4AILgTjDFpHQCCOSCYtAIAwRwQTFohHABAcCcEk9YK4QAAgjshmLQOACC4E4wxaR0AgjkgmLRCACCYE4JJKzgXDgAnuBOCMSuFEcoBBwR3QFjJmDBCOACwMMEBx4QAEijHJABYCK4YcgAwia7gUAARDBtMAMGkuNIBoQTwLADBmBNMCsuZEwAAwZ1gjElrRGcOAMEcEExawaEAQDDzgLBMCuOkA8AJBwRwwgLJkFPGKaWEeWYAQBwGmkjxAOPCCcYQU8JA4QhwSAwjALDSMickcOwJwZgTgkkrLBbCAQAEc0IwJqx1UgkngGiKCaYQY0xYJo0VTAjAAACMASAMc8AKYYCzDDAmFBDKAmAZYwYIIJhlggkCgDAiAMCEI4wBpJgBTjGmLDUAGOoEFcIY5wQBlBinnBDSAGYooE4wxpyTjhkhunkSAMCQAOYxy5gQkgnEkANaGGCZEAQgxBw - - 84352eee - 6a63b7fe799e37c708773c2d84139c90 - b8f0cb2272b819eb039462f2683c279a81168d26 - 1572864:QlPHeSEsqc+CJsfmp+lkRZTNElwARxBkvnbuDoFw3ymsWiOkRhh36I0w9K:Q5eIJs5lG/ElwWBkvbeH3s7OgJnk - - - - cdrom (Track 05).bin - 64835232 - - 5 - 1 - - 88687 - 116252 - audio - 2352 - AQADtEmSKIyiKJKCXHiCHzcePMefDxfxCG7CMCt4EvBRS3h2VNzxMMORPyi0HeY0hBd6C46JkzgP-IePcIWOF0dX-NwkfCN0H1fx4zv8oE-G_DrawWvRHx9-JDfySqik40_xsfDdHN_xcDD8nuhJ4DseXcihaT-sakYu3IJj4hlRHYV_-AhXHHqBHu6y4ztwDbmU44eP8JnxoyQhS8LVccKPTD96lML2Ff2PnoOrociLQz1y4j6HX-gdNMeP_jDlFZ_g35hOvPhxpyEy_NCm8khf4zycC2eONjsq_PCRqqihFyj84lHiAscVGjkP6-ijDnGj4XugdRnSwR8H_-jxorfwHj07HD9yvDy0H3mLe4W5HNfxDW98mGRwHodPmuiD4zh1IccPTUeqUsXxq_CZo82OCocPq0doCC8KH8-yFcdxhsh1-Oh35Ek2dIG-DJc2ZB981MdQ7ofbw5fQH3-RD2p4xHgn9C-aejhq6sYHUyrhEucxecOFHncaZH9QQWsPqw1y4oJj4sRz_PDhI1yh4wWa41l2_MCFXAoNH9XxbEN8dCGh87g6bgh89EcJH9d0XDma4ztiHIn7EMdJDfXww8yJ_7iPB8cXHT1r4IrwxUJ-HPrRqCLy41bhmDiP5zh8-EdeaMYLdD18C1-O9_BBncd5-Bc08tgTUgir9Iaf4Ud__MihScjpLqj8Eb_Ri0Zz3OjFw_Yz1JsW4dERST5ERkXIHVcCXmEa9AuL8Mc_PMqRa4V_3LmCrySez7iPE5HCOCH0HdMRUkpwKbDDHWWVo4epJEf540uNE6icIxVz4ofOHF6-IU-iw0e_48d_lM3RVTpiCLlGo4-M73CV48SLmzmOH9dwHI-Ono2EHD-0qYffHDluFY6Jj8MH-PARrtDxAj0sZ8dH4niKizlyZDr6XNClacLU-Ug3HT9-9D6uF0e5IxR5PH0GXd8R5kQ_4T_64HJGPB-F68UjeDLcX-jDA9MPH7cQtxB3wyqFXMfhtMcX4jwOwzXCFYfuQkdXbKeFPPrx45lw9B96pE9mtDv6w2OOP0MPFfmFLpbh8HgCV5fQN8Wpo__hCteOD1-J1i9-_IihKNJEhDZ6C1RatAtxviiOI1yh4wV6-Nnx6MA15FIOB71waYhRkpATCVc4HJmKoj6MiXMt9IOroceP_DPUDznelBm-oxf8D6XZFS_aT8Y79MdeEn1hnEGmy1AvWEf4ENdRaYdPPOPw4_CRqqih40dBOYXO4znw0NClwz8UrYmHq4h1tEoG74I_-Dj6yMTZHnmhnUWOn0A3HR9-oc2Ot3gquNNxvIQZFe9gSjt-odaM4YucCbmIH1JupGl4vDBuJkK1DD2uw4dVhIZeoPDxKNkKHJdC5IePPjoebQgXGV_AdlA_-Bjqo98Pdxc8aejx48fzEqqJkDphpyFq9Ib_4z0eTcZz_Bz8Hn3w48EvRGR16GAWpBe-wznxhcOJH4aPcBOgF0dznBY-GSeu4szhHMwzPNkGlUdJIk-IkRuHEz5-nIKdDxfcET3xf8aP-7iOIw8fJGfRVoR_oi9-9Dn844ePHyfe486BHPo0RKsl3HBMXMT34jiOLJtwSHcBbYWPfTly3PiI74J9PBw-wT6F58N_FEclWMd5wr-G_kg-FmE8tD-u4ybaozH-FX3w4oB_VEegaIoEP8gpwTke5mh5MOJx-EhV1NBxFD7O7LiO41N45DyMUN6FJxv0B-0ypIM_LvBR5_jxU2CW_phkHseRR9AcLTDSo5dwRSPx5-j3wglO9Dw-HT-O53jRI5-h3UJ87EcvDjQu3ALCTQT04tBmmNMOTUfPwVaOoAS_CeGFH-LmDHm4Y-fxosc1HE9-hD169IcvHi-P61B-pI90eBPa4wOPB0dv-BsqlPyGVPFwiIwqhCcuom_QkC9OFNbhH_mh4T2uoYitXUir4MdV9BkpHNrRXMjDHu0Or0WPf0fuDyqPnCR6_EpwUjtcESf6BBeO63h0occP_wj3Q4-KoIfzor5RjbgLH5ZHVNSQQ3_wI4txCR_xH66IB88O_3iC7BE8DnpOOOqMTEf_4Jgo1bDV41YPk0Jv_MgJ7S9i_ERV4xfRNzCPh7hwoccX4ieuozoH4xuiiaEOkRzCDw8eA3QQIxEAYBA2jCsCKDNQKmGAIQgRKgYgAjnGhBVKCOYcgAoYBhAAxjBAhIEMSCEkM44ghKAQRjBhADYEOIAgEdYAJIhJHgCiCEOgKOGQYIopAxAAjCgmAEQIAgORgFYQJxQw2RArADdYEAIUoAg5RJgwQDF1gDRSMKCAABAxCgyDxCAtBBKAEqEAEEIgSQ4DShNriRLGCaKwMwZggggFRjDBhCaOCwWoEVYKJwA2DABmAXGEMMGYgQIxg4CQEjAnjAEEEUCRMgAwIABBRggDABFCMuwAcQAgYxAAXFCOBAAEEaSAAQYKAJRRRDBEHBHCUWQABoYgoIRwFAAChCFGMe2UcBQZhhgSBiACgGQIEESoEIYqYAwRBhgKDQIGISWJBAQAgQFSAhEnDPAAASEEgEARTAyAUBEviADAKieQBgIgioBSAiohDBDCKIMYcIoCAQykhAohjGDCYOcAI6gyAwgAhCBklCDKGeAJMYARAgzAEEFlhFKCAWgMslBAEYhgAgbHHECIKSEfcw4ZY4gBAgiGEAQGEoW0EMo4LAEBgCmNHCBGKAAIMAgRAhghzDFDJCHKGAARgiI4gxAxGDAKwFaICDCAAAIBgRhIQDGBDAMKQKQEM5QJYIBgCiAEqQIKKA0QE4oZwARhhGEAgCCGAOcMAwgIZgWjSmElAIQIemAEElAYgQQDVCjFDVDCEE6KEIghAAQjzCBkBCPCEOaEAAhAKwAhjkAhnFEMNQAAQkwYQYiDxAEllGUKKiC8gAIwiYABgjBhIBJSASUEA0AAQQRnwggmKHPIGAwMYQgIogBUHAKmnAECMeEAYlYAKBAFRghLHCDCMcG4QpAwJIwzEBimAA - - f8cfa40c - edb23ca81238eada2e14a77f12d7bca1 - 03aaf7341b3c9933e4aef8146fb42b452c2548b9 - 1572864:VCCL1nhYju6Pkyh89Kj6ykfggUo2Vy1SdSK9ZjZGC5afvPh4PheAKf:VXL1nhYjuykK8Uj6Fwo2AnK9ZjZGrfvPhaKP - - - - cdrom (Track 06).bin - 78806112 - - 6 - 1 - - 116253 - 149758 - audio - 2352 - AQADtIqiLFEURVKAH2eRQ8jxMAE4t8OnIN-8QXVwGLhD-MfxHP5xHOKJH9BpuMB1WA2BwzxeAScN48MPH8dh_MSDf_Dxw-eA4zC_4cfhE9D3ws_xQ4floz0qCs9xGCec48fh58APHx9wLYdfHD984niPBz5-CodzHA_8GvjhEzh-mPnx47rghzge-Mdx-DigE-KNF28OxzVa1MPh4-EK_4iPI_fh43gOv8Oh4wsN97hyPIRP6Dj84V9xw6cFvMcd-Dic4zhu-MPxw-eAG-JpHA8OywQOczl044WP38K3DJeEE34Ov7jxwz_eHMcPf3iGH88hVh2OHz4PyD384AZ-WMfxHcaHf_CJ48YP98dx1YLVAHfg4yIOPzihRoPqXHCPC8_hbD2KKsYP_3g4HA7-4z_c48edwa_xmfgH-MSPf7Bu_PjhHj8--KHx4w3E48YP8bjw44Mv4_jhhzgu6Bl84jjE4zh-uCfeHX6I48SXwcdf-MRxvJHhH8fhEz9-_PDx4xEcT8B9iD0O_fAJHId747gOP8Tx4Dt84IcPHD98Co9gFcdzfIcv_LgP5weeAT4ewn_x4IfjHD8Od8Mf4_igCz50WA2OH3d0uMePHz7wHI6PGz984MMvuLiGK4ffA2_gH7qIwzKO4xB54RXeHI5r4MThfnjh5_jx4yoc9jj-wyd-nCJx5fDxHj5-yDgPMTeOHz6NH5-OO4Nx4oePnzjMGy8e-DSODz98Cj9--PihL_BrHIco06iOdsEllTB-PIRz_MdzuPpw_PAV9Bna44Zv4QF8JUbR7zh-4_BDw4fwCeaCF4e5EDo-BSfc4_BxHPdh4ieewy-OH18O9zgO68Z9fMxx-LjDFf6BGx98nPjhE8cDxzUEfbjhAz9cXLgOVyFqdM1xHz5-OMdxHOaNt_hhLjSOO7jgE_CFHz9O-MaPw6fR6UTFHYeP97gDC8fPwb2BwzmNEy_xwDmBw8ePy7COAz98HN9h_MYPH8cDf8dx-MSB8xCP4zrMhejRZ9AHX8KLK8rh48Nx-MVD-Dh-uAp-HD8NHz8OkfkmQIdPCz_xKTjh47gP48JzPIKl44dPALcEMweu5fCL48Ph4xbE_DiOj4fYWzhu-KHRnUU1DudhPBx-_LB-fIePH1d2-NNQaMcXGu7xQ7YEHz--4fCFw3GOH_rxKB-c4_AvfHGg4x4c_MQDH8d9XNEhHscLPxmOw6GSQz9-wSR6dD2elXCId_ADHIefC8cvnHBu4Ib7DcfhE8IDV4c-HO5odCh--LjwC45DAi--HO6P44d5_Lhx-Hjg49BxLYf1Q8dHGg1QD8hx57gGP8XHI3a4A3fh54d-HM_hajp-_PAhA4dz4IGP44G54zfg48ePqxPc4zh84tB3uMpxHKdhOsB3iD1uvPBDYxJ64cd1fLgzWEevHt8y9DAPf4LVcENxTD8O9_DxSAd06CHc48dpOMdxZYVxHA5-4sE_uMcPHz--4_BlHD-shoC-wD9eAZZIo4fqDD1-5MWd40hvHHc4vDLuwD-6Gy_64YTx4g58_Hhg7sB5iD_-D3cEV3VxQR_8EPhxBz6OK7BaHHrgf_hw4fDx4CqE08aJ33ixD-7h48vheMGPXkf1ZVAX43gCS-uO7keLfdAPH36IC7hx-HhgFXhLPIeZ48txGgYO5xQOWBYOnIcPnJJhAA2g11QYDwARDAAkxRBMIeQcMgIAaR1AjAklhRBOGCmGEMAg4IxgyjssHANACGGFAVwKYYRgFiCHPANSCOEMEAYhBDgDyIphhUJCmMKAEB4AK5gBEhkjGAPQQSOMEAIoD6wX0AopjEBGNCWREAYgDwCAAAMiABVCUEGYMYkJIYB1xlAHrGBCGGeAMAgAyYA1RjIjkAGEceEAAIBRBYAAQFECgLDCAYYAA8gIYBETUhBnEEOAIqSkU94ZB4QBgBmLjOBAAITEEAQYZxRiTABmCRPcAY4Q4IwJ5YxyQipmmTDIICQMEgYyIAAjADEKDHdOIssIEAgBZxQTyAohrDMSGSAEQE5c7xwSwojDgAJOOCcoMEAIApBRSAiADEAIEGGAEMACYIRxAhmBBABKCgCUcAIgaRATzAkAmBIUMaGAUEYQIhAQADDEoGAACSuFMYIZIBgxBkhnEAGAEgCERBY4ozzDQjkjEQIAKSmAFU4gJgRASgAknFHISAEUlUwADwBAgAqGnALESeuMEsgg4ITyDAgrhjBGIYSUQJIJo4BDkAHOiBQIACSIA04YIJjyQkhmjEBMCCYMAEgsCYQVAAAJAEGAMQGEAwhYqhAAwkDjEMBIHGaEQcwAJIUBWCDAgAUECSUGMIxIAYhCjAHOgEAIOSIAEoMhKQGwkhFhDBDSGYGg8IoBi4QxggAKlDAGCACAkMgwg4xASDjEgGXICAGgMA4gMcwQxiLnCFMCAISkMEAagAwAgigWABMIMSGcYcg6YRgTADGBgDDOiMYEQEgJhBRQwjCAABCGEsCAFIIhJxAQhAAvACNAcSQREFY8ZZwwACmElFHCGQAsEwQgxxRAwismmAEAOYfENUYZ - - 83f51b3c - 1c5bee7cd55c07b77ea356aa065032e7 - 0e395e1620ab9b89a1ba9a1a2f8a8e8c772f0d87 - 1572864:ZHQAKEnRnE44EkTdkkJfSPWNsuyuTfAMdk0CMQBA+AHw+NlZSbdsjR+NyNe0:pBKgE44EkTdkHUNOp0ChBHA1Z+sZ - - - - cdrom (Track 07).bin - 91796208 - - 7 - 1 - - 149759 - 188787 - audio - 2352 - AQADtIqiMIqiSBGO__hx_AjKPMcPTf5h5SNOFf5xfCuOH38O7cTTB6F-Da7xo5koo0X64Q4PbT9-obQeuCquwFULPfBR5XhwJvTwB55l6Mc53FnwXUYlGX426EIpJahj-BcOJ12C6idyScLlotQj-HiP8MS9WFBz9EhHwcwy5yhXhFYuiD_6LEf848UlG4-M-sgP_7hzaDt-4ulR6rCTHK5TQc_geOgc4e5wHa3swNOh6yjuCPJx2WiPZnqGPhdcokdzVEmFWwryJLXwozcuNCuP2Lh8_IV2uNJQDk0X9JeGozqJRmGEX3hevMd51NThOOh-qLiN9njyoNQio8_gkUF1vBlxUqlwXWBSp0J4CUceDp-D6xaqH5IuHV90mEkYhD_C7KjMxAHZ6GAkQU8mCllIzTiNo4lzlNKRUX6CNxCjE89x5Ug_xH_wfGh-tJmCS0kZ6Mc74zOFpkMXZsb5GD0PLbPwBeVSuDpK5tAuNEkykjiVCHlc_EHpI-WG6sMjdRq4gxeao1eE60UZDl8QKi3uxHhlPD3CDE_04jo0uXijCz9y-egLdzS-wx2H9KjUQe4RL72CvsR7tA9-NCqNUGJofIKWHf2hKzd2Xmh69MR1NDoq7hrKFe6D_PA4YQtq5XjOBfGHhnF-aFaOB2GmagzyC03kQ27wRUe-o-YF_0G_4IjFsAJ5DmIWHgfLo1eOpmqhZ0cTL-jaIRYT4UlqIfQNQ9fhC03U4Rouy8Iz_GhqQ3OUHe9YPEd8HteE8_hRP_jga-iDeMvxVJCPJq5RD-GjIY2kzLB6aA_uMMclfEeb-zhNwQ-0H_eEHz-aSjpKBkwVHs2k5NDQPMtxEvFvfCcqDR-PC86HPAKz4y96nDy0JjsuG4eWeDm64o9wMRO-o3YKs0LJ444S_Mdla9B6vIansXh6PMGZofrwDqpSBZct_OiNC03UDF-h5tVQ_jh01DmJo0eTH38QS1rQXwibGz9Kwj8qkxq0PfjhscgzwkYp5fgr9ESTiDoiSyTepoIe9MeUkcHHGT2D9R1U-njEHEce4ooSI9_hQVMmZsUzhCqaPWgdeCz-Ix1zdJ-gaYevIl9yhEetWsPx5IO_Q9MifER_-B8uHvk95GHw49Ce4ySRJzNKVUgfXIeooxqRSxd-oi6cIyRxLSMq6fB16Bv8fLgI_ygZCU-C78d94od2uKLRGueO7qkQyiR6pEef4kKtwqPg_MjFGJd0HO5l9EP54-tRansQtRd-aOk_lJLwHI-LfoHjRIYoVD5y5XjyoHzhC33wD3nIDOr6BL-H0GKOxgouIvzw6NCUHB-DXBeuHP0Fv0fIB_9wjSmkXWhOgXkrfDQeuHfw6qiORj0uKTyuHVomrkGPL6h-dGFmfEcvEj6DD4-UwxU9-EHl5chNfJOJKy56C-7hUUPKo3IU6HgutNXRTMqOfNHQxkjXA1riJcd9xExIlDp-_EkLI5S0ERfkX2jCF31mIRfRymgm5chfaDoa9YglpVTQJgWTHX2ONGZwiJqOH3zg46UC89CXmMJ1OA-6VMGJPNfxWagPv-gTEjeD8HDSHToL_0GtFl9y1FfgH3eG96ikhnjUFMeFJlR2dOGFD_2h5T2eaigVykRTEX2Uwzm6Zkcl6UFD4TrCozkuEZVz3Mh_nCr-QI8Kb8mIXEefCv9RJYmCMM7xT9DPHKEIjzw6LTNKHc4Rkj36wYxuPAu-jMhBRT_6gVXSOGBSq0FY_If2JSEcMcPh7LgfgfpkXBGhzzhxh8hYyXCkB632gBWYx0gPx0QXKVD3oJkt9FOO7Bku5KHQ4z9ko5KkD49Q8_Bx_OimjLioCz-apyiZ6HiIH_xy_HheDVcm46jjFD_OwzuqEXJIXHKm4UeYo1WIa8vRH_4S-EKlC7miXBGu9ajxBPdhpUeoDeWDDz6PUouQN0YbHTpJ_KsR7sGFiuFxnId55KjcQJeJI0uiHyeP49pxHjG5DdpCIV4UfEbBH-kJ9UeohMQDFEwYJ0cu5dBspDHuwfmFC8yL6yh8_LiPysRl9Eg_XJEMLcYVVEaj1sYVSJuK0MfxwznK7viEG6E8WdAZ4jHy7cY1OHuK3yilF6GaHPoRHid-ND9qHT9C0dBy5MqF3nBlcA6sIj-qSYdGqQ9yw8GJZ8TLI8U3HlKoLUfPI__hLRna6EN5OD7CTVGy4lJqaMV_IQf1I5aU4To4GhdOXMOLnFvg_sJ_vEQTdiy-w4yD_MeP6rOCZjzk42h4XDm8xYXmEdXRCGeIatGuwNuJHrXg4x0c4w8sOSzuisGjEKJDlFKOHnqFizyuKMK1C81DXE0TcBuaD9oaFn9QNC--o8_hKngPMdGOHpeSCbeF_vBVVGJxzkI34b9AHedxfGHgKiNOw_mET9lxLUfDPDh6ojl-dA3EHN4bfDz00fCWHteKp4HjFuFn1DIeHelk-BaO_2jUzLh0_GhuoWQO5TmaqnhYnMTFwEoiVAyTQhf2oF-QH-lIcfiC5_hj-DjxMHB7OA8eZqis4_bQbw7cF9-Io9NCAEOMQkohDgRxCBCAAFwOAQKQAkoIpQAAhAAJFDLgAcSEIEAohAShAAijCAMEEAYIIgIQKQBhShkAlAWGCEgQIEohBAxgDAiGgEBMMSEIQJgAc4AwQAFihDCEISSIAEYJqoAASACBACGCCMYRA5QogwwCRjigAEIEACAAYgQBQ4EAgiIACGDAIkAMM8IA64RQQikAkABAWikMUUQwAhwBjDAihASAKEYYMEIJBQQliEKAkCAACSMAZQgQKYARACjEQECAAiAQEIggIIhgAggIDBACAEaMUAYQqTRAhhBCLAEAEcWAIAQAhgRjQBClFDKCAEYUKEYICggARSABLDGECAO4ckAIYIBDiDAGgRGUASOIcIAIQBRQAhgCAKBgAYIAIFQgRZBgRBhAEBIAEQGEUhwgghFwAAGAlBJEAAEEMAAwhYQwxCgCEABAEAEQY4QCY4gyAggAgKBIIAUIcAwAIxRDADgDkAJAAECYAhIwQAQRAinjCAAFAGGAMkgBBJwCogECADIGICGgUAJwogAgRikABCAiFAGQAIAJhIQiTCliMCAEOCMMUkQQBRARQDAjiFIACEeIE0JAJABRDDiCFAOAICgAUIYQKgECwjhEFAJEACMIQFAwB4BxmBgEBHIAACGBMcACgBACgiBgmnAMCEAIcUowQQAAwFCAgAAGAaQUMAJJDhBCjBmAgEDACEKAIIgQxwgAxFhhgSHAAAQoMQIAIQQwAAhpABGAAiWQZEQxIABAgiAhAFPACCAQkAQQrIhxwBglAREAIYIABQgAxoQhAClgDDBAMeEIQ0IAxohQwDhjABEIEOIUAwQAboACBDMKIBeMACGBQUwBIwwCwAA - - ce208f21 - 043d474b33f9a4a5abf6bdbc6776329a - 5b67b55f9cb239d6f82bfbf37e23f33011874d3b - 1572864:ROux5XKaLtemPbgKDNiBWdI1zLwRy53zJX3KpCH8g1IyiCxBQPSItEUMQtUp6fW3:8uSa9g74dI1fwRszJX3aZgiEUvfIfFd - - - - cdrom (Track 08).bin - 59637312 - - 8 - 1 - - 188788 - 214143 - audio - 2352 - AQADtEmSKIyiKFICPfiRHzxOGj-cJ8hvNBFf6GqF_EJ_bJSOk3iWYcd3xISvC6cy-IP24-jhoydeXEc_-DD4EEdzHIcGH8yJs9DRHj7E40fx4cXB_GhGPDz-QHBM8Md14WRQ68WLJxfx48UHEZ2Hb8jR_CipBwjD7eg8XMdx4CbCweiPSPChnRWO5lLRHj8uo-ch_jh5-PhhmUfnHUdv-EPLHy_0Q4M__PDRHT_yBxeHo-HREzm94X_QqEXZ3fjRnNAH-Ih_9EbedLgG_eiRFx_e4jg8Hv1ynEJ-9HhN5Dv-XPiLvEVX6MuG_gjzA6eCHz2J9MtxCVpGU8GpHDlTNCNK5jieGj0RhhQuHj3-BL6FD9rxo_3RrByOo2SOhsePHs2Ls5g6wn-MHsePHtYH7ThyfAd-9PDRIz_ugcePH72JD8Z--D20Bz96OD963IwE1ah12DqhkvALa8N9_IOuw_rxx3jx47hx7Ohz6KKIE2yOS0cPv-gBHb0S-BH6H_ODhgt6_EcPnwjv4bjxoVeJBj9a-MjhF7-MPxn64HiPvtDyDa9k5GNQMjr8Imfg7yih8_iTQiNz-JTRfbhwHuctNMcH_caJBz5a6JiCzvOhG7_w4yzeoxf82NCzw-MT9MOP5uiM3ziaSOgPfodeFsjR79hxFc_hrTz64EKe4sePHv3xseiIj_DxH_rxtMOFXpqAnh58_DjhH8fhB98PnSu2ox-Oo-7h84bRCz84H0_xHl3RHG_woD2mqMV7_Ghu_PBxlEd3HIdzBOaOnvhR_fDxIvx0XIf-o0dzEX9xHM0VXKnwD97RB-dxFs2lo-zE4Tv-9Ch5uIN_-AteAZeKaryO0zWm04PPQ8OPD2FkVCf-IDyo72Dw4A603miOZ8dRuYZP_HjAw8IH7ceFHN-B1yh89EN-3Dhwoj-MPysOv9DK40eboTmeDv-hD8177MeJF5UO1A984diPLyZRXJEEMnxC_OibCH6UYzpyG2GWPUSPHz2siQ3MHz_0ToarPcOH42PwHFYO7U9xWYjNEOdxofmPHg-qvQi9o9fho9uP_ngiVTBv_OiH9wm0Mzhu3AnsZCip4-XxJUsM7TDroyfxhBXxCfqH9odcsjhV-Ef440era_AvhHuHH9WhBQ_-o5cAx8VDfTjMMUYpHrUOf0fJ4jfxUDaahxuuHj3eDdeMP9Dew8eNJv7x4Md9NBemhhl0HDq6kKph9MZnFC5kJ0dz5Md14dmRow-cHxrOI7_Bo5aO_-h65LpRXYYJ6IH5QjyO4sUrFUeD6sOPQ8sP5sKP12iO4zgOH9oNBMe34vhR_YOPHtmPPxB4yKXRw_lwCv_h3zh89Dv04yFuHT8eHu-N8-iZgsmPC4eeo6l0dN5xPfjR7Kid40N_2MWPP8R7-Ed5PB-O9h60vLhmXEVz40yIH_5xqgY-6DLuIO_xo_jRHvaHPtGR4zLw40d3BcZu-DiNDzpOPPCNLz-qF72wa8N7aPgiZEmq48aPw89QjUV0C4X8wBlyHulb1Mf34IT2YTv64JAi8gmamPgxovmO_gh__Eh1HD8U_fgR_MePH90NH_xd5MkhV4fxHOfxT4X7QrqP6njwo4NjvC7Cz7jQsnCHw8ePNIfm6RhC_7CPr-iRoyd89PgL7UJz_PgeHFOK_nh19AYTTheO7-gK8Uc9Hv1xH9uNY3oE7chf3OiHn-gN70fl40SO-1B-NDn64M0xRzlO1I4GPzu0HyhJ-Oh340fZwQ_044celOIR_Ud_XD989AwQwut-CEZJyMdxUWiO6riCF1oDx0zRP9B3BT20nMGXHEeD4tNxfNCeHPlxlDwe40dJNP-RLzr-Ak214eKRW7iGc0VarugzQ93QD2HG4kf-FD-0KAzC4_RRDvt4XAh_SEXuo9ex9Smq9UCP9EZNebigRUfv4S3-o1WE5niO_Wiyo29o6H1Q-Zji4MePPoT_o-6hH--RZ9aOXjjFwKLwo2dj3EWuoxbuC9px6OKFO2g-9AZ6G2LnDYePHj_6sDgAgjRxHBpPACBEQAYsYYYAIAwlBhRHrBNIOCscuMS4JpQAIIOhGBLQGCYAI4JRYKlzgxDAKLaMEELEAI5QIowwgEEBCFnECOcINVAYCSSgUBBlAABAMYUN0UIAqIBmVBzCGGRKMCEEMAYIBQAyBBoBmAGKiCqYskIiKxwhyFLKBFfAAUREREoRU7RgDFPBLIAIWCZAogJYpBxiZiAimFCIICYAIpxgJNoByESgsCJoCGGEE0QoBggRRzCDlGBGSMYMYUIQQpQgSBhAgAUNEmSNAFASACQwQCJEBADGEKsQM3AohgBVQFNlkGCEOoCsIAgJAAhhChEikHEGWCodAIpaZ4EQhCljjQACNEIYoswK6pRxgiIqiMGMKCYEUAwYQYmAjghsCAGCESOENEAIQgARAgDvFIFWEEYBcAIER6XWREmyBaOCWWayYABoZaBQDhigBIAIkwsQSQoBAiQAUEijgEMCMQQIoYYZCRgxECEAhEiAAACEIEoIQhUQjhkjCMFIKIkMAAoo4iQAwBimgDROCICcYIIZoAAEiikqBADICMOQIMC1zhwhTBFFkGdAAqGMFgQQIwFRQltrQGBGBIMcYcDBMSix2jIkBCAEAwQVdoQAYRgggCgIDGMEEcKAEJCBoAkUggKHHEFWCKMAEYAREYCiQDCrBEDSOAQMQwIJqKgFzAginOBOIgCEAkIYpChicjjBAIAGYYMEGI4AIQwhUEqQCCEWEISQZYgAIJhEBBIDADAGUSYJEZEpB4QiCGFILEIAUIGUMAQJwQRIBhgmDFAKEO2QIEwxB7BTSClDAEFGAyUUJQAJSwEkDhkFBBUACAIAMAhJx4hBQAEjxDEEISQJUtQAYYAyhAgoRRMKACGMtkABQYwwAhBgiFJCOQAIYIQLJoAxzjIMiAGIIUKEsAAAwRAhhoICFCTACOQIQQA - - f2e1d23d - b16f6bf64d62005e08e01292ef2fcce9 - d39945531f75c0b25e6519420d445b4024db07d3 - 1572864:uG9F/U3AjoCHF1xF/Z76oXmTcDnhEU0V75xi:FswjoCH7fScbhaVb - - - - cdrom (Track 09).bin - 68986512 - - 9 - 1 - - 214144 - 243474 - audio - 2352 - AQADtEoShVEURVJw_PiFQEfgOirOHLxuOOkSC7eR7DnyHk-CyR-ewM-PPrh0_ELytEJ4OBe64sfv48crGf8L4MeP-5h-_AgZPDx05TgRrgz8ox8i8YPjPLgUHH7wFSF__OgN58GRHxZz9Inx41okNHxQ68J7aM_hGj10NF-O8JJx4hVxohGRHzqzHFt8PMKz4zx8PMeJND9KPNTR7zDC5_gDHz_OnPiLMEfYhcdR_WgeyOZxHf0Fj63wuch1_C784MGzHD8Odz8q2sdrHH-C_sefo4gO6AoRXgd-4ERz5MeP6wirLHCk40ffKviOZ0TI_XAf9FmQE8dl4T-mU8fFS-iO8_iBPsKP9IIYOkEkPFdQKQ98_DgOH8-Oh3CoHvfQD1fxHO3hKi2OI72JB3pveEB-_EiLPkMPH5Uv5M2DRuJRScKNPNiO63iG8-gPj9lRphfkozeaBzduaMLho1YW6GiC8MHDHQ9CNNWNR8GNHD5-4slQoYkYHTN5_PiNfzj-o4fPIz2e4_AP7Tt-9DTSXzj8A2fxwzn-41sO-zgu4YR_3EP9I061B9p5hKGOB8dFhPBxHsqOvkdMdN3xH95x6zjhI7xxH4f2wCr26LjhGc-u4MoD10afBflR8_CR5_jhQ5WOTqfQL4fPoz1-RDqeCl5CGZ0vhDf8QxMN5EaP-LB2I5-Cv_BnXPiA9OiZ48JR-Dy-5MAfmIyO6ziPI0R3_GieAC_6G9t19PhyoUdzHjf6DP7R40fYFf4h3sPRLjP6w9yCE-LI42IGfxWhxx6uB-mNHr0GH_9Q_ngTHT_-o83xw-txRPtRqCZudB38C5oeHGUQ5scXBid65MdR9sJ3FedQ_fgEkxl-YtLRG66KHveNHhb6KIeuDz8akUHIKBfOHAhv-OEQPjSO-vCPT3nwInVayOkQaj9-XMeNXkF66MPDB3lvnMHx4MARnng6BZcGRdIvmKM1_IfywykVhMdzfNFRn2ie48ePxiH6hEN1WO2NsjP-C-2RH344fPSQHl-QHtVH9BCd6ahu9Ed6Hbl4HCJ5XDqOszguqJaObg9i4Tn6oDlx4sM-HCUv_DL-4D36_Dhe1Dp8_HBMhMatQ4dGHo3k4w-eCtcNzceUH3uIHz3OGaL-4dTR24SOZjomUbtwHif6wtnQ6zjyByWJfw-uHbfw6sjzA3rww5SOP-iHH0elFfsyiDx-NF-QK9iP_oIfhJ9x9Id4ofPRw_xxSujjQbuRPujxo_MJfxeqrTd-NOiJz2jO7OiPI5cOLTcO__iRJsY7fMihHkdn3EcPv-hPoz-eC_pcnD_SiLiP40cwcoF-InwenMgzE_-gHekjodSD50I_NM-MXAr6vNCh4x9cnNkhfEYY5zhuooQfhGuLY3qN4xWCIkcv6Pge9MeZHBpZmEPIDveLHz1z-IlwGOEafDHG-mjGHn2ODxMPV0WPo4eWWAK-Hmjio-x8_EJ7NB9eozlK4qGhU0YfNGN240eF9NnRdTJ2VIersEOP_vCL6uh5WGFQi0DIy0iyKoO_oGtxPWjhGd_wI9fxCXIzOMoV4w90obYRfnhxmDxCcsd7_EXuY0909HBv9HhuNEefBTn0o1JyWDu-pHg14LyQcse1cLiJLdXwECeeoGcqfMNzXESfo4l9vJmID6F-eIzQf-gN0ZuP_vgv9DvEETduuCp6ASV3Bc4edBGhPtgPLffRFydOofAuwEePozpEtBw-lL_hG52BHj4Of-hxfIdG5ki5CyVzoLnRF4-C5jL648EVhJkO7UIPd0eLmSF-aOeRXnh51HfwIyyh5UfeHd9RHd4Go6-LnkaY70iutMOj40dPI70UaDpy8XiOPjpyp4Oe6AhJVMqNzTn6Fz9yopcA_ULJCP-xfjcKc8WL4y-s76hofOiPZuKDjzn-A-Jn4_gQnrB1lEf1Fs0eE2fxIzwD7xZ6KOovuEdLHb_RchAVFj9-pCf6ybj44ugzwsdV5JzgEzqPH-KPPgvKQ0vwjETlCX47lFKOV9B4-CfqLUVOoz_840Rv3HiOZj_xLccfuCi74PzxVSia78OXHI2eCrUkVB_St8ehpUJ045pRXChD_PiDP3hElIftoj9OnD7y4OHxNMd_7Nlx6jEuVD98yCR2Io2EMhd-FeFnQayD4sjRjDl6AKQwYi4QYjCBQiLADBACGQoMM0AQQQwkCgAJqAIMMCgEMoIJJJxhIhihGFKGOYEQFQAgQhSwaDDBAIMAAGYcIEgxwqQQhABBAPHMEGQcEswAgyBQxBkEDFKEEMgIEEwJIJAAQCAOEBgIQ4MccAw6gRBBQgkFiWEEAIAoksAQpIxwjiLAQGDOAmGBBII55RBQ0hFhjBHGgImYYEAhQoRUCAyqmBDKIKYkIFAJBgVTAjJghAVQKMmIIMAyAgwBykmCBEAAYVEcEQAAICACTRFikADGCOABcUABg4gBgBhkhIICKEIF0kQAwQBihBqlgMcGCICEQZYgZABgiiECpDMMUgWEUMIIYggASgCkhBiGWiwcAEQQhhggzgkHgAAAAciUYZRAIiwByDHhgCNMUAQEEVQpYAgBxFggiFEAkAYYAgwB4pygBnNiBGFUQbAAJ4IIgIgSDiCDBBUEAAkAMEAZYCxTCBukARBIkEIQc9AJR5gFzglojAOEAUKAIAg4ApwywiEqAAPKICaMAcAA84QDBBDBCAAAMEGFVEAY4owBREiCHBWCGEQAIkA5o4QAhChkCQACAEKEA0goNRhiQiHNgCIGKASEQIIpgQywQDiiEBJEOGCBI0wCJYhnABAAkAMAAEYYQcApQgxACgkGAAOCGAMJJQIoAQkUzDOiBDMAkCmwAEAAAJRRzhjDGIHIKEKEElYYYRAGRhkFGDLMMQCUQMIQMZCSTAAlLDJCCUCcAYAICw5wxikkhEMOMZMcIIoQKARoRBmDBKOCMegEM1QIaAkCzgoDiGFWCKEYUQQIAIQgThCDBEOEUMcEMsAQAIhYCCAmDDGCCCEsFNQBIZgRggAABBUMASkIMEIoIIBQDAElBAPIOICUkMIwRikQBBACGQAQAGIIAERERUBwhkgDhXQAMmEMAAgYQggzgBrGEHEeKQ - - c02692e1 - 54f1a5a8a02c56ee3a7bb412b88fabb7 - 75cba3f2871a809732f5b73a2da0891111f2641a - 1572864:3vtCFjJahS9n07BF3YwSbpqz9S2b4pU1s54JfUg:wtsEnvpqz111s54JfUg - - - - cdrom (Track 10).bin - 37876608 - - 10 - 1 - - 243475 - 259578 - audio - 2352 - AQADtEoShVEUZUnw4_hx_cihG2Hy4OUyXJFRNRrhUDqOEL8KfUGesPjBW0YPn6gto3vx5iAujS3yJ_B36DBznDm-GM15_OClQ-_xdwhDKsd04Tx62M2F_IeOrwqs4ulo7Mwhhj7a4hf6oOkr6IhfNC465IeuGj-ipgeqw2dR8sJpfEPr48hzXPhxiD-iSzAfHD-acHiR40O3E0cfVG9x-A_2QDyOPDh-OD5qHz-QG9qbBmn9YMKP3nD2FaVEazgixTU0ssOVREeOHxUfWLEo4SWeHZ1cIseDarugwsx2oWdGfA9-7EMPx8eFi3AeMIc28YG5FeFx52BEDj4eHT_SS1BO9MH34cSP3snhL8d1FTpOengZDr_gFz5x9nCpQzuLkkfz4T0eFnpNNCd-hHmCKzv-oftl-CH6ZCS-I8dvyJFxh0dzGv1xXMmhhzrycLgYCk8UhkZ-9Ggu4s2hSsIvaM-O5oyOO2IOOdtx48ePf-g1C86DPhf-lMJ3NKco_NGhX3Au1DoKi8mH3sSPPt-Q6sRZ5CQ-_AS0S3iNo5IHX8FP9DkeJepwPHiPnpCNH3mD88dxwceuWMhn_MKXLUep5FCuQHu6ojmPD1eH80FHiOSGij-O_HjwKyjSo-KgH2eNXDiOoZuP9MfI6TgRHD98XE8B50bI4g90Cs9xSkfzoMd7HHou9MFZGUgDdO1xnD-C0_hN9A8s_McP_9A3D33R40fT4yIuCzjCX0g14_hh9IT-B_Vm-EeOH01-fGYQRkF_4zxxHn2EJ0O6hUfZ45dxKeij49SIkDh3KEr0NOiPR6KFH6dyfEOPS3sRffBT_ER_xB9x6M3xthn6wHmKXsGPnlXgNMzxHdVfnOhepDzxXcWPO7CL73gunEKoH_iOH6qfoM-PhnizHJegT_CFS0fO42rRP4WNf4jkHerWMziJA_8ERbmC8Dye9sGjEReZ4znCH02cKIeO5w_OC72E5sdPVOrRlUG-45hv9DXCfC--4yeULztOND-KHj6Ff7COEMePHv5xo8cRLvqNElCv4-jxD8f94nB0FM-L7og2-QjPYhqpo_nx49CN_zj0o5wdOEePH5pvOL_R4zl6OD80qsePH-34wId2_Dou3EOP4xOe4z9cNUafefiO8B18HZUZoxeeUPhipOvwrRsUbQ2u4eGFo_zh4_iP7xPcrQr2Hd5x49qhdcUv_MI1C82XDF384xEqdSmaH_nwXpj84Zhi4xmD6xya7ejx413RHD3aEX5RH-EPv-gNPRuAT-gOux6uo8fHo9vx8cCDH0Lt47iG_LhQTUFOfHg96BeaHw-e4xqPPkWz4z2OY_Lh77hw_Nhx6HCQB8cP_-iv4MeR44KeorvhBz3048X148ehyMsK__iH8EfuEeXRnBN08ThahYW_YNx0WD2-4HrwHn_wPniQRlYQcho-4YeekOh57LLw41Er6Mqxo2lD4k-QK_zwXEN5HOlpnAgvHdcJVKeQckuF0yp-9Be6Q8xk9CKuGu0x5bi044cUaXCNXDtwHFcdZFaWQ9_xYjvyLchHlDP-_HiO5nzQB6p4dCKa57iI_fh4DT0ewsej44nwYct95CRhoseP5z3-Bz2e4yhqhYe5oyd-dNQx5R9eD_kFLfURakvxK8fVoMkeoztxKsMvhIcvBX12jMfxP9DyCz2Pwkd16egFkRm34Hjh8-jxD6exV-ihHvsXnDnyDxe-DocrtOfxHEf0zIKe48ErfXguVD2aZ6B1Qj9cx8FJI3x8hIk4PPzw_WjONIL2EB-6cD98UM6PL8cH59Dk43SAphf6E9Uh5uiFnkJDEvrRqD165PtxND3KHx_C7MnRqTp-fHVQUWHh67gIPxJ-dL1Rb4eutHCFD8-FPjpetMvSoTnxC-dxiA_u6mhjC2Ee_MKFdvkQRpehFz9yYpeDy8Ep4y9CndDy4OmQ48Fx5tiD82ieBP_QLOqDBz_6E9sXVNfwI1_Qx_ATkdCShh4-pnh6-A8ephr-CSVj4xch4nqM50gvHNbRFy-O_KgeXEcPdIdlvtB-NO_QA42O3riG49A87MaPH4aO_sh-1NThC48PW8uE0D30ouERngd3CkfTLUc_HH2Wwz-cFn16HDlqvRDPoyeqo1GLH00_od-RX2jOoM88EM2zDqGMX9PRDn9wHT-6LYf0C82Dd0g_9McXFb-OhiRqH_mhF81bIjyYo8l3PNqQ_0FTHcwz6DnwDVem4TJ-nA_CXEG3o70BA5FyhAERjBQIJIGQkEIgg4QxCgDpBENAAAmMAQgIARQGBBDkFFLEEQQ8YkhIQaxAzAFTmEOACwWdpQISB6AiBgGkIAFFMkGQFERIJcQRpDjGGHHgEKGAQQwrhZBQAgiokGWQCCCYYQoIwQwHAggICAPKSAYYAQ4YRIADAgEjyWJAASVEIgZAIIzDRiClhAAGAEIBYoYJYAEgQjAAABEMGiEMAII4YwiTDAwmlDCgASUUEwAQ6qxiRACgrAICMWIAo4SJ4hAggognlCBOKSUIMJJQwwRACiAyGHJOAgAYAAog4IRUgEBzABBQFGIBI0AIBcBDhiACDCIMU2aAcMAw4wRBAiCkjDXEKkkIAcIAgA0RUAiEBKEGIEKJdcAJJZBhSBkBiABEBEWEEcIIggQhiRAggCBAMKWAQkAIYohQUBij4BECGCUUIMgQLRwxyBGsHCUUAALYgsIgYKlDRBCHhHIQHCDAUoYoRoxQThDjCCXMAEoAAUZYspgRQAjhEHGAAgiMYAOYiAAgBFgHCCCOIQUAMQhwYgh1QCAtiEEQOGIUF8o4IQzhwIgwhFGKgSwIAEiQo4BQAiDxnCACAQvFIIICQYVhCjFoCBUKmSCEQiIJ4gQiVgBiBlEOAIKcMsQLYJ0QhgJjkAMGACUgAk4QYpQDhhBikUREOAAUc4gQJAoggADAEBDKIIIYAQBTZASDRighqAEEGCIYosAIAAkQCgjBhIDCASYwEAZzIQQgyhgAMLNAEGaoYBgg4ZhAkASjJDWGMSEgcIAgQwgSDBECgCOAIoGEQcYxIxAxCiFhDRAGCKIAcEwRgAAwwACBpAFCBCaMIQkBhAEIAAHCAMSKOCS8EsMghghBgDJGgBBEEQWMEMIoYJiAQBkBxABwGQCdJgQopQhQYDwBACLAOSOoAUYDIowIRABBiQBMMkGEAQAQpwgQQAjiDFOMEWIUE8IwAQFRwgCFAFQEACOgAQgyYYwAEg - - 7aa314f4 - 712af004d77a3ca1719428ff8850b651 - 9f45738a70bc6d6ef5dac6aff1b792e4fe16383f - 786432:PxICYbz9zb6VilMy8n/5nwCnNeXIXbo4it7ryWCF9bMfdbHQyuvhVgtyGN:PxJQNeiTHSNeXIAhrMF9ceGN - - - - cdrom (Track 11).bin - 56019936 - - 11 - 1 - - 259579 - 283396 - audio - 2352 - AQADtEkUhVEURYnw4zmiswhyHM3W4KGF_3CcxcElHSEXrdBzOC8eOP7xB9_Qu8KVZcVvaOcDf8d3bEpHVFtaMNyLq8Yz9MePUPxhsRc8aYdfhHIOFq9c9BdMJRFCPhP-4P5QpeHh6Ub4Q9cp5BFOBn3gJ8eTd2h-_M8QfkiWLTz-44mIssvRSMd__MSLaxqH8DG0jPRQzocWNcPNQ0PzLN-gGheaHz1DI2KTo0eTh7gU4j_OH2H2Q-eDPtAR6sqOZpFmPD_6pcIUXRV-IZQOfUf8HZsYcyi5KjjSHz-URxf6Y50y4s8h9nhyxA268jhfXD_yjEHzD_-gTCEzVFuOcjl4B5eCPsdnhKJzWOwFT9pxZEl-4GrioqeQUopQPsW_4P7QeTkcijVC-tBPIWdwMkEf-Dkusmj04daHfBDHHnEZ44mIl4elCz_-4z0-jUO4B81-aGSPxoGa5hD83rizQxb6ozlDI26C6UGTh7gU4j_OI-Q_iD965dARXjwcRVqKLj_6WWj0WNi7CLEO7UHERzcsxhxKrsMR5jx66NSFPsenjMIfQj9cJUfcoCuPv7gyIme2oPmFf4d4BpOSLB_6HOwdXEK_4LMRij4sNvCkXeBzpF9RHX9iTDaFlFJQPsW54PowxsvRhGKH8rh2I8e5JNB3owl3dCFDoskdI-yOo42Ywls4VFQ4_MRD3Dv2HNeFsEoOlS-C_2iOHx_eSMctDj2NNLKO82gcLSLuHPIH57j24vgh5qGOnAtuDz8a5SmqawJCnoN45uiV40h2EU00La1w4V2DRs-DvhOuR0j2HPF3XESjLHuEawjzBT0F3UefL7CmzHAe4odY5Ygt9CHuV3iG2HXQv4J_OA6hKcnIYXpy_A48Cf6Cfkco2sYffNmF-4OfhUYoH_Nz1M4EcwlCLsxxKrg-PB6amPkQUs_xHvqP_MIfNA8usoT1odfxB8nyDiFXD_eKR2iULkd7Hg9OXA2HV0KY_UNPC95SvBn-Q8tROcuhHxf8401OIT-a_Ogb4tFy4wj_Q9yPXsnxFzrCRFaOTkpmnEQjs0J_4S8R8oW-4I2IRjm-KuiHJmZC6NvR5NC85ehOBT9cZUF4oaoK6ynaC7HuoB8r-IfjENpCShin5OiLawOfoQ-RxbrwpsQnPhH-wGeIysGN6cGXfEi_QHscfIkLVWSOSXnxHFfR_LiFP4b2BFpidqh_aOEm49g7hHHwhRu6GOh5NGPxDOFlaPGRM6pkvBouBbWKhqOI58jVbriG7jm0nGgc7ei0jND5oDn6LLiGP_AevMmM_Eaz9Qza41SG_IO2tGjKrvikQb_iwNeRM3h-_EYb1fA64-iPHLq0IGeuoslERkG4kOiT5UWT4wqeozKX4YVVlBOP-MG3zMGPMDrRM7Ghf-h-OFq44FVM7IF-8Bk0_ci3ozf-qAkukO2Rh8GPLVeMdl6QL0HzovaD-6hiHp70Fe-R7MiTYCf6wOcx5haal_gQ0iKS5WGHM3jGokuXo8EZEu-P_C4ejdDyGBWqX2gs4tHQoyGXC_fxQ4uOcmGO2PlQ_mhy4uOFU8d_Igzjo8-hT9AR9pngB8fDacVV4peQLxHEc4i3RbD8oY-s4IdPBI-pQvuHZ8p0_BAnHX2OuCl6Hp2P7yJyLhb6a_AWqGlY-BSDPbLxTYnxRBmqf0VeHtOZCl4SBdePK8iz8KiOO8YvGWElHs1kCsclC_GXHM34DIoU5cGVD1eCntDyIN-CD88blDfSH0l0Hf9xJsdnovOJvxqmH_kXJLzxj3jU45-HJqkW9Mne4MuxB2GrGD9UT0d3He8hhyf-wg_OHT86NFxp5Dneo8lDdFJ4_Md5hIf3B9p36KjmEGGURimOZ-jyVHC2i8iZ8tAe5Me35GjEMyirI8yZFb3wE9rzBfKUifiL_0ifrHhTdKVwlhUu8sgL_Rz6MMeWE3EStnhdHLki-EHPCqEPR2uOVD3cH5VzXCfmx2geCj1yZcJVFccTKcsxyWyEtFB0HHlUfMnRrBcusoOFysgHLWMRql3xfXi0aCEaHrWIHz-upcilDt51XD2cjziT4xv8499x9Gh0Ds8RPnzgF-1xXsT3IvwFcaSHfznKQ487hDmPykKfJRQ8khW-w-tz5BnEH6G0I5wYEs2uoFeg5clx6uivBN-GH-Kd48pE5BSuBZ2PKz_yOGisF_oHP8S1kEOu5YjYBx-0D_pxHuWaI79w8WhiBrlyPEdvw4zyo6eF_NlUnCIazTmu49Lxo1cm4TPy5GiO-sUP_cK3IxKc44Ll44yFhiN-IT-0HCEfDsefo9vhZSbC4XxxXP0ELYz4oDy0u3Ca5MUDLeKgqsfZ4bmDZuRRHcGf6Dh3VNYDnzPMMQglLXIE_UK4K_CzDaGOSlxEeBlzdI4rqEZ9BX4qHD7iLS_MiA5g9FuPVw_CQ2yF8HiZoTr2w5oCc8eXB3kylciJPnOQh0yhVYmNtMdNUCR-vAIlxReOhJtu5Lhp4Y9hZx_2JchzNNEN5aeKvDmuH_5x_8iPN5Khx0IoWNhj-BFyMvAXHVp7fMhN9Edz40FffJKJzrrwRy7yRocufEen9QhzOsKXI0ejC_WhP0F-NCf6Bc9xxRmeHs13lB015GkaaHfh6Mij48xxCulz9Ed-3GmCUz96Fs2XNDiDsAoP8QxCise74-1R7RduwtqL_Eh-VHqP60GfHv8s3EOlrEW-HFOGGy_hLytU5DsOxQiRLhlGDGAIIYGAE0QBYYQQwgJEGEOOAAAIEEgIgRgwABkhFCQYICAABIIwAghggDgiGFICAQAAEIgJo40AwBgAhFAAGQEEE4Q4IhgAzilBDBECAaQYE8wQIIAUCAADFVHIAUAsEEQJZIABQjhEsECAAqMFIwA4whBQyAhBgAEAIMUANgIAY4AQShBhDGCCEMQUEGAIBwRAAiAPBHMEKKEAEAAACAhxQjAgPAGCImOcIZIYgpDkAjBAECLKACIUY0AQZAQhAhiFlJCGGSAEU8IoIIhQRhACCGCKAcEAFwIIIJAIBAhCCEACOAIEEYIQgQSQAACKDAAIGGIAEYAhAahggALgABFMHAGAEMAAbJAVSgChkBEAGEMAEIIIxbAhCgAgFHCMACIBAdIQSwgSxiIiDBCAAIAUAUAZQJhRgBIDABDIGALEcEIQZggTBAEEvBAgCKAUEEAoAAAwSglABKlAEUEAkKIhSxAgjghFgDGYCIIQIIAABACyQigAjCBGAGgIEAY4oJgwAgEClDEACAGY4cQIAZBBwgAAiAJEBUEaZYIoAhgTSgigjCNECCQIIsIAQwggAAiihFPAIqKQaIAQRgQUxBADhCTKIGCIAQogQZVQRDACABCEYBAAAYQAYJRBQCwDmGEAGAMUAUQAzwQSQgkBEADAEAMEQIgBAAwASgEBnPLGECsQAAIpYYgzIAgSBQMKaAaEAEMpoYAAAAkDlAFAkHOYAwAAYQAUAgAAgVDCGAIkIkYRBIgARACEABLAAQYkgAIA4AwjBCABmEHCUMEAAUIIBoAykBlDEQKAKSeQoBAxRwhEhBIBLBMOEECEkIgaoCwRxBBhkAGAAoMIJkAAos2TzhlilBLAASAsAIkBIgCQQhgACCCACCOAkgQ6IQAgFAilmDCACAG4EwwgoQQUjBFAAEQGAIKAJYYYjJhgjCCBAAEEAkGAAMAAgKAQRDACBABCOUQAgAo - - 866d4fc3 - 27a3b0f5b0af73daf0fbfe62410f40ce - 162fa75f3621bf0ebb53c649dd01419012945740 - 786432:dQlcqW4q03P92YPsY3Kw6mdcutJb7USKPAldww7dQaFIZrws4B4SuBUCrS:dy3PsYDJ5/bYtPA31JQTZcsZJUCrS - - - - diff --git a/CICMMetadata/samples/multiple_floppies.xml b/CICMMetadata/samples/multiple_floppies.xml deleted file mode 100644 index 6f56710..0000000 --- a/CICMMetadata/samples/multiple_floppies.xml +++ /dev/null @@ -1,198 +0,0 @@ - - - id Software - DOOM - 1.2 - Retail - 1994-02-17 - - doom - - - Games - - - First-person shooter - - - eng - - - i386 - - - ia32 - - - Doom v1.2 (1994)(id Software)(Disk 1 of 4).dsk - 1474560 - - 0x367d - 0x749f9b21 - 2729a2775d700d062f0da7ed2b14fc08 - 117637a9e42b59f75ce6b7e17be21370c3ca4ee1 - 24576:vfEFUAvpAvRlGnnyz+7lB1ODidGpZIY53x/9jO6J1sSSLNS87Q8LpeOIU8MeF79G:vfyOvwB1FGnIY5hxNWSHt8LLd8B7MaO - - - 1 - 4 - - 512 - 512 - 2880 - - 2 - 80 - 18 - - 93.7 - 90.0 - 3.3 - - - - 1 - 0 - 2879 - - - FAT12 - 512 - 2880 - false - false - - - - - - - Doom v1.2 (1994)(id Software)(Disk 2 of 4).dsk - 1474560 - - 0x594d - 0x13a68229 - ee087c084194ecd7f0acd2fec259f700 - 5c5b647d42d1b89d9199c6529486f1d52baacf57 - 24576:OPCNu5fOvENtXe/WmeVGeRTsAmExgydvKmaGhr1GYwGAjdCEQQY0kan:OPIuVHNl84PTDRKmNhUYtAjdCzQdkY - - - 2 - 4 - - 512 - 512 - 2880 - - 2 - 80 - 18 - - 93.7 - 90.0 - 3.3 - - - - 1 - 0 - 2879 - - - FAT12 - 512 - 2880 - false - false - - - - - - - Doom v1.2 (1994)(id Software)(Disk 3 of 4).dsk - 1474560 - - 0x124f - 0x70f8d3a0 - 4d5e5f40b12b485d180012fea59b2ba7 - 3fde0fbd3a33c9a5f8ec7cb9fc570bd1ee5adc36 - 24576:CHH7fNNK2sBYoNPjhkz96eEpE3GRjrgtmbNcc9tYLB590THjl1:CHH7fjK/BY8kzYeEptHg8NccI6/ - - - 3 - 4 - - 512 - 512 - 2880 - - 2 - 80 - 18 - - 93.7 - 90.0 - 3.3 - - - - 1 - 0 - 2879 - - - FAT12 - 512 - 2880 - false - false - - - - - - - Doom v1.2 (1994)(id Software)(Disk 4 of 4).dsk - 1474560 - - 0xe123 - 0x43f9330e - 5757c3329058db08f8ecd6108520be83 - 845707cb49faf201e057a19cbb8911b00fe0ea29 - 24576:DlhsgMwAmM1+mK62iQYVJ2K0BxVyaWRnjakQ:3CfaiQYP2VBxVCRnjaH - - - 4 - 4 - - 512 - 512 - 2880 - - 2 - 80 - 18 - - 93.7 - 90.0 - 3.3 - - - - 1 - 0 - 2879 - - - FAT12 - 512 - 2880 - false - false - - - - - - diff --git a/CICMMetadata/samples/pcirom.xml b/CICMMetadata/samples/pcirom.xml deleted file mode 100644 index 5b94d55..0000000 --- a/CICMMetadata/samples/pcirom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - Adaptec - AHA-2940U2/U2W - - ia32 - - - 36869 - 16 - - aha2940u2.conf.bin - 256 - - 5f9b59691890feb957c01340e7bef4ad - 940ff2632bec7fa4274c256f2128d41069c414b7 - 458efd04ee7d5b8cd90a269b568c59181b51e770cc8aa255580cdeefb2436462 - b3f3520aaef141096eedd1316c8fabae8c9ce8728e8f9514 - d87fca5176f174e6ce5b4e303b595e41ae561e51ad332b838375394d66777dfe402e403acd4d071279693b24af5e55c25cfd6944b34a9bb229fa854d849ecbb8 - - - - aha2940u2.rom - 40960 - - 0x49eee01b - 0xb943 - 0x041bd908 - 0x3ee7cc130a1c280d - e86d20cac3727a0ebaf901eeef1a283a - 064b2b8050296caa535aa08de35d051e9e3fb6c7 - 9c2f1b6c07a00c16e35c82ee79050a459568f645 - 150366229d7bf649646f432bae95b31dc2ef51d23d43c2b5cac990aaa9b389e4 - 8e87bc09e451a69cc065cacc9a22d4f52df665f8229810d8cebeb50b505a2b2a6ea55cf282454ba7b53da15b0a2c4d73 - 2328d06b688925c5807dec9b958e270ed90d6117a755aee74d2f8d688159e94f39ed4d38e58bd02c7f81a3254fea0b011ff2f9bf7a846597728803d02c9e5e14 - 768:k9kvYRjE4p9FmqPG8A/dBBHMRkxOZkw73R7Ph86W35zD:k9kgOc9N2DHy8W998t - - Adaptec AHA-2940U2B SCSI BIOS v2.20.0 - PLCC - - - diff --git a/CICMMetadata/samples/pspumd.xml b/CICMMetadata/samples/pspumd.xml deleted file mode 100644 index 5a35c82..0000000 --- a/CICMMetadata/samples/pspumd.xml +++ /dev/null @@ -1,263 +0,0 @@ - - - EA LA - EA Games - Medal of Honor Heroes™ 2 - 1.00 - Retail - 2007-11-30 - - 5030934059299 - - DWX05805828D - ULES-00956 - - Games - - - First-person shooter - - - deu - fra - ita - spa - - - PlayStation Portable System Software - - - psp - - - - PlayStation Portable System Software - 3.51 - - - - spa - 22 - 84x170 - - manual_es.pdf - - 5ac6e3c1 - 8fb25698d2ce5f8d413bc92282d18720 - 70f4c9bfb092c5bb5875a73ebe47d762bee3ac10 - 5e022c7dfd12b54d1aa9ce98ea10f7dd81b5b1ec001ac49ad567a5d8d456a66f - 393216:muQhmo9jxgpVM0fwLGviZjylkxf0eZw4CSf4rlzpEA6hm:muOjZ6AGWyla0iGNr0Y - - - Natalia Portillo - Epson - Perfection 2400 - xxxxxxxxxxxxxxxxxx - Image Capture.app - 6.3 (502.1) - - - Natalia Portillo - ScanTailor - 0.9.11.1 - - - Natalia Portillo - Adobe Acrobat - 11.0.3 - spa - - - - - Medal of Honor Heroes 2 (Europe) (De,Es,Fr,It).iso - 1226768384 - - -1 - - - 8f47eb95 - 1417 - a7c1c1bc - 36ded46fce50efd2 - 7c472f83140e3af1a2fcdcdbadec850a - d9cf3cb3a2dea71ef8168797dc64e19b665c41d3 - 261898a262cdc8652e8d2c0e978e72c1c34a26fa - e6260e593c986e7c914b1588ab842e683170a7efb2b04cca5b08bcdac5595427 - c6b5acb50e5edd85e8615495b37d1f7abf754c41b6c6f45f3c082cbe6b01bb20eb5881d7cb36f5272ba6c58764aa6e82 - 5e9e2e8400d73ed5dd42253a0059a0bfe4dd0b451c9a757cd48818c87adacb1ca6698ae5a3cf93c72a16164fef4b6b35f60116b01d6dda83824a80372857868a - 12582912:kL8uYHoKqsJhjI6kejtUDRJWJCJiJ3JmJ+JwJDrjr1JdJnJhJ8rqyrwrqLrhrcPG:GVYIVQ1IWQ - - A0100878064-A911 16 - IFPI L556 Sony DADC - A2 - A0100878064-B911 17 - IFPI L557 Sony DADC - A1 - UMD - DL - 1 - 1 - MagicGate - - 60 - 32 - 64 - - - PSP - - - cover - - cover_es.png - - 864d127f - 5edb007ebc612bde8ed770a119863b22 - a98cb55d1c241a02bbaa6b621524276898821b72 - 67079e60209d30f0b6fa47bd8c786a020fda98f9a6b95ddeeaaf7f6aa665baa7 - 786432:JRB18CIZlzYWQWcj2qnzKFZXSx9VGh1DoWDaL8hII9Z16r6:PB18CIZtYWkjfz1xWmwQ8hIq2r6 - - - Natalia Portillo - Epson - Perfection 2400 - xxxxxxxxxxxxxxxxxx - Image Capture.app - 6.3 (502.1) - - - Natalia Portillo - Preview.app - 7.0 (826) - - - - - - - - label - - disc_label.png - - 4581778a - 0ef2c3333f773fe0578b9f2688813969 - 3721908aa68fcc0b417843508e08e4c4bffba47e - 6defc6c15d16b85d4a03287e64f07c42fb99afe028eac45d8a2d56f1da19c329 - 98304:OuOsmvSE/00ZxNSnbUGZASJw84/jWOrpuu9HOTy79DtaMr/wVeh:OuOsmvPxN6UAJ4rWOg0uToDtfmeh - - - Natalia Portillo - Epson - Perfection 2400 - xxxxxxxxxxxxxxxxxx - Image Capture.app - 6.3 (502.1) - - - Natalia Portillo - Preview.app - 7.0 (826) - - - - - data - - disc_data.png - - a84cafe4 - a24a06ef4f45e0ea7d89508b616fb5fa - 13e988df0bbff40666fd902c3e26454973df6ea9 - 805230c3037f342b18c9a9b0eaad35a216582dc71607b599c7a58cb7e83458ac - 49152:++RUFqSn6d20+rI9W+wIqUen2IHrwCINYD+CGS4rFM88UlVenKCCMGB4gm6A+Gp2:+g26y4boqCgAT4rFMElsnKhhzA+Yri - - - Natalia Portillo - Epson - Perfection 2400 - xxxxxxxxxxxxxxxxxx - Image Capture.app - 6.3 (502.1) - - - Natalia Portillo - Preview.app - 7.0 (826) - - - - - - Medal of Honor Heroes 2 (Europe) (De,Es,Fr,It).iso - 1226768384 - - 1 - 1 - - 0 - 599007 - data - 2048 - - 8f47eb95 - 1417 - a7c1c1bc - 36ded46fce50efd2 - 7c472f83140e3af1a2fcdcdbadec850a - d9cf3cb3a2dea71ef8168797dc64e19b665c41d3 - 261898a262cdc8652e8d2c0e978e72c1c34a26fa - e6260e593c986e7c914b1588ab842e683170a7efb2b04cca5b08bcdac5595427 - c6b5acb50e5edd85e8615495b37d1f7abf754c41b6c6f45f3c082cbe6b01bb20eb5881d7cb36f5272ba6c58764aa6e82 - 5e9e2e8400d73ed5dd42253a0059a0bfe4dd0b451c9a757cd48818c87adacb1ca6698ae5a3cf93c72a16164fef4b6b35f60116b01d6dda83824a80372857868a - 12582912:kL8uYHoKqsJhjI6kejtUDRJWJCJiJ3JmJ+JwJDrjr1JdJnJhJ8rqyrwrqLrhrcPG:GVYIVQ1IWQ - - - - 1 - 0 - 599007 - - - ISO9660 - 2007/10/11 20:26:37 - 2048 - 599008 - 550 - false - - MOH - 0 - False - PSP GAME - MOH - ELECTRONIC ARTS - ELECTRONIC ARTS - PSP GAME - - - - - - - - Sony - PSP3004 - 6.60 - xx-xxxxxxxx-xxxxxxx-PSP3004 - - - 0 - 599007 - - - - PlayStation Portable System Software - CFW 6.60 - PlayStation Portable System Software - - - - -