{"version":3,"sources":["jsdelivr-header.js","/gh/ushelp/EasyQRCodeJS@4.6.2/src/easy.qrcode.js"],"names":[],"mappings":"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,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,IAAK,KACT,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,IACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,IACnB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,IACT,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,IACT,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,IACT,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,KACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,IAAK,KACV,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,IACpB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,KACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,KACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,IACpB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IACrB,CAAC,EAAG,GAAI,GAAI,GA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","file":"/gh/ushelp/EasyQRCodeJS@4.6.2/src/easy.qrcode.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/ushelp/EasyQRCodeJS@4.6.2/src/easy.qrcode.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\n * EasyQRCodeJS\n *\n * Cross-browser QRCode generator for pure javascript. Support Canvas, SVG and Table drawing methods. Support Dot style, Logo, Background image, Colorful, Title etc. settings. Support Angular, Vue.js, React, Next.js, Svelte framework. Support binary(hex) data mode.(Running with DOM on client side)\n *\n * Version 4.6.2\n *\n * @author [ inthinkcolor@gmail.com ]\n *\n * @see https://github.com/ushelp/EasyQRCodeJS\n * @see http://www.easyproject.cn/easyqrcodejs/tryit.html\n * @see https://github.com/ushelp/EasyQRCodeJS-NodeJS\n *\n * Copyright 2017 Ray, EasyProject\n * Released under the MIT license\n *\n * [Support AMD, CMD, CommonJS/Node.js]\n *\n */\n;(function () {\n  \"use strict\";\n\n  var undefined;\n\n  var freeGlobal =\n    typeof global == \"object\" && global && global.Object === Object && global;\n\n  var freeSelf =\n    typeof self == \"object\" && self && self.Object === Object && self;\n\n  var root = freeGlobal || freeSelf || Function(\"return this\")();\n\n  var freeExports =\n    typeof exports == \"object\" && exports && !exports.nodeType && exports;\n\n  var freeModule =\n    freeExports &&\n    typeof module == \"object\" &&\n    module &&\n    !module.nodeType &&\n    module;\n\n  var _QRCode = root.QRCode;\n\n  var QRCode;\n\n  function QR8bitByte(data, binary, utf8WithoutBOM) {\n    this.mode = QRMode.MODE_8BIT_BYTE;\n    this.data = data;\n    this.parsedData = [];\n\n    function toUTF8Array(str) {\n      var utf8 = [];\n      for (var i = 0; i < str.length; i++) {\n        var charcode = str.charCodeAt(i);\n        if (charcode < 0x80) utf8.push(charcode);\n        else if (charcode < 0x800) {\n          utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));\n        } else if (charcode < 0xd800 || charcode >= 0xe000) {\n          utf8.push(\n            0xe0 | (charcode >> 12),\n            0x80 | ((charcode >> 6) & 0x3f),\n            0x80 | (charcode & 0x3f)\n          );\n        } else {\n          i++;\n          charcode =\n            0x10000 +\n            (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n          utf8.push(\n            0xf0 | (charcode >> 18),\n            0x80 | ((charcode >> 12) & 0x3f),\n            0x80 | ((charcode >> 6) & 0x3f),\n            0x80 | (charcode & 0x3f)\n          );\n        }\n      }\n      return utf8;\n    }\n\n    if (binary) {\n      for (var i = 0, l = this.data.length; i < l; i++) {\n        var byteArray = [];\n        var code = this.data.charCodeAt(i);\n        byteArray[0] = code;\n        this.parsedData.push(byteArray);\n      }\n      this.parsedData = Array.prototype.concat.apply([], this.parsedData);\n    } else {\n      this.parsedData = toUTF8Array(data);\n    }\n\n    this.parsedData = Array.prototype.concat.apply([], this.parsedData);\n    if (!utf8WithoutBOM && this.parsedData.length != this.data.length) {\n      this.parsedData.unshift(191);\n      this.parsedData.unshift(187);\n      this.parsedData.unshift(239);\n    }\n  }\n\n  QR8bitByte.prototype = {\n    getLength: function (buffer) {\n      return this.parsedData.length;\n    },\n    write: function (buffer) {\n      for (var i = 0, l = this.parsedData.length; i < l; i++) {\n        buffer.put(this.parsedData[i], 8);\n      }\n    },\n  };\n\n  function QRCodeModel(typeNumber, errorCorrectLevel) {\n    this.typeNumber = typeNumber;\n    this.errorCorrectLevel = errorCorrectLevel;\n    this.modules = null;\n    this.moduleCount = 0;\n    this.dataCache = null;\n    this.dataList = [];\n  }\n\n  QRCodeModel.prototype = {\n    addData: function (data, binary, utf8WithoutBOM) {\n      var newData = new QR8bitByte(data, binary, utf8WithoutBOM);\n      this.dataList.push(newData);\n      this.dataCache = null;\n    },\n    isDark: function (row, col) {\n      if (\n        row < 0 ||\n        this.moduleCount <= row ||\n        col < 0 ||\n        this.moduleCount <= col\n      ) {\n        throw new Error(row + \",\" + col);\n      }\n      return this.modules[row][col][0];\n    },\n    getEye: function (row, col) {\n      if (\n        row < 0 ||\n        this.moduleCount <= row ||\n        col < 0 ||\n        this.moduleCount <= col\n      ) {\n        throw new Error(row + \",\" + col);\n      }\n\n      var block = this.modules[row][col]; // [isDark(ture/false), EyeOuterOrInner(O/I), Position(TL/TR/BL/A) ]\n\n      if (block[1]) {\n        var type = \"P\" + block[1] + \"_\" + block[2]; //PO_TL, PI_TL, PO_TR, PI_TR, PO_BL, PI_BL\n        if (block[2] == \"A\") {\n          type = \"A\" + block[1]; // AI, AO\n        }\n\n        return {\n          isDark: block[0],\n          type: type,\n        };\n      } else {\n        return null;\n      }\n    },\n    getModuleCount: function () {\n      return this.moduleCount;\n    },\n    make: function () {\n      this.makeImpl(false, this.getBestMaskPattern());\n    },\n    makeImpl: function (test, maskPattern) {\n      this.moduleCount = this.typeNumber * 4 + 17;\n      this.modules = new Array(this.moduleCount);\n      for (var row = 0; row < this.moduleCount; row++) {\n        this.modules[row] = new Array(this.moduleCount);\n        for (var col = 0; col < this.moduleCount; col++) {\n          this.modules[row][col] = []; // [isDark(ture/false), EyeOuterOrInner(O/I), Position(TL/TR/BL) ]\n        }\n      }\n      this.setupPositionProbePattern(0, 0, \"TL\"); // TopLeft, TL\n      this.setupPositionProbePattern(this.moduleCount - 7, 0, \"BL\"); // BotoomLeft, BL\n      this.setupPositionProbePattern(0, this.moduleCount - 7, \"TR\"); // TopRight, TR\n      this.setupPositionAdjustPattern(\"A\"); // Alignment, A\n      this.setupTimingPattern();\n      this.setupTypeInfo(test, maskPattern);\n      if (this.typeNumber >= 7) {\n        this.setupTypeNumber(test);\n      }\n      if (this.dataCache == null) {\n        this.dataCache = QRCodeModel.createData(\n          this.typeNumber,\n          this.errorCorrectLevel,\n          this.dataList\n        );\n      }\n      this.mapData(this.dataCache, maskPattern);\n    },\n    setupPositionProbePattern: function (row, col, posName) {\n      for (var r = -1; r <= 7; r++) {\n        if (row + r <= -1 || this.moduleCount <= row + r) continue;\n        for (var c = -1; c <= 7; c++) {\n          if (col + c <= -1 || this.moduleCount <= col + c) continue;\n          if (\n            (0 <= r && r <= 6 && (c == 0 || c == 6)) ||\n            (0 <= c && c <= 6 && (r == 0 || r == 6)) ||\n            (2 <= r && r <= 4 && 2 <= c && c <= 4)\n          ) {\n            this.modules[row + r][col + c][0] = true;\n\n            this.modules[row + r][col + c][2] = posName; // Position\n            if (r == -0 || c == -0 || r == 6 || c == 6) {\n              this.modules[row + r][col + c][1] = \"O\"; // Position Outer\n            } else {\n              this.modules[row + r][col + c][1] = \"I\"; // Position Inner\n            }\n          } else {\n            this.modules[row + r][col + c][0] = false;\n          }\n        }\n      }\n    },\n    getBestMaskPattern: function () {\n      var minLostPoint = 0;\n      var pattern = 0;\n      for (var i = 0; i < 8; i++) {\n        this.makeImpl(true, i);\n        var lostPoint = QRUtil.getLostPoint(this);\n        if (i == 0 || minLostPoint > lostPoint) {\n          minLostPoint = lostPoint;\n          pattern = i;\n        }\n      }\n      return pattern;\n    },\n    createMovieClip: function (target_mc, instance_name, depth) {\n      var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n      var cs = 1;\n      this.make();\n      for (var row = 0; row < this.modules.length; row++) {\n        var y = row * cs;\n        for (var col = 0; col < this.modules[row].length; col++) {\n          var x = col * cs;\n          var dark = this.modules[row][col][0];\n          if (dark) {\n            qr_mc.beginFill(0, 100);\n            qr_mc.moveTo(x, y);\n            qr_mc.lineTo(x + cs, y);\n            qr_mc.lineTo(x + cs, y + cs);\n            qr_mc.lineTo(x, y + cs);\n            qr_mc.endFill();\n          }\n        }\n      }\n      return qr_mc;\n    },\n    setupTimingPattern: function () {\n      for (var r = 8; r < this.moduleCount - 8; r++) {\n        if (this.modules[r][6][0] != null) {\n          continue;\n        }\n        this.modules[r][6][0] = r % 2 == 0;\n      }\n      for (var c = 8; c < this.moduleCount - 8; c++) {\n        if (this.modules[6][c][0] != null) {\n          continue;\n        }\n        this.modules[6][c][0] = c % 2 == 0;\n      }\n    },\n    setupPositionAdjustPattern: function (posName) {\n      var pos = QRUtil.getPatternPosition(this.typeNumber);\n      for (var i = 0; i < pos.length; i++) {\n        for (var j = 0; j < pos.length; j++) {\n          var row = pos[i];\n          var col = pos[j];\n          if (this.modules[row][col][0] != null) {\n            continue;\n          }\n          for (var r = -2; r <= 2; r++) {\n            for (var c = -2; c <= 2; c++) {\n              if (\n                r == -2 ||\n                r == 2 ||\n                c == -2 ||\n                c == 2 ||\n                (r == 0 && c == 0)\n              ) {\n                this.modules[row + r][col + c][0] = true;\n                this.modules[row + r][col + c][2] = posName; // Position\n                if (r == -2 || c == -2 || r == 2 || c == 2) {\n                  this.modules[row + r][col + c][1] = \"O\"; // Position Outer\n                } else {\n                  this.modules[row + r][col + c][1] = \"I\"; // Position Inner\n                }\n              } else {\n                this.modules[row + r][col + c][0] = false;\n              }\n            }\n          }\n        }\n      }\n    },\n    setupTypeNumber: function (test) {\n      var bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n      for (var i = 0; i < 18; i++) {\n        var mod = !test && ((bits >> i) & 1) == 1;\n        this.modules[Math.floor(i / 3)][(i % 3) + this.moduleCount - 8 - 3][0] =\n          mod;\n      }\n      for (var i = 0; i < 18; i++) {\n        var mod = !test && ((bits >> i) & 1) == 1;\n        this.modules[(i % 3) + this.moduleCount - 8 - 3][Math.floor(i / 3)][0] =\n          mod;\n      }\n    },\n    setupTypeInfo: function (test, maskPattern) {\n      var data = (this.errorCorrectLevel << 3) | maskPattern;\n      var bits = QRUtil.getBCHTypeInfo(data);\n      for (var i = 0; i < 15; i++) {\n        var mod = !test && ((bits >> i) & 1) == 1;\n        if (i < 6) {\n          this.modules[i][8][0] = mod;\n        } else if (i < 8) {\n          this.modules[i + 1][8][0] = mod;\n        } else {\n          this.modules[this.moduleCount - 15 + i][8][0] = mod;\n        }\n      }\n      for (var i = 0; i < 15; i++) {\n        var mod = !test && ((bits >> i) & 1) == 1;\n        if (i < 8) {\n          this.modules[8][this.moduleCount - i - 1][0] = mod;\n        } else if (i < 9) {\n          this.modules[8][15 - i - 1 + 1][0] = mod;\n        } else {\n          this.modules[8][15 - i - 1][0] = mod;\n        }\n      }\n      this.modules[this.moduleCount - 8][8][0] = !test;\n    },\n    mapData: function (data, maskPattern) {\n      var inc = -1;\n      var row = this.moduleCount - 1;\n      var bitIndex = 7;\n      var byteIndex = 0;\n      for (var col = this.moduleCount - 1; col > 0; col -= 2) {\n        if (col == 6) col--;\n        while (true) {\n          for (var c = 0; c < 2; c++) {\n            if (this.modules[row][col - c][0] == null) {\n              var dark = false;\n              if (byteIndex < data.length) {\n                dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;\n              }\n              var mask = QRUtil.getMask(maskPattern, row, col - c);\n              if (mask) {\n                dark = !dark;\n              }\n              this.modules[row][col - c][0] = dark;\n              bitIndex--;\n              if (bitIndex == -1) {\n                byteIndex++;\n                bitIndex = 7;\n              }\n            }\n          }\n          row += inc;\n          if (row < 0 || this.moduleCount <= row) {\n            row -= inc;\n            inc = -inc;\n            break;\n          }\n        }\n      }\n    },\n  };\n  QRCodeModel.PAD0 = 0xec;\n  QRCodeModel.PAD1 = 0x11;\n  QRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) {\n    var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n    var buffer = new QRBitBuffer();\n    for (var i = 0; i < dataList.length; i++) {\n      var data = dataList[i];\n      buffer.put(data.mode, 4);\n      buffer.put(\n        data.getLength(),\n        QRUtil.getLengthInBits(data.mode, typeNumber)\n      );\n      data.write(buffer);\n    }\n    var totalDataCount = 0;\n    for (var i = 0; i < rsBlocks.length; i++) {\n      totalDataCount += rsBlocks[i].dataCount;\n    }\n    if (buffer.getLengthInBits() > totalDataCount * 8) {\n      throw new Error(\n        \"code length overflow. (\" +\n          buffer.getLengthInBits() +\n          \">\" +\n          totalDataCount * 8 +\n          \")\"\n      );\n    }\n    if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n      buffer.put(0, 4);\n    }\n    while (buffer.getLengthInBits() % 8 != 0) {\n      buffer.putBit(false);\n    }\n    while (true) {\n      if (buffer.getLengthInBits() >= totalDataCount * 8) {\n        break;\n      }\n      buffer.put(QRCodeModel.PAD0, 8);\n      if (buffer.getLengthInBits() >= totalDataCount * 8) {\n        break;\n      }\n      buffer.put(QRCodeModel.PAD1, 8);\n    }\n    return QRCodeModel.createBytes(buffer, rsBlocks);\n  };\n  QRCodeModel.createBytes = function (buffer, rsBlocks) {\n    var offset = 0;\n    var maxDcCount = 0;\n    var maxEcCount = 0;\n    var dcdata = new Array(rsBlocks.length);\n    var ecdata = new Array(rsBlocks.length);\n    for (var r = 0; r < rsBlocks.length; r++) {\n      var dcCount = rsBlocks[r].dataCount;\n      var ecCount = rsBlocks[r].totalCount - dcCount;\n      maxDcCount = Math.max(maxDcCount, dcCount);\n      maxEcCount = Math.max(maxEcCount, ecCount);\n      dcdata[r] = new Array(dcCount);\n      for (var i = 0; i < dcdata[r].length; i++) {\n        dcdata[r][i] = 0xff & buffer.buffer[i + offset];\n      }\n      offset += dcCount;\n      var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n      var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);\n      var modPoly = rawPoly.mod(rsPoly);\n      ecdata[r] = new Array(rsPoly.getLength() - 1);\n      for (var i = 0; i < ecdata[r].length; i++) {\n        var modIndex = i + modPoly.getLength() - ecdata[r].length;\n        ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;\n      }\n    }\n    var totalCodeCount = 0;\n    for (var i = 0; i < rsBlocks.length; i++) {\n      totalCodeCount += rsBlocks[i].totalCount;\n    }\n    var data = new Array(totalCodeCount);\n    var index = 0;\n    for (var i = 0; i < maxDcCount; i++) {\n      for (var r = 0; r < rsBlocks.length; r++) {\n        if (i < dcdata[r].length) {\n          data[index++] = dcdata[r][i];\n        }\n      }\n    }\n    for (var i = 0; i < maxEcCount; i++) {\n      for (var r = 0; r < rsBlocks.length; r++) {\n        if (i < ecdata[r].length) {\n          data[index++] = ecdata[r][i];\n        }\n      }\n    }\n    return data;\n  };\n  var QRMode = {\n    MODE_NUMBER: 1 << 0,\n    MODE_ALPHA_NUM: 1 << 1,\n    MODE_8BIT_BYTE: 1 << 2,\n    MODE_KANJI: 1 << 3,\n  };\n  var QRErrorCorrectLevel = {\n    L: 1,\n    M: 0,\n    Q: 3,\n    H: 2,\n  };\n  var QRMaskPattern = {\n    PATTERN000: 0,\n    PATTERN001: 1,\n    PATTERN010: 2,\n    PATTERN011: 3,\n    PATTERN100: 4,\n    PATTERN101: 5,\n    PATTERN110: 6,\n    PATTERN111: 7,\n  };\n  var QRUtil = {\n    PATTERN_POSITION_TABLE: [\n      [],\n      [6, 18],\n      [6, 22],\n      [6, 26],\n      [6, 30],\n      [6, 34],\n      [6, 22, 38],\n      [6, 24, 42],\n      [6, 26, 46],\n      [6, 28, 50],\n      [6, 30, 54],\n      [6, 32, 58],\n      [6, 34, 62],\n      [6, 26, 46, 66],\n      [6, 26, 48, 70],\n      [6, 26, 50, 74],\n      [6, 30, 54, 78],\n      [6, 30, 56, 82],\n      [6, 30, 58, 86],\n      [6, 34, 62, 90],\n      [6, 28, 50, 72, 94],\n      [6, 26, 50, 74, 98],\n      [6, 30, 54, 78, 102],\n      [6, 28, 54, 80, 106],\n      [6, 32, 58, 84, 110],\n      [6, 30, 58, 86, 114],\n      [6, 34, 62, 90, 118],\n      [6, 26, 50, 74, 98, 122],\n      [6, 30, 54, 78, 102, 126],\n      [6, 26, 52, 78, 104, 130],\n      [6, 30, 56, 82, 108, 134],\n      [6, 34, 60, 86, 112, 138],\n      [6, 30, 58, 86, 114, 142],\n      [6, 34, 62, 90, 118, 146],\n      [6, 30, 54, 78, 102, 126, 150],\n      [6, 24, 50, 76, 102, 128, 154],\n      [6, 28, 54, 80, 106, 132, 158],\n      [6, 32, 58, 84, 110, 136, 162],\n      [6, 26, 54, 82, 110, 138, 166],\n      [6, 30, 58, 86, 114, 142, 170],\n    ],\n    G15:\n      (1 << 10) |\n      (1 << 8) |\n      (1 << 5) |\n      (1 << 4) |\n      (1 << 2) |\n      (1 << 1) |\n      (1 << 0),\n    G18:\n      (1 << 12) |\n      (1 << 11) |\n      (1 << 10) |\n      (1 << 9) |\n      (1 << 8) |\n      (1 << 5) |\n      (1 << 2) |\n      (1 << 0),\n    G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),\n    getBCHTypeInfo: function (data) {\n      var d = data << 10;\n      while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n        d ^=\n          QRUtil.G15 <<\n          (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));\n      }\n      return ((data << 10) | d) ^ QRUtil.G15_MASK;\n    },\n    getBCHTypeNumber: function (data) {\n      var d = data << 12;\n      while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n        d ^=\n          QRUtil.G18 <<\n          (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));\n      }\n      return (data << 12) | d;\n    },\n    getBCHDigit: function (data) {\n      var digit = 0;\n      while (data != 0) {\n        digit++;\n        data >>>= 1;\n      }\n      return digit;\n    },\n    getPatternPosition: function (typeNumber) {\n      return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n    },\n    getMask: function (maskPattern, i, j) {\n      switch (maskPattern) {\n        case QRMaskPattern.PATTERN000:\n          return (i + j) % 2 == 0;\n        case QRMaskPattern.PATTERN001:\n          return i % 2 == 0;\n        case QRMaskPattern.PATTERN010:\n          return j % 3 == 0;\n        case QRMaskPattern.PATTERN011:\n          return (i + j) % 3 == 0;\n        case QRMaskPattern.PATTERN100:\n          return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;\n        case QRMaskPattern.PATTERN101:\n          return ((i * j) % 2) + ((i * j) % 3) == 0;\n        case QRMaskPattern.PATTERN110:\n          return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;\n        case QRMaskPattern.PATTERN111:\n          return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;\n        default:\n          throw new Error(\"bad maskPattern:\" + maskPattern);\n      }\n    },\n    getErrorCorrectPolynomial: function (errorCorrectLength) {\n      var a = new QRPolynomial([1], 0);\n      for (var i = 0; i < errorCorrectLength; i++) {\n        a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));\n      }\n      return a;\n    },\n    getLengthInBits: function (mode, type) {\n      if (1 <= type && type < 10) {\n        switch (mode) {\n          case QRMode.MODE_NUMBER:\n            return 10;\n          case QRMode.MODE_ALPHA_NUM:\n            return 9;\n          case QRMode.MODE_8BIT_BYTE:\n            return 8;\n          case QRMode.MODE_KANJI:\n            return 8;\n          default:\n            throw new Error(\"mode:\" + mode);\n        }\n      } else if (type < 27) {\n        switch (mode) {\n          case QRMode.MODE_NUMBER:\n            return 12;\n          case QRMode.MODE_ALPHA_NUM:\n            return 11;\n          case QRMode.MODE_8BIT_BYTE:\n            return 16;\n          case QRMode.MODE_KANJI:\n            return 10;\n          default:\n            throw new Error(\"mode:\" + mode);\n        }\n      } else if (type < 41) {\n        switch (mode) {\n          case QRMode.MODE_NUMBER:\n            return 14;\n          case QRMode.MODE_ALPHA_NUM:\n            return 13;\n          case QRMode.MODE_8BIT_BYTE:\n            return 16;\n          case QRMode.MODE_KANJI:\n            return 12;\n          default:\n            throw new Error(\"mode:\" + mode);\n        }\n      } else {\n        throw new Error(\"type:\" + type);\n      }\n    },\n    getLostPoint: function (qrCode) {\n      var moduleCount = qrCode.getModuleCount();\n      var lostPoint = 0;\n      for (var row = 0; row < moduleCount; row++) {\n        for (var col = 0; col < moduleCount; col++) {\n          var sameCount = 0;\n          var dark = qrCode.isDark(row, col);\n          for (var r = -1; r <= 1; r++) {\n            if (row + r < 0 || moduleCount <= row + r) {\n              continue;\n            }\n            for (var c = -1; c <= 1; c++) {\n              if (col + c < 0 || moduleCount <= col + c) {\n                continue;\n              }\n              if (r == 0 && c == 0) {\n                continue;\n              }\n              if (dark == qrCode.isDark(row + r, col + c)) {\n                sameCount++;\n              }\n            }\n          }\n          if (sameCount > 5) {\n            lostPoint += 3 + sameCount - 5;\n          }\n        }\n      }\n      for (var row = 0; row < moduleCount - 1; row++) {\n        for (var col = 0; col < moduleCount - 1; col++) {\n          var count = 0;\n          if (qrCode.isDark(row, col)) count++;\n          if (qrCode.isDark(row + 1, col)) count++;\n          if (qrCode.isDark(row, col + 1)) count++;\n          if (qrCode.isDark(row + 1, col + 1)) count++;\n          if (count == 0 || count == 4) {\n            lostPoint += 3;\n          }\n        }\n      }\n      for (var row = 0; row < moduleCount; row++) {\n        for (var col = 0; col < moduleCount - 6; col++) {\n          if (\n            qrCode.isDark(row, col) &&\n            !qrCode.isDark(row, col + 1) &&\n            qrCode.isDark(row, col + 2) &&\n            qrCode.isDark(row, col + 3) &&\n            qrCode.isDark(row, col + 4) &&\n            !qrCode.isDark(row, col + 5) &&\n            qrCode.isDark(row, col + 6)\n          ) {\n            lostPoint += 40;\n          }\n        }\n      }\n      for (var col = 0; col < moduleCount; col++) {\n        for (var row = 0; row < moduleCount - 6; row++) {\n          if (\n            qrCode.isDark(row, col) &&\n            !qrCode.isDark(row + 1, col) &&\n            qrCode.isDark(row + 2, col) &&\n            qrCode.isDark(row + 3, col) &&\n            qrCode.isDark(row + 4, col) &&\n            !qrCode.isDark(row + 5, col) &&\n            qrCode.isDark(row + 6, col)\n          ) {\n            lostPoint += 40;\n          }\n        }\n      }\n      var darkCount = 0;\n      for (var col = 0; col < moduleCount; col++) {\n        for (var row = 0; row < moduleCount; row++) {\n          if (qrCode.isDark(row, col)) {\n            darkCount++;\n          }\n        }\n      }\n      var ratio =\n        Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n      lostPoint += ratio * 10;\n      return lostPoint;\n    },\n  };\n  var QRMath = {\n    glog: function (n) {\n      if (n < 1) {\n        throw new Error(\"glog(\" + n + \")\");\n      }\n      return QRMath.LOG_TABLE[n];\n    },\n    gexp: function (n) {\n      while (n < 0) {\n        n += 255;\n      }\n      while (n >= 256) {\n        n -= 255;\n      }\n      return QRMath.EXP_TABLE[n];\n    },\n    EXP_TABLE: new Array(256),\n    LOG_TABLE: new Array(256),\n  };\n  for (var i = 0; i < 8; i++) {\n    QRMath.EXP_TABLE[i] = 1 << i;\n  }\n  for (var i = 8; i < 256; i++) {\n    QRMath.EXP_TABLE[i] =\n      QRMath.EXP_TABLE[i - 4] ^\n      QRMath.EXP_TABLE[i - 5] ^\n      QRMath.EXP_TABLE[i - 6] ^\n      QRMath.EXP_TABLE[i - 8];\n  }\n  for (var i = 0; i < 255; i++) {\n    QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n  }\n\n  function QRPolynomial(num, shift) {\n    if (num.length == undefined) {\n      throw new Error(num.length + \"/\" + shift);\n    }\n    var offset = 0;\n    while (offset < num.length && num[offset] == 0) {\n      offset++;\n    }\n    this.num = new Array(num.length - offset + shift);\n    for (var i = 0; i < num.length - offset; i++) {\n      this.num[i] = num[i + offset];\n    }\n  }\n\n  QRPolynomial.prototype = {\n    get: function (index) {\n      return this.num[index];\n    },\n    getLength: function () {\n      return this.num.length;\n    },\n    multiply: function (e) {\n      var num = new Array(this.getLength() + e.getLength() - 1);\n      for (var i = 0; i < this.getLength(); i++) {\n        for (var j = 0; j < e.getLength(); j++) {\n          num[i + j] ^= QRMath.gexp(\n            QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))\n          );\n        }\n      }\n      return new QRPolynomial(num, 0);\n    },\n    mod: function (e) {\n      if (this.getLength() - e.getLength() < 0) {\n        return this;\n      }\n      var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));\n      var num = new Array(this.getLength());\n      for (var i = 0; i < this.getLength(); i++) {\n        num[i] = this.get(i);\n      }\n      for (var i = 0; i < e.getLength(); i++) {\n        num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);\n      }\n      return new QRPolynomial(num, 0).mod(e);\n    },\n  };\n\n  function QRRSBlock(totalCount, dataCount) {\n    this.totalCount = totalCount;\n    this.dataCount = dataCount;\n  }\n\n  QRRSBlock.RS_BLOCK_TABLE = [\n    [1, 26, 19],\n    [1, 26, 16],\n    [1, 26, 13],\n    [1, 26, 9],\n    [1, 44, 34],\n    [1, 44, 28],\n    [1, 44, 22],\n    [1, 44, 16],\n    [1, 70, 55],\n    [1, 70, 44],\n    [2, 35, 17],\n    [2, 35, 13],\n    [1, 100, 80],\n    [2, 50, 32],\n    [2, 50, 24],\n    [4, 25, 9],\n    [1, 134, 108],\n    [2, 67, 43],\n    [2, 33, 15, 2, 34, 16],\n    [2, 33, 11, 2, 34, 12],\n    [2, 86, 68],\n    [4, 43, 27],\n    [4, 43, 19],\n    [4, 43, 15],\n    [2, 98, 78],\n    [4, 49, 31],\n    [2, 32, 14, 4, 33, 15],\n    [4, 39, 13, 1, 40, 14],\n    [2, 121, 97],\n    [2, 60, 38, 2, 61, 39],\n    [4, 40, 18, 2, 41, 19],\n    [4, 40, 14, 2, 41, 15],\n    [2, 146, 116],\n    [3, 58, 36, 2, 59, 37],\n    [4, 36, 16, 4, 37, 17],\n    [4, 36, 12, 4, 37, 13],\n    [2, 86, 68, 2, 87, 69],\n    [4, 69, 43, 1, 70, 44],\n    [6, 43, 19, 2, 44, 20],\n    [6, 43, 15, 2, 44, 16],\n    [4, 101, 81],\n    [1, 80, 50, 4, 81, 51],\n    [4, 50, 22, 4, 51, 23],\n    [3, 36, 12, 8, 37, 13],\n    [2, 116, 92, 2, 117, 93],\n    [6, 58, 36, 2, 59, 37],\n    [4, 46, 20, 6, 47, 21],\n    [7, 42, 14, 4, 43, 15],\n    [4, 133, 107],\n    [8, 59, 37, 1, 60, 38],\n    [8, 44, 20, 4, 45, 21],\n    [12, 33, 11, 4, 34, 12],\n    [3, 145, 115, 1, 146, 116],\n    [4, 64, 40, 5, 65, 41],\n    [11, 36, 16, 5, 37, 17],\n    [11, 36, 12, 5, 37, 13],\n    [5, 109, 87, 1, 110, 88],\n    [5, 65, 41, 5, 66, 42],\n    [5, 54, 24, 7, 55, 25],\n    [11, 36, 12, 7, 37, 13],\n    [5, 122, 98, 1, 123, 99],\n    [7, 73, 45, 3, 74, 46],\n    [15, 43, 19, 2, 44, 20],\n    [3, 45, 15, 13, 46, 16],\n    [1, 135, 107, 5, 136, 108],\n    [10, 74, 46, 1, 75, 47],\n    [1, 50, 22, 15, 51, 23],\n    [2, 42, 14, 17, 43, 15],\n    [5, 150, 120, 1, 151, 121],\n    [9, 69, 43, 4, 70, 44],\n    [17, 50, 22, 1, 51, 23],\n    [2, 42, 14, 19, 43, 15],\n    [3, 141, 113, 4, 142, 114],\n    [3, 70, 44, 11, 71, 45],\n    [17, 47, 21, 4, 48, 22],\n    [9, 39, 13, 16, 40, 14],\n    [3, 135, 107, 5, 136, 108],\n    [3, 67, 41, 13, 68, 42],\n    [15, 54, 24, 5, 55, 25],\n    [15, 43, 15, 10, 44, 16],\n    [4, 144, 116, 4, 145, 117],\n    [17, 68, 42],\n    [17, 50, 22, 6, 51, 23],\n    [19, 46, 16, 6, 47, 17],\n    [2, 139, 111, 7, 140, 112],\n    [17, 74, 46],\n    [7, 54, 24, 16, 55, 25],\n    [34, 37, 13],\n    [4, 151, 121, 5, 152, 122],\n    [4, 75, 47, 14, 76, 48],\n    [11, 54, 24, 14, 55, 25],\n    [16, 45, 15, 14, 46, 16],\n    [6, 147, 117, 4, 148, 118],\n    [6, 73, 45, 14, 74, 46],\n    [11, 54, 24, 16, 55, 25],\n    [30, 46, 16, 2, 47, 17],\n    [8, 132, 106, 4, 133, 107],\n    [8, 75, 47, 13, 76, 48],\n    [7, 54, 24, 22, 55, 25],\n    [22, 45, 15, 13, 46, 16],\n    [10, 142, 114, 2, 143, 115],\n    [19, 74, 46, 4, 75, 47],\n    [28, 50, 22, 6, 51, 23],\n    [33, 46, 16, 4, 47, 17],\n    [8, 152, 122, 4, 153, 123],\n    [22, 73, 45, 3, 74, 46],\n    [8, 53, 23, 26, 54, 24],\n    [12, 45, 15, 28, 46, 16],\n    [3, 147, 117, 10, 148, 118],\n    [3, 73, 45, 23, 74, 46],\n    [4, 54, 24, 31, 55, 25],\n    [11, 45, 15, 31, 46, 16],\n    [7, 146, 116, 7, 147, 117],\n    [21, 73, 45, 7, 74, 46],\n    [1, 53, 23, 37, 54, 24],\n    [19, 45, 15, 26, 46, 16],\n    [5, 145, 115, 10, 146, 116],\n    [19, 75, 47, 10, 76, 48],\n    [15, 54, 24, 25, 55, 25],\n    [23, 45, 15, 25, 46, 16],\n    [13, 145, 115, 3, 146, 116],\n    [2, 74, 46, 29, 75, 47],\n    [42, 54, 24, 1, 55, 25],\n    [23, 45, 15, 28, 46, 16],\n    [17, 145, 115],\n    [10, 74, 46, 23, 75, 47],\n    [10, 54, 24, 35, 55, 25],\n    [19, 45, 15, 35, 46, 16],\n    [17, 145, 115, 1, 146, 116],\n    [14, 74, 46, 21, 75, 47],\n    [29, 54, 24, 19, 55, 25],\n    [11, 45, 15, 46, 46, 16],\n    [13, 145, 115, 6, 146, 116],\n    [14, 74, 46, 23, 75, 47],\n    [44, 54, 24, 7, 55, 25],\n    [59, 46, 16, 1, 47, 17],\n    [12, 151, 121, 7, 152, 122],\n    [12, 75, 47, 26, 76, 48],\n    [39, 54, 24, 14, 55, 25],\n    [22, 45, 15, 41, 46, 16],\n    [6, 151, 121, 14, 152, 122],\n    [6, 75, 47, 34, 76, 48],\n    [46, 54, 24, 10, 55, 25],\n    [2, 45, 15, 64, 46, 16],\n    [17, 152, 122, 4, 153, 123],\n    [29, 74, 46, 14, 75, 47],\n    [49, 54, 24, 10, 55, 25],\n    [24, 45, 15, 46, 46, 16],\n    [4, 152, 122, 18, 153, 123],\n    [13, 74, 46, 32, 75, 47],\n    [48, 54, 24, 14, 55, 25],\n    [42, 45, 15, 32, 46, 16],\n    [20, 147, 117, 4, 148, 118],\n    [40, 75, 47, 7, 76, 48],\n    [43, 54, 24, 22, 55, 25],\n    [10, 45, 15, 67, 46, 16],\n    [19, 148, 118, 6, 149, 119],\n    [18, 75, 47, 31, 76, 48],\n    [34, 54, 24, 34, 55, 25],\n    [20, 45, 15, 61, 46, 16],\n  ];\n  QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {\n    var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n    if (rsBlock == undefined) {\n      throw new Error(\n        \"bad rs block @ typeNumber:\" +\n          typeNumber +\n          \"/errorCorrectLevel:\" +\n          errorCorrectLevel\n      );\n    }\n    var length = rsBlock.length / 3;\n    var list = [];\n    for (var i = 0; i < length; i++) {\n      var count = rsBlock[i * 3 + 0];\n      var totalCount = rsBlock[i * 3 + 1];\n      var dataCount = rsBlock[i * 3 + 2];\n      for (var j = 0; j < count; j++) {\n        list.push(new QRRSBlock(totalCount, dataCount));\n      }\n    }\n    return list;\n  };\n  QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {\n    switch (errorCorrectLevel) {\n      case QRErrorCorrectLevel.L:\n        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n      case QRErrorCorrectLevel.M:\n        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n      case QRErrorCorrectLevel.Q:\n        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n      case QRErrorCorrectLevel.H:\n        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n      default:\n        return undefined;\n    }\n  };\n\n  function QRBitBuffer() {\n    this.buffer = [];\n    this.length = 0;\n  }\n\n  QRBitBuffer.prototype = {\n    get: function (index) {\n      var bufIndex = Math.floor(index / 8);\n      return ((this.buffer[bufIndex] >>> (7 - (index % 8))) & 1) == 1;\n    },\n    put: function (num, length) {\n      for (var i = 0; i < length; i++) {\n        this.putBit(((num >>> (length - i - 1)) & 1) == 1);\n      }\n    },\n    getLengthInBits: function () {\n      return this.length;\n    },\n    putBit: function (bit) {\n      var bufIndex = Math.floor(this.length / 8);\n      if (this.buffer.length <= bufIndex) {\n        this.buffer.push(0);\n      }\n      if (bit) {\n        this.buffer[bufIndex] |= 0x80 >>> this.length % 8;\n      }\n      this.length++;\n    },\n  };\n  var QRCodeLimitLength = [\n    [17, 14, 11, 7],\n    [32, 26, 20, 14],\n    [53, 42, 32, 24],\n    [78, 62, 46, 34],\n    [106, 84, 60, 44],\n    [134, 106, 74, 58],\n    [154, 122, 86, 64],\n    [192, 152, 108, 84],\n    [230, 180, 130, 98],\n    [271, 213, 151, 119],\n    [321, 251, 177, 137],\n    [367, 287, 203, 155],\n    [425, 331, 241, 177],\n    [458, 362, 258, 194],\n    [520, 412, 292, 220],\n    [586, 450, 322, 250],\n    [644, 504, 364, 280],\n    [718, 560, 394, 310],\n    [792, 624, 442, 338],\n    [858, 666, 482, 382],\n    [929, 711, 509, 403],\n    [1003, 779, 565, 439],\n    [1091, 857, 611, 461],\n    [1171, 911, 661, 511],\n    [1273, 997, 715, 535],\n    [1367, 1059, 751, 593],\n    [1465, 1125, 805, 625],\n    [1528, 1190, 868, 658],\n    [1628, 1264, 908, 698],\n    [1732, 1370, 982, 742],\n    [1840, 1452, 1030, 790],\n    [1952, 1538, 1112, 842],\n    [2068, 1628, 1168, 898],\n    [2188, 1722, 1228, 958],\n    [2303, 1809, 1283, 983],\n    [2431, 1911, 1351, 1051],\n    [2563, 1989, 1423, 1093],\n    [2699, 2099, 1499, 1139],\n    [2809, 2213, 1579, 1219],\n    [2953, 2331, 1663, 1273],\n  ];\n\n  function _isSupportCanvas() {\n    return typeof CanvasRenderingContext2D != \"undefined\";\n  }\n\n  // android 2.x doesn't support Data-URI spec\n  function _getAndroid() {\n    var android = false;\n    var sAgent = navigator.userAgent;\n\n    if (/android/i.test(sAgent)) {\n      // android\n      android = true;\n      var aMat = sAgent.toString().match(/android ([0-9]\\.[0-9])/i);\n\n      if (aMat && aMat[1]) {\n        android = parseFloat(aMat[1]);\n      }\n    }\n\n    return android;\n  }\n\n  // Drawing in DOM by using Table tag\n  var Drawing = !_isSupportCanvas()\n    ? (function () {\n        var Drawing = function (el, htOption) {\n          this._el = el;\n          this._htOption = htOption;\n        };\n\n        /**\n         * Draw the QRCode\n         *\n         * @param {QRCode} oQRCode\n         */\n        Drawing.prototype.draw = function (oQRCode) {\n          var _htOption = this._htOption;\n          var _el = this._el;\n          var nCount = oQRCode.getModuleCount();\n          var nWidth = _htOption.width / nCount;\n          var nHeight = _htOption.height / nCount;\n\n          if (nWidth <= 1) {\n            nWidth = 1;\n          }\n          if (nHeight <= 1) {\n            nHeight = 1;\n          }\n\n          var calculatedWidth = nWidth * nCount;\n          var calculatedHeight = nHeight * nCount;\n\n          _htOption.heightWithTitle = calculatedHeight + _htOption.titleHeight;\n          _htOption.realHeight =\n            _htOption.heightWithTitle + _htOption.quietZone * 2;\n          _htOption.realWidth = calculatedWidth + _htOption.quietZone * 2;\n\n          var aHTML = [];\n\n          var divStyle = \"\";\n\n          var drawWidth = Math.round(nWidth * _htOption.dotScale);\n          var drawHeight = Math.round(nHeight * _htOption.dotScale);\n          if (drawWidth < 4) {\n            drawWidth = 4;\n            drawHeight = 4;\n          }\n\n          var nonRequiredColorDark = _htOption.colorDark;\n          var nonRequiredcolorLight = _htOption.colorLight;\n          if (_htOption.backgroundImage) {\n            if (_htOption.autoColor) {\n              _htOption.colorDark =\n                \"rgba(0, 0, 0, .6);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#99000000', EndColorStr='#99000000');\";\n              _htOption.colorLight =\n                \"rgba(255, 255, 255, .7);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#B2FFFFFF', EndColorStr='#B2FFFFFF');\";\n\n              // _htOption.colorDark=\"rgba(0, 0, 0, .6)\";\n              // _htOption.colorLight='rgba(255, 255, 255, .7)';\n            } else {\n              _htOption.colorLight = \"rgba(0,0,0,0)\";\n            }\n\n            var backgroundImageEle =\n              '<div style=\"display:inline-block; z-index:-10;position:absolute;\"><img src=\"' +\n              _htOption.backgroundImage +\n              '\" width=\"' +\n              (_htOption.width + _htOption.quietZone * 2) +\n              '\" height=\"' +\n              _htOption.realHeight +\n              '\" style=\"opacity:' +\n              _htOption.backgroundImageAlpha +\n              \";filter:alpha(opacity=\" +\n              _htOption.backgroundImageAlpha * 100 +\n              '); \"/></div>';\n            aHTML.push(backgroundImageEle);\n          }\n\n          if (_htOption.quietZone) {\n            divStyle =\n              \"display:inline-block; width:\" +\n              (_htOption.width + _htOption.quietZone * 2) +\n              \"px; height:\" +\n              (_htOption.width + _htOption.quietZone * 2) +\n              \"px;background:\" +\n              _htOption.quietZoneColor +\n              \"; text-align:center;\";\n          }\n          aHTML.push('<div style=\"font-size:0;' + divStyle + '\">');\n\n          aHTML.push(\n            '<table  style=\"font-size:0;border:0;border-collapse:collapse; margin-top:' +\n              _htOption.quietZone +\n              'px;\" border=\"0\" cellspacing=\"0\" cellspadding=\"0\" align=\"center\" valign=\"middle\">'\n          );\n          aHTML.push(\n            '<tr height=\"' +\n              _htOption.titleHeight +\n              '\" align=\"center\"><td style=\"border:0;border-collapse:collapse;margin:0;padding:0\" colspan=\"' +\n              nCount +\n              '\">'\n          );\n          if (_htOption.title) {\n            var c = _htOption.titleColor;\n            var f = _htOption.titleFont;\n            aHTML.push(\n              '<div style=\"width:100%;margin-top:' +\n                _htOption.titleTop +\n                \"px;color:\" +\n                c +\n                \";font:\" +\n                f +\n                \";background:\" +\n                _htOption.titleBackgroundColor +\n                '\">' +\n                _htOption.title +\n                \"</div>\"\n            );\n          }\n          if (_htOption.subTitle) {\n            aHTML.push(\n              '<div style=\"width:100%;margin-top:' +\n                (_htOption.subTitleTop - _htOption.titleTop) +\n                \"px;color:\" +\n                _htOption.subTitleColor +\n                \"; font:\" +\n                _htOption.subTitleFont +\n                '\">' +\n                _htOption.subTitle +\n                \"</div>\"\n            );\n          }\n          aHTML.push(\"</td></tr>\");\n          for (var row = 0; row < nCount; row++) {\n            aHTML.push(\n              '<tr style=\"border:0; padding:0; margin:0;\" height=\"7\">'\n            );\n\n            for (var col = 0; col < nCount; col++) {\n              var bIsDark = oQRCode.isDark(row, col);\n\n              var eye = oQRCode.getEye(row, col); // { isDark: true/false, type: PO_TL, PI_TL, PO_TR, PI_TR, PO_BL, PI_BL };\n\n              if (eye) {\n                // Is eye\n                bIsDark = eye.isDark;\n                var type = eye.type;\n\n                // PX_XX, PX, colorDark, colorLight\n                var eyeColorDark =\n                  _htOption[type] ||\n                  _htOption[type.substring(0, 2)] ||\n                  nonRequiredColorDark;\n                aHTML.push(\n                  '<td style=\"border:0;border-collapse:collapse;padding:0;margin:0;width:' +\n                    nWidth +\n                    \"px;height:\" +\n                    nHeight +\n                    'px;\">' +\n                    '<span style=\"width:' +\n                    nWidth +\n                    \"px;height:\" +\n                    nHeight +\n                    \"px;background-color:\" +\n                    (bIsDark ? eyeColorDark : nonRequiredcolorLight) +\n                    ';display:inline-block\"></span></td>'\n                );\n              } else {\n                // Timing Pattern\n                var nowDarkColor = _htOption.colorDark;\n                if (row == 6) {\n                  nowDarkColor =\n                    _htOption.timing_H ||\n                    _htOption.timing ||\n                    nonRequiredColorDark;\n                  aHTML.push(\n                    '<td style=\"border:0;border-collapse:collapse;padding:0;margin:0;width:' +\n                      nWidth +\n                      \"px;height:\" +\n                      nHeight +\n                      \"px;background-color:\" +\n                      (bIsDark ? nowDarkColor : nonRequiredcolorLight) +\n                      ';\"></td>'\n                  );\n                } else if (col == 6) {\n                  nowDarkColor =\n                    _htOption.timing_V ||\n                    _htOption.timing ||\n                    nonRequiredColorDark;\n\n                  aHTML.push(\n                    '<td style=\"border:0;border-collapse:collapse;padding:0;margin:0;width:' +\n                      nWidth +\n                      \"px;height:\" +\n                      nHeight +\n                      \"px;background-color:\" +\n                      (bIsDark ? nowDarkColor : nonRequiredcolorLight) +\n                      ';\"></td>'\n                  );\n                } else {\n                  aHTML.push(\n                    '<td style=\"border:0;border-collapse:collapse;padding:0;margin:0;width:' +\n                      nWidth +\n                      \"px;height:\" +\n                      nHeight +\n                      'px;\">' +\n                      '<div style=\"display:inline-block;width:' +\n                      drawWidth +\n                      \"px;height:\" +\n                      drawHeight +\n                      \"px;background-color:\" +\n                      (bIsDark ? nowDarkColor : _htOption.colorLight) +\n                      ';\"></div></td>'\n                  );\n                }\n              }\n            }\n            aHTML.push(\"</tr>\");\n          }\n\n          aHTML.push(\"</table>\");\n          aHTML.push(\"</div>\");\n\n          if (_htOption.logo) {\n            // Logo Image\n            var img = new Image();\n\n            if (_htOption.crossOrigin != null) {\n              img.crossOrigin = _htOption.crossOrigin;\n            }\n\n            // img.crossOrigin=\"Anonymous\";\n            img.src = _htOption.logo;\n\n            var imgW = _htOption.width / 3.5;\n            var imgH = _htOption.height / 3.5;\n            if (imgW != imgH) {\n              imgW = imgH;\n            }\n\n            if (_htOption.logoWidth) {\n              imgW = _htOption.logoWidth;\n            }\n            if (_htOption.logoHeight) {\n              imgH = _htOption.logoHeight;\n            }\n\n            var imgDivStyle =\n              \"position:relative; z-index:1;display:table-cell;top:-\" +\n              (_htOption.height / 2 + imgH / 2 + _htOption.quietZone) +\n              \"px;text-align:center; width:\" +\n              imgW +\n              \"px; height:\" +\n              imgH +\n              \"px;line-height:\" +\n              imgW +\n              \"px; vertical-align: middle;\";\n            if (!_htOption.logoBackgroundTransparent) {\n              imgDivStyle += \"background:\" + _htOption.logoBackgroundColor;\n            }\n\n            aHTML.push(\n              '<div style=\"' +\n                imgDivStyle +\n                '\"><img  src=\"' +\n                _htOption.logo +\n                '\"  style=\"max-width: ' +\n                imgW +\n                \"px; max-height: \" +\n                imgH +\n                'px;\" /> <div style=\" display: none; width:1px;margin-left: -1px;\"></div></div>'\n            );\n          }\n\n          if (_htOption.onRenderingStart) {\n            _htOption.onRenderingStart(_htOption);\n          }\n\n          _el.innerHTML = aHTML.join(\"\");\n          // Fix the margin values as real size.\n          var elTable = _el.childNodes[0];\n          var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;\n          var nTopMarginTable =\n            (_htOption.heightWithTitle - elTable.offsetHeight) / 2;\n          if (nLeftMarginTable > 0 && nTopMarginTable > 0) {\n            elTable.style.margin =\n              nTopMarginTable + \"px \" + nLeftMarginTable + \"px\";\n          }\n          if (this._htOption.onRenderingEnd) {\n            this._htOption.onRenderingEnd(this._htOption, null);\n          }\n        };\n\n        /**\n         * Clear the QRCode\n         */\n        Drawing.prototype.clear = function () {\n          this._el.innerHTML = \"\";\n        };\n\n        return Drawing;\n      })()\n    : (function () {\n        // Drawing in Canvas\n        function _onMakeImage() {\n          if (this._htOption.drawer == \"svg\") {\n            var svgData = this._oContext.getSerializedSvg(true);\n            this.dataURL = svgData;\n            this._el.innerHTML = svgData;\n          } else {\n            function scaleCanvas(canvas, ctx, newWidth, newHeight) {\n              var scaledCanvas = document.createElement(\"canvas\");\n              scaledCanvas.width = newWidth;\n              scaledCanvas.height = newHeight;\n              var scaledCtx = scaledCanvas.getContext(\"2d\");\n\n              scaledCtx.drawImage(canvas, 0, 0, newWidth, newHeight);\n              canvas.width = newWidth;\n              canvas.height = newHeight;\n              ctx.drawImage(scaledCanvas, 0, 0);\n            }\n            scaleCanvas(\n              this._elCanvas,\n              this._oContext,\n              this._htOption.width + this._htOption.quietZone * 2,\n              this._htOption.height +\n                this._htOption.titleHeight +\n                this._htOption.quietZone * 2\n            );\n            // canvas\n            // this._elImage.crossOrigin='Anonymous';\n            try {\n              // if (this._htOption.crossOrigin != null) {\n              //     this._elImage.crossOrigin = this._htOption.crossOrigin;\n              // }\n              var dataURL = this._elCanvas.toDataURL(\"image/png\");\n              // this._elImage.src = dataURL;\n              this.dataURL = dataURL;\n              // this._elImage.style.display = \"inline\";\n              // this._elCanvas.style.display = \"none\";\n            } catch (e) {\n              console.error(e);\n            }\n          }\n\n          if (this._htOption.onRenderingEnd) {\n            if (!this.dataURL) {\n              console.error(\n                \"Can not get base64 data, please check: 1. Published the page and image to the server 2. The image request support CORS 3. Configured `crossOrigin:'anonymous'` option\"\n              );\n            }\n            this._htOption.onRenderingEnd(this._htOption, this.dataURL);\n          }\n        }\n\n        // Android 2.1 bug workaround\n        // http://code.google.com/p/android/issues/detail?id=5141\n        if (root._android && root._android <= 2.1) {\n          var factor = 1 / window.devicePixelRatio;\n          var drawImage = CanvasRenderingContext2D.prototype.drawImage;\n          CanvasRenderingContext2D.prototype.drawImage = function (\n            image,\n            sx,\n            sy,\n            sw,\n            sh,\n            dx,\n            dy,\n            dw,\n            dh\n          ) {\n            if (\"nodeName\" in image && /img/i.test(image.nodeName)) {\n              for (var i = arguments.length - 1; i >= 1; i--) {\n                arguments[i] = arguments[i] * factor;\n              }\n            } else if (typeof dw == \"undefined\") {\n              arguments[1] *= factor;\n              arguments[2] *= factor;\n              arguments[3] *= factor;\n              arguments[4] *= factor;\n            }\n\n            drawImage.apply(this, arguments);\n          };\n        }\n\n        /**\n         * Check whether the user's browser supports Data URI or not\n         *\n         * @private\n         * @param {Function} fSuccess Occurs if it supports Data URI\n         * @param {Function} fFail Occurs if it doesn't support Data URI\n         */\n        function _safeSetDataURI(fSuccess, fFail) {\n          var self = this;\n          self._fFail = fFail;\n          self._fSuccess = fSuccess;\n\n          // Check it just once\n          if (self._bSupportDataURI === null) {\n            var el = document.createElement(\"img\");\n            var fOnError = function () {\n              self._bSupportDataURI = false;\n\n              if (self._fFail) {\n                self._fFail.call(self);\n              }\n            };\n            var fOnSuccess = function () {\n              self._bSupportDataURI = true;\n\n              if (self._fSuccess) {\n                self._fSuccess.call(self);\n              }\n            };\n\n            el.onabort = fOnError;\n            el.onerror = fOnError;\n            el.onload = fOnSuccess;\n            el.src =\n              \"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\"; // the Image contains 1px data.\n          } else if (self._bSupportDataURI === true && self._fSuccess) {\n            self._fSuccess.call(self);\n          } else if (self._bSupportDataURI === false && self._fFail) {\n            self._fFail.call(self);\n          }\n        }\n\n        /**\n         * Drawing QRCode by using canvas\n         *\n         * @constructor\n         * @param {HTMLElement} el\n         * @param {Object} htOption QRCode Options\n         */\n        var Drawing = function (el, htOption) {\n          this._bIsPainted = false;\n          this._android = _getAndroid();\n          this._el = el;\n          this._htOption = htOption;\n\n          if (this._htOption.drawer == \"svg\") {\n            this._oContext = {};\n            this._elCanvas = {};\n          } else {\n            // canvas\n            this._elCanvas = document.createElement(\"canvas\");\n            this._el.appendChild(this._elCanvas);\n            this._oContext = this._elCanvas.getContext(\"2d\");\n            // this._elImage = document.createElement(\"img\");\n            // this._elImage.alt = \"Scan me!\";\n            // this._elImage.style.display = \"none\";\n            // this._el.appendChild(this._elImage);\n          }\n\n          this._bSupportDataURI = null;\n          this.dataURL = null;\n        };\n\n        /**\n         * Draw the QRCode\n         *\n         * @param {QRCode} oQRCode\n         */\n        Drawing.prototype.draw = function (oQRCode) {\n          // var _elImage = this._elImage;\n          var _htOption = this._htOption;\n\n          var nCount = oQRCode.getModuleCount();\n          var nWidth = _htOption.width / nCount;\n          var nHeight = _htOption.height / nCount;\n\n          if (nWidth <= 1) {\n            nWidth = 1;\n          }\n          if (nHeight <= 1) {\n            nHeight = 1;\n          }\n\n          nWidth = Math.round(nWidth);\n          nHeight = Math.round(nHeight);\n\n          // Reset QRCode Size\n          var calculatedQRWidth = nWidth * nCount;\n          var calculatedQRHeight = nHeight * nCount;\n\n          _htOption.heightWithTitle =\n            calculatedQRHeight + _htOption.titleHeight;\n          _htOption.realHeight =\n            _htOption.heightWithTitle + _htOption.quietZone * 2;\n          _htOption.realWidth = calculatedQRWidth + _htOption.quietZone * 2;\n          _htOption.calculatedQRWidth = calculatedQRWidth;\n          _htOption.calculatedQRHeight = calculatedQRHeight;\n\n          this._elCanvas.width = _htOption.realWidth;\n          this._elCanvas.height = _htOption.realHeight;\n\n          if (_htOption.drawer != \"canvas\") {\n            // _elImage.style.display = \"none\";\n            // } else {\n            // this._oContext = new C2S(this._elCanvas.width, this._elCanvas.height);\n            this._oContext = new C2S(\n              _htOption.width + this._htOption.quietZone * 2,\n              _htOption.height +\n                _htOption.titleHeight +\n                this._htOption.quietZone * 2,\n              _htOption.realWidth,\n              _htOption.realHeight\n            );\n          }\n          this.clear();\n\n          var _oContext = this._oContext;\n          _oContext.lineWidth = 0;\n          _oContext.fillStyle = _htOption.colorLight;\n          _oContext.fillRect(0, 0, this._elCanvas.width, this._elCanvas.height);\n          _oContext.clearRect(\n            _htOption.quietZone,\n            _htOption.quietZone,\n            _htOption.calculatedQRWidth,\n            _htOption.titleHeight\n          );\n\n          var t = this;\n\n          function drawQuietZoneColor() {\n            if (_htOption.quietZone > 0 && _htOption.quietZoneColor) {\n              // top\n              _oContext.lineWidth = 0;\n              _oContext.fillStyle = _htOption.quietZoneColor;\n\n              _oContext.fillRect(0, 0, t._elCanvas.width, _htOption.quietZone);\n              // left\n              _oContext.fillRect(\n                0,\n                _htOption.quietZone,\n                _htOption.quietZone,\n                t._elCanvas.height - _htOption.quietZone * 2\n              );\n              // right\n              _oContext.fillRect(\n                t._elCanvas.width - _htOption.quietZone,\n                _htOption.quietZone,\n                _htOption.quietZone,\n                t._elCanvas.height - _htOption.quietZone * 2\n              );\n              // bottom\n              _oContext.fillRect(\n                0,\n                t._elCanvas.height - _htOption.quietZone,\n                t._elCanvas.width,\n                _htOption.quietZone\n              );\n            }\n          }\n\n          if (_htOption.backgroundImage) {\n            // Background Image\n            var bgImg = new Image();\n\n            bgImg.onload = function () {\n              _oContext.globalAlpha = 1;\n\n              _oContext.globalAlpha = _htOption.backgroundImageAlpha;\n              var imageSmoothingQuality = _oContext.imageSmoothingQuality;\n              var imageSmoothingEnabled = _oContext.imageSmoothingEnabled;\n              _oContext.imageSmoothingEnabled = true;\n              _oContext.imageSmoothingQuality = \"high\";\n\n              if (\n                (_htOption.title || _htOption.subTitle) &&\n                _htOption.titleHeight\n              ) {\n                _oContext.drawImage(\n                  bgImg,\n                  _htOption.quietZone,\n                  _htOption.quietZone + _htOption.titleHeight,\n                  _htOption.width,\n                  _htOption.height\n                );\n              } else {\n                _oContext.drawImage(\n                  bgImg,\n                  0,\n                  0,\n                  _htOption.realWidth,\n                  _htOption.realHeight\n                );\n              }\n\n              _oContext.imageSmoothingEnabled = imageSmoothingEnabled;\n              _oContext.imageSmoothingQuality = imageSmoothingQuality;\n              _oContext.globalAlpha = 1;\n\n              drawQrcode.call(t, oQRCode);\n            };\n            // bgImg.crossOrigin='Anonymous';\n            if (_htOption.crossOrigin != null) {\n              bgImg.crossOrigin = _htOption.crossOrigin;\n            }\n            bgImg.originalSrc = _htOption.backgroundImage;\n            bgImg.src = _htOption.backgroundImage;\n            // DoSomething\n          } else {\n            drawQrcode.call(t, oQRCode);\n          }\n\n          function drawQrcode(oQRCode) {\n            if (_htOption.onRenderingStart) {\n              _htOption.onRenderingStart(_htOption);\n            }\n\n            for (var row = 0; row < nCount; row++) {\n              for (var col = 0; col < nCount; col++) {\n                var nLeft = col * nWidth + _htOption.quietZone;\n                var nTop = row * nHeight + _htOption.quietZone;\n\n                var bIsDark = oQRCode.isDark(row, col);\n\n                var eye = oQRCode.getEye(row, col); // { isDark: true/false, type: PO_TL, PI_TL, PO_TR, PI_TR, PO_BL, PI_BL };\n\n                var nowDotScale = _htOption.dotScale;\n\n                _oContext.lineWidth = 0;\n                // Color handler\n                var dColor;\n                var lColor;\n                if (eye) {\n                  dColor =\n                    _htOption[eye.type] ||\n                    _htOption[eye.type.substring(0, 2)] ||\n                    _htOption.colorDark;\n                  lColor = _htOption.colorLight;\n                } else {\n                  if (_htOption.backgroundImage) {\n                    lColor = \"rgba(0,0,0,0)\";\n                    if (row == 6) {\n                      // dColor = _htOption.timing_H || _htOption.timing || _htOption.colorDark;\n                      if (_htOption.autoColor) {\n                        dColor =\n                          _htOption.timing_H ||\n                          _htOption.timing ||\n                          _htOption.autoColorDark;\n                        lColor = _htOption.autoColorLight;\n                      } else {\n                        dColor =\n                          _htOption.timing_H ||\n                          _htOption.timing ||\n                          _htOption.colorDark;\n                      }\n                    } else if (col == 6) {\n                      // dColor = _htOption.timing_V || _htOption.timing || _htOption.colorDark;\n                      if (_htOption.autoColor) {\n                        dColor =\n                          _htOption.timing_V ||\n                          _htOption.timing ||\n                          _htOption.autoColorDark;\n                        lColor = _htOption.autoColorLight;\n                      } else {\n                        dColor =\n                          _htOption.timing_V ||\n                          _htOption.timing ||\n                          _htOption.colorDark;\n                      }\n                    } else {\n                      if (_htOption.autoColor) {\n                        dColor = _htOption.autoColorDark;\n                        lColor = _htOption.autoColorLight;\n                      } else {\n                        dColor = _htOption.colorDark;\n                      }\n                    }\n                  } else {\n                    if (row == 6) {\n                      dColor =\n                        _htOption.timing_H ||\n                        _htOption.timing ||\n                        _htOption.colorDark;\n                    } else if (col == 6) {\n                      dColor =\n                        _htOption.timing_V ||\n                        _htOption.timing ||\n                        _htOption.colorDark;\n                    } else {\n                      dColor = _htOption.colorDark;\n                    }\n                    lColor = _htOption.colorLight;\n                  }\n                }\n                _oContext.strokeStyle = bIsDark ? dColor : lColor;\n                _oContext.fillStyle = bIsDark ? dColor : lColor;\n\n                if (eye) {\n                  if (eye.type == \"AO\") {\n                    nowDotScale = _htOption.dotScaleAO;\n                  } else if (eye.type == \"AI\") {\n                    nowDotScale = _htOption.dotScaleAI;\n                  } else {\n                    nowDotScale = 1;\n                  }\n\n                  if (_htOption.backgroundImage && _htOption.autoColor) {\n                    dColor =\n                      (eye.type == \"AO\" ? _htOption.AI : _htOption.AO) ||\n                      _htOption.autoColorDark;\n                    lColor = _htOption.autoColorLight;\n                  } else {\n                    dColor =\n                      (eye.type == \"AO\" ? _htOption.AI : _htOption.AO) ||\n                      dColor;\n                  }\n\n                  // Is eye\n                  bIsDark = eye.isDark;\n\n                  _oContext.fillRect(\n                    Math.ceil(nLeft + (nWidth * (1 - nowDotScale)) / 2),\n                    Math.ceil(\n                      _htOption.titleHeight +\n                        nTop +\n                        (nHeight * (1 - nowDotScale)) / 2\n                    ),\n                    Math.ceil(nWidth * nowDotScale),\n                    Math.ceil(nHeight * nowDotScale)\n                  );\n                } else {\n                  if (row == 6) {\n                    // Timing Pattern\n\n                    nowDotScale = _htOption.dotScaleTiming_H;\n\n                    _oContext.fillRect(\n                      Math.ceil(nLeft + (nWidth * (1 - nowDotScale)) / 2),\n                      Math.ceil(\n                        _htOption.titleHeight +\n                          nTop +\n                          (nHeight * (1 - nowDotScale)) / 2\n                      ),\n                      Math.ceil(nWidth * nowDotScale),\n                      Math.ceil(nHeight * nowDotScale)\n                    );\n                  } else if (col == 6) {\n                    // Timing Pattern\n                    nowDotScale = _htOption.dotScaleTiming_V;\n\n                    _oContext.fillRect(\n                      Math.ceil(nLeft + (nWidth * (1 - nowDotScale)) / 2),\n                      Math.ceil(\n                        _htOption.titleHeight +\n                          nTop +\n                          (nHeight * (1 - nowDotScale)) / 2\n                      ),\n                      Math.ceil(nWidth * nowDotScale),\n                      Math.ceil(nHeight * nowDotScale)\n                    );\n                  } else {\n                    if (_htOption.backgroundImage) {\n                      _oContext.fillRect(\n                        Math.ceil(nLeft + (nWidth * (1 - nowDotScale)) / 2),\n                        Math.ceil(\n                          _htOption.titleHeight +\n                            nTop +\n                            (nHeight * (1 - nowDotScale)) / 2\n                        ),\n                        Math.ceil(nWidth * nowDotScale),\n                        Math.ceil(nHeight * nowDotScale)\n                      );\n                    } else {\n                      _oContext.fillRect(\n                        Math.ceil(nLeft + (nWidth * (1 - nowDotScale)) / 2),\n                        Math.ceil(\n                          _htOption.titleHeight +\n                            nTop +\n                            (nHeight * (1 - nowDotScale)) / 2\n                        ),\n                        Math.ceil(nWidth * nowDotScale),\n                        Math.ceil(nHeight * nowDotScale)\n                      );\n                    }\n                  }\n                }\n\n                if (_htOption.dotScale != 1 && !eye) {\n                  _oContext.strokeStyle = _htOption.colorLight;\n                }\n              }\n            }\n\n            if (_htOption.title) {\n              _oContext.fillStyle = _htOption.titleBackgroundColor;\n              _oContext.fillRect(\n                _htOption.quietZone,\n                _htOption.quietZone,\n                _htOption.calculatedQRWidth,\n                _htOption.titleHeight\n              );\n\n              _oContext.font = _htOption.titleFont;\n              _oContext.fillStyle = _htOption.titleColor;\n              _oContext.textAlign = \"center\";\n              _oContext.fillText(\n                _htOption.title,\n                this._elCanvas.width / 2,\n                +_htOption.quietZone + _htOption.titleTop\n              );\n            }\n\n            if (_htOption.subTitle) {\n              _oContext.font = _htOption.subTitleFont;\n              _oContext.fillStyle = _htOption.subTitleColor;\n              _oContext.fillText(\n                _htOption.subTitle,\n                this._elCanvas.width / 2,\n                +_htOption.quietZone + _htOption.subTitleTop\n              );\n            }\n\n            function generateLogoImg(img) {\n              var imgContainerW = Math.round(_htOption.width / 3.5);\n              var imgContainerH = Math.round(_htOption.height / 3.5);\n              if (imgContainerW !== imgContainerH) {\n                imgContainerW = imgContainerH;\n              }\n\n              if (_htOption.logoMaxWidth) {\n                imgContainerW = Math.round(_htOption.logoMaxWidth);\n              } else if (_htOption.logoWidth) {\n                imgContainerW = Math.round(_htOption.logoWidth);\n              }\n\n              if (_htOption.logoMaxHeight) {\n                imgContainerH = Math.round(_htOption.logoMaxHeight);\n              } else if (_htOption.logoHeight) {\n                imgContainerH = Math.round(_htOption.logoHeight);\n              }\n\n              var nw;\n              var nh;\n              if (typeof img.naturalWidth == \"undefined\") {\n                // IE 6/7/8\n                nw = img.width;\n                nh = img.height;\n              } else {\n                // HTML5 browsers\n                nw = img.naturalWidth;\n                nh = img.naturalHeight;\n              }\n\n              if (_htOption.logoMaxWidth || _htOption.logoMaxHeight) {\n                if (_htOption.logoMaxWidth && nw <= imgContainerW) {\n                  imgContainerW = nw;\n                }\n\n                if (_htOption.logoMaxHeight && nh <= imgContainerH) {\n                  imgContainerH = nh;\n                }\n                if (nw <= imgContainerW && nh <= imgContainerH) {\n                  imgContainerW = nw;\n                  imgContainerH = nh;\n                }\n              }\n\n              var imgContainerX = (_htOption.realWidth - imgContainerW) / 2;\n              var imgContainerY =\n                (_htOption.calculatedQRHeight - imgContainerH) / 2 +\n                _htOption.titleHeight +\n                _htOption.quietZone;\n\n              var imgScale = Math.min(imgContainerW / nw, imgContainerH / nh);\n              var imgW = nw * imgScale;\n              var imgH = nh * imgScale;\n\n              if (_htOption.logoMaxWidth || _htOption.logoMaxHeight) {\n                imgContainerW = imgW;\n                imgContainerH = imgH;\n                imgContainerX = (_htOption.realWidth - imgContainerW) / 2;\n                imgContainerY = (_htOption.realHeight - imgContainerH) / 2;\n              }\n\n              // Did Not Use Transparent Logo Image\n              if (!_htOption.logoBackgroundTransparent) {\n                //if (!_htOption.logoBackgroundColor) {\n                //_htOption.logoBackgroundColor = '#ffffff';\n                //}\n                _oContext.fillStyle = _htOption.logoBackgroundColor;\n\n                _oContext.fillRect(\n                  imgContainerX,\n                  imgContainerY,\n                  imgContainerW,\n                  imgContainerH\n                );\n              }\n              var imageSmoothingQuality = _oContext.imageSmoothingQuality;\n              var imageSmoothingEnabled = _oContext.imageSmoothingEnabled;\n              _oContext.imageSmoothingEnabled = true;\n              _oContext.imageSmoothingQuality = \"high\";\n              _oContext.drawImage(\n                img,\n                imgContainerX + (imgContainerW - imgW) / 2,\n                imgContainerY + (imgContainerH - imgH) / 2,\n                imgW,\n                imgH\n              );\n              _oContext.imageSmoothingEnabled = imageSmoothingEnabled;\n              _oContext.imageSmoothingQuality = imageSmoothingQuality;\n              drawQuietZoneColor();\n              _this._bIsPainted = true;\n\n              _this.makeImage();\n            }\n\n            if (_htOption.logo) {\n              // Logo Image\n              var img = new Image();\n\n              var _this = this;\n\n              img.onload = function () {\n                generateLogoImg(img);\n              };\n\n              img.onerror = function (e) {\n                console.error(e);\n              };\n\n              // img.crossOrigin=\"Anonymous\";\n              if (_htOption.crossOrigin != null) {\n                img.crossOrigin = _htOption.crossOrigin;\n              }\n              img.originalSrc = _htOption.logo;\n              img.src = _htOption.logo;\n            } else {\n              drawQuietZoneColor();\n              this._bIsPainted = true;\n              this.makeImage();\n            }\n          }\n        };\n\n        /**\n         * Make the image from Canvas if the browser supports Data URI.\n         */\n        Drawing.prototype.makeImage = function () {\n          if (this._bIsPainted) {\n            _safeSetDataURI.call(this, _onMakeImage);\n          }\n        };\n\n        /**\n         * Return whether the QRCode is painted or not\n         *\n         * @return {Boolean}\n         */\n        Drawing.prototype.isPainted = function () {\n          return this._bIsPainted;\n        };\n\n        /**\n         * Clear the QRCode\n         */\n        Drawing.prototype.clear = function () {\n          this._oContext.clearRect(\n            0,\n            0,\n            this._elCanvas.width,\n            this._elCanvas.height\n          );\n          this._bIsPainted = false;\n        };\n\n        Drawing.prototype.remove = function () {\n          this._oContext.clearRect(\n            0,\n            0,\n            this._elCanvas.width,\n            this._elCanvas.height\n          );\n          this._bIsPainted = false;\n          this._el.innerHTML = \"\";\n        };\n\n        /**\n         * @private\n         * @param {Number} nNumber\n         */\n        Drawing.prototype.round = function (nNumber) {\n          if (!nNumber) {\n            return nNumber;\n          }\n\n          return Math.floor(nNumber * 1000) / 1000;\n        };\n\n        return Drawing;\n      })();\n\n  /**\n   * Get the type by string length\n   *\n   * @private\n   * @param {String} sText\n   * @param {Number} nCorrectLevel\n   * @return {Number} type\n   */\n  function _getTypeNumber(sText, _htOption) {\n    var nCorrectLevel = _htOption.correctLevel;\n\n    var nType = 1;\n    var length = _getUTF8Length(sText);\n\n    for (var i = 0, len = QRCodeLimitLength.length; i < len; i++) {\n      var nLimit = 0;\n      switch (nCorrectLevel) {\n        case QRErrorCorrectLevel.L:\n          nLimit = QRCodeLimitLength[i][0];\n          break;\n        case QRErrorCorrectLevel.M:\n          nLimit = QRCodeLimitLength[i][1];\n          break;\n        case QRErrorCorrectLevel.Q:\n          nLimit = QRCodeLimitLength[i][2];\n          break;\n        case QRErrorCorrectLevel.H:\n          nLimit = QRCodeLimitLength[i][3];\n          break;\n      }\n\n      if (length <= nLimit) {\n        break;\n      } else {\n        nType++;\n      }\n    }\n    if (nType > QRCodeLimitLength.length) {\n      throw new Error(\n        \"Too long data. the CorrectLevel.\" +\n          [\"M\", \"L\", \"H\", \"Q\"][nCorrectLevel] +\n          \" limit length is \" +\n          nLimit\n      );\n    }\n\n    if (_htOption.version != 0) {\n      if (nType <= _htOption.version) {\n        nType = _htOption.version;\n        _htOption.runVersion = nType;\n      } else {\n        console.warn(\n          \"QR Code version \" +\n            _htOption.version +\n            \" too small, run version use \" +\n            nType\n        );\n        _htOption.runVersion = nType;\n      }\n    }\n    return nType;\n  }\n\n  function _getUTF8Length(sText) {\n    var replacedText = encodeURI(sText)\n      .toString()\n      .replace(/\\%[0-9a-fA-F]{2}/g, \"a\");\n    return replacedText.length;\n  }\n\n  QRCode = function (el, vOption) {\n    this._htOption = {\n      width: 256,\n      height: 256,\n      typeNumber: 4,\n      colorDark: \"#000000\",\n      colorLight: \"#ffffff\",\n      correctLevel: QRErrorCorrectLevel.H,\n\n      dotScale: 1, // For body block, must be greater than 0, less than or equal to 1. default is 1\n\n      dotScaleTiming: 1, // Dafault for timing block , must be greater than 0, less than or equal to 1. default is 1\n      dotScaleTiming_H: undefined, // For horizontal timing block, must be greater than 0, less than or equal to 1. default is 1\n      dotScaleTiming_V: undefined, // For vertical timing block, must be greater than 0, less than or equal to 1. default is 1\n\n      dotScaleA: 1, // Dafault for alignment block, must be greater than 0, less than or equal to 1. default is 1\n      dotScaleAO: undefined, // For alignment outer block, must be greater than 0, less than or equal to 1. default is 1\n      dotScaleAI: undefined, // For alignment inner block, must be greater than 0, less than or equal to 1. default is 1\n\n      quietZone: 0,\n      quietZoneColor: \"rgba(0,0,0,0)\",\n\n      title: \"\",\n      titleFont: \"normal normal bold 16px Arial\",\n      titleColor: \"#000000\",\n      titleBackgroundColor: \"#ffffff\",\n      titleHeight: 0, // Title Height, Include subTitle\n      titleTop: 30, // draws y coordinates. default is 30\n\n      subTitle: \"\",\n      subTitleFont: \"normal normal normal 14px Arial\",\n      subTitleColor: \"#4F4F4F\",\n      subTitleTop: 60, // draws y coordinates. default is 0\n\n      logo: undefined,\n      logoWidth: undefined,\n      logoHeight: undefined,\n      logoMaxWidth: undefined,\n      logoMaxHeight: undefined,\n      logoBackgroundColor: \"#ffffff\",\n      logoBackgroundTransparent: false,\n\n      // === Posotion Pattern(Eye) Color\n      PO: undefined, // Global Posotion Outer color. if not set, the defaut is `colorDark`\n      PI: undefined, // Global Posotion Inner color. if not set, the defaut is `colorDark`\n      PO_TL: undefined, // Posotion Outer - Top Left\n      PI_TL: undefined, // Posotion Inner - Top Left\n      PO_TR: undefined, // Posotion Outer - Top Right\n      PI_TR: undefined, // Posotion Inner - Top Right\n      PO_BL: undefined, // Posotion Outer - Bottom Left\n      PI_BL: undefined, // Posotion Inner - Bottom Left\n\n      // === Alignment Color\n      AO: undefined, // Alignment Outer. if not set, the defaut is `colorDark`\n      AI: undefined, // Alignment Inner. if not set, the defaut is `colorDark`\n\n      // === Timing Pattern Color\n      timing: undefined, // Global Timing color. if not set, the defaut is `colorDark`\n      timing_H: undefined, // Horizontal timing color\n      timing_V: undefined, // Vertical timing color\n\n      // ==== Backgroud Image\n      backgroundImage: undefined, // Background Image\n      backgroundImageAlpha: 1, // Background image transparency, value between 0 and 1. default is 1.\n      autoColor: false, // Automatic color adjustment(for data block)\n      autoColorDark: \"rgba(0, 0, 0, .6)\", // Automatic color: dark CSS color\n      autoColorLight: \"rgba(255, 255, 255, .7)\", // Automatic color: light CSS color\n\n      // ==== Event Handler\n      onRenderingStart: undefined,\n      onRenderingEnd: undefined,\n\n      // ==== Versions\n      version: 0, // The symbol versions of QR Code range from Version 1 to Version 40. default 0 means automatically choose the closest version based on the text length.\n\n      // ==== Tooltip\n      tooltip: false, // Whether set the QRCode Text as the title attribute value of the image\n\n      // ==== Binary(hex) data mode\n      binary: false, // Whether it is binary mode, default is text mode.\n\n      // ==== Drawing method\n      drawer: \"canvas\", // Drawing method: canvas, svg(Chrome, FF, IE9+)\n\n      // ==== CORS\n      crossOrigin: null, // String which specifies the CORS setting to use when retrieving the image. null means that the crossOrigin attribute is not set.\n\n      // UTF-8 without BOM\n      utf8WithoutBOM: true,\n    };\n\n    if (typeof vOption === \"string\") {\n      vOption = {\n        text: vOption,\n      };\n    }\n\n    // Overwrites options\n    if (vOption) {\n      for (var i in vOption) {\n        this._htOption[i] = vOption[i];\n      }\n    }\n\n    if (!this._htOption.title && !this._htOption.subTitle) {\n      this._htOption.titleHeight = 0;\n    }\n\n    if (this._htOption.version < 0 || this._htOption.version > 40) {\n      console.warn(\n        \"QR Code version '\" +\n          this._htOption.version +\n          \"' is invalidate, reset to 0\"\n      );\n      this._htOption.version = 0;\n    }\n\n    if (this._htOption.dotScale < 0 || this._htOption.dotScale > 1) {\n      console.warn(\n        this._htOption.dotScale +\n          \" , is invalidate, dotScale must greater than 0, less than or equal to 1, now reset to 1. \"\n      );\n      this._htOption.dotScale = 1;\n    }\n\n    if (\n      this._htOption.dotScaleTiming < 0 ||\n      this._htOption.dotScaleTiming > 1\n    ) {\n      console.warn(\n        this._htOption.dotScaleTiming +\n          \" , is invalidate, dotScaleTiming must greater than 0, less than or equal to 1, now reset to 1. \"\n      );\n      this._htOption.dotScaleTiming = 1;\n    }\n    if (this._htOption.dotScaleTiming_H) {\n      if (\n        this._htOption.dotScaleTiming_H < 0 ||\n        this._htOption.dotScaleTiming_H > 1\n      ) {\n        console.warn(\n          this._htOption.dotScaleTiming_H +\n            \" , is invalidate, dotScaleTiming_H must greater than 0, less than or equal to 1, now reset to 1. \"\n        );\n        this._htOption.dotScaleTiming_H = 1;\n      }\n    } else {\n      this._htOption.dotScaleTiming_H = this._htOption.dotScaleTiming;\n    }\n\n    if (this._htOption.dotScaleTiming_V) {\n      if (\n        this._htOption.dotScaleTiming_V < 0 ||\n        this._htOption.dotScaleTiming_V > 1\n      ) {\n        console.warn(\n          this._htOption.dotScaleTiming_V +\n            \" , is invalidate, dotScaleTiming_V must greater than 0, less than or equal to 1, now reset to 1. \"\n        );\n        this._htOption.dotScaleTiming_V = 1;\n      }\n    } else {\n      this._htOption.dotScaleTiming_V = this._htOption.dotScaleTiming;\n    }\n\n    if (this._htOption.dotScaleA < 0 || this._htOption.dotScaleA > 1) {\n      console.warn(\n        this._htOption.dotScaleA +\n          \" , is invalidate, dotScaleA must greater than 0, less than or equal to 1, now reset to 1. \"\n      );\n      this._htOption.dotScaleA = 1;\n    }\n    if (this._htOption.dotScaleAO) {\n      if (this._htOption.dotScaleAO < 0 || this._htOption.dotScaleAO > 1) {\n        console.warn(\n          this._htOption.dotScaleAO +\n            \" , is invalidate, dotScaleAO must greater than 0, less than or equal to 1, now reset to 1. \"\n        );\n        this._htOption.dotScaleAO = 1;\n      }\n    } else {\n      this._htOption.dotScaleAO = this._htOption.dotScaleA;\n    }\n    if (this._htOption.dotScaleAI) {\n      if (this._htOption.dotScaleAI < 0 || this._htOption.dotScaleAI > 1) {\n        console.warn(\n          this._htOption.dotScaleAI +\n            \" , is invalidate, dotScaleAI must greater than 0, less than or equal to 1, now reset to 1. \"\n        );\n        this._htOption.dotScaleAI = 1;\n      }\n    } else {\n      this._htOption.dotScaleAI = this._htOption.dotScaleA;\n    }\n\n    if (\n      this._htOption.backgroundImageAlpha < 0 ||\n      this._htOption.backgroundImageAlpha > 1\n    ) {\n      console.warn(\n        this._htOption.backgroundImageAlpha +\n          \" , is invalidate, backgroundImageAlpha must between 0 and 1, now reset to 1. \"\n      );\n      this._htOption.backgroundImageAlpha = 1;\n    }\n\n    // round\n    if (!this._htOption.quietZone) {\n      this._htOption.quietZone = 0;\n    }\n    if (!this._htOption.titleHeight) {\n      this._htOption.titleHeight = 0;\n    }\n    this._htOption.width = Math.round(this._htOption.width);\n    this._htOption.height = Math.round(this._htOption.height);\n    this._htOption.quietZone = Math.round(this._htOption.quietZone);\n    this._htOption.titleHeight = Math.round(this._htOption.titleHeight);\n\n    if (typeof el == \"string\") {\n      el = document.getElementById(el);\n    }\n\n    if (\n      !this._htOption.drawer ||\n      (this._htOption.drawer != \"svg\" && this._htOption.drawer != \"canvas\")\n    ) {\n      this._htOption.drawer = \"canvas\";\n    }\n\n    this._android = _getAndroid();\n    this._el = el;\n    this._oQRCode = null;\n\n    this._htOption._element = el;\n\n    var _htOptionClone = {};\n    for (var i in this._htOption) {\n      _htOptionClone[i] = this._htOption[i];\n    }\n    this._oDrawing = new Drawing(this._el, _htOptionClone);\n\n    if (this._htOption.text) {\n      this.makeCode(this._htOption.text);\n    }\n  };\n\n  /**\n   * Make the QRCode\n   *\n   * @param {String} sText link data\n   */\n  QRCode.prototype.makeCode = function (sText) {\n    this._oQRCode = new QRCodeModel(\n      _getTypeNumber(sText, this._htOption),\n      this._htOption.correctLevel\n    );\n    this._oQRCode.addData(\n      sText,\n      this._htOption.binary,\n      this._htOption.utf8WithoutBOM\n    );\n    this._oQRCode.make();\n    if (this._htOption.tooltip) {\n      this._el.title = sText;\n    }\n    this._oDrawing.draw(this._oQRCode);\n    //\t\tthis.makeImage();\n  };\n\n  /**\n   * Make the Image from Canvas element\n   * - It occurs automatically\n   * - Android below 3 doesn't support Data-URI spec.\n   *\n   * @private\n   */\n  QRCode.prototype.makeImage = function () {\n    if (\n      typeof this._oDrawing.makeImage == \"function\" &&\n      (!this._android || this._android >= 3)\n    ) {\n      this._oDrawing.makeImage();\n    }\n  };\n\n  /**\n   * Clear the QRCode\n   */\n  QRCode.prototype.clear = function () {\n    this._oDrawing.remove();\n  };\n\n  /**\n   * Resize the QRCode\n   */\n  QRCode.prototype.resize = function (width, height) {\n    this._oDrawing._htOption.width = width;\n    this._oDrawing._htOption.height = height;\n    this._oDrawing.draw(this._oQRCode);\n  };\n\n  /**\n   * Download the QRCode image\n   */\n  QRCode.prototype.download = function (fileName) {\n    var dataURL = this._oDrawing.dataURL;\n    var link = document.createElement(\"a\");\n\n    if (this._htOption.drawer == \"svg\") {\n      fileName += \".svg\";\n      var svgFileAsBlob = new Blob([dataURL], {\n        type: \"text/plain\",\n      });\n\n      if (navigator.msSaveBlob) {\n        // MS\n        navigator.msSaveBlob(svgFileAsBlob, fileName);\n      } else {\n        link.download = fileName;\n        var reader = new FileReader();\n        reader.onload = function () {\n          link.href = reader.result;\n          link.click();\n        };\n        reader.readAsDataURL(svgFileAsBlob);\n      }\n    } else {\n      fileName += \".png\";\n      if (navigator.msSaveBlob) {\n        // MS\n        function dataURItoBlob(dataURI) {\n          var byteString = atob(dataURI.split(\",\")[1]);\n          var mimeString = dataURI.split(\",\")[0].split(\":\")[1].split(\";\")[0];\n          var ab = new ArrayBuffer(byteString.length);\n          var ia = new Uint8Array(ab);\n          for (i = 0; i < byteString.length; i++) {\n            ia[i] = byteString.charCodeAt(i);\n          }\n          return new Blob([ab], {\n            type: mimeString,\n          });\n        }\n\n        var blob = dataURItoBlob(dataURL);\n        navigator.msSaveBlob(blob, fileName);\n      } else {\n        link.download = fileName;\n        link.href = dataURL;\n        link.click();\n      }\n    }\n  };\n\n  /**\n   * No Conflict\n   * @return QRCode object\n   */\n  QRCode.prototype.noConflict = function () {\n    if (root.QRCode === this) {\n      root.QRCode = _QRCode;\n    }\n    return QRCode;\n  };\n\n  /**\n   * @name QRCode.CorrectLevel\n   */\n  QRCode.CorrectLevel = QRErrorCorrectLevel;\n\n  /*--------------------------------------------------------------------------*/\n  // Export QRCode\n\n  // AMD & CMD Compatibility\n  if (typeof define == \"function\" && (define.amd || define.cmd)) {\n    // 1. Define an anonymous module\n    define([], function () {\n      return QRCode;\n    });\n  }\n  // CommonJS Compatibility(include NodeJS)\n  else if (freeModule) {\n    // Node.js\n    (freeModule.exports = QRCode).QRCode = QRCode;\n    // Other CommonJS\n    freeExports.QRCode = QRCode;\n  } else {\n    // Export Global\n    root.QRCode = QRCode;\n  }\n}).call(this);\n"]}