// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
// Original code is licensed as follows:
/*
 * Copyright 2007 ZXing authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "xfa/fxbarcode/common/BC_CommonBitMatrix.h"
#include "xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h"
#include "xfa/fxbarcode/qrcode/BC_QRCoderECB.h"
#include "xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h"
#include "xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
#include "xfa/fxbarcode/qrcode/BC_QRCoderVersion.h"
#include "xfa/fxbarcode/utils.h"

namespace {

const uint8_t BITS_SET_IN_HALF_BYTE[] = {0, 1, 1, 2, 1, 2, 2, 3,
                                         1, 2, 2, 3, 2, 3, 3, 4};

int32_t NumBitsDiffering(int32_t a, int32_t b) {
  a ^= b;
  return BITS_SET_IN_HALF_BYTE[a & 0x0F] +
         BITS_SET_IN_HALF_BYTE[(a >> 4) & 0x0F] +
         BITS_SET_IN_HALF_BYTE[(a >> 8) & 0x0F] +
         BITS_SET_IN_HALF_BYTE[(a >> 12) & 0x0F] +
         BITS_SET_IN_HALF_BYTE[(a >> 16) & 0x0F] +
         BITS_SET_IN_HALF_BYTE[(a >> 20) & 0x0F] +
         BITS_SET_IN_HALF_BYTE[(a >> 24) & 0x0F] +
         BITS_SET_IN_HALF_BYTE[(a >> 28) & 0x0F];
}

}  // namespace

const int32_t CBC_QRCoderVersion::VERSION_DECODE_INFO[] = {
    0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847,
    0x0E60D, 0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6,
    0x15683, 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E,
    0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA,
    0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69};

CFX_ArrayTemplate<CBC_QRCoderVersion*>* CBC_QRCoderVersion::VERSION = nullptr;

void CBC_QRCoderVersion::Initialize() {
  VERSION = new CFX_ArrayTemplate<CBC_QRCoderVersion*>();
}
void CBC_QRCoderVersion::Finalize() {
  for (int32_t i = 0; i < VERSION->GetSize(); i++)
    delete VERSION->GetAt(i);

  delete VERSION;
  VERSION = nullptr;
}
CBC_QRCoderVersion::CBC_QRCoderVersion(int32_t versionNumber,
                                       CBC_QRCoderECBlocks* ecBlocks1,
                                       CBC_QRCoderECBlocks* ecBlocks2,
                                       CBC_QRCoderECBlocks* ecBlocks3,
                                       CBC_QRCoderECBlocks* ecBlocks4) {
  m_versionNumber = versionNumber;
  m_ecBlocksArray.Add(ecBlocks1);
  m_ecBlocksArray.Add(ecBlocks2);
  m_ecBlocksArray.Add(ecBlocks3);
  m_ecBlocksArray.Add(ecBlocks4);
  int32_t total = 0;
  int32_t ecCodeWords = ecBlocks1->GetECCodeWordsPerBlock();
  CFX_ArrayTemplate<CBC_QRCoderECB*>* ecbArray = ecBlocks1->GetECBlocks();
  for (int32_t i = 0; i < ecbArray->GetSize(); i++) {
    CBC_QRCoderECB* ecBlock = (*ecbArray)[i];
    total += ecBlock->GetCount() * (ecBlock->GetDataCodeWords() + ecCodeWords);
  }
  m_totalCodeWords = total;
  switch (versionNumber) {
    case 1:
      break;
    case 2:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(18);
      break;
    case 3:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(22);
      break;
    case 4:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      break;
    case 5:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      break;
    case 6:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(34);
      break;
    case 7:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(22);
      m_alignmentPatternCenters.Add(38);
      break;
    case 8:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(24);
      m_alignmentPatternCenters.Add(42);
      break;
    case 9:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      m_alignmentPatternCenters.Add(46);
      break;
    case 10:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(28);
      m_alignmentPatternCenters.Add(50);
      break;
    case 11:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(54);
      break;
    case 12:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(32);
      m_alignmentPatternCenters.Add(58);
      break;
    case 13:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(34);
      m_alignmentPatternCenters.Add(62);
      break;
    case 14:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      m_alignmentPatternCenters.Add(46);
      m_alignmentPatternCenters.Add(66);
      break;
    case 15:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      m_alignmentPatternCenters.Add(48);
      m_alignmentPatternCenters.Add(70);
      break;
    case 16:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      m_alignmentPatternCenters.Add(50);
      m_alignmentPatternCenters.Add(74);
      break;
    case 17:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(54);
      m_alignmentPatternCenters.Add(78);
      break;
    case 18:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(56);
      m_alignmentPatternCenters.Add(82);
      break;
    case 19:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(58);
      m_alignmentPatternCenters.Add(86);
      break;
    case 20:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(34);
      m_alignmentPatternCenters.Add(62);
      m_alignmentPatternCenters.Add(90);
      break;
    case 21:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(28);
      m_alignmentPatternCenters.Add(50);
      m_alignmentPatternCenters.Add(72);
      m_alignmentPatternCenters.Add(94);
      break;
    case 22:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      m_alignmentPatternCenters.Add(50);
      m_alignmentPatternCenters.Add(74);
      m_alignmentPatternCenters.Add(98);
      break;
    case 23:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(54);
      m_alignmentPatternCenters.Add(74);
      m_alignmentPatternCenters.Add(102);
      break;
    case 24:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(28);
      m_alignmentPatternCenters.Add(54);
      m_alignmentPatternCenters.Add(80);
      m_alignmentPatternCenters.Add(106);
      break;
    case 25:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(32);
      m_alignmentPatternCenters.Add(58);
      m_alignmentPatternCenters.Add(84);
      m_alignmentPatternCenters.Add(110);
      break;
    case 26:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(58);
      m_alignmentPatternCenters.Add(86);
      m_alignmentPatternCenters.Add(114);
      break;
    case 27:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(34);
      m_alignmentPatternCenters.Add(62);
      m_alignmentPatternCenters.Add(90);
      m_alignmentPatternCenters.Add(118);
      break;
    case 28:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      m_alignmentPatternCenters.Add(50);
      m_alignmentPatternCenters.Add(74);
      m_alignmentPatternCenters.Add(98);
      m_alignmentPatternCenters.Add(122);
      break;
    case 29:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(54);
      m_alignmentPatternCenters.Add(78);
      m_alignmentPatternCenters.Add(102);
      m_alignmentPatternCenters.Add(126);
      break;
    case 30:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      m_alignmentPatternCenters.Add(52);
      m_alignmentPatternCenters.Add(78);
      m_alignmentPatternCenters.Add(104);
      m_alignmentPatternCenters.Add(130);
      break;
    case 31:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(56);
      m_alignmentPatternCenters.Add(82);
      m_alignmentPatternCenters.Add(108);
      m_alignmentPatternCenters.Add(134);
      break;
    case 32:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(34);
      m_alignmentPatternCenters.Add(60);
      m_alignmentPatternCenters.Add(86);
      m_alignmentPatternCenters.Add(112);
      m_alignmentPatternCenters.Add(138);
      break;
    case 33:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(58);
      m_alignmentPatternCenters.Add(86);
      m_alignmentPatternCenters.Add(114);
      m_alignmentPatternCenters.Add(142);
      break;
    case 34:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(34);
      m_alignmentPatternCenters.Add(62);
      m_alignmentPatternCenters.Add(90);
      m_alignmentPatternCenters.Add(118);
      m_alignmentPatternCenters.Add(146);
      break;
    case 35:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(54);
      m_alignmentPatternCenters.Add(78);
      m_alignmentPatternCenters.Add(102);
      m_alignmentPatternCenters.Add(126);
      m_alignmentPatternCenters.Add(150);
      break;
    case 36:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(24);
      m_alignmentPatternCenters.Add(50);
      m_alignmentPatternCenters.Add(76);
      m_alignmentPatternCenters.Add(102);
      m_alignmentPatternCenters.Add(128);
      m_alignmentPatternCenters.Add(154);
      break;
    case 37:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(28);
      m_alignmentPatternCenters.Add(54);
      m_alignmentPatternCenters.Add(80);
      m_alignmentPatternCenters.Add(106);
      m_alignmentPatternCenters.Add(132);
      m_alignmentPatternCenters.Add(158);
      break;
    case 38:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(32);
      m_alignmentPatternCenters.Add(58);
      m_alignmentPatternCenters.Add(84);
      m_alignmentPatternCenters.Add(110);
      m_alignmentPatternCenters.Add(136);
      m_alignmentPatternCenters.Add(162);
      break;
    case 39:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(26);
      m_alignmentPatternCenters.Add(54);
      m_alignmentPatternCenters.Add(82);
      m_alignmentPatternCenters.Add(110);
      m_alignmentPatternCenters.Add(138);
      m_alignmentPatternCenters.Add(166);
      break;
    case 40:
      m_alignmentPatternCenters.Add(6);
      m_alignmentPatternCenters.Add(30);
      m_alignmentPatternCenters.Add(58);
      m_alignmentPatternCenters.Add(86);
      m_alignmentPatternCenters.Add(114);
      m_alignmentPatternCenters.Add(142);
      m_alignmentPatternCenters.Add(170);
      break;
  }
}

CBC_QRCoderVersion::~CBC_QRCoderVersion() {
  for (int32_t i = 0; i < m_ecBlocksArray.GetSize(); ++i)
    delete m_ecBlocksArray[i];
}

int32_t CBC_QRCoderVersion::GetVersionNumber() {
  return m_versionNumber;
}
CFX_ArrayTemplate<int32_t>* CBC_QRCoderVersion::GetAlignmentPatternCenters() {
  return &m_alignmentPatternCenters;
}
int32_t CBC_QRCoderVersion::GetTotalCodeWords() {
  return m_totalCodeWords;
}
int32_t CBC_QRCoderVersion::GetDimensionForVersion() {
  return 17 + 4 * m_versionNumber;
}
CBC_QRCoderECBlocks* CBC_QRCoderVersion::GetECBlocksForLevel(
    CBC_QRCoderErrorCorrectionLevel* ecLevel) {
  return m_ecBlocksArray[ecLevel->Ordinal()];
}
CBC_QRCoderVersion* CBC_QRCoderVersion::GetProvisionalVersionForDimension(
    int32_t dimension,
    int32_t& e) {
  if ((dimension % 4) != 1) {
    e = BCExceptionRead;
    if (e != BCExceptionNO)
      return nullptr;
  }
  CBC_QRCoderVersion* qcv = GetVersionForNumber((dimension - 17) >> 2, e);
  if (e != BCExceptionNO)
    return nullptr;
  return qcv;
}
CBC_QRCoderVersion* CBC_QRCoderVersion::DecodeVersionInformation(
    int32_t versionBits,
    int32_t& e) {
  int32_t bestDifference = FXSYS_IntMax;
  int32_t bestVersion = 0;
  for (int32_t i = 0; i < 34; i++) {
    int32_t targetVersion = VERSION_DECODE_INFO[i];
    if (targetVersion == versionBits) {
      CBC_QRCoderVersion* qcv = GetVersionForNumber(i + 7, e);
      if (e != BCExceptionNO)
        return nullptr;
      return qcv;
    }
    int32_t bitsDifference = NumBitsDiffering(versionBits, targetVersion);
    if (bitsDifference < bestDifference) {
      bestVersion = i + 7;
      bestDifference = bitsDifference;
    }
  }
  if (bestDifference <= 3) {
    CBC_QRCoderVersion* qcv = GetVersionForNumber(bestVersion, e);
    if (e != BCExceptionNO)
      return nullptr;
    return qcv;
  }
  return nullptr;
}
CBC_CommonBitMatrix* CBC_QRCoderVersion::BuildFunctionPattern(int32_t& e) {
  int32_t dimension = GetDimensionForVersion();
  CBC_CommonBitMatrix* bitMatrix = new CBC_CommonBitMatrix();
  bitMatrix->Init(dimension);
  bitMatrix->SetRegion(0, 0, 9, 9, e);
  if (e != BCExceptionNO)
    return nullptr;
  bitMatrix->SetRegion(dimension - 8, 0, 8, 9, e);
  if (e != BCExceptionNO)
    return nullptr;
  bitMatrix->SetRegion(0, dimension - 8, 9, 8, e);
  if (e != BCExceptionNO)
    return nullptr;
  int32_t max = m_alignmentPatternCenters.GetSize();
  for (int32_t x = 0; x < max; x++) {
    int32_t i = m_alignmentPatternCenters[x] - 2;
    for (int32_t y = 0; y < max; y++) {
      if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) {
        continue;
      }
      bitMatrix->SetRegion(m_alignmentPatternCenters[y] - 2, i, 5, 5, e);
      if (e != BCExceptionNO)
        return nullptr;
    }
  }
  bitMatrix->SetRegion(6, 9, 1, dimension - 17, e);
  if (e != BCExceptionNO)
    return nullptr;
  bitMatrix->SetRegion(9, 6, dimension - 17, 1, e);
  if (e != BCExceptionNO)
    return nullptr;
  if (m_versionNumber > 6) {
    bitMatrix->SetRegion(dimension - 11, 0, 3, 6, e);
    if (e != BCExceptionNO)
      return nullptr;
    bitMatrix->SetRegion(0, dimension - 11, 6, 3, e);
    if (e != BCExceptionNO)
      return nullptr;
  }
  return bitMatrix;
}
CBC_QRCoderVersion* CBC_QRCoderVersion::GetVersionForNumber(
    int32_t versionNumber,
    int32_t& e) {
  if (VERSION->GetSize() == 0) {
    VERSION->Add(new CBC_QRCoderVersion(
        1, new CBC_QRCoderECBlocks(7, new CBC_QRCoderECB(1, 19)),
        new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 16)),
        new CBC_QRCoderECBlocks(13, new CBC_QRCoderECB(1, 13)),
        new CBC_QRCoderECBlocks(17, new CBC_QRCoderECB(1, 9))));
    VERSION->Add(new CBC_QRCoderVersion(
        2, new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 34)),
        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(1, 28)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(1, 22)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        3, new CBC_QRCoderECBlocks(15, new CBC_QRCoderECB(1, 55)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 44)),
        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 17)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 13))));
    VERSION->Add(new CBC_QRCoderVersion(
        4, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(1, 80)),
        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 32)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(2, 24)),
        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 9))));
    VERSION->Add(new CBC_QRCoderVersion(
        5, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 108)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 43)),
        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 15),
                                new CBC_QRCoderECB(2, 16)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 11),
                                new CBC_QRCoderECB(2, 12))));
    VERSION->Add(new CBC_QRCoderVersion(
        6, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68)),
        new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 27)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 19)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 15))));
    VERSION->Add(new CBC_QRCoderVersion(
        7, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(2, 78)),
        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(4, 31)),
        new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 14),
                                new CBC_QRCoderECB(4, 15)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 13),
                                new CBC_QRCoderECB(1, 14))));
    VERSION->Add(new CBC_QRCoderVersion(
        8, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 97)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 38),
                                new CBC_QRCoderECB(2, 39)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(4, 18),
                                new CBC_QRCoderECB(2, 19)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 14),
                                new CBC_QRCoderECB(2, 15))));
    VERSION->Add(new CBC_QRCoderVersion(
        9, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 116)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(3, 36),
                                new CBC_QRCoderECB(2, 37)),
        new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 16),
                                new CBC_QRCoderECB(4, 17)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 12),
                                new CBC_QRCoderECB(4, 13))));
    VERSION->Add(new CBC_QRCoderVersion(
        10, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68),
                                    new CBC_QRCoderECB(2, 69)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 43),
                                new CBC_QRCoderECB(1, 44)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(6, 19),
                                new CBC_QRCoderECB(2, 20)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 15),
                                new CBC_QRCoderECB(2, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        11, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 81)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 50),
                                new CBC_QRCoderECB(4, 51)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 22),
                                new CBC_QRCoderECB(4, 23)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(3, 12),
                                new CBC_QRCoderECB(8, 13))));
    VERSION->Add(new CBC_QRCoderVersion(
        12, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 92),
                                    new CBC_QRCoderECB(2, 93)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(6, 36),
                                new CBC_QRCoderECB(2, 37)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 20),
                                new CBC_QRCoderECB(6, 21)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 14),
                                new CBC_QRCoderECB(4, 15))));
    VERSION->Add(new CBC_QRCoderVersion(
        13, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 107)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(8, 37),
                                new CBC_QRCoderECB(1, 38)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(8, 20),
                                new CBC_QRCoderECB(4, 21)),
        new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(12, 11),
                                new CBC_QRCoderECB(4, 12))));
    VERSION->Add(new CBC_QRCoderVersion(
        14, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 115),
                                    new CBC_QRCoderECB(1, 116)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 40),
                                new CBC_QRCoderECB(5, 41)),
        new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(11, 16),
                                new CBC_QRCoderECB(5, 17)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
                                new CBC_QRCoderECB(5, 13))));
    VERSION->Add(new CBC_QRCoderVersion(
        15, new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(5, 87),
                                    new CBC_QRCoderECB(1, 88)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 41),
                                new CBC_QRCoderECB(5, 42)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 24),
                                new CBC_QRCoderECB(7, 25)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
                                new CBC_QRCoderECB(7, 13))));
    VERSION->Add(new CBC_QRCoderVersion(
        16, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 98),
                                    new CBC_QRCoderECB(1, 99)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 45),
                                new CBC_QRCoderECB(3, 46)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(15, 19),
                                new CBC_QRCoderECB(2, 20)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 15),
                                new CBC_QRCoderECB(13, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        17, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 107),
                                    new CBC_QRCoderECB(5, 108)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
                                new CBC_QRCoderECB(1, 47)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 22),
                                new CBC_QRCoderECB(15, 23)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
                                new CBC_QRCoderECB(17, 15))));
    VERSION->Add(new CBC_QRCoderVersion(
        18, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 120),
                                    new CBC_QRCoderECB(1, 121)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 43),
                                new CBC_QRCoderECB(4, 44)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
                                new CBC_QRCoderECB(1, 23)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
                                new CBC_QRCoderECB(19, 15))));
    VERSION->Add(new CBC_QRCoderVersion(
        19, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 113),
                                    new CBC_QRCoderECB(4, 114)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 44),
                                new CBC_QRCoderECB(11, 45)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 21),
                                new CBC_QRCoderECB(4, 22)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 13),
                                new CBC_QRCoderECB(16, 14))));
    VERSION->Add(new CBC_QRCoderVersion(
        20, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 107),
                                    new CBC_QRCoderECB(5, 108)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 41),
                                new CBC_QRCoderECB(13, 42)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
                                new CBC_QRCoderECB(5, 25)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(15, 15),
                                new CBC_QRCoderECB(10, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        21, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 116),
                                    new CBC_QRCoderECB(4, 117)),
        new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 42)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
                                new CBC_QRCoderECB(6, 23)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 16),
                                new CBC_QRCoderECB(6, 17))));
    VERSION->Add(new CBC_QRCoderVersion(
        22, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 111),
                                    new CBC_QRCoderECB(7, 112)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 46)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
                                new CBC_QRCoderECB(16, 25)),
        new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(34, 13))));
    VERSION->Add(new CBC_QRCoderVersion(
        23, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 121),
                                    new CBC_QRCoderECB(5, 122)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 47),
                                new CBC_QRCoderECB(14, 48)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
                                new CBC_QRCoderECB(14, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(16, 15),
                                new CBC_QRCoderECB(14, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        24, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 117),
                                    new CBC_QRCoderECB(4, 118)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 45),
                                new CBC_QRCoderECB(14, 46)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
                                new CBC_QRCoderECB(16, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(30, 16),
                                new CBC_QRCoderECB(2, 17))));
    VERSION->Add(new CBC_QRCoderVersion(
        25, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(8, 106),
                                    new CBC_QRCoderECB(4, 107)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(8, 47),
                                new CBC_QRCoderECB(13, 48)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
                                new CBC_QRCoderECB(22, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
                                new CBC_QRCoderECB(13, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        26, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 114),
                                    new CBC_QRCoderECB(2, 115)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 46),
                                new CBC_QRCoderECB(4, 47)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(28, 22),
                                new CBC_QRCoderECB(6, 23)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(33, 16),
                                new CBC_QRCoderECB(4, 17))));
    VERSION->Add(new CBC_QRCoderVersion(
        27, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 122),
                                    new CBC_QRCoderECB(4, 123)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(22, 45),
                                new CBC_QRCoderECB(3, 46)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 23),
                                new CBC_QRCoderECB(26, 24)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 15),
                                new CBC_QRCoderECB(28, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        28, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 117),
                                    new CBC_QRCoderECB(10, 118)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 45),
                                new CBC_QRCoderECB(23, 46)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 24),
                                new CBC_QRCoderECB(31, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
                                new CBC_QRCoderECB(31, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        29, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 116),
                                    new CBC_QRCoderECB(7, 117)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(21, 45),
                                new CBC_QRCoderECB(7, 46)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 23),
                                new CBC_QRCoderECB(37, 24)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
                                new CBC_QRCoderECB(26, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        30, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 115),
                                    new CBC_QRCoderECB(10, 116)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 47),
                                new CBC_QRCoderECB(10, 48)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
                                new CBC_QRCoderECB(25, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
                                new CBC_QRCoderECB(25, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        31, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
                                    new CBC_QRCoderECB(3, 116)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 46),
                                new CBC_QRCoderECB(29, 47)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 24),
                                new CBC_QRCoderECB(1, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
                                new CBC_QRCoderECB(28, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        32, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
                                new CBC_QRCoderECB(23, 47)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 24),
                                new CBC_QRCoderECB(35, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
                                new CBC_QRCoderECB(35, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        33, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115),
                                    new CBC_QRCoderECB(1, 116)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
                                new CBC_QRCoderECB(21, 47)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(29, 24),
                                new CBC_QRCoderECB(19, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
                                new CBC_QRCoderECB(46, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        34, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
                                    new CBC_QRCoderECB(6, 116)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
                                new CBC_QRCoderECB(23, 47)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(44, 24),
                                new CBC_QRCoderECB(7, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(59, 16),
                                new CBC_QRCoderECB(1, 17))));
    VERSION->Add(new CBC_QRCoderVersion(
        35, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 121),
                                    new CBC_QRCoderECB(7, 122)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(12, 47),
                                new CBC_QRCoderECB(26, 48)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(39, 24),
                                new CBC_QRCoderECB(14, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
                                new CBC_QRCoderECB(41, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        36, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 121),
                                    new CBC_QRCoderECB(14, 122)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 47),
                                new CBC_QRCoderECB(34, 48)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(46, 24),
                                new CBC_QRCoderECB(10, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 15),
                                new CBC_QRCoderECB(64, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        37, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 122),
                                    new CBC_QRCoderECB(4, 123)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(29, 46),
                                new CBC_QRCoderECB(14, 47)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(49, 24),
                                new CBC_QRCoderECB(10, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(24, 15),
                                new CBC_QRCoderECB(46, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        38, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 122),
                                    new CBC_QRCoderECB(18, 123)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(13, 46),
                                new CBC_QRCoderECB(32, 47)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(48, 24),
                                new CBC_QRCoderECB(14, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 15),
                                new CBC_QRCoderECB(32, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        39, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 117),
                                    new CBC_QRCoderECB(4, 118)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(40, 47),
                                new CBC_QRCoderECB(7, 48)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(43, 24),
                                new CBC_QRCoderECB(22, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 15),
                                new CBC_QRCoderECB(67, 16))));
    VERSION->Add(new CBC_QRCoderVersion(
        40, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 118),
                                    new CBC_QRCoderECB(6, 119)),
        new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(18, 47),
                                new CBC_QRCoderECB(31, 48)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(34, 24),
                                new CBC_QRCoderECB(34, 25)),
        new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 15),
                                new CBC_QRCoderECB(61, 16))));
  }
  if (versionNumber < 1 || versionNumber > 40) {
    e = BCExceptionIllegalArgument;
    if (e != BCExceptionNO)
      return nullptr;
  }
  return (*VERSION)[versionNumber - 1];
}

void CBC_QRCoderVersion::Destroy() {
  for (int32_t i = 0; i < VERSION->GetSize(); i++)
    delete (*VERSION)[i];
  VERSION->RemoveAll();
}
