// ---------------------------------------------------------------------
//
// OBR Library for Android 6.4
//
// Copyright (c) 2015-2022 WINSOFT
//
// ---------------------------------------------------------------------

//{$define TRIAL}

unit Winsoft.Android.Obr;

{$SCOPEDENUMS ON}

{$if CompilerVersion = 30} // Delphi 10
  {$define D10}
{$endif}

interface

uses
  Androidapi.JNIBridge,
  Androidapi.JNI.JavaTypes,
  System.SysUtils,
  System.Types,
  FMX.Graphics;

type
  JAbstractDoCoMoResultParser = interface; {com/google/zxing/client/result/AbstractDoCoMoResultParser}
  JAbstractExpandedDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder}
  JAbstractRSSReader = interface; {com/google/zxing/oned/rss/AbstractRSSReader}
  JAddressBookAUResultParser = interface; {com/google/zxing/client/result/AddressBookAUResultParser}
  JAddressBookDoCoMoResultParser = interface; {com/google/zxing/client/result/AddressBookDoCoMoResultParser}
  JAddressBookParsedResult = interface; {com/google/zxing/client/result/AddressBookParsedResult}
  JAI013103decoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AI013103decoder}
  JAI01320xDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AI01320xDecoder}
  JAI01392xDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AI01392xDecoder}
  JAI01393xDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder}
  JAI013x0x1xDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AI013x0x1xDecoder}
  JAI013x0xDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AI013x0xDecoder}
  JAI01AndOtherAIs = interface; {com/google/zxing/oned/rss/expanded/decoders/AI01AndOtherAIs}
  JAI01decoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AI01decoder}
  JAI01weightDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AI01weightDecoder}
  JAlignmentPattern = interface; {com/google/zxing/qrcode/detector/AlignmentPattern}
  JAlignmentPatternFinder = interface; {com/google/zxing/qrcode/detector/AlignmentPatternFinder}
  JAnyAIDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoder}
  JASCIIEncoder = interface; {com/google/zxing/datamatrix/encoder/ASCIIEncoder}
  JAztecCode = interface; {com/google/zxing/aztec/encoder/AztecCode}
  JAztecDetectorResult = interface; {com/google/zxing/aztec/AztecDetectorResult}
  JAztecReader = interface; {com/google/zxing/aztec/AztecReader}
  JAztecWriter = interface; {com/google/zxing/aztec/AztecWriter}
  JBarcodeDecoder = interface; {sk/winsoft/zxing/BarcodeDecoder}
  JBarcodeFormat = interface; {com/google/zxing/BarcodeFormat}
  JBarcodeMatrix = interface; {com/google/zxing/pdf417/encoder/BarcodeMatrix}
  JBarcodeMetadata = interface; {com/google/zxing/pdf417/decoder/BarcodeMetadata}
  JBarcodeRow = interface; {com/google/zxing/pdf417/encoder/BarcodeRow}
  JBarcodeValue = interface; {com/google/zxing/pdf417/decoder/BarcodeValue}
  JBase256Encoder = interface; {com/google/zxing/datamatrix/encoder/Base256Encoder}
  JBinarizer = interface; {com/google/zxing/Binarizer}
  JBinaryBitmap = interface; {com/google/zxing/BinaryBitmap}
  JBinaryShiftToken = interface; {com/google/zxing/aztec/encoder/BinaryShiftToken}
  JBitArray = interface; {com/google/zxing/common/BitArray}
  JBitArrayBuilder = interface; {com/google/zxing/oned/rss/expanded/BitArrayBuilder}
  JBitMatrix = interface; {com/google/zxing/common/BitMatrix}
  JBitMatrixParser = interface; {com/google/zxing/qrcode/decoder/BitMatrixParser}
  JBitMatrixParser1 = interface; {com/google/zxing/datamatrix/decoder/BitMatrixParser}
  JBitMatrixParser2 = interface; {com/google/zxing/maxicode/decoder/BitMatrixParser}
  JBitSource = interface; {com/google/zxing/common/BitSource}
  JBizcardResultParser = interface; {com/google/zxing/client/result/BizcardResultParser}
  JBlockPair = interface; {com/google/zxing/qrcode/encoder/BlockPair}
  JBlockParsedResult = interface; {com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult}
  JBookmarkDoCoMoResultParser = interface; {com/google/zxing/client/result/BookmarkDoCoMoResultParser}
  JBoundingBox = interface; {com/google/zxing/pdf417/decoder/BoundingBox}
  JByQuadrantReader = interface; {com/google/zxing/multi/ByQuadrantReader}
  JByteMatrix = interface; {com/google/zxing/qrcode/encoder/ByteMatrix}
  JC40Encoder = interface; {com/google/zxing/datamatrix/encoder/C40Encoder}
  JCalendarParsedResult = interface; {com/google/zxing/client/result/CalendarParsedResult}
  JCharacterSetECI = interface; {com/google/zxing/common/CharacterSetECI}
  JChecksumException = interface; {com/google/zxing/ChecksumException}
  JCodaBarReader = interface; {com/google/zxing/oned/CodaBarReader}
  JCodaBarWriter = interface; {com/google/zxing/oned/CodaBarWriter}
  JCode128Reader = interface; {com/google/zxing/oned/Code128Reader}
  JCode128Writer = interface; {com/google/zxing/oned/Code128Writer}
  JCode128Writer_CType = interface; {com/google/zxing/oned/Code128Writer$CType}
  JCode39Reader = interface; {com/google/zxing/oned/Code39Reader}
  JCode39Writer = interface; {com/google/zxing/oned/Code39Writer}
  JCode93Reader = interface; {com/google/zxing/oned/Code93Reader}
  JCode93Writer = interface; {com/google/zxing/oned/Code93Writer}
  JCodeword = interface; {com/google/zxing/pdf417/decoder/Codeword}
  JCompaction = interface; {com/google/zxing/pdf417/encoder/Compaction}
  JCurrentParsingState = interface; {com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState}
  JCurrentParsingState_State = interface; {com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState$State}
  JDataBlock = interface; {com/google/zxing/qrcode/decoder/DataBlock}
  JDataBlock1 = interface; {com/google/zxing/datamatrix/decoder/DataBlock}
  JDataCharacter = interface; {com/google/zxing/oned/rss/DataCharacter}
  JDataMask = interface; {com/google/zxing/qrcode/decoder/DataMask}
  JDataMask_1 = interface; {com/google/zxing/qrcode/decoder/DataMask$1}
  JDataMask_2 = interface; {com/google/zxing/qrcode/decoder/DataMask$2}
  JDataMask_3 = interface; {com/google/zxing/qrcode/decoder/DataMask$3}
  JDataMask_4 = interface; {com/google/zxing/qrcode/decoder/DataMask$4}
  JDataMask_5 = interface; {com/google/zxing/qrcode/decoder/DataMask$5}
  JDataMask_6 = interface; {com/google/zxing/qrcode/decoder/DataMask$6}
  JDataMask_7 = interface; {com/google/zxing/qrcode/decoder/DataMask$7}
  JDataMask_8 = interface; {com/google/zxing/qrcode/decoder/DataMask$8}
  JDataMatrixReader = interface; {com/google/zxing/datamatrix/DataMatrixReader}
  JDataMatrixSymbolInfo144 = interface; {com/google/zxing/datamatrix/encoder/DataMatrixSymbolInfo144}
  JDataMatrixWriter = interface; {com/google/zxing/datamatrix/DataMatrixWriter}
  JDecodedBitStreamParser = interface; {com/google/zxing/qrcode/decoder/DecodedBitStreamParser}
  JDecodedBitStreamParser1 = interface; {com/google/zxing/pdf417/decoder/DecodedBitStreamParser}
  JDecodedBitStreamParser2 = interface; {com/google/zxing/datamatrix/decoder/DecodedBitStreamParser}
  JDecodedBitStreamParser3 = interface; {com/google/zxing/maxicode/decoder/DecodedBitStreamParser}
  JDecodedBitStreamParser_1 = interface; {com/google/zxing/qrcode/decoder/DecodedBitStreamParser$1}
  JDecodedBitStreamParser_11 = interface; {com/google/zxing/pdf417/decoder/DecodedBitStreamParser$1}
  JDecodedBitStreamParser_12 = interface; {com/google/zxing/datamatrix/decoder/DecodedBitStreamParser$1}
  JDecodedBitStreamParser_ECIStringBuilder = interface; {com/google/zxing/datamatrix/decoder/DecodedBitStreamParser$ECIStringBuilder}
  JDecodedBitStreamParser_Mode = interface; {com/google/zxing/pdf417/decoder/DecodedBitStreamParser$Mode}
  JDecodedBitStreamParser_Mode1 = interface; {com/google/zxing/datamatrix/decoder/DecodedBitStreamParser$Mode}
  JDecodedChar = interface; {com/google/zxing/oned/rss/expanded/decoders/DecodedChar}
  JDecodedInformation = interface; {com/google/zxing/oned/rss/expanded/decoders/DecodedInformation}
  JDecodedNumeric = interface; {com/google/zxing/oned/rss/expanded/decoders/DecodedNumeric}
  JDecodedObject = interface; {com/google/zxing/oned/rss/expanded/decoders/DecodedObject}
  JDecodeHintType = interface; {com/google/zxing/DecodeHintType}
  JDecoder = interface; {com/google/zxing/aztec/decoder/Decoder}
  JDecoder1 = interface; {com/google/zxing/qrcode/decoder/Decoder}
  JDecoder2 = interface; {com/google/zxing/datamatrix/decoder/Decoder}
  JDecoder3 = interface; {com/google/zxing/maxicode/decoder/Decoder}
  JDecoderResult = interface; {com/google/zxing/common/DecoderResult}
  JDecoder_1 = interface; {com/google/zxing/aztec/decoder/Decoder$1}
  JDecoder_CorrectedBitsResult = interface; {com/google/zxing/aztec/decoder/Decoder$CorrectedBitsResult}
  JDecoder_Table = interface; {com/google/zxing/aztec/decoder/Decoder$Table}
  JDefaultGridSampler = interface; {com/google/zxing/common/DefaultGridSampler}
  JDefaultPlacement = interface; {com/google/zxing/datamatrix/encoder/DefaultPlacement}
  JDetectionResult = interface; {com/google/zxing/pdf417/decoder/DetectionResult}
  JDetectionResultColumn = interface; {com/google/zxing/pdf417/decoder/DetectionResultColumn}
  JDetectionResultRowIndicatorColumn = interface; {com/google/zxing/pdf417/decoder/DetectionResultRowIndicatorColumn}
  JDetector = interface; {com/google/zxing/aztec/detector/Detector}
  JDetector1 = interface; {com/google/zxing/qrcode/detector/Detector}
  JDetector2 = interface; {com/google/zxing/pdf417/detector/Detector}
  JDetector3 = interface; {com/google/zxing/datamatrix/detector/Detector}
  JDetectorResult = interface; {com/google/zxing/common/DetectorResult}
  JDetector_Point = interface; {com/google/zxing/aztec/detector/Detector$Point}
  JDimension = interface; {com/google/zxing/Dimension}
  JDimensions = interface; {com/google/zxing/pdf417/encoder/Dimensions}
  JEAN13Reader = interface; {com/google/zxing/oned/EAN13Reader}
  JEAN13Writer = interface; {com/google/zxing/oned/EAN13Writer}
  JEAN8Reader = interface; {com/google/zxing/oned/EAN8Reader}
  JEAN8Writer = interface; {com/google/zxing/oned/EAN8Writer}
  JEANManufacturerOrgSupport = interface; {com/google/zxing/oned/EANManufacturerOrgSupport}
  JEdifactEncoder = interface; {com/google/zxing/datamatrix/encoder/EdifactEncoder}
  JEmailAddressParsedResult = interface; {com/google/zxing/client/result/EmailAddressParsedResult}
  JEmailAddressResultParser = interface; {com/google/zxing/client/result/EmailAddressResultParser}
  JEmailDoCoMoResultParser = interface; {com/google/zxing/client/result/EmailDoCoMoResultParser}
  JEncodeHintType = interface; {com/google/zxing/EncodeHintType}
  JEncoder = interface; {com/google/zxing/aztec/encoder/Encoder}
  JEncoder1 = interface; {com/google/zxing/qrcode/encoder/Encoder}
  JEncoder2 = interface; {com/google/zxing/datamatrix/encoder/Encoder}
  JEncoderContext = interface; {com/google/zxing/datamatrix/encoder/EncoderContext}
  JEncoder_1 = interface; {com/google/zxing/qrcode/encoder/Encoder$1}
  JErrorCorrection = interface; {com/google/zxing/pdf417/decoder/ec/ErrorCorrection}
  JErrorCorrection1 = interface; {com/google/zxing/datamatrix/encoder/ErrorCorrection}
  JErrorCorrectionLevel = interface; {com/google/zxing/qrcode/decoder/ErrorCorrectionLevel}
  JExpandedPair = interface; {com/google/zxing/oned/rss/expanded/ExpandedPair}
  JExpandedProductParsedResult = interface; {com/google/zxing/client/result/ExpandedProductParsedResult}
  JExpandedProductResultParser = interface; {com/google/zxing/client/result/ExpandedProductResultParser}
  JExpandedRow = interface; {com/google/zxing/oned/rss/expanded/ExpandedRow}
  JFieldParser = interface; {com/google/zxing/oned/rss/expanded/decoders/FieldParser}
  JFieldParser_DataLength = interface; {com/google/zxing/oned/rss/expanded/decoders/FieldParser$DataLength}
  JFinderPattern = interface; {com/google/zxing/qrcode/detector/FinderPattern}
  JFinderPattern1 = interface; {com/google/zxing/oned/rss/FinderPattern}
  JFinderPatternFinder = interface; {com/google/zxing/qrcode/detector/FinderPatternFinder}
  JFinderPatternFinder_1 = interface; {com/google/zxing/qrcode/detector/FinderPatternFinder$1}
  JFinderPatternFinder_EstimatedModuleComparator = interface; {com/google/zxing/qrcode/detector/FinderPatternFinder$EstimatedModuleComparator}
  JFinderPatternInfo = interface; {com/google/zxing/qrcode/detector/FinderPatternInfo}
  JFormatException = interface; {com/google/zxing/FormatException}
  JFormatInformation = interface; {com/google/zxing/qrcode/decoder/FormatInformation}
  JGeneralAppIdDecoder = interface; {com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder}
  JGenericGF = interface; {com/google/zxing/common/reedsolomon/GenericGF}
  JGenericGFPoly = interface; {com/google/zxing/common/reedsolomon/GenericGFPoly}
  JGenericMultipleBarcodeReader = interface; {com/google/zxing/multi/GenericMultipleBarcodeReader}
  JGeoParsedResult = interface; {com/google/zxing/client/result/GeoParsedResult}
  JGeoResultParser = interface; {com/google/zxing/client/result/GeoResultParser}
  JGlobalHistogramBinarizer = interface; {com/google/zxing/common/GlobalHistogramBinarizer}
  JGridSampler = interface; {com/google/zxing/common/GridSampler}
  JHighLevelEncoder = interface; {com/google/zxing/aztec/encoder/HighLevelEncoder}
  JHighLevelEncoder1 = interface; {com/google/zxing/datamatrix/encoder/HighLevelEncoder}
  JHighLevelEncoder_1 = interface; {com/google/zxing/aztec/encoder/HighLevelEncoder$1}
  JHybridBinarizer = interface; {com/google/zxing/common/HybridBinarizer}
  JInvertedLuminanceSource = interface; {com/google/zxing/InvertedLuminanceSource}
  JISBNParsedResult = interface; {com/google/zxing/client/result/ISBNParsedResult}
  JISBNResultParser = interface; {com/google/zxing/client/result/ISBNResultParser}
  JITFReader = interface; {com/google/zxing/oned/ITFReader}
  JITFWriter = interface; {com/google/zxing/oned/ITFWriter}
  JLuminanceSource = interface; {com/google/zxing/LuminanceSource}
  JMaskUtil = interface; {com/google/zxing/qrcode/encoder/MaskUtil}
  JMathUtils = interface; {com/google/zxing/common/detector/MathUtils}
  JMatrixUtil = interface; {com/google/zxing/qrcode/encoder/MatrixUtil}
  JMaxiCodeReader = interface; {com/google/zxing/maxicode/MaxiCodeReader}
  JMinimalEncoder = interface; {com/google/zxing/qrcode/encoder/MinimalEncoder}
  JMinimalEncoder_1 = interface; {com/google/zxing/qrcode/encoder/MinimalEncoder$1}
  JMinimalEncoder_Edge = interface; {com/google/zxing/qrcode/encoder/MinimalEncoder$Edge}
  JMinimalEncoder_ResultList = interface; {com/google/zxing/qrcode/encoder/MinimalEncoder$ResultList}
  JMinimalEncoder_ResultList_ResultNode = interface; {com/google/zxing/qrcode/encoder/MinimalEncoder$ResultList$ResultNode}
  JMinimalEncoder_VersionSize = interface; {com/google/zxing/qrcode/encoder/MinimalEncoder$VersionSize}
  JMode = interface; {com/google/zxing/qrcode/decoder/Mode}
  JModulusGF = interface; {com/google/zxing/pdf417/decoder/ec/ModulusGF}
  JModulusPoly = interface; {com/google/zxing/pdf417/decoder/ec/ModulusPoly}
  JMonochromeRectangleDetector = interface; {com/google/zxing/common/detector/MonochromeRectangleDetector}
  JMultiDetector = interface; {com/google/zxing/multi/qrcode/detector/MultiDetector}
  JMultiFinderPatternFinder = interface; {com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder}
  JMultiFinderPatternFinder_1 = interface; {com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder$1}
  JMultiFinderPatternFinder_ModuleSizeComparator = interface; {com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder$ModuleSizeComparator}
  JMultiFormatOneDReader = interface; {com/google/zxing/oned/MultiFormatOneDReader}
  JMultiFormatReader = interface; {com/google/zxing/MultiFormatReader}
  JMultiFormatUPCEANReader = interface; {com/google/zxing/oned/MultiFormatUPCEANReader}
  JMultiFormatWriter = interface; {com/google/zxing/MultiFormatWriter}
  JMultiFormatWriter_1 = interface; {com/google/zxing/MultiFormatWriter$1}
  JMultipleBarcodeReader = interface; {com/google/zxing/multi/MultipleBarcodeReader}
  JNotFoundException = interface; {com/google/zxing/NotFoundException}
  JOneDimensionalCodeWriter = interface; {com/google/zxing/oned/OneDimensionalCodeWriter}
  JOneDReader = interface; {com/google/zxing/oned/OneDReader}
  JPair = interface; {com/google/zxing/oned/rss/Pair}
  JParsedResult = interface; {com/google/zxing/client/result/ParsedResult}
  JParsedResultType = interface; {com/google/zxing/client/result/ParsedResultType}
  JPDF417 = interface; {com/google/zxing/pdf417/encoder/PDF417}
  JPDF417CodewordDecoder = interface; {com/google/zxing/pdf417/decoder/PDF417CodewordDecoder}
  JPDF417Common = interface; {com/google/zxing/pdf417/PDF417Common}
  JPDF417DetectorResult = interface; {com/google/zxing/pdf417/detector/PDF417DetectorResult}
  JPDF417ErrorCorrection = interface; {com/google/zxing/pdf417/encoder/PDF417ErrorCorrection}
  JPDF417HighLevelEncoder = interface; {com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder}
  JPDF417HighLevelEncoder_1 = interface; {com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder$1}
  JPDF417Reader = interface; {com/google/zxing/pdf417/PDF417Reader}
  JPDF417ResultMetadata = interface; {com/google/zxing/pdf417/PDF417ResultMetadata}
  JPDF417ScanningDecoder = interface; {com/google/zxing/pdf417/decoder/PDF417ScanningDecoder}
  JPDF417Writer = interface; {com/google/zxing/pdf417/PDF417Writer}
  JPerspectiveTransform = interface; {com/google/zxing/common/PerspectiveTransform}
  JPlanarYUVLuminanceSource = interface; {com/google/zxing/PlanarYUVLuminanceSource}
  JProductParsedResult = interface; {com/google/zxing/client/result/ProductParsedResult}
  JProductResultParser = interface; {com/google/zxing/client/result/ProductResultParser}
  JQRCode = interface; {com/google/zxing/qrcode/encoder/QRCode}
  JQRCodeDecoderMetaData = interface; {com/google/zxing/qrcode/decoder/QRCodeDecoderMetaData}
  JQRCodeMultiReader = interface; {com/google/zxing/multi/qrcode/QRCodeMultiReader}
  JQRCodeMultiReader_1 = interface; {com/google/zxing/multi/qrcode/QRCodeMultiReader$1}
  JQRCodeMultiReader_SAComparator = interface; {com/google/zxing/multi/qrcode/QRCodeMultiReader$SAComparator}
  JQRCodeReader = interface; {com/google/zxing/qrcode/QRCodeReader}
  JQRCodeWriter = interface; {com/google/zxing/qrcode/QRCodeWriter}
  JReader = interface; {com/google/zxing/Reader}
  JReaderException = interface; {com/google/zxing/ReaderException}
  JReedSolomonDecoder = interface; {com/google/zxing/common/reedsolomon/ReedSolomonDecoder}
  JReedSolomonEncoder = interface; {com/google/zxing/common/reedsolomon/ReedSolomonEncoder}
  JReedSolomonException = interface; {com/google/zxing/common/reedsolomon/ReedSolomonException}
  JResult = interface; {com/google/zxing/Result}
  JResultMetadataType = interface; {com/google/zxing/ResultMetadataType}
  JResultParser = interface; {com/google/zxing/client/result/ResultParser}
  JResultPoint = interface; {com/google/zxing/ResultPoint}
  JResultPointCallback = interface; {com/google/zxing/ResultPointCallback}
  JRGBLuminanceSource = interface; {com/google/zxing/RGBLuminanceSource}
  JRSS14Reader = interface; {com/google/zxing/oned/rss/RSS14Reader}
  JRSSExpandedReader = interface; {com/google/zxing/oned/rss/expanded/RSSExpandedReader}
  JRSSUtils = interface; {com/google/zxing/oned/rss/RSSUtils}
  JSimpleToken = interface; {com/google/zxing/aztec/encoder/SimpleToken}
  JSMSMMSResultParser = interface; {com/google/zxing/client/result/SMSMMSResultParser}
  JSMSParsedResult = interface; {com/google/zxing/client/result/SMSParsedResult}
  JSMSTOMMSTOResultParser = interface; {com/google/zxing/client/result/SMSTOMMSTOResultParser}
  JSMTPResultParser = interface; {com/google/zxing/client/result/SMTPResultParser}
  JState = interface; {com/google/zxing/aztec/encoder/State}
  JStringUtils = interface; {com/google/zxing/common/StringUtils}
  JSymbolInfo = interface; {com/google/zxing/datamatrix/encoder/SymbolInfo}
  JSymbolShapeHint = interface; {com/google/zxing/datamatrix/encoder/SymbolShapeHint}
  JTelParsedResult = interface; {com/google/zxing/client/result/TelParsedResult}
  JTelResultParser = interface; {com/google/zxing/client/result/TelResultParser}
  JTextEncoder = interface; {com/google/zxing/datamatrix/encoder/TextEncoder}
  JTextParsedResult = interface; {com/google/zxing/client/result/TextParsedResult}
  JToken = interface; {com/google/zxing/aztec/encoder/Token}
  JUPCAReader = interface; {com/google/zxing/oned/UPCAReader}
  JUPCAWriter = interface; {com/google/zxing/oned/UPCAWriter}
  JUPCEANExtension2Support = interface; {com/google/zxing/oned/UPCEANExtension2Support}
  JUPCEANExtension5Support = interface; {com/google/zxing/oned/UPCEANExtension5Support}
  JUPCEANExtensionSupport = interface; {com/google/zxing/oned/UPCEANExtensionSupport}
  JUPCEANReader = interface; {com/google/zxing/oned/UPCEANReader}
  JUPCEANWriter = interface; {com/google/zxing/oned/UPCEANWriter}
  JUPCEReader = interface; {com/google/zxing/oned/UPCEReader}
  JUPCEWriter = interface; {com/google/zxing/oned/UPCEWriter}
  JURIParsedResult = interface; {com/google/zxing/client/result/URIParsedResult}
  JURIResultParser = interface; {com/google/zxing/client/result/URIResultParser}
  JURLTOResultParser = interface; {com/google/zxing/client/result/URLTOResultParser}
  JVCardResultParser = interface; {com/google/zxing/client/result/VCardResultParser}
  JVersion = interface; {com/google/zxing/qrcode/decoder/Version}
  JVersion1 = interface; {com/google/zxing/datamatrix/decoder/Version}
  JVersion_1 = interface; {com/google/zxing/datamatrix/decoder/Version$1}
  JVersion_ECB = interface; {com/google/zxing/qrcode/decoder/Version$ECB}
  JVersion_ECB1 = interface; {com/google/zxing/datamatrix/decoder/Version$ECB}
  JVersion_ECBlocks = interface; {com/google/zxing/qrcode/decoder/Version$ECBlocks}
  JVersion_ECBlocks1 = interface; {com/google/zxing/datamatrix/decoder/Version$ECBlocks}
  JVEventResultParser = interface; {com/google/zxing/client/result/VEventResultParser}
  JVINParsedResult = interface; {com/google/zxing/client/result/VINParsedResult}
  JVINResultParser = interface; {com/google/zxing/client/result/VINResultParser}
  JWhiteRectangleDetector = interface; {com/google/zxing/common/detector/WhiteRectangleDetector}
  JWifiParsedResult = interface; {com/google/zxing/client/result/WifiParsedResult}
  JWifiResultParser = interface; {com/google/zxing/client/result/WifiResultParser}
  JWriter1 = interface; {com/google/zxing/Writer}
  JWriterException = interface; {com/google/zxing/WriterException}
  JX12Encoder = interface; {com/google/zxing/datamatrix/encoder/X12Encoder}

  JResultParserClass = interface(JObjectClass)
    ['{02282B7F-F1A0-4485-9EA2-71CED049ECE4}']
    function init: JResultParser; cdecl;
    function parseResult(theResult: JResult): JParsedResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/ResultParser')]
  JResultParser = interface(JObject)
    ['{8DA1B4EE-9BF9-45A5-90AD-CA65D36BC210}']
    function parse(param0: JResult): JParsedResult; cdecl;
  end;

  TJResultParser = class(TJavaGenericImport<JResultParserClass, JResultParser>)
  end;

  JAbstractDoCoMoResultParserClass = interface(JResultParserClass)
    ['{20D538F6-6026-4E6F-89D8-4DBE5B36CFFE}']
  end;

  [JavaSignature('com/google/zxing/client/result/AbstractDoCoMoResultParser')]
  JAbstractDoCoMoResultParser = interface(JResultParser)
    ['{DC0C2FC6-CE50-4289-BDE3-BD8B1285CB6B}']
  end;

  TJAbstractDoCoMoResultParser = class(TJavaGenericImport<JAbstractDoCoMoResultParserClass, JAbstractDoCoMoResultParser>)
  end;

  JAbstractExpandedDecoderClass = interface(JObjectClass)
    ['{03662AB8-4B64-480D-8C02-78F78BE592E0}']
    function createDecoder(information: JBitArray): JAbstractExpandedDecoder; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder')]
  JAbstractExpandedDecoder = interface(JObject)
    ['{8C41D31C-6BD7-4319-8E52-DB807D08A882}']
    function parseInformation: JString; cdecl;
  end;

  TJAbstractExpandedDecoder = class(TJavaGenericImport<JAbstractExpandedDecoderClass, JAbstractExpandedDecoder>)
  end;

  JOneDReaderClass = interface(JObjectClass)
    ['{56A9E189-3B14-4C88-B004-E590D6D5ACC8}']
    function init: JOneDReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/OneDReader')]
  JOneDReader = interface(JObject)
    ['{EB2FB7E7-5184-4274-A96F-43170563C005}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    function decodeRow(param0: Integer; param1: JBitArray; param2: JMap): JResult; cdecl;
    procedure reset; cdecl;
  end;

  TJOneDReader = class(TJavaGenericImport<JOneDReaderClass, JOneDReader>)
  end;

  JAbstractRSSReaderClass = interface(JOneDReaderClass)
    ['{61A0B2A5-AFAF-43A9-AB9B-53ACBDDCE53F}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/AbstractRSSReader')]
  JAbstractRSSReader = interface(JOneDReader)
    ['{7BE9E7B9-0D19-487E-9BB3-0EE3BB91E3CB}']
  end;

  TJAbstractRSSReader = class(TJavaGenericImport<JAbstractRSSReaderClass, JAbstractRSSReader>)
  end;

  JAddressBookAUResultParserClass = interface(JResultParserClass)
    ['{680A1E8F-C961-4450-9157-49CFCD5C90DD}']
    function init: JAddressBookAUResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/AddressBookAUResultParser')]
  JAddressBookAUResultParser = interface(JResultParser)
    ['{B6026405-330D-434A-8905-3B88BC512F83}']
    function parse(result: JResult): JAddressBookParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJAddressBookAUResultParser = class(TJavaGenericImport<JAddressBookAUResultParserClass, JAddressBookAUResultParser>)
  end;

  JAddressBookDoCoMoResultParserClass = interface(JAbstractDoCoMoResultParserClass)
    ['{841C82F9-CC07-40A8-8A95-C8EC6642ECD4}']
    function init: JAddressBookDoCoMoResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/AddressBookDoCoMoResultParser')]
  JAddressBookDoCoMoResultParser = interface(JAbstractDoCoMoResultParser)
    ['{EB94D6E1-2727-425F-87EA-043D9237F007}']
    function parse(result: JResult): JAddressBookParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJAddressBookDoCoMoResultParser = class(TJavaGenericImport<JAddressBookDoCoMoResultParserClass, JAddressBookDoCoMoResultParser>)
  end;

  JParsedResultClass = interface(JObjectClass)
    ['{3647B984-FD15-4830-AF19-2D901AAAAA9E}']
    procedure maybeAppend(value: JString; result: JStringBuilder); cdecl; overload;
    procedure maybeAppend(values: TJavaObjectArray<JString>; result: JStringBuilder); cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/client/result/ParsedResult')]
  JParsedResult = interface(JObject)
    ['{7881DDC3-6591-422D-8199-043910D5A615}']
    function getDisplayResult: JString; cdecl;
    function getType: JParsedResultType; cdecl;
    function toString: JString; cdecl;
  end;

  TJParsedResult = class(TJavaGenericImport<JParsedResultClass, JParsedResult>)
  end;

  JAddressBookParsedResultClass = interface(JParsedResultClass)
    ['{1FF716FE-AC55-49A4-8663-5490E6A5B6D8}']
    function init(names: TJavaObjectArray<JString>; phoneNumbers: TJavaObjectArray<JString>; phoneTypes: TJavaObjectArray<JString>; emails: TJavaObjectArray<JString>; emailTypes: TJavaObjectArray<JString>; addresses: TJavaObjectArray<JString>; addressTypes: TJavaObjectArray<JString>): JAddressBookParsedResult; cdecl; overload;
    function init(names: TJavaObjectArray<JString>; nicknames: TJavaObjectArray<JString>; pronunciation: JString; phoneNumbers: TJavaObjectArray<JString>; phoneTypes: TJavaObjectArray<JString>; emails: TJavaObjectArray<JString>; emailTypes: TJavaObjectArray<JString>; instantMessenger: JString; note: JString; addresses: TJavaObjectArray<JString>; addressTypes: TJavaObjectArray<JString>; org: JString; birthday: JString; title: JString; urls: TJavaObjectArray<JString>; geo: TJavaObjectArray<JString>): JAddressBookParsedResult; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/client/result/AddressBookParsedResult')]
  JAddressBookParsedResult = interface(JParsedResult)
    ['{2CB9E589-5F80-4E94-809B-634CC3F7588D}']
    function getAddresses: TJavaObjectArray<JString>; cdecl;
    function getAddressTypes: TJavaObjectArray<JString>; cdecl;
    function getBirthday: JString; cdecl;
    function getDisplayResult: JString; cdecl;
    function getEmails: TJavaObjectArray<JString>; cdecl;
    function getEmailTypes: TJavaObjectArray<JString>; cdecl;
    function getGeo: TJavaObjectArray<JString>; cdecl;
    function getInstantMessenger: JString; cdecl;
    function getNames: TJavaObjectArray<JString>; cdecl;
    function getNicknames: TJavaObjectArray<JString>; cdecl;
    function getNote: JString; cdecl;
    function getOrg: JString; cdecl;
    function getPhoneNumbers: TJavaObjectArray<JString>; cdecl;
    function getPhoneTypes: TJavaObjectArray<JString>; cdecl;
    function getPronunciation: JString; cdecl;
    function getTitle: JString; cdecl;
    function getURLs: TJavaObjectArray<JString>; cdecl;
  end;

  TJAddressBookParsedResult = class(TJavaGenericImport<JAddressBookParsedResultClass, JAddressBookParsedResult>)
  end;

  JAI01decoderClass = interface(JAbstractExpandedDecoderClass)
    ['{FEDFD1D9-75BE-40DE-A77D-D71F5FD442E6}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI01decoder')]
  JAI01decoder = interface(JAbstractExpandedDecoder)
    ['{00F281B0-3D0C-4041-BBC4-09610B12A08C}']
  end;

  TJAI01decoder = class(TJavaGenericImport<JAI01decoderClass, JAI01decoder>)
  end;

  JAI01weightDecoderClass = interface(JAI01decoderClass)
    ['{6BDA4462-84E7-4263-9AD3-AF2A8044C9AB}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI01weightDecoder')]
  JAI01weightDecoder = interface(JAI01decoder)
    ['{80477DDD-0B11-4D22-836C-A65D265F3082}']
  end;

  TJAI01weightDecoder = class(TJavaGenericImport<JAI01weightDecoderClass, JAI01weightDecoder>)
  end;

  JAI013x0xDecoderClass = interface(JAI01weightDecoderClass)
    ['{BEFCF2C7-0AFD-4FB2-BE90-E6FF3FE16A8D}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI013x0xDecoder')]
  JAI013x0xDecoder = interface(JAI01weightDecoder)
    ['{FADF249C-3A65-4931-8608-D35333A3F3A2}']
    function parseInformation: JString; cdecl;
  end;

  TJAI013x0xDecoder = class(TJavaGenericImport<JAI013x0xDecoderClass, JAI013x0xDecoder>)
  end;

  JAI013103decoderClass = interface(JAI013x0xDecoderClass)
    ['{7A47A07F-CC60-4EF5-96F9-7260F1CC9516}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI013103decoder')]
  JAI013103decoder = interface(JAI013x0xDecoder)
    ['{D189B5EC-33BF-40EF-BB49-A3C8C9FE30DF}']
  end;

  TJAI013103decoder = class(TJavaGenericImport<JAI013103decoderClass, JAI013103decoder>)
  end;

  JAI01320xDecoderClass = interface(JAI013x0xDecoderClass)
    ['{A963FF6B-90DA-462A-957F-242E395553C9}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI01320xDecoder')]
  JAI01320xDecoder = interface(JAI013x0xDecoder)
    ['{BDCFC797-395B-4F2B-BC30-7DD11006A173}']
  end;

  TJAI01320xDecoder = class(TJavaGenericImport<JAI01320xDecoderClass, JAI01320xDecoder>)
  end;

  JAI01392xDecoderClass = interface(JAI01decoderClass)
    ['{FD27F9A4-C1F7-483F-9CA1-5B9E13734F24}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI01392xDecoder')]
  JAI01392xDecoder = interface(JAI01decoder)
    ['{9E8E47A1-EAEC-4FF6-867E-D7EABD8B1AD2}']
    function parseInformation: JString; cdecl;
  end;

  TJAI01392xDecoder = class(TJavaGenericImport<JAI01392xDecoderClass, JAI01392xDecoder>)
  end;

  JAI01393xDecoderClass = interface(JAI01decoderClass)
    ['{45E1D306-BA75-4E18-B2BB-99E0DA0A029E}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder')]
  JAI01393xDecoder = interface(JAI01decoder)
    ['{BFAD58F9-F84A-4183-8AAD-0978CADC6AB4}']
    function parseInformation: JString; cdecl;
  end;

  TJAI01393xDecoder = class(TJavaGenericImport<JAI01393xDecoderClass, JAI01393xDecoder>)
  end;

  JAI013x0x1xDecoderClass = interface(JAI01weightDecoderClass)
    ['{2BEF84E9-4CE4-4D1D-B9B4-6E3C83469539}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI013x0x1xDecoder')]
  JAI013x0x1xDecoder = interface(JAI01weightDecoder)
    ['{674554AF-AFC8-4A10-AF04-DFE42CE05BFB}']
    function parseInformation: JString; cdecl;
  end;

  TJAI013x0x1xDecoder = class(TJavaGenericImport<JAI013x0x1xDecoderClass, JAI013x0x1xDecoder>)
  end;

  JAI01AndOtherAIsClass = interface(JAI01decoderClass)
    ['{A3901A78-FB10-4CF3-92BD-C5F1615EEF2C}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AI01AndOtherAIs')]
  JAI01AndOtherAIs = interface(JAI01decoder)
    ['{FFF0B894-271A-405E-A596-C3F8BFD7033E}']
    function parseInformation: JString; cdecl;
  end;

  TJAI01AndOtherAIs = class(TJavaGenericImport<JAI01AndOtherAIsClass, JAI01AndOtherAIs>)
  end;

  JResultPointClass = interface(JObjectClass)
    ['{AC013FD3-07D4-4FCC-BF6E-CF50892094BB}']
    function init(x: Single; y: Single): JResultPoint; cdecl;
    function distance(pattern1: JResultPoint; pattern2: JResultPoint): Single; cdecl;
    procedure orderBestPatterns(patterns: TJavaObjectArray<JResultPoint>); cdecl;
  end;

  [JavaSignature('com/google/zxing/ResultPoint')]
  JResultPoint = interface(JObject)
    ['{C219A46E-8314-475B-B073-2504040F3DE5}']
    function equals(other: JObject): Boolean; cdecl;
    function getX: Single; cdecl;
    function getY: Single; cdecl;
    function hashCode: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJResultPoint = class(TJavaGenericImport<JResultPointClass, JResultPoint>)
  end;

  JAlignmentPatternClass = interface(JResultPointClass)
    ['{704DC587-9E14-4092-ABB1-F1C6D61F8035}']
  end;

  [JavaSignature('com/google/zxing/qrcode/detector/AlignmentPattern')]
  JAlignmentPattern = interface(JResultPoint)
    ['{75CC7931-9791-4AE1-AD0B-DA36AA0C7E5E}']
  end;

  TJAlignmentPattern = class(TJavaGenericImport<JAlignmentPatternClass, JAlignmentPattern>)
  end;

  JAlignmentPatternFinderClass = interface(JObjectClass)
    ['{8FFE0E69-64E6-47DC-9C72-7DFFE251AB36}']
  end;

  [JavaSignature('com/google/zxing/qrcode/detector/AlignmentPatternFinder')]
  JAlignmentPatternFinder = interface(JObject)
    ['{41EDDA23-A67D-4D65-BE48-7B3C9850507E}']
  end;

  TJAlignmentPatternFinder = class(TJavaGenericImport<JAlignmentPatternFinderClass, JAlignmentPatternFinder>)
  end;

  JAnyAIDecoderClass = interface(JAbstractExpandedDecoderClass)
    ['{008E5E2B-9ED3-4BD3-B2FF-ED107A59EE34}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoder')]
  JAnyAIDecoder = interface(JAbstractExpandedDecoder)
    ['{7B8DF66B-30FC-45B0-8FC0-03BE26C15EE0}']
    function parseInformation: JString; cdecl;
  end;

  TJAnyAIDecoder = class(TJavaGenericImport<JAnyAIDecoderClass, JAnyAIDecoder>)
  end;

  JASCIIEncoderClass = interface(JObjectClass)
    ['{99382756-9BD5-4EBB-BA42-F2AF3B5608EF}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/ASCIIEncoder')]
  JASCIIEncoder = interface(JObject)
    ['{5026EB03-740F-4445-B201-C6361027AFAD}']
    procedure encode(context: JEncoderContext); cdecl;
    function getEncodingMode: Integer; cdecl;
  end;

  TJASCIIEncoder = class(TJavaGenericImport<JASCIIEncoderClass, JASCIIEncoder>)
  end;

  JAztecCodeClass = interface(JObjectClass)
    ['{4F6C9D33-D520-4965-8812-8AC213D9E874}']
    function init: JAztecCode; cdecl;
  end;

  [JavaSignature('com/google/zxing/aztec/encoder/AztecCode')]
  JAztecCode = interface(JObject)
    ['{C4B85FCB-B91F-44E4-B0CC-D2E260F4481F}']
    function getCodeWords: Integer; cdecl;
    function getLayers: Integer; cdecl;
    function getMatrix: JBitMatrix; cdecl;
    function getSize: Integer; cdecl;
    function isCompact: Boolean; cdecl;
    procedure setCodeWords(codeWords: Integer); cdecl;
    procedure setCompact(compact: Boolean); cdecl;
    procedure setLayers(layers: Integer); cdecl;
    procedure setMatrix(matrix: JBitMatrix); cdecl;
    procedure setSize(size: Integer); cdecl;
  end;

  TJAztecCode = class(TJavaGenericImport<JAztecCodeClass, JAztecCode>)
  end;

  JDetectorResultClass = interface(JObjectClass)
    ['{E8B1CCF1-4EAC-4AEA-8A1C-92D22EF49164}']
    function init(bits: JBitMatrix; points: TJavaObjectArray<JResultPoint>): JDetectorResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/DetectorResult')]
  JDetectorResult = interface(JObject)
    ['{7175BBD0-C2E7-45F3-9919-7D5589AF0FA0}']
    function getBits: JBitMatrix; cdecl;
    function getPoints: TJavaObjectArray<JResultPoint>; cdecl;
  end;

  TJDetectorResult = class(TJavaGenericImport<JDetectorResultClass, JDetectorResult>)
  end;

  JAztecDetectorResultClass = interface(JDetectorResultClass)
    ['{D9B3A467-8710-4BB6-B110-156E978F91ED}']
    function init(bits: JBitMatrix; points: TJavaObjectArray<JResultPoint>; compact: Boolean; nbDatablocks: Integer; nbLayers: Integer): JAztecDetectorResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/aztec/AztecDetectorResult')]
  JAztecDetectorResult = interface(JDetectorResult)
    ['{F3C50747-B1DE-48DB-BB16-B4B7531C6950}']
    function getNbDatablocks: Integer; cdecl;
    function getNbLayers: Integer; cdecl;
    function isCompact: Boolean; cdecl;
  end;

  TJAztecDetectorResult = class(TJavaGenericImport<JAztecDetectorResultClass, JAztecDetectorResult>)
  end;

  JAztecReaderClass = interface(JObjectClass)
    ['{DDD03833-9492-44AB-A76F-1D723FFFD865}']
    function init: JAztecReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/aztec/AztecReader')]
  JAztecReader = interface(JObject)
    ['{5ACE15D5-1EFB-4981-976D-B6CEAD67F709}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    procedure reset; cdecl;
  end;

  TJAztecReader = class(TJavaGenericImport<JAztecReaderClass, JAztecReader>)
  end;

  JAztecWriterClass = interface(JObjectClass)
    ['{5B2038EC-027E-4FC7-8AB6-2FF0C731DF22}']
    function init: JAztecWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/aztec/AztecWriter')]
  JAztecWriter = interface(JObject)
    ['{ADA737EB-7C3E-4ED6-983C-6AA1650185D4}']
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer): JBitMatrix; cdecl; overload;
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer; hints: JMap): JBitMatrix; cdecl; overload;
  end;

  TJAztecWriter = class(TJavaGenericImport<JAztecWriterClass, JAztecWriter>)
  end;

  JBarcodeDecoderClass = interface(JObjectClass)
    ['{EBB7AF10-04C6-46A2-B047-311E906FBC63}']
    function init: JBarcodeDecoder; cdecl;
  end;

  [JavaSignature('sk/winsoft/zxing/BarcodeDecoder')]
  JBarcodeDecoder = interface(JObject)
    ['{31D6040F-D55F-4332-8CF2-B04B60D02A13}']
    function decode(reader: JMultiFormatReader; bitmap: JBinaryBitmap): JResult; cdecl;
    function decodeMultiple(reader: JGenericMultipleBarcodeReader; bitmap: JBinaryBitmap): TJavaObjectArray<JResult>; cdecl;
    function getErrorMessage: JString; cdecl;
  end;

  TJBarcodeDecoder = class(TJavaGenericImport<JBarcodeDecoderClass, JBarcodeDecoder>)
  end;

  JBarcodeFormatClass = interface(JEnumClass)
    ['{59B23691-C2C4-4619-9E0E-8D528DA22E4C}']
    function _GetAZTEC: JBarcodeFormat;
    procedure _SetAZTEC(Value: JBarcodeFormat);
    function _GetCODABAR: JBarcodeFormat;
    procedure _SetCODABAR(Value: JBarcodeFormat);
    function _GetCODE_128: JBarcodeFormat;
    procedure _SetCODE_128(Value: JBarcodeFormat);
    function _GetCODE_39: JBarcodeFormat;
    procedure _SetCODE_39(Value: JBarcodeFormat);
    function _GetCODE_93: JBarcodeFormat;
    procedure _SetCODE_93(Value: JBarcodeFormat);
    function _GetDATA_MATRIX: JBarcodeFormat;
    procedure _SetDATA_MATRIX(Value: JBarcodeFormat);
    function _GetEAN_13: JBarcodeFormat;
    procedure _SetEAN_13(Value: JBarcodeFormat);
    function _GetEAN_8: JBarcodeFormat;
    procedure _SetEAN_8(Value: JBarcodeFormat);
    function _GetITF: JBarcodeFormat;
    procedure _SetITF(Value: JBarcodeFormat);
    function _GetMAXICODE: JBarcodeFormat;
    procedure _SetMAXICODE(Value: JBarcodeFormat);
    function _GetPDF_417: JBarcodeFormat;
    procedure _SetPDF_417(Value: JBarcodeFormat);
    function _GetQR_CODE: JBarcodeFormat;
    procedure _SetQR_CODE(Value: JBarcodeFormat);
    function _GetRSS_14: JBarcodeFormat;
    procedure _SetRSS_14(Value: JBarcodeFormat);
    function _GetRSS_EXPANDED: JBarcodeFormat;
    procedure _SetRSS_EXPANDED(Value: JBarcodeFormat);
    function _GetUPC_A: JBarcodeFormat;
    procedure _SetUPC_A(Value: JBarcodeFormat);
    function _GetUPC_E: JBarcodeFormat;
    procedure _SetUPC_E(Value: JBarcodeFormat);
    function _GetUPC_EAN_EXTENSION: JBarcodeFormat;
    procedure _SetUPC_EAN_EXTENSION(Value: JBarcodeFormat);
    function valueOf(name: JString): JBarcodeFormat; cdecl;
    function values: TJavaObjectArray<JBarcodeFormat>; cdecl;
    property AZTEC: JBarcodeFormat read _GetAZTEC write _SetAZTEC;
    property CODABAR: JBarcodeFormat read _GetCODABAR write _SetCODABAR;
    property CODE_128: JBarcodeFormat read _GetCODE_128 write _SetCODE_128;
    property CODE_39: JBarcodeFormat read _GetCODE_39 write _SetCODE_39;
    property CODE_93: JBarcodeFormat read _GetCODE_93 write _SetCODE_93;
    property DATA_MATRIX: JBarcodeFormat read _GetDATA_MATRIX write _SetDATA_MATRIX;
    property EAN_13: JBarcodeFormat read _GetEAN_13 write _SetEAN_13;
    property EAN_8: JBarcodeFormat read _GetEAN_8 write _SetEAN_8;
    property ITF: JBarcodeFormat read _GetITF write _SetITF;
    property MAXICODE: JBarcodeFormat read _GetMAXICODE write _SetMAXICODE;
    property PDF_417: JBarcodeFormat read _GetPDF_417 write _SetPDF_417;
    property QR_CODE: JBarcodeFormat read _GetQR_CODE write _SetQR_CODE;
    property RSS_14: JBarcodeFormat read _GetRSS_14 write _SetRSS_14;
    property RSS_EXPANDED: JBarcodeFormat read _GetRSS_EXPANDED write _SetRSS_EXPANDED;
    property UPC_A: JBarcodeFormat read _GetUPC_A write _SetUPC_A;
    property UPC_E: JBarcodeFormat read _GetUPC_E write _SetUPC_E;
    property UPC_EAN_EXTENSION: JBarcodeFormat read _GetUPC_EAN_EXTENSION write _SetUPC_EAN_EXTENSION;
  end;

  [JavaSignature('com/google/zxing/BarcodeFormat')]
  JBarcodeFormat = interface(JEnum)
    ['{B4977D76-BCC8-4F4C-8B01-CB4288CA0844}']
  end;

  TJBarcodeFormat = class(TJavaGenericImport<JBarcodeFormatClass, JBarcodeFormat>)
  end;

  JBarcodeMatrixClass = interface(JObjectClass)
    ['{B17919B7-5106-401C-9CD5-B3F48CCCFCFD}']
  end;

  [JavaSignature('com/google/zxing/pdf417/encoder/BarcodeMatrix')]
  JBarcodeMatrix = interface(JObject)
    ['{A1E39F1C-1F6B-4602-81C1-7D1DBC026293}']
    function getMatrix: TJavaBiArray<Byte>; cdecl;
    function getScaledMatrix(xScale: Integer; yScale: Integer): TJavaBiArray<Byte>; cdecl;
  end;

  TJBarcodeMatrix = class(TJavaGenericImport<JBarcodeMatrixClass, JBarcodeMatrix>)
  end;

  JBarcodeMetadataClass = interface(JObjectClass)
    ['{2A2D21BC-F5F0-46F6-9B4B-A8DCF3037410}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/BarcodeMetadata')]
  JBarcodeMetadata = interface(JObject)
    ['{F4837471-5D15-4BC7-94F7-B9E53BA4B155}']
  end;

  TJBarcodeMetadata = class(TJavaGenericImport<JBarcodeMetadataClass, JBarcodeMetadata>)
  end;

  JBarcodeRowClass = interface(JObjectClass)
    ['{DDEF235E-610A-4468-9862-5A61E979CF86}']
  end;

  [JavaSignature('com/google/zxing/pdf417/encoder/BarcodeRow')]
  JBarcodeRow = interface(JObject)
    ['{8B8E18CE-167C-4B13-BB65-5B121906F27A}']
  end;

  TJBarcodeRow = class(TJavaGenericImport<JBarcodeRowClass, JBarcodeRow>)
  end;

  JBarcodeValueClass = interface(JObjectClass)
    ['{20E976D4-0F2C-42A5-8B9C-1132BCF21C67}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/BarcodeValue')]
  JBarcodeValue = interface(JObject)
    ['{8B72EE60-AB0E-4585-879E-FE31A211F06D}']
  end;

  TJBarcodeValue = class(TJavaGenericImport<JBarcodeValueClass, JBarcodeValue>)
  end;

  JBase256EncoderClass = interface(JObjectClass)
    ['{75075ED9-5B88-43C1-A3A4-BD74F06C54FA}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/Base256Encoder')]
  JBase256Encoder = interface(JObject)
    ['{5254FC45-2006-48BB-A94E-69C924055065}']
    procedure encode(context: JEncoderContext); cdecl;
    function getEncodingMode: Integer; cdecl;
  end;

  TJBase256Encoder = class(TJavaGenericImport<JBase256EncoderClass, JBase256Encoder>)
  end;

  JBinarizerClass = interface(JObjectClass)
    ['{3FC76E34-FE26-42F8-80EF-63818399DC68}']
  end;

  [JavaSignature('com/google/zxing/Binarizer')]
  JBinarizer = interface(JObject)
    ['{CE90C19B-4C6E-4292-BD73-461B5529FD15}']
    function createBinarizer(param0: JLuminanceSource): JBinarizer; cdecl;
    function getBlackMatrix: JBitMatrix; cdecl;
    function getBlackRow(param0: Integer; param1: JBitArray): JBitArray; cdecl;
    function getHeight: Integer; cdecl;
    function getLuminanceSource: JLuminanceSource; cdecl;
    function getWidth: Integer; cdecl;
  end;

  TJBinarizer = class(TJavaGenericImport<JBinarizerClass, JBinarizer>)
  end;

  JBinaryBitmapClass = interface(JObjectClass)
    ['{59E90895-7E64-454B-B134-EDBD3AFBD257}']
    function init(binarizer: JBinarizer): JBinaryBitmap; cdecl;
  end;

  [JavaSignature('com/google/zxing/BinaryBitmap')]
  JBinaryBitmap = interface(JObject)
    ['{3BF0355F-AF3C-420E-8EAF-683ED25BEEC9}']
    function crop(left: Integer; top: Integer; width: Integer; height: Integer): JBinaryBitmap; cdecl;
    function getBlackMatrix: JBitMatrix; cdecl;
    function getBlackRow(y: Integer; row: JBitArray): JBitArray; cdecl;
    function getHeight: Integer; cdecl;
    function getWidth: Integer; cdecl;
    function isCropSupported: Boolean; cdecl;
    function isRotateSupported: Boolean; cdecl;
    function rotateCounterClockwise: JBinaryBitmap; cdecl;
    function rotateCounterClockwise45: JBinaryBitmap; cdecl;
    function toString: JString; cdecl;
  end;

  TJBinaryBitmap = class(TJavaGenericImport<JBinaryBitmapClass, JBinaryBitmap>)
  end;

  JTokenClass = interface(JObjectClass)
    ['{8D52DAC0-5F4D-461D-AD70-66D92FE1FE5E}']
  end;

  [JavaSignature('com/google/zxing/aztec/encoder/Token')]
  JToken = interface(JObject)
    ['{1C751148-C731-4DA6-82C8-458BF350CE94}']
  end;

  TJToken = class(TJavaGenericImport<JTokenClass, JToken>)
  end;

  JBinaryShiftTokenClass = interface(JTokenClass)
    ['{744EA0C2-FFDD-4F22-B4EE-B7AF31C8E86A}']
  end;

  [JavaSignature('com/google/zxing/aztec/encoder/BinaryShiftToken')]
  JBinaryShiftToken = interface(JToken)
    ['{2C7E1606-FE0F-49FB-A9D7-B267E0A7C2AF}']
    procedure appendTo(bitArray: JBitArray; text: TJavaArray<Byte>); cdecl;
    function toString: JString; cdecl;
  end;

  TJBinaryShiftToken = class(TJavaGenericImport<JBinaryShiftTokenClass, JBinaryShiftToken>)
  end;

  JBitArrayClass = interface(JObjectClass)
    ['{DF0D1CD8-85DE-41B1-879F-FBAA4AD75D0A}']
    function init: JBitArray; cdecl; overload;
    function init(size: Integer): JBitArray; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/common/BitArray')]
  JBitArray = interface(JObject)
    ['{456C90B5-C88D-4CA8-AA39-6E65017AD759}']
    procedure appendBit(bit: Boolean); cdecl;
    procedure appendBitArray(other: JBitArray); cdecl;
    procedure appendBits(value: Integer; numBits: Integer); cdecl;
    procedure clear; cdecl;
    function clone: JBitArray; cdecl; overload;
    // function clone: JObject; cdecl; overload;
    function equals(o: JObject): Boolean; cdecl;
    procedure flip(i: Integer); cdecl;
    function get(i: Integer): Boolean; cdecl;
    function getBitArray: TJavaArray<Integer>; cdecl;
    function getNextSet(from: Integer): Integer; cdecl;
    function getNextUnset(from: Integer): Integer; cdecl;
    function getSize: Integer; cdecl;
    function getSizeInBytes: Integer; cdecl;
    function hashCode: Integer; cdecl;
    function isRange(start: Integer; &end: Integer; value: Boolean): Boolean; cdecl;
    procedure reverse; cdecl;
    procedure &set(i: Integer); cdecl;
    procedure setBulk(i: Integer; newBits: Integer); cdecl;
    procedure setRange(start: Integer; &end: Integer); cdecl;
    procedure toBytes(bitOffset: Integer; &array: TJavaArray<Byte>; offset: Integer; numBytes: Integer); cdecl;
    function toString: JString; cdecl;
    procedure &xor(other: JBitArray); cdecl;
  end;

  TJBitArray = class(TJavaGenericImport<JBitArrayClass, JBitArray>)
  end;

  JBitArrayBuilderClass = interface(JObjectClass)
    ['{9F01E392-DB2E-4DE3-9FB0-5589CE207BBE}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/BitArrayBuilder')]
  JBitArrayBuilder = interface(JObject)
    ['{731EFF91-0FB3-4E7F-A7CB-4B50D9A06436}']
  end;

  TJBitArrayBuilder = class(TJavaGenericImport<JBitArrayBuilderClass, JBitArrayBuilder>)
  end;

  JBitMatrixClass = interface(JObjectClass)
    ['{86E9C2B1-8454-478C-B404-AA4B3C9D30D2}']
    function init(dimension: Integer): JBitMatrix; cdecl; overload;
    function init(width: Integer; height: Integer): JBitMatrix; cdecl; overload;
    function parse(image: TJavaBiArray<Boolean>): JBitMatrix; cdecl; overload;
    function parse(stringRepresentation: JString; setString: JString; unsetString: JString): JBitMatrix; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/common/BitMatrix')]
  JBitMatrix = interface(JObject)
    ['{4419F3AA-0402-44FB-B3D4-C4E152433EAA}']
    procedure clear; cdecl;
    function clone: JBitMatrix; cdecl; overload;
    // function clone: JObject; cdecl; overload;
    function equals(o: JObject): Boolean; cdecl;
    procedure flip; cdecl; overload;
    procedure flip(x: Integer; y: Integer); cdecl; overload;
    function get(x: Integer; y: Integer): Boolean; cdecl;
    function getBottomRightOnBit: TJavaArray<Integer>; cdecl;
    function getEnclosingRectangle: TJavaArray<Integer>; cdecl;
    function getHeight: Integer; cdecl;
    function getRow(y: Integer; row: JBitArray): JBitArray; cdecl;
    function getRowSize: Integer; cdecl;
    function getTopLeftOnBit: TJavaArray<Integer>; cdecl;
    function getWidth: Integer; cdecl;
    function hashCode: Integer; cdecl;
    procedure rotate180; cdecl;
    procedure rotate90; cdecl;
    procedure &set(x: Integer; y: Integer); cdecl;
    procedure setRegion(left: Integer; top: Integer; width: Integer; height: Integer); cdecl;
    procedure setRow(y: Integer; row: JBitArray); cdecl;
    function toString: JString; cdecl; overload;
    function toString(setString: JString; unsetString: JString): JString; cdecl; overload;
    function toString(setString: JString; unsetString: JString; lineSeparator: JString): JString; cdecl; overload; deprecated;
    procedure unset(x: Integer; y: Integer); cdecl;
    procedure &xor(mask: JBitMatrix); cdecl;
  end;

  TJBitMatrix = class(TJavaGenericImport<JBitMatrixClass, JBitMatrix>)
  end;

  JBitMatrixParserClass = interface(JObjectClass)
    ['{B171DEE8-11AF-4092-B3C5-D59D798B2D0F}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/BitMatrixParser')]
  JBitMatrixParser = interface(JObject)
    ['{880BE4D1-8ED5-454E-9C66-5FBF4A88881D}']
  end;

  TJBitMatrixParser = class(TJavaGenericImport<JBitMatrixParserClass, JBitMatrixParser>)
  end;

  JBitMatrixParser1Class = interface(JObjectClass)
    ['{7B45DE5B-2E19-4ABE-A558-BBB7A46591B1}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/BitMatrixParser')]
  JBitMatrixParser1 = interface(JObject)
    ['{B10B9693-98E4-4C16-B755-AACED564C212}']
  end;

  TJBitMatrixParser1 = class(TJavaGenericImport<JBitMatrixParser1Class, JBitMatrixParser1>)
  end;

  JBitMatrixParser2Class = interface(JObjectClass)
    ['{5C75B750-604B-46EB-B47B-416139A91901}']
  end;

  [JavaSignature('com/google/zxing/maxicode/decoder/BitMatrixParser')]
  JBitMatrixParser2 = interface(JObject)
    ['{0FBD5DDF-04C6-4EF7-A0AF-E6F0A48BC75F}']
  end;

  TJBitMatrixParser2 = class(TJavaGenericImport<JBitMatrixParser2Class, JBitMatrixParser2>)
  end;

  JBitSourceClass = interface(JObjectClass)
    ['{B361B360-C7E1-48FC-BE61-C1D97877ECD4}']
    function init(bytes: TJavaArray<Byte>): JBitSource; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/BitSource')]
  JBitSource = interface(JObject)
    ['{F14617E3-E7DD-405E-AB9A-D17A86720055}']
    function available: Integer; cdecl;
    function getBitOffset: Integer; cdecl;
    function getByteOffset: Integer; cdecl;
    function readBits(numBits: Integer): Integer; cdecl;
  end;

  TJBitSource = class(TJavaGenericImport<JBitSourceClass, JBitSource>)
  end;

  JBizcardResultParserClass = interface(JAbstractDoCoMoResultParserClass)
    ['{66DE288F-55C8-42E4-9C29-643F1846B711}']
    function init: JBizcardResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/BizcardResultParser')]
  JBizcardResultParser = interface(JAbstractDoCoMoResultParser)
    ['{57E3C608-7DE3-4427-96C0-976216E163B4}']
    function parse(result: JResult): JAddressBookParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJBizcardResultParser = class(TJavaGenericImport<JBizcardResultParserClass, JBizcardResultParser>)
  end;

  JBlockPairClass = interface(JObjectClass)
    ['{01A93402-41D7-4618-90AA-B0BD43E2208D}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/BlockPair')]
  JBlockPair = interface(JObject)
    ['{A81937BE-367E-4F06-A8DB-732A02160F69}']
    function getDataBytes: TJavaArray<Byte>; cdecl;
    function getErrorCorrectionBytes: TJavaArray<Byte>; cdecl;
  end;

  TJBlockPair = class(TJavaGenericImport<JBlockPairClass, JBlockPair>)
  end;

  JBlockParsedResultClass = interface(JObjectClass)
    ['{2C22C72B-EC9B-4FD7-B089-964512560BDF}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult')]
  JBlockParsedResult = interface(JObject)
    ['{DFFB2AD9-330B-456B-9EC5-88402B7C6B6C}']
  end;

  TJBlockParsedResult = class(TJavaGenericImport<JBlockParsedResultClass, JBlockParsedResult>)
  end;

  JBookmarkDoCoMoResultParserClass = interface(JAbstractDoCoMoResultParserClass)
    ['{AEA49D79-182B-4060-80DB-AE8A3BB8F822}']
    function init: JBookmarkDoCoMoResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/BookmarkDoCoMoResultParser')]
  JBookmarkDoCoMoResultParser = interface(JAbstractDoCoMoResultParser)
    ['{379AD174-1EB2-4861-BAC4-37C39B3FB12E}']
    function parse(result: JResult): JURIParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJBookmarkDoCoMoResultParser = class(TJavaGenericImport<JBookmarkDoCoMoResultParserClass, JBookmarkDoCoMoResultParser>)
  end;

  JBoundingBoxClass = interface(JObjectClass)
    ['{835B3438-A51D-4FC1-9ADA-0F47642396FC}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/BoundingBox')]
  JBoundingBox = interface(JObject)
    ['{B1D6632F-5415-4048-A320-38EA3F998C1B}']
  end;

  TJBoundingBox = class(TJavaGenericImport<JBoundingBoxClass, JBoundingBox>)
  end;

  JByQuadrantReaderClass = interface(JObjectClass)
    ['{852FE190-856F-46E0-8866-8BC043BFED9B}']
    function init(delegate: JReader): JByQuadrantReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/multi/ByQuadrantReader')]
  JByQuadrantReader = interface(JObject)
    ['{C016AA74-B532-4833-94EA-6E109FF0A723}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    procedure reset; cdecl;
  end;

  TJByQuadrantReader = class(TJavaGenericImport<JByQuadrantReaderClass, JByQuadrantReader>)
  end;

  JByteMatrixClass = interface(JObjectClass)
    ['{C9906ED1-09DD-4CE7-91B0-711D8B4D6015}']
    function init(width: Integer; height: Integer): JByteMatrix; cdecl;
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/ByteMatrix')]
  JByteMatrix = interface(JObject)
    ['{95C09020-0927-47D2-8A70-F2289AABD793}']
    procedure clear(value: Byte); cdecl;
    function get(x: Integer; y: Integer): Byte; cdecl;
    function getArray: TJavaBiArray<Byte>; cdecl;
    function getHeight: Integer; cdecl;
    function getWidth: Integer; cdecl;
    procedure &set(x: Integer; y: Integer; value: Integer); cdecl; overload;
    procedure &set(x: Integer; y: Integer; value: Boolean); cdecl; overload;
    procedure &set(x: Integer; y: Integer; value: Byte); cdecl; overload;
    function toString: JString; cdecl;
  end;

  TJByteMatrix = class(TJavaGenericImport<JByteMatrixClass, JByteMatrix>)
  end;

  JC40EncoderClass = interface(JObjectClass)
    ['{4E0FD811-7D53-4A32-B243-A3BB76883E72}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/C40Encoder')]
  JC40Encoder = interface(JObject)
    ['{77B759CC-D481-44AD-A9AC-C37B05025D2B}']
    procedure encode(context: JEncoderContext); cdecl;
    function getEncodingMode: Integer; cdecl;
  end;

  TJC40Encoder = class(TJavaGenericImport<JC40EncoderClass, JC40Encoder>)
  end;

  JCalendarParsedResultClass = interface(JParsedResultClass)
    ['{5A395B3A-04C8-46FE-87E6-91793EE8567F}']
    function init(summary: JString; startString: JString; endString: JString; durationString: JString; location: JString; organizer: JString; attendees: TJavaObjectArray<JString>; description: JString; latitude: Double; longitude: Double): JCalendarParsedResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/CalendarParsedResult')]
  JCalendarParsedResult = interface(JParsedResult)
    ['{2AA09D5E-CEF4-4B44-9AE3-2BA04525D154}']
    function getAttendees: TJavaObjectArray<JString>; cdecl;
    function getDescription: JString; cdecl;
    function getDisplayResult: JString; cdecl;
    function getEnd: JDate; cdecl; deprecated;
    function getEndTimestamp: Int64; cdecl;
    function getLatitude: Double; cdecl;
    function getLocation: JString; cdecl;
    function getLongitude: Double; cdecl;
    function getOrganizer: JString; cdecl;
    function getStart: JDate; cdecl; deprecated;
    function getStartTimestamp: Int64; cdecl;
    function getSummary: JString; cdecl;
    function isEndAllDay: Boolean; cdecl;
    function isStartAllDay: Boolean; cdecl;
  end;

  TJCalendarParsedResult = class(TJavaGenericImport<JCalendarParsedResultClass, JCalendarParsedResult>)
  end;

  JCharacterSetECIClass = interface(JEnumClass)
    ['{9609577C-91F8-4AFB-B695-05DF4F92534E}']
    function _GetASCII: JCharacterSetECI;
    procedure _SetASCII(Value: JCharacterSetECI);
    function _GetBig5: JCharacterSetECI;
    procedure _SetBig5(Value: JCharacterSetECI);
    function _GetCp1250: JCharacterSetECI;
    procedure _SetCp1250(Value: JCharacterSetECI);
    function _GetCp1251: JCharacterSetECI;
    procedure _SetCp1251(Value: JCharacterSetECI);
    function _GetCp1252: JCharacterSetECI;
    procedure _SetCp1252(Value: JCharacterSetECI);
    function _GetCp1256: JCharacterSetECI;
    procedure _SetCp1256(Value: JCharacterSetECI);
    function _GetCp437: JCharacterSetECI;
    procedure _SetCp437(Value: JCharacterSetECI);
    function _GetEUC_KR: JCharacterSetECI;
    procedure _SetEUC_KR(Value: JCharacterSetECI);
    function _GetGB18030: JCharacterSetECI;
    procedure _SetGB18030(Value: JCharacterSetECI);
    function _GetISO8859_1: JCharacterSetECI;
    procedure _SetISO8859_1(Value: JCharacterSetECI);
    function _GetISO8859_13: JCharacterSetECI;
    procedure _SetISO8859_13(Value: JCharacterSetECI);
    function _GetISO8859_15: JCharacterSetECI;
    procedure _SetISO8859_15(Value: JCharacterSetECI);
    function _GetISO8859_16: JCharacterSetECI;
    procedure _SetISO8859_16(Value: JCharacterSetECI);
    function _GetISO8859_2: JCharacterSetECI;
    procedure _SetISO8859_2(Value: JCharacterSetECI);
    function _GetISO8859_3: JCharacterSetECI;
    procedure _SetISO8859_3(Value: JCharacterSetECI);
    function _GetISO8859_4: JCharacterSetECI;
    procedure _SetISO8859_4(Value: JCharacterSetECI);
    function _GetISO8859_5: JCharacterSetECI;
    procedure _SetISO8859_5(Value: JCharacterSetECI);
    function _GetISO8859_7: JCharacterSetECI;
    procedure _SetISO8859_7(Value: JCharacterSetECI);
    function _GetISO8859_9: JCharacterSetECI;
    procedure _SetISO8859_9(Value: JCharacterSetECI);
    function _GetSJIS: JCharacterSetECI;
    procedure _SetSJIS(Value: JCharacterSetECI);
    function _GetUnicodeBigUnmarked: JCharacterSetECI;
    procedure _SetUnicodeBigUnmarked(Value: JCharacterSetECI);
    function _GetUTF8: JCharacterSetECI;
    procedure _SetUTF8(Value: JCharacterSetECI);
    function getCharacterSetECI(charset: JObject {java/nio/charset/Charset}): JCharacterSetECI; cdecl;
    function getCharacterSetECIByName(name: JString): JCharacterSetECI; cdecl;
    function getCharacterSetECIByValue(value: Integer): JCharacterSetECI; cdecl;
    function valueOf(name: JString): JCharacterSetECI; cdecl;
    function values: TJavaObjectArray<JCharacterSetECI>; cdecl;
    property ASCII: JCharacterSetECI read _GetASCII write _SetASCII;
    property Big5: JCharacterSetECI read _GetBig5 write _SetBig5;
    property Cp1250: JCharacterSetECI read _GetCp1250 write _SetCp1250;
    property Cp1251: JCharacterSetECI read _GetCp1251 write _SetCp1251;
    property Cp1252: JCharacterSetECI read _GetCp1252 write _SetCp1252;
    property Cp1256: JCharacterSetECI read _GetCp1256 write _SetCp1256;
    property Cp437: JCharacterSetECI read _GetCp437 write _SetCp437;
    property EUC_KR: JCharacterSetECI read _GetEUC_KR write _SetEUC_KR;
    property GB18030: JCharacterSetECI read _GetGB18030 write _SetGB18030;
    property ISO8859_1: JCharacterSetECI read _GetISO8859_1 write _SetISO8859_1;
    property ISO8859_13: JCharacterSetECI read _GetISO8859_13 write _SetISO8859_13;
    property ISO8859_15: JCharacterSetECI read _GetISO8859_15 write _SetISO8859_15;
    property ISO8859_16: JCharacterSetECI read _GetISO8859_16 write _SetISO8859_16;
    property ISO8859_2: JCharacterSetECI read _GetISO8859_2 write _SetISO8859_2;
    property ISO8859_3: JCharacterSetECI read _GetISO8859_3 write _SetISO8859_3;
    property ISO8859_4: JCharacterSetECI read _GetISO8859_4 write _SetISO8859_4;
    property ISO8859_5: JCharacterSetECI read _GetISO8859_5 write _SetISO8859_5;
    property ISO8859_7: JCharacterSetECI read _GetISO8859_7 write _SetISO8859_7;
    property ISO8859_9: JCharacterSetECI read _GetISO8859_9 write _SetISO8859_9;
    property SJIS: JCharacterSetECI read _GetSJIS write _SetSJIS;
    property UnicodeBigUnmarked: JCharacterSetECI read _GetUnicodeBigUnmarked write _SetUnicodeBigUnmarked;
    property UTF8: JCharacterSetECI read _GetUTF8 write _SetUTF8;
  end;

  [JavaSignature('com/google/zxing/common/CharacterSetECI')]
  JCharacterSetECI = interface(JEnum)
    ['{FB6E0834-8A34-481C-8E45-01286E1AAB95}']
    function getCharset: JObject {java/nio/charset/Charset}; cdecl;
    function getValue: Integer; cdecl;
  end;

  TJCharacterSetECI = class(TJavaGenericImport<JCharacterSetECIClass, JCharacterSetECI>)
  end;

  JReaderExceptionClass = interface(JExceptionClass)
    ['{1BD30D39-2834-4B0F-B02D-BC87991AD746}']
  end;

  [JavaSignature('com/google/zxing/ReaderException')]
  JReaderException = interface(JException)
    ['{BA44F494-B772-468B-B962-86A0744A6DDA}']
    function fillInStackTrace: JThrowable; cdecl;
  end;

  TJReaderException = class(TJavaGenericImport<JReaderExceptionClass, JReaderException>)
  end;

  JChecksumExceptionClass = interface(JReaderExceptionClass)
    ['{AD7DCEA1-AD13-463D-BADB-57F72113803D}']
    function getChecksumInstance: JChecksumException; cdecl; overload;
    function getChecksumInstance(cause: JThrowable): JChecksumException; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/ChecksumException')]
  JChecksumException = interface(JReaderException)
    ['{CE442829-5A97-4DC6-A7E7-2E5DC7574DF2}']
  end;

  TJChecksumException = class(TJavaGenericImport<JChecksumExceptionClass, JChecksumException>)
  end;

  JCodaBarReaderClass = interface(JOneDReaderClass)
    ['{2FFF4803-115B-4B8B-AE3C-1B5BB2B4E92C}']
    function init: JCodaBarReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/CodaBarReader')]
  JCodaBarReader = interface(JOneDReader)
    ['{1D3A86AA-C964-4413-A225-405F892EDD99}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
  end;

  TJCodaBarReader = class(TJavaGenericImport<JCodaBarReaderClass, JCodaBarReader>)
  end;

  JOneDimensionalCodeWriterClass = interface(JObjectClass)
    ['{4491FE65-75C2-4171-8B2B-31B8B657BD72}']
    function init: JOneDimensionalCodeWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/OneDimensionalCodeWriter')]
  JOneDimensionalCodeWriter = interface(JObject)
    ['{52D3CF7A-664A-4FBC-B653-5D63F5BE21A0}']
    function encode(param0: JString): TJavaArray<Boolean>; cdecl; overload;
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer): JBitMatrix; cdecl; overload;
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer; hints: JMap): JBitMatrix; cdecl; overload;
    function getDefaultMargin: Integer; cdecl;
  end;

  TJOneDimensionalCodeWriter = class(TJavaGenericImport<JOneDimensionalCodeWriterClass, JOneDimensionalCodeWriter>)
  end;

  JCodaBarWriterClass = interface(JOneDimensionalCodeWriterClass)
    ['{FA229CB8-E469-4BE7-8816-D701083DF5A3}']
    function init: JCodaBarWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/CodaBarWriter')]
  JCodaBarWriter = interface(JOneDimensionalCodeWriter)
    ['{AD1AABA1-DE58-471E-87A1-7B5EBA8ECE90}']
    function encode(contents: JString): TJavaArray<Boolean>; cdecl;
  end;

  TJCodaBarWriter = class(TJavaGenericImport<JCodaBarWriterClass, JCodaBarWriter>)
  end;

  JCode128ReaderClass = interface(JOneDReaderClass)
    ['{7CA083AE-DAB6-4D04-8348-5354AEE8547E}']
    function init: JCode128Reader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/Code128Reader')]
  JCode128Reader = interface(JOneDReader)
    ['{0774F382-596F-49E3-866D-4F5C65FD1183}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
  end;

  TJCode128Reader = class(TJavaGenericImport<JCode128ReaderClass, JCode128Reader>)
  end;

  JCode128WriterClass = interface(JOneDimensionalCodeWriterClass)
    ['{59AD6C09-C276-4293-B283-D5404EA5E1A5}']
    function init: JCode128Writer; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/Code128Writer')]
  JCode128Writer = interface(JOneDimensionalCodeWriter)
    ['{51066D99-F611-4DD4-BB67-5C8F422CCAC4}']
    function encode(contents: JString): TJavaArray<Boolean>; cdecl;
  end;

  TJCode128Writer = class(TJavaGenericImport<JCode128WriterClass, JCode128Writer>)
  end;

  JCode128Writer_CTypeClass = interface(JEnumClass)
    ['{DB96FFAA-A49E-42F2-8305-97C8ED74CC68}']
    function _GetFNC_1: JCode128Writer_CType;
    procedure _SetFNC_1(Value: JCode128Writer_CType);
    function _GetONE_DIGIT: JCode128Writer_CType;
    procedure _SetONE_DIGIT(Value: JCode128Writer_CType);
    function _GetTWO_DIGITS: JCode128Writer_CType;
    procedure _SetTWO_DIGITS(Value: JCode128Writer_CType);
    function _GetUNCODABLE: JCode128Writer_CType;
    procedure _SetUNCODABLE(Value: JCode128Writer_CType);
    function valueOf(name: JString): JCode128Writer_CType; cdecl;
    function values: TJavaObjectArray<JCode128Writer_CType>; cdecl;
    property FNC_1: JCode128Writer_CType read _GetFNC_1 write _SetFNC_1;
    property ONE_DIGIT: JCode128Writer_CType read _GetONE_DIGIT write _SetONE_DIGIT;
    property TWO_DIGITS: JCode128Writer_CType read _GetTWO_DIGITS write _SetTWO_DIGITS;
    property UNCODABLE: JCode128Writer_CType read _GetUNCODABLE write _SetUNCODABLE;
  end;

  [JavaSignature('com/google/zxing/oned/Code128Writer$CType')]
  JCode128Writer_CType = interface(JEnum)
    ['{20EF5DB3-D239-4265-875D-3A6CC6BDB957}']
  end;

  TJCode128Writer_CType = class(TJavaGenericImport<JCode128Writer_CTypeClass, JCode128Writer_CType>)
  end;

  JCode39ReaderClass = interface(JOneDReaderClass)
    ['{E0928601-7D07-41E1-8334-E659BBBC5389}']
    function init: JCode39Reader; cdecl; overload;
    function init(usingCheckDigit: Boolean): JCode39Reader; cdecl; overload;
    function init(usingCheckDigit: Boolean; extendedMode: Boolean): JCode39Reader; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/oned/Code39Reader')]
  JCode39Reader = interface(JOneDReader)
    ['{38411EC5-23C8-4C6C-9682-AEE4DCC02EEE}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
  end;

  TJCode39Reader = class(TJavaGenericImport<JCode39ReaderClass, JCode39Reader>)
  end;

  JCode39WriterClass = interface(JOneDimensionalCodeWriterClass)
    ['{6916C534-AA37-446B-BCFE-04DD94646AB5}']
    function init: JCode39Writer; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/Code39Writer')]
  JCode39Writer = interface(JOneDimensionalCodeWriter)
    ['{6B0A8DDF-66C1-42C9-9B3D-E50039DB34AC}']
    function encode(contents: JString): TJavaArray<Boolean>; cdecl;
  end;

  TJCode39Writer = class(TJavaGenericImport<JCode39WriterClass, JCode39Writer>)
  end;

  JCode93ReaderClass = interface(JOneDReaderClass)
    ['{4D383DDE-641F-4FF7-BFCD-9B20956C23A7}']
    function init: JCode93Reader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/Code93Reader')]
  JCode93Reader = interface(JOneDReader)
    ['{A2365CF0-97A4-4192-BA0A-A81D25AB1B24}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
  end;

  TJCode93Reader = class(TJavaGenericImport<JCode93ReaderClass, JCode93Reader>)
  end;

  JCode93WriterClass = interface(JOneDimensionalCodeWriterClass)
    ['{AE661D25-AF17-4B81-84B3-8504BD492D19}']
    function init: JCode93Writer; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/Code93Writer')]
  JCode93Writer = interface(JOneDimensionalCodeWriter)
    ['{92402B59-67A0-4367-B99D-3A10C9335ECF}']
    function encode(contents: JString): TJavaArray<Boolean>; cdecl;
  end;

  TJCode93Writer = class(TJavaGenericImport<JCode93WriterClass, JCode93Writer>)
  end;

  JCodewordClass = interface(JObjectClass)
    ['{6F12109F-A9E3-4D01-B56C-7ED5ECEF0C4C}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/Codeword')]
  JCodeword = interface(JObject)
    ['{09D7AE0B-3116-440A-BA60-3743EF8E07B4}']
    function toString: JString; cdecl;
  end;

  TJCodeword = class(TJavaGenericImport<JCodewordClass, JCodeword>)
  end;

  JCompactionClass = interface(JEnumClass)
    ['{8076C3CE-F12D-4713-922C-62DE0FDA7657}']
    function _GetAUTO: JCompaction;
    procedure _SetAUTO(Value: JCompaction);
    function _GetBYTE: JCompaction;
    procedure _SetBYTE(Value: JCompaction);
    function _GetNUMERIC: JCompaction;
    procedure _SetNUMERIC(Value: JCompaction);
    function _GetTEXT: JCompaction;
    procedure _SetTEXT(Value: JCompaction);
    function valueOf(name: JString): JCompaction; cdecl;
    function values: TJavaObjectArray<JCompaction>; cdecl;
    property AUTO: JCompaction read _GetAUTO write _SetAUTO;
    property BYTE: JCompaction read _GetBYTE write _SetBYTE;
    property NUMERIC: JCompaction read _GetNUMERIC write _SetNUMERIC;
    property TEXT: JCompaction read _GetTEXT write _SetTEXT;
  end;

  [JavaSignature('com/google/zxing/pdf417/encoder/Compaction')]
  JCompaction = interface(JEnum)
    ['{EBADBBF9-E080-4E8A-A878-9181442C506E}']
  end;

  TJCompaction = class(TJavaGenericImport<JCompactionClass, JCompaction>)
  end;

  JCurrentParsingStateClass = interface(JObjectClass)
    ['{D5F3A7C8-0F63-455C-9DFC-82869F29B433}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState')]
  JCurrentParsingState = interface(JObject)
    ['{D7304BA8-BDED-4C82-9F51-34B4AEFDE2F9}']
  end;

  TJCurrentParsingState = class(TJavaGenericImport<JCurrentParsingStateClass, JCurrentParsingState>)
  end;

  JCurrentParsingState_StateClass = interface(JEnumClass)
    ['{51F50C2E-3F02-4020-AB4B-1A25924ED42A}']
    function _GetALPHA: JCurrentParsingState_State;
    procedure _SetALPHA(Value: JCurrentParsingState_State);
    function _GetISO_IEC_646: JCurrentParsingState_State;
    procedure _SetISO_IEC_646(Value: JCurrentParsingState_State);
    function _GetNUMERIC: JCurrentParsingState_State;
    procedure _SetNUMERIC(Value: JCurrentParsingState_State);
    function valueOf(name: JString): JCurrentParsingState_State; cdecl;
    function values: TJavaObjectArray<JCurrentParsingState_State>; cdecl;
    property ALPHA: JCurrentParsingState_State read _GetALPHA write _SetALPHA;
    property ISO_IEC_646: JCurrentParsingState_State read _GetISO_IEC_646 write _SetISO_IEC_646;
    property NUMERIC: JCurrentParsingState_State read _GetNUMERIC write _SetNUMERIC;
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState$State')]
  JCurrentParsingState_State = interface(JEnum)
    ['{38D4D783-B095-4977-B53C-A376647D9CB8}']
  end;

  TJCurrentParsingState_State = class(TJavaGenericImport<JCurrentParsingState_StateClass, JCurrentParsingState_State>)
  end;

  JDataBlockClass = interface(JObjectClass)
    ['{A24ACB17-8ABF-43F9-BA1F-A391244FA03A}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataBlock')]
  JDataBlock = interface(JObject)
    ['{C1E67AD1-9B77-492A-886D-CA8408E6CDE3}']
  end;

  TJDataBlock = class(TJavaGenericImport<JDataBlockClass, JDataBlock>)
  end;

  JDataBlock1Class = interface(JObjectClass)
    ['{908C33B3-BA40-49BE-8DB4-97CCD8516233}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/DataBlock')]
  JDataBlock1 = interface(JObject)
    ['{CA0F2C4C-42B1-4C17-9B82-31F29706CB23}']
  end;

  TJDataBlock1 = class(TJavaGenericImport<JDataBlock1Class, JDataBlock1>)
  end;

  JDataCharacterClass = interface(JObjectClass)
    ['{8BBBA305-EC8E-468D-BFD5-FF8B24BF7825}']
    function init(value: Integer; checksumPortion: Integer): JDataCharacter; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/rss/DataCharacter')]
  JDataCharacter = interface(JObject)
    ['{EF6023DE-1827-4BCD-B134-CA7503DF9C14}']
    function equals(o: JObject): Boolean; cdecl;
    function getChecksumPortion: Integer; cdecl;
    function getValue: Integer; cdecl;
    function hashCode: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJDataCharacter = class(TJavaGenericImport<JDataCharacterClass, JDataCharacter>)
  end;

  JDataMaskClass = interface(JEnumClass)
    ['{EF4BFE5F-BB56-4C3A-9BCE-CFBF7685CE5B}']
    function _GetDATA_MASK_000: JDataMask;
    procedure _SetDATA_MASK_000(Value: JDataMask);
    function _GetDATA_MASK_001: JDataMask;
    procedure _SetDATA_MASK_001(Value: JDataMask);
    function _GetDATA_MASK_010: JDataMask;
    procedure _SetDATA_MASK_010(Value: JDataMask);
    function _GetDATA_MASK_011: JDataMask;
    procedure _SetDATA_MASK_011(Value: JDataMask);
    function _GetDATA_MASK_100: JDataMask;
    procedure _SetDATA_MASK_100(Value: JDataMask);
    function _GetDATA_MASK_101: JDataMask;
    procedure _SetDATA_MASK_101(Value: JDataMask);
    function _GetDATA_MASK_110: JDataMask;
    procedure _SetDATA_MASK_110(Value: JDataMask);
    function _GetDATA_MASK_111: JDataMask;
    procedure _SetDATA_MASK_111(Value: JDataMask);
    function valueOf(name: JString): JDataMask; cdecl;
    function values: TJavaObjectArray<JDataMask>; cdecl;
    property DATA_MASK_000: JDataMask read _GetDATA_MASK_000 write _SetDATA_MASK_000;
    property DATA_MASK_001: JDataMask read _GetDATA_MASK_001 write _SetDATA_MASK_001;
    property DATA_MASK_010: JDataMask read _GetDATA_MASK_010 write _SetDATA_MASK_010;
    property DATA_MASK_011: JDataMask read _GetDATA_MASK_011 write _SetDATA_MASK_011;
    property DATA_MASK_100: JDataMask read _GetDATA_MASK_100 write _SetDATA_MASK_100;
    property DATA_MASK_101: JDataMask read _GetDATA_MASK_101 write _SetDATA_MASK_101;
    property DATA_MASK_110: JDataMask read _GetDATA_MASK_110 write _SetDATA_MASK_110;
    property DATA_MASK_111: JDataMask read _GetDATA_MASK_111 write _SetDATA_MASK_111;
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask')]
  JDataMask = interface(JEnum)
    ['{867A8DF2-1D14-4818-8533-073AD9335D86}']
  end;

  TJDataMask = class(TJavaGenericImport<JDataMaskClass, JDataMask>)
  end;

  JDataMask_1Class = interface(JDataMaskClass)
    ['{B41E8F1F-41AB-4487-9D52-23EB5A5B3B3E}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask$1')]
  JDataMask_1 = interface(JDataMask)
    ['{551C007B-4432-4A2F-93D0-2765A40901B1}']
  end;

  TJDataMask_1 = class(TJavaGenericImport<JDataMask_1Class, JDataMask_1>)
  end;

  JDataMask_2Class = interface(JDataMaskClass)
    ['{D8636488-AD07-4CEB-AA6D-4EB32FC9767F}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask$2')]
  JDataMask_2 = interface(JDataMask)
    ['{D52F6928-B82C-467F-8988-7FB802B67603}']
  end;

  TJDataMask_2 = class(TJavaGenericImport<JDataMask_2Class, JDataMask_2>)
  end;

  JDataMask_3Class = interface(JDataMaskClass)
    ['{BD3CA9B4-453E-4C09-9C34-2FDD5A463EFE}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask$3')]
  JDataMask_3 = interface(JDataMask)
    ['{4B4D6813-CF1A-4B3F-ACD3-80E413C6F50E}']
  end;

  TJDataMask_3 = class(TJavaGenericImport<JDataMask_3Class, JDataMask_3>)
  end;

  JDataMask_4Class = interface(JDataMaskClass)
    ['{7C182197-5A7E-4C18-BA70-8C0949ECBE28}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask$4')]
  JDataMask_4 = interface(JDataMask)
    ['{A67DC26D-55E2-4DD0-9B79-76514D814AF0}']
  end;

  TJDataMask_4 = class(TJavaGenericImport<JDataMask_4Class, JDataMask_4>)
  end;

  JDataMask_5Class = interface(JDataMaskClass)
    ['{F4722CA3-00CA-4C1C-8B62-6BE4FB40D527}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask$5')]
  JDataMask_5 = interface(JDataMask)
    ['{B9F801D9-7CE6-4C61-B426-989F4F11F116}']
  end;

  TJDataMask_5 = class(TJavaGenericImport<JDataMask_5Class, JDataMask_5>)
  end;

  JDataMask_6Class = interface(JDataMaskClass)
    ['{62855C20-A8ED-42A0-8D89-FC618B28AD49}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask$6')]
  JDataMask_6 = interface(JDataMask)
    ['{A4E4B66C-51FF-4F16-B85E-C4D37294E482}']
  end;

  TJDataMask_6 = class(TJavaGenericImport<JDataMask_6Class, JDataMask_6>)
  end;

  JDataMask_7Class = interface(JDataMaskClass)
    ['{02A88C2E-6D0C-43BA-8785-22D24436D905}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask$7')]
  JDataMask_7 = interface(JDataMask)
    ['{B2797AD6-CBCE-45AD-B62F-4DD69C632285}']
  end;

  TJDataMask_7 = class(TJavaGenericImport<JDataMask_7Class, JDataMask_7>)
  end;

  JDataMask_8Class = interface(JDataMaskClass)
    ['{B7DE03F9-7C49-4A27-8F85-0A1F9886A9B5}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DataMask$8')]
  JDataMask_8 = interface(JDataMask)
    ['{70425AAC-6C71-48AA-9C3A-23F1557873B8}']
  end;

  TJDataMask_8 = class(TJavaGenericImport<JDataMask_8Class, JDataMask_8>)
  end;

  JDataMatrixReaderClass = interface(JObjectClass)
    ['{DE15E6DA-F31E-422F-9C43-A9C29B5FAFEC}']
    function init: JDataMatrixReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/datamatrix/DataMatrixReader')]
  JDataMatrixReader = interface(JObject)
    ['{0A76A7D5-ED02-44A8-9C44-8D196D004117}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    procedure reset; cdecl;
  end;

  TJDataMatrixReader = class(TJavaGenericImport<JDataMatrixReaderClass, JDataMatrixReader>)
  end;

  JSymbolInfoClass = interface(JObjectClass)
    ['{323A35E3-ABA4-48F6-9793-2201152AC080}']
    function init(rectangular: Boolean; dataCapacity: Integer; errorCodewords: Integer; matrixWidth: Integer; matrixHeight: Integer; dataRegions: Integer): JSymbolInfo; cdecl;
    function lookup(dataCodewords: Integer): JSymbolInfo; cdecl; overload;
    function lookup(dataCodewords: Integer; shape: JSymbolShapeHint): JSymbolInfo; cdecl; overload;
    function lookup(dataCodewords: Integer; allowRectangular: Boolean; fail: Boolean): JSymbolInfo; cdecl; overload;
    function lookup(dataCodewords: Integer; shape: JSymbolShapeHint; minSize: JDimension; maxSize: JDimension; fail: Boolean): JSymbolInfo; cdecl; overload;
    procedure overrideSymbolSet(&override: TJavaObjectArray<JSymbolInfo>); cdecl;
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/SymbolInfo')]
  JSymbolInfo = interface(JObject)
    ['{902A1FF5-5F34-4CFB-8533-8D9DE7D162CA}']
    function _GetmatrixHeight: Integer;
    procedure _SetmatrixHeight(Value: Integer);
    function _GetmatrixWidth: Integer;
    procedure _SetmatrixWidth(Value: Integer);
    function getCodewordCount: Integer; cdecl;
    function getDataCapacity: Integer; cdecl;
    function getDataLengthForInterleavedBlock(&index: Integer): Integer; cdecl;
    function getErrorCodewords: Integer; cdecl;
    function getErrorLengthForInterleavedBlock(&index: Integer): Integer; cdecl;
    function getInterleavedBlockCount: Integer; cdecl;
    function getSymbolDataHeight: Integer; cdecl;
    function getSymbolDataWidth: Integer; cdecl;
    function getSymbolHeight: Integer; cdecl;
    function getSymbolWidth: Integer; cdecl;
    function toString: JString; cdecl;
    property matrixHeight: Integer read _GetmatrixHeight write _SetmatrixHeight;
    property matrixWidth: Integer read _GetmatrixWidth write _SetmatrixWidth;
  end;

  TJSymbolInfo = class(TJavaGenericImport<JSymbolInfoClass, JSymbolInfo>)
  end;

  JDataMatrixSymbolInfo144Class = interface(JSymbolInfoClass)
    ['{671F16FC-33DF-426C-B5FC-D46C6211FB2C}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/DataMatrixSymbolInfo144')]
  JDataMatrixSymbolInfo144 = interface(JSymbolInfo)
    ['{BAFAB362-14E9-4254-B069-92525CA5FD70}']
    function getDataLengthForInterleavedBlock(&index: Integer): Integer; cdecl;
    function getInterleavedBlockCount: Integer; cdecl;
  end;

  TJDataMatrixSymbolInfo144 = class(TJavaGenericImport<JDataMatrixSymbolInfo144Class, JDataMatrixSymbolInfo144>)
  end;

  JDataMatrixWriterClass = interface(JObjectClass)
    ['{C8BB79BE-5B0D-43E9-B3EF-22234A984756}']
    function init: JDataMatrixWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/datamatrix/DataMatrixWriter')]
  JDataMatrixWriter = interface(JObject)
    ['{301357D6-4AA9-4891-9877-F55E4E828CC7}']
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer): JBitMatrix; cdecl; overload;
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer; hints: JMap): JBitMatrix; cdecl; overload;
  end;

  TJDataMatrixWriter = class(TJavaGenericImport<JDataMatrixWriterClass, JDataMatrixWriter>)
  end;

  JDecodedBitStreamParserClass = interface(JObjectClass)
    ['{823885DF-88FF-4E2B-A4E5-FE7371075FCF}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DecodedBitStreamParser')]
  JDecodedBitStreamParser = interface(JObject)
    ['{D9F2269E-732F-4C0D-8431-F266BF4EB590}']
  end;

  TJDecodedBitStreamParser = class(TJavaGenericImport<JDecodedBitStreamParserClass, JDecodedBitStreamParser>)
  end;

  JDecodedBitStreamParser1Class = interface(JObjectClass)
    ['{CB84DEB3-A7AC-469A-9584-9E1718065299}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/DecodedBitStreamParser')]
  JDecodedBitStreamParser1 = interface(JObject)
    ['{8F0B745B-6CBD-4F85-B6FB-0F6A2F0378DC}']
  end;

  TJDecodedBitStreamParser1 = class(TJavaGenericImport<JDecodedBitStreamParser1Class, JDecodedBitStreamParser1>)
  end;

  JDecodedBitStreamParser2Class = interface(JObjectClass)
    ['{1168A488-5E72-4142-B9AD-D096F701928D}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/DecodedBitStreamParser')]
  JDecodedBitStreamParser2 = interface(JObject)
    ['{C35D9C0E-A988-4A3A-80EF-D69F0CB68E83}']
  end;

  TJDecodedBitStreamParser2 = class(TJavaGenericImport<JDecodedBitStreamParser2Class, JDecodedBitStreamParser2>)
  end;

  JDecodedBitStreamParser3Class = interface(JObjectClass)
    ['{FAA88AEE-5D32-4220-BBAD-63EE662C0501}']
  end;

  [JavaSignature('com/google/zxing/maxicode/decoder/DecodedBitStreamParser')]
  JDecodedBitStreamParser3 = interface(JObject)
    ['{58BC0A6A-86C7-43F3-8FE5-ACB6952D17E8}']
  end;

  TJDecodedBitStreamParser3 = class(TJavaGenericImport<JDecodedBitStreamParser3Class, JDecodedBitStreamParser3>)
  end;

  JDecodedBitStreamParser_1Class = interface(JObjectClass)
    ['{519C4626-4EA8-432E-8CC8-E215A416D306}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/DecodedBitStreamParser$1')]
  JDecodedBitStreamParser_1 = interface(JObject)
    ['{04D99777-BCEE-43AA-8101-BA5825166A73}']
  end;

  TJDecodedBitStreamParser_1 = class(TJavaGenericImport<JDecodedBitStreamParser_1Class, JDecodedBitStreamParser_1>)
  end;

  JDecodedBitStreamParser_11Class = interface(JObjectClass)
    ['{14857311-FAFE-4CC4-A097-F49F5F09F30F}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/DecodedBitStreamParser$1')]
  JDecodedBitStreamParser_11 = interface(JObject)
    ['{03086168-D20F-4211-B2F1-7B0E71107CA8}']
  end;

  TJDecodedBitStreamParser_11 = class(TJavaGenericImport<JDecodedBitStreamParser_11Class, JDecodedBitStreamParser_11>)
  end;

  JDecodedBitStreamParser_12Class = interface(JObjectClass)
    ['{F6B81CD8-F477-4030-BEC1-D150BD9F6D7C}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/DecodedBitStreamParser$1')]
  JDecodedBitStreamParser_12 = interface(JObject)
    ['{A3BFAC99-1884-4C8B-BE50-8A0F654014D4}']
  end;

  TJDecodedBitStreamParser_12 = class(TJavaGenericImport<JDecodedBitStreamParser_12Class, JDecodedBitStreamParser_12>)
  end;

  JDecodedBitStreamParser_ECIStringBuilderClass = interface(JObjectClass)
    ['{A47B3B11-CAAC-4A08-AC54-BE6F08894AB7}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/DecodedBitStreamParser$ECIStringBuilder')]
  JDecodedBitStreamParser_ECIStringBuilder = interface(JObject)
    ['{CA6B7DBF-F1D3-44FE-A397-F88C85EAB94E}']
    function length: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJDecodedBitStreamParser_ECIStringBuilder = class(TJavaGenericImport<JDecodedBitStreamParser_ECIStringBuilderClass, JDecodedBitStreamParser_ECIStringBuilder>)
  end;

  JDecodedBitStreamParser_ModeClass = interface(JEnumClass)
    ['{AB84B6ED-B323-4FEA-97C8-2D5C3E72B981}']
    function _GetALPHA: JDecodedBitStreamParser_Mode;
    procedure _SetALPHA(Value: JDecodedBitStreamParser_Mode);
    function _GetALPHA_SHIFT: JDecodedBitStreamParser_Mode;
    procedure _SetALPHA_SHIFT(Value: JDecodedBitStreamParser_Mode);
    function _GetLOWER: JDecodedBitStreamParser_Mode;
    procedure _SetLOWER(Value: JDecodedBitStreamParser_Mode);
    function _GetMIXED: JDecodedBitStreamParser_Mode;
    procedure _SetMIXED(Value: JDecodedBitStreamParser_Mode);
    function _GetPUNCT: JDecodedBitStreamParser_Mode;
    procedure _SetPUNCT(Value: JDecodedBitStreamParser_Mode);
    function _GetPUNCT_SHIFT: JDecodedBitStreamParser_Mode;
    procedure _SetPUNCT_SHIFT(Value: JDecodedBitStreamParser_Mode);
    function valueOf(name: JString): JDecodedBitStreamParser_Mode; cdecl;
    function values: TJavaObjectArray<JDecodedBitStreamParser_Mode>; cdecl;
    property ALPHA: JDecodedBitStreamParser_Mode read _GetALPHA write _SetALPHA;
    property ALPHA_SHIFT: JDecodedBitStreamParser_Mode read _GetALPHA_SHIFT write _SetALPHA_SHIFT;
    property LOWER: JDecodedBitStreamParser_Mode read _GetLOWER write _SetLOWER;
    property MIXED: JDecodedBitStreamParser_Mode read _GetMIXED write _SetMIXED;
    property PUNCT: JDecodedBitStreamParser_Mode read _GetPUNCT write _SetPUNCT;
    property PUNCT_SHIFT: JDecodedBitStreamParser_Mode read _GetPUNCT_SHIFT write _SetPUNCT_SHIFT;
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/DecodedBitStreamParser$Mode')]
  JDecodedBitStreamParser_Mode = interface(JEnum)
    ['{E0CCDCC1-C19D-4A44-8256-FE7F9827607E}']
  end;

  TJDecodedBitStreamParser_Mode = class(TJavaGenericImport<JDecodedBitStreamParser_ModeClass, JDecodedBitStreamParser_Mode>)
  end;

  JDecodedBitStreamParser_Mode1Class = interface(JEnumClass)
    ['{B7612D47-DB3F-4075-BF68-97E76398103A}']
    function _GetANSIX12_ENCODE: JDecodedBitStreamParser_Mode1;
    procedure _SetANSIX12_ENCODE(Value: JDecodedBitStreamParser_Mode1);
    function _GetASCII_ENCODE: JDecodedBitStreamParser_Mode1;
    procedure _SetASCII_ENCODE(Value: JDecodedBitStreamParser_Mode1);
    function _GetBASE256_ENCODE: JDecodedBitStreamParser_Mode1;
    procedure _SetBASE256_ENCODE(Value: JDecodedBitStreamParser_Mode1);
    function _GetC40_ENCODE: JDecodedBitStreamParser_Mode1;
    procedure _SetC40_ENCODE(Value: JDecodedBitStreamParser_Mode1);
    function _GetECI_ENCODE: JDecodedBitStreamParser_Mode1;
    procedure _SetECI_ENCODE(Value: JDecodedBitStreamParser_Mode1);
    function _GetEDIFACT_ENCODE: JDecodedBitStreamParser_Mode1;
    procedure _SetEDIFACT_ENCODE(Value: JDecodedBitStreamParser_Mode1);
    function _GetPAD_ENCODE: JDecodedBitStreamParser_Mode1;
    procedure _SetPAD_ENCODE(Value: JDecodedBitStreamParser_Mode1);
    function _GetTEXT_ENCODE: JDecodedBitStreamParser_Mode1;
    procedure _SetTEXT_ENCODE(Value: JDecodedBitStreamParser_Mode1);
    function valueOf(name: JString): JDecodedBitStreamParser_Mode1; cdecl;
    function values: TJavaObjectArray<JDecodedBitStreamParser_Mode1>; cdecl;
    property ANSIX12_ENCODE: JDecodedBitStreamParser_Mode1 read _GetANSIX12_ENCODE write _SetANSIX12_ENCODE;
    property ASCII_ENCODE: JDecodedBitStreamParser_Mode1 read _GetASCII_ENCODE write _SetASCII_ENCODE;
    property BASE256_ENCODE: JDecodedBitStreamParser_Mode1 read _GetBASE256_ENCODE write _SetBASE256_ENCODE;
    property C40_ENCODE: JDecodedBitStreamParser_Mode1 read _GetC40_ENCODE write _SetC40_ENCODE;
    property ECI_ENCODE: JDecodedBitStreamParser_Mode1 read _GetECI_ENCODE write _SetECI_ENCODE;
    property EDIFACT_ENCODE: JDecodedBitStreamParser_Mode1 read _GetEDIFACT_ENCODE write _SetEDIFACT_ENCODE;
    property PAD_ENCODE: JDecodedBitStreamParser_Mode1 read _GetPAD_ENCODE write _SetPAD_ENCODE;
    property TEXT_ENCODE: JDecodedBitStreamParser_Mode1 read _GetTEXT_ENCODE write _SetTEXT_ENCODE;
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/DecodedBitStreamParser$Mode')]
  JDecodedBitStreamParser_Mode1 = interface(JEnum)
    ['{5BB607AD-52A8-4F93-AA13-919A8E36FF57}']
  end;

  TJDecodedBitStreamParser_Mode1 = class(TJavaGenericImport<JDecodedBitStreamParser_Mode1Class, JDecodedBitStreamParser_Mode1>)
  end;

  JDecodedObjectClass = interface(JObjectClass)
    ['{E02509FD-CA19-42BA-9EA0-F56729586A5D}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/DecodedObject')]
  JDecodedObject = interface(JObject)
    ['{56830B2E-554F-4DD4-9777-263BE949BDCC}']
  end;

  TJDecodedObject = class(TJavaGenericImport<JDecodedObjectClass, JDecodedObject>)
  end;

  JDecodedCharClass = interface(JDecodedObjectClass)
    ['{18012F56-895B-436A-B18E-66EBB9EC2008}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/DecodedChar')]
  JDecodedChar = interface(JDecodedObject)
    ['{92C5EE05-1613-40E4-971E-A6448C3091C2}']
  end;

  TJDecodedChar = class(TJavaGenericImport<JDecodedCharClass, JDecodedChar>)
  end;

  JDecodedInformationClass = interface(JDecodedObjectClass)
    ['{56A9D515-CD4E-4DE9-89B3-0265E1F8E371}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/DecodedInformation')]
  JDecodedInformation = interface(JDecodedObject)
    ['{938453B0-CF90-4806-BCE4-EF126A5AD9ED}']
  end;

  TJDecodedInformation = class(TJavaGenericImport<JDecodedInformationClass, JDecodedInformation>)
  end;

  JDecodedNumericClass = interface(JDecodedObjectClass)
    ['{BE14C53B-5E5C-4E8E-BB5A-D58A2F455A30}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/DecodedNumeric')]
  JDecodedNumeric = interface(JDecodedObject)
    ['{06884F20-84BF-41DB-B0ED-3E0BCF33A606}']
  end;

  TJDecodedNumeric = class(TJavaGenericImport<JDecodedNumericClass, JDecodedNumeric>)
  end;

  JDecodeHintTypeClass = interface(JEnumClass)
    ['{990CF8D9-C104-475E-A458-82705DC3FEAB}']
    function _GetALLOWED_EAN_EXTENSIONS: JDecodeHintType;
    procedure _SetALLOWED_EAN_EXTENSIONS(Value: JDecodeHintType);
    function _GetALLOWED_LENGTHS: JDecodeHintType;
    procedure _SetALLOWED_LENGTHS(Value: JDecodeHintType);
    function _GetALSO_INVERTED: JDecodeHintType;
    procedure _SetALSO_INVERTED(Value: JDecodeHintType);
    function _GetASSUME_CODE_39_CHECK_DIGIT: JDecodeHintType;
    procedure _SetASSUME_CODE_39_CHECK_DIGIT(Value: JDecodeHintType);
    function _GetASSUME_GS1: JDecodeHintType;
    procedure _SetASSUME_GS1(Value: JDecodeHintType);
    function _GetCHARACTER_SET: JDecodeHintType;
    procedure _SetCHARACTER_SET(Value: JDecodeHintType);
    function _GetNEED_RESULT_POINT_CALLBACK: JDecodeHintType;
    procedure _SetNEED_RESULT_POINT_CALLBACK(Value: JDecodeHintType);
    function _GetOTHER: JDecodeHintType;
    procedure _SetOTHER(Value: JDecodeHintType);
    function _GetPOSSIBLE_FORMATS: JDecodeHintType;
    procedure _SetPOSSIBLE_FORMATS(Value: JDecodeHintType);
    function _GetPURE_BARCODE: JDecodeHintType;
    procedure _SetPURE_BARCODE(Value: JDecodeHintType);
    function _GetRETURN_CODABAR_START_END: JDecodeHintType;
    procedure _SetRETURN_CODABAR_START_END(Value: JDecodeHintType);
    function _GetTRY_HARDER: JDecodeHintType;
    procedure _SetTRY_HARDER(Value: JDecodeHintType);
    function valueOf(name: JString): JDecodeHintType; cdecl;
    function values: TJavaObjectArray<JDecodeHintType>; cdecl;
    property ALLOWED_EAN_EXTENSIONS: JDecodeHintType read _GetALLOWED_EAN_EXTENSIONS write _SetALLOWED_EAN_EXTENSIONS;
    property ALLOWED_LENGTHS: JDecodeHintType read _GetALLOWED_LENGTHS write _SetALLOWED_LENGTHS;
    property ALSO_INVERTED: JDecodeHintType read _GetALSO_INVERTED write _SetALSO_INVERTED;
    property ASSUME_CODE_39_CHECK_DIGIT: JDecodeHintType read _GetASSUME_CODE_39_CHECK_DIGIT write _SetASSUME_CODE_39_CHECK_DIGIT;
    property ASSUME_GS1: JDecodeHintType read _GetASSUME_GS1 write _SetASSUME_GS1;
    property CHARACTER_SET: JDecodeHintType read _GetCHARACTER_SET write _SetCHARACTER_SET;
    property NEED_RESULT_POINT_CALLBACK: JDecodeHintType read _GetNEED_RESULT_POINT_CALLBACK write _SetNEED_RESULT_POINT_CALLBACK;
    property OTHER: JDecodeHintType read _GetOTHER write _SetOTHER;
    property POSSIBLE_FORMATS: JDecodeHintType read _GetPOSSIBLE_FORMATS write _SetPOSSIBLE_FORMATS;
    property PURE_BARCODE: JDecodeHintType read _GetPURE_BARCODE write _SetPURE_BARCODE;
    property RETURN_CODABAR_START_END: JDecodeHintType read _GetRETURN_CODABAR_START_END write _SetRETURN_CODABAR_START_END;
    property TRY_HARDER: JDecodeHintType read _GetTRY_HARDER write _SetTRY_HARDER;
  end;

  [JavaSignature('com/google/zxing/DecodeHintType')]
  JDecodeHintType = interface(JEnum)
    ['{D3D3CAC0-47B1-486C-969D-81F2776E68B3}']
    function getValueType: Jlang_Class; cdecl;
  end;

  TJDecodeHintType = class(TJavaGenericImport<JDecodeHintTypeClass, JDecodeHintType>)
  end;

  JDecoderClass = interface(JObjectClass)
    ['{2E45E7F1-0EA7-4801-AF9F-2D5191DBDAAC}']
    function init: JDecoder; cdecl;
    function highLevelDecode(correctedBits: TJavaArray<Boolean>): JString; cdecl;
  end;

  [JavaSignature('com/google/zxing/aztec/decoder/Decoder')]
  JDecoder = interface(JObject)
    ['{C8961F0A-0E69-48F8-89B3-7C6BA7422B68}']
    function decode(detectorResult: JAztecDetectorResult): JDecoderResult; cdecl;
  end;

  TJDecoder = class(TJavaGenericImport<JDecoderClass, JDecoder>)
  end;

  JDecoder1Class = interface(JObjectClass)
    ['{958B4A43-97C7-4C3A-8AE5-2501B6F1470D}']
    function init: JDecoder1; cdecl;
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/Decoder')]
  JDecoder1 = interface(JObject)
    ['{3AB5BA36-BD5B-4DD2-B5A4-2BFBBB0836E9}']
    function decode(image: TJavaBiArray<Boolean>): JDecoderResult; cdecl; overload;
    function decode(image: TJavaBiArray<Boolean>; hints: JMap): JDecoderResult; cdecl; overload;
    function decode(bits: JBitMatrix): JDecoderResult; cdecl; overload;
    function decode(bits: JBitMatrix; hints: JMap): JDecoderResult; cdecl; overload;
  end;

  TJDecoder1 = class(TJavaGenericImport<JDecoder1Class, JDecoder1>)
  end;

  JDecoder2Class = interface(JObjectClass)
    ['{ED755653-207C-42AB-8D65-12007C6DA479}']
    function init: JDecoder2; cdecl;
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/Decoder')]
  JDecoder2 = interface(JObject)
    ['{7DFAB79E-EC5C-4049-9111-9D49FCAA0836}']
    function decode(image: TJavaBiArray<Boolean>): JDecoderResult; cdecl; overload;
    function decode(bits: JBitMatrix): JDecoderResult; cdecl; overload;
  end;

  TJDecoder2 = class(TJavaGenericImport<JDecoder2Class, JDecoder2>)
  end;

  JDecoder3Class = interface(JObjectClass)
    ['{A92072F6-2F2C-4576-80A6-D8558FA8145C}']
    function init: JDecoder3; cdecl;
  end;

  [JavaSignature('com/google/zxing/maxicode/decoder/Decoder')]
  JDecoder3 = interface(JObject)
    ['{1B752B0D-48C8-4EAB-9BED-0DD9BBFCB34E}']
    function decode(bits: JBitMatrix): JDecoderResult; cdecl; overload;
    function decode(bits: JBitMatrix; hints: JMap): JDecoderResult; cdecl; overload;
  end;

  TJDecoder3 = class(TJavaGenericImport<JDecoder3Class, JDecoder3>)
  end;

  JDecoderResultClass = interface(JObjectClass)
    ['{4D2047BE-47E7-4888-A269-CE58BD85E98C}']
    function init(rawBytes: TJavaArray<Byte>; text: JString; byteSegments: JList; ecLevel: JString): JDecoderResult; cdecl; overload;
    function init(rawBytes: TJavaArray<Byte>; text: JString; byteSegments: JList; ecLevel: JString; symbologyModifier: Integer): JDecoderResult; cdecl; overload;
    function init(rawBytes: TJavaArray<Byte>; text: JString; byteSegments: JList; ecLevel: JString; saSequence: Integer; saParity: Integer): JDecoderResult; cdecl; overload;
    function init(rawBytes: TJavaArray<Byte>; text: JString; byteSegments: JList; ecLevel: JString; saSequence: Integer; saParity: Integer; symbologyModifier: Integer): JDecoderResult; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/common/DecoderResult')]
  JDecoderResult = interface(JObject)
    ['{4D30C69A-2AC9-4342-9E12-258A120E587C}']
    function getByteSegments: JList; cdecl;
    function getECLevel: JString; cdecl;
    function getErasures: JInteger; cdecl;
    function getErrorsCorrected: JInteger; cdecl;
    function getNumBits: Integer; cdecl;
    function getOther: JObject; cdecl;
    function getRawBytes: TJavaArray<Byte>; cdecl;
    function getStructuredAppendParity: Integer; cdecl;
    function getStructuredAppendSequenceNumber: Integer; cdecl;
    function getSymbologyModifier: Integer; cdecl;
    function getText: JString; cdecl;
    function hasStructuredAppend: Boolean; cdecl;
    procedure setErasures(erasures: JInteger); cdecl;
    procedure setErrorsCorrected(errorsCorrected: JInteger); cdecl;
    procedure setNumBits(numBits: Integer); cdecl;
    procedure setOther(other: JObject); cdecl;
  end;

  TJDecoderResult = class(TJavaGenericImport<JDecoderResultClass, JDecoderResult>)
  end;

  JDecoder_1Class = interface(JObjectClass)
    ['{E8828945-26A4-4BF0-991C-B0F2F99EA501}']
  end;

  [JavaSignature('com/google/zxing/aztec/decoder/Decoder$1')]
  JDecoder_1 = interface(JObject)
    ['{AADFFE65-483B-476A-838E-94CD420C8B19}']
  end;

  TJDecoder_1 = class(TJavaGenericImport<JDecoder_1Class, JDecoder_1>)
  end;

  JDecoder_CorrectedBitsResultClass = interface(JObjectClass)
    ['{19EAADD8-CEFB-4540-84AE-383F70324E72}']
  end;

  [JavaSignature('com/google/zxing/aztec/decoder/Decoder$CorrectedBitsResult')]
  JDecoder_CorrectedBitsResult = interface(JObject)
    ['{F4C0A51C-1C37-4A9C-B6EC-0F8B4B60A9F5}']
  end;

  TJDecoder_CorrectedBitsResult = class(TJavaGenericImport<JDecoder_CorrectedBitsResultClass, JDecoder_CorrectedBitsResult>)
  end;

  JDecoder_TableClass = interface(JEnumClass)
    ['{12D36F9F-C009-4A3E-83C8-413FF9260A19}']
    function _GetBINARY: JDecoder_Table;
    procedure _SetBINARY(Value: JDecoder_Table);
    function _GetDIGIT: JDecoder_Table;
    procedure _SetDIGIT(Value: JDecoder_Table);
    function _GetLOWER: JDecoder_Table;
    procedure _SetLOWER(Value: JDecoder_Table);
    function _GetMIXED: JDecoder_Table;
    procedure _SetMIXED(Value: JDecoder_Table);
    function _GetPUNCT: JDecoder_Table;
    procedure _SetPUNCT(Value: JDecoder_Table);
    function _GetUPPER: JDecoder_Table;
    procedure _SetUPPER(Value: JDecoder_Table);
    function valueOf(name: JString): JDecoder_Table; cdecl;
    function values: TJavaObjectArray<JDecoder_Table>; cdecl;
    property BINARY: JDecoder_Table read _GetBINARY write _SetBINARY;
    property DIGIT: JDecoder_Table read _GetDIGIT write _SetDIGIT;
    property LOWER: JDecoder_Table read _GetLOWER write _SetLOWER;
    property MIXED: JDecoder_Table read _GetMIXED write _SetMIXED;
    property PUNCT: JDecoder_Table read _GetPUNCT write _SetPUNCT;
    property UPPER: JDecoder_Table read _GetUPPER write _SetUPPER;
  end;

  [JavaSignature('com/google/zxing/aztec/decoder/Decoder$Table')]
  JDecoder_Table = interface(JEnum)
    ['{7A95D817-304B-425C-BA4E-6A5D3EE95B08}']
  end;

  TJDecoder_Table = class(TJavaGenericImport<JDecoder_TableClass, JDecoder_Table>)
  end;

  JGridSamplerClass = interface(JObjectClass)
    ['{38C623F7-DB3C-4EC9-9428-E76F49B61229}']
    function init: JGridSampler; cdecl;
    function getInstance: JGridSampler; cdecl;
    procedure setGridSampler(newGridSampler: JGridSampler); cdecl;
  end;

  [JavaSignature('com/google/zxing/common/GridSampler')]
  JGridSampler = interface(JObject)
    ['{16806B85-E745-4162-AEA6-973606F8FACB}']
    function sampleGrid(param0: JBitMatrix; param1: Integer; param2: Integer; param3: Single; param4: Single; param5: Single; param6: Single; param7: Single; param8: Single; param9: Single; param10: Single; param11: Single; param12: Single; param13: Single; param14: Single; param15: Single; param16: Single; param17: Single; param18: Single): JBitMatrix; cdecl; overload;
    function sampleGrid(param0: JBitMatrix; param1: Integer; param2: Integer; param3: JPerspectiveTransform): JBitMatrix; cdecl; overload;
  end;

  TJGridSampler = class(TJavaGenericImport<JGridSamplerClass, JGridSampler>)
  end;

  JDefaultGridSamplerClass = interface(JGridSamplerClass)
    ['{9F6F01CB-9665-4EBF-B09D-1DD5885DD2E8}']
    function init: JDefaultGridSampler; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/DefaultGridSampler')]
  JDefaultGridSampler = interface(JGridSampler)
    ['{F454198C-17AA-4720-88A5-644A44F713E0}']
    function sampleGrid(image: JBitMatrix; dimensionX: Integer; dimensionY: Integer; p1ToX: Single; p1ToY: Single; p2ToX: Single; p2ToY: Single; p3ToX: Single; p3ToY: Single; p4ToX: Single; p4ToY: Single; p1FromX: Single; p1FromY: Single; p2FromX: Single; p2FromY: Single; p3FromX: Single; p3FromY: Single; p4FromX: Single; p4FromY: Single): JBitMatrix; cdecl; overload;
    function sampleGrid(image: JBitMatrix; dimensionX: Integer; dimensionY: Integer; transform: JPerspectiveTransform): JBitMatrix; cdecl; overload;
  end;

  TJDefaultGridSampler = class(TJavaGenericImport<JDefaultGridSamplerClass, JDefaultGridSampler>)
  end;

  JDefaultPlacementClass = interface(JObjectClass)
    ['{BA711608-F7CD-43E8-99C9-0A6F91057D59}']
    function init(codewords: JCharSequence; numcols: Integer; numrows: Integer): JDefaultPlacement; cdecl;
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/DefaultPlacement')]
  JDefaultPlacement = interface(JObject)
    ['{B0DAFBD8-7517-4EE3-B46C-AFEECFED42B0}']
    function getBit(col: Integer; row: Integer): Boolean; cdecl;
    procedure place; cdecl;
  end;

  TJDefaultPlacement = class(TJavaGenericImport<JDefaultPlacementClass, JDefaultPlacement>)
  end;

  JDetectionResultClass = interface(JObjectClass)
    ['{6F3B7206-8AB1-40A8-B8FE-FB26AB4E79D8}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/DetectionResult')]
  JDetectionResult = interface(JObject)
    ['{CB5C8F4F-936A-457B-BDB2-1255534ECFCD}']
    function toString: JString; cdecl;
  end;

  TJDetectionResult = class(TJavaGenericImport<JDetectionResultClass, JDetectionResult>)
  end;

  JDetectionResultColumnClass = interface(JObjectClass)
    ['{FC77C03A-0636-43B7-A20F-A4470E7AAC9F}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/DetectionResultColumn')]
  JDetectionResultColumn = interface(JObject)
    ['{96FDC969-620C-4306-B8FB-696D719DD9B4}']
    function toString: JString; cdecl;
  end;

  TJDetectionResultColumn = class(TJavaGenericImport<JDetectionResultColumnClass, JDetectionResultColumn>)
  end;

  JDetectionResultRowIndicatorColumnClass = interface(JDetectionResultColumnClass)
    ['{5D4D951A-A7F7-415D-BEE9-1A3AB99567B3}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/DetectionResultRowIndicatorColumn')]
  JDetectionResultRowIndicatorColumn = interface(JDetectionResultColumn)
    ['{D6F4BFF5-3A17-4B75-99B8-928E930825F8}']
    function toString: JString; cdecl;
  end;

  TJDetectionResultRowIndicatorColumn = class(TJavaGenericImport<JDetectionResultRowIndicatorColumnClass, JDetectionResultRowIndicatorColumn>)
  end;

  JDetectorClass = interface(JObjectClass)
    ['{D3D83233-B1FB-4B5D-A044-BA3706C34BE2}']
    function init(image: JBitMatrix): JDetector; cdecl;
  end;

  [JavaSignature('com/google/zxing/aztec/detector/Detector')]
  JDetector = interface(JObject)
    ['{37FCE56D-8DCD-4968-812F-F08862322587}']
    function detect: JAztecDetectorResult; cdecl; overload;
    function detect(isMirror: Boolean): JAztecDetectorResult; cdecl; overload;
  end;

  TJDetector = class(TJavaGenericImport<JDetectorClass, JDetector>)
  end;

  JDetector1Class = interface(JObjectClass)
    ['{EB1FF330-C052-4B41-83EE-B0565C361A2C}']
    function init(image: JBitMatrix): JDetector1; cdecl;
  end;

  [JavaSignature('com/google/zxing/qrcode/detector/Detector')]
  JDetector1 = interface(JObject)
    ['{0B787B59-66FF-4B47-B82E-76937E4E8D5B}']
    function detect: JDetectorResult; cdecl; overload;
    function detect(hints: JMap): JDetectorResult; cdecl; overload;
  end;

  TJDetector1 = class(TJavaGenericImport<JDetector1Class, JDetector1>)
  end;

  JDetector2Class = interface(JObjectClass)
    ['{AF931A70-B93F-49C2-9C6A-76C52FB8B504}']
    function detect(image: JBinaryBitmap; hints: JMap; multiple: Boolean): JPDF417DetectorResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/pdf417/detector/Detector')]
  JDetector2 = interface(JObject)
    ['{581883F1-7041-45C7-9177-8E541B556345}']
  end;

  TJDetector2 = class(TJavaGenericImport<JDetector2Class, JDetector2>)
  end;

  JDetector3Class = interface(JObjectClass)
    ['{A91309DD-AFC6-4650-91DA-A3DDD0ABB9D3}']
    function init(image: JBitMatrix): JDetector3; cdecl;
  end;

  [JavaSignature('com/google/zxing/datamatrix/detector/Detector')]
  JDetector3 = interface(JObject)
    ['{FADD4058-D539-4014-8109-B4F72623E9B4}']
    function detect: JDetectorResult; cdecl;
  end;

  TJDetector3 = class(TJavaGenericImport<JDetector3Class, JDetector3>)
  end;

  JDetector_PointClass = interface(JObjectClass)
    ['{BDF3DB2C-9F8C-4CC2-AD91-FECEA6B00DCB}']
  end;

  [JavaSignature('com/google/zxing/aztec/detector/Detector$Point')]
  JDetector_Point = interface(JObject)
    ['{65F76A62-CE05-424F-BA4B-FDF0D01FCF28}']
    function toString: JString; cdecl;
  end;

  TJDetector_Point = class(TJavaGenericImport<JDetector_PointClass, JDetector_Point>)
  end;

  JDimensionClass = interface(JObjectClass)
    ['{C9CE4CAC-5183-481E-B194-599A0164A98D}']
    function init(width: Integer; height: Integer): JDimension; cdecl;
  end;

  [JavaSignature('com/google/zxing/Dimension')]
  JDimension = interface(JObject)
    ['{1F0CE5BB-1A08-41D2-BB97-197C6C015372}']
    function equals(other: JObject): Boolean; cdecl;
    function getHeight: Integer; cdecl;
    function getWidth: Integer; cdecl;
    function hashCode: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJDimension = class(TJavaGenericImport<JDimensionClass, JDimension>)
  end;

  JDimensionsClass = interface(JObjectClass)
    ['{8577BD8C-02A1-4AEB-8276-536E9DC293BF}']
    function init(minCols: Integer; maxCols: Integer; minRows: Integer; maxRows: Integer): JDimensions; cdecl;
  end;

  [JavaSignature('com/google/zxing/pdf417/encoder/Dimensions')]
  JDimensions = interface(JObject)
    ['{7EBB2F21-8D08-4F58-83D3-92DE743D1CBF}']
    function getMaxCols: Integer; cdecl;
    function getMaxRows: Integer; cdecl;
    function getMinCols: Integer; cdecl;
    function getMinRows: Integer; cdecl;
  end;

  TJDimensions = class(TJavaGenericImport<JDimensionsClass, JDimensions>)
  end;

  JUPCEANReaderClass = interface(JOneDReaderClass)
    ['{A64D0BFB-61C2-43C1-B180-879F57342D54}']
  end;

  [JavaSignature('com/google/zxing/oned/UPCEANReader')]
  JUPCEANReader = interface(JOneDReader)
    ['{F4909E73-E368-4308-99CA-64C5ADCE0561}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl; overload;
    function decodeRow(rowNumber: Integer; row: JBitArray; startGuardRange: TJavaArray<Integer>; hints: JMap): JResult; cdecl; overload;
  end;

  TJUPCEANReader = class(TJavaGenericImport<JUPCEANReaderClass, JUPCEANReader>)
  end;

  JEAN13ReaderClass = interface(JUPCEANReaderClass)
    ['{975820B0-8929-40C5-B8E1-7E61E27FE2DD}']
    function init: JEAN13Reader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/EAN13Reader')]
  JEAN13Reader = interface(JUPCEANReader)
    ['{31211547-ABB4-486B-A8E8-5C1BD24E46E6}']
  end;

  TJEAN13Reader = class(TJavaGenericImport<JEAN13ReaderClass, JEAN13Reader>)
  end;

  JUPCEANWriterClass = interface(JOneDimensionalCodeWriterClass)
    ['{2351A523-A36A-446E-B763-74F01D56EAB3}']
    function init: JUPCEANWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/UPCEANWriter')]
  JUPCEANWriter = interface(JOneDimensionalCodeWriter)
    ['{F3E37D99-3E8C-4AA1-B8E4-3E62326352FD}']
    function getDefaultMargin: Integer; cdecl;
  end;

  TJUPCEANWriter = class(TJavaGenericImport<JUPCEANWriterClass, JUPCEANWriter>)
  end;

  JEAN13WriterClass = interface(JUPCEANWriterClass)
    ['{D2472B63-5EE5-4925-91D2-BED4F0E255B6}']
    function init: JEAN13Writer; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/EAN13Writer')]
  JEAN13Writer = interface(JUPCEANWriter)
    ['{71F5CDEE-BE47-47D3-9DCC-4A59C6FF5368}']
    function encode(contents: JString): TJavaArray<Boolean>; cdecl;
  end;

  TJEAN13Writer = class(TJavaGenericImport<JEAN13WriterClass, JEAN13Writer>)
  end;

  JEAN8ReaderClass = interface(JUPCEANReaderClass)
    ['{2C130621-C377-4675-ABDC-A60BA7949820}']
    function init: JEAN8Reader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/EAN8Reader')]
  JEAN8Reader = interface(JUPCEANReader)
    ['{B103A76A-2ACD-44B7-A19E-D6A9080F1E13}']
  end;

  TJEAN8Reader = class(TJavaGenericImport<JEAN8ReaderClass, JEAN8Reader>)
  end;

  JEAN8WriterClass = interface(JUPCEANWriterClass)
    ['{95CEB059-E48C-478E-91C8-D9E385DCD062}']
    function init: JEAN8Writer; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/EAN8Writer')]
  JEAN8Writer = interface(JUPCEANWriter)
    ['{B92AB965-2946-48A1-B53F-5D302A71B3E9}']
    function encode(contents: JString): TJavaArray<Boolean>; cdecl;
  end;

  TJEAN8Writer = class(TJavaGenericImport<JEAN8WriterClass, JEAN8Writer>)
  end;

  JEANManufacturerOrgSupportClass = interface(JObjectClass)
    ['{35387BC8-4B0C-44A8-81AE-98A299D5DF25}']
  end;

  [JavaSignature('com/google/zxing/oned/EANManufacturerOrgSupport')]
  JEANManufacturerOrgSupport = interface(JObject)
    ['{B5A84689-6457-4FA6-A85F-EE84C334A10D}']
  end;

  TJEANManufacturerOrgSupport = class(TJavaGenericImport<JEANManufacturerOrgSupportClass, JEANManufacturerOrgSupport>)
  end;

  JEdifactEncoderClass = interface(JObjectClass)
    ['{D6FC4C2E-CA6A-43D5-832A-83D5C8B05089}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/EdifactEncoder')]
  JEdifactEncoder = interface(JObject)
    ['{BCF1BCC8-8DAF-4DDB-AE3C-B9334AA743CA}']
    procedure encode(context: JEncoderContext); cdecl;
    function getEncodingMode: Integer; cdecl;
  end;

  TJEdifactEncoder = class(TJavaGenericImport<JEdifactEncoderClass, JEdifactEncoder>)
  end;

  JEmailAddressParsedResultClass = interface(JParsedResultClass)
    ['{C53695EB-CF7D-4E95-B9B3-837930DF9D28}']
  end;

  [JavaSignature('com/google/zxing/client/result/EmailAddressParsedResult')]
  JEmailAddressParsedResult = interface(JParsedResult)
    ['{E840D29F-AAEF-4D52-8F5B-05A5EC953D25}']
    function getBCCs: TJavaObjectArray<JString>; cdecl;
    function getBody: JString; cdecl;
    function getCCs: TJavaObjectArray<JString>; cdecl;
    function getDisplayResult: JString; cdecl;
    function getEmailAddress: JString; cdecl; deprecated;
    function getMailtoURI: JString; cdecl; deprecated;
    function getSubject: JString; cdecl;
    function getTos: TJavaObjectArray<JString>; cdecl;
  end;

  TJEmailAddressParsedResult = class(TJavaGenericImport<JEmailAddressParsedResultClass, JEmailAddressParsedResult>)
  end;

  JEmailAddressResultParserClass = interface(JResultParserClass)
    ['{7AFFA3E8-79B6-4807-B2F4-C0BF6923CDBF}']
    function init: JEmailAddressResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/EmailAddressResultParser')]
  JEmailAddressResultParser = interface(JResultParser)
    ['{20F115FA-471B-483A-AFEF-03144596C0DB}']
    function parse(result: JResult): JEmailAddressParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJEmailAddressResultParser = class(TJavaGenericImport<JEmailAddressResultParserClass, JEmailAddressResultParser>)
  end;

  JEmailDoCoMoResultParserClass = interface(JAbstractDoCoMoResultParserClass)
    ['{2C61C490-D643-438D-88F8-9371F53A9366}']
    function init: JEmailDoCoMoResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/EmailDoCoMoResultParser')]
  JEmailDoCoMoResultParser = interface(JAbstractDoCoMoResultParser)
    ['{3C22920F-F556-48CC-9087-AA22EEC2207B}']
    function parse(result: JResult): JEmailAddressParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJEmailDoCoMoResultParser = class(TJavaGenericImport<JEmailDoCoMoResultParserClass, JEmailDoCoMoResultParser>)
  end;

  JEncodeHintTypeClass = interface(JEnumClass)
    ['{0BFA878C-36FE-4CA6-8ED5-2150BF6F2104}']
    function _GetAZTEC_LAYERS: JEncodeHintType;
    procedure _SetAZTEC_LAYERS(Value: JEncodeHintType);
    function _GetCHARACTER_SET: JEncodeHintType;
    procedure _SetCHARACTER_SET(Value: JEncodeHintType);
    function _GetDATA_MATRIX_SHAPE: JEncodeHintType;
    procedure _SetDATA_MATRIX_SHAPE(Value: JEncodeHintType);
    function _GetERROR_CORRECTION: JEncodeHintType;
    procedure _SetERROR_CORRECTION(Value: JEncodeHintType);
    function _GetFORCE_CODE_SET: JEncodeHintType;
    procedure _SetFORCE_CODE_SET(Value: JEncodeHintType);
    function _GetGS1_FORMAT: JEncodeHintType;
    procedure _SetGS1_FORMAT(Value: JEncodeHintType);
    function _GetMARGIN: JEncodeHintType;
    procedure _SetMARGIN(Value: JEncodeHintType);
    function _GetMAX_SIZE: JEncodeHintType;
    procedure _SetMAX_SIZE(Value: JEncodeHintType);
    function _GetMIN_SIZE: JEncodeHintType;
    procedure _SetMIN_SIZE(Value: JEncodeHintType);
    function _GetPDF417_COMPACT: JEncodeHintType;
    procedure _SetPDF417_COMPACT(Value: JEncodeHintType);
    function _GetPDF417_COMPACTION: JEncodeHintType;
    procedure _SetPDF417_COMPACTION(Value: JEncodeHintType);
    function _GetPDF417_DIMENSIONS: JEncodeHintType;
    procedure _SetPDF417_DIMENSIONS(Value: JEncodeHintType);
    function _GetQR_COMPACT: JEncodeHintType;
    procedure _SetQR_COMPACT(Value: JEncodeHintType);
    function _GetQR_MASK_PATTERN: JEncodeHintType;
    procedure _SetQR_MASK_PATTERN(Value: JEncodeHintType);
    function _GetQR_VERSION: JEncodeHintType;
    procedure _SetQR_VERSION(Value: JEncodeHintType);
    function valueOf(name: JString): JEncodeHintType; cdecl;
    function values: TJavaObjectArray<JEncodeHintType>; cdecl;
    property AZTEC_LAYERS: JEncodeHintType read _GetAZTEC_LAYERS write _SetAZTEC_LAYERS;
    property CHARACTER_SET: JEncodeHintType read _GetCHARACTER_SET write _SetCHARACTER_SET;
    property DATA_MATRIX_SHAPE: JEncodeHintType read _GetDATA_MATRIX_SHAPE write _SetDATA_MATRIX_SHAPE;
    property ERROR_CORRECTION: JEncodeHintType read _GetERROR_CORRECTION write _SetERROR_CORRECTION;
    property FORCE_CODE_SET: JEncodeHintType read _GetFORCE_CODE_SET write _SetFORCE_CODE_SET;
    property GS1_FORMAT: JEncodeHintType read _GetGS1_FORMAT write _SetGS1_FORMAT;
    property MARGIN: JEncodeHintType read _GetMARGIN write _SetMARGIN;
    property MAX_SIZE: JEncodeHintType read _GetMAX_SIZE write _SetMAX_SIZE;
    property MIN_SIZE: JEncodeHintType read _GetMIN_SIZE write _SetMIN_SIZE;
    property PDF417_COMPACT: JEncodeHintType read _GetPDF417_COMPACT write _SetPDF417_COMPACT;
    property PDF417_COMPACTION: JEncodeHintType read _GetPDF417_COMPACTION write _SetPDF417_COMPACTION;
    property PDF417_DIMENSIONS: JEncodeHintType read _GetPDF417_DIMENSIONS write _SetPDF417_DIMENSIONS;
    property QR_COMPACT: JEncodeHintType read _GetQR_COMPACT write _SetQR_COMPACT;
    property QR_MASK_PATTERN: JEncodeHintType read _GetQR_MASK_PATTERN write _SetQR_MASK_PATTERN;
    property QR_VERSION: JEncodeHintType read _GetQR_VERSION write _SetQR_VERSION;
  end;

  [JavaSignature('com/google/zxing/EncodeHintType')]
  JEncodeHintType = interface(JEnum)
    ['{A3C2AB21-28CE-4A71-AA69-7F5A34269191}']
  end;

  TJEncodeHintType = class(TJavaGenericImport<JEncodeHintTypeClass, JEncodeHintType>)
  end;

  JEncoderClass = interface(JObjectClass)
    ['{031D5963-1164-4FCD-9D72-D11A0D70B2AC}']
    function _GetDEFAULT_AZTEC_LAYERS: Integer;
    function _GetDEFAULT_EC_PERCENT: Integer;
    function encode(data: JString): JAztecCode; cdecl; overload;
    function encode(data: JString; minECCPercent: Integer; userSpecifiedLayers: Integer): JAztecCode; cdecl; overload;
    function encode(data: JString; minECCPercent: Integer; userSpecifiedLayers: Integer; charset: JObject {java/nio/charset/Charset}): JAztecCode; cdecl; overload;
    function encode(data: TJavaArray<Byte>): JAztecCode; cdecl; overload;
    function encode(data: TJavaArray<Byte>; minECCPercent: Integer; userSpecifiedLayers: Integer): JAztecCode; cdecl; overload;
    function encode(data: TJavaArray<Byte>; minECCPercent: Integer; userSpecifiedLayers: Integer; charset: JObject {java/nio/charset/Charset}): JAztecCode; cdecl; overload;
    property DEFAULT_AZTEC_LAYERS: Integer read _GetDEFAULT_AZTEC_LAYERS;
    property DEFAULT_EC_PERCENT: Integer read _GetDEFAULT_EC_PERCENT;
  end;

  [JavaSignature('com/google/zxing/aztec/encoder/Encoder')]
  JEncoder = interface(JObject)
    ['{4574D01C-C19D-44D6-85C6-6C9E6B67FDD8}']
  end;

  TJEncoder = class(TJavaGenericImport<JEncoderClass, JEncoder>)
  end;

  JEncoder1Class = interface(JObjectClass)
    ['{A200133A-49D4-45C9-9126-03AB1E9BAD67}']
    function chooseMode(content: JString): JMode; cdecl;
    function encode(content: JString; ecLevel: JErrorCorrectionLevel; hints: JMap): JQRCode; cdecl; overload;
    function encode(content: JString; ecLevel: JErrorCorrectionLevel): JQRCode; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/Encoder')]
  JEncoder1 = interface(JObject)
    ['{E2EDAE04-B82D-4865-AB02-FF30D088A2F2}']
  end;

  TJEncoder1 = class(TJavaGenericImport<JEncoder1Class, JEncoder1>)
  end;

  JEncoder2Class = interface(IJavaClass)
    ['{9C8DE6A4-2569-4809-9726-908CF2B0924A}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/Encoder')]
  JEncoder2 = interface(IJavaInstance)
    ['{818C3567-6D90-439B-8374-9BB1AB6A3B92}']
    procedure encode(param0: JEncoderContext); cdecl;
    function getEncodingMode: Integer; cdecl;
  end;

  TJEncoder2 = class(TJavaGenericImport<JEncoder2Class, JEncoder2>)
  end;

  JEncoderContextClass = interface(JObjectClass)
    ['{27719969-5021-4B18-97B0-9F63AA29251E}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/EncoderContext')]
  JEncoderContext = interface(JObject)
    ['{03BE4B7B-E7EB-4D2F-8AE7-FF22EA43F6E3}']
    function getCodewordCount: Integer; cdecl;
    function getCodewords: JStringBuilder; cdecl;
    function getCurrent: Char; cdecl;
    function getCurrentChar: Char; cdecl;
    function getMessage: JString; cdecl;
    function getNewEncoding: Integer; cdecl;
    function getRemainingCharacters: Integer; cdecl;
    function getSymbolInfo: JSymbolInfo; cdecl;
    function hasMoreCharacters: Boolean; cdecl;
    procedure resetEncoderSignal; cdecl;
    procedure resetSymbolInfo; cdecl;
    procedure setSizeConstraints(minSize: JDimension; maxSize: JDimension); cdecl;
    procedure setSkipAtEnd(count: Integer); cdecl;
    procedure setSymbolShape(shape: JSymbolShapeHint); cdecl;
    procedure signalEncoderChange(encoding: Integer); cdecl;
    procedure updateSymbolInfo; cdecl; overload;
    procedure updateSymbolInfo(len: Integer); cdecl; overload;
    procedure writeCodeword(codeword: Char); cdecl;
    procedure writeCodewords(codewords: JString); cdecl;
  end;

  TJEncoderContext = class(TJavaGenericImport<JEncoderContextClass, JEncoderContext>)
  end;

  JEncoder_1Class = interface(JObjectClass)
    ['{A01FCB56-0AA2-4136-A48C-9189DC550EE1}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/Encoder$1')]
  JEncoder_1 = interface(JObject)
    ['{92844484-728D-46BE-8240-F6CEF9E5C8B3}']
  end;

  TJEncoder_1 = class(TJavaGenericImport<JEncoder_1Class, JEncoder_1>)
  end;

  JErrorCorrectionClass = interface(JObjectClass)
    ['{02DFAD97-4BD5-4740-A483-70DA41B70C5A}']
    function init: JErrorCorrection; cdecl;
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/ec/ErrorCorrection')]
  JErrorCorrection = interface(JObject)
    ['{A350EE98-382D-4C69-84F7-3A4FE00F7437}']
    function decode(received: TJavaArray<Integer>; numECCodewords: Integer; erasures: TJavaArray<Integer>): Integer; cdecl;
  end;

  TJErrorCorrection = class(TJavaGenericImport<JErrorCorrectionClass, JErrorCorrection>)
  end;

  JErrorCorrection1Class = interface(JObjectClass)
    ['{1EA360C1-B504-4155-B2ED-8BA8ACD003E3}']
    function encodeECC200(codewords: JString; symbolInfo: JSymbolInfo): JString; cdecl;
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/ErrorCorrection')]
  JErrorCorrection1 = interface(JObject)
    ['{2FFFCA1E-F263-496E-99B8-4861AE6CEBCE}']
  end;

  TJErrorCorrection1 = class(TJavaGenericImport<JErrorCorrection1Class, JErrorCorrection1>)
  end;

  JErrorCorrectionLevelClass = interface(JEnumClass)
    ['{59C8378E-BE10-4781-A5D9-6AB53C0870A8}']
    function _GetH: JErrorCorrectionLevel;
    procedure _SetH(Value: JErrorCorrectionLevel);
    function _GetL: JErrorCorrectionLevel;
    procedure _SetL(Value: JErrorCorrectionLevel);
    function _GetM: JErrorCorrectionLevel;
    procedure _SetM(Value: JErrorCorrectionLevel);
    function _GetQ: JErrorCorrectionLevel;
    procedure _SetQ(Value: JErrorCorrectionLevel);
    function forBits(bits: Integer): JErrorCorrectionLevel; cdecl;
    function valueOf(name: JString): JErrorCorrectionLevel; cdecl;
    function values: TJavaObjectArray<JErrorCorrectionLevel>; cdecl;
    property H: JErrorCorrectionLevel read _GetH write _SetH;
    property L: JErrorCorrectionLevel read _GetL write _SetL;
    property M: JErrorCorrectionLevel read _GetM write _SetM;
    property Q: JErrorCorrectionLevel read _GetQ write _SetQ;
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/ErrorCorrectionLevel')]
  JErrorCorrectionLevel = interface(JEnum)
    ['{7F2B5A51-18A2-4029-8A45-5D83778B8D41}']
    function getBits: Integer; cdecl;
  end;

  TJErrorCorrectionLevel = class(TJavaGenericImport<JErrorCorrectionLevelClass, JErrorCorrectionLevel>)
  end;

  JExpandedPairClass = interface(JObjectClass)
    ['{E1F759FD-8C25-4C15-AA8D-D85660E4C4CA}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/ExpandedPair')]
  JExpandedPair = interface(JObject)
    ['{F243396B-45E9-496C-9896-1BE2EC433676}']
    function equals(o: JObject): Boolean; cdecl;
    function hashCode: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJExpandedPair = class(TJavaGenericImport<JExpandedPairClass, JExpandedPair>)
  end;

  JExpandedProductParsedResultClass = interface(JParsedResultClass)
    ['{FCC54275-7679-4A18-B91C-1C10206FA132}']
    function _GetKILOGRAM: JString;
    function _GetPOUND: JString;
    function init(rawText: JString; productID: JString; sscc: JString; lotNumber: JString; productionDate: JString; packagingDate: JString; bestBeforeDate: JString; expirationDate: JString; weight: JString; weightType: JString; weightIncrement: JString; price: JString; priceIncrement: JString; priceCurrency: JString; uncommonAIs: JMap): JExpandedProductParsedResult; cdecl;
    property KILOGRAM: JString read _GetKILOGRAM;
    property POUND: JString read _GetPOUND;
  end;

  [JavaSignature('com/google/zxing/client/result/ExpandedProductParsedResult')]
  JExpandedProductParsedResult = interface(JParsedResult)
    ['{20FDD70A-DFD1-4CE8-BE97-D219D67E0CFB}']
    function equals(o: JObject): Boolean; cdecl;
    function getBestBeforeDate: JString; cdecl;
    function getDisplayResult: JString; cdecl;
    function getExpirationDate: JString; cdecl;
    function getLotNumber: JString; cdecl;
    function getPackagingDate: JString; cdecl;
    function getPrice: JString; cdecl;
    function getPriceCurrency: JString; cdecl;
    function getPriceIncrement: JString; cdecl;
    function getProductID: JString; cdecl;
    function getProductionDate: JString; cdecl;
    function getRawText: JString; cdecl;
    function getSscc: JString; cdecl;
    function getUncommonAIs: JMap; cdecl;
    function getWeight: JString; cdecl;
    function getWeightIncrement: JString; cdecl;
    function getWeightType: JString; cdecl;
    function hashCode: Integer; cdecl;
  end;

  TJExpandedProductParsedResult = class(TJavaGenericImport<JExpandedProductParsedResultClass, JExpandedProductParsedResult>)
  end;

  JExpandedProductResultParserClass = interface(JResultParserClass)
    ['{33E6D2F7-3A49-4A6D-90E4-AE55814E68D0}']
    function init: JExpandedProductResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/ExpandedProductResultParser')]
  JExpandedProductResultParser = interface(JResultParser)
    ['{66634C47-A377-4F54-87BD-9C2CB72E6D66}']
    function parse(result: JResult): JExpandedProductParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJExpandedProductResultParser = class(TJavaGenericImport<JExpandedProductResultParserClass, JExpandedProductResultParser>)
  end;

  JExpandedRowClass = interface(JObjectClass)
    ['{C16119DF-928C-4D21-B9BF-89BB7C18991F}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/ExpandedRow')]
  JExpandedRow = interface(JObject)
    ['{B5C99080-B3DF-427C-BF08-953001CA2811}']
    function equals(o: JObject): Boolean; cdecl;
    function hashCode: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJExpandedRow = class(TJavaGenericImport<JExpandedRowClass, JExpandedRow>)
  end;

  JFieldParserClass = interface(JObjectClass)
    ['{3A0A4CFA-14C9-49F0-B208-E75797A5C6AC}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/FieldParser')]
  JFieldParser = interface(JObject)
    ['{9DFC755C-321D-4FCF-BB67-F108EC00034E}']
  end;

  TJFieldParser = class(TJavaGenericImport<JFieldParserClass, JFieldParser>)
  end;

  JFieldParser_DataLengthClass = interface(JObjectClass)
    ['{2D5B4BE2-F7C0-4F69-8DF4-0A9CFC3584A7}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/FieldParser$DataLength')]
  JFieldParser_DataLength = interface(JObject)
    ['{69B5171A-E4BF-497A-9BBB-D8C3E9EBA67F}']
  end;

  TJFieldParser_DataLength = class(TJavaGenericImport<JFieldParser_DataLengthClass, JFieldParser_DataLength>)
  end;

  JFinderPatternClass = interface(JResultPointClass)
    ['{C129D84F-5802-4783-B96D-2F3605351B99}']
  end;

  [JavaSignature('com/google/zxing/qrcode/detector/FinderPattern')]
  JFinderPattern = interface(JResultPoint)
    ['{B9CBC863-175D-483F-BA80-64269170BC1B}']
    function getEstimatedModuleSize: Single; cdecl;
  end;

  TJFinderPattern = class(TJavaGenericImport<JFinderPatternClass, JFinderPattern>)
  end;

  JFinderPattern1Class = interface(JObjectClass)
    ['{15B49282-F264-4BF3-8311-9588DD43E6D8}']
    function init(value: Integer; startEnd: TJavaArray<Integer>; start: Integer; &end: Integer; rowNumber: Integer): JFinderPattern1; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/rss/FinderPattern')]
  JFinderPattern1 = interface(JObject)
    ['{1889E75F-F277-47E2-A07D-FBEDC1D8541C}']
    function equals(o: JObject): Boolean; cdecl;
    function getResultPoints: TJavaObjectArray<JResultPoint>; cdecl;
    function getStartEnd: TJavaArray<Integer>; cdecl;
    function getValue: Integer; cdecl;
    function hashCode: Integer; cdecl;
  end;

  TJFinderPattern1 = class(TJavaGenericImport<JFinderPattern1Class, JFinderPattern1>)
  end;

  JFinderPatternFinderClass = interface(JObjectClass)
    ['{E5228423-FCCC-4651-AF6D-059AE3CFCCBD}']
    function init(image: JBitMatrix): JFinderPatternFinder; cdecl; overload;
    function init(image: JBitMatrix; resultPointCallback: JResultPointCallback): JFinderPatternFinder; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/qrcode/detector/FinderPatternFinder')]
  JFinderPatternFinder = interface(JObject)
    ['{DA40B502-EF41-4FA7-975D-E406684D9962}']
  end;

  TJFinderPatternFinder = class(TJavaGenericImport<JFinderPatternFinderClass, JFinderPatternFinder>)
  end;

  JFinderPatternFinder_1Class = interface(JObjectClass)
    ['{5029D746-64C1-4EF0-A289-643C9561F06D}']
  end;

  [JavaSignature('com/google/zxing/qrcode/detector/FinderPatternFinder$1')]
  JFinderPatternFinder_1 = interface(JObject)
    ['{9453B033-2D4E-4DED-B0AE-1D9A9FECD9B6}']
  end;

  TJFinderPatternFinder_1 = class(TJavaGenericImport<JFinderPatternFinder_1Class, JFinderPatternFinder_1>)
  end;

  JFinderPatternFinder_EstimatedModuleComparatorClass = interface(JObjectClass)
    ['{A9459450-EEA4-4D33-9665-036C1EF8AABE}']
  end;

  [JavaSignature('com/google/zxing/qrcode/detector/FinderPatternFinder$EstimatedModuleComparator')]
  JFinderPatternFinder_EstimatedModuleComparator = interface(JObject)
    ['{B7B9AB9A-9A32-4E0E-B6DE-C9287D469F96}']
    function compare(center1: JFinderPattern; center2: JFinderPattern): Integer; cdecl; overload;
    function compare(param0: JObject; param1: JObject): Integer; cdecl; overload;
  end;

  TJFinderPatternFinder_EstimatedModuleComparator = class(TJavaGenericImport<JFinderPatternFinder_EstimatedModuleComparatorClass, JFinderPatternFinder_EstimatedModuleComparator>)
  end;

  JFinderPatternInfoClass = interface(JObjectClass)
    ['{27A56FE8-23CD-4537-BEE1-3441A7089A98}']
    function init(patternCenters: TJavaObjectArray<JFinderPattern>): JFinderPatternInfo; cdecl;
  end;

  [JavaSignature('com/google/zxing/qrcode/detector/FinderPatternInfo')]
  JFinderPatternInfo = interface(JObject)
    ['{685BF267-2E73-4BBD-901E-D6C8F192B37C}']
    function getBottomLeft: JFinderPattern; cdecl;
    function getTopLeft: JFinderPattern; cdecl;
    function getTopRight: JFinderPattern; cdecl;
  end;

  TJFinderPatternInfo = class(TJavaGenericImport<JFinderPatternInfoClass, JFinderPatternInfo>)
  end;

  JFormatExceptionClass = interface(JReaderExceptionClass)
    ['{B1F166BC-A846-41D8-90D9-0968B7CE41B3}']
    function getFormatInstance: JFormatException; cdecl; overload;
    function getFormatInstance(cause: JThrowable): JFormatException; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/FormatException')]
  JFormatException = interface(JReaderException)
    ['{9743F81F-A093-42D0-900E-16B7EFB2007C}']
  end;

  TJFormatException = class(TJavaGenericImport<JFormatExceptionClass, JFormatException>)
  end;

  JFormatInformationClass = interface(JObjectClass)
    ['{99961267-9AA3-4DF4-A38E-9AD5B3FEA2E3}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/FormatInformation')]
  JFormatInformation = interface(JObject)
    ['{45ECD69F-6DEE-4883-B51F-C9279E150529}']
    function equals(o: JObject): Boolean; cdecl;
    function hashCode: Integer; cdecl;
  end;

  TJFormatInformation = class(TJavaGenericImport<JFormatInformationClass, JFormatInformation>)
  end;

  JGeneralAppIdDecoderClass = interface(JObjectClass)
    ['{62AC3925-7596-406F-A3DC-835983F45814}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder')]
  JGeneralAppIdDecoder = interface(JObject)
    ['{3F0E1962-8902-4CC0-98F5-D9C6FFF9A41F}']
  end;

  TJGeneralAppIdDecoder = class(TJavaGenericImport<JGeneralAppIdDecoderClass, JGeneralAppIdDecoder>)
  end;

  JGenericGFClass = interface(JObjectClass)
    ['{08753757-D1B2-40B5-BF19-5A4394839CBC}']
    function _GetAZTEC_DATA_10: JGenericGF;
    procedure _SetAZTEC_DATA_10(Value: JGenericGF);
    function _GetAZTEC_DATA_12: JGenericGF;
    procedure _SetAZTEC_DATA_12(Value: JGenericGF);
    function _GetAZTEC_DATA_6: JGenericGF;
    procedure _SetAZTEC_DATA_6(Value: JGenericGF);
    function _GetAZTEC_DATA_8: JGenericGF;
    procedure _SetAZTEC_DATA_8(Value: JGenericGF);
    function _GetAZTEC_PARAM: JGenericGF;
    procedure _SetAZTEC_PARAM(Value: JGenericGF);
    function _GetDATA_MATRIX_FIELD_256: JGenericGF;
    procedure _SetDATA_MATRIX_FIELD_256(Value: JGenericGF);
    function _GetMAXICODE_FIELD_64: JGenericGF;
    procedure _SetMAXICODE_FIELD_64(Value: JGenericGF);
    function _GetQR_CODE_FIELD_256: JGenericGF;
    procedure _SetQR_CODE_FIELD_256(Value: JGenericGF);
    function init(primitive: Integer; size: Integer; b: Integer): JGenericGF; cdecl;
    property AZTEC_DATA_10: JGenericGF read _GetAZTEC_DATA_10 write _SetAZTEC_DATA_10;
    property AZTEC_DATA_12: JGenericGF read _GetAZTEC_DATA_12 write _SetAZTEC_DATA_12;
    property AZTEC_DATA_6: JGenericGF read _GetAZTEC_DATA_6 write _SetAZTEC_DATA_6;
    property AZTEC_DATA_8: JGenericGF read _GetAZTEC_DATA_8 write _SetAZTEC_DATA_8;
    property AZTEC_PARAM: JGenericGF read _GetAZTEC_PARAM write _SetAZTEC_PARAM;
    property DATA_MATRIX_FIELD_256: JGenericGF read _GetDATA_MATRIX_FIELD_256 write _SetDATA_MATRIX_FIELD_256;
    property MAXICODE_FIELD_64: JGenericGF read _GetMAXICODE_FIELD_64 write _SetMAXICODE_FIELD_64;
    property QR_CODE_FIELD_256: JGenericGF read _GetQR_CODE_FIELD_256 write _SetQR_CODE_FIELD_256;
  end;

  [JavaSignature('com/google/zxing/common/reedsolomon/GenericGF')]
  JGenericGF = interface(JObject)
    ['{CC96A042-E8D6-45D1-A152-E3AD32BD50BE}']
    function getGeneratorBase: Integer; cdecl;
    function getSize: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJGenericGF = class(TJavaGenericImport<JGenericGFClass, JGenericGF>)
  end;

  JGenericGFPolyClass = interface(JObjectClass)
    ['{E9A78768-0E31-4EFA-BB3B-2215AECE9544}']
  end;

  [JavaSignature('com/google/zxing/common/reedsolomon/GenericGFPoly')]
  JGenericGFPoly = interface(JObject)
    ['{3147C458-D923-406E-9D0B-BDCD3F65391E}']
    function toString: JString; cdecl;
  end;

  TJGenericGFPoly = class(TJavaGenericImport<JGenericGFPolyClass, JGenericGFPoly>)
  end;

  JGenericMultipleBarcodeReaderClass = interface(JObjectClass)
    ['{6FBDBEB9-919E-452B-985D-D9213B6F5AEA}']
    function init(delegate: JReader): JGenericMultipleBarcodeReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/multi/GenericMultipleBarcodeReader')]
  JGenericMultipleBarcodeReader = interface(JObject)
    ['{7DDE2CE6-380B-4B64-81EC-F7B7C5CC3EC0}']
    function decodeMultiple(image: JBinaryBitmap): TJavaObjectArray<JResult>; cdecl; overload;
    function decodeMultiple(image: JBinaryBitmap; hints: JMap): TJavaObjectArray<JResult>; cdecl; overload;
  end;

  TJGenericMultipleBarcodeReader = class(TJavaGenericImport<JGenericMultipleBarcodeReaderClass, JGenericMultipleBarcodeReader>)
  end;

  JGeoParsedResultClass = interface(JParsedResultClass)
    ['{26145078-34FD-40A5-908B-1B9970B946D7}']
  end;

  [JavaSignature('com/google/zxing/client/result/GeoParsedResult')]
  JGeoParsedResult = interface(JParsedResult)
    ['{22BC5DF3-E3B5-4CB8-B2F3-FF1FD28089FE}']
    function getAltitude: Double; cdecl;
    function getDisplayResult: JString; cdecl;
    function getGeoURI: JString; cdecl;
    function getLatitude: Double; cdecl;
    function getLongitude: Double; cdecl;
    function getQuery: JString; cdecl;
  end;

  TJGeoParsedResult = class(TJavaGenericImport<JGeoParsedResultClass, JGeoParsedResult>)
  end;

  JGeoResultParserClass = interface(JResultParserClass)
    ['{76BC131B-40A1-4DD7-8674-2446A2DBE107}']
    function init: JGeoResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/GeoResultParser')]
  JGeoResultParser = interface(JResultParser)
    ['{170A7682-15F0-415A-B9A4-A903B67A3038}']
    function parse(result: JResult): JGeoParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJGeoResultParser = class(TJavaGenericImport<JGeoResultParserClass, JGeoResultParser>)
  end;

  JGlobalHistogramBinarizerClass = interface(JBinarizerClass)
    ['{B00AA487-8041-410F-B9FC-E5DB40F8C5A0}']
    function init(source: JLuminanceSource): JGlobalHistogramBinarizer; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/GlobalHistogramBinarizer')]
  JGlobalHistogramBinarizer = interface(JBinarizer)
    ['{7AD0ED80-9807-457B-B4B2-16B2A56EC5F0}']
    function createBinarizer(source: JLuminanceSource): JBinarizer; cdecl;
    function getBlackMatrix: JBitMatrix; cdecl;
    function getBlackRow(y: Integer; row: JBitArray): JBitArray; cdecl;
  end;

  TJGlobalHistogramBinarizer = class(TJavaGenericImport<JGlobalHistogramBinarizerClass, JGlobalHistogramBinarizer>)
  end;

  JHighLevelEncoderClass = interface(JObjectClass)
    ['{E18368E4-3F44-43FF-9D48-D00CBFF8B525}']
    function init(text: TJavaArray<Byte>): JHighLevelEncoder; cdecl; overload;
    function init(text: TJavaArray<Byte>; charset: JObject {java/nio/charset/Charset}): JHighLevelEncoder; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/aztec/encoder/HighLevelEncoder')]
  JHighLevelEncoder = interface(JObject)
    ['{F0078429-F306-48A2-B8D8-84271828870F}']
    function encode: JBitArray; cdecl;
  end;

  TJHighLevelEncoder = class(TJavaGenericImport<JHighLevelEncoderClass, JHighLevelEncoder>)
  end;

  JHighLevelEncoder1Class = interface(JObjectClass)
    ['{31D49A6A-B8F1-4357-9779-46FBBC7DAD91}']
    function determineConsecutiveDigitCount(msg: JCharSequence; startpos: Integer): Integer; cdecl;
    function encodeHighLevel(msg: JString; shape: JSymbolShapeHint; minSize: JDimension; maxSize: JDimension): JString; cdecl; overload;
    function encodeHighLevel(msg: JString): JString; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/HighLevelEncoder')]
  JHighLevelEncoder1 = interface(JObject)
    ['{F6057839-0EE9-40FD-B32A-24ED44947B15}']
  end;

  TJHighLevelEncoder1 = class(TJavaGenericImport<JHighLevelEncoder1Class, JHighLevelEncoder1>)
  end;

  JHighLevelEncoder_1Class = interface(JObjectClass)
    ['{B4D09988-55E7-47F7-BA49-1D18FFE243FF}']
  end;

  [JavaSignature('com/google/zxing/aztec/encoder/HighLevelEncoder$1')]
  JHighLevelEncoder_1 = interface(JObject)
    ['{F0C0F3BB-4FA6-40F5-915B-0A07D3E5D919}']
    function compare(a: JState; b: JState): Integer; cdecl; overload;
    function compare(param0: JObject; param1: JObject): Integer; cdecl; overload;
  end;

  TJHighLevelEncoder_1 = class(TJavaGenericImport<JHighLevelEncoder_1Class, JHighLevelEncoder_1>)
  end;

  JHybridBinarizerClass = interface(JGlobalHistogramBinarizerClass)
    ['{9F9CF7C9-88B7-488E-B3DC-8CE007832DD5}']
    function init(source: JLuminanceSource): JHybridBinarizer; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/HybridBinarizer')]
  JHybridBinarizer = interface(JGlobalHistogramBinarizer)
    ['{951CDC38-6450-4E36-B35C-24D5D1209320}']
    function createBinarizer(source: JLuminanceSource): JBinarizer; cdecl;
    function getBlackMatrix: JBitMatrix; cdecl;
  end;

  TJHybridBinarizer = class(TJavaGenericImport<JHybridBinarizerClass, JHybridBinarizer>)
  end;

  JLuminanceSourceClass = interface(JObjectClass)
    ['{A0333870-4240-49BF-8D2E-F701E7FA4F24}']
  end;

  [JavaSignature('com/google/zxing/LuminanceSource')]
  JLuminanceSource = interface(JObject)
    ['{AE4349C5-1494-4B20-B76C-94FA873467FA}']
    function crop(left: Integer; top: Integer; width: Integer; height: Integer): JLuminanceSource; cdecl;
    function getHeight: Integer; cdecl;
    function getMatrix: TJavaArray<Byte>; cdecl;
    function getRow(param0: Integer; param1: TJavaArray<Byte>): TJavaArray<Byte>; cdecl;
    function getWidth: Integer; cdecl;
    function invert: JLuminanceSource; cdecl;
    function isCropSupported: Boolean; cdecl;
    function isRotateSupported: Boolean; cdecl;
    function rotateCounterClockwise: JLuminanceSource; cdecl;
    function rotateCounterClockwise45: JLuminanceSource; cdecl;
    function toString: JString; cdecl;
  end;

  TJLuminanceSource = class(TJavaGenericImport<JLuminanceSourceClass, JLuminanceSource>)
  end;

  JInvertedLuminanceSourceClass = interface(JLuminanceSourceClass)
    ['{CA81530A-2B60-4F71-9102-738C6970C36B}']
    function init(delegate: JLuminanceSource): JInvertedLuminanceSource; cdecl;
  end;

  [JavaSignature('com/google/zxing/InvertedLuminanceSource')]
  JInvertedLuminanceSource = interface(JLuminanceSource)
    ['{771C2FD9-B08C-4118-B421-7C0A5CDFB24F}']
    function crop(left: Integer; top: Integer; width: Integer; height: Integer): JLuminanceSource; cdecl;
    function getMatrix: TJavaArray<Byte>; cdecl;
    function getRow(y: Integer; row: TJavaArray<Byte>): TJavaArray<Byte>; cdecl;
    function invert: JLuminanceSource; cdecl;
    function isCropSupported: Boolean; cdecl;
    function isRotateSupported: Boolean; cdecl;
    function rotateCounterClockwise: JLuminanceSource; cdecl;
    function rotateCounterClockwise45: JLuminanceSource; cdecl;
  end;

  TJInvertedLuminanceSource = class(TJavaGenericImport<JInvertedLuminanceSourceClass, JInvertedLuminanceSource>)
  end;

  JISBNParsedResultClass = interface(JParsedResultClass)
    ['{77E15D0D-1B7B-40A0-9F65-3E4D45416DC0}']
  end;

  [JavaSignature('com/google/zxing/client/result/ISBNParsedResult')]
  JISBNParsedResult = interface(JParsedResult)
    ['{C7603700-DC26-4C63-8A7D-C71F84A68B68}']
    function getDisplayResult: JString; cdecl;
    function getISBN: JString; cdecl;
  end;

  TJISBNParsedResult = class(TJavaGenericImport<JISBNParsedResultClass, JISBNParsedResult>)
  end;

  JISBNResultParserClass = interface(JResultParserClass)
    ['{5190F03D-9945-4465-986A-F943B9863DCA}']
    function init: JISBNResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/ISBNResultParser')]
  JISBNResultParser = interface(JResultParser)
    ['{39A26F0A-3629-45EB-8A31-4F9702C91FDB}']
    function parse(result: JResult): JISBNParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJISBNResultParser = class(TJavaGenericImport<JISBNResultParserClass, JISBNResultParser>)
  end;

  JITFReaderClass = interface(JOneDReaderClass)
    ['{B2F25028-A4F3-4689-A731-A183D9968FB8}']
    function init: JITFReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/ITFReader')]
  JITFReader = interface(JOneDReader)
    ['{AA7D017B-5C0A-4DC7-8F76-6E23D4091D34}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
  end;

  TJITFReader = class(TJavaGenericImport<JITFReaderClass, JITFReader>)
  end;

  JITFWriterClass = interface(JOneDimensionalCodeWriterClass)
    ['{1968AF3B-1281-4FBF-8AEE-CCCBBDC9F915}']
    function init: JITFWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/ITFWriter')]
  JITFWriter = interface(JOneDimensionalCodeWriter)
    ['{105FC353-6931-4624-84CA-122C73EE3EAE}']
    function encode(contents: JString): TJavaArray<Boolean>; cdecl;
  end;

  TJITFWriter = class(TJavaGenericImport<JITFWriterClass, JITFWriter>)
  end;

  JMaskUtilClass = interface(JObjectClass)
    ['{FDD79827-24B3-4574-913F-CBE4A8A9A06E}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/MaskUtil')]
  JMaskUtil = interface(JObject)
    ['{4AEB706B-FC7F-4D5F-9E34-032785C59D15}']
  end;

  TJMaskUtil = class(TJavaGenericImport<JMaskUtilClass, JMaskUtil>)
  end;

  JMathUtilsClass = interface(JObjectClass)
    ['{ECD2E3A7-6D5C-4E0B-B500-4131C98EAA7B}']
    function distance(aX: Single; aY: Single; bX: Single; bY: Single): Single; cdecl; overload;
    function distance(aX: Integer; aY: Integer; bX: Integer; bY: Integer): Single; cdecl; overload;
    function round(d: Single): Integer; cdecl;
    function sum(&array: TJavaArray<Integer>): Integer; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/detector/MathUtils')]
  JMathUtils = interface(JObject)
    ['{3737272D-AABE-4E69-9B43-1077BE5C6469}']
  end;

  TJMathUtils = class(TJavaGenericImport<JMathUtilsClass, JMathUtils>)
  end;

  JMatrixUtilClass = interface(JObjectClass)
    ['{722EA37E-3CA8-4822-B5D5-F5F5DB6360F4}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/MatrixUtil')]
  JMatrixUtil = interface(JObject)
    ['{DC72A73E-3B82-45E2-9AF3-B56302CCAAD0}']
  end;

  TJMatrixUtil = class(TJavaGenericImport<JMatrixUtilClass, JMatrixUtil>)
  end;

  JMaxiCodeReaderClass = interface(JObjectClass)
    ['{7BD5EFB9-EEED-43A8-9BDF-5669E8EFBC46}']
    function init: JMaxiCodeReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/maxicode/MaxiCodeReader')]
  JMaxiCodeReader = interface(JObject)
    ['{F137A444-6527-4689-AE42-F4D1125B102D}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    procedure reset; cdecl;
  end;

  TJMaxiCodeReader = class(TJavaGenericImport<JMaxiCodeReaderClass, JMaxiCodeReader>)
  end;

  JMinimalEncoderClass = interface(JObjectClass)
    ['{06CD4928-329B-49C5-89A4-A1F4D6CBED84}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/MinimalEncoder')]
  JMinimalEncoder = interface(JObject)
    ['{39A0854A-D5B7-4359-86D0-0447C33245B2}']
  end;

  TJMinimalEncoder = class(TJavaGenericImport<JMinimalEncoderClass, JMinimalEncoder>)
  end;

  JMinimalEncoder_1Class = interface(JObjectClass)
    ['{5A35B2F8-0DE3-40C4-A8FA-C97FDB4BE10F}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/MinimalEncoder$1')]
  JMinimalEncoder_1 = interface(JObject)
    ['{B753CA6E-B01F-4DA5-AFF8-6136D1739434}']
  end;

  TJMinimalEncoder_1 = class(TJavaGenericImport<JMinimalEncoder_1Class, JMinimalEncoder_1>)
  end;

  JMinimalEncoder_EdgeClass = interface(JObjectClass)
    ['{5D72406C-3DF8-4903-A18D-87AD49BE2253}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/MinimalEncoder$Edge')]
  JMinimalEncoder_Edge = interface(JObject)
    ['{BC3020B8-DB17-4F6C-9FBA-3F951670032B}']
  end;

  TJMinimalEncoder_Edge = class(TJavaGenericImport<JMinimalEncoder_EdgeClass, JMinimalEncoder_Edge>)
  end;

  JMinimalEncoder_ResultListClass = interface(JObjectClass)
    ['{FA2D2CFA-BA37-424C-AD99-D5B61EA93E91}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/MinimalEncoder$ResultList')]
  JMinimalEncoder_ResultList = interface(JObject)
    ['{6FD16589-FD86-4E5B-A178-860437121F6A}']
    function toString: JString; cdecl;
  end;

  TJMinimalEncoder_ResultList = class(TJavaGenericImport<JMinimalEncoder_ResultListClass, JMinimalEncoder_ResultList>)
  end;

  JMinimalEncoder_ResultList_ResultNodeClass = interface(JObjectClass)
    ['{3BAA4C95-B97C-457B-99D7-8548EB4E95C7}']
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/MinimalEncoder$ResultList$ResultNode')]
  JMinimalEncoder_ResultList_ResultNode = interface(JObject)
    ['{A26878AC-AE63-48CE-80B5-B64D03A53944}']
    function toString: JString; cdecl;
  end;

  TJMinimalEncoder_ResultList_ResultNode = class(TJavaGenericImport<JMinimalEncoder_ResultList_ResultNodeClass, JMinimalEncoder_ResultList_ResultNode>)
  end;

  JMinimalEncoder_VersionSizeClass = interface(JEnumClass)
    ['{679E2FC0-DE5F-4927-96D3-197BB51F4C17}']
    function _GetLARGE: JMinimalEncoder_VersionSize;
    procedure _SetLARGE(Value: JMinimalEncoder_VersionSize);
    function _GetMEDIUM: JMinimalEncoder_VersionSize;
    procedure _SetMEDIUM(Value: JMinimalEncoder_VersionSize);
    function _GetSMALL: JMinimalEncoder_VersionSize;
    procedure _SetSMALL(Value: JMinimalEncoder_VersionSize);
    function valueOf(name: JString): JMinimalEncoder_VersionSize; cdecl;
    function values: TJavaObjectArray<JMinimalEncoder_VersionSize>; cdecl;
    property LARGE: JMinimalEncoder_VersionSize read _GetLARGE write _SetLARGE;
    property MEDIUM: JMinimalEncoder_VersionSize read _GetMEDIUM write _SetMEDIUM;
    property SMALL: JMinimalEncoder_VersionSize read _GetSMALL write _SetSMALL;
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/MinimalEncoder$VersionSize')]
  JMinimalEncoder_VersionSize = interface(JEnum)
    ['{21B18C9D-0D17-4D21-B92F-2B8241BC2BB5}']
    function toString: JString; cdecl;
  end;

  TJMinimalEncoder_VersionSize = class(TJavaGenericImport<JMinimalEncoder_VersionSizeClass, JMinimalEncoder_VersionSize>)
  end;

  JModeClass = interface(JEnumClass)
    ['{0FEEFDE5-09FD-4AA7-BF8D-2D0A408405FF}']
    function _GetALPHANUMERIC: JMode;
    procedure _SetALPHANUMERIC(Value: JMode);
    function _GetBYTE: JMode;
    procedure _SetBYTE(Value: JMode);
    function _GetECI: JMode;
    procedure _SetECI(Value: JMode);
    function _GetFNC1_FIRST_POSITION: JMode;
    procedure _SetFNC1_FIRST_POSITION(Value: JMode);
    function _GetFNC1_SECOND_POSITION: JMode;
    procedure _SetFNC1_SECOND_POSITION(Value: JMode);
    function _GetHANZI: JMode;
    procedure _SetHANZI(Value: JMode);
    function _GetKANJI: JMode;
    procedure _SetKANJI(Value: JMode);
    function _GetNUMERIC: JMode;
    procedure _SetNUMERIC(Value: JMode);
    function _GetSTRUCTURED_APPEND: JMode;
    procedure _SetSTRUCTURED_APPEND(Value: JMode);
    function _GetTERMINATOR: JMode;
    procedure _SetTERMINATOR(Value: JMode);
    function forBits(bits: Integer): JMode; cdecl;
    function valueOf(name: JString): JMode; cdecl;
    function values: TJavaObjectArray<JMode>; cdecl;
    property ALPHANUMERIC: JMode read _GetALPHANUMERIC write _SetALPHANUMERIC;
    property BYTE: JMode read _GetBYTE write _SetBYTE;
    property ECI: JMode read _GetECI write _SetECI;
    property FNC1_FIRST_POSITION: JMode read _GetFNC1_FIRST_POSITION write _SetFNC1_FIRST_POSITION;
    property FNC1_SECOND_POSITION: JMode read _GetFNC1_SECOND_POSITION write _SetFNC1_SECOND_POSITION;
    property HANZI: JMode read _GetHANZI write _SetHANZI;
    property KANJI: JMode read _GetKANJI write _SetKANJI;
    property NUMERIC: JMode read _GetNUMERIC write _SetNUMERIC;
    property STRUCTURED_APPEND: JMode read _GetSTRUCTURED_APPEND write _SetSTRUCTURED_APPEND;
    property TERMINATOR: JMode read _GetTERMINATOR write _SetTERMINATOR;
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/Mode')]
  JMode = interface(JEnum)
    ['{A3604CF1-72CA-4242-BDFE-5ED9A9D61493}']
    function getBits: Integer; cdecl;
    function getCharacterCountBits(version: JVersion): Integer; cdecl;
  end;

  TJMode = class(TJavaGenericImport<JModeClass, JMode>)
  end;

  JModulusGFClass = interface(JObjectClass)
    ['{556A0F11-A418-44DE-A979-620325822E03}']
    function _GetPDF417_GF: JModulusGF;
    procedure _SetPDF417_GF(Value: JModulusGF);
    property PDF417_GF: JModulusGF read _GetPDF417_GF write _SetPDF417_GF;
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/ec/ModulusGF')]
  JModulusGF = interface(JObject)
    ['{370F89D0-AC89-4344-BDB3-5CF788C4F989}']
  end;

  TJModulusGF = class(TJavaGenericImport<JModulusGFClass, JModulusGF>)
  end;

  JModulusPolyClass = interface(JObjectClass)
    ['{64D98406-E4C2-4A4A-AB91-2CFFD8BB2309}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/ec/ModulusPoly')]
  JModulusPoly = interface(JObject)
    ['{91A3C0B0-1D8C-465F-A8B4-8185B0905B35}']
    function toString: JString; cdecl;
  end;

  TJModulusPoly = class(TJavaGenericImport<JModulusPolyClass, JModulusPoly>)
  end;

  JMonochromeRectangleDetectorClass = interface(JObjectClass)
    ['{E49E5E44-73AF-45F4-B891-1F9F8CC7F524}']
    function init(image: JBitMatrix): JMonochromeRectangleDetector; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/detector/MonochromeRectangleDetector')]
  JMonochromeRectangleDetector = interface(JObject)
    ['{C625EACF-93FF-4831-9D5E-AB7234EEDD18}']
    function detect: TJavaObjectArray<JResultPoint>; cdecl;
  end;

  TJMonochromeRectangleDetector = class(TJavaGenericImport<JMonochromeRectangleDetectorClass, JMonochromeRectangleDetector>)
  end;

  JMultiDetectorClass = interface(JDetector1Class)
    ['{D3AAB0B0-9665-439F-899D-9F997D8B6706}']
    function init(image: JBitMatrix): JMultiDetector; cdecl;
  end;

  [JavaSignature('com/google/zxing/multi/qrcode/detector/MultiDetector')]
  JMultiDetector = interface(JDetector1)
    ['{0EB649C0-D61A-41AD-9C6B-284A47051ED0}']
    function detectMulti(hints: JMap): TJavaObjectArray<JDetectorResult>; cdecl;
  end;

  TJMultiDetector = class(TJavaGenericImport<JMultiDetectorClass, JMultiDetector>)
  end;

  JMultiFinderPatternFinderClass = interface(JFinderPatternFinderClass)
    ['{DDC9042B-98A4-4A39-AA9F-67CEC33FFD49}']
    function init(image: JBitMatrix; resultPointCallback: JResultPointCallback): JMultiFinderPatternFinder; cdecl;
  end;

  [JavaSignature('com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder')]
  JMultiFinderPatternFinder = interface(JFinderPatternFinder)
    ['{CBF8341C-F2BD-4620-AF01-25CB515BFDAA}']
    function findMulti(hints: JMap): TJavaObjectArray<JFinderPatternInfo>; cdecl;
  end;

  TJMultiFinderPatternFinder = class(TJavaGenericImport<JMultiFinderPatternFinderClass, JMultiFinderPatternFinder>)
  end;

  JMultiFinderPatternFinder_1Class = interface(JObjectClass)
    ['{1C9F32E3-23D6-48DB-9419-EC59D0D984D6}']
  end;

  [JavaSignature('com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder$1')]
  JMultiFinderPatternFinder_1 = interface(JObject)
    ['{6E12149E-4236-4B94-B202-0821274752A8}']
  end;

  TJMultiFinderPatternFinder_1 = class(TJavaGenericImport<JMultiFinderPatternFinder_1Class, JMultiFinderPatternFinder_1>)
  end;

  JMultiFinderPatternFinder_ModuleSizeComparatorClass = interface(JObjectClass)
    ['{92BF4D12-0FAC-4FC3-92DD-F3DECC2B9767}']
  end;

  [JavaSignature('com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder$ModuleSizeComparator')]
  JMultiFinderPatternFinder_ModuleSizeComparator = interface(JObject)
    ['{6C6922DC-4C17-4833-8406-9537F6703A3A}']
    function compare(center1: JFinderPattern; center2: JFinderPattern): Integer; cdecl; overload;
    function compare(param0: JObject; param1: JObject): Integer; cdecl; overload;
  end;

  TJMultiFinderPatternFinder_ModuleSizeComparator = class(TJavaGenericImport<JMultiFinderPatternFinder_ModuleSizeComparatorClass, JMultiFinderPatternFinder_ModuleSizeComparator>)
  end;

  JMultiFormatOneDReaderClass = interface(JOneDReaderClass)
    ['{58831E0B-7B23-401C-9AF2-E50CA158747B}']
    function init(hints: JMap): JMultiFormatOneDReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/MultiFormatOneDReader')]
  JMultiFormatOneDReader = interface(JOneDReader)
    ['{F2CC91E6-DE48-4A7A-AFB9-35C2304B0EFB}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
    procedure reset; cdecl;
  end;

  TJMultiFormatOneDReader = class(TJavaGenericImport<JMultiFormatOneDReaderClass, JMultiFormatOneDReader>)
  end;

  JMultiFormatReaderClass = interface(JObjectClass)
    ['{36984938-5F33-42E0-B993-468529BC690F}']
    function init: JMultiFormatReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/MultiFormatReader')]
  JMultiFormatReader = interface(JObject)
    ['{97DE129D-05C7-4507-AF1D-07B77C871A05}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    function decodeWithState(image: JBinaryBitmap): JResult; cdecl;
    procedure reset; cdecl;
    procedure setHints(hints: JMap); cdecl;
  end;

  TJMultiFormatReader = class(TJavaGenericImport<JMultiFormatReaderClass, JMultiFormatReader>)
  end;

  JMultiFormatUPCEANReaderClass = interface(JOneDReaderClass)
    ['{96D6EE6E-82FF-4682-A78C-DDA002170E31}']
    function init(hints: JMap): JMultiFormatUPCEANReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/MultiFormatUPCEANReader')]
  JMultiFormatUPCEANReader = interface(JOneDReader)
    ['{8C3F9C0E-D33A-4946-9BF5-B7F578D5B46A}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
    procedure reset; cdecl;
  end;

  TJMultiFormatUPCEANReader = class(TJavaGenericImport<JMultiFormatUPCEANReaderClass, JMultiFormatUPCEANReader>)
  end;

  JMultiFormatWriterClass = interface(JObjectClass)
    ['{A934261C-E0A8-4698-A025-657AF74C9738}']
    function init: JMultiFormatWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/MultiFormatWriter')]
  JMultiFormatWriter = interface(JObject)
    ['{133A7BE6-86DE-4DE6-AF63-6A5ABA682CE5}']
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer): JBitMatrix; cdecl; overload;
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer; hints: JMap): JBitMatrix; cdecl; overload;
  end;

  TJMultiFormatWriter = class(TJavaGenericImport<JMultiFormatWriterClass, JMultiFormatWriter>)
  end;

  JMultiFormatWriter_1Class = interface(JObjectClass)
    ['{44F5EA20-4104-483A-84C5-1E830A9A6841}']
  end;

  [JavaSignature('com/google/zxing/MultiFormatWriter$1')]
  JMultiFormatWriter_1 = interface(JObject)
    ['{20A7F5E5-D248-43BB-B98F-6BEC65AB5C28}']
  end;

  TJMultiFormatWriter_1 = class(TJavaGenericImport<JMultiFormatWriter_1Class, JMultiFormatWriter_1>)
  end;

  JMultipleBarcodeReaderClass = interface(IJavaClass)
    ['{1BB166D0-EAA5-48BE-9BD8-46E7919321C3}']
  end;

  [JavaSignature('com/google/zxing/multi/MultipleBarcodeReader')]
  JMultipleBarcodeReader = interface(IJavaInstance)
    ['{6B66A69F-3661-4AB2-80B8-D32504214B0A}']
    function decodeMultiple(param0: JBinaryBitmap): TJavaObjectArray<JResult>; cdecl; overload;
    function decodeMultiple(param0: JBinaryBitmap; param1: JMap): TJavaObjectArray<JResult>; cdecl; overload;
  end;

  TJMultipleBarcodeReader = class(TJavaGenericImport<JMultipleBarcodeReaderClass, JMultipleBarcodeReader>)
  end;

  JNotFoundExceptionClass = interface(JReaderExceptionClass)
    ['{FD0985F7-9CA6-4E0F-8D95-E43857119A96}']
    function getNotFoundInstance: JNotFoundException; cdecl;
  end;

  [JavaSignature('com/google/zxing/NotFoundException')]
  JNotFoundException = interface(JReaderException)
    ['{4FA1B9F2-47A8-4F02-A8DF-2D37A1EDFF4A}']
  end;

  TJNotFoundException = class(TJavaGenericImport<JNotFoundExceptionClass, JNotFoundException>)
  end;

  JPairClass = interface(JDataCharacterClass)
    ['{C70001EA-1201-43B0-A83D-4BE0D4C97631}']
  end;

  [JavaSignature('com/google/zxing/oned/rss/Pair')]
  JPair = interface(JDataCharacter)
    ['{990BD5DE-BF38-4167-BEB3-E784A37EA437}']
  end;

  TJPair = class(TJavaGenericImport<JPairClass, JPair>)
  end;

  JParsedResultTypeClass = interface(JEnumClass)
    ['{6CDB48CB-3E54-4872-8F9B-45468988D235}']
    function _GetADDRESSBOOK: JParsedResultType;
    procedure _SetADDRESSBOOK(Value: JParsedResultType);
    function _GetCALENDAR: JParsedResultType;
    procedure _SetCALENDAR(Value: JParsedResultType);
    function _GetEMAIL_ADDRESS: JParsedResultType;
    procedure _SetEMAIL_ADDRESS(Value: JParsedResultType);
    function _GetGEO: JParsedResultType;
    procedure _SetGEO(Value: JParsedResultType);
    function _GetISBN: JParsedResultType;
    procedure _SetISBN(Value: JParsedResultType);
    function _GetPRODUCT: JParsedResultType;
    procedure _SetPRODUCT(Value: JParsedResultType);
    function _GetSMS: JParsedResultType;
    procedure _SetSMS(Value: JParsedResultType);
    function _GetTEL: JParsedResultType;
    procedure _SetTEL(Value: JParsedResultType);
    function _GetTEXT: JParsedResultType;
    procedure _SetTEXT(Value: JParsedResultType);
    function _GetURI: JParsedResultType;
    procedure _SetURI(Value: JParsedResultType);
    function _GetVIN: JParsedResultType;
    procedure _SetVIN(Value: JParsedResultType);
    function _GetWIFI: JParsedResultType;
    procedure _SetWIFI(Value: JParsedResultType);
    function valueOf(name: JString): JParsedResultType; cdecl;
    function values: TJavaObjectArray<JParsedResultType>; cdecl;
    property ADDRESSBOOK: JParsedResultType read _GetADDRESSBOOK write _SetADDRESSBOOK;
    property CALENDAR: JParsedResultType read _GetCALENDAR write _SetCALENDAR;
    property EMAIL_ADDRESS: JParsedResultType read _GetEMAIL_ADDRESS write _SetEMAIL_ADDRESS;
    property GEO: JParsedResultType read _GetGEO write _SetGEO;
    property ISBN: JParsedResultType read _GetISBN write _SetISBN;
    property PRODUCT: JParsedResultType read _GetPRODUCT write _SetPRODUCT;
    property SMS: JParsedResultType read _GetSMS write _SetSMS;
    property TEL: JParsedResultType read _GetTEL write _SetTEL;
    property TEXT: JParsedResultType read _GetTEXT write _SetTEXT;
    property URI: JParsedResultType read _GetURI write _SetURI;
    property VIN: JParsedResultType read _GetVIN write _SetVIN;
    property WIFI: JParsedResultType read _GetWIFI write _SetWIFI;
  end;

  [JavaSignature('com/google/zxing/client/result/ParsedResultType')]
  JParsedResultType = interface(JEnum)
    ['{8CE59C17-2CF7-469C-910E-C2C4B1A17C94}']
  end;

  TJParsedResultType = class(TJavaGenericImport<JParsedResultTypeClass, JParsedResultType>)
  end;

  JPDF417Class = interface(JObjectClass)
    ['{B5E41A23-4ED2-408E-97B5-66649BE94DD8}']
    function init: JPDF417; cdecl; overload;
    function init(compact: Boolean): JPDF417; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/pdf417/encoder/PDF417')]
  JPDF417 = interface(JObject)
    ['{3D7F426D-26D6-4F0D-A98A-4345315128EE}']
    procedure generateBarcodeLogic(msg: JString; errorCorrectionLevel: Integer); cdecl;
    function getBarcodeMatrix: JBarcodeMatrix; cdecl;
    procedure setCompact(compact: Boolean); cdecl;
    procedure setCompaction(compaction: JCompaction); cdecl;
    procedure setDimensions(maxCols: Integer; minCols: Integer; maxRows: Integer; minRows: Integer); cdecl;
    procedure setEncoding(encoding: JObject {java/nio/charset/Charset}); cdecl;
  end;

  TJPDF417 = class(TJavaGenericImport<JPDF417Class, JPDF417>)
  end;

  JPDF417CodewordDecoderClass = interface(JObjectClass)
    ['{BEF566C3-F76B-4493-8157-D68513685B2B}']
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/PDF417CodewordDecoder')]
  JPDF417CodewordDecoder = interface(JObject)
    ['{112D18C7-FEBE-47A8-A6B3-D062E5BA7BCA}']
  end;

  TJPDF417CodewordDecoder = class(TJavaGenericImport<JPDF417CodewordDecoderClass, JPDF417CodewordDecoder>)
  end;

  JPDF417CommonClass = interface(JObjectClass)
    ['{387173B1-46C4-495D-BE1E-C4812D8D725B}']
    function _GetBARS_IN_MODULE: Integer;
    function _GetMAX_CODEWORDS_IN_BARCODE: Integer;
    function _GetMAX_ROWS_IN_BARCODE: Integer;
    function _GetMIN_ROWS_IN_BARCODE: Integer;
    function _GetMODULES_IN_CODEWORD: Integer;
    function _GetMODULES_IN_STOP_PATTERN: Integer;
    function _GetNUMBER_OF_CODEWORDS: Integer;
    function _GetSYMBOL_TABLE: TJavaArray<Integer>;
    procedure _SetSYMBOL_TABLE(Value: TJavaArray<Integer>);
    function getBitCountSum(moduleBitCount: TJavaArray<Integer>): Integer; cdecl; deprecated;
    function getCodeword(symbol: Integer): Integer; cdecl;
    function toIntArray(list: JCollection): TJavaArray<Integer>; cdecl;
    property BARS_IN_MODULE: Integer read _GetBARS_IN_MODULE;
    property MAX_CODEWORDS_IN_BARCODE: Integer read _GetMAX_CODEWORDS_IN_BARCODE;
    property MAX_ROWS_IN_BARCODE: Integer read _GetMAX_ROWS_IN_BARCODE;
    property MIN_ROWS_IN_BARCODE: Integer read _GetMIN_ROWS_IN_BARCODE;
    property MODULES_IN_CODEWORD: Integer read _GetMODULES_IN_CODEWORD;
    property MODULES_IN_STOP_PATTERN: Integer read _GetMODULES_IN_STOP_PATTERN;
    property NUMBER_OF_CODEWORDS: Integer read _GetNUMBER_OF_CODEWORDS;
    property SYMBOL_TABLE: TJavaArray<Integer> read _GetSYMBOL_TABLE write _SetSYMBOL_TABLE;
  end;

  [JavaSignature('com/google/zxing/pdf417/PDF417Common')]
  JPDF417Common = interface(JObject)
    ['{5202DB82-0515-4155-8CE5-1E15FFB57C46}']
  end;

  TJPDF417Common = class(TJavaGenericImport<JPDF417CommonClass, JPDF417Common>)
  end;

  JPDF417DetectorResultClass = interface(JObjectClass)
    ['{A60A7D6D-DA58-4AA4-9CF9-64E82BBB6EB3}']
    function init(bits: JBitMatrix; points: JList): JPDF417DetectorResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/pdf417/detector/PDF417DetectorResult')]
  JPDF417DetectorResult = interface(JObject)
    ['{C5C86139-5F77-4C7C-B674-448F02893C3F}']
    function getBits: JBitMatrix; cdecl;
    function getPoints: JList; cdecl;
  end;

  TJPDF417DetectorResult = class(TJavaGenericImport<JPDF417DetectorResultClass, JPDF417DetectorResult>)
  end;

  JPDF417ErrorCorrectionClass = interface(JObjectClass)
    ['{107CCC65-1F79-4FED-B53D-7EEFEA246496}']
  end;

  [JavaSignature('com/google/zxing/pdf417/encoder/PDF417ErrorCorrection')]
  JPDF417ErrorCorrection = interface(JObject)
    ['{2B87AEB5-D2B9-4E3B-8D26-59C31B3E816F}']
  end;

  TJPDF417ErrorCorrection = class(TJavaGenericImport<JPDF417ErrorCorrectionClass, JPDF417ErrorCorrection>)
  end;

  JPDF417HighLevelEncoderClass = interface(JObjectClass)
    ['{1F7EC3D4-3F7F-49E3-BDC7-46D4A9505574}']
  end;

  [JavaSignature('com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder')]
  JPDF417HighLevelEncoder = interface(JObject)
    ['{521759DC-28DB-4FF5-BE0E-E1DD7F4AE932}']
  end;

  TJPDF417HighLevelEncoder = class(TJavaGenericImport<JPDF417HighLevelEncoderClass, JPDF417HighLevelEncoder>)
  end;

  JPDF417HighLevelEncoder_1Class = interface(JObjectClass)
    ['{77A43CA9-078B-4EBA-B992-34F8E488E3D3}']
  end;

  [JavaSignature('com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder$1')]
  JPDF417HighLevelEncoder_1 = interface(JObject)
    ['{D66CEA81-9066-4D0C-9ADB-E57A48DFD27D}']
  end;

  TJPDF417HighLevelEncoder_1 = class(TJavaGenericImport<JPDF417HighLevelEncoder_1Class, JPDF417HighLevelEncoder_1>)
  end;

  JPDF417ReaderClass = interface(JObjectClass)
    ['{35E5F970-E3B7-40CA-9F93-57DE9E5CEB44}']
    function init: JPDF417Reader; cdecl;
  end;

  [JavaSignature('com/google/zxing/pdf417/PDF417Reader')]
  JPDF417Reader = interface(JObject)
    ['{83AF1468-5CE5-474F-9599-BC9D5908D06E}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    function decodeMultiple(image: JBinaryBitmap): TJavaObjectArray<JResult>; cdecl; overload;
    function decodeMultiple(image: JBinaryBitmap; hints: JMap): TJavaObjectArray<JResult>; cdecl; overload;
    procedure reset; cdecl;
  end;

  TJPDF417Reader = class(TJavaGenericImport<JPDF417ReaderClass, JPDF417Reader>)
  end;

  JPDF417ResultMetadataClass = interface(JObjectClass)
    ['{29888869-3647-48C2-8E99-BB03EE623894}']
    function init: JPDF417ResultMetadata; cdecl;
  end;

  [JavaSignature('com/google/zxing/pdf417/PDF417ResultMetadata')]
  JPDF417ResultMetadata = interface(JObject)
    ['{E43F55E3-99F7-43C1-9E39-182BBC941580}']
    function getAddressee: JString; cdecl;
    function getChecksum: Integer; cdecl;
    function getFileId: JString; cdecl;
    function getFileName: JString; cdecl;
    function getFileSize: Int64; cdecl;
    function getOptionalData: TJavaArray<Integer>; cdecl; deprecated;
    function getSegmentCount: Integer; cdecl;
    function getSegmentIndex: Integer; cdecl;
    function getSender: JString; cdecl;
    function getTimestamp: Int64; cdecl;
    function isLastSegment: Boolean; cdecl;
    procedure setAddressee(addressee: JString); cdecl;
    procedure setChecksum(checksum: Integer); cdecl;
    procedure setFileId(fileId: JString); cdecl;
    procedure setFileName(fileName: JString); cdecl;
    procedure setFileSize(fileSize: Int64); cdecl;
    procedure setLastSegment(lastSegment: Boolean); cdecl;
    procedure setOptionalData(optionalData: TJavaArray<Integer>); cdecl; deprecated;
    procedure setSegmentCount(segmentCount: Integer); cdecl;
    procedure setSegmentIndex(segmentIndex: Integer); cdecl;
    procedure setSender(sender: JString); cdecl;
    procedure setTimestamp(timestamp: Int64); cdecl;
  end;

  TJPDF417ResultMetadata = class(TJavaGenericImport<JPDF417ResultMetadataClass, JPDF417ResultMetadata>)
  end;

  JPDF417ScanningDecoderClass = interface(JObjectClass)
    ['{82999CF7-D936-4934-B3D6-F160D13434BE}']
    function decode(image: JBitMatrix; imageTopLeft: JResultPoint; imageBottomLeft: JResultPoint; imageTopRight: JResultPoint; imageBottomRight: JResultPoint; minCodewordWidth: Integer; maxCodewordWidth: Integer): JDecoderResult; cdecl;
    function toString(barcodeMatrix: TJavaObjectBiArray<JBarcodeValue>): JString; cdecl;
  end;

  [JavaSignature('com/google/zxing/pdf417/decoder/PDF417ScanningDecoder')]
  JPDF417ScanningDecoder = interface(JObject)
    ['{1D2FB8FE-E045-4694-9BD9-36AA580A49E0}']
  end;

  TJPDF417ScanningDecoder = class(TJavaGenericImport<JPDF417ScanningDecoderClass, JPDF417ScanningDecoder>)
  end;

  JPDF417WriterClass = interface(JObjectClass)
    ['{15CD5E81-8A12-43C5-AFE4-A627887C554B}']
    function init: JPDF417Writer; cdecl;
  end;

  [JavaSignature('com/google/zxing/pdf417/PDF417Writer')]
  JPDF417Writer = interface(JObject)
    ['{04AA479C-64CB-447E-996B-226CBF8F6C77}']
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer; hints: JMap): JBitMatrix; cdecl; overload;
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer): JBitMatrix; cdecl; overload;
  end;

  TJPDF417Writer = class(TJavaGenericImport<JPDF417WriterClass, JPDF417Writer>)
  end;

  JPerspectiveTransformClass = interface(JObjectClass)
    ['{1091D27F-ECD9-4376-9385-AE7FD9EAB502}']
    function quadrilateralToQuadrilateral(x0: Single; y0: Single; x1: Single; y1: Single; x2: Single; y2: Single; x3: Single; y3: Single; x0p: Single; y0p: Single; x1p: Single; y1p: Single; x2p: Single; y2p: Single; x3p: Single; y3p: Single): JPerspectiveTransform; cdecl;
    function quadrilateralToSquare(x0: Single; y0: Single; x1: Single; y1: Single; x2: Single; y2: Single; x3: Single; y3: Single): JPerspectiveTransform; cdecl;
    function squareToQuadrilateral(x0: Single; y0: Single; x1: Single; y1: Single; x2: Single; y2: Single; x3: Single; y3: Single): JPerspectiveTransform; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/PerspectiveTransform')]
  JPerspectiveTransform = interface(JObject)
    ['{084F5385-6FB9-4A5F-9052-DD8B99B7B9BA}']
    procedure transformPoints(points: TJavaArray<Single>); cdecl; overload;
    procedure transformPoints(xValues: TJavaArray<Single>; yValues: TJavaArray<Single>); cdecl; overload;
  end;

  TJPerspectiveTransform = class(TJavaGenericImport<JPerspectiveTransformClass, JPerspectiveTransform>)
  end;

  JPlanarYUVLuminanceSourceClass = interface(JLuminanceSourceClass)
    ['{E2800C37-0348-4713-871F-246FE23B2341}']
    function init(yuvData: TJavaArray<Byte>; dataWidth: Integer; dataHeight: Integer; left: Integer; top: Integer; width: Integer; height: Integer; reverseHorizontal: Boolean): JPlanarYUVLuminanceSource; cdecl;
  end;

  [JavaSignature('com/google/zxing/PlanarYUVLuminanceSource')]
  JPlanarYUVLuminanceSource = interface(JLuminanceSource)
    ['{56420AE6-4FAA-404D-9AF0-ED2B43CBB637}']
    function crop(left: Integer; top: Integer; width: Integer; height: Integer): JLuminanceSource; cdecl;
    function getMatrix: TJavaArray<Byte>; cdecl;
    function getRow(y: Integer; row: TJavaArray<Byte>): TJavaArray<Byte>; cdecl;
    function getThumbnailHeight: Integer; cdecl;
    function getThumbnailWidth: Integer; cdecl;
    function isCropSupported: Boolean; cdecl;
    function renderThumbnail: TJavaArray<Integer>; cdecl;
  end;

  TJPlanarYUVLuminanceSource = class(TJavaGenericImport<JPlanarYUVLuminanceSourceClass, JPlanarYUVLuminanceSource>)
  end;

  JProductParsedResultClass = interface(JParsedResultClass)
    ['{54802795-CB2B-47F7-A061-02929BEDB8E4}']
  end;

  [JavaSignature('com/google/zxing/client/result/ProductParsedResult')]
  JProductParsedResult = interface(JParsedResult)
    ['{AD2F2911-8C01-4761-BA9E-1D7CE77A0673}']
    function getDisplayResult: JString; cdecl;
    function getNormalizedProductID: JString; cdecl;
    function getProductID: JString; cdecl;
  end;

  TJProductParsedResult = class(TJavaGenericImport<JProductParsedResultClass, JProductParsedResult>)
  end;

  JProductResultParserClass = interface(JResultParserClass)
    ['{CDCAD7B5-8D71-4C69-9720-3362ED2A552F}']
    function init: JProductResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/ProductResultParser')]
  JProductResultParser = interface(JResultParser)
    ['{BB0FD5D1-1650-432F-9EDB-2DA68F2CC44C}']
    function parse(result: JResult): JProductParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJProductResultParser = class(TJavaGenericImport<JProductResultParserClass, JProductResultParser>)
  end;

  JQRCodeClass = interface(JObjectClass)
    ['{14FF4DB7-6180-4FAA-9872-F460CB255B04}']
    function _GetNUM_MASK_PATTERNS: Integer;
    function init: JQRCode; cdecl;
    function isValidMaskPattern(maskPattern: Integer): Boolean; cdecl;
    property NUM_MASK_PATTERNS: Integer read _GetNUM_MASK_PATTERNS;
  end;

  [JavaSignature('com/google/zxing/qrcode/encoder/QRCode')]
  JQRCode = interface(JObject)
    ['{7EC122EF-AFF4-44B0-B834-C6127B10DE0A}']
    function getECLevel: JErrorCorrectionLevel; cdecl;
    function getMaskPattern: Integer; cdecl;
    function getMatrix: JByteMatrix; cdecl;
    function getMode: JMode; cdecl;
    function getVersion: JVersion; cdecl;
    procedure setECLevel(value: JErrorCorrectionLevel); cdecl;
    procedure setMaskPattern(value: Integer); cdecl;
    procedure setMatrix(value: JByteMatrix); cdecl;
    procedure setMode(value: JMode); cdecl;
    procedure setVersion(version: JVersion); cdecl;
    function toString: JString; cdecl;
  end;

  TJQRCode = class(TJavaGenericImport<JQRCodeClass, JQRCode>)
  end;

  JQRCodeDecoderMetaDataClass = interface(JObjectClass)
    ['{69E3C775-C960-4F88-A6DC-890C13DB002C}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/QRCodeDecoderMetaData')]
  JQRCodeDecoderMetaData = interface(JObject)
    ['{59F042D4-51E1-4EC0-A808-C2AD377B50D6}']
    procedure applyMirroredCorrection(points: TJavaObjectArray<JResultPoint>); cdecl;
    function isMirrored: Boolean; cdecl;
  end;

  TJQRCodeDecoderMetaData = class(TJavaGenericImport<JQRCodeDecoderMetaDataClass, JQRCodeDecoderMetaData>)
  end;

  JQRCodeReaderClass = interface(JObjectClass)
    ['{811E7F59-A757-4809-ACD2-318424ADE0D1}']
    function init: JQRCodeReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/qrcode/QRCodeReader')]
  JQRCodeReader = interface(JObject)
    ['{EE7F3D53-3493-47C6-B893-BD7AF03E0FD3}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    procedure reset; cdecl;
  end;

  TJQRCodeReader = class(TJavaGenericImport<JQRCodeReaderClass, JQRCodeReader>)
  end;

  JQRCodeMultiReaderClass = interface(JQRCodeReaderClass)
    ['{9EC58F33-E698-46CC-BB3D-C32831ED17BF}']
    function init: JQRCodeMultiReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/multi/qrcode/QRCodeMultiReader')]
  JQRCodeMultiReader = interface(JQRCodeReader)
    ['{B5986B70-A79F-4400-8873-7C14C7911DA6}']
    function decodeMultiple(image: JBinaryBitmap): TJavaObjectArray<JResult>; cdecl; overload;
    function decodeMultiple(image: JBinaryBitmap; hints: JMap): TJavaObjectArray<JResult>; cdecl; overload;
  end;

  TJQRCodeMultiReader = class(TJavaGenericImport<JQRCodeMultiReaderClass, JQRCodeMultiReader>)
  end;

  JQRCodeMultiReader_1Class = interface(JObjectClass)
    ['{585E9A3A-12FB-465D-8905-A35782C59EDB}']
  end;

  [JavaSignature('com/google/zxing/multi/qrcode/QRCodeMultiReader$1')]
  JQRCodeMultiReader_1 = interface(JObject)
    ['{E68A9667-A646-4107-B4DF-46BB29E35300}']
  end;

  TJQRCodeMultiReader_1 = class(TJavaGenericImport<JQRCodeMultiReader_1Class, JQRCodeMultiReader_1>)
  end;

  JQRCodeMultiReader_SAComparatorClass = interface(JObjectClass)
    ['{1A248D46-D4C0-479A-B48A-682468A44654}']
  end;

  [JavaSignature('com/google/zxing/multi/qrcode/QRCodeMultiReader$SAComparator')]
  JQRCodeMultiReader_SAComparator = interface(JObject)
    ['{9219EEDB-0DF9-4B24-9319-2449084A9E07}']
    function compare(a: JResult; b: JResult): Integer; cdecl; overload;
    function compare(param0: JObject; param1: JObject): Integer; cdecl; overload;
  end;

  TJQRCodeMultiReader_SAComparator = class(TJavaGenericImport<JQRCodeMultiReader_SAComparatorClass, JQRCodeMultiReader_SAComparator>)
  end;

  JQRCodeWriterClass = interface(JObjectClass)
    ['{6AF9CB87-773A-41BB-AC00-E47827E06E68}']
    function init: JQRCodeWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/qrcode/QRCodeWriter')]
  JQRCodeWriter = interface(JObject)
    ['{48D2BFDC-DB48-43FD-BA09-51D2841C4EE0}']
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer): JBitMatrix; cdecl; overload;
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer; hints: JMap): JBitMatrix; cdecl; overload;
  end;

  TJQRCodeWriter = class(TJavaGenericImport<JQRCodeWriterClass, JQRCodeWriter>)
  end;

  JReaderClass = interface(IJavaClass)
    ['{92A525DE-67E3-4A14-AF89-ADE4D67B9AB4}']
  end;

  [JavaSignature('com/google/zxing/Reader')]
  JReader = interface(IJavaInstance)
    ['{48EDC297-A708-4158-BBFC-D86256D7C55F}']
    function decode(param0: JBinaryBitmap): JResult; cdecl; overload;
    function decode(param0: JBinaryBitmap; param1: JMap): JResult; cdecl; overload;
    procedure reset; cdecl;
  end;

  TJReader = class(TJavaGenericImport<JReaderClass, JReader>)
  end;

  JReedSolomonDecoderClass = interface(JObjectClass)
    ['{8CDA34E1-D811-4DAD-A331-A245544E1F65}']
    function init(field: JGenericGF): JReedSolomonDecoder; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/reedsolomon/ReedSolomonDecoder')]
  JReedSolomonDecoder = interface(JObject)
    ['{6EB4CFB4-A78C-479A-A9D1-8B4EE862E4D1}']
    procedure decode(received: TJavaArray<Integer>; twoS: Integer); cdecl;
  end;

  TJReedSolomonDecoder = class(TJavaGenericImport<JReedSolomonDecoderClass, JReedSolomonDecoder>)
  end;

  JReedSolomonEncoderClass = interface(JObjectClass)
    ['{3BCFD10C-2BD2-43CC-B752-EE3242CB8A93}']
    function init(field: JGenericGF): JReedSolomonEncoder; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/reedsolomon/ReedSolomonEncoder')]
  JReedSolomonEncoder = interface(JObject)
    ['{511A358F-3ECC-45F1-99B9-521251C0472E}']
    procedure encode(toEncode: TJavaArray<Integer>; ecBytes: Integer); cdecl;
  end;

  TJReedSolomonEncoder = class(TJavaGenericImport<JReedSolomonEncoderClass, JReedSolomonEncoder>)
  end;

  JReedSolomonExceptionClass = interface(JExceptionClass)
    ['{2A1101DD-2D53-4BF7-A623-719E19B55399}']
    function init(&message: JString): JReedSolomonException; cdecl;
  end;

  [JavaSignature('com/google/zxing/common/reedsolomon/ReedSolomonException')]
  JReedSolomonException = interface(JException)
    ['{0A6DEB47-87AB-4068-B916-8D3C1B64C30F}']
  end;

  TJReedSolomonException = class(TJavaGenericImport<JReedSolomonExceptionClass, JReedSolomonException>)
  end;

  JResultClass = interface(JObjectClass)
    ['{35E008A9-7906-47B9-BBC7-86CE6CBF8B63}']
    function init(text: JString; rawBytes: TJavaArray<Byte>; resultPoints: TJavaObjectArray<JResultPoint>; format: JBarcodeFormat): JResult; cdecl; overload;
    function init(text: JString; rawBytes: TJavaArray<Byte>; resultPoints: TJavaObjectArray<JResultPoint>; format: JBarcodeFormat; timestamp: Int64): JResult; cdecl; overload;
    function init(text: JString; rawBytes: TJavaArray<Byte>; numBits: Integer; resultPoints: TJavaObjectArray<JResultPoint>; format: JBarcodeFormat; timestamp: Int64): JResult; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/Result')]
  JResult = interface(JObject)
    ['{E80E3C8D-BF88-43C6-BB88-B39A6707EB04}']
    procedure addResultPoints(newPoints: TJavaObjectArray<JResultPoint>); cdecl;
    function getBarcodeFormat: JBarcodeFormat; cdecl;
    function getNumBits: Integer; cdecl;
    function getRawBytes: TJavaArray<Byte>; cdecl;
    function getResultMetadata: JMap; cdecl;
    function getResultPoints: TJavaObjectArray<JResultPoint>; cdecl;
    function getText: JString; cdecl;
    function getTimestamp: Int64; cdecl;
    procedure putAllMetadata(metadata: JMap); cdecl;
    procedure putMetadata(&type: JResultMetadataType; value: JObject); cdecl;
    function toString: JString; cdecl;
  end;

  TJResult = class(TJavaGenericImport<JResultClass, JResult>)
  end;

  JResultMetadataTypeClass = interface(JEnumClass)
    ['{CA205D67-9CB9-48C9-85DF-9EBE98B7E1E5}']
    function _GetBYTE_SEGMENTS: JResultMetadataType;
    procedure _SetBYTE_SEGMENTS(Value: JResultMetadataType);
    function _GetERROR_CORRECTION_LEVEL: JResultMetadataType;
    procedure _SetERROR_CORRECTION_LEVEL(Value: JResultMetadataType);
    function _GetISSUE_NUMBER: JResultMetadataType;
    procedure _SetISSUE_NUMBER(Value: JResultMetadataType);
    function _GetORIENTATION: JResultMetadataType;
    procedure _SetORIENTATION(Value: JResultMetadataType);
    function _GetOTHER: JResultMetadataType;
    procedure _SetOTHER(Value: JResultMetadataType);
    function _GetPDF417_EXTRA_METADATA: JResultMetadataType;
    procedure _SetPDF417_EXTRA_METADATA(Value: JResultMetadataType);
    function _GetPOSSIBLE_COUNTRY: JResultMetadataType;
    procedure _SetPOSSIBLE_COUNTRY(Value: JResultMetadataType);
    function _GetSTRUCTURED_APPEND_PARITY: JResultMetadataType;
    procedure _SetSTRUCTURED_APPEND_PARITY(Value: JResultMetadataType);
    function _GetSTRUCTURED_APPEND_SEQUENCE: JResultMetadataType;
    procedure _SetSTRUCTURED_APPEND_SEQUENCE(Value: JResultMetadataType);
    function _GetSUGGESTED_PRICE: JResultMetadataType;
    procedure _SetSUGGESTED_PRICE(Value: JResultMetadataType);
    function _GetSYMBOLOGY_IDENTIFIER: JResultMetadataType;
    procedure _SetSYMBOLOGY_IDENTIFIER(Value: JResultMetadataType);
    function _GetUPC_EAN_EXTENSION: JResultMetadataType;
    procedure _SetUPC_EAN_EXTENSION(Value: JResultMetadataType);
    function valueOf(name: JString): JResultMetadataType; cdecl;
    function values: TJavaObjectArray<JResultMetadataType>; cdecl;
    property BYTE_SEGMENTS: JResultMetadataType read _GetBYTE_SEGMENTS write _SetBYTE_SEGMENTS;
    property ERROR_CORRECTION_LEVEL: JResultMetadataType read _GetERROR_CORRECTION_LEVEL write _SetERROR_CORRECTION_LEVEL;
    property ISSUE_NUMBER: JResultMetadataType read _GetISSUE_NUMBER write _SetISSUE_NUMBER;
    property ORIENTATION: JResultMetadataType read _GetORIENTATION write _SetORIENTATION;
    property OTHER: JResultMetadataType read _GetOTHER write _SetOTHER;
    property PDF417_EXTRA_METADATA: JResultMetadataType read _GetPDF417_EXTRA_METADATA write _SetPDF417_EXTRA_METADATA;
    property POSSIBLE_COUNTRY: JResultMetadataType read _GetPOSSIBLE_COUNTRY write _SetPOSSIBLE_COUNTRY;
    property STRUCTURED_APPEND_PARITY: JResultMetadataType read _GetSTRUCTURED_APPEND_PARITY write _SetSTRUCTURED_APPEND_PARITY;
    property STRUCTURED_APPEND_SEQUENCE: JResultMetadataType read _GetSTRUCTURED_APPEND_SEQUENCE write _SetSTRUCTURED_APPEND_SEQUENCE;
    property SUGGESTED_PRICE: JResultMetadataType read _GetSUGGESTED_PRICE write _SetSUGGESTED_PRICE;
    property SYMBOLOGY_IDENTIFIER: JResultMetadataType read _GetSYMBOLOGY_IDENTIFIER write _SetSYMBOLOGY_IDENTIFIER;
    property UPC_EAN_EXTENSION: JResultMetadataType read _GetUPC_EAN_EXTENSION write _SetUPC_EAN_EXTENSION;
  end;

  [JavaSignature('com/google/zxing/ResultMetadataType')]
  JResultMetadataType = interface(JEnum)
    ['{60A0AD45-A44D-43C9-9DED-0E678B7BD85A}']
  end;

  TJResultMetadataType = class(TJavaGenericImport<JResultMetadataTypeClass, JResultMetadataType>)
  end;

  JResultPointCallbackClass = interface(IJavaClass)
    ['{D5DCA3D1-AC9C-4C35-BD04-566B5F1762C7}']
  end;

  [JavaSignature('com/google/zxing/ResultPointCallback')]
  JResultPointCallback = interface(IJavaInstance)
    ['{354C990F-5B6E-4478-BB7B-A34B3D407AC0}']
    procedure foundPossibleResultPoint(param0: JResultPoint); cdecl;
  end;

  TJResultPointCallback = class(TJavaGenericImport<JResultPointCallbackClass, JResultPointCallback>)
  end;

  JRGBLuminanceSourceClass = interface(JLuminanceSourceClass)
    ['{C5757C58-3141-45D0-AD14-AE34478FAD0A}']
    function init(width: Integer; height: Integer; pixels: TJavaArray<Integer>): JRGBLuminanceSource; cdecl;
  end;

  [JavaSignature('com/google/zxing/RGBLuminanceSource')]
  JRGBLuminanceSource = interface(JLuminanceSource)
    ['{15DDB681-F180-4F44-A362-5647A5CF9E26}']
    function crop(left: Integer; top: Integer; width: Integer; height: Integer): JLuminanceSource; cdecl;
    function getMatrix: TJavaArray<Byte>; cdecl;
    function getRow(y: Integer; row: TJavaArray<Byte>): TJavaArray<Byte>; cdecl;
    function isCropSupported: Boolean; cdecl;
  end;

  TJRGBLuminanceSource = class(TJavaGenericImport<JRGBLuminanceSourceClass, JRGBLuminanceSource>)
  end;

  JRSS14ReaderClass = interface(JAbstractRSSReaderClass)
    ['{9BC97FE7-9111-44D2-A84D-1103185A1B9F}']
    function init: JRSS14Reader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/rss/RSS14Reader')]
  JRSS14Reader = interface(JAbstractRSSReader)
    ['{B18B3FD0-56FE-4EB9-A40B-B2DC750AABE7}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
    procedure reset; cdecl;
  end;

  TJRSS14Reader = class(TJavaGenericImport<JRSS14ReaderClass, JRSS14Reader>)
  end;

  JRSSExpandedReaderClass = interface(JAbstractRSSReaderClass)
    ['{369B1528-C9CB-47EA-819E-6E06B325C5C0}']
    function init: JRSSExpandedReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/rss/expanded/RSSExpandedReader')]
  JRSSExpandedReader = interface(JAbstractRSSReader)
    ['{3BD8C3D5-8BB7-44F5-8DE8-C2F9DD22F3D3}']
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl;
    procedure reset; cdecl;
  end;

  TJRSSExpandedReader = class(TJavaGenericImport<JRSSExpandedReaderClass, JRSSExpandedReader>)
  end;

  JRSSUtilsClass = interface(JObjectClass)
    ['{CF5F0ABF-1331-4B26-835B-05F55A85E831}']
    function getRSSvalue(widths: TJavaArray<Integer>; maxWidth: Integer; noNarrow: Boolean): Integer; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/rss/RSSUtils')]
  JRSSUtils = interface(JObject)
    ['{B6006B95-1F0B-4CC7-B46C-72E87C82071B}']
  end;

  TJRSSUtils = class(TJavaGenericImport<JRSSUtilsClass, JRSSUtils>)
  end;

  JSimpleTokenClass = interface(JTokenClass)
    ['{1023BE0E-EB67-4F44-8D68-59A9AD3AF99B}']
  end;

  [JavaSignature('com/google/zxing/aztec/encoder/SimpleToken')]
  JSimpleToken = interface(JToken)
    ['{3EE08309-579D-4CC7-A668-EC33369D9D48}']
    function toString: JString; cdecl;
  end;

  TJSimpleToken = class(TJavaGenericImport<JSimpleTokenClass, JSimpleToken>)
  end;

  JSMSMMSResultParserClass = interface(JResultParserClass)
    ['{BEA9D757-4CAF-45F9-8E21-F185E5D5E3FE}']
    function init: JSMSMMSResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/SMSMMSResultParser')]
  JSMSMMSResultParser = interface(JResultParser)
    ['{D987CD05-9DA7-45BB-9352-B6ECE4A196BF}']
    function parse(result: JResult): JSMSParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJSMSMMSResultParser = class(TJavaGenericImport<JSMSMMSResultParserClass, JSMSMMSResultParser>)
  end;

  JSMSParsedResultClass = interface(JParsedResultClass)
    ['{3FC8901B-50C2-4D8C-B6F0-C24B2AA9F667}']
    function init(number: JString; via: JString; subject: JString; body: JString): JSMSParsedResult; cdecl; overload;
    function init(numbers: TJavaObjectArray<JString>; vias: TJavaObjectArray<JString>; subject: JString; body: JString): JSMSParsedResult; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/client/result/SMSParsedResult')]
  JSMSParsedResult = interface(JParsedResult)
    ['{C39FEE17-2095-4675-A4E0-1A79FA94EAF4}']
    function getBody: JString; cdecl;
    function getDisplayResult: JString; cdecl;
    function getNumbers: TJavaObjectArray<JString>; cdecl;
    function getSMSURI: JString; cdecl;
    function getSubject: JString; cdecl;
    function getVias: TJavaObjectArray<JString>; cdecl;
  end;

  TJSMSParsedResult = class(TJavaGenericImport<JSMSParsedResultClass, JSMSParsedResult>)
  end;

  JSMSTOMMSTOResultParserClass = interface(JResultParserClass)
    ['{24E06178-1DB9-4CD3-B769-920BBC31FF2D}']
    function init: JSMSTOMMSTOResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/SMSTOMMSTOResultParser')]
  JSMSTOMMSTOResultParser = interface(JResultParser)
    ['{AB432337-FDBB-4C50-AE93-300C72449DB4}']
    function parse(result: JResult): JSMSParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJSMSTOMMSTOResultParser = class(TJavaGenericImport<JSMSTOMMSTOResultParserClass, JSMSTOMMSTOResultParser>)
  end;

  JSMTPResultParserClass = interface(JResultParserClass)
    ['{B5419BFA-F30F-404A-BB0D-8820C56428DF}']
    function init: JSMTPResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/SMTPResultParser')]
  JSMTPResultParser = interface(JResultParser)
    ['{140BB4DC-C867-423B-9DD6-3EDC565F5B31}']
    function parse(result: JResult): JEmailAddressParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJSMTPResultParser = class(TJavaGenericImport<JSMTPResultParserClass, JSMTPResultParser>)
  end;

  JStateClass = interface(JObjectClass)
    ['{B963A28D-9A8B-4EB0-921A-6A61D7B0A1A0}']
  end;

  [JavaSignature('com/google/zxing/aztec/encoder/State')]
  JState = interface(JObject)
    ['{F067DC92-A0D9-4BFB-A4BB-999450FB7849}']
    function toString: JString; cdecl;
  end;

  TJState = class(TJavaGenericImport<JStateClass, JState>)
  end;

  JStringUtilsClass = interface(JObjectClass)
    ['{74E957D5-58FF-4B1A-B359-7CAEFEB2CE4C}']
    function _GetGB2312: JString;
    function _GetGB2312_CHARSET: JObject {java/nio/charset/Charset};
    procedure _SetGB2312_CHARSET(Value: JObject {java/nio/charset/Charset});
    function _GetSHIFT_JIS: JString;
    function _GetSHIFT_JIS_CHARSET: JObject {java/nio/charset/Charset};
    procedure _SetSHIFT_JIS_CHARSET(Value: JObject {java/nio/charset/Charset});
    function guessCharset(bytes: TJavaArray<Byte>; hints: JMap): JObject {java/nio/charset/Charset}; cdecl;
    function guessEncoding(bytes: TJavaArray<Byte>; hints: JMap): JString; cdecl;
    property GB2312: JString read _GetGB2312;
    property GB2312_CHARSET: JObject {java/nio/charset/Charset} read _GetGB2312_CHARSET write _SetGB2312_CHARSET;
    property SHIFT_JIS: JString read _GetSHIFT_JIS;
    property SHIFT_JIS_CHARSET: JObject {java/nio/charset/Charset} read _GetSHIFT_JIS_CHARSET write _SetSHIFT_JIS_CHARSET;
  end;

  [JavaSignature('com/google/zxing/common/StringUtils')]
  JStringUtils = interface(JObject)
    ['{9CEA106D-9F3F-4BD1-B6B7-8983E1611752}']
  end;

  TJStringUtils = class(TJavaGenericImport<JStringUtilsClass, JStringUtils>)
  end;

  JSymbolShapeHintClass = interface(JEnumClass)
    ['{90DA942B-9648-4C71-9B6C-424B51982582}']
    function _GetFORCE_NONE: JSymbolShapeHint;
    procedure _SetFORCE_NONE(Value: JSymbolShapeHint);
    function _GetFORCE_RECTANGLE: JSymbolShapeHint;
    procedure _SetFORCE_RECTANGLE(Value: JSymbolShapeHint);
    function _GetFORCE_SQUARE: JSymbolShapeHint;
    procedure _SetFORCE_SQUARE(Value: JSymbolShapeHint);
    function valueOf(name: JString): JSymbolShapeHint; cdecl;
    function values: TJavaObjectArray<JSymbolShapeHint>; cdecl;
    property FORCE_NONE: JSymbolShapeHint read _GetFORCE_NONE write _SetFORCE_NONE;
    property FORCE_RECTANGLE: JSymbolShapeHint read _GetFORCE_RECTANGLE write _SetFORCE_RECTANGLE;
    property FORCE_SQUARE: JSymbolShapeHint read _GetFORCE_SQUARE write _SetFORCE_SQUARE;
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/SymbolShapeHint')]
  JSymbolShapeHint = interface(JEnum)
    ['{4078DA21-6EEC-4C1E-9E2F-7077F7A00577}']
  end;

  TJSymbolShapeHint = class(TJavaGenericImport<JSymbolShapeHintClass, JSymbolShapeHint>)
  end;

  JTelParsedResultClass = interface(JParsedResultClass)
    ['{3C082BA4-EDEA-42FD-B526-A69958EE2E8D}']
    function init(number: JString; telURI: JString; title: JString): JTelParsedResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/TelParsedResult')]
  JTelParsedResult = interface(JParsedResult)
    ['{06E59487-9304-4A8F-869A-B537C898E7A6}']
    function getDisplayResult: JString; cdecl;
    function getNumber: JString; cdecl;
    function getTelURI: JString; cdecl;
    function getTitle: JString; cdecl;
  end;

  TJTelParsedResult = class(TJavaGenericImport<JTelParsedResultClass, JTelParsedResult>)
  end;

  JTelResultParserClass = interface(JResultParserClass)
    ['{53070E0D-88C6-40B7-AEF9-6F0B115EC8A1}']
    function init: JTelResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/TelResultParser')]
  JTelResultParser = interface(JResultParser)
    ['{4A46A21B-9C92-42FE-ADE0-89F7BCCCE63A}']
    function parse(result: JResult): JTelParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJTelResultParser = class(TJavaGenericImport<JTelResultParserClass, JTelResultParser>)
  end;

  JTextEncoderClass = interface(JC40EncoderClass)
    ['{7837B455-AD98-426D-BE9B-A0AA8458DB69}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/TextEncoder')]
  JTextEncoder = interface(JC40Encoder)
    ['{9EC54290-23DD-41AF-9C99-E43083974E8A}']
    function getEncodingMode: Integer; cdecl;
  end;

  TJTextEncoder = class(TJavaGenericImport<JTextEncoderClass, JTextEncoder>)
  end;

  JTextParsedResultClass = interface(JParsedResultClass)
    ['{25B684C8-8E1C-4E0E-8E79-7C261046D917}']
    function init(text: JString; language: JString): JTextParsedResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/TextParsedResult')]
  JTextParsedResult = interface(JParsedResult)
    ['{D0B42997-AF21-458C-9E86-FAE3307CB6D0}']
    function getDisplayResult: JString; cdecl;
    function getLanguage: JString; cdecl;
    function getText: JString; cdecl;
  end;

  TJTextParsedResult = class(TJavaGenericImport<JTextParsedResultClass, JTextParsedResult>)
  end;

  JUPCAReaderClass = interface(JUPCEANReaderClass)
    ['{DDEACE15-73BD-4B94-BCEB-7B898931C940}']
    function init: JUPCAReader; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/UPCAReader')]
  JUPCAReader = interface(JUPCEANReader)
    ['{C7244E5A-9B83-4575-9E81-ED65E800D56B}']
    function decode(image: JBinaryBitmap): JResult; cdecl; overload;
    function decode(image: JBinaryBitmap; hints: JMap): JResult; cdecl; overload;
    function decodeRow(rowNumber: Integer; row: JBitArray; startGuardRange: TJavaArray<Integer>; hints: JMap): JResult; cdecl; overload;
    function decodeRow(rowNumber: Integer; row: JBitArray; hints: JMap): JResult; cdecl; overload;
  end;

  TJUPCAReader = class(TJavaGenericImport<JUPCAReaderClass, JUPCAReader>)
  end;

  JUPCAWriterClass = interface(JObjectClass)
    ['{A9E68150-10AB-465B-9FF5-5ACE0972C40B}']
    function init: JUPCAWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/UPCAWriter')]
  JUPCAWriter = interface(JObject)
    ['{255B1517-A0E4-45E9-8D3F-33037AFA29FE}']
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer): JBitMatrix; cdecl; overload;
    function encode(contents: JString; format: JBarcodeFormat; width: Integer; height: Integer; hints: JMap): JBitMatrix; cdecl; overload;
  end;

  TJUPCAWriter = class(TJavaGenericImport<JUPCAWriterClass, JUPCAWriter>)
  end;

  JUPCEANExtension2SupportClass = interface(JObjectClass)
    ['{509FABB0-D341-407E-BF34-8FB3B0404CC7}']
  end;

  [JavaSignature('com/google/zxing/oned/UPCEANExtension2Support')]
  JUPCEANExtension2Support = interface(JObject)
    ['{DAFB4DAD-9F15-4D37-8DBD-1D83A2E3CE52}']
  end;

  TJUPCEANExtension2Support = class(TJavaGenericImport<JUPCEANExtension2SupportClass, JUPCEANExtension2Support>)
  end;

  JUPCEANExtension5SupportClass = interface(JObjectClass)
    ['{D1F34F15-D853-450D-8950-4F563A4BE547}']
  end;

  [JavaSignature('com/google/zxing/oned/UPCEANExtension5Support')]
  JUPCEANExtension5Support = interface(JObject)
    ['{62A7D94C-519B-4544-AB76-68FD5B1B3F41}']
  end;

  TJUPCEANExtension5Support = class(TJavaGenericImport<JUPCEANExtension5SupportClass, JUPCEANExtension5Support>)
  end;

  JUPCEANExtensionSupportClass = interface(JObjectClass)
    ['{2874BBF8-C140-49D5-A397-4BD882F7317E}']
  end;

  [JavaSignature('com/google/zxing/oned/UPCEANExtensionSupport')]
  JUPCEANExtensionSupport = interface(JObject)
    ['{3C51B7F8-9827-495A-84FE-EABEFD34CEB9}']
  end;

  TJUPCEANExtensionSupport = class(TJavaGenericImport<JUPCEANExtensionSupportClass, JUPCEANExtensionSupport>)
  end;

  JUPCEReaderClass = interface(JUPCEANReaderClass)
    ['{CACDBAE9-3D12-4832-B3B7-C9B8B671F9B9}']
    function init: JUPCEReader; cdecl;
    function convertUPCEtoUPCA(upce: JString): JString; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/UPCEReader')]
  JUPCEReader = interface(JUPCEANReader)
    ['{3FBEC49E-E303-45F2-A4B5-E6A1149A6F91}']
  end;

  TJUPCEReader = class(TJavaGenericImport<JUPCEReaderClass, JUPCEReader>)
  end;

  JUPCEWriterClass = interface(JUPCEANWriterClass)
    ['{F31ECCBF-F233-4F9C-82FA-2E27C56BBBEB}']
    function init: JUPCEWriter; cdecl;
  end;

  [JavaSignature('com/google/zxing/oned/UPCEWriter')]
  JUPCEWriter = interface(JUPCEANWriter)
    ['{94D16871-7007-46C7-8D37-D84C6FB1F163}']
    function encode(contents: JString): TJavaArray<Boolean>; cdecl;
  end;

  TJUPCEWriter = class(TJavaGenericImport<JUPCEWriterClass, JUPCEWriter>)
  end;

  JURIParsedResultClass = interface(JParsedResultClass)
    ['{A26AA580-CCC3-4D98-9D76-3CB8156D4C91}']
    function init(uri: JString; title: JString): JURIParsedResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/URIParsedResult')]
  JURIParsedResult = interface(JParsedResult)
    ['{764943D0-C0C3-4F75-A39D-344BA38761F2}']
    function getDisplayResult: JString; cdecl;
    function getTitle: JString; cdecl;
    function getURI: JString; cdecl;
    function isPossiblyMaliciousURI: Boolean; cdecl; deprecated;
  end;

  TJURIParsedResult = class(TJavaGenericImport<JURIParsedResultClass, JURIParsedResult>)
  end;

  JURIResultParserClass = interface(JResultParserClass)
    ['{B661F563-7F1B-4A43-AE71-CE4DCE190C88}']
    function init: JURIResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/URIResultParser')]
  JURIResultParser = interface(JResultParser)
    ['{B19300CC-F701-4C0C-89D3-8F8B1DEABB39}']
    function parse(result: JResult): JURIParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJURIResultParser = class(TJavaGenericImport<JURIResultParserClass, JURIResultParser>)
  end;

  JURLTOResultParserClass = interface(JResultParserClass)
    ['{356A651B-DE52-412A-A405-4B697EEA5A72}']
    function init: JURLTOResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/URLTOResultParser')]
  JURLTOResultParser = interface(JResultParser)
    ['{662158E2-D05D-4487-BEE9-3DE0CF154A2E}']
    function parse(result: JResult): JURIParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJURLTOResultParser = class(TJavaGenericImport<JURLTOResultParserClass, JURLTOResultParser>)
  end;

  JVCardResultParserClass = interface(JResultParserClass)
    ['{5D15481B-B4E0-4046-B3C8-F67B8D22B267}']
    function init: JVCardResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/VCardResultParser')]
  JVCardResultParser = interface(JResultParser)
    ['{5FDEF58C-F348-4BF9-9EF8-0B04812C0FAC}']
    function parse(result: JResult): JAddressBookParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJVCardResultParser = class(TJavaGenericImport<JVCardResultParserClass, JVCardResultParser>)
  end;

  JVersionClass = interface(JObjectClass)
    ['{12339AF6-2FE4-4734-9E05-8A9900934B3D}']
    function getProvisionalVersionForDimension(dimension: Integer): JVersion; cdecl;
    function getVersionForNumber(versionNumber: Integer): JVersion; cdecl;
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/Version')]
  JVersion = interface(JObject)
    ['{7A3D3288-6685-4939-BBCB-96B8C72C0884}']
    function getAlignmentPatternCenters: TJavaArray<Integer>; cdecl;
    function getDimensionForVersion: Integer; cdecl;
    function getECBlocksForLevel(ecLevel: JErrorCorrectionLevel): JVersion_ECBlocks; cdecl;
    function getTotalCodewords: Integer; cdecl;
    function getVersionNumber: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJVersion = class(TJavaGenericImport<JVersionClass, JVersion>)
  end;

  JVersion1Class = interface(JObjectClass)
    ['{D9935634-994B-46C0-A05C-C865543388AC}']
    function getVersionForDimensions(numRows: Integer; numColumns: Integer): JVersion1; cdecl;
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/Version')]
  JVersion1 = interface(JObject)
    ['{0D882DF0-E319-4ADF-B716-1C9C71C97F83}']
    function getDataRegionSizeColumns: Integer; cdecl;
    function getDataRegionSizeRows: Integer; cdecl;
    function getSymbolSizeColumns: Integer; cdecl;
    function getSymbolSizeRows: Integer; cdecl;
    function getTotalCodewords: Integer; cdecl;
    function getVersionNumber: Integer; cdecl;
    function toString: JString; cdecl;
  end;

  TJVersion1 = class(TJavaGenericImport<JVersion1Class, JVersion1>)
  end;

  JVersion_1Class = interface(JObjectClass)
    ['{133C25D2-684A-4BFD-897B-315C30375918}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/Version$1')]
  JVersion_1 = interface(JObject)
    ['{A7459A4B-8660-4D49-92FF-8A868FAF86DD}']
  end;

  TJVersion_1 = class(TJavaGenericImport<JVersion_1Class, JVersion_1>)
  end;

  JVersion_ECBClass = interface(JObjectClass)
    ['{B3CF1EAB-286A-418C-91CB-A41F85296AB9}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/Version$ECB')]
  JVersion_ECB = interface(JObject)
    ['{39EC72CC-4739-4286-A883-B9BE782B205F}']
    function getCount: Integer; cdecl;
    function getDataCodewords: Integer; cdecl;
  end;

  TJVersion_ECB = class(TJavaGenericImport<JVersion_ECBClass, JVersion_ECB>)
  end;

  JVersion_ECB1Class = interface(JObjectClass)
    ['{382B2247-83A3-418D-B853-BF0CF43E7374}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/Version$ECB')]
  JVersion_ECB1 = interface(JObject)
    ['{7C548433-E305-4ED3-93DF-083F7E796E2D}']
  end;

  TJVersion_ECB1 = class(TJavaGenericImport<JVersion_ECB1Class, JVersion_ECB1>)
  end;

  JVersion_ECBlocksClass = interface(JObjectClass)
    ['{A7C04D25-6148-4EE5-9195-642B1FE226B8}']
  end;

  [JavaSignature('com/google/zxing/qrcode/decoder/Version$ECBlocks')]
  JVersion_ECBlocks = interface(JObject)
    ['{69D2036C-BA8D-4EEE-965F-8B313B39AC2F}']
    function getECBlocks: TJavaObjectArray<JVersion_ECB>; cdecl;
    function getECCodewordsPerBlock: Integer; cdecl;
    function getNumBlocks: Integer; cdecl;
    function getTotalECCodewords: Integer; cdecl;
  end;

  TJVersion_ECBlocks = class(TJavaGenericImport<JVersion_ECBlocksClass, JVersion_ECBlocks>)
  end;

  JVersion_ECBlocks1Class = interface(JObjectClass)
    ['{DDB81178-212F-412E-A804-3E4DF43A168B}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/decoder/Version$ECBlocks')]
  JVersion_ECBlocks1 = interface(JObject)
    ['{E343A57A-249C-4F5A-A0D8-C1BB990543BA}']
  end;

  TJVersion_ECBlocks1 = class(TJavaGenericImport<JVersion_ECBlocks1Class, JVersion_ECBlocks1>)
  end;

  JVEventResultParserClass = interface(JResultParserClass)
    ['{3733BC93-6B74-45D0-B8C7-1BA782A1DA49}']
    function init: JVEventResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/VEventResultParser')]
  JVEventResultParser = interface(JResultParser)
    ['{6E2EC5B6-1F65-440E-9D51-9A86E728324F}']
    function parse(result: JResult): JCalendarParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJVEventResultParser = class(TJavaGenericImport<JVEventResultParserClass, JVEventResultParser>)
  end;

  JVINParsedResultClass = interface(JParsedResultClass)
    ['{2F5AAFA5-7D74-4E6C-A287-C976990C1CD1}']
    function init(vin: JString; worldManufacturerID: JString; vehicleDescriptorSection: JString; vehicleIdentifierSection: JString; countryCode: JString; vehicleAttributes: JString; modelYear: Integer; plantCode: Char; sequentialNumber: JString): JVINParsedResult; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/VINParsedResult')]
  JVINParsedResult = interface(JParsedResult)
    ['{85F70619-0EE1-4212-B5C5-16239E2C7799}']
    function getCountryCode: JString; cdecl;
    function getDisplayResult: JString; cdecl;
    function getModelYear: Integer; cdecl;
    function getPlantCode: Char; cdecl;
    function getSequentialNumber: JString; cdecl;
    function getVehicleAttributes: JString; cdecl;
    function getVehicleDescriptorSection: JString; cdecl;
    function getVehicleIdentifierSection: JString; cdecl;
    function getVIN: JString; cdecl;
    function getWorldManufacturerID: JString; cdecl;
  end;

  TJVINParsedResult = class(TJavaGenericImport<JVINParsedResultClass, JVINParsedResult>)
  end;

  JVINResultParserClass = interface(JResultParserClass)
    ['{16B73B5C-0875-47F9-8621-C8F3480A9297}']
    function init: JVINResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/VINResultParser')]
  JVINResultParser = interface(JResultParser)
    ['{3B0C6823-B557-405C-A62A-7C4D5BC51299}']
    function parse(result: JResult): JVINParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJVINResultParser = class(TJavaGenericImport<JVINResultParserClass, JVINResultParser>)
  end;

  JWhiteRectangleDetectorClass = interface(JObjectClass)
    ['{2D0FF82E-1250-40E5-8614-D29FC882F427}']
    function init(image: JBitMatrix): JWhiteRectangleDetector; cdecl; overload;
    function init(image: JBitMatrix; initSize: Integer; x: Integer; y: Integer): JWhiteRectangleDetector; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/common/detector/WhiteRectangleDetector')]
  JWhiteRectangleDetector = interface(JObject)
    ['{5C4DA652-9844-45C1-A244-BA4C58D7E63F}']
    function detect: TJavaObjectArray<JResultPoint>; cdecl;
  end;

  TJWhiteRectangleDetector = class(TJavaGenericImport<JWhiteRectangleDetectorClass, JWhiteRectangleDetector>)
  end;

  JWifiParsedResultClass = interface(JParsedResultClass)
    ['{DCA848F1-A603-4532-B046-1BD9AC52AA8A}']
    function init(networkEncryption: JString; ssid: JString; password: JString): JWifiParsedResult; cdecl; overload;
    function init(networkEncryption: JString; ssid: JString; password: JString; hidden: Boolean): JWifiParsedResult; cdecl; overload;
    function init(networkEncryption: JString; ssid: JString; password: JString; hidden: Boolean; identity: JString; anonymousIdentity: JString; eapMethod: JString; phase2Method: JString): JWifiParsedResult; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/client/result/WifiParsedResult')]
  JWifiParsedResult = interface(JParsedResult)
    ['{12D191AF-188A-4A85-8592-2011A92331AF}']
    function getAnonymousIdentity: JString; cdecl;
    function getDisplayResult: JString; cdecl;
    function getEapMethod: JString; cdecl;
    function getIdentity: JString; cdecl;
    function getNetworkEncryption: JString; cdecl;
    function getPassword: JString; cdecl;
    function getPhase2Method: JString; cdecl;
    function getSsid: JString; cdecl;
    function isHidden: Boolean; cdecl;
  end;

  TJWifiParsedResult = class(TJavaGenericImport<JWifiParsedResultClass, JWifiParsedResult>)
  end;

  JWifiResultParserClass = interface(JResultParserClass)
    ['{72580789-A852-4238-8927-976FE081223C}']
    function init: JWifiResultParser; cdecl;
  end;

  [JavaSignature('com/google/zxing/client/result/WifiResultParser')]
  JWifiResultParser = interface(JResultParser)
    ['{A10FD900-37D3-4741-85EA-AFD20C549D08}']
    function parse(result: JResult): JWifiParsedResult; cdecl; overload;
    // function parse(param0: JResult): JParsedResult; cdecl; overload;
  end;

  TJWifiResultParser = class(TJavaGenericImport<JWifiResultParserClass, JWifiResultParser>)
  end;

  JWriter1Class = interface(IJavaClass)
    ['{E80A4916-F4B0-4C28-A071-1393E61FFB54}']
  end;

  [JavaSignature('com/google/zxing/Writer')]
  JWriter1 = interface(IJavaInstance)
    ['{6FEA5600-CD2C-4F58-B2AC-1604B211C9FB}']
    function encode(param0: JString; param1: JBarcodeFormat; param2: Integer; param3: Integer): JBitMatrix; cdecl; overload;
    function encode(param0: JString; param1: JBarcodeFormat; param2: Integer; param3: Integer; param4: JMap): JBitMatrix; cdecl; overload;
  end;

  TJWriter1 = class(TJavaGenericImport<JWriter1Class, JWriter1>)
  end;

  JWriterExceptionClass = interface(JExceptionClass)
    ['{1D3F2DA9-73FB-4953-BC2D-CD42CB82E6ED}']
    function init: JWriterException; cdecl; overload;
    function init(&message: JString): JWriterException; cdecl; overload;
    function init(cause: JThrowable): JWriterException; cdecl; overload;
  end;

  [JavaSignature('com/google/zxing/WriterException')]
  JWriterException = interface(JException)
    ['{C5C2043E-FA9C-4FA6-A97E-A0EC54B64CBE}']
  end;

  TJWriterException = class(TJavaGenericImport<JWriterExceptionClass, JWriterException>)
  end;

  JX12EncoderClass = interface(JC40EncoderClass)
    ['{D50BF77F-504C-4F56-9146-019FEFEB45A8}']
  end;

  [JavaSignature('com/google/zxing/datamatrix/encoder/X12Encoder')]
  JX12Encoder = interface(JC40Encoder)
    ['{B9D5573F-B7B5-4185-A104-4E1B024767F4}']
    procedure encode(context: JEncoderContext); cdecl;
    function getEncodingMode: Integer; cdecl;
  end;

  TJX12Encoder = class(TJavaGenericImport<JX12EncoderClass, JX12Encoder>)
  end;

const
  TJEncoder_DEFAULT_AZTEC_LAYERS = 0;
  TJEncoder_DEFAULT_EC_PERCENT = 33;

  TJExpandedProductParsedResult_KILOGRAM = 'KG';
  TJExpandedProductParsedResult_POUND = 'LB';

  TJPDF417Common_BARS_IN_MODULE = 8;
  TJPDF417Common_MAX_CODEWORDS_IN_BARCODE = 928;
  TJPDF417Common_MAX_ROWS_IN_BARCODE = 90;
  TJPDF417Common_MIN_ROWS_IN_BARCODE = 3;
  TJPDF417Common_MODULES_IN_CODEWORD = 17;
  TJPDF417Common_MODULES_IN_STOP_PATTERN = 18;
  TJPDF417Common_NUMBER_OF_CODEWORDS = 929;

  TJQRCode_NUM_MASK_PATTERNS = 8;

  TJStringUtils_GB2312 = 'GB2312';
  TJStringUtils_SHIFT_JIS = 'SJIS';

type
  TBarcodeFormat = (Aztec, Codabar, Code128, Code39, Code93,
    DataMatrix, Ean13, Ean8, Itf, Maxicode, Pdf417,
    QrCode, Rss14, RssExpanded, UpcA, UpcE, UpcEanExtension);
  TBarcodeFormats = set of TBarcodeFormat;

  TPdf417Metadata = record
    Addressee: string;
    Checksum: Integer;
    FileId: string;
    FileName: string;
    FileSize: Int64;
    LastSegment: Boolean;
    SegmentCount: Integer;
    SegmentIndex: Integer;
    Sender: string;
    Timestamp: Int64;
  end;

  TDecodeResult = record
    Text: string;
    Format: TBarcodeFormat;
    FormatName: string;
    Points: TArray<TPointF>;
    Timestamp: Int64;
    Bytes: TBytes;
    BitCount: Integer;
    ByteSegments: TArray<TBytes>;
    Country: string;
    CorrectionLevel: string;
    Extension: string;
    Price: string;
    SymbologyIdentifier: string;
    Pdf417Metadata: TPdf417Metadata;
  end;
  TDecodeResults = TArray<TDecodeResult>;

const
  AllBarcodeFormats =
  [
    TBarcodeFormat.Aztec,
    TBarcodeFormat.Codabar,
    TBarcodeFormat.Code128,
    TBarcodeFormat.Code39,
    TBarcodeFormat.Code93,
    TBarcodeFormat.DataMatrix,
    TBarcodeFormat.Ean13,
    TBarcodeFormat.Ean8,
    TBarcodeFormat.Itf,
    TBarcodeFormat.Maxicode,
    TBarcodeFormat.Pdf417,
    TBarcodeFormat.QrCode,
    TBarcodeFormat.Rss14,
    TBarcodeFormat.RssExpanded,
    TBarcodeFormat.UpcA,
    TBarcodeFormat.UpcE,
    TBarcodeFormat.UpcEanExtension
  ];

type
  TBarcodeDecoder = class
  private
    FAssumeGS1: Boolean;
    FCodabarStartEnd: Boolean;
    FCode39CheckDigit: Boolean;
    FFormats: TBarcodeFormats;
    FHints: JMap;
    FInverted: Boolean;
    FMultiple: Boolean;
    FMultipleReader: JGenericMultipleBarcodeReader;
    FPure: Boolean;
    FReader: JMultiFormatReader;
    FTryHarder: Boolean;
    procedure SetHints;
  public
    constructor Create;

    function Decode(Bitmap: TBitmap): TDecodeResults; overload;
    function Decode(Bitmap: TBitmap; Rect: TRect): TDecodeResults; overload;
    function Decode(BitmapWidth, BitmapHeight: Integer; BitmapData: TJavaArray<Integer>): TDecodeResults; overload;

    class function GetBitmapData(Bitmap: TBitmap): TJavaArray<Integer>; overload; static;
    class function GetBitmapData(Bitmap: TBitmap; Rect: TRect): TJavaArray<Integer>; overload; static;

    property AssumeGS1: Boolean read FAssumeGS1 write FAssumeGS1 default False;
    property CodabarStartEnd: Boolean read FCodabarStartEnd write FCodabarStartEnd default False;
    property Code39CheckDigit: Boolean read FCode39CheckDigit write FCode39CheckDigit default False;
    property Formats: TBarcodeFormats read FFormats write FFormats default AllBarcodeFormats;
    property Inverted: Boolean read FInverted write FInverted default False;
    property Multiple: Boolean read FMultiple write FMultiple default True;
    property Pure: Boolean read FPure write FPure default False;
    property TryHarder: Boolean read FTryHarder write FTryHarder default False;
  end;

implementation

uses System.IOUtils, System.UITypes, FMX.Types,
  Androidapi.JNI, Androidapi.JNI.Dalvik, FMX.Helpers.Android,
  Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers
  {$ifdef TRIAL}, FMX.Dialogs {$endif TRIAL};

{$ifdef TRIAL}
var WasTrial: Boolean;

procedure ShowTrial;
begin
  if not WasTrial then
  begin
    ShowMessage(
      'OBR Library for Android 6.4' + #13#10 +
      'Copyright (c) 2015-2022 WINSOFT' + #13#10#13#10 +
      'A trial version of OBR Library for Android library started.' + #13#10#13#10 +
      'Please note that trial version is supposed to be used for evaluation only. ' +
      'If you wish to distribute OBR Library for Android library as part of your application, ' +
      'you must register from website at https://www.winsoft.sk.' + #13#10#13#10 +
      'Thank you for trialing OBR Library for Android.');
    WasTrial := True;
  end;
end;
{$endif TRIAL}

function DecodeBarcodeFormat(BarcodeFormat: JBarcodeFormat): TBarcodeFormat;
var BarcodeFormatOrdinal: Integer;
begin
  BarcodeFormatOrdinal := BarcodeFormat.ordinal;
  if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.AZTEC.ordinal then
    Result := TBarcodeFormat.Aztec
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.CODABAR.ordinal then
    Result := TBarcodeFormat.Codabar
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.CODE_128.ordinal then
    Result := TBarcodeFormat.Code128
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.CODE_39.ordinal then
    Result := TBarcodeFormat.Code39
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.CODE_93.ordinal then
    Result := TBarcodeFormat.Code93
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.DATA_MATRIX.ordinal then
    Result := TBarcodeFormat.DataMatrix
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.EAN_13.ordinal then
    Result := TBarcodeFormat.Ean13
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.EAN_8.ordinal then
    Result := TBarcodeFormat.Ean8
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.ITF.ordinal then
    Result := TBarcodeFormat.Itf
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.MAXICODE.ordinal then
    Result := TBarcodeFormat.Maxicode
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.PDF_417.ordinal then
    Result := TBarcodeFormat.Pdf417
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.QR_CODE.ordinal then
    Result := TBarcodeFormat.QrCode
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.RSS_14.ordinal then
    Result := TBarcodeFormat.Rss14
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.RSS_EXPANDED.ordinal then
    Result := TBarcodeFormat.RssExpanded
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.UPC_A.ordinal then
    Result := TBarcodeFormat.UpcA
  else if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.UPC_E.ordinal then
    Result := TBarcodeFormat.UpcE
  else // if BarcodeFormatOrdinal = TJBarcodeFormat.JavaClass.UPC_EAN_EXTENSION.ordinal then
    Result := TBarcodeFormat.UpcEanExtension
end;

// TBarcodeDecoder

constructor TBarcodeDecoder.Create;
begin
  inherited;
{$ifdef TRIAL}
  ShowTrial;
{$endif TRIAL}

  FFormats := AllBarcodeFormats;
  FMultiple := True;
end;

class function TBarcodeDecoder.GetBitmapData(Bitmap: TBitmap): TJavaArray<Integer>;
begin
  Result := GetBitmapData(Bitmap, TRect.Create(0, 0, Bitmap.Width, Bitmap.Height));
end;

class function TBarcodeDecoder.GetBitmapData(Bitmap: TBitmap; Rect: TRect): TJavaArray<Integer>;
var
  Data: TBitmapData;
  I, J: Integer;
  Scanline: PByte;
  Output: PAlphaColor;
begin
  Result := nil;

  if (Rect.Left < 0) or (Rect.Top < 0) then
    Exit;
  if (Rect.Right > Bitmap.Width) or (Rect.Bottom > Bitmap.Height) then
    Exit;

  if Bitmap.Map(TMapAccess.Read, Data) then
  try
    Result := TJavaArray<Integer>.Create(Rect.Width * Rect.Height);

    for I := 0 to Rect.Height - 1 do
    begin
      Scanline := PByte(Data.GetScanline(Rect.Top + I)) + 4 * Rect.Left;
      Output := PAlphaColor(PByte(Result.Data) + 4 * I * Rect.Width);

      for J := 0 to Rect.Width - 1 do
      begin
        Output^ := PixelToAlphaColor(Scanline, TPixelFormat.BGRA);
        Inc(Scanline, 4);
        Inc(Output);
      end;
    end;
  finally
    Bitmap.Unmap(Data);
  end;
end;

procedure TBarcodeDecoder.SetHints;
var
  EnumSet: JEnumSet;
  HashMap: JHashMap;
begin
  if FReader = nil then
  begin
{$ifdef TRIAL}
    ShowTrial;
{$endif}
    FReader := TJMultiFormatReader.JavaClass.init;
  end;

  FHints := nil;
  if AssumeGS1 or CodabarStartEnd or Code39CheckDigit or (Formats <> [])
    or Inverted or Pure or TryHarder then
    HashMap := TJHashMap.JavaClass.init
  else
    HashMap := nil;

  if AssumeGS1 then
    HashMap.put(TJDecodeHintType.JavaClass.ASSUME_GS1, nil);

  if CodabarStartEnd then
    HashMap.put(TJDecodeHintType.JavaClass.RETURN_CODABAR_START_END, nil);

  if Code39CheckDigit then
    HashMap.put(TJDecodeHintType.JavaClass.ASSUME_CODE_39_CHECK_DIGIT, nil);

  if Formats <> [] then
  begin
    EnumSet := TJEnumSet.JavaClass.noneOf(TJBarcodeFormat.JavaClass.QR_CODE.getClass);

    if TBarcodeFormat.Aztec in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.AZTEC);
    if TBarcodeFormat.Codabar in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.CODABAR);
    if TBarcodeFormat.Code128 in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.CODE_128);
    if TBarcodeFormat.Code39 in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.CODE_39);
    if TBarcodeFormat.Code93 in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.CODE_93);
    if TBarcodeFormat.DataMatrix in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.DATA_MATRIX);
    if TBarcodeFormat.Ean13 in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.EAN_13);
    if TBarcodeFormat.Ean8 in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.EAN_8);
    if TBarcodeFormat.Itf in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.ITF);
    if TBarcodeFormat.Maxicode in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.MAXICODE);
    if TBarcodeFormat.Pdf417 in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.PDF_417);
    if TBarcodeFormat.QrCode in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.QR_CODE);
    if TBarcodeFormat.Rss14 in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.RSS_14);
    if TBarcodeFormat.RssExpanded in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.RSS_EXPANDED);
    if TBarcodeFormat.UpcA in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.UPC_A);
    if TBarcodeFormat.UpcE in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.UPC_E);
    if TBarcodeFormat.UpcEanExtension in Formats then
      EnumSet.add(TJBarcodeFormat.JavaClass.UPC_EAN_EXTENSION);

    HashMap.put(TJDecodeHintType.JavaClass.POSSIBLE_FORMATS, EnumSet);
  end;

  if Inverted then
    HashMap.put(TJDecodeHintType.JavaClass.ALSO_INVERTED, nil);

  if Pure then
    HashMap.put(TJDecodeHintType.JavaClass.PURE_BARCODE, nil);

  if TryHarder then
    HashMap.put(TJDecodeHintType.JavaClass.TRY_HARDER, nil);

  if HashMap <> nil then
    FHints := TJMap.Wrap((HashMap as ILocalObject).GetObjectID);

  FReader.setHints(FHints);
end;

function TBarcodeDecoder.Decode(Bitmap: TBitmap): TDecodeResults;
begin
  Result := Decode(Bitmap, TRect.Create(0, 0, Bitmap.Width, Bitmap.Height));
end;

function TBarcodeDecoder.Decode(Bitmap: TBitmap; Rect: TRect): TDecodeResults;
var BitmapData: TJavaArray<Integer>;
begin
  BitmapData := GetBitmapData(Bitmap, Rect);
  if BitmapData = nil then
    Result := nil
  else
    try
      Result := Decode(Rect.Width, Rect.Height, BitmapData);
    finally
      BitmapData.Free;
    end;
end;

function DecodeBarcodeResult(BarcodeResult: JResult): TDecodeResult;
var
  ResultPoints: TJavaObjectArray<JResultPoint>;
  ResultPoint: JResultPoint;
  I, J: Integer;
  Metadata: JMap;
  KeyIterator: JIterator;
  MetadataType: JResultMetadataType;
  List: JList;
  Pdf417Metadata: JPDF417ResultMetadata;
begin
  Result.Text := JStringToString(BarcodeResult.getText);
  Result.Format := DecodeBarcodeFormat(BarcodeResult.getBarcodeFormat);
  Result.FormatName := JStringToString(BarcodeResult.getBarcodeFormat.toString);
  Result.Timestamp := BarcodeResult.getTimestamp;
  Result.Bytes := TJavaArrayToTBytes(BarcodeResult.getRawBytes);
  Result.BitCount := BarcodeResult.getNumBits;

  ResultPoints := BarcodeResult.getResultPoints;
  SetLength(Result.Points, ResultPoints.Length);
  for I := 0 to Length(Result.Points) - 1 do
  begin
    ResultPoint := ResultPoints.Items[I];
    if ResultPoint = nil then
      Result.Points[I] := TPointF.Create(-1.0, -1.0)
    else
      Result.Points[I] := TPointF.Create(ResultPoint.getX, ResultPoint.getY);
  end;

  Metadata := BarcodeResult.getResultMetadata;
  KeyIterator := Metadata.keySet.iterator;
  while KeyIterator.hasNext do
  begin
    MetadataType := TJResultMetadataType.Wrap((KeyIterator.next as ILocalObject).GetObjectID);
    if MetadataType.ordinal = TJResultMetadataType.JavaClass.BYTE_SEGMENTS.ordinal then
    begin
      List := TJList.Wrap((Metadata.get(MetadataType) as ILocalObject).GetObjectID);
      SetLength(Result.ByteSegments, List.size);
      for J := 0 to Length(Result.ByteSegments) - 1 do
        Result.ByteSegments[J] := TJavaArrayToTBytes(TJavaArray<Byte>(WrapJNIArray((List.get(J) as ILocalObject).GetObjectID, TypeInfo(TJavaArray<Byte>) {$ifdef D10}, True {$endif D10})));
    end
    else if MetadataType.ordinal = TJResultMetadataType.JavaClass.ERROR_CORRECTION_LEVEL.ordinal then
      Result.CorrectionLevel := JStringToString(Metadata.get(MetadataType).toString)
//  else if MetadataType.ordinal = TJResultMetadataType.JavaClass.ISSUE_NUMBER.ordinal then
//  else if MetadataType.ordinal = TJResultMetadataType.JavaClass.ORIENTATION.ordinal then
//  else if MetadataType.ordinal = TJResultMetadataType.JavaClass.OTHER.ordinal then
    else if MetadataType.ordinal = TJResultMetadataType.JavaClass.PDF417_EXTRA_METADATA.ordinal then
    begin
      Pdf417Metadata := TJPDF417ResultMetadata.Wrap((Metadata.get(MetadataType) as ILocalObject).GetObjectID);
      Result.Pdf417Metadata.Addressee := JStringToString(Pdf417Metadata.getAddressee);
      Result.Pdf417Metadata.Checksum := Pdf417Metadata.getChecksum;
      Result.Pdf417Metadata.FileId := JStringToString(Pdf417Metadata.getFileId);
      Result.Pdf417Metadata.FileName := JStringToString(Pdf417Metadata.getFileName);
      Result.Pdf417Metadata.FileSize := Pdf417Metadata.getFileSize;
      Result.Pdf417Metadata.LastSegment := Pdf417Metadata.isLastSegment;
      Result.Pdf417Metadata.SegmentCount := Pdf417Metadata.getSegmentCount;
      Result.Pdf417Metadata.SegmentIndex := Pdf417Metadata.getSegmentIndex;
      Result.Pdf417Metadata.Sender := JStringToString(Pdf417Metadata.getSender);
      Result.Pdf417Metadata.Timestamp := Pdf417Metadata.getTimestamp;
    end
    else if MetadataType.ordinal = TJResultMetadataType.JavaClass.POSSIBLE_COUNTRY.ordinal then
      Result.Country := JStringToString(Metadata.get(MetadataType).toString)
//  else if MetadataType.ordinal = TJResultMetadataType.JavaClass.STRUCTURED_APPEND_PARITY.ordinal then
//  else if MetadataType.ordinal = TJResultMetadataType.JavaClass.STRUCTURED_APPEND_SEQUENCE.ordinal then
    else if MetadataType.ordinal = TJResultMetadataType.JavaClass.SUGGESTED_PRICE.ordinal then
      Result.Price := JStringToString(Metadata.get(MetadataType).toString)
    else if MetadataType.ordinal = TJResultMetadataType.JavaClass.SYMBOLOGY_IDENTIFIER.ordinal then
      Result.SymbologyIdentifier := JStringToString(Metadata.get(MetadataType).toString)
    else if MetadataType.ordinal = TJResultMetadataType.JavaClass.UPC_EAN_EXTENSION.ordinal then
      Result.Extension := JStringToString(Metadata.get(MetadataType).toString);
  end;
end;

function TBarcodeDecoder.Decode(BitmapWidth, BitmapHeight: Integer; BitmapData: TJavaArray<Integer>): TDecodeResults;
var
  LuminanceSource: JRGBLuminanceSource;
  HybridBinarizer: JHybridBinarizer;
  BinaryBitmap: JBinaryBitmap;
  DecodeResults: TJavaObjectArray<JResult>;
  DecodeResult: JResult;
  I: Integer;
begin
  Result := nil;

  try
    SetHints;

    LuminanceSource := TJRGBLuminanceSource.JavaClass.init(BitmapWidth, BitmapHeight, BitmapData);
    HybridBinarizer := TJHybridBinarizer.JavaClass.init(TJLuminanceSource.Wrap((LuminanceSource as ILocalObject).GetObjectID));
    BinaryBitmap := TJBinaryBitmap.JavaClass.init(TJBinarizer.Wrap((HybridBinarizer as ILocalObject).GetObjectID));

    try
      if FMultiple then
      begin
        if FMultipleReader = nil then
          FMultipleReader := TJGenericMultipleBarcodeReader.JavaClass.init(TJReader.Wrap((FReader as ILocalObject).GetObjectID));
        DecodeResults := FMultipleReader.decodeMultiple(BinaryBitmap, FHints);
        if DecodeResults <> nil then
        begin
          SetLength(Result, DecodeResults.Length);
          for I := 0 to Length(Result) - 1 do
            Result[I] := DecodeBarcodeResult(TJResult.Wrap(DecodeResults.GetRawItem(I)));
        end;
      end
      else
      begin
        DecodeResult := FReader.decode(BinaryBitmap, FHints);
        if DecodeResult <> nil then
        begin
          SetLength(Result, 1);
          Result[0] := DecodeBarcodeResult(DecodeResult);
        end;
      end;
    finally
      FReader.reset;
    end;
  except
    on E: EJNIException do
      if E.ExceptionClassName <> 'class com.google.zxing.NotFoundException' then
        raise;
  end;
end;

procedure RegisterTypes;
begin
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAbstractDoCoMoResultParser', TypeInfo(Winsoft.Android.Obr.JAbstractDoCoMoResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAbstractExpandedDecoder', TypeInfo(Winsoft.Android.Obr.JAbstractExpandedDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAbstractRSSReader', TypeInfo(Winsoft.Android.Obr.JAbstractRSSReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAddressBookAUResultParser', TypeInfo(Winsoft.Android.Obr.JAddressBookAUResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAddressBookDoCoMoResultParser', TypeInfo(Winsoft.Android.Obr.JAddressBookDoCoMoResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAddressBookParsedResult', TypeInfo(Winsoft.Android.Obr.JAddressBookParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI013103decoder', TypeInfo(Winsoft.Android.Obr.JAI013103decoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI01320xDecoder', TypeInfo(Winsoft.Android.Obr.JAI01320xDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI01392xDecoder', TypeInfo(Winsoft.Android.Obr.JAI01392xDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI01393xDecoder', TypeInfo(Winsoft.Android.Obr.JAI01393xDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI013x0x1xDecoder', TypeInfo(Winsoft.Android.Obr.JAI013x0x1xDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI013x0xDecoder', TypeInfo(Winsoft.Android.Obr.JAI013x0xDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI01AndOtherAIs', TypeInfo(Winsoft.Android.Obr.JAI01AndOtherAIs));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI01decoder', TypeInfo(Winsoft.Android.Obr.JAI01decoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAI01weightDecoder', TypeInfo(Winsoft.Android.Obr.JAI01weightDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAlignmentPattern', TypeInfo(Winsoft.Android.Obr.JAlignmentPattern));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAlignmentPatternFinder', TypeInfo(Winsoft.Android.Obr.JAlignmentPatternFinder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAnyAIDecoder', TypeInfo(Winsoft.Android.Obr.JAnyAIDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JASCIIEncoder', TypeInfo(Winsoft.Android.Obr.JASCIIEncoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAztecCode', TypeInfo(Winsoft.Android.Obr.JAztecCode));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAztecDetectorResult', TypeInfo(Winsoft.Android.Obr.JAztecDetectorResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAztecReader', TypeInfo(Winsoft.Android.Obr.JAztecReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JAztecWriter', TypeInfo(Winsoft.Android.Obr.JAztecWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBarcodeDecoder', TypeInfo(Winsoft.Android.Obr.JBarcodeDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBarcodeFormat', TypeInfo(Winsoft.Android.Obr.JBarcodeFormat));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBarcodeMatrix', TypeInfo(Winsoft.Android.Obr.JBarcodeMatrix));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBarcodeMetadata', TypeInfo(Winsoft.Android.Obr.JBarcodeMetadata));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBarcodeRow', TypeInfo(Winsoft.Android.Obr.JBarcodeRow));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBarcodeValue', TypeInfo(Winsoft.Android.Obr.JBarcodeValue));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBase256Encoder', TypeInfo(Winsoft.Android.Obr.JBase256Encoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBinarizer', TypeInfo(Winsoft.Android.Obr.JBinarizer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBinaryBitmap', TypeInfo(Winsoft.Android.Obr.JBinaryBitmap));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBinaryShiftToken', TypeInfo(Winsoft.Android.Obr.JBinaryShiftToken));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBitArray', TypeInfo(Winsoft.Android.Obr.JBitArray));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBitArrayBuilder', TypeInfo(Winsoft.Android.Obr.JBitArrayBuilder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBitMatrix', TypeInfo(Winsoft.Android.Obr.JBitMatrix));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBitMatrixParser', TypeInfo(Winsoft.Android.Obr.JBitMatrixParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBitMatrixParser1', TypeInfo(Winsoft.Android.Obr.JBitMatrixParser1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBitMatrixParser2', TypeInfo(Winsoft.Android.Obr.JBitMatrixParser2));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBitSource', TypeInfo(Winsoft.Android.Obr.JBitSource));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBizcardResultParser', TypeInfo(Winsoft.Android.Obr.JBizcardResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBlockPair', TypeInfo(Winsoft.Android.Obr.JBlockPair));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBlockParsedResult', TypeInfo(Winsoft.Android.Obr.JBlockParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBookmarkDoCoMoResultParser', TypeInfo(Winsoft.Android.Obr.JBookmarkDoCoMoResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JBoundingBox', TypeInfo(Winsoft.Android.Obr.JBoundingBox));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JByQuadrantReader', TypeInfo(Winsoft.Android.Obr.JByQuadrantReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JByteMatrix', TypeInfo(Winsoft.Android.Obr.JByteMatrix));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JC40Encoder', TypeInfo(Winsoft.Android.Obr.JC40Encoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCalendarParsedResult', TypeInfo(Winsoft.Android.Obr.JCalendarParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCharacterSetECI', TypeInfo(Winsoft.Android.Obr.JCharacterSetECI));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JChecksumException', TypeInfo(Winsoft.Android.Obr.JChecksumException));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCodaBarReader', TypeInfo(Winsoft.Android.Obr.JCodaBarReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCodaBarWriter', TypeInfo(Winsoft.Android.Obr.JCodaBarWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCode128Reader', TypeInfo(Winsoft.Android.Obr.JCode128Reader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCode128Writer', TypeInfo(Winsoft.Android.Obr.JCode128Writer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCode128Writer_CType', TypeInfo(Winsoft.Android.Obr.JCode128Writer_CType));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCode39Reader', TypeInfo(Winsoft.Android.Obr.JCode39Reader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCode39Writer', TypeInfo(Winsoft.Android.Obr.JCode39Writer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCode93Reader', TypeInfo(Winsoft.Android.Obr.JCode93Reader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCode93Writer', TypeInfo(Winsoft.Android.Obr.JCode93Writer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCodeword', TypeInfo(Winsoft.Android.Obr.JCodeword));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCompaction', TypeInfo(Winsoft.Android.Obr.JCompaction));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCurrentParsingState', TypeInfo(Winsoft.Android.Obr.JCurrentParsingState));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JCurrentParsingState_State', TypeInfo(Winsoft.Android.Obr.JCurrentParsingState_State));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataBlock', TypeInfo(Winsoft.Android.Obr.JDataBlock));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataBlock1', TypeInfo(Winsoft.Android.Obr.JDataBlock1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataCharacter', TypeInfo(Winsoft.Android.Obr.JDataCharacter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask', TypeInfo(Winsoft.Android.Obr.JDataMask));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask_1', TypeInfo(Winsoft.Android.Obr.JDataMask_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask_2', TypeInfo(Winsoft.Android.Obr.JDataMask_2));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask_3', TypeInfo(Winsoft.Android.Obr.JDataMask_3));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask_4', TypeInfo(Winsoft.Android.Obr.JDataMask_4));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask_5', TypeInfo(Winsoft.Android.Obr.JDataMask_5));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask_6', TypeInfo(Winsoft.Android.Obr.JDataMask_6));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask_7', TypeInfo(Winsoft.Android.Obr.JDataMask_7));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMask_8', TypeInfo(Winsoft.Android.Obr.JDataMask_8));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMatrixReader', TypeInfo(Winsoft.Android.Obr.JDataMatrixReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMatrixSymbolInfo144', TypeInfo(Winsoft.Android.Obr.JDataMatrixSymbolInfo144));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDataMatrixWriter', TypeInfo(Winsoft.Android.Obr.JDataMatrixWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser1', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser2', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser2));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser3', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser3));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser_1', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser_11', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser_11));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser_12', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser_12));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser_ECIStringBuilder', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser_ECIStringBuilder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser_Mode', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser_Mode));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedBitStreamParser_Mode1', TypeInfo(Winsoft.Android.Obr.JDecodedBitStreamParser_Mode1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedChar', TypeInfo(Winsoft.Android.Obr.JDecodedChar));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedInformation', TypeInfo(Winsoft.Android.Obr.JDecodedInformation));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedNumeric', TypeInfo(Winsoft.Android.Obr.JDecodedNumeric));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodedObject', TypeInfo(Winsoft.Android.Obr.JDecodedObject));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecodeHintType', TypeInfo(Winsoft.Android.Obr.JDecodeHintType));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecoder', TypeInfo(Winsoft.Android.Obr.JDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecoder1', TypeInfo(Winsoft.Android.Obr.JDecoder1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecoder2', TypeInfo(Winsoft.Android.Obr.JDecoder2));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecoder3', TypeInfo(Winsoft.Android.Obr.JDecoder3));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecoderResult', TypeInfo(Winsoft.Android.Obr.JDecoderResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecoder_1', TypeInfo(Winsoft.Android.Obr.JDecoder_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecoder_CorrectedBitsResult', TypeInfo(Winsoft.Android.Obr.JDecoder_CorrectedBitsResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDecoder_Table', TypeInfo(Winsoft.Android.Obr.JDecoder_Table));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDefaultGridSampler', TypeInfo(Winsoft.Android.Obr.JDefaultGridSampler));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDefaultPlacement', TypeInfo(Winsoft.Android.Obr.JDefaultPlacement));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetectionResult', TypeInfo(Winsoft.Android.Obr.JDetectionResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetectionResultColumn', TypeInfo(Winsoft.Android.Obr.JDetectionResultColumn));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetectionResultRowIndicatorColumn', TypeInfo(Winsoft.Android.Obr.JDetectionResultRowIndicatorColumn));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetector', TypeInfo(Winsoft.Android.Obr.JDetector));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetector1', TypeInfo(Winsoft.Android.Obr.JDetector1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetector2', TypeInfo(Winsoft.Android.Obr.JDetector2));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetector3', TypeInfo(Winsoft.Android.Obr.JDetector3));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetectorResult', TypeInfo(Winsoft.Android.Obr.JDetectorResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDetector_Point', TypeInfo(Winsoft.Android.Obr.JDetector_Point));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDimension', TypeInfo(Winsoft.Android.Obr.JDimension));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JDimensions', TypeInfo(Winsoft.Android.Obr.JDimensions));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEAN13Reader', TypeInfo(Winsoft.Android.Obr.JEAN13Reader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEAN13Writer', TypeInfo(Winsoft.Android.Obr.JEAN13Writer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEAN8Reader', TypeInfo(Winsoft.Android.Obr.JEAN8Reader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEAN8Writer', TypeInfo(Winsoft.Android.Obr.JEAN8Writer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEANManufacturerOrgSupport', TypeInfo(Winsoft.Android.Obr.JEANManufacturerOrgSupport));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEdifactEncoder', TypeInfo(Winsoft.Android.Obr.JEdifactEncoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEmailAddressParsedResult', TypeInfo(Winsoft.Android.Obr.JEmailAddressParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEmailAddressResultParser', TypeInfo(Winsoft.Android.Obr.JEmailAddressResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEmailDoCoMoResultParser', TypeInfo(Winsoft.Android.Obr.JEmailDoCoMoResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEncodeHintType', TypeInfo(Winsoft.Android.Obr.JEncodeHintType));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEncoder', TypeInfo(Winsoft.Android.Obr.JEncoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEncoder1', TypeInfo(Winsoft.Android.Obr.JEncoder1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEncoder2', TypeInfo(Winsoft.Android.Obr.JEncoder2));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEncoderContext', TypeInfo(Winsoft.Android.Obr.JEncoderContext));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JEncoder_1', TypeInfo(Winsoft.Android.Obr.JEncoder_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JErrorCorrection', TypeInfo(Winsoft.Android.Obr.JErrorCorrection));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JErrorCorrection1', TypeInfo(Winsoft.Android.Obr.JErrorCorrection1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JErrorCorrectionLevel', TypeInfo(Winsoft.Android.Obr.JErrorCorrectionLevel));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JExpandedPair', TypeInfo(Winsoft.Android.Obr.JExpandedPair));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JExpandedProductParsedResult', TypeInfo(Winsoft.Android.Obr.JExpandedProductParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JExpandedProductResultParser', TypeInfo(Winsoft.Android.Obr.JExpandedProductResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JExpandedRow', TypeInfo(Winsoft.Android.Obr.JExpandedRow));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFieldParser', TypeInfo(Winsoft.Android.Obr.JFieldParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFieldParser_DataLength', TypeInfo(Winsoft.Android.Obr.JFieldParser_DataLength));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFinderPattern', TypeInfo(Winsoft.Android.Obr.JFinderPattern));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFinderPattern1', TypeInfo(Winsoft.Android.Obr.JFinderPattern1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFinderPatternFinder', TypeInfo(Winsoft.Android.Obr.JFinderPatternFinder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFinderPatternFinder_1', TypeInfo(Winsoft.Android.Obr.JFinderPatternFinder_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFinderPatternFinder_EstimatedModuleComparator', TypeInfo(Winsoft.Android.Obr.JFinderPatternFinder_EstimatedModuleComparator));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFinderPatternInfo', TypeInfo(Winsoft.Android.Obr.JFinderPatternInfo));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFormatException', TypeInfo(Winsoft.Android.Obr.JFormatException));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JFormatInformation', TypeInfo(Winsoft.Android.Obr.JFormatInformation));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JGeneralAppIdDecoder', TypeInfo(Winsoft.Android.Obr.JGeneralAppIdDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JGenericGF', TypeInfo(Winsoft.Android.Obr.JGenericGF));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JGenericGFPoly', TypeInfo(Winsoft.Android.Obr.JGenericGFPoly));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JGenericMultipleBarcodeReader', TypeInfo(Winsoft.Android.Obr.JGenericMultipleBarcodeReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JGeoParsedResult', TypeInfo(Winsoft.Android.Obr.JGeoParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JGeoResultParser', TypeInfo(Winsoft.Android.Obr.JGeoResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JGlobalHistogramBinarizer', TypeInfo(Winsoft.Android.Obr.JGlobalHistogramBinarizer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JGridSampler', TypeInfo(Winsoft.Android.Obr.JGridSampler));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JHighLevelEncoder', TypeInfo(Winsoft.Android.Obr.JHighLevelEncoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JHighLevelEncoder1', TypeInfo(Winsoft.Android.Obr.JHighLevelEncoder1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JHighLevelEncoder_1', TypeInfo(Winsoft.Android.Obr.JHighLevelEncoder_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JHybridBinarizer', TypeInfo(Winsoft.Android.Obr.JHybridBinarizer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JInvertedLuminanceSource', TypeInfo(Winsoft.Android.Obr.JInvertedLuminanceSource));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JISBNParsedResult', TypeInfo(Winsoft.Android.Obr.JISBNParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JISBNResultParser', TypeInfo(Winsoft.Android.Obr.JISBNResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JITFReader', TypeInfo(Winsoft.Android.Obr.JITFReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JITFWriter', TypeInfo(Winsoft.Android.Obr.JITFWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JLuminanceSource', TypeInfo(Winsoft.Android.Obr.JLuminanceSource));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMaskUtil', TypeInfo(Winsoft.Android.Obr.JMaskUtil));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMathUtils', TypeInfo(Winsoft.Android.Obr.JMathUtils));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMatrixUtil', TypeInfo(Winsoft.Android.Obr.JMatrixUtil));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMaxiCodeReader', TypeInfo(Winsoft.Android.Obr.JMaxiCodeReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMinimalEncoder', TypeInfo(Winsoft.Android.Obr.JMinimalEncoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMinimalEncoder_1', TypeInfo(Winsoft.Android.Obr.JMinimalEncoder_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMinimalEncoder_Edge', TypeInfo(Winsoft.Android.Obr.JMinimalEncoder_Edge));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMinimalEncoder_ResultList', TypeInfo(Winsoft.Android.Obr.JMinimalEncoder_ResultList));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMinimalEncoder_ResultList_ResultNode', TypeInfo(Winsoft.Android.Obr.JMinimalEncoder_ResultList_ResultNode));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMinimalEncoder_VersionSize', TypeInfo(Winsoft.Android.Obr.JMinimalEncoder_VersionSize));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMode', TypeInfo(Winsoft.Android.Obr.JMode));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JModulusGF', TypeInfo(Winsoft.Android.Obr.JModulusGF));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JModulusPoly', TypeInfo(Winsoft.Android.Obr.JModulusPoly));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMonochromeRectangleDetector', TypeInfo(Winsoft.Android.Obr.JMonochromeRectangleDetector));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiDetector', TypeInfo(Winsoft.Android.Obr.JMultiDetector));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiFinderPatternFinder', TypeInfo(Winsoft.Android.Obr.JMultiFinderPatternFinder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiFinderPatternFinder_1', TypeInfo(Winsoft.Android.Obr.JMultiFinderPatternFinder_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiFinderPatternFinder_ModuleSizeComparator', TypeInfo(Winsoft.Android.Obr.JMultiFinderPatternFinder_ModuleSizeComparator));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiFormatOneDReader', TypeInfo(Winsoft.Android.Obr.JMultiFormatOneDReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiFormatReader', TypeInfo(Winsoft.Android.Obr.JMultiFormatReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiFormatUPCEANReader', TypeInfo(Winsoft.Android.Obr.JMultiFormatUPCEANReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiFormatWriter', TypeInfo(Winsoft.Android.Obr.JMultiFormatWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultiFormatWriter_1', TypeInfo(Winsoft.Android.Obr.JMultiFormatWriter_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JMultipleBarcodeReader', TypeInfo(Winsoft.Android.Obr.JMultipleBarcodeReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JNotFoundException', TypeInfo(Winsoft.Android.Obr.JNotFoundException));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JOneDimensionalCodeWriter', TypeInfo(Winsoft.Android.Obr.JOneDimensionalCodeWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JOneDReader', TypeInfo(Winsoft.Android.Obr.JOneDReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPair', TypeInfo(Winsoft.Android.Obr.JPair));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JParsedResult', TypeInfo(Winsoft.Android.Obr.JParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JParsedResultType', TypeInfo(Winsoft.Android.Obr.JParsedResultType));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417', TypeInfo(Winsoft.Android.Obr.JPDF417));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417CodewordDecoder', TypeInfo(Winsoft.Android.Obr.JPDF417CodewordDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417Common', TypeInfo(Winsoft.Android.Obr.JPDF417Common));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417DetectorResult', TypeInfo(Winsoft.Android.Obr.JPDF417DetectorResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417ErrorCorrection', TypeInfo(Winsoft.Android.Obr.JPDF417ErrorCorrection));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417HighLevelEncoder', TypeInfo(Winsoft.Android.Obr.JPDF417HighLevelEncoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417HighLevelEncoder_1', TypeInfo(Winsoft.Android.Obr.JPDF417HighLevelEncoder_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417Reader', TypeInfo(Winsoft.Android.Obr.JPDF417Reader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417ResultMetadata', TypeInfo(Winsoft.Android.Obr.JPDF417ResultMetadata));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417ScanningDecoder', TypeInfo(Winsoft.Android.Obr.JPDF417ScanningDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPDF417Writer', TypeInfo(Winsoft.Android.Obr.JPDF417Writer));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPerspectiveTransform', TypeInfo(Winsoft.Android.Obr.JPerspectiveTransform));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JPlanarYUVLuminanceSource', TypeInfo(Winsoft.Android.Obr.JPlanarYUVLuminanceSource));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JProductParsedResult', TypeInfo(Winsoft.Android.Obr.JProductParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JProductResultParser', TypeInfo(Winsoft.Android.Obr.JProductResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JQRCode', TypeInfo(Winsoft.Android.Obr.JQRCode));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JQRCodeDecoderMetaData', TypeInfo(Winsoft.Android.Obr.JQRCodeDecoderMetaData));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JQRCodeMultiReader', TypeInfo(Winsoft.Android.Obr.JQRCodeMultiReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JQRCodeMultiReader_1', TypeInfo(Winsoft.Android.Obr.JQRCodeMultiReader_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JQRCodeMultiReader_SAComparator', TypeInfo(Winsoft.Android.Obr.JQRCodeMultiReader_SAComparator));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JQRCodeReader', TypeInfo(Winsoft.Android.Obr.JQRCodeReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JQRCodeWriter', TypeInfo(Winsoft.Android.Obr.JQRCodeWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JReader', TypeInfo(Winsoft.Android.Obr.JReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JReaderException', TypeInfo(Winsoft.Android.Obr.JReaderException));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JReedSolomonDecoder', TypeInfo(Winsoft.Android.Obr.JReedSolomonDecoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JReedSolomonEncoder', TypeInfo(Winsoft.Android.Obr.JReedSolomonEncoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JReedSolomonException', TypeInfo(Winsoft.Android.Obr.JReedSolomonException));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JResult', TypeInfo(Winsoft.Android.Obr.JResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JResultMetadataType', TypeInfo(Winsoft.Android.Obr.JResultMetadataType));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JResultParser', TypeInfo(Winsoft.Android.Obr.JResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JResultPoint', TypeInfo(Winsoft.Android.Obr.JResultPoint));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JResultPointCallback', TypeInfo(Winsoft.Android.Obr.JResultPointCallback));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JRGBLuminanceSource', TypeInfo(Winsoft.Android.Obr.JRGBLuminanceSource));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JRSS14Reader', TypeInfo(Winsoft.Android.Obr.JRSS14Reader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JRSSExpandedReader', TypeInfo(Winsoft.Android.Obr.JRSSExpandedReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JRSSUtils', TypeInfo(Winsoft.Android.Obr.JRSSUtils));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JSimpleToken', TypeInfo(Winsoft.Android.Obr.JSimpleToken));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JSMSMMSResultParser', TypeInfo(Winsoft.Android.Obr.JSMSMMSResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JSMSParsedResult', TypeInfo(Winsoft.Android.Obr.JSMSParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JSMSTOMMSTOResultParser', TypeInfo(Winsoft.Android.Obr.JSMSTOMMSTOResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JSMTPResultParser', TypeInfo(Winsoft.Android.Obr.JSMTPResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JState', TypeInfo(Winsoft.Android.Obr.JState));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JStringUtils', TypeInfo(Winsoft.Android.Obr.JStringUtils));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JSymbolInfo', TypeInfo(Winsoft.Android.Obr.JSymbolInfo));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JSymbolShapeHint', TypeInfo(Winsoft.Android.Obr.JSymbolShapeHint));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JTelParsedResult', TypeInfo(Winsoft.Android.Obr.JTelParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JTelResultParser', TypeInfo(Winsoft.Android.Obr.JTelResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JTextEncoder', TypeInfo(Winsoft.Android.Obr.JTextEncoder));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JTextParsedResult', TypeInfo(Winsoft.Android.Obr.JTextParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JToken', TypeInfo(Winsoft.Android.Obr.JToken));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCAReader', TypeInfo(Winsoft.Android.Obr.JUPCAReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCAWriter', TypeInfo(Winsoft.Android.Obr.JUPCAWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCEANExtension2Support', TypeInfo(Winsoft.Android.Obr.JUPCEANExtension2Support));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCEANExtension5Support', TypeInfo(Winsoft.Android.Obr.JUPCEANExtension5Support));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCEANExtensionSupport', TypeInfo(Winsoft.Android.Obr.JUPCEANExtensionSupport));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCEANReader', TypeInfo(Winsoft.Android.Obr.JUPCEANReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCEANWriter', TypeInfo(Winsoft.Android.Obr.JUPCEANWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCEReader', TypeInfo(Winsoft.Android.Obr.JUPCEReader));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JUPCEWriter', TypeInfo(Winsoft.Android.Obr.JUPCEWriter));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JURIParsedResult', TypeInfo(Winsoft.Android.Obr.JURIParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JURIResultParser', TypeInfo(Winsoft.Android.Obr.JURIResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JURLTOResultParser', TypeInfo(Winsoft.Android.Obr.JURLTOResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVCardResultParser', TypeInfo(Winsoft.Android.Obr.JVCardResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVersion', TypeInfo(Winsoft.Android.Obr.JVersion));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVersion1', TypeInfo(Winsoft.Android.Obr.JVersion1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVersion_1', TypeInfo(Winsoft.Android.Obr.JVersion_1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVersion_ECB', TypeInfo(Winsoft.Android.Obr.JVersion_ECB));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVersion_ECB1', TypeInfo(Winsoft.Android.Obr.JVersion_ECB1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVersion_ECBlocks', TypeInfo(Winsoft.Android.Obr.JVersion_ECBlocks));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVersion_ECBlocks1', TypeInfo(Winsoft.Android.Obr.JVersion_ECBlocks1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVEventResultParser', TypeInfo(Winsoft.Android.Obr.JVEventResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVINParsedResult', TypeInfo(Winsoft.Android.Obr.JVINParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JVINResultParser', TypeInfo(Winsoft.Android.Obr.JVINResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JWhiteRectangleDetector', TypeInfo(Winsoft.Android.Obr.JWhiteRectangleDetector));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JWifiParsedResult', TypeInfo(Winsoft.Android.Obr.JWifiParsedResult));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JWifiResultParser', TypeInfo(Winsoft.Android.Obr.JWifiResultParser));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JWriter1', TypeInfo(Winsoft.Android.Obr.JWriter1));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JWriterException', TypeInfo(Winsoft.Android.Obr.JWriterException));
  TRegTypes.RegisterType('Winsoft.Android.Obr.JX12Encoder', TypeInfo(Winsoft.Android.Obr.JX12Encoder));
end;

initialization
  RegisterTypes;
end.