qrcode-matrix 0.2.1 → 1.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +42 -36
  2. package/dist/qrcodeMatrix.umd.js +1302 -1299
  3. package/dist/qrcodeMatrix.umd.min.js +6 -0
  4. package/lib/encode/sjis.d.ts +2 -2
  5. package/lib/encode/sjisData.d.ts +2 -2
  6. package/lib/encode/utf-8.d.ts +2 -2
  7. package/lib/index.d.ts +13 -5
  8. package/lib/lib/BitBuffer.d.ts +9 -9
  9. package/lib/lib/QRMatrix.d.ts +10 -10
  10. package/lib/lib/bch-encode.d.ts +31 -31
  11. package/lib/lib/draw.d.ts +4 -4
  12. package/lib/modes/Alphanumeric.d.ts +3 -3
  13. package/lib/modes/Byte.d.ts +3 -3
  14. package/lib/modes/Kanji.d.ts +3 -3
  15. package/lib/modes/Numeric.d.ts +3 -3
  16. package/lib/modes/mode.d.ts +6 -6
  17. package/lib/qrcode.d.ts +19 -19
  18. package/{dist → lib}/qrcodeMatrix.es.js +1299 -1298
  19. package/{dist → lib}/qrcodeMatrix.js +1305 -1296
  20. package/lib/utils.d.ts +26 -26
  21. package/package.json +8 -8
  22. package/LICENSE +0 -21
  23. package/lib/encode/sjis.js +0 -113
  24. package/lib/encode/sjisData.js +0 -4
  25. package/lib/encode/utf-8.js +0 -23
  26. package/lib/index.js +0 -37
  27. package/lib/lib/BitBuffer.js +0 -39
  28. package/lib/lib/QRMatrix.js +0 -31
  29. package/lib/lib/bch-encode.js +0 -466
  30. package/lib/lib/draw.js +0 -49
  31. package/lib/modes/Alphanumeric.js +0 -49
  32. package/lib/modes/Byte.js +0 -25
  33. package/lib/modes/Kanji.js +0 -46
  34. package/lib/modes/Numeric.js +0 -43
  35. package/lib/modes/mode.js +0 -2
  36. package/lib/qrcode.js +0 -124
  37. package/lib/utils.js +0 -379
  38. package/src/.DS_Store +0 -0
  39. package/src/encode/.DS_Store +0 -0
  40. package/src/encode/sjis.ts +0 -121
  41. package/src/encode/sjisData.ts +0 -2
  42. package/src/encode/utf-8.ts +0 -30
  43. package/src/index.ts +0 -33
  44. package/src/lib/BitBuffer.ts +0 -70
  45. package/src/lib/QRMatrix.ts +0 -39
  46. package/src/lib/bch-encode.ts +0 -639
  47. package/src/lib/draw.ts +0 -77
  48. package/src/modes/Alphanumeric.ts +0 -55
  49. package/src/modes/Byte.ts +0 -30
  50. package/src/modes/Kanji.ts +0 -56
  51. package/src/modes/Numeric.ts +0 -47
  52. package/src/modes/mode.ts +0 -6
  53. package/src/qrcode.ts +0 -237
  54. package/src/utils.ts +0 -459
@@ -2,7 +2,7 @@
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
3
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
4
  (global = global || self, factory(global.qrcodeMatrix = {}));
5
- }(this, function (exports) { 'use strict';
5
+ }(this, (function (exports) { 'use strict';
6
6
 
7
7
  /*!
8
8
  * @cnwhy/base64 v0.1.3
@@ -701,1206 +701,1207 @@
701
701
  const Float64Matrix = getTypedMatrixClass(Float64Array);
702
702
 
703
703
  /*!
704
- * qrcode-matrix v0.2.1
704
+ * qrcode-matrix v1.0.0-beta.3
705
705
  * Homepage https://github.com/cnwhy/QRCode-matrix
706
706
  * License MIT
707
707
  */
708
708
 
709
- var QR_MODE = 1;
710
- var qrNumber = (function () {
711
- var strToNum = function (s) {
712
- for (var i = 0; i < s.length; i++) {
713
- var c = s.charAt(i);
714
- if (c < '0' || c > '9') {
715
- throw 'illegal char :' + c;
716
- }
717
- }
718
- return +s;
719
- };
720
- return function (data) {
721
- var _data = data;
722
- var _this = {
723
- getMode: function () {
724
- return QR_MODE;
725
- },
726
- getLength: function () {
727
- return _data.length;
728
- },
729
- write: function (buffer) {
730
- var data = _data;
731
- var i = 0;
732
- while (i + 2 < data.length) {
733
- buffer.put(strToNum(data.substring(i, i + 3)), 10);
734
- i += 3;
735
- }
736
- if (i < data.length) {
737
- if (data.length - i == 1) {
738
- buffer.put(strToNum(data.substring(i, i + 1)), 4);
739
- }
740
- else if (data.length - i == 2) {
741
- buffer.put(strToNum(data.substring(i, i + 2)), 7);
742
- }
743
- }
744
- }
745
- };
746
- return _this;
747
- };
709
+ class QRMatrix extends BitMatrix {
710
+ constructor(size) {
711
+ super(size, size, 0);
712
+ this.markMatrix = new BitMatrix(size, size, 0);
713
+ Object.defineProperty(this, 'size', { value: size });
714
+ }
715
+ set(x, y, value) {
716
+ super.set(x, y, !!value);
717
+ if (value != undefined)
718
+ this.markMatrix.set(x, y, 1);
719
+ }
720
+ has(x, y) {
721
+ return !!this.markMatrix.get(x, y);
722
+ }
723
+ clone() {
724
+ return Object.create(this, {
725
+ _data: Object.assign(Object.assign({}, Object.getOwnPropertyDescriptor(this, '_data')), {
726
+ value: new Uint8Array(this._data.buffer.slice(0))
727
+ }),
728
+ markMatrix: Object.assign(Object.assign({}, Object.getOwnPropertyDescriptor(this, 'markMatrix')), {
729
+ value: this.markMatrix.clone()
730
+ })
731
+ });
732
+ }
733
+ }
734
+
735
+ var QR_MODE = 1;
736
+ var qrNumber = (function () {
737
+ var strToNum = function (s) {
738
+ for (var i = 0; i < s.length; i++) {
739
+ var c = s.charAt(i);
740
+ if (c < '0' || c > '9') {
741
+ throw 'illegal char :' + c;
742
+ }
743
+ }
744
+ return +s;
745
+ };
746
+ return function (data) {
747
+ var _data = data;
748
+ var _this = {
749
+ getMode: function () {
750
+ return QR_MODE;
751
+ },
752
+ getLength: function () {
753
+ return _data.length;
754
+ },
755
+ write: function (buffer) {
756
+ var data = _data;
757
+ var i = 0;
758
+ while (i + 2 < data.length) {
759
+ buffer.put(strToNum(data.substring(i, i + 3)), 10);
760
+ i += 3;
761
+ }
762
+ if (i < data.length) {
763
+ if (data.length - i == 1) {
764
+ buffer.put(strToNum(data.substring(i, i + 1)), 4);
765
+ }
766
+ else if (data.length - i == 2) {
767
+ buffer.put(strToNum(data.substring(i, i + 2)), 7);
768
+ }
769
+ }
770
+ }
771
+ };
772
+ return _this;
773
+ };
748
774
  })();
749
775
 
750
- const QR_MODE$1 = 1 << 1;
751
- const [Code0, Code9, CodeA, CodeZ] = ['0', '9', 'A', 'Z'].map(v => v.charCodeAt(0));
752
- const qrAlphaNum = (function () {
753
- var getCode = function (s) {
754
- var c = s.charCodeAt(0);
755
- if (Code0 <= c && c <= Code9) {
756
- return c - Code0;
757
- }
758
- else if (CodeA <= c && c <= CodeZ) {
759
- return c - CodeA + 10;
760
- }
761
- else {
762
- var other = [' ', '$', '%', '*', '+', '-', '.', '/', ':'];
763
- var i = other.indexOf(s);
764
- if (~i) {
765
- return i + 36;
766
- }
767
- else {
768
- throw 'illegal char :' + s;
769
- }
770
- }
771
- };
772
- return function (data) {
773
- var _data = data;
774
- var _this = {
775
- getMode: function () {
776
- return QR_MODE$1;
777
- },
778
- getLength: function () {
779
- return _data.length;
780
- },
781
- write: function (buffer) {
782
- var s = _data;
783
- var i = 0;
784
- while (i + 1 < s.length) {
785
- buffer.put(getCode(s.charAt(i)) * 45 + getCode(s.charAt(i + 1)), 11);
786
- i += 2;
787
- }
788
- if (i < s.length) {
789
- buffer.put(getCode(s.charAt(i)), 6);
790
- }
791
- }
792
- };
793
- return _this;
794
- };
776
+ const QR_MODE$1 = 1 << 1;
777
+ const [Code0, Code9, CodeA, CodeZ] = ['0', '9', 'A', 'Z'].map(v => v.charCodeAt(0));
778
+ const qrAlphaNum = (function () {
779
+ var getCode = function (s) {
780
+ var c = s.charCodeAt(0);
781
+ if (Code0 <= c && c <= Code9) {
782
+ return c - Code0;
783
+ }
784
+ else if (CodeA <= c && c <= CodeZ) {
785
+ return c - CodeA + 10;
786
+ }
787
+ else {
788
+ var other = [' ', '$', '%', '*', '+', '-', '.', '/', ':'];
789
+ var i = other.indexOf(s);
790
+ if (~i) {
791
+ return i + 36;
792
+ }
793
+ else {
794
+ throw 'illegal char :' + s;
795
+ }
796
+ }
797
+ };
798
+ return function (data) {
799
+ var _data = data;
800
+ var _this = {
801
+ getMode: function () {
802
+ return QR_MODE$1;
803
+ },
804
+ getLength: function () {
805
+ return _data.length;
806
+ },
807
+ write: function (buffer) {
808
+ var s = _data;
809
+ var i = 0;
810
+ while (i + 1 < s.length) {
811
+ buffer.put(getCode(s.charAt(i)) * 45 + getCode(s.charAt(i + 1)), 11);
812
+ i += 2;
813
+ }
814
+ if (i < s.length) {
815
+ buffer.put(getCode(s.charAt(i)), 6);
816
+ }
817
+ }
818
+ };
819
+ return _this;
820
+ };
795
821
  })();
796
822
 
797
- const QR_MODE$2 = 1 << 2;
798
- const qr8BitByte = function (stringToBytes) {
799
- return function (data) {
800
- var _data = data + '';
801
- var _bytes = _data == data ? stringToBytes(_data) : data;
802
- _bytes = _bytes instanceof Array ? _bytes : [];
803
- var _this = {
804
- getMode: function () {
805
- return QR_MODE$2;
806
- },
807
- getLength: function () {
808
- return _bytes.length;
809
- },
810
- write: function (buffer) {
811
- for (var i = 0; i < _bytes.length; i++) {
812
- buffer.put(_bytes[i], 8);
813
- }
814
- }
815
- };
816
- return _this;
817
- };
823
+ const QR_MODE$2 = 1 << 2;
824
+ const qr8BitByte = function (stringToBytes) {
825
+ return function (data) {
826
+ var _data = data + '';
827
+ var _bytes = _data == data ? stringToBytes(_data) : data;
828
+ _bytes = _bytes instanceof Array ? _bytes : [];
829
+ var _this = {
830
+ getMode: function () {
831
+ return QR_MODE$2;
832
+ },
833
+ getLength: function () {
834
+ return _bytes.length;
835
+ },
836
+ write: function (buffer) {
837
+ for (var i = 0; i < _bytes.length; i++) {
838
+ buffer.put(_bytes[i], 8);
839
+ }
840
+ }
841
+ };
842
+ return _this;
843
+ };
818
844
  };
819
845
 
820
- const SJIS_COUNT = 7070;
846
+ const SJIS_COUNT = 7070;
821
847
  const SJIS_BASE64 = 'AAAAAAABAAEAAgACAAMAAwAEAAQABQAFAAYABgAHAAcACAAIAAkACQAKAAoACwALAAwADAANAA0ADgAOAA8ADwAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAB4AHgAfAB8AIAAgACEAIQAiACIAIwAjACQAJAAlACUAJgAmACcAJwAoACgAKQApACoAKgArACsALAAsAC0ALQAuAC4ALwAvADAAMAAxADEAMgAyADMAMwA0ADQANQA1ADYANgA3ADcAOAA4ADkAOQA6ADoAOwA7ADwAPAA9AD0APgA+AD8APwBAAEAAQQBBAEIAQgBDAEMARABEAEUARQBGAEYARwBHAEgASABJAEkASgBKAEsASwBMAEwATQBNAE4ATgBPAE8AUABQAFEAUQBSAFIAUwBTAFQAVABVAFUAVgBWAFcAVwBYAFgAWQBZAFoAWgBbAFsAXABcAF0AXQBeAF4AXwBfAGAAYABhAGEAYgBiAGMAYwBkAGQAZQBlAGYAZgBnAGcAaABoAGkAaQBqAGoAawBrAGwAbABtAG0AbgBuAG8AbwBwAHAAcQBxAHIAcgBzAHMAdAB0AHUAdQB2AHYAdwB3AHgAeAB5AHkAegB6AHsAewB8AHwAfQB9AH4AfgB/AH8AooGRAKOBkgCngZgAqIFOAKyBygCwgYsAsYF9ALSBTAC2gfcA14F+APeBgAORg58DkoOgA5ODoQOUg6IDlYOjA5aDpAOXg6UDmIOmA5mDpwOag6gDm4OpA5yDqgOdg6sDnoOsA5+DrQOgg64DoYOvA6ODsAOkg7EDpYOyA6aDswOng7QDqIO1A6mDtgOxg78DsoPAA7ODwQO0g8IDtYPDA7aDxAO3g8UDuIPGA7mDxwO6g8gDu4PJA7yDygO9g8sDvoPMA7+DzQPAg84DwYPPA8OD0APEg9EDxYPSA8aD0wPHg9QDyIPVA8mD1gQBhEYEEIRABBGEQQQShEIEE4RDBBSERAQVhEUEFoRHBBeESAQYhEkEGYRKBBqESwQbhEwEHIRNBB2ETgQehE8EH4RQBCCEUQQhhFIEIoRTBCOEVAQkhFUEJYRWBCaEVwQnhFgEKIRZBCmEWgQqhFsEK4RcBCyEXQQthF4ELoRfBC+EYAQwhHAEMYRxBDKEcgQzhHMENIR0BDWEdQQ2hHcEN4R4BDiEeQQ5hHoEOoR7BDuEfAQ8hH0EPYR+BD6EgAQ/hIEEQISCBEGEgwRChIQEQ4SFBESEhgRFhIcERoSIBEeEiQRIhIoESYSLBEqEjARLhI0ETISOBE2EjwROhJAET4SRBFGEdiAQgV0gFIFcIBaBYSAYgWUgGYFmIByBZyAdgWggIIH1ICGB9iAlgWQgJoFjIDCB8SAygYwgM4GNIDuBpiEDgY4hK4HwIZCBqSGRgaohkoGoIZOBqyHSgcsh1IHMIgCBzSICgd0iA4HOIgeB3iIIgbgiC4G5IhKBfCIageMiHYHlIh6BhyIggdoiJ4HIIiiBySIpgb8iKoG+IiuB5yIsgegiNIGIIjWB5iI9geQiUoHgImCBgiJhgd8iZoGFImeBhiJqgeEia4HiIoKBvCKDgb0ihoG6IoeBuyKlgdsjEoHcJQCEnyUBhKolAoSgJQOEqyUMhKElD4SsJRCEoiUThK0lFISkJReEryUYhKMlG4SuJRyEpSUdhLolIIS1JSOEsCUkhKclJYS8JSiEtyUrhLIlLISmJS+EtiUwhLslM4SxJTSEqCU3hLglOIS9JTuEsyU8hKklP4S5JUKEviVLhLQloIGhJaGBoCWygaMls4GiJbyBpSW9gaQlxoGfJceBniXLgZslzoGdJc+BnCXvgfwmBYGaJgaBmSZAgYomQoGJJmqB9CZtgfMmb4HyMACBQDABgUEwAoFCMAOBVjAFgVgwBoFZMAeBWjAIgXEwCYFyMAqBczALgXQwDIF1MA2BdjAOgXcwD4F4MBCBeTARgXowEoGnMBOBrDAUgWswFYFsMByBYDBBgp8wQoKgMEOCoTBEgqIwRYKjMEaCpDBHgqUwSIKmMEmCpzBKgqgwS4KpMEyCqjBNgqswToKsME+CrTBQgq4wUYKvMFKCsDBTgrEwVIKyMFWCszBWgrQwV4K1MFiCtjBZgrcwWoK4MFuCuTBcgrowXYK7MF6CvDBfgr0wYIK+MGGCvzBigsAwY4LBMGSCwjBlgsMwZoLEMGeCxTBogsYwaYLHMGqCyDBrgskwbILKMG2CyzBugswwb4LNMHCCzjBxgs8wcoLQMHOC0TB0gtIwdYLTMHaC1DB3gtUweILWMHmC1zB6gtgwe4LZMHyC2jB9gtswfoLcMH+C3TCAgt4wgYLfMIKC4DCDguEwhILiMIWC4zCGguQwh4LlMIiC5jCJgucwioLoMIuC6TCMguowjYLrMI6C7DCPgu0wkILuMJGC7zCSgvAwk4LxMJuBSjCcgUswnYFUMJ6BVTChg0AwooNBMKODQjCkg0MwpYNEMKaDRTCng0YwqINHMKmDSDCqg0kwq4NKMKyDSzCtg0wwroNNMK+DTjCwg08wsYNQMLKDUTCzg1IwtINTMLWDVDC2g1Uwt4NWMLiDVzC5g1gwuoNZMLuDWjC8g1swvYNcML6DXTC/g14wwINfMMGDYDDCg2Eww4NiMMSDYzDFg2QwxoNlMMeDZjDIg2cwyYNoMMqDaTDLg2owzINrMM2DbDDOg20wz4NuMNCDbzDRg3Aw0oNxMNODcjDUg3Mw1YN0MNaDdTDXg3Yw2IN3MNmDeDDag3kw24N6MNyDezDdg3ww3oN9MN+DfjDgg4Aw4YOBMOKDgjDjg4Mw5IOEMOWDhTDmg4Yw54OHMOiDiDDpg4kw6oOKMOuDizDsg4ww7YONMO6DjjDvg48w8IOQMPGDkTDyg5Iw84OTMPSDlDD1g5Uw9oOWMPuBRTD8gVsw/YFSMP6BU04AiOpOAZKaTgOOtU4HlpxOCI/kTgmOT04Kj+NOC4m6Tg2Vc04Ol15OEJigThGJTk4Uio5OFZihThaQok4XmcBOGIt1ThmVuE4ej+VOIZe8TiaVwE4qmKJOLZKGTjGYo04yi/hONpikTjiK2045kk9OO47lTjyYpU4/mKZOQpinTkOUVE5Fi3ZOS5RWTk2T4U5OjMFOT5ZSTlXlaE5WmKhOV4/mTliYqU5ZibNOXYvjTl6M7k5fludOYpukTnGXkE5zk/tOfoqjToCLVE6CmKpOhZirToaXuU6Il1xOiZGIToqYrU6LjpZOjJPxTo6YsE6RiV1OkozdTpSM3E6ViOROmJhqTpmYaU6bjbFOnIifTp6YsU6fmLJOoJizTqGWU06imLROpIzwTqWI5U6mlpJOqIucTquLnU6si55OrZLgTq6Xuk6wmLVOs5i2TraYt066kGxOwI9ZTsGQbU7CmLxOxJi6TsaYu07Hi3dOyo2hTsuJ7k7NmLlOzpi4Ts+Vp07UjmVO1Y5kTtaRvE7XmL1O2JV0TtmQ5U7dgVdO3pi+Tt+YwE7jkeNO5JffTuWIyE7tmL9O7om8TvCLwk7ykodO9oyPTveYwU77lENPAYrpTwmYwk8KiMlPDYzeTw6K6k8PlZpPEJSwTxGLeE8aie9PHJjlTx2TYE8vlIxPMJjETzSUuk82l+BPOJBMTzqOZk88jpdPPYm+T0OSz09GkkFPR5jIT02Iyk9OkuFPT49aT1CNsk9Rl0NPU5HMT1WJvU9XmMdPWZddT1qYw09bmMVPXI3sT12Yxk9em0NPaZjOT2+Y0U9wmM9Pc4nAT3WVuU92mMlPe5jNT3yM8U9/jmdPg4qkT4aY0k+ImMpPi5fhT42OmE+PmMtPkZjQT5aY00+YmMxPm4ufT52Iy0+gi6BPoYm/T6ubRE+tlplPrpWOT6+M8k+1kE5Ptpe1T7+V1k/CjFdPw5GjT8SJ4k/Kj3JPzpjXT9CY3E/RmNpP1JjVT9eRrU/YmNhP2pjbT9uY2U/dldtP35jWT+GQTU/jlpNP5JjdT+WY3k/uj0NP75jrT/OUb0/1lVVP9pjmT/iV7k/6ibRP/pjqUAWY5FAGmO1QCZFxUAuMwlANlHtQD+DFUBGY7FASk3xQFJjhUBaM9FAZjPNQGpjfUB+O2FAhmOdQI5XtUCSSbFAlmONQJoyRUCiY4FApmOhQKpjiUCuXz1AsmOlQLZhgUDaL5FA5jJBQQ5juUEeY71BImPNQSYjMUE+VzlBQmPJQVZjxUFaY9VBamPRQXJLiUGWMklBsmPZQco7DUHSRpFB1kuNQdov0UHiY91B9i1VQgJj4UIWY+lCNllRQkYyGUJiOUFCZlPVQmpj5UKyNw1Ctl2JQspj8ULOZQlC0mPtQtY3CULePnVC+jFhQwplDUMWLzVDJmUBQyplBUM2TrVDPkZxQ0YuhUNWWbFDWmURQ2pe7UN6ZRVDjmUhQ5ZlGUOeRbVDtmUdQ7plJUPWZS1D5mUpQ+5XGUQCLVlEBmU1RAplOUQSJrVEJmUxREo7yURSZUVEVmVBRFplPURiY1FEamVJRH4+eUSGZU1Eql0RRMpbXUTeZVVE6mVRRO5lXUTyZVlE/mVhRQJlZUUGI8lFDjLNRRIxaUUWPW1FGkptRR4uiUUiQ5lFJjPVRS42OUUyZW1FNlsZRTpNlUVCOmVFSmVpRVJlcUVqTfVFcipVRYpldUWWT/FFokVNRaZlfUWqZYFFrlKpRbIz2UW2YWlFumWFRcYukUXWVulF2kbRRd4vvUXiTVFF8jJNRgJliUYKZY1GFk+BRhol+UYmZZlGKjftRjJllUY2NxFGPmWdRkOPsUZGZaFGSlmBRk5lpUZWZalGWmWtRl4/nUZmOylGgiqVRopluUaSZbFGllrtRppltUaiVeVGpmW9RqplwUauZcVGsk35RsJl1UbGZc1GymXRRs5lyUbSN4VG1mXZRtpboUbeX4lG9mXdRxJCmUcWZeFHGj3lRyZl5UcuSnFHMl71RzZOAUdaZw1HbmXpR3OqjUd2Lw1HgmXtR4ZZ9UeaPiFHnkfpR6Zl9UeqT4lHtmX5R8JmAUfGKTVH1mYFR9oulUfiTylH5iZpR+o9vUf2Un1H+mYJSAJOBUgOQblIEmYNSBpWqUgeQ2FIIiqBSCoqnUguZhFIOmYZSEYxZUhSZhVIXl/FSHY+JUiSUu1IllcpSJ5mHUimXmFIqmYhSLpmJUjCTnlIzmYpSNpCnUjeN/FI4jJRSOZmLUjqOaFI7jY9SQ5LkUkSZjVJHkaVSSo3tUkuZjlJMmY9STZFPUk+ZjFJUmZFSVpZVUluNhFJemZBSY4yVUmSN3FJllI1SaZmUUmqZklJvlZtScI/oUnGZm1JyioRSc5mVUnSZk1J1kW5SfZmXUn+ZllKDimNSh4yAUoiZnFKJl6tSjZmYUpGZnVKSmZpSlJmZUpuXzVKfjPdSoInBUqOX8lKpj5VSqpN3UquNhVKsmaBSrZmhUrGX41K0mEpStZmjUrmM+FK8maJSvopOUsGZpFLDlnVSxZK6UseXRVLJlddSzZmlUtLo01LVk65S15mmUtiKqFLZlrFS3Y+fUt6Zp1LfleVS4JmrUuKQqFLjmahS5IvOUuaZqVLniqlS8oxNUvOZrFL1ma1S+JmuUvmZr1L6jtlS/oz5Uv+W3FMBluZTApP1UwWV71MGmbBTCJmxUw2Zs1MPmbVTEJm0UxWZtlMWibtTF5ZrUxmN+lMambdTHZF4UyCPoFMhi6dTI5m4UyqU2VMvmblTMZm6UzOZu1M4mbxTOZVDUzqL5lM7iONTP5O9U0CZvVNBj1xTQ5DnU0WZv1NGmb5TR4+hU0iM31NJmcFTSpS8U02ZwlNRlNpTUpGyU1OR7FNUi6ZTV5PsU1iSUFNalI5TXJZtU16ZxFNgkOhTZoxUU2mZxVNumcZTb4lLU3CI81NxiutTc5GmU3SLcFN1l5FTd5nJU3iJtVN7mchTf4uoU4KZylOElu9TlpnLU5iX0FOajPpTn4y0U6CZzFOlmc5TppnNU6iQflOpiVhTrYl9U66Zz1OwmdBTs4y1U7aZ0VO7i45Two5RU8OZ0lPIlpRTyY2zU8qLeVPLl0ZTzJFvU82UvVPOjvtT1I9mU9aO5lPXjvNT2Y+WU9uUvlPfmdVT4YliU+KRcFPjjPtT5IzDU+WL5VPomdlT6ZJAU+qR/FPri6lT7I+iU+2Z2lPumdhT74nCU/CR5FPxjrZT8o5qU/OJRVP2ipBT942GU/iOaVP6mdtUAZncVAOLaFQEimVUCI2HVAmLZ1QKkt1UC4lEVAyTr1QNlrxUDo1AVA+XmVQQk2ZUEYz8VBuMTlQdmeVUH4vhVCCWaVQmlNtUKZnkVCuK3FQsmd9ULZngVC6Z4lQ2meNUOIt6VDmQgVQ7latUPJnhVD2Z3VQ+jOFUQJneVEKYQ1RGlfBUSJLmVEmM4FRKjZBUTpnmVFGT21RfmepUaI78VGqO9FRwme1UcZnrVHOWoVR1mehUdpnxVHeZ7FR7me9UfIzEVH2WvVSAmfBUhJnyVIaZ9FSLje5UjJhhVI6Z6VSPmedUkJnzVJKZ7lSimfZUpJpCVKWZ+FSomfxUq5pAVKyZ+VSvml1Uso3nVLOKUFS4mfdUvJpEVL2I9FS+mkNUwIijVMGVaVTCmkFUxJn6VMeZ9VTImftUyY3GVNiaRVThiPVU4ppOVOWaRlTmmkdU6I+jVOmWiVTtmkxU7ppLVPKTTlT6mk1U/ZpKVQSJU1UGjbRVB5BPVQ+aSFUQk4JVFJpJVRaIoFUumlNVL5dCVTGPpVUzmllVOJpYVTmaT1U+kcFVQJpQVUSR7VVFmlVVRo+kVUyaUlVPluJVU4xbVVaaVlVXmldVXJpUVV2aWlVjmlFVe5pgVXyaZVV+mmFVgJpcVYOaZlWEkVBVh5poVYmNQVWKml5Vi5KdVZiaYlWZmltVmoqrVZyK7FWdioVVnppjVZ+aX1WnjJZVqJppVamaZ1WqkXJVq4tpVayLqlWummRVsIvyVbaJY1XEmm1VxZprVceapVXUmnBV2ppqVdyablXfmmxV445rVeSab1X3mnJV+Zp3Vf2adVX+mnRWBpJRVgmJw1YUmnFWFppzVhePplYYiVJWG5p2VimJ3FYvmoJWMY/6VjKafVY0mntWNpp8VjiaflZCiVxWTJFYVk6aeFZQmnlWW4qaVmSagVZoiu1WapqEVmuagFZsmoNWdJWsVniT01Z6lLZWgJqGVoaahVaHimRWipqHVo+ailaUmolWoJqIVqKUWFalmotWrpqMVrSajla2mo1WvJqQVsCak1bBmpFWwpqPVsOaklbImpRWzpqVVtGallbTmpdW15qYVtiZZFbajvpW245sVt6J8VbgiPZW45JjVu6amVbwjaJW8ojNVvOQfVb5mppW+ozFVv2NkVb/mpxXAJqbVwOV3lcEmp1XCJqfVwmanlcLmqBXDZqhVw+Ml1cSiYBXE5qiVxaapFcYmqNXHJqmVx+TeVcmmqdXJ4izVyiN3VctjFxXMJJuVzeaqFc4mqlXO5qrV0CarFdCjeJXR4vPV0qWVldOmqpXT5qtV1CNv1dRjUJXYZqxV2SNo1dmklJXaZquV2qS2Fd/mrJXgpCCV4iasFeJmrNXi4xeV5OatFegmrVXoo1DV6OKX1ekmrdXqpq4V7CauVezmrZXwJqvV8OaulfGmrtXy5aEV86P6VfSmr1X05q+V9SavFfWmsBX3JRXV9+I5lfglXVX45rBV/SP+1f3jrdX+ZR8V/qK7lf8jelYAJZ4WAKTsFgFjJhYBpHNWAqav1gLmsJYFZHCWBmaw1gdmsRYIZrGWCSS51gqiqxYL+qfWDCJgVgxlfFYNI/qWDWTZ1g6jeRYPZrMWECVu1hBl9tYSonyWEuayFhRkVlYUprLWFSTg1hXk2hYWJOEWFmUt1hakstYXo3HWGKax1hpiZZYa5NVWHCayVhymsVYdZBvWHmazVh+j21Yg4urWIWazliTleZYl5GdWJySxFifmtBYqJZuWKua0ViumtZYs5WtWLia1Vi5ms9YuprSWLua1Fi+jaRYwZXHWMWa11jHkmRYyonzWMyP61jRmtlY05rYWNWNiFjXmtpY2JrcWNma21jcmt5Y3prTWN+a4Fjkmt9Y5ZrdWOuObVjskHBY7pFzWO+a4VjwkLpY8YjrWPKUhFj3ktlY+ZrjWPqa4lj7muRY/JrlWP2a5lkCmudZCZXPWQqa6FkPicRZEJrpWRWXW1kWik9ZGJnHWRmPZ1kakb1ZG5rqWRyW6VkilrJZJZrsWSeR5Vkpk1ZZKpG+WSuVdlksmu1ZLZruWS6Jm1kxjrhZMprvWTeIzlk4mvBZPprxWUSJgllHiu9ZSJPeWUmV8llOmvVZT5F0WVCa9FlRjF9ZVJZ6WVWa81lXk4VZWJr3WVqa9llgmvlZYpr4WWWJnFlnmvpZaI+nWWma/FlqkkRZbJr7WW6VsVlzj5dZdJN6WXibQFl9jURZgZtBWYKUQFmDlNxZhJbPWYqURFmNm0pZk4tXWZaXZFmZlq1Zm5uqWZ2bQlmjm0VZpZHDWaiWV1msk2lZsptGWbmWhVm7jchZvo+oWcabR1nJjm9Zy45uWdCIt1nRjMZZ05CpWdSIz1nZm0tZ2ptMWdybSVnliVdZ5oqtWeibSFnqlsNZ65VQWfaIpln7iPdZ/45wWgGI0FoDiKFaCZtRWhGbT1oYlrpaGptSWhybUFofm05aIJBQWiWbTVopldhaL4ziWjWbVlo2m1daPI+pWkCbU1pBmEtaRpRrWkmbVVpajaVaYptYWmaVd1pqm1labJtUWn+WuVqSlH1amptaWpuVUVq8m1tavZtfWr6bXFrBicVawpteWsmOuVrLm11azIyZWtCba1rWm2Ra15thWuGShFrjm2Ba5ptiWumbY1r6m2Va+5tmWwmK8FsLm2hbDJtnWxabaVsij+xbKptsWyyS2lswiWRbMptqWzabbVs+m25bQJtxW0Obb1tFm3BbUI5xW1GbcltUjUVbVZtzW1eOmltYkbZbWpt0W1ubdVtcjnlbXY1GW1+W0Ftji0dbZIzHW2WbdltmindbaZt3W2uRt1twm3hbcZuhW3ObeVt1m3pbeJt7W3qbfVuAm35bg5uAW4WR7luHiUZbiI7nW4mIwFuLkXZbjIquW42Os1uPjUdblZOGW5ePQFuYiq9bmZKIW5qS6FubiLZbnItYW52V81ufjsBbootxW6OQ6VukjrpbpZdHW6abgVuui3tbsI3JW7OKUVu0iYNbtY+qW7aJxlu4m4JbuZdlW7+PaFvCjuJbw5uDW8SK8VvFk9BbxpanW8ebhFvJm4VbzJV4W9Cbh1vSiqZb04v1W9SbhlvbirBb3ZBRW96bi1vfjkBb4YnHW+Kbilvkm4hb5ZuMW+abiVvnlEpb6J7LW+mQUlvrm41b7pe+W/Cbjlvzm5Bb9ZKeW/abj1v4kKFb+o6bW/6Rzlv/jvVcAZWVXAKQ6lwEjstcBZuRXAaPq1wHm5JcCJuTXAmI0VwKkbhcC5BxXA2blFwOk7FcD4+sXBGPrVwTm5VcFpDrXBqPrlwgm5ZcIpuXXCSW3lwom5hcLYvEXDGPQVw4m5lcOZuaXDqO2lw7kEtcPJPyXD2Qc1w+lPZcP5RBXECLx1xBm5tcRYuPXEabnFxIi/xcSpPNXEuJrlxNjnJcTpudXE+boFxQm59cUYv7XFObnlxVk1dcXpGuXGCTalxhjsZcZJF3XGWXmlxsm6JcbpujXG+T1FxxjlJcdpulXHmbplyMm6dckIryXJGbqFyUm6lcoYmqXKiRWlypiuJcq5urXKyWplyxkdBcs4p4XLabrVy3m69cuIrdXLubrFy8m65cvpuxXMWbsFzHm7Jc2ZuzXOCTu1zhi6xc6InjXOmbtFzqm7lc7Zu3XO+V9VzwlfRc9pOHXPqbtlz7j3Nc/Zu1XQeQkl0Lm7pdDo3oXRGbwF0Um8FdFZu7XRaKUl0Xm7xdGJvFXRmbxF0am8NdG5u/XR+bvl0im8JdKZX2XUubyV1Mm8ZdTpvIXVCXkl1Sm8ddXJu9XWmQk11sm8pdb421XXOby112m8xdgpvPXYSbzl2Hm81di5OIXYybuF2Qm9VdnZvRXaKb0F2sm9JdrpvTXbeb1l26l+RdvJvXXb2b1F3Jm9hdzIreXc2b2V3Sm9td05vaXdab3F3bm91d3ZDsXd6PQl3hj4Rd45GDXeWNSF3mjbZd541JXeiLkF3rm95d7o23XfGMyF3ym99d85akXfSUYl31m+Bd941KXfuKql39kkZd/ovQXgKOc14DlXpeBpS/Xgub4V4MivNeEZvkXhaSn14Zm+NeGpviXhub5V4dkuleJZCDXiuOdF4tkMheL5HRXjCLQV4zkqBeNpvmXjeb5144j+1ePZZYXkCb6l5Dm+leRJvoXkWVnV5Hm/FeTJZ5Xk6b615Um+1eVZaLXleb7F5fm+5eYZSmXmKb715jlbxeZJvwXnKKsV5zlb1edJROXnWb8l52m/NeeI1LXnmKsl56m/Ree4y2XnyXY159l0hefor0Xn+b9l6BkqFeg41MXoSPr16HlN1eio+wXo+PmF6VkupelpX3XpeTWF6ajU1enJV7XqCb916mk3hep43AXquMyV6tkutetYjBXraPjl63jU5euJdmXsGb+F7Cm/lew5RwXsib+l7Jl/VeyphMXs+b/F7Qm/te04pmXtacQF7anENe25xEXt2cQl7flV9e4I+xXuGcRl7inEVe45xBXuicR17pnEhe7JxJXvCcTF7xnEpe85xLXvScTV72iYRe95LsXvicTl76jJpe+4n0XvyUVV7+nE9e/5P5XwGV2V8DnFBfBJhNXwmcUV8Klb5fC5xUXwyYn18NmK9fD46uXxCT818RnFVfE4t8XxSSol8ViPhfFpxWXxeVpF8YjU9fG5JvXx+S7V8llu1fJoy3XyeMyl8pnFdfLZxYXy+cXl8xjuNfNZKjXzeLrV84nFlfPJVKXz6SZV9BnFpfSJxbX0qLrl9MnFxfTpxdX1GcX19Tk5ZfVpxgX1ecYV9ZnGJfXJxTX12cUl9hnGNfYoxgX2aVRl9pjcpfapVWX2uSpF9slWpfbZxkX3CPsl9xiWVfc5xlX3ecZl95lvBffJTeX3+caV+AiZ1fgZCqX4KcaF+DnGdfhIxhX4WR0l+HnG1fiJxrX4qcal+Ll6VfjIzjX5CPmV+RnGxfkpNrX5OPXV+Xk75fmJxwX5mcb1+enG5foJxxX6GM5F+onHJfqZWcX6qPel+tnHNfrpT3X7OTv1+0kqVfuZNPX7ycdF+9i0pfw5BTX8WVS1/MivVfzZRFX9acdV/XjnVf2JZZX9mWWl/ciZ5f3Zx6X+CSiV/knHdf64n1X/Ccq1/xnHlf9ZRPX/iceF/7nHZf/Y2aX/+cfGAOnINgD5yJYBCcgWASk3tgFZyGYBaVfGAZnIBgG5yFYByX5WAdjnZgIJHTYCGcfWAli31gJpyIYCeQq2AoiYVgKZyCYCqJ9mArnIdgL4uvYDGchGA6nIpgQZyMYEKclmBDnJRgRpyRYEqckGBLl/ZgTZySYFCLsGBSjVBgVY+aYFmcmWBanItgX5yPYGCcfmBiifhgY5yTYGSclWBlknBgaI2mYGmJtmBqnI1ga5yYYGycl2Bti7Fgb5GnYHCKhmB1jGJgd5yOYIGcmmCDnJ1ghJyfYImOu2CLnKVgjJLuYI2cm2CSnKNglIn3YJacoWCXnKJgmpyeYJucoGCfjOVgoJdJYKOKs2CmiXhgp5ykYKmUWWCqiKtgspTfYLOce2C0nKpgtZyuYLaW42C4nKdgvJOJYL2crGDFj+5gxpytYMeT1WDRmGZg05ypYNicr2DajZtg3JDJYN+I0mDgnKhg4ZymYOOReWDnnJxg6I5TYPCRxGDxnLtg85F6YPSctmD2nLNg95y0YPmO5GD6nLdg+5y6YQCctWEBj0RhA5y4YQacsmEIlvphCZb5YQ2cvGEOnL1hD4jTYRWcsWEai/BhG4ikYR+KtGEhnLlhJ5zBYSicwGEsnMVhNJzGYTycxGE9nMdhPpy/YT+cw2FCnMhhRJzJYUecvmFIjpxhSpzCYUuR1GFMjVFhTZywYU6QVGFTnNZhVZXnYViczGFZnM1hWpzOYV2c1WFfnNRhYpadYWOKtWFlnNJhZ4xkYWiKU2FrnM9hbpe2YW+c0WFwiNRhcZzTYXOcymF0nNBhdZzXYXaMY2F3nMthfpd8YYKXSmGHnNphipzeYY6RnmGQl/dhkZzfYZSc3GGWnNlhmZzYYZqc3WGkla5hp5OyYamMZWGrnOBhrJzbYa6c4WGyjJthtomvYbqc6WG+irZhw5znYcac6GHHjadhyJzmYcmc5GHKnONhy5zqYcyc4mHNnOxh0In5YeOc7mHmnO1h8pKmYfSc8WH2nO9h95zlYfiMnGH6nPBh/Jz0Yf2c82H+nPVh/5zyYgCc9mIInPdiCZz4YgqV6GIMnPpiDZz5Yg6PXmIQkKxiEYnkYhKJ+mIUnPtiFoi9YhqQymIbnPxiHebBYh6dQGIfjIFiIZ1BYiaQ7WIqnUJiLp1DYi+LWWIwnURiMp1FYjOdRmI0kdViOIzLYjuW32I/lltiQI+KYkGdR2JHkO5iSOe7YkmU4GJLjuhiTY3LYk6dSGJTkcViVZWlYliR72JbnUtiXp1JYmCdTGJjnUpiaJ1NYm6Vr2JxiLVidpV9YnmU4WJ8nU5ifp1RYn+Ps2KAi1pigp1PYoOdVmKEj7RiiZ1QYoqUY2KRl31ikp1SYpOdU2KUnVdilZOKYpadVGKXjVJimJDcYpudZWKclLJinpHwYquU4mKsnatisZX4YrWS72K5lpViu51aYryJn2K9kopiwp1jYsWSU2LGnV1ix51kYsidX2LJnWZiyp1iYsydYWLNlI9iz51bYtCJ+2LRnVli0ouRYtOR8WLUnVVi151YYtiNU2LZkNli24+1YtydYGLdlHFi4IuSYuGKZ2Lsiodi7ZBAYu6daGLvnW1i8Z1pYvOMnWL1nW5i9o5BYveNiWL+j0Vi/51cYwGOnWMCnWtjB453YwidbGMJiMJjDJ1nYxGSp2MZi5NjH4uyYyedamMoiKVjK43BYy+QVWM6kvBjPZTSYz6dcGM/kX1jSZGoY0yOSmNNnXFjT51zY1Cdb2NVld9jV5K7Y1yRe2NnlfljaI7MY2mdgGNrnX5jbpCYY3KMnmN2nXhjd4+3Y3qT5mN7lFBjgJ12Y4ORfGOIjvZjiZ17Y4yPtmOOnXVjj516Y5KUcmOWnXRjmIxAY5uKfGOfnXxjoJepY6GNzGOiklRjo515Y6WQ2mOnjVRjqJCEY6mJhmOqkVtjq513Y6yLZGOyjGZjtJLNY7WdfWO7kX5jvp2BY8Cdg2PDkbVjxJ2JY8adhGPJnYZjz5VgY9CS8WPSnYdj1pdLY9qXZ2Pbirdj4YisY+OdhWPpnYJj7or2Y/SJh2P2nYhj+pdoZAadjGQNkblkD52TZBOdjWQWnYpkF52RZBydcmQmnY5kKJ2SZCyUwGQtk4tkNJ2LZDadj2Q6jGdkPo3vZEKQ22ROnZdkWJNFZGedlGRploBkb52VZHadlmR4lsxkepCgZIOMgmSInZ1kko5UZJOdmmSVnZlkmpRRZJ6Ts2Skk1BkpZ2bZKmdnGSrlY9krZRkZK6OQmSwkO9kspZvZLmKaGS7naNkvJ2eZMGXaWTCnaVkxZ2hZMedomTNkYBk0p2gZNSdXmTYnaRk2p2fZOCdqWThnapk4pNGZOOdrGTmjkNk552nZOyLW2Tvna1k8Z2mZPKdsWT0nbBk9p2vZPqdsmT9nbRk/o/vZQCds2UFnbdlGJ21ZRydtmUdnZBlI525ZSSduGUqnZhlK526ZSydrmUvjnhlNJ27ZTWdvGU2nb5lN529ZTidv2U5ifxlO41VZT6V+mU/kK1lRYzMZUidwWVNncRlT5VxZVGLfmVVncNlVp3CZVeUc2VYncVlWYuzZV2dx2VencZlYoq4ZWOOVWVmk9ZlbIxoZXCQlGVynchldJCuZXWTR2V3lX5leJ3JZYKdymWDnctlh5W2ZYibfGWJkMRljJVrZY6N1mWQlONlkZTBZZeTbGWZl79lm53NZZyOzmWfnc5loYi0ZaSL0mWlkMtlp5WAZaudz2WsjmFlrZJmZa+OemWwkFZlt53QZbmV+2W8iZdlvY57ZcGd02XDndFlxJ3UZcWXt2XGndJly5D5Zcyd1WXPkbBl0p3WZdeK+GXZndhl253XZeCd2WXhndpl4or5ZeWT+mXmklVl54uMZeiOfGXpkYFl7I97Ze2IrmXxndtl+omgZfud32YCjVZmA53eZgaNqWYHj7hmCp3dZgyPuWYOlr5mD42oZhOI1WYUkMxmHJ3kZh+Qr2YgiWZmJY90ZieWhmYojfBmLY+6Zi+QpWY0neNmNZ3hZjad4mY8kotmP55FZkGd6GZCjp5mQ41XZkSd5mZJnedmS5BXZk+d5WZSjk5mXZ3qZl6d6WZfne5mYp3vZmSd62ZmikFmZ53sZmid7WZplNNmbpWBZm+MaWZwnfBmdJCwZnaPu2Z6knFmgYvFZoOd8WaEnfVmh4nJZoid8maJnfRmjp3zZpGPi2aWkmdml4jDZpid9madnfdmopKoZqaX72arjmJmrpXpZrSWXGa4nkFmuZ35Zryd/Ga+nftmwZ34ZsSeQGbHk9xmyZ36ZtaeQmbZj4xm2p5DZtyXambdlJhm4J5EZuaeRmbpnkdm8J5IZvKLyGbziWdm9I1YZvWeSWb3nkpm+I+RZvmRgmb8mdZm/ZFdZv6RXGb/kdZnAI3FZwOY8GcIjI5nCZdMZwuV/GcNlZ5nD55LZxSN8WcVkr1nFp5MZxeYTmcbll1nHZKpZx6eTWcfivpnJp5OZyeeT2colthnKpaiZyuWlmcslntnLY5EZy6eUWcxjulnNJZwZzaeU2c3nlZnOJ5VZzqK92c9i4BnP55SZ0GeVGdGnldnSZCZZ06Xm2dPiMdnUI3eZ1GRumdTjttnVo/xZ1meWmdck21nXp5YZ1+RqWdgnllnYY/wZ2KW22djnltnZJ5cZ2WXiGdqnmFnbY1ZZ2+UdGdwnl5ncZOMZ3Kd3GdzneBndYtuZ3eUZmd8nmBnfo+8Z3+UwmeFnmZnh5T4Z4meXWeLnmNnjJ5iZ5CQzWeVlo1nl5fRZ5qWh2ecicpnnY59Z6CYZ2ehnmVnopCVZ6aeZGepnl9nr4zNZ7Oea2e0nmlntonLZ7eeZ2e4nm1nuZ5zZ8GRxmfElb9nxp51Z8qVQWfOnnRnz5SQZ9CWXmfRirln05D1Z9SPX2fYktFn2pdNZ92ecGfenm9n4p5xZ+SebmfnnnZn6Z5sZ+yeamfunnJn755oZ/GSjGfzlvZn9I7EZ/WN8mf7jbhn/paPZ/+KYGgCksxoA5PIaASJaGgTkPBoFpCyaBeMSWgennhoIY1aaCKKnGgpnnpoKoqUaCuegWgynn1oNJDxaDiKamg5japoPIppaD2NzWhAnntoQYyFaEKMamhDk41oRp55aEiIxGhNnnxoTp5+aFCLy2hRjEtoU4q6aFSLamhZnoJoXI33aF2WkWhfjlZoY56DaGeVT2h0no9odomxaHeehGh+npVof56FaIGXwGiDnoxohZR+aI2elGiPnodok4iyaJSeiWiXjVtom56LaJ2eimifnoZooJ6RaKKPvWimmutop4zmaKiXnGitnohor5LyaLCKQmixjatos56AaLWekGi2ioFouZ6OaLqekmi8k45oxIr8aMaesGjJlsdoyp6XaMuK+2jNnp5o0pZfaNSen2jVnqFo156laNiemWjakklo35OPaOCeqWjhnpxo456maOeeoGjukFho756qaPKQsWj5nqho+oq7aQCYb2kBnpZpBJ6kaQWI1mkInphpC5a4aQyenWkNkEFpDpLFaQ+ek2kSnqNpGZCaaRqerWkbipFpHIyfaSGer2kinpppI56uaSWep2kmnptpKJ6raSqerGkwnr1pNJPMaTaeomk5nrlpPZ67aT+S1mlKl2tpU5WWaVSetmlVkchpWZ68aVqRXmlcnrNpXZ7AaV6ev2lgk+1pYZ6+aWKT6GlqnsJpa561aW2Lxmlunrhpb498aXOUgGl0nrppdYvJaXeesml4nrRpeZ6xaXyYT2l9inlpfp63aYGewWmCilRpio3laY6JfGmRntJplJhQaZWe1WmbkFlpnJ7UaaCe02mnntBprp7EabGe4WmynsNptJ7Wabuezmm+nslpv57GacGex2nDns9px+qgacqezGnLjVxpzJLGac2RhGnOnspp0J7FadOeyGnYl2xp2ZaKad2ezWnentdp557faeie2GnrnuVp7Z7jafKe3mn5nt1p+5LOaf2RhWn/nttqAp7ZagWe4GoKnuZqC5Tzagye7GoSnudqE57qahSe5GoXkpRqGZVXahue2moenuJqH4++aiGWzWoinvZqI57paimMoGoqiaFqK4p+ai6e0Wo1j79qNp7uajie9Wo5jvdqOoqSaj2STWpEnutqR57wakie9GpLi7RqWItralme8mpfi0BqYZPJamKe8WpmnvNqcp7tanie72p/ioBqgJJoaoSe+mqNnvhqjoznapCe92qXn0BqnJ53aqCe+Wqinvtqo578aqqfS2qsn0dqrp6NarOfRmq4n0Vqu59CasGe6GrCn0Rqw59DatGfSWrTmEVq2p9MatuL+Wren0hq359KauiUpWrqn01q+p9RavufTmsEl5NrBZ9Pawqe3GsSn1JrFp9Tax2JVGsfn1VrIIyHayGOn2sji9NrJ4miazKXfms3n1drOJ9WazmfWWs6i1xrPYvUaz6KvGtDn1xrR59ba0mfXWtMicxrTpJWa1CfXmtTir1rVJ9ga1mfX2tbn2FrX59ia2GfY2tijn5rY5Cza2SNn2tmlZBraZXga2qYY2tvjpVrc43Oa3SX8Gt4n2RreZ9la3uOgGt/n2ZrgJ9na4OfaWuEn2hrhpZ3a4mPfWuKjupri45ja42famuVn2xrlpBCa5ifa2uen21rpJ9ua6qfb2urn3Brr59xa7Gfc2uyn3Jrs590a7SJo2u1kmlrt591a7qORWu7imtrvJ92a7+TYWvAmsprxYtCa8afd2vLn3hrzZXqa86WiGvSk8Vr0595a9SU5GvYlPlr25bRa9+femvrn3xr7J97a++ffmvzn31sCJ+BbA+OgWwRlq9sE5+CbBSfg2wXi0NsG5+EbCOfhmwkn4VsNJCFbDeVWGw4iWlsPpTDbECS82xBj2BsQouBbE6UxGxQjqxsVZ+IbFeKvmxaiZhsXZPwbF6fh2xfjV1sYJJybGKfiWxon5Fsap+KbHCRv2xyi4Jsc5+SbHqMiGx9i0Rsfp+QbIGfjmyCn4tsg5eAbIiSvmyMk9dsjZ+MbJCflGySn5Nsk4xCbJaJq2yZjblsmp+NbJufj2yhlnZsopHybKuWl2yun5xssZ+dbLOJzWy4laZsuZb7bLqfn2y7jqFsvI/AbL2fmGy+n55sv4mIbMGLtWzEn5VsxZ+abMmQ8mzKlJFszJTlbNOfl2zVlkBs15+ZbNmfomzbn6Bs3Z+bbOGWQWzilGds44uDbOWTRGzoko1s6p+jbO+foWzwkdds8Z+WbPOJam0Ll21tDJ+ubRKfrW0XkPRtGZ+qbRuXjG0ek7RtH5+kbSWSw20piWttKo1ebSufp20yj0ZtM5+sbTWfq202n6ZtOJ+pbTuKiG09n6htPpRobUGXrG1Ej/JtRZDzbVmftG1an7JtXJVsbWOfr21kn7FtZolZbWmNX21qmFFtbIpcbW6Vgm10l4Ftd4pDbXiQWm15n7NthZ+4bYiPwW2Ml09tjp+1bZOfsG2Vn7ZtmZfcbZuTk22ck8Btr4pVbbKJdG21n7xtuJ+/bbyXwW3Al4RtxZ/GbcafwG3Hn71ty5fSbcyfw23Rj2lt0p/FbdWfym3Yk5Ft2Z/Ibd6fwm3hkldt5J/Jbeafvm3on8Rt6p/LbeuI+m3sn8Ft7p/MbfGQW23zj35t9ZWjbfeNrG35n7lt+p/HbfuTWW4FkLRuB4qJbgiNz24Jj8JuCp+7bguPYW4TjGtuFZ+6bhmf0G4aj41uG4y4bh2f324fn9luIIuUbiGTbm4jn9RuJJ/dbiWIrW4miVFuKYm3biuf1m4skapuLZ/Nbi6fz24vjWBuOJ/gbjqf224+n9NuQ5/abkqWqW5Nn9huTp/cblaMzm5Yj8NuW5JYbl+f0m5nl05ua5/Vbm6fzm5vk5Jucp/Rbnaf125+mHBuf468boCWnm6Cn+FujJSsbo+f7W6QjLlulo+Abpif426cl61unY1hbp+f8G6iiOxupZ/ubqqf4m6vn+husp/qbraXbm63n+VuupNNbr2f527Cn+9uxJ/pbsWWxW7Jn+Ruy46gbsyf/G7Riopu05/mbtSf627Vn+xu3ZHqbt6R2G7sn/Ru75/6bvKf+G70k0hu9+BCbvif9W7+n/Zu/5/ebwGLmW8ClVlvBo69bwmNl28PmFJvEZ/ybxPgQW8UiYlvFZGGbyCUmW8iir9vI5f4byuWn28sktBvMZ/5bzKf+284kVFvPuBAbz+f929Bn/FvRYrBb1SMiW9Y4E5vW+BJb1yQ9m9fioNvZI+Bb2bgUm9t4EtvbpKqb2/gSG9wktdvdOBrb3jgRW964ERvfOBNb4DgR2+B4EZvguBMb4SQn2+G4ENvjuBPb5HgUG+XisBvoeBVb6PgVG+k4FZvquBZb7GTYm+z4FNvueBXb8CMg2/BkfdvwuBRb8OUWm/G4Fhv1OBdb9XgW2/Y4F5v2+Bhb9/gWm/gjYpv4ZRHb+Sft2/rl5Rv7OBcb+7gYG/vkfNv8eBfb/PgSm/26Ilv+uBkb/7gaHAB4GZwCeBicAvgY3AP4GdwEeBlcBWVbXAY4G1wGuBqcBvgaXAd4GxwHpPScB/gbnAmkpVwJ5HrcCyQo3Aw4G9wMuBxcD7gcHBMn/NwUeBycFiT5XBj4HNwa4nOcG+TlHBwikRweIuEcHyO3HB9jdBwiZhGcIqQhnCOiYpwkuB1cJngdHCs4HhwrZJZcK7ge3Cv4HZws+B6cLjgeXC5k19wuojXcMiX83DL4H1wz4lHcNnggHDd4H5w3+B8cPHgd3D5lkJw/eCCcQnggXEUiYtxGeCEcRqVsHEc4INxIZazcSaPxXE2kVJxPI/EcUmX+XFM4IpxTpD3cVXghnFW4ItxWYmMcWLgiXFklIFxZeCFcWbgiHFnj8ZxaZTPcWzgjHFujs9xfZD4cYTgj3GI4IdxioxGcY/gjXGUl29xleCQcZnqpHGfj25xqOCRcazgknGxlE1xueCUcb7glXHDlFJxyJOVccngl3HO4Jlx0JfTcdLglnHU4Jhx1YmNcdfgk3Hfmnpx4OCaceWRh3Hmjldx5+Cccezgm3HtkENx7pnXcfXgnXH54J9x++COcfzgnnH/4KByBpSacg3goXIQ4KJyG+CjcijgpHIqktxyLOCmci3gpXIw4KdyMuCocjWO3XI2lYNyOpbqcjvgqXI84KpyPZF1cj6OonI/4KtyQOCsckbgrXJHldBySJTFckvgrnJMlHZyUpKrcljgr3JZieVyW4uNcl2WxHJflrRyYYmycmKYU3JnlnFyaZWocnKQtXJ04LByeZPBcn2MoXJ+4LFygI3ScoHgs3KC4LJyh+C0cpLgtXKW4LZyoItdcqLgt3Kn4LhyrIyicq+UxnKy4Lpyto/zcrnguXLCi7Zyw+C7csTgvXLG4LxyzuC+ctCMz3LS4L9y14vnctmRX3LbjZ1y4ODBcuHgwnLi4MBy6Y7rcuyTxnLti7dy9+DEcviSS3L54MNy/JhUcv2UgnMK4MdzFuDJcxfgxnMbltJzHODIcx3gynMfl8JzJeDOcyngzXMqkpZzK5RMcy6Mo3Mv4MxzNODLczaXUHM3l1FzPuDPcz+JjnNEjZZzRY6Cc07g0HNP4NFzV+DTc2OPYnNo4NVzauDUc3Dg1nNyimxzdeDYc3jg13N64Npze+DZc4SMunOHl6ZziYvKc4uJpHOWi+hzqYrfc7KX5nOz4Nxzu+Dec8Dg33PCic9zyODbc8qOWHPNkr9zzuDdc97g4nPgjuxz5eDgc+qMXXPtlMdz7uDhc/Hg/HP44Odz/oy7dAOLhXQF4OR0BpeddAmXrnQikfR0JeDmdDLg6HQzl9R0NIvVdDWU+nQ2lGl0OuDpdD/g63RB4O50VeDqdFng7XRajOh0W4lsdFzg73RekJB0X+DsdGCX2nRj4PJ0ZOqidGng8HRq4PN0b+DldHDg8XRzjbp0duD0dH7g9XSDl550i+D2dJ7g93Si4ON0p+D4dLCKwnS9jqN0yuD5dM/g+nTU4Pt03IladODhQHTilVp04+FBdOaKonTn4UJ06eFDdO7hRHTw4UZ08eFHdPLhRXT2lXJ09+FJdPjhSHUD4Ut1BOFKdQXhTHUM4U11DeFPdQ7hTnURjZl1E+FRdRXhUHUYisN1GpBydRyTW3Ue4VJ1H5C2dSOOWXUliZl1JuFTdSiXcHUrleF1LOFUdTCTY3Uxl1J1Mo1idTOQXHU3kmp1OJmydTqSrHU7ieZ1POFVdUThVnVG4Vt1SeFZdUrhWHVLncB1TIpFdU3hV3VPiNh1UZSodVSUyHVZl691WuFcdVvhWnVcknt1XZCkdWCUqXVilUx1ZOFedWWXqnVmjGx1Z+FfdWnhXXVqlNR1a+FgdW3hYXVwiNl1c4/0dXThZnV24WN1d5PrdXjhYnV/i0V1guFpdYbhZHWH4WV1ieFodYrhZ3WLlUR1jpFhdY+RYHWRi151lOFqdZrha3Wd4Wx1o+FudaXhbXWriXV1seF2dbKU5nWz4XB1teFydbjhdHW5kF11vOF1db3hc3W+jr51wuFvdcPhcXXFlWF1x4/HdcrheHXN4Xd10uF5ddSOpHXVja112JOXddnhenXbksl13uF8deKXn3Xj4Xt16ZGJdfDhgnXy4YR18+GFdfSSc3X64YN1/OGAdf7hfXX/4X52AeGBdgnhiHYL4YZ2DeGHdh/hiXYg4Yt2IeGMdiLhjXYk4Y52J+GKdjDhkHY04Y92O+GRdkKXw3ZG4ZR2R+GSdkjhk3ZMiuB2Upb8dlaVyHZY4ZZ2XOGVdmHhl3Zi4Zh2Z+GcdmjhmXZp4Zp2auGbdmzhnXZw4Z52cuGfdnbhoHZ44aF2epStdnuTb3Z84aJ2fZSSdn6VU3aA4aN2g+GkdoSTSXaGikZ2h41jdojhpXaL4aZ2juGndpCOSHaT4al2luGodpnhqnaa4at2rpTndrDhrHa04a12t+qJdrjhrna54a92uuGwdr+OTXbC4bF2w5R1dsaWfnbIiW12yol2ds3hsnbS4bR21uGzdteTkHbbkLd23J9Ydt7htXbflr924eG2duOKxHbklNV25eG3dufhuHbq4bl27pbadvKW03b0krx2+JGKdvvhu3b+j4J3AY/IdwThvncH4b13COG8dwmU+3cLisV3DIyndxvhxHce4cF3H5BedyCWsHck4cB3JeHCdybhw3cp4b93N+HFdzjhxnc6kq13PIrhd0CShXdH4cd3WuHId1vhy3dhkId3Y5PCd2XhzHdmlnJ3aOHJd2vhynd54c93fuHOd3/hzXeL4dF3juHQd5Hh0nee4dR3oOHTd6WVy3esj3V3rZfEd7Dh1Xezk7V3tuHWd7nh13e74dt3vOHZd73h2ne/4dh3x+Hcd83h3XfX4d532uHfd9uWtXfc4eB34pbud+Ph4Xflkm1355SKd+mL6Xftklp37uHid++LuHfzkM53/OHjeAKNu3gM4eR4EuHleBSMpHgVjdN4IOHneCWTdXgmjdR4J4tteDKWQ3g0lGp4OpN2eD+Ne3hF4el4XY/JeGuXsHhsjWR4b4yleHKUoXh04et4fOHteIGM6XiG4ex4h5L0eIzh73iNilZ4juHqeJGU6HiTiU94lY3qeJeYcXia4e54o+HweKeVyXipkNd4quHyeK/h83i14fF4uopteLzh+Xi+4fh4wY6leMXh+njG4fV4yuH7eMvh9njQlNZ40eH0eNTh93ja4kF45+JAeOiWgXjs4fx474jpePTiQ3j94kJ5AY/KeQfiRHkOkWJ5EeJGeRLiRXkZ4kd5JuHmeSrh6Hkr4kl5LOJIeTqOpnk8l+d5Po7QeUDiSnlBjFZ5R4tfeUiLRnlJjoN5UJdTeVPiUHlV4k95VpFjeVfiTHla4k55XY9qeV6QX3lf4k15YOJLeWKUSXllj8t5aJVbeW2N1Xl3k5h5euJReX/iUnmA4mh5gYvWeYSYXHmFkVR5iuJTeY2J0HmOkvV5j5WfeZ3iVHmmi5p5p+JVeariV3mu4lh5sJRIebPiWXm54lp5uuJbeb2L13m+idF5v5PDecCPR3nBjoR5yeJcecuPSHnRich50pViedXiXXnYlOl535FkeeHiYHnj4mF55JSJeeaQYHnn4l556ZKBeeziX3nwj8x5+4jaegCLSHoI4mJ6C5L2eg3iY3oOkMV6FJareheVQnoY4mR6GeJlehqSdHocl8V6H+JneiDiZnouju16MeJpejKI7no34mx6O+JqejyJ0no9jG16PuJrej+NZXpAjZJ6QpXkekPibXpGlnN6SeJvek2Qz3pOiW56T4m4elCIqnpX4m56YeJwemLicXpjj/V6aeJyemuKbnpw4nR6dIyKenaLhnp54nV6eovzen3idnp/kPp6gZPLeoOQ3nqEjfN6iOJ3epKSgnqTkYt6leJ5epbie3qX4nh6mOJ6ep+MQXqp4nx6qoxFeq6Lh3qvl3F6sOJ+erbigHq6iU16v+KDesOKlnrE4oJ6xeKBesfihXrI4n16yuKGesuXp3rN4od6z+KIetKa8nrT4op61eKJetnii3ra4ox63Jezet3ijXrf6O164I/NeuHijnri4o964492euWTtnrm4pB66pJHeu3ikXrvklt68OKSevaLo3r4mV56+ZJ8evqOsXr/isZ7AuKTewTioHsG4pZ7CIuIewrilXsL4qJ7D+KUexGPznsY4ph7GeKZexuTSnse4pp7IIp9eyWQeXsmlYR7KOKceyyR5nsz4pd7NeKbezbinXs5jfl7ReKke0aVTXtIlKR7SZOZe0uL2HtM4qN7TeKhe0+Us3tQ4p57UZJ9e1KTm3tUk5p7Vo30e13itntl4qZ7Z+Koe2ziq3tu4qx7cOKpe3Hiqnt04qd7deKle3rin3uGlc17h4nTe4vis3uN4rB7j+K1e5LitHuUlJN7lZale5eOWnuY4q57meK3e5risnuc4rF7neKte5/ir3uhisd7qpJce62Q+3uxlKB7tOK8e7iUonvAkN97weK5e8SUzXvG4r17x5XRe8mSenvL4rh7zOK6e8/iu3vd4r574I7Ce+STxHvl4sN75uLCe+niv3vtmFV78+LIe/bizHv34sl8AOLFfAfixnwN4st8EeLAfBKZ03wT4sd8FOLBfBfiynwf4tB8IYrIfCPizXwn4s58KuLPfCvi0nw34tF8OJT0fD3i03w+l/p8P5XrfEDi2HxD4tV8TOLUfE2Q0HxP4td8UOLZfFTi1nxW4t18WOLafF/i23xg4sR8ZOLcfGXi3nxs4t98c5XEfHXi4Hx+luB8gYvMfIKMSHyD4uF8iZWyfIuQiHyNlq58kOLifJKXsXyVlJR8l5FlfJiUU3ybj2x8n4i+fKHi53yi4uV8pOLjfKWKn3ynj898qOLofKvi5nyt4uR8ruLsfLHi63yy4up8s+LpfLni7Xy94u58vpC4fMDi73zC4vF8xeLwfMqM0HzOkVd80uLzfNaTnHzY4vJ83OL0fN6Vs3zfkYx84I1mfOLi9Xznl8Z87+L3fPLi+Hz04vl89uL6fPiOhXz64vt8+4xufP6Lin0Ai0l9AuNAfQSW8X0FjWd9BuL8fQrjQ30LluR9DZRbfRCVUn0Uj4N9FeNCfReO0X0YjWh9GY6GfRqLiX0blbR9HONBfSCRZn0hlmF9Io31fSuOh30sktt9LuNGfS+X3X0wjdd9MuNHfTOQYX0140l9OY/QfTqNrn0/40h9Qo9JfUOMvH1EkWd9ReNEfUbjSn1L40V9TIxvfU7jTX1P41F9UIyLfVbjTH1b41V9Xo1pfWGXjX1iiLp9Y+NSfWaLi31o4099buNQfXGTnX1y4059c+NLfXWKR312kOJ9eYymfX3jV32J41R9j+NWfZPjU32ZjHB9mpGxfZvjWH2ckY59n+NlfaLjYX2j41t9q+NffayO+H2tiNt9ruNafa/jYn2w42Z9sY1qfbKW1H20ktR9teNcfbjjZH2641l9u5Jdfb3jXn2+iLt9v5bIfcfjXX3Ki9l9y5Tqfc+RjX3Rl8590o+PfdXjjn3Y42d92pD8fdzjY33d42h93uNqfeCS933h42195ONpfeiV0n3pisl97JbJfe+I3H3y42x99Jf7ffvja34BiY9+BJPqfgXjbn4J43V+CuNvfgvjdn4S43J+G5Sbfh6OyH4f43R+IeNxfiLjd34j43B+Jo9jfiuWRH4uj2t+MeNzfjLjgH4143t+N+N+fjnjfH4644F+O+N6fj3jYH4+kNF+QZTJfkPjfX5G43h+SpFAfkuMcX5Nj0p+VJBEflWRVX5W44R+WeOGflrjh35d44N+XuOFfmbjeX5n44J+aeOKfmrjiX5tlpp+cIxKfnnjiH5744x+fOOLfn3jj35/45F+go5bfoPjjX6I45J+ieOTfozjlH6O45p+j5NafpDjln6S45V+k+OXfpTjmH6W45l+m+ObfpzjnH82isp/OOOdfzrjnn9F459/TOOgf03joX9O46J/UOOjf1HjpH9U46Z/VeOlf1jjp39f46h/YOOpf2fjrH9o46p/aeOrf2qN339rjHJ/bpJ1f3CUsX9yj5B/dZRsf3eU6394461/eZzrf4Ljrn+D47B/hZeFf4bjr3+H47J/iOOxf4qXcn+M47N/jpT8f5TjtH+a47d/neO2f57jtX+j47h/pIxRf6iRQX+pi2B/ruO8f6/juX+y47p/tuO9f7jjvn+547t/vYlIf8GJpX/F48B/xuPBf8rjwn/Ml4J/0o9Lf9TjxH/V48N/4JCJf+HjxX/m48Z/6ePHf+uK43/wist/8+PIf/njyX/7lnx//JeDgACXc4ABmFaAA41sgATjzIAFjtKABuPLgAvjzYAMjqeAEJHPgBLjzoAVjWuAF5bVgBjjz4AZ49CAHOPRgCHj0oAo49OAM46ogDaW64A749WAPZJegD/j1IBG49eASuPWgFLj2IBWkLmAWOPZgFrj2oBelbeAX+PbgGGRj4Bi49yAaOPdgG+X/IBw4+CAcuPfgHPj3oB0kq6AduPhgHeQRYB54+KAfePjgH6YV4B/4+SAhOPlgIXj54CG4+aAh5SjgImT94CLmF2AjJSngJPj6YCWj9GAmJVJgJrj6oCb4+iAnYrMgKGM0oCijoiApZTsgKmMqICqlmKArOPtgK3j64CvjW2AsY1ugLKI54C0jeaAupR4gMOI3YDE4/KAxpJfgMyUd4DOkdmA1uP0gNnj8IDa4/OA2+PugN3j8YDelkWA4YzTgOSI+4Dl4++A7+P2gPHj94D0k7eA+Iu5gPzkRYD9lFyBAo6JgQWLuoEGkMaBB5hlgQiWrIEJ4/WBCpDSgRqLcoEb4/iBI+P6gSnj+YEv4/uBMZJFgTOUXYE5kq+BPuRCgUbkQYFL4/yBTpB0gVCVhYFR5ESBU+RDgVSNb4FVmHKBX+RUgWXkSIFm5EmBa47ugW7kR4FwjZiBceRGgXTkSoF4krCBeZWggXqRQoF/kdqBgOROgYLkT4GD5EuBiORMgYrkTYGPjXCBk+RVgZXkUYGalYaBnJaMgZ2VR4Gg5FCBo+RTgaTkUoGolmOBqeRWgbDkV4GzkVaBteRYgbjkWoG65F6BveRbgb7kWYG/lF6BwORcgcLkXYHGibCByORkgcnkX4HN5GCB0eRhgdORn4HY5GOB2eRigdrkZYHf5GaB4ORngeOQYoHlieeB5+RogeiX1YHqjqmB7Y9MgfOOioH0knaB+uRpgfvkaoH8iVCB/uRrggHkbIIC5G2CBeRuggfkb4IIi7uCCZ2oggrkcIIMkOOCDeRxgg6OyYIQ5HKCEpiughbkc4IXldyCGIraghuRQ4Icj3eCHpWRgh+PTYIp5HSCKo1xgivkdYIslMqCLuSEgjPkd4I1kceCNpSVgjeMvYI45HaCOZFEgkDkeIJHkviCWOR6glnkeYJa5HyCXeR7gl/kfYJi5ICCZOR+gmaKzYJo5IGCauSCgmvkg4Juja+Cb5fHgnHkhYJykEaCdomQgnfkhoJ45IeCfuSIgouI8IKN5ImCkuSKgpmVh4KdjsWCn+SMgqWKSIKmiLCCq+SLgqzkjoKtlG2Cr5BjgrGJ1IKzlkaCuIx8grmL2oK75I2CvYnogsWKoYLRiZGC0uSSgtOX6ILUkduC15VjgtnknoLbidWC3OScgt7kmoLf5JGC4eSPguPkkILljuGC5ovqgueSl4Lrk8+C8YlwgvPklIL05JOC+eSZgvrklYL75JiDApbOgwPkl4MEidaDBYqdgwbkm4MJ5J2DDoxzgxbkoYMX5KqDGOSrgxyIqYMj5LKDKIjvgyvkqYMv5KiDMeSjgzLkooM05KCDNeSfgzaSg4M4kfmDOeSlg0DkpINF5KeDSZGQg0qMdINPiWCDUOSmg1KNcoNYkZGDc+S4g3XkuYN3ideDe4msg3zktoOF5KyDh+S0g4nku4OK5LWDjuSzg5PkloOW5LGDmuStg56KzoOf5K+DoOS6g6LksIOo5LyDquSug6uUnIOxl4mDteS3g73kzYPB5MWDxZCbg8qLZYPMi9uDzuTAg9OJ2YPWj9KD2OTDg9yN2IPfk3CD4OTIg+mV7IPr5L+D74nYg/CM1IPxlUiD8uTJg/TkvYP35MaD++TQg/3kwYQD5MKEBJO4hAfkx4QL5MSEDJZHhA3kyoQOiN6EE+S+hCDkzIQi5MuEKZSLhCrk0oQs5N2EMYqehDXk4IQ45M6EPOTThD2XjoRG5NyESZd0hE6XqIRXkpiEW4qLhGGVkoRi5OKEY5OfhGaIr4Rp5NuEa+TXhGyRkoRt5NGEbuTZhG/k3oRxlEuEdYiohHfk1oR55N+EepWYhILk2oSE5NWEi4/ThJCPToSUjqqEmZbWhJyVZoSf5OWEoeTuhK3k2ISyipeEuI/2hLnk44S75OiEvJGThL/k5ITB5OuExJJ+hMbk7ITJl3WEyuThhMuKV4TN5OeE0OTqhNGWqoTW5O2E2eTmhNrk6YTslkiE7phAhPTk8YT85PiE/+TwhQCOwYUG5M+FEZXMhROWoIUU5PeFFeT2hRfk8oUY5POFGolVhR/k9YUh5O+FJpLThSzk9IUtiPyFNZGghT2VwYVA5PmFQeVAhUOU14VI5PyFSY/UhUqOx4VL5UKFTou8hVXlQ4VXlZmFWOT7hVrk1IVj5PqFaJhuhWmToIVqlZOFbeVKhXflUIV+5VGFgOVEhYSUloWH5U6FiOVGhYrlSIWQ5VKFkeVHhZTlS4WXiZKFmZPjhZvlTIWc5U+FpOVFhaaRRYWo5UmFqY5GhaqQZIWrjE+FrJbyha6W94Wvj5KFueVWhbrlVIXBmG2FyeVThc2XlYXP5VWF0OVXhdXlWIXc5VuF3eVZheSToYXl5VqF6ZTLherlTYX3j5OF+eVchfrlYYX7kZSF/uVghgLlQYYG5WKGB5FohgrlXYYL5V+GE+VehhafUIYXn0GGGuVkhiLlY4Ytl5aGL+G6hjDlZYY/5WaGTeVnhk6M1YZQi3OGVOVphlWZfIZai5WGXJe4hl6L8YZf5WqGZ+VrhmuSjoZx5WyGeZP4hnuIuIaKieGGi+VxhozlcoaT5W2GlY5chqPlboaklGGGqeVvhqrlcIar5XqGr+V0hrDld4a25XOGxOV1hsbldobHjtaGyeV4hsuSYIbNjHWGzophhtTle4bZil6G2+WBht7lfIbf5YCG5JS4hunlfYbs5X6G7ZVnhu6U2Ibv5YKG+JH7hvnljIb75YiG/onphwDlhocClkmHA+WHhwblhIcI5YWHCeWKhwrljYcN5YuHEeWJhxLlg4cYkneHGuWUhxyWqIcl5ZKHKeWThzTljoc35ZCHO+WRhz/lj4dJkOSHS5hYh0zlmIdO5ZmHU+Wfh1WQSYdX5ZuHWeWeh1/llodg5ZWHY+Wgh2aJ2odo5ZyHauWhh27lnYd05ZqHdpKxh3jll4d/lIiHguWlh42XWoef5aSHouWjh6vlrIev5aaHs+Wuh7qXhoe75bGHveWoh8DlqYfE5a2HxuWwh8flr4fL5aeH0OWqh9Llu4fg5bSH7+Wyh/Lls4f25biH9+W5h/mKSYf7i2GH/uW3iAXloogN5baIDuW6iA/ltYgR5byIFeW+iBblvYgh5cCIIuW/iCPleYgn5cSIMeXBiDblwog55cOIO+XFiECMjIhC5ceIROXGiEaPT4hMjXOITZ+liFLlyIhTj3CIV4pYiFnlyYhbiXGIXY/ViF7lyohhjXSIYuXLiGOI34holVyIa+XMiHCQiohy5dOIdeXQiHeSj4h95dGIfuXOiH+L3IiB5c2IguXUiIiMVYiLkdyIjeXaiJLl1oiWkbOIl+XViJnl2Iie5c+IouXZiKTl24irlO2IruXXiLDl3Iix5d6ItIzRiLXl0oi3iL+Iv+XdiMGN2YjCl/SIw+XfiMTl4IjFkZWIz5egiNTl4YjVl1SI2OXiiNnl44jcleKI3eXkiN+Nvojhl6GI6OXpiPLl6ojzj9aI9OXoiPiXh4j55eWI/OXniP2Qu4j+kJ6JAuXmiQTl64kHlaGJCuXtiQzl7IkQioyJEpZKiRPl7okd5fqJHuXwiSXl8Ykq5fKJK+XziTbl94k45fiJO+X2iUHl9IlD5e+JROX1iUzl+YlN6LWJVommiV7l/Ilfi92JYOX7iWTmQYlm5kCJauZDiW3mQolv5kSJco9QiXTmRYl35kaJfuZHiX+QvImBl3aJg+ZIiYaVoomHlGWJiOZJiYrmSomLjKmJj4tLiZPmS4mWjouJl5RgiZjmTImaim+JoeZNiabmT4mnl5eJqeZOiaqQZYms5lCJr+ZRibLmUomzis+JuuZTib3mVIm/5lWJwOZWidKKcIna5leJ3OZYid3mWYnjifCJ5pBHiefmWon05luJ+OZcigCMvooCkvmKA+ZdigiMdooKkHWKDOZgig6ToooQ5l+KE4xQihbmXooXkfWKGItMihvmYYod5mKKH4/XiiOMjYol5mOKKpZLii2Q3Yoxi5aKM5bzijSRaYo25mSKOpBmijuSkIo8j9iKQeZlikbmaIpI5mmKUI28ilGRwIpS5meKVI/ZilWVXYpb5maKXo6MimCJcopi5m2KY4x3imaOjoppjo2Ka5hsimzmbIpt5muKbpFGinCLbIpxmGKKcopZinOP2op85mqKguZvioTmcIqF5m6Kh4zWiomXX4qMjo+KjZRGipHmc4qTkL6KlZJhipiXVYqa5naKnozqiqCQvYqh5nKKo+Z3iqSM64ql5nSKpuZ1iqjmcYqskOCKrZPHirCSToqyiduKuZTuiryLYoq/krKKwuZ6isTmeIrHkmuKy5C/isyK0IrN5nmKz5B6itKXyIrWmF+K2uZ7itvmh4rckrOK3uaGiuDmg4rh5ouK4uaEiuTmgIrmkvqK5+Z+iuvmfIrtl0CK7o6QivHmgYrz5n2K9+aFiviPlIr6jL+K/pH4iwCWZIsBiXmLAojgiwSTo4sH5omLDOaIiw6T5IsQ5o2LFOaCixbmjIsX5o6LGYyqixrmiosbjXWLHY7TiyDmj4shl3eLJuaSiyjmlYsr5pOLLJVUizPmkIs5i96LPuaUi0HmlotJ5pqLTOaXi07mmYtP5piLVuabi1iOr4ta5p2LW+aci1yViItf5p+LZox4i2vmnots5qCLb+ahi3CLY4tx47+Lco/3i3Tmoot3jOyLfeaji4DmpIuDjl2Lip3Mi4zmpYuO5qaLkI9Ri5Lmp4uT5qiLluapi5nmqoua5quMN5JKjDrmrIw/5q6MQeatjEaTpIxI5q+MSpZMjEzmsIxO5rGMUOayjFXms4xak9iMYY/bjGLmtIxqjYuMa5isjGzmtYx45raMeZVejHrmt4x85r+Mgua4jIXmuoyJ5rmMiua7jIyWZYyN5ryMjua9jJTmvoyY5sCMnYpMjJ6S5YyglYmMoY3gjKKNdoynlW6MqIndjKmUzIyq5sOMq4rRjKyQ04yt5sKMrubHjK+SmYywluGMsubFjLPmxoy0i02MtubIjLeUg4y4kd2Mu5TvjLyTXIy95sSMv5ZmjMCJ6ozB5sqMwphHjMOSwIzEmGSMx46RjMjmyYzKka+MzebajM6RR4zRk/aM05VvjNrmzYzbjl6M3I6SjN6P3IzglIWM4oyrjOPmzIzk5suM5pWKjOqOv4ztk3GM+ubPjPvm0Iz8jXeM/ebOjQTm0Y0F5tKNB+bUjQiRoY0K5tONC4rkjQ3m1o0P5tWNEObXjRPm2Y0U5tuNFubcjWSQ1I1mjs2NZ+bdjWuKcY1t5t6NcJGWjXHm341z5uCNdJWLjXeLTo2B5uGNhZK0jYqJeo2Z5uKNo47vjaiQlo2zkauNuubljb7m5I3C5uONy+brjczm6Y3P5uaN1ubojdrm543b5uqN3YuXjd/m7o3hkNWN4+bvjeiM143q5uyN6+btje+YSI3zkrWN9ZFIjfzm8I3/5vOOCObxjgnm8o4Kl3iOD5OljhDm9o4d5vSOHub1jh/m944q50iOMOb6jjTm+4415vmOQub4jkSS+45H50COSOdEjknnQY5K5vyOTOdCjlDnQ45V50qOWedFjl+Q1o5g50eOY+dJjmTnRo5y50yOdI9SjnbnS458502OgedOjoTnUY6F51COh+dPjornU46L51KOjZb0jpHnVY6T51SOlOdWjpnnV46h51mOqudYjquQZ46s51qOr4vrjrDnW46x512OvudejsXnX47G51yOyOdgjsqO1I7L52GOzItPjs2MUo7SjKyO2+dijt+T7o7ik12O4+djjuvnZo74jrKO++dljvznZI79jHmO/udnjwOKco8F52mPCY3ajwrnaI8M53GPEudrjxPnbY8UleOPFedqjxnnbI8b53CPHOdujx2LUI8f52+PJudyjymUeY8ql9aPL49TjzPnc484l0GPOed1jzvndI8+53iPP5dgj0Lnd49Eio2PRed2j0bne49J53qPTOd5j02TUY9O53yPV+d9j1znfo9fjYyPYYxEj2LngI9j54GPZOeCj5uQaI+c54OPno6rj5/nhI+j54WPp5mfj6iZno+t54aPruOQj6/nh4+wkkOPsZBKj7KUX4+354iPupXTj7uS0o+8jZ6Pv5JIj8KJSY/ElpiPxZB2j86MfY/Ri9+P1JXUj9rniY/i54uP5eeKj+aJ3o/pk/SP6ueMj+uUl4/tk1KP7+eNj/CPcY/054+P95bAj/jnno/555GP+ueSj/2Sx5AAkd6QAZGXkAOTppAF55CQBot0kAvnmZAN55aQDuejkA+Tp5AQkoCQEeeTkBOS/JAUk3KQFeeUkBbnmJAXkICQGZSHkBqSypAdkMCQHueXkB+RrJAgkaKQIeeVkCKIp5AjmEGQJ+eakC6R35Axj1SQMpBpkDXnnJA255uQOIjtkDnnnZA8lU6QPuelkEGT2ZBCkIuQRZJ4kEeL9pBJ56SQSpdWkEuJXpBNldWQTonfkE/nn5BQ56CQUeehkFLnopBTk7mQVJJCkFWI4ZBW56aQWOenkFnqoZBckbuQXueokGCJk5BhkWuQY4ytkGWXeZBo56mQaZNLkG2RmJBujtWQb+eqkHLnrZB1j4WQduerkHeRSpB4kUmQeojikHyXyZB956+Qf5TwkIDnsZCB57CQgueukIPihJCEitKQh+eOkInns5CK57KQj+e0kJGXV5Cjk9+QppZNkKjntZCqjteQr+e2kLHnt5C157iQuJNAkMGI6JDKjXiQzphZkNvnvJDhjFOQ4ue5kOTnupDolZSQ7YpzkPWXWJD3i72Q/ZNzkQLnvZES576RGee/kS2TQZEw58GRMufAkUmT0ZFK58KRS49VkUyO3pFNlHqRTpKRkVKO8JFUkIyRVufDkVjnxJFikHyRY+fFkWXnxpFp58eRapePkWyPVpFy58mRc+fIkXWNeZF3jZOReI5fkYLnzJGHj4aRiefLkYvnypGNkeeRkIztkZKQwZGXlK6RnI9YkaLnzZGkj92RqufQkavnzpGv58+RtOfSkbXn0ZG4j/iRuufTkcDn1JHB59WRxpTOkceN0ZHIjt+RyefWkcvn15HMl6KRzY9kkc6W7JHPl8qR0OfYkdGL4JHW59mR2JNCkdvn3JHcipiR3ZBqkd/n2pHh59uR45LekeaWdJHni/qR9efekfbn35H8592R/+fhkg2T3ZIOimKSEeflkhTn4pIV5+SSHufgkinobpIs5+OSNJfpkjeM2JI/5+2SRJNTkkXn6JJI5+uSSefpkkvn7pJQ5++SV+fnklrn9JJbiZSSXufmkmKUq5Jk5+qSZo/eknGNepJ+lmeSgIvikoOPZZKFk7qSkZFMkpPn8pKV5+ySlufxkpiWwZKakraSm+fzkpzn8JKtkUuSt+f3krnn9pLP5/WS0pZOkuSPm5Lp5/iS6pXdku2Jc5LylWWS85KSkviLmJL65/qS/I18kwaOS5MP5/mTEJCNkxiQjpMZ6ECTGuhCkyCP+ZMi6EGTI+hDkyaL0ZMolWSTK47gkyyYQpMu5/yTL432kzKYXpM16EWTOuhEkzvoRpNE5/uTS5Pnk02TdJNUktWTVuhLk1uSYpNc6EeTYOhIk2yMTJNu6EqTdYyuk3zoSZN+j9+TjIqZk5ToT5OWjb2Tl5GZk5qSyJOnilqTrOhNk63oTpOuksGTsOhMk7noUJPD6FaTyOhZk9DoWJPRk0yT1uhRk9foUpPY6FWT3ehXk+GLvpPk6FqT5ehUk+joU5QD6F6UB+hflBDoYJQT6F2UFOhclBiP4JQZk6iUGuhblCHoZJQr6GKUNehjlDboYZQ4kfaUOuhllEHoZpRE6GiUUYrTlFLoZ5RTlviUWuhzlFvoaZRe6GyUYOhqlGLoa5Rq6G2UcOhvlHXocJR36HGUfOh0lH3ocpR+6HWUf+h3lIHodpV3kreVgJbllYLoeJWDkU2Vh+h5lYmVwpWK6HqVi4pKlY+JW5WRitWVk4rUlZToe5WW6HyVmOh9lZnofpWg6ICVoorWlaOKdJWkjX2VpZS0lafogpWo6IGVreiDlbKJe5W56IaVu+iFlbzohJW+6IeVw+iKlceIxZXK6IiVzOiMlc3oi5XU6I6V1eiNldboj5XYk6yV3OiQleHokZXi6JOV5eiSlhyVjJYh6JSWKOiVliqN45Yu6JaWL+iXljKWaJY7kWqWP4iilkCRyZZC6JiWRJWNlkvom5ZM6JmWTY1+lk/ompZQjMCWW5XDllzonZZd6J+WXuiell/ooJZiiUCWY5B3lmSPnJZliteWZuihlmqUhpZs6KOWcIlBlnLoopZzksKWdZfLlnaTqZZ36JyWeJeklnqMr5Z9l3qWhYv3loaXspaIjEeWipHglovkQJaN6KSWjopLlo+Qj5aUinWWleimlpfop5aY6KWWmYyElpuN25acj+GWoIlClqOX15an6KmWqOeslqroqJaw6KyWseiqlrLoq5a06K2WtuiulreX6pa46K+WueiwlruQx5a8lLmWwJCdlsGK5ZbEl1mWxYnrlsaPV5bHjNmWyeizlsvospbMjpOWzei0ls7osZbRjkeW1ei4ltblq5bZmdSW25CXltzotpbil6OW45PvluiJSpbqkOGW6460lvCVtZbyiV+W9pfrlveXi5b56LmW+5NklwCO+ZcE6LqXBui7lweQa5cI6LyXCpfslw3ot5cO6L6XD+jAlxHov5cT6L2XFujBlxnowpcckZqXHonglyTow5cnlraXKujElzDoxZcymEmXOJ5Qlznoxpc96MeXPujIl0LozJdE6MmXRujKl0joy5dJ6M2XUpDCl1aW9ZdZkMOXXOjOl16U8Zdg6M+XYepyl2KWypdk6NCXZujRl2jo0pdpinaXa+jUl22QeJdx6NWXdIxDl3no1pd66NqXfOjYl4Ho2ZeEipOXhejXl4bo25eL6NyXjYjGl4/o3ZeQ6N6XmI/il5zo35egi2aXo+jil6bo4Zeo6OCXq+aRl62V2pez6OOXtOjkl8Po5ZfG6OaXyOjnl8vo6JfTitiX3Ojpl+3o6pfulEKX8ujsl/OJuZf16O+X9ujul/uJQ5f/i7+YAZXFmAKSuJgDjaCYBY2AmAaPh5gIkHuYDOjxmA/o8JgQl2GYEYrmmBKU0JgTk9qYF5CcmBiXzJgajHqYIej0mCTo85gslmqYLZOqmDSJb5g36PWYOOjymDuVcJg8l4qYPej2mEbo95hL6PmYTJHomE2KephOinuYT+j4mFSK55hVjLCYWIromFuTXphel96YZ4zamGvo+phv6PuYcOj8mHHpQJhz6UKYdOlBmKiVl5iq6UOYr+lEmLHpRZi26UaYw+lImMTpR5jG6UmY25TymNzjypjfkEiY4otRmOnpSpjr6UuY7ZmqmO6fWpjvlNGY8oj5mPSIuZj8jpSY/ZZPmP6P/JkD6UyZBZbdmQnpTZkKl3uZDIlhmRCOYJkS6U6ZE4nsmRTpT5kY6VCZHelSmR7pU5kg6VWZIelRmSTpVJkoitmZLOlWmS7pV5k96ViZPulZmULpWplF6VyZSelbmUvpXplM6WGZUOldmVHpX5lS6WCZVelimVeLwJmWjvGZl+ljmZjpZJmZjYGZpellmaiKXZmslG6Zrelmma7pZ5mzknmZtJPpmbzpaJnBlJ2ZxJHKmcWJd5nGi+yZyIvtmdCSk5nR6W2Z0ovumdWJ7ZnY6WyZ2+lqmd3pa5nf6WmZ4ul3me3pbpnu6W+Z8elwmfLpcZn46XOZ++lymf+PeJoB6XSaBel2mg6LUpoP6XWaEpGbmhOMsZoZ6XiaKJHLmivpeZowk6uaN+l6mj7pgJpA6X2aQul8mkPpfppF6XuaTemCmlXpgZpX6YSaWovBmlvpg5pf6YWaYumGmmTpiJpl6YeaaemJmmrpi5pr6YqaqI2cmq3pjJqw6Y2auIpbmrzpjprA6Y+axJCRms/pkJrR6ZGa0+mSmtTpk5rYjYKa3umUmt/plZri6Zaa4+mXmubpmJrqlK+a6+mamu2VRZru6Zua7+mZmvHpnZr06Zya9+memvvpn5sG6aCbGOmhmxrpopsf6aObIumkmyPppZsl6aabJ+mnmyjpqJsp6ambKumqmy7pq5sv6aybMZ9UmzLprZs74vabPItTm0GKQJtCjbCbQ+mvm0TprptFlqObTemxm07psptP6bCbUemzm1SWgptY6bSbWoubm2+YRJt06bWbg+m3m46IvJuR6bibkpWpm5PptpuW6bmbl+m6m5/pu5ug6bybqOm9m6qWjpurjkybrY34m66RTpu06b6buenBm8Dpv5vG6cKbyYzvm8rpwJvP6cOb0enEm9LpxZvU6cmb1o5Jm9uR4pvh6cqb4unHm+Ppxpvk6cib6Ix+m/Dpzpvx6c2b8unMm/WIsZwE6dicBunUnAjp1ZwJ6dGcCunXnAzp05wNioKcEJhrnBLp1pwT6dKcFOnQnBXpz5wb6dqcIendnCTp3Jwl6ducLZVonC7p2ZwviPGcMOnenDLp4Jw5io+cOunLnDuJVpw+6eKcRunhnEfp35xIkkycUpaQnFeX2Jxa6eOcYOnknGfp5Zx26eaceOnnnOWSuZzn6eic6ZS1nOvp7Zzs6emc8OnqnPOWUJz0lsKc9pPOnQPp7p0G6e+dB5O8nQjp7J0J6eudDomonRLp950V6fadG4mVnR/p9J0j6fOdJunxnSiKm50q6fCdK46wnSyJp507jYOdPun6nT/p+Z1B6fidROn1nUbp+51I6fydUOpEnVHqQ51Z6kWdXIlMnV3qQJ1e6kGdYI2UnWGWt51k6kKdbJZRnW/qSp1y6kadeupLnYfqSJ2J6kedj4x7nZrqTJ2k6k2dqepOnavqSZ2v6fKdsupPnbSS35246lOduupUnbvqUp3B6lGdwupXncTqUJ3G6lWdz+pWndPqWZ3Z6lid5upbne3qXJ3v6l2d8phonfjqWp35kemd+o3rnf3qXp4a6l+eG+pgnh7qYZ516mKeeIyynnnqY5596mSef46tnoHqZZ6I6maei+pnnozqaJ6R6muekuppnpOYW56V6mqel5ftnp3qbJ6fl9mepeptnqaUnp6p6m6equpwnq3qcZ646m+euY2NnrqWy567loOevJv1nr6fgJ6/lpuexImpnszqc57Ni2+ezup0ns/qdZ7Q6nae0o2VntTqd57Y4NKe2ZbZntuR4Z7c6nie3ep6nt7qeZ7g6nue5ep8nujqfZ7v6n6e9OqAnvbqgZ736oKe+eqDnvvqhJ786oWe/eqGnwfqh58I6oifDpNDnxOM258V6oqfIJFsnyHqi58s6oyfO5VAnz7qjZ9K6o6fS+JWn07m2J9P6OufUuqPn1TqkJ9f6pKfYOqTn2HqlJ9il+6fY+qRn2bqlZ9n6pafauqYn2zql59y6pqfduqbn3fqmZ+Nl7Sfleqcn5zqnZ+d4nOfoOqe/wGBSf8DgZT/BIGQ/wWBk/8GgZX/CIFp/wmBav8KgZb/C4F7/wyBQ/8OgUT/D4Fe/xCCT/8RglD/EoJR/xOCUv8UglP/FYJU/xaCVf8Xglb/GIJX/xmCWP8agUb/G4FH/xyBg/8dgYH/HoGE/x+BSP8ggZf/IYJg/yKCYf8jgmL/JIJj/yWCZP8mgmX/J4Jm/yiCZ/8pgmj/KoJp/yuCav8sgmv/LYJs/y6Cbf8vgm7/MIJv/zGCcP8ygnH/M4Jy/zSCc/81gnT/NoJ1/zeCdv84gnf/OYJ4/zqCef87gW3/PIFf/z2Bbv8+gU//P4FR/0CBTf9BgoH/QoKC/0OCg/9EgoT/RYKF/0aChv9Hgof/SIKI/0mCif9Kgor/S4KL/0yCjP9Ngo3/ToKO/0+Cj/9QgpD/UYKR/1KCkv9TgpP/VIKU/1WClf9Wgpb/V4KX/1iCmP9Zgpn/WoKa/1uBb/9cgWL/XYFw/2EAof9iAKL/YwCj/2QApP9lAKX/ZgCm/2cAp/9oAKj/aQCp/2oAqv9rAKv/bACs/20Arf9uAK7/bwCv/3AAsP9xALH/cgCy/3MAs/90ALT/dQC1/3YAtv93ALf/eAC4/3kAuf96ALr/ewC7/3wAvP99AL3/fgC+/38Av/+AAMD/gQDB/4IAwv+DAMP/hADE/4UAxf+GAMb/hwDH/4gAyP+JAMn/igDK/4sAy/+MAMz/jQDN/44Azv+PAM//kADQ/5EA0f+SANL/kwDT/5QA1P+VANX/lgDW/5cA1/+YANj/mQDZ/5oA2v+bANv/nADc/50A3f+eAN7/nwDf/+OBUP/lgY8=';
822
848
 
823
- var base64DecodeInputStream = function (str) {
824
- var _str = str;
825
- var _pos = 0;
826
- var _buffer = 0;
827
- var _buflen = 0;
828
- var _this = {
829
- read: function () {
830
- while (_buflen < 8) {
831
- if (_pos >= _str.length) {
832
- if (_buflen == 0) {
833
- return -1;
834
- }
835
- throw 'unexpected end of file./' + _buflen;
836
- }
837
- var c = _str.charAt(_pos);
838
- _pos += 1;
839
- if (c == '=') {
840
- _buflen = 0;
841
- return -1;
842
- }
843
- else if (c.match(/^\s$/)) {
844
- continue;
845
- }
846
- _buffer = (_buffer << 6) | decode(c.charCodeAt(0));
847
- _buflen += 6;
848
- }
849
- var n = (_buffer >>> (_buflen - 8)) & 0xff;
850
- _buflen -= 8;
851
- return n;
852
- }
853
- };
854
- var decode = function (c) {
855
- if (0x41 <= c && c <= 0x5a) {
856
- return c - 0x41;
857
- }
858
- else if (0x61 <= c && c <= 0x7a) {
859
- return c - 0x61 + 26;
860
- }
861
- else if (0x30 <= c && c <= 0x39) {
862
- return c - 0x30 + 52;
863
- }
864
- else if (c == 0x2b) {
865
- return 62;
866
- }
867
- else if (c == 0x2f) {
868
- return 63;
869
- }
870
- else {
871
- throw 'c:' + c;
872
- }
873
- };
874
- return _this;
875
- };
876
- var createStringToBytes = function (unicodeData, numChars) {
877
- var unicodeMap = (function () {
878
- var bin = base64DecodeInputStream(unicodeData);
879
- var read = function () {
880
- var b = bin.read();
881
- if (b == -1)
882
- throw 'eof';
883
- return b;
884
- };
885
- var count = 0;
886
- var unicodeMap = {};
887
- while (true) {
888
- var b0 = bin.read();
889
- if (b0 == -1)
890
- break;
891
- var b1 = read();
892
- var b2 = read();
893
- var b3 = read();
894
- var k = String.fromCharCode((b0 << 8) | b1);
895
- var v = (b2 << 8) | b3;
896
- unicodeMap[k] = v;
897
- count += 1;
898
- }
899
- if (count != numChars) {
900
- throw count + ' != ' + numChars;
901
- }
902
- return unicodeMap;
903
- })();
904
- var unknownChar = '?'.charCodeAt(0);
905
- return function (s) {
906
- var bytes = [];
907
- for (var i = 0; i < s.length; i += 1) {
908
- var c = s.charCodeAt(i);
909
- if (c < 128) {
910
- bytes.push(c);
911
- }
912
- else {
913
- var b = unicodeMap[s.charAt(i)];
914
- if (typeof b == 'number') {
915
- if ((b & 0xff) == b) {
916
- bytes.push(b);
917
- }
918
- else {
919
- bytes.push(b >>> 8);
920
- bytes.push(b & 0xff);
921
- }
922
- }
923
- else {
924
- bytes.push(unknownChar);
925
- }
926
- }
927
- }
928
- return bytes;
929
- };
930
- };
849
+ var base64DecodeInputStream = function (str) {
850
+ var _str = str;
851
+ var _pos = 0;
852
+ var _buffer = 0;
853
+ var _buflen = 0;
854
+ var _this = {
855
+ read: function () {
856
+ while (_buflen < 8) {
857
+ if (_pos >= _str.length) {
858
+ if (_buflen == 0) {
859
+ return -1;
860
+ }
861
+ throw 'unexpected end of file./' + _buflen;
862
+ }
863
+ var c = _str.charAt(_pos);
864
+ _pos += 1;
865
+ if (c == '=') {
866
+ _buflen = 0;
867
+ return -1;
868
+ }
869
+ else if (c.match(/^\s$/)) {
870
+ continue;
871
+ }
872
+ _buffer = (_buffer << 6) | decode(c.charCodeAt(0));
873
+ _buflen += 6;
874
+ }
875
+ var n = (_buffer >>> (_buflen - 8)) & 0xff;
876
+ _buflen -= 8;
877
+ return n;
878
+ }
879
+ };
880
+ var decode = function (c) {
881
+ if (0x41 <= c && c <= 0x5a) {
882
+ return c - 0x41;
883
+ }
884
+ else if (0x61 <= c && c <= 0x7a) {
885
+ return c - 0x61 + 26;
886
+ }
887
+ else if (0x30 <= c && c <= 0x39) {
888
+ return c - 0x30 + 52;
889
+ }
890
+ else if (c == 0x2b) {
891
+ return 62;
892
+ }
893
+ else if (c == 0x2f) {
894
+ return 63;
895
+ }
896
+ else {
897
+ throw 'c:' + c;
898
+ }
899
+ };
900
+ return _this;
901
+ };
902
+ var createStringToBytes = function (unicodeData, numChars) {
903
+ var unicodeMap = (function () {
904
+ var bin = base64DecodeInputStream(unicodeData);
905
+ var read = function () {
906
+ var b = bin.read();
907
+ if (b == -1)
908
+ throw 'eof';
909
+ return b;
910
+ };
911
+ var count = 0;
912
+ var unicodeMap = {};
913
+ while (true) {
914
+ var b0 = bin.read();
915
+ if (b0 == -1)
916
+ break;
917
+ var b1 = read();
918
+ var b2 = read();
919
+ var b3 = read();
920
+ var k = String.fromCharCode((b0 << 8) | b1);
921
+ var v = (b2 << 8) | b3;
922
+ unicodeMap[k] = v;
923
+ count += 1;
924
+ }
925
+ if (count != numChars) {
926
+ throw count + ' != ' + numChars;
927
+ }
928
+ return unicodeMap;
929
+ })();
930
+ var unknownChar = '?'.charCodeAt(0);
931
+ return function (s) {
932
+ var bytes = [];
933
+ for (var i = 0; i < s.length; i += 1) {
934
+ var c = s.charCodeAt(i);
935
+ if (c < 128) {
936
+ bytes.push(c);
937
+ }
938
+ else {
939
+ var b = unicodeMap[s.charAt(i)];
940
+ if (typeof b == 'number') {
941
+ if ((b & 0xff) == b) {
942
+ bytes.push(b);
943
+ }
944
+ else {
945
+ bytes.push(b >>> 8);
946
+ bytes.push(b & 0xff);
947
+ }
948
+ }
949
+ else {
950
+ bytes.push(unknownChar);
951
+ }
952
+ }
953
+ }
954
+ return bytes;
955
+ };
956
+ };
931
957
  var SJIS = createStringToBytes(SJIS_BASE64, SJIS_COUNT);
932
958
 
933
- const QR_MODE$3 = 1 << 3;
934
- const qrKanji = function (stringToBytes) {
935
- stringToBytes = typeof stringToBytes == 'function' ? stringToBytes : SJIS;
936
- return function (data) {
937
- var _bytes = stringToBytes(data);
938
- var _this = {
939
- getMode: function () {
940
- return QR_MODE$3;
941
- },
942
- getLength: function () {
943
- return ~~(_bytes.length / 2);
944
- },
945
- write: function (buffer) {
946
- var data = _bytes;
947
- var i = 0;
948
- while (i + 1 < data.length) {
949
- var c = ((0xff & data[i]) << 8) | (0xff & data[i + 1]);
950
- if (0x8140 <= c && c <= 0x9FFC) {
951
- c -= 0x8140;
952
- }
953
- else if (0xE040 <= c && c <= 0xEBBF) {
954
- c -= 0xC140;
955
- }
956
- else {
957
- throw 'illegal char at ' + (i + 1) + '/' + c;
958
- }
959
- c = ((c >>> 8) & 0xff) * 0xC0 + (c & 0xff);
960
- buffer.put(c, 13);
961
- i += 2;
962
- }
963
- if (i < data.length) {
964
- throw 'illegal char at ' + (i + 1);
965
- }
966
- }
967
- };
968
- return _this;
969
- };
959
+ const QR_MODE$3 = 1 << 3;
960
+ const qrKanji = function (stringToBytes) {
961
+ stringToBytes = typeof stringToBytes == 'function' ? stringToBytes : SJIS;
962
+ return function (data) {
963
+ var _bytes = stringToBytes(data);
964
+ var _this = {
965
+ getMode: function () {
966
+ return QR_MODE$3;
967
+ },
968
+ getLength: function () {
969
+ return ~~(_bytes.length / 2);
970
+ },
971
+ write: function (buffer) {
972
+ var data = _bytes;
973
+ var i = 0;
974
+ while (i + 1 < data.length) {
975
+ var c = ((0xff & data[i]) << 8) | (0xff & data[i + 1]);
976
+ if (0x8140 <= c && c <= 0x9FFC) {
977
+ c -= 0x8140;
978
+ }
979
+ else if (0xE040 <= c && c <= 0xEBBF) {
980
+ c -= 0xC140;
981
+ }
982
+ else {
983
+ throw 'illegal char at ' + (i + 1) + '/' + c;
984
+ }
985
+ c = ((c >>> 8) & 0xff) * 0xC0 + (c & 0xff);
986
+ buffer.put(c, 13);
987
+ i += 2;
988
+ }
989
+ if (i < data.length) {
990
+ throw 'illegal char at ' + (i + 1);
991
+ }
992
+ }
993
+ };
994
+ return _this;
995
+ };
970
996
  };
971
997
 
972
- function toUTF8Array(str) {
973
- var utf8 = [];
974
- for (var i = 0; i < str.length; i++) {
975
- var charcode = str.charCodeAt(i);
976
- if (charcode < 0x80)
977
- utf8.push(charcode);
978
- else if (charcode < 0x800) {
979
- utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));
980
- }
981
- else if (charcode < 0xd800 || charcode >= 0xe000) {
982
- utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
983
- }
984
- else {
985
- i++;
986
- charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));
987
- utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
988
- }
989
- }
990
- return utf8;
998
+ function toUTF8Array(str) {
999
+ var utf8 = [];
1000
+ for (var i = 0; i < str.length; i++) {
1001
+ var charcode = str.charCodeAt(i);
1002
+ if (charcode < 0x80)
1003
+ utf8.push(charcode);
1004
+ else if (charcode < 0x800) {
1005
+ utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));
1006
+ }
1007
+ else if (charcode < 0xd800 || charcode >= 0xe000) {
1008
+ utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
1009
+ }
1010
+ else {
1011
+ i++;
1012
+ charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));
1013
+ utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
1014
+ }
1015
+ }
1016
+ return utf8;
991
1017
  }
992
1018
 
993
- const BitBuffer = function () {
994
- var _buffer = [];
995
- var _length = 0;
996
- var _this = {};
997
- _this.getBuffer = function () {
998
- return _buffer;
999
- };
1000
- _this.getAt = function (index) {
1001
- var bufIndex = ~~(index / 8);
1002
- var bitIndex = 7 - (index % 8);
1003
- return ((_buffer[bufIndex] >>> bitIndex) & 1) === 1;
1004
- };
1005
- _this.put = function (num, length) {
1006
- length = ~~length;
1007
- if (length < 0)
1008
- throw new Error('length:' + length);
1009
- while (length--) {
1010
- _this.putBit(((num >>> length) & 1) === 1);
1011
- }
1012
- };
1013
- _this.getLengthInBits = function () {
1014
- return _length;
1015
- };
1016
- _this.putBit = function (bit) {
1017
- var bufIndex = ~~(_length / 8);
1018
- if (_buffer.length <= bufIndex) {
1019
- _buffer.push(0);
1020
- }
1021
- if (bit) {
1022
- _buffer[bufIndex] |= 0x80 >>> _length % 8;
1023
- }
1024
- _length += 1;
1025
- };
1026
- return _this;
1019
+ const BitBuffer = function () {
1020
+ var _buffer = [];
1021
+ var _length = 0;
1022
+ var _this = {};
1023
+ _this.getBuffer = function () {
1024
+ return _buffer;
1025
+ };
1026
+ _this.getAt = function (index) {
1027
+ var bufIndex = ~~(index / 8);
1028
+ var bitIndex = 7 - (index % 8);
1029
+ return ((_buffer[bufIndex] >>> bitIndex) & 1) === 1;
1030
+ };
1031
+ _this.put = function (num, length) {
1032
+ length = ~~length;
1033
+ if (length < 0)
1034
+ throw new Error('length:' + length);
1035
+ while (length--) {
1036
+ _this.putBit(((num >>> length) & 1) === 1);
1037
+ }
1038
+ };
1039
+ _this.getLengthInBits = function () {
1040
+ return _length;
1041
+ };
1042
+ _this.putBit = function (bit) {
1043
+ var bufIndex = ~~(_length / 8);
1044
+ if (_buffer.length <= bufIndex) {
1045
+ _buffer.push(0);
1046
+ }
1047
+ if (bit) {
1048
+ _buffer[bufIndex] |= 0x80 >>> _length % 8;
1049
+ }
1050
+ _length += 1;
1051
+ };
1052
+ return _this;
1027
1053
  };
1028
1054
 
1029
- class QRMatrix extends BitMatrix {
1030
- constructor(size) {
1031
- super(size, size, 0);
1032
- this.markMatrix = new BitMatrix(size, size, 0);
1033
- Object.defineProperty(this, 'size', { value: size });
1034
- }
1035
- set(x, y, value) {
1036
- super.set(x, y, value);
1037
- this.markMatrix.set(x, y, 1);
1038
- }
1039
- has(x, y) {
1040
- return !!this.markMatrix.get(x, y);
1041
- }
1042
- clone() {
1043
- return Object.create(this, {
1044
- _data: Object.assign({}, Object.getOwnPropertyDescriptor(this, '_data'), {
1045
- value: new Uint8Array(this._data.buffer.slice(0))
1046
- }),
1047
- markMatrix: Object.assign({}, Object.getOwnPropertyDescriptor(this, 'markMatrix'), {
1048
- value: this.markMatrix.clone()
1049
- })
1050
- });
1051
- }
1052
- }
1053
-
1054
- const drawLoop = function (matrix, value, x, y, offsetX, offsetY, length) {
1055
- let { width, height } = matrix;
1056
- let v = value ? 1 : 0;
1057
- let _x = x;
1058
- let _y = y;
1059
- if (length <= 0)
1060
- return;
1061
- while (length--) {
1062
- if (_x >= 0 && _x < width && _y >= 0 && _y < height) {
1063
- matrix.set(_x, _y, v);
1064
- }
1065
- _x += offsetX;
1066
- _y += offsetY;
1067
- }
1068
- };
1069
- const rectBorder = function (matrix, val, row, col, width, height) {
1070
- if (width < 0 || height < 0)
1071
- return;
1072
- let set = drawLoop.bind(null, matrix, val ? 1 : 0);
1073
- if (width === 1) {
1074
- return set(row, col, 0, 1, height);
1075
- }
1076
- if (height === 1) {
1077
- return set(row, col, 1, 0, width);
1078
- }
1079
- let _w = width - 1;
1080
- let _h = height - 1;
1081
- set(row, col, 1, 0, _w);
1082
- set((row += width - 1), col, 0, 1, _h);
1083
- set(row, (col += height - 1), -1, 0, _w);
1084
- set((row -= width - 1), col, 0, -1, _h);
1085
- };
1086
- const fillRect = function (matrix, val, row, col, width, height) {
1087
- let { width: _width, height: _height } = matrix;
1088
- let v = val ? 1 : 0;
1089
- let _x = row > 0 ? row : 0;
1090
- let _y = col > 0 ? col : 0;
1091
- let maxX = Math.min(row + width, _width);
1092
- let maxY = Math.min(col + height, _height);
1093
- for (let y = _y; y < maxY; y++) {
1094
- for (let x = _x; x < maxX; x++) {
1095
- matrix.set(x, y, v);
1096
- }
1097
- }
1055
+ const drawLoop = function (matrix, value, x, y, offsetX, offsetY, length) {
1056
+ let { width, height } = matrix;
1057
+ let v = value ? 1 : 0;
1058
+ let _x = x;
1059
+ let _y = y;
1060
+ if (length <= 0)
1061
+ return;
1062
+ while (length--) {
1063
+ if (_x >= 0 && _x < width && _y >= 0 && _y < height) {
1064
+ matrix.set(_x, _y, v);
1065
+ }
1066
+ _x += offsetX;
1067
+ _y += offsetY;
1068
+ }
1069
+ };
1070
+ const rectBorder = function (matrix, val, row, col, width, height) {
1071
+ if (width < 0 || height < 0)
1072
+ return;
1073
+ let set = drawLoop.bind(null, matrix, val ? 1 : 0);
1074
+ if (width === 1) {
1075
+ return set(row, col, 0, 1, height);
1076
+ }
1077
+ if (height === 1) {
1078
+ return set(row, col, 1, 0, width);
1079
+ }
1080
+ let _w = width - 1;
1081
+ let _h = height - 1;
1082
+ set(row, col, 1, 0, _w);
1083
+ set((row += width - 1), col, 0, 1, _h);
1084
+ set(row, (col += height - 1), -1, 0, _w);
1085
+ set((row -= width - 1), col, 0, -1, _h);
1086
+ };
1087
+ const fillRect = function (matrix, val, row, col, width, height) {
1088
+ let { width: _width, height: _height } = matrix;
1089
+ let v = val ? 1 : 0;
1090
+ let _x = row > 0 ? row : 0;
1091
+ let _y = col > 0 ? col : 0;
1092
+ let maxX = Math.min(row + width, _width);
1093
+ let maxY = Math.min(col + height, _height);
1094
+ for (let y = _y; y < maxY; y++) {
1095
+ for (let x = _x; x < maxX; x++) {
1096
+ matrix.set(x, y, v);
1097
+ }
1098
+ }
1098
1099
  };
1099
1100
 
1100
- const QRErrorCorrectionLevel = {
1101
- L: 1,
1102
- M: 0,
1103
- Q: 3,
1104
- H: 2
1105
- };
1106
- const QRMode = {
1107
- MODE_NUMBER: 1 << 0,
1108
- MODE_ALPHA_NUM: 1 << 1,
1109
- MODE_8BIT_BYTE: 1 << 2,
1110
- MODE_KANJI: 1 << 3
1111
- };
1112
- const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
1113
- const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
1114
- const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
1115
- const G15_BCH_DIGIT = getBCHDigit(G15);
1116
- const G18_BCH_DIGIT = getBCHDigit(G18);
1117
- const RS_BLOCK_TABLE = [
1118
- [1, 26, 19],
1119
- [1, 26, 16],
1120
- [1, 26, 13],
1121
- [1, 26, 9],
1122
- [1, 44, 34],
1123
- [1, 44, 28],
1124
- [1, 44, 22],
1125
- [1, 44, 16],
1126
- [1, 70, 55],
1127
- [1, 70, 44],
1128
- [2, 35, 17],
1129
- [2, 35, 13],
1130
- [1, 100, 80],
1131
- [2, 50, 32],
1132
- [2, 50, 24],
1133
- [4, 25, 9],
1134
- [1, 134, 108],
1135
- [2, 67, 43],
1136
- [2, 33, 15, 2, 34, 16],
1137
- [2, 33, 11, 2, 34, 12],
1138
- [2, 86, 68],
1139
- [4, 43, 27],
1140
- [4, 43, 19],
1141
- [4, 43, 15],
1142
- [2, 98, 78],
1143
- [4, 49, 31],
1144
- [2, 32, 14, 4, 33, 15],
1145
- [4, 39, 13, 1, 40, 14],
1146
- [2, 121, 97],
1147
- [2, 60, 38, 2, 61, 39],
1148
- [4, 40, 18, 2, 41, 19],
1149
- [4, 40, 14, 2, 41, 15],
1150
- [2, 146, 116],
1151
- [3, 58, 36, 2, 59, 37],
1152
- [4, 36, 16, 4, 37, 17],
1153
- [4, 36, 12, 4, 37, 13],
1154
- [2, 86, 68, 2, 87, 69],
1155
- [4, 69, 43, 1, 70, 44],
1156
- [6, 43, 19, 2, 44, 20],
1157
- [6, 43, 15, 2, 44, 16],
1158
- [4, 101, 81],
1159
- [1, 80, 50, 4, 81, 51],
1160
- [4, 50, 22, 4, 51, 23],
1161
- [3, 36, 12, 8, 37, 13],
1162
- [2, 116, 92, 2, 117, 93],
1163
- [6, 58, 36, 2, 59, 37],
1164
- [4, 46, 20, 6, 47, 21],
1165
- [7, 42, 14, 4, 43, 15],
1166
- [4, 133, 107],
1167
- [8, 59, 37, 1, 60, 38],
1168
- [8, 44, 20, 4, 45, 21],
1169
- [12, 33, 11, 4, 34, 12],
1170
- [3, 145, 115, 1, 146, 116],
1171
- [4, 64, 40, 5, 65, 41],
1172
- [11, 36, 16, 5, 37, 17],
1173
- [11, 36, 12, 5, 37, 13],
1174
- [5, 109, 87, 1, 110, 88],
1175
- [5, 65, 41, 5, 66, 42],
1176
- [5, 54, 24, 7, 55, 25],
1177
- [11, 36, 12, 7, 37, 13],
1178
- [5, 122, 98, 1, 123, 99],
1179
- [7, 73, 45, 3, 74, 46],
1180
- [15, 43, 19, 2, 44, 20],
1181
- [3, 45, 15, 13, 46, 16],
1182
- [1, 135, 107, 5, 136, 108],
1183
- [10, 74, 46, 1, 75, 47],
1184
- [1, 50, 22, 15, 51, 23],
1185
- [2, 42, 14, 17, 43, 15],
1186
- [5, 150, 120, 1, 151, 121],
1187
- [9, 69, 43, 4, 70, 44],
1188
- [17, 50, 22, 1, 51, 23],
1189
- [2, 42, 14, 19, 43, 15],
1190
- [3, 141, 113, 4, 142, 114],
1191
- [3, 70, 44, 11, 71, 45],
1192
- [17, 47, 21, 4, 48, 22],
1193
- [9, 39, 13, 16, 40, 14],
1194
- [3, 135, 107, 5, 136, 108],
1195
- [3, 67, 41, 13, 68, 42],
1196
- [15, 54, 24, 5, 55, 25],
1197
- [15, 43, 15, 10, 44, 16],
1198
- [4, 144, 116, 4, 145, 117],
1199
- [17, 68, 42],
1200
- [17, 50, 22, 6, 51, 23],
1201
- [19, 46, 16, 6, 47, 17],
1202
- [2, 139, 111, 7, 140, 112],
1203
- [17, 74, 46],
1204
- [7, 54, 24, 16, 55, 25],
1205
- [34, 37, 13],
1206
- [4, 151, 121, 5, 152, 122],
1207
- [4, 75, 47, 14, 76, 48],
1208
- [11, 54, 24, 14, 55, 25],
1209
- [16, 45, 15, 14, 46, 16],
1210
- [6, 147, 117, 4, 148, 118],
1211
- [6, 73, 45, 14, 74, 46],
1212
- [11, 54, 24, 16, 55, 25],
1213
- [30, 46, 16, 2, 47, 17],
1214
- [8, 132, 106, 4, 133, 107],
1215
- [8, 75, 47, 13, 76, 48],
1216
- [7, 54, 24, 22, 55, 25],
1217
- [22, 45, 15, 13, 46, 16],
1218
- [10, 142, 114, 2, 143, 115],
1219
- [19, 74, 46, 4, 75, 47],
1220
- [28, 50, 22, 6, 51, 23],
1221
- [33, 46, 16, 4, 47, 17],
1222
- [8, 152, 122, 4, 153, 123],
1223
- [22, 73, 45, 3, 74, 46],
1224
- [8, 53, 23, 26, 54, 24],
1225
- [12, 45, 15, 28, 46, 16],
1226
- [3, 147, 117, 10, 148, 118],
1227
- [3, 73, 45, 23, 74, 46],
1228
- [4, 54, 24, 31, 55, 25],
1229
- [11, 45, 15, 31, 46, 16],
1230
- [7, 146, 116, 7, 147, 117],
1231
- [21, 73, 45, 7, 74, 46],
1232
- [1, 53, 23, 37, 54, 24],
1233
- [19, 45, 15, 26, 46, 16],
1234
- [5, 145, 115, 10, 146, 116],
1235
- [19, 75, 47, 10, 76, 48],
1236
- [15, 54, 24, 25, 55, 25],
1237
- [23, 45, 15, 25, 46, 16],
1238
- [13, 145, 115, 3, 146, 116],
1239
- [2, 74, 46, 29, 75, 47],
1240
- [42, 54, 24, 1, 55, 25],
1241
- [23, 45, 15, 28, 46, 16],
1242
- [17, 145, 115],
1243
- [10, 74, 46, 23, 75, 47],
1244
- [10, 54, 24, 35, 55, 25],
1245
- [19, 45, 15, 35, 46, 16],
1246
- [17, 145, 115, 1, 146, 116],
1247
- [14, 74, 46, 21, 75, 47],
1248
- [29, 54, 24, 19, 55, 25],
1249
- [11, 45, 15, 46, 46, 16],
1250
- [13, 145, 115, 6, 146, 116],
1251
- [14, 74, 46, 23, 75, 47],
1252
- [44, 54, 24, 7, 55, 25],
1253
- [59, 46, 16, 1, 47, 17],
1254
- [12, 151, 121, 7, 152, 122],
1255
- [12, 75, 47, 26, 76, 48],
1256
- [39, 54, 24, 14, 55, 25],
1257
- [22, 45, 15, 41, 46, 16],
1258
- [6, 151, 121, 14, 152, 122],
1259
- [6, 75, 47, 34, 76, 48],
1260
- [46, 54, 24, 10, 55, 25],
1261
- [2, 45, 15, 64, 46, 16],
1262
- [17, 152, 122, 4, 153, 123],
1263
- [29, 74, 46, 14, 75, 47],
1264
- [49, 54, 24, 10, 55, 25],
1265
- [24, 45, 15, 46, 46, 16],
1266
- [4, 152, 122, 18, 153, 123],
1267
- [13, 74, 46, 32, 75, 47],
1268
- [48, 54, 24, 14, 55, 25],
1269
- [42, 45, 15, 32, 46, 16],
1270
- [20, 147, 117, 4, 148, 118],
1271
- [40, 75, 47, 7, 76, 48],
1272
- [43, 54, 24, 22, 55, 25],
1273
- [10, 45, 15, 67, 46, 16],
1274
- [19, 148, 118, 6, 149, 119],
1275
- [18, 75, 47, 31, 76, 48],
1276
- [34, 54, 24, 34, 55, 25],
1277
- [20, 45, 15, 61, 46, 16]
1278
- ].map(arr => new Uint8Array(arr));
1279
- const getLengthInBits = (function () {
1280
- const BITS_LENGTH_LIST = {
1281
- [QRMode.MODE_NUMBER]: [10, 12, 14],
1282
- [QRMode.MODE_ALPHA_NUM]: [9, 11, 13],
1283
- [QRMode.MODE_8BIT_BYTE]: [8, 16, 16],
1284
- [QRMode.MODE_KANJI]: [8, 10, 12]
1285
- };
1286
- return function (mode, type) {
1287
- if (1 <= type && type <= 40) {
1288
- var lengths = BITS_LENGTH_LIST[mode];
1289
- if (!lengths)
1290
- throw 'mode:' + mode;
1291
- var index = type <= 9 ? 0 : type <= 26 ? 1 : 2;
1292
- return lengths[index];
1293
- }
1294
- else {
1295
- throw new Error('type:' + type);
1296
- }
1297
- };
1298
- })();
1299
- function getBCHDigit(data) {
1300
- let digit = 0;
1301
- while (data != 0) {
1302
- digit++;
1303
- data >>>= 1;
1304
- }
1305
- return digit;
1306
- }
1307
- function getBCHTypeInfo(data) {
1308
- let d = data << 10;
1309
- while (getBCHDigit(d) >= G15_BCH_DIGIT) {
1310
- d ^= G15 << (getBCHDigit(d) - G15_BCH_DIGIT);
1311
- }
1312
- return ((data << 10) | d) ^ G15_MASK;
1313
- }
1314
- function getBCHTypeNumber(data) {
1315
- var d = data << 12;
1316
- while (getBCHDigit(d) - G18_BCH_DIGIT >= 0) {
1317
- d ^= G18 << (getBCHDigit(d) - G18_BCH_DIGIT);
1318
- }
1319
- return (data << 12) | d;
1320
- }
1321
- function getRsBlockTable(typeNumber, errorCorrectionLevel) {
1322
- switch (errorCorrectionLevel) {
1323
- case QRErrorCorrectionLevel.L:
1324
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
1325
- case QRErrorCorrectionLevel.M:
1326
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
1327
- case QRErrorCorrectionLevel.Q:
1328
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
1329
- case QRErrorCorrectionLevel.H:
1330
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
1331
- default:
1332
- throw 'bad rs block @ typeNumber:' + typeNumber + '/errorCorrectionLevel:' + errorCorrectionLevel;
1333
- }
1334
- }
1335
- function getRSBlocks(typeNumber, errorCorrectionLevel) {
1336
- let rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);
1337
- let length = rsBlock.length / 3;
1338
- let list = [];
1339
- for (let i = 0; i < length; i += 1) {
1340
- let count = rsBlock[i * 3 + 0];
1341
- let totalCount = rsBlock[i * 3 + 1];
1342
- let dataCount = rsBlock[i * 3 + 2];
1343
- for (let j = 0; j < count; j += 1) {
1344
- list.push({ totalCount, dataCount });
1345
- }
1346
- }
1347
- return list;
1348
- }
1349
- const QRMath = (function () {
1350
- const EXP_TABLE = new Uint8Array(256);
1351
- const LOG_TABLE = new Uint8Array(256);
1352
- for (let i = 0; i < 8; i += 1) {
1353
- EXP_TABLE[i] = 1 << i;
1354
- }
1355
- for (let i = 8; i < 256; i += 1) {
1356
- EXP_TABLE[i] = EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8];
1357
- }
1358
- for (let i = 0; i < 255; i += 1) {
1359
- LOG_TABLE[EXP_TABLE[i]] = i;
1360
- }
1361
- let _this = {
1362
- glog: function (n) {
1363
- if (n < 1) {
1364
- throw 'glog(' + n + ')';
1365
- }
1366
- return LOG_TABLE[n];
1367
- },
1368
- gexp: function (n) {
1369
- while (n < 0) {
1370
- n += 255;
1371
- }
1372
- while (n >= 256) {
1373
- n -= 255;
1374
- }
1375
- return EXP_TABLE[n];
1376
- }
1377
- };
1378
- return _this;
1379
- })();
1380
- const qrPolynomial = function (num, shift) {
1381
- if (typeof num.length == 'undefined') {
1382
- throw num.length + '/' + shift;
1383
- }
1384
- let _num = (function () {
1385
- let offset = 0;
1386
- while (offset < num.length && num[offset] == 0) {
1387
- offset += 1;
1388
- }
1389
- let _num = new Array(num.length - offset + shift);
1390
- for (let i = 0; i < num.length - offset; i += 1) {
1391
- _num[i] = num[i + offset];
1392
- }
1393
- return _num;
1394
- })();
1395
- let _this = {
1396
- getAt: function (index) {
1397
- return _num[index];
1398
- },
1399
- getLength: function () {
1400
- return _num.length;
1401
- },
1402
- multiply: function (e) {
1403
- let num = new Array(_this.getLength() + e.getLength() - 1);
1404
- for (let i = 0; i < _this.getLength(); i += 1) {
1405
- for (let j = 0; j < e.getLength(); j += 1) {
1406
- num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
1407
- }
1408
- }
1409
- return qrPolynomial(num, 0);
1410
- },
1411
- mod: function (e) {
1412
- if (_this.getLength() - e.getLength() < 0) {
1413
- return _this;
1414
- }
1415
- let ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));
1416
- let num = new Array(_this.getLength());
1417
- for (let i = 0; i < _this.getLength(); i += 1) {
1418
- num[i] = _this.getAt(i);
1419
- }
1420
- for (let i = 0; i < e.getLength(); i += 1) {
1421
- num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);
1422
- }
1423
- return qrPolynomial(num, 0).mod(e);
1424
- }
1425
- };
1426
- return _this;
1427
- };
1428
- const getErrorCorrectPolynomial = function (errorCorrectLength) {
1429
- let a = qrPolynomial([1], 0);
1430
- for (let i = 0; i < errorCorrectLength; i += 1) {
1431
- a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
1432
- }
1433
- return a;
1434
- };
1435
- const createBytes = function (buffer, rsBlocks) {
1436
- let offset = 0;
1437
- let maxDcCount = 0;
1438
- let maxEcCount = 0;
1439
- let dcdata = new Array(rsBlocks.length);
1440
- let ecdata = new Array(rsBlocks.length);
1441
- for (let r = 0; r < rsBlocks.length; r += 1) {
1442
- let dcCount = rsBlocks[r].dataCount;
1443
- let ecCount = rsBlocks[r].totalCount - dcCount;
1444
- maxDcCount = Math.max(maxDcCount, dcCount);
1445
- maxEcCount = Math.max(maxEcCount, ecCount);
1446
- dcdata[r] = new Array(dcCount);
1447
- for (let i = 0; i < dcdata[r].length; i += 1) {
1448
- dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
1449
- }
1450
- offset += dcCount;
1451
- let rsPoly = getErrorCorrectPolynomial(ecCount);
1452
- let rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
1453
- let modPoly = rawPoly.mod(rsPoly);
1454
- ecdata[r] = new Array(rsPoly.getLength() - 1);
1455
- for (let i = 0; i < ecdata[r].length; i += 1) {
1456
- let modIndex = i + modPoly.getLength() - ecdata[r].length;
1457
- ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;
1458
- }
1459
- }
1460
- let totalCodeCount = 0;
1461
- for (let i = 0; i < rsBlocks.length; i += 1) {
1462
- totalCodeCount += rsBlocks[i].totalCount;
1463
- }
1464
- let data = new Array(totalCodeCount);
1465
- let index = 0;
1466
- for (let i = 0; i < maxDcCount; i += 1) {
1467
- for (let r = 0; r < rsBlocks.length; r += 1) {
1468
- if (i < dcdata[r].length) {
1469
- data[index] = dcdata[r][i];
1470
- index += 1;
1471
- }
1472
- }
1473
- }
1474
- for (let i = 0; i < maxEcCount; i += 1) {
1475
- for (let r = 0; r < rsBlocks.length; r += 1) {
1476
- if (i < ecdata[r].length) {
1477
- data[index] = ecdata[r][i];
1478
- index += 1;
1479
- }
1480
- }
1481
- }
1482
- return data;
1483
- };
1484
- function getTotal(rsBlocks) {
1485
- let totalDataCount = 0;
1486
- for (var i = 0; i < rsBlocks.length; i += 1) {
1487
- totalDataCount += rsBlocks[i].dataCount;
1488
- }
1489
- return totalDataCount;
1490
- }
1491
- const getMaxDataCount = function (typeNumber, errorCorrectionLevel) {
1492
- let rsBlocks = getRSBlocks(typeNumber, errorCorrectionLevel);
1493
- return getTotal(rsBlocks);
1494
- };
1495
- const paddingBuffer = function (buffer, rsBlocks) {
1496
- const PAD0 = 0xec;
1497
- const PAD1 = 0x11;
1498
- let totalDataCount = getTotal(rsBlocks);
1499
- if (buffer.getLengthInBits() > totalDataCount * 8) {
1500
- throw 'code length overflow. (' + buffer.getLengthInBits() + '>' + totalDataCount * 8 + ')';
1501
- }
1502
- if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
1503
- buffer.put(0, 4);
1504
- }
1505
- while (buffer.getLengthInBits() % 8 != 0) {
1506
- buffer.putBit(false);
1507
- }
1508
- while (true) {
1509
- if (buffer.getLengthInBits() >= totalDataCount * 8) {
1510
- break;
1511
- }
1512
- buffer.put(PAD0, 8);
1513
- if (buffer.getLengthInBits() >= totalDataCount * 8) {
1514
- break;
1515
- }
1516
- buffer.put(PAD1, 8);
1517
- }
1518
- };
1519
- const getBufferForBytes = function (typeNumber, byteArray, mode) {
1520
- let buffer = BitBuffer();
1521
- let data = byteArray;
1522
- buffer.put(mode, 4);
1523
- buffer.put(data.length, getLengthInBits(mode, typeNumber));
1524
- for (let i = 0; i < data.length; i++) {
1525
- buffer.put(data[i], 8);
1526
- }
1527
- return buffer;
1528
- };
1529
- const getBufferForModes = function (typeNumber, dataList) {
1530
- let buffer = BitBuffer();
1531
- for (let i = 0; i < dataList.length; i += 1) {
1532
- let data = dataList[i];
1533
- buffer.put(data.getMode(), 4);
1534
- buffer.put(data.getLength(), getLengthInBits(data.getMode(), typeNumber));
1535
- data.write(buffer);
1536
- }
1537
- return buffer;
1538
- };
1539
- function createData(typeNumber, errorCorrectionLevel, byteArray, mode) {
1540
- let rsBlocks = getRSBlocks(typeNumber, errorCorrectionLevel);
1541
- let buffer;
1542
- if (mode) {
1543
- buffer = getBufferForBytes(typeNumber, byteArray, mode);
1544
- }
1545
- else {
1546
- buffer = getBufferForModes(typeNumber, byteArray);
1547
- }
1548
- paddingBuffer(buffer, rsBlocks);
1549
- return createBytes(buffer, rsBlocks);
1101
+ const QRErrorCorrectionLevel = {
1102
+ L: 1,
1103
+ M: 0,
1104
+ Q: 3,
1105
+ H: 2
1106
+ };
1107
+ const QRMode = {
1108
+ MODE_NUMBER: 1 << 0,
1109
+ MODE_ALPHA_NUM: 1 << 1,
1110
+ MODE_8BIT_BYTE: 1 << 2,
1111
+ MODE_KANJI: 1 << 3
1112
+ };
1113
+ const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
1114
+ const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
1115
+ const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
1116
+ const G15_BCH_DIGIT = getBCHDigit(G15);
1117
+ const G18_BCH_DIGIT = getBCHDigit(G18);
1118
+ const RS_BLOCK_TABLE = [
1119
+ [1, 26, 19],
1120
+ [1, 26, 16],
1121
+ [1, 26, 13],
1122
+ [1, 26, 9],
1123
+ [1, 44, 34],
1124
+ [1, 44, 28],
1125
+ [1, 44, 22],
1126
+ [1, 44, 16],
1127
+ [1, 70, 55],
1128
+ [1, 70, 44],
1129
+ [2, 35, 17],
1130
+ [2, 35, 13],
1131
+ [1, 100, 80],
1132
+ [2, 50, 32],
1133
+ [2, 50, 24],
1134
+ [4, 25, 9],
1135
+ [1, 134, 108],
1136
+ [2, 67, 43],
1137
+ [2, 33, 15, 2, 34, 16],
1138
+ [2, 33, 11, 2, 34, 12],
1139
+ [2, 86, 68],
1140
+ [4, 43, 27],
1141
+ [4, 43, 19],
1142
+ [4, 43, 15],
1143
+ [2, 98, 78],
1144
+ [4, 49, 31],
1145
+ [2, 32, 14, 4, 33, 15],
1146
+ [4, 39, 13, 1, 40, 14],
1147
+ [2, 121, 97],
1148
+ [2, 60, 38, 2, 61, 39],
1149
+ [4, 40, 18, 2, 41, 19],
1150
+ [4, 40, 14, 2, 41, 15],
1151
+ [2, 146, 116],
1152
+ [3, 58, 36, 2, 59, 37],
1153
+ [4, 36, 16, 4, 37, 17],
1154
+ [4, 36, 12, 4, 37, 13],
1155
+ [2, 86, 68, 2, 87, 69],
1156
+ [4, 69, 43, 1, 70, 44],
1157
+ [6, 43, 19, 2, 44, 20],
1158
+ [6, 43, 15, 2, 44, 16],
1159
+ [4, 101, 81],
1160
+ [1, 80, 50, 4, 81, 51],
1161
+ [4, 50, 22, 4, 51, 23],
1162
+ [3, 36, 12, 8, 37, 13],
1163
+ [2, 116, 92, 2, 117, 93],
1164
+ [6, 58, 36, 2, 59, 37],
1165
+ [4, 46, 20, 6, 47, 21],
1166
+ [7, 42, 14, 4, 43, 15],
1167
+ [4, 133, 107],
1168
+ [8, 59, 37, 1, 60, 38],
1169
+ [8, 44, 20, 4, 45, 21],
1170
+ [12, 33, 11, 4, 34, 12],
1171
+ [3, 145, 115, 1, 146, 116],
1172
+ [4, 64, 40, 5, 65, 41],
1173
+ [11, 36, 16, 5, 37, 17],
1174
+ [11, 36, 12, 5, 37, 13],
1175
+ [5, 109, 87, 1, 110, 88],
1176
+ [5, 65, 41, 5, 66, 42],
1177
+ [5, 54, 24, 7, 55, 25],
1178
+ [11, 36, 12, 7, 37, 13],
1179
+ [5, 122, 98, 1, 123, 99],
1180
+ [7, 73, 45, 3, 74, 46],
1181
+ [15, 43, 19, 2, 44, 20],
1182
+ [3, 45, 15, 13, 46, 16],
1183
+ [1, 135, 107, 5, 136, 108],
1184
+ [10, 74, 46, 1, 75, 47],
1185
+ [1, 50, 22, 15, 51, 23],
1186
+ [2, 42, 14, 17, 43, 15],
1187
+ [5, 150, 120, 1, 151, 121],
1188
+ [9, 69, 43, 4, 70, 44],
1189
+ [17, 50, 22, 1, 51, 23],
1190
+ [2, 42, 14, 19, 43, 15],
1191
+ [3, 141, 113, 4, 142, 114],
1192
+ [3, 70, 44, 11, 71, 45],
1193
+ [17, 47, 21, 4, 48, 22],
1194
+ [9, 39, 13, 16, 40, 14],
1195
+ [3, 135, 107, 5, 136, 108],
1196
+ [3, 67, 41, 13, 68, 42],
1197
+ [15, 54, 24, 5, 55, 25],
1198
+ [15, 43, 15, 10, 44, 16],
1199
+ [4, 144, 116, 4, 145, 117],
1200
+ [17, 68, 42],
1201
+ [17, 50, 22, 6, 51, 23],
1202
+ [19, 46, 16, 6, 47, 17],
1203
+ [2, 139, 111, 7, 140, 112],
1204
+ [17, 74, 46],
1205
+ [7, 54, 24, 16, 55, 25],
1206
+ [34, 37, 13],
1207
+ [4, 151, 121, 5, 152, 122],
1208
+ [4, 75, 47, 14, 76, 48],
1209
+ [11, 54, 24, 14, 55, 25],
1210
+ [16, 45, 15, 14, 46, 16],
1211
+ [6, 147, 117, 4, 148, 118],
1212
+ [6, 73, 45, 14, 74, 46],
1213
+ [11, 54, 24, 16, 55, 25],
1214
+ [30, 46, 16, 2, 47, 17],
1215
+ [8, 132, 106, 4, 133, 107],
1216
+ [8, 75, 47, 13, 76, 48],
1217
+ [7, 54, 24, 22, 55, 25],
1218
+ [22, 45, 15, 13, 46, 16],
1219
+ [10, 142, 114, 2, 143, 115],
1220
+ [19, 74, 46, 4, 75, 47],
1221
+ [28, 50, 22, 6, 51, 23],
1222
+ [33, 46, 16, 4, 47, 17],
1223
+ [8, 152, 122, 4, 153, 123],
1224
+ [22, 73, 45, 3, 74, 46],
1225
+ [8, 53, 23, 26, 54, 24],
1226
+ [12, 45, 15, 28, 46, 16],
1227
+ [3, 147, 117, 10, 148, 118],
1228
+ [3, 73, 45, 23, 74, 46],
1229
+ [4, 54, 24, 31, 55, 25],
1230
+ [11, 45, 15, 31, 46, 16],
1231
+ [7, 146, 116, 7, 147, 117],
1232
+ [21, 73, 45, 7, 74, 46],
1233
+ [1, 53, 23, 37, 54, 24],
1234
+ [19, 45, 15, 26, 46, 16],
1235
+ [5, 145, 115, 10, 146, 116],
1236
+ [19, 75, 47, 10, 76, 48],
1237
+ [15, 54, 24, 25, 55, 25],
1238
+ [23, 45, 15, 25, 46, 16],
1239
+ [13, 145, 115, 3, 146, 116],
1240
+ [2, 74, 46, 29, 75, 47],
1241
+ [42, 54, 24, 1, 55, 25],
1242
+ [23, 45, 15, 28, 46, 16],
1243
+ [17, 145, 115],
1244
+ [10, 74, 46, 23, 75, 47],
1245
+ [10, 54, 24, 35, 55, 25],
1246
+ [19, 45, 15, 35, 46, 16],
1247
+ [17, 145, 115, 1, 146, 116],
1248
+ [14, 74, 46, 21, 75, 47],
1249
+ [29, 54, 24, 19, 55, 25],
1250
+ [11, 45, 15, 46, 46, 16],
1251
+ [13, 145, 115, 6, 146, 116],
1252
+ [14, 74, 46, 23, 75, 47],
1253
+ [44, 54, 24, 7, 55, 25],
1254
+ [59, 46, 16, 1, 47, 17],
1255
+ [12, 151, 121, 7, 152, 122],
1256
+ [12, 75, 47, 26, 76, 48],
1257
+ [39, 54, 24, 14, 55, 25],
1258
+ [22, 45, 15, 41, 46, 16],
1259
+ [6, 151, 121, 14, 152, 122],
1260
+ [6, 75, 47, 34, 76, 48],
1261
+ [46, 54, 24, 10, 55, 25],
1262
+ [2, 45, 15, 64, 46, 16],
1263
+ [17, 152, 122, 4, 153, 123],
1264
+ [29, 74, 46, 14, 75, 47],
1265
+ [49, 54, 24, 10, 55, 25],
1266
+ [24, 45, 15, 46, 46, 16],
1267
+ [4, 152, 122, 18, 153, 123],
1268
+ [13, 74, 46, 32, 75, 47],
1269
+ [48, 54, 24, 14, 55, 25],
1270
+ [42, 45, 15, 32, 46, 16],
1271
+ [20, 147, 117, 4, 148, 118],
1272
+ [40, 75, 47, 7, 76, 48],
1273
+ [43, 54, 24, 22, 55, 25],
1274
+ [10, 45, 15, 67, 46, 16],
1275
+ [19, 148, 118, 6, 149, 119],
1276
+ [18, 75, 47, 31, 76, 48],
1277
+ [34, 54, 24, 34, 55, 25],
1278
+ [20, 45, 15, 61, 46, 16]
1279
+ ].map(arr => new Uint8Array(arr));
1280
+ const getLengthInBits = (function () {
1281
+ const BITS_LENGTH_LIST = {
1282
+ [QRMode.MODE_NUMBER]: [10, 12, 14],
1283
+ [QRMode.MODE_ALPHA_NUM]: [9, 11, 13],
1284
+ [QRMode.MODE_8BIT_BYTE]: [8, 16, 16],
1285
+ [QRMode.MODE_KANJI]: [8, 10, 12]
1286
+ };
1287
+ return function (mode, type) {
1288
+ if (1 <= type && type <= 40) {
1289
+ var lengths = BITS_LENGTH_LIST[mode];
1290
+ if (!lengths)
1291
+ throw 'mode:' + mode;
1292
+ var index = type <= 9 ? 0 : type <= 26 ? 1 : 2;
1293
+ return lengths[index];
1294
+ }
1295
+ else {
1296
+ throw new Error('type:' + type);
1297
+ }
1298
+ };
1299
+ })();
1300
+ function getBCHDigit(data) {
1301
+ let digit = 0;
1302
+ while (data != 0) {
1303
+ digit++;
1304
+ data >>>= 1;
1305
+ }
1306
+ return digit;
1307
+ }
1308
+ function getBCHTypeInfo(data) {
1309
+ let d = data << 10;
1310
+ while (getBCHDigit(d) >= G15_BCH_DIGIT) {
1311
+ d ^= G15 << (getBCHDigit(d) - G15_BCH_DIGIT);
1312
+ }
1313
+ return ((data << 10) | d) ^ G15_MASK;
1314
+ }
1315
+ function getBCHTypeNumber(data) {
1316
+ var d = data << 12;
1317
+ while (getBCHDigit(d) - G18_BCH_DIGIT >= 0) {
1318
+ d ^= G18 << (getBCHDigit(d) - G18_BCH_DIGIT);
1319
+ }
1320
+ return (data << 12) | d;
1321
+ }
1322
+ function getRsBlockTable(typeNumber, errorCorrectionLevel) {
1323
+ switch (errorCorrectionLevel) {
1324
+ case QRErrorCorrectionLevel.L:
1325
+ return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
1326
+ case QRErrorCorrectionLevel.M:
1327
+ return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
1328
+ case QRErrorCorrectionLevel.Q:
1329
+ return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
1330
+ case QRErrorCorrectionLevel.H:
1331
+ return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
1332
+ default:
1333
+ throw 'bad rs block @ typeNumber:' + typeNumber + '/errorCorrectionLevel:' + errorCorrectionLevel;
1334
+ }
1335
+ }
1336
+ function getRSBlocks(typeNumber, errorCorrectionLevel) {
1337
+ let rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);
1338
+ let length = rsBlock.length / 3;
1339
+ let list = [];
1340
+ for (let i = 0; i < length; i += 1) {
1341
+ let count = rsBlock[i * 3 + 0];
1342
+ let totalCount = rsBlock[i * 3 + 1];
1343
+ let dataCount = rsBlock[i * 3 + 2];
1344
+ for (let j = 0; j < count; j += 1) {
1345
+ list.push({ totalCount, dataCount });
1346
+ }
1347
+ }
1348
+ return list;
1349
+ }
1350
+ const QRMath = (function () {
1351
+ const EXP_TABLE = new Uint8Array(256);
1352
+ const LOG_TABLE = new Uint8Array(256);
1353
+ for (let i = 0; i < 8; i += 1) {
1354
+ EXP_TABLE[i] = 1 << i;
1355
+ }
1356
+ for (let i = 8; i < 256; i += 1) {
1357
+ EXP_TABLE[i] = EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8];
1358
+ }
1359
+ for (let i = 0; i < 255; i += 1) {
1360
+ LOG_TABLE[EXP_TABLE[i]] = i;
1361
+ }
1362
+ let _this = {
1363
+ glog: function (n) {
1364
+ if (n < 1) {
1365
+ throw 'glog(' + n + ')';
1366
+ }
1367
+ return LOG_TABLE[n];
1368
+ },
1369
+ gexp: function (n) {
1370
+ while (n < 0) {
1371
+ n += 255;
1372
+ }
1373
+ while (n >= 256) {
1374
+ n -= 255;
1375
+ }
1376
+ return EXP_TABLE[n];
1377
+ }
1378
+ };
1379
+ return _this;
1380
+ })();
1381
+ const qrPolynomial = function (num, shift) {
1382
+ if (typeof num.length == 'undefined') {
1383
+ throw num.length + '/' + shift;
1384
+ }
1385
+ let _num = (function () {
1386
+ let offset = 0;
1387
+ while (offset < num.length && num[offset] == 0) {
1388
+ offset += 1;
1389
+ }
1390
+ let _num = new Array(num.length - offset + shift);
1391
+ for (let i = 0; i < num.length - offset; i += 1) {
1392
+ _num[i] = num[i + offset];
1393
+ }
1394
+ return _num;
1395
+ })();
1396
+ let _this = {
1397
+ getAt: function (index) {
1398
+ return _num[index];
1399
+ },
1400
+ getLength: function () {
1401
+ return _num.length;
1402
+ },
1403
+ multiply: function (e) {
1404
+ let num = new Array(_this.getLength() + e.getLength() - 1);
1405
+ for (let i = 0; i < _this.getLength(); i += 1) {
1406
+ for (let j = 0; j < e.getLength(); j += 1) {
1407
+ num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
1408
+ }
1409
+ }
1410
+ return qrPolynomial(num, 0);
1411
+ },
1412
+ mod: function (e) {
1413
+ if (_this.getLength() - e.getLength() < 0) {
1414
+ return _this;
1415
+ }
1416
+ let ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));
1417
+ let num = new Array(_this.getLength());
1418
+ for (let i = 0; i < _this.getLength(); i += 1) {
1419
+ num[i] = _this.getAt(i);
1420
+ }
1421
+ for (let i = 0; i < e.getLength(); i += 1) {
1422
+ num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);
1423
+ }
1424
+ return qrPolynomial(num, 0).mod(e);
1425
+ }
1426
+ };
1427
+ return _this;
1428
+ };
1429
+ const getErrorCorrectPolynomial = function (errorCorrectLength) {
1430
+ let a = qrPolynomial([1], 0);
1431
+ for (let i = 0; i < errorCorrectLength; i += 1) {
1432
+ a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
1433
+ }
1434
+ return a;
1435
+ };
1436
+ const createBytes = function (buffer, rsBlocks) {
1437
+ let offset = 0;
1438
+ let maxDcCount = 0;
1439
+ let maxEcCount = 0;
1440
+ let dcdata = new Array(rsBlocks.length);
1441
+ let ecdata = new Array(rsBlocks.length);
1442
+ for (let r = 0; r < rsBlocks.length; r += 1) {
1443
+ let dcCount = rsBlocks[r].dataCount;
1444
+ let ecCount = rsBlocks[r].totalCount - dcCount;
1445
+ maxDcCount = Math.max(maxDcCount, dcCount);
1446
+ maxEcCount = Math.max(maxEcCount, ecCount);
1447
+ dcdata[r] = new Array(dcCount);
1448
+ for (let i = 0; i < dcdata[r].length; i += 1) {
1449
+ dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
1450
+ }
1451
+ offset += dcCount;
1452
+ let rsPoly = getErrorCorrectPolynomial(ecCount);
1453
+ let rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
1454
+ let modPoly = rawPoly.mod(rsPoly);
1455
+ ecdata[r] = new Array(rsPoly.getLength() - 1);
1456
+ for (let i = 0; i < ecdata[r].length; i += 1) {
1457
+ let modIndex = i + modPoly.getLength() - ecdata[r].length;
1458
+ ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;
1459
+ }
1460
+ }
1461
+ let totalCodeCount = 0;
1462
+ for (let i = 0; i < rsBlocks.length; i += 1) {
1463
+ totalCodeCount += rsBlocks[i].totalCount;
1464
+ }
1465
+ let data = new Array(totalCodeCount);
1466
+ let index = 0;
1467
+ for (let i = 0; i < maxDcCount; i += 1) {
1468
+ for (let r = 0; r < rsBlocks.length; r += 1) {
1469
+ if (i < dcdata[r].length) {
1470
+ data[index] = dcdata[r][i];
1471
+ index += 1;
1472
+ }
1473
+ }
1474
+ }
1475
+ for (let i = 0; i < maxEcCount; i += 1) {
1476
+ for (let r = 0; r < rsBlocks.length; r += 1) {
1477
+ if (i < ecdata[r].length) {
1478
+ data[index] = ecdata[r][i];
1479
+ index += 1;
1480
+ }
1481
+ }
1482
+ }
1483
+ return data;
1484
+ };
1485
+ function getTotal(rsBlocks) {
1486
+ let totalDataCount = 0;
1487
+ for (var i = 0; i < rsBlocks.length; i += 1) {
1488
+ totalDataCount += rsBlocks[i].dataCount;
1489
+ }
1490
+ return totalDataCount;
1491
+ }
1492
+ const getMaxDataCount = function (typeNumber, errorCorrectionLevel) {
1493
+ let rsBlocks = getRSBlocks(typeNumber, errorCorrectionLevel);
1494
+ return getTotal(rsBlocks);
1495
+ };
1496
+ const paddingBuffer = function (buffer, rsBlocks) {
1497
+ const PAD0 = 0xec;
1498
+ const PAD1 = 0x11;
1499
+ let totalDataCount = getTotal(rsBlocks);
1500
+ if (buffer.getLengthInBits() > totalDataCount * 8) {
1501
+ throw 'code length overflow. (' + buffer.getLengthInBits() + '>' + totalDataCount * 8 + ')';
1502
+ }
1503
+ if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
1504
+ buffer.put(0, 4);
1505
+ }
1506
+ while (buffer.getLengthInBits() % 8 != 0) {
1507
+ buffer.putBit(false);
1508
+ }
1509
+ while (true) {
1510
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
1511
+ break;
1512
+ }
1513
+ buffer.put(PAD0, 8);
1514
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
1515
+ break;
1516
+ }
1517
+ buffer.put(PAD1, 8);
1518
+ }
1519
+ };
1520
+ const getBufferForBytes = function (typeNumber, byteArray, mode) {
1521
+ let buffer = BitBuffer();
1522
+ let data = byteArray;
1523
+ buffer.put(mode, 4);
1524
+ buffer.put(data.length, getLengthInBits(mode, typeNumber));
1525
+ for (let i = 0; i < data.length; i++) {
1526
+ buffer.put(data[i], 8);
1527
+ }
1528
+ return buffer;
1529
+ };
1530
+ const getBufferForModes = function (typeNumber, dataList) {
1531
+ let buffer = BitBuffer();
1532
+ for (let i = 0; i < dataList.length; i += 1) {
1533
+ let data = dataList[i];
1534
+ buffer.put(data.getMode(), 4);
1535
+ buffer.put(data.getLength(), getLengthInBits(data.getMode(), typeNumber));
1536
+ data.write(buffer);
1537
+ }
1538
+ return buffer;
1539
+ };
1540
+ function createData(typeNumber, errorCorrectionLevel, byteArray, mode) {
1541
+ let rsBlocks = getRSBlocks(typeNumber, errorCorrectionLevel);
1542
+ let buffer;
1543
+ if (mode) {
1544
+ buffer = getBufferForBytes(typeNumber, byteArray, mode);
1545
+ }
1546
+ else {
1547
+ buffer = getBufferForModes(typeNumber, byteArray);
1548
+ }
1549
+ paddingBuffer(buffer, rsBlocks);
1550
+ return createBytes(buffer, rsBlocks);
1550
1551
  }
1551
1552
 
1552
- const QRMaskPattern = {
1553
- PATTERN000: 0,
1554
- PATTERN001: 1,
1555
- PATTERN010: 2,
1556
- PATTERN011: 3,
1557
- PATTERN100: 4,
1558
- PATTERN101: 5,
1559
- PATTERN110: 6,
1560
- PATTERN111: 7
1561
- };
1562
- const PATTERN_POSITION_TABLE = [
1563
- [],
1564
- [6, 18],
1565
- [6, 22],
1566
- [6, 26],
1567
- [6, 30],
1568
- [6, 34],
1569
- [6, 22, 38],
1570
- [6, 24, 42],
1571
- [6, 26, 46],
1572
- [6, 28, 50],
1573
- [6, 30, 54],
1574
- [6, 32, 58],
1575
- [6, 34, 62],
1576
- [6, 26, 46, 66],
1577
- [6, 26, 48, 70],
1578
- [6, 26, 50, 74],
1579
- [6, 30, 54, 78],
1580
- [6, 30, 56, 82],
1581
- [6, 30, 58, 86],
1582
- [6, 34, 62, 90],
1583
- [6, 28, 50, 72, 94],
1584
- [6, 26, 50, 74, 98],
1585
- [6, 30, 54, 78, 102],
1586
- [6, 28, 54, 80, 106],
1587
- [6, 32, 58, 84, 110],
1588
- [6, 30, 58, 86, 114],
1589
- [6, 34, 62, 90, 118],
1590
- [6, 26, 50, 74, 98, 122],
1591
- [6, 30, 54, 78, 102, 126],
1592
- [6, 26, 52, 78, 104, 130],
1593
- [6, 30, 56, 82, 108, 134],
1594
- [6, 34, 60, 86, 112, 138],
1595
- [6, 30, 58, 86, 114, 142],
1596
- [6, 34, 62, 90, 118, 146],
1597
- [6, 30, 54, 78, 102, 126, 150],
1598
- [6, 24, 50, 76, 102, 128, 154],
1599
- [6, 28, 54, 80, 106, 132, 158],
1600
- [6, 32, 58, 84, 110, 136, 162],
1601
- [6, 26, 54, 82, 110, 138, 166],
1602
- [6, 30, 58, 86, 114, 142, 170]
1603
- ].map(v => new Uint8Array(v));
1604
- const getQRMaskFunction = (function () {
1605
- const QRMaskFunctions = [
1606
- function (i, j) {
1607
- return (i + j) % 2 == 0;
1608
- },
1609
- function (i, j) {
1610
- return i % 2 == 0;
1611
- },
1612
- function (i, j) {
1613
- return j % 3 == 0;
1614
- },
1615
- function (i, j) {
1616
- return (i + j) % 3 == 0;
1617
- },
1618
- function (i, j) {
1619
- return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
1620
- },
1621
- function (i, j) {
1622
- return ((i * j) % 2) + ((i * j) % 3) == 0;
1623
- },
1624
- function (i, j) {
1625
- return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;
1626
- },
1627
- function (i, j) {
1628
- return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;
1629
- }
1630
- ];
1631
- return function (maskPattern) {
1632
- var fn = QRMaskFunctions[maskPattern];
1633
- if (!fn)
1634
- throw new Error('maskPattern:' + maskPattern);
1635
- return fn;
1636
- };
1637
- })();
1638
- function size2TypeNumber(size) {
1639
- return (size - 17) / 4;
1640
- }
1641
- function typeNumber2Size(typeNumber) {
1642
- return typeNumber * 4 + 17;
1643
- }
1644
- const setupPositionProbePattern = function (matrix, row, col) {
1645
- rectBorder(matrix, 0, row - 1, col - 1, 9, 9);
1646
- rectBorder(matrix, 1, row, col, 7, 7);
1647
- rectBorder(matrix, 0, row + 1, col + 1, 5, 5);
1648
- fillRect(matrix, 1, row + 2, col + 2, 3, 3);
1649
- };
1650
- const setupAllPositionProbePattern = function (matrix) {
1651
- let size = matrix.size;
1652
- setupPositionProbePattern(matrix, 0, 0);
1653
- setupPositionProbePattern(matrix, size - 7, 0);
1654
- setupPositionProbePattern(matrix, 0, size - 7);
1655
- };
1656
- const setupPositionAdjustPattern = function (matrix, typeNumber) {
1657
- let { size } = matrix;
1658
- typeNumber = typeNumber || size2TypeNumber(size);
1659
- let pos = PATTERN_POSITION_TABLE[typeNumber - 1];
1660
- for (let i = 0; i < pos.length; i++) {
1661
- for (let j = 0; j < pos.length; j++) {
1662
- let row = pos[i];
1663
- let col = pos[j];
1664
- if (row < 9 || col < 9) {
1665
- let m = size - 9;
1666
- if ((row < 9 || row > m) && (col < 9 || col > m))
1667
- continue;
1668
- }
1669
- for (let r = -2; r <= 2; r++) {
1670
- for (let c = -2; c <= 2; c++) {
1671
- if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
1672
- matrix.set(col + c, row + r, 1);
1673
- }
1674
- else {
1675
- matrix.set(col + c, row + r, 0);
1676
- }
1677
- }
1678
- }
1679
- }
1680
- }
1681
- };
1682
- const setupTimingPattern = function (matrix) {
1683
- let mapLength = matrix.width;
1684
- for (let r = 8; r < mapLength - 8; r += 1) {
1685
- matrix.set(r, 6, r % 2 == 0);
1686
- matrix.set(6, r, r % 2 == 0);
1687
- }
1688
- };
1689
- const setupTypeInfo = function (matrix, test, errorCorrectionLevel, maskPattern) {
1690
- let mapLength = matrix.width;
1691
- let data = (errorCorrectionLevel << 3) | maskPattern;
1692
- let bits = getBCHTypeInfo(data);
1693
- for (let i = 0; i < 15; i += 1) {
1694
- let mod = !test && ((bits >> i) & 1) == 1;
1695
- if (i < 6) {
1696
- matrix.set(8, i, mod);
1697
- }
1698
- else if (i < 8) {
1699
- matrix.set(8, i + 1, mod);
1700
- }
1701
- else {
1702
- matrix.set(8, mapLength - 15 + i, mod);
1703
- }
1704
- if (i < 8) {
1705
- matrix.set(mapLength - i - 1, 8, mod);
1706
- }
1707
- else if (i < 9) {
1708
- matrix.set(15 - i, 8, mod);
1709
- }
1710
- else {
1711
- matrix.set(15 - i - 1, 8, mod);
1712
- }
1713
- }
1714
- matrix.set(8, mapLength - 8, !test);
1715
- };
1716
- var setupTypeNumber = function (matrix, test, typeNumber) {
1717
- let mapLength = matrix.width;
1718
- typeNumber = typeNumber || size2TypeNumber(mapLength);
1719
- let bits = getBCHTypeNumber(typeNumber);
1720
- for (let i = 0; i < 18; i += 1) {
1721
- let mod = !test && ((bits >> i) & 1) == 1;
1722
- matrix.set((i % 3) + mapLength - 8 - 3, Math.floor(i / 3), mod);
1723
- matrix.set(Math.floor(i / 3), (i % 3) + mapLength - 8 - 3, mod);
1724
- }
1725
- };
1726
- function mapInit(size) {
1727
- return new QRMatrix(size);
1728
- }
1729
- const MatrixCache = [];
1730
- function createQRmatrix(typeNumber) {
1731
- let size = typeNumber2Size(typeNumber);
1732
- let matrix = mapInit(size);
1733
- setupAllPositionProbePattern(matrix);
1734
- setupPositionAdjustPattern(matrix);
1735
- setupTimingPattern(matrix);
1736
- return matrix;
1737
- }
1738
- function getBaseQRMatrix(typeNumber) {
1739
- let matrix = MatrixCache[typeNumber] || (MatrixCache[typeNumber] = createQRmatrix(typeNumber));
1740
- return matrix.clone();
1741
- }
1742
- function copyMap(matrix) {
1743
- return matrix.clone();
1744
- }
1745
- function compareMap(m1, m2, type) {
1746
- type = type || 'and';
1747
- if (m1.total !== m2.total)
1748
- throw 'Different size';
1749
- let matrix = new QRMatrix(m1.size);
1750
- let _d1 = m1.getPrototypeData();
1751
- let _m1 = m1.markMatrix.getPrototypeData();
1752
- let _d2 = m2.getPrototypeData();
1753
- let _m2 = m2.markMatrix.getPrototypeData();
1754
- let md = matrix.getPrototypeData();
1755
- let _md = matrix.markMatrix.getPrototypeData();
1756
- for (let i = 0; i < _d1.length; i++) {
1757
- switch (type) {
1758
- case 'or':
1759
- case '|':
1760
- var mk = (_md[i] = _m1[i] | _m2[i]);
1761
- _md[i] = (_m1[i] | _m2[i]) & mk;
1762
- break;
1763
- case 'xor':
1764
- case '^':
1765
- var mk = (_md[i] = _m1[i] ^ _m2[i]);
1766
- md[i] = (_d1[i] ^ _d2[i]) & mk;
1767
- break;
1768
- case 'and':
1769
- case '&':
1770
- var mk = (_md[i] = _m1[i] & _m2[i]);
1771
- md[i] = _d1[i] & _d2[i] & mk;
1772
- break;
1773
- default:
1774
- throw 'type err!';
1775
- }
1776
- }
1777
- return matrix;
1778
- }
1779
- const getLostPoint = function (matrix) {
1780
- let size = matrix.width;
1781
- let lostPoint = 0;
1782
- let isDark = function (row, col) {
1783
- return matrix.get(col, row);
1784
- };
1785
- for (let row = 0; row < size; row += 1) {
1786
- for (let col = 0; col < size; col += 1) {
1787
- let sameCount = 0;
1788
- let dark = isDark(row, col);
1789
- for (let r = -1; r <= 1; r += 1) {
1790
- if (row + r < 0 || size <= row + r) {
1791
- continue;
1792
- }
1793
- for (let c = -1; c <= 1; c += 1) {
1794
- if (col + c < 0 || size <= col + c) {
1795
- continue;
1796
- }
1797
- if (r == 0 && c == 0) {
1798
- continue;
1799
- }
1800
- if (dark == isDark(row + r, col + c)) {
1801
- sameCount += 1;
1802
- }
1803
- }
1804
- }
1805
- if (sameCount > 5) {
1806
- lostPoint += 3 + sameCount - 5;
1807
- }
1808
- }
1809
- }
1810
- for (var row = 0; row < size - 1; row += 1) {
1811
- for (var col = 0; col < size - 1; col += 1) {
1812
- var count = 0;
1813
- if (isDark(row, col))
1814
- count += 1;
1815
- if (isDark(row + 1, col))
1816
- count += 1;
1817
- if (isDark(row, col + 1))
1818
- count += 1;
1819
- if (isDark(row + 1, col + 1))
1820
- count += 1;
1821
- if (count == 0 || count == 4) {
1822
- lostPoint += 3;
1823
- }
1824
- }
1825
- }
1826
- for (var row = 0; row < size; row += 1) {
1827
- for (var col = 0; col < size - 6; col += 1) {
1828
- if (isDark(row, col) &&
1829
- !isDark(row, col + 1) &&
1830
- isDark(row, col + 2) &&
1831
- isDark(row, col + 3) &&
1832
- isDark(row, col + 4) &&
1833
- !isDark(row, col + 5) &&
1834
- isDark(row, col + 6)) {
1835
- lostPoint += 40;
1836
- }
1837
- }
1838
- }
1839
- for (var col = 0; col < size; col += 1) {
1840
- for (var row = 0; row < size - 6; row += 1) {
1841
- if (isDark(row, col) &&
1842
- !isDark(row + 1, col) &&
1843
- isDark(row + 2, col) &&
1844
- isDark(row + 3, col) &&
1845
- isDark(row + 4, col) &&
1846
- !isDark(row + 5, col) &&
1847
- isDark(row + 6, col)) {
1848
- lostPoint += 40;
1849
- }
1850
- }
1851
- }
1852
- var darkCount = 0;
1853
- for (var col = 0; col < size; col += 1) {
1854
- for (var row = 0; row < size; row += 1) {
1855
- if (isDark(row, col)) {
1856
- darkCount += 1;
1857
- }
1858
- }
1859
- }
1860
- var ratio = Math.abs((100 * darkCount) / size / size - 50) / 5;
1861
- lostPoint += ratio * 10;
1862
- return lostPoint;
1863
- };
1864
- const setupData = function (matrix, data, maskPattern) {
1865
- let _moduleCount = matrix.width;
1866
- let inc = -1;
1867
- let row = _moduleCount - 1;
1868
- let bitIndex = 7;
1869
- let byteIndex = 0;
1870
- let maskFunc = getQRMaskFunction(maskPattern);
1871
- for (var col = _moduleCount - 1; col > 0; col -= 2) {
1872
- if (col == 6)
1873
- col -= 1;
1874
- while (true) {
1875
- for (var c = 0; c < 2; c += 1) {
1876
- if (!matrix.has(col - c, row)) {
1877
- var dark = false;
1878
- if (byteIndex < data.length) {
1879
- dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;
1880
- }
1881
- var mask = maskFunc(row, col - c);
1882
- if (mask) {
1883
- dark = !dark;
1884
- }
1885
- matrix.set(col - c, row, dark);
1886
- bitIndex -= 1;
1887
- if (bitIndex == -1) {
1888
- byteIndex += 1;
1889
- bitIndex = 7;
1890
- }
1891
- }
1892
- }
1893
- row += inc;
1894
- if (row < 0 || _moduleCount <= row) {
1895
- row -= inc;
1896
- inc = -inc;
1897
- break;
1898
- }
1899
- }
1900
- }
1553
+ const QRMaskPattern = {
1554
+ PATTERN000: 0,
1555
+ PATTERN001: 1,
1556
+ PATTERN010: 2,
1557
+ PATTERN011: 3,
1558
+ PATTERN100: 4,
1559
+ PATTERN101: 5,
1560
+ PATTERN110: 6,
1561
+ PATTERN111: 7
1562
+ };
1563
+ const PATTERN_POSITION_TABLE = [
1564
+ [],
1565
+ [6, 18],
1566
+ [6, 22],
1567
+ [6, 26],
1568
+ [6, 30],
1569
+ [6, 34],
1570
+ [6, 22, 38],
1571
+ [6, 24, 42],
1572
+ [6, 26, 46],
1573
+ [6, 28, 50],
1574
+ [6, 30, 54],
1575
+ [6, 32, 58],
1576
+ [6, 34, 62],
1577
+ [6, 26, 46, 66],
1578
+ [6, 26, 48, 70],
1579
+ [6, 26, 50, 74],
1580
+ [6, 30, 54, 78],
1581
+ [6, 30, 56, 82],
1582
+ [6, 30, 58, 86],
1583
+ [6, 34, 62, 90],
1584
+ [6, 28, 50, 72, 94],
1585
+ [6, 26, 50, 74, 98],
1586
+ [6, 30, 54, 78, 102],
1587
+ [6, 28, 54, 80, 106],
1588
+ [6, 32, 58, 84, 110],
1589
+ [6, 30, 58, 86, 114],
1590
+ [6, 34, 62, 90, 118],
1591
+ [6, 26, 50, 74, 98, 122],
1592
+ [6, 30, 54, 78, 102, 126],
1593
+ [6, 26, 52, 78, 104, 130],
1594
+ [6, 30, 56, 82, 108, 134],
1595
+ [6, 34, 60, 86, 112, 138],
1596
+ [6, 30, 58, 86, 114, 142],
1597
+ [6, 34, 62, 90, 118, 146],
1598
+ [6, 30, 54, 78, 102, 126, 150],
1599
+ [6, 24, 50, 76, 102, 128, 154],
1600
+ [6, 28, 54, 80, 106, 132, 158],
1601
+ [6, 32, 58, 84, 110, 136, 162],
1602
+ [6, 26, 54, 82, 110, 138, 166],
1603
+ [6, 30, 58, 86, 114, 142, 170]
1604
+ ].map(v => new Uint8Array(v));
1605
+ const getQRMaskFunction = (function () {
1606
+ const QRMaskFunctions = [
1607
+ function (i, j) {
1608
+ return (i + j) % 2 == 0;
1609
+ },
1610
+ function (i, j) {
1611
+ return i % 2 == 0;
1612
+ },
1613
+ function (i, j) {
1614
+ return j % 3 == 0;
1615
+ },
1616
+ function (i, j) {
1617
+ return (i + j) % 3 == 0;
1618
+ },
1619
+ function (i, j) {
1620
+ return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
1621
+ },
1622
+ function (i, j) {
1623
+ return ((i * j) % 2) + ((i * j) % 3) == 0;
1624
+ },
1625
+ function (i, j) {
1626
+ return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;
1627
+ },
1628
+ function (i, j) {
1629
+ return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;
1630
+ }
1631
+ ];
1632
+ return function (maskPattern) {
1633
+ var fn = QRMaskFunctions[maskPattern];
1634
+ if (!fn)
1635
+ throw new Error('maskPattern:' + maskPattern);
1636
+ return fn;
1637
+ };
1638
+ })();
1639
+ function size2TypeNumber(size) {
1640
+ return (size - 17) / 4;
1641
+ }
1642
+ function typeNumber2Size(typeNumber) {
1643
+ return typeNumber * 4 + 17;
1644
+ }
1645
+ const setupPositionProbePattern = function (matrix, row, col) {
1646
+ rectBorder(matrix, 0, row - 1, col - 1, 9, 9);
1647
+ rectBorder(matrix, 1, row, col, 7, 7);
1648
+ rectBorder(matrix, 0, row + 1, col + 1, 5, 5);
1649
+ fillRect(matrix, 1, row + 2, col + 2, 3, 3);
1650
+ };
1651
+ const setupAllPositionProbePattern = function (matrix) {
1652
+ let size = matrix.size;
1653
+ setupPositionProbePattern(matrix, 0, 0);
1654
+ setupPositionProbePattern(matrix, size - 7, 0);
1655
+ setupPositionProbePattern(matrix, 0, size - 7);
1656
+ };
1657
+ const setupPositionAdjustPattern = function (matrix, typeNumber) {
1658
+ let { size } = matrix;
1659
+ typeNumber = typeNumber || size2TypeNumber(size);
1660
+ let pos = PATTERN_POSITION_TABLE[typeNumber - 1];
1661
+ for (let i = 0; i < pos.length; i++) {
1662
+ for (let j = 0; j < pos.length; j++) {
1663
+ let row = pos[i];
1664
+ let col = pos[j];
1665
+ if (row < 9 || col < 9) {
1666
+ let m = size - 9;
1667
+ if ((row < 9 || row > m) && (col < 9 || col > m))
1668
+ continue;
1669
+ }
1670
+ for (let r = -2; r <= 2; r++) {
1671
+ for (let c = -2; c <= 2; c++) {
1672
+ if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
1673
+ matrix.set(col + c, row + r, 1);
1674
+ }
1675
+ else {
1676
+ matrix.set(col + c, row + r, 0);
1677
+ }
1678
+ }
1679
+ }
1680
+ }
1681
+ }
1682
+ };
1683
+ const setupTimingPattern = function (matrix) {
1684
+ let mapLength = matrix.width;
1685
+ for (let r = 8; r < mapLength - 8; r += 1) {
1686
+ matrix.set(r, 6, r % 2 == 0);
1687
+ matrix.set(6, r, r % 2 == 0);
1688
+ }
1689
+ };
1690
+ const setupTypeInfo = function (matrix, test, errorCorrectionLevel, maskPattern) {
1691
+ let mapLength = matrix.width;
1692
+ let data = (errorCorrectionLevel << 3) | maskPattern;
1693
+ let bits = getBCHTypeInfo(data);
1694
+ for (let i = 0; i < 15; i += 1) {
1695
+ let mod = !test && ((bits >> i) & 1) == 1;
1696
+ if (i < 6) {
1697
+ matrix.set(8, i, mod);
1698
+ }
1699
+ else if (i < 8) {
1700
+ matrix.set(8, i + 1, mod);
1701
+ }
1702
+ else {
1703
+ matrix.set(8, mapLength - 15 + i, mod);
1704
+ }
1705
+ if (i < 8) {
1706
+ matrix.set(mapLength - i - 1, 8, mod);
1707
+ }
1708
+ else if (i < 9) {
1709
+ matrix.set(15 - i, 8, mod);
1710
+ }
1711
+ else {
1712
+ matrix.set(15 - i - 1, 8, mod);
1713
+ }
1714
+ }
1715
+ matrix.set(8, mapLength - 8, !test);
1716
+ };
1717
+ var setupTypeNumber = function (matrix, test, typeNumber) {
1718
+ let mapLength = matrix.width;
1719
+ typeNumber = typeNumber || size2TypeNumber(mapLength);
1720
+ let bits = getBCHTypeNumber(typeNumber);
1721
+ for (let i = 0; i < 18; i += 1) {
1722
+ let mod = !test && ((bits >> i) & 1) == 1;
1723
+ matrix.set((i % 3) + mapLength - 8 - 3, Math.floor(i / 3), mod);
1724
+ matrix.set(Math.floor(i / 3), (i % 3) + mapLength - 8 - 3, mod);
1725
+ }
1726
+ };
1727
+ function mapInit(size) {
1728
+ return new QRMatrix(size);
1729
+ }
1730
+ const MatrixCache = [];
1731
+ function createQRmatrix(typeNumber) {
1732
+ let size = typeNumber2Size(typeNumber);
1733
+ let matrix = mapInit(size);
1734
+ setupAllPositionProbePattern(matrix);
1735
+ setupPositionAdjustPattern(matrix);
1736
+ setupTimingPattern(matrix);
1737
+ return matrix;
1738
+ }
1739
+ function getBaseQRMatrix(typeNumber) {
1740
+ let matrix = MatrixCache[typeNumber] || (MatrixCache[typeNumber] = createQRmatrix(typeNumber));
1741
+ return matrix.clone();
1742
+ }
1743
+ function copyMap(matrix) {
1744
+ return matrix.clone();
1745
+ }
1746
+ function compareMap(m1, m2, type = 'and') {
1747
+ if (m1.total !== m2.total)
1748
+ throw 'Different size';
1749
+ let matrix = new QRMatrix(m1.size);
1750
+ let _d1 = m1.getPrototypeData();
1751
+ let _m1 = m1.markMatrix.getPrototypeData();
1752
+ let _d2 = m2.getPrototypeData();
1753
+ let _m2 = m2.markMatrix.getPrototypeData();
1754
+ let md = matrix.getPrototypeData();
1755
+ let _md = matrix.markMatrix.getPrototypeData();
1756
+ for (let i = 0; i < _d1.length; i++) {
1757
+ switch (type) {
1758
+ case 'or':
1759
+ case '|':
1760
+ var mk = (_md[i] = _m1[i] | _m2[i]);
1761
+ _md[i] = (_m1[i] | _m2[i]) & mk;
1762
+ break;
1763
+ case 'xor':
1764
+ case '^':
1765
+ var mk = (_md[i] = _m1[i] ^ _m2[i]);
1766
+ md[i] = (_d1[i] ^ _d2[i]) & mk;
1767
+ break;
1768
+ case 'and':
1769
+ case '&':
1770
+ var mk = (_md[i] = _m1[i] & _m2[i]);
1771
+ md[i] = _d1[i] & _d2[i] & mk;
1772
+ break;
1773
+ default:
1774
+ throw 'type err!';
1775
+ }
1776
+ }
1777
+ return matrix;
1778
+ }
1779
+ const getLostPoint = function (matrix) {
1780
+ let size = matrix.width;
1781
+ let lostPoint = 0;
1782
+ let isDark = function (row, col) {
1783
+ return matrix.get(col, row);
1784
+ };
1785
+ for (let row = 0; row < size; row += 1) {
1786
+ for (let col = 0; col < size; col += 1) {
1787
+ let sameCount = 0;
1788
+ let dark = isDark(row, col);
1789
+ for (let r = -1; r <= 1; r += 1) {
1790
+ if (row + r < 0 || size <= row + r) {
1791
+ continue;
1792
+ }
1793
+ for (let c = -1; c <= 1; c += 1) {
1794
+ if (col + c < 0 || size <= col + c) {
1795
+ continue;
1796
+ }
1797
+ if (r == 0 && c == 0) {
1798
+ continue;
1799
+ }
1800
+ if (dark == isDark(row + r, col + c)) {
1801
+ sameCount += 1;
1802
+ }
1803
+ }
1804
+ }
1805
+ if (sameCount > 5) {
1806
+ lostPoint += 3 + sameCount - 5;
1807
+ }
1808
+ }
1809
+ }
1810
+ for (var row = 0; row < size - 1; row += 1) {
1811
+ for (var col = 0; col < size - 1; col += 1) {
1812
+ var count = 0;
1813
+ if (isDark(row, col))
1814
+ count += 1;
1815
+ if (isDark(row + 1, col))
1816
+ count += 1;
1817
+ if (isDark(row, col + 1))
1818
+ count += 1;
1819
+ if (isDark(row + 1, col + 1))
1820
+ count += 1;
1821
+ if (count == 0 || count == 4) {
1822
+ lostPoint += 3;
1823
+ }
1824
+ }
1825
+ }
1826
+ for (var row = 0; row < size; row += 1) {
1827
+ for (var col = 0; col < size - 6; col += 1) {
1828
+ if (isDark(row, col) &&
1829
+ !isDark(row, col + 1) &&
1830
+ isDark(row, col + 2) &&
1831
+ isDark(row, col + 3) &&
1832
+ isDark(row, col + 4) &&
1833
+ !isDark(row, col + 5) &&
1834
+ isDark(row, col + 6)) {
1835
+ lostPoint += 40;
1836
+ }
1837
+ }
1838
+ }
1839
+ for (var col = 0; col < size; col += 1) {
1840
+ for (var row = 0; row < size - 6; row += 1) {
1841
+ if (isDark(row, col) &&
1842
+ !isDark(row + 1, col) &&
1843
+ isDark(row + 2, col) &&
1844
+ isDark(row + 3, col) &&
1845
+ isDark(row + 4, col) &&
1846
+ !isDark(row + 5, col) &&
1847
+ isDark(row + 6, col)) {
1848
+ lostPoint += 40;
1849
+ }
1850
+ }
1851
+ }
1852
+ var darkCount = 0;
1853
+ for (var col = 0; col < size; col += 1) {
1854
+ for (var row = 0; row < size; row += 1) {
1855
+ if (isDark(row, col)) {
1856
+ darkCount += 1;
1857
+ }
1858
+ }
1859
+ }
1860
+ var ratio = Math.abs((100 * darkCount) / size / size - 50) / 5;
1861
+ lostPoint += ratio * 10;
1862
+ return lostPoint;
1863
+ };
1864
+ const setupData = function (matrix, data, maskPattern) {
1865
+ let _moduleCount = matrix.width;
1866
+ let inc = -1;
1867
+ let row = _moduleCount - 1;
1868
+ let bitIndex = 7;
1869
+ let byteIndex = 0;
1870
+ let maskFunc = getQRMaskFunction(maskPattern);
1871
+ for (var col = _moduleCount - 1; col > 0; col -= 2) {
1872
+ if (col == 6)
1873
+ col -= 1;
1874
+ while (true) {
1875
+ for (var c = 0; c < 2; c += 1) {
1876
+ if (!matrix.has(col - c, row)) {
1877
+ var dark = false;
1878
+ if (byteIndex < data.length) {
1879
+ dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;
1880
+ }
1881
+ var mask = maskFunc(row, col - c);
1882
+ if (mask) {
1883
+ dark = !dark;
1884
+ }
1885
+ matrix.set(col - c, row, dark);
1886
+ bitIndex -= 1;
1887
+ if (bitIndex == -1) {
1888
+ byteIndex += 1;
1889
+ bitIndex = 7;
1890
+ }
1891
+ }
1892
+ }
1893
+ row += inc;
1894
+ if (row < 0 || _moduleCount <= row) {
1895
+ row -= inc;
1896
+ inc = -inc;
1897
+ break;
1898
+ }
1899
+ }
1900
+ }
1901
1901
  };
1902
1902
 
1903
1903
  var utils = /*#__PURE__*/Object.freeze({
1904
+ __proto__: null,
1904
1905
  QRMode: QRMode,
1905
1906
  QRErrorCorrectionLevel: QRErrorCorrectionLevel,
1906
1907
  QRMaskPattern: QRMaskPattern,
@@ -1923,138 +1924,140 @@
1923
1924
  getMaxDataCount: getMaxDataCount
1924
1925
  });
1925
1926
 
1926
- function Class(QRModes, defOptions) {
1927
- QRcode.QRModes = QRModes;
1928
- let QRErrorCorrectionLevels = (QRcode.QRErrorCorrectionLevels = Object.keys(QRErrorCorrectionLevel));
1929
- function QRcode(options) {
1930
- options = options || {};
1931
- let _options = Object.assign({}, defOptions, options);
1932
- return (function () {
1933
- let _typeNumber = _options.typeNumber, _minTypeNumber = _options.minTypeNumber, _maskPattern = _options.maskPattern, _dataMode = _options.dataMode, _errorCorrectionLevel = (function () {
1934
- let l = _options.errorCorrectionLevel + '';
1935
- l = l.toUpperCase();
1936
- return ~QRErrorCorrectionLevels.indexOf(l)
1937
- ? QRErrorCorrectionLevel[l]
1938
- : QRErrorCorrectionLevel.M;
1939
- })();
1940
- let _moduleCount = 0, _dataList = [], _dataCache = null;
1941
- let makeImpl = function (test, maskPattern) {
1942
- let matrix = getBaseQRMatrix(_typeNumber);
1943
- setupTypeInfo(matrix, test, _errorCorrectionLevel, maskPattern);
1944
- _typeNumber >= 7 && setupTypeNumber(matrix, test);
1945
- if (_dataCache == null) {
1946
- _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);
1947
- }
1948
- setupData(matrix, _dataCache, maskPattern);
1949
- return matrix;
1950
- };
1951
- var addData = function (data, mode) {
1952
- mode = mode || _dataMode;
1953
- var newData = null;
1954
- if (typeof mode == 'function') {
1955
- newData = mode(data);
1956
- if (!(newData.getMode && newData.getLength && newData.write)) {
1957
- throw 'mode invalid!';
1958
- }
1959
- }
1960
- else {
1961
- if (QRModes[mode]) {
1962
- newData = QRModes[mode](data);
1963
- }
1964
- else {
1965
- throw 'mode type invalid! mode is ' + mode;
1966
- }
1967
- }
1968
- _dataList.push(newData);
1969
- _dataCache = null;
1970
- };
1971
- var make = function () {
1972
- if (_typeNumber < 1) {
1973
- var typeNumber = _minTypeNumber ? _minTypeNumber : 1;
1974
- for (; typeNumber < 40; typeNumber++) {
1975
- var buffer = getBufferForModes(typeNumber, _dataList);
1976
- var totalDataCount = getMaxDataCount(typeNumber, _errorCorrectionLevel);
1977
- if (buffer.getLengthInBits() <= totalDataCount * 8) {
1978
- break;
1979
- }
1980
- }
1981
- _typeNumber = typeNumber;
1982
- }
1983
- _moduleCount = _typeNumber * 4 + 17;
1984
- if (_maskPattern === 'random') {
1985
- _maskPattern = ~~(Math.random() * (7 + 1));
1986
- }
1987
- else if (0 <= _maskPattern && _maskPattern <= 7) {
1988
- _maskPattern = Number(_maskPattern) >> 0;
1989
- }
1990
- else {
1991
- _maskPattern = (function () {
1992
- var minLostPoint = 0;
1993
- var pattern = 0;
1994
- for (var i = 0; i < 8; i += 1) {
1995
- var map = makeImpl(true, i);
1996
- var lostPoint = getLostPoint(map);
1997
- if (i == 0 || minLostPoint > lostPoint) {
1998
- minLostPoint = lostPoint;
1999
- pattern = i;
2000
- }
2001
- }
2002
- return pattern;
2003
- })();
2004
- }
2005
- var map = makeImpl(false, _maskPattern);
2006
- return map;
2007
- };
2008
- var splitMake = function () {
2009
- var obj = {};
2010
- obj.all = make();
2011
- obj.allDiscover = getBaseQRMatrix(_typeNumber);
2012
- obj.positionProbe = mapInit(_moduleCount);
2013
- setupAllPositionProbePattern(obj.positionProbe);
2014
- obj.positionAdjust = mapInit(_moduleCount);
2015
- setupPositionAdjustPattern(obj.positionAdjust);
2016
- obj.timing = mapInit(_moduleCount);
2017
- setupTimingPattern(obj.timing);
2018
- obj.data = compareMap(obj.all, obj.allDiscover, 'xor');
2019
- return obj;
2020
- };
2021
- var setData = function (data, mode) {
2022
- _dataList = [];
2023
- addData(data, mode);
2024
- };
2025
- var _this = function (str, mode) {
2026
- setData(str, mode);
2027
- return make();
2028
- };
2029
- _this.setData = setData;
2030
- _this.addData = addData;
2031
- _this.make = make;
2032
- _this.splitMake = splitMake;
2033
- return _this;
2034
- })();
2035
- }
2036
- return QRcode;
1927
+ function Class(QRModes, defOptions) {
1928
+ QRcode.QRModes = QRModes;
1929
+ let QRErrorCorrectionLevels = (QRcode.QRErrorCorrectionLevels = Object.keys(QRErrorCorrectionLevel));
1930
+ function QRcode(options) {
1931
+ options = options || {};
1932
+ let _options = Object.assign(Object.assign({}, defOptions), options);
1933
+ return (function () {
1934
+ let _typeNumber = _options.typeNumber, _minTypeNumber = _options.minTypeNumber, _maskPattern = _options.maskPattern, _dataMode = _options.dataMode, _errorCorrectionLevel = (function () {
1935
+ let l = _options.errorCorrectionLevel + '';
1936
+ l = l.toUpperCase();
1937
+ return ~QRErrorCorrectionLevels.indexOf(l)
1938
+ ? QRErrorCorrectionLevel[l]
1939
+ : QRErrorCorrectionLevel.M;
1940
+ })();
1941
+ let _moduleCount = 0, _dataList = [], _dataCache = null;
1942
+ let makeImpl = function (test, maskPattern) {
1943
+ let matrix = getBaseQRMatrix(_typeNumber);
1944
+ setupTypeInfo(matrix, test, _errorCorrectionLevel, maskPattern);
1945
+ _typeNumber >= 7 && setupTypeNumber(matrix, test);
1946
+ if (_dataCache == null) {
1947
+ _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);
1948
+ }
1949
+ setupData(matrix, _dataCache, maskPattern);
1950
+ return matrix;
1951
+ };
1952
+ var addData = function (data, mode) {
1953
+ mode = mode || _dataMode;
1954
+ var newData = null;
1955
+ if (typeof mode == 'function') {
1956
+ newData = mode(data);
1957
+ if (!(newData.getMode && newData.getLength && newData.write)) {
1958
+ throw 'mode invalid!';
1959
+ }
1960
+ }
1961
+ else {
1962
+ if (QRModes[mode]) {
1963
+ newData = QRModes[mode](data);
1964
+ }
1965
+ else {
1966
+ throw 'mode type invalid! mode is ' + mode;
1967
+ }
1968
+ }
1969
+ _dataList.push(newData);
1970
+ _dataCache = null;
1971
+ };
1972
+ var make = function () {
1973
+ if (_typeNumber < 1) {
1974
+ var typeNumber = _minTypeNumber ? _minTypeNumber : 1;
1975
+ for (; typeNumber < 40; typeNumber++) {
1976
+ var buffer = getBufferForModes(typeNumber, _dataList);
1977
+ var totalDataCount = getMaxDataCount(typeNumber, _errorCorrectionLevel);
1978
+ if (buffer.getLengthInBits() <= totalDataCount * 8) {
1979
+ break;
1980
+ }
1981
+ }
1982
+ _typeNumber = typeNumber;
1983
+ }
1984
+ _moduleCount = _typeNumber * 4 + 17;
1985
+ if (_maskPattern === 'random') {
1986
+ _maskPattern = ~~(Math.random() * (7 + 1));
1987
+ }
1988
+ else if (typeof _maskPattern === 'number' && 0 <= _maskPattern && _maskPattern <= 7) {
1989
+ _maskPattern = Number(_maskPattern) >> 0;
1990
+ }
1991
+ else {
1992
+ _maskPattern = (function () {
1993
+ var minLostPoint = 0;
1994
+ var pattern = 0;
1995
+ for (var i = 0; i < 8; i += 1) {
1996
+ var map = makeImpl(true, i);
1997
+ var lostPoint = getLostPoint(map);
1998
+ if (i == 0 || minLostPoint > lostPoint) {
1999
+ minLostPoint = lostPoint;
2000
+ pattern = i;
2001
+ }
2002
+ }
2003
+ return pattern;
2004
+ })();
2005
+ }
2006
+ var map = makeImpl(false, _maskPattern);
2007
+ return map;
2008
+ };
2009
+ var splitMake = function () {
2010
+ var obj = {};
2011
+ obj.all = make();
2012
+ obj.allDiscover = getBaseQRMatrix(_typeNumber);
2013
+ obj.positionProbe = mapInit(_moduleCount);
2014
+ setupAllPositionProbePattern(obj.positionProbe);
2015
+ obj.positionAdjust = mapInit(_moduleCount);
2016
+ setupPositionAdjustPattern(obj.positionAdjust);
2017
+ obj.timing = mapInit(_moduleCount);
2018
+ setupTimingPattern(obj.timing);
2019
+ obj.data = compareMap(obj.all, obj.allDiscover, 'xor');
2020
+ return obj;
2021
+ };
2022
+ var setData = function (data, mode) {
2023
+ _dataList = [];
2024
+ addData(data, mode);
2025
+ };
2026
+ var _this = function (str, mode) {
2027
+ setData(str, mode);
2028
+ return make();
2029
+ };
2030
+ _this.setData = setData;
2031
+ _this.addData = addData;
2032
+ _this.make = make;
2033
+ _this.splitMake = splitMake;
2034
+ return _this;
2035
+ })();
2036
+ }
2037
+ return QRcode;
2037
2038
  }
2038
2039
 
2039
- let QRModes = {
2040
- Numeric: qrNumber,
2041
- Alphanumeric: qrAlphaNum,
2042
- Byte: qr8BitByte(toUTF8Array),
2043
- 'Byte-SJIS': qr8BitByte(SJIS),
2044
- Kanji: qrKanji()
2045
- };
2046
- let defOptions = {
2047
- errorCorrectionLevel: 'M',
2048
- typeNumber: 0,
2049
- maskPattern: 'auto',
2050
- dataMode: 'Byte'
2051
- };
2040
+ let QRModes = {
2041
+ Numeric: qrNumber,
2042
+ Alphanumeric: qrAlphaNum,
2043
+ Byte: qr8BitByte(toUTF8Array),
2044
+ 'Byte-SJIS': qr8BitByte(SJIS),
2045
+ Kanji: qrKanji()
2046
+ };
2047
+ let defOptions = {
2048
+ errorCorrectionLevel: 'M',
2049
+ typeNumber: 0,
2050
+ maskPattern: 'auto',
2051
+ dataMode: 'Byte'
2052
+ };
2052
2053
  const QRcode = Class(QRModes, defOptions);
2053
2054
 
2055
+ exports.QRMatrix = QRMatrix;
2056
+ exports.QRModes = QRModes;
2054
2057
  exports.QRcode = QRcode;
2055
2058
  exports.default = QRcode;
2056
2059
  exports.utils = utils;
2057
2060
 
2058
2061
  Object.defineProperty(exports, '__esModule', { value: true });
2059
2062
 
2060
- }));
2063
+ })));