From 2119a0bb6e172c83f567c8b8fdb8be804fb4b1ac Mon Sep 17 00:00:00 2001 From: newsages Date: Sun, 20 Mar 2016 22:26:04 +0100 Subject: [PATCH 1/3] Logic Config Debug/release .pro --- demo/r1/r1.pro | 80 +++++++++++++++++++++++++++++++------------------- limereport.pro | 12 ++++++++ 2 files changed, 61 insertions(+), 31 deletions(-) diff --git a/demo/r1/r1.pro b/demo/r1/r1.pro index 33cfd0e..9c95ac4 100644 --- a/demo/r1/r1.pro +++ b/demo/r1/r1.pro @@ -1,28 +1,8 @@ QT += core gui script sql - -EXTRA_DIR += $$PWD/demo_reports/* - -win32:CONFIG(release, debug|release): DEST_DIR = $$OUT_PWD/demo_reports/ -win32:CONFIG(debug, debug|release): DEST_DIR = $$OUT_PWD/demo_reports/ - -unix{ - DEST_DIR = $$OUT_PWD/demo_reports/ - QMAKE_POST_LINK += mkdir -p $$quote($$DEST_DIR) | $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DEST_DIR) $$escape_expand(\n\t) +greaterThan(QT_MAJOR_VERSION, 4){ + QT += widgets printsupport + DEFINES += HAVE_QT5 } - -win32 { - EXTRA_DIR ~= s,/,\\,g - DEST_DIR ~= s,/,\\,g - QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DEST_DIR) $$escape_expand(\\n\\t) - CONFIG(release, debug|release) { - DEST_DIR = $$OUT_PWD/release/demo_reports/ - DEST_DIR ~= s,/,\\,g - QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DEST_DIR) $$escape_expand(\\n\\t) - } -} - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport - TARGET = LRDemo TEMPLATE = app @@ -33,17 +13,55 @@ HEADERS += mainwindow.h FORMS += mainwindow.ui -win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../lib/release -llimereport -else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../lib/debug -llimereport -else:unix:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../lib/debug -llimereport -else:unix:CONFIG(release, debug|release): LIBS += -L$$PWD/../../lib/release -llimereport - INCLUDEPATH += $$PWD/../../include -DEPENDPATH += $$PWD/../../include +DEPENDPATH += $$PWD/../../include RESOURCES += \ r1.qrc -win32 { - RC_FILE += mainicon.rc + +EXTRA_DIR += $$PWD/demo_reports/* + +CONFIG(release, debug|release){ + message(Release) + BUILD_TYPE = release +}else{ + message(Debug) + BUILD_TYPE = debug +} +CONFIG -= app_bundle + +unix{ + UNIX_DIR = $$OUT_PWD/../build/unix + DEST_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/demo_reports + MOC_DIR = $${DEST_DIR}/moc + UI_DIR = $${DEST_DIR}/ui + UI_HEADERS_DIR = $${DEST_DIR}/ui + UI_SOURCES_DIR = $${DEST_DIR}/ui + OBJECTS_DIR = $${DEST_DIR}/obj + RCC_DIR = $${DEST_DIR}/rcc + + LIBS += -L$$PWD/../../lib/$${BUILD_TYPE} -llimereport + DESTDIR = $$DEST_DIR/bin + QMAKE_POST_LINK += mkdir -p $$quote($$DESTDIR) | $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DESTDIR) $$escape_expand(\n\t) +} + +win32 { + WIN32_DIR = $$OUT_PWD/../build/win32 + EXTRA_DIR ~= s,/,\\,g + + DEST_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/demo_reports/ + DEST_DIR ~= s,/,\\,g + MOC_DIR = $${DEST_DIR}/moc + UI_DIR = $${DEST_DIR}/ui + UI_HEADERS_DIR = $${DEST_DIR}/ui + UI_SOURCES_DIR = $${DEST_DIR}/ui + OBJECTS_DIR = $${DEST_DIR}/obj + RCC_DIR = $${DEST_DIR}/rcc + + DESTDIR = $$DEST_DIR/bin + RC_FILE += mainicon.rc + + QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DESTDIR) $$escape_expand(\\n\\t) + LIBS += -L$$PWD/../../lib/$${BUILD_TYPE} -llimereport } diff --git a/limereport.pro b/limereport.pro index 9bc8022..5f4a9ae 100644 --- a/limereport.pro +++ b/limereport.pro @@ -25,6 +25,12 @@ unix { for(FILE,EXTRA_FILES){ QMAKE_POST_LINK += $$quote($$QMAKE_COPY $${FILE} $${DEST_DIR}$$escape_expand(\n\t)) } + MOC_DIR = $${OUT_PWD}/unix/moc + UI_DIR = $${OUT_PWD}/unix/ui + UI_HEADERS_DIR = $${OUT_PWD}/unix/ui + UI_SOURCES_DIR = $${OUT_PWD}/unix/ui + OBJECTS_DIR = $${OUT_PWD}/unix/obj + RCC_DIR = $${OUT_PWD}/unix/rcc } win32 { @@ -33,6 +39,12 @@ win32 { for(FILE,EXTRA_FILES){ QMAKE_POST_LINK += $$QMAKE_COPY $$quote($$FILE) $$quote($$DEST_DIR) $$escape_expand(\\n\\t) } + MOC_DIR = $${OUT_PWD}/win32/moc + UI_DIR = $${OUT_PWD}/win32/ui + UI_HEADERS_DIR = $${OUT_PWD}/win32/ui + UI_SOURCES_DIR = $${OUT_PWD}/win32/ui + OBJECTS_DIR = $${OUT_PWD}/win32/obj + RCC_DIR = $${OUT_PWD}/win32/rcc } DESTDIR = $$PWD/lib From 9797b30d0ae2b2596caa249418e8bbb162454538 Mon Sep 17 00:00:00 2001 From: newsages Date: Mon, 21 Mar 2016 00:49:04 +0100 Subject: [PATCH 2/3] Qzint , need change pro from lib to subfolder, config +=ordered, to add zint as subproyect --- 3rdparty/3rdparty.pro | 10 + 3rdparty/zint-2.4.4/backend/2of5.c | 357 + 3rdparty/zint-2.4.4/backend/auspost.c | 246 + 3rdparty/zint-2.4.4/backend/aztec.c | 1350 +++ 3rdparty/zint-2.4.4/backend/aztec.h | 291 + 3rdparty/zint-2.4.4/backend/code.c | 537 ++ 3rdparty/zint-2.4.4/backend/code1.c | 1515 ++++ 3rdparty/zint-2.4.4/backend/code1.h | 61 + 3rdparty/zint-2.4.4/backend/code128.c | 997 +++ 3rdparty/zint-2.4.4/backend/code16k.c | 622 ++ 3rdparty/zint-2.4.4/backend/code49.c | 315 + 3rdparty/zint-2.4.4/backend/code49.h | 1175 +++ 3rdparty/zint-2.4.4/backend/common.c | 374 + 3rdparty/zint-2.4.4/backend/common.h | 70 + 3rdparty/zint-2.4.4/backend/composite.c | 1957 +++++ 3rdparty/zint-2.4.4/backend/composite.h | 62 + 3rdparty/zint-2.4.4/backend/dllversion.c | 31 + 3rdparty/zint-2.4.4/backend/dmatrix.c | 910 ++ 3rdparty/zint-2.4.4/backend/dmatrix.h | 101 + 3rdparty/zint-2.4.4/backend/font.h | 1691 ++++ 3rdparty/zint-2.4.4/backend/gb2312.h | 7467 +++++++++++++++++ 3rdparty/zint-2.4.4/backend/gridmtx.c | 1089 +++ 3rdparty/zint-2.4.4/backend/gridmtx.h | 160 + 3rdparty/zint-2.4.4/backend/gs1.c | 311 + 3rdparty/zint-2.4.4/backend/gs1.h | 35 + 3rdparty/zint-2.4.4/backend/imail.c | 700 ++ 3rdparty/zint-2.4.4/backend/large.c | 227 + 3rdparty/zint-2.4.4/backend/large.h | 40 + 3rdparty/zint-2.4.4/backend/library.c | 905 ++ 3rdparty/zint-2.4.4/backend/maxicode.c | 709 ++ 3rdparty/zint-2.4.4/backend/maxicode.h | 90 + 3rdparty/zint-2.4.4/backend/maxipng.h | 138 + 3rdparty/zint-2.4.4/backend/medical.c | 308 + 3rdparty/zint-2.4.4/backend/ms_stdint.h | 234 + 3rdparty/zint-2.4.4/backend/pdf417.c | 1069 +++ 3rdparty/zint-2.4.4/backend/pdf417.h | 438 + 3rdparty/zint-2.4.4/backend/plessey.c | 498 ++ 3rdparty/zint-2.4.4/backend/png.c | 1146 +++ 3rdparty/zint-2.4.4/backend/postal.c | 594 ++ 3rdparty/zint-2.4.4/backend/ps.c | 761 ++ 3rdparty/zint-2.4.4/backend/qr.c | 2237 +++++ 3rdparty/zint-2.4.4/backend/qr.h | 156 + 3rdparty/zint-2.4.4/backend/reedsol.c | 161 + 3rdparty/zint-2.4.4/backend/reedsol.h | 40 + 3rdparty/zint-2.4.4/backend/render.c | 798 ++ 3rdparty/zint-2.4.4/backend/rss.c | 2264 +++++ 3rdparty/zint-2.4.4/backend/rss.h | 225 + 3rdparty/zint-2.4.4/backend/sjis.h | 6875 +++++++++++++++ 3rdparty/zint-2.4.4/backend/svg.c | 614 ++ 3rdparty/zint-2.4.4/backend/telepen.c | 157 + 3rdparty/zint-2.4.4/backend/upcean.c | 796 ++ 3rdparty/zint-2.4.4/backend/zint.h | 238 + 3rdparty/zint-2.4.4/backend_qt4/Zint.pro | 131 + 3rdparty/zint-2.4.4/backend_qt4/qzint.cpp | 692 ++ 3rdparty/zint-2.4.4/backend_qt4/qzint.h | 126 + .../zint-2.4.4/backend_qt4/qzint_global.h | 12 + demo/r1/r1.pro | 6 +- limereport.pro | 67 +- 58 files changed, 45157 insertions(+), 29 deletions(-) create mode 100644 3rdparty/3rdparty.pro create mode 100644 3rdparty/zint-2.4.4/backend/2of5.c create mode 100644 3rdparty/zint-2.4.4/backend/auspost.c create mode 100644 3rdparty/zint-2.4.4/backend/aztec.c create mode 100644 3rdparty/zint-2.4.4/backend/aztec.h create mode 100644 3rdparty/zint-2.4.4/backend/code.c create mode 100644 3rdparty/zint-2.4.4/backend/code1.c create mode 100644 3rdparty/zint-2.4.4/backend/code1.h create mode 100644 3rdparty/zint-2.4.4/backend/code128.c create mode 100644 3rdparty/zint-2.4.4/backend/code16k.c create mode 100644 3rdparty/zint-2.4.4/backend/code49.c create mode 100644 3rdparty/zint-2.4.4/backend/code49.h create mode 100644 3rdparty/zint-2.4.4/backend/common.c create mode 100644 3rdparty/zint-2.4.4/backend/common.h create mode 100644 3rdparty/zint-2.4.4/backend/composite.c create mode 100644 3rdparty/zint-2.4.4/backend/composite.h create mode 100644 3rdparty/zint-2.4.4/backend/dllversion.c create mode 100644 3rdparty/zint-2.4.4/backend/dmatrix.c create mode 100644 3rdparty/zint-2.4.4/backend/dmatrix.h create mode 100644 3rdparty/zint-2.4.4/backend/font.h create mode 100644 3rdparty/zint-2.4.4/backend/gb2312.h create mode 100644 3rdparty/zint-2.4.4/backend/gridmtx.c create mode 100644 3rdparty/zint-2.4.4/backend/gridmtx.h create mode 100644 3rdparty/zint-2.4.4/backend/gs1.c create mode 100644 3rdparty/zint-2.4.4/backend/gs1.h create mode 100644 3rdparty/zint-2.4.4/backend/imail.c create mode 100644 3rdparty/zint-2.4.4/backend/large.c create mode 100644 3rdparty/zint-2.4.4/backend/large.h create mode 100644 3rdparty/zint-2.4.4/backend/library.c create mode 100644 3rdparty/zint-2.4.4/backend/maxicode.c create mode 100644 3rdparty/zint-2.4.4/backend/maxicode.h create mode 100644 3rdparty/zint-2.4.4/backend/maxipng.h create mode 100644 3rdparty/zint-2.4.4/backend/medical.c create mode 100644 3rdparty/zint-2.4.4/backend/ms_stdint.h create mode 100644 3rdparty/zint-2.4.4/backend/pdf417.c create mode 100644 3rdparty/zint-2.4.4/backend/pdf417.h create mode 100644 3rdparty/zint-2.4.4/backend/plessey.c create mode 100644 3rdparty/zint-2.4.4/backend/png.c create mode 100644 3rdparty/zint-2.4.4/backend/postal.c create mode 100644 3rdparty/zint-2.4.4/backend/ps.c create mode 100644 3rdparty/zint-2.4.4/backend/qr.c create mode 100644 3rdparty/zint-2.4.4/backend/qr.h create mode 100644 3rdparty/zint-2.4.4/backend/reedsol.c create mode 100644 3rdparty/zint-2.4.4/backend/reedsol.h create mode 100644 3rdparty/zint-2.4.4/backend/render.c create mode 100644 3rdparty/zint-2.4.4/backend/rss.c create mode 100644 3rdparty/zint-2.4.4/backend/rss.h create mode 100644 3rdparty/zint-2.4.4/backend/sjis.h create mode 100644 3rdparty/zint-2.4.4/backend/svg.c create mode 100644 3rdparty/zint-2.4.4/backend/telepen.c create mode 100644 3rdparty/zint-2.4.4/backend/upcean.c create mode 100644 3rdparty/zint-2.4.4/backend/zint.h create mode 100644 3rdparty/zint-2.4.4/backend_qt4/Zint.pro create mode 100644 3rdparty/zint-2.4.4/backend_qt4/qzint.cpp create mode 100644 3rdparty/zint-2.4.4/backend_qt4/qzint.h create mode 100644 3rdparty/zint-2.4.4/backend_qt4/qzint_global.h diff --git a/3rdparty/3rdparty.pro b/3rdparty/3rdparty.pro new file mode 100644 index 0000000..55b39b9 --- /dev/null +++ b/3rdparty/3rdparty.pro @@ -0,0 +1,10 @@ +#QMAKE_CFLAGS += -std=c99 +ZINT_PATH = $$PWD/zint-2.4.4/ +ZINT_VERSION = 2.4.4 +#include(qzint.pri) +#win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../zint-2.4.3/build-backend_dll-Desktop_Qt_5_5_0_MSVC2010_32bit-Release/release/ -lQtZint22 +#else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../zint-2.4.3/build-backend_dll-Desktop_Qt_5_5_0_MSVC2010_32bit-Release/debug/ -lQtZint22 +INCLUDEPATH += $${ZINT_PATH}/backend $${ZINT_PATH}/backend_qt4 +DEPENDPATH += $${ZINT_PATH}/backend $${ZINT_PATH}/backend_qt4 +include($${ZINT_PATH}/backend_qt4/Zint.pro) + diff --git a/3rdparty/zint-2.4.4/backend/2of5.c b/3rdparty/zint-2.4.4/backend/2of5.c new file mode 100644 index 0000000..aea79ad --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/2of5.c @@ -0,0 +1,357 @@ +/* 2of5.c - Handles Code 2 of 5 barcodes */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include "common.h" +#ifdef _MSC_VER +#include +#endif + +static char *C25MatrixTable[10] = {"113311", "311131", "131131", "331111", "113131", "313111", + "133111", "111331", "311311", "131311"}; + +static char *C25IndustTable[10] = {"1111313111", "3111111131", "1131111131", "3131111111", "1111311131", + "3111311111", "1131311111", "1111113131", "3111113111", "1131113111"}; + +static char *C25InterTable[10] = {"11331", "31113", "13113", "33111", "11313", "31311", "13311", "11133", + "31131", "13131"}; + +static char check_digit(unsigned int count) +{ + return itoc((10 - (count % 10)) % 10); +} + +int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Code 2 of 5 Standard (Code 2 of 5 Matrix) */ + + int i, error_number; + char dest[512]; /* 6 + 80 * 6 + 6 + 1 ~ 512*/ + + error_number = 0; + + if(length > 80) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* start character */ + strcpy(dest, "411111"); + + for(i = 0; i < length; i++) { + lookup(NEON, C25MatrixTable, source[i], dest); + } + + /* Stop character */ + concat (dest, "41111"); + + expand(symbol, dest); + ustrcpy(symbol->text, source); + return error_number; +} + +int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Code 2 of 5 Industrial */ + + int i, error_number; + char dest[512]; /* 6 + 40 * 10 + 6 + 1 */ + + error_number = 0; + + if(length > 45) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid character in data"); + return error_number; + } + + /* start character */ + strcpy(dest, "313111"); + + for(i = 0; i < length; i++) { + lookup(NEON, C25IndustTable, source[i], dest); + } + + /* Stop character */ + concat (dest, "31113"); + + expand(symbol, dest); + ustrcpy(symbol->text, source); + return error_number; +} + +int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Code 2 of 5 IATA */ + int i, error_number; + char dest[512]; /* 4 + 45 * 10 + 3 + 1 */ + + error_number = 0; + + if(length > 45) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* start */ + strcpy(dest, "1111"); + + for(i = 0; i < length; i++) { + lookup(NEON, C25IndustTable, source[i], dest); + } + + /* stop */ + concat (dest, "311"); + + expand(symbol, dest); + ustrcpy(symbol->text, source); + return error_number; +} + +int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Code 2 of 5 Data Logic */ + + int i, error_number; + char dest[512]; /* 4 + 80 * 6 + 3 + 1 */ + + error_number = 0; + + if(length > 80) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* start character */ + strcpy(dest, "1111"); + + for(i = 0; i < length; i++) { + lookup(NEON, C25MatrixTable, source[i], dest); + } + + /* Stop character */ + concat (dest, "311"); + + expand(symbol, dest); + ustrcpy(symbol->text, source); + return error_number; +} + +int interleaved_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Code 2 of 5 Interleaved */ + + int i, j, k, error_number; + char bars[7], spaces[7], mixed[14], dest[1000]; +#ifndef _MSC_VER + unsigned char temp[length + 2]; +#else + unsigned char* temp = (unsigned char *)_alloca((length + 2) * sizeof(unsigned char)); +#endif + + error_number = 0; + + if(length > 89) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if (error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + ustrcpy(temp, (unsigned char *) ""); + /* Input must be an even number of characters for Interlaced 2 of 5 to work: + if an odd number of characters has been entered then add a leading zero */ + if (length & 1) + { + ustrcpy(temp, (unsigned char *) "0"); + length++; + } + uconcat(temp, source); + + /* start character */ + strcpy(dest, "1111"); + + for(i = 0; i < length; i+=2 ) + { + /* look up the bars and the spaces and put them in two strings */ + strcpy(bars, ""); + lookup(NEON, C25InterTable, temp[i], bars); + strcpy(spaces, ""); + lookup(NEON, C25InterTable, temp[i + 1], spaces); + + /* then merge (interlace) the strings together */ + k = 0; + for(j = 0; j <= 4; j++) + { + mixed[k] = bars[j]; k++; + mixed[k] = spaces[j]; k++; + } + mixed[k] = '\0'; + concat (dest, mixed); + } + + /* Stop character */ + concat (dest, "311"); + + expand(symbol, dest); + ustrcpy(symbol->text, temp); + return error_number; + +} + +int itf14(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int i, error_number, zeroes; + unsigned int count; + char localstr[16]; + + error_number = 0; + + count = 0; + + if(length > 13) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid character in data"); + return error_number; + } + + /* Add leading zeros as required */ + zeroes = 13 - length; + for(i = 0; i < zeroes; i++) { + localstr[i] = '0'; + } + strcpy(localstr + zeroes, (char *)source); + + /* Calculate the check digit - the same method used for EAN-13 */ + + for (i = 12; i >= 0; i--) { + count += ctoi(localstr[i]); + + if (!(i & 1)) { + count += 2 * ctoi(localstr[i]); + } + } + localstr[13] = check_digit(count); + localstr[14] = '\0'; + error_number = interleaved_two_of_five(symbol, (unsigned char *)localstr, strlen(localstr)); + ustrcpy(symbol->text, (unsigned char*)localstr); + return error_number; +} + +int dpleit(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Deutshe Post Leitcode */ + int i, error_number; + unsigned int count; + char localstr[16]; + int zeroes; + + error_number = 0; + count = 0; + if(length > 13) { + strcpy(symbol->errtxt, "Input wrong length"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + zeroes = 13 - length; + for(i = 0; i < zeroes; i++) + localstr[i] = '0'; + strcpy(localstr + zeroes, (char *)source); + + for (i = 12; i >= 0; i--) + { + count += 4 * ctoi(localstr[i]); + + if (i & 1) { + count += 5 * ctoi(localstr[i]); + } + } + localstr[13] = check_digit(count); + localstr[14] = '\0'; + error_number = interleaved_two_of_five(symbol, (unsigned char *)localstr, strlen(localstr)); + ustrcpy(symbol->text, (unsigned char*)localstr); + return error_number; +} + +int dpident(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Deutsche Post Identcode */ + int i, error_number, zeroes; + unsigned int count; + char localstr[16]; + + count = 0; + if(length > 11) { + strcpy(symbol->errtxt, "Input wrong length"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + zeroes = 11 - length; + for(i = 0; i < zeroes; i++) + localstr[i] = '0'; + strcpy(localstr + zeroes, (char *)source); + + for (i = 10; i >= 0; i--) + { + count += 4 * ctoi(localstr[i]); + + if (i & 1) { + count += 5 * ctoi(localstr[i]); + } + } + localstr[11] = check_digit(count); + localstr[12] = '\0'; + error_number = interleaved_two_of_five(symbol, (unsigned char *)localstr, strlen(localstr)); + ustrcpy(symbol->text, (unsigned char*)localstr); + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/auspost.c b/3rdparty/zint-2.4.4/backend/auspost.c new file mode 100644 index 0000000..0278109 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/auspost.c @@ -0,0 +1,246 @@ +/* auspost.c - Handles Australia Post 4-State Barcode */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define GDSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz #" + +static char *AusNTable[10] = {"00", "01", "02", "10", "11", "12", "20", "21", "22", "30"}; + +static char *AusCTable[64] = {"222", "300", "301", "302", "310", "311", "312", "320", "321", "322", + "000", "001", "002", "010", "011", "012", "020", "021", "022", "100", "101", "102", "110", + "111", "112", "120", "121", "122", "200", "201", "202", "210", "211", "212", "220", "221", + "023", "030", "031", "032", "033", "103", "113", "123", "130", "131", "132", "133", "203", + "213", "223", "230", "231", "232", "233", "303", "313", "323", "330", "331", "332", "333", + "003", "013"}; + +static char *AusBarTable[64] = {"000", "001", "002", "003", "010", "011", "012", "013", "020", "021", + "022", "023", "030", "031", "032", "033", "100", "101", "102", "103", "110", "111", "112", + "113", "120", "121", "122", "123", "130", "131", "132", "133", "200", "201", "202", "203", + "210", "211", "212", "213", "220", "221", "222", "223", "230", "231", "232", "233", "300", + "301", "302", "303", "310", "311", "312", "313", "320", "321", "322", "323", "330", "331", + "332", "333"}; + +#include +#include +#include +#include "common.h" +#include "reedsol.h" + +static char convert_pattern(char data, int shift) +{ + return (data - '0') << shift; +} + +void rs_error(char data_pattern[]) +{ + /* Adds Reed-Solomon error correction to auspost */ + + int reader, triple_writer = 0; + char triple[31], inv_triple[31]; + unsigned char result[5]; + + for(reader = 2; reader < (int)strlen(data_pattern); reader += 3, triple_writer++) + { + triple[triple_writer] = convert_pattern(data_pattern[reader], 4) + + convert_pattern(data_pattern[reader + 1], 2) + + convert_pattern(data_pattern[reader + 2], 0); + } + + for(reader = 0; reader < triple_writer; reader++) + { + inv_triple[reader] = triple[(triple_writer - 1) - reader]; + } + + rs_init_gf(0x43); + rs_init_code(4, 1); + rs_encode(triple_writer, (unsigned char*) inv_triple, result); + + for(reader = 4; reader > 0; reader--) + { + concat(data_pattern, AusBarTable[(int)result[reader - 1]]); + } + rs_free(); +} + +int australia_post(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* Handles Australia Posts's 4 State Codes */ + /* Customer Standard Barcode, Barcode 2 or Barcode 3 system determined automatically + (i.e. the FCC doesn't need to be specified by the user) dependent + on the length of the input string */ + + /* The contents of data_pattern conform to the following standard: + 0 = Tracker, Ascender and Descender + 1 = Tracker and Ascender + 2 = Tracker and Descender + 3 = Tracker only */ + int error_number, zeroes; + int writer; + unsigned int loopey, reader, h; + + char data_pattern[200]; + char fcc[3], dpid[10]; + char localstr[30]; + + error_number = 0; + strcpy(localstr, ""); + + /* Do all of the length checking first to avoid stack smashing */ + if(symbol->symbology == BARCODE_AUSPOST) { + /* Format control code (FCC) */ + switch(length) + { + case 8: + strcpy(fcc, "11"); + break; + case 13: + strcpy(fcc, "59"); + break; + case 16: + strcpy(fcc, "59"); + error_number = is_sane(NEON, source, length); + break; + case 18: + strcpy(fcc, "62"); + break; + case 23: + strcpy(fcc, "62"); + error_number = is_sane(NEON, source, length); + break; + default: + strcpy(symbol->errtxt, "Auspost input is wrong length"); + return ERROR_TOO_LONG; + break; + } + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + } else { + if(length > 8) { + strcpy(symbol->errtxt, "Auspost input is too long"); + return ERROR_TOO_LONG; + } + switch(symbol->symbology) { + case BARCODE_AUSREPLY: strcpy(fcc, "45"); break; + case BARCODE_AUSROUTE: strcpy(fcc, "87"); break; + case BARCODE_AUSREDIRECT: strcpy(fcc, "92"); break; + } + + /* Add leading zeros as required */ + zeroes = 8 - length; + memset(localstr, '0', zeroes); + localstr[8] = '\0'; + } + + concat(localstr, (char*)source); + h = strlen(localstr); + error_number = is_sane(GDSET, (unsigned char *)localstr, h); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* Verifiy that the first 8 characters are numbers */ + memcpy(dpid, localstr, 8); + dpid[8] = '\0'; + error_number = is_sane(NEON, (unsigned char *)dpid, strlen(dpid)); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in DPID"); + return error_number; + } + + /* Start character */ + strcpy(data_pattern, "13"); + + /* Encode the FCC */ + for(reader = 0; reader < 2; reader++) + { + lookup(NEON, AusNTable, fcc[reader], data_pattern); + } + + /* printf("AUSPOST FCC: %s ", fcc); */ + + /* Delivery Point Identifier (DPID) */ + for(reader = 0; reader < 8; reader++) + { + lookup(NEON, AusNTable, dpid[reader], data_pattern); + } + + /* Customer Information */ + if(h > 8) + { + if((h == 13) || (h == 18)) { + for(reader = 8; reader < h; reader++) { + lookup(GDSET, AusCTable, localstr[reader], data_pattern); + } + } + else if((h == 16) || (h == 23)) { + for(reader = 8; reader < h; reader++) { + lookup(NEON, AusNTable, localstr[reader], data_pattern); + } + } + } + + /* Filler bar */ + h = strlen(data_pattern); + if(h == 22) { + concat(data_pattern, "3"); + } + else if(h == 37) { + concat(data_pattern, "3"); + } + else if(h == 52) { + concat(data_pattern, "3"); + } + + /* Reed Solomon error correction */ + rs_error(data_pattern); + + /* Stop character */ + concat(data_pattern, "13"); + + /* Turn the symbol into a bar pattern ready for plotting */ + writer = 0; + h = strlen(data_pattern); + for(loopey = 0; loopey < h; loopey++) + { + if((data_pattern[loopey] == '1') || (data_pattern[loopey] == '0')) + { + set_module(symbol, 0, writer); + } + set_module(symbol, 1, writer); + if((data_pattern[loopey] == '2') || (data_pattern[loopey] == '0')) + { + set_module(symbol, 2, writer); + } + writer += 2; + } + + symbol->row_height[0] = 3; + symbol->row_height[1] = 2; + symbol->row_height[2] = 3; + + symbol->rows = 3; + symbol->width = writer - 1; + + return error_number; +} + diff --git a/3rdparty/zint-2.4.4/backend/aztec.c b/3rdparty/zint-2.4.4/backend/aztec.c new file mode 100644 index 0000000..6675ee4 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/aztec.c @@ -0,0 +1,1350 @@ +/* aztec.c - Handles Aztec 2D Symbols */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" +#include "aztec.h" +#include "reedsol.h" + +void mapshorten(int *charmap, int *typemap, int start, int length) +{ /* Shorten the string by one character */ + + memmove(charmap + start + 1 , charmap + start + 2, (length - 1) * sizeof(int)); + memmove(typemap + start + 1 , typemap + start + 2, (length - 1) * sizeof(int)); +} + +void insert(char binary_string[], int posn, char newbit) +{ /* Insert a character into the middle of a string at position posn */ + int i, end; + + end = strlen(binary_string); + for(i = end; i > posn; i--) { + binary_string[i] = binary_string[i - 1]; + } + binary_string[posn] = newbit; +} + +int aztec_text_process(unsigned char source[], const unsigned int src_len, char binary_string[], int gs1) +{ /* Encode input data into a binary string */ + int i, j, k, bytes; + int curtable, newtable, lasttable, chartype, maplength, blocks, debug; +#ifndef _MSC_VER + int charmap[src_len * 2], typemap[src_len * 2]; + int blockmap[2][src_len]; +#else + int* charmap = (int*)_alloca(src_len * 2 * sizeof(int)); + int* typemap = (int*)_alloca(src_len * 2 * sizeof(int)); + int* blockmap[2]; + blockmap[0] = (int*)_alloca(src_len * sizeof(int)); + blockmap[1] = (int*)_alloca(src_len * sizeof(int)); +#endif + /* Lookup input string in encoding table */ + maplength = 0; + debug = 0; + + for(i = 0; i < (int)src_len; i++) { + if(gs1 && (i == 0)) { + /* Add FNC1 to beginning of GS1 messages */ + charmap[maplength] = 0; + typemap[maplength++] = PUNC; + charmap[maplength] = 400; + typemap[maplength++] = PUNC; + } + if((gs1) && (source[i] == '[')) { + /* FNC1 represented by FLG(0) */ + charmap[maplength] = 0; + typemap[maplength++] = PUNC; + charmap[maplength] = 400; + typemap[maplength++] = PUNC; + } else { + if(source[i] > 127) { + charmap[maplength] = source[i]; + typemap[maplength++] = BINARY; + } else { + charmap[maplength] = AztecSymbolChar[source[i]]; + typemap[maplength++] = AztecCodeSet[source[i]]; + } + } + } + + /* Look for double character encoding possibilities */ + i = 0; + do{ + if(((charmap[i] == 300) && (charmap[i + 1] == 11)) && ((typemap[i] == PUNC) && (typemap[i + 1] == PUNC))) { + /* CR LF combination */ + charmap[i] = 2; + typemap[i] = PUNC; + mapshorten(charmap, typemap, i, maplength); + maplength--; + } + + if(((charmap[i] == 302) && (charmap[i + 1] == 1)) && ((typemap[i] == 24) && (typemap[i + 1] == 23))) { + /* . SP combination */ + charmap[i] = 3; + typemap[i] = PUNC; + mapshorten(charmap, typemap, i, maplength); + maplength--; + } + + if(((charmap[i] == 301) && (charmap[i + 1] == 1)) && ((typemap[i] == 24) && (typemap[i + 1] == 23))) { + /* , SP combination */ + charmap[i] = 4; + typemap[i] = PUNC; + mapshorten(charmap, typemap, i, maplength); + maplength--; + } + + if(((charmap[i] == 21) && (charmap[i + 1] == 1)) && ((typemap[i] == PUNC) && (typemap[i + 1] == 23))) { + /* : SP combination */ + charmap[i] = 5; + typemap[i] = PUNC; + mapshorten(charmap, typemap, i, maplength); + maplength--; + } + + i++; + }while(i < (maplength - 1)); + + /* look for blocks of characters which use the same table */ + blocks = 1; + blockmap[0][0] = typemap[0]; + blockmap[1][0] = 1; + for(i = 1; i < maplength; i++) { + if(typemap[i] == typemap[i - 1]) { + blockmap[1][blocks - 1]++; + } else { + blocks++; + blockmap[0][blocks - 1] = typemap[i]; + blockmap[1][blocks - 1] = 1; + } + } + + if(blockmap[0][0] & 1) { blockmap[0][0] = 1; } + if(blockmap[0][0] & 2) { blockmap[0][0] = 2; } + if(blockmap[0][0] & 4) { blockmap[0][0] = 4; } + if(blockmap[0][0] & 8) { blockmap[0][0] = 8; } + + if(blocks > 1) { + + /* look for adjacent blocks which can use the same table (left to right search) */ + for(i = 1; i < blocks; i++) { + if(blockmap[0][i] & blockmap[0][i - 1]) { + blockmap[0][i] = (blockmap[0][i] & blockmap[0][i - 1]); + } + } + + if(blockmap[0][blocks - 1] & 1) { blockmap[0][blocks - 1] = 1; } + if(blockmap[0][blocks - 1] & 2) { blockmap[0][blocks - 1] = 2; } + if(blockmap[0][blocks - 1] & 4) { blockmap[0][blocks - 1] = 4; } + if(blockmap[0][blocks - 1] & 8) { blockmap[0][blocks - 1] = 8; } + + /* look for adjacent blocks which can use the same table (right to left search) */ + for(i = blocks - 1; i > 0; i--) { + if(blockmap[0][i] & blockmap[0][i + 1]) { + blockmap[0][i] = (blockmap[0][i] & blockmap[0][i + 1]); + } + } + + /* determine the encoding table for characters which do not fit with adjacent blocks */ + for(i = 1; i < blocks; i++) { + if(blockmap[0][i] & 8) { blockmap[0][i] = 8; } + if(blockmap[0][i] & 4) { blockmap[0][i] = 4; } + if(blockmap[0][i] & 2) { blockmap[0][i] = 2; } + if(blockmap[0][i] & 1) { blockmap[0][i] = 1; } + } + + /* Combine blocks of the same type */ + i = 0; + do{ + if(blockmap[0][i] == blockmap[0][i + 1]) { + blockmap[1][i] += blockmap[1][i + 1]; + for(j = i + 1; j < blocks; j++) { + blockmap[0][j] = blockmap[0][j + 1]; + blockmap[1][j] = blockmap[1][j + 1]; + } + blocks--; + } else { + i++; + } + } while (i < blocks); + } + + /* Put the adjusted block data back into typemap */ + j = 0; + for(i = 0; i < blocks; i++) { + if((blockmap[1][i] < 3) && (blockmap[0][i] != 32)) { /* Shift character(s) needed */ + for(k = 0; k < blockmap[1][i]; k++) { + typemap[j + k] = blockmap[0][i] + 64; + } + } else { /* Latch character (or byte mode) needed */ + for(k = 0; k < blockmap[1][i]; k++) { + typemap[j + k] = blockmap[0][i]; + } + } + j += blockmap[1][i]; + } + + /* Don't shift an initial capital letter */ + if(typemap[0] == 65) { typemap[0] = 1; }; + + /* Problem characters (those that appear in different tables with different values) can now be resolved into their tables */ + for(i = 0; i < maplength; i++) { + if((charmap[i] >= 300) && (charmap[i] < 400)) { + curtable = typemap[i]; + if(curtable > 64) { + curtable -= 64; + } + switch(charmap[i]) { + case 300: /* Carriage Return */ + switch(curtable) { + case PUNC: charmap[i] = 1; break; + case MIXED: charmap[i] = 14; break; + } + break; + case 301: /* Comma */ + switch(curtable) { + case PUNC: charmap[i] = 17; break; + case DIGIT: charmap[i] = 12; break; + } + break; + case 302: /* Full Stop */ + switch(curtable) { + case PUNC: charmap[i] = 19; break; + case DIGIT: charmap[i] = 13; break; + } + break; + } + } + } + *binary_string = '\0'; + + curtable = UPPER; /* start with UPPER table */ + lasttable = UPPER; + for(i = 0; i < maplength; i++) { + newtable = curtable; + if((typemap[i] != curtable) && (charmap[i] < 400)) { + /* Change table */ + if(curtable == BINARY) { + /* If ending binary mode the current table is the same as when entering binary mode */ + curtable = lasttable; + newtable = lasttable; + } + if(typemap[i] > 64) { + /* Shift character */ + switch(typemap[i]) { + case (64 + UPPER): /* To UPPER */ + switch(curtable) { + case LOWER: /* US */ + concat(binary_string, hexbit[28]); + if(debug) printf("US "); + break; + case MIXED: /* UL */ + concat(binary_string, hexbit[29]); + if(debug) printf("UL "); + newtable = UPPER; + break; + case PUNC: /* UL */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + newtable = UPPER; + break; + case DIGIT: /* US */ + concat(binary_string, pentbit[15]); + if(debug) printf("US "); + break; + } + break; + case (64 + LOWER): /* To LOWER */ + switch(curtable) { + case UPPER: /* LL */ + concat(binary_string, hexbit[28]); + if(debug) printf("LL "); + newtable = LOWER; + break; + case MIXED: /* LL */ + concat(binary_string, hexbit[28]); + if(debug) printf("LL "); + newtable = LOWER; + break; + case PUNC: /* UL LL */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + concat(binary_string, hexbit[28]); + if(debug) printf("LL "); + newtable = LOWER; + break; + case DIGIT: /* UL LL */ + concat(binary_string, pentbit[14]); + if(debug) printf("UL "); + concat(binary_string, hexbit[28]); + if(debug) printf("LL "); + newtable = LOWER; + break; + } + break; + case (64 + MIXED): /* To MIXED */ + switch(curtable) { + case UPPER: /* ML */ + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + newtable = MIXED; + break; + case LOWER: /* ML */ + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + newtable = MIXED; + break; + case PUNC: /* UL ML */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + newtable = MIXED; + break; + case DIGIT: /* UL ML */ + concat(binary_string, pentbit[14]); + if(debug) printf("UL "); + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + newtable = MIXED; + break; + } + break; + case (64 + PUNC): /* To PUNC */ + switch(curtable) { + case UPPER: /* PS */ + concat(binary_string, hexbit[0]); + if(debug) printf("PS "); + break; + case LOWER: /* PS */ + concat(binary_string, hexbit[0]); + if(debug) printf("PS "); + break; + case MIXED: /* PS */ + concat(binary_string, hexbit[0]); + if(debug) printf("PS "); + break; + case DIGIT: /* PS */ + concat(binary_string, pentbit[0]); + if(debug) printf("PS "); + break; + } + break; + case (64 + DIGIT): /* To DIGIT */ + switch(curtable) { + case UPPER: /* DL */ + concat(binary_string, hexbit[30]); + if(debug) printf("DL "); + newtable = DIGIT; + break; + case LOWER: /* DL */ + concat(binary_string, hexbit[30]); + if(debug) printf("DL "); + newtable = DIGIT; + break; + case MIXED: /* UL DL */ + concat(binary_string, hexbit[29]); + if(debug) printf("UL "); + concat(binary_string, hexbit[30]); + if(debug) printf("DL "); + newtable = DIGIT; + break; + case PUNC: /* UL DL */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + concat(binary_string, hexbit[30]); + if(debug) printf("DL "); + newtable = DIGIT; + break; + } + break; + } + } else { + /* Latch character */ + switch(typemap[i]) { + case UPPER: /* To UPPER */ + switch(curtable) { + case LOWER: /* ML UL */ + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + concat(binary_string, hexbit[29]); + if(debug) printf("UL "); + newtable = UPPER; + break; + case MIXED: /* UL */ + concat(binary_string, hexbit[29]); + if(debug) printf("UL "); + newtable = UPPER; + break; + case PUNC: /* UL */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + newtable = UPPER; + break; + case DIGIT: /* UL */ + concat(binary_string, pentbit[14]); + if(debug) printf("UL "); + newtable = UPPER; + break; + } + break; + case LOWER: /* To LOWER */ + switch(curtable) { + case UPPER: /* LL */ + concat(binary_string, hexbit[28]); + if(debug) printf("LL "); + newtable = LOWER; + break; + case MIXED: /* LL */ + concat(binary_string, hexbit[28]); + if(debug) printf("LL "); + newtable = LOWER; + break; + case PUNC: /* UL LL */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + concat(binary_string, hexbit[28]); + if(debug) printf("LL "); + newtable = LOWER; + break; + case DIGIT: /* UL LL */ + concat(binary_string, pentbit[14]); + if(debug) printf("UL "); + concat(binary_string, hexbit[28]); + if(debug) printf("LL "); + newtable = LOWER; + break; + } + break; + case MIXED: /* To MIXED */ + switch(curtable) { + case UPPER: /* ML */ + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + newtable = MIXED; + break; + case LOWER: /* ML */ + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + newtable = MIXED; + break; + case PUNC: /* UL ML */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + newtable = MIXED; + break; + case DIGIT: /* UL ML */ + concat(binary_string, pentbit[14]); + if(debug) printf("UL "); + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + newtable = MIXED; + break; + } + break; + case PUNC: /* To PUNC */ + switch(curtable) { + case UPPER: /* ML PL */ + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + concat(binary_string, hexbit[30]); + if(debug) printf("PL "); + newtable = PUNC; + break; + case LOWER: /* ML PL */ + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + concat(binary_string, hexbit[30]); + if(debug) printf("PL "); + newtable = PUNC; + break; + case MIXED: /* PL */ + concat(binary_string, hexbit[30]); + if(debug) printf("PL "); + newtable = PUNC; + break; + case DIGIT: /* UL ML PL */ + concat(binary_string, pentbit[14]); + if(debug) printf("UL "); + concat(binary_string, hexbit[29]); + if(debug) printf("ML "); + concat(binary_string, hexbit[30]); + if(debug) printf("PL "); + newtable = PUNC; + break; + } + break; + case DIGIT: /* To DIGIT */ + switch(curtable) { + case UPPER: /* DL */ + concat(binary_string, hexbit[30]); + if(debug) printf("DL "); + newtable = DIGIT; + break; + case LOWER: /* DL */ + concat(binary_string, hexbit[30]); + if(debug) printf("DL "); + newtable = DIGIT; + break; + case MIXED: /* UL DL */ + concat(binary_string, hexbit[29]); + if(debug) printf("UL "); + concat(binary_string, hexbit[30]); + if(debug) printf("DL "); + newtable = DIGIT; + break; + case PUNC: /* UL DL */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + concat(binary_string, hexbit[30]); + if(debug) printf("DL "); + newtable = DIGIT; + break; + } + break; + case BINARY: /* To BINARY */ + lasttable = curtable; + switch(curtable) { + case UPPER: /* BS */ + concat(binary_string, hexbit[31]); + if(debug) printf("BS "); + newtable = BINARY; + break; + case LOWER: /* BS */ + concat(binary_string, hexbit[31]); + if(debug) printf("BS "); + newtable = BINARY; + break; + case MIXED: /* BS */ + concat(binary_string, hexbit[31]); + if(debug) printf("BS "); + newtable = BINARY; + break; + case PUNC: /* UL BS */ + concat(binary_string, hexbit[31]); + if(debug) printf("UL "); + concat(binary_string, hexbit[31]); + if(debug) printf("BS "); + newtable = BINARY; + break; + case DIGIT: /* UL BS */ + concat(binary_string, pentbit[14]); + if(debug) printf("UL "); + concat(binary_string, hexbit[31]); + if(debug) printf("BS "); + newtable = BINARY; + break; + } + + bytes = 0; + do{ + bytes++; + }while(typemap[i + (bytes - 1)] == BINARY); + bytes--; + + if(bytes > 2079) { + return ERROR_TOO_LONG; + } + + if(bytes > 31) { /* Put 00000 followed by 11-bit number of bytes less 31 */ + int adjusted; + + adjusted = bytes - 31; + concat(binary_string, "00000"); + if(adjusted & 0x400) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x200) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x100) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x80) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x40) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x20) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x10) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x08) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x04) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x02) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(adjusted & 0x01) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + } else { /* Put 5-bit number of bytes */ + if(bytes & 0x10) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(bytes & 0x08) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(bytes & 0x04) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(bytes & 0x02) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(bytes & 0x01) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + } + if(debug) printf("(%d bytes) ", bytes); + + break; + } + } + } + /* Add data to the binary string */ + curtable = newtable; + chartype = typemap[i]; + if(chartype > 64) { chartype -= 64; } + switch(chartype) { + case UPPER: + case LOWER: + case MIXED: + case PUNC: + if(charmap[i] >= 400) { + concat(binary_string, tribit[charmap[i] - 400]); + if(debug) printf("FLG(%d) ",charmap[i] - 400); + } else { + concat(binary_string, hexbit[charmap[i]]); + if(!((chartype == PUNC) && (charmap[i] == 0))) + if(debug) printf("%d ",charmap[i]); + } + break; + case DIGIT: + concat(binary_string, pentbit[charmap[i]]); + if(debug) printf("%d ",charmap[i]); + break; + case BINARY: + if(charmap[i] & 0x80) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(charmap[i] & 0x40) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(charmap[i] & 0x20) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(charmap[i] & 0x10) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(charmap[i] & 0x08) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(charmap[i] & 0x04) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(charmap[i] & 0x02) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(charmap[i] & 0x01) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(debug) printf("%d ",charmap[i]); + break; + } + + } + + if(debug) printf("\n"); + + if(strlen(binary_string) > 14970) { + return ERROR_TOO_LONG; + } + + return 0; +} + +int aztec(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int x, y, i, j, data_blocks, ecc_blocks, layers, total_bits; + char binary_string[20000], bit_pattern[20045], descriptor[42]; + char adjusted_string[20000]; + unsigned char desc_data[4], desc_ecc[6]; + int err_code, ecc_level, compact, data_length, data_maxsize, codeword_size, adjusted_length; + int remainder, padbits, count, gs1, adjustment_size; + int debug = 0, reader = 0; + int comp_loop = 4; + +#ifndef _MSC_VER + unsigned char local_source[length + 1]; +#else + unsigned char* local_source = (unsigned char*)_alloca(length + 1); +#endif + + memset(binary_string,0,20000); + memset(adjusted_string,0,20000); + + if(symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; } + if(symbol->output_options & READER_INIT) { reader = 1; comp_loop = 1; } + if((gs1 == 1) && (reader == 1)) { + strcpy(symbol->errtxt, "Cannot encode in GS1 and Reader Initialisation mode at the same time"); + return ERROR_INVALID_OPTION; + } + + switch(symbol->input_mode) { + case DATA_MODE: + case GS1_MODE: + memcpy(local_source, source, length); + local_source[length] = '\0'; + break; + case UNICODE_MODE: + err_code = latin1_process(symbol, source, local_source, &length); + if(err_code != 0) { return err_code; } + break; + } + + /* Aztec code can't handle NULL characters */ + for(i = 0; i < length; i++) { + if(local_source[i] == '\0') { + strcpy(symbol->errtxt, "Invalid character (NULL) in input data"); + return ERROR_INVALID_DATA1; + } + } + + err_code = aztec_text_process(local_source, length, binary_string, gs1); + + + if(err_code != 0) { + strcpy(symbol->errtxt, "Input too long or too many extended ASCII characters"); + return err_code; + } + + if(!((symbol->option_1 >= -1) && (symbol->option_1 <= 4))) { + strcpy(symbol->errtxt, "Invalid error correction level - using default instead"); + err_code = WARN_INVALID_OPTION; + symbol->option_1 = -1; + } + + ecc_level = symbol->option_1; + + if((ecc_level == -1) || (ecc_level == 0)) { + ecc_level = 2; + } + + data_length = strlen(binary_string); + + layers = 0; /* Keep compiler happy! */ + data_maxsize = 0; /* Keep compiler happy! */ + adjustment_size = 0; + if(symbol->option_2 == 0) { /* The size of the symbol can be determined by Zint */ + do { + /* Decide what size symbol to use - the smallest that fits the data */ + compact = 0; /* 1 = Aztec Compact, 0 = Normal Aztec */ + layers = 0; + + switch(ecc_level) { + /* For each level of error correction work out the smallest symbol which + the data will fit in */ + case 1: for(i = 32; i > 0; i--) { + if((data_length + adjustment_size) < Aztec10DataSizes[i - 1]) { + layers = i; + compact = 0; + data_maxsize = Aztec10DataSizes[i - 1]; + } + } + for(i = comp_loop; i > 0; i--) { + if((data_length + adjustment_size) < AztecCompact10DataSizes[i - 1]) { + layers = i; + compact = 1; + data_maxsize = AztecCompact10DataSizes[i - 1]; + } + } + break; + case 2: for(i = 32; i > 0; i--) { + if((data_length + adjustment_size) < Aztec23DataSizes[i - 1]) { + layers = i; + compact = 0; + data_maxsize = Aztec23DataSizes[i - 1]; + } + } + for(i = comp_loop; i > 0; i--) { + if((data_length + adjustment_size) < AztecCompact23DataSizes[i - 1]) { + layers = i; + compact = 1; + data_maxsize = AztecCompact23DataSizes[i - 1]; + } + } + break; + case 3: for(i = 32; i > 0; i--) { + if((data_length + adjustment_size) < Aztec36DataSizes[i - 1]) { + layers = i; + compact = 0; + data_maxsize = Aztec36DataSizes[i - 1]; + } + } + for(i = comp_loop; i > 0; i--) { + if((data_length + adjustment_size) < AztecCompact36DataSizes[i - 1]) { + layers = i; + compact = 1; + data_maxsize = AztecCompact36DataSizes[i - 1]; + } + } + break; + case 4: for(i = 32; i > 0; i--) { + if((data_length + adjustment_size) < Aztec50DataSizes[i - 1]) { + layers = i; + compact = 0; + data_maxsize = Aztec50DataSizes[i - 1]; + } + } + for(i = comp_loop; i > 0; i--) { + if((data_length + adjustment_size) < AztecCompact50DataSizes[i - 1]) { + layers = i; + compact = 1; + data_maxsize = AztecCompact50DataSizes[i - 1]; + } + } + break; + } + + if(layers == 0) { /* Couldn't find a symbol which fits the data */ + strcpy(symbol->errtxt, "Input too long (too many bits for selected ECC)"); + return ERROR_TOO_LONG; + } + + /* Determine codeword bitlength - Table 3 */ + codeword_size = 6; /* if (layers <= 2) */ + if((layers >= 3) && (layers <= 8)) { codeword_size = 8; } + if((layers >= 9) && (layers <= 22)) { codeword_size = 10; } + if(layers >= 23) { codeword_size = 12; } + + j = 0; i = 0; + do { + if((j + 1) % codeword_size == 0) { + /* Last bit of codeword */ + int t, done = 0; + count = 0; + + /* Discover how many '1's in current codeword */ + for(t = 0; t < (codeword_size - 1); t++) { + if(binary_string[(i - (codeword_size - 1)) + t] == '1') count++; + } + + if(count == (codeword_size - 1)) { + adjusted_string[j] = '0'; + j++; + done = 1; + } + + if(count == 0) { + adjusted_string[j] = '1'; + j++; + done = 1; + } + + if(done == 0) { + adjusted_string[j] = binary_string[i]; + j++; + i++; + } + } + adjusted_string[j] = binary_string[i]; + j++; + i++; + } while (i <= (data_length + 1)); + adjusted_string[j] = '\0'; + adjusted_length = strlen(adjusted_string); + adjustment_size = adjusted_length - data_length; + + /* Add padding */ + remainder = adjusted_length % codeword_size; + + padbits = codeword_size - remainder; + if(padbits == codeword_size) { padbits = 0; } + + for(i = 0; i < padbits; i++) { + concat(adjusted_string, "1"); + } + adjusted_length = strlen(adjusted_string); + + count = 0; + for(i = (adjusted_length - codeword_size); i < adjusted_length; i++) { + if(adjusted_string[i] == '1') { count++; } + } + if(count == codeword_size) { adjusted_string[adjusted_length - 1] = '0'; } + + if(debug) { + printf("Codewords:\n"); + for(i = 0; i < (adjusted_length / codeword_size); i++) { + for(j = 0; j < codeword_size; j++) { + printf("%c", adjusted_string[(i * codeword_size) + j]); + } + printf("\n"); + } + } + + } while(adjusted_length > data_maxsize); + /* This loop will only repeat on the rare occasions when the rule about not having all 1s or all 0s + means that the binary string has had to be lengthened beyond the maximum number of bits that can + be encoded in a symbol of the selected size */ + + } else { /* The size of the symbol has been specified by the user */ + if((reader == 1) && ((symbol->option_2 >= 2) && (symbol->option_2 <= 4))) { + symbol->option_2 = 5; + } + if((symbol->option_2 >= 1) && (symbol->option_2 <= 4)) { + compact = 1; + layers = symbol->option_2; + } + if((symbol->option_2 >= 5) && (symbol->option_2 <= 36)) { + compact = 0; + layers = symbol->option_2 - 4; + } + if((symbol->option_2 < 0) || (symbol->option_2 > 36)) { + strcpy(symbol->errtxt, "Invalid Aztec Code size"); + return ERROR_INVALID_OPTION; + } + + /* Determine codeword bitlength - Table 3 */ + if((layers >= 0) && (layers <= 2)) { codeword_size = 6; } + if((layers >= 3) && (layers <= 8)) { codeword_size = 8; } + if((layers >= 9) && (layers <= 22)) { codeword_size = 10; } + if(layers >= 23) { codeword_size = 12; } + + j = 0; i = 0; + do { + if((j + 1) % codeword_size == 0) { + /* Last bit of codeword */ + int t, done = 0; + count = 0; + + /* Discover how many '1's in current codeword */ + for(t = 0; t < (codeword_size - 1); t++) { + if(binary_string[(i - (codeword_size - 1)) + t] == '1') count++; + } + + if(count == (codeword_size - 1)) { + adjusted_string[j] = '0'; + j++; + done = 1; + } + + if(count == 0) { + adjusted_string[j] = '1'; + j++; + done = 1; + } + + if(done == 0) { + adjusted_string[j] = binary_string[i]; + j++; + i++; + } + } + adjusted_string[j] = binary_string[i]; + j++; + i++; + } while (i <= (data_length + 1)); + adjusted_string[j] = '\0'; + adjusted_length = strlen(adjusted_string); + + remainder = adjusted_length % codeword_size; + + padbits = codeword_size - remainder; + if(padbits == codeword_size) { padbits = 0; } + + for(i = 0; i < padbits; i++) { + concat(adjusted_string, "1"); + } + adjusted_length = strlen(adjusted_string); + + count = 0; + for(i = (adjusted_length - codeword_size); i < adjusted_length; i++) { + if(adjusted_string[i] == '1') { count++; } + } + if(count == codeword_size) { adjusted_string[adjusted_length - 1] = '0'; } + + /* Check if the data actually fits into the selected symbol size */ + if (compact) { + data_maxsize = codeword_size * (AztecCompactSizes[layers - 1] - 3); + } else { + data_maxsize = codeword_size * (AztecSizes[layers - 1] - 3); + } + + if(adjusted_length > data_maxsize) { + strcpy(symbol->errtxt, "Data too long for specified Aztec Code symbol size"); + return ERROR_TOO_LONG; + } + + if(debug) { + printf("Codewords:\n"); + for(i = 0; i < (adjusted_length / codeword_size); i++) { + for(j = 0; j < codeword_size; j++) { + printf("%c", adjusted_string[(i * codeword_size) + j]); + } + printf("\n"); + } + } + + } + + if(reader && (layers > 22)) { + strcpy(symbol->errtxt, "Data too long for reader initialisation symbol"); + return ERROR_TOO_LONG; + } + + data_blocks = adjusted_length / codeword_size; + + if(compact) { + ecc_blocks = AztecCompactSizes[layers - 1] - data_blocks; + } else { + ecc_blocks = AztecSizes[layers - 1] - data_blocks; + } + + if(debug) { + printf("Generating a "); + if(compact) { printf("compact"); } else { printf("full-size"); } + printf(" symbol with %d layers\n", layers); + printf("Requires "); + if(compact) { printf("%d", AztecCompactSizes[layers - 1]); } else { printf("%d", AztecSizes[layers - 1]); } + printf(" codewords of %d-bits\n", codeword_size); + printf(" (%d data words, %d ecc words)\n", data_blocks, ecc_blocks); + } + +#ifndef _MSC_VER + unsigned int data_part[data_blocks + 3], ecc_part[ecc_blocks + 3]; +#else + unsigned int* data_part = (unsigned int*)_alloca((data_blocks + 3) * sizeof(unsigned int)); + unsigned int* ecc_part = (unsigned int*)_alloca((ecc_blocks + 3) * sizeof(unsigned int)); +#endif + /* Copy across data into separate integers */ + memset(data_part,0,(data_blocks + 2)*sizeof(int)); + memset(ecc_part,0,(ecc_blocks + 2)*sizeof(int)); + + /* Split into codewords and calculate reed-colomon error correction codes */ + switch(codeword_size) { + case 6: + for(i = 0; i < data_blocks; i++) { + if(adjusted_string[i * codeword_size] == '1') { data_part[i] += 32; } + if(adjusted_string[(i * codeword_size) + 1] == '1') { data_part[i] += 16; } + if(adjusted_string[(i * codeword_size) + 2] == '1') { data_part[i] += 8; } + if(adjusted_string[(i * codeword_size) + 3] == '1') { data_part[i] += 4; } + if(adjusted_string[(i * codeword_size) + 4] == '1') { data_part[i] += 2; } + if(adjusted_string[(i * codeword_size) + 5] == '1') { data_part[i] += 1; } + } + rs_init_gf(0x43); + rs_init_code(ecc_blocks, 1); + rs_encode_long(data_blocks, data_part, ecc_part); + for(i = (ecc_blocks - 1); i >= 0; i--) { + if(ecc_part[i] & 0x20) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x10) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x08) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x04) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x02) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x01) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + } + rs_free(); + break; + case 8: + for(i = 0; i < data_blocks; i++) { + if(adjusted_string[i * codeword_size] == '1') { data_part[i] += 128; } + if(adjusted_string[(i * codeword_size) + 1] == '1') { data_part[i] += 64; } + if(adjusted_string[(i * codeword_size) + 2] == '1') { data_part[i] += 32; } + if(adjusted_string[(i * codeword_size) + 3] == '1') { data_part[i] += 16; } + if(adjusted_string[(i * codeword_size) + 4] == '1') { data_part[i] += 8; } + if(adjusted_string[(i * codeword_size) + 5] == '1') { data_part[i] += 4; } + if(adjusted_string[(i * codeword_size) + 6] == '1') { data_part[i] += 2; } + if(adjusted_string[(i * codeword_size) + 7] == '1') { data_part[i] += 1; } + } + rs_init_gf(0x12d); + rs_init_code(ecc_blocks, 1); + rs_encode_long(data_blocks, data_part, ecc_part); + for(i = (ecc_blocks - 1); i >= 0; i--) { + if(ecc_part[i] & 0x80) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x40) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x20) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x10) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x08) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x04) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x02) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x01) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + } + rs_free(); + break; + case 10: + for(i = 0; i < data_blocks; i++) { + if(adjusted_string[i * codeword_size] == '1') { data_part[i] += 512; } + if(adjusted_string[(i * codeword_size) + 1] == '1') { data_part[i] += 256; } + if(adjusted_string[(i * codeword_size) + 2] == '1') { data_part[i] += 128; } + if(adjusted_string[(i * codeword_size) + 3] == '1') { data_part[i] += 64; } + if(adjusted_string[(i * codeword_size) + 4] == '1') { data_part[i] += 32; } + if(adjusted_string[(i * codeword_size) + 5] == '1') { data_part[i] += 16; } + if(adjusted_string[(i * codeword_size) + 6] == '1') { data_part[i] += 8; } + if(adjusted_string[(i * codeword_size) + 7] == '1') { data_part[i] += 4; } + if(adjusted_string[(i * codeword_size) + 8] == '1') { data_part[i] += 2; } + if(adjusted_string[(i * codeword_size) + 9] == '1') { data_part[i] += 1; } + } + rs_init_gf(0x409); + rs_init_code(ecc_blocks, 1); + rs_encode_long(data_blocks, data_part, ecc_part); + for(i = (ecc_blocks - 1); i >= 0; i--) { + if(ecc_part[i] & 0x200) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x100) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x80) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x40) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x20) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x10) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x08) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x04) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x02) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x01) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + } + rs_free(); + break; + case 12: + for(i = 0; i < data_blocks; i++) { + if(adjusted_string[i * codeword_size] == '1') { data_part[i] += 2048; } + if(adjusted_string[(i * codeword_size) + 1] == '1') { data_part[i] += 1024; } + if(adjusted_string[(i * codeword_size) + 2] == '1') { data_part[i] += 512; } + if(adjusted_string[(i * codeword_size) + 3] == '1') { data_part[i] += 256; } + if(adjusted_string[(i * codeword_size) + 4] == '1') { data_part[i] += 128; } + if(adjusted_string[(i * codeword_size) + 5] == '1') { data_part[i] += 64; } + if(adjusted_string[(i * codeword_size) + 6] == '1') { data_part[i] += 32; } + if(adjusted_string[(i * codeword_size) + 7] == '1') { data_part[i] += 16; } + if(adjusted_string[(i * codeword_size) + 8] == '1') { data_part[i] += 8; } + if(adjusted_string[(i * codeword_size) + 9] == '1') { data_part[i] += 4; } + if(adjusted_string[(i * codeword_size) + 10] == '1') { data_part[i] += 2; } + if(adjusted_string[(i * codeword_size) + 11] == '1') { data_part[i] += 1; } + } + rs_init_gf(0x1069); + rs_init_code(ecc_blocks, 1); + rs_encode_long(data_blocks, data_part, ecc_part); + for(i = (ecc_blocks - 1); i >= 0; i--) { + if(ecc_part[i] & 0x800) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x400) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x200) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x100) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x80) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x40) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x20) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x10) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x08) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x04) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x02) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + if(ecc_part[i] & 0x01) { concat(adjusted_string, "1"); } else { concat(adjusted_string, "0"); } + } + rs_free(); + break; + } + + /* Invert the data so that actual data is on the outside and reed-solomon on the inside */ + memset(bit_pattern,'0',20045); + + total_bits = (data_blocks + ecc_blocks) * codeword_size; + for(i = 0; i < total_bits; i++) { + bit_pattern[i] = adjusted_string[total_bits - i - 1]; + } + + /* Now add the symbol descriptor */ + memset(desc_data,0,4); + memset(desc_ecc,0,6); + memset(descriptor,0,42); + + if(compact) { + /* The first 2 bits represent the number of layers minus 1 */ + if((layers - 1) & 0x02) { descriptor[0] = '1'; } else { descriptor[0] = '0'; } + if((layers - 1) & 0x01) { descriptor[1] = '1'; } else { descriptor[1] = '0'; } + /* The next 6 bits represent the number of data blocks minus 1 */ + if(reader) { + descriptor[2] = '1'; + } else { + if((data_blocks - 1) & 0x20) { descriptor[2] = '1'; } else { descriptor[2] = '0'; } + } + if((data_blocks - 1) & 0x10) { descriptor[3] = '1'; } else { descriptor[3] = '0'; } + if((data_blocks - 1) & 0x08) { descriptor[4] = '1'; } else { descriptor[4] = '0'; } + if((data_blocks - 1) & 0x04) { descriptor[5] = '1'; } else { descriptor[5] = '0'; } + if((data_blocks - 1) & 0x02) { descriptor[6] = '1'; } else { descriptor[6] = '0'; } + if((data_blocks - 1) & 0x01) { descriptor[7] = '1'; } else { descriptor[7] = '0'; } + descriptor[8] = '\0'; + if(debug) printf("Mode Message = %s\n", descriptor); + } else { + /* The first 5 bits represent the number of layers minus 1 */ + if((layers - 1) & 0x10) { descriptor[0] = '1'; } else { descriptor[0] = '0'; } + if((layers - 1) & 0x08) { descriptor[1] = '1'; } else { descriptor[1] = '0'; } + if((layers - 1) & 0x04) { descriptor[2] = '1'; } else { descriptor[2] = '0'; } + if((layers - 1) & 0x02) { descriptor[3] = '1'; } else { descriptor[3] = '0'; } + if((layers - 1) & 0x01) { descriptor[4] = '1'; } else { descriptor[4] = '0'; } + /* The next 11 bits represent the number of data blocks minus 1 */ + if(reader) { + descriptor[5] = '1'; + } else { + if((data_blocks - 1) & 0x400) { descriptor[5] = '1'; } else { descriptor[5] = '0'; } + } + if((data_blocks - 1) & 0x200) { descriptor[6] = '1'; } else { descriptor[6] = '0'; } + if((data_blocks - 1) & 0x100) { descriptor[7] = '1'; } else { descriptor[7] = '0'; } + if((data_blocks - 1) & 0x80) { descriptor[8] = '1'; } else { descriptor[8] = '0'; } + if((data_blocks - 1) & 0x40) { descriptor[9] = '1'; } else { descriptor[9] = '0'; } + if((data_blocks - 1) & 0x20) { descriptor[10] = '1'; } else { descriptor[10] = '0'; } + if((data_blocks - 1) & 0x10) { descriptor[11] = '1'; } else { descriptor[11] = '0'; } + if((data_blocks - 1) & 0x08) { descriptor[12] = '1'; } else { descriptor[12] = '0'; } + if((data_blocks - 1) & 0x04) { descriptor[13] = '1'; } else { descriptor[13] = '0'; } + if((data_blocks - 1) & 0x02) { descriptor[14] = '1'; } else { descriptor[14] = '0'; } + if((data_blocks - 1) & 0x01) { descriptor[15] = '1'; } else { descriptor[15] = '0'; } + descriptor[16] = '\0'; + if(debug) printf("Mode Message = %s\n", descriptor); + } + + /* Split into 4-bit codewords */ + for(i = 0; i < 4; i++) { + if(descriptor[i * 4] == '1') { desc_data[i] += 8; } + if(descriptor[(i * 4) + 1] == '1') { desc_data[i] += 4; } + if(descriptor[(i * 4) + 2] == '1') { desc_data[i] += 2; } + if(descriptor[(i * 4) + 3] == '1') { desc_data[i] += 1; } + } + + /* Add reed-solomon error correction with Galois field GF(16) and prime modulus + x^4 + x + 1 (section 7.2.3)*/ + + rs_init_gf(0x13); + if(compact) { + rs_init_code(5, 1); + rs_encode(2, desc_data, desc_ecc); + for(i = 0; i < 5; i++) { + if(desc_ecc[4 - i] & 0x08) { descriptor[(i * 4) + 8] = '1'; } else { descriptor[(i * 4) + 8] = '0'; } + if(desc_ecc[4 - i] & 0x04) { descriptor[(i * 4) + 9] = '1'; } else { descriptor[(i * 4) + 9] = '0'; } + if(desc_ecc[4 - i] & 0x02) { descriptor[(i * 4) + 10] = '1'; } else { descriptor[(i * 4) + 10] = '0'; } + if(desc_ecc[4 - i] & 0x01) { descriptor[(i * 4) + 11] = '1'; } else { descriptor[(i * 4) + 11] = '0'; } + } + } else { + rs_init_code(6, 1); + rs_encode(4, desc_data, desc_ecc); + for(i = 0; i < 6; i++) { + if(desc_ecc[5 - i] & 0x08) { descriptor[(i * 4) + 16] = '1'; } else { descriptor[(i * 4) + 16] = '0'; } + if(desc_ecc[5 - i] & 0x04) { descriptor[(i * 4) + 17] = '1'; } else { descriptor[(i * 4) + 17] = '0'; } + if(desc_ecc[5 - i] & 0x02) { descriptor[(i * 4) + 18] = '1'; } else { descriptor[(i * 4) + 18] = '0'; } + if(desc_ecc[5 - i] & 0x01) { descriptor[(i * 4) + 19] = '1'; } else { descriptor[(i * 4) + 19] = '0'; } + } + } + rs_free(); + + /* Merge descriptor with the rest of the symbol */ + for(i = 0; i < 40; i++) { + if(compact) { + bit_pattern[2000 + i - 2] = descriptor[i]; + } else { + bit_pattern[20000 + i - 2] = descriptor[i]; + } + } + + /* Plot all of the data into the symbol in pre-defined spiral pattern */ + if(compact) { + + for(y = AztecCompactOffset[layers - 1]; y < (27 - AztecCompactOffset[layers - 1]); y++) { + for(x = AztecCompactOffset[layers - 1]; x < (27 - AztecCompactOffset[layers - 1]); x++) { + if(CompactAztecMap[(y * 27) + x] == 1) { + set_module(symbol, y - AztecCompactOffset[layers - 1], x - AztecCompactOffset[layers - 1]); + } + if(CompactAztecMap[(y * 27) + x] >= 2) { + if(bit_pattern[CompactAztecMap[(y * 27) + x] - 2] == '1') { + set_module(symbol, y - AztecCompactOffset[layers - 1], x - AztecCompactOffset[layers - 1]); + } + } + } + symbol->row_height[y - AztecCompactOffset[layers - 1]] = 1; + } + symbol->rows = 27 - (2 * AztecCompactOffset[layers - 1]); + symbol->width = 27 - (2 * AztecCompactOffset[layers - 1]); + } else { + + for(y = AztecOffset[layers - 1]; y < (151 - AztecOffset[layers - 1]); y++) { + for(x = AztecOffset[layers - 1]; x < (151 - AztecOffset[layers - 1]); x++) { + if(AztecMap[(y * 151) + x] == 1) { + set_module(symbol, y - AztecOffset[layers - 1], x - AztecOffset[layers - 1]); + } + if(AztecMap[(y * 151) + x] >= 2) { + if(bit_pattern[AztecMap[(y * 151) + x] - 2] == '1') { + set_module(symbol, y - AztecOffset[layers - 1], x - AztecOffset[layers - 1]); + } + } + } + symbol->row_height[y - AztecOffset[layers - 1]] = 1; + } + symbol->rows = 151 - (2 * AztecOffset[layers - 1]); + symbol->width = 151 - (2 * AztecOffset[layers - 1]); + } + + return err_code; +} + +int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int input_value, error_number, i, y, x; + char binary_string[28]; + unsigned char data_codewords[3], ecc_codewords[6]; + + error_number = 0; + input_value = 0; + if(length > 3) { + strcpy(symbol->errtxt, "Input too large"); + return ERROR_INVALID_DATA1; + } + error_number = is_sane(NEON, source, length); + if(error_number != 0) { + strcpy(symbol->errtxt, "Invalid characters in input"); + return ERROR_INVALID_DATA1; + } + switch(length) { + case 3: input_value = 100 * ctoi(source[0]); + input_value += 10 * ctoi(source[1]); + input_value += ctoi(source[2]); + break; + case 2: input_value = 10 * ctoi(source[0]); + input_value += ctoi(source[1]); + break; + case 1: input_value = ctoi(source[0]); + break; + } + + if(input_value > 255) { + strcpy(symbol->errtxt, "Input too large"); + return ERROR_INVALID_DATA1; + } + + strcpy(binary_string, ""); + if(input_value & 0x80) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(input_value & 0x40) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(input_value & 0x20) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(input_value & 0x10) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(input_value & 0x08) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(input_value & 0x04) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(input_value & 0x02) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + if(input_value & 0x01) { concat(binary_string, "1"); } else { concat(binary_string, "0"); } + + data_codewords[0] = 0; + data_codewords[1] = 0; + + for(i = 0; i < 2; i++) { + if(binary_string[i * 4] == '1') { data_codewords[i] += 8; } + if(binary_string[(i * 4) + 1] == '1') { data_codewords[i] += 4; } + if(binary_string[(i * 4) + 2] == '1') { data_codewords[i] += 2; } + if(binary_string[(i * 4) + 3] == '1') { data_codewords[i] += 1; } + } + + rs_init_gf(0x13); + rs_init_code(5, 1); + rs_encode(2, data_codewords, ecc_codewords); + rs_free(); + + strcpy(binary_string, ""); + + for(i = 0; i < 5; i++) { + if(ecc_codewords[4 - i] & 0x08) { binary_string[(i * 4) + 8] = '1'; } else { binary_string[(i * 4) + 8] = '0'; } + if(ecc_codewords[4 - i] & 0x04) { binary_string[(i * 4) + 9] = '1'; } else { binary_string[(i * 4) + 9] = '0'; } + if(ecc_codewords[4 - i] & 0x02) { binary_string[(i * 4) + 10] = '1'; } else { binary_string[(i * 4) + 10] = '0'; } + if(ecc_codewords[4 - i] & 0x01) { binary_string[(i * 4) + 11] = '1'; } else { binary_string[(i * 4) + 11] = '0'; } + } + + for(i = 0; i < 28; i += 2) { + if(binary_string[i] == '1') { binary_string[i] = '0'; } else { binary_string[i] = '1'; } + } + + for(y = 8; y < 19; y++) { + for(x = 8; x < 19; x++) { + if(CompactAztecMap[(y * 27) + x] == 1) { + set_module(symbol, y - 8, x - 8); + } + if(CompactAztecMap[(y * 27) + x] >= 2) { + if(binary_string[CompactAztecMap[(y * 27) + x] - 2000] == '1') { + set_module(symbol, y - 8, x - 8); + } + } + } + symbol->row_height[y - 8] = 1; + } + symbol->rows = 11; + symbol->width = 11; + + return 0; +} diff --git a/3rdparty/zint-2.4.4/backend/aztec.h b/3rdparty/zint-2.4.4/backend/aztec.h new file mode 100644 index 0000000..93e0e27 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/aztec.h @@ -0,0 +1,291 @@ +/* aztec.c - Handles Aztec Mesa 2D Symbols */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define UPPER 1 +#define LOWER 2 +#define MIXED 4 +#define PUNC 8 +#define DIGIT 16 +#define BINARY 32 + +static int AztecMap[] = { /* 151 x 151 data grid */ + 19969,19968,18851,18853,18855,18857,18859,18861,18863,18865,18867,0,18869,18871,18873,18875,18877,18879,18881,18883,18885,18887,18889,18891,18893,18895,18897,0,18899,18901,18903,18905,18907,18909,18911,18913,18915,18917,18919,18921,18923,18925,18927,0,18929,18931,18933,18935,18937,18939,18941,18943,18945,18947,18949,18951,18953,18955,18957,0,18959,18961,18963,18965,18967,18969,18971,18973,18975,18977,18979,18981,18983,18985,18987,0,18989,18991,18993,18995,18997,18999,19001,19003,19005,19007,19009,19011,19013,19015,19017,0,19019,19021,19023,19025,19027,19029,19031,19033,19035,19037,19039,19041,19043,19045,19047,0,19049,19051,19053,19055,19057,19059,19061,19063,19065,19067,19069,19071,19073,19075,19077,0,19079,19081,19083,19085,19087,19089,19091,19093,19095,19097,19099,19101,19103,19105,19107,0,19109,19111,19113,19115,19117,19119,19121,19123,19125,19127,19129, + 19967,19966,18850,18852,18854,18856,18858,18860,18862,18864,18866,1,18868,18870,18872,18874,18876,18878,18880,18882,18884,18886,18888,18890,18892,18894,18896,1,18898,18900,18902,18904,18906,18908,18910,18912,18914,18916,18918,18920,18922,18924,18926,1,18928,18930,18932,18934,18936,18938,18940,18942,18944,18946,18948,18950,18952,18954,18956,1,18958,18960,18962,18964,18966,18968,18970,18972,18974,18976,18978,18980,18982,18984,18986,1,18988,18990,18992,18994,18996,18998,19000,19002,19004,19006,19008,19010,19012,19014,19016,1,19018,19020,19022,19024,19026,19028,19030,19032,19034,19036,19038,19040,19042,19044,19046,1,19048,19050,19052,19054,19056,19058,19060,19062,19064,19066,19068,19070,19072,19074,19076,1,19078,19080,19082,19084,19086,19088,19090,19092,19094,19096,19098,19100,19102,19104,19106,1,19108,19110,19112,19114,19116,19118,19120,19122,19124,19126,19128, + 19965,19964,18849,18848,17763,17765,17767,17769,17771,17773,17775,0,17777,17779,17781,17783,17785,17787,17789,17791,17793,17795,17797,17799,17801,17803,17805,0,17807,17809,17811,17813,17815,17817,17819,17821,17823,17825,17827,17829,17831,17833,17835,0,17837,17839,17841,17843,17845,17847,17849,17851,17853,17855,17857,17859,17861,17863,17865,0,17867,17869,17871,17873,17875,17877,17879,17881,17883,17885,17887,17889,17891,17893,17895,0,17897,17899,17901,17903,17905,17907,17909,17911,17913,17915,17917,17919,17921,17923,17925,0,17927,17929,17931,17933,17935,17937,17939,17941,17943,17945,17947,17949,17951,17953,17955,0,17957,17959,17961,17963,17965,17967,17969,17971,17973,17975,17977,17979,17981,17983,17985,0,17987,17989,17991,17993,17995,17997,17999,18001,18003,18005,18007,18009,18011,18013,18015,0,18017,18019,18021,18023,18025,18027,18029,18031,18033,19130,19131, + 19963,19962,18847,18846,17762,17764,17766,17768,17770,17772,17774,1,17776,17778,17780,17782,17784,17786,17788,17790,17792,17794,17796,17798,17800,17802,17804,1,17806,17808,17810,17812,17814,17816,17818,17820,17822,17824,17826,17828,17830,17832,17834,1,17836,17838,17840,17842,17844,17846,17848,17850,17852,17854,17856,17858,17860,17862,17864,1,17866,17868,17870,17872,17874,17876,17878,17880,17882,17884,17886,17888,17890,17892,17894,1,17896,17898,17900,17902,17904,17906,17908,17910,17912,17914,17916,17918,17920,17922,17924,1,17926,17928,17930,17932,17934,17936,17938,17940,17942,17944,17946,17948,17950,17952,17954,1,17956,17958,17960,17962,17964,17966,17968,17970,17972,17974,17976,17978,17980,17982,17984,1,17986,17988,17990,17992,17994,17996,17998,18000,18002,18004,18006,18008,18010,18012,18014,1,18016,18018,18020,18022,18024,18026,18028,18030,18032,19132,19133, + 19961,19960,18845,18844,17761,17760,16707,16709,16711,16713,16715,0,16717,16719,16721,16723,16725,16727,16729,16731,16733,16735,16737,16739,16741,16743,16745,0,16747,16749,16751,16753,16755,16757,16759,16761,16763,16765,16767,16769,16771,16773,16775,0,16777,16779,16781,16783,16785,16787,16789,16791,16793,16795,16797,16799,16801,16803,16805,0,16807,16809,16811,16813,16815,16817,16819,16821,16823,16825,16827,16829,16831,16833,16835,0,16837,16839,16841,16843,16845,16847,16849,16851,16853,16855,16857,16859,16861,16863,16865,0,16867,16869,16871,16873,16875,16877,16879,16881,16883,16885,16887,16889,16891,16893,16895,0,16897,16899,16901,16903,16905,16907,16909,16911,16913,16915,16917,16919,16921,16923,16925,0,16927,16929,16931,16933,16935,16937,16939,16941,16943,16945,16947,16949,16951,16953,16955,0,16957,16959,16961,16963,16965,16967,16969,18034,18035,19134,19135, + 19959,19958,18843,18842,17759,17758,16706,16708,16710,16712,16714,1,16716,16718,16720,16722,16724,16726,16728,16730,16732,16734,16736,16738,16740,16742,16744,1,16746,16748,16750,16752,16754,16756,16758,16760,16762,16764,16766,16768,16770,16772,16774,1,16776,16778,16780,16782,16784,16786,16788,16790,16792,16794,16796,16798,16800,16802,16804,1,16806,16808,16810,16812,16814,16816,16818,16820,16822,16824,16826,16828,16830,16832,16834,1,16836,16838,16840,16842,16844,16846,16848,16850,16852,16854,16856,16858,16860,16862,16864,1,16866,16868,16870,16872,16874,16876,16878,16880,16882,16884,16886,16888,16890,16892,16894,1,16896,16898,16900,16902,16904,16906,16908,16910,16912,16914,16916,16918,16920,16922,16924,1,16926,16928,16930,16932,16934,16936,16938,16940,16942,16944,16946,16948,16950,16952,16954,1,16956,16958,16960,16962,16964,16966,16968,18036,18037,19136,19137, + 19957,19956,18841,18840,17757,17756,16705,16704,15683,15685,15687,0,15689,15691,15693,15695,15697,15699,15701,15703,15705,15707,15709,15711,15713,15715,15717,0,15719,15721,15723,15725,15727,15729,15731,15733,15735,15737,15739,15741,15743,15745,15747,0,15749,15751,15753,15755,15757,15759,15761,15763,15765,15767,15769,15771,15773,15775,15777,0,15779,15781,15783,15785,15787,15789,15791,15793,15795,15797,15799,15801,15803,15805,15807,0,15809,15811,15813,15815,15817,15819,15821,15823,15825,15827,15829,15831,15833,15835,15837,0,15839,15841,15843,15845,15847,15849,15851,15853,15855,15857,15859,15861,15863,15865,15867,0,15869,15871,15873,15875,15877,15879,15881,15883,15885,15887,15889,15891,15893,15895,15897,0,15899,15901,15903,15905,15907,15909,15911,15913,15915,15917,15919,15921,15923,15925,15927,0,15929,15931,15933,15935,15937,16970,16971,18038,18039,19138,19139, + 19955,19954,18839,18838,17755,17754,16703,16702,15682,15684,15686,1,15688,15690,15692,15694,15696,15698,15700,15702,15704,15706,15708,15710,15712,15714,15716,1,15718,15720,15722,15724,15726,15728,15730,15732,15734,15736,15738,15740,15742,15744,15746,1,15748,15750,15752,15754,15756,15758,15760,15762,15764,15766,15768,15770,15772,15774,15776,1,15778,15780,15782,15784,15786,15788,15790,15792,15794,15796,15798,15800,15802,15804,15806,1,15808,15810,15812,15814,15816,15818,15820,15822,15824,15826,15828,15830,15832,15834,15836,1,15838,15840,15842,15844,15846,15848,15850,15852,15854,15856,15858,15860,15862,15864,15866,1,15868,15870,15872,15874,15876,15878,15880,15882,15884,15886,15888,15890,15892,15894,15896,1,15898,15900,15902,15904,15906,15908,15910,15912,15914,15916,15918,15920,15922,15924,15926,1,15928,15930,15932,15934,15936,16972,16973,18040,18041,19140,19141, + 19953,19952,18837,18836,17753,17752,16701,16700,15681,15680,14691,0,14693,14695,14697,14699,14701,14703,14705,14707,14709,14711,14713,14715,14717,14719,14721,0,14723,14725,14727,14729,14731,14733,14735,14737,14739,14741,14743,14745,14747,14749,14751,0,14753,14755,14757,14759,14761,14763,14765,14767,14769,14771,14773,14775,14777,14779,14781,0,14783,14785,14787,14789,14791,14793,14795,14797,14799,14801,14803,14805,14807,14809,14811,0,14813,14815,14817,14819,14821,14823,14825,14827,14829,14831,14833,14835,14837,14839,14841,0,14843,14845,14847,14849,14851,14853,14855,14857,14859,14861,14863,14865,14867,14869,14871,0,14873,14875,14877,14879,14881,14883,14885,14887,14889,14891,14893,14895,14897,14899,14901,0,14903,14905,14907,14909,14911,14913,14915,14917,14919,14921,14923,14925,14927,14929,14931,0,14933,14935,14937,15938,15939,16974,16975,18042,18043,19142,19143, + 19951,19950,18835,18834,17751,17750,16699,16698,15679,15678,14690,1,14692,14694,14696,14698,14700,14702,14704,14706,14708,14710,14712,14714,14716,14718,14720,1,14722,14724,14726,14728,14730,14732,14734,14736,14738,14740,14742,14744,14746,14748,14750,1,14752,14754,14756,14758,14760,14762,14764,14766,14768,14770,14772,14774,14776,14778,14780,1,14782,14784,14786,14788,14790,14792,14794,14796,14798,14800,14802,14804,14806,14808,14810,1,14812,14814,14816,14818,14820,14822,14824,14826,14828,14830,14832,14834,14836,14838,14840,1,14842,14844,14846,14848,14850,14852,14854,14856,14858,14860,14862,14864,14866,14868,14870,1,14872,14874,14876,14878,14880,14882,14884,14886,14888,14890,14892,14894,14896,14898,14900,1,14902,14904,14906,14908,14910,14912,14914,14916,14918,14920,14922,14924,14926,14928,14930,1,14932,14934,14936,15940,15941,16976,16977,18044,18045,19144,19145, + 19949,19948,18833,18832,17749,17748,16697,16696,15677,15676,14689,0,14688,13731,13733,13735,13737,13739,13741,13743,13745,13747,13749,13751,13753,13755,13757,0,13759,13761,13763,13765,13767,13769,13771,13773,13775,13777,13779,13781,13783,13785,13787,0,13789,13791,13793,13795,13797,13799,13801,13803,13805,13807,13809,13811,13813,13815,13817,0,13819,13821,13823,13825,13827,13829,13831,13833,13835,13837,13839,13841,13843,13845,13847,0,13849,13851,13853,13855,13857,13859,13861,13863,13865,13867,13869,13871,13873,13875,13877,0,13879,13881,13883,13885,13887,13889,13891,13893,13895,13897,13899,13901,13903,13905,13907,0,13909,13911,13913,13915,13917,13919,13921,13923,13925,13927,13929,13931,13933,13935,13937,0,13939,13941,13943,13945,13947,13949,13951,13953,13955,13957,13959,13961,13963,13965,13967,0,13969,14938,14939,15942,15943,16978,16979,18046,18047,19146,19147, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19947,19946,18831,18830,17747,17746,16695,16694,15675,15674,14687,0,14686,13730,13732,13734,13736,13738,13740,13742,13744,13746,13748,13750,13752,13754,13756,0,13758,13760,13762,13764,13766,13768,13770,13772,13774,13776,13778,13780,13782,13784,13786,0,13788,13790,13792,13794,13796,13798,13800,13802,13804,13806,13808,13810,13812,13814,13816,0,13818,13820,13822,13824,13826,13828,13830,13832,13834,13836,13838,13840,13842,13844,13846,0,13848,13850,13852,13854,13856,13858,13860,13862,13864,13866,13868,13870,13872,13874,13876,0,13878,13880,13882,13884,13886,13888,13890,13892,13894,13896,13898,13900,13902,13904,13906,0,13908,13910,13912,13914,13916,13918,13920,13922,13924,13926,13928,13930,13932,13934,13936,0,13938,13940,13942,13944,13946,13948,13950,13952,13954,13956,13958,13960,13962,13964,13966,0,13968,14940,14941,15944,15945,16980,16981,18048,18049,19148,19149, + 19945,19944,18829,18828,17745,17744,16693,16692,15673,15672,14685,1,14684,13729,13728,12803,12805,12807,12809,12811,12813,12815,12817,12819,12821,12823,12825,1,12827,12829,12831,12833,12835,12837,12839,12841,12843,12845,12847,12849,12851,12853,12855,1,12857,12859,12861,12863,12865,12867,12869,12871,12873,12875,12877,12879,12881,12883,12885,1,12887,12889,12891,12893,12895,12897,12899,12901,12903,12905,12907,12909,12911,12913,12915,1,12917,12919,12921,12923,12925,12927,12929,12931,12933,12935,12937,12939,12941,12943,12945,1,12947,12949,12951,12953,12955,12957,12959,12961,12963,12965,12967,12969,12971,12973,12975,1,12977,12979,12981,12983,12985,12987,12989,12991,12993,12995,12997,12999,13001,13003,13005,1,13007,13009,13011,13013,13015,13017,13019,13021,13023,13025,13027,13029,13031,13033,13970,1,13971,14942,14943,15946,15947,16982,16983,18050,18051,19150,19151, + 19943,19942,18827,18826,17743,17742,16691,16690,15671,15670,14683,0,14682,13727,13726,12802,12804,12806,12808,12810,12812,12814,12816,12818,12820,12822,12824,0,12826,12828,12830,12832,12834,12836,12838,12840,12842,12844,12846,12848,12850,12852,12854,0,12856,12858,12860,12862,12864,12866,12868,12870,12872,12874,12876,12878,12880,12882,12884,0,12886,12888,12890,12892,12894,12896,12898,12900,12902,12904,12906,12908,12910,12912,12914,0,12916,12918,12920,12922,12924,12926,12928,12930,12932,12934,12936,12938,12940,12942,12944,0,12946,12948,12950,12952,12954,12956,12958,12960,12962,12964,12966,12968,12970,12972,12974,0,12976,12978,12980,12982,12984,12986,12988,12990,12992,12994,12996,12998,13000,13002,13004,0,13006,13008,13010,13012,13014,13016,13018,13020,13022,13024,13026,13028,13030,13032,13972,0,13973,14944,14945,15948,15949,16984,16985,18052,18053,19152,19153, + 19941,19940,18825,18824,17741,17740,16689,16688,15669,15668,14681,1,14680,13725,13724,12801,12800,11907,11909,11911,11913,11915,11917,11919,11921,11923,11925,1,11927,11929,11931,11933,11935,11937,11939,11941,11943,11945,11947,11949,11951,11953,11955,1,11957,11959,11961,11963,11965,11967,11969,11971,11973,11975,11977,11979,11981,11983,11985,1,11987,11989,11991,11993,11995,11997,11999,12001,12003,12005,12007,12009,12011,12013,12015,1,12017,12019,12021,12023,12025,12027,12029,12031,12033,12035,12037,12039,12041,12043,12045,1,12047,12049,12051,12053,12055,12057,12059,12061,12063,12065,12067,12069,12071,12073,12075,1,12077,12079,12081,12083,12085,12087,12089,12091,12093,12095,12097,12099,12101,12103,12105,1,12107,12109,12111,12113,12115,12117,12119,12121,12123,12125,12127,12129,13034,13035,13974,1,13975,14946,14947,15950,15951,16986,16987,18054,18055,19154,19155, + 19939,19938,18823,18822,17739,17738,16687,16686,15667,15666,14679,0,14678,13723,13722,12799,12798,11906,11908,11910,11912,11914,11916,11918,11920,11922,11924,0,11926,11928,11930,11932,11934,11936,11938,11940,11942,11944,11946,11948,11950,11952,11954,0,11956,11958,11960,11962,11964,11966,11968,11970,11972,11974,11976,11978,11980,11982,11984,0,11986,11988,11990,11992,11994,11996,11998,12000,12002,12004,12006,12008,12010,12012,12014,0,12016,12018,12020,12022,12024,12026,12028,12030,12032,12034,12036,12038,12040,12042,12044,0,12046,12048,12050,12052,12054,12056,12058,12060,12062,12064,12066,12068,12070,12072,12074,0,12076,12078,12080,12082,12084,12086,12088,12090,12092,12094,12096,12098,12100,12102,12104,0,12106,12108,12110,12112,12114,12116,12118,12120,12122,12124,12126,12128,13036,13037,13976,0,13977,14948,14949,15952,15953,16988,16989,18056,18057,19156,19157, + 19937,19936,18821,18820,17737,17736,16685,16684,15665,15664,14677,1,14676,13721,13720,12797,12796,11905,11904,11043,11045,11047,11049,11051,11053,11055,11057,1,11059,11061,11063,11065,11067,11069,11071,11073,11075,11077,11079,11081,11083,11085,11087,1,11089,11091,11093,11095,11097,11099,11101,11103,11105,11107,11109,11111,11113,11115,11117,1,11119,11121,11123,11125,11127,11129,11131,11133,11135,11137,11139,11141,11143,11145,11147,1,11149,11151,11153,11155,11157,11159,11161,11163,11165,11167,11169,11171,11173,11175,11177,1,11179,11181,11183,11185,11187,11189,11191,11193,11195,11197,11199,11201,11203,11205,11207,1,11209,11211,11213,11215,11217,11219,11221,11223,11225,11227,11229,11231,11233,11235,11237,1,11239,11241,11243,11245,11247,11249,11251,11253,11255,11257,12130,12131,13038,13039,13978,1,13979,14950,14951,15954,15955,16990,16991,18058,18059,19158,19159, + 19935,19934,18819,18818,17735,17734,16683,16682,15663,15662,14675,0,14674,13719,13718,12795,12794,11903,11902,11042,11044,11046,11048,11050,11052,11054,11056,0,11058,11060,11062,11064,11066,11068,11070,11072,11074,11076,11078,11080,11082,11084,11086,0,11088,11090,11092,11094,11096,11098,11100,11102,11104,11106,11108,11110,11112,11114,11116,0,11118,11120,11122,11124,11126,11128,11130,11132,11134,11136,11138,11140,11142,11144,11146,0,11148,11150,11152,11154,11156,11158,11160,11162,11164,11166,11168,11170,11172,11174,11176,0,11178,11180,11182,11184,11186,11188,11190,11192,11194,11196,11198,11200,11202,11204,11206,0,11208,11210,11212,11214,11216,11218,11220,11222,11224,11226,11228,11230,11232,11234,11236,0,11238,11240,11242,11244,11246,11248,11250,11252,11254,11256,12132,12133,13040,13041,13980,0,13981,14952,14953,15956,15957,16992,16993,18060,18061,19160,19161, + 19933,19932,18817,18816,17733,17732,16681,16680,15661,15660,14673,1,14672,13717,13716,12793,12792,11901,11900,11041,11040,10211,10213,10215,10217,10219,10221,1,10223,10225,10227,10229,10231,10233,10235,10237,10239,10241,10243,10245,10247,10249,10251,1,10253,10255,10257,10259,10261,10263,10265,10267,10269,10271,10273,10275,10277,10279,10281,1,10283,10285,10287,10289,10291,10293,10295,10297,10299,10301,10303,10305,10307,10309,10311,1,10313,10315,10317,10319,10321,10323,10325,10327,10329,10331,10333,10335,10337,10339,10341,1,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361,10363,10365,10367,10369,10371,1,10373,10375,10377,10379,10381,10383,10385,10387,10389,10391,10393,10395,10397,10399,10401,1,10403,10405,10407,10409,10411,10413,10415,10417,11258,11259,12134,12135,13042,13043,13982,1,13983,14954,14955,15958,15959,16994,16995,18062,18063,19162,19163, + 19931,19930,18815,18814,17731,17730,16679,16678,15659,15658,14671,0,14670,13715,13714,12791,12790,11899,11898,11039,11038,10210,10212,10214,10216,10218,10220,0,10222,10224,10226,10228,10230,10232,10234,10236,10238,10240,10242,10244,10246,10248,10250,0,10252,10254,10256,10258,10260,10262,10264,10266,10268,10270,10272,10274,10276,10278,10280,0,10282,10284,10286,10288,10290,10292,10294,10296,10298,10300,10302,10304,10306,10308,10310,0,10312,10314,10316,10318,10320,10322,10324,10326,10328,10330,10332,10334,10336,10338,10340,0,10342,10344,10346,10348,10350,10352,10354,10356,10358,10360,10362,10364,10366,10368,10370,0,10372,10374,10376,10378,10380,10382,10384,10386,10388,10390,10392,10394,10396,10398,10400,0,10402,10404,10406,10408,10410,10412,10414,10416,11260,11261,12136,12137,13044,13045,13984,0,13985,14956,14957,15960,15961,16996,16997,18064,18065,19164,19165, + 19929,19928,18813,18812,17729,17728,16677,16676,15657,15656,14669,1,14668,13713,13712,12789,12788,11897,11896,11037,11036,10209,10208,9411,9413,9415,9417,1,9419,9421,9423,9425,9427,9429,9431,9433,9435,9437,9439,9441,9443,9445,9447,1,9449,9451,9453,9455,9457,9459,9461,9463,9465,9467,9469,9471,9473,9475,9477,1,9479,9481,9483,9485,9487,9489,9491,9493,9495,9497,9499,9501,9503,9505,9507,1,9509,9511,9513,9515,9517,9519,9521,9523,9525,9527,9529,9531,9533,9535,9537,1,9539,9541,9543,9545,9547,9549,9551,9553,9555,9557,9559,9561,9563,9565,9567,1,9569,9571,9573,9575,9577,9579,9581,9583,9585,9587,9589,9591,9593,9595,9597,1,9599,9601,9603,9605,9607,9609,10418,10419,11262,11263,12138,12139,13046,13047,13986,1,13987,14958,14959,15962,15963,16998,16999,18066,18067,19166,19167, + 19927,19926,18811,18810,17727,17726,16675,16674,15655,15654,14667,0,14666,13711,13710,12787,12786,11895,11894,11035,11034,10207,10206,9410,9412,9414,9416,0,9418,9420,9422,9424,9426,9428,9430,9432,9434,9436,9438,9440,9442,9444,9446,0,9448,9450,9452,9454,9456,9458,9460,9462,9464,9466,9468,9470,9472,9474,9476,0,9478,9480,9482,9484,9486,9488,9490,9492,9494,9496,9498,9500,9502,9504,9506,0,9508,9510,9512,9514,9516,9518,9520,9522,9524,9526,9528,9530,9532,9534,9536,0,9538,9540,9542,9544,9546,9548,9550,9552,9554,9556,9558,9560,9562,9564,9566,0,9568,9570,9572,9574,9576,9578,9580,9582,9584,9586,9588,9590,9592,9594,9596,0,9598,9600,9602,9604,9606,9608,10420,10421,11264,11265,12140,12141,13048,13049,13988,0,13989,14960,14961,15964,15965,17000,17001,18068,18069,19168,19169, + 19925,19924,18809,18808,17725,17724,16673,16672,15653,15652,14665,1,14664,13709,13708,12785,12784,11893,11892,11033,11032,10205,10204,9409,9408,8643,8645,1,8647,8649,8651,8653,8655,8657,8659,8661,8663,8665,8667,8669,8671,8673,8675,1,8677,8679,8681,8683,8685,8687,8689,8691,8693,8695,8697,8699,8701,8703,8705,1,8707,8709,8711,8713,8715,8717,8719,8721,8723,8725,8727,8729,8731,8733,8735,1,8737,8739,8741,8743,8745,8747,8749,8751,8753,8755,8757,8759,8761,8763,8765,1,8767,8769,8771,8773,8775,8777,8779,8781,8783,8785,8787,8789,8791,8793,8795,1,8797,8799,8801,8803,8805,8807,8809,8811,8813,8815,8817,8819,8821,8823,8825,1,8827,8829,8831,8833,9610,9611,10422,10423,11266,11267,12142,12143,13050,13051,13990,1,13991,14962,14963,15966,15967,17002,17003,18070,18071,19170,19171, + 19923,19922,18807,18806,17723,17722,16671,16670,15651,15650,14663,0,14662,13707,13706,12783,12782,11891,11890,11031,11030,10203,10202,9407,9406,8642,8644,0,8646,8648,8650,8652,8654,8656,8658,8660,8662,8664,8666,8668,8670,8672,8674,0,8676,8678,8680,8682,8684,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704,0,8706,8708,8710,8712,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,0,8736,8738,8740,8742,8744,8746,8748,8750,8752,8754,8756,8758,8760,8762,8764,0,8766,8768,8770,8772,8774,8776,8778,8780,8782,8784,8786,8788,8790,8792,8794,0,8796,8798,8800,8802,8804,8806,8808,8810,8812,8814,8816,8818,8820,8822,8824,0,8826,8828,8830,8832,9612,9613,10424,10425,11268,11269,12144,12145,13052,13053,13992,0,13993,14964,14965,15968,15969,17004,17005,18072,18073,19172,19173, + 19921,19920,18805,18804,17721,17720,16669,16668,15649,15648,14661,1,14660,13705,13704,12781,12780,11889,11888,11029,11028,10201,10200,9405,9404,8641,8640,1,7907,7909,7911,7913,7915,7917,7919,7921,7923,7925,7927,7929,7931,7933,7935,1,7937,7939,7941,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961,7963,7965,1,7967,7969,7971,7973,7975,7977,7979,7981,7983,7985,7987,7989,7991,7993,7995,1,7997,7999,8001,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025,1,8027,8029,8031,8033,8035,8037,8039,8041,8043,8045,8047,8049,8051,8053,8055,1,8057,8059,8061,8063,8065,8067,8069,8071,8073,8075,8077,8079,8081,8083,8085,1,8087,8089,8834,8835,9614,9615,10426,10427,11270,11271,12146,12147,13054,13055,13994,1,13995,14966,14967,15970,15971,17006,17007,18074,18075,19174,19175, + 19919,19918,18803,18802,17719,17718,16667,16666,15647,15646,14659,0,14658,13703,13702,12779,12778,11887,11886,11027,11026,10199,10198,9403,9402,8639,8638,0,7906,7908,7910,7912,7914,7916,7918,7920,7922,7924,7926,7928,7930,7932,7934,0,7936,7938,7940,7942,7944,7946,7948,7950,7952,7954,7956,7958,7960,7962,7964,0,7966,7968,7970,7972,7974,7976,7978,7980,7982,7984,7986,7988,7990,7992,7994,0,7996,7998,8000,8002,8004,8006,8008,8010,8012,8014,8016,8018,8020,8022,8024,0,8026,8028,8030,8032,8034,8036,8038,8040,8042,8044,8046,8048,8050,8052,8054,0,8056,8058,8060,8062,8064,8066,8068,8070,8072,8074,8076,8078,8080,8082,8084,0,8086,8088,8836,8837,9616,9617,10428,10429,11272,11273,12148,12149,13056,13057,13996,0,13997,14968,14969,15972,15973,17008,17009,18076,18077,19176,19177, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19917,19916,18801,18800,17717,17716,16665,16664,15645,15644,14657,0,14656,13701,13700,12777,12776,11885,11884,11025,11024,10197,10196,9401,9400,8637,8636,0,7905,7904,7203,7205,7207,7209,7211,7213,7215,7217,7219,7221,7223,7225,7227,0,7229,7231,7233,7235,7237,7239,7241,7243,7245,7247,7249,7251,7253,7255,7257,0,7259,7261,7263,7265,7267,7269,7271,7273,7275,7277,7279,7281,7283,7285,7287,0,7289,7291,7293,7295,7297,7299,7301,7303,7305,7307,7309,7311,7313,7315,7317,0,7319,7321,7323,7325,7327,7329,7331,7333,7335,7337,7339,7341,7343,7345,7347,0,7349,7351,7353,7355,7357,7359,7361,7363,7365,7367,7369,7371,7373,7375,7377,0,8090,8091,8838,8839,9618,9619,10430,10431,11274,11275,12150,12151,13058,13059,13998,0,13999,14970,14971,15974,15975,17010,17011,18078,18079,19178,19179, + 19915,19914,18799,18798,17715,17714,16663,16662,15643,15642,14655,1,14654,13699,13698,12775,12774,11883,11882,11023,11022,10195,10194,9399,9398,8635,8634,1,7903,7902,7202,7204,7206,7208,7210,7212,7214,7216,7218,7220,7222,7224,7226,1,7228,7230,7232,7234,7236,7238,7240,7242,7244,7246,7248,7250,7252,7254,7256,1,7258,7260,7262,7264,7266,7268,7270,7272,7274,7276,7278,7280,7282,7284,7286,1,7288,7290,7292,7294,7296,7298,7300,7302,7304,7306,7308,7310,7312,7314,7316,1,7318,7320,7322,7324,7326,7328,7330,7332,7334,7336,7338,7340,7342,7344,7346,1,7348,7350,7352,7354,7356,7358,7360,7362,7364,7366,7368,7370,7372,7374,7376,1,8092,8093,8840,8841,9620,9621,10432,10433,11276,11277,12152,12153,13060,13061,14000,1,14001,14972,14973,15976,15977,17012,17013,18080,18081,19180,19181, + 19913,19912,18797,18796,17713,17712,16661,16660,15641,15640,14653,0,14652,13697,13696,12773,12772,11881,11880,11021,11020,10193,10192,9397,9396,8633,8632,0,7901,7900,7201,7200,6531,6533,6535,6537,6539,6541,6543,6545,6547,6549,6551,0,6553,6555,6557,6559,6561,6563,6565,6567,6569,6571,6573,6575,6577,6579,6581,0,6583,6585,6587,6589,6591,6593,6595,6597,6599,6601,6603,6605,6607,6609,6611,0,6613,6615,6617,6619,6621,6623,6625,6627,6629,6631,6633,6635,6637,6639,6641,0,6643,6645,6647,6649,6651,6653,6655,6657,6659,6661,6663,6665,6667,6669,6671,0,6673,6675,6677,6679,6681,6683,6685,6687,6689,6691,6693,6695,6697,7378,7379,0,8094,8095,8842,8843,9622,9623,10434,10435,11278,11279,12154,12155,13062,13063,14002,0,14003,14974,14975,15978,15979,17014,17015,18082,18083,19182,19183, + 19911,19910,18795,18794,17711,17710,16659,16658,15639,15638,14651,1,14650,13695,13694,12771,12770,11879,11878,11019,11018,10191,10190,9395,9394,8631,8630,1,7899,7898,7199,7198,6530,6532,6534,6536,6538,6540,6542,6544,6546,6548,6550,1,6552,6554,6556,6558,6560,6562,6564,6566,6568,6570,6572,6574,6576,6578,6580,1,6582,6584,6586,6588,6590,6592,6594,6596,6598,6600,6602,6604,6606,6608,6610,1,6612,6614,6616,6618,6620,6622,6624,6626,6628,6630,6632,6634,6636,6638,6640,1,6642,6644,6646,6648,6650,6652,6654,6656,6658,6660,6662,6664,6666,6668,6670,1,6672,6674,6676,6678,6680,6682,6684,6686,6688,6690,6692,6694,6696,7380,7381,1,8096,8097,8844,8845,9624,9625,10436,10437,11280,11281,12156,12157,13064,13065,14004,1,14005,14976,14977,15980,15981,17016,17017,18084,18085,19184,19185, + 19909,19908,18793,18792,17709,17708,16657,16656,15637,15636,14649,0,14648,13693,13692,12769,12768,11877,11876,11017,11016,10189,10188,9393,9392,8629,8628,0,7897,7896,7197,7196,6529,6528,5891,5893,5895,5897,5899,5901,5903,5905,5907,0,5909,5911,5913,5915,5917,5919,5921,5923,5925,5927,5929,5931,5933,5935,5937,0,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959,5961,5963,5965,5967,0,5969,5971,5973,5975,5977,5979,5981,5983,5985,5987,5989,5991,5993,5995,5997,0,5999,6001,6003,6005,6007,6009,6011,6013,6015,6017,6019,6021,6023,6025,6027,0,6029,6031,6033,6035,6037,6039,6041,6043,6045,6047,6049,6698,6699,7382,7383,0,8098,8099,8846,8847,9626,9627,10438,10439,11282,11283,12158,12159,13066,13067,14006,0,14007,14978,14979,15982,15983,17018,17019,18086,18087,19186,19187, + 19907,19906,18791,18790,17707,17706,16655,16654,15635,15634,14647,1,14646,13691,13690,12767,12766,11875,11874,11015,11014,10187,10186,9391,9390,8627,8626,1,7895,7894,7195,7194,6527,6526,5890,5892,5894,5896,5898,5900,5902,5904,5906,1,5908,5910,5912,5914,5916,5918,5920,5922,5924,5926,5928,5930,5932,5934,5936,1,5938,5940,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960,5962,5964,5966,1,5968,5970,5972,5974,5976,5978,5980,5982,5984,5986,5988,5990,5992,5994,5996,1,5998,6000,6002,6004,6006,6008,6010,6012,6014,6016,6018,6020,6022,6024,6026,1,6028,6030,6032,6034,6036,6038,6040,6042,6044,6046,6048,6700,6701,7384,7385,1,8100,8101,8848,8849,9628,9629,10440,10441,11284,11285,12160,12161,13068,13069,14008,1,14009,14980,14981,15984,15985,17020,17021,18088,18089,19188,19189, + 19905,19904,18789,18788,17705,17704,16653,16652,15633,15632,14645,0,14644,13689,13688,12765,12764,11873,11872,11013,11012,10185,10184,9389,9388,8625,8624,0,7893,7892,7193,7192,6525,6524,5889,5888,5283,5285,5287,5289,5291,5293,5295,0,5297,5299,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325,0,5327,5329,5331,5333,5335,5337,5339,5341,5343,5345,5347,5349,5351,5353,5355,0,5357,5359,5361,5363,5365,5367,5369,5371,5373,5375,5377,5379,5381,5383,5385,0,5387,5389,5391,5393,5395,5397,5399,5401,5403,5405,5407,5409,5411,5413,5415,0,5417,5419,5421,5423,5425,5427,5429,5431,5433,6050,6051,6702,6703,7386,7387,0,8102,8103,8850,8851,9630,9631,10442,10443,11286,11287,12162,12163,13070,13071,14010,0,14011,14982,14983,15986,15987,17022,17023,18090,18091,19190,19191, + 19903,19902,18787,18786,17703,17702,16651,16650,15631,15630,14643,1,14642,13687,13686,12763,12762,11871,11870,11011,11010,10183,10182,9387,9386,8623,8622,1,7891,7890,7191,7190,6523,6522,5887,5886,5282,5284,5286,5288,5290,5292,5294,1,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318,5320,5322,5324,1,5326,5328,5330,5332,5334,5336,5338,5340,5342,5344,5346,5348,5350,5352,5354,1,5356,5358,5360,5362,5364,5366,5368,5370,5372,5374,5376,5378,5380,5382,5384,1,5386,5388,5390,5392,5394,5396,5398,5400,5402,5404,5406,5408,5410,5412,5414,1,5416,5418,5420,5422,5424,5426,5428,5430,5432,6052,6053,6704,6705,7388,7389,1,8104,8105,8852,8853,9632,9633,10444,10445,11288,11289,12164,12165,13072,13073,14012,1,14013,14984,14985,15988,15989,17024,17025,18092,18093,19192,19193, + 19901,19900,18785,18784,17701,17700,16649,16648,15629,15628,14641,0,14640,13685,13684,12761,12760,11869,11868,11009,11008,10181,10180,9385,9384,8621,8620,0,7889,7888,7189,7188,6521,6520,5885,5884,5281,5280,4707,4709,4711,4713,4715,0,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745,0,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769,4771,4773,4775,0,4777,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799,4801,4803,4805,0,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833,4835,0,4837,4839,4841,4843,4845,4847,4849,5434,5435,6054,6055,6706,6707,7390,7391,0,8106,8107,8854,8855,9634,9635,10446,10447,11290,11291,12166,12167,13074,13075,14014,0,14015,14986,14987,15990,15991,17026,17027,18094,18095,19194,19195, + 19899,19898,18783,18782,17699,17698,16647,16646,15627,15626,14639,1,14638,13683,13682,12759,12758,11867,11866,11007,11006,10179,10178,9383,9382,8619,8618,1,7887,7886,7187,7186,6519,6518,5883,5882,5279,5278,4706,4708,4710,4712,4714,1,4716,4718,4720,4722,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744,1,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768,4770,4772,4774,1,4776,4778,4780,4782,4784,4786,4788,4790,4792,4794,4796,4798,4800,4802,4804,1,4806,4808,4810,4812,4814,4816,4818,4820,4822,4824,4826,4828,4830,4832,4834,1,4836,4838,4840,4842,4844,4846,4848,5436,5437,6056,6057,6708,6709,7392,7393,1,8108,8109,8856,8857,9636,9637,10448,10449,11292,11293,12168,12169,13076,13077,14016,1,14017,14988,14989,15992,15993,17028,17029,18096,18097,19196,19197, + 19897,19896,18781,18780,17697,17696,16645,16644,15625,15624,14637,0,14636,13681,13680,12757,12756,11865,11864,11005,11004,10177,10176,9381,9380,8617,8616,0,7885,7884,7185,7184,6517,6516,5881,5880,5277,5276,4705,4704,4163,4165,4167,0,4169,4171,4173,4175,4177,4179,4181,4183,4185,4187,4189,4191,4193,4195,4197,0,4199,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219,4221,4223,4225,4227,0,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,0,4259,4261,4263,4265,4267,4269,4271,4273,4275,4277,4279,4281,4283,4285,4287,0,4289,4291,4293,4295,4297,4850,4851,5438,5439,6058,6059,6710,6711,7394,7395,0,8110,8111,8858,8859,9638,9639,10450,10451,11294,11295,12170,12171,13078,13079,14018,0,14019,14990,14991,15994,15995,17030,17031,18098,18099,19198,19199, + 19895,19894,18779,18778,17695,17694,16643,16642,15623,15622,14635,1,14634,13679,13678,12755,12754,11863,11862,11003,11002,10175,10174,9379,9378,8615,8614,1,7883,7882,7183,7182,6515,6514,5879,5878,5275,5274,4703,4702,4162,4164,4166,1,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186,4188,4190,4192,4194,4196,1,4198,4200,4202,4204,4206,4208,4210,4212,4214,4216,4218,4220,4222,4224,4226,1,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256,1,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278,4280,4282,4284,4286,1,4288,4290,4292,4294,4296,4852,4853,5440,5441,6060,6061,6712,6713,7396,7397,1,8112,8113,8860,8861,9640,9641,10452,10453,11296,11297,12172,12173,13080,13081,14020,1,14021,14992,14993,15996,15997,17032,17033,18100,18101,19200,19201, + 19893,19892,18777,18776,17693,17692,16641,16640,15621,15620,14633,0,14632,13677,13676,12753,12752,11861,11860,11001,11000,10173,10172,9377,9376,8613,8612,0,7881,7880,7181,7180,6513,6512,5877,5876,5273,5272,4701,4700,4161,4160,3651,0,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,0,3683,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703,3705,3707,3709,3711,0,3713,3715,3717,3719,3721,3723,3725,3727,3729,3731,3733,3735,3737,3739,3741,0,3743,3745,3747,3749,3751,3753,3755,3757,3759,3761,3763,3765,3767,3769,3771,0,3773,3775,3777,4298,4299,4854,4855,5442,5443,6062,6063,6714,6715,7398,7399,0,8114,8115,8862,8863,9642,9643,10454,10455,11298,11299,12174,12175,13082,13083,14022,0,14023,14994,14995,15998,15999,17034,17035,18102,18103,19202,19203, + 19891,19890,18775,18774,17691,17690,16639,16638,15619,15618,14631,1,14630,13675,13674,12751,12750,11859,11858,10999,10998,10171,10170,9375,9374,8611,8610,1,7879,7878,7179,7178,6511,6510,5875,5874,5271,5270,4699,4698,4159,4158,3650,1,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680,1,3682,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3710,1,3712,3714,3716,3718,3720,3722,3724,3726,3728,3730,3732,3734,3736,3738,3740,1,3742,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,1,3772,3774,3776,4300,4301,4856,4857,5444,5445,6064,6065,6716,6717,7400,7401,1,8116,8117,8864,8865,9644,9645,10456,10457,11300,11301,12176,12177,13084,13085,14024,1,14025,14996,14997,16000,16001,17036,17037,18104,18105,19204,19205, + 19889,19888,18773,18772,17689,17688,16637,16636,15617,15616,14629,0,14628,13673,13672,12749,12748,11857,11856,10997,10996,10169,10168,9373,9372,8609,8608,0,7877,7876,7177,7176,6509,6508,5873,5872,5269,5268,4697,4696,4157,4156,3649,0,3648,3171,3173,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197,0,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,0,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,0,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,0,3289,3778,3779,4302,4303,4858,4859,5446,5447,6066,6067,6718,6719,7402,7403,0,8118,8119,8866,8867,9646,9647,10458,10459,11302,11303,12178,12179,13086,13087,14026,0,14027,14998,14999,16002,16003,17038,17039,18106,18107,19206,19207, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19887,19886,18771,18770,17687,17686,16635,16634,15615,15614,14627,0,14626,13671,13670,12747,12746,11855,11854,10995,10994,10167,10166,9371,9370,8607,8606,0,7875,7874,7175,7174,6507,6506,5871,5870,5267,5266,4695,4694,4155,4154,3647,0,3646,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,0,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,0,3228,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,0,3258,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,0,3288,3780,3781,4304,4305,4860,4861,5448,5449,6068,6069,6720,6721,7404,7405,0,8120,8121,8868,8869,9648,9649,10460,10461,11304,11305,12180,12181,13088,13089,14028,0,14029,15000,15001,16004,16005,17040,17041,18108,18109,19208,19209, + 19885,19884,18769,18768,17685,17684,16633,16632,15613,15612,14625,1,14624,13669,13668,12745,12744,11853,11852,10993,10992,10165,10164,9369,9368,8605,8604,1,7873,7872,7173,7172,6505,6504,5869,5868,5265,5264,4693,4692,4153,4152,3645,1,3644,3169,3168,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,1,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,1,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805,1,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,3290,1,3291,3782,3783,4306,4307,4862,4863,5450,5451,6070,6071,6722,6723,7406,7407,1,8122,8123,8870,8871,9650,9651,10462,10463,11306,11307,12182,12183,13090,13091,14030,1,14031,15002,15003,16006,16007,17042,17043,18110,18111,19210,19211, + 19883,19882,18767,18766,17683,17682,16631,16630,15611,15610,14623,0,14622,13667,13666,12743,12742,11851,11850,10991,10990,10163,10162,9367,9366,8603,8602,0,7871,7870,7171,7170,6503,6502,5867,5866,5263,5262,4691,4690,4151,4150,3643,0,3642,3167,3166,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,0,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,0,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,0,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,3292,0,3293,3784,3785,4308,4309,4864,4865,5452,5453,6072,6073,6724,6725,7408,7409,0,8124,8125,8872,8873,9652,9653,10464,10465,11308,11309,12184,12185,13092,13093,14032,0,14033,15004,15005,16008,16009,17044,17045,18112,18113,19212,19213, + 19881,19880,18765,18764,17681,17680,16629,16628,15609,15608,14621,1,14620,13665,13664,12741,12740,11849,11848,10989,10988,10161,10160,9365,9364,8601,8600,1,7869,7868,7169,7168,6501,6500,5865,5864,5261,5260,4689,4688,4149,4148,3641,1,3640,3165,3164,2721,2720,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,1,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,1,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,1,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2834,2835,3294,1,3295,3786,3787,4310,4311,4866,4867,5454,5455,6074,6075,6726,6727,7410,7411,1,8126,8127,8874,8875,9654,9655,10466,10467,11310,11311,12186,12187,13094,13095,14034,1,14035,15006,15007,16010,16011,17046,17047,18114,18115,19214,19215, + 19879,19878,18763,18762,17679,17678,16627,16626,15607,15606,14619,0,14618,13663,13662,12739,12738,11847,11846,10987,10986,10159,10158,9363,9362,8599,8598,0,7867,7866,7167,7166,6499,6498,5863,5862,5259,5258,4687,4686,4147,4146,3639,0,3638,3163,3162,2719,2718,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,0,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,0,2356,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,0,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2408,2836,2837,3296,0,3297,3788,3789,4312,4313,4868,4869,5456,5457,6076,6077,6728,6729,7412,7413,0,8128,8129,8876,8877,9656,9657,10468,10469,11312,11313,12188,12189,13096,13097,14036,0,14037,15008,15009,16012,16013,17048,17049,18116,18117,19216,19217, + 19877,19876,18761,18760,17677,17676,16625,16624,15605,15604,14617,1,14616,13661,13660,12737,12736,11845,11844,10985,10984,10157,10156,9361,9360,8597,8596,1,7865,7864,7165,7164,6497,6496,5861,5860,5257,5256,4685,4684,4145,4144,3637,1,3636,3161,3160,2717,2716,2305,2304,1923,1925,1927,1929,1931,1933,1935,1937,1,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2410,2411,2838,2839,3298,1,3299,3790,3791,4314,4315,4870,4871,5458,5459,6078,6079,6730,6731,7414,7415,1,8130,8131,8878,8879,9658,9659,10470,10471,11314,11315,12190,12191,13098,13099,14038,1,14039,15010,15011,16014,16015,17050,17051,18118,18119,19218,19219, + 19875,19874,18759,18758,17675,17674,16623,16622,15603,15602,14615,0,14614,13659,13658,12735,12734,11843,11842,10983,10982,10155,10154,9359,9358,8595,8594,0,7863,7862,7163,7162,6495,6494,5859,5858,5255,5254,4683,4682,4143,4142,3635,0,3634,3159,3158,2715,2714,2303,2302,1922,1924,1926,1928,1930,1932,1934,1936,0,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,0,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,0,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2412,2413,2840,2841,3300,0,3301,3792,3793,4316,4317,4872,4873,5460,5461,6080,6081,6732,6733,7416,7417,0,8132,8133,8880,8881,9660,9661,10472,10473,11316,11317,12192,12193,13100,13101,14040,0,14041,15012,15013,16016,16017,17052,17053,18120,18121,19220,19221, + 19873,19872,18757,18756,17673,17672,16621,16620,15601,15600,14613,1,14612,13657,13656,12733,12732,11841,11840,10981,10980,10153,10152,9357,9356,8593,8592,1,7861,7860,7161,7160,6493,6492,5857,5856,5253,5252,4681,4680,4141,4140,3633,1,3632,3157,3156,2713,2712,2301,2300,1921,1920,1571,1573,1575,1577,1579,1581,1,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611,1,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639,1641,1,1643,1645,1647,1649,1651,1653,1655,1657,2018,2019,2414,2415,2842,2843,3302,1,3303,3794,3795,4318,4319,4874,4875,5462,5463,6082,6083,6734,6735,7418,7419,1,8134,8135,8882,8883,9662,9663,10474,10475,11318,11319,12194,12195,13102,13103,14042,1,14043,15014,15015,16018,16019,17054,17055,18122,18123,19222,19223, + 19871,19870,18755,18754,17671,17670,16619,16618,15599,15598,14611,0,14610,13655,13654,12731,12730,11839,11838,10979,10978,10151,10150,9355,9354,8591,8590,0,7859,7858,7159,7158,6491,6490,5855,5854,5251,5250,4679,4678,4139,4138,3631,0,3630,3155,3154,2711,2710,2299,2298,1919,1918,1570,1572,1574,1576,1578,1580,0,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,0,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,0,1642,1644,1646,1648,1650,1652,1654,1656,2020,2021,2416,2417,2844,2845,3304,0,3305,3796,3797,4320,4321,4876,4877,5464,5465,6084,6085,6736,6737,7420,7421,0,8136,8137,8884,8885,9664,9665,10476,10477,11320,11321,12196,12197,13104,13105,14044,0,14045,15016,15017,16020,16021,17056,17057,18124,18125,19224,19225, + 19869,19868,18753,18752,17669,17668,16617,16616,15597,15596,14609,1,14608,13653,13652,12729,12728,11837,11836,10977,10976,10149,10148,9353,9352,8589,8588,1,7857,7856,7157,7156,6489,6488,5853,5852,5249,5248,4677,4676,4137,4136,3629,1,3628,3153,3152,2709,2708,2297,2296,1917,1916,1569,1568,1251,1253,1255,1257,1,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1,1319,1321,1323,1325,1327,1329,1658,1659,2022,2023,2418,2419,2846,2847,3306,1,3307,3798,3799,4322,4323,4878,4879,5466,5467,6086,6087,6738,6739,7422,7423,1,8138,8139,8886,8887,9666,9667,10478,10479,11322,11323,12198,12199,13106,13107,14046,1,14047,15018,15019,16022,16023,17058,17059,18126,18127,19226,19227, + 19867,19866,18751,18750,17667,17666,16615,16614,15595,15594,14607,0,14606,13651,13650,12727,12726,11835,11834,10975,10974,10147,10146,9351,9350,8587,8586,0,7855,7854,7155,7154,6487,6486,5851,5850,5247,5246,4675,4674,4135,4134,3627,0,3626,3151,3150,2707,2706,2295,2294,1915,1914,1567,1566,1250,1252,1254,1256,0,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,0,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,0,1318,1320,1322,1324,1326,1328,1660,1661,2024,2025,2420,2421,2848,2849,3308,0,3309,3800,3801,4324,4325,4880,4881,5468,5469,6088,6089,6740,6741,7424,7425,0,8140,8141,8888,8889,9668,9669,10480,10481,11324,11325,12200,12201,13108,13109,14048,0,14049,15020,15021,16024,16025,17060,17061,18128,18129,19228,19229, + 19865,19864,18749,18748,17665,17664,16613,16612,15593,15592,14605,1,14604,13649,13648,12725,12724,11833,11832,10973,10972,10145,10144,9349,9348,8585,8584,1,7853,7852,7153,7152,6485,6484,5849,5848,5245,5244,4673,4672,4133,4132,3625,1,3624,3149,3148,2705,2704,2293,2292,1913,1912,1565,1564,1249,1248,963,965,1,967,969,971,973,975,977,979,981,983,985,987,989,991,993,995,1,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1,1027,1029,1031,1033,1330,1331,1662,1663,2026,2027,2422,2423,2850,2851,3310,1,3311,3802,3803,4326,4327,4882,4883,5470,5471,6090,6091,6742,6743,7426,7427,1,8142,8143,8890,8891,9670,9671,10482,10483,11326,11327,12202,12203,13110,13111,14050,1,14051,15022,15023,16026,16027,17062,17063,18130,18131,19230,19231, + 19863,19862,18747,18746,17663,17662,16611,16610,15591,15590,14603,0,14602,13647,13646,12723,12722,11831,11830,10971,10970,10143,10142,9347,9346,8583,8582,0,7851,7850,7151,7150,6483,6482,5847,5846,5243,5242,4671,4670,4131,4130,3623,0,3622,3147,3146,2703,2702,2291,2290,1911,1910,1563,1562,1247,1246,962,964,0,966,968,970,972,974,976,978,980,982,984,986,988,990,992,994,0,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,0,1026,1028,1030,1032,1332,1333,1664,1665,2028,2029,2424,2425,2852,2853,3312,0,3313,3804,3805,4328,4329,4884,4885,5472,5473,6092,6093,6744,6745,7428,7429,0,8144,8145,8892,8893,9672,9673,10484,10485,11328,11329,12204,12205,13112,13113,14052,0,14053,15024,15025,16028,16029,17064,17065,18132,18133,19232,19233, + 19861,19860,18745,18744,17661,17660,16609,16608,15589,15588,14601,1,14600,13645,13644,12721,12720,11829,11828,10969,10968,10141,10140,9345,9344,8581,8580,1,7849,7848,7149,7148,6481,6480,5845,5844,5241,5240,4669,4668,4129,4128,3621,1,3620,3145,3144,2701,2700,2289,2288,1909,1908,1561,1560,1245,1244,961,960,1,707,709,711,713,715,717,719,721,723,725,727,729,731,733,735,1,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,1,767,769,1034,1035,1334,1335,1666,1667,2030,2031,2426,2427,2854,2855,3314,1,3315,3806,3807,4330,4331,4886,4887,5474,5475,6094,6095,6746,6747,7430,7431,1,8146,8147,8894,8895,9674,9675,10486,10487,11330,11331,12206,12207,13114,13115,14054,1,14055,15026,15027,16030,16031,17066,17067,18134,18135,19234,19235, + 19859,19858,18743,18742,17659,17658,16607,16606,15587,15586,14599,0,14598,13643,13642,12719,12718,11827,11826,10967,10966,10139,10138,9343,9342,8579,8578,0,7847,7846,7147,7146,6479,6478,5843,5842,5239,5238,4667,4666,4127,4126,3619,0,3618,3143,3142,2699,2698,2287,2286,1907,1906,1559,1558,1243,1242,959,958,0,706,708,710,712,714,716,718,720,722,724,726,728,730,732,734,0,736,738,740,742,744,746,748,750,752,754,756,758,760,762,764,0,766,768,1036,1037,1336,1337,1668,1669,2032,2033,2428,2429,2856,2857,3316,0,3317,3808,3809,4332,4333,4888,4889,5476,5477,6096,6097,6748,6749,7432,7433,0,8148,8149,8896,8897,9676,9677,10488,10489,11332,11333,12208,12209,13116,13117,14056,0,14057,15028,15029,16032,16033,17068,17069,18136,18137,19236,19237, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19857,19856,18741,18740,17657,17656,16605,16604,15585,15584,14597,0,14596,13641,13640,12717,12716,11825,11824,10965,10964,10137,10136,9341,9340,8577,8576,0,7845,7844,7145,7144,6477,6476,5841,5840,5237,5236,4665,4664,4125,4124,3617,0,3616,3141,3140,2697,2696,2285,2284,1905,1904,1557,1556,1241,1240,957,956,0,705,704,483,485,487,489,491,493,495,497,499,501,503,505,507,0,509,511,513,515,517,519,521,523,525,527,529,531,533,535,537,0,770,771,1038,1039,1338,1339,1670,1671,2034,2035,2430,2431,2858,2859,3318,0,3319,3810,3811,4334,4335,4890,4891,5478,5479,6098,6099,6750,6751,7434,7435,0,8150,8151,8898,8899,9678,9679,10490,10491,11334,11335,12210,12211,13118,13119,14058,0,14059,15030,15031,16034,16035,17070,17071,18138,18139,19238,19239, + 19855,19854,18739,18738,17655,17654,16603,16602,15583,15582,14595,1,14594,13639,13638,12715,12714,11823,11822,10963,10962,10135,10134,9339,9338,8575,8574,1,7843,7842,7143,7142,6475,6474,5839,5838,5235,5234,4663,4662,4123,4122,3615,1,3614,3139,3138,2695,2694,2283,2282,1903,1902,1555,1554,1239,1238,955,954,1,703,702,482,484,486,488,490,492,494,496,498,500,502,504,506,1,508,510,512,514,516,518,520,522,524,526,528,530,532,534,536,1,772,773,1040,1041,1340,1341,1672,1673,2036,2037,2432,2433,2860,2861,3320,1,3321,3812,3813,4336,4337,4892,4893,5480,5481,6100,6101,6752,6753,7436,7437,1,8152,8153,8900,8901,9680,9681,10492,10493,11336,11337,12212,12213,13120,13121,14060,1,14061,15032,15033,16036,16037,17072,17073,18140,18141,19240,19241, + 19853,19852,18737,18736,17653,17652,16601,16600,15581,15580,14593,0,14592,13637,13636,12713,12712,11821,11820,10961,10960,10133,10132,9337,9336,8573,8572,0,7841,7840,7141,7140,6473,6472,5837,5836,5233,5232,4661,4660,4121,4120,3613,0,3612,3137,3136,2693,2692,2281,2280,1901,1900,1553,1552,1237,1236,953,952,0,701,700,481,480,291,293,295,297,299,301,303,305,307,309,311,0,313,315,317,319,321,323,325,327,329,331,333,335,337,538,539,0,774,775,1042,1043,1342,1343,1674,1675,2038,2039,2434,2435,2862,2863,3322,0,3323,3814,3815,4338,4339,4894,4895,5482,5483,6102,6103,6754,6755,7438,7439,0,8154,8155,8902,8903,9682,9683,10494,10495,11338,11339,12214,12215,13122,13123,14062,0,14063,15034,15035,16038,16039,17074,17075,18142,18143,19242,19243, + 19851,19850,18735,18734,17651,17650,16599,16598,15579,15578,14591,1,14590,13635,13634,12711,12710,11819,11818,10959,10958,10131,10130,9335,9334,8571,8570,1,7839,7838,7139,7138,6471,6470,5835,5834,5231,5230,4659,4658,4119,4118,3611,1,3610,3135,3134,2691,2690,2279,2278,1899,1898,1551,1550,1235,1234,951,950,1,699,698,479,478,290,292,294,296,298,300,302,304,306,308,310,1,312,314,316,318,320,322,324,326,328,330,332,334,336,540,541,1,776,777,1044,1045,1344,1345,1676,1677,2040,2041,2436,2437,2864,2865,3324,1,3325,3816,3817,4340,4341,4896,4897,5484,5485,6104,6105,6756,6757,7440,7441,1,8156,8157,8904,8905,9684,9685,10496,10497,11340,11341,12216,12217,13124,13125,14064,1,14065,15036,15037,16040,16041,17076,17077,18144,18145,19244,19245, + 19849,19848,18733,18732,17649,17648,16597,16596,15577,15576,14589,0,14588,13633,13632,12709,12708,11817,11816,10957,10956,10129,10128,9333,9332,8569,8568,0,7837,7836,7137,7136,6469,6468,5833,5832,5229,5228,4657,4656,4117,4116,3609,0,3608,3133,3132,2689,2688,2277,2276,1897,1896,1549,1548,1233,1232,949,948,0,697,696,477,476,289,288,131,133,135,137,139,141,143,145,147,0,149,151,153,155,157,159,161,163,165,167,169,338,339,542,543,0,778,779,1046,1047,1346,1347,1678,1679,2042,2043,2438,2439,2866,2867,3326,0,3327,3818,3819,4342,4343,4898,4899,5486,5487,6106,6107,6758,6759,7442,7443,0,8158,8159,8906,8907,9686,9687,10498,10499,11342,11343,12218,12219,13126,13127,14066,0,14067,15038,15039,16042,16043,17078,17079,18146,18147,19246,19247, + 19847,19846,18731,18730,17647,17646,16595,16594,15575,15574,14587,1,14586,13631,13630,12707,12706,11815,11814,10955,10954,10127,10126,9331,9330,8567,8566,1,7835,7834,7135,7134,6467,6466,5831,5830,5227,5226,4655,4654,4115,4114,3607,1,3606,3131,3130,2687,2686,2275,2274,1895,1894,1547,1546,1231,1230,947,946,1,695,694,475,474,287,286,130,132,134,136,138,140,142,144,146,1,148,150,152,154,156,158,160,162,164,166,168,340,341,544,545,1,780,781,1048,1049,1348,1349,1680,1681,2044,2045,2440,2441,2868,2869,3328,1,3329,3820,3821,4344,4345,4900,4901,5488,5489,6108,6109,6760,6761,7444,7445,1,8160,8161,8908,8909,9688,9689,10500,10501,11344,11345,12220,12221,13128,13129,14068,1,14069,15040,15041,16044,16045,17080,17081,18148,18149,19248,19249, + 19845,19844,18729,18728,17645,17644,16593,16592,15573,15572,14585,0,14584,13629,13628,12705,12704,11813,11812,10953,10952,10125,10124,9329,9328,8565,8564,0,7833,7832,7133,7132,6465,6464,5829,5828,5225,5224,4653,4652,4113,4112,3605,0,3604,3129,3128,2685,2684,2273,2272,1893,1892,1545,1544,1229,1228,945,944,0,693,692,473,472,285,284,129,128,3,5,7,9,11,13,15,0,17,19,21,23,25,27,29,31,33,170,171,342,343,546,547,0,782,783,1050,1051,1350,1351,1682,1683,2046,2047,2442,2443,2870,2871,3330,0,3331,3822,3823,4346,4347,4902,4903,5490,5491,6110,6111,6762,6763,7446,7447,0,8162,8163,8910,8911,9690,9691,10502,10503,11346,11347,12222,12223,13130,13131,14070,0,14071,15042,15043,16046,16047,17082,17083,18150,18151,19250,19251, + 19843,19842,18727,18726,17643,17642,16591,16590,15571,15570,14583,1,14582,13627,13626,12703,12702,11811,11810,10951,10950,10123,10122,9327,9326,8563,8562,1,7831,7830,7131,7130,6463,6462,5827,5826,5223,5222,4651,4650,4111,4110,3603,1,3602,3127,3126,2683,2682,2271,2270,1891,1890,1543,1542,1227,1226,943,942,1,691,690,471,470,283,282,127,126,2,4,6,8,10,12,14,1,16,18,20,22,24,26,28,30,32,172,173,344,345,548,549,1,784,785,1052,1053,1352,1353,1684,1685,2048,2049,2444,2445,2872,2873,3332,1,3333,3824,3825,4348,4349,4904,4905,5492,5493,6112,6113,6764,6765,7448,7449,1,8164,8165,8912,8913,9692,9693,10504,10505,11348,11349,12224,12225,13132,13133,14072,1,14073,15044,15045,16048,16049,17084,17085,18152,18153,19252,19253, + 19841,19840,18725,18724,17641,17640,16589,16588,15569,15568,14581,0,14580,13625,13624,12701,12700,11809,11808,10949,10948,10121,10120,9325,9324,8561,8560,0,7829,7828,7129,7128,6461,6460,5825,5824,5221,5220,4649,4648,4109,4108,3601,0,3600,3125,3124,2681,2680,2269,2268,1889,1888,1541,1540,1225,1224,941,940,0,689,688,469,468,281,280,125,124,1,1,20000,20001,20002,20003,20004,0,20005,20006,20007,20008,20009,0,1,34,35,174,175,346,347,550,551,0,786,787,1054,1055,1354,1355,1686,1687,2050,2051,2446,2447,2874,2875,3334,0,3335,3826,3827,4350,4351,4906,4907,5494,5495,6114,6115,6766,6767,7450,7451,0,8166,8167,8914,8915,9694,9695,10506,10507,11350,11351,12226,12227,13134,13135,14074,0,14075,15046,15047,16050,16051,17086,17087,18154,18155,19254,19255, + 19839,19838,18723,18722,17639,17638,16587,16586,15567,15566,14579,1,14578,13623,13622,12699,12698,11807,11806,10947,10946,10119,10118,9323,9322,8559,8558,1,7827,7826,7127,7126,6459,6458,5823,5822,5219,5218,4647,4646,4107,4106,3599,1,3598,3123,3122,2679,2678,2267,2266,1887,1886,1539,1538,1223,1222,939,938,1,687,686,467,466,279,278,123,122,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,36,37,176,177,348,349,552,553,1,788,789,1056,1057,1356,1357,1688,1689,2052,2053,2448,2449,2876,2877,3336,1,3337,3828,3829,4352,4353,4908,4909,5496,5497,6116,6117,6768,6769,7452,7453,1,8168,8169,8916,8917,9696,9697,10508,10509,11352,11353,12228,12229,13136,13137,14076,1,14077,15048,15049,16052,16053,17088,17089,18156,18157,19256,19257, + 19837,19836,18721,18720,17637,17636,16585,16584,15565,15564,14577,0,14576,13621,13620,12697,12696,11805,11804,10945,10944,10117,10116,9321,9320,8557,8556,0,7825,7824,7125,7124,6457,6456,5821,5820,5217,5216,4645,4644,4105,4104,3597,0,3596,3121,3120,2677,2676,2265,2264,1885,1884,1537,1536,1221,1220,937,936,0,685,684,465,464,277,276,121,120,20039,1,0,0,0,0,0,0,0,0,0,0,0,1,20010,38,39,178,179,350,351,554,555,0,790,791,1058,1059,1358,1359,1690,1691,2054,2055,2450,2451,2878,2879,3338,0,3339,3830,3831,4354,4355,4910,4911,5498,5499,6118,6119,6770,6771,7454,7455,0,8170,8171,8918,8919,9698,9699,10510,10511,11354,11355,12230,12231,13138,13139,14078,0,14079,15050,15051,16054,16055,17090,17091,18158,18159,19258,19259, + 19835,19834,18719,18718,17635,17634,16583,16582,15563,15562,14575,1,14574,13619,13618,12695,12694,11803,11802,10943,10942,10115,10114,9319,9318,8555,8554,1,7823,7822,7123,7122,6455,6454,5819,5818,5215,5214,4643,4642,4103,4102,3595,1,3594,3119,3118,2675,2674,2263,2262,1883,1882,1535,1534,1219,1218,935,934,1,683,682,463,462,275,274,119,118,20038,1,0,1,1,1,1,1,1,1,1,1,0,1,20011,40,41,180,181,352,353,556,557,1,792,793,1060,1061,1360,1361,1692,1693,2056,2057,2452,2453,2880,2881,3340,1,3341,3832,3833,4356,4357,4912,4913,5500,5501,6120,6121,6772,6773,7456,7457,1,8172,8173,8920,8921,9700,9701,10512,10513,11356,11357,12232,12233,13140,13141,14080,1,14081,15052,15053,16056,16057,17092,17093,18160,18161,19260,19261, + 19833,19832,18717,18716,17633,17632,16581,16580,15561,15560,14573,0,14572,13617,13616,12693,12692,11801,11800,10941,10940,10113,10112,9317,9316,8553,8552,0,7821,7820,7121,7120,6453,6452,5817,5816,5213,5212,4641,4640,4101,4100,3593,0,3592,3117,3116,2673,2672,2261,2260,1881,1880,1533,1532,1217,1216,933,932,0,681,680,461,460,273,272,117,116,20037,1,0,1,0,0,0,0,0,0,0,1,0,1,20012,42,43,182,183,354,355,558,559,0,794,795,1062,1063,1362,1363,1694,1695,2058,2059,2454,2455,2882,2883,3342,0,3343,3834,3835,4358,4359,4914,4915,5502,5503,6122,6123,6774,6775,7458,7459,0,8174,8175,8922,8923,9702,9703,10514,10515,11358,11359,12234,12235,13142,13143,14082,0,14083,15054,15055,16058,16059,17094,17095,18162,18163,19262,19263, + 19831,19830,18715,18714,17631,17630,16579,16578,15559,15558,14571,1,14570,13615,13614,12691,12690,11799,11798,10939,10938,10111,10110,9315,9314,8551,8550,1,7819,7818,7119,7118,6451,6450,5815,5814,5211,5210,4639,4638,4099,4098,3591,1,3590,3115,3114,2671,2670,2259,2258,1879,1878,1531,1530,1215,1214,931,930,1,679,678,459,458,271,270,115,114,20036,1,0,1,0,1,1,1,1,1,0,1,0,1,20013,44,45,184,185,356,357,560,561,1,796,797,1064,1065,1364,1365,1696,1697,2060,2061,2456,2457,2884,2885,3344,1,3345,3836,3837,4360,4361,4916,4917,5504,5505,6124,6125,6776,6777,7460,7461,1,8176,8177,8924,8925,9704,9705,10516,10517,11360,11361,12236,12237,13144,13145,14084,1,14085,15056,15057,16060,16061,17096,17097,18164,18165,19264,19265, + 19829,19828,18713,18712,17629,17628,16577,16576,15557,15556,14569,0,14568,13613,13612,12689,12688,11797,11796,10937,10936,10109,10108,9313,9312,8549,8548,0,7817,7816,7117,7116,6449,6448,5813,5812,5209,5208,4637,4636,4097,4096,3589,0,3588,3113,3112,2669,2668,2257,2256,1877,1876,1529,1528,1213,1212,929,928,0,677,676,457,456,269,268,113,112,20035,1,0,1,0,1,0,0,0,1,0,1,0,1,20014,46,47,186,187,358,359,562,563,0,798,799,1066,1067,1366,1367,1698,1699,2062,2063,2458,2459,2886,2887,3346,0,3347,3838,3839,4362,4363,4918,4919,5506,5507,6126,6127,6778,6779,7462,7463,0,8178,8179,8926,8927,9706,9707,10518,10519,11362,11363,12238,12239,13146,13147,14086,0,14087,15058,15059,16062,16063,17098,17099,18166,18167,19266,19267, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19827,19826,18711,18710,17627,17626,16575,16574,15555,15554,14567,0,14566,13611,13610,12687,12686,11795,11794,10935,10934,10107,10106,9311,9310,8547,8546,0,7815,7814,7115,7114,6447,6446,5811,5810,5207,5206,4635,4634,4095,4094,3587,0,3586,3111,3110,2667,2666,2255,2254,1875,1874,1527,1526,1211,1210,927,926,0,675,674,455,454,267,266,111,110,20034,1,0,1,0,1,0,0,0,1,0,1,0,1,20015,48,49,188,189,360,361,564,565,0,800,801,1068,1069,1368,1369,1700,1701,2064,2065,2460,2461,2888,2889,3348,0,3349,3840,3841,4364,4365,4920,4921,5508,5509,6128,6129,6780,6781,7464,7465,0,8180,8181,8928,8929,9708,9709,10520,10521,11364,11365,12240,12241,13148,13149,14088,0,14089,15060,15061,16064,16065,17100,17101,18168,18169,19268,19269, + 19825,19824,18709,18708,17625,17624,16573,16572,15553,15552,14565,1,14564,13609,13608,12685,12684,11793,11792,10933,10932,10105,10104,9309,9308,8545,8544,1,7813,7812,7113,7112,6445,6444,5809,5808,5205,5204,4633,4632,4093,4092,3585,1,3584,3109,3108,2665,2664,2253,2252,1873,1872,1525,1524,1209,1208,925,924,1,673,672,453,452,265,264,109,108,20033,1,0,1,0,1,1,1,1,1,0,1,0,1,20016,50,51,190,191,362,363,566,567,1,802,803,1070,1071,1370,1371,1702,1703,2066,2067,2462,2463,2890,2891,3350,1,3351,3842,3843,4366,4367,4922,4923,5510,5511,6130,6131,6782,6783,7466,7467,1,8182,8183,8930,8931,9710,9711,10522,10523,11366,11367,12242,12243,13150,13151,14090,1,14091,15062,15063,16066,16067,17102,17103,18170,18171,19270,19271, + 19823,19822,18707,18706,17623,17622,16571,16570,15551,15550,14563,0,14562,13607,13606,12683,12682,11791,11790,10931,10930,10103,10102,9307,9306,8543,8542,0,7811,7810,7111,7110,6443,6442,5807,5806,5203,5202,4631,4630,4091,4090,3583,0,3582,3107,3106,2663,2662,2251,2250,1871,1870,1523,1522,1207,1206,923,922,0,671,670,451,450,263,262,107,106,20032,1,0,1,0,0,0,0,0,0,0,1,0,1,20017,52,53,192,193,364,365,568,569,0,804,805,1072,1073,1372,1373,1704,1705,2068,2069,2464,2465,2892,2893,3352,0,3353,3844,3845,4368,4369,4924,4925,5512,5513,6132,6133,6784,6785,7468,7469,0,8184,8185,8932,8933,9712,9713,10524,10525,11368,11369,12244,12245,13152,13153,14092,0,14093,15064,15065,16068,16069,17104,17105,18172,18173,19272,19273, + 19821,19820,18705,18704,17621,17620,16569,16568,15549,15548,14561,1,14560,13605,13604,12681,12680,11789,11788,10929,10928,10101,10100,9305,9304,8541,8540,1,7809,7808,7109,7108,6441,6440,5805,5804,5201,5200,4629,4628,4089,4088,3581,1,3580,3105,3104,2661,2660,2249,2248,1869,1868,1521,1520,1205,1204,921,920,1,669,668,449,448,261,260,105,104,20031,1,0,1,1,1,1,1,1,1,1,1,0,1,20018,54,55,194,195,366,367,570,571,1,806,807,1074,1075,1374,1375,1706,1707,2070,2071,2466,2467,2894,2895,3354,1,3355,3846,3847,4370,4371,4926,4927,5514,5515,6134,6135,6786,6787,7470,7471,1,8186,8187,8934,8935,9714,9715,10526,10527,11370,11371,12246,12247,13154,13155,14094,1,14095,15066,15067,16070,16071,17106,17107,18174,18175,19274,19275, + 19819,19818,18703,18702,17619,17618,16567,16566,15547,15546,14559,0,14558,13603,13602,12679,12678,11787,11786,10927,10926,10099,10098,9303,9302,8539,8538,0,7807,7806,7107,7106,6439,6438,5803,5802,5199,5198,4627,4626,4087,4086,3579,0,3578,3103,3102,2659,2658,2247,2246,1867,1866,1519,1518,1203,1202,919,918,0,667,666,447,446,259,258,103,102,20030,1,0,0,0,0,0,0,0,0,0,0,0,1,20019,56,57,196,197,368,369,572,573,0,808,809,1076,1077,1376,1377,1708,1709,2072,2073,2468,2469,2896,2897,3356,0,3357,3848,3849,4372,4373,4928,4929,5516,5517,6136,6137,6788,6789,7472,7473,0,8188,8189,8936,8937,9716,9717,10528,10529,11372,11373,12248,12249,13156,13157,14096,0,14097,15068,15069,16072,16073,17108,17109,18176,18177,19276,19277, + 19817,19816,18701,18700,17617,17616,16565,16564,15545,15544,14557,1,14556,13601,13600,12677,12676,11785,11784,10925,10924,10097,10096,9301,9300,8537,8536,1,7805,7804,7105,7104,6437,6436,5801,5800,5197,5196,4625,4624,4085,4084,3577,1,3576,3101,3100,2657,2656,2245,2244,1865,1864,1517,1516,1201,1200,917,916,1,665,664,445,444,257,256,101,100,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,58,59,198,199,370,371,574,575,1,810,811,1078,1079,1378,1379,1710,1711,2074,2075,2470,2471,2898,2899,3358,1,3359,3850,3851,4374,4375,4930,4931,5518,5519,6138,6139,6790,6791,7474,7475,1,8190,8191,8938,8939,9718,9719,10530,10531,11374,11375,12250,12251,13158,13159,14098,1,14099,15070,15071,16074,16075,17110,17111,18178,18179,19278,19279, + 19815,19814,18699,18698,17615,17614,16563,16562,15543,15542,14555,0,14554,13599,13598,12675,12674,11783,11782,10923,10922,10095,10094,9299,9298,8535,8534,0,7803,7802,7103,7102,6435,6434,5799,5798,5195,5194,4623,4622,4083,4082,3575,0,3574,3099,3098,2655,2654,2243,2242,1863,1862,1515,1514,1199,1198,915,914,0,663,662,443,442,255,254,99,98,0,0,20029,20028,20027,20026,20025,0,20024,20023,20022,20021,20020,0,0,60,61,200,201,372,373,576,577,0,812,813,1080,1081,1380,1381,1712,1713,2076,2077,2472,2473,2900,2901,3360,0,3361,3852,3853,4376,4377,4932,4933,5520,5521,6140,6141,6792,6793,7476,7477,0,8192,8193,8940,8941,9720,9721,10532,10533,11376,11377,12252,12253,13160,13161,14100,0,14101,15072,15073,16076,16077,17112,17113,18180,18181,19280,19281, + 19813,19812,18697,18696,17613,17612,16561,16560,15541,15540,14553,1,14552,13597,13596,12673,12672,11781,11780,10921,10920,10093,10092,9297,9296,8533,8532,1,7801,7800,7101,7100,6433,6432,5797,5796,5193,5192,4621,4620,4081,4080,3573,1,3572,3097,3096,2653,2652,2241,2240,1861,1860,1513,1512,1197,1196,913,912,1,661,660,441,440,253,252,96,94,92,90,88,86,84,82,80,1,78,76,74,72,70,68,66,62,63,202,203,374,375,578,579,1,814,815,1082,1083,1382,1383,1714,1715,2078,2079,2474,2475,2902,2903,3362,1,3363,3854,3855,4378,4379,4934,4935,5522,5523,6142,6143,6794,6795,7478,7479,1,8194,8195,8942,8943,9722,9723,10534,10535,11378,11379,12254,12255,13162,13163,14102,1,14103,15074,15075,16078,16079,17114,17115,18182,18183,19282,19283, + 19811,19810,18695,18694,17611,17610,16559,16558,15539,15538,14551,0,14550,13595,13594,12671,12670,11779,11778,10919,10918,10091,10090,9295,9294,8531,8530,0,7799,7798,7099,7098,6431,6430,5795,5794,5191,5190,4619,4618,4079,4078,3571,0,3570,3095,3094,2651,2650,2239,2238,1859,1858,1511,1510,1195,1194,911,910,0,659,658,439,438,251,250,97,95,93,91,89,87,85,83,81,0,79,77,75,73,71,69,67,64,65,204,205,376,377,580,581,0,816,817,1084,1085,1384,1385,1716,1717,2080,2081,2476,2477,2904,2905,3364,0,3365,3856,3857,4380,4381,4936,4937,5524,5525,6144,6145,6796,6797,7480,7481,0,8196,8197,8944,8945,9724,9725,10536,10537,11380,11381,12256,12257,13164,13165,14104,0,14105,15076,15077,16080,16081,17116,17117,18184,18185,19284,19285, + 19809,19808,18693,18692,17609,17608,16557,16556,15537,15536,14549,1,14548,13593,13592,12669,12668,11777,11776,10917,10916,10089,10088,9293,9292,8529,8528,1,7797,7796,7097,7096,6429,6428,5793,5792,5189,5188,4617,4616,4077,4076,3569,1,3568,3093,3092,2649,2648,2237,2236,1857,1856,1509,1508,1193,1192,909,908,1,657,656,437,436,248,246,244,242,240,238,236,234,232,230,228,1,226,224,222,220,218,216,214,212,210,206,207,378,379,582,583,1,818,819,1086,1087,1386,1387,1718,1719,2082,2083,2478,2479,2906,2907,3366,1,3367,3858,3859,4382,4383,4938,4939,5526,5527,6146,6147,6798,6799,7482,7483,1,8198,8199,8946,8947,9726,9727,10538,10539,11382,11383,12258,12259,13166,13167,14106,1,14107,15078,15079,16082,16083,17118,17119,18186,18187,19286,19287, + 19807,19806,18691,18690,17607,17606,16555,16554,15535,15534,14547,0,14546,13591,13590,12667,12666,11775,11774,10915,10914,10087,10086,9291,9290,8527,8526,0,7795,7794,7095,7094,6427,6426,5791,5790,5187,5186,4615,4614,4075,4074,3567,0,3566,3091,3090,2647,2646,2235,2234,1855,1854,1507,1506,1191,1190,907,906,0,655,654,435,434,249,247,245,243,241,239,237,235,233,231,229,0,227,225,223,221,219,217,215,213,211,208,209,380,381,584,585,0,820,821,1088,1089,1388,1389,1720,1721,2084,2085,2480,2481,2908,2909,3368,0,3369,3860,3861,4384,4385,4940,4941,5528,5529,6148,6149,6800,6801,7484,7485,0,8200,8201,8948,8949,9728,9729,10540,10541,11384,11385,12260,12261,13168,13169,14108,0,14109,15080,15081,16084,16085,17120,17121,18188,18189,19288,19289, + 19805,19804,18689,18688,17605,17604,16553,16552,15533,15532,14545,1,14544,13589,13588,12665,12664,11773,11772,10913,10912,10085,10084,9289,9288,8525,8524,1,7793,7792,7093,7092,6425,6424,5789,5788,5185,5184,4613,4612,4073,4072,3565,1,3564,3089,3088,2645,2644,2233,2232,1853,1852,1505,1504,1189,1188,905,904,1,653,652,432,430,428,426,424,422,420,418,416,414,412,410,408,1,406,404,402,400,398,396,394,392,390,388,386,382,383,586,587,1,822,823,1090,1091,1390,1391,1722,1723,2086,2087,2482,2483,2910,2911,3370,1,3371,3862,3863,4386,4387,4942,4943,5530,5531,6150,6151,6802,6803,7486,7487,1,8202,8203,8950,8951,9730,9731,10542,10543,11386,11387,12262,12263,13170,13171,14110,1,14111,15082,15083,16086,16087,17122,17123,18190,18191,19290,19291, + 19803,19802,18687,18686,17603,17602,16551,16550,15531,15530,14543,0,14542,13587,13586,12663,12662,11771,11770,10911,10910,10083,10082,9287,9286,8523,8522,0,7791,7790,7091,7090,6423,6422,5787,5786,5183,5182,4611,4610,4071,4070,3563,0,3562,3087,3086,2643,2642,2231,2230,1851,1850,1503,1502,1187,1186,903,902,0,651,650,433,431,429,427,425,423,421,419,417,415,413,411,409,0,407,405,403,401,399,397,395,393,391,389,387,384,385,588,589,0,824,825,1092,1093,1392,1393,1724,1725,2088,2089,2484,2485,2912,2913,3372,0,3373,3864,3865,4388,4389,4944,4945,5532,5533,6152,6153,6804,6805,7488,7489,0,8204,8205,8952,8953,9732,9733,10544,10545,11388,11389,12264,12265,13172,13173,14112,0,14113,15084,15085,16088,16089,17124,17125,18192,18193,19292,19293, + 19801,19800,18685,18684,17601,17600,16549,16548,15529,15528,14541,1,14540,13585,13584,12661,12660,11769,11768,10909,10908,10081,10080,9285,9284,8521,8520,1,7789,7788,7089,7088,6421,6420,5785,5784,5181,5180,4609,4608,4069,4068,3561,1,3560,3085,3084,2641,2640,2229,2228,1849,1848,1501,1500,1185,1184,901,900,1,648,646,644,642,640,638,636,634,632,630,628,626,624,622,620,1,618,616,614,612,610,608,606,604,602,600,598,596,594,590,591,1,826,827,1094,1095,1394,1395,1726,1727,2090,2091,2486,2487,2914,2915,3374,1,3375,3866,3867,4390,4391,4946,4947,5534,5535,6154,6155,6806,6807,7490,7491,1,8206,8207,8954,8955,9734,9735,10546,10547,11390,11391,12266,12267,13174,13175,14114,1,14115,15086,15087,16090,16091,17126,17127,18194,18195,19294,19295, + 19799,19798,18683,18682,17599,17598,16547,16546,15527,15526,14539,0,14538,13583,13582,12659,12658,11767,11766,10907,10906,10079,10078,9283,9282,8519,8518,0,7787,7786,7087,7086,6419,6418,5783,5782,5179,5178,4607,4606,4067,4066,3559,0,3558,3083,3082,2639,2638,2227,2226,1847,1846,1499,1498,1183,1182,899,898,0,649,647,645,643,641,639,637,635,633,631,629,627,625,623,621,0,619,617,615,613,611,609,607,605,603,601,599,597,595,592,593,0,828,829,1096,1097,1396,1397,1728,1729,2092,2093,2488,2489,2916,2917,3376,0,3377,3868,3869,4392,4393,4948,4949,5536,5537,6156,6157,6808,6809,7492,7493,0,8208,8209,8956,8957,9736,9737,10548,10549,11392,11393,12268,12269,13176,13177,14116,0,14117,15088,15089,16092,16093,17128,17129,18196,18197,19296,19297, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19797,19796,18681,18680,17597,17596,16545,16544,15525,15524,14537,0,14536,13581,13580,12657,12656,11765,11764,10905,10904,10077,10076,9281,9280,8517,8516,0,7785,7784,7085,7084,6417,6416,5781,5780,5177,5176,4605,4604,4065,4064,3557,0,3556,3081,3080,2637,2636,2225,2224,1845,1844,1497,1496,1181,1180,896,894,0,892,890,888,886,884,882,880,878,876,874,872,870,868,866,864,0,862,860,858,856,854,852,850,848,846,844,842,840,838,836,834,0,830,831,1098,1099,1398,1399,1730,1731,2094,2095,2490,2491,2918,2919,3378,0,3379,3870,3871,4394,4395,4950,4951,5538,5539,6158,6159,6810,6811,7494,7495,0,8210,8211,8958,8959,9738,9739,10550,10551,11394,11395,12270,12271,13178,13179,14118,0,14119,15090,15091,16094,16095,17130,17131,18198,18199,19298,19299, + 19795,19794,18679,18678,17595,17594,16543,16542,15523,15522,14535,1,14534,13579,13578,12655,12654,11763,11762,10903,10902,10075,10074,9279,9278,8515,8514,1,7783,7782,7083,7082,6415,6414,5779,5778,5175,5174,4603,4602,4063,4062,3555,1,3554,3079,3078,2635,2634,2223,2222,1843,1842,1495,1494,1179,1178,897,895,1,893,891,889,887,885,883,881,879,877,875,873,871,869,867,865,1,863,861,859,857,855,853,851,849,847,845,843,841,839,837,835,1,832,833,1100,1101,1400,1401,1732,1733,2096,2097,2492,2493,2920,2921,3380,1,3381,3872,3873,4396,4397,4952,4953,5540,5541,6160,6161,6812,6813,7496,7497,1,8212,8213,8960,8961,9740,9741,10552,10553,11396,11397,12272,12273,13180,13181,14120,1,14121,15092,15093,16096,16097,17132,17133,18200,18201,19300,19301, + 19793,19792,18677,18676,17593,17592,16541,16540,15521,15520,14533,0,14532,13577,13576,12653,12652,11761,11760,10901,10900,10073,10072,9277,9276,8513,8512,0,7781,7780,7081,7080,6413,6412,5777,5776,5173,5172,4601,4600,4061,4060,3553,0,3552,3077,3076,2633,2632,2221,2220,1841,1840,1493,1492,1176,1174,1172,1170,0,1168,1166,1164,1162,1160,1158,1156,1154,1152,1150,1148,1146,1144,1142,1140,0,1138,1136,1134,1132,1130,1128,1126,1124,1122,1120,1118,1116,1114,1112,1110,0,1108,1106,1102,1103,1402,1403,1734,1735,2098,2099,2494,2495,2922,2923,3382,0,3383,3874,3875,4398,4399,4954,4955,5542,5543,6162,6163,6814,6815,7498,7499,0,8214,8215,8962,8963,9742,9743,10554,10555,11398,11399,12274,12275,13182,13183,14122,0,14123,15094,15095,16098,16099,17134,17135,18202,18203,19302,19303, + 19791,19790,18675,18674,17591,17590,16539,16538,15519,15518,14531,1,14530,13575,13574,12651,12650,11759,11758,10899,10898,10071,10070,9275,9274,8511,8510,1,7779,7778,7079,7078,6411,6410,5775,5774,5171,5170,4599,4598,4059,4058,3551,1,3550,3075,3074,2631,2630,2219,2218,1839,1838,1491,1490,1177,1175,1173,1171,1,1169,1167,1165,1163,1161,1159,1157,1155,1153,1151,1149,1147,1145,1143,1141,1,1139,1137,1135,1133,1131,1129,1127,1125,1123,1121,1119,1117,1115,1113,1111,1,1109,1107,1104,1105,1404,1405,1736,1737,2100,2101,2496,2497,2924,2925,3384,1,3385,3876,3877,4400,4401,4956,4957,5544,5545,6164,6165,6816,6817,7500,7501,1,8216,8217,8964,8965,9744,9745,10556,10557,11400,11401,12276,12277,13184,13185,14124,1,14125,15096,15097,16100,16101,17136,17137,18204,18205,19304,19305, + 19789,19788,18673,18672,17589,17588,16537,16536,15517,15516,14529,0,14528,13573,13572,12649,12648,11757,11756,10897,10896,10069,10068,9273,9272,8509,8508,0,7777,7776,7077,7076,6409,6408,5773,5772,5169,5168,4597,4596,4057,4056,3549,0,3548,3073,3072,2629,2628,2217,2216,1837,1836,1488,1486,1484,1482,1480,1478,0,1476,1474,1472,1470,1468,1466,1464,1462,1460,1458,1456,1454,1452,1450,1448,0,1446,1444,1442,1440,1438,1436,1434,1432,1430,1428,1426,1424,1422,1420,1418,0,1416,1414,1412,1410,1406,1407,1738,1739,2102,2103,2498,2499,2926,2927,3386,0,3387,3878,3879,4402,4403,4958,4959,5546,5547,6166,6167,6818,6819,7502,7503,0,8218,8219,8966,8967,9746,9747,10558,10559,11402,11403,12278,12279,13186,13187,14126,0,14127,15098,15099,16102,16103,17138,17139,18206,18207,19306,19307, + 19787,19786,18671,18670,17587,17586,16535,16534,15515,15514,14527,1,14526,13571,13570,12647,12646,11755,11754,10895,10894,10067,10066,9271,9270,8507,8506,1,7775,7774,7075,7074,6407,6406,5771,5770,5167,5166,4595,4594,4055,4054,3547,1,3546,3071,3070,2627,2626,2215,2214,1835,1834,1489,1487,1485,1483,1481,1479,1,1477,1475,1473,1471,1469,1467,1465,1463,1461,1459,1457,1455,1453,1451,1449,1,1447,1445,1443,1441,1439,1437,1435,1433,1431,1429,1427,1425,1423,1421,1419,1,1417,1415,1413,1411,1408,1409,1740,1741,2104,2105,2500,2501,2928,2929,3388,1,3389,3880,3881,4404,4405,4960,4961,5548,5549,6168,6169,6820,6821,7504,7505,1,8220,8221,8968,8969,9748,9749,10560,10561,11404,11405,12280,12281,13188,13189,14128,1,14129,15100,15101,16104,16105,17140,17141,18208,18209,19308,19309, + 19785,19784,18669,18668,17585,17584,16533,16532,15513,15512,14525,0,14524,13569,13568,12645,12644,11753,11752,10893,10892,10065,10064,9269,9268,8505,8504,0,7773,7772,7073,7072,6405,6404,5769,5768,5165,5164,4593,4592,4053,4052,3545,0,3544,3069,3068,2625,2624,2213,2212,1832,1830,1828,1826,1824,1822,1820,1818,0,1816,1814,1812,1810,1808,1806,1804,1802,1800,1798,1796,1794,1792,1790,1788,0,1786,1784,1782,1780,1778,1776,1774,1772,1770,1768,1766,1764,1762,1760,1758,0,1756,1754,1752,1750,1748,1746,1742,1743,2106,2107,2502,2503,2930,2931,3390,0,3391,3882,3883,4406,4407,4962,4963,5550,5551,6170,6171,6822,6823,7506,7507,0,8222,8223,8970,8971,9750,9751,10562,10563,11406,11407,12282,12283,13190,13191,14130,0,14131,15102,15103,16106,16107,17142,17143,18210,18211,19310,19311, + 19783,19782,18667,18666,17583,17582,16531,16530,15511,15510,14523,1,14522,13567,13566,12643,12642,11751,11750,10891,10890,10063,10062,9267,9266,8503,8502,1,7771,7770,7071,7070,6403,6402,5767,5766,5163,5162,4591,4590,4051,4050,3543,1,3542,3067,3066,2623,2622,2211,2210,1833,1831,1829,1827,1825,1823,1821,1819,1,1817,1815,1813,1811,1809,1807,1805,1803,1801,1799,1797,1795,1793,1791,1789,1,1787,1785,1783,1781,1779,1777,1775,1773,1771,1769,1767,1765,1763,1761,1759,1,1757,1755,1753,1751,1749,1747,1744,1745,2108,2109,2504,2505,2932,2933,3392,1,3393,3884,3885,4408,4409,4964,4965,5552,5553,6172,6173,6824,6825,7508,7509,1,8224,8225,8972,8973,9752,9753,10564,10565,11408,11409,12284,12285,13192,13193,14132,1,14133,15104,15105,16108,16109,17144,17145,18212,18213,19312,19313, + 19781,19780,18665,18664,17581,17580,16529,16528,15509,15508,14521,0,14520,13565,13564,12641,12640,11749,11748,10889,10888,10061,10060,9265,9264,8501,8500,0,7769,7768,7069,7068,6401,6400,5765,5764,5161,5160,4589,4588,4049,4048,3541,0,3540,3065,3064,2621,2620,2208,2206,2204,2202,2200,2198,2196,2194,2192,2190,0,2188,2186,2184,2182,2180,2178,2176,2174,2172,2170,2168,2166,2164,2162,2160,0,2158,2156,2154,2152,2150,2148,2146,2144,2142,2140,2138,2136,2134,2132,2130,0,2128,2126,2124,2122,2120,2118,2116,2114,2110,2111,2506,2507,2934,2935,3394,0,3395,3886,3887,4410,4411,4966,4967,5554,5555,6174,6175,6826,6827,7510,7511,0,8226,8227,8974,8975,9754,9755,10566,10567,11410,11411,12286,12287,13194,13195,14134,0,14135,15106,15107,16110,16111,17146,17147,18214,18215,19314,19315, + 19779,19778,18663,18662,17579,17578,16527,16526,15507,15506,14519,1,14518,13563,13562,12639,12638,11747,11746,10887,10886,10059,10058,9263,9262,8499,8498,1,7767,7766,7067,7066,6399,6398,5763,5762,5159,5158,4587,4586,4047,4046,3539,1,3538,3063,3062,2619,2618,2209,2207,2205,2203,2201,2199,2197,2195,2193,2191,1,2189,2187,2185,2183,2181,2179,2177,2175,2173,2171,2169,2167,2165,2163,2161,1,2159,2157,2155,2153,2151,2149,2147,2145,2143,2141,2139,2137,2135,2133,2131,1,2129,2127,2125,2123,2121,2119,2117,2115,2112,2113,2508,2509,2936,2937,3396,1,3397,3888,3889,4412,4413,4968,4969,5556,5557,6176,6177,6828,6829,7512,7513,1,8228,8229,8976,8977,9756,9757,10568,10569,11412,11413,12288,12289,13196,13197,14136,1,14137,15108,15109,16112,16113,17148,17149,18216,18217,19316,19317, + 19777,19776,18661,18660,17577,17576,16525,16524,15505,15504,14517,0,14516,13561,13560,12637,12636,11745,11744,10885,10884,10057,10056,9261,9260,8497,8496,0,7765,7764,7065,7064,6397,6396,5761,5760,5157,5156,4585,4584,4045,4044,3537,0,3536,3061,3060,2616,2614,2612,2610,2608,2606,2604,2602,2600,2598,2596,2594,0,2592,2590,2588,2586,2584,2582,2580,2578,2576,2574,2572,2570,2568,2566,2564,0,2562,2560,2558,2556,2554,2552,2550,2548,2546,2544,2542,2540,2538,2536,2534,0,2532,2530,2528,2526,2524,2522,2520,2518,2516,2514,2510,2511,2938,2939,3398,0,3399,3890,3891,4414,4415,4970,4971,5558,5559,6178,6179,6830,6831,7514,7515,0,8230,8231,8978,8979,9758,9759,10570,10571,11414,11415,12290,12291,13198,13199,14138,0,14139,15110,15111,16114,16115,17150,17151,18218,18219,19318,19319, + 19775,19774,18659,18658,17575,17574,16523,16522,15503,15502,14515,1,14514,13559,13558,12635,12634,11743,11742,10883,10882,10055,10054,9259,9258,8495,8494,1,7763,7762,7063,7062,6395,6394,5759,5758,5155,5154,4583,4582,4043,4042,3535,1,3534,3059,3058,2617,2615,2613,2611,2609,2607,2605,2603,2601,2599,2597,2595,1,2593,2591,2589,2587,2585,2583,2581,2579,2577,2575,2573,2571,2569,2567,2565,1,2563,2561,2559,2557,2555,2553,2551,2549,2547,2545,2543,2541,2539,2537,2535,1,2533,2531,2529,2527,2525,2523,2521,2519,2517,2515,2512,2513,2940,2941,3400,1,3401,3892,3893,4416,4417,4972,4973,5560,5561,6180,6181,6832,6833,7516,7517,1,8232,8233,8980,8981,9760,9761,10572,10573,11416,11417,12292,12293,13200,13201,14140,1,14141,15112,15113,16116,16117,17152,17153,18220,18221,19320,19321, + 19773,19772,18657,18656,17573,17572,16521,16520,15501,15500,14513,0,14512,13557,13556,12633,12632,11741,11740,10881,10880,10053,10052,9257,9256,8493,8492,0,7761,7760,7061,7060,6393,6392,5757,5756,5153,5152,4581,4580,4041,4040,3533,0,3532,3056,3054,3052,3050,3048,3046,3044,3042,3040,3038,3036,3034,3032,3030,0,3028,3026,3024,3022,3020,3018,3016,3014,3012,3010,3008,3006,3004,3002,3000,0,2998,2996,2994,2992,2990,2988,2986,2984,2982,2980,2978,2976,2974,2972,2970,0,2968,2966,2964,2962,2960,2958,2956,2954,2952,2950,2948,2946,2942,2943,3402,0,3403,3894,3895,4418,4419,4974,4975,5562,5563,6182,6183,6834,6835,7518,7519,0,8234,8235,8982,8983,9762,9763,10574,10575,11418,11419,12294,12295,13202,13203,14142,0,14143,15114,15115,16118,16119,17154,17155,18222,18223,19322,19323, + 19771,19770,18655,18654,17571,17570,16519,16518,15499,15498,14511,1,14510,13555,13554,12631,12630,11739,11738,10879,10878,10051,10050,9255,9254,8491,8490,1,7759,7758,7059,7058,6391,6390,5755,5754,5151,5150,4579,4578,4039,4038,3531,1,3530,3057,3055,3053,3051,3049,3047,3045,3043,3041,3039,3037,3035,3033,3031,1,3029,3027,3025,3023,3021,3019,3017,3015,3013,3011,3009,3007,3005,3003,3001,1,2999,2997,2995,2993,2991,2989,2987,2985,2983,2981,2979,2977,2975,2973,2971,1,2969,2967,2965,2963,2961,2959,2957,2955,2953,2951,2949,2947,2944,2945,3404,1,3405,3896,3897,4420,4421,4976,4977,5564,5565,6184,6185,6836,6837,7520,7521,1,8236,8237,8984,8985,9764,9765,10576,10577,11420,11421,12296,12297,13204,13205,14144,1,14145,15116,15117,16120,16121,17156,17157,18224,18225,19324,19325, + 19769,19768,18653,18652,17569,17568,16517,16516,15497,15496,14509,0,14508,13553,13552,12629,12628,11737,11736,10877,10876,10049,10048,9253,9252,8489,8488,0,7757,7756,7057,7056,6389,6388,5753,5752,5149,5148,4577,4576,4037,4036,3528,0,3526,3524,3522,3520,3518,3516,3514,3512,3510,3508,3506,3504,3502,3500,3498,0,3496,3494,3492,3490,3488,3486,3484,3482,3480,3478,3476,3474,3472,3470,3468,0,3466,3464,3462,3460,3458,3456,3454,3452,3450,3448,3446,3444,3442,3440,3438,0,3436,3434,3432,3430,3428,3426,3424,3422,3420,3418,3416,3414,3412,3410,3406,0,3407,3898,3899,4422,4423,4978,4979,5566,5567,6186,6187,6838,6839,7522,7523,0,8238,8239,8986,8987,9766,9767,10578,10579,11422,11423,12298,12299,13206,13207,14146,0,14147,15118,15119,16122,16123,17158,17159,18226,18227,19326,19327, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19767,19766,18651,18650,17567,17566,16515,16514,15495,15494,14507,0,14506,13551,13550,12627,12626,11735,11734,10875,10874,10047,10046,9251,9250,8487,8486,0,7755,7754,7055,7054,6387,6386,5751,5750,5147,5146,4575,4574,4035,4034,3529,0,3527,3525,3523,3521,3519,3517,3515,3513,3511,3509,3507,3505,3503,3501,3499,0,3497,3495,3493,3491,3489,3487,3485,3483,3481,3479,3477,3475,3473,3471,3469,0,3467,3465,3463,3461,3459,3457,3455,3453,3451,3449,3447,3445,3443,3441,3439,0,3437,3435,3433,3431,3429,3427,3425,3423,3421,3419,3417,3415,3413,3411,3408,0,3409,3900,3901,4424,4425,4980,4981,5568,5569,6188,6189,6840,6841,7524,7525,0,8240,8241,8988,8989,9768,9769,10580,10581,11424,11425,12300,12301,13208,13209,14148,0,14149,15120,15121,16124,16125,17160,17161,18228,18229,19328,19329, + 19765,19764,18649,18648,17565,17564,16513,16512,15493,15492,14505,1,14504,13549,13548,12625,12624,11733,11732,10873,10872,10045,10044,9249,9248,8485,8484,1,7753,7752,7053,7052,6385,6384,5749,5748,5145,5144,4573,4572,4032,4030,4028,1,4026,4024,4022,4020,4018,4016,4014,4012,4010,4008,4006,4004,4002,4000,3998,1,3996,3994,3992,3990,3988,3986,3984,3982,3980,3978,3976,3974,3972,3970,3968,1,3966,3964,3962,3960,3958,3956,3954,3952,3950,3948,3946,3944,3942,3940,3938,1,3936,3934,3932,3930,3928,3926,3924,3922,3920,3918,3916,3914,3912,3910,3908,1,3906,3902,3903,4426,4427,4982,4983,5570,5571,6190,6191,6842,6843,7526,7527,1,8242,8243,8990,8991,9770,9771,10582,10583,11426,11427,12302,12303,13210,13211,14150,1,14151,15122,15123,16126,16127,17162,17163,18230,18231,19330,19331, + 19763,19762,18647,18646,17563,17562,16511,16510,15491,15490,14503,0,14502,13547,13546,12623,12622,11731,11730,10871,10870,10043,10042,9247,9246,8483,8482,0,7751,7750,7051,7050,6383,6382,5747,5746,5143,5142,4571,4570,4033,4031,4029,0,4027,4025,4023,4021,4019,4017,4015,4013,4011,4009,4007,4005,4003,4001,3999,0,3997,3995,3993,3991,3989,3987,3985,3983,3981,3979,3977,3975,3973,3971,3969,0,3967,3965,3963,3961,3959,3957,3955,3953,3951,3949,3947,3945,3943,3941,3939,0,3937,3935,3933,3931,3929,3927,3925,3923,3921,3919,3917,3915,3913,3911,3909,0,3907,3904,3905,4428,4429,4984,4985,5572,5573,6192,6193,6844,6845,7528,7529,0,8244,8245,8992,8993,9772,9773,10584,10585,11428,11429,12304,12305,13212,13213,14152,0,14153,15124,15125,16128,16129,17164,17165,18232,18233,19332,19333, + 19761,19760,18645,18644,17561,17560,16509,16508,15489,15488,14501,1,14500,13545,13544,12621,12620,11729,11728,10869,10868,10041,10040,9245,9244,8481,8480,1,7749,7748,7049,7048,6381,6380,5745,5744,5141,5140,4568,4566,4564,4562,4560,1,4558,4556,4554,4552,4550,4548,4546,4544,4542,4540,4538,4536,4534,4532,4530,1,4528,4526,4524,4522,4520,4518,4516,4514,4512,4510,4508,4506,4504,4502,4500,1,4498,4496,4494,4492,4490,4488,4486,4484,4482,4480,4478,4476,4474,4472,4470,1,4468,4466,4464,4462,4460,4458,4456,4454,4452,4450,4448,4446,4444,4442,4440,1,4438,4436,4434,4430,4431,4986,4987,5574,5575,6194,6195,6846,6847,7530,7531,1,8246,8247,8994,8995,9774,9775,10586,10587,11430,11431,12306,12307,13214,13215,14154,1,14155,15126,15127,16130,16131,17166,17167,18234,18235,19334,19335, + 19759,19758,18643,18642,17559,17558,16507,16506,15487,15486,14499,0,14498,13543,13542,12619,12618,11727,11726,10867,10866,10039,10038,9243,9242,8479,8478,0,7747,7746,7047,7046,6379,6378,5743,5742,5139,5138,4569,4567,4565,4563,4561,0,4559,4557,4555,4553,4551,4549,4547,4545,4543,4541,4539,4537,4535,4533,4531,0,4529,4527,4525,4523,4521,4519,4517,4515,4513,4511,4509,4507,4505,4503,4501,0,4499,4497,4495,4493,4491,4489,4487,4485,4483,4481,4479,4477,4475,4473,4471,0,4469,4467,4465,4463,4461,4459,4457,4455,4453,4451,4449,4447,4445,4443,4441,0,4439,4437,4435,4432,4433,4988,4989,5576,5577,6196,6197,6848,6849,7532,7533,0,8248,8249,8996,8997,9776,9777,10588,10589,11432,11433,12308,12309,13216,13217,14156,0,14157,15128,15129,16132,16133,17168,17169,18236,18237,19336,19337, + 19757,19756,18641,18640,17557,17556,16505,16504,15485,15484,14497,1,14496,13541,13540,12617,12616,11725,11724,10865,10864,10037,10036,9241,9240,8477,8476,1,7745,7744,7045,7044,6377,6376,5741,5740,5136,5134,5132,5130,5128,5126,5124,1,5122,5120,5118,5116,5114,5112,5110,5108,5106,5104,5102,5100,5098,5096,5094,1,5092,5090,5088,5086,5084,5082,5080,5078,5076,5074,5072,5070,5068,5066,5064,1,5062,5060,5058,5056,5054,5052,5050,5048,5046,5044,5042,5040,5038,5036,5034,1,5032,5030,5028,5026,5024,5022,5020,5018,5016,5014,5012,5010,5008,5006,5004,1,5002,5000,4998,4996,4994,4990,4991,5578,5579,6198,6199,6850,6851,7534,7535,1,8250,8251,8998,8999,9778,9779,10590,10591,11434,11435,12310,12311,13218,13219,14158,1,14159,15130,15131,16134,16135,17170,17171,18238,18239,19338,19339, + 19755,19754,18639,18638,17555,17554,16503,16502,15483,15482,14495,0,14494,13539,13538,12615,12614,11723,11722,10863,10862,10035,10034,9239,9238,8475,8474,0,7743,7742,7043,7042,6375,6374,5739,5738,5137,5135,5133,5131,5129,5127,5125,0,5123,5121,5119,5117,5115,5113,5111,5109,5107,5105,5103,5101,5099,5097,5095,0,5093,5091,5089,5087,5085,5083,5081,5079,5077,5075,5073,5071,5069,5067,5065,0,5063,5061,5059,5057,5055,5053,5051,5049,5047,5045,5043,5041,5039,5037,5035,0,5033,5031,5029,5027,5025,5023,5021,5019,5017,5015,5013,5011,5009,5007,5005,0,5003,5001,4999,4997,4995,4992,4993,5580,5581,6200,6201,6852,6853,7536,7537,0,8252,8253,9000,9001,9780,9781,10592,10593,11436,11437,12312,12313,13220,13221,14160,0,14161,15132,15133,16136,16137,17172,17173,18240,18241,19340,19341, + 19753,19752,18637,18636,17553,17552,16501,16500,15481,15480,14493,1,14492,13537,13536,12613,12612,11721,11720,10861,10860,10033,10032,9237,9236,8473,8472,1,7741,7740,7041,7040,6373,6372,5736,5734,5732,5730,5728,5726,5724,5722,5720,1,5718,5716,5714,5712,5710,5708,5706,5704,5702,5700,5698,5696,5694,5692,5690,1,5688,5686,5684,5682,5680,5678,5676,5674,5672,5670,5668,5666,5664,5662,5660,1,5658,5656,5654,5652,5650,5648,5646,5644,5642,5640,5638,5636,5634,5632,5630,1,5628,5626,5624,5622,5620,5618,5616,5614,5612,5610,5608,5606,5604,5602,5600,1,5598,5596,5594,5592,5590,5588,5586,5582,5583,6202,6203,6854,6855,7538,7539,1,8254,8255,9002,9003,9782,9783,10594,10595,11438,11439,12314,12315,13222,13223,14162,1,14163,15134,15135,16138,16139,17174,17175,18242,18243,19342,19343, + 19751,19750,18635,18634,17551,17550,16499,16498,15479,15478,14491,0,14490,13535,13534,12611,12610,11719,11718,10859,10858,10031,10030,9235,9234,8471,8470,0,7739,7738,7039,7038,6371,6370,5737,5735,5733,5731,5729,5727,5725,5723,5721,0,5719,5717,5715,5713,5711,5709,5707,5705,5703,5701,5699,5697,5695,5693,5691,0,5689,5687,5685,5683,5681,5679,5677,5675,5673,5671,5669,5667,5665,5663,5661,0,5659,5657,5655,5653,5651,5649,5647,5645,5643,5641,5639,5637,5635,5633,5631,0,5629,5627,5625,5623,5621,5619,5617,5615,5613,5611,5609,5607,5605,5603,5601,0,5599,5597,5595,5593,5591,5589,5587,5584,5585,6204,6205,6856,6857,7540,7541,0,8256,8257,9004,9005,9784,9785,10596,10597,11440,11441,12316,12317,13224,13225,14164,0,14165,15136,15137,16140,16141,17176,17177,18244,18245,19344,19345, + 19749,19748,18633,18632,17549,17548,16497,16496,15477,15476,14489,1,14488,13533,13532,12609,12608,11717,11716,10857,10856,10029,10028,9233,9232,8469,8468,1,7737,7736,7037,7036,6368,6366,6364,6362,6360,6358,6356,6354,6352,6350,6348,1,6346,6344,6342,6340,6338,6336,6334,6332,6330,6328,6326,6324,6322,6320,6318,1,6316,6314,6312,6310,6308,6306,6304,6302,6300,6298,6296,6294,6292,6290,6288,1,6286,6284,6282,6280,6278,6276,6274,6272,6270,6268,6266,6264,6262,6260,6258,1,6256,6254,6252,6250,6248,6246,6244,6242,6240,6238,6236,6234,6232,6230,6228,1,6226,6224,6222,6220,6218,6216,6214,6212,6210,6206,6207,6858,6859,7542,7543,1,8258,8259,9006,9007,9786,9787,10598,10599,11442,11443,12318,12319,13226,13227,14166,1,14167,15138,15139,16142,16143,17178,17179,18246,18247,19346,19347, + 19747,19746,18631,18630,17547,17546,16495,16494,15475,15474,14487,0,14486,13531,13530,12607,12606,11715,11714,10855,10854,10027,10026,9231,9230,8467,8466,0,7735,7734,7035,7034,6369,6367,6365,6363,6361,6359,6357,6355,6353,6351,6349,0,6347,6345,6343,6341,6339,6337,6335,6333,6331,6329,6327,6325,6323,6321,6319,0,6317,6315,6313,6311,6309,6307,6305,6303,6301,6299,6297,6295,6293,6291,6289,0,6287,6285,6283,6281,6279,6277,6275,6273,6271,6269,6267,6265,6263,6261,6259,0,6257,6255,6253,6251,6249,6247,6245,6243,6241,6239,6237,6235,6233,6231,6229,0,6227,6225,6223,6221,6219,6217,6215,6213,6211,6208,6209,6860,6861,7544,7545,0,8260,8261,9008,9009,9788,9789,10600,10601,11444,11445,12320,12321,13228,13229,14168,0,14169,15140,15141,16144,16145,17180,17181,18248,18249,19348,19349, + 19745,19744,18629,18628,17545,17544,16493,16492,15473,15472,14485,1,14484,13529,13528,12605,12604,11713,11712,10853,10852,10025,10024,9229,9228,8465,8464,1,7733,7732,7032,7030,7028,7026,7024,7022,7020,7018,7016,7014,7012,7010,7008,1,7006,7004,7002,7000,6998,6996,6994,6992,6990,6988,6986,6984,6982,6980,6978,1,6976,6974,6972,6970,6968,6966,6964,6962,6960,6958,6956,6954,6952,6950,6948,1,6946,6944,6942,6940,6938,6936,6934,6932,6930,6928,6926,6924,6922,6920,6918,1,6916,6914,6912,6910,6908,6906,6904,6902,6900,6898,6896,6894,6892,6890,6888,1,6886,6884,6882,6880,6878,6876,6874,6872,6870,6868,6866,6862,6863,7546,7547,1,8262,8263,9010,9011,9790,9791,10602,10603,11446,11447,12322,12323,13230,13231,14170,1,14171,15142,15143,16146,16147,17182,17183,18250,18251,19350,19351, + 19743,19742,18627,18626,17543,17542,16491,16490,15471,15470,14483,0,14482,13527,13526,12603,12602,11711,11710,10851,10850,10023,10022,9227,9226,8463,8462,0,7731,7730,7033,7031,7029,7027,7025,7023,7021,7019,7017,7015,7013,7011,7009,0,7007,7005,7003,7001,6999,6997,6995,6993,6991,6989,6987,6985,6983,6981,6979,0,6977,6975,6973,6971,6969,6967,6965,6963,6961,6959,6957,6955,6953,6951,6949,0,6947,6945,6943,6941,6939,6937,6935,6933,6931,6929,6927,6925,6923,6921,6919,0,6917,6915,6913,6911,6909,6907,6905,6903,6901,6899,6897,6895,6893,6891,6889,0,6887,6885,6883,6881,6879,6877,6875,6873,6871,6869,6867,6864,6865,7548,7549,0,8264,8265,9012,9013,9792,9793,10604,10605,11448,11449,12324,12325,13232,13233,14172,0,14173,15144,15145,16148,16149,17184,17185,18252,18253,19352,19353, + 19741,19740,18625,18624,17541,17540,16489,16488,15469,15468,14481,1,14480,13525,13524,12601,12600,11709,11708,10849,10848,10021,10020,9225,9224,8461,8460,1,7728,7726,7724,7722,7720,7718,7716,7714,7712,7710,7708,7706,7704,7702,7700,1,7698,7696,7694,7692,7690,7688,7686,7684,7682,7680,7678,7676,7674,7672,7670,1,7668,7666,7664,7662,7660,7658,7656,7654,7652,7650,7648,7646,7644,7642,7640,1,7638,7636,7634,7632,7630,7628,7626,7624,7622,7620,7618,7616,7614,7612,7610,1,7608,7606,7604,7602,7600,7598,7596,7594,7592,7590,7588,7586,7584,7582,7580,1,7578,7576,7574,7572,7570,7568,7566,7564,7562,7560,7558,7556,7554,7550,7551,1,8266,8267,9014,9015,9794,9795,10606,10607,11450,11451,12326,12327,13234,13235,14174,1,14175,15146,15147,16150,16151,17186,17187,18254,18255,19354,19355, + 19739,19738,18623,18622,17539,17538,16487,16486,15467,15466,14479,0,14478,13523,13522,12599,12598,11707,11706,10847,10846,10019,10018,9223,9222,8459,8458,0,7729,7727,7725,7723,7721,7719,7717,7715,7713,7711,7709,7707,7705,7703,7701,0,7699,7697,7695,7693,7691,7689,7687,7685,7683,7681,7679,7677,7675,7673,7671,0,7669,7667,7665,7663,7661,7659,7657,7655,7653,7651,7649,7647,7645,7643,7641,0,7639,7637,7635,7633,7631,7629,7627,7625,7623,7621,7619,7617,7615,7613,7611,0,7609,7607,7605,7603,7601,7599,7597,7595,7593,7591,7589,7587,7585,7583,7581,0,7579,7577,7575,7573,7571,7569,7567,7565,7563,7561,7559,7557,7555,7552,7553,0,8268,8269,9016,9017,9796,9797,10608,10609,11452,11453,12328,12329,13236,13237,14176,0,14177,15148,15149,16152,16153,17188,17189,18256,18257,19356,19357, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19737,19736,18621,18620,17537,17536,16485,16484,15465,15464,14477,0,14476,13521,13520,12597,12596,11705,11704,10845,10844,10017,10016,9221,9220,8456,8454,0,8452,8450,8448,8446,8444,8442,8440,8438,8436,8434,8432,8430,8428,8426,8424,0,8422,8420,8418,8416,8414,8412,8410,8408,8406,8404,8402,8400,8398,8396,8394,0,8392,8390,8388,8386,8384,8382,8380,8378,8376,8374,8372,8370,8368,8366,8364,0,8362,8360,8358,8356,8354,8352,8350,8348,8346,8344,8342,8340,8338,8336,8334,0,8332,8330,8328,8326,8324,8322,8320,8318,8316,8314,8312,8310,8308,8306,8304,0,8302,8300,8298,8296,8294,8292,8290,8288,8286,8284,8282,8280,8278,8276,8274,0,8270,8271,9018,9019,9798,9799,10610,10611,11454,11455,12330,12331,13238,13239,14178,0,14179,15150,15151,16154,16155,17190,17191,18258,18259,19358,19359, + 19735,19734,18619,18618,17535,17534,16483,16482,15463,15462,14475,1,14474,13519,13518,12595,12594,11703,11702,10843,10842,10015,10014,9219,9218,8457,8455,1,8453,8451,8449,8447,8445,8443,8441,8439,8437,8435,8433,8431,8429,8427,8425,1,8423,8421,8419,8417,8415,8413,8411,8409,8407,8405,8403,8401,8399,8397,8395,1,8393,8391,8389,8387,8385,8383,8381,8379,8377,8375,8373,8371,8369,8367,8365,1,8363,8361,8359,8357,8355,8353,8351,8349,8347,8345,8343,8341,8339,8337,8335,1,8333,8331,8329,8327,8325,8323,8321,8319,8317,8315,8313,8311,8309,8307,8305,1,8303,8301,8299,8297,8295,8293,8291,8289,8287,8285,8283,8281,8279,8277,8275,1,8272,8273,9020,9021,9800,9801,10612,10613,11456,11457,12332,12333,13240,13241,14180,1,14181,15152,15153,16156,16157,17192,17193,18260,18261,19360,19361, + 19733,19732,18617,18616,17533,17532,16481,16480,15461,15460,14473,0,14472,13517,13516,12593,12592,11701,11700,10841,10840,10013,10012,9216,9214,9212,9210,0,9208,9206,9204,9202,9200,9198,9196,9194,9192,9190,9188,9186,9184,9182,9180,0,9178,9176,9174,9172,9170,9168,9166,9164,9162,9160,9158,9156,9154,9152,9150,0,9148,9146,9144,9142,9140,9138,9136,9134,9132,9130,9128,9126,9124,9122,9120,0,9118,9116,9114,9112,9110,9108,9106,9104,9102,9100,9098,9096,9094,9092,9090,0,9088,9086,9084,9082,9080,9078,9076,9074,9072,9070,9068,9066,9064,9062,9060,0,9058,9056,9054,9052,9050,9048,9046,9044,9042,9040,9038,9036,9034,9032,9030,0,9028,9026,9022,9023,9802,9803,10614,10615,11458,11459,12334,12335,13242,13243,14182,0,14183,15154,15155,16158,16159,17194,17195,18262,18263,19362,19363, + 19731,19730,18615,18614,17531,17530,16479,16478,15459,15458,14471,1,14470,13515,13514,12591,12590,11699,11698,10839,10838,10011,10010,9217,9215,9213,9211,1,9209,9207,9205,9203,9201,9199,9197,9195,9193,9191,9189,9187,9185,9183,9181,1,9179,9177,9175,9173,9171,9169,9167,9165,9163,9161,9159,9157,9155,9153,9151,1,9149,9147,9145,9143,9141,9139,9137,9135,9133,9131,9129,9127,9125,9123,9121,1,9119,9117,9115,9113,9111,9109,9107,9105,9103,9101,9099,9097,9095,9093,9091,1,9089,9087,9085,9083,9081,9079,9077,9075,9073,9071,9069,9067,9065,9063,9061,1,9059,9057,9055,9053,9051,9049,9047,9045,9043,9041,9039,9037,9035,9033,9031,1,9029,9027,9024,9025,9804,9805,10616,10617,11460,11461,12336,12337,13244,13245,14184,1,14185,15156,15157,16160,16161,17196,17197,18264,18265,19364,19365, + 19729,19728,18613,18612,17529,17528,16477,16476,15457,15456,14469,0,14468,13513,13512,12589,12588,11697,11696,10837,10836,10008,10006,10004,10002,10000,9998,0,9996,9994,9992,9990,9988,9986,9984,9982,9980,9978,9976,9974,9972,9970,9968,0,9966,9964,9962,9960,9958,9956,9954,9952,9950,9948,9946,9944,9942,9940,9938,0,9936,9934,9932,9930,9928,9926,9924,9922,9920,9918,9916,9914,9912,9910,9908,0,9906,9904,9902,9900,9898,9896,9894,9892,9890,9888,9886,9884,9882,9880,9878,0,9876,9874,9872,9870,9868,9866,9864,9862,9860,9858,9856,9854,9852,9850,9848,0,9846,9844,9842,9840,9838,9836,9834,9832,9830,9828,9826,9824,9822,9820,9818,0,9816,9814,9812,9810,9806,9807,10618,10619,11462,11463,12338,12339,13246,13247,14186,0,14187,15158,15159,16162,16163,17198,17199,18266,18267,19366,19367, + 19727,19726,18611,18610,17527,17526,16475,16474,15455,15454,14467,1,14466,13511,13510,12587,12586,11695,11694,10835,10834,10009,10007,10005,10003,10001,9999,1,9997,9995,9993,9991,9989,9987,9985,9983,9981,9979,9977,9975,9973,9971,9969,1,9967,9965,9963,9961,9959,9957,9955,9953,9951,9949,9947,9945,9943,9941,9939,1,9937,9935,9933,9931,9929,9927,9925,9923,9921,9919,9917,9915,9913,9911,9909,1,9907,9905,9903,9901,9899,9897,9895,9893,9891,9889,9887,9885,9883,9881,9879,1,9877,9875,9873,9871,9869,9867,9865,9863,9861,9859,9857,9855,9853,9851,9849,1,9847,9845,9843,9841,9839,9837,9835,9833,9831,9829,9827,9825,9823,9821,9819,1,9817,9815,9813,9811,9808,9809,10620,10621,11464,11465,12340,12341,13248,13249,14188,1,14189,15160,15161,16164,16165,17200,17201,18268,18269,19368,19369, + 19725,19724,18609,18608,17525,17524,16473,16472,15453,15452,14465,0,14464,13509,13508,12585,12584,11693,11692,10832,10830,10828,10826,10824,10822,10820,10818,0,10816,10814,10812,10810,10808,10806,10804,10802,10800,10798,10796,10794,10792,10790,10788,0,10786,10784,10782,10780,10778,10776,10774,10772,10770,10768,10766,10764,10762,10760,10758,0,10756,10754,10752,10750,10748,10746,10744,10742,10740,10738,10736,10734,10732,10730,10728,0,10726,10724,10722,10720,10718,10716,10714,10712,10710,10708,10706,10704,10702,10700,10698,0,10696,10694,10692,10690,10688,10686,10684,10682,10680,10678,10676,10674,10672,10670,10668,0,10666,10664,10662,10660,10658,10656,10654,10652,10650,10648,10646,10644,10642,10640,10638,0,10636,10634,10632,10630,10628,10626,10622,10623,11466,11467,12342,12343,13250,13251,14190,0,14191,15162,15163,16166,16167,17202,17203,18270,18271,19370,19371, + 19723,19722,18607,18606,17523,17522,16471,16470,15451,15450,14463,1,14462,13507,13506,12583,12582,11691,11690,10833,10831,10829,10827,10825,10823,10821,10819,1,10817,10815,10813,10811,10809,10807,10805,10803,10801,10799,10797,10795,10793,10791,10789,1,10787,10785,10783,10781,10779,10777,10775,10773,10771,10769,10767,10765,10763,10761,10759,1,10757,10755,10753,10751,10749,10747,10745,10743,10741,10739,10737,10735,10733,10731,10729,1,10727,10725,10723,10721,10719,10717,10715,10713,10711,10709,10707,10705,10703,10701,10699,1,10697,10695,10693,10691,10689,10687,10685,10683,10681,10679,10677,10675,10673,10671,10669,1,10667,10665,10663,10661,10659,10657,10655,10653,10651,10649,10647,10645,10643,10641,10639,1,10637,10635,10633,10631,10629,10627,10624,10625,11468,11469,12344,12345,13252,13253,14192,1,14193,15164,15165,16168,16169,17204,17205,18272,18273,19372,19373, + 19721,19720,18605,18604,17521,17520,16469,16468,15449,15448,14461,0,14460,13505,13504,12581,12580,11688,11686,11684,11682,11680,11678,11676,11674,11672,11670,0,11668,11666,11664,11662,11660,11658,11656,11654,11652,11650,11648,11646,11644,11642,11640,0,11638,11636,11634,11632,11630,11628,11626,11624,11622,11620,11618,11616,11614,11612,11610,0,11608,11606,11604,11602,11600,11598,11596,11594,11592,11590,11588,11586,11584,11582,11580,0,11578,11576,11574,11572,11570,11568,11566,11564,11562,11560,11558,11556,11554,11552,11550,0,11548,11546,11544,11542,11540,11538,11536,11534,11532,11530,11528,11526,11524,11522,11520,0,11518,11516,11514,11512,11510,11508,11506,11504,11502,11500,11498,11496,11494,11492,11490,0,11488,11486,11484,11482,11480,11478,11476,11474,11470,11471,12346,12347,13254,13255,14194,0,14195,15166,15167,16170,16171,17206,17207,18274,18275,19374,19375, + 19719,19718,18603,18602,17519,17518,16467,16466,15447,15446,14459,1,14458,13503,13502,12579,12578,11689,11687,11685,11683,11681,11679,11677,11675,11673,11671,1,11669,11667,11665,11663,11661,11659,11657,11655,11653,11651,11649,11647,11645,11643,11641,1,11639,11637,11635,11633,11631,11629,11627,11625,11623,11621,11619,11617,11615,11613,11611,1,11609,11607,11605,11603,11601,11599,11597,11595,11593,11591,11589,11587,11585,11583,11581,1,11579,11577,11575,11573,11571,11569,11567,11565,11563,11561,11559,11557,11555,11553,11551,1,11549,11547,11545,11543,11541,11539,11537,11535,11533,11531,11529,11527,11525,11523,11521,1,11519,11517,11515,11513,11511,11509,11507,11505,11503,11501,11499,11497,11495,11493,11491,1,11489,11487,11485,11483,11481,11479,11477,11475,11472,11473,12348,12349,13256,13257,14196,1,14197,15168,15169,16172,16173,17208,17209,18276,18277,19376,19377, + 19717,19716,18601,18600,17517,17516,16465,16464,15445,15444,14457,0,14456,13501,13500,12576,12574,12572,12570,12568,12566,12564,12562,12560,12558,12556,12554,0,12552,12550,12548,12546,12544,12542,12540,12538,12536,12534,12532,12530,12528,12526,12524,0,12522,12520,12518,12516,12514,12512,12510,12508,12506,12504,12502,12500,12498,12496,12494,0,12492,12490,12488,12486,12484,12482,12480,12478,12476,12474,12472,12470,12468,12466,12464,0,12462,12460,12458,12456,12454,12452,12450,12448,12446,12444,12442,12440,12438,12436,12434,0,12432,12430,12428,12426,12424,12422,12420,12418,12416,12414,12412,12410,12408,12406,12404,0,12402,12400,12398,12396,12394,12392,12390,12388,12386,12384,12382,12380,12378,12376,12374,0,12372,12370,12368,12366,12364,12362,12360,12358,12356,12354,12350,12351,13258,13259,14198,0,14199,15170,15171,16174,16175,17210,17211,18278,18279,19378,19379, + 19715,19714,18599,18598,17515,17514,16463,16462,15443,15442,14455,1,14454,13499,13498,12577,12575,12573,12571,12569,12567,12565,12563,12561,12559,12557,12555,1,12553,12551,12549,12547,12545,12543,12541,12539,12537,12535,12533,12531,12529,12527,12525,1,12523,12521,12519,12517,12515,12513,12511,12509,12507,12505,12503,12501,12499,12497,12495,1,12493,12491,12489,12487,12485,12483,12481,12479,12477,12475,12473,12471,12469,12467,12465,1,12463,12461,12459,12457,12455,12453,12451,12449,12447,12445,12443,12441,12439,12437,12435,1,12433,12431,12429,12427,12425,12423,12421,12419,12417,12415,12413,12411,12409,12407,12405,1,12403,12401,12399,12397,12395,12393,12391,12389,12387,12385,12383,12381,12379,12377,12375,1,12373,12371,12369,12367,12365,12363,12361,12359,12357,12355,12352,12353,13260,13261,14200,1,14201,15172,15173,16176,16177,17212,17213,18280,18281,19380,19381, + 19713,19712,18597,18596,17513,17512,16461,16460,15441,15440,14453,0,14452,13496,13494,13492,13490,13488,13486,13484,13482,13480,13478,13476,13474,13472,13470,0,13468,13466,13464,13462,13460,13458,13456,13454,13452,13450,13448,13446,13444,13442,13440,0,13438,13436,13434,13432,13430,13428,13426,13424,13422,13420,13418,13416,13414,13412,13410,0,13408,13406,13404,13402,13400,13398,13396,13394,13392,13390,13388,13386,13384,13382,13380,0,13378,13376,13374,13372,13370,13368,13366,13364,13362,13360,13358,13356,13354,13352,13350,0,13348,13346,13344,13342,13340,13338,13336,13334,13332,13330,13328,13326,13324,13322,13320,0,13318,13316,13314,13312,13310,13308,13306,13304,13302,13300,13298,13296,13294,13292,13290,0,13288,13286,13284,13282,13280,13278,13276,13274,13272,13270,13268,13266,13262,13263,14202,0,14203,15174,15175,16178,16179,17214,17215,18282,18283,19382,19383, + 19711,19710,18595,18594,17511,17510,16459,16458,15439,15438,14451,1,14450,13497,13495,13493,13491,13489,13487,13485,13483,13481,13479,13477,13475,13473,13471,1,13469,13467,13465,13463,13461,13459,13457,13455,13453,13451,13449,13447,13445,13443,13441,1,13439,13437,13435,13433,13431,13429,13427,13425,13423,13421,13419,13417,13415,13413,13411,1,13409,13407,13405,13403,13401,13399,13397,13395,13393,13391,13389,13387,13385,13383,13381,1,13379,13377,13375,13373,13371,13369,13367,13365,13363,13361,13359,13357,13355,13353,13351,1,13349,13347,13345,13343,13341,13339,13337,13335,13333,13331,13329,13327,13325,13323,13321,1,13319,13317,13315,13313,13311,13309,13307,13305,13303,13301,13299,13297,13295,13293,13291,1,13289,13287,13285,13283,13281,13279,13277,13275,13273,13271,13269,13267,13264,13265,14204,1,14205,15176,15177,16180,16181,17216,17217,18284,18285,19384,19385, + 19709,19708,18593,18592,17509,17508,16457,16456,15437,15436,14448,0,14446,14444,14442,14440,14438,14436,14434,14432,14430,14428,14426,14424,14422,14420,14418,0,14416,14414,14412,14410,14408,14406,14404,14402,14400,14398,14396,14394,14392,14390,14388,0,14386,14384,14382,14380,14378,14376,14374,14372,14370,14368,14366,14364,14362,14360,14358,0,14356,14354,14352,14350,14348,14346,14344,14342,14340,14338,14336,14334,14332,14330,14328,0,14326,14324,14322,14320,14318,14316,14314,14312,14310,14308,14306,14304,14302,14300,14298,0,14296,14294,14292,14290,14288,14286,14284,14282,14280,14278,14276,14274,14272,14270,14268,0,14266,14264,14262,14260,14258,14256,14254,14252,14250,14248,14246,14244,14242,14240,14238,0,14236,14234,14232,14230,14228,14226,14224,14222,14220,14218,14216,14214,14212,14210,14206,0,14207,15178,15179,16182,16183,17218,17219,18286,18287,19386,19387, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 19707,19706,18591,18590,17507,17506,16455,16454,15435,15434,14449,0,14447,14445,14443,14441,14439,14437,14435,14433,14431,14429,14427,14425,14423,14421,14419,0,14417,14415,14413,14411,14409,14407,14405,14403,14401,14399,14397,14395,14393,14391,14389,0,14387,14385,14383,14381,14379,14377,14375,14373,14371,14369,14367,14365,14363,14361,14359,0,14357,14355,14353,14351,14349,14347,14345,14343,14341,14339,14337,14335,14333,14331,14329,0,14327,14325,14323,14321,14319,14317,14315,14313,14311,14309,14307,14305,14303,14301,14299,0,14297,14295,14293,14291,14289,14287,14285,14283,14281,14279,14277,14275,14273,14271,14269,0,14267,14265,14263,14261,14259,14257,14255,14253,14251,14249,14247,14245,14243,14241,14239,0,14237,14235,14233,14231,14229,14227,14225,14223,14221,14219,14217,14215,14213,14211,14208,0,14209,15180,15181,16184,16185,17220,17221,18288,18289,19388,19389, + 19705,19704,18589,18588,17505,17504,16453,16452,15432,15430,15428,1,15426,15424,15422,15420,15418,15416,15414,15412,15410,15408,15406,15404,15402,15400,15398,1,15396,15394,15392,15390,15388,15386,15384,15382,15380,15378,15376,15374,15372,15370,15368,1,15366,15364,15362,15360,15358,15356,15354,15352,15350,15348,15346,15344,15342,15340,15338,1,15336,15334,15332,15330,15328,15326,15324,15322,15320,15318,15316,15314,15312,15310,15308,1,15306,15304,15302,15300,15298,15296,15294,15292,15290,15288,15286,15284,15282,15280,15278,1,15276,15274,15272,15270,15268,15266,15264,15262,15260,15258,15256,15254,15252,15250,15248,1,15246,15244,15242,15240,15238,15236,15234,15232,15230,15228,15226,15224,15222,15220,15218,1,15216,15214,15212,15210,15208,15206,15204,15202,15200,15198,15196,15194,15192,15190,15188,1,15186,15182,15183,16186,16187,17222,17223,18290,18291,19390,19391, + 19703,19702,18587,18586,17503,17502,16451,16450,15433,15431,15429,0,15427,15425,15423,15421,15419,15417,15415,15413,15411,15409,15407,15405,15403,15401,15399,0,15397,15395,15393,15391,15389,15387,15385,15383,15381,15379,15377,15375,15373,15371,15369,0,15367,15365,15363,15361,15359,15357,15355,15353,15351,15349,15347,15345,15343,15341,15339,0,15337,15335,15333,15331,15329,15327,15325,15323,15321,15319,15317,15315,15313,15311,15309,0,15307,15305,15303,15301,15299,15297,15295,15293,15291,15289,15287,15285,15283,15281,15279,0,15277,15275,15273,15271,15269,15267,15265,15263,15261,15259,15257,15255,15253,15251,15249,0,15247,15245,15243,15241,15239,15237,15235,15233,15231,15229,15227,15225,15223,15221,15219,0,15217,15215,15213,15211,15209,15207,15205,15203,15201,15199,15197,15195,15193,15191,15189,0,15187,15184,15185,16188,16189,17224,17225,18292,18293,19392,19393, + 19701,19700,18585,18584,17501,17500,16448,16446,16444,16442,16440,1,16438,16436,16434,16432,16430,16428,16426,16424,16422,16420,16418,16416,16414,16412,16410,1,16408,16406,16404,16402,16400,16398,16396,16394,16392,16390,16388,16386,16384,16382,16380,1,16378,16376,16374,16372,16370,16368,16366,16364,16362,16360,16358,16356,16354,16352,16350,1,16348,16346,16344,16342,16340,16338,16336,16334,16332,16330,16328,16326,16324,16322,16320,1,16318,16316,16314,16312,16310,16308,16306,16304,16302,16300,16298,16296,16294,16292,16290,1,16288,16286,16284,16282,16280,16278,16276,16274,16272,16270,16268,16266,16264,16262,16260,1,16258,16256,16254,16252,16250,16248,16246,16244,16242,16240,16238,16236,16234,16232,16230,1,16228,16226,16224,16222,16220,16218,16216,16214,16212,16210,16208,16206,16204,16202,16200,1,16198,16196,16194,16190,16191,17226,17227,18294,18295,19394,19395, + 19699,19698,18583,18582,17499,17498,16449,16447,16445,16443,16441,0,16439,16437,16435,16433,16431,16429,16427,16425,16423,16421,16419,16417,16415,16413,16411,0,16409,16407,16405,16403,16401,16399,16397,16395,16393,16391,16389,16387,16385,16383,16381,0,16379,16377,16375,16373,16371,16369,16367,16365,16363,16361,16359,16357,16355,16353,16351,0,16349,16347,16345,16343,16341,16339,16337,16335,16333,16331,16329,16327,16325,16323,16321,0,16319,16317,16315,16313,16311,16309,16307,16305,16303,16301,16299,16297,16295,16293,16291,0,16289,16287,16285,16283,16281,16279,16277,16275,16273,16271,16269,16267,16265,16263,16261,0,16259,16257,16255,16253,16251,16249,16247,16245,16243,16241,16239,16237,16235,16233,16231,0,16229,16227,16225,16223,16221,16219,16217,16215,16213,16211,16209,16207,16205,16203,16201,0,16199,16197,16195,16192,16193,17228,17229,18296,18297,19396,19397, + 19697,19696,18581,18580,17496,17494,17492,17490,17488,17486,17484,1,17482,17480,17478,17476,17474,17472,17470,17468,17466,17464,17462,17460,17458,17456,17454,1,17452,17450,17448,17446,17444,17442,17440,17438,17436,17434,17432,17430,17428,17426,17424,1,17422,17420,17418,17416,17414,17412,17410,17408,17406,17404,17402,17400,17398,17396,17394,1,17392,17390,17388,17386,17384,17382,17380,17378,17376,17374,17372,17370,17368,17366,17364,1,17362,17360,17358,17356,17354,17352,17350,17348,17346,17344,17342,17340,17338,17336,17334,1,17332,17330,17328,17326,17324,17322,17320,17318,17316,17314,17312,17310,17308,17306,17304,1,17302,17300,17298,17296,17294,17292,17290,17288,17286,17284,17282,17280,17278,17276,17274,1,17272,17270,17268,17266,17264,17262,17260,17258,17256,17254,17252,17250,17248,17246,17244,1,17242,17240,17238,17236,17234,17230,17231,18298,18299,19398,19399, + 19695,19694,18579,18578,17497,17495,17493,17491,17489,17487,17485,0,17483,17481,17479,17477,17475,17473,17471,17469,17467,17465,17463,17461,17459,17457,17455,0,17453,17451,17449,17447,17445,17443,17441,17439,17437,17435,17433,17431,17429,17427,17425,0,17423,17421,17419,17417,17415,17413,17411,17409,17407,17405,17403,17401,17399,17397,17395,0,17393,17391,17389,17387,17385,17383,17381,17379,17377,17375,17373,17371,17369,17367,17365,0,17363,17361,17359,17357,17355,17353,17351,17349,17347,17345,17343,17341,17339,17337,17335,0,17333,17331,17329,17327,17325,17323,17321,17319,17317,17315,17313,17311,17309,17307,17305,0,17303,17301,17299,17297,17295,17293,17291,17289,17287,17285,17283,17281,17279,17277,17275,0,17273,17271,17269,17267,17265,17263,17261,17259,17257,17255,17253,17251,17249,17247,17245,0,17243,17241,17239,17237,17235,17232,17233,18300,18301,19400,19401, + 19693,19692,18576,18574,18572,18570,18568,18566,18564,18562,18560,1,18558,18556,18554,18552,18550,18548,18546,18544,18542,18540,18538,18536,18534,18532,18530,1,18528,18526,18524,18522,18520,18518,18516,18514,18512,18510,18508,18506,18504,18502,18500,1,18498,18496,18494,18492,18490,18488,18486,18484,18482,18480,18478,18476,18474,18472,18470,1,18468,18466,18464,18462,18460,18458,18456,18454,18452,18450,18448,18446,18444,18442,18440,1,18438,18436,18434,18432,18430,18428,18426,18424,18422,18420,18418,18416,18414,18412,18410,1,18408,18406,18404,18402,18400,18398,18396,18394,18392,18390,18388,18386,18384,18382,18380,1,18378,18376,18374,18372,18370,18368,18366,18364,18362,18360,18358,18356,18354,18352,18350,1,18348,18346,18344,18342,18340,18338,18336,18334,18332,18330,18328,18326,18324,18322,18320,1,18318,18316,18314,18312,18310,18308,18306,18302,18303,19402,19403, + 19691,19690,18577,18575,18573,18571,18569,18567,18565,18563,18561,0,18559,18557,18555,18553,18551,18549,18547,18545,18543,18541,18539,18537,18535,18533,18531,0,18529,18527,18525,18523,18521,18519,18517,18515,18513,18511,18509,18507,18505,18503,18501,0,18499,18497,18495,18493,18491,18489,18487,18485,18483,18481,18479,18477,18475,18473,18471,0,18469,18467,18465,18463,18461,18459,18457,18455,18453,18451,18449,18447,18445,18443,18441,0,18439,18437,18435,18433,18431,18429,18427,18425,18423,18421,18419,18417,18415,18413,18411,0,18409,18407,18405,18403,18401,18399,18397,18395,18393,18391,18389,18387,18385,18383,18381,0,18379,18377,18375,18373,18371,18369,18367,18365,18363,18361,18359,18357,18355,18353,18351,0,18349,18347,18345,18343,18341,18339,18337,18335,18333,18331,18329,18327,18325,18323,18321,0,18319,18317,18315,18313,18311,18309,18307,18304,18305,19404,19405, + 19688,19686,19684,19682,19680,19678,19676,19674,19672,19670,19668,1,19666,19664,19662,19660,19658,19656,19654,19652,19650,19648,19646,19644,19642,19640,19638,1,19636,19634,19632,19630,19628,19626,19624,19622,19620,19618,19616,19614,19612,19610,19608,1,19606,19604,19602,19600,19598,19596,19594,19592,19590,19588,19586,19584,19582,19580,19578,1,19576,19574,19572,19570,19568,19566,19564,19562,19560,19558,19556,19554,19552,19550,19548,1,19546,19544,19542,19540,19538,19536,19534,19532,19530,19528,19526,19524,19522,19520,19518,1,19516,19514,19512,19510,19508,19506,19504,19502,19500,19498,19496,19494,19492,19490,19488,1,19486,19484,19482,19480,19478,19476,19474,19472,19470,19468,19466,19464,19462,19460,19458,1,19456,19454,19452,19450,19448,19446,19444,19442,19440,19438,19436,19434,19432,19430,19428,1,19426,19424,19422,19420,19418,19416,19414,19412,19410,19406,19407, + 19689,19687,19685,19683,19681,19679,19677,19675,19673,19671,19669,0,19667,19665,19663,19661,19659,19657,19655,19653,19651,19649,19647,19645,19643,19641,19639,0,19637,19635,19633,19631,19629,19627,19625,19623,19621,19619,19617,19615,19613,19611,19609,0,19607,19605,19603,19601,19599,19597,19595,19593,19591,19589,19587,19585,19583,19581,19579,0,19577,19575,19573,19571,19569,19567,19565,19563,19561,19559,19557,19555,19553,19551,19549,0,19547,19545,19543,19541,19539,19537,19535,19533,19531,19529,19527,19525,19523,19521,19519,0,19517,19515,19513,19511,19509,19507,19505,19503,19501,19499,19497,19495,19493,19491,19489,0,19487,19485,19483,19481,19479,19477,19475,19473,19471,19469,19467,19465,19463,19461,19459,0,19457,19455,19453,19451,19449,19447,19445,19443,19441,19439,19437,19435,19433,19431,19429,0,19427,19425,19423,19421,19419,19417,19415,19413,19411,19408,19409 +}; + +static int CompactAztecMap[] = { /* 27 x 27 data grid */ + 609,608,411,413,415,417,419,421,423,425,427,429,431,433,435,437,439,441,443,445,447,449,451,453,455,457,459, + 607,606,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458, + 605,604,409,408,243,245,247,249,251,253,255,257,259,261,263,265,267,269,271,273,275,277,279,281,283,460,461, + 603,602,407,406,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,462,463, + 601,600,405,404,241,240,107,109,111,113,115,117,119,121,123,125,127,129,131,133,135,137,139,284,285,464,465, + 599,598,403,402,239,238,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,286,287,466,467, + 597,596,401,400,237,236,105,104,3,5,7,9,11,13,15,17,19,21,23,25,27,140,141,288,289,468,469, + 595,594,399,398,235,234,103,102,2,4,6,8,10,12,14,16,18,20,22,24,26,142,143,290,291,470,471, + 593,592,397,396,233,232,101,100,1,1,2000,2001,2002,2003,2004,2005,2006,0,1,28,29,144,145,292,293,472,473, + 591,590,395,394,231,230,99,98,1,1,1,1,1,1,1,1,1,1,1,30,31,146,147,294,295,474,475, + 589,588,393,392,229,228,97,96,2027,1,0,0,0,0,0,0,0,1,2007,32,33,148,149,296,297,476,477, + 587,586,391,390,227,226,95,94,2026,1,0,1,1,1,1,1,0,1,2008,34,35,150,151,298,299,478,479, + 585,584,389,388,225,224,93,92,2025,1,0,1,0,0,0,1,0,1,2009,36,37,152,153,300,301,480,481, + 583,582,387,386,223,222,91,90,2024,1,0,1,0,1,0,1,0,1,2010,38,39,154,155,302,303,482,483, + 581,580,385,384,221,220,89,88,2023,1,0,1,0,0,0,1,0,1,2011,40,41,156,157,304,305,484,485, + 579,578,383,382,219,218,87,86,2022,1,0,1,1,1,1,1,0,1,2012,42,43,158,159,306,307,486,487, + 577,576,381,380,217,216,85,84,2021,1,0,0,0,0,0,0,0,1,2013,44,45,160,161,308,309,488,489, + 575,574,379,378,215,214,83,82,0,1,1,1,1,1,1,1,1,1,1,46,47,162,163,310,311,490,491, + 573,572,377,376,213,212,81,80,0,0,2020,2019,2018,2017,2016,2015,2014,0,0,48,49,164,165,312,313,492,493, + 571,570,375,374,211,210,78,76,74,72,70,68,66,64,62,60,58,56,54,50,51,166,167,314,315,494,495, + 569,568,373,372,209,208,79,77,75,73,71,69,67,65,63,61,59,57,55,52,53,168,169,316,317,496,497, + 567,566,371,370,206,204,202,200,198,196,194,192,190,188,186,184,182,180,178,176,174,170,171,318,319,498,499, + 565,564,369,368,207,205,203,201,199,197,195,193,191,189,187,185,183,181,179,177,175,172,173,320,321,500,501, + 563,562,366,364,362,360,358,356,354,352,350,348,346,344,342,340,338,336,334,332,330,328,326,322,323,502,503, + 561,560,367,365,363,361,359,357,355,353,351,349,347,345,343,341,339,337,335,333,331,329,327,324,325,504,505, + 558,556,554,552,550,548,546,544,542,540,538,536,534,532,530,528,526,524,522,520,518,516,514,512,510,506,507, + 559,557,555,553,551,549,547,545,543,541,539,537,535,533,531,529,527,525,523,521,519,517,515,513,511,508,509 +}; + +int AztecCodeSet[128] = { /* From Table 2 */ + 32, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 12, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 4, 4, 4, 4, 4, 23, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 24, 8, 24, 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 8, 8, + 8, 8, 8, 8, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 4, 8, 4, 4, 4, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 8, 4, 8, 4, 4 +}; + +int AztecSymbolChar[128] = { /* From Table 2 */ + 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 300, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 15, 16, 17, 18, 19, 1, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 301, 18, 302, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 21, 22, + 23, 24, 25, 26, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 27, 21, 28, 22, 23, 24, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 29, 25, 30, 26, 27 +}; + +/* Problem characters are: + 300: Carriage Return (ASCII 13) + 301: Comma (ASCII 44) + 302: Full Stop (ASCII 46) +*/ + +static char *hexbit[32] = {"00000", "00001", "00010", "00011", "00100", "00101", "00110", "00111", "01000", "01001", + "01010", "01011", "01100", "01101", "01110", "01111", "10000", "10001", "10010", "10011", "10100", "10101", + "10110", "10111", "11000", "11001", "11010", "11011", "11100", "11101", "11110", "11111" +}; + +static char *pentbit[16] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", + "1010", "1011", "1100", "1101", "1110", "1111" +}; + +static char *tribit[8] = {"000", "001", "010", "011", "100", "101", "110", "111"}; + +static int AztecSizes[32] = { /* Codewords per symbol */ + 21, 48, 60, 88, 120, 156, 196, 240, 230, 272, 316, 364, 416, 470, 528, 588, 652, 720, 790, + 864, 940, 1020, 920, 992, 1066, 1144, 1224, 1306, 1392, 1480, 1570, 1664 +}; + +static int AztecCompactSizes[4] = { 17, 40, 51, 76 }; + +static int Aztec10DataSizes[32] = { /* Data bits per symbol maximum with 10% error correction */ + 96, 246, 408, 616, 840, 1104, 1392, 1704, 2040, 2420, 2820, 3250, 3720, 4200, 4730, + 5270, 5840, 6450, 7080, 7750, 8430, 9150, 9900, 10680, 11484, 12324, 13188, 14076, + 15000, 15948, 16920, 17940 +}; + +static int Aztec23DataSizes[32] = { /* Data bits per symbol maximum with 23% error correction */ + 84, 204, 352, 520, 720, 944, 1184, 1456, 1750, 2070, 2410, 2780, 3180, 3590, 4040, + 4500, 5000, 5520, 6060, 6630, 7210, 7830, 8472, 9132, 9816, 10536, 11280, 12036, + 12828, 13644, 14472, 15348 +}; + +static int Aztec36DataSizes[32] = { /* Data bits per symbol maximum with 36% error correction */ + 66, 168, 288, 432, 592, 776, 984, 1208, 1450, 1720, 2000, 2300, 2640, 2980, 3350, + 3740, 4150, 4580, 5030, 5500, 5990, 6500, 7032, 7584, 8160, 8760, 9372, 9996, 10656, + 11340, 12024, 12744 +}; + +static int Aztec50DataSizes[32] = { /* Data bits per symbol maximum with 50% error correction */ + 48, 126, 216, 328, 456, 600, 760, 936, 1120, 1330, 1550, 1790, 2050, 2320, 2610, + 2910, 3230, 3570, 3920, 4290, 4670, 5070, 5484, 5916, 6360, 6828, 7308, 7800, 8316, + 8844, 9384, 9948 +}; + +static int AztecCompact10DataSizes [4] = { 78, 198, 336, 520 }; +static int AztecCompact23DataSizes [4] = { 66, 168, 288, 440 }; +static int AztecCompact36DataSizes [4] = { 48, 138, 232, 360 }; +static int AztecCompact50DataSizes [4] = { 36, 102, 176, 280 }; + +static int AztecOffset[32] = { + 66, 64, 62, 60, 57, 55, 53, 51, 49, 47, 45, 42, 40, 38, 36, 34, 32, 30, 28, 25, 23, 21, + 19, 17, 15, 13, 10, 8, 6, 4, 2, 0 +}; + +static int AztecCompactOffset[4] = { 6, 4, 2, 0 }; diff --git a/3rdparty/zint-2.4.4/backend/code.c b/3rdparty/zint-2.4.4/backend/code.c new file mode 100644 index 0000000..553b972 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/code.c @@ -0,0 +1,537 @@ +/* code.c - Handles Code 11, 39, 39+ and 93 */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* In version 0.5 this file was 1,553 lines long! */ + +#include +#include +#include +#include "common.h" + +#define SODIUM "0123456789-" +#define SILVER "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd" + +static char *C11Table[11] = {"111121", "211121", "121121", "221111", "112121", "212111", "122111", + "111221", "211211", "211111", "112111"}; + + +/* Code 39 tables checked against ISO/IEC 16388:2007 */ + +/* Incorporates Table A1 */ + +static char *C39Table[43] = { "1112212111", "2112111121", "1122111121", "2122111111", "1112211121", + "2112211111", "1122211111", "1112112121", "2112112111", "1122112111", "2111121121", + "1121121121", "2121121111", "1111221121", "2111221111", "1121221111", "1111122121", + "2111122111", "1121122111", "1111222111", "2111111221", "1121111221", "2121111211", + "1111211221", "2111211211", "1121211211", "1111112221", "2111112211", "1121112211", + "1111212211", "2211111121", "1221111121", "2221111111", "1211211121", "2211211111", + "1221211111", "1211112121", "2211112111", "1221112111", "1212121111", "1212111211", + "1211121211", "1112121211"}; +/* Code 39 character assignments (Table 1) */ + +static char *EC39Ctrl[128] = {"%U", "$A", "$B", "$C", "$D", "$E", "$F", "$G", "$H", "$I", "$J", "$K", + "$L", "$M", "$N", "$O", "$P", "$Q", "$R", "$S", "$T", "$U", "$V", "$W", "$X", "$Y", "$Z", + "%A", "%B", "%C", "%D", "%E", " ", "/A", "/B", "/C", "/D", "/E", "/F", "/G", "/H", "/I", "/J", + "/K", "/L", "-", ".", "/O", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "/Z", "%F", + "%G", "%H", "%I", "%J", "%V", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "%K", "%L", "%M", "%N", "%O", + "%W", "+A", "+B", "+C", "+D", "+E", "+F", "+G", "+H", "+I", "+J", "+K", "+L", "+M", "+N", "+O", + "+P", "+Q", "+R", "+S", "+T", "+U", "+V", "+W", "+X", "+Y", "+Z", "%P", "%Q", "%R", "%S", "%T"}; +/* Encoding the full ASCII character set in Code 39 (Table A2) */ + +static char *C93Ctrl[128] = {"bU", "aA", "aB", "aC", "aD", "aE", "aF", "aG", "aH", "aI", "aJ", "aK", + "aL", "aM", "aN", "aO", "aP", "aQ", "aR", "aS", "aT", "aU", "aV", "aW", "aX", "aY", "aZ", + "bA", "bB", "bC", "bD", "bE", " ", "cA", "cB", "cC", "cD", "cE", "cF", "cG", "cH", "cI", "cJ", + "cK", "cL", "cM", "cN", "cO", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "cZ", "bF", + "bG", "bH", "bI", "bJ", "bV", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bK", "bL", "bM", "bN", "bO", + "bW", "dA", "dB", "dC", "dD", "dE", "dF", "dG", "dH", "dI", "dJ", "dK", "dL", "dM", "dN", "dO", + "dP", "dQ", "dR", "dS", "dT", "dU", "dV", "dW", "dX", "dY", "dZ", "bP", "bQ", "bR", "bS", "bT"}; + +static char *C93Table[47] = {"131112", "111213", "111312", "111411", "121113", "121212", "121311", + "111114", "131211", "141111", "211113", "211212", "211311", "221112", "221211", "231111", + "112113", "112212", "112311", "122112", "132111", "111123", "111222", "111321", "121122", + "131121", "212112", "212211", "211122", "211221", "221121", "222111", "112122", "112221", + "122121", "123111", "121131", "311112", "311211", "321111", "112131", "113121", "211131", + "121221", "312111", "311121", "122211"}; + +/* Global Variables for Channel Code */ +int S[11], B[11]; +long value; +long target_value; +char pattern[30]; + +/* Function Prototypes */ +void NextS(int Chan, int i, int MaxS, int MaxB); +void NextB(int Chan, int i, int MaxB, int MaxS); + +/* *********************** CODE 11 ******************** */ + +int code_11(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Code 11 */ + + int i; + int h, c_digit, c_weight, c_count, k_digit, k_weight, k_count; + int weight[128], error_number; + char dest[1024]; /* 6 + 121 * 6 + 2 * 6 + 5 + 1 ~ 1024*/ + char checkstr[3]; + + error_number = 0; + + if(length > 121) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(SODIUM, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + c_weight = 1; + c_count = 0; + k_weight = 1; + k_count = 0; + + /* start character */ + strcpy(dest, "112211"); + + /* Draw main body of barcode */ + for(i = 0; i < length; i++) { + lookup(SODIUM, C11Table, source[i], dest); + if(source[i] == '-') + weight[i] = 10; + else + weight[i] = ctoi(source[i]); + } + + /* Calculate C checksum */ + for(h = length - 1; h >= 0; h--) { + c_count += (c_weight * weight[h]); + c_weight++; + + if(c_weight > 10) { + c_weight = 1; + } + } + c_digit = c_count % 11; + + weight[length] = c_digit; + + /* Calculate K checksum */ + for(h = length; h >= 0; h--) { + k_count += (k_weight * weight[h]); + k_weight++; + + if(k_weight > 9) { + k_weight = 1; + } + } + k_digit = k_count % 11; + + checkstr[0] = itoc(c_digit); + checkstr[1] = itoc(k_digit); + if(checkstr[0] == 'A') { checkstr[0] = '-'; } + if(checkstr[1] == 'A') { checkstr[1] = '-'; } + checkstr[2] = '\0'; + lookup(SODIUM, C11Table, checkstr[0], dest); + lookup(SODIUM, C11Table, checkstr[1], dest); + + /* Stop character */ + concat (dest, "11221"); + + expand(symbol, dest); + + ustrcpy(symbol->text, source); + uconcat(symbol->text, (unsigned char*)checkstr); + return error_number; +} + +int c39(struct zint_symbol *symbol, unsigned char source[], unsigned int length) +{ /* Code 39 */ + unsigned int i; + unsigned int counter = 0; + char check_digit; + int error_number = 0; + char dest[775]; + char localstr[2] = { 0 }; + + if((symbol->option_2 < 0) || (symbol->option_2 > 1)) { + symbol->option_2 = 0; + } + + if((symbol->symbology == BARCODE_LOGMARS) && (length > 59)) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } else if(length > 74) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + to_upper(source); + error_number = is_sane(SILVER , source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* Start character */ + strcpy(dest, "1211212111"); + + for(i = 0; i < length; i++) { + lookup(SILVER, C39Table, source[i], dest); + counter += posn(SILVER, source[i]); + } + + if((symbol->symbology == BARCODE_LOGMARS) || (symbol->option_2 == 1)) { + + counter = counter % 43; + if(counter < 10) { + check_digit = itoc(counter); + } else { + if(counter < 36) { + check_digit = (counter - 10) + 'A'; + } else { + switch(counter) { + case 36: check_digit = '-'; break; + case 37: check_digit = '.'; break; + case 38: check_digit = ' '; break; + case 39: check_digit = '$'; break; + case 40: check_digit = '/'; break; + case 41: check_digit = '+'; break; + case 42: check_digit = 37; break; + default: check_digit = ' '; break; /* Keep compiler happy */ + } + } + } + lookup(SILVER, C39Table, check_digit, dest); + + /* Display a space check digit as _, otherwise it looks like an error */ + if(check_digit == ' ') { + check_digit = '_'; + } + + localstr[0] = check_digit; + localstr[1] = '\0'; + } + + /* Stop character */ + concat (dest, "121121211"); + + if((symbol->symbology == BARCODE_LOGMARS) || (symbol->symbology == BARCODE_HIBC_39)) { + /* LOGMARS uses wider 'wide' bars than normal Code 39 */ + counter = strlen(dest); + for(i = 0; i < counter; i++) { + if(dest[i] == '2') { + dest[i] = '3'; + } + } + } + + expand(symbol, dest); + + if(symbol->symbology == BARCODE_CODE39) { + ustrcpy(symbol->text, (unsigned char*)"*"); + uconcat(symbol->text, source); + uconcat(symbol->text, (unsigned char*)localstr); + uconcat(symbol->text, (unsigned char*)"*"); + } else { + ustrcpy(symbol->text, source); + uconcat(symbol->text, (unsigned char*)localstr); + } + return error_number; +} + +int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Pharmazentral Nummer (PZN) */ + + int i, error_number, zeroes; + unsigned int count, check_digit; + char localstr[10]; + + error_number = 0; + + count = 0; + if(length > 6) { + strcpy(symbol->errtxt, "Input wrong length"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + localstr[0] = '-'; + zeroes = 6 - length + 1; + for(i = 1; i < zeroes; i++) + localstr[i] = '0'; + strcpy(localstr + zeroes, (char *)source); + + for (i = 1; i < 7; i++) { + count += (i + 1) * ctoi(localstr[i]); + } + + check_digit = count%11; + if (check_digit == 11) { check_digit = 0; } + localstr[7] = itoc(check_digit); + localstr[8] = '\0'; + if(localstr[7] == 'A') { + strcpy(symbol->errtxt, "Invalid PZN Data"); + return ERROR_INVALID_DATA1; + } + error_number = c39(symbol, (unsigned char *)localstr, strlen(localstr)); + ustrcpy(symbol->text, (unsigned char *)"PZN"); + uconcat(symbol->text, (unsigned char *)localstr); + return error_number; +} + + +/* ************** EXTENDED CODE 39 *************** */ + +int ec39(struct zint_symbol *symbol, unsigned char source[], unsigned int length) +{ /* Extended Code 39 - ISO/IEC 16388:2007 Annex A */ + + unsigned char buffer[150] = { 0 }; + unsigned int i; + int error_number = 0; + + if(length > 74) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* Creates a buffer string and places control characters into it */ + for(i = 0; i < length; i++) { + if(source[i] > 127) { + /* Cannot encode extended ASCII */ + strcpy(symbol->errtxt, "Invalid characters in input data"); + return ERROR_INVALID_DATA1; + } + concat((char*)buffer, EC39Ctrl[source[i]]); + } + + /* Then sends the buffer to the C39 function */ + error_number = c39(symbol, buffer, ustrlen(buffer)); + + for(i = 0; i < length; i++) + symbol->text[i] = source[i] ? source[i] : ' '; + symbol->text[length] = '\0'; + + return error_number; +} + +/* ******************** CODE 93 ******************* */ + +int c93(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Code 93 is an advancement on Code 39 and the definition is a lot tighter */ + + /* SILVER includes the extra characters a, b, c and d to represent Code 93 specific + shift characters 1, 2, 3 and 4 respectively. These characters are never used by + c39() and ec39() */ + + int i; + int h, weight, c, k, values[128], error_number; + char buffer[220]; + char dest[670]; + char set_copy[] = SILVER; + + error_number = 0; + strcpy(buffer, ""); + + if(length > 107) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* Message Content */ + for (i = 0; i < length; i++) { + if (source[i] > 127) { + /* Cannot encode extended ASCII */ + strcpy(symbol->errtxt, "Invalid characters in input data"); + return ERROR_INVALID_DATA1; + } + concat(buffer, C93Ctrl[source[i]]); + symbol->text[i] = source[i] ? source[i] : ' '; + } + + /* Now we can check the true length of the barcode */ + h = strlen(buffer); + if (h > 107) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + for (i = 0; i < h; i++) { + values[i] = posn(SILVER, buffer[i]); + } + + /* Putting the data into dest[] is not done until after check digits are calculated */ + + /* Check digit C */ + c = 0; + weight = 1; + for (i = h - 1; i >= 0; i--) { + c += values[i] * weight; + weight++; + if (weight == 21) + weight = 1; + } + c = c % 47; + values[h] = c; + buffer[h] = set_copy[c]; + + /* Check digit K */ + k = 0; + weight = 1; + for (i = h; i >= 0; i--) { + k += values[i] * weight; + weight++; + if(weight == 16) + weight = 1; + } + k = k % 47; + buffer[++h] = set_copy[k]; + buffer[++h] = '\0'; + + /* Start character */ + strcpy(dest, "111141"); + + for(i = 0; i < h; i++) { + lookup(SILVER, C93Table, buffer[i], dest); + } + + /* Stop character */ + concat(dest, "1111411"); + expand(symbol, dest); + + symbol->text[length] = set_copy[c]; + symbol->text[length + 1] = set_copy[k]; + symbol->text[length + 2] = '\0'; + + return error_number; +} + +/* NextS() and NextB() are from ANSI/AIM BC12-1998 and are Copyright (c) AIM 1997 */ +/* Their are used here on the understanding that they form part of the specification + for Channel Code and therefore their use is permitted under the following terms + set out in that document: + + "It is the intent and understanding of AIM [t]hat the symbology presented in this + specification is entirely in the public domain and free of all use restrictions, + licenses and fees. AIM USA, its memer companies, or individual officers + assume no liability for the use of this document." */ + +void CheckCharacter() { + int i; + char part[3]; + + if(value == target_value) { + /* Target reached - save the generated pattern */ + strcpy(pattern, "11110"); + for(i = 0; i < 11; i++) { + part[0] = itoc(S[i]); + part[1] = itoc(B[i]); + part[2] = '\0'; + concat(pattern, part); + } + } +} + +void NextB(int Chan, int i, int MaxB, int MaxS) { + int b; + + b = (S[i]+B[i-1]+S[i-1]+B[i-2] > 4)? 1:2; + if (i < Chan+2) { + for (; b <= MaxB; b++) { + B[i] = b; + NextS(Chan,i+1,MaxS,MaxB+1-b); + } + } else if (b <= MaxB) { + B[i] = MaxB; + CheckCharacter(); + value++; + } +} + +void NextS(int Chan, int i, int MaxS, int MaxB) { + int s; + + for (s = (i 7) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + if((symbol->option_2 < 3) || (symbol->option_2 > 8)) { channels = 0; } else { channels = symbol->option_2; } + if(channels == 0) { channels = length + 1; } + if(channels == 2) { channels = 3; } + + for(i = 0; i < length; i++) { + target_value *= 10; + target_value += ctoi((char) source[i]); + } + + switch(channels) { + case 3: if(target_value > 26) { range = 1; } break; + case 4: if(target_value > 292) { range = 1; } break; + case 5: if(target_value > 3493) { range = 1; } break; + case 6: if(target_value > 44072) { range = 1; } break; + case 7: if(target_value > 576688) { range = 1; } break; + case 8: if(target_value > 7742862) { range = 1; } break; + } + if(range) { + strcpy(symbol->errtxt, "Value out of range"); + return ERROR_INVALID_DATA1; + } + + for(i = 0; i < 11; i++) { B[i] = 0; S[i] = 0; } + + B[0] = S[1] = B[1] = S[2] = B[2] = 1; + value = 0; + NextS(channels,3,channels,channels); + + zeroes = channels - 1 - length; + memset(hrt, '0', zeroes); + strcpy(hrt + zeroes, (char *)source); + ustrcpy(symbol->text, (unsigned char *)hrt); + + expand(symbol, pattern); + + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/code1.c b/3rdparty/zint-2.4.4/backend/code1.c new file mode 100644 index 0000000..70f32d0 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/code1.c @@ -0,0 +1,1515 @@ +/* code1.c - USS Code One */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "common.h" +#include "code1.h" +#include "reedsol.h" +#include "large.h" +#include +#include +#ifdef __APPLE__ +#include +#else +#include +#endif + +void horiz(struct zint_symbol *symbol, int row_no, int full) +{ + int i; + + if(full) { + for(i = 0; i < symbol->width; i++) { + set_module(symbol, row_no, i); + } + } else { + for(i = 1; i < symbol->width - 1; i++) { + set_module(symbol, row_no, i); + } + } +} + +void central_finder(struct zint_symbol *symbol, int start_row, int row_count, int full_rows) +{ + int i; + + for(i = 0; i < row_count; i++) { + if(i < full_rows) { + horiz(symbol, start_row + (i * 2), 1); + } else { + horiz(symbol, start_row + (i * 2), 0); + if(i != row_count - 1) { + set_module(symbol, start_row + (i * 2) + 1, 1); + set_module(symbol, start_row + (i * 2) + 1, symbol->width - 2); + } + } + } +} + +void vert(struct zint_symbol *symbol, int column, int height, int top) +{ + int i; + + if(top) { + for (i = 0; i < height; i++) { + set_module(symbol, i, column); + } + } else { + for (i = 0; i < height; i++) { + set_module(symbol, symbol->rows - i - 1, column); + } + } +} + +void spigot(struct zint_symbol *symbol, int row_no) +{ + int i; + + for(i = symbol->width - 1; i > 0; i--) { + if(module_is_set(symbol, row_no, i - 1)) { + set_module(symbol, row_no, i); + } + } +} + +int isedi(unsigned char input) +{ + int result = 0; + + if(input == 13) { result = 1; } + if(input == '*') { result = 1; } + if(input == '>') { result = 1; } + if(input == ' ') { result = 1; } + if((input >= '0') && (input <= '9')) { result = 1; } + if((input >= 'A') && (input <= 'Z')) { result = 1; } + + return result; +} + +int dq4bi(unsigned char source[], int sourcelen, int position) +{ + int i; + + for(i = position; isedi(source[position + i]) && ((position + i) < sourcelen); i++); + + if((position + i) == sourcelen) { + /* Reached end of input */ + return 0; + } + + if (source[position + i - 1] == 13) { return 1; } + if (source[position + i - 1] == '*') { return 1; } + if (source[position + i - 1] == '>') { return 1; } + + return 0; +} + +int c1_look_ahead_test(unsigned char source[], int sourcelen, int position, int current_mode, int gs1) +{ + float ascii_count, c40_count, text_count, edi_count, byte_count; + char reduced_char; + int done, best_scheme, best_count, sp; + + /* Step J */ + if(current_mode == C1_ASCII) { + ascii_count = 0.0; + c40_count = 1.0; + text_count = 1.0; + edi_count = 1.0; + byte_count = 2.0; + } else { + ascii_count = 1.0; + c40_count = 2.0; + text_count = 2.0; + edi_count = 2.0; + byte_count = 3.0; + } + + switch(current_mode) { + case C1_C40: c40_count = 0.0; break; + case C1_TEXT: text_count = 0.0; break; + case C1_BYTE: byte_count = 0.0; break; + case C1_EDI: edi_count = 0.0; break; + } + + for(sp = position; (sp < sourcelen) && (sp <= (position + 8)); sp++) { + + if(source[sp] <= 127) { reduced_char = source[sp]; } else { reduced_char = source[sp] - 127; } + + /* Step L */ + if((source[sp] >= '0') && (source[sp] <= '9')) { + ascii_count += 0.5; + } else { + ascii_count = froundup(ascii_count); + if(source[sp] > 127) { + ascii_count += 2.0; + } else { + ascii_count += 1.0; + } + } + + /* Step M */ + done = 0; + if(reduced_char == ' ') { c40_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= '0') && (reduced_char <= '9')) { c40_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= 'A') && (reduced_char <= 'Z')) { c40_count += (2.0 / 3.0); done = 1; } + if(source[sp] > 127) { c40_count += (4.0 / 3.0); } + if(done == 0) { c40_count += (4.0 / 3.0); } + + /* Step N */ + done = 0; + if(reduced_char == ' ') { text_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= '0') && (reduced_char <= '9')) { text_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= 'a') && (reduced_char <= 'z')) { text_count += (2.0 / 3.0); done = 1; } + if(source[sp] > 127) { text_count += (4.0 / 3.0); } + if(done == 0) { text_count += (4.0 / 3.0); } + + /* Step O */ + done = 0; + if(source[sp] == 13) { edi_count += (2.0 / 3.0); done = 1; } + if(source[sp] == '*') { edi_count += (2.0 / 3.0); done = 1; } + if(source[sp] == '>') { edi_count += (2.0 / 3.0); done = 1; } + if(source[sp] == ' ') { edi_count += (2.0 / 3.0); done = 1; } + if((source[sp] >= '0') && (source[sp] <= '9')) { edi_count += (2.0 / 3.0); done = 1; } + if((source[sp] >= 'A') && (source[sp] <= 'Z')) { edi_count += (2.0 / 3.0); done = 1; } + if(source[sp] > 127) { + edi_count += (13.0 / 3.0); + } else { + if(done == 0) { + edi_count += (10.0 / 3.0); + } + } + + /* Step P */ + if(gs1 && (source[sp] == '[')) { byte_count += 3.0; } else { byte_count += 1.0; } + + } + + ascii_count = froundup(ascii_count); + c40_count = froundup(c40_count); + text_count = froundup(text_count); + edi_count = froundup(edi_count); + byte_count = froundup(byte_count); + best_scheme = C1_ASCII; + + if(sp == sourcelen) { + /* Step K */ + best_count = edi_count; + + if(text_count <= best_count) { + best_count = text_count; + best_scheme = C1_TEXT; + } + + if(c40_count <= best_count) { + best_count = c40_count; + best_scheme = C1_C40; + } + + if(ascii_count <= best_count) { + best_count = ascii_count; + best_scheme = C1_ASCII; + } + + if(byte_count <= best_count) { + best_count = byte_count; + best_scheme = C1_BYTE; + } + } else { + /* Step Q */ + + if(((edi_count + 1.0 <= ascii_count) && (edi_count + 1.0 <= c40_count)) && + ((edi_count + 1.0 <= byte_count) && (edi_count + 1.0 <= text_count))) { + best_scheme = C1_EDI; + } + + if((c40_count + 1.0 <= ascii_count) && (c40_count + 1.0 <= text_count)) { + + if(c40_count < edi_count) { + best_scheme = C1_C40; + } else { + done = 0; + if(c40_count == edi_count) { + if(dq4bi(source, sourcelen, position)) { + best_scheme = C1_EDI; + } else { + best_scheme = C1_C40; + } + } + } + } + + if(((text_count + 1.0 <= ascii_count) && (text_count + 1.0 <= c40_count)) && + ((text_count + 1.0 <= byte_count) && (text_count + 1.0 <= edi_count))) { + best_scheme = C1_TEXT; + } + + if(((ascii_count + 1.0 <= byte_count) && (ascii_count + 1.0 <= c40_count)) && + ((ascii_count + 1.0 <= text_count) && (ascii_count + 1.0 <= edi_count))) { + best_scheme = C1_ASCII; + } + + if(((byte_count + 1.0 <= ascii_count) && (byte_count + 1.0 <= c40_count)) && + ((byte_count + 1.0 <= text_count) && (byte_count + 1.0 <= edi_count))) { + best_scheme = C1_BYTE; + } + } + + //printf("\n> scores: ASCII %.2f C40 %.2f TEXT %.2f EDI %.2f BYTE %.2f\n", ascii_count, c40_count, text_count, edi_count, byte_count); + + return best_scheme; +} + +int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigned int target[], int length) +{ + int current_mode, next_mode; + int sp, tp, gs1, i, j, latch; + int c40_buffer[6], c40_p; + int text_buffer[6], text_p; + int edi_buffer[6], edi_p; + char decimal_binary[40]; + int byte_start = 0; + + sp = 0; + tp = 0; + latch = 0; + memset(c40_buffer, 0, 6); + c40_p = 0; + memset(text_buffer, 0, 6); + text_p = 0; + memset(edi_buffer, 0, 6); + edi_p = 0; + strcpy(decimal_binary, ""); + + if(symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; } + if(gs1) { target[tp] = 232; tp++; } /* FNC1 */ + + /* Step A */ + current_mode = C1_ASCII; + next_mode = C1_ASCII; + + do { + if(current_mode != next_mode) { + /* Change mode */ + switch(next_mode) { + case C1_C40: target[tp] = 230; tp++; break; + case C1_TEXT: target[tp] = 239; tp++; break; + case C1_EDI: target[tp] = 238; tp++; break; + case C1_BYTE: target[tp] = 231; tp++; break; + } + } + + if((current_mode != C1_BYTE) && (next_mode == C1_BYTE)) { byte_start = tp; } + current_mode = next_mode; + + if(current_mode == C1_ASCII) { /* Step B - ASCII encodation */ + next_mode = C1_ASCII; + + if((length - sp) >= 21) { /* Step B1 */ + j = 0; + + for(i = 0; i < 21; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if (j == 21) { + next_mode = C1_DECIMAL; + strcpy(decimal_binary, "1111"); + } + } + + if((next_mode == C1_ASCII) && ((length - sp) >= 13)) { /* Step B2 */ + j = 0; + + for(i = 0; i < 13; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if (j == 13) { + latch = 0; + for(i = sp + 13; i < length; i++) { + if(!((source[sp + i] >= '0') && (source[sp + i] <= '9'))) { latch = 1; } + } + + if(!(latch)) { + next_mode = C1_DECIMAL; + strcpy(decimal_binary, "1111"); + } + } + } + + if(next_mode == C1_ASCII) { /* Step B3 */ + if(istwodigits(source, sp) && ((sp + 1) != length)) { + target[tp] = (10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130; + tp++; + sp += 2; + } else { + if((gs1) && (source[sp] == '[')) { + if((length - sp) >= 15) { /* Step B4 */ + j = 0; + + for(i = 0; i < 15; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if (j == 15) { + target[tp] = 236; /* FNC1 and change to Decimal */ + tp++; sp++; + next_mode = C1_DECIMAL; + } + } + + if((length - sp) >= 7) { /* Step B5 */ + j = 0; + + for(i = 0; i < 7; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if (j == 7) { + latch = 0; + for(i = sp + 7; i < length; i++) { + if(!((source[sp + i] >= '0') && (source[sp + i] <= '9'))) { latch = 1; } + } + + if(!(latch)) { + target[tp] = 236; /* FNC1 and change to Decimal */ + tp++; sp++; + next_mode = C1_DECIMAL; + } + } + } + } + + if(next_mode == C1_ASCII) { + + /* Step B6 */ + next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1); + + if(next_mode == C1_ASCII) { + if(source[sp] > 127) { + /* Step B7 */ + target[tp] = 235; tp++; /* FNC4 */ + target[tp] = (source[sp] - 128) + 1; tp++; sp++; + } else { + /* Step B8 */ + if((gs1) && (source[sp] == '[')) { + target[tp] = 232; tp++; sp++; /* FNC1 */ + } else { + target[tp] = source[sp] + 1; tp++; sp++; + } + } + } + } + } + } + } + + if(current_mode == C1_C40) { /* Step C - C40 encodation */ + int shift_set, value, done = 0, latch = 0; + + next_mode = C1_C40; + if(c40_p == 0) { + if((length - sp) >= 12) { + j = 0; + + for(i = 0; i < 12; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if (j == 12) { + next_mode = C1_ASCII; done = 1; + } + } + + if((length - sp) >= 8) { + j = 0; + + for(i = 0; i < 8; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if((length - sp) == 8) { + latch = 1; + } else { + latch = 1; + for(j = sp + 8; j < length; j++) { + if((source[j] <= '0') || (source[j] >= '9')) { latch = 0; } + } + } + + if ((j == 8) && latch) { + next_mode = C1_ASCII; done = 1; + } + } + + if(!(done)) { + next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1); + } + } + + if(next_mode != C1_C40) { + target[tp] = 255; tp++; /* Unlatch */ + } else { + if(source[sp] > 127) { + c40_buffer[c40_p] = 1; c40_p++; + c40_buffer[c40_p] = 30; c40_p++; /* Upper Shift */ + shift_set = c40_shift[source[sp] - 128]; + value = c40_value[source[sp] - 128]; + } else { + shift_set = c40_shift[source[sp]]; + value = c40_value[source[sp]]; + } + + if(gs1 && (source[sp] == '[')) { + shift_set = 2; + value = 27; /* FNC1 */ + } + + if(shift_set != 0) { + c40_buffer[c40_p] = shift_set - 1; c40_p++; + } + c40_buffer[c40_p] = value; c40_p++; + + if(c40_p >= 3) { + int iv; + + iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + + c40_buffer[0] = c40_buffer[3]; + c40_buffer[1] = c40_buffer[4]; + c40_buffer[2] = c40_buffer[5]; + c40_buffer[3] = 0; + c40_buffer[4] = 0; + c40_buffer[5] = 0; + c40_p -= 3; + } + sp++; + } + } + + if(current_mode == C1_TEXT) { /* Step D - Text encodation */ + int shift_set, value, done = 0, latch = 0; + + next_mode = C1_TEXT; + if(text_p == 0) { + if((length - sp) >= 12) { + j = 0; + + for(i = 0; i < 12; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if (j == 12) { + next_mode = C1_ASCII; done = 1; + } + } + + if((length - sp) >= 8) { + j = 0; + + for(i = 0; i < 8; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if((length - sp) == 8) { + latch = 1; + } else { + latch = 1; + for(j = sp + 8; j < length; j++) { + if((source[j] <= '0') || (source[j] >= '9')) { latch = 0; } + } + } + + if ((j == 8) && latch) { + next_mode = C1_ASCII; done = 1; + } + } + + if(!(done)) { + next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1); + } + } + + if(next_mode != C1_TEXT) { + target[tp] = 255; tp++; /* Unlatch */ + } else { + if(source[sp] > 127) { + text_buffer[text_p] = 1; text_p++; + text_buffer[text_p] = 30; text_p++; /* Upper Shift */ + shift_set = text_shift[source[sp] - 128]; + value = text_value[source[sp] - 128]; + } else { + shift_set = text_shift[source[sp]]; + value = text_value[source[sp]]; + } + + if(gs1 && (source[sp] == '[')) { + shift_set = 2; + value = 27; /* FNC1 */ + } + + if(shift_set != 0) { + text_buffer[text_p] = shift_set - 1; text_p++; + } + text_buffer[text_p] = value; text_p++; + + if(text_p >= 3) { + int iv; + + iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + + text_buffer[0] = text_buffer[3]; + text_buffer[1] = text_buffer[4]; + text_buffer[2] = text_buffer[5]; + text_buffer[3] = 0; + text_buffer[4] = 0; + text_buffer[5] = 0; + text_p -= 3; + } + sp++; + } + } + + if(current_mode == C1_EDI) { /* Step E - EDI Encodation */ + int value = 0, done = 0, latch = 0; + + next_mode = C1_EDI; + if(edi_p == 0) { + if((length - sp) >= 12) { + j = 0; + + for(i = 0; i < 12; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if (j == 12) { + next_mode = C1_ASCII; done = 1; + } + } + + if((length - sp) >= 8) { + j = 0; + + for(i = 0; i < 8; i++) { + if((source[sp + i] >= '0') && (source[sp + i] <= '9')) { j++; } + } + + if((length - sp) == 8) { + latch = 1; + } else { + latch = 1; + for(j = sp + 8; j < length; j++) { + if((source[j] <= '0') || (source[j] >= '9')) { latch = 0; } + } + } + + if ((j == 8) && latch) { + next_mode = C1_ASCII; done = 1; + } + } + + if(!((isedi(source[sp]) && isedi(source[sp + 1])) && isedi(source[sp + 2]))) { + next_mode = C1_ASCII; + } + } + + if(next_mode != C1_EDI) { + target[tp] = 255; tp++; /* Unlatch */ + } else { + if(source[sp] == 13) { value = 0; } + if(source[sp] == '*') { value = 1; } + if(source[sp] == '>') { value = 2; } + if(source[sp] == ' ') { value = 3; } + if((source[sp] >= '0') && (source[sp] <= '9')) { value = source[sp] - '0' + 4; } + if((source[sp] >= 'A') && (source[sp] <= 'Z')) { value = source[sp] - 'A' + 14; } + + edi_buffer[edi_p] = value; edi_p++; + + if(edi_p >= 3) { + int iv; + + iv = (1600 * edi_buffer[0]) + (40 * edi_buffer[1]) + (edi_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + + edi_buffer[0] = edi_buffer[3]; + edi_buffer[1] = edi_buffer[4]; + edi_buffer[2] = edi_buffer[5]; + edi_buffer[3] = 0; + edi_buffer[4] = 0; + edi_buffer[5] = 0; + edi_p -= 3; + } + sp++; + } + } + + if(current_mode == C1_DECIMAL) { /* Step F - Decimal encodation */ + int value, decimal_count, data_left; + + next_mode = C1_DECIMAL; + + data_left = length - sp; + decimal_count = 0; + + if(data_left >= 1) { + if((source[sp] >= '0') && (source[sp] <= '9')) { decimal_count = 1; } + } + if(data_left >= 2) { + if((decimal_count == 1) && ((source[sp + 1] >= '0') && (source[sp + 1] <= '9'))) { decimal_count = 2; } + } + if(data_left >= 3) { + if((decimal_count == 2) && ((source[sp + 2] >= '0') && (source[sp + 2] <= '9'))) { decimal_count = 3; } + } + + if(decimal_count != 3) { + int bits_left_in_byte, target_count; + int sub_target; + /* Finish Decimal mode and go back to ASCII */ + + concat(decimal_binary, "111111"); /* Unlatch */ + + target_count = 3; + if(strlen(decimal_binary) <= 16) { target_count = 2; } + if(strlen(decimal_binary) <= 8) { target_count = 1; } + bits_left_in_byte = (8 * target_count) - strlen(decimal_binary); + if(bits_left_in_byte == 8) { bits_left_in_byte = 0; } + + if(bits_left_in_byte == 2) { + concat(decimal_binary, "01"); + } + + if((bits_left_in_byte == 4) || (bits_left_in_byte == 6)) { + if(decimal_count >= 1) { + int sub_value = ctoi(source[sp]) + 1; + + if(sub_value & 0x08) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(sub_value & 0x04) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(sub_value & 0x02) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(sub_value & 0x01) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + sp++; + } else { + concat(decimal_binary, "1111"); + } + } + + if(bits_left_in_byte == 6) { + concat(decimal_binary, "01"); + } + + /* Binary buffer is full - transfer to target */ + if(target_count >= 1) { + sub_target = 0; + if(decimal_binary[0] == '1') { sub_target += 128; } + if(decimal_binary[1] == '1') { sub_target += 64; } + if(decimal_binary[2] == '1') { sub_target += 32; } + if(decimal_binary[3] == '1') { sub_target += 16; } + if(decimal_binary[4] == '1') { sub_target += 8; } + if(decimal_binary[5] == '1') { sub_target += 4; } + if(decimal_binary[6] == '1') { sub_target += 2; } + if(decimal_binary[7] == '1') { sub_target += 1; } + target[tp] = sub_target; tp++; + } + if(target_count >= 2) { + sub_target = 0; + if(decimal_binary[8] == '1') { sub_target += 128; } + if(decimal_binary[9] == '1') { sub_target += 64; } + if(decimal_binary[10] == '1') { sub_target += 32; } + if(decimal_binary[11] == '1') { sub_target += 16; } + if(decimal_binary[12] == '1') { sub_target += 8; } + if(decimal_binary[13] == '1') { sub_target += 4; } + if(decimal_binary[14] == '1') { sub_target += 2; } + if(decimal_binary[15] == '1') { sub_target += 1; } + target[tp] = sub_target; tp++; + } + if(target_count == 3) { + sub_target = 0; + if(decimal_binary[16] == '1') { sub_target += 128; } + if(decimal_binary[17] == '1') { sub_target += 64; } + if(decimal_binary[18] == '1') { sub_target += 32; } + if(decimal_binary[19] == '1') { sub_target += 16; } + if(decimal_binary[20] == '1') { sub_target += 8; } + if(decimal_binary[21] == '1') { sub_target += 4; } + if(decimal_binary[22] == '1') { sub_target += 2; } + if(decimal_binary[23] == '1') { sub_target += 1; } + target[tp] = sub_target; tp++; + } + + next_mode = C1_ASCII; + } else { + /* There are three digits - convert the value to binary */ + value = (100 * ctoi(source[sp])) + (10 * ctoi(source[sp + 1])) + ctoi(source[sp + 2]) + 1; + + if(value & 0x200) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x100) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x80) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x40) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x20) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x10) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x08) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x04) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x02) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + if(value & 0x01) { concat(decimal_binary, "1"); } else { concat(decimal_binary, "0"); } + + sp+= 3; + } + + if(strlen(decimal_binary) >= 24) { + int target1 = 0, target2 = 0, target3 = 0; + char temp_binary[40]; + + /* Binary buffer is full - transfer to target */ + if(decimal_binary[0] == '1') { target1 += 128; } + if(decimal_binary[1] == '1') { target1 += 64; } + if(decimal_binary[2] == '1') { target1 += 32; } + if(decimal_binary[3] == '1') { target1 += 16; } + if(decimal_binary[4] == '1') { target1 += 8; } + if(decimal_binary[5] == '1') { target1 += 4; } + if(decimal_binary[6] == '1') { target1 += 2; } + if(decimal_binary[7] == '1') { target1 += 1; } + if(decimal_binary[8] == '1') { target2 += 128; } + if(decimal_binary[9] == '1') { target2 += 64; } + if(decimal_binary[10] == '1') { target2 += 32; } + if(decimal_binary[11] == '1') { target2 += 16; } + if(decimal_binary[12] == '1') { target2 += 8; } + if(decimal_binary[13] == '1') { target2 += 4; } + if(decimal_binary[14] == '1') { target2 += 2; } + if(decimal_binary[15] == '1') { target2 += 1; } + if(decimal_binary[16] == '1') { target3 += 128; } + if(decimal_binary[17] == '1') { target3 += 64; } + if(decimal_binary[18] == '1') { target3 += 32; } + if(decimal_binary[19] == '1') { target3 += 16; } + if(decimal_binary[20] == '1') { target3 += 8; } + if(decimal_binary[21] == '1') { target3 += 4; } + if(decimal_binary[22] == '1') { target3 += 2; } + if(decimal_binary[23] == '1') { target3 += 1; } + target[tp] = target1; tp++; + target[tp] = target2; tp++; + target[tp] = target3; tp++; + + strcpy(temp_binary, ""); + if(strlen(decimal_binary) > 24) { + for(i = 0; i <= (strlen(decimal_binary) - 24); i++) { + temp_binary[i] = decimal_binary[i + 24]; + } + strcpy(decimal_binary, temp_binary); + } + } + } + + if(current_mode == C1_BYTE) { + next_mode = C1_BYTE; + + if(gs1 && (source[sp] == '[')) { + next_mode = C1_ASCII; + } else { + if(source[sp] <= 127) { + next_mode = c1_look_ahead_test(source, length, sp, current_mode, gs1); + } + } + + if(next_mode != C1_BYTE) { + /* Insert byte field length */ + if((tp - byte_start) <= 249) { + for(i = tp; i >= byte_start; i--) { + target[i + 1] = target[i]; + } + target[byte_start] = (tp - byte_start); + tp++; + } else { + for(i = tp; i >= byte_start; i--) { + target[i + 2] = target[i]; + } + target[byte_start] = 249 + ((tp - byte_start) / 250); + target[byte_start + 1] = ((tp - byte_start) % 250); + tp += 2; + } + } else { + target[tp] = source[sp]; + tp++; + sp++; + } + } + + if(tp > 1480) { + /* Data is too large for symbol */ + strcpy(symbol->errtxt, "Input data too long"); + return 0; + } + } while (sp < length); + + /* Empty buffers */ + if(c40_p == 2) { + int iv; + + c40_buffer[2] = 1; + iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + target[tp] = 255; tp++; /* Unlatch */ + } + if(c40_p == 1) { + int iv; + + c40_buffer[1] = 1; + c40_buffer[2] = 31; /* Pad */ + iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + target[tp] = 255; tp++; /* Unlatch */ + } + if(text_p == 2) { + int iv; + + text_buffer[2] = 1; + iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + target[tp] = 255; tp++; /* Unlatch */ + } + if(text_p == 1) { + int iv; + + text_buffer[1] = 1; + text_buffer[2] = 31; /* Pad */ + iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + target[tp] = 255; tp++; /* Unlatch */ + } + + if(current_mode == C1_DECIMAL) { + int bits_left_in_byte, target_count; + int sub_target; + /* Finish Decimal mode and go back to ASCII */ + + concat(decimal_binary, "111111"); /* Unlatch */ + + target_count = 3; + if(strlen(decimal_binary) <= 16) { target_count = 2; } + if(strlen(decimal_binary) <= 8) { target_count = 1; } + bits_left_in_byte = (8 * target_count) - strlen(decimal_binary); + if(bits_left_in_byte == 8) { bits_left_in_byte = 0; } + + if(bits_left_in_byte == 2) { + concat(decimal_binary, "01"); + } + + if((bits_left_in_byte == 4) || (bits_left_in_byte == 6)) { + concat(decimal_binary, "1111"); + } + + if(bits_left_in_byte == 6) { + concat(decimal_binary, "01"); + } + + /* Binary buffer is full - transfer to target */ + if(target_count >= 1) { + sub_target = 0; + if(decimal_binary[0] == '1') { sub_target += 128; } + if(decimal_binary[1] == '1') { sub_target += 64; } + if(decimal_binary[2] == '1') { sub_target += 32; } + if(decimal_binary[3] == '1') { sub_target += 16; } + if(decimal_binary[4] == '1') { sub_target += 8; } + if(decimal_binary[5] == '1') { sub_target += 4; } + if(decimal_binary[6] == '1') { sub_target += 2; } + if(decimal_binary[7] == '1') { sub_target += 1; } + target[tp] = sub_target; tp++; + } + if(target_count >= 2) { + sub_target = 0; + if(decimal_binary[8] == '1') { sub_target += 128; } + if(decimal_binary[9] == '1') { sub_target += 64; } + if(decimal_binary[10] == '1') { sub_target += 32; } + if(decimal_binary[11] == '1') { sub_target += 16; } + if(decimal_binary[12] == '1') { sub_target += 8; } + if(decimal_binary[13] == '1') { sub_target += 4; } + if(decimal_binary[14] == '1') { sub_target += 2; } + if(decimal_binary[15] == '1') { sub_target += 1; } + target[tp] = sub_target; tp++; + } + if(target_count == 3) { + sub_target = 0; + if(decimal_binary[16] == '1') { sub_target += 128; } + if(decimal_binary[17] == '1') { sub_target += 64; } + if(decimal_binary[18] == '1') { sub_target += 32; } + if(decimal_binary[19] == '1') { sub_target += 16; } + if(decimal_binary[20] == '1') { sub_target += 8; } + if(decimal_binary[21] == '1') { sub_target += 4; } + if(decimal_binary[22] == '1') { sub_target += 2; } + if(decimal_binary[23] == '1') { sub_target += 1; } + target[tp] = sub_target; tp++; + } + } + + if(current_mode == C1_BYTE) { + /* Insert byte field length */ + if((tp - byte_start) <= 249) { + for(i = tp; i >= byte_start; i--) { + target[i + 1] = target[i]; + } + target[byte_start] = (tp - byte_start); + tp++; + } else { + for(i = tp; i >= byte_start; i--) { + target[i + 2] = target[i]; + } + target[byte_start] = 249 + ((tp - byte_start) / 250); + target[byte_start + 1] = ((tp - byte_start) % 250); + tp += 2; + } + } + + /* Re-check length of data */ + if(tp > 1480) { + /* Data is too large for symbol */ + strcpy(symbol->errtxt, "Input data too long"); + return 0; + } + /* + printf("targets:\n"); + for(i = 0; i < tp; i++) { + printf("[%d]", target[i]); + } + printf("\n"); + */ + return tp; +} + +void block_copy(struct zint_symbol *symbol, char grid[][120], int start_row, int start_col, int height, int width, int row_offset, int col_offset) { + int i, j; + + for(i = start_row; i < (start_row + height); i++) { + for(j = start_col; j < (start_col + width); j++) { + if(grid[i][j] == '1') { + set_module(symbol, i + row_offset, j + col_offset); + } + } + } +} + +int code_one(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int size = 1, i, j, data_blocks; + + char datagrid[136][120]; + int row, col; + int sub_version = 0; + + if((symbol->option_2 < 0) || (symbol->option_2 > 10)) { + strcpy(symbol->errtxt, "Invalid symbol size"); + return ERROR_INVALID_OPTION; + } + + if(symbol->option_2 == 9) { + /* Version S */ + int codewords; + short int elreg[112]; + unsigned int data[15], ecc[15]; + int stream[30]; + int block_width; + + if(length > 18) { + strcpy(symbol->errtxt, "Input data too long"); + return ERROR_TOO_LONG; + } + if(is_sane(NEON, source, length) == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid input data (Version S encodes numeric input only)"); + return ERROR_INVALID_DATA1; + } + + sub_version = 3; codewords = 12; block_width = 6; /* Version S-30 */ + if(length <= 12) { sub_version = 2; codewords = 8; block_width = 4; } /* Version S-20 */ + if(length <= 6) { sub_version = 1; codewords = 4; block_width = 2; } /* Version S-10 */ + + binary_load(elreg, (char *)source, length); + hex_dump(elreg); + + for(i = 0; i < 15; i++) { + data[i] = 0; + ecc[i] = 0; + } + + for(i = 0; i < codewords; i++) { + data[codewords - i - 1] += 1 * elreg[(i * 5)]; + data[codewords - i - 1] += 2 * elreg[(i * 5) + 1]; + data[codewords - i - 1] += 4 * elreg[(i * 5) + 2]; + data[codewords - i - 1] += 8 * elreg[(i * 5) + 3]; + data[codewords - i - 1] += 16 * elreg[(i * 5) + 4]; + } + + rs_init_gf(0x25); + rs_init_code(codewords, 1); + rs_encode_long(codewords, data, ecc); + rs_free(); + + for(i = 0; i < codewords; i++) { + stream[i] = data[i]; + stream[i + codewords] = ecc[codewords - i - 1]; + } + + for(i = 0; i < 136; i++) { + for(j = 0; j < 120; j++) { + datagrid[i][j] = '0'; + } + } + + i = 0; + for(row = 0; row < 2; row++) { + for(col = 0; col < block_width; col++) { + if(stream[i] & 0x10) { datagrid[row * 2][col * 5] = '1'; } + if(stream[i] & 0x08) { datagrid[row * 2][(col * 5) + 1] = '1'; } + if(stream[i] & 0x04) { datagrid[row * 2][(col * 5) + 2] = '1'; } + if(stream[i] & 0x02) { datagrid[(row * 2) + 1][col * 5] = '1'; } + if(stream[i] & 0x01) { datagrid[(row * 2) + 1][(col * 5) + 1] = '1'; } + if(stream[i + 1] & 0x10) { datagrid[row * 2][(col * 5) + 3] = '1'; } + if(stream[i + 1] & 0x08) { datagrid[row * 2][(col * 5) + 4] = '1'; } + if(stream[i + 1] & 0x04) { datagrid[(row * 2) + 1][(col * 5) + 2] = '1'; } + if(stream[i + 1] & 0x02) { datagrid[(row * 2) + 1][(col * 5) + 3] = '1'; } + if(stream[i + 1] & 0x01) { datagrid[(row * 2) + 1][(col * 5) + 4] = '1'; } + i += 2; + } + } + + size = 9; + symbol->rows = 8; + symbol->width = 10 * sub_version + 1; + } + + if(symbol->option_2 == 10) { + /* Version T */ + unsigned int data[40], ecc[25]; + unsigned int stream[65]; + int data_length; + int data_cw, ecc_cw, block_width; + + for(i = 0; i < 40; i++) { data[i] = 0; } + data_length = c1_encode(symbol, source, data, length); + + if(data_length == 0) { + return ERROR_TOO_LONG; + } + + if(data_length > 38) { + strcpy(symbol->errtxt, "Input data too long"); + return ERROR_TOO_LONG; + } + + size = 10; + sub_version = 3; data_cw = 38; ecc_cw = 22; block_width = 12; + if(data_length <= 24) { sub_version = 2; data_cw = 24; ecc_cw = 16; block_width = 8; } + if(data_length <= 10) { sub_version = 1; data_cw = 10; ecc_cw = 10; block_width = 4; } + + for(i = data_length; i < data_cw; i++) { + data[i] = 129; /* Pad */ + } + + /* Calculate error correction data */ + rs_init_gf(0x12d); + rs_init_code(ecc_cw, 1); + rs_encode_long(data_cw, data, ecc); + rs_free(); + + /* "Stream" combines data and error correction data */ + for(i = 0; i < data_cw; i++) { + stream[i] = data[i]; + } + for(i = 0; i < ecc_cw; i++) { + stream[data_cw + i] = ecc[ecc_cw - i - 1]; + } + + for(i = 0; i < 136; i++) { + for(j = 0; j < 120; j++) { + datagrid[i][j] = '0'; + } + } + + i = 0; + for(row = 0; row < 5; row++) { + for(col = 0; col < block_width; col++) { + if(stream[i] & 0x80) { datagrid[row * 2][col * 4] = '1'; } + if(stream[i] & 0x40) { datagrid[row * 2][(col * 4) + 1] = '1'; } + if(stream[i] & 0x20) { datagrid[row * 2][(col * 4) + 2] = '1'; } + if(stream[i] & 0x10) { datagrid[row * 2][(col * 4) + 3] = '1'; } + if(stream[i] & 0x08) { datagrid[(row * 2) + 1][col * 4] = '1'; } + if(stream[i] & 0x04) { datagrid[(row * 2) + 1][(col * 4) + 1] = '1'; } + if(stream[i] & 0x02) { datagrid[(row * 2) + 1][(col * 4) + 2] = '1'; } + if(stream[i] & 0x01) { datagrid[(row * 2) + 1][(col * 4) + 3] = '1'; } + i++; + } + } + + symbol->rows = 16; + symbol->width = (sub_version * 16) + 1; + } + + if((symbol->option_2 != 9) && (symbol->option_2 != 10)) { + /* Version A to H */ + unsigned int data[1500], ecc[600]; + unsigned int sub_data[190], sub_ecc[75]; + unsigned int stream[2100]; + int data_length; + + for(i = 0; i < 1500; i++) { data[i] = 0; } + data_length = c1_encode(symbol, source, data, length); + + if(data_length == 0) { + return ERROR_TOO_LONG; + } + + for(i = 7; i >= 0; i--) { + if(c1_data_length[i] >= data_length) { + size = i + 1; + } + } + + if(symbol->option_2 > size) { + size = symbol->option_2; + } + + for(i = data_length; i < c1_data_length[size - 1]; i++) { + data[i] = 129; /* Pad */ + } + + /* Calculate error correction data */ + data_length = c1_data_length[size - 1]; + for(i = 0; i < 190; i++) { sub_data[i] = 0; } + for(i = 0; i < 75; i++) { sub_ecc[i] = 0; } + + data_blocks = c1_blocks[size - 1]; + + rs_init_gf(0x12d); + rs_init_code(c1_ecc_blocks[size - 1], 0); + for(i = 0; i < data_blocks; i++) { + for(j = 0; j < c1_data_blocks[size - 1]; j++) { + + sub_data[j] = data[j * data_blocks + i]; + } + rs_encode_long(c1_data_blocks[size - 1], sub_data, sub_ecc); + for(j = 0; j < c1_ecc_blocks[size - 1]; j++) { + ecc[c1_ecc_length[size - 1] - (j * data_blocks + i) - 1] = sub_ecc[j]; + } + } + rs_free(); + + /* "Stream" combines data and error correction data */ + for(i = 0; i < data_length; i++) { + stream[i] = data[i]; + } + for(i = 0; i < c1_ecc_length[size - 1]; i++) { + stream[data_length + i] = ecc[i]; + } + + for(i = 0; i < 136; i++) { + for(j = 0; j < 120; j++) { + datagrid[i][j] = '0'; + } + } + + i = 0; + for(row = 0; row < c1_grid_height[size - 1]; row++) { + for(col = 0; col < c1_grid_width[size - 1]; col++) { + if(stream[i] & 0x80) { datagrid[row * 2][col * 4] = '1'; } + if(stream[i] & 0x40) { datagrid[row * 2][(col * 4) + 1] = '1'; } + if(stream[i] & 0x20) { datagrid[row * 2][(col * 4) + 2] = '1'; } + if(stream[i] & 0x10) { datagrid[row * 2][(col * 4) + 3] = '1'; } + if(stream[i] & 0x08) { datagrid[(row * 2) + 1][col * 4] = '1'; } + if(stream[i] & 0x04) { datagrid[(row * 2) + 1][(col * 4) + 1] = '1'; } + if(stream[i] & 0x02) { datagrid[(row * 2) + 1][(col * 4) + 2] = '1'; } + if(stream[i] & 0x01) { datagrid[(row * 2) + 1][(col * 4) + 3] = '1'; } + i++; + } + } + + /* for(i = 0; i < (c1_grid_height[size - 1] * 2); i++) { + for(j = 0; j < (c1_grid_width[size - 1] * 4); j++) { + printf("%c", datagrid[i][j]); + } + printf("\n"); + } */ + + symbol->rows = c1_height[size - 1]; + symbol->width = c1_width[size - 1]; + } + + switch(size) { + case 1: /* Version A */ + central_finder(symbol, 6, 3, 1); + vert(symbol, 4, 6, 1); + vert(symbol, 12, 5, 0); + set_module(symbol, 5, 12); + spigot(symbol, 0); + spigot(symbol, 15); + block_copy(symbol, datagrid, 0, 0, 5, 4, 0, 0); + block_copy(symbol, datagrid, 0, 4, 5, 12, 0, 2); + block_copy(symbol, datagrid, 5, 0, 5, 12, 6, 0); + block_copy(symbol, datagrid, 5, 12, 5, 4, 6, 2); + break; + case 2: /* Version B */ + central_finder(symbol, 8, 4, 1); + vert(symbol, 4, 8, 1); + vert(symbol, 16, 7, 0); + set_module(symbol, 7, 16); + spigot(symbol, 0); + spigot(symbol, 21); + block_copy(symbol, datagrid, 0, 0, 7, 4, 0, 0); + block_copy(symbol, datagrid, 0, 4, 7, 16, 0, 2); + block_copy(symbol, datagrid, 7, 0, 7, 16, 8, 0); + block_copy(symbol, datagrid, 7, 16, 7, 4, 8, 2); + break; + case 3: /* Version C */ + central_finder(symbol, 11, 4, 2); + vert(symbol, 4, 11, 1); + vert(symbol, 26, 13, 1); + vert(symbol, 4, 10, 0); + vert(symbol, 26, 10, 0); + spigot(symbol, 0); + spigot(symbol, 27); + block_copy(symbol, datagrid, 0, 0, 10, 4, 0, 0); + block_copy(symbol, datagrid, 0, 4, 10, 20, 0, 2); + block_copy(symbol, datagrid, 0, 24, 10, 4, 0, 4); + block_copy(symbol, datagrid, 10, 0, 10, 4, 8, 0); + block_copy(symbol, datagrid, 10, 4, 10, 20, 8, 2); + block_copy(symbol, datagrid, 10, 24, 10, 4, 8, 4); + break; + case 4: /* Version D */ + central_finder(symbol, 16, 5, 1); + vert(symbol, 4, 16, 1); + vert(symbol, 20, 16, 1); + vert(symbol, 36, 16, 1); + vert(symbol, 4, 15, 0); + vert(symbol, 20, 15, 0); + vert(symbol, 36, 15, 0); + spigot(symbol, 0); + spigot(symbol, 12); + spigot(symbol, 27); + spigot(symbol, 39); + block_copy(symbol, datagrid, 0, 0, 15, 4, 0, 0); + block_copy(symbol, datagrid, 0, 4, 15, 14, 0, 2); + block_copy(symbol, datagrid, 0, 18, 15, 14, 0, 4); + block_copy(symbol, datagrid, 0, 32, 15, 4, 0, 6); + block_copy(symbol, datagrid, 15, 0, 15, 4, 10, 0); + block_copy(symbol, datagrid, 15, 4, 15, 14, 10, 2); + block_copy(symbol, datagrid, 15, 18, 15, 14, 10, 4); + block_copy(symbol, datagrid, 15, 32, 15, 4, 10, 6); + break; + case 5: /* Version E */ + central_finder(symbol, 22, 5, 2); + vert(symbol, 4, 22, 1); + vert(symbol, 26, 24, 1); + vert(symbol, 48, 22, 1); + vert(symbol, 4, 21, 0); + vert(symbol, 26, 21, 0); + vert(symbol, 48, 21, 0); + spigot(symbol, 0); + spigot(symbol, 12); + spigot(symbol, 39); + spigot(symbol, 51); + block_copy(symbol, datagrid, 0, 0, 21, 4, 0, 0); + block_copy(symbol, datagrid, 0, 4, 21, 20, 0, 2); + block_copy(symbol, datagrid, 0, 24, 21, 20, 0, 4); + block_copy(symbol, datagrid, 0, 44, 21, 4, 0, 6); + block_copy(symbol, datagrid, 21, 0, 21, 4, 10, 0); + block_copy(symbol, datagrid, 21, 4, 21, 20, 10, 2); + block_copy(symbol, datagrid, 21, 24, 21, 20, 10, 4); + block_copy(symbol, datagrid, 21, 44, 21, 4, 10, 6); + break; + case 6: /* Version F */ + central_finder(symbol, 31, 5, 3); + vert(symbol, 4, 31, 1); + vert(symbol, 26, 35, 1); + vert(symbol, 48, 31, 1); + vert(symbol, 70, 35, 1); + vert(symbol, 4, 30, 0); + vert(symbol, 26, 30, 0); + vert(symbol, 48, 30, 0); + vert(symbol, 70, 30, 0); + spigot(symbol, 0); + spigot(symbol, 12); + spigot(symbol, 24); + spigot(symbol, 45); + spigot(symbol, 57); + spigot(symbol, 69); + block_copy(symbol, datagrid, 0, 0, 30, 4, 0, 0); + block_copy(symbol, datagrid, 0, 4, 30, 20, 0, 2); + block_copy(symbol, datagrid, 0, 24, 30, 20, 0, 4); + block_copy(symbol, datagrid, 0, 44, 30, 20, 0, 6); + block_copy(symbol, datagrid, 0, 64, 30, 4, 0, 8); + block_copy(symbol, datagrid, 30, 0, 30, 4, 10, 0); + block_copy(symbol, datagrid, 30, 4, 30, 20, 10, 2); + block_copy(symbol, datagrid, 30, 24, 30, 20, 10, 4); + block_copy(symbol, datagrid, 30, 44, 30, 20, 10, 6); + block_copy(symbol, datagrid, 30, 64, 30, 4, 10, 8); + break; + case 7: /* Version G */ + central_finder(symbol, 47, 6, 2); + vert(symbol, 6, 47, 1); + vert(symbol, 27, 49, 1); + vert(symbol, 48, 47, 1); + vert(symbol, 69, 49, 1); + vert(symbol, 90, 47, 1); + vert(symbol, 6, 46, 0); + vert(symbol, 27, 46, 0); + vert(symbol, 48, 46, 0); + vert(symbol, 69, 46, 0); + vert(symbol, 90, 46, 0); + spigot(symbol, 0); + spigot(symbol, 12); + spigot(symbol, 24); + spigot(symbol, 36); + spigot(symbol, 67); + spigot(symbol, 79); + spigot(symbol, 91); + spigot(symbol, 103); + block_copy(symbol, datagrid, 0, 0, 46, 6, 0, 0); + block_copy(symbol, datagrid, 0, 6, 46, 19, 0, 2); + block_copy(symbol, datagrid, 0, 25, 46, 19, 0, 4); + block_copy(symbol, datagrid, 0, 44, 46, 19, 0, 6); + block_copy(symbol, datagrid, 0, 63, 46, 19, 0, 8); + block_copy(symbol, datagrid, 0, 82, 46, 6, 0, 10); + block_copy(symbol, datagrid, 46, 0, 46, 6, 12, 0); + block_copy(symbol, datagrid, 46, 6, 46, 19, 12, 2); + block_copy(symbol, datagrid, 46, 25, 46, 19, 12, 4); + block_copy(symbol, datagrid, 46, 44, 46, 19, 12, 6); + block_copy(symbol, datagrid, 46, 63, 46, 19, 12, 8); + block_copy(symbol, datagrid, 46, 82, 46, 6, 12, 10); + break; + case 8: /* Version H */ + central_finder(symbol, 69, 6, 3); + vert(symbol, 6, 69, 1); + vert(symbol, 26, 73, 1); + vert(symbol, 46, 69, 1); + vert(symbol, 66, 73, 1); + vert(symbol, 86, 69, 1); + vert(symbol, 106, 73, 1); + vert(symbol, 126, 69, 1); + vert(symbol, 6, 68, 0); + vert(symbol, 26, 68, 0); + vert(symbol, 46, 68, 0); + vert(symbol, 66, 68, 0); + vert(symbol, 86, 68, 0); + vert(symbol, 106, 68, 0); + vert(symbol, 126, 68, 0); + spigot(symbol, 0); + spigot(symbol, 12); + spigot(symbol, 24); + spigot(symbol, 36); + spigot(symbol, 48); + spigot(symbol, 60); + spigot(symbol, 87); + spigot(symbol, 99); + spigot(symbol, 111); + spigot(symbol, 123); + spigot(symbol, 135); + spigot(symbol, 147); + block_copy(symbol, datagrid, 0, 0, 68, 6, 0, 0); + block_copy(symbol, datagrid, 0, 6, 68, 18, 0, 2); + block_copy(symbol, datagrid, 0, 24, 68, 18, 0, 4); + block_copy(symbol, datagrid, 0, 42, 68, 18, 0, 6); + block_copy(symbol, datagrid, 0, 60, 68, 18, 0, 8); + block_copy(symbol, datagrid, 0, 78, 68, 18, 0, 10); + block_copy(symbol, datagrid, 0, 96, 68, 18, 0, 12); + block_copy(symbol, datagrid, 0, 114, 68, 6, 0, 14); + block_copy(symbol, datagrid, 68, 0, 68, 6, 12, 0); + block_copy(symbol, datagrid, 68, 6, 68, 18, 12, 2); + block_copy(symbol, datagrid, 68, 24, 68, 18, 12, 4); + block_copy(symbol, datagrid, 68, 42, 68, 18, 12, 6); + block_copy(symbol, datagrid, 68, 60, 68, 18, 12, 8); + block_copy(symbol, datagrid, 68, 78, 68, 18, 12, 10); + block_copy(symbol, datagrid, 68, 96, 68, 18, 12, 12); + block_copy(symbol, datagrid, 68, 114, 68, 6, 12, 14); + break; + case 9: /* Version S */ + horiz(symbol, 5, 1); + horiz(symbol, 7, 1); + set_module(symbol, 6, 0); + set_module(symbol, 6, symbol->width - 1); + unset_module(symbol, 7, 1); + unset_module(symbol, 7, symbol->width - 2); + switch(sub_version) { + case 1: /* Version S-10 */ + set_module(symbol, 0, 5); + block_copy(symbol, datagrid, 0, 0, 4, 5, 0, 0); + block_copy(symbol, datagrid, 0, 5, 4, 5, 0, 1); + break; + case 2: /* Version S-20 */ + set_module(symbol, 0, 10); + set_module(symbol, 4, 10); + block_copy(symbol, datagrid, 0, 0, 4, 10, 0, 0); + block_copy(symbol, datagrid, 0, 10, 4, 10, 0, 1); + break; + case 3: /* Version S-30 */ + set_module(symbol, 0, 15); + set_module(symbol, 4, 15); + set_module(symbol, 6, 15); + block_copy(symbol, datagrid, 0, 0, 4, 15, 0, 0); + block_copy(symbol, datagrid, 0, 15, 4, 15, 0, 1); + break; + } + break; + case 10: /* Version T */ + horiz(symbol, 11, 1); + horiz(symbol, 13, 1); + horiz(symbol, 15, 1); + set_module(symbol, 12, 0); + set_module(symbol, 12, symbol->width - 1); + set_module(symbol, 14, 0); + set_module(symbol, 14, symbol->width - 1); + unset_module(symbol, 13, 1); + unset_module(symbol, 13, symbol->width - 2); + unset_module(symbol, 15, 1); + unset_module(symbol, 15, symbol->width - 2); + switch(sub_version) { + case 1: /* Version T-16 */ + set_module(symbol, 0, 8); + set_module(symbol, 10, 8); + block_copy(symbol, datagrid, 0, 0, 10, 8, 0, 0); + block_copy(symbol, datagrid, 0, 8, 10, 8, 0, 1); + break; + case 2: /* Version T-32 */ + set_module(symbol, 0, 16); + set_module(symbol, 10, 16); + set_module(symbol, 12, 16); + block_copy(symbol, datagrid, 0, 0, 10, 16, 0, 0); + block_copy(symbol, datagrid, 0, 16, 10, 16, 0, 1); + break; + case 3: /* Verion T-48 */ + set_module(symbol, 0, 24); + set_module(symbol, 10, 24); + set_module(symbol, 12, 24); + set_module(symbol, 14, 24); + block_copy(symbol, datagrid, 0, 0, 10, 24, 0, 0); + block_copy(symbol, datagrid, 0, 24, 10, 24, 0, 1); + break; + } + break; + } + + for(i = 0; i < symbol->rows; i++) { + symbol->row_height[i] = 1; + } + + return 0; +} diff --git a/3rdparty/zint-2.4.4/backend/code1.h b/3rdparty/zint-2.4.4/backend/code1.h new file mode 100644 index 0000000..532dc77 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/code1.h @@ -0,0 +1,61 @@ +/* code1.h - Lookup info for USS Code One */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +static int c40_shift[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; + +static int c40_value[] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,5,6,7,8,9,10,11,12,13, + 15,16,17,18,19,20,21,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 22,23,24,25,26,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 }; + +static int text_shift[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3 }; + +static int text_value[] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,5,6,7,8,9,10,11,12,13, + 15,16,17,18,19,20,21,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26, + 22,23,24,25,26,0,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,27,28,29,30,31 }; + +static int c1_height[] = { 16, 22, 28, 40, 52, 70, 104, 148 }; +static int c1_width[] = { 18, 22, 32, 42, 54, 76, 98, 134 }; +static int c1_data_length[] = { 10, 19, 44, 91, 182, 370, 732, 1480 }; +static int c1_ecc_length[] = { 10, 16, 26, 44, 70, 140, 280, 560 }; +static int c1_blocks[] = { 1, 1, 1, 1, 1, 2, 4, 8 }; +static int c1_data_blocks[] = { 10, 19, 44, 91, 182, 185, 183, 185 }; +static int c1_ecc_blocks[] = { 10, 16, 26, 44, 70, 70, 70, 70 }; +static int c1_grid_width[] = { 4, 5, 7, 9, 12, 17, 22, 30 }; +static int c1_grid_height[] = { 5, 7, 10, 15, 21, 30, 46, 68 }; + +#define C1_ASCII 1 +#define C1_C40 2 +#define C1_DECIMAL 3 +#define C1_TEXT 4 +#define C1_EDI 5 +#define C1_BYTE 6 \ No newline at end of file diff --git a/3rdparty/zint-2.4.4/backend/code128.c b/3rdparty/zint-2.4.4/backend/code128.c new file mode 100644 index 0000000..fc74c8e --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/code128.c @@ -0,0 +1,997 @@ +/* code128.c - Handles Code 128 and derivatives */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + Bugfixes thanks to Christian Sakowski and BogDan Vatra + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" +#include "gs1.h" + +#define TRUE 1 +#define FALSE 0 +#define SHIFTA 90 +#define LATCHA 91 +#define SHIFTB 92 +#define LATCHB 93 +#define SHIFTC 94 +#define LATCHC 95 +#define AORB 96 +#define ABORC 97 + +#define DPDSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ*" + +static int list[2][170]; + +/* Code 128 tables checked against ISO/IEC 15417:2007 */ + +static char *C128Table[107] = {"212222", "222122", "222221", "121223", "121322", "131222", "122213", + "122312", "132212", "221213", "221312", "231212", "112232", "122132", "122231", "113222", + "123122", "123221", "223211", "221132", "221231", "213212", "223112", "312131", "311222", + "321122", "321221", "312212", "322112", "322211", "212123", "212321", "232121", "111323", + "131123", "131321", "112313", "132113", "132311", "211313", "231113", "231311", "112133", + "112331", "132131", "113123", "113321", "133121", "313121", "211331", "231131", "213113", + "213311", "213131", "311123", "311321", "331121", "312113", "312311", "332111", "314111", + "221411", "431111", "111224", "111422", "121124", "121421", "141122", "141221", "112214", + "112412", "122114", "122411", "142112", "142211", "241211", "221114", "413111", "241112", + "134111", "111242", "121142", "121241", "114212", "124112", "124211", "411212", "421112", + "421211", "212141", "214121", "412121", "111143", "111341", "131141", "114113", "114311", + "411113", "411311", "113141", "114131", "311141", "411131", "211412", "211214", "211232", + "2331112"}; +/* Code 128 character encodation - Table 1 */ + +int parunmodd(unsigned char llyth) +{ + int modd; + modd = 0; + + if(llyth <= 31) { modd = SHIFTA; } + else if((llyth >= 48) && (llyth <= 57)) { modd = ABORC; } + else if(llyth <= 95) { modd = AORB; } + else if(llyth <= 127) { modd = SHIFTB; } + else if(llyth <= 159) { modd = SHIFTA; } + else if(llyth <= 223) { modd = AORB; } + else { modd = SHIFTB; } + + return modd; +} + +void grwp(int *indexliste) +{ + int i, j; + + /* bring together same type blocks */ + if(*(indexliste) > 1) { + i = 1; + while(i < *(indexliste)) { + if(list[1][i - 1] == list[1][i]) { + /* bring together */ + list[0][i - 1] = list[0][i - 1] + list[0][i]; + j = i + 1; + + /* decreace the list */ + while(j < *(indexliste)) { + list[0][j - 1] = list[0][j]; + list[1][j - 1] = list[1][j]; + j++; + } + *(indexliste) = *(indexliste) - 1; + i--; + } + i++; + } + } +} + +void dxsmooth(int *indexliste) +{ /* Implements rules from ISO 15417 Annex E */ + int i, current, last, next, length; + + for(i = 0; i < *(indexliste); i++) { + current = list[1][i]; + length = list[0][i]; + if(i != 0) { last = list[1][i - 1]; } else { last = FALSE; } + if(i != *(indexliste) - 1) { next = list[1][i + 1]; } else { next = FALSE; } + + if(i == 0) { /* first block */ + if((*(indexliste) == 1) && ((length == 2) && (current == ABORC))) { /* Rule 1a */ list[1][i] = LATCHC; } + if(current == ABORC) { + if(length >= 4) {/* Rule 1b */ list[1][i] = LATCHC; } else { list[1][i] = AORB; current = AORB; } + } + if(current == SHIFTA) { /* Rule 1c */ list[1][i] = LATCHA; } + if((current == AORB) && (next == SHIFTA)) { /* Rule 1c */ list[1][i] = LATCHA; current = LATCHA; } + if(current == AORB) { /* Rule 1d */ list[1][i] = LATCHB; } + } else { + if((current == ABORC) && (length >= 4)) { /* Rule 3 */ list[1][i] = LATCHC; current = LATCHC; } + if(current == ABORC) { list[1][i] = AORB; current = AORB; } + if((current == AORB) && (last == LATCHA)) { list[1][i] = LATCHA; current = LATCHA; } + if((current == AORB) && (last == LATCHB)) { list[1][i] = LATCHB; current = LATCHB; } + if((current == AORB) && (next == SHIFTA)) { list[1][i] = LATCHA; current = LATCHA; } + if((current == AORB) && (next == SHIFTB)) { list[1][i] = LATCHB; current = LATCHB; } + if(current == AORB) { list[1][i] = LATCHB; current = LATCHB; } + if((current == SHIFTA) && (length > 1)) { /* Rule 4 */ list[1][i] = LATCHA; current = LATCHA; } + if((current == SHIFTB) && (length > 1)) { /* Rule 5 */ list[1][i] = LATCHB; current = LATCHB; } + if((current == SHIFTA) && (last == LATCHA)) { list[1][i] = LATCHA; current = LATCHA; } + if((current == SHIFTB) && (last == LATCHB)) { list[1][i] = LATCHB; current = LATCHB; } + if((current == SHIFTA) && (last == LATCHC)) { list[1][i] = LATCHA; current = LATCHA; } + if((current == SHIFTB) && (last == LATCHC)) { list[1][i] = LATCHB; current = LATCHB; } + } /* Rule 2 is implimented elsewhere, Rule 6 is implied */ + } + grwp(indexliste); + +} + +void c128_set_a(unsigned char source, char dest[], int values[], int *bar_chars) +{ /* Translate Code 128 Set A characters into barcodes */ + /* This set handles all control characters NULL to US */ + + if(source > 127) { + if(source < 160) { + concat(dest, C128Table[(source - 128) + 64]); + values[(*bar_chars)] = (source - 128) + 64; + } else { + concat(dest, C128Table[(source - 128) - 32]); + values[(*bar_chars)] = (source - 128) - 32; + } + } else { + if(source < 32) { + concat(dest, C128Table[source + 64]); + values[(*bar_chars)] = source + 64; + } else { + concat(dest, C128Table[source - 32]); + values[(*bar_chars)] = source - 32; + } + } + (*bar_chars)++; +} + +void c128_set_b(unsigned char source, char dest[], int values[], int *bar_chars) +{ /* Translate Code 128 Set B characters into barcodes */ + /* This set handles all characters which are not part of long numbers and not control characters */ + + if(source > 127) { + concat(dest, C128Table[source - 32 - 128]); + values[(*bar_chars)] = source - 32 - 128; + } else { + concat(dest, C128Table[source - 32]); + values[(*bar_chars)] = source - 32; + } + (*bar_chars)++; +} + +void c128_set_c(unsigned char source_a, unsigned char source_b, char dest[], int values[], int *bar_chars) +{ /* Translate Code 128 Set C characters into barcodes */ + /* This set handles numbers in a compressed form */ + int weight; + + weight = (10 * ctoi(source_a)) + ctoi(source_b); + concat(dest, C128Table[weight]); + values[(*bar_chars)] = weight; + (*bar_chars)++; +} + +int code_128(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Handle Code 128 and NVE-18 */ + int i, j, k, e_count, values[170] = { 0 }, bar_characters, read, total_sum, nve_check; + int error_number, indexchaine, indexliste, sourcelen, f_state; + char set[170] = { ' ' }, fset[170] = { ' ' }, mode, last_set, last_fset, current_set = ' '; + float glyph_count; + char dest[1000]; + + error_number = 0; + strcpy(dest, ""); + + sourcelen = length; + + j = 0; + e_count = 0; + bar_characters = 0; + nve_check = 0; + f_state = 0; + + if(sourcelen > 160) { + /* This only blocks rediculously long input - the actual length of the + resulting barcode depends on the type of data, so this is trapped later */ + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* Detect extended ASCII characters */ + for(i = 0; i < sourcelen; i++) { + if(source[i] >= 128) + fset[i] = 'f'; + } + fset[i] = '\0'; + + /* Decide when to latch to extended mode - Annex E note 3 */ + j = 0; + for(i = 0; i < sourcelen; i++) { + if(fset[i] == 'f') { + j++; + } else { + j = 0; + } + + if(j >= 5) { + for(k = i; k > (i - 5); k--) { + fset[k] = 'F'; + } + } + + if((j >= 3) && (i == (sourcelen - 1))) { + for(k = i; k > (i - 3); k--) { + fset[k] = 'F'; + } + } + } + + /* Decide if it is worth reverting to 646 encodation for a few characters as described in 4.3.4.2 (d) */ + for(i = 1; i < sourcelen; i++) { + if((fset[i - 1] == 'F') && (fset[i] == ' ')) { + /* Detected a change from 8859-1 to 646 - count how long for */ + for(j = 0; (fset[i + j] == ' ') && ((i + j) < sourcelen); j++); + if((j < 5) || ((j < 3) && ((i + j) == (sourcelen - 1)))) { + /* Uses the same figures recommended by Annex E note 3 */ + /* Change to shifting back rather than latching back */ + for(k = 0; k < j; k++) { + fset[i + k] = 'n'; + } + } + } + } + + /* Decide on mode using same system as PDF417 and rules of ISO 15417 Annex E */ + indexliste = 0; + indexchaine = 0; + + mode = parunmodd(source[indexchaine]); + if((symbol->symbology == BARCODE_CODE128B) && (mode == ABORC)) { + mode = AORB; + } + + for(i = 0; i < 170; i++) { + list[0][i] = 0; + } + + do { + list[1][indexliste] = mode; + while ((list[1][indexliste] == mode) && (indexchaine < sourcelen)) { + list[0][indexliste]++; + indexchaine++; + mode = parunmodd(source[indexchaine]); + if((symbol->symbology == BARCODE_CODE128B) && (mode == ABORC)) { + mode = AORB; + } + } + indexliste++; + } while (indexchaine < sourcelen); + + dxsmooth(&indexliste); + + /* Resolve odd length LATCHC blocks */ + if((list[1][0] == LATCHC) && (list[0][0] & 1)) { + /* Rule 2 */ + list[0][1]++; + list[0][0]--; + if(indexliste == 1) { + list[0][1] = 1; + list[1][1] = LATCHB; + indexliste = 2; + } + } + if(indexliste > 1) { + for(i = 1; i < indexliste; i++) { + if((list[1][i] == LATCHC) && (list[0][i] & 1)) { + /* Rule 3b */ + list[0][i - 1]++; + list[0][i]--; + } + } + } + + /* Put set data into set[] */ + + read = 0; + for(i = 0; i < indexliste; i++) { + for(j = 0; j < list[0][i]; j++) { + switch(list[1][i]) { + case SHIFTA: set[read] = 'a'; break; + case LATCHA: set[read] = 'A'; break; + case SHIFTB: set[read] = 'b'; break; + case LATCHB: set[read] = 'B'; break; + case LATCHC: set[read] = 'C'; break; + } + read++; + } + } + + /* Adjust for strings which start with shift characters - make them latch instead */ + if(set[0] == 'a') { + i = 0; + do { + set[i] = 'A'; + i++; + } while (set[i] == 'a'); + } + + if(set[0] == 'b') { + i = 0; + do { + set[i] = 'B'; + i++; + } while (set[i] == 'b'); + } + + /* Now we can calculate how long the barcode is going to be - and stop it from + being too long */ + last_set = ' '; + last_fset = ' '; + glyph_count = 0.0; + for(i = 0; i < sourcelen; i++) { + if((set[i] == 'a') || (set[i] == 'b')) { + glyph_count = glyph_count + 1.0; + } + if((fset[i] == 'f') || (fset[i] == 'n')) { + glyph_count = glyph_count + 1.0; + } + if(((set[i] == 'A') || (set[i] == 'B')) || (set[i] == 'C')) { + if(set[i] != last_set) { + last_set = set[i]; + glyph_count = glyph_count + 1.0; + } + } + if(i == 0) { + if(fset[i] == 'F') { + last_fset = 'F'; + glyph_count = glyph_count + 2.0; + } + } else { + if((fset[i] == 'F') && (fset[i - 1] != 'F')) { + last_fset = 'F'; + glyph_count = glyph_count + 2.0; + } + if((fset[i] != 'F') && (fset[i - 1] == 'F')) { + last_fset = ' '; + glyph_count = glyph_count + 2.0; + } + } + + if(set[i] == 'C') { + glyph_count = glyph_count + 0.5; + } else { + glyph_count = glyph_count + 1.0; + } + } + if(glyph_count > 80.0) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + + /* So now we know what start character to use - we can get on with it! */ + if(symbol->output_options & READER_INIT) { + /* Reader Initialisation mode */ + switch(set[0]) { + case 'A': /* Start A */ + concat(dest, C128Table[103]); + values[0] = 103; + current_set = 'A'; + concat(dest, C128Table[96]); /* FNC3 */ + values[1] = 96; + bar_characters++; + break; + case 'B': /* Start B */ + concat(dest, C128Table[104]); + values[0] = 104; + current_set = 'B'; + concat(dest, C128Table[96]); /* FNC3 */ + values[1] = 96; + bar_characters++; + break; + case 'C': /* Start C */ + concat(dest, C128Table[104]); /* Start B */ + values[0] = 105; + concat(dest, C128Table[96]); /* FNC3 */ + values[1] = 96; + concat(dest, C128Table[99]); /* Code C */ + values[2] = 99; + bar_characters += 2; + current_set = 'C'; + break; + } + } else { + /* Normal mode */ + switch(set[0]) { + case 'A': /* Start A */ + concat(dest, C128Table[103]); + values[0] = 103; + current_set = 'A'; + break; + case 'B': /* Start B */ + concat(dest, C128Table[104]); + values[0] = 104; + current_set = 'B'; + break; + case 'C': /* Start C */ + concat(dest, C128Table[105]); + values[0] = 105; + current_set = 'C'; + break; + } + } + bar_characters++; + last_set = set[0]; + + if(fset[0] == 'F') { + switch(current_set) { + case 'A': + concat(dest, C128Table[101]); + concat(dest, C128Table[101]); + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + concat(dest, C128Table[100]); + concat(dest, C128Table[100]); + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 1; + } + + /* Encode the data */ + read = 0; + do { + + if((read != 0) && (set[read] != current_set)) + { /* Latch different code set */ + switch(set[read]) + { + case 'A': concat(dest, C128Table[101]); + values[bar_characters] = 101; + bar_characters++; + current_set = 'A'; + break; + case 'B': concat(dest, C128Table[100]); + values[bar_characters] = 100; + bar_characters++; + current_set = 'B'; + break; + case 'C': concat(dest, C128Table[99]); + values[bar_characters] = 99; + bar_characters++; + current_set = 'C'; + break; + } + } + + if(read != 0) { + if((fset[read] == 'F') && (f_state == 0)) { + /* Latch beginning of extended mode */ + switch(current_set) { + case 'A': + concat(dest, C128Table[101]); + concat(dest, C128Table[101]); + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + concat(dest, C128Table[100]); + concat(dest, C128Table[100]); + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 1; + } + if((fset[read] == ' ') && (f_state == 1)) { + /* Latch end of extended mode */ + switch(current_set) { + case 'A': + concat(dest, C128Table[101]); + concat(dest, C128Table[101]); + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + concat(dest, C128Table[100]); + concat(dest, C128Table[100]); + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 0; + } + } + + if((fset[read] == 'f') || (fset[read] == 'n')) { + /* Shift to or from extended mode */ + switch(current_set) { + case 'A': + concat(dest, C128Table[101]); /* FNC 4 */ + values[bar_characters] = 101; + break; + case 'B': + concat(dest, C128Table[100]); /* FNC 4 */ + values[bar_characters] = 100; + break; + } + bar_characters++; + } + + if((set[read] == 'a') || (set[read] == 'b')) { + /* Insert shift character */ + concat(dest, C128Table[98]); + values[bar_characters] = 98; + bar_characters++; + } + + switch(set[read]) + { /* Encode data characters */ + case 'a': + case 'A': c128_set_a(source[read], dest, values, &bar_characters); + read++; + break; + case 'b': + case 'B': c128_set_b(source[read], dest, values, &bar_characters); + read++; + break; + case 'C': c128_set_c(source[read], source[read + 1], dest, values, &bar_characters); + read += 2; + break; + } + + } while (read < sourcelen); + + /* check digit calculation */ + total_sum = 0; + /*for(i = 0; i < bar_characters; i++) { + printf("%d\n", values[i]); + }*/ + + for(i = 0; i < bar_characters; i++) + { + if(i > 0) + { + values[i] *= i; + } + total_sum += values[i]; + } + concat(dest, C128Table[total_sum%103]); + + /* Stop character */ + concat(dest, C128Table[106]); + expand(symbol, dest); + return error_number; +} + +int ean_128(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Handle EAN-128 (Now known as GS1-128) */ + int i, j, e_count, values[170], bar_characters, read, total_sum; + int error_number, indexchaine, indexliste; + char set[170], mode, last_set; + float glyph_count; + char dest[1000]; + int separator_row, linkage_flag, c_count; +#ifndef _MSC_VER + char reduced[length + 1]; +#else + char* reduced = (char*)_alloca(length + 1); +#endif + error_number = 0; + strcpy(dest, ""); + linkage_flag = 0; + + j = 0; + e_count = 0; + bar_characters = 0; + separator_row = 0; + + memset(values, 0, sizeof(values)); + memset(set, ' ', sizeof(set)); + + if(length > 160) { + /* This only blocks rediculously long input - the actual length of the + resulting barcode depends on the type of data, so this is trapped later */ + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + for(i = 0; i < length; i++) { + if(source[i] == '\0') { + /* Null characters not allowed! */ + strcpy(symbol->errtxt, "NULL character in input data"); + return ERROR_INVALID_DATA1; + } + } + + /* if part of a composite symbol make room for the separator pattern */ + if(symbol->symbology == BARCODE_EAN128_CC) { + separator_row = symbol->rows; + symbol->row_height[symbol->rows] = 1; + symbol->rows += 1; + } + + if(symbol->input_mode != GS1_MODE) { + /* GS1 data has not been checked yet */ + error_number = gs1_verify(symbol, source, length, reduced); + if(error_number != 0) { return error_number; } + } + + /* Decide on mode using same system as PDF417 and rules of ISO 15417 Annex E */ + indexliste = 0; + indexchaine = 0; + + mode = parunmodd(reduced[indexchaine]); + if(reduced[indexchaine] == '[') { + mode = ABORC; + } + + for(i = 0; i < 170; i++) { + list[0][i] = 0; + } + + do { + list[1][indexliste] = mode; + while ((list[1][indexliste] == mode) && (indexchaine < strlen(reduced))) { + list[0][indexliste]++; + indexchaine++; + mode = parunmodd(reduced[indexchaine]); + if(reduced[indexchaine] == '[') { mode = ABORC; } + } + indexliste++; + } while (indexchaine < strlen(reduced)); + + dxsmooth(&indexliste); + + /* Put set data into set[] */ + read = 0; + for(i = 0; i < indexliste; i++) { + for(j = 0; j < list[0][i]; j++) { + switch(list[1][i]) { + case SHIFTA: set[read] = 'a'; break; + case LATCHA: set[read] = 'A'; break; + case SHIFTB: set[read] = 'b'; break; + case LATCHB: set[read] = 'B'; break; + case LATCHC: set[read] = 'C'; break; + } + read++; + } + } + + /* Watch out for odd-length Mode C blocks */ + c_count = 0; + for(i = 0; i < read; i++) { + if(set[i] == 'C') { + if(reduced[i] == '[') { + if(c_count & 1) { + if((i - c_count) != 0) { + set[i - c_count] = 'B'; + } else { + set[i - 1] = 'B'; + } + } + c_count = 0; + } else { + c_count++; + } + } else { + if(c_count & 1) { + if((i - c_count) != 0) { + set[i - c_count] = 'B'; + } else { + set[i - 1] = 'B'; + } + } + c_count = 0; + } + } + if(c_count & 1) { + if((i - c_count) != 0) { + set[i - c_count] = 'B'; + } else { + set[i - 1] = 'B'; + } + } + for(i = 1; i < read - 1; i++) { + if((set[i] == 'C') && ((set[i - 1] == 'B') && (set[i + 1] == 'B'))) { + set[i] = 'B'; + } + } + + /* for(i = 0; i < read; i++) { + printf("char %c mode %c\n", reduced[i], set[i]); + } */ + + /* Now we can calculate how long the barcode is going to be - and stop it from + being too long */ + last_set = ' '; + glyph_count = 0.0; + for(i = 0; i < strlen(reduced); i++) { + if((set[i] == 'a') || (set[i] == 'b')) { + glyph_count = glyph_count + 1.0; + } + if(((set[i] == 'A') || (set[i] == 'B')) || (set[i] == 'C')) { + if(set[i] != last_set) { + last_set = set[i]; + glyph_count = glyph_count + 1.0; + } + } + + if((set[i] == 'C') && (reduced[i] != '[')) { + glyph_count = glyph_count + 0.5; + } else { + glyph_count = glyph_count + 1.0; + } + } + if(glyph_count > 80.0) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* So now we know what start character to use - we can get on with it! */ + switch(set[0]) + { + case 'A': /* Start A */ + concat(dest, C128Table[103]); + values[0] = 103; + break; + case 'B': /* Start B */ + concat(dest, C128Table[104]); + values[0] = 104; + break; + case 'C': /* Start C */ + concat(dest, C128Table[105]); + values[0] = 105; + break; + } + bar_characters++; + + concat(dest, C128Table[102]); + values[1] = 102; + bar_characters++; + + /* Encode the data */ + read = 0; + do { + + if((read != 0) && (set[read] != set[read - 1])) + { /* Latch different code set */ + switch(set[read]) + { + case 'A': concat(dest, C128Table[101]); + values[bar_characters] = 101; + bar_characters++; + break; + case 'B': concat(dest, C128Table[100]); + values[bar_characters] = 100; + bar_characters++; + break; + case 'C': concat(dest, C128Table[99]); + values[bar_characters] = 99; + bar_characters++; + break; + } + } + + if((set[read] == 'a') || (set[read] == 'b')) { + /* Insert shift character */ + concat(dest, C128Table[98]); + values[bar_characters] = 98; + bar_characters++; + } + + if(reduced[read] != '[') { + switch(set[read]) + { /* Encode data characters */ + case 'A': + case 'a': + c128_set_a(reduced[read], dest, values, &bar_characters); + read++; + break; + case 'B': + case 'b': + c128_set_b(reduced[read], dest, values, &bar_characters); + read++; + break; + case 'C': + c128_set_c(reduced[read], reduced[read + 1], dest, values, &bar_characters); + read += 2; + break; + } + } else { + concat(dest, C128Table[102]); + values[bar_characters] = 102; + bar_characters++; + read++; + } + } while (read < strlen(reduced)); + + /* "...note that the linkage flag is an extra code set character between + the last data character and the Symbol Check Character" (GS1 Specification) */ + + /* Linkage flags in GS1-128 are determined by ISO/IEC 24723 section 7.4 */ + + switch(symbol->option_1) { + case 1: + case 2: + /* CC-A or CC-B 2D component */ + switch(set[strlen(reduced) - 1]) { + case 'A': linkage_flag = 100; break; + case 'B': linkage_flag = 99; break; + case 'C': linkage_flag = 101; break; + } + break; + case 3: + /* CC-C 2D component */ + switch(set[strlen(reduced) - 1]) { + case 'A': linkage_flag = 99; break; + case 'B': linkage_flag = 101; break; + case 'C': linkage_flag = 100; break; + } + break; + } + + if(linkage_flag != 0) { + concat(dest, C128Table[linkage_flag]); + values[bar_characters] = linkage_flag; + bar_characters++; + } + + /*for(i = 0; i < bar_characters; i++) { + printf("[%d] ", values[i]); + } + printf("\n");*/ + + /* check digit calculation */ + total_sum = 0; + for(i = 0; i < bar_characters; i++) + { + if(i > 0) + { + values[i] *= i; + + } + total_sum += values[i]; + } + concat(dest, C128Table[total_sum%103]); + values[bar_characters] = total_sum % 103; + bar_characters++; + + /* Stop character */ + concat(dest, C128Table[106]); + values[bar_characters] = 106; + bar_characters++; + expand(symbol, dest); + + /* Add the separator pattern for composite symbols */ + if(symbol->symbology == BARCODE_EAN128_CC) { + for(i = 0; i < symbol->width; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); + } + } + } + + for(i = 0; i < length; i++) { + if((source[i] != '[') && (source[i] != ']')) { + symbol->text[i] = source[i]; + } + if(source[i] == '[') { + symbol->text[i] = '('; + } + if(source[i] == ']') { + symbol->text[i] = ')'; + } + } + + return error_number; +} + +int nve_18(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* Add check digit if encoding an NVE18 symbol */ + int error_number, zeroes, i, nve_check, total_sum, sourcelen; + unsigned char ean128_equiv[25]; + + memset(ean128_equiv, 0, 25); + sourcelen = length; + + if(sourcelen > 17) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + zeroes = 17 - sourcelen; + strcpy((char *)ean128_equiv, "[00]"); + memset(ean128_equiv + 4, '0', zeroes); + strcpy((char*)ean128_equiv + 4 + zeroes, (char*)source); + + total_sum = 0; + for(i = sourcelen - 1; i >= 0; i--) + { + total_sum += ctoi(source[i]); + + if(!(i & 1)) { + total_sum += 2 * ctoi(source[i]); + } + } + nve_check = 10 - total_sum % 10; + if(nve_check == 10) { nve_check = 0; } + ean128_equiv[21] = itoc(nve_check); + ean128_equiv[22] = '\0'; + + error_number = ean_128(symbol, ean128_equiv, ustrlen(ean128_equiv)); + + return error_number; +} + +int ean_14(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* EAN-14 - A version of EAN-128 */ + int i, count, check_digit; + int error_number, zeroes; + unsigned char ean128_equiv[20]; + + if(length > 13) { + strcpy(symbol->errtxt, "Input wrong length"); + return ERROR_TOO_LONG; + } + + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid character in data"); + return error_number; + } + + zeroes = 13 - length; + strcpy((char*)ean128_equiv, "[01]"); + memset(ean128_equiv + 4, '0', zeroes); + ustrcpy(ean128_equiv + 4 + zeroes, source); + + count = 0; + for (i = length - 1; i >= 0; i--) { + count += ctoi(source[i]); + + if (!(i & 1)) { + count += 2 * ctoi(source[i]); + } + } + check_digit = 10 - (count % 10); + if (check_digit == 10) { check_digit = 0; } + ean128_equiv[17] = itoc(check_digit); + ean128_equiv[18] = '\0'; + + error_number = ean_128(symbol, ean128_equiv, ustrlen(ean128_equiv)); + + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/code16k.c b/3rdparty/zint-2.4.4/backend/code16k.c new file mode 100644 index 0000000..638d786 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/code16k.c @@ -0,0 +1,622 @@ +/* code16k.c - Handles Code 16k stacked symbology */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* Updated to comply with BS EN 12323:2005 */ + +/* up to 77 characters or 154 numbers */ + +#include +#include +#include +#include "common.h" + +#define TRUE 1 +#define FALSE 0 +#define SHIFTA 90 +#define LATCHA 91 +#define SHIFTB 92 +#define LATCHB 93 +#define SHIFTC 94 +#define LATCHC 95 +#define AORB 96 +#define ABORC 97 +#define CANDB 98 +#define CANDBB 99 + +static int list[2][170]; + +/* EN 12323 Table 1 - "Code 16K" character encodations */ +static char *C16KTable[107] = {"212222", "222122", "222221", "121223", "121322", "131222", "122213", + "122312", "132212", "221213", "221312", "231212", "112232", "122132", "122231", "113222", + "123122", "123221", "223211", "221132", "221231", "213212", "223112", "312131", "311222", + "321122", "321221", "312212", "322112", "322211", "212123", "212321", "232121", "111323", + "131123", "131321", "112313", "132113", "132311", "211313", "231113", "231311", "112133", + "112331", "132131", "113123", "113321", "133121", "313121", "211331", "231131", "213113", + "213311", "213131", "311123", "311321", "331121", "312113", "312311", "332111", "314111", + "221411", "431111", "111224", "111422", "121124", "121421", "141122", "141221", "112214", + "112412", "122114", "122411", "142112", "142211", "241211", "221114", "413111", "241112", + "134111", "111242", "121142", "121241", "114212", "124112", "124211", "411212", "421112", + "421211", "212141", "214121", "412121", "111143", "111341", "131141", "114113", "114311", + "411113", "411311", "113141", "114131", "311141", "411131", "211412", "211214", "211232", + "211133"}; + +/* EN 12323 Table 3 and Table 4 - Start patterns and stop patterns */ +static char *C16KStartStop[8] = {"3211", "2221", "2122", "1411", "1132", "1231", "1114", "3112"}; + +/* EN 12323 Table 5 - Start and stop values defining row numbers */ +static int C16KStartValues[16] = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7}; +static int C16KStopValues[16] = {0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3}; + +void grwp16(int *indexliste) +{ + int i, j; + + /* bring together same type blocks */ + if(*(indexliste) > 1) { + i = 1; + while(i < *(indexliste)) { + if(list[1][i - 1] == list[1][i]) { + /* bring together */ + list[0][i - 1] = list[0][i - 1] + list[0][i]; + j = i + 1; + + /* decreace the list */ + while(j < *(indexliste)) { + list[0][j - 1] = list[0][j]; + list[1][j - 1] = list[1][j]; + j++; + } + *(indexliste) = *(indexliste) - 1; + i--; + } + i++; + } + } +} + +void dxsmooth16(int *indexliste) +{ /* Implements rules from ISO 15417 Annex E */ + int i, current, last, next, length; + + for(i = 0; i < *(indexliste); i++) { + current = list[1][i]; + length = list[0][i]; + if(i != 0) { last = list[1][i - 1]; } else { last = FALSE; } + if(i != *(indexliste) - 1) { next = list[1][i + 1]; } else { next = FALSE; } + + if(i == 0) { /* first block */ + if((*(indexliste) == 1) && ((length == 2) && (current == ABORC))) { /* Rule 1a */ list[1][i] = LATCHC; } + if(current == ABORC) { + if(length >= 4) {/* Rule 1b */ list[1][i] = LATCHC; } else { list[1][i] = AORB; current = AORB; } + } + if(current == SHIFTA) { /* Rule 1c */ list[1][i] = LATCHA; } + if((current == AORB) && (next == SHIFTA)) { /* Rule 1c */ list[1][i] = LATCHA; current = LATCHA; } + if(current == AORB) { /* Rule 1d */ list[1][i] = LATCHB; } + } else { + if((current == ABORC) && (length >= 4)) { /* Rule 3 */ list[1][i] = LATCHC; current = LATCHC; } + if(current == ABORC) { list[1][i] = AORB; current = AORB; } + if((current == AORB) && (last == LATCHA)) { list[1][i] = LATCHA; current = LATCHA; } + if((current == AORB) && (last == LATCHB)) { list[1][i] = LATCHB; current = LATCHB; } + if((current == AORB) && (next == SHIFTA)) { list[1][i] = LATCHA; current = LATCHA; } + if((current == AORB) && (next == SHIFTB)) { list[1][i] = LATCHB; current = LATCHB; } + if(current == AORB) { list[1][i] = LATCHB; current = LATCHB; } + if((current == SHIFTA) && (length > 1)) { /* Rule 4 */ list[1][i] = LATCHA; current = LATCHA; } + if((current == SHIFTB) && (length > 1)) { /* Rule 5 */ list[1][i] = LATCHB; current = LATCHB; } + if((current == SHIFTA) && (last == LATCHA)) { list[1][i] = LATCHA; current = LATCHA; } + if((current == SHIFTB) && (last == LATCHB)) { list[1][i] = LATCHB; current = LATCHB; } + if((current == SHIFTA) && (last == LATCHC)) { list[1][i] = LATCHA; current = LATCHA; } + if((current == SHIFTB) && (last == LATCHC)) { list[1][i] = LATCHB; current = LATCHB; } + } /* Rule 2 is implimented elsewhere, Rule 6 is implied */ + } + grwp16(indexliste); + +} + +void c16k_set_a(unsigned char source, unsigned int values[], unsigned int *bar_chars) +{ + if(source > 127) { + if(source < 160) { + values[(*bar_chars)] = source + 64 - 128; + } else { + values[(*bar_chars)] = source - 32 - 128; + } + } else { + if(source < 32) { + values[(*bar_chars)] = source + 64; + } else { + values[(*bar_chars)] = source - 32; + } + } + (*bar_chars)++; +} + +void c16k_set_b(unsigned char source, unsigned int values[], unsigned int *bar_chars) +{ + if(source > 127) { + values[(*bar_chars)] = source - 32 - 128; + } else { + values[(*bar_chars)] = source - 32; + } + (*bar_chars)++; +} + +void c16k_set_c(unsigned char source_a, unsigned char source_b, unsigned int values[], unsigned int *bar_chars) +{ + int weight; + + weight = (10 * ctoi(source_a)) + ctoi(source_b); + values[(*bar_chars)] = weight; + (*bar_chars)++; +} + +int code16k(struct zint_symbol *symbol, unsigned char source[], int length) +{ + char width_pattern[100]; + int current_row, rows_needed, flip_flop, looper, first_check, second_check; + int indexliste, indexchaine, pads_needed, f_state; + char set[160] = { ' ' }, fset[160] = { ' ' }, mode, last_set, last_fset, current_set; + unsigned int i, j, k, m, e_count, read, mx_reader, writer; + unsigned int values[160] = { 0 }; + unsigned int bar_characters; + float glyph_count; + int errornum, first_sum, second_sum; + int input_length; + int gs1, c_count; + + errornum = 0; + strcpy(width_pattern, ""); + input_length = length; + + if(symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; } + + if(input_length > 157) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + e_count = 0; + bar_characters = 0; + + /* Detect extended ASCII characters */ + for(i = 0; i < input_length; i++) { + if(source[i] >=128) { + fset[i] = 'f'; + } + } + fset[i] = '\0'; + + /* Decide when to latch to extended mode */ + for(i = 0; i < input_length; i++) { + j = 0; + if(fset[i] == 'f') { + do { + j++; + } while(fset[i + j] == 'f'); + if((j >= 5) || ((j >= 3) && ((i + j) == (input_length - 1)))) { + for(k = 0; k <= j; k++) { + fset[i + k] = 'F'; + } + } + } + } + + /* Decide if it is worth reverting to 646 encodation for a few characters */ + if(input_length > 1) { + for(i = 1; i < input_length; i++) { + if((fset[i - 1] == 'F') && (fset[i] == ' ')) { + /* Detected a change from 8859-1 to 646 - count how long for */ + for(j = 0; (fset[i + j] == ' ') && ((i + j) < input_length); j++); + if((j < 5) || ((j < 3) && ((i + j) == (input_length - 1)))) { + /* Change to shifting back rather than latching back */ + for(k = 0; k < j; k++) { + fset[i + k] = 'n'; + } + } + } + } + } + /* Detect mode A, B and C characters */ + indexliste = 0; + indexchaine = 0; + + mode = parunmodd(source[indexchaine]); + if((gs1) && (source[indexchaine] == '[')) { mode = ABORC; } /* FNC1 */ + + for(i = 0; i < 160; i++) { + list[0][i] = 0; + } + + do { + list[1][indexliste] = mode; + while ((list[1][indexliste] == mode) && (indexchaine < input_length)) { + list[0][indexliste]++; + indexchaine++; + mode = parunmodd(source[indexchaine]); + if((gs1) && (source[indexchaine] == '[')) { mode = ABORC; } /* FNC1 */ + } + indexliste++; + } while (indexchaine < input_length); + + dxsmooth16(&indexliste); + + /* Put set data into set[] */ + read = 0; + for(i = 0; i < indexliste; i++) { + for(j = 0; j < list[0][i]; j++) { + switch(list[1][i]) { + case SHIFTA: set[read] = 'a'; break; + case LATCHA: set[read] = 'A'; break; + case SHIFTB: set[read] = 'b'; break; + case LATCHB: set[read] = 'B'; break; + case LATCHC: set[read] = 'C'; break; + } + read++; + } + } + + /* Adjust for strings which start with shift characters - make them latch instead */ + if(set[0] == 'a') { + i = 0; + do { + set[i] = 'A'; + i++; + } while (set[i] == 'a'); + } + + if(set[0] == 'b') { + i = 0; + do { + set[i] = 'B'; + i++; + } while (set[i] == 'b'); + } + + /* Watch out for odd-length Mode C blocks */ + c_count = 0; + for(i = 0; i < read; i++) { + if(set[i] == 'C') { + if(source[i] == '[') { + if(c_count & 1) { + if((i - c_count) != 0) { + set[i - c_count] = 'B'; + } else { + set[i - 1] = 'B'; + } + } + c_count = 0; + } else { + c_count++; + } + } else { + if(c_count & 1) { + if((i - c_count) != 0) { + set[i - c_count] = 'B'; + } else { + set[i - 1] = 'B'; + } + } + c_count = 0; + } + } + if(c_count & 1) { + if((i - c_count) != 0) { + set[i - c_count] = 'B'; + } else { + set[i - 1] = 'B'; + } + } + for(i = 1; i < read - 1; i++) { + if((set[i] == 'C') && ((set[i - 1] == 'B') && (set[i + 1] == 'B'))) { + set[i] = 'B'; + } + } + + /* Make sure the data will fit in the symbol */ + last_set = ' '; + last_fset = ' '; + glyph_count = 0.0; + for(i = 0; i < input_length; i++) { + if((set[i] == 'a') || (set[i] == 'b')) { + glyph_count = glyph_count + 1.0; + } + if((fset[i] == 'f') || (fset[i] == 'n')) { + glyph_count = glyph_count + 1.0; + } + if(((set[i] == 'A') || (set[i] == 'B')) || (set[i] == 'C')) { + if(set[i] != last_set) { + last_set = set[i]; + glyph_count = glyph_count + 1.0; + } + } + if(i == 0) { + if((set[i] == 'B') && (set[1] == 'C')) { + glyph_count = glyph_count - 1.0; + } + if((set[i] == 'B') && (set[1] == 'B')) { + if(set[2] == 'C') { + glyph_count = glyph_count - 1.0; + } + } + if(fset[i] == 'F') { + last_fset = 'F'; + glyph_count = glyph_count + 2.0; + } + } else { + if((fset[i] == 'F') && (fset[i - 1] != 'F')) { + last_fset = 'F'; + glyph_count = glyph_count + 2.0; + } + if((fset[i] != 'F') && (fset[i - 1] == 'F')) { + last_fset = ' '; + glyph_count = glyph_count + 2.0; + } + } + + if((set[i] == 'C') && (!((gs1) && (source[i] == '[')))) { + glyph_count = glyph_count + 0.5; + } else { + glyph_count = glyph_count + 1.0; + } + } + + if((gs1) && (set[0] != 'A')) { + /* FNC1 can be integrated with mode character */ + glyph_count--; + } + + if(glyph_count > 77.0) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* Calculate how tall the symbol will be */ + glyph_count = glyph_count + 2.0; + i = glyph_count; + rows_needed = (i/5); + if(i%5 > 0) { rows_needed++; } + + if(rows_needed == 1) { + rows_needed = 2; + } + + /* start with the mode character - Table 2 */ + m = 0; + switch(set[0]) { + case 'A': m = 0; break; + case 'B': m = 1; break; + case 'C': m = 2; break; + } + + if(symbol->output_options & READER_INIT) { + if(m == 2) { m = 5; } + if(gs1) { + strcpy(symbol->errtxt, "Cannot use both GS1 mode and Reader Initialisation"); + return ERROR_INVALID_OPTION; + } else { + if((set[0] == 'B') && (set[1] == 'C')) { m = 6; } + } + values[bar_characters] = (7 * (rows_needed - 2)) + m; /* see 4.3.4.2 */ + values[bar_characters + 1] = 96; /* FNC3 */ + bar_characters += 2; + } else { + if(gs1) { + /* Integrate FNC1 */ + switch(set[0]) { + case 'B': m = 3; break; + case 'C': m = 4; break; + } + } else { + if((set[0] == 'B') && (set[1] == 'C')) { m = 5; } + if(((set[0] == 'B') && (set[1] == 'B')) && (set[2] == 'C')) { m = 6; } + } + values[bar_characters] = (7 * (rows_needed - 2)) + m; /* see 4.3.4.2 */ + bar_characters++; + } + + current_set = set[0]; + f_state = 0; /* f_state remembers if we are in Extended ASCII mode (value 1) or + in ISO/IEC 646 mode (value 0) */ + if(fset[0] == 'F') { + switch(current_set) { + case 'A': + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 1; + } + + read = 0; + + /* Encode the data */ + do { + + if((read != 0) && (set[read] != set[read - 1])) + { /* Latch different code set */ + switch(set[read]) + { + case 'A': + values[bar_characters] = 101; + bar_characters++; + current_set = 'A'; + break; + case 'B': + values[bar_characters] = 100; + bar_characters++; + current_set = 'B'; + break; + case 'C': + if(!((read == 1) && (set[0] == 'B'))) { /* Not Mode C/Shift B */ + if(!((read == 2) && ((set[0] == 'B') && (set[1] == 'B')))) { + /* Not Mode C/Double Shift B */ + values[bar_characters] = 99; + bar_characters++; + } + } + current_set = 'C'; + break; + } + } + /* printf("tp8\n"); */ + if(read != 0) { + if((fset[read] == 'F') && (f_state == 0)) { + /* Latch beginning of extended mode */ + switch(current_set) { + case 'A': + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 1; + } + if((fset[read] == ' ') && (f_state == 1)) { + /* Latch end of extended mode */ + switch(current_set) { + case 'A': + values[bar_characters] = 101; + values[bar_characters + 1] = 101; + break; + case 'B': + values[bar_characters] = 100; + values[bar_characters + 1] = 100; + break; + } + bar_characters += 2; + f_state = 0; + } + } + + if((fset[i] == 'f') || (fset[i] == 'n')) { + /* Shift extended mode */ + switch(current_set) { + case 'A': + values[bar_characters] = 101; /* FNC 4 */ + break; + case 'B': + values[bar_characters] = 100; /* FNC 4 */ + break; + } + bar_characters++; + } + + if((set[i] == 'a') || (set[i] == 'b')) { + /* Insert shift character */ + values[bar_characters] = 98; + bar_characters++; + } + + if(!((gs1) && (source[read] == '['))) { + switch(set[read]) + { /* Encode data characters */ + case 'A': + case 'a': + c16k_set_a(source[read], values, &bar_characters); + read++; + break; + case 'B': + case 'b': + c16k_set_b(source[read], values, &bar_characters); + read++; + break; + case 'C': c16k_set_c(source[read], source[read + 1], values, &bar_characters); + read += 2; + break; + } + } else { + values[bar_characters] = 102; + bar_characters++; + read++; + } + /* printf("tp9 read=%d surrent set=%c\n", read, set[read]); */ + } while (read < ustrlen(source)); + + pads_needed = 5 - ((bar_characters + 2) % 5); + if(pads_needed == 5) { + pads_needed = 0; + } + if((bar_characters + pads_needed) < 8) { + pads_needed += 8 - (bar_characters + pads_needed); + } + for(i = 0; i < pads_needed; i++) { + values[bar_characters] = 106; + bar_characters++; + } + + /* Calculate check digits */ + first_sum = 0; + second_sum = 0; + for(i = 0; i < bar_characters; i++) + { + first_sum += (i+2) * values[i]; + second_sum += (i+1) * values[i]; + } + first_check = first_sum % 107; + second_sum += first_check * (bar_characters + 1); + second_check = second_sum % 107; + values[bar_characters] = first_check; + values[bar_characters + 1] = second_check; + bar_characters += 2; + + for(current_row = 0; current_row < rows_needed; current_row++) { + + strcpy(width_pattern, ""); + concat(width_pattern, C16KStartStop[C16KStartValues[current_row]]); + concat(width_pattern, "1"); + for(i = 0; i < 5; i++) { + concat(width_pattern, C16KTable[values[(current_row * 5) + i]]); + /* printf("[%d] ", values[(current_row * 5) + i]); */ + + } + concat(width_pattern, C16KStartStop[C16KStopValues[current_row]]); + /* printf("\n"); */ + + /* Write the information into the symbol */ + writer = 0; + flip_flop = 1; + for (mx_reader = 0; mx_reader < strlen(width_pattern); mx_reader++) { + for(looper = 0; looper < ctoi(width_pattern[mx_reader]); looper++) { + if(flip_flop == 1) { + set_module(symbol, current_row, writer); + writer++; } + else { + writer++; } + } + if(flip_flop == 0) { flip_flop = 1; } else { flip_flop = 0; } + } + symbol->row_height[current_row] = 10; + } + + symbol->rows = rows_needed; + symbol->width = 70; + return errornum; +} + + diff --git a/3rdparty/zint-2.4.4/backend/code49.c b/3rdparty/zint-2.4.4/backend/code49.c new file mode 100644 index 0000000..c90fe10 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/code49.c @@ -0,0 +1,315 @@ +/* code49.c - Handles Code 49 */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include "common.h" +#include "code49.h" + +#define INSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%!&*" +/* "!" represents Shift 1 and "&" represents Shift 2, "*" represents FNC1 */ + +int code_49(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int i, j, rows, M, x_count, y_count, z_count, posn_val, local_value, h; + char intermediate[170]; + int codewords[170], codeword_count; + int c_grid[8][8]; /* Refers to table 3 */ + int w_grid[8][4]; /* Refets to table 2 */ + int pad_count = 0; + char pattern[40]; + int gs1; + + if(length > 81) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + if(symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; } + + strcpy(intermediate, gs1 ? "*" : ""); /* FNC1 */ + for(i = 0; i < length; i++) { + if(source[i] > 127) { + strcpy(symbol->errtxt, "Invalid characters in input data"); + return ERROR_INVALID_DATA1; + } + if(gs1 && (source[i] == '[')) + concat(intermediate, "*"); /* FNC1 */ + else + concat(intermediate, c49_table7[source[i]]); + } + + codeword_count = 0; + i = 0; + h = strlen(intermediate); + do { + if((intermediate[i] >= '0') && (intermediate[i] <= '9')) { + /* Numeric data */ + for(j = 0; (intermediate[i + j] >= '0') && (intermediate[i + j] <= '9'); j++); + if(j >= 5) { + /* Use Numeric Encodation Method */ + int block_count, c; + int block_remain; + int block_value; + + codewords[codeword_count] = 48; /* Numeric Shift */ + codeword_count++; + + block_count = j / 5; + block_remain = j % 5; + + for(c = 0; c < block_count; c++) { + if((c == block_count - 1) && (block_remain == 2)) { + /* Rule (d) */ + block_value = 100000; + block_value += ctoi(intermediate[i]) * 1000; + block_value += ctoi(intermediate[i + 1]) * 100; + block_value += ctoi(intermediate[i + 2]) * 10; + block_value += ctoi(intermediate[i + 3]); + + codewords[codeword_count] = block_value / (48 * 48); + block_value = block_value - (48 * 48) * codewords[codeword_count]; + codeword_count++; + codewords[codeword_count] = block_value / 48; + block_value = block_value - 48 * codewords[codeword_count]; + codeword_count++; + codewords[codeword_count] = block_value; + codeword_count++; + i += 4; + block_value = ctoi(intermediate[i]) * 100; + block_value += ctoi(intermediate[i + 1]) * 10; + block_value += ctoi(intermediate[i + 2]); + + codewords[codeword_count] = block_value / 48; + block_value = block_value - 48 * codewords[codeword_count]; + codeword_count++; + codewords[codeword_count] = block_value; + codeword_count++; + i += 3; + } else { + block_value = ctoi(intermediate[i]) * 10000; + block_value += ctoi(intermediate[i + 1]) * 1000; + block_value += ctoi(intermediate[i + 2]) * 100; + block_value += ctoi(intermediate[i + 3]) * 10; + block_value += ctoi(intermediate[i + 4]); + + codewords[codeword_count] = block_value / (48 * 48); + block_value = block_value - (48 * 48) * codewords[codeword_count]; + codeword_count++; + codewords[codeword_count] = block_value / 48; + block_value = block_value - 48 * codewords[codeword_count]; + codeword_count++; + codewords[codeword_count] = block_value; + codeword_count++; + i += 5; + } + } + + switch(block_remain) { + case 1: + /* Rule (a) */ + codewords[codeword_count] = posn(INSET, intermediate[i]); + codeword_count++; + i++; + break; + case 3: + /* Rule (b) */ + block_value = ctoi(intermediate[i]) * 100; + block_value += ctoi(intermediate[i + 1]) * 10; + block_value += ctoi(intermediate[i + 2]); + + codewords[codeword_count] = block_value / 48; + block_value = block_value - 48 * codewords[codeword_count]; + codeword_count++; + codewords[codeword_count] = block_value; + codeword_count++; + i += 3; + break; + case 4: + /* Rule (c) */ + block_value = 100000; + block_value += ctoi(intermediate[i]) * 1000; + block_value += ctoi(intermediate[i + 1]) * 100; + block_value += ctoi(intermediate[i + 2]) * 10; + block_value += ctoi(intermediate[i + 3]); + + codewords[codeword_count] = block_value / (48 * 48); + block_value = block_value - (48 * 48) * codewords[codeword_count]; + codeword_count++; + codewords[codeword_count] = block_value / 48; + block_value = block_value - 48 * codewords[codeword_count]; + codeword_count++; + codewords[codeword_count] = block_value; + codeword_count++; + i += 4; + break; + } + if(i < h) { + /* There is more to add */ + codewords[codeword_count] = 48; /* Numeric Shift */ + codeword_count++; + } + } else { + codewords[codeword_count] = posn(INSET, intermediate[i]); + codeword_count++; + i++; + } + } else { + codewords[codeword_count] = posn(INSET, intermediate[i]); + codeword_count++; + i++; + } + } while(i < h); + + switch(codewords[0]) { /* Set starting mode value */ + case 48: M = 2; break; + case 43: M = 4; break; + case 44: M = 5; break; + default: M = 0; break; + } + + if(M != 0) { + for(i = 0; i < codeword_count; i++) { + codewords[i] = codewords[i + 1]; + } + codeword_count--; + } + + if(codeword_count > 49) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* Place codewords in code character array (c grid) */ + rows = 0; + do{ + for(i = 0; i < 7; i++) { + if(((rows * 7) + i) < codeword_count) { + c_grid[rows][i] = codewords[(rows * 7) + i]; + } else { + c_grid[rows][i] = 48; /* Pad */ + pad_count++; + } + } + rows++; + } while ((rows * 7) < codeword_count); + + if((((rows <= 6) && (pad_count < 5))) || (rows > 6) || (rows == 1)) { + /* Add a row */ + for(i = 0; i < 7; i++) { + c_grid[rows][i] = 48; /* Pad */ + } + rows++; + } + + /* Add row count and mode character */ + c_grid[rows - 1][6] = (7 * (rows - 2)) + M; + + /* Add row check character */ + for(i = 0; i < rows - 1; i++) { + int row_sum = 0; + + for(j = 0; j < 7; j++) { + row_sum += c_grid[i][j]; + } + c_grid[i][7] = row_sum % 49; + } + + /* Calculate Symbol Check Characters */ + posn_val = 0; + x_count = c_grid[rows - 1][6] * 20; + y_count = c_grid[rows - 1][6] * 16; + z_count = c_grid[rows - 1][6] * 38; + for(i = 0; i < rows - 1; i++) { + for(j = 0; j < 4; j++) { + local_value = (c_grid[i][2 * j] * 49) + c_grid[i][(2 * j) + 1]; + x_count += c49_x_weight[posn_val] * local_value; + y_count += c49_y_weight[posn_val] * local_value; + z_count += c49_z_weight[posn_val] * local_value; + posn_val++; + } + } + + if(rows > 6) { + /* Add Z Symbol Check */ + c_grid[rows - 1][0] = (z_count % 2401) / 49; + c_grid[rows - 1][1] = (z_count % 2401) % 49; + } + + local_value = (c_grid[rows - 1][0] * 49) + c_grid[rows - 1][1]; + x_count += c49_x_weight[posn_val] * local_value; + y_count += c49_y_weight[posn_val] * local_value; + posn_val++; + + /* Add Y Symbol Check */ + c_grid[rows - 1][2] = (y_count % 2401) / 49; + c_grid[rows - 1][3] = (y_count % 2401) % 49; + + local_value = (c_grid[rows - 1][2] * 49) + c_grid[rows - 1][3]; + x_count += c49_x_weight[posn_val] * local_value; + + /* Add X Symbol Check */ + c_grid[rows - 1][4] = (x_count % 2401) / 49; + c_grid[rows - 1][5] = (x_count % 2401) % 49; + + /* Add last row check character */ + j = 0; + for(i = 0; i < 7; i++) { + j += c_grid[rows - 1][i]; + } + c_grid[rows - 1][7] = j % 49; + + /* Transfer data to symbol character array (w grid) */ + for(i = 0; i < rows; i++) { + for(j = 0; j < 4; j ++) { + w_grid[i][j] = (c_grid[i][2 * j] * 49) + c_grid[i][(2 * j) + 1]; + } + } + + for(i = 0; i < rows; i++) { + strcpy(pattern, "11"); /* Start character */ + for(j = 0; j < 4; j++) { + if(i != (rows - 1)) { + if(c49_table4[i][j] == 'E') { + /* Even Parity */ + concat(pattern, c49_appxe_even[w_grid[i][j]]); + } else { + /* Odd Parity */ + concat(pattern, c49_appxe_odd[w_grid[i][j]]); + } + } else { + /* Last row uses all even parity */ + concat(pattern, c49_appxe_even[w_grid[i][j]]); + } + } + concat(pattern, "4"); /* Stop character */ + + /* Expand into symbol */ + symbol->row_height[i] = 10; + expand(symbol, pattern); + } + + symbol->whitespace_width = 10; + symbol->output_options = BARCODE_BIND; + symbol->border_width = 2; + + return 0; +} diff --git a/3rdparty/zint-2.4.4/backend/code49.h b/3rdparty/zint-2.4.4/backend/code49.h new file mode 100644 index 0000000..2b27bc1 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/code49.h @@ -0,0 +1,1175 @@ +/* code49.h - Code 49 Tables */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* This data set taken from ANSI/AIM-BC6-2000, 4th April 2000 */ + +static char *c49_table7[128] = { + /* Table 7: Code 49 ASCII Chart */ + "! ", "!A", "!B", "!C", "!D", "!E", "!F", "!G", "!H", "!I", "!J", "!K", "!L", + "!M", "!N", "!O", "!P", "!Q", "!R", "!S", "!T", "!U", "!V", "!W", "!X", "!Y", + "!Z", "!1", "!2", "!3", "!4", "!5", " ", "!6", "!7", "!8", "$", "%", "!9", "!0", + "!-", "!.", "!$", "+", "!/", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", + "7", "8", "9", "!+", "&1", "&2", "&3", "&4", "&5", "&6", "A", "B", "C", "D", "E", + "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", + "V", "W", "X", "Y", "Z", "&7", "&8", "&9", "&0", "&-", "&.", "&A", "&B", "&C", + "&D", "&E", "&F", "&G", "&H", "&I", "&J", "&K", "&L", "&M", "&N", "&O", "&P", + "&Q", "&R", "&S", "&T", "&U", "&V", "&W", "&X", "&Y", "&Z", "&$", "&/", "&+", + "&%", "& " +}; + +/* Table 5: Check Character Weighting Values */ +int c49_x_weight[] = { + 1, 9, 31, 26, 2, 12, 17, 23, 37, 18, 22, 6, 27, 44, 15, 43, + 39, 11, 13, 5, 41, 33, 36, 8, 4, 32, 3, 19, 40, 25, 29, 10 +}; + +int c49_y_weight[] = { + 9, 31, 26, 2, 12, 17, 23, 37, 18, 22, 6, 27, 44, 15, 43, 39, + 11, 13, 5, 41, 33, 36, 8, 4, 32, 3, 19, 40, 25, 29, 10, 24 +}; + +int c49_z_weight[] = { + 31, 26, 2, 12, 17, 23, 37, 18, 22, 6, 27, 44, 15, 43, 39, 11, + 13, 5, 41, 33, 36, 8, 4, 32, 3, 19, 40, 25, 29, 10, 24, 30 +}; + +static char *c49_table4[8] = { + /* Table 4: Row Parity Pattern for Code 49 Symbols */ + "OEEO", "EOEO", "OOEE", "EEOO", "OEOE", "EOOE", "OOOO", "EEEE" +}; + +static char *c49_appxe_even[2401] = { + /* Appendix E - Code 49 Encodation Patterns (Even Symbol Character Parity) */ + /* Column 1 */ + "11521132", + "25112131", "14212132", "25121221", "14221222", "12412132", + "23321221", "12421222", "21521221", "15112222", "15121312", + "13312222", "24221311", "13321312", "11512222", "22421311", + "11521312", "25112311", "14212312", "23312311", "12412312", + "21512311", "16121131", "14321131", "12521131", "15212131", + "15221221", "13412131", "13421221", "11612131", "16112221", + "16121311", "14312221", "14321311", "12512221", "12521311", + "15212311", "13412311", "11612311", "11131135", "31131133", + "51131131", "21122134", "41122132", "21131224", "41131222", + "11113135", "31113133", "51113131", "11122225", "31122223", + "51122221", "11131315", "31131313", "51131311", "21113224", + "41113222", "21122314", + /* Column 2 */ + "41122312", "11113315", "31113313", + "51113311", "12131134", "32131132", "21231133", "41231131", + "22122133", "42122131", "11222134", "22131223", "42131221", + "11231224", "31231222", "12113134", "32113132", "12122224", + "32122222", "12131314", "32131312", "21231313", "41231311", + "22113223", "42113221", "11213224", "22122313", "42122311", + "11222314", "31222312", "12113314", "32113312", "21213313", + "41213311", "13131133", "33131131", "22231132", "11331133", + "31331131", "23122132", "12222133", "23131222", "12231223", + "32231221", "21331222", "13113133", "33113131", "13122223", + "33122221", "11313133", "13131313", "33131311", "11322223", + "22231312", "11331313", "31331311", "23113222", "12213223", + /* Column 3 */ + "23122312", "12222313", "32222311", "21322312", "13113313", + "33113311", "22213312", "11313313", "31313311", "14131132", + "23231131", "12331132", "21431131", "24122131", "13222132", + "24131221", "13231222", "11422132", "22331221", "11431222", + "14113132", "14122222", "12313132", "14131312", "12322222", + "23231311", "12331312", "21431311", "24113221", "13213222", + "24122311", "13222312", "11413222", "22322311", "11422312", + "14113312", "23213311", "12313312", "21413311", "15131131", + "13331131", "14222131", "14231221", "12422131", "12431221", + "15113131", "15122221", "13313131", "15131311", "13322221", + "11513131", "13331311", "11522221", "14213221", "14222311", + "12413221", "12422311", "15113311", + /* Column 4 */ + "13313311", "11513311", + "11141134", "31141132", "21132133", "41132131", "21141223", + "41141221", "11123134", "31123132", "11132224", "31132222", + "11141314", "31141312", "21114133", "41114131", "21123223", + "41123221", "21132313", "41132311", "11114224", "31114222", + "11123314", "31123312", "21114313", "41114311", "12141133", + "32141131", "21241132", "22132132", "11232133", "22141222", + "11241223", "31241221", "12123133", "32123131", "12132223", + "32132221", "12141313", "32141311", "21241312", "22114132", + "11214133", "22123222", "11223223", "22132312", "11232313", + "31232311", "12114223", "32114221", "12123313", "32123311", + "21223312", "22114312", "11214313", "31214311", "13141132", + "22241131", + /* Column 5 */ + "11341132", "23132131", "12232132", "23141221", + "12241222", "21341221", "13123132", "13132222", "11323132", + "13141312", "11332222", "22241311", "11341312", "23114131", + "12214132", "23123221", "12223222", "23132311", "12232312", + "21332311", "13114222", "13123312", "11314222", "22223311", + "11323312", "23114311", "12214312", "21314311", "14141131", + "12341131", "13232131", "13241221", "11432131", "14123131", + "14132221", "12323131", "14141311", "12332221", "12341311", + "13214131", "13223221", "11414131", "13232311", "11423221", + "11432311", "14114221", "14123311", "12314221", "12323311", + "13214311", "11414311", "11151133", "31151131", "21142132", + "21151222", "11133133", "31133131", "11142223", + /* Column 6 */ + "31142221", + "11151313", "31151311", "21124132", "21133222", "21142312", + "11115133", "31115131", "11124223", "31124221", "11133313", + "31133311", "21115222", "21124312", "12151132", "21251131", + "22142131", "11242132", "22151221", "11251222", "12133132", + "12142222", "12151312", "21251311", "22124131", "11224132", + "22133221", "11233222", "22142311", "11242312", "12115132", + "12124222", "12133312", "21233311", "22115221", "11215222", + "22124311", "11224312", "13151131", "12242131", "12251221", + "13133131", "13142221", "11333131", "13151311", "11342221", + "12224131", "12233221", "12242311", "13115131", "13124221", + "11315131", "13133311", "11324221", "11333311", "12215221", + "12224311", "11161132", + /* Column 7 */ + "21152131", "21161221", "11143132", + "11152222", "11161312", "21134131", "21143221", "21152311", + "11125132", "11134222", "11143312", "21116131", "21125221", + "21134311", "12161131", "11252131", "12143131", "12152221", + "12161311", "11234131", "11243221", "11252311", "12125131", + "12134221", "12143311", "11216131", "11225221", "11234311", + "11111236", "31111234", "51111232", "21111325", "41111323", + "61111321", "11111416", "31111414", "51111412", "31211143", + "51211141", "12111235", "32111233", "52111231", "21211234", + "41211232", "22111324", "42111322", "11211325", "31211323", + "51211321", "12111415", "32111413", "52111411", "21211414", + "41211412", "12211144", "32211142", "21311143", "41311141", + /* Column 8 */ + "13111234", "33111232", "22211233", "42211231", "11311234", + "31311232", "23111323", "43111321", "12211324", "32211322", + "21311323", "41311321", "13111414", "33111412", "22211413", + "42211411", "11311414", "31311412", "13211143", "33211141", + "22311142", "11411143", "31411141", "14111233", "34111231", + "23211232", "12311233", "32311231", "21411232", "24111322", + "13211323", "33211321", "22311322", "11411323", "31411321", + "14111413", "34111411", "23211412", "12311413", "32311411", + "21411412", "14211142", "23311141", "12411142", "21511141", + "15111232", "24211231", "13311232", "22411231", "11511232", + "25111321", "14211322", "23311321", "12411322", "21511321", + "15111412", "24211411", "13311412", + /* Column 9 */ + "22411411", "11511412", + "15211141", "13411141", "11611141", "16111231", "14311231", + "12511231", "15211321", "13411321", "11611321", "16111411", + "14311411", "12511411", "21121144", "41121142", "11112145", + "31112143", "51112141", "11121235", "31121233", "51121231", + "21112234", "41112232", "21121324", "41121322", "11112325", + "31112323", "51112321", "11121415", "31121413", "51121411", + "21112414", "41112412", "22121143", "42121141", "11221144", + "31221142", "12112144", "32112142", "12121234", "32121232", + "21221233", "41221231", "22112233", "42112231", "11212234", + "22121323", "42121321", "11221324", "31221322", "12112324", + "32112322", "12121414", "32121412", "21221413", "41221411", + "22112413", + /* Column 10 */ + "42112411", "11212414", "31212412", "23121142", + "12221143", "32221141", "21321142", "13112143", "33112141", + "13121233", "33121231", "11312143", "22221232", "11321233", + "31321231", "23112232", "12212233", "23121322", "12221323", + "32221321", "21321322", "13112323", "33112321", "13121413", + "33121411", "11312323", "22221412", "11321413", "31321411", + "23112412", "12212413", "32212411", "21312412", "24121141", + "13221142", "22321141", "11421142", "14112142", "14121232", + "12312142", "23221231", "12321232", "21421231", "24112231", + "13212232", "24121321", "13221322", "11412232", "22321321", + "11421322", "14112322", "14121412", "12312322", "23221411", + "12321412", "21421411", "24112411", "13212412", + /* Column 11 */ + "22312411", + "11412412", "14221141", "12421141", "15112141", "15121231", + "13312141", "13321231", "11512141", "11521231", "14212231", + "14221321", "12412231", "12421321", "15112321", "15121411", + "13312321", "13321411", "11512321", "11521411", "14212411", + "12412411", "21131143", "41131141", "11122144", "31122142", + "11131234", "31131232", "21113143", "41113141", "21122233", + "41122231", "21131323", "41131321", "11113234", "31113232", + "11122324", "31122322", "11131414", "31131412", "21113323", + "41113321", "21122413", "41122411", "11113414", "31113412", + "22131142", "11231143", "31231141", "12122143", "32122141", + "12131233", "32131231", "21231232", "22113142", "11213143", + "22122232", "11222233", + /* Column 12 */ + "22131322", "11231323", "31231321", + "12113233", "32113231", "12122323", "32122321", "12131413", + "32131411", "21231412", "22113322", "11213323", "22122412", + "11222413", "31222411", "12113413", "32113411", "21213412", + "23131141", "12231142", "21331141", "13122142", "13131232", + "11322142", "22231231", "11331232", "23113141", "12213142", + "23122231", "12222232", "23131321", "12231322", "21331321", + "13113232", "13122322", "11313232", "13131412", "11322322", + "22231411", "11331412", "23113321", "12213322", "23122411", + "12222412", "21322411", "13113412", "22213411", "11313412", + "13231141", "11431141", "14122141", "14131231", "12322141", + "12331231", "13213141", "13222231", "11413141", "13231321", + /* Column 13 */ + "11422231", "11431321", "14113231", "14122321", "12313231", + "14131411", "12322321", "12331411", "13213321", "13222411", + "11413321", "11422411", "14113411", "12313411", "21141142", + "11132143", "31132141", "11141233", "31141231", "21123142", + "21132232", "21141322", "11114143", "31114141", "11123233", + "31123231", "11132323", "31132321", "11141413", "31141411", + "21114232", "21123322", "21132412", "11114323", "31114321", + "11123413", "31123411", "22141141", "11241142", "12132142", + "12141232", "21241231", "22123141", "11223142", "22132231", + "11232232", "22141321", "11241322", "12114142", "12123232", + "12132322", "12141412", "21241411", "22114231", "11214232", + "22123321", "11223322", "22132411", + /* Column 14 */ + "11232412", "12114322", + "12123412", "21223411", "12241141", "13132141", "13141231", + "11332141", "11341231", "12223141", "12232231", "12241321", + "13114141", "13123231", "11314141", "13132321", "11323231", + "13141411", "11332321", "11341411", "12214231", "12223321", + "12232411", "13114321", "13123411", "11314321", "11323411", + "21151141", "11142142", "11151232", "21133141", "21142231", + "21151321", "11124142", "11133232", "11142322", "11151412", + "21115141", "21124231", "21133321", "21142411", "11115232", + "11124322", "11133412", "11251141", "12142141", "12151231", + "11233141", "11242231", "11251321", "12124141", "12133231", + "12142321", "12151411", "11215141", "11224231", "11233321", + "11242411", + /* Column 15 */ + "12115231", "12124321", "12133411", "11152141", + "11161231", "11134141", "11143231", "11152321", "11161411", + "11116141", "11125231", "11134321", "11143411", "21111244", + "41111242", "11111335", "31111333", "51111331", "21111424", + "41111422", "11111515", "31111513", "51111511", "21211153", + "41211151", "22111243", "42111241", "11211244", "31211242", + "12111334", "32111332", "21211333", "41211331", "22111423", + "42111421", "11211424", "31211422", "12111514", "32111512", + "21211513", "41211511", "22211152", "11311153", "31311151", + "23111242", "12211243", "32211241", "21311242", "13111333", + "33111331", "22211332", "11311333", "31311331", "23111422", + "12211423", "32211421", "21311422", "13111513", + /* Column 16 */ + "33111511", + "22211512", "11311513", "31311511", "23211151", "12311152", + "21411151", "24111241", "13211242", "22311241", "11411242", + "14111332", "23211331", "12311332", "21411331", "24111421", + "13211422", "22311421", "11411422", "14111512", "23211511", + "12311512", "21411511", "13311151", "11511151", "14211241", + "12411241", "15111331", "13311331", "11511331", "14211421", + "12411421", "15111511", "13311511", "11511511", "31121152", + "21112153", "41112151", "21121243", "41121241", "11112244", + "31112242", "11121334", "31121332", "21112333", "41112331", + "21121423", "41121421", "11112424", "31112422", "11121514", + "31121512", "21112513", "41112511", "12121153", "32121151", + "21221152", "22112152", + /* Column 17 */ + "11212153", "22121242", "11221243", + "31221241", "12112243", "32112241", "12121333", "32121331", + "21221332", "22112332", "11212333", "22121422", "11221423", + "31221421", "12112423", "32112421", "12121513", "32121511", + "21221512", "22112512", "11212513", "31212511", "13121152", + "22221151", "11321152", "23112151", "12212152", "23121241", + "12221242", "21321241", "13112242", "13121332", "11312242", + "22221331", "11321332", "23112331", "12212332", "23121421", + "12221422", "21321421", "13112422", "13121512", "11312422", + "22221511", "11321512", "23112511", "12212512", "21312511", + "14121151", "12321151", "13212151", "13221241", "11412151", + "11421241", "14112241", "14121331", "12312241", "12321331", + /* Column 18 */ + "13212331", "13221421", "11412331", "11421421", "14112421", + "14121511", "12312421", "12321511", "13212511", "11412511", + "11131153", "31131151", "21122152", "21131242", "11113153", + "31113151", "11122243", "31122241", "11131333", "31131331", + "21113242", "21122332", "21131422", "11113333", "31113331", + "11122423", "31122421", "11131513", "31131511", "21113422", + "21122512", "12131152", "21231151", "22122151", "11222152", + "22131241", "11231242", "12113152", "12122242", "12131332", + "21231331", "22113241", "11213242", "22122331", "11222332", + "22131421", "11231422", "12113332", "12122422", "12131512", + "21231511", "22113421", "11213422", "22122511", "11222512", + "13131151", "11331151", "12222151", + /* Column 19 */ + "12231241", "13113151", + "13122241", "11313151", "13131331", "11322241", "11331331", + "12213241", "12222331", "12231421", "13113331", "13122421", + "11313331", "13131511", "11322421", "11331511", "12213421", + "12222511", "11141152", "21132151", "21141241", "11123152", + "11132242", "11141332", "21114151", "21123241", "21132331", + "21141421", "11114242", "11123332", "11132422", "11141512", + "21114331", "21123421", "21132511", "12141151", "11232151", + "11241241", "12123151", "12132241", "12141331", "11214151", + "11223241", "11232331", "11241421", "12114241", "12123331", + "12132421", "12141511", "11214331", "11223421", "11232511", + "11151151", "11133151", "11142241", "11151331", "11115151", + "11124241", + /* Column 20 */ + "11133331", "11142421", "11151511", "11111254", + "31111252", "21111343", "41111341", "11111434", "31111432", + "21111523", "41111521", "11111614", "31111612", "31211161", + "12111253", "32111251", "21211252", "22111342", "11211343", + "31211341", "12111433", "32111431", "21211432", "22111522", + "11211523", "31211521", "12111613", "32111611", "21211612", + "12211162", "21311161", "13111252", "22211251", "11311252", + "23111341", "12211342", "21311341", "13111432", "22211431", + "11311432", "23111521", "12211522", "21311521", "13111612", + "22211611", "11311612", "13211161", "11411161", "14111251", + "12311251", "13211341", "11411341", "14111431", "12311431", + "13211521", "11411521", "14111611", "12311611", + /* Column 21 */ + "21121162", + "11112163", "31112161", "11121253", "31121251", "21112252", + "21121342", "11112343", "31112341", "11121433", "31121431", + "21112432", "21121522", "11112523", "31112521", "11121613", + "31121611", "22121161", "11221162", "12112162", "12121252", + "21221251", "22112251", "11212252", "22121341", "11221342", + "12112342", "12121432", "21221431", "22112431", "11212432", + "22121521", "11221522", "12112522", "12121612", "21221611", + "12221161", "13112161", "13121251", "11312161", "11321251", + "32121115", "52121113", "21221116", "41221114", "61221112", + "22112116", "42112114", "31212115", "51212113", "13121116", + "33121114", "22221115", "42221113", "11321116", "31321114", + "51321112", "23112115", + /* Column 22 */ + "43112113", "12212116", "32212114", + "52212112", "21312115", "41312113", "61312111", "14121115", + "34121113", "23221114", "43221112", "12321115", "32321113", + "52321111", "21421114", "41421112", "24112114", "13212115", + "33212113", "22312114", "42312112", "11412115", "31412113", + "51412111", "15121114", "24221113", "13321114", "33321112", + "22421113", "42421111", "11521114", "31521112", "25112113", + "14212114", "34212112", "23312113", "43312111", "12412114", + "32412112", "21512113", "41512111", "16121113", "25221112", + "14321113", "34321111", "23421112", "12521113", "32521111", + "15212113", "24312112", "13412113", "33412111", "22512112", + "11612113", "31612111", "31131115", "51131113", "21122116", + /* Column 23 */ + "41122114", "61122112", "31113115", "51113113", "12131116", + "32131114", "52131112", "21231115", "41231113", "61231111", + "22122115", "42122113", "11222116", "31222114", "51222112", + "12113116", "32113114", "52113112", "21213115", "41213113", + "61213111", "13131115", "33131113", "22231114", "42231112", + "11331115", "31331113", "51331111", "23122114", "43122112", + "12222115", "32222113", "52222111", "21322114", "41322112", + "13113115", "33113113", "22213114", "42213112", "11313115", + "31313113", "51313111", "14131114", "34131112", "23231113", + "43231111", "12331114", "32331112", "21431113", "41431111", + "24122113", "13222114", "33222112", "22322113", "42322111", + "11422114", "31422112", "14113114", + /* Column 24 */ + "34113112", "23213113", + "43213111", "12313114", "32313112", "21413113", "41413111", + "15131113", "24231112", "13331113", "33331111", "22431112", + "25122112", "14222113", "34222111", "23322112", "12422113", + "32422111", "21522112", "15113113", "24213112", "13313113", + "33313111", "22413112", "11513113", "31513111", "16131112", + "25231111", "14331112", "23431111", "15222112", "24322111", + "13422112", "22522111", "16113112", "25213111", "14313112", + "23413111", "12513112", "21613111", "11141116", "31141114", + "51141112", "21132115", "41132113", "61132111", "11123116", + "31123114", "51123112", "21114115", "41114113", "61114111", + "12141115", "32141113", "52141111", "21241114", "41241112", + "22132114", + /* Column 25 */ + "42132112", "11232115", "31232113", "51232111", + "12123115", "32123113", "52123111", "21223114", "41223112", + "22114114", "42114112", "11214115", "31214113", "51214111", + "13141114", "33141112", "22241113", "42241111", "11341114", + "31341112", "23132113", "43132111", "12232114", "32232112", + "21332113", "41332111", "13123114", "33123112", "22223113", + "42223111", "11323114", "31323112", "23114113", "43114111", + "12214114", "32214112", "21314113", "41314111", "14141113", + "34141111", "23241112", "12341113", "32341111", "24132112", + "13232113", "33232111", "22332112", "11432113", "31432111", + "14123113", "34123111", "23223112", "12323113", "32323111", + "21423112", "24114112", "13214113", "33214111", + /* Column 26 */ + "22314112", + "11414113", "31414111", "15141112", "24241111", "13341112", + "25132111", "14232112", "23332111", "12432112", "15123112", + "24223111", "13323112", "22423111", "11523112", "25114111", + "14214112", "23314111", "12414112", "21514111", "16141111", + "14341111", "15232111", "13432111", "16123111", "14323111", + "12523111", "15214111", "13414111", "11614111", "11151115", + "31151113", "51151111", "21142114", "41142112", "11133115", + "31133113", "51133111", "21124114", "41124112", "11115115", + "31115113", "51115111", "12151114", "32151112", "21251113", + "41251111", "22142113", "42142111", "11242114", "31242112", + "12133114", "32133112", "21233113", "41233111", "22124113", + "42124111", "11224114", + /* Column 27 */ + "31224112", "12115114", "32115112", + "21215113", "41215111", "13151113", "33151111", "22251112", + "23142112", "12242113", "32242111", "21342112", "13133113", + "33133111", "22233112", "11333113", "31333111", "23124112", + "12224113", "32224111", "21324112", "13115113", "33115111", + "22215112", "11315113", "31315111", "14151112", "23251111", + "24142111", "13242112", "22342111", "14133112", "23233111", + "12333112", "21433111", "24124111", "13224112", "22324111", + "11424112", "14115112", "23215111", "12315112", "21415111", + "15151111", "14242111", "15133111", "13333111", "14224111", + "12424111", "15115111", "13315111", "11515111", "11161114", + "31161112", "21152113", "41152111", "11143114", "31143112", + /* Column 28 */ + "21134113", "41134111", "11125114", "31125112", "21116113", + "41116111", "12161113", "32161111", "22152112", "11252113", + "31252111", "12143113", "32143111", "21243112", "22134112", + "11234113", "31234111", "12125113", "32125111", "21225112", + "22116112", "11216113", "31216111", "13161112", "23152111", + "12252112", "13143112", "22243111", "11343112", "23134111", + "12234112", "21334111", "13125112", "22225111", "11325112", + "23116111", "12216112", "21316111", "14161111", "13252111", + "14143111", "12343111", "13234111", "11434111", "14125111", + "12325111", "13216111", "11416111", "31111216", "51111214", + "31211125", "51211123", "32111215", "52111213", "21211216", + "41211214", "61211212", "12211126", + /* Column 29 */ + "32211124", "52211122", + "21311125", "41311123", "61311121", "13111216", "33111214", + "22211215", "42211213", "11311216", "31311214", "51311212", + "13211125", "33211123", "22311124", "42311122", "11411125", + "31411123", "51411121", "14111215", "34111213", "23211214", + "43211212", "12311215", "32311213", "52311211", "21411214", + "41411212", "14211124", "34211122", "23311123", "43311121", + "12411124", "32411122", "21511123", "41511121", "15111214", + "24211213", "13311214", "33311212", "22411213", "42411211", + "11511214", "31511212", "15211123", "24311122", "13411123", + "33411121", "22511122", "11611123", "31611121", "16111213", + "25211212", "14311213", "34311211", "23411212", "12511213", + "32511211", + /* Column 30 */ + "21611212", "21121126", "41121124", "61121122", + "31112125", "51112123", "31121215", "51121213", "21112216", + "41112214", "61112212", "22121125", "42121123", "11221126", + "31221124", "51221122", "12112126", "32112124", "52112122", + "12121216", "32121214", "52121212", "21221215", "41221213", + "61221211", "22112215", "42112213", "11212216", "31212214", + "51212212", "23121124", "43121122", "12221125", "32221123", + "52221121", "21321124", "41321122", "13112125", "33112123", + "13121215", "33121213", "11312125", "22221214", "42221212", + "11321215", "31321213", "51321211", "23112214", "43112212", + "12212215", "32212213", "52212211", "21312214", "41312212", + "24121123", "13221124", "33221122", "22321123", + /* Column 31 */ + "42321121", + "11421124", "31421122", "14112124", "34112122", "14121214", + "34121212", "12312124", "23221213", "43221211", "12321214", + "32321212", "21421213", "41421211", "24112213", "13212214", + "33212212", "22312213", "42312211", "11412214", "31412212", + "25121122", "14221123", "34221121", "23321122", "12421123", + "32421121", "21521122", "15112123", "15121213", "13312123", + "24221212", "13321213", "33321211", "11512123", "22421212", + "11521213", "31521211", "25112212", "14212213", "34212211", + "23312212", "12412213", "32412211", "21512212", "15221122", + "24321121", "13421122", "22521121", "16112122", "16121212", + "14312122", "25221211", "14321212", "12512122", "23421211", + "12521212", "15212212", + /* Column 32 */ + "24312211", "13412212", "22512211", + "11612212", "21131125", "41131123", "61131121", "11122126", + "31122124", "51122122", "11131216", "31131214", "51131212", + "21113125", "41113123", "61113121", "21122215", "41122213", + "61122211", "11113216", "31113214", "51113212", "22131124", + "42131122", "11231125", "31231123", "51231121", "12122125", + "32122123", "52122121", "12131215", "32131213", "52131211", + "21231214", "41231212", "22113124", "42113122", "11213125", + "22122214", "42122212", "11222215", "31222213", "51222211", + "12113215", "32113213", "52113211", "21213214", "41213212", + "23131123", "43131121", "12231124", "32231122", "21331123", + "41331121", "13122124", "33122122", "13131214", "33131212", + /* Column 33 */ + "11322124", "22231213", "42231211", "11331214", "31331212", + "23113123", "43113121", "12213124", "23122213", "43122211", + "12222214", "32222212", "21322213", "41322211", "13113214", + "33113212", "22213213", "42213211", "11313214", "31313212", + "24131122", "13231123", "33231121", "22331122", "11431123", + "31431121", "14122123", "34122121", "14131213", "34131211", + "12322123", "23231212", "12331213", "32331211", "21431212", + "24113122", "13213123", "24122212", "13222213", "33222211", + "11413123", "22322212", "11422213", "31422211", "14113213", + "34113211", "23213212", "12313213", "32313211", "21413212", + "25131121", "14231122", "23331121", "12431122", "15122122", + "15131212", "13322122", "24231211", + /* Column 34 */ + "13331212", "11522122", + "22431211", "25113121", "14213122", "25122211", "14222212", + "12413122", "23322211", "12422212", "21522211", "15113212", + "24213211", "13313212", "22413211", "11513212", "15231121", + "13431121", "16122121", "16131211", "14322121", "14331211", + "12522121", "15213121", "15222211", "13413121", "13422211", + "11613121", "16113211", "14313211", "12513211", "21141124", + "41141122", "11132125", "31132123", "51132121", "11141215", + "31141213", "51141211", "21123124", "41123122", "21132214", + "41132212", "11114125", "31114123", "51114121", "11123215", + "31123213", "51123211", "21114214", "41114212", "22141123", + "42141121", "11241124", "31241122", "12132124", "32132122", + "12141214", + /* Column 35 */ + "32141212", "21241213", "41241211", "22123123", + "42123121", "11223124", "22132213", "42132211", "11232214", + "31232212", "12114124", "32114122", "12123214", "32123212", + "21223213", "41223211", "22114213", "42114211", "11214214", + "31214212", "23141122", "12241123", "32241121", "21341122", + "13132123", "33132121", "13141213", "33141211", "11332123", + "22241212", "11341213", "31341211", "23123122", "12223123", + "23132212", "12232213", "32232211", "21332212", "13114123", + "33114121", "13123213", "33123211", "11314123", "22223212", + "11323213", "31323211", "23114212", "12214213", "32214211", + "21314212", "24141121", "13241122", "22341121", "14132122", + "14141212", "12332122", "23241211", "12341212", + /* Column 36 */ + "24123121", + "13223122", "24132211", "13232212", "11423122", "22332211", + "11432212", "14114122", "14123212", "12314122", "23223211", + "12323212", "21423211", "24114211", "13214212", "22314211", + "11414212", "14241121", "15132121", "15141211", "13332121", + "13341211", "14223121", "14232211", "12423121", "12432211", + "15114121", "15123211", "13314121", "13323211", "11514121", + "11523211", "14214211", "12414211", "21151123", "41151121", + "11142124", "31142122", "11151214", "31151212", "21133123", + "41133121", "21142213", "41142211", "11124124", "31124122", + "11133214", "31133212", "21115123", "41115121", "21124213", + "41124211", "11115214", "31115212", "22151122", "11251123", + "31251121", "12142123", + /* Column 37 */ + "32142121", "12151213", "32151211", + "21251212", "22133122", "11233123", "22142212", "11242213", + "31242211", "12124123", "32124121", "12133213", "32133211", + "21233212", "22115122", "11215123", "22124212", "11224213", + "31224211", "12115213", "32115211", "21215212", "23151121", + "12251122", "13142122", "13151212", "11342122", "22251211", + "23133121", "12233122", "23142211", "12242212", "21342211", + "13124122", "13133212", "11324122", "22233211", "11333212", + "23115121", "12215122", "23124211", "12224212", "21324211", + "13115212", "22215211", "11315212", "13251121", "14142121", + "14151211", "12342121", "13233121", "13242211", "11433121", + "14124121", "14133211", "12324121", "12333211", "13215121", + /* Column 38 */ + "13224211", "11415121", "11424211", "14115211", "12315211", + "21161122", "11152123", "31152121", "11161213", "31161211", + "21143122", "21152212", "11134123", "31134121", "11143213", + "31143211", "21125122", "21134212", "11116123", "31116121", + "11125213", "31125211", "22161121", "12152122", "12161212", + "22143121", "11243122", "22152211", "11252212", "12134122", + "12143212", "21243211", "22125121", "11225122", "22134211", + "11234212", "12116122", "12125212", "21225211", "13152121", + "13161211", "12243121", "12252211", "13134121", "13143211", + "11334121", "11343211", "12225121", "12234211", "13116121", + "13125211", "11316121", "11325211", "21111226", "41111224", + "61111222", "31111315", "51111313", + /* Column 39 */ + "21211135", "41211133", + "61211131", "22111225", "42111223", "11211226", "31211224", + "51211222", "12111316", "32111314", "52111312", "21211315", + "41211313", "61211311", "22211134", "42211132", "11311135", + "31311133", "51311131", "23111224", "43111222", "12211225", + "32211223", "52211221", "21311224", "41311222", "13111315", + "33111313", "22211314", "42211312", "11311315", "31311313", + "51311311", "23211133", "43211131", "12311134", "32311132", + "21411133", "41411131", "24111223", "13211224", "33211222", + "22311223", "42311221", "11411224", "31411222", "14111314", + "34111312", "23211313", "43211311", "12311314", "32311312", + "21411313", "41411311", "24211132", "13311133", "33311131", + "22411132", + /* Column 40 */ + "11511133", "31511131", "25111222", "14211223", + "34211221", "23311222", "12411223", "32411221", "21511222", + "15111313", "24211312", "13311313", "33311311", "22411312", + "11511313", "31511311", "25211131", "14311132", "23411131", + "12511132", "21611131", "15211222", "24311221", "13411222", + "22511221", "11611222", "16111312", "25211311", "14311312", + "23411311", "12511312", "21611311", "31121134", "51121132", + "21112135", "41112133", "61112131", "21121225", "41121223", + "61121221", "11112226", "31112224", "51112222", "11121316", + "31121314", "51121312", "21112315", "41112313", "61112311", + "12121135", "32121133", "52121131", "21221134", "41221132", + "22112134", "42112132", "11212135", "22121224", + /* Column 41 */ + "42121222", + "11221225", "31221223", "51221221", "12112225", "32112223", + "52112221", "12121315", "32121313", "52121311", "21221314", + "41221312", "22112314", "42112312", "11212315", "31212313", + "51212311", "13121134", "33121132", "22221133", "42221131", + "11321134", "31321132", "23112133", "43112131", "12212134", + "23121223", "43121221", "12221224", "32221222", "21321223", + "41321221", "13112224", "33112222", "13121314", "33121312", + "11312224", "22221313", "42221311", "11321314", "31321312", + /* Column 42 */ + "23112313", "43112311", "12212314", "32212312", "21312313", + "41312311", "14121133", "34121131", "23221132", "12321133", + "32321131", "21421132", "24112132", "13212133", "24121222", + "13221223", "33221221", "11412133", "22321222", "11421223", + "31421221", "14112223", "34112221", "14121313", "34121311", + "12312223", "23221312", "12321313", "32321311", "21421312", + "24112312", "13212313", "33212311", "22312312", "11412313", + "31412311", "15121132", "24221131", "13321132", "22421131" +}; + +static char *c49_appxe_odd[2401] = { + /* Appendix E - Code 49 Encodation Patterns (Odd Symbol Character Parity) */ + /* Column 1 */ + "22121116", + "42121114", "31221115", "51221113", "32112115", "52112113", + "21212116", "41212114", "61212112", "23121115", "43121113", + "12221116", "32221114", "52221112", "21321115", "41321113", + "61321111", "13112116", "33112114", "22212115", "42212113", + "11312116", "31312114", "51312112", "24121114", "13221115", + "33221113", "22321114", "42321112", "11421115", "31421113", + "51421111", "14112115", "34112113", "23212114", "43212112", + "12312115", "32312113", "52312111", "21412114", "41412112", + "25121113", "14221114", "34221112", "23321113", "43321111", + "12421114", "32421112", "21521113", "41521111", "15112114", + "24212113", "13312114", "33312112", "22412113", "42412111", + "11512114", "31512112", + /* Column 2 */ + "15221113", "24321112", "13421113", + "33421111", "22521112", "16112113", "25212112", "14312113", + "34312111", "23412112", "12512113", "32512111", "21612112", + "21131116", "41131114", "61131112", "31122115", "51122113", + "21113116", "41113114", "61113112", "22131115", "42131113", + "11231116", "31231114", "51231112", "12122116", "32122114", + "52122112", "21222115", "41222113", "61222111", "22113115", + "42113113", "11213116", "31213114", "51213112", "23131114", + "43131112", "12231115", "32231113", "52231111", "21331114", + "41331112", "13122115", "33122113", "22222114", "42222112", + "11322115", "31322113", "51322111", "23113114", "43113112", + "12213115", "32213113", "52213111", "21313114", "41313112", + /* Column 3 */ + "24131113", "13231114", "33231112", "22331113", "42331111", + "11431114", "31431112", "14122114", "34122112", "23222113", + "43222111", "12322114", "32322112", "21422113", "41422111", + "24113113", "13213114", "33213112", "22313113", "42313111", + "11413114", "31413112", "25131112", "14231113", "34231111", + "23331112", "12431113", "32431111", "15122113", "24222112", + "13322113", "33322111", "22422112", "11522113", "31522111", + "25113112", "14213113", "34213111", "23313112", "12413113", + "32413111", "21513112", "15231112", "24331111", "13431112", + "16122112", "25222111", "14322112", "23422111", "12522112", + "15213112", "24313111", "13413112", "22513111", "11613112", + "21141115", "41141113", "61141111", + /* Column 4 */ + "11132116", "31132114", + "51132112", "21123115", "41123113", "61123111", "11114116", + "31114114", "51114112", "22141114", "42141112", "11241115", + "31241113", "51241111", "12132115", "32132113", "52132111", + "21232114", "41232112", "22123114", "42123112", "11223115", + "31223113", "51223111", "12114115", "32114113", "52114111", + "21214114", "41214112", "23141113", "43141111", "12241114", + "32241112", "21341113", "41341111", "13132114", "33132112", + "22232113", "42232111", "11332114", "31332112", "23123113", + "43123111", "12223114", "32223112", "21323113", "41323111", + "13114114", "33114112", "22214113", "42214111", "11314114", + "31314112", "24141112", "13241113", "33241111", "22341112", + "14132113", + /* Column 5 */ + "34132111", "23232112", "12332113", "32332111", + "21432112", "24123112", "13223113", "33223111", "22323112", + "11423113", "31423111", "14114113", "34114111", "23214112", + "12314113", "32314111", "21414112", "25141111", "14241112", + "23341111", "15132112", "24232111", "13332112", "22432111", + "25123111", "14223112", "23323111", "12423112", "21523111", + "15114112", "24214111", "13314112", "22414111", "11514112", + "15241111", "16132111", "14332111", "15223111", "13423111", + "16114111", "14314111", "12514111", "21151114", "41151112", + "11142115", "31142113", "51142111", "21133114", "41133112", + "11124115", "31124113", "51124111", "21115114", "41115112", + "22151113", "42151111", "11251114", "31251112", + /* Column 6 */ + "12142114", + "32142112", "21242113", "41242111", "22133113", "42133111", + "11233114", "31233112", "12124114", "32124112", "21224113", + "41224111", "22115113", "42115111", "11215114", "31215112", + "23151112", "12251113", "32251111", "13142113", "33142111", + "22242112", "11342113", "31342111", "23133112", "12233113", + "32233111", "21333112", "13124113", "33124111", "22224112", + "11324113", "31324111", "23115112", "12215113", "32215111", + "21315112", "24151111", "13251112", "14142112", "23242111", + "12342112", "24133111", "13233112", "22333111", "11433112", + "14124112", "23224111", "12324112", "21424111", "24115111", + "13215112", "22315111", "11415112", "14251111", "15142111", + "13342111", "14233111", + /* Column 7 */ + "12433111", "15124111", "13324111", + "11524111", "14215111", "12415111", "21161113", "41161111", + "11152114", "31152112", "21143113", "41143111", "11134114", + "31134112", "21125113", "41125111", "11116114", "31116112", + "22161112", "12152113", "32152111", "21252112", "22143112", + "11243113", "31243111", "12134113", "32134111", "21234112", + "22125112", "11225113", "31225111", "12116113", "32116111", + "21216112", "23161111", "13152112", "22252111", "23143111", + "12243112", "21343111", "13134112", "22234111", "11334112", + "23125111", "12225112", "21325111", "13116112", "22216111", + "11316112", "14152111", "13243111", "14134111", "12334111", + "13225111", "11425111", "14116111", "12316111", "41111215", + /* Column 8 */ + "61111213", "21211126", "41211124", "61211122", "22111216", + "42111214", "31211215", "51211213", "22211125", "42211123", + "11311126", "31311124", "51311122", "23111215", "43111213", + "12211216", "32211214", "52211212", "21311215", "41311213", + "61311211", "23211124", "43211122", "12311125", "32311123", + "52311121", "21411124", "41411122", "24111214", "13211215", + "33211213", "22311214", "42311212", "11411215", "31411213", + "51411211", "24211123", "13311124", "33311122", "22411123", + "42411121", "11511124", "31511122", "25111213", "14211214", + "34211212", "23311213", "43311211", "12411214", "32411212", + "21511213", "41511211", "25211122", "14311123", "34311121", + "23411122", "12511123", "32511121", + /* Column 9 */ + "21611122", "15211213", + "24311212", "13411213", "33411211", "22511212", "11611213", + "31611211", "31121125", "51121123", "21112126", "41112124", + "61112122", "21121216", "41121214", "61121212", "31112215", + "51112213", "12121126", "32121124", "52121122", "21221125", + "41221123", "61221121", "22112125", "42112123", "11212126", + "22121215", "42121213", "11221216", "31221214", "51221212", + "12112216", "32112214", "52112212", "21212215", "41212213", + "61212211", "13121125", "33121123", "22221124", "42221122", + "11321125", "31321123", "51321121", "23112124", "43112122", + "12212125", "23121214", "43121212", "12221215", "32221213", + "52221211", "21321214", "41321212", "13112215", "33112213", + "22212214", + /* Column 10 */ + "42212212", "11312215", "31312213", "51312211", + "14121124", "34121122", "23221123", "43221121", "12321124", + "32321122", "21421123", "41421121", "24112123", "13212124", + "24121213", "13221214", "33221212", "11412124", "22321213", + "42321211", "11421214", "31421212", "14112214", "34112212", + "23212213", "43212211", "12312214", "32312212", "21412213", + "41412211", "15121123", "24221122", "13321123", "33321121", + "22421122", "11521123", "31521121", "25112122", "14212123", + "25121212", "14221213", "34221211", "12412123", "23321212", + "12421213", "32421211", "21521212", "15112213", "24212212", + "13312213", "33312211", "22412212", "11512213", "31512211", + "16121122", "25221121", "14321122", "23421121", + /* Column 11 */ + "12521122", + "15212122", "15221212", "13412122", "24321211", "13421212", + "11612122", "22521211", "16112212", "25212211", "14312212", + "23412211", "12512212", "21612211", "11131126", "31131124", + "51131122", "21122125", "41122123", "61122121", "21131215", + "41131213", "61131211", "11113126", "31113124", "51113122", + "11122216", "31122214", "51122212", "21113215", "41113213", + "61113211", "12131125", "32131123", "52131121", "21231124", + "41231122", "22122124", "42122122", "11222125", "22131214", + "42131212", "11231215", "31231213", "51231211", "12113125", + "32113123", "52113121", "12122215", "32122213", "52122211", + "21222214", "41222212", "22113214", "42113212", "11213215", + "31213213", "51213211", + /* Column 12 */ + "13131124", "33131122", "22231123", + "42231121", "11331124", "31331122", "23122123", "43122121", + "12222124", "23131213", "43131211", "12231214", "32231212", + "21331213", "41331211", "13113124", "33113122", "13122214", + "33122212", "11313124", "22222213", "42222211", "11322214", + "31322212", "23113213", "43113211", "12213214", "32213212", + "21313213", "41313211", "14131123", "34131121", "23231122", + "12331123", "32331121", "21431122", "24122122", "13222123", + "24131212", "13231213", "33231211", "11422123", "22331212", + "11431213", "31431211", "14113123", "34113121", "14122213", + "34122211", "12313123", "23222212", "12322213", "32322211", + "21422212", "24113212", "13213213", "33213211", "22313212", + /* Column 13 */ + "11413213", "31413211", "15131122", "24231121", "13331122", + "22431121", "25122121", "14222122", "25131211", "14231212", + "12422122", "23331211", "12431212", "15113122", "15122212", + "13313122", "24222211", "13322212", "11513122", "22422211", + "11522212", "25113211", "14213212", "23313211", "12413212", + "21513211", "16131121", "14331121", "15222121", "15231211", + "13422121", "13431211", "16113121", "16122211", "14313121", + "14322211", "12513121", "12522211", "15213211", "13413211", + "11613211", "11141125", "31141123", "51141121", "21132124", + "41132122", "21141214", "41141212", "11123125", "31123123", + "51123121", "11132215", "31132213", "51132211", "21114124", + "41114122", "21123214", "41123212", + /* Column 14 */ + "11114215", "31114213", + "51114211", "12141124", "32141122", "21241123", "41241121", + "22132123", "42132121", "11232124", "22141213", "42141211", + "11241214", "31241212", "12123124", "32123122", "12132214", + "32132212", "21232213", "41232211", "22114123", "42114121", + "11214124", "22123213", "42123211", "11223214", "31223212", + "12114214", "32114212", "21214213", "41214211", "13141123", + "33141121", "22241122", "11341123", "31341121", "23132122", + "12232123", "23141212", "12241213", "32241211", "21341212", + "13123123", "33123121", "13132213", "33132211", "11323123", + "22232212", "11332213", "31332211", "23114122", "12214123", + "23123212", "12223213", "32223211", "21323212", "13114213", + "33114211", + /* Column 15 */ + "22214212", "11314213", "31314211", "14141122", + "23241121", "12341122", "24132121", "13232122", "24141211", + "13241212", "11432122", "22341211", "14123122", "14132212", + "12323122", "23232211", "12332212", "21432211", "24114121", + "13214122", "24123211", "13223212", "11414122", "22323211", + "11423212", "14114212", "23214211", "12314212", "21414211", + "15141121", "13341121", "14232121", "14241211", "12432121", + "15123121", "15132211", "13323121", "13332211", "11523121", + "14214121", "14223211", "12414121", "12423211", "15114211", + "13314211", "11514211", "11151124", "31151122", "21142123", + "41142121", "21151213", "41151211", "11133124", "31133122", + "11142214", "31142212", "21124123", "41124121", + /* Column 16 */ + "21133213", + "41133211", "11115124", "31115122", "11124214", "31124212", + "21115213", "41115211", "12151123", "32151121", "21251122", + "22142122", "11242123", "22151212", "11251213", "31251211", + "12133123", "32133121", "12142213", "32142211", "21242212", + "22124122", "11224123", "22133212", "11233213", "31233211", + "12115123", "32115121", "12124213", "32124211", "21224212", + "22115212", "11215213", "31215211", "13151122", "22251121", + "23142121", "12242122", "23151211", "12251212", "13133122", + "13142212", "11333122", "22242211", "11342212", "23124121", + "12224122", "23133211", "12233212", "21333211", "13115122", + "13124212", "11315122", "22224211", "11324212", "23115211", + "12215212", "21315211", + /* Column 17 */ + "14151121", "13242121", "13251211", + "14133121", "14142211", "12333121", "12342211", "13224121", + "13233211", "11424121", "11433211", "14115121", "14124211", + "12315121", "12324211", "13215211", "11415211", "11161123", + "31161121", "21152122", "21161212", "11143123", "31143121", + "11152213", "31152211", "21134122", "21143212", "11125123", + "31125121", "11134213", "31134211", "21116122", "21125212", + "12161122", "22152121", "11252122", "22161211", "12143122", + "12152212", "21252211", "22134121", "11234122", "22143211", + "11243212", "12125122", "12134212", "21234211", "22116121", + "11216122", "22125211", "11225212", "13161121", "12252121", + "13143121", "13152211", "11343121", "12234121", "12243211", + /* Column 18 */ + "13125121", "13134211", "11325121", "11334211", "12216121", + "12225211", "31111225", "51111223", "21111316", "41111314", + "61111312", "31211134", "51211132", "12111226", "32111224", + "52111222", "21211225", "41211223", "61211221", "22111315", + "42111313", "11211316", "31211314", "51211312", "12211135", + "32211133", "52211131", "21311134", "41311132", "13111225", + "33111223", "22211224", "42211222", "11311225", "31311223", + "51311221", "23111314", "43111312", "12211315", "32211313", + "52211311", "21311314", "41311312", "13211134", "33211132", + "22311133", "42311131", "11411134", "31411132", "14111224", + "34111222", "23211223", "43211221", "12311224", "32311222", + "21411223", "41411221", "24111313", + /* Column 19 */ + "13211314", "33211312", + "22311313", "42311311", "11411314", "31411312", "14211133", + "34211131", "23311132", "12411133", "32411131", "21511132", + "15111223", "24211222", "13311223", "33311221", "22411222", + "11511223", "31511221", "25111312", "14211313", "34211311", + "23311312", "12411313", "32411311", "21511312", "15211132", + "24311131", "13411132", "22511131", "11611132", "16111222", + "25211221", "14311222", "23411221", "12511222", "21611221", + "15211312", "24311311", "13411312", "22511311", "11611312", + "21121135", "41121133", "61121131", "11112136", "31112134", + "51112132", "11121226", "31121224", "51121222", "21112225", + "41112223", "61112221", "21121315", "41121313", "61121311", + "11112316", + /* Column 20 */ + "31112314", "51112312", "22121134", "42121132", + "11221135", "31221133", "51221131", "12112135", "32112133", + "52112131", "12121225", "32121223", "52121221", "21221224", + "41221222", "22112224", "42112222", "11212225", "22121314", + "42121312", "11221315", "31221313", "51221311", "12112315", + "32112313", "52112311", "21212314", "41212312", "23121133", + "43121131", "12221134", "32221132", "21321133", "41321131", + "13112134", "33112132", "13121224", "33121222", "11312134", + "22221223", "42221221", "11321224", "31321222", "23112223", + "43112221", "12212224", "23121313", "43121311", "12221314", + "32221312", "21321313", "41321311", "13112314", "33112312", + "22212313", "42212311", "11312314", "31312312", + /* Column 21 */ + "24121132", + "13221133", "33221131", "22321132", "11421133", "31421131", + "14112133", "34112131", "14121223", "34121221", "12312133", + "23221222", "12321223", "32321221", "21421222", "24112222", + "13212223", "24121312", "13221313", "33221311", "11412223", + "22321312", "11421313", "31421311", "14112313", "34112311", + "23212312", "12312313", "32312311", "21412312", "25121131", + "14221132", "23321131", "12421132", "21521131", "15112132", + "15121222", "13312132", "24221221", "13321222", "11512132", + "22421221", "11521222", "25112221", "14212222", "25121311", + "14221312", "12412222", "23321311", "12421312", "21521311", + "15112312", "24212311", "13312312", "22412311", "11512312", + "15221131", "13421131", + /* Column 22 */ + "16112131", "16121221", "14312131", + "14321221", "12512131", "12521221", "15212221", "15221311", + "13412221", "13421311", "11612221", "16112311", "14312311", + "12512311", "21131134", "41131132", "11122135", "31122133", + "51122131", "11131225", "31131223", "51131221", "21113134", + "41113132", "21122224", "41122222", "21131314", "41131312", + "11113225", "31113223", "51113221", "11122315", "31122313", + "51122311", "21113314", "41113312", "22131133", "42131131", + "11231134", "31231132", "12122134", "32122132", "12131224", + "32131222", "21231223", "41231221", "22113133", "42113131", + "11213134", "22122223", "42122221", "11222224", "22131313", + "42131311", "11231314", "31231312", "12113224", "32113222", + /* Column 23 */ + "12122314", "32122312", "21222313", "41222311", "22113313", + "42113311", "11213314", "31213312", "23131132", "12231133", + "32231131", "21331132", "13122133", "33122131", "13131223", + "33131221", "11322133", "22231222", "11331223", "31331221", + "23113132", "12213133", "23122222", "12222223", "23131312", + "12231313", "32231311", "21331312", "13113223", "33113221", + "13122313", "33122311", "11313223", "22222312", "11322313", + "31322311", "23113312", "12213313", "32213311", "21313312", + "24131131", "13231132", "22331131", "11431132", "14122132", + "14131222", "12322132", "23231221", "12331222", "21431221", + "24113131", "13213132", "24122221", "13222222", "24131311", + "11413132", "13231312", "11422222", + /* Column 24 */ + "22331311", "11431312", + "14113222", "14122312", "12313222", "23222311", "12322312", + "21422311", "24113311", "13213312", "22313311", "11413312", + "14231131", "12431131", "15122131", "15131221", "13322131", + "13331221", "11522131", "14213131", "14222221", "12413131", + "14231311", "12422221", "12431311", "15113221", "15122311", + "13313221", "13322311", "11513221", "11522311", "14213311", + "12413311", "21141133", "41141131", "11132134", "31132132", + "11141224", "31141222", "21123133", "41123131", "21132223", + "41132221", "21141313", "41141311", "11114134", "31114132", + "11123224", "31123222", "11132314", "31132312", "21114223", + "41114221", "21123313", "41123311", "11114314", "31114312", + "22141132", + /* Column 25 */ + "11241133", "31241131", "12132133", "32132131", + "12141223", "32141221", "21241222", "22123132", "11223133", + "22132222", "11232223", "22141312", "11241313", "31241311", + "12114133", "32114131", "12123223", "32123221", "12132313", + "32132311", "21232312", "22114222", "11214223", "22123312", + "11223313", "31223311", "12114313", "32114311", "21214312", + "23141131", "12241132", "21341131", "13132132", "13141222", + "11332132", "22241221", "11341222", "23123131", "12223132", + "23132221", "12232222", "23141311", "12241312", "21341311", + "13114132", "13123222", "11314132", "13132312", "11323222", + "22232311", "11332312", "23114221", "12214222", "23123311", + "12223312", "21323311", "13114312", "22214311", + /* Column 26 */ + "11314312", + "13241131", "14132131", "14141221", "12332131", "12341221", + "13223131", "13232221", "11423131", "13241311", "11432221", + "14114131", "14123221", "12314131", "14132311", "12323221", + "12332311", "13214221", "13223311", "11414221", "11423311", + "14114311", "12314311", "21151132", "11142133", "31142131", + "11151223", "31151221", "21133132", "21142222", "21151312", + "11124133", "31124131", "11133223", "31133221", "11142313", + "31142311", "21115132", "21124222", "21133312", "11115223", + "31115221", "11124313", "31124311", "22151131", "11251132", + "12142132", "12151222", "21251221", "22133131", "11233132", + "22142221", "11242222", "22151311", "11251312", "12124132", + "12133222", "12142312", + /* Column 27 */ + "21242311", "22115131", "11215132", + "22124221", "11224222", "22133311", "11233312", "12115222", + "12124312", "21224311", "12251131", "13142131", "13151221", + "11342131", "12233131", "12242221", "12251311", "13124131", + "13133221", "11324131", "13142311", "11333221", "11342311", + "12215131", "12224221", "12233311", "13115221", "13124311", + "11315221", "11324311", "21161131", "11152132", "11161222", + "21143131", "21152221", "21161311", "11134132", "11143222", + "11152312", "21125131", "21134221", "21143311", "11116132", + "11125222", "11134312", "12152131", "12161221", "11243131", + "11252221", "12134131", "12143221", "12152311", "11225131", + "11234221", "11243311", "12116131", "12125221", "12134311", + /* Column 28 */ + "21111235", "41111233", "61111231", "11111326", "31111324", + "51111322", "21111415", "41111413", "61111411", "21211144", + "41211142", "22111234", "42111232", "11211235", "31211233", + "51211231", "12111325", "32111323", "52111321", "21211324", + "41211322", "22111414", "42111412", "11211415", "31211413", + "51211411", "22211143", "42211141", "11311144", "31311142", + "23111233", "43111231", "12211234", "32211232", "21311233", + "41311231", "13111324", "33111322", "22211323", "42211321", + "11311324", "31311322", "23111413", "43111411", "12211414", + "32211412", "21311413", "41311411", "23211142", "12311143", + "32311141", "21411142", "24111232", "13211233", "33211231", + "22311232", "11411233", "31411231", + /* Column 29 */ + "14111323", "34111321", + "23211322", "12311323", "32311321", "21411322", "24111412", + "13211413", "33211411", "22311412", "11411413", "31411411", + "24211141", "13311142", "22411141", "11511142", "25111231", + "14211232", "23311231", "12411232", "21511231", "15111322", + "24211321", "13311322", "22411321", "11511322", "25111411", + "14211412", "23311411", "12411412", "21511411", "14311141", + "12511141", "15211231", "13411231", "11611231", "16111321", + "14311321", "12511321", "15211411", "13411411", "11611411", + "31121143", "51121141", "21112144", "41112142", "21121234", + "41121232", "11112235", "31112233", "51112231", "11121325", + "31121323", "51121321", "21112324", "41112322", "21121414", + "41121412", + /* Column 30 */ + "11112415", "31112413", "51112411", "12121144", + "32121142", "21221143", "41221141", "22112143", "42112141", + "11212144", "22121233", "42121231", "11221234", "31221232", + "12112234", "32112232", "12121324", "32121322", "21221323", + "41221321", "22112323", "42112321", "11212324", "22121413", + "42121411", "11221414", "31221412", "12112414", "32112412", + "21212413", "41212411", "13121143", "33121141", "22221142", + "11321143", "31321141", "23112142", "12212143", "23121232", + "12221233", "32221231", "21321232", "13112233", "33112231", + "13121323", "33121321", "11312233", "22221322", "11321323", + "31321321", "23112322", "12212323", "23121412", "12221413", + "32221411", "21321412", "13112413", "33112411", + /* Column 31 */ + "22212412", + "11312413", "31312411", "14121142", "23221141", "12321142", + "21421141", "24112141", "13212142", "24121231", "13221232", + "11412142", "22321231", "11421232", "14112232", "14121322", + "12312232", "23221321", "12321322", "21421321", "24112321", + "13212322", "24121411", "13221412", "11412322", "22321411", + "11421412", "14112412", "23212411", "12312412", "21412411", + "15121141", "13321141", "11521141", "14212141", "14221231", + "12412141", "12421231", "15112231", "15121321", "13312231", + "13321321", "11512231", "11521321", "14212321", "14221411", + "12412321", "12421411", "15112411", "13312411", "11512411", + "11131144", "31131142", "21122143", "41122141", "21131233", + "41131231", "11113144", + /* Column 32 */ + "31113142", "11122234", "31122232", + "11131324", "31131322", "21113233", "41113231", "21122323", + "41122321", "21131413", "41131411", "11113324", "31113322", + "11122414", "31122412", "21113413", "41113411", "12131143", + "32131141", "21231142", "22122142", "11222143", "22131232", + "11231233", "31231231", "12113143", "32113141", "12122233", + "32122231", "12131323", "32131321", "21231322", "22113232", + "11213233", "22122322", "11222323", "22131412", "11231413", + "31231411", "12113323", "32113321", "12122413", "32122411", + "21222412", "22113412", "11213413", "31213411", "13131142", + "22231141", "11331142", "23122141", "12222142", "23131231", + "12231232", "21331231", "13113142", "13122232", "11313142", + /* Column 33 */ + "13131322", "11322232", "22231321", "11331322", "23113231", + "12213232", "23122321", "12222322", "23131411", "12231412", + "21331411", "13113322", "13122412", "11313322", "22222411", + "11322412", "23113411", "12213412", "21313411", "14131141", + "12331141", "13222141", "13231231", "11422141", "11431231", + "14113141", "14122231", "12313141", "14131321", "12322231", + "12331321", "13213231", "13222321", "11413231", "13231411", + "11422321", "11431411", "14113321", "14122411", "12313321", + "12322411", "13213411", "11413411", "11141143", "31141141", + "21132142", "21141232", "11123143", "31123141", "11132233", + "31132231", "11141323", "31141321", "21114142", "21123232", + "21132322", "21141412", "11114233", + /* Column 34 */ + "31114231", "11123323", + "31123321", "11132413", "31132411", "21114322", "21123412", + "12141142", "21241141", "22132141", "11232142", "22141231", + "11241232", "12123142", "12132232", "12141322", "21241321", + "22114141", "11214142", "22123231", "11223232", "22132321", + "11232322", "22141411", "11241412", "12114232", "12123322", + "12132412", "21232411", "22114321", "11214322", "22123411", + "11223412", "13141141", "11341141", "12232141", "12241231", + "13123141", "13132231", "11323141", "13141321", "11332231", + "11341321", "12214141", "12223231", "12232321", "12241411", + "13114231", "13123321", "11314231", "13132411", "11323321", + "11332411", "12214321", "12223411", "11151142", "21142141", + "21151231", + /* Column 35 */ + "11133142", "11142232", "11151322", "21124141", + "21133231", "21142321", "21151411", "11115142", "11124232", + "11133322", "11142412", "21115231", "21124321", "21133411", + "12151141", "11242141", "11251231", "12133141", "12142231", + "12151321", "11224141", "11233231", "11242321", "11251411", + "12115141", "12124231", "12133321", "12142411", "11215231", + "11224321", "11233411", "11161141", "11143141", "11152231", + "11161321", "11125141", "11134231", "11143321", "11152411", + "11111245", "31111243", "51111241", "21111334", "41111332", + "11111425", "31111423", "51111421", "21111514", "41111512", + "31211152", "12111244", "32111242", "21211243", "41211241", + "22111333", "42111331", "11211334", "31211332", + /* Column 36 */ + "12111424", + "32111422", "21211423", "41211421", "22111513", "42111511", + "11211514", "31211512", "12211153", "32211151", "21311152", + "13111243", "33111241", "22211242", "11311243", "31311241", + "23111332", "12211333", "32211331", "21311332", "13111423", + "33111421", "22211422", "11311423", "31311421", "23111512", + "12211513", "32211511", "21311512", "13211152", "22311151", + "11411152", "14111242", "23211241", "12311242", "21411241", + "24111331", "13211332", "22311331", "11411332", "14111422", + "23211421", "12311422", "21411421", "24111511", "13211512", + "22311511", "11411512", "14211151", "12411151", "15111241", + "13311241", "11511241", "14211331", "12411331", "15111421", + "13311421", "11511421", + /* Column 37 */ + "14211511", "12411511", "21121153", + "41121151", "11112154", "31112152", "11121244", "31121242", + "21112243", "41112241", "21121333", "41121331", "11112334", + "31112332", "11121424", "31121422", "21112423", "41112421", + "21121513", "41121511", "11112514", "31112512", "22121152", + "11221153", "31221151", "12112153", "32112151", "12121243", + "32121241", "21221242", "22112242", "11212243", "22121332", + "11221333", "31221331", "12112333", "32112331", "12121423", + "32121421", "21221422", "22112422", "11212423", "22121512", + "11221513", "31221511", "12112513", "32112511", "21212512", + "23121151", "12221152", "21321151", "13112152", "13121242", + "11312152", "22221241", "11321242", "23112241", "12212242", + /* Column 38 */ + "23121331", "12221332", "21321331", "13112332", "13121422", + "11312332", "22221421", "11321422", "23112421", "12212422", + "23121511", "12221512", "21321511", "13112512", "22212511", + "11312512", "13221151", "11421151", "14112151", "14121241", + "12312151", "12321241", "13212241", "13221331", "11412241", + "11421331", "14112331", "14121421", "12312331", "12321421", + "13212421", "13221511", "11412421", "11421511", "14112511", + "12312511", "21131152", "11122153", "31122151", "11131243", + "31131241", "21113152", "21122242", "21131332", "11113243", + "31113241", "11122333", "31122331", "11131423", "31131421", + "21113332", "21122422", "21131512", "11113423", "31113421", + "11122513", "31122511", "22131151", + /* Column 39 */ + "11231152", "12122152", + "12131242", "21231241", "22113151", "11213152", "22122241", + "11222242", "22131331", "11231332", "12113242", "12122332", + "12131422", "21231421", "22113331", "11213332", "22122421", + "11222422", "22131511", "11231512", "12113422", "12122512", + "21222511", "12231151", "13122151", "13131241", "11322151", + "11331241", "12213151", "12222241", "12231331", "13113241", + "13122331", "11313241", "13131421", "11322331", "11331421", + "12213331", "12222421", "12231511", "13113421", "13122511", + "11313421", "11322511", "21141151", "11132152", "11141242", + "21123151", "21132241", "21141331", "11114152", "11123242", + "11132332", "11141422", "21114241", "21123331", "21132421", + "21141511", + /* Column 40 */ + "11114332", "11123422", "11132512", "11241151", + "12132151", "12141241", "11223151", "11232241", "11241331", + "12114151", "12123241", "12132331", "12141421", "11214241", + "11223331", "11232421", "11241511", "12114331", "12123421", + "12132511", "11142151", "11151241", "11124151", "11133241", + "11142331", "11151421", "11115241", "11124331", "11133421", + "11142511", "21111253", "41111251", "11111344", "31111342", + "21111433", "41111431", "11111524", "31111522", "21111613", + "41111611", "21211162", "22111252", "11211253", "31211251", + "12111343", "32111341", "21211342", "22111432", "11211433", + "31211431", "12111523", "32111521", "21211522", "22111612", + "11211613", "31211611", "22211161", "11311162", + /* Column 41 */ + "23111251", + "12211252", "21311251", "13111342", "22211341", "11311342", + "23111431", "12211432", "21311431", "13111522", "22211521", + "11311522", "23111611", "12211612", "21311611", "12311161", + "13211251", "11411251", "14111341", "12311341", "13211431", + "11411431", "14111521", "12311521", "13211611", "11411611", + "31121161", "21112162", "21121252", "11112253", "31112251", + "11121343", "31121341", "21112342", "21121432", "11112433", + "31112431", "11121523", "31121521", "21112522", "21121612", + /* Column 42 */ + "12121162", "21221161", "22112161", "11212162", "22121251", + "11221252", "12112252", "12121342", "21221341", "22112341", + "11212342", "22121431", "11221432", "12112432", "12121522", + "21221521", "22112521", "11212522", "22121611", "11221612", + "13121161", "11321161", "12212161", "12221251", "13112251", + "13121341", "11312251", "11321341", "12212341", "12221431", + "13112431", "13121521", "11312431", "11321521", "12212521", + "12221611", "11131162", "21122161", "21131251", "11113162" +}; diff --git a/3rdparty/zint-2.4.4/backend/common.c b/3rdparty/zint-2.4.4/backend/common.c new file mode 100644 index 0000000..981902e --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/common.c @@ -0,0 +1,374 @@ +/* common.c - Contains functions needed for a number of barcodes */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +#include +#include +#include +#include "common.h" + +int ustrlen(unsigned char data[]) { + /* Local replacement for strlen() with unsigned char strings */ + int i; + for (i=0;data[i];i++); + + return i; +} + +void ustrcpy(unsigned char target[], unsigned char source[]) { + /* Local replacement for strcpy() with unsigned char strings */ + int i, len; + + len = ustrlen(source); + for(i = 0; i < len; i++) { + target[i] = source[i]; + } + target[i] = '\0'; +} + +void concat(char dest[], char source[]) +{ /* Concatinates dest[] with the contents of source[], copying /0 as well */ + unsigned int i, j, n; + + j = strlen(dest); + n = strlen(source); + for(i = 0; i <= n; i++) { + dest[i + j] = source[i]; } +} + +void uconcat(unsigned char dest[], unsigned char source[]) +{ /* Concatinates dest[] with the contents of source[], copying /0 as well */ + unsigned int i, j; + + j = ustrlen(dest); + for(i = 0; i <= ustrlen(source); i++) { + dest[i + j] = source[i]; } +} + + +int ctoi(char source) +{ /* Converts a character 0-9 to its equivalent integer value */ + if((source >= '0') && (source <= '9')) + return (source - '0'); + return(source - 'A' + 10); +} + +char itoc(int source) +{ /* Converts an integer value to its hexadecimal character */ + if ((source >= 0) && (source <= 9)) { + return ('0' + source); } + else { + return ('A' + (source - 10)); } +} + +void to_upper(unsigned char source[]) +{ /* Converts lower case characters to upper case in a string source[] */ + unsigned int i, src_len = ustrlen(source); + + for (i = 0; i < src_len; i++) { + if ((source[i] >= 'a') && (source[i] <= 'z')) { + source [i] = (source[i] - 'a') + 'A'; } + } +} + +int is_sane(char test_string[], unsigned char source[], int length) +{ /* Verifies that a string only uses valid characters */ + unsigned int i, j, latch; + unsigned int lt = strlen(test_string); + + for(i = 0; i < length; i++) { + latch = FALSE; + for(j = 0; j < lt; j++) { + if (source[i] == test_string[j]) { + latch = TRUE; + break; + } + } + if (!(latch)) { + return ERROR_INVALID_DATA1; + } + } + + return 0; +} + +int posn(char set_string[], char data) +{ /* Returns the position of data in set_string */ + unsigned int i, n = strlen(set_string); + + for(i = 0; i < n; i++) { + if (data == set_string[i]) { return i; } } + return 0; +} + +void lookup(char set_string[], char *table[], char data, char dest[]) +{ /* Replaces huge switch statements for looking up in tables */ + unsigned int i, n = strlen(set_string); + + for(i = 0; i < n; i++) { + if (data == set_string[i]) { concat(dest, table[i]); } } +} + +int module_is_set(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + return (symbol->encoded_data[y_coord][x_coord / 7] >> (x_coord % 7)) & 1; +#if 0 + switch(x_sub) { + case 0: if((symbol->encoded_data[y_coord][x_char] & 0x01) != 0) { result = 1; } break; + case 1: if((symbol->encoded_data[y_coord][x_char] & 0x02) != 0) { result = 1; } break; + case 2: if((symbol->encoded_data[y_coord][x_char] & 0x04) != 0) { result = 1; } break; + case 3: if((symbol->encoded_data[y_coord][x_char] & 0x08) != 0) { result = 1; } break; + case 4: if((symbol->encoded_data[y_coord][x_char] & 0x10) != 0) { result = 1; } break; + case 5: if((symbol->encoded_data[y_coord][x_char] & 0x20) != 0) { result = 1; } break; + case 6: if((symbol->encoded_data[y_coord][x_char] & 0x40) != 0) { result = 1; } break; + } + + return result; +#endif +} + +void set_module(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + symbol->encoded_data[y_coord][x_coord / 7] |= 1 << (x_coord % 7); +#if 0 + int x_char, x_sub; + + + x_char = x_coord / 7; + x_sub = x_coord % 7; + + switch(x_sub) { + case 0: symbol->encoded_data[y_coord][x_char] += 0x01; break; + case 1: symbol->encoded_data[y_coord][x_char] += 0x02; break; + case 2: symbol->encoded_data[y_coord][x_char] += 0x04; break; + case 3: symbol->encoded_data[y_coord][x_char] += 0x08; break; + case 4: symbol->encoded_data[y_coord][x_char] += 0x10; break; + case 5: symbol->encoded_data[y_coord][x_char] += 0x20; break; + case 6: symbol->encoded_data[y_coord][x_char] += 0x40; break; + } /* The last binary digit is reserved for colour barcodes */ +#endif +} + +void unset_module(struct zint_symbol *symbol, int y_coord, int x_coord) +{ + symbol->encoded_data[y_coord][x_coord / 7] &= ~(1 << (x_coord % 7)); +#if 0 + int x_char, x_sub; + + x_char = x_coord / 7; + x_sub = x_coord % 7; + + switch(x_sub) { + case 0: symbol->encoded_data[y_coord][x_char] -= 0x01; break; + case 1: symbol->encoded_data[y_coord][x_char] -= 0x02; break; + case 2: symbol->encoded_data[y_coord][x_char] -= 0x04; break; + case 3: symbol->encoded_data[y_coord][x_char] -= 0x08; break; + case 4: symbol->encoded_data[y_coord][x_char] -= 0x10; break; + case 5: symbol->encoded_data[y_coord][x_char] -= 0x20; break; + case 6: symbol->encoded_data[y_coord][x_char] -= 0x40; break; + } /* The last binary digit is reserved for colour barcodes */ +#endif +} + +void expand(struct zint_symbol *symbol, char data[]) +{ /* Expands from a width pattern to a bit pattern */ + + unsigned int reader, n = strlen(data); + int writer, i; + char latch; + + writer = 0; + latch = '1'; + + for(reader = 0; reader < n; reader++) { + for(i = 0; i < ctoi(data[reader]); i++) { + if(latch == '1') { set_module(symbol, symbol->rows, writer); } + writer++; + } + + latch = (latch == '1' ? '0' : '1'); + } + + if(symbol->symbology != BARCODE_PHARMA) { + if(writer > symbol->width) { + symbol->width = writer; + } + } else { + /* Pharmacode One ends with a space - adjust for this */ + if(writer > symbol->width + 2) { + symbol->width = writer - 2; + } + } + symbol->rows = symbol->rows + 1; +} + +int is_stackable(int symbology) { + /* Indicates which symbologies can have row binding */ + if(symbology < BARCODE_PDF417) { return 1; } + if(symbology == BARCODE_CODE128B) { return 1; } + if(symbology == BARCODE_ISBNX) { return 1; } + if(symbology == BARCODE_EAN14) { return 1; } + if(symbology == BARCODE_NVE18) { return 1; } + if(symbology == BARCODE_KOREAPOST) { return 1; } + if(symbology == BARCODE_PLESSEY) { return 1; } + if(symbology == BARCODE_TELEPEN_NUM) { return 1; } + if(symbology == BARCODE_ITF14) { return 1; } + if(symbology == BARCODE_CODE32) { return 1; } + + return 0; +} + +int is_extendable(int symbology) { + /* Indicates which symbols can have addon */ + if(symbology == BARCODE_EANX) { return 1; } + if(symbology == BARCODE_UPCA) { return 1; } + if(symbology == BARCODE_UPCE) { return 1; } + if(symbology == BARCODE_ISBNX) { return 1; } + if(symbology == BARCODE_UPCA_CC) { return 1; } + if(symbology == BARCODE_UPCE_CC) { return 1; } + if(symbology == BARCODE_EANX_CC) { return 1; } + + return 0; +} + +int roundup(float input) +{ + float remainder; + int integer_part; + + integer_part = (int)input; + remainder = input - integer_part; + + if(remainder > 0.1) { + integer_part++; + } + + return integer_part; +} + +int istwodigits(unsigned char source[], int position) +{ + if((source[position] >= '0') && (source[position] <= '9')) { + if((source[position + 1] >= '0') && (source[position + 1] <= '9')) { + return 1; + } + } + + return 0; +} + +float froundup(float input) +{ + float fraction, output = 0.0; + + fraction = input - (int)input; + if(fraction > 0.01) { output = (input - fraction) + 1.0; } else { output = input; } + + return output; +} + +int latin1_process(struct zint_symbol *symbol, unsigned char source[], unsigned char preprocessed[], int *length) +{ + int j, i, next; + + /* Convert Unicode to Latin-1 for those symbologies which only support Latin-1 */ + j = 0; + i = 0; + do { + next = -1; + if(source[i] < 128) { + preprocessed[j] = source[i]; + j++; + next = i + 1; + } else { + if(source[i] == 0xC2) { + preprocessed[j] = source[i + 1]; + j++; + next = i + 2; + } + if(source[i] == 0xC3) { + preprocessed[j] = source[i + 1] + 64; + j++; + next = i + 2; + } + } + if(next == -1) { + strcpy(symbol->errtxt, "error: Invalid character in input string (only Latin-1 characters supported)"); + return ERROR_INVALID_DATA1; + } + i = next; + } while(i < *length); + preprocessed[j] = '\0'; + *length = j; + + return 0; +} + +int utf8toutf16(struct zint_symbol *symbol, unsigned char source[], int vals[], int *length) +{ + int bpos, jpos, error_number; + int next; + + bpos = 0; + jpos = 0; + error_number = 0; + next = 0; + + do { + if(source[bpos] <= 0x7f) { + /* 1 byte mode (7-bit ASCII) */ + vals[jpos] = source[bpos]; + next = bpos + 1; + jpos++; + } else { + if((source[bpos] >= 0x80) && (source[bpos] <= 0xbf)) { + strcpy(symbol->errtxt, "Corrupt Unicode data"); + return ERROR_INVALID_DATA1; + } + if((source[bpos] >= 0xc0) && (source[bpos] <= 0xc1)) { + strcpy(symbol->errtxt, "Overlong encoding not supported"); + return ERROR_INVALID_DATA1; + } + + if((source[bpos] >= 0xc2) && (source[bpos] <= 0xdf)) { + /* 2 byte mode */ + vals[jpos] = ((source[bpos] & 0x1f) << 6) + (source[bpos + 1] & 0x3f); + next = bpos + 2; + jpos++; + } else + if((source[bpos] >= 0xe0) && (source[bpos] <= 0xef)) { + /* 3 byte mode */ + vals[jpos] = ((source[bpos] & 0x0f) << 12) + ((source[bpos + 1] & 0x3f) << 6) + (source[bpos + 2] & 0x3f); + next = bpos + 3; + jpos ++; + } else + if(source[bpos] >= 0xf0) { + strcpy(symbol->errtxt, "Unicode sequences of more than 3 bytes not supported"); + return ERROR_INVALID_DATA1; + } + } + + bpos = next; + + } while(bpos < *length); + *length = jpos; + + return error_number; +} + diff --git a/3rdparty/zint-2.4.4/backend/common.h b/3rdparty/zint-2.4.4/backend/common.h new file mode 100644 index 0000000..52bc911 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/common.h @@ -0,0 +1,70 @@ +/* common.h - Header for all common functions in common.c */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* Used in some logic */ +#ifndef __COMMON_H +#define __COMMON_H + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +/* The most commonly used set */ +#define NEON "0123456789" + +#include "zint.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +extern int ustrlen(unsigned char source[]); +extern void ustrcpy(unsigned char target[], unsigned char source[]); +extern void concat(char dest[], char source[]); +extern void uconcat(unsigned char dest[], unsigned char source[]); +extern int ctoi(char source); +extern char itoc(int source); +extern void to_upper(unsigned char source[]); +extern int is_sane(char test_string[], unsigned char source[], int length); +extern void lookup(char set_string[], char *table[], char data, char dest[]); +extern int posn(char set_string[], char data); +extern void expand(struct zint_symbol *symbol, char data[]); +extern int is_stackable(int symbology); +extern int is_extendable(int symbology); +extern int roundup(float input); +extern int module_is_set(struct zint_symbol *symbol, int y_coord, int x_coord); +extern void set_module(struct zint_symbol *symbol, int y_coord, int x_coord); +extern void unset_module(struct zint_symbol *symbol, int y_coord, int x_coord); +extern int istwodigits(unsigned char source[], int position); +extern float froundup(float input); +extern int parunmodd(unsigned char llyth); +extern int latin1_process(struct zint_symbol *symbol, unsigned char source[], unsigned char preprocessed[], int *length); +extern int utf8toutf16(struct zint_symbol *symbol, unsigned char source[], int vals[], int *length); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __COMMON_H */ diff --git a/3rdparty/zint-2.4.4/backend/composite.c b/3rdparty/zint-2.4.4/backend/composite.c new file mode 100644 index 0000000..5b21d13 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/composite.c @@ -0,0 +1,1957 @@ +/* composite.c - Handles UCC.EAN Composite Symbols */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* The functions "getBit", "init928" and "encode928" are copyright BSI and are + released with permission under the following terms: + + "Copyright subsists in all BSI publications. BSI also holds the copyright, in the + UK, of the international standardisation bodies. Except as + permitted under the Copyright, Designs and Patents Act 1988 no extract may be + reproduced, stored in a retrieval system or transmitted in any form or by any + means - electronic, photocopying, recording or otherwise - without prior written + permission from BSI. + + "This does not preclude the free use, in the course of implementing the standard, + of necessary details such as symbols, and size, type or grade designations. If these + details are to be used for any other purpose than implementation then the prior + written permission of BSI must be obtained." + + The date of publication for these functions is 31 May 2006 +*/ + +#include +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" +#include "large.h" +#include "composite.h" +#include "pdf417.h" +#include "gs1.h" + +#define UINT unsigned short + +extern int general_rules(char field[], char type[]); +extern int eanx(struct zint_symbol *symbol, unsigned char source[], int length); +extern int ean_128(struct zint_symbol *symbol, unsigned char source[], int length); +extern int rss14(struct zint_symbol *symbol, unsigned char source[], int length); +extern int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); +extern int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); + +static UINT pwr928[69][7]; + +int _min(int first, int second) { + + if(first <= second) + return first; + else + return second; +} + +/* gets bit in bitString at bitPos */ +int getBit(UINT *bitStr, int bitPos) { + return !!(bitStr[bitPos >> 4] & (0x8000 >> (bitPos & 15))); +} + +/* initialize pwr928 encoding table */ +void init928(void) { + int i, j, v; + int cw[7]; + cw[6] = 1L; + for (i = 5; i >= 0; i--) + cw[i] = 0; + + for (i = 0; i < 7; i++) + pwr928[0][i] = cw[i]; + for (j = 1; j < 69; j++) { + for (v = 0, i = 6; i >= 1; i--) { + v = (2 * cw[i]) + (v / 928); + pwr928[j][i] = cw[i] = v % 928; + } + pwr928[j][0] = cw[0] = (2 * cw[0]) + (v / 928); + } + return; +} + +/* converts bit string to base 928 values, codeWords[0] is highest order */ +int encode928(UINT bitString[], UINT codeWords[], int bitLng) { + int i, j, b, bitCnt, cwNdx, cwCnt, cwLng; + for (cwNdx = cwLng = b = 0; b < bitLng; b += 69, cwNdx += 7) { + bitCnt = _min(bitLng-b, 69); + cwLng += cwCnt = bitCnt/10 + 1; + for (i = 0; i < cwCnt; i++) + codeWords[cwNdx+i] = 0; /* init 0 */ + for (i = 0; i < bitCnt; i++) { + if (getBit(bitString, b+bitCnt-i-1)) { + for (j = 0; j < cwCnt; j++) + codeWords[cwNdx+j] += pwr928[i][j+7-cwCnt]; + } + } + for (i = cwCnt-1; i > 0; i--) { + /* add "carries" */ + codeWords[cwNdx+i-1] += codeWords[cwNdx+i]/928L; + codeWords[cwNdx+i] %= 928L; + } + } + return (cwLng); +} + +int cc_a(struct zint_symbol *symbol, char source[], int cc_width) +{ /* CC-A 2D component */ + int i, strpos, segment, bitlen, cwCnt, variant, rows; + int k, offset, j, total, rsCodeWords[8]; + int LeftRAPStart, RightRAPStart, CentreRAPStart, StartCluster; + int LeftRAP, RightRAP, CentreRAP, Cluster, dummy[5]; + int writer, flip, loop; + UINT codeWords[28]; + UINT bitStr[13]; + char codebarre[100], pattern[580]; + char local_source[210]; /* A copy of source but with padding zeroes to make 208 bits */ + + variant=0; + + for(i = 0; i < 13; i++) { bitStr[i] = 0; } + for(i = 0; i < 28; i++) { codeWords[i] = 0; } + + bitlen = strlen(source); + + for(i = 0; i < 208; i++) { local_source[i] = '0'; } + for(i = 0; i < bitlen; i++) { local_source[i] = source[i]; } + local_source[208] = '\0'; + + for(segment = 0; segment < 13; segment++) { + strpos = segment * 16; + if(local_source[strpos] == '1') { bitStr[segment] += 0x8000; } + if(local_source[strpos + 1] == '1') { bitStr[segment] += 0x4000; } + if(local_source[strpos + 2] == '1') { bitStr[segment] += 0x2000; } + if(local_source[strpos + 3] == '1') { bitStr[segment] += 0x1000; } + if(local_source[strpos + 4] == '1') { bitStr[segment] += 0x800; } + if(local_source[strpos + 5] == '1') { bitStr[segment] += 0x400; } + if(local_source[strpos + 6] == '1') { bitStr[segment] += 0x200; } + if(local_source[strpos + 7] == '1') { bitStr[segment] += 0x100; } + if(local_source[strpos + 8] == '1') { bitStr[segment] += 0x80; } + if(local_source[strpos + 9] == '1') { bitStr[segment] += 0x40; } + if(local_source[strpos + 10] == '1') { bitStr[segment] += 0x20; } + if(local_source[strpos + 11] == '1') { bitStr[segment] += 0x10; } + if(local_source[strpos + 12] == '1') { bitStr[segment] += 0x08; } + if(local_source[strpos + 13] == '1') { bitStr[segment] += 0x04; } + if(local_source[strpos + 14] == '1') { bitStr[segment] += 0x02; } + if(local_source[strpos + 15] == '1') { bitStr[segment] += 0x01; } + } + + init928(); + /* encode codeWords from bitStr */ + cwCnt = encode928(bitStr, codeWords, bitlen); + + switch(cc_width) { + case 2: + switch(cwCnt) { + case 6: variant = 0; break; + case 8: variant = 1; break; + case 9: variant = 2; break; + case 11: variant = 3; break; + case 12: variant = 4; break; + case 14: variant = 5; break; + case 17: variant = 6; break; + } + break; + case 3: + switch(cwCnt) { + case 8: variant = 7; break; + case 10: variant = 8; break; + case 12: variant = 9; break; + case 14: variant = 10; break; + case 17: variant = 11; break; + } + break; + case 4: + switch(cwCnt) { + case 8: variant = 12; break; + case 11: variant = 13; break; + case 14: variant = 14; break; + case 17: variant = 15; break; + case 20: variant = 16; break; + } + break; + } + + rows = ccaVariants[variant]; + k = ccaVariants[17 + variant]; + offset = ccaVariants[34 + variant]; + + /* Reed-Solomon error correction */ + + for(i = 0; i < 8; i++) { + rsCodeWords[i] = 0; + } + total = 0; + for(i = 0; i < cwCnt; i++) { + total = (codeWords[i] + rsCodeWords[k - 1]) % 929; + for(j = k - 1; j >= 0; j--) { + if(j == 0) { + rsCodeWords[j] = (929 - (total * ccaCoeffs[offset + j]) % 929) % 929; + } else { + rsCodeWords[j] = (rsCodeWords[j - 1] + 929 - (total * ccaCoeffs[offset + j]) % 929) % 929; + } + } + } + + for(j = 0; j < k; j++) { + if(rsCodeWords[j] != 0) { rsCodeWords[j] = 929 - rsCodeWords[j]; } + } + + for(i = k - 1; i >= 0; i--) { + codeWords[cwCnt] = rsCodeWords[i]; + cwCnt++; + } + + /* Place data into table */ + LeftRAPStart = aRAPTable[variant]; + CentreRAPStart = aRAPTable[variant + 17]; + RightRAPStart = aRAPTable[variant + 34]; + StartCluster = aRAPTable[variant + 51] / 3; + + LeftRAP = LeftRAPStart; + CentreRAP = CentreRAPStart; + RightRAP = RightRAPStart; + Cluster = StartCluster; /* Cluster can be 0, 1 or 2 for Cluster(0), Cluster(3) and Cluster(6) */ + + for(i = 0; i < rows; i++) { + strcpy(codebarre, ""); + offset = 929 * Cluster; + for(j = 0; j < 5; j++) { + dummy[j] = 0; + } + for(j = 0; j < cc_width ; j++) { + dummy[j + 1] = codeWords[i * cc_width + j]; + } + /* Copy the data into codebarre */ + concat(codebarre, RAPLR[LeftRAP]); + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[1]]); + concat(codebarre, "1"); + if(cc_width == 3) { + concat(codebarre, RAPC[CentreRAP]); + } + if(cc_width >= 2) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[2]]); + concat(codebarre, "1"); + } + if(cc_width == 4) { + concat(codebarre, RAPC[CentreRAP]); + } + if(cc_width >= 3) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[3]]); + concat(codebarre, "1"); + } + if(cc_width == 4) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[4]]); + concat(codebarre, "1"); + } + concat(codebarre, RAPLR[RightRAP]); + concat(codebarre, "1"); /* stop */ + + /* Now codebarre is a mixture of letters and numbers */ + + writer = 0; + flip = 1; + strcpy(pattern, ""); + for(loop = 0; loop < strlen(codebarre); loop++) { + if((codebarre[loop] >= '0') && (codebarre[loop] <= '9')) { + for(k = 0; k < ctoi(codebarre[loop]); k++) { + if(flip == 0) { + pattern[writer] = '0'; + } else { + pattern[writer] = '1'; + } + writer++; + } + pattern[writer] = '\0'; + if(flip == 0) { + flip = 1; + } else { + flip = 0; + } + } else { + lookup(BRSET, PDFttf, codebarre[loop], pattern); + writer += 5; + } + } + symbol->width = writer; + + /* so now pattern[] holds the string of '1's and '0's. - copy this to the symbol */ + for(loop = 0; loop < strlen(pattern); loop++) { + if(pattern[loop] == '1') { set_module(symbol, i, loop); } + } + symbol->row_height[i] = 2; + symbol->rows++; + + /* Set up RAPs and Cluster for next row */ + LeftRAP++; + CentreRAP++; + RightRAP++; + Cluster++; + + if(LeftRAP == 53) { + LeftRAP = 1; + } + if(CentreRAP == 53) { + CentreRAP = 1; + } + if(RightRAP == 53) { + RightRAP = 1; + } + if(Cluster == 3) { + Cluster = 0; + } + } + + return 0; +} + +int cc_b(struct zint_symbol *symbol, char source[], int cc_width) +{ /* CC-B 2D component */ + int length, i, binloc; +#ifndef _MSC_VER + unsigned char data_string[(strlen(source) / 8) + 3]; +#else + unsigned char* data_string = (unsigned char*)_alloca((strlen(source) / 8) + 3); +#endif + int chainemc[180], mclength; + int k, j, longueur, mccorrection[50], offset; + int total, dummy[5]; + char codebarre[100], pattern[580]; + int variant, LeftRAPStart, CentreRAPStart, RightRAPStart, StartCluster; + int LeftRAP, CentreRAP, RightRAP, Cluster, writer, flip, loop; + + length = strlen(source) / 8; + + for(i = 0; i < length; i++) { + binloc = i * 8; + + data_string[i] = 0; + if(source[binloc] == '1') { data_string[i] += 0x80; } + if(source[binloc + 1] == '1') { data_string[i] += 0x40; } + if(source[binloc + 2] == '1') { data_string[i] += 0x20; } + if(source[binloc + 3] == '1') { data_string[i] += 0x10; } + if(source[binloc + 4] == '1') { data_string[i] += 0x08; } + if(source[binloc + 5] == '1') { data_string[i] += 0x04; } + if(source[binloc + 6] == '1') { data_string[i] += 0x02; } + if(source[binloc + 7] == '1') { data_string[i] += 0x01; } + } + + + mclength = 0; + + /* "the CC-B component shall have codeword 920 in the first symbol character position" (section 9a) */ + chainemc[mclength] = 920; + mclength++; + + byteprocess(chainemc, &mclength, data_string, 0, length, 0); + + /* Now figure out which variant of the symbol to use and load values accordingly */ + + variant = 0; + + if(cc_width == 2) { + variant = 13; + if(mclength <= 33) { variant = 12; } + if(mclength <= 29) { variant = 11; } + if(mclength <= 24) { variant = 10; } + if(mclength <= 19) { variant = 9; } + if(mclength <= 13) { variant = 8; } + if(mclength <= 8) { variant = 7; } + } + + if(cc_width == 3) { + variant = 23; + if(mclength <= 70) { variant = 22; } + if(mclength <= 58) { variant = 21; } + if(mclength <= 46) { variant = 20; } + if(mclength <= 34) { variant = 19; } + if(mclength <= 24) { variant = 18; } + if(mclength <= 18) { variant = 17; } + if(mclength <= 14) { variant = 16; } + if(mclength <= 10) { variant = 15; } + if(mclength <= 6) { variant = 14; } + } + + if(cc_width == 4) { + variant = 34; + if(mclength <= 108) { variant = 33; } + if(mclength <= 90) { variant = 32; } + if(mclength <= 72) { variant = 31; } + if(mclength <= 54) { variant = 30; } + if(mclength <= 39) { variant = 29; } + if(mclength <= 30) { variant = 28; } + if(mclength <= 24) { variant = 27; } + if(mclength <= 18) { variant = 26; } + if(mclength <= 12) { variant = 25; } + if(mclength <= 8) { variant = 24; } + } + + /* Now we have the variant we can load the data - from here on the same as MicroPDF417 code */ + variant --; + symbol->option_2 = MicroVariants[variant]; /* columns */ + symbol->rows = MicroVariants[variant + 34]; /* rows */ + k = MicroVariants[variant + 68]; /* number of EC CWs */ + longueur = (symbol->option_2 * symbol->rows) - k; /* number of non-EC CWs */ + i = longueur - mclength; /* amount of padding required */ + offset = MicroVariants[variant + 102]; /* coefficient offset */ + + /* We add the padding */ + while (i > 0) { + chainemc[mclength] = 900; + mclength++; + i--; + } + + /* Reed-Solomon error correction */ + longueur = mclength; + for(loop = 0; loop < 50; loop++) { + mccorrection[loop] = 0; + } + total = 0; + for(i = 0; i < longueur; i++) { + total = (chainemc[i] + mccorrection[k - 1]) % 929; + for(j = k - 1; j >= 0; j--) { + if(j == 0) { + mccorrection[j] = (929 - (total * Microcoeffs[offset + j]) % 929) % 929; + } else { + mccorrection[j] = (mccorrection[j - 1] + 929 - (total * Microcoeffs[offset + j]) % 929) % 929; + } + } + } + + for(j = 0; j < k; j++) { + if(mccorrection[j] != 0) { mccorrection[j] = 929 - mccorrection[j]; } + } + /* we add these codes to the string */ + for(i = k - 1; i >= 0; i--) { + chainemc[mclength] = mccorrection[i]; + mclength++; + } + + /* Now get the RAP (Row Address Pattern) start values */ + LeftRAPStart = RAPTable[variant]; + CentreRAPStart = RAPTable[variant + 34]; + RightRAPStart = RAPTable[variant + 68]; + StartCluster = RAPTable[variant + 102] / 3; + + /* That's all values loaded, get on with the encoding */ + + LeftRAP = LeftRAPStart; + CentreRAP = CentreRAPStart; + RightRAP = RightRAPStart; + Cluster = StartCluster; /* Cluster can be 0, 1 or 2 for Cluster(0), Cluster(3) and Cluster(6) */ + + for(i = 0; i < symbol->rows; i++) { + strcpy(codebarre, ""); + offset = 929 * Cluster; + for(j = 0; j < 5; j++) { + dummy[j] = 0; + } + for(j = 0; j < symbol->option_2 ; j++) { + dummy[j + 1] = chainemc[i * symbol->option_2 + j]; + } + /* Copy the data into codebarre */ + concat(codebarre, RAPLR[LeftRAP]); + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[1]]); + concat(codebarre, "1"); + if(cc_width == 3) { + concat(codebarre, RAPC[CentreRAP]); + } + if(cc_width >= 2) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[2]]); + concat(codebarre, "1"); + } + if(cc_width == 4) { + concat(codebarre, RAPC[CentreRAP]); + } + if(cc_width >= 3) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[3]]); + concat(codebarre, "1"); + } + if(cc_width == 4) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[4]]); + concat(codebarre, "1"); + } + concat(codebarre, RAPLR[RightRAP]); + concat(codebarre, "1"); /* stop */ + + /* Now codebarre is a mixture of letters and numbers */ + + writer = 0; + flip = 1; + strcpy(pattern, ""); + for(loop = 0; loop < strlen(codebarre); loop++) { + if((codebarre[loop] >= '0') && (codebarre[loop] <= '9')) { + for(k = 0; k < ctoi(codebarre[loop]); k++) { + if(flip == 0) { + pattern[writer] = '0'; + } else { + pattern[writer] = '1'; + } + writer++; + } + pattern[writer] = '\0'; + if(flip == 0) { + flip = 1; + } else { + flip = 0; + } + } else { + lookup(BRSET, PDFttf, codebarre[loop], pattern); + writer += 5; + } + } + symbol->width = writer; + + /* so now pattern[] holds the string of '1's and '0's. - copy this to the symbol */ + for(loop = 0; loop < strlen(pattern); loop++) { + if(pattern[loop] == '1') { set_module(symbol, i, loop); } + } + symbol->row_height[i] = 2; + + /* Set up RAPs and Cluster for next row */ + LeftRAP++; + CentreRAP++; + RightRAP++; + Cluster++; + + if(LeftRAP == 53) { + LeftRAP = 1; + } + if(CentreRAP == 53) { + CentreRAP = 1; + } + if(RightRAP == 53) { + RightRAP = 1; + } + if(Cluster == 3) { + Cluster = 0; + } + } + + return 0; +} + +int cc_c(struct zint_symbol *symbol, char source[], int cc_width, int ecc_level) +{ /* CC-C 2D component - byte compressed PDF417 */ + int length, i, binloc; +#ifndef _MSC_VER + unsigned char data_string[(strlen(source) / 8) + 4]; +#else + unsigned char* data_string = (unsigned char*)_alloca((strlen(source) / 8) + 4); +#endif + int chainemc[1000], mclength, k; + int offset, longueur, loop, total, j, mccorrection[520]; + int c1, c2, c3, dummy[35]; + char codebarre[100], pattern[580]; + + length = strlen(source) / 8; + + for(i = 0; i < length; i++) { + binloc = i * 8; + + data_string[i] = 0; + if(source[binloc] == '1') { data_string[i] += 0x80; } + if(source[binloc + 1] == '1') { data_string[i] += 0x40; } + if(source[binloc + 2] == '1') { data_string[i] += 0x20; } + if(source[binloc + 3] == '1') { data_string[i] += 0x10; } + if(source[binloc + 4] == '1') { data_string[i] += 0x08; } + if(source[binloc + 5] == '1') { data_string[i] += 0x04; } + if(source[binloc + 6] == '1') { data_string[i] += 0x02; } + if(source[binloc + 7] == '1') { data_string[i] += 0x01; } + } + + mclength = 0; + + chainemc[mclength] = 0; /* space for length descriptor */ + mclength++; + chainemc[mclength] = 920; /* CC-C identifier */ + mclength++; + + byteprocess(chainemc, &mclength, data_string, 0, length, 0); + + chainemc[0] = mclength; + + k = 1; + for(i = 1; i <= (ecc_level + 1); i++) + { + k *= 2; + } + + /* 796 - we now take care of the Reed Solomon codes */ + switch(ecc_level) { + case 1: offset = 2; break; + case 2: offset = 6; break; + case 3: offset = 14; break; + case 4: offset = 30; break; + case 5: offset = 62; break; + case 6: offset = 126; break; + case 7: offset = 254; break; + case 8: offset = 510; break; + default: offset = 0; break; + } + + longueur = mclength; + for(loop = 0; loop < 520; loop++) { + mccorrection[loop] = 0; + } + total = 0; + for(i = 0; i < longueur; i++) { + total = (chainemc[i] + mccorrection[k - 1]) % 929; + for(j = k - 1; j >= 0; j--) { + if(j == 0) { + mccorrection[j] = (929 - (total * coefrs[offset + j]) % 929) % 929; + } else { + mccorrection[j] = (mccorrection[j - 1] + 929 - (total * coefrs[offset + j]) % 929) % 929; + } + } + } + + for(j = 0; j < k; j++) { + if(mccorrection[j] != 0) { mccorrection[j] = 929 - mccorrection[j]; } + } + /* we add these codes to the string */ + for(i = k - 1; i >= 0; i--) { + chainemc[mclength] = mccorrection[i]; + mclength++; + } + + /* 818 - The CW string is finished */ + c1 = (mclength / cc_width - 1) / 3; + c2 = ecc_level * 3 + (mclength / cc_width - 1) % 3; + c3 = cc_width - 1; + + /* we now encode each row */ + for(i = 0; i <= (mclength / cc_width) - 1; i++) { + for(j = 0; j < cc_width ; j++) { + dummy[j + 1] = chainemc[i * cc_width + j]; + } + k = (i / 3) * 30; + switch(i % 3) { + /* follows this pattern from US Patent 5,243,655: + Row 0: L0 (row #, # of rows) R0 (row #, # of columns) + Row 1: L1 (row #, security level) R1 (row #, # of rows) + Row 2: L2 (row #, # of columns) R2 (row #, security level) + Row 3: L3 (row #, # of rows) R3 (row #, # of columns) + etc. */ + case 0: + dummy[0] = k + c1; + dummy[cc_width + 1] = k + c3; + break; + case 1: + dummy[0] = k + c2; + dummy[cc_width + 1] = k + c1; + break; + case 2: + dummy[0] = k + c3; + dummy[cc_width + 1] = k + c2; + break; + } + strcpy(codebarre, "+*"); /* Start with a start char and a separator */ + + for(j = 0; j <= cc_width + 1; j++) { + switch(i % 3) { + case 1: offset = 929; /* cluster(3) */ break; + case 2: offset = 1858; /* cluster(6) */ break; + default: offset = 0; /* cluster(0) */ break; + } + concat(codebarre, codagemc[offset + dummy[j]]); + concat(codebarre, "*"); + } + concat(codebarre, "-"); + + strcpy(pattern, ""); + for(loop = 0; loop < strlen(codebarre); loop++) { + lookup(BRSET, PDFttf, codebarre[loop], pattern); + } + for(loop = 0; loop < strlen(pattern); loop++) { + if(pattern[loop] == '1') { set_module(symbol, i, loop); } + } + symbol->row_height[i] = 3; + } + symbol->rows = (mclength / cc_width); + symbol->width = strlen(pattern); + + return 0; +} + +int cc_binary_string(struct zint_symbol *symbol, const char source[], char binary_string[], int cc_mode, int *cc_width, int *ecc, int lin_width) +{ /* Handles all data encodation from section 5 of ISO/IEC 24723 */ + int encoding_method, read_posn, d1, d2, value, alpha_pad; + int i, j, mask, ai_crop, ai_crop_posn, fnc1_latch; + long int group_val; + int ai90_mode, latch, remainder, binary_length; + char date_str[4]; +#ifndef _MSC_VER + char general_field[strlen(source) + 1], general_field_type[strlen(source) + 1]; +#else + char* general_field = (char*)_alloca(strlen(source) + 1); + char* general_field_type = (char*)_alloca(strlen(source) + 1); +#endif + int target_bitsize; + + encoding_method = 1; + read_posn = 0; + ai_crop = 0; + ai_crop_posn = -1; + fnc1_latch = 0; + alpha_pad = 0; + ai90_mode = 0; + *ecc = 0; + value = 0; + target_bitsize = 0; + + if((source[0] == '1') && ((source[1] == '0') || (source[1] == '1') || (source[1] == '7')) && (strlen(source) > 8)) { + /* Source starts (10), (11) or (17) */ + encoding_method = 2; + } + + if((source[0] == '9') && (source[1] == '0')) { + /* Source starts (90) */ + encoding_method = 3; + } + + if(encoding_method == 1) { + concat(binary_string, "0"); + } + + if(encoding_method == 2) { + /* Encoding Method field "10" - date and lot number */ + + concat(binary_string, "10"); + + if(source[1] == '0') { + /* No date data */ + concat(binary_string, "11"); + read_posn = 2; + } else { + /* Production Date (11) or Expiration Date (17) */ + date_str[0] = source[2]; + date_str[1] = source[3]; + date_str[2] = '\0'; + group_val = atoi(date_str) * 384; + + date_str[0] = source[4]; + date_str[1] = source[5]; + group_val += (atoi(date_str) - 1) * 32; + + date_str[0] = source[6]; + date_str[1] = source[7]; + group_val += atoi(date_str); + + mask = 0x8000; + for(j = 0; j < 16; j++) { + if((group_val & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + + if(source[1] == '1') { + /* Production Date AI 11 */ + concat(binary_string, "0"); + } else { + /* Expiration Date AI 17 */ + concat(binary_string, "1"); + } + read_posn = 8; + } + + if((source[read_posn] == '1') && (source[read_posn + 1] == '0')) { + /* Followed by AI 10 - strip this from general field */ + read_posn += 2; + } else { + /* An FNC1 character needs to be inserted in the general field */ + fnc1_latch = 1; + } + } + + if (encoding_method == 3) { + /* Encodation Method field of "11" - AI 90 */ +#ifndef _MSC_VER + char ninety[strlen(source) + 1]; +#else + char* ninety = (char*)_alloca(strlen(source) + 1); +#endif + char numeric_part[4]; + int alpha, alphanum, numeric, test1, test2, test3, next_ai_posn; + int numeric_value, table3_letter, mask; + + /* "This encodation method may be used if an element string with an AI + 90 occurs at the start of the data message, and if the data field + following the two-digit AI 90 starts with an alphanumeric string which + complies with a specific format." (para 5.2.2) */ + + i = 0; + do { + ninety[i] = source[i + 2]; + i++; + } while ((strlen(source) > i + 2) && ('[' != source[i + 2])); + ninety[i] = '\0'; + + /* Find out if the AI 90 data is alphabetic or numeric or both */ + + alpha = 0; + alphanum = 0; + numeric = 0; + + for(i = 0; i < strlen(ninety); i++) { + + if ((ninety[i] >= 'A') && (ninety[i] <= 'Z')) { + /* Character is alphabetic */ + alpha += 1; + } + + if ((ninety[i] >= '0') && (ninety[i] <= '9')) { + /* Character is numeric */ + numeric += 1; + } + + switch(ninety[i]) { + case '*': + case ',': + case '-': + case '.': + case '/': alphanum += 1; break; + } + + if (!(((ninety[i] >= '0') && (ninety[i] <= '9')) || ((ninety[i] >= 'A') && (ninety[i] <= 'Z')))) { + if((ninety[i] != '*') && (ninety[i] != ',') && (ninety[i] != '-') && (ninety[i] != '.') && (ninety[i] != '/')) { + /* An Invalid AI 90 character */ + strcpy(symbol->errtxt, "Invalid AI 90 data"); + return ERROR_INVALID_DATA1; + } + } + } + + /* must start with 0, 1, 2 or 3 digits followed by an uppercase character */ + test1 = -1; + for(i = 3; i >= 0; i--) { + if ((ninety[i] >= 'A') && (ninety[i] <= 'Z')) { + test1 = i; + } + } + + test2 = 0; + for(i = 0; i < test1; i++) { + if (!((ninety[i] >= '0') && (ninety[i] <= '9'))) { + test2 = 1; + } + } + + /* leading zeros are not permitted */ + test3 = 0; + if((test1 >= 1) && (ninety[0] == '0')) { test3 = 1; } + + if((test1 != -1) && (test2 != 1) && (test3 == 0)) { + /* Encodation method "11" can be used */ + concat(binary_string, "11"); + + numeric -= test1; + alpha --; + + /* Decide on numeric, alpha or alphanumeric mode */ + /* Alpha mode is a special mode for AI 90 */ + + if(alphanum > 0) { + /* Alphanumeric mode */ + concat(binary_string, "0"); + ai90_mode = 1; + } else { + if(alpha > numeric) { + /* Alphabetic mode */ + concat(binary_string, "11"); + ai90_mode = 2; + } else { + /* Numeric mode */ + concat(binary_string, "10"); + ai90_mode = 3; + } + } + + next_ai_posn = 2 + strlen(ninety); + + if(source[next_ai_posn] == '[') { + /* There are more AIs afterwords */ + if((source[next_ai_posn + 1] == '2') && (source[next_ai_posn + 2] == '1')) { + /* AI 21 follows */ + ai_crop = 1; + ai_crop_posn = next_ai_posn + 1; + } + + if((source[next_ai_posn + 1] == '8') && (source[next_ai_posn + 2] == '0') && (source[next_ai_posn + 3] == '0') && (source[next_ai_posn + 4] == '4')) { + /* AI 8004 follows */ + ai_crop = 2; + ai_crop_posn = next_ai_posn + 1; + } + } + + switch(ai_crop) { + case 0: concat(binary_string, "0"); break; + case 1: concat(binary_string, "10"); break; + case 2: concat(binary_string, "11"); break; + } + + if(test1 == 0) { + strcpy(numeric_part, "0"); + } else { + for(i = 0; i < test1; i++) { + numeric_part[i] = ninety[i]; + } + numeric_part[i] = '\0'; + } + + numeric_value = atoi(numeric_part); + + table3_letter = -1; + if(numeric_value < 31) { + switch(ninety[test1]) { + case 'B': table3_letter = 0; break; + case 'D': table3_letter = 1; break; + case 'H': table3_letter = 2; break; + case 'I': table3_letter = 3; break; + case 'J': table3_letter = 4; break; + case 'K': table3_letter = 5; break; + case 'L': table3_letter = 6; break; + case 'N': table3_letter = 7; break; + case 'P': table3_letter = 8; break; + case 'Q': table3_letter = 9; break; + case 'R': table3_letter = 10; break; + case 'S': table3_letter = 11; break; + case 'T': table3_letter = 12; break; + case 'V': table3_letter = 13; break; + case 'W': table3_letter = 14; break; + case 'Z': table3_letter = 15; break; + } + } + + if(table3_letter != -1) { + /* Encoding can be done according to 5.2.2 c) 2) */ + /* five bit binary string representing value before letter */ + mask = 0x10; + for(j = 0; j < 5; j++) { + if((numeric_value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + + /* followed by four bit representation of letter from Table 3 */ + mask = 0x08; + for(j = 0; j < 4; j++) { + if((table3_letter & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } else { + /* Encoding is done according to 5.2.2 c) 3) */ + concat(binary_string, "11111"); + /* ten bit representation of number */ + mask = 0x200; + for(j = 0; j < 10; j++) { + if((numeric_value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + + /* five bit representation of ASCII character */ + mask = 0x10; + for(j = 0; j < 5; j++) { + if(((ninety[test1] - 65) & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + read_posn = test1 + 3; + } else { + /* Use general field encodation instead */ + concat(binary_string, "0"); + read_posn = 0; + } + } + + /* Now encode the rest of the AI 90 data field */ + if(ai90_mode == 2) { + /* Alpha encodation (section 5.2.3) */ + do { + if((source[read_posn] >= '0') && (source[read_posn] <= '9')) { + mask = 0x10; + for(j = 0; j < 5; j++) { + if(((source[read_posn] + 4) & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + if((source[read_posn] >= 'A') && (source[read_posn] <= 'Z')) { + mask = 0x20; + for(j = 0; j < 6; j++) { + if(((source[read_posn] - 65) & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + if(source[read_posn] == '[') { + concat(binary_string, "11111"); + } + + read_posn++; + } while ((source[read_posn - 1] != '[') && (source[read_posn - 1] != '\0')); + alpha_pad = 1; /* This is overwritten if a general field is encoded */ + } + + if(ai90_mode == 1) { + /* Alphanumeric mode */ + do { + if((source[read_posn] >= '0') && (source[read_posn] <= '9')) { + mask = 0x10; + for(j = 0; j < 5; j++) { + if(((source[read_posn] - 43) & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + if((source[read_posn] >= 'A') && (source[read_posn] <= 'Z')) { + mask = 0x20; + for(j = 0; j < 6; j++) { + if(((source[read_posn] - 33) & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + switch(source[read_posn]) { + case '[': concat(binary_string, "01111"); break; + case '*': concat(binary_string, "111010"); break; + case ',': concat(binary_string, "111011"); break; + case '-': concat(binary_string, "111100"); break; + case '.': concat(binary_string, "111101"); break; + case '/': concat(binary_string, "111110"); break; + } + + read_posn++; + } while ((source[read_posn - 1] != '[') && (source[read_posn - 1] != '\0')); + } + + read_posn += (2 * ai_crop); + + /* The compressed data field has been processed if appropriate - the + rest of the data (if any) goes into a general-purpose data compaction field */ + + j = 0; + if(fnc1_latch == 1) { + /* Encodation method "10" has been used but it is not followed by + AI 10, so a FNC1 character needs to be added */ + general_field[j] = '['; + j++; + } + + for(i = read_posn; i < strlen(source); i++) { + general_field[j] = source[i]; + j++; + } + general_field[j] = '\0'; + + if(strlen(general_field) != 0) { alpha_pad = 0; } + + latch = 0; + for(i = 0; i < strlen(general_field); i++) { + /* Table 13 - ISO/IEC 646 encodation */ + if((general_field[i] < ' ') || (general_field[i] > 'z')) { + general_field_type[i] = INVALID_CHAR; latch = 1; + } else { + general_field_type[i] = ISOIEC; + } + + if(general_field[i] == '#') { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == '$') { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == '@') { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == 92) { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == '^') { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == 96) { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + + /* Table 12 - Alphanumeric encodation */ + if((general_field[i] >= 'A') && (general_field[i] <= 'Z')) { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == '*') { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == ',') { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == '-') { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == '.') { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == '/') { + general_field_type[i] = ALPHA_OR_ISO; + } + + /* Numeric encodation */ + if((general_field[i] >= '0') && (general_field[i] <= '9')) { + general_field_type[i] = ANY_ENC; + } + if(general_field[i] == '[') { + /* FNC1 can be encoded in any system */ + general_field_type[i] = ANY_ENC; + } + + } + + general_field_type[strlen(general_field)] = '\0'; + + if(latch == 1) { + /* Invalid characters in input data */ + strcpy(symbol->errtxt, "Invalid characters in input data"); + return ERROR_INVALID_DATA1; + } + + for(i = 0; i < strlen(general_field); i++) { + if((general_field_type[i] == ISOIEC) && (general_field[i + 1] == '[')) { + general_field_type[i + 1] = ISOIEC; + } + } + + for(i = 0; i < strlen(general_field); i++) { + if((general_field_type[i] == ALPHA_OR_ISO) && (general_field[i + 1] == '[')) { + general_field_type[i + 1] = ALPHA_OR_ISO; + } + } + + latch = general_rules(general_field, general_field_type); + + i = 0; + do { + switch(general_field_type[i]) { + case NUMERIC: + + if(i != 0) { + if((general_field_type[i - 1] != NUMERIC) && (general_field[i - 1] != '[')) { + concat(binary_string, "000"); /* Numeric latch */ + } + } + + if(general_field[i] != '[') { + d1 = ctoi(general_field[i]); + } else { + d1 = 10; + } + + if(general_field[i + 1] != '[') { + d2 = ctoi(general_field[i + 1]); + } else { + d2 = 10; + } + + value = (11 * d1) + d2 + 8; + + mask = 0x40; + for(j = 0; j < 7; j++) { + if((value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + + i += 2; + break; + + case ALPHA: + + if(i != 0) { + if((general_field_type[i - 1] == NUMERIC) || (general_field[i - 1] == '[')) { + concat(binary_string, "0000"); /* Alphanumeric latch */ + } + if(general_field_type[i - 1] == ISOIEC) { + concat(binary_string, "00100"); /* ISO/IEC 646 latch */ + } + } + + if((general_field[i] >= '0') && (general_field[i] <= '9')) { + + value = general_field[i] - 43; + + mask = 0x10; + for(j = 0; j < 5; j++) { + if((value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + if((general_field[i] >= 'A') && (general_field[i] <= 'Z')) { + + value = general_field[i] - 33; + + mask = 0x20; + for(j = 0; j < 6; j++) { + if((value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + if(general_field[i] == '[') concat(binary_string, "01111"); /* FNC1/Numeric latch */ + if(general_field[i] == '*') concat(binary_string, "111010"); /* asterisk */ + if(general_field[i] == ',') concat(binary_string, "111011"); /* comma */ + if(general_field[i] == '-') concat(binary_string, "111100"); /* minus or hyphen */ + if(general_field[i] == '.') concat(binary_string, "111101"); /* period or full stop */ + if(general_field[i] == '/') concat(binary_string, "111110"); /* slash or solidus */ + + i++; + break; + + case ISOIEC: + + if(i != 0) { + if((general_field_type[i - 1] == NUMERIC) || (general_field[i - 1] == '[')) { + concat(binary_string, "0000"); /* Alphanumeric latch */ + concat(binary_string, "00100"); /* ISO/IEC 646 latch */ + } + if(general_field_type[i - 1] == ALPHA) { + concat(binary_string, "00100"); /* ISO/IEC 646 latch */ + } + } + + if((general_field[i] >= '0') && (general_field[i] <= '9')) { + + value = general_field[i] - 43; + + mask = 0x10; + for(j = 0; j < 5; j++) { + if((value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + if((general_field[i] >= 'A') && (general_field[i] <= 'Z')) { + + value = general_field[i] - 1; + + mask = 0x40; + for(j = 0; j < 7; j++) { + if((value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + if((general_field[i] >= 'a') && (general_field[i] <= 'z')) { + + value = general_field[i] - 7; + + mask = 0x40; + for(j = 0; j < 7; j++) { + if((value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } + + if(general_field[i] == '[') concat(binary_string, "01111"); /* FNC1/Numeric latch */ + if(general_field[i] == '!') concat(binary_string, "11101000"); /* exclamation mark */ + if(general_field[i] == 34) concat(binary_string, "11101001"); /* quotation mark */ + if(general_field[i] == 37) concat(binary_string, "11101010"); /* percent sign */ + if(general_field[i] == '&') concat(binary_string, "11101011"); /* ampersand */ + if(general_field[i] == 39) concat(binary_string, "11101100"); /* apostrophe */ + if(general_field[i] == '(') concat(binary_string, "11101101"); /* left parenthesis */ + if(general_field[i] == ')') concat(binary_string, "11101110"); /* right parenthesis */ + if(general_field[i] == '*') concat(binary_string, "11101111"); /* asterisk */ + if(general_field[i] == '+') concat(binary_string, "11110000"); /* plus sign */ + if(general_field[i] == ',') concat(binary_string, "11110001"); /* comma */ + if(general_field[i] == '-') concat(binary_string, "11110010"); /* minus or hyphen */ + if(general_field[i] == '.') concat(binary_string, "11110011"); /* period or full stop */ + if(general_field[i] == '/') concat(binary_string, "11110100"); /* slash or solidus */ + if(general_field[i] == ':') concat(binary_string, "11110101"); /* colon */ + if(general_field[i] == ';') concat(binary_string, "11110110"); /* semicolon */ + if(general_field[i] == '<') concat(binary_string, "11110111"); /* less-than sign */ + if(general_field[i] == '=') concat(binary_string, "11111000"); /* equals sign */ + if(general_field[i] == '>') concat(binary_string, "11111001"); /* greater-than sign */ + if(general_field[i] == '?') concat(binary_string, "11111010"); /* question mark */ + if(general_field[i] == '_') concat(binary_string, "11111011"); /* underline or low line */ + if(general_field[i] == ' ') concat(binary_string, "11111100"); /* space */ + + i++; + break; + } + } while (i + latch < strlen(general_field)); + + binary_length = strlen(binary_string); + if(cc_mode == 1) { + /* CC-A 2D component - calculate remaining space */ + switch(*(cc_width)) { + case 2: + if(binary_length > 167) { return ERROR_TOO_LONG; } + if(binary_length <= 167) { target_bitsize = 167; } + if(binary_length <= 138) { target_bitsize = 138; } + if(binary_length <= 118) { target_bitsize = 118; } + if(binary_length <= 108) { target_bitsize = 108; } + if(binary_length <= 88) { target_bitsize = 88; } + if(binary_length <= 78) { target_bitsize = 78; } + if(binary_length <= 59) { target_bitsize = 59; } + break; + case 3: + if(binary_length > 167) { return ERROR_TOO_LONG; } + if(binary_length <= 167) { target_bitsize = 167; } + if(binary_length <= 138) { target_bitsize = 138; } + if(binary_length <= 118) { target_bitsize = 118; } + if(binary_length <= 98) { target_bitsize = 98; } + if(binary_length <= 78) { target_bitsize = 78; } + break; + case 4: + if(binary_length > 197) { return ERROR_TOO_LONG; } + if(binary_length <= 197) { target_bitsize = 197; } + if(binary_length <= 167) { target_bitsize = 167; } + if(binary_length <= 138) { target_bitsize = 138; } + if(binary_length <= 108) { target_bitsize = 108; } + if(binary_length <= 78) { target_bitsize = 78; } + break; + } + } + + if(cc_mode == 2) { + /* CC-B 2D component - calculated from ISO/IEC 24728 Table 1 */ + switch(*(cc_width)) { + case 2: + if(binary_length > 336) { return ERROR_TOO_LONG; } + if(binary_length <= 336) { target_bitsize = 336; } + if(binary_length <= 296) { target_bitsize = 296; } + if(binary_length <= 256) { target_bitsize = 256; } + if(binary_length <= 208) { target_bitsize = 208; } + if(binary_length <= 160) { target_bitsize = 160; } + if(binary_length <= 104) { target_bitsize = 104; } + if(binary_length <= 56) { target_bitsize = 56; } + break; + case 3: + if(binary_length > 768) { return ERROR_TOO_LONG; } + if(binary_length <= 768) { target_bitsize = 768; } + if(binary_length <= 648) { target_bitsize = 648; } + if(binary_length <= 536) { target_bitsize = 536; } + if(binary_length <= 416) { target_bitsize = 416; } + if(binary_length <= 304) { target_bitsize = 304; } + if(binary_length <= 208) { target_bitsize = 208; } + if(binary_length <= 152) { target_bitsize = 152; } + if(binary_length <= 112) { target_bitsize = 112; } + if(binary_length <= 72) { target_bitsize = 72; } + if(binary_length <= 32) { target_bitsize = 32; } + break; + case 4: + if(binary_length > 1184) { return ERROR_TOO_LONG; } + if(binary_length <= 1184) { target_bitsize = 1184; } + if(binary_length <= 1016) { target_bitsize = 1016; } + if(binary_length <= 840) { target_bitsize = 840; } + if(binary_length <= 672) { target_bitsize = 672; } + if(binary_length <= 496) { target_bitsize = 496; } + if(binary_length <= 352) { target_bitsize = 352; } + if(binary_length <= 264) { target_bitsize = 264; } + if(binary_length <= 208) { target_bitsize = 208; } + if(binary_length <= 152) { target_bitsize = 152; } + if(binary_length <= 96) { target_bitsize = 96; } + if(binary_length <= 56) { target_bitsize = 56; } + break; + } + } + + if (cc_mode == 3) { + /* CC-C 2D Component is a bit more complex! */ + int byte_length, codewords_used, ecc_level, ecc_codewords, rows; + int codewords_total, target_codewords, target_bytesize; + + byte_length = binary_length / 8; + if(binary_length % 8 != 0) { byte_length++; } + + codewords_used = (byte_length / 6) * 5; + codewords_used += byte_length % 6; + + ecc_level = 7; + if(codewords_used <= 1280) { ecc_level = 6; } + if(codewords_used <= 640) { ecc_level = 5; } + if(codewords_used <= 320) { ecc_level = 4; } + if(codewords_used <= 160) { ecc_level = 3; } + if(codewords_used <= 40) { ecc_level = 2; } + *(ecc) = ecc_level; + ecc_codewords = 1; + for(i = 1; i <= (ecc_level + 1); i++){ + ecc_codewords *= 2; + } + + codewords_used += ecc_codewords; + codewords_used += 3; + + if(codewords_used > symbol->option_3) { + return ERROR_TOO_LONG; + } + /* *(cc_width) = 0.5 + sqrt((codewords_used) / 3); */ + *(cc_width) = (lin_width - 62) / 17; + if((codewords_used / *(cc_width)) > 90) { + /* stop the symbol from becoming too high */ + *(cc_width) = *(cc_width) + 1; + } + + rows = codewords_used / *(cc_width); + if(codewords_used % *(cc_width) != 0) { + rows++; + } + + codewords_total = *(cc_width) * rows; + + target_codewords = codewords_total - ecc_codewords; + target_codewords -= 3; + + target_bytesize = 6 * (target_codewords / 5); + target_bytesize += target_codewords % 5; + + target_bitsize = 8 * target_bytesize; + } + + remainder = binary_length - target_bitsize; + + if(latch == 1) { + i = 0; + /* There is still one more numeric digit to encode */ + + if((remainder >= 4) && (remainder <= 6)) { + d1 = ctoi(general_field[i]); + d1++; + + mask = 0x08; + for(j = 0; j < 4; j++) { + if((value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + } else { + d1 = ctoi(general_field[i]); + d2 = 10; + + value = (11 * d1) + d2 + 8; + + mask = 0x40; + for(j = 0; j < 7; j++) { + if((value & mask) == 0x00) { + concat(binary_string, "0"); + } else { + concat(binary_string, "1"); + } + mask = mask >> 1; + } + /* This may push the symbol up to the next size */ + } + } + + if(strlen(binary_string) > 11805) { /* (2361 * 5) */ + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* all the code below is repeated from above - it needs to be calculated again because the + size of the symbol may have changed when adding data in the above sequence */ + + binary_length = strlen(binary_string); + if(cc_mode == 1) { + /* CC-A 2D component - calculate padding required */ + switch(*(cc_width)) { + case 2: + if(binary_length > 167) { return ERROR_TOO_LONG; } + if(binary_length <= 167) { target_bitsize = 167; } + if(binary_length <= 138) { target_bitsize = 138; } + if(binary_length <= 118) { target_bitsize = 118; } + if(binary_length <= 108) { target_bitsize = 108; } + if(binary_length <= 88) { target_bitsize = 88; } + if(binary_length <= 78) { target_bitsize = 78; } + if(binary_length <= 59) { target_bitsize = 59; } + break; + case 3: + if(binary_length > 167) { return ERROR_TOO_LONG; } + if(binary_length <= 167) { target_bitsize = 167; } + if(binary_length <= 138) { target_bitsize = 138; } + if(binary_length <= 118) { target_bitsize = 118; } + if(binary_length <= 98) { target_bitsize = 98; } + if(binary_length <= 78) { target_bitsize = 78; } + break; + case 4: + if(binary_length > 197) { return ERROR_TOO_LONG; } + if(binary_length <= 197) { target_bitsize = 197; } + if(binary_length <= 167) { target_bitsize = 167; } + if(binary_length <= 138) { target_bitsize = 138; } + if(binary_length <= 108) { target_bitsize = 108; } + if(binary_length <= 78) { target_bitsize = 78; } + break; + } + } + + if(cc_mode == 2) { + /* CC-B 2D component */ + switch(*(cc_width)) { + case 2: + if(binary_length > 336) { return ERROR_TOO_LONG; } + if(binary_length <= 336) { target_bitsize = 336; } + if(binary_length <= 296) { target_bitsize = 296; } + if(binary_length <= 256) { target_bitsize = 256; } + if(binary_length <= 208) { target_bitsize = 208; } + if(binary_length <= 160) { target_bitsize = 160; } + if(binary_length <= 104) { target_bitsize = 104; } + if(binary_length <= 56) { target_bitsize = 56; } + break; + case 3: + if(binary_length > 768) { return ERROR_TOO_LONG; } + if(binary_length <= 768) { target_bitsize = 768; } + if(binary_length <= 648) { target_bitsize = 648; } + if(binary_length <= 536) { target_bitsize = 536; } + if(binary_length <= 416) { target_bitsize = 416; } + if(binary_length <= 304) { target_bitsize = 304; } + if(binary_length <= 208) { target_bitsize = 208; } + if(binary_length <= 152) { target_bitsize = 152; } + if(binary_length <= 112) { target_bitsize = 112; } + if(binary_length <= 72) { target_bitsize = 72; } + if(binary_length <= 32) { target_bitsize = 32; } + break; + case 4: + if(binary_length > 1184) { return ERROR_TOO_LONG; } + if(binary_length <= 1184) { target_bitsize = 1184; } + if(binary_length <= 1016) { target_bitsize = 1016; } + if(binary_length <= 840) { target_bitsize = 840; } + if(binary_length <= 672) { target_bitsize = 672; } + if(binary_length <= 496) { target_bitsize = 496; } + if(binary_length <= 352) { target_bitsize = 352; } + if(binary_length <= 264) { target_bitsize = 264; } + if(binary_length <= 208) { target_bitsize = 208; } + if(binary_length <= 152) { target_bitsize = 152; } + if(binary_length <= 96) { target_bitsize = 96; } + if(binary_length <= 56) { target_bitsize = 56; } + break; + } + } + + if (cc_mode == 3) { + /* CC-C 2D Component is a bit more complex! */ + int byte_length, codewords_used, ecc_level, ecc_codewords, rows; + int codewords_total, target_codewords, target_bytesize; + + byte_length = binary_length / 8; + if(binary_length % 8 != 0) { byte_length++; } + + codewords_used = (byte_length / 6) * 5; + codewords_used += byte_length % 6; + + ecc_level = 7; + if(codewords_used <= 1280) { ecc_level = 6; } + if(codewords_used <= 640) { ecc_level = 5; } + if(codewords_used <= 320) { ecc_level = 4; } + if(codewords_used <= 160) { ecc_level = 3; } + if(codewords_used <= 40) { ecc_level = 2; } + *(ecc) = ecc_level; + ecc_codewords = 1; + for(i = 1; i <= (ecc_level + 1); i++){ + ecc_codewords *= 2; + } + + codewords_used += ecc_codewords; + codewords_used += 3; + + if(codewords_used > symbol->option_3) { + return ERROR_TOO_LONG; + } + /* *(cc_width) = 0.5 + sqrt((codewords_used) / 3); */ + *(cc_width) = (lin_width - 62) / 17; + if((codewords_used / *(cc_width)) > 90) { + /* stop the symbol from becoming too high */ + *(cc_width) = *(cc_width) + 1; + } + + rows = codewords_used / *(cc_width); + if(codewords_used % *(cc_width) != 0) { + rows++; + } + + codewords_total = *(cc_width) * rows; + + target_codewords = codewords_total - ecc_codewords; + target_codewords -= 3; + + target_bytesize = 6 * (target_codewords / 5); + target_bytesize += target_codewords % 5; + + target_bitsize = 8 * target_bytesize; + } + + if(binary_length < target_bitsize) { + /* Now add padding to binary string */ + if (alpha_pad == 1) { + concat(binary_string, "11111"); + alpha_pad = 0; + /* Extra FNC1 character required after Alpha encodation (section 5.2.3) */ + } + + if ((strlen(general_field) != 0) && (general_field_type[strlen(general_field) - 1] == NUMERIC)) { + concat(binary_string, "0000"); + } + + while (strlen(binary_string) < target_bitsize) { + concat(binary_string, "00100"); + } + + if(strlen(binary_string) > target_bitsize) { + binary_string[target_bitsize] = '\0'; + } + } + + return 0; +} + +void add_leading_zeroes(struct zint_symbol *symbol) +{ + int with_addon = 0; + int first_len = 0, second_len = 0, zfirst_len = 0, zsecond_len = 0, i, h, n = 0; + + h = strlen(symbol->primary); + for(i = 0; i < h; i++) { + if(symbol->primary[i] == '+') { + with_addon = 1; + } else { + if(with_addon == 0) { + first_len++; + } else { + second_len++; + } + } + } + + /* Calculate target lengths */ + if(first_len <= 12) { zfirst_len = 12; } + if(first_len <= 7) { zfirst_len = 7; } + if(second_len <= 5) { zsecond_len = 5; } + if(second_len <= 2) { zsecond_len = 2; } + if(second_len == 0) { zsecond_len = 0; } + + /* Add leading zeroes */ + n = zfirst_len - first_len; + if (n > 0) + { + memmove(symbol->primary + n, symbol->primary, h); + memset(symbol->primary, '0', n); + } + n += first_len + 1; + if (zsecond_len) + { + memmove(symbol->primary + n + zsecond_len, symbol->primary + n, second_len); + memset(symbol->primary + n , '0', zsecond_len); + n += zsecond_len + second_len; + } + symbol->primary[n] = '\0'; +} + +int composite(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int error_number, cc_mode, cc_width, ecc_level; + int j, i, k, separator_row; + unsigned int rs = length + 1; + unsigned int bs = 20 * rs; + unsigned int pri_len; +#ifndef _MSC_VER + char reduced[rs]; + char binary_string[bs]; +#else + char* reduced = (char*)_alloca(rs); + char* binary_string = (char*)_alloca(bs); +#endif + struct zint_symbol *linear; + int top_shift, bottom_shift; + + error_number = 0; + separator_row = 0; + pri_len = strlen(symbol->primary); + if(pri_len == 0) { + strcpy(symbol->errtxt, "No primary (linear) message in 2D composite"); + return ERROR_INVALID_OPTION; + } + + if(length > 2990) { + strcpy(symbol->errtxt, "2D component input data too long"); + return ERROR_TOO_LONG; + } + + linear = ZBarcode_Create(); /* Symbol contains the 2D component and Linear contains the rest */ + + error_number = gs1_verify(symbol, source, length, reduced); + if(error_number != 0) { return error_number; } + + cc_mode = symbol->option_1; + + if((cc_mode == 3) && (symbol->symbology != BARCODE_EAN128_CC)) { + /* CC-C can only be used with a GS1-128 linear part */ + strcpy(symbol->errtxt, "Invalid mode (CC-C only valid with GS1-128 linear component)"); + return ERROR_INVALID_OPTION; + } + + linear->symbology = symbol->symbology; + + if(linear->symbology != BARCODE_EAN128_CC) { + /* Set the "component linkage" flag in the linear component */ + linear->option_1 = 2; + } else { + /* GS1-128 needs to know which type of 2D component is used */ + linear->option_1 = cc_mode; + } + + switch(symbol->symbology) { + case BARCODE_EANX_CC: error_number = eanx(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_EAN128_CC: error_number = ean_128(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_RSS14_CC: error_number = rss14(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_RSS_LTD_CC: error_number = rsslimited(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_RSS_EXP_CC: error_number = rssexpanded(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_UPCA_CC: error_number = eanx(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_UPCE_CC: error_number = eanx(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_RSS14STACK_CC: error_number = rss14(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_RSS14_OMNI_CC: error_number = rss14(linear, (unsigned char *)symbol->primary, pri_len); break; + case BARCODE_RSS_EXPSTACK_CC: error_number = rssexpanded(linear, (unsigned char *)symbol->primary, pri_len); break; + } + + if(error_number != 0) { + strcpy(symbol->errtxt, linear->errtxt); + concat(symbol->errtxt, " in linear component"); + return error_number; + } + + switch(symbol->symbology) { + /* Determine width of 2D component according to ISO/IEC 24723 Table 1 */ + case BARCODE_EANX_CC: + switch(pri_len) { + case 7: /* EAN-8 */ + case 10: /* EAN-8 + 2 */ + case 13: /* EAN-8 + 5 */ + cc_width = 3; + break; + case 12: /* EAN-13 */ + case 15: /* EAN-13 + 2 */ + case 18: /* EAN-13 + 5 */ + cc_width = 4; + break; + } + break; + case BARCODE_EAN128_CC: cc_width = 4; break; + case BARCODE_RSS14_CC: cc_width = 4; break; + case BARCODE_RSS_LTD_CC: cc_width = 3; break; + case BARCODE_RSS_EXP_CC: cc_width = 4; break; + case BARCODE_UPCA_CC: cc_width = 4; break; + case BARCODE_UPCE_CC: cc_width = 2; break; + case BARCODE_RSS14STACK_CC: cc_width = 2; break; + case BARCODE_RSS14_OMNI_CC: cc_width = 2; break; + case BARCODE_RSS_EXPSTACK_CC: cc_width = 4; break; + } + + memset(binary_string, 0, bs); + + if(cc_mode < 1 || cc_mode > 3) { cc_mode = 1; } + + if(cc_mode == 1) { + i = cc_binary_string(symbol, reduced, binary_string, cc_mode, &cc_width, &ecc_level, linear->width); + if (i == ERROR_TOO_LONG) { + cc_mode = 2; + } + } + + if(cc_mode == 2) { /* If the data didn't fit into CC-A it is recalculated for CC-B */ + i = cc_binary_string(symbol, reduced, binary_string, cc_mode, &cc_width, &ecc_level, linear->width); + if (i == ERROR_TOO_LONG) { + if(symbol->symbology != BARCODE_EAN128_CC) { + return ERROR_TOO_LONG; + } else { + cc_mode = 3; + } + } + } + + if(cc_mode == 3) { /* If the data didn't fit in CC-B (and linear part is GS1-128) it is recalculated + for CC-C */ + i = cc_binary_string(symbol, reduced, binary_string, cc_mode, &cc_width, &ecc_level, linear->width); + if (i == ERROR_TOO_LONG) { + return ERROR_TOO_LONG; + } + } + + switch(cc_mode) { /* Note that ecc_level is only relevant to CC-C */ + case 1: error_number = cc_a(symbol, binary_string, cc_width); break; + case 2: error_number = cc_b(symbol, binary_string, cc_width); break; + case 3: error_number = cc_c(symbol, binary_string, cc_width, ecc_level); break; + } + + if(error_number != 0) { + return ERROR_ENCODING_PROBLEM; + } + + /* Merge the linear component with the 2D component */ + + top_shift = 0; + bottom_shift = 0; + + switch(symbol->symbology) { + /* Determine horizontal alignment (according to section 12.3) */ + case BARCODE_EANX_CC: + switch(pri_len) { + case 7: /* EAN-8 */ + case 10: /* EAN-8 + 2 */ + case 13: /* EAN-8 + 5 */ + bottom_shift = 13; + break; + case 12: /* EAN-13 */ + case 15: /* EAN-13 + 2 */ + case 18: /* EAN-13 + 5 */ + bottom_shift = 2; + break; + } + break; + case BARCODE_EAN128_CC: if(cc_mode == 3) { + bottom_shift = 7; + } + break; + case BARCODE_RSS14_CC: bottom_shift = 4; break; + case BARCODE_RSS_LTD_CC: bottom_shift = 9; break; + case BARCODE_RSS_EXP_CC: k = 1; + while((!(module_is_set(linear, 1, k - 1))) && module_is_set(linear, 1, k)) { + /* while((linear->encoded_data[1][k - 1] != '1') && (linear->encoded_data[1][k] != '0')) { */ + k++; + } + top_shift = k; + break; + case BARCODE_UPCA_CC: bottom_shift = 2; break; + case BARCODE_UPCE_CC: bottom_shift = 2; break; + case BARCODE_RSS14STACK_CC: top_shift = 1; break; + case BARCODE_RSS14_OMNI_CC: top_shift = 1; break; + case BARCODE_RSS_EXPSTACK_CC: k = 1; + while((!(module_is_set(linear, 1, k - 1))) && module_is_set(linear, 1, k)) { + /* while((linear->encoded_data[1][k - 1] != '1') && (linear->encoded_data[1][k] != '0')) { */ + k++; + } + top_shift = k; + break; + } + + if(top_shift != 0) { + /* Move the 2d component of the symbol horizontally */ + for(i = 0; i <= symbol->rows; i++) { + for(j = (symbol->width + top_shift); j >= top_shift; j--) { + if(module_is_set(symbol, i, j - top_shift)) { set_module(symbol, i, j); } else { unset_module(symbol, i, j); } + } + for(j = 0; j < top_shift; j++) { + unset_module(symbol, i, j); + } + } + } + + /* Merge linear and 2D components into one structure */ + for(i = 0; i <= linear->rows; i++) { + symbol->row_height[symbol->rows + i] = linear->row_height[i]; + for(j = 0; j <= linear->width; j++) { + if(module_is_set(linear, i, j)) { set_module(symbol, i + symbol->rows, j + bottom_shift); } else { unset_module(symbol, i + symbol->rows, j + bottom_shift); } + } + } + if((linear->width + bottom_shift) > symbol->width) { + symbol->width = linear->width + bottom_shift; + } + if((symbol->width + top_shift) > symbol->width) { + symbol->width += top_shift; + } + symbol->rows += linear->rows; + ustrcpy(symbol->text, (unsigned char *)linear->text); + + ZBarcode_Delete(linear); + + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/composite.h b/3rdparty/zint-2.4.4/backend/composite.h new file mode 100644 index 0000000..30ace7f --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/composite.h @@ -0,0 +1,62 @@ +/* composite.c - Tables for UCC.EAN Composite Symbols */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define NUMERIC 110 +#define ALPHA 97 +#define ISOIEC 105 +#define INVALID_CHAR 100 +#define ANY_ENC 120 +#define ALPHA_OR_ISO 121 + +/* CC-A component coefficients from ISO/IEC 24728:2006 Annex F */ +static int ccaCoeffs[30] = { + /* k = 4 */ + 522, 568, 723, 809, + + /* k = 5 */ + 427, 919, 460, 155, 566, + + /* k = 6 */ + 861, 285, 19, 803, 17, 766, + + /* k = 7 */ + 76, 925, 537, 597, 784, 691, 437, + + /* k = 8 */ + 237, 308, 436, 284, 646, 653, 428, 379 +}; + +/* rows, error codewords, k-offset of valid CC-A sizes from ISO/IEC 24723:2006 Table 9 */ +static int ccaVariants[51] = { + 5, 6, 7, 8, 9, 10, 12, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7, + 4, 4, 5, 5, 6, 6, 7, 4, 5, 6, 7, 7, 4, 5, 6, 7, 8, + 0, 0, 4, 4, 9, 9, 15, 0, 4, 9, 15, 15, 0, 4, 9, 15, 22 +}; + +/* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24723:2006 tables 10 and 11 */ +static int aRAPTable[68] = { + 39, 1, 32, 8, 14, 43, 20, 11, 1, 5, 15, 21, 40, 43, 46, 34, 29, + 0, 0, 0, 0, 0, 0, 0, 43, 33, 37, 47, 1, 20, 23, 26, 14, 9, + 19, 33, 12, 40, 46, 23, 52, 23, 13, 17, 27, 33, 52, 3, 6, 46, 41, + 6, 0, 3, 3, 3, 0, 3, 3, 0, 3, 6, 6, 0, 0, 0, 0, 3 +}; + +/* Row Address Patterns are as defined in pdf417.h */ diff --git a/3rdparty/zint-2.4.4/backend/dllversion.c b/3rdparty/zint-2.4.4/backend/dllversion.c new file mode 100644 index 0000000..0500863 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/dllversion.c @@ -0,0 +1,31 @@ +/* Sed: http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/versions.asp */ +#if defined (_WIN32) && (defined(_USRDLL) || defined(DLL_EXPORT) || defined(PIC)) +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +__declspec(dllexport) HRESULT DllGetVersion (DLLVERSIONINFO2* pdvi); + +#ifdef __cplusplus +} +#endif + +HRESULT DllGetVersion (DLLVERSIONINFO2* pdvi) +{ + if (!pdvi || (sizeof(*pdvi) != pdvi->info1.cbSize)) + return (E_INVALIDARG); + + pdvi->info1.dwMajorVersion = 2; + pdvi->info1.dwMinorVersion = 2; + pdvi->info1.dwBuildNumber = 1; + pdvi->info1.dwPlatformID = DLLVER_PLATFORM_WINDOWS; + if (sizeof(DLLVERSIONINFO2) == pdvi->info1.cbSize) + pdvi->ullVersion = MAKEDLLVERULL(2, 2, 1, 0); + + return S_OK; +} +#endif /* _WIN32 */ diff --git a/3rdparty/zint-2.4.4/backend/dmatrix.c b/3rdparty/zint-2.4.4/backend/dmatrix.c new file mode 100644 index 0000000..f98e737 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/dmatrix.c @@ -0,0 +1,910 @@ +/* dmatrix.c Handles Data Matrix ECC 200 symbols */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + developed from and including some functions from: + IEC16022 bar code generation + Adrian Kennard, Andrews & Arnold Ltd + with help from Cliff Hones on the RS coding + + (c) 2004 Adrian Kennard, Andrews & Arnold Ltd + (c) 2006 Stefan Schmidt + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "reedsol.h" +#include "common.h" +#include "dmatrix.h" + +// Annex M placement alorithm low level +static void ecc200placementbit(int *array, int NR, int NC, int r, int c, int p, char b) +{ + if (r < 0) { + r += NR; + c += 4 - ((NR + 4) % 8); + } + if (c < 0) { + c += NC; + r += 4 - ((NC + 4) % 8); + } + array[r * NC + c] = (p << 3) + b; +} + +static void ecc200placementblock(int *array, int NR, int NC, int r, + int c, int p) +{ + ecc200placementbit(array, NR, NC, r - 2, c - 2, p, 7); + ecc200placementbit(array, NR, NC, r - 2, c - 1, p, 6); + ecc200placementbit(array, NR, NC, r - 1, c - 2, p, 5); + ecc200placementbit(array, NR, NC, r - 1, c - 1, p, 4); + ecc200placementbit(array, NR, NC, r - 1, c - 0, p, 3); + ecc200placementbit(array, NR, NC, r - 0, c - 2, p, 2); + ecc200placementbit(array, NR, NC, r - 0, c - 1, p, 1); + ecc200placementbit(array, NR, NC, r - 0, c - 0, p, 0); +} + +static void ecc200placementcornerA(int *array, int NR, int NC, int p) +{ + ecc200placementbit(array, NR, NC, NR - 1, 0, p, 7); + ecc200placementbit(array, NR, NC, NR - 1, 1, p, 6); + ecc200placementbit(array, NR, NC, NR - 1, 2, p, 5); + ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4); + ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3); + ecc200placementbit(array, NR, NC, 1, NC - 1, p, 2); + ecc200placementbit(array, NR, NC, 2, NC - 1, p, 1); + ecc200placementbit(array, NR, NC, 3, NC - 1, p, 0); +} + +static void ecc200placementcornerB(int *array, int NR, int NC, int p) +{ + ecc200placementbit(array, NR, NC, NR - 3, 0, p, 7); + ecc200placementbit(array, NR, NC, NR - 2, 0, p, 6); + ecc200placementbit(array, NR, NC, NR - 1, 0, p, 5); + ecc200placementbit(array, NR, NC, 0, NC - 4, p, 4); + ecc200placementbit(array, NR, NC, 0, NC - 3, p, 3); + ecc200placementbit(array, NR, NC, 0, NC - 2, p, 2); + ecc200placementbit(array, NR, NC, 0, NC - 1, p, 1); + ecc200placementbit(array, NR, NC, 1, NC - 1, p, 0); +} + +static void ecc200placementcornerC(int *array, int NR, int NC, int p) +{ + ecc200placementbit(array, NR, NC, NR - 3, 0, p, 7); + ecc200placementbit(array, NR, NC, NR - 2, 0, p, 6); + ecc200placementbit(array, NR, NC, NR - 1, 0, p, 5); + ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4); + ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3); + ecc200placementbit(array, NR, NC, 1, NC - 1, p, 2); + ecc200placementbit(array, NR, NC, 2, NC - 1, p, 1); + ecc200placementbit(array, NR, NC, 3, NC - 1, p, 0); +} + +static void ecc200placementcornerD(int *array, int NR, int NC, int p) +{ + ecc200placementbit(array, NR, NC, NR - 1, 0, p, 7); + ecc200placementbit(array, NR, NC, NR - 1, NC - 1, p, 6); + ecc200placementbit(array, NR, NC, 0, NC - 3, p, 5); + ecc200placementbit(array, NR, NC, 0, NC - 2, p, 4); + ecc200placementbit(array, NR, NC, 0, NC - 1, p, 3); + ecc200placementbit(array, NR, NC, 1, NC - 3, p, 2); + ecc200placementbit(array, NR, NC, 1, NC - 2, p, 1); + ecc200placementbit(array, NR, NC, 1, NC - 1, p, 0); +} + +// Annex M placement alorithm main function +static void ecc200placement(int *array, int NR, int NC) +{ + int r, c, p; + // invalidate + for (r = 0; r < NR; r++) + for (c = 0; c < NC; c++) + array[r * NC + c] = 0; + // start + p = 1; + r = 4; + c = 0; + do { + // check corner + if (r == NR && !c) + ecc200placementcornerA(array, NR, NC, p++); + if (r == NR - 2 && !c && NC % 4) + ecc200placementcornerB(array, NR, NC, p++); + if (r == NR - 2 && !c && (NC % 8) == 4) + ecc200placementcornerC(array, NR, NC, p++); + if (r == NR + 4 && c == 2 && !(NC % 8)) + ecc200placementcornerD(array, NR, NC, p++); + // up/right + do { + if (r < NR && c >= 0 && !array[r * NC + c]) + ecc200placementblock(array, NR, NC, r, c, p++); + r -= 2; + c += 2; + } + while (r >= 0 && c < NC); + r++; + c += 3; + // down/left + do { + if (r >= 0 && c < NC && !array[r * NC + c]) + ecc200placementblock(array, NR, NC, r, c, p++); + r += 2; + c -= 2; + } + while (r < NR && c >= 0); + r += 3; + c++; + } + while (r < NR || c < NC); + // unfilled corner + if (!array[NR * NC - 1]) + array[NR * NC - 1] = array[NR * NC - NC - 2] = 1; +} + +// calculate and append ecc code, and if necessary interleave +static void ecc200(unsigned char *binary, int bytes, int datablock, int rsblock, int skew) +{ + int blocks = (bytes + 2) / datablock, b; + int n, p; + rs_init_gf(0x12d); + rs_init_code(rsblock, 1); + for (b = 0; b < blocks; b++) { + unsigned char buf[256], ecc[256]; + p = 0; + for (n = b; n < bytes; n += blocks) + buf[p++] = binary[n]; + rs_encode(p, buf, ecc); + p = rsblock - 1; // comes back reversed + for (n = b; n < rsblock * blocks; n += blocks) { + if (skew) { + /* Rotate ecc data to make 144x144 size symbols acceptable */ + /* See http://groups.google.com/group/postscriptbarcode/msg/5ae8fda7757477da */ + if(b < 8) { + binary[bytes + n + 2] = ecc[p--]; + } else { + binary[bytes + n - 8] = ecc[p--]; + } + } else { + binary[bytes + n] = ecc[p--]; + } + } + } + rs_free(); +} + +int isx12(unsigned char source) +{ + if(source == 13) { return 1; } + if(source == 42) { return 1; } + if(source == 62) { return 1; } + if(source == 32) { return 1; } + if((source >= '0') && (source <= '9')) { return 1; } + if((source >= 'A') && (source <= 'Z')) { return 1; } + + return 0; +} + +void dminsert(char binary_string[], int posn, char newbit) +{ /* Insert a character into the middle of a string at position posn */ + int i, end; + + end = strlen(binary_string); + for(i = end; i > posn; i--) { + binary_string[i] = binary_string[i - 1]; + } + binary_string[posn] = newbit; +} + +void insert_value(unsigned char binary_stream[], int posn, int streamlen, char newbit) +{ + int i; + + for(i = streamlen; i > posn; i--) { + binary_stream[i] = binary_stream[i - 1]; + } + binary_stream[posn] = newbit; +} + +int look_ahead_test(unsigned char source[], int sourcelen, int position, int current_mode, int gs1) +{ + /* A custom version of the 'look ahead test' from Annex P */ + /* This version is deliberately very reluctant to end a data stream with EDIFACT encoding */ + + float ascii_count, c40_count, text_count, x12_count, edf_count, b256_count, best_count; + int sp, done, best_scheme; + char reduced_char; + + /* step (j) */ + if(current_mode == DM_ASCII) { + ascii_count = 0.0; + c40_count = 1.0; + text_count = 1.0; + x12_count = 1.0; + edf_count = 1.0; + b256_count = 1.25; + } else { + ascii_count = 1.0; + c40_count = 2.0; + text_count = 2.0; + x12_count = 2.0; + edf_count = 2.0; + b256_count = 2.25; + } + + switch(current_mode) { + case DM_C40: c40_count = 0.0; break; + case DM_TEXT: text_count = 0.0; break; + case DM_X12: x12_count = 0.0; break; + case DM_EDIFACT: edf_count = 0.0; break; + case DM_BASE256: b256_count = 0.0; break; + } + + for(sp = position; (sp < sourcelen) && (sp <= (position + 8)); sp++) { + + if(source[sp] <= 127) { reduced_char = source[sp]; } else { reduced_char = source[sp] - 127; } + + if((source[sp] >= '0') && (source[sp] <= '9')) { ascii_count += 0.5; } else { ascii_count += 1.0; } + if(source[sp] > 127) { ascii_count += 1.0; } + + done = 0; + if(reduced_char == ' ') { c40_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= '0') && (reduced_char <= '9')) { c40_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= 'A') && (reduced_char <= 'Z')) { c40_count += (2.0 / 3.0); done = 1; } + if(source[sp] > 127) { c40_count += (4.0 / 3.0); } + if(done == 0) { c40_count += (4.0 / 3.0); } + + done = 0; + if(reduced_char == ' ') { text_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= '0') && (reduced_char <= '9')) { text_count += (2.0 / 3.0); done = 1; } + if((reduced_char >= 'a') && (reduced_char <= 'z')) { text_count += (2.0 / 3.0); done = 1; } + if(source[sp] > 127) { text_count += (4.0 / 3.0); } + if(done == 0) { text_count += (4.0 / 3.0); } + + if(isx12(source[sp])) { x12_count += (2.0 / 3.0); } else { x12_count += 4.0; } + + /* step (p) */ + done = 0; + if((source[sp] >= ' ') && (source[sp] <= '^')) { edf_count += (3.0 / 4.0); } else { edf_count += 6.0; } + if(gs1 && (source[sp] == '[')) { edf_count += 6.0; } + if(sp >= (sourcelen - 5)) { edf_count += 6.0; } /* MMmmm fudge! */ + + /* step (q) */ + if(gs1 && (source[sp] == '[')) { b256_count += 4.0; } else { b256_count += 1.0; } + + /* printf("%c lat a%.2f c%.2f t%.2f x%.2f e%.2f b%.2f\n", source[sp], ascii_count, c40_count, text_count, x12_count, edf_count, b256_count); */ + + } + + best_count = ascii_count; + best_scheme = DM_ASCII; + + if(b256_count <= best_count) { + best_count = b256_count; + best_scheme = DM_BASE256; + } + + if(edf_count <= best_count) { + best_count = edf_count; + best_scheme = DM_EDIFACT; + } + + if(text_count <= best_count) { + best_count = text_count; + best_scheme = DM_TEXT; + } + + if(x12_count <= best_count) { + best_count = x12_count; + best_scheme = DM_X12; + } + + if(c40_count <= best_count) { + best_count = c40_count; + best_scheme = DM_C40; + } + + return best_scheme; +} + +int dm200encode(struct zint_symbol *symbol, unsigned char source[], unsigned char target[], int *last_mode, int length) +{ + /* Encodes data using ASCII, C40, Text, X12, EDIFACT or Base 256 modes as appropriate */ + /* Supports encoding FNC1 in supporting systems */ + + int sp, tp, i, gs1; + int current_mode, next_mode; + int inputlen = length; + int c40_buffer[6], c40_p; + int text_buffer[6], text_p; + int x12_buffer[6], x12_p; + int edifact_buffer[8], edifact_p; + int debug = 0; +#ifndef _MSC_VER + char binary[2 * inputlen]; +#else + char* binary = (char*)_alloca(2 * inputlen); +#endif + + sp = 0; + tp = 0; + memset(c40_buffer, 0, 6); + c40_p = 0; + memset(text_buffer, 0, 6); + text_p = 0; + memset(x12_buffer, 0, 6); + x12_p = 0; + memset(edifact_buffer, 0, 8); + edifact_p = 0; + strcpy(binary, ""); + + /* step (a) */ + current_mode = DM_ASCII; + next_mode = DM_ASCII; + + if(symbol->input_mode == GS1_MODE) { gs1 = 1; } else { gs1 = 0; } + + if(gs1) { + target[tp] = 232; tp++; + concat(binary, " "); + if(debug) printf("FN1 "); + } /* FNC1 */ + + if(symbol->output_options & READER_INIT) { + if(gs1) { + strcpy(symbol->errtxt, "Cannot encode in GS1 mode and Reader Initialisation at the same time"); + return ERROR_INVALID_OPTION; + } else { + target[tp] = 234; tp++; /* Reader Programming */ + concat(binary, " "); + if(debug) printf("RP "); + } + } + + while (sp < inputlen) { + + current_mode = next_mode; + + /* step (b) - ASCII encodation */ + if(current_mode == DM_ASCII) { + next_mode = DM_ASCII; + + if(istwodigits(source, sp) && ((sp + 1) != inputlen)) { + target[tp] = (10 * ctoi(source[sp])) + ctoi(source[sp + 1]) + 130; + if(debug) printf("N%d ", target[tp] - 130); + tp++; concat(binary, " "); + sp += 2; + } else { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + + if(next_mode != DM_ASCII) { + switch(next_mode) { + case DM_C40: target[tp] = 230; tp++; concat(binary, " "); + if(debug) printf("C40 "); break; + case DM_TEXT: target[tp] = 239; tp++; concat(binary, " "); + if(debug) printf("TEX "); break; + case DM_X12: target[tp] = 238; tp++; concat(binary, " "); + if(debug) printf("X12 "); break; + case DM_EDIFACT: target[tp] = 240; tp++; concat(binary, " "); + if(debug) printf("EDI "); break; + case DM_BASE256: target[tp] = 231; tp++; concat(binary, " "); + if(debug) printf("BAS "); break; + } + } else { + if(source[sp] > 127) { + target[tp] = 235; /* FNC4 */ + if(debug) printf("FN4 "); + tp++; + target[tp] = (source[sp] - 128) + 1; + if(debug) printf("A%02X ", target[tp] - 1); + tp++; concat(binary, " "); + } else { + if(gs1 && (source[sp] == '[')) { + target[tp] = 232; /* FNC1 */ + if(debug) printf("FN1 "); + } else { + target[tp] = source[sp] + 1; + if(debug) printf("A%02X ", target[tp] - 1); + } + tp++; + concat(binary, " "); + } + sp++; + } + } + + } + + /* step (c) C40 encodation */ + if(current_mode == DM_C40) { + int shift_set, value; + + next_mode = DM_C40; + if(c40_p == 0) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + } + + if(next_mode != DM_C40) { + target[tp] = 254; tp++; concat(binary, " ");/* Unlatch */ + next_mode = DM_ASCII; + if (debug) printf("ASC "); + } else { + if(source[sp] > 127) { + c40_buffer[c40_p] = 1; c40_p++; + c40_buffer[c40_p] = 30; c40_p++; /* Upper Shift */ + shift_set = c40_shift[source[sp] - 128]; + value = c40_value[source[sp] - 128]; + } else { + shift_set = c40_shift[source[sp]]; + value = c40_value[source[sp]]; + } + + if(gs1 && (source[sp] == '[')) { + shift_set = 2; + value = 27; /* FNC1 */ + } + + if(shift_set != 0) { + c40_buffer[c40_p] = shift_set - 1; c40_p++; + } + c40_buffer[c40_p] = value; c40_p++; + + if(c40_p >= 3) { + int iv; + + iv = (1600 * c40_buffer[0]) + (40 * c40_buffer[1]) + (c40_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + concat(binary, " "); + if (debug) printf("[%d %d %d] ", c40_buffer[0], c40_buffer[1], c40_buffer[2]); + + c40_buffer[0] = c40_buffer[3]; + c40_buffer[1] = c40_buffer[4]; + c40_buffer[2] = c40_buffer[5]; + c40_buffer[3] = 0; + c40_buffer[4] = 0; + c40_buffer[5] = 0; + c40_p -= 3; + } + sp++; + } + } + + /* step (d) Text encodation */ + if(current_mode == DM_TEXT) { + int shift_set, value; + + next_mode = DM_TEXT; + if(text_p == 0) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + } + + if(next_mode != DM_TEXT) { + target[tp] = 254; tp++; concat(binary, " ");/* Unlatch */ + next_mode = DM_ASCII; + if (debug) printf("ASC "); + } else { + if(source[sp] > 127) { + text_buffer[text_p] = 1; text_p++; + text_buffer[text_p] = 30; text_p++; /* Upper Shift */ + shift_set = text_shift[source[sp] - 128]; + value = text_value[source[sp] - 128]; + } else { + shift_set = text_shift[source[sp]]; + value = text_value[source[sp]]; + } + + if(gs1 && (source[sp] == '[')) { + shift_set = 2; + value = 27; /* FNC1 */ + } + + if(shift_set != 0) { + text_buffer[text_p] = shift_set - 1; text_p++; + } + text_buffer[text_p] = value; text_p++; + + if(text_p >= 3) { + int iv; + + iv = (1600 * text_buffer[0]) + (40 * text_buffer[1]) + (text_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + concat(binary, " "); + if (debug) printf("[%d %d %d] ", text_buffer[0], text_buffer[1], text_buffer[2]); + + text_buffer[0] = text_buffer[3]; + text_buffer[1] = text_buffer[4]; + text_buffer[2] = text_buffer[5]; + text_buffer[3] = 0; + text_buffer[4] = 0; + text_buffer[5] = 0; + text_p -= 3; + } + sp++; + } + } + + /* step (e) X12 encodation */ + if(current_mode == DM_X12) { + int value = 0; + + next_mode = DM_X12; + if(text_p == 0) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + } + + if(next_mode != DM_X12) { + target[tp] = 254; tp++; concat(binary, " ");/* Unlatch */ + next_mode = DM_ASCII; + if (debug) printf("ASC "); + } else { + if(source[sp] == 13) { value = 0; } + if(source[sp] == '*') { value = 1; } + if(source[sp] == '>') { value = 2; } + if(source[sp] == ' ') { value = 3; } + if((source[sp] >= '0') && (source[sp] <= '9')) { value = (source[sp] - '0') + 4; } + if((source[sp] >= 'A') && (source[sp] <= 'Z')) { value = (source[sp] - 'A') + 14; } + + x12_buffer[x12_p] = value; x12_p++; + + if(x12_p >= 3) { + int iv; + + iv = (1600 * x12_buffer[0]) + (40 * x12_buffer[1]) + (x12_buffer[2]) + 1; + target[tp] = iv / 256; tp++; + target[tp] = iv % 256; tp++; + concat(binary, " "); + if (debug) printf("[%d %d %d] ", x12_buffer[0], x12_buffer[1], x12_buffer[2]); + + x12_buffer[0] = x12_buffer[3]; + x12_buffer[1] = x12_buffer[4]; + x12_buffer[2] = x12_buffer[5]; + x12_buffer[3] = 0; + x12_buffer[4] = 0; + x12_buffer[5] = 0; + x12_p -= 3; + } + sp++; + } + } + + /* step (f) EDIFACT encodation */ + if(current_mode == DM_EDIFACT) { + int value = 0; + + next_mode = DM_EDIFACT; + if(edifact_p == 3) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + } + + if(next_mode != DM_EDIFACT) { + edifact_buffer[edifact_p] = 31; edifact_p++; + next_mode = DM_ASCII; + } else { + if((source[sp] >= '@') && (source[sp] <= '^')) { value = source[sp] - '@'; } + if((source[sp] >= ' ') && (source[sp] <= '?')) { value = source[sp]; } + + edifact_buffer[edifact_p] = value; edifact_p++; + sp++; + } + + if(edifact_p >= 4) { + target[tp] = (edifact_buffer[0] << 2) + ((edifact_buffer[1] & 0x30) >> 4); tp++; + target[tp] = ((edifact_buffer[1] & 0x0f) << 4) + ((edifact_buffer[2] & 0x3c) >> 2); tp++; + target[tp] = ((edifact_buffer[2] & 0x03) << 6) + edifact_buffer[3]; tp++; + concat(binary, " "); + if (debug) printf("[%d %d %d %d] ", edifact_buffer[0], edifact_buffer[1], edifact_buffer[2], edifact_buffer[3]); + + edifact_buffer[0] = edifact_buffer[4]; + edifact_buffer[1] = edifact_buffer[5]; + edifact_buffer[2] = edifact_buffer[6]; + edifact_buffer[3] = edifact_buffer[7]; + edifact_buffer[4] = 0; + edifact_buffer[5] = 0; + edifact_buffer[6] = 0; + edifact_buffer[7] = 0; + edifact_p -= 4; + } + } + + /* step (g) Base 256 encodation */ + if(current_mode == DM_BASE256) { + next_mode = look_ahead_test(source, inputlen, sp, current_mode, gs1); + + if(next_mode == DM_BASE256) { + target[tp] = source[sp]; + if(debug) printf("B%02X ", target[tp]); + tp++; + sp++; + concat(binary, "b"); + } else { + next_mode = DM_ASCII; + if(debug) printf("ASC "); + } + } + + if(tp > 1558) { + return 0; + } + + } /* while */ + + /* Empty buffers */ + if(c40_p == 2) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 2] + 1; tp++; + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + if(debug) printf("ASC A%02X A%02X ", target[tp - 2] - 1, target[tp - 1] - 1); + current_mode = DM_ASCII; + } + if(c40_p == 1) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + if(debug) printf("ASC A%02X ", target[tp - 1] - 1); + current_mode = DM_ASCII; + } + + if(text_p == 2) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 2] + 1; tp++; + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + if(debug) printf("ASC A%02X A%02X ", target[tp - 2] - 1, target[tp - 1] - 1); + current_mode = DM_ASCII; + } + if(text_p == 1) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + if(debug) printf("ASC A%02X ", target[tp - 1] - 1); + current_mode = DM_ASCII; + } + + if(x12_p == 2) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 2] + 1; tp++; + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + if(debug) printf("ASC A%02X A%02X ", target[tp - 2] - 1, target[tp - 1] - 1); + current_mode = DM_ASCII; + } + if(x12_p == 1) { + target[tp] = 254; tp++; /* unlatch */ + target[tp] = source[inputlen - 1] + 1; tp++; + concat(binary, " "); + if(debug) printf("ASC A%02X ", target[tp - 1] - 1); + current_mode = DM_ASCII; + } + + /* Add length and randomising algorithm to b256 */ + i = 0; + while (i < tp) { + if(binary[i] == 'b') { + if((i == 0) || ((i != 0) && (binary[i - 1] != 'b'))) { + /* start of binary data */ + int binary_count; /* length of b256 data */ + + for(binary_count = 0; binary[binary_count + i] == 'b'; binary_count++); + + if(binary_count <= 249) { + dminsert(binary, i, 'b'); + insert_value(target, i, tp, binary_count); tp++; + } else { + dminsert(binary, i, 'b'); + dminsert(binary, i + 1, 'b'); + insert_value(target, i, tp, (binary_count / 250) + 249); tp++; + insert_value(target, i + 1, tp, binary_count % 250); tp++; + } + } + } + i++; + } + + for(i = 0; i < tp; i++) { + if(binary[i] == 'b') { + int prn, temp; + + prn = ((149 * (i + 1)) % 255) + 1; + temp = target[i] + prn; + if (temp <= 255) { target[i] = temp; } else { target[i] = temp - 256; } + } + } + + if(debug) { + printf("\n\n"); + for(i = 0; i < tp; i++){ + printf("%02X ", target[i]); + } + printf("\n"); + } + + *(last_mode) = current_mode; + return tp; +} + +void add_tail(unsigned char target[], int tp, int tail_length, int last_mode) +{ + /* adds unlatch and pad bits */ + int i, prn, temp; + + switch(last_mode) { + case DM_C40: + case DM_TEXT: + case DM_X12: + target[tp] = 254; tp++; /* Unlatch */ + tail_length--; + } + + for(i = tail_length; i > 0; i--) { + if(i == tail_length) { + target[tp] = 129; tp++; /* Pad */ + } else { + prn = ((149 * (tp + 1)) % 253) + 1; + temp = 129 + prn; + if(temp <= 254) { + target[tp] = temp; tp++; + } else { + target[tp] = temp - 254; tp++; + } + } + } +} + +int data_matrix_200(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int inputlen, i, skew = 0; + unsigned char binary[2200]; + int binlen; + int symbolsize, optionsize, calcsize; + int taillength, error_number = 0; + int H, W, FH, FW, datablock, bytes, rsblock; + int last_mode; + unsigned char *grid = 0; + inputlen = length; + + binlen = dm200encode(symbol, source, binary, &last_mode, length); + + if(binlen == 0) { + strcpy(symbol->errtxt, "Data too long to fit in symbol"); + return ERROR_TOO_LONG; + } + + if((symbol->option_2 >= 1) && (symbol->option_2 <= 30)) { + optionsize = intsymbol[symbol->option_2 - 1]; + } else { + optionsize = -1; + } + + calcsize = 29; + for(i = 29; i > -1; i--) { + if(matrixbytes[i] >= binlen) { + calcsize = i; + } + } + + if(symbol->option_3 == DM_SQUARE) { + /* Force to use square symbol */ + switch(calcsize) { + case 2: + case 4: + case 6: + case 9: + case 11: + case 14: + calcsize++; + } + } + + symbolsize = optionsize; + if(calcsize > optionsize) { + symbolsize = calcsize; + if(optionsize != -1) { + /* flag an error */ + error_number = WARN_INVALID_OPTION; + strcpy(symbol->errtxt, "Data does not fit in selected symbol size"); + } + } + + H = matrixH[symbolsize]; + W = matrixW[symbolsize]; + FH = matrixFH[symbolsize]; + FW = matrixFW[symbolsize]; + bytes = matrixbytes[symbolsize]; + datablock = matrixdatablock[symbolsize]; + rsblock = matrixrsblock[symbolsize]; + + taillength = bytes - binlen; + + if(taillength != 0) { + add_tail(binary, binlen, taillength, last_mode); + } + + // ecc code + if(symbolsize == 29) { skew = 1; } + ecc200(binary, bytes, datablock, rsblock, skew); + { // placement + int x, y, NC, NR, *places; + NC = W - 2 * (W / FW); + NR = H - 2 * (H / FH); + places = (int*)malloc(NC * NR * sizeof(int)); + ecc200placement(places, NR, NC); + grid = (unsigned char*)malloc(W * H); + memset(grid, 0, W * H); + for (y = 0; y < H; y += FH) { + for (x = 0; x < W; x++) + grid[y * W + x] = 1; + for (x = 0; x < W; x += 2) + grid[(y + FH - 1) * W + x] = 1; + } + for (x = 0; x < W; x += FW) { + for (y = 0; y < H; y++) + grid[y * W + x] = 1; + for (y = 0; y < H; y += 2) + grid[y * W + x + FW - 1] = 1; + } + for (y = 0; y < NR; y++) { + for (x = 0; x < NC; x++) { + int v = places[(NR - y - 1) * NC + x]; + //fprintf (stderr, "%4d", v); + if (v == 1 || (v > 7 && (binary[(v >> 3) - 1] & (1 << (v & 7))))) + grid[(1 + y + 2 * (y / (FH - 2))) * W + 1 + x + 2 * (x / (FW - 2))] = 1; + } + //fprintf (stderr, "\n"); + } + for(y = H - 1; y >= 0; y--) { + int x; + for(x = 0; x < W; x++) { + if(grid[W * y + x]) { + set_module(symbol, (H - y) - 1, x); + } + } + symbol->row_height[(H - y) - 1] = 1; + } + free(grid); + free(places); + } + + symbol->rows = H; + symbol->width = W; + + return error_number; +} + +int dmatrix(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int error_number; + + if(symbol->option_1 <= 1) { + /* ECC 200 */ + error_number = data_matrix_200(symbol, source, length); + } else { + /* ECC 000 - 140 */ + strcpy(symbol->errtxt, "Older Data Matrix standards are no longer supported"); + error_number = ERROR_INVALID_OPTION; + } + + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/dmatrix.h b/3rdparty/zint-2.4.4/backend/dmatrix.h new file mode 100644 index 0000000..79d1143 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/dmatrix.h @@ -0,0 +1,101 @@ +/* dmatrix.h - Handles Data Matrix ECC 200 */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "common.h" + +#ifndef __IEC16022ECC200_H +#define __IEC16022ECC200_H +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +extern int data_matrix_200(struct zint_symbol *symbol, unsigned char source[], int length); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#define MAXBARCODE 3116 + +#define DM_ASCII 1 +#define DM_C40 2 +#define DM_TEXT 3 +#define DM_X12 4 +#define DM_EDIFACT 5 +#define DM_BASE256 6 + +static int c40_shift[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; + +static int c40_value[] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,5,6,7,8,9,10,11,12,13, + 15,16,17,18,19,20,21,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 22,23,24,25,26,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 }; + +static int text_shift[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3 }; + +static int text_value[] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,4,5,6,7,8,9,10,11,12,13, + 15,16,17,18,19,20,21,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26, + 22,23,24,25,26,0,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,27,28,29,30,31 }; + +static int intsymbol[] = { + 0,1,3,5,7,8,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,2,4,6,9,11,14 }; + +static int matrixH[] = { + 10, 12, 8, 14, 8, 16, 12, 18, 20, 12, 22, 16, 24, 26, 16, 32, 36, 40, 44, 48, + 52, 64, 72, 80, 88, 96, 104, 120, 132, 144 }; + +static int matrixW[] = { + 10, 12, 18, 14, 32, 16, 26, 18, 20, 36, 22, 36, 24, 26, 48, 32, 36, 40, 44, + 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144 }; + +static int matrixFH[] = { + 10, 12, 8, 14, 8, 16, 12, 18, 20, 12, 22, 16, 24, 26, 16, 16, 18, 20, 22, 24, + 26, 16, 18, 20, 22, 24, 26, 20, 22, 24 }; + +static int matrixFW[] = { + 10, 12, 18, 14, 16, 16, 26, 18, 20, 18, 22, 18, 24, 26, 24, 16, 18, 20, 22, + 24, 26, 16, 18, 20, 22, 24, 26, 20, 22, 24 }; + +static int matrixbytes[] = { + 3, 5, 5, 8, 10, 12, 16, 18, 22, 22, 30, 32, 36, 44, 49, 62, 86, 114, 144, + 174, 204, 280, 368, 456, 576, 696, 816, 1050, 1304, 1558 }; + +static int matrixdatablock[] = { + 3, 5, 5, 8, 10, 12, 16, 18, 22, 22, 30, 32, 36, 44, 49, 62, 86, 114, 144, + 174, 102, 140, 92, 114, 144, 174, 136, 175, 163, 156 }; + +static int matrixrsblock[] = { + 5, 7, 7, 10, 11, 12, 14, 14, 18, 18, 20, 24, 24, 28, 28, 36, 42, 48, 56, 68, + 42, 56, 36, 48, 56, 68, 56, 68, 62, 62 }; + +#endif /* __IEC16022ECC200_H */ diff --git a/3rdparty/zint-2.4.4/backend/font.h b/3rdparty/zint-2.4.4/backend/font.h new file mode 100644 index 0000000..2c32b5e --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/font.h @@ -0,0 +1,1691 @@ +/* font.h - Font for PNG images */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* This file contains the pixel-by-pixel representation of the "Misc Fixed" font + at 10 point size processed by the Gimp */ + +static int ascii_font[9310] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0, + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1, + 0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1, + 0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0, + 1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0, + 0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1, + 1,1,1,0,0,0,0,0,1,0,0,1,1,1,1,1, + 1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,0, + 0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,0, + 0,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1, + 1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1, + 1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0, + 1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,0, + 0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1, + 0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0, + 1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1, + 1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0, + 1,0,0,0,0,1,0,0,1,0,0,0,1,0,1,1, + 1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1, + 0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,0, + 1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0, + 0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0, + 0,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0, + 0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0, + 1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0, + 1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0, + 0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0, + 0,0,0,1,1,0,0,1,1,0,1,0,0,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0, + 1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0, + 0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1, + 0,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1, + 0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0, + 0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0, + 0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0, + 1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0, + 0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0, + 1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0, + 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0, + 0,0,0,1,1,0,0,1,1,0,1,1,0,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0, + 0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0, + 0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1, + 1,1,1,0,1,0,0,1,0,1,0,0,1,1,1,0, + 0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1, + 0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, + 1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1, + 0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0, + 1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1, + 0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,0, + 0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0, + 0,0,0,1,0,1,1,0,1,0,1,1,0,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0, + 0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0, + 0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1, + 1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1, + 0,0,0,0,1,0,0,0,0,0,1,1,1,0,1,0, + 1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0, + 0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,1, + 0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0, + 0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0, + 1,1,1,0,1,0,1,0,1,1,1,0,0,0,1,1, + 1,1,0,0,1,1,1,1,1,0,0,1,0,0,0,0, + 1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0, + 1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,1, + 1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, + 1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1, + 1,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0, + 1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,0, + 0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, + 0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1, + 0,0,0,0,1,0,1,1,1,1,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,0, + 0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0, + 1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,0, + 0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1, + 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0, + 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, + 0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0, + 1,0,1,1,1,1,1,0,0,1,0,0,0,1,0,0, + 1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,1,0,1,0,1,0,1,1,0,0,0,1, + 0,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1, + 0,0,0,1,1,0,1,1,0,0,0,1,0,1,0,0, + 0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0, + 1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0, + 1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0, + 0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0, + 0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0, + 0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0, + 1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0, + 0,1,0,0,1,0,0,0,1,1,1,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1, + 1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0, + 0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,1, + 0,1,0,0,0,0,1,0,1,1,1,1,1,0,0,1, + 0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0, + 1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,0,1,0,0,1,0,0,0,1,0,0,0,1,0, + 0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1, + 0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,0, + 0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0, + 1,0,0,1,0,0,0,1,0,0,1,0,1,0,1,0, + 0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0, + 0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1, + 1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1, + 0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, + 1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0, + 0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0, + 0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,0, + 0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1, + 1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0, + 0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,0,1,0,0,1,0,0,0,1,0,1,0,1,0, + 0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1, + 1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,1,1,1,0,0,0,0,0,0,0,1, + 0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1, + 1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0, + 1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0, + 0,0,1,1,0,0,0,1,0,0,0,0,1,0,0,0, + 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,0, + 1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1, + 0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0, + 0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0, + 0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0, + 0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1, + 0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0, + 0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0, + 0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0, + 1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0, + 0,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0, + 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,0, + 1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0, + 0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0, + 0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0, + 1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0, + 1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1, + 0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0, + 0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0, + 0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0, + 0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1, + 0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0, + 1,0,0,0,1,1,0,0,0,0,1,0,1,0,1,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0, + 1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1, + 0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1, + 0,1,0,0,0,0,1,0,1,1,0,0,0,1,0,1, + 0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,0, + 0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1, + 1,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0, + 1,0,0,0,0,1,0,0,1,1,1,0,1,0,0,1, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,1,0,0,0,1,1,1,1,0,0,1,0,0,1,1, + 0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0, + 0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0, + 1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1, + 1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,1, + 0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0, + 0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0, + 0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,1, + 0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1, + 1,1,0,0,1,1,1,1,0,0,0,1,1,1,1,1, + 1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0, + 1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1, + 1,1,0,0,0,1,0,0,0,0,1,0,1,1,1,1, + 1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1, + 0,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0, + 1,1,1,1,0,0,1,0,0,0,0,1,0,0,1,1, + 1,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1, + 0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1, + 1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,0,1,0,1,1,1,0,0,0,1,1, + 1,1,0,0,0,1,1,1,0,1,0,0,1,1,1,1, + 0,0,0,0,1,0,0,0,0,1,0,1,1,1,0,0, + 1,0,0,0,0,1,0,0,1,1,1,1,1,0,0,1, + 0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,1, + 1,1,0,0,1,0,0,0,1,0,1,0,0,0,0,1, + 0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0, + 1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,1, + 1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,0, + 1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0, + 1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1, + 1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0, + 0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, + 0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1, + 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0 +}; + +static int ascii_ext_font[9310] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,1, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0, + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0, + 1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0, + 0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0, + 0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0, + 0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1, + 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,0, + 1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, + 0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1, + 0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1, + 0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0, + 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0, + 0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1, + 0,0,1,1,1,1,1,0,0,1,0,0,1,0,0,0, + 0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0, + 0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0, + 1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1, + 0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,1, + 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0, + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0, + 1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, + 0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1, + 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0, + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1, + 0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1, + 0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0, + 0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1, + 0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0, + 0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1, + 1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0, + 0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0, + 1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1, + 1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1, + 1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1, + 0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,1, + 1,0,0,0,1,0,0,1,1,1,1,0,0,0,1,1, + 1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1, + 0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0, + 1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0, + 0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0, + 0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0, + 1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, + 0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1, + 0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,1, + 0,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1, + 0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0, + 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,1, + 0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0, + 0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1, + 0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0, + 1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, + 0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0, + 1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0, + 0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1, + 0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1, + 1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0, + 1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0, + 0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1, + 0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0, + 0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,1, + 0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 1,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0, + 1,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1, + 0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1, + 1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1, + 0,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0, + 1,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1, + 1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1, + 0,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0, + 0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1, + 1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1, + 0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0, + 0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,1, + 0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1, + 1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1, + 0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,0,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,1,0,0,0,0,1,0,1,0,1,1,1,0, + 0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,1,0,1,0,0,1,0,0,0,1, + 0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,1, + 1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0, + 1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,0, + 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1, + 0,1,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0, + 1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1, + 0,0,1,1,1,0,0,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0, + 1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1, + 1,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0, + 1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,1,0,0,0,0,1,0,1,1,0,0,0,1, + 0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,1, + 1,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0, + 0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0, + 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0, + 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1, + 1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0, + 0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1, + 0,0,0,1,0,0,0,0,1,1,1,1,1,1,0,1, + 1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1, + 1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1, + 1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0, + 1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1, + 1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1, + 0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, + 0,0,1,0,0,1,0,0,0,0,0,1,1,1,0,0, + 0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0, + 1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1, + 1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0, + 1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0, + 1,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,1, + 0,0,1,0,0,0,1,0,0, + 0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1, + 1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0, + 0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1, + 1,1,1,1,0,1,0,1,0,0,0,0,0,1,1,1, + 1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0, + 1,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1, + 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1, + 0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0, + 1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1, + 0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0, + 1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1, + 0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0, + 1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0, + 1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1, + 1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0, + 1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1, + 0,0,1,0,0,1,0,0,0, + 0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0, + 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0, + 0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1, + 0,1,0,0,1,0,0,0,1,0,0,1,0,1,0,1, + 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1, + 0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0, + 0,0,1,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,1,1,1,1,1,1,0, + 1,0,1,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,0,1,0,1,0,0,1,0,0,0,0,1, + 0,0,0,1,0,1,0,0,0, + 0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,1, + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0, + 0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1, + 1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1, + 1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1, + 0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0, + 1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1, + 0,0,0,1,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0, + 1,1,0,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,0, + 0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1, + 0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0, + 0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1, + 1,0,1,0,0,1,0,0,1,1,0,0,0,0,1,0, + 1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0, + 0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0, + 1,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0, + 0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0, + 1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1, + 0,0,0,1,1,1,0,0,0, + 0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0, + 0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, + 0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, + 1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0, + 0,1,0,1,0,0,1,1,1,0,0,0,0,0,0,1, + 0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1, + 0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0, + 0,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0, + 1,0,1,0,0,1,1,1,0,0,1,1,1,1,0,0, + 1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1, + 1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1, + 1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1, + 0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,1, + 0,0,0,1,1,0,0,1,1,1,1,0,0,0,1,1, + 1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1, + 0,0,0,1,1,1,1,0,0,1,0,0,0,0,0,1, + 0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1, + 1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1, + 1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0, + 0,1,1,1,1,1,0,0,0,1,1,1,0,1,0,0, + 1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1, + 1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0, + 1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0, + 0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,1, + 1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1, + 1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,1, + 0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,1, + 0,0,0,0,1,0,0,1,1,1,1,0,0,0,1,1, + 1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,1, + 0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0, + 0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,1, + 1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1, + 0,1,0,0,0,0,1,0,0,0,1,0,1,1,1,0, + 0,0,0,0,1,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0, + 0,1,0,0,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0, + 0,0,1,1,0,0,0,0,0 +}; + +static int small_font[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0, + 0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1, + 1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0, + 0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,1, + 1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,1, + 1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0, + 1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1, + 0,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0, + 0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0, + 1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0, + 0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,1, + 1,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1, + 0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0, + 1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0, + 0,0,1,0,1,0,0,0,0,0,0, + 0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0, + 1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0, + 1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0, + 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0, + 0,1,1,0,0,1,0,0,1,0,0,0,0,1,0,0, + 1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0, + 0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,1, + 0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0, + 0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0, + 1,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1, + 0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0, + 0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0, + 0,1,0,1,0,0,1,0,0,1,0,1,0,0,0,0, + 1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1, + 0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0, + 0,1,0,1,0,0,0,0,0,0,0, + 0,0,1,0,0,0,1,0,1,0,1,1,1,1,1,1, + 0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0, + 1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0, + 0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,1, + 0,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0, + 1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1, + 0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1, + 0,0,0,1,0,0,0,0,0,1,0,1,0,1,1,0, + 1,0,0,1,0,1,1,1,0,0,1,0,0,0,0,1, + 0,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0, + 0,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0, + 1,0,1,1,0,0,0,1,0,0,0,0,1,1,1,1, + 0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0, + 0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,0, + 0,1,0,0,1,1,0,0,0,1,0,1,0,0,0,1, + 0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,0,1,1,1,0,0,0,1,1,0,0,0, + 1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,1, + 1,1,0,1,1,1,0,0,0,1,1,0,0,0,0,0, + 1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0, + 0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,0, + 0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,1, + 1,1,0,0,1,0,0,1,0,0,1,0,1,0,1,0, + 0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,1, + 1,0,0,1,1,0,0,0,0,1,0,0,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0, + 1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,1, + 1,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1, + 0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0, + 0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1, + 1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,0, + 1,0,0,1,0,0,1,0,0,1,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0, + 1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1, + 0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0, + 1,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0, + 1,0,1,1,0,0,0,1,0,0,0,0,1,0,0,1, + 0,1,0,1,1,0,1,0,0,1,0,1,1,1,0,0, + 1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0, + 0,1,0,0,1,0,0,1,0,1,0,0,1,0,1,1, + 1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0, + 0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, + 0,0,1,0,1,0,1,1,0,1,1,1,0,0,1,0, + 0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0, + 1,0,1,1,0,0,0,0,0,1,0,0,1,1,1,1, + 0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0, + 1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0, + 0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,1, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0, + 0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0, + 0,0,1,1,0,0,1,0,0,0,0,0,1,0,1,0, + 0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0, + 0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1, + 0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,1, + 0,0,0,1,1,0,0,0,0,1,0,0,1,1,1,1, + 0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0, + 0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0, + 1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1, + 0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0, + 1,1,0,1,0,1,0,1,0,0,1,0,0,1,0,0, + 0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,1, + 1,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0, + 0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,1,1,0,1,0,0,1,0,1,0,0,0,0,1, + 0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,1, + 1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0, + 1,0,1,0,1,0,0,0,0,1,0,0,1,0,0,1, + 0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,0,0,0,0,1,1,0,0, + 1,0,0,0,1,0,0,1,0,0,1,0,1,0,1,1, + 1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0, + 0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0, + 1,1,1,0,0,0,0,1,0,0,1,0,1,0,0,0, + 0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0, + 1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0, + 0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0, + 0,1,1,1,0,1,1,1,1,0,0,1,1,0,0,0, + 0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1, + 0,0,0,0,1,1,0,0,0,1,1,0,0,0,1,1, + 0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,1,0,0,0,0,0,1,0,0,0,1,1,0,0, + 1,0,0,1,0,1,1,1,0,0,0,1,1,0,0,1, + 1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,1, + 1,1,0,1,0,0,1,0,0,1,1,1,0,0,1,1, + 0,0,1,0,0,1,0,1,1,1,1,0,1,0,0,1, + 0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0, + 0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0, + 0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0, + 0,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1, + 1,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0, + 0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0, + 1,1,1,0,0,1,1,0,0,0,1,0,0,0,1,0, + 0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0, + 1,0,1,0,0,1,0,0,1,1,1,0,1,0,0,1, + 0,1,0,0,1,0,0,1,1,0,0,1,1,1,0,0, + 0,1,1,1,0,1,0,0,0,0,1,1,1,0,0,0, + 0,1,1,0,0,1,1,1,0,0,0,1,0,0,1,1, + 1,1,0,1,0,0,1,0,0,0,1,0,0,1,1,1, + 1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0 +}; + +static int small_font_extended[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, + 1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0, + 0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0, + 0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0, + 0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0, + 0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1, + 0,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1, + 1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1, + 1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,1, + 0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0, + 1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,0, + 1,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0, + 0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1, + 0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0, + 0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0, + 1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0, + 0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0, + 0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,0, + 0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0, + 1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1, + 0,0,0,1,1,0,0,0,1,0,1,0,0,0,1,0, + 0,0,0,0,0,0,0,1,0,1,0, + 0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1, + 0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1, + 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0, + 0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0, + 1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1, + 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0, + 0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0, + 1,1,0,0,0,1,1,0,0,1,0,1,0,0,1,0, + 0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,0,1,1,0,0,0,0, + 0,0,0,1,0,1,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1, + 0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,0, + 0,1,0,0,0,0,1,0,1,0,1,0,1,0,0,0, + 0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1, + 0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0, + 0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,0, + 1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0, + 0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1, + 1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,1,1,1,0,0,1,0,0,0,0, + 1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1, + 1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1, + 0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, + 0,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0, + 1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,0, + 0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,1, + 1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0, + 0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0, + 0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,1,1,0,1,0, + 0,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1, + 0,0,1,1,1,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,1,0,0,0,0,1,0,0,1,1,0,1,0, + 1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0, + 0,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1, + 0,1,0,0,1,0,1,0,1,0,0,0,1,1,1,0, + 0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0, + 1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0, + 1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1, + 0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0, + 0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0, + 1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0, + 1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0, + 0,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1, + 0,1,1,1,0,0,1,0,0,1,0, + 0,0,1,0,0,1,0,1,0,0,1,1,1,0,0,0, + 1,0,1,0,0,1,1,1,0,0,0,0,0,0,0,1, + 0,1,0,0,0,0,0,0,1,1,0,0,1,0,0,0, + 0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0, + 0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0, + 0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1, + 1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0, + 0,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1, + 0,1,1,0,1,0,0,1,0,0,0,1,1,1,1,0, + 1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1, + 1,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0, + 0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0, + 1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1, + 1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0, + 0,1,1,1,0,0,1,0,0,1,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1, + 0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1, + 1,0,1,0,1,1,0,0,0,1,0,0,0,0,1,0, + 0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1, + 1,1,0,1,0,1,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1, + 0,1,0,0,1,0,1,0,0,1,0, + 0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0, + 1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,0, + 1,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0, + 0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0, + 0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,1, + 0,0,0,1,1,0,0,1,0,1,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0, + 0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0, + 0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0, + 1,0,1,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1, + 1,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0, + 0,1,0,0,0,0,1,0,0,1,0,1,0,1,1,0, + 1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1, + 0,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1, + 0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0, + 0,0,1,1,0,0,0,0,0,1,0,0,0,0,1,0, + 0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0, + 0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1, + 0,1,0,0,1,0,0,1,0,1,0, + 0,0,1,0,0,0,1,1,1,0,1,0,1,1,0,1, + 0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0, + 0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,1,1,0,0,0,1,0,1,0,0,0, + 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0, + 0,0,1,1,1,0,0,0,1,0,0,1,0,0,1,0, + 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1, + 0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1, + 1,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1, + 1,0,1,1,1,1,0,0,1,1,1,0,0,1,1,1, + 0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0, + 1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,0, + 1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0, + 0,1,0,1,1,1,0,0,0,1,1,0,0,0,1,1, + 0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0, + 0,1,0,0,0,0,1,0,1,0,0,0,1,0,1,0, + 0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0, + 1,0,1,0,0,1,0,1,0,0,1,1,1,0,0,0, + 1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1, + 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1, + 0,0,1,1,1,0,0,1,1,1,0,0,1,1,0,0, + 1,0,0,1,0,0,1,1,0,0,0,1,1,0,0,0, + 1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1, + 1,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1, + 1,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0, + 0,1,1,1,0,0,0,0,1,0,0, + 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1, + 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,1,0,0,0,0,0,1,0,0,0 +}; diff --git a/3rdparty/zint-2.4.4/backend/gb2312.h b/3rdparty/zint-2.4.4/backend/gb2312.h new file mode 100644 index 0000000..eca1c50 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/gb2312.h @@ -0,0 +1,7467 @@ +/* gb2312.h - Unicode to GB 2312-1980 lookup table + + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +unsigned long int gb2312_lookup[] = { + 0x00A4, 0xA1E8, + 0x00A7, 0xA1EC, + 0x00A8, 0xA1A7, + 0x00B0, 0xA1E3, + 0x00B1, 0xA1C0, + 0x00B7, 0xA1A4, + 0x00D7, 0xA1C1, + 0x00E0, 0xA8A4, + 0x00E1, 0xA8A2, + 0x00E8, 0xA8A8, + 0x00E9, 0xA8A6, + 0x00EA, 0xA8BA, + 0x00EC, 0xA8AC, + 0x00ED, 0xA8AA, + 0x00F2, 0xA8B0, + 0x00F3, 0xA8AE, + 0x00F7, 0xA1C2, + 0x00F9, 0xA8B4, + 0x00FA, 0xA8B2, + 0x00FC, 0xA8B9, + 0x0101, 0xA8A1, + 0x0113, 0xA8A5, + 0x011B, 0xA8A7, + 0x012B, 0xA8A9, + 0x014D, 0xA8AD, + 0x016B, 0xA8B1, + 0x01CE, 0xA8A3, + 0x01D0, 0xA8AB, + 0x01D2, 0xA8AF, + 0x01D4, 0xA8B3, + 0x01D6, 0xA8B5, + 0x01D8, 0xA8B6, + 0x01DA, 0xA8B7, + 0x01DC, 0xA8B8, + 0x02C7, 0xA1A6, + 0x02C9, 0xA1A5, + 0x0391, 0xA6A1, + 0x0392, 0xA6A2, + 0x0393, 0xA6A3, + 0x0394, 0xA6A4, + 0x0395, 0xA6A5, + 0x0396, 0xA6A6, + 0x0397, 0xA6A7, + 0x0398, 0xA6A8, + 0x0399, 0xA6A9, + 0x039A, 0xA6AA, + 0x039B, 0xA6AB, + 0x039C, 0xA6AC, + 0x039D, 0xA6AD, + 0x039E, 0xA6AE, + 0x039F, 0xA6AF, + 0x03A0, 0xA6B0, + 0x03A1, 0xA6B1, + 0x03A3, 0xA6B2, + 0x03A4, 0xA6B3, + 0x03A5, 0xA6B4, + 0x03A6, 0xA6B5, + 0x03A7, 0xA6B6, + 0x03A8, 0xA6B7, + 0x03A9, 0xA6B8, + 0x03B1, 0xA6C1, + 0x03B2, 0xA6C2, + 0x03B3, 0xA6C3, + 0x03B4, 0xA6C4, + 0x03B5, 0xA6C5, + 0x03B6, 0xA6C6, + 0x03B7, 0xA6C7, + 0x03B8, 0xA6C8, + 0x03B9, 0xA6C9, + 0x03BA, 0xA6CA, + 0x03BB, 0xA6CB, + 0x03BC, 0xA6CC, + 0x03BD, 0xA6CD, + 0x03BE, 0xA6CE, + 0x03BF, 0xA6CF, + 0x03C0, 0xA6D0, + 0x03C1, 0xA6D1, + 0x03C3, 0xA6D2, + 0x03C4, 0xA6D3, + 0x03C5, 0xA6D4, + 0x03C6, 0xA6D5, + 0x03C7, 0xA6D6, + 0x03C8, 0xA6D7, + 0x03C9, 0xA6D8, + 0x0401, 0xA7A7, + 0x0410, 0xA7A1, + 0x0411, 0xA7A2, + 0x0412, 0xA7A3, + 0x0413, 0xA7A4, + 0x0414, 0xA7A5, + 0x0415, 0xA7A6, + 0x0416, 0xA7A8, + 0x0417, 0xA7A9, + 0x0418, 0xA7AA, + 0x0419, 0xA7AB, + 0x041A, 0xA7AC, + 0x041B, 0xA7AD, + 0x041C, 0xA7AE, + 0x041D, 0xA7AF, + 0x041E, 0xA7B0, + 0x041F, 0xA7B1, + 0x0420, 0xA7B2, + 0x0421, 0xA7B3, + 0x0422, 0xA7B4, + 0x0423, 0xA7B5, + 0x0424, 0xA7B6, + 0x0425, 0xA7B7, + 0x0426, 0xA7B8, + 0x0427, 0xA7B9, + 0x0428, 0xA7BA, + 0x0429, 0xA7BB, + 0x042A, 0xA7BC, + 0x042B, 0xA7BD, + 0x042C, 0xA7BE, + 0x042D, 0xA7BF, + 0x042E, 0xA7C0, + 0x042F, 0xA7C1, + 0x0430, 0xA7D1, + 0x0431, 0xA7D2, + 0x0432, 0xA7D3, + 0x0433, 0xA7D4, + 0x0434, 0xA7D5, + 0x0435, 0xA7D6, + 0x0436, 0xA7D8, + 0x0437, 0xA7D9, + 0x0438, 0xA7DA, + 0x0439, 0xA7DB, + 0x043A, 0xA7DC, + 0x043B, 0xA7DD, + 0x043C, 0xA7DE, + 0x043D, 0xA7DF, + 0x043E, 0xA7E0, + 0x043F, 0xA7E1, + 0x0440, 0xA7E2, + 0x0441, 0xA7E3, + 0x0442, 0xA7E4, + 0x0443, 0xA7E5, + 0x0444, 0xA7E6, + 0x0445, 0xA7E7, + 0x0446, 0xA7E8, + 0x0447, 0xA7E9, + 0x0448, 0xA7EA, + 0x0449, 0xA7EB, + 0x044A, 0xA7EC, + 0x044B, 0xA7ED, + 0x044C, 0xA7EE, + 0x044D, 0xA7EF, + 0x044E, 0xA7F0, + 0x044F, 0xA7F1, + 0x0451, 0xA7D7, + 0x2014, 0xA1AA, + 0x2016, 0xA1AC, + 0x2018, 0xA1AE, + 0x2019, 0xA1AF, + 0x201C, 0xA1B0, + 0x201D, 0xA1B1, + 0x2026, 0xA1AD, + 0x2030, 0xA1EB, + 0x2032, 0xA1E4, + 0x2033, 0xA1E5, + 0x203B, 0xA1F9, + 0x2103, 0xA1E6, + 0x2116, 0xA1ED, + 0x2160, 0xA2F1, + 0x2161, 0xA2F2, + 0x2162, 0xA2F3, + 0x2163, 0xA2F4, + 0x2164, 0xA2F5, + 0x2165, 0xA2F6, + 0x2166, 0xA2F7, + 0x2167, 0xA2F8, + 0x2168, 0xA2F9, + 0x2169, 0xA2FA, + 0x216A, 0xA2FB, + 0x216B, 0xA2FC, + 0x2190, 0xA1FB, + 0x2191, 0xA1FC, + 0x2192, 0xA1FA, + 0x2193, 0xA1FD, + 0x2208, 0xA1CA, + 0x220F, 0xA1C7, + 0x2211, 0xA1C6, + 0x221A, 0xA1CC, + 0x221D, 0xA1D8, + 0x221E, 0xA1DE, + 0x2220, 0xA1CF, + 0x2225, 0xA1CE, + 0x2227, 0xA1C4, + 0x2228, 0xA1C5, + 0x2229, 0xA1C9, + 0x222A, 0xA1C8, + 0x222B, 0xA1D2, + 0x222E, 0xA1D3, + 0x2234, 0xA1E0, + 0x2235, 0xA1DF, + 0x2236, 0xA1C3, + 0x2237, 0xA1CB, + 0x223D, 0xA1D7, + 0x2248, 0xA1D6, + 0x224C, 0xA1D5, + 0x2260, 0xA1D9, + 0x2261, 0xA1D4, + 0x2264, 0xA1DC, + 0x2265, 0xA1DD, + 0x226E, 0xA1DA, + 0x226F, 0xA1DB, + 0x2299, 0xA1D1, + 0x22A5, 0xA1CD, + 0x2312, 0xA1D0, + 0x2460, 0xA2D9, + 0x2461, 0xA2DA, + 0x2462, 0xA2DB, + 0x2463, 0xA2DC, + 0x2464, 0xA2DD, + 0x2465, 0xA2DE, + 0x2466, 0xA2DF, + 0x2467, 0xA2E0, + 0x2468, 0xA2E1, + 0x2469, 0xA2E2, + 0x2474, 0xA2C5, + 0x2475, 0xA2C6, + 0x2476, 0xA2C7, + 0x2477, 0xA2C8, + 0x2478, 0xA2C9, + 0x2479, 0xA2CA, + 0x247A, 0xA2CB, + 0x247B, 0xA2CC, + 0x247C, 0xA2CD, + 0x247D, 0xA2CE, + 0x247E, 0xA2CF, + 0x247F, 0xA2D0, + 0x2480, 0xA2D1, + 0x2481, 0xA2D2, + 0x2482, 0xA2D3, + 0x2483, 0xA2D4, + 0x2484, 0xA2D5, + 0x2485, 0xA2D6, + 0x2486, 0xA2D7, + 0x2487, 0xA2D8, + 0x2488, 0xA2B1, + 0x2489, 0xA2B2, + 0x248A, 0xA2B3, + 0x248B, 0xA2B4, + 0x248C, 0xA2B5, + 0x248D, 0xA2B6, + 0x248E, 0xA2B7, + 0x248F, 0xA2B8, + 0x2490, 0xA2B9, + 0x2491, 0xA2BA, + 0x2492, 0xA2BB, + 0x2493, 0xA2BC, + 0x2494, 0xA2BD, + 0x2495, 0xA2BE, + 0x2496, 0xA2BF, + 0x2497, 0xA2C0, + 0x2498, 0xA2C1, + 0x2499, 0xA2C2, + 0x249A, 0xA2C3, + 0x249B, 0xA2C4, + 0x2500, 0xA9A4, + 0x2501, 0xA9A5, + 0x2502, 0xA9A6, + 0x2503, 0xA9A7, + 0x2504, 0xA9A8, + 0x2505, 0xA9A9, + 0x2506, 0xA9AA, + 0x2507, 0xA9AB, + 0x2508, 0xA9AC, + 0x2509, 0xA9AD, + 0x250A, 0xA9AE, + 0x250B, 0xA9AF, + 0x250C, 0xA9B0, + 0x250D, 0xA9B1, + 0x250E, 0xA9B2, + 0x250F, 0xA9B3, + 0x2510, 0xA9B4, + 0x2511, 0xA9B5, + 0x2512, 0xA9B6, + 0x2513, 0xA9B7, + 0x2514, 0xA9B8, + 0x2515, 0xA9B9, + 0x2516, 0xA9BA, + 0x2517, 0xA9BB, + 0x2518, 0xA9BC, + 0x2519, 0xA9BD, + 0x251A, 0xA9BE, + 0x251B, 0xA9BF, + 0x251C, 0xA9C0, + 0x251D, 0xA9C1, + 0x251E, 0xA9C2, + 0x251F, 0xA9C3, + 0x2520, 0xA9C4, + 0x2521, 0xA9C5, + 0x2522, 0xA9C6, + 0x2523, 0xA9C7, + 0x2524, 0xA9C8, + 0x2525, 0xA9C9, + 0x2526, 0xA9CA, + 0x2527, 0xA9CB, + 0x2528, 0xA9CC, + 0x2529, 0xA9CD, + 0x252A, 0xA9CE, + 0x252B, 0xA9CF, + 0x252C, 0xA9D0, + 0x252D, 0xA9D1, + 0x252E, 0xA9D2, + 0x252F, 0xA9D3, + 0x2530, 0xA9D4, + 0x2531, 0xA9D5, + 0x2532, 0xA9D6, + 0x2533, 0xA9D7, + 0x2534, 0xA9D8, + 0x2535, 0xA9D9, + 0x2536, 0xA9DA, + 0x2537, 0xA9DB, + 0x2538, 0xA9DC, + 0x2539, 0xA9DD, + 0x253A, 0xA9DE, + 0x253B, 0xA9DF, + 0x253C, 0xA9E0, + 0x253D, 0xA9E1, + 0x253E, 0xA9E2, + 0x253F, 0xA9E3, + 0x2540, 0xA9E4, + 0x2541, 0xA9E5, + 0x2542, 0xA9E6, + 0x2543, 0xA9E7, + 0x2544, 0xA9E8, + 0x2545, 0xA9E9, + 0x2546, 0xA9EA, + 0x2547, 0xA9EB, + 0x2548, 0xA9EC, + 0x2549, 0xA9ED, + 0x254A, 0xA9EE, + 0x254B, 0xA9EF, + 0x25A0, 0xA1F6, + 0x25A1, 0xA1F5, + 0x25B2, 0xA1F8, + 0x25B3, 0xA1F7, + 0x25C6, 0xA1F4, + 0x25C7, 0xA1F3, + 0x25CB, 0xA1F0, + 0x25CE, 0xA1F2, + 0x25CF, 0xA1F1, + 0x2605, 0xA1EF, + 0x2606, 0xA1EE, + 0x2640, 0xA1E2, + 0x2642, 0xA1E1, + 0x3000, 0xA1A1, + 0x3001, 0xA1A2, + 0x3002, 0xA1A3, + 0x3003, 0xA1A8, + 0x3005, 0xA1A9, + 0x3008, 0xA1B4, + 0x3009, 0xA1B5, + 0x300A, 0xA1B6, + 0x300B, 0xA1B7, + 0x300C, 0xA1B8, + 0x300D, 0xA1B9, + 0x300E, 0xA1BA, + 0x300F, 0xA1BB, + 0x3010, 0xA1BE, + 0x3011, 0xA1BF, + 0x3013, 0xA1FE, + 0x3014, 0xA1B2, + 0x3015, 0xA1B3, + 0x3016, 0xA1BC, + 0x3017, 0xA1BD, + 0x3041, 0xA4A1, + 0x3042, 0xA4A2, + 0x3043, 0xA4A3, + 0x3044, 0xA4A4, + 0x3045, 0xA4A5, + 0x3046, 0xA4A6, + 0x3047, 0xA4A7, + 0x3048, 0xA4A8, + 0x3049, 0xA4A9, + 0x304A, 0xA4AA, + 0x304B, 0xA4AB, + 0x304C, 0xA4AC, + 0x304D, 0xA4AD, + 0x304E, 0xA4AE, + 0x304F, 0xA4AF, + 0x3050, 0xA4B0, + 0x3051, 0xA4B1, + 0x3052, 0xA4B2, + 0x3053, 0xA4B3, + 0x3054, 0xA4B4, + 0x3055, 0xA4B5, + 0x3056, 0xA4B6, + 0x3057, 0xA4B7, + 0x3058, 0xA4B8, + 0x3059, 0xA4B9, + 0x305A, 0xA4BA, + 0x305B, 0xA4BB, + 0x305C, 0xA4BC, + 0x305D, 0xA4BD, + 0x305E, 0xA4BE, + 0x305F, 0xA4BF, + 0x3060, 0xA4C0, + 0x3061, 0xA4C1, + 0x3062, 0xA4C2, + 0x3063, 0xA4C3, + 0x3064, 0xA4C4, + 0x3065, 0xA4C5, + 0x3066, 0xA4C6, + 0x3067, 0xA4C7, + 0x3068, 0xA4C8, + 0x3069, 0xA4C9, + 0x306A, 0xA4CA, + 0x306B, 0xA4CB, + 0x306C, 0xA4CC, + 0x306D, 0xA4CD, + 0x306E, 0xA4CE, + 0x306F, 0xA4CF, + 0x3070, 0xA4D0, + 0x3071, 0xA4D1, + 0x3072, 0xA4D2, + 0x3073, 0xA4D3, + 0x3074, 0xA4D4, + 0x3075, 0xA4D5, + 0x3076, 0xA4D6, + 0x3077, 0xA4D7, + 0x3078, 0xA4D8, + 0x3079, 0xA4D9, + 0x307A, 0xA4DA, + 0x307B, 0xA4DB, + 0x307C, 0xA4DC, + 0x307D, 0xA4DD, + 0x307E, 0xA4DE, + 0x307F, 0xA4DF, + 0x3080, 0xA4E0, + 0x3081, 0xA4E1, + 0x3082, 0xA4E2, + 0x3083, 0xA4E3, + 0x3084, 0xA4E4, + 0x3085, 0xA4E5, + 0x3086, 0xA4E6, + 0x3087, 0xA4E7, + 0x3088, 0xA4E8, + 0x3089, 0xA4E9, + 0x308A, 0xA4EA, + 0x308B, 0xA4EB, + 0x308C, 0xA4EC, + 0x308D, 0xA4ED, + 0x308E, 0xA4EE, + 0x308F, 0xA4EF, + 0x3090, 0xA4F0, + 0x3091, 0xA4F1, + 0x3092, 0xA4F2, + 0x3093, 0xA4F3, + 0x30A1, 0xA5A1, + 0x30A2, 0xA5A2, + 0x30A3, 0xA5A3, + 0x30A4, 0xA5A4, + 0x30A5, 0xA5A5, + 0x30A6, 0xA5A6, + 0x30A7, 0xA5A7, + 0x30A8, 0xA5A8, + 0x30A9, 0xA5A9, + 0x30AA, 0xA5AA, + 0x30AB, 0xA5AB, + 0x30AC, 0xA5AC, + 0x30AD, 0xA5AD, + 0x30AE, 0xA5AE, + 0x30AF, 0xA5AF, + 0x30B0, 0xA5B0, + 0x30B1, 0xA5B1, + 0x30B2, 0xA5B2, + 0x30B3, 0xA5B3, + 0x30B4, 0xA5B4, + 0x30B5, 0xA5B5, + 0x30B6, 0xA5B6, + 0x30B7, 0xA5B7, + 0x30B8, 0xA5B8, + 0x30B9, 0xA5B9, + 0x30BA, 0xA5BA, + 0x30BB, 0xA5BB, + 0x30BC, 0xA5BC, + 0x30BD, 0xA5BD, + 0x30BE, 0xA5BE, + 0x30BF, 0xA5BF, + 0x30C0, 0xA5C0, + 0x30C1, 0xA5C1, + 0x30C2, 0xA5C2, + 0x30C3, 0xA5C3, + 0x30C4, 0xA5C4, + 0x30C5, 0xA5C5, + 0x30C6, 0xA5C6, + 0x30C7, 0xA5C7, + 0x30C8, 0xA5C8, + 0x30C9, 0xA5C9, + 0x30CA, 0xA5CA, + 0x30CB, 0xA5CB, + 0x30CC, 0xA5CC, + 0x30CD, 0xA5CD, + 0x30CE, 0xA5CE, + 0x30CF, 0xA5CF, + 0x30D0, 0xA5D0, + 0x30D1, 0xA5D1, + 0x30D2, 0xA5D2, + 0x30D3, 0xA5D3, + 0x30D4, 0xA5D4, + 0x30D5, 0xA5D5, + 0x30D6, 0xA5D6, + 0x30D7, 0xA5D7, + 0x30D8, 0xA5D8, + 0x30D9, 0xA5D9, + 0x30DA, 0xA5DA, + 0x30DB, 0xA5DB, + 0x30DC, 0xA5DC, + 0x30DD, 0xA5DD, + 0x30DE, 0xA5DE, + 0x30DF, 0xA5DF, + 0x30E0, 0xA5E0, + 0x30E1, 0xA5E1, + 0x30E2, 0xA5E2, + 0x30E3, 0xA5E3, + 0x30E4, 0xA5E4, + 0x30E5, 0xA5E5, + 0x30E6, 0xA5E6, + 0x30E7, 0xA5E7, + 0x30E8, 0xA5E8, + 0x30E9, 0xA5E9, + 0x30EA, 0xA5EA, + 0x30EB, 0xA5EB, + 0x30EC, 0xA5EC, + 0x30ED, 0xA5ED, + 0x30EE, 0xA5EE, + 0x30EF, 0xA5EF, + 0x30F0, 0xA5F0, + 0x30F1, 0xA5F1, + 0x30F2, 0xA5F2, + 0x30F3, 0xA5F3, + 0x30F4, 0xA5F4, + 0x30F5, 0xA5F5, + 0x30F6, 0xA5F6, + 0x3105, 0xA8C5, + 0x3106, 0xA8C6, + 0x3107, 0xA8C7, + 0x3108, 0xA8C8, + 0x3109, 0xA8C9, + 0x310A, 0xA8CA, + 0x310B, 0xA8CB, + 0x310C, 0xA8CC, + 0x310D, 0xA8CD, + 0x310E, 0xA8CE, + 0x310F, 0xA8CF, + 0x3110, 0xA8D0, + 0x3111, 0xA8D1, + 0x3112, 0xA8D2, + 0x3113, 0xA8D3, + 0x3114, 0xA8D4, + 0x3115, 0xA8D5, + 0x3116, 0xA8D6, + 0x3117, 0xA8D7, + 0x3118, 0xA8D8, + 0x3119, 0xA8D9, + 0x311A, 0xA8DA, + 0x311B, 0xA8DB, + 0x311C, 0xA8DC, + 0x311D, 0xA8DD, + 0x311E, 0xA8DE, + 0x311F, 0xA8DF, + 0x3120, 0xA8E0, + 0x3121, 0xA8E1, + 0x3122, 0xA8E2, + 0x3123, 0xA8E3, + 0x3124, 0xA8E4, + 0x3125, 0xA8E5, + 0x3126, 0xA8E6, + 0x3127, 0xA8E7, + 0x3128, 0xA8E8, + 0x3129, 0xA8E9, + 0x3220, 0xA2E5, + 0x3221, 0xA2E6, + 0x3222, 0xA2E7, + 0x3223, 0xA2E8, + 0x3224, 0xA2E9, + 0x3225, 0xA2EA, + 0x3226, 0xA2EB, + 0x3227, 0xA2EC, + 0x3228, 0xA2ED, + 0x3229, 0xA2EE, + 0x4E00, 0xD2BB, + 0x4E01, 0xB6A1, + 0x4E03, 0xC6DF, + 0x4E07, 0xCDF2, + 0x4E08, 0xD5C9, + 0x4E09, 0xC8FD, + 0x4E0A, 0xC9CF, + 0x4E0B, 0xCFC2, + 0x4E0C, 0xD8A2, + 0x4E0D, 0xB2BB, + 0x4E0E, 0xD3EB, + 0x4E10, 0xD8A4, + 0x4E11, 0xB3F3, + 0x4E13, 0xD7A8, + 0x4E14, 0xC7D2, + 0x4E15, 0xD8A7, + 0x4E16, 0xCAC0, + 0x4E18, 0xC7F0, + 0x4E19, 0xB1FB, + 0x4E1A, 0xD2B5, + 0x4E1B, 0xB4D4, + 0x4E1C, 0xB6AB, + 0x4E1D, 0xCBBF, + 0x4E1E, 0xD8A9, + 0x4E22, 0xB6AA, + 0x4E24, 0xC1BD, + 0x4E25, 0xD1CF, + 0x4E27, 0xC9A5, + 0x4E28, 0xD8AD, + 0x4E2A, 0xB8F6, + 0x4E2B, 0xD1BE, + 0x4E2C, 0xE3DC, + 0x4E2D, 0xD6D0, + 0x4E30, 0xB7E1, + 0x4E32, 0xB4AE, + 0x4E34, 0xC1D9, + 0x4E36, 0xD8BC, + 0x4E38, 0xCDE8, + 0x4E39, 0xB5A4, + 0x4E3A, 0xCEAA, + 0x4E3B, 0xD6F7, + 0x4E3D, 0xC0F6, + 0x4E3E, 0xBED9, + 0x4E3F, 0xD8AF, + 0x4E43, 0xC4CB, + 0x4E45, 0xBEC3, + 0x4E47, 0xD8B1, + 0x4E48, 0xC3B4, + 0x4E49, 0xD2E5, + 0x4E4B, 0xD6AE, + 0x4E4C, 0xCEDA, + 0x4E4D, 0xD5A7, + 0x4E4E, 0xBAF5, + 0x4E4F, 0xB7A6, + 0x4E50, 0xC0D6, + 0x4E52, 0xC6B9, + 0x4E53, 0xC5D2, + 0x4E54, 0xC7C7, + 0x4E56, 0xB9D4, + 0x4E58, 0xB3CB, + 0x4E59, 0xD2D2, + 0x4E5C, 0xD8BF, + 0x4E5D, 0xBEC5, + 0x4E5E, 0xC6F2, + 0x4E5F, 0xD2B2, + 0x4E60, 0xCFB0, + 0x4E61, 0xCFE7, + 0x4E66, 0xCAE9, + 0x4E69, 0xD8C0, + 0x4E70, 0xC2F2, + 0x4E71, 0xC2D2, + 0x4E73, 0xC8E9, + 0x4E7E, 0xC7AC, + 0x4E86, 0xC1CB, + 0x4E88, 0xD3E8, + 0x4E89, 0xD5F9, + 0x4E8B, 0xCAC2, + 0x4E8C, 0xB6FE, + 0x4E8D, 0xD8A1, + 0x4E8E, 0xD3DA, + 0x4E8F, 0xBFF7, + 0x4E91, 0xD4C6, + 0x4E92, 0xBBA5, + 0x4E93, 0xD8C1, + 0x4E94, 0xCEE5, + 0x4E95, 0xBEAE, + 0x4E98, 0xD8A8, + 0x4E9A, 0xD1C7, + 0x4E9B, 0xD0A9, + 0x4E9F, 0xD8BD, + 0x4EA0, 0xD9EF, + 0x4EA1, 0xCDF6, + 0x4EA2, 0xBFBA, + 0x4EA4, 0xBDBB, + 0x4EA5, 0xBAA5, + 0x4EA6, 0xD2E0, + 0x4EA7, 0xB2FA, + 0x4EA8, 0xBAE0, + 0x4EA9, 0xC4B6, + 0x4EAB, 0xCFED, + 0x4EAC, 0xBEA9, + 0x4EAD, 0xCDA4, + 0x4EAE, 0xC1C1, + 0x4EB2, 0xC7D7, + 0x4EB3, 0xD9F1, + 0x4EB5, 0xD9F4, + 0x4EBA, 0xC8CB, + 0x4EBB, 0xD8E9, + 0x4EBF, 0xD2DA, + 0x4EC0, 0xCAB2, + 0x4EC1, 0xC8CA, + 0x4EC2, 0xD8EC, + 0x4EC3, 0xD8EA, + 0x4EC4, 0xD8C6, + 0x4EC5, 0xBDF6, + 0x4EC6, 0xC6CD, + 0x4EC7, 0xB3F0, + 0x4EC9, 0xD8EB, + 0x4ECA, 0xBDF1, + 0x4ECB, 0xBDE9, + 0x4ECD, 0xC8D4, + 0x4ECE, 0xB4D3, + 0x4ED1, 0xC2D8, + 0x4ED3, 0xB2D6, + 0x4ED4, 0xD7D0, + 0x4ED5, 0xCACB, + 0x4ED6, 0xCBFB, + 0x4ED7, 0xD5CC, + 0x4ED8, 0xB8B6, + 0x4ED9, 0xCFC9, + 0x4EDD, 0xD9DA, + 0x4EDE, 0xD8F0, + 0x4EDF, 0xC7AA, + 0x4EE1, 0xD8EE, + 0x4EE3, 0xB4FA, + 0x4EE4, 0xC1EE, + 0x4EE5, 0xD2D4, + 0x4EE8, 0xD8ED, + 0x4EEA, 0xD2C7, + 0x4EEB, 0xD8EF, + 0x4EEC, 0xC3C7, + 0x4EF0, 0xD1F6, + 0x4EF2, 0xD6D9, + 0x4EF3, 0xD8F2, + 0x4EF5, 0xD8F5, + 0x4EF6, 0xBCFE, + 0x4EF7, 0xBCDB, + 0x4EFB, 0xC8CE, + 0x4EFD, 0xB7DD, + 0x4EFF, 0xB7C2, + 0x4F01, 0xC6F3, + 0x4F09, 0xD8F8, + 0x4F0A, 0xD2C1, + 0x4F0D, 0xCEE9, + 0x4F0E, 0xBCBF, + 0x4F0F, 0xB7FC, + 0x4F10, 0xB7A5, + 0x4F11, 0xD0DD, + 0x4F17, 0xD6DA, + 0x4F18, 0xD3C5, + 0x4F19, 0xBBEF, + 0x4F1A, 0xBBE1, + 0x4F1B, 0xD8F1, + 0x4F1E, 0xC9A1, + 0x4F1F, 0xCEB0, + 0x4F20, 0xB4AB, + 0x4F22, 0xD8F3, + 0x4F24, 0xC9CB, + 0x4F25, 0xD8F6, + 0x4F26, 0xC2D7, + 0x4F27, 0xD8F7, + 0x4F2A, 0xCEB1, + 0x4F2B, 0xD8F9, + 0x4F2F, 0xB2AE, + 0x4F30, 0xB9C0, + 0x4F32, 0xD9A3, + 0x4F34, 0xB0E9, + 0x4F36, 0xC1E6, + 0x4F38, 0xC9EC, + 0x4F3A, 0xCBC5, + 0x4F3C, 0xCBC6, + 0x4F3D, 0xD9A4, + 0x4F43, 0xB5E8, + 0x4F46, 0xB5AB, + 0x4F4D, 0xCEBB, + 0x4F4E, 0xB5CD, + 0x4F4F, 0xD7A1, + 0x4F50, 0xD7F4, + 0x4F51, 0xD3D3, + 0x4F53, 0xCCE5, + 0x4F55, 0xBACE, + 0x4F57, 0xD9A2, + 0x4F58, 0xD9DC, + 0x4F59, 0xD3E0, + 0x4F5A, 0xD8FD, + 0x4F5B, 0xB7F0, + 0x4F5C, 0xD7F7, + 0x4F5D, 0xD8FE, + 0x4F5E, 0xD8FA, + 0x4F5F, 0xD9A1, + 0x4F60, 0xC4E3, + 0x4F63, 0xD3B6, + 0x4F64, 0xD8F4, + 0x4F65, 0xD9DD, + 0x4F67, 0xD8FB, + 0x4F69, 0xC5E5, + 0x4F6C, 0xC0D0, + 0x4F6F, 0xD1F0, + 0x4F70, 0xB0DB, + 0x4F73, 0xBCD1, + 0x4F74, 0xD9A6, + 0x4F76, 0xD9A5, + 0x4F7B, 0xD9AC, + 0x4F7C, 0xD9AE, + 0x4F7E, 0xD9AB, + 0x4F7F, 0xCAB9, + 0x4F83, 0xD9A9, + 0x4F84, 0xD6B6, + 0x4F88, 0xB3DE, + 0x4F89, 0xD9A8, + 0x4F8B, 0xC0FD, + 0x4F8D, 0xCACC, + 0x4F8F, 0xD9AA, + 0x4F91, 0xD9A7, + 0x4F94, 0xD9B0, + 0x4F97, 0xB6B1, + 0x4F9B, 0xB9A9, + 0x4F9D, 0xD2C0, + 0x4FA0, 0xCFC0, + 0x4FA3, 0xC2C2, + 0x4FA5, 0xBDC4, + 0x4FA6, 0xD5EC, + 0x4FA7, 0xB2E0, + 0x4FA8, 0xC7C8, + 0x4FA9, 0xBFEB, + 0x4FAA, 0xD9AD, + 0x4FAC, 0xD9AF, + 0x4FAE, 0xCEEA, + 0x4FAF, 0xBAEE, + 0x4FB5, 0xC7D6, + 0x4FBF, 0xB1E3, + 0x4FC3, 0xB4D9, + 0x4FC4, 0xB6ED, + 0x4FC5, 0xD9B4, + 0x4FCA, 0xBFA1, + 0x4FCE, 0xD9DE, + 0x4FCF, 0xC7CE, + 0x4FD0, 0xC0FE, + 0x4FD1, 0xD9B8, + 0x4FD7, 0xCBD7, + 0x4FD8, 0xB7FD, + 0x4FDA, 0xD9B5, + 0x4FDC, 0xD9B7, + 0x4FDD, 0xB1A3, + 0x4FDE, 0xD3E1, + 0x4FDF, 0xD9B9, + 0x4FE1, 0xD0C5, + 0x4FE3, 0xD9B6, + 0x4FE6, 0xD9B1, + 0x4FE8, 0xD9B2, + 0x4FE9, 0xC1A9, + 0x4FEA, 0xD9B3, + 0x4FED, 0xBCF3, + 0x4FEE, 0xD0DE, + 0x4FEF, 0xB8A9, + 0x4FF1, 0xBEE3, + 0x4FF3, 0xD9BD, + 0x4FF8, 0xD9BA, + 0x4FFA, 0xB0B3, + 0x4FFE, 0xD9C2, + 0x500C, 0xD9C4, + 0x500D, 0xB1B6, + 0x500F, 0xD9BF, + 0x5012, 0xB5B9, + 0x5014, 0xBEF3, + 0x5018, 0xCCC8, + 0x5019, 0xBAF2, + 0x501A, 0xD2D0, + 0x501C, 0xD9C3, + 0x501F, 0xBDE8, + 0x5021, 0xB3AB, + 0x5025, 0xD9C5, + 0x5026, 0xBEEB, + 0x5028, 0xD9C6, + 0x5029, 0xD9BB, + 0x502A, 0xC4DF, + 0x502C, 0xD9BE, + 0x502D, 0xD9C1, + 0x502E, 0xD9C0, + 0x503A, 0xD5AE, + 0x503C, 0xD6B5, + 0x503E, 0xC7E3, + 0x5043, 0xD9C8, + 0x5047, 0xBCD9, + 0x5048, 0xD9CA, + 0x504C, 0xD9BC, + 0x504E, 0xD9CB, + 0x504F, 0xC6AB, + 0x5055, 0xD9C9, + 0x505A, 0xD7F6, + 0x505C, 0xCDA3, + 0x5065, 0xBDA1, + 0x506C, 0xD9CC, + 0x5076, 0xC5BC, + 0x5077, 0xCDB5, + 0x507B, 0xD9CD, + 0x507E, 0xD9C7, + 0x507F, 0xB3A5, + 0x5080, 0xBFFE, + 0x5085, 0xB8B5, + 0x5088, 0xC0FC, + 0x508D, 0xB0F8, + 0x50A3, 0xB4F6, + 0x50A5, 0xD9CE, + 0x50A7, 0xD9CF, + 0x50A8, 0xB4A2, + 0x50A9, 0xD9D0, + 0x50AC, 0xB4DF, + 0x50B2, 0xB0C1, + 0x50BA, 0xD9D1, + 0x50BB, 0xC9B5, + 0x50CF, 0xCFF1, + 0x50D6, 0xD9D2, + 0x50DA, 0xC1C5, + 0x50E6, 0xD9D6, + 0x50E7, 0xC9AE, + 0x50EC, 0xD9D5, + 0x50ED, 0xD9D4, + 0x50EE, 0xD9D7, + 0x50F3, 0xCBDB, + 0x50F5, 0xBDA9, + 0x50FB, 0xC6A7, + 0x5106, 0xD9D3, + 0x5107, 0xD9D8, + 0x510B, 0xD9D9, + 0x5112, 0xC8E5, + 0x5121, 0xC0DC, + 0x513F, 0xB6F9, + 0x5140, 0xD8A3, + 0x5141, 0xD4CA, + 0x5143, 0xD4AA, + 0x5144, 0xD0D6, + 0x5145, 0xB3E4, + 0x5146, 0xD5D7, + 0x5148, 0xCFC8, + 0x5149, 0xB9E2, + 0x514B, 0xBFCB, + 0x514D, 0xC3E2, + 0x5151, 0xB6D2, + 0x5154, 0xCDC3, + 0x5155, 0xD9EE, + 0x5156, 0xD9F0, + 0x515A, 0xB5B3, + 0x515C, 0xB6B5, + 0x5162, 0xBEA4, + 0x5165, 0xC8EB, + 0x5168, 0xC8AB, + 0x516B, 0xB0CB, + 0x516C, 0xB9AB, + 0x516D, 0xC1F9, + 0x516E, 0xD9E2, + 0x5170, 0xC0BC, + 0x5171, 0xB9B2, + 0x5173, 0xB9D8, + 0x5174, 0xD0CB, + 0x5175, 0xB1F8, + 0x5176, 0xC6E4, + 0x5177, 0xBEDF, + 0x5178, 0xB5E4, + 0x5179, 0xD7C8, + 0x517B, 0xD1F8, + 0x517C, 0xBCE6, + 0x517D, 0xCADE, + 0x5180, 0xBCBD, + 0x5181, 0xD9E6, + 0x5182, 0xD8E7, + 0x5185, 0xC4DA, + 0x5188, 0xB8D4, + 0x5189, 0xC8BD, + 0x518C, 0xB2E1, + 0x518D, 0xD4D9, + 0x5192, 0xC3B0, + 0x5195, 0xC3E1, + 0x5196, 0xDAA2, + 0x5197, 0xC8DF, + 0x5199, 0xD0B4, + 0x519B, 0xBEFC, + 0x519C, 0xC5A9, + 0x51A0, 0xB9DA, + 0x51A2, 0xDAA3, + 0x51A4, 0xD4A9, + 0x51A5, 0xDAA4, + 0x51AB, 0xD9FB, + 0x51AC, 0xB6AC, + 0x51AF, 0xB7EB, + 0x51B0, 0xB1F9, + 0x51B1, 0xD9FC, + 0x51B2, 0xB3E5, + 0x51B3, 0xBEF6, + 0x51B5, 0xBFF6, + 0x51B6, 0xD2B1, + 0x51B7, 0xC0E4, + 0x51BB, 0xB6B3, + 0x51BC, 0xD9FE, + 0x51BD, 0xD9FD, + 0x51C0, 0xBEBB, + 0x51C4, 0xC6E0, + 0x51C6, 0xD7BC, + 0x51C7, 0xDAA1, + 0x51C9, 0xC1B9, + 0x51CB, 0xB5F2, + 0x51CC, 0xC1E8, + 0x51CF, 0xBCF5, + 0x51D1, 0xB4D5, + 0x51DB, 0xC1DD, + 0x51DD, 0xC4FD, + 0x51E0, 0xBCB8, + 0x51E1, 0xB7B2, + 0x51E4, 0xB7EF, + 0x51EB, 0xD9EC, + 0x51ED, 0xC6BE, + 0x51EF, 0xBFAD, + 0x51F0, 0xBBCB, + 0x51F3, 0xB5CA, + 0x51F5, 0xDBC9, + 0x51F6, 0xD0D7, + 0x51F8, 0xCDB9, + 0x51F9, 0xB0BC, + 0x51FA, 0xB3F6, + 0x51FB, 0xBBF7, + 0x51FC, 0xDBCA, + 0x51FD, 0xBAAF, + 0x51FF, 0xD4E4, + 0x5200, 0xB5B6, + 0x5201, 0xB5F3, + 0x5202, 0xD8D6, + 0x5203, 0xC8D0, + 0x5206, 0xB7D6, + 0x5207, 0xC7D0, + 0x5208, 0xD8D7, + 0x520A, 0xBFAF, + 0x520D, 0xDBBB, + 0x520E, 0xD8D8, + 0x5211, 0xD0CC, + 0x5212, 0xBBAE, + 0x5216, 0xEBBE, + 0x5217, 0xC1D0, + 0x5218, 0xC1F5, + 0x5219, 0xD4F2, + 0x521A, 0xB8D5, + 0x521B, 0xB4B4, + 0x521D, 0xB3F5, + 0x5220, 0xC9BE, + 0x5224, 0xC5D0, + 0x5228, 0xC5D9, + 0x5229, 0xC0FB, + 0x522B, 0xB1F0, + 0x522D, 0xD8D9, + 0x522E, 0xB9CE, + 0x5230, 0xB5BD, + 0x5233, 0xD8DA, + 0x5236, 0xD6C6, + 0x5237, 0xCBA2, + 0x5238, 0xC8AF, + 0x5239, 0xC9B2, + 0x523A, 0xB4CC, + 0x523B, 0xBFCC, + 0x523D, 0xB9F4, + 0x523F, 0xD8DB, + 0x5240, 0xD8DC, + 0x5241, 0xB6E7, + 0x5242, 0xBCC1, + 0x5243, 0xCCEA, + 0x524A, 0xCFF7, + 0x524C, 0xD8DD, + 0x524D, 0xC7B0, + 0x5250, 0xB9D0, + 0x5251, 0xBDA3, + 0x5254, 0xCCDE, + 0x5256, 0xC6CA, + 0x525C, 0xD8E0, + 0x525E, 0xD8DE, + 0x5261, 0xD8DF, + 0x5265, 0xB0FE, + 0x5267, 0xBEE7, + 0x5269, 0xCAA3, + 0x526A, 0xBCF4, + 0x526F, 0xB8B1, + 0x5272, 0xB8EE, + 0x527D, 0xD8E2, + 0x527F, 0xBDCB, + 0x5281, 0xD8E4, + 0x5282, 0xD8E3, + 0x5288, 0xC5FC, + 0x5290, 0xD8E5, + 0x5293, 0xD8E6, + 0x529B, 0xC1A6, + 0x529D, 0xC8B0, + 0x529E, 0xB0EC, + 0x529F, 0xB9A6, + 0x52A0, 0xBCD3, + 0x52A1, 0xCEF1, + 0x52A2, 0xDBBD, + 0x52A3, 0xC1D3, + 0x52A8, 0xB6AF, + 0x52A9, 0xD6FA, + 0x52AA, 0xC5AC, + 0x52AB, 0xBDD9, + 0x52AC, 0xDBBE, + 0x52AD, 0xDBBF, + 0x52B1, 0xC0F8, + 0x52B2, 0xBEA2, + 0x52B3, 0xC0CD, + 0x52BE, 0xDBC0, + 0x52BF, 0xCAC6, + 0x52C3, 0xB2AA, + 0x52C7, 0xD3C2, + 0x52C9, 0xC3E3, + 0x52CB, 0xD1AB, + 0x52D0, 0xDBC2, + 0x52D2, 0xC0D5, + 0x52D6, 0xDBC3, + 0x52D8, 0xBFB1, + 0x52DF, 0xC4BC, + 0x52E4, 0xC7DA, + 0x52F0, 0xDBC4, + 0x52F9, 0xD9E8, + 0x52FA, 0xC9D7, + 0x52FE, 0xB9B4, + 0x52FF, 0xCEF0, + 0x5300, 0xD4C8, + 0x5305, 0xB0FC, + 0x5306, 0xB4D2, + 0x5308, 0xD0D9, + 0x530D, 0xD9E9, + 0x530F, 0xDECB, + 0x5310, 0xD9EB, + 0x5315, 0xD8B0, + 0x5316, 0xBBAF, + 0x5317, 0xB1B1, + 0x5319, 0xB3D7, + 0x531A, 0xD8CE, + 0x531D, 0xD4D1, + 0x5320, 0xBDB3, + 0x5321, 0xBFEF, + 0x5323, 0xCFBB, + 0x5326, 0xD8D0, + 0x532A, 0xB7CB, + 0x532E, 0xD8D1, + 0x5339, 0xC6A5, + 0x533A, 0xC7F8, + 0x533B, 0xD2BD, + 0x533E, 0xD8D2, + 0x533F, 0xC4E4, + 0x5341, 0xCAAE, + 0x5343, 0xC7A7, + 0x5345, 0xD8A6, + 0x5347, 0xC9FD, + 0x5348, 0xCEE7, + 0x5349, 0xBBDC, + 0x534A, 0xB0EB, + 0x534E, 0xBBAA, + 0x534F, 0xD0AD, + 0x5351, 0xB1B0, + 0x5352, 0xD7E4, + 0x5353, 0xD7BF, + 0x5355, 0xB5A5, + 0x5356, 0xC2F4, + 0x5357, 0xC4CF, + 0x535A, 0xB2A9, + 0x535C, 0xB2B7, + 0x535E, 0xB1E5, + 0x535F, 0xDFB2, + 0x5360, 0xD5BC, + 0x5361, 0xBFA8, + 0x5362, 0xC2AC, + 0x5363, 0xD8D5, + 0x5364, 0xC2B1, + 0x5366, 0xD8D4, + 0x5367, 0xCED4, + 0x5369, 0xDAE0, + 0x536B, 0xCEC0, + 0x536E, 0xD8B4, + 0x536F, 0xC3AE, + 0x5370, 0xD3A1, + 0x5371, 0xCEA3, + 0x5373, 0xBCB4, + 0x5374, 0xC8B4, + 0x5375, 0xC2D1, + 0x5377, 0xBEED, + 0x5378, 0xD0B6, + 0x537A, 0xDAE1, + 0x537F, 0xC7E4, + 0x5382, 0xB3A7, + 0x5384, 0xB6F2, + 0x5385, 0xCCFC, + 0x5386, 0xC0FA, + 0x5389, 0xC0F7, + 0x538B, 0xD1B9, + 0x538C, 0xD1E1, + 0x538D, 0xD8C7, + 0x5395, 0xB2DE, + 0x5398, 0xC0E5, + 0x539A, 0xBAF1, + 0x539D, 0xD8C8, + 0x539F, 0xD4AD, + 0x53A2, 0xCFE1, + 0x53A3, 0xD8C9, + 0x53A5, 0xD8CA, + 0x53A6, 0xCFC3, + 0x53A8, 0xB3F8, + 0x53A9, 0xBEC7, + 0x53AE, 0xD8CB, + 0x53B6, 0xDBCC, + 0x53BB, 0xC8A5, + 0x53BF, 0xCFD8, + 0x53C1, 0xC8FE, + 0x53C2, 0xB2CE, + 0x53C8, 0xD3D6, + 0x53C9, 0xB2E6, + 0x53CA, 0xBCB0, + 0x53CB, 0xD3D1, + 0x53CC, 0xCBAB, + 0x53CD, 0xB7B4, + 0x53D1, 0xB7A2, + 0x53D4, 0xCAE5, + 0x53D6, 0xC8A1, + 0x53D7, 0xCADC, + 0x53D8, 0xB1E4, + 0x53D9, 0xD0F0, + 0x53DB, 0xC5D1, + 0x53DF, 0xDBC5, + 0x53E0, 0xB5FE, + 0x53E3, 0xBFDA, + 0x53E4, 0xB9C5, + 0x53E5, 0xBEE4, + 0x53E6, 0xC1ED, + 0x53E8, 0xDFB6, + 0x53E9, 0xDFB5, + 0x53EA, 0xD6BB, + 0x53EB, 0xBDD0, + 0x53EC, 0xD5D9, + 0x53ED, 0xB0C8, + 0x53EE, 0xB6A3, + 0x53EF, 0xBFC9, + 0x53F0, 0xCCA8, + 0x53F1, 0xDFB3, + 0x53F2, 0xCAB7, + 0x53F3, 0xD3D2, + 0x53F5, 0xD8CF, + 0x53F6, 0xD2B6, + 0x53F7, 0xBAC5, + 0x53F8, 0xCBBE, + 0x53F9, 0xCCBE, + 0x53FB, 0xDFB7, + 0x53FC, 0xB5F0, + 0x53FD, 0xDFB4, + 0x5401, 0xD3F5, + 0x5403, 0xB3D4, + 0x5404, 0xB8F7, + 0x5406, 0xDFBA, + 0x5408, 0xBACF, + 0x5409, 0xBCAA, + 0x540A, 0xB5F5, + 0x540C, 0xCDAC, + 0x540D, 0xC3FB, + 0x540E, 0xBAF3, + 0x540F, 0xC0F4, + 0x5410, 0xCDC2, + 0x5411, 0xCFF2, + 0x5412, 0xDFB8, + 0x5413, 0xCFC5, + 0x5415, 0xC2C0, + 0x5416, 0xDFB9, + 0x5417, 0xC2F0, + 0x541B, 0xBEFD, + 0x541D, 0xC1DF, + 0x541E, 0xCDCC, + 0x541F, 0xD2F7, + 0x5420, 0xB7CD, + 0x5421, 0xDFC1, + 0x5423, 0xDFC4, + 0x5426, 0xB7F1, + 0x5427, 0xB0C9, + 0x5428, 0xB6D6, + 0x5429, 0xB7D4, + 0x542B, 0xBAAC, + 0x542C, 0xCCFD, + 0x542D, 0xBFD4, + 0x542E, 0xCBB1, + 0x542F, 0xC6F4, + 0x5431, 0xD6A8, + 0x5432, 0xDFC5, + 0x5434, 0xCEE2, + 0x5435, 0xB3B3, + 0x5438, 0xCEFC, + 0x5439, 0xB4B5, + 0x543B, 0xCEC7, + 0x543C, 0xBAF0, + 0x543E, 0xCEE1, + 0x5440, 0xD1BD, + 0x5443, 0xDFC0, + 0x5446, 0xB4F4, + 0x5448, 0xB3CA, + 0x544A, 0xB8E6, + 0x544B, 0xDFBB, + 0x5450, 0xC4C5, + 0x5452, 0xDFBC, + 0x5453, 0xDFBD, + 0x5454, 0xDFBE, + 0x5455, 0xC5BB, + 0x5456, 0xDFBF, + 0x5457, 0xDFC2, + 0x5458, 0xD4B1, + 0x5459, 0xDFC3, + 0x545B, 0xC7BA, + 0x545C, 0xCED8, + 0x5462, 0xC4D8, + 0x5464, 0xDFCA, + 0x5466, 0xDFCF, + 0x5468, 0xD6DC, + 0x5471, 0xDFC9, + 0x5472, 0xDFDA, + 0x5473, 0xCEB6, + 0x5475, 0xBAC7, + 0x5476, 0xDFCE, + 0x5477, 0xDFC8, + 0x5478, 0xC5DE, + 0x547B, 0xC9EB, + 0x547C, 0xBAF4, + 0x547D, 0xC3FC, + 0x5480, 0xBED7, + 0x5482, 0xDFC6, + 0x5484, 0xDFCD, + 0x5486, 0xC5D8, + 0x548B, 0xD5A6, + 0x548C, 0xBACD, + 0x548E, 0xBECC, + 0x548F, 0xD3BD, + 0x5490, 0xB8C0, + 0x5492, 0xD6E4, + 0x5494, 0xDFC7, + 0x5495, 0xB9BE, + 0x5496, 0xBFA7, + 0x5499, 0xC1FC, + 0x549A, 0xDFCB, + 0x549B, 0xDFCC, + 0x549D, 0xDFD0, + 0x54A3, 0xDFDB, + 0x54A4, 0xDFE5, + 0x54A6, 0xDFD7, + 0x54A7, 0xDFD6, + 0x54A8, 0xD7C9, + 0x54A9, 0xDFE3, + 0x54AA, 0xDFE4, + 0x54AB, 0xE5EB, + 0x54AC, 0xD2A7, + 0x54AD, 0xDFD2, + 0x54AF, 0xBFA9, + 0x54B1, 0xD4DB, + 0x54B3, 0xBFC8, + 0x54B4, 0xDFD4, + 0x54B8, 0xCFCC, + 0x54BB, 0xDFDD, + 0x54BD, 0xD1CA, + 0x54BF, 0xDFDE, + 0x54C0, 0xB0A7, + 0x54C1, 0xC6B7, + 0x54C2, 0xDFD3, + 0x54C4, 0xBAE5, + 0x54C6, 0xB6DF, + 0x54C7, 0xCDDB, + 0x54C8, 0xB9FE, + 0x54C9, 0xD4D5, + 0x54CC, 0xDFDF, + 0x54CD, 0xCFEC, + 0x54CE, 0xB0A5, + 0x54CF, 0xDFE7, + 0x54D0, 0xDFD1, + 0x54D1, 0xD1C6, + 0x54D2, 0xDFD5, + 0x54D3, 0xDFD8, + 0x54D4, 0xDFD9, + 0x54D5, 0xDFDC, + 0x54D7, 0xBBA9, + 0x54D9, 0xDFE0, + 0x54DA, 0xDFE1, + 0x54DC, 0xDFE2, + 0x54DD, 0xDFE6, + 0x54DE, 0xDFE8, + 0x54DF, 0xD3B4, + 0x54E5, 0xB8E7, + 0x54E6, 0xC5B6, + 0x54E7, 0xDFEA, + 0x54E8, 0xC9DA, + 0x54E9, 0xC1A8, + 0x54EA, 0xC4C4, + 0x54ED, 0xBFDE, + 0x54EE, 0xCFF8, + 0x54F2, 0xD5DC, + 0x54F3, 0xDFEE, + 0x54FA, 0xB2B8, + 0x54FC, 0xBADF, + 0x54FD, 0xDFEC, + 0x54FF, 0xDBC1, + 0x5501, 0xD1E4, + 0x5506, 0xCBF4, + 0x5507, 0xB4BD, + 0x5509, 0xB0A6, + 0x550F, 0xDFF1, + 0x5510, 0xCCC6, + 0x5511, 0xDFF2, + 0x5514, 0xDFED, + 0x551B, 0xDFE9, + 0x5520, 0xDFEB, + 0x5522, 0xDFEF, + 0x5523, 0xDFF0, + 0x5524, 0xBBBD, + 0x5527, 0xDFF3, + 0x552A, 0xDFF4, + 0x552C, 0xBBA3, + 0x552E, 0xCADB, + 0x552F, 0xCEA8, + 0x5530, 0xE0A7, + 0x5531, 0xB3AA, + 0x5533, 0xE0A6, + 0x5537, 0xE0A1, + 0x553C, 0xDFFE, + 0x553E, 0xCDD9, + 0x553F, 0xDFFC, + 0x5541, 0xDFFA, + 0x5543, 0xBFD0, + 0x5544, 0xD7C4, + 0x5546, 0xC9CC, + 0x5549, 0xDFF8, + 0x554A, 0xB0A1, + 0x5550, 0xDFFD, + 0x5555, 0xDFFB, + 0x5556, 0xE0A2, + 0x555C, 0xE0A8, + 0x5561, 0xB7C8, + 0x5564, 0xC6A1, + 0x5565, 0xC9B6, + 0x5566, 0xC0B2, + 0x5567, 0xDFF5, + 0x556A, 0xC5BE, + 0x556C, 0xD8C4, + 0x556D, 0xDFF9, + 0x556E, 0xC4F6, + 0x5575, 0xE0A3, + 0x5576, 0xE0A4, + 0x5577, 0xE0A5, + 0x5578, 0xD0A5, + 0x557B, 0xE0B4, + 0x557C, 0xCCE4, + 0x557E, 0xE0B1, + 0x5580, 0xBFA6, + 0x5581, 0xE0AF, + 0x5582, 0xCEB9, + 0x5583, 0xE0AB, + 0x5584, 0xC9C6, + 0x5587, 0xC0AE, + 0x5588, 0xE0AE, + 0x5589, 0xBAED, + 0x558A, 0xBAB0, + 0x558B, 0xE0A9, + 0x558F, 0xDFF6, + 0x5591, 0xE0B3, + 0x5594, 0xE0B8, + 0x5598, 0xB4AD, + 0x5599, 0xE0B9, + 0x559C, 0xCFB2, + 0x559D, 0xBAC8, + 0x559F, 0xE0B0, + 0x55A7, 0xD0FA, + 0x55B1, 0xE0AC, + 0x55B3, 0xD4FB, + 0x55B5, 0xDFF7, + 0x55B7, 0xC5E7, + 0x55B9, 0xE0AD, + 0x55BB, 0xD3F7, + 0x55BD, 0xE0B6, + 0x55BE, 0xE0B7, + 0x55C4, 0xE0C4, + 0x55C5, 0xD0E1, + 0x55C9, 0xE0BC, + 0x55CC, 0xE0C9, + 0x55CD, 0xE0CA, + 0x55D1, 0xE0BE, + 0x55D2, 0xE0AA, + 0x55D3, 0xC9A4, + 0x55D4, 0xE0C1, + 0x55D6, 0xE0B2, + 0x55DC, 0xCAC8, + 0x55DD, 0xE0C3, + 0x55DF, 0xE0B5, + 0x55E1, 0xCECB, + 0x55E3, 0xCBC3, + 0x55E4, 0xE0CD, + 0x55E5, 0xE0C6, + 0x55E6, 0xE0C2, + 0x55E8, 0xE0CB, + 0x55EA, 0xE0BA, + 0x55EB, 0xE0BF, + 0x55EC, 0xE0C0, + 0x55EF, 0xE0C5, + 0x55F2, 0xE0C7, + 0x55F3, 0xE0C8, + 0x55F5, 0xE0CC, + 0x55F7, 0xE0BB, + 0x55FD, 0xCBD4, + 0x55FE, 0xE0D5, + 0x5600, 0xE0D6, + 0x5601, 0xE0D2, + 0x5608, 0xE0D0, + 0x5609, 0xBCCE, + 0x560C, 0xE0D1, + 0x560E, 0xB8C2, + 0x560F, 0xD8C5, + 0x5618, 0xD0EA, + 0x561B, 0xC2EF, + 0x561E, 0xE0CF, + 0x561F, 0xE0BD, + 0x5623, 0xE0D4, + 0x5624, 0xE0D3, + 0x5627, 0xE0D7, + 0x562C, 0xE0DC, + 0x562D, 0xE0D8, + 0x5631, 0xD6F6, + 0x5632, 0xB3B0, + 0x5634, 0xD7EC, + 0x5636, 0xCBBB, + 0x5639, 0xE0DA, + 0x563B, 0xCEFB, + 0x563F, 0xBAD9, + 0x564C, 0xE0E1, + 0x564D, 0xE0DD, + 0x564E, 0xD2AD, + 0x5654, 0xE0E2, + 0x5657, 0xE0DB, + 0x5658, 0xE0D9, + 0x5659, 0xE0DF, + 0x565C, 0xE0E0, + 0x5662, 0xE0DE, + 0x5664, 0xE0E4, + 0x5668, 0xC6F7, + 0x5669, 0xD8AC, + 0x566A, 0xD4EB, + 0x566B, 0xE0E6, + 0x566C, 0xCAC9, + 0x5671, 0xE0E5, + 0x5676, 0xB8C1, + 0x567B, 0xE0E7, + 0x567C, 0xE0E8, + 0x5685, 0xE0E9, + 0x5686, 0xE0E3, + 0x568E, 0xBABF, + 0x568F, 0xCCE7, + 0x5693, 0xE0EA, + 0x56A3, 0xCFF9, + 0x56AF, 0xE0EB, + 0x56B7, 0xC8C2, + 0x56BC, 0xBDC0, + 0x56CA, 0xC4D2, + 0x56D4, 0xE0EC, + 0x56D7, 0xE0ED, + 0x56DA, 0xC7F4, + 0x56DB, 0xCBC4, + 0x56DD, 0xE0EE, + 0x56DE, 0xBBD8, + 0x56DF, 0xD8B6, + 0x56E0, 0xD2F2, + 0x56E1, 0xE0EF, + 0x56E2, 0xCDC5, + 0x56E4, 0xB6DA, + 0x56EB, 0xE0F1, + 0x56ED, 0xD4B0, + 0x56F0, 0xC0A7, + 0x56F1, 0xB4D1, + 0x56F4, 0xCEA7, + 0x56F5, 0xE0F0, + 0x56F9, 0xE0F2, + 0x56FA, 0xB9CC, + 0x56FD, 0xB9FA, + 0x56FE, 0xCDBC, + 0x56FF, 0xE0F3, + 0x5703, 0xC6D4, + 0x5704, 0xE0F4, + 0x5706, 0xD4B2, + 0x5708, 0xC8A6, + 0x5709, 0xE0F6, + 0x570A, 0xE0F5, + 0x571C, 0xE0F7, + 0x571F, 0xCDC1, + 0x5723, 0xCAA5, + 0x5728, 0xD4DA, + 0x5729, 0xDBD7, + 0x572A, 0xDBD9, + 0x572C, 0xDBD8, + 0x572D, 0xB9E7, + 0x572E, 0xDBDC, + 0x572F, 0xDBDD, + 0x5730, 0xB5D8, + 0x5733, 0xDBDA, + 0x5739, 0xDBDB, + 0x573A, 0xB3A1, + 0x573B, 0xDBDF, + 0x573E, 0xBBF8, + 0x5740, 0xD6B7, + 0x5742, 0xDBE0, + 0x5747, 0xBEF9, + 0x574A, 0xB7BB, + 0x574C, 0xDBD0, + 0x574D, 0xCCAE, + 0x574E, 0xBFB2, + 0x574F, 0xBBB5, + 0x5750, 0xD7F8, + 0x5751, 0xBFD3, + 0x5757, 0xBFE9, + 0x575A, 0xBCE1, + 0x575B, 0xCCB3, + 0x575C, 0xDBDE, + 0x575D, 0xB0D3, + 0x575E, 0xCEEB, + 0x575F, 0xB7D8, + 0x5760, 0xD7B9, + 0x5761, 0xC6C2, + 0x5764, 0xC0A4, + 0x5766, 0xCCB9, + 0x5768, 0xDBE7, + 0x5769, 0xDBE1, + 0x576A, 0xC6BA, + 0x576B, 0xDBE3, + 0x576D, 0xDBE8, + 0x576F, 0xC5F7, + 0x5773, 0xDBEA, + 0x5776, 0xDBE9, + 0x5777, 0xBFC0, + 0x577B, 0xDBE6, + 0x577C, 0xDBE5, + 0x5782, 0xB4B9, + 0x5783, 0xC0AC, + 0x5784, 0xC2A2, + 0x5785, 0xDBE2, + 0x5786, 0xDBE4, + 0x578B, 0xD0CD, + 0x578C, 0xDBED, + 0x5792, 0xC0DD, + 0x5793, 0xDBF2, + 0x579B, 0xB6E2, + 0x57A0, 0xDBF3, + 0x57A1, 0xDBD2, + 0x57A2, 0xB9B8, + 0x57A3, 0xD4AB, + 0x57A4, 0xDBEC, + 0x57A6, 0xBFD1, + 0x57A7, 0xDBF0, + 0x57A9, 0xDBD1, + 0x57AB, 0xB5E6, + 0x57AD, 0xDBEB, + 0x57AE, 0xBFE5, + 0x57B2, 0xDBEE, + 0x57B4, 0xDBF1, + 0x57B8, 0xDBF9, + 0x57C2, 0xB9A1, + 0x57C3, 0xB0A3, + 0x57CB, 0xC2F1, + 0x57CE, 0xB3C7, + 0x57CF, 0xDBEF, + 0x57D2, 0xDBF8, + 0x57D4, 0xC6D2, + 0x57D5, 0xDBF4, + 0x57D8, 0xDBF5, + 0x57D9, 0xDBF7, + 0x57DA, 0xDBF6, + 0x57DD, 0xDBFE, + 0x57DF, 0xD3F2, + 0x57E0, 0xB2BA, + 0x57E4, 0xDBFD, + 0x57ED, 0xDCA4, + 0x57EF, 0xDBFB, + 0x57F4, 0xDBFA, + 0x57F8, 0xDBFC, + 0x57F9, 0xC5E0, + 0x57FA, 0xBBF9, + 0x57FD, 0xDCA3, + 0x5800, 0xDCA5, + 0x5802, 0xCCC3, + 0x5806, 0xB6D1, + 0x5807, 0xDDC0, + 0x580B, 0xDCA1, + 0x580D, 0xDCA2, + 0x5811, 0xC7B5, + 0x5815, 0xB6E9, + 0x5819, 0xDCA7, + 0x581E, 0xDCA6, + 0x5820, 0xDCA9, + 0x5821, 0xB1A4, + 0x5824, 0xB5CC, + 0x582A, 0xBFB0, + 0x5830, 0xD1DF, + 0x5835, 0xB6C2, + 0x5844, 0xDCA8, + 0x584C, 0xCBFA, + 0x584D, 0xEBF3, + 0x5851, 0xCBDC, + 0x5854, 0xCBFE, + 0x5858, 0xCCC1, + 0x585E, 0xC8FB, + 0x5865, 0xDCAA, + 0x586B, 0xCCEE, + 0x586C, 0xDCAB, + 0x587E, 0xDBD3, + 0x5880, 0xDCAF, + 0x5881, 0xDCAC, + 0x5883, 0xBEB3, + 0x5885, 0xCAFB, + 0x5889, 0xDCAD, + 0x5892, 0xC9CA, + 0x5893, 0xC4B9, + 0x5899, 0xC7BD, + 0x589A, 0xDCAE, + 0x589E, 0xD4F6, + 0x589F, 0xD0E6, + 0x58A8, 0xC4AB, + 0x58A9, 0xB6D5, + 0x58BC, 0xDBD4, + 0x58C1, 0xB1DA, + 0x58C5, 0xDBD5, + 0x58D1, 0xDBD6, + 0x58D5, 0xBABE, + 0x58E4, 0xC8C0, + 0x58EB, 0xCABF, + 0x58EC, 0xC8C9, + 0x58EE, 0xD7B3, + 0x58F0, 0xC9F9, + 0x58F3, 0xBFC7, + 0x58F6, 0xBAF8, + 0x58F9, 0xD2BC, + 0x5902, 0xE2BA, + 0x5904, 0xB4A6, + 0x5907, 0xB1B8, + 0x590D, 0xB8B4, + 0x590F, 0xCFC4, + 0x5914, 0xD9E7, + 0x5915, 0xCFA6, + 0x5916, 0xCDE2, + 0x5919, 0xD9ED, + 0x591A, 0xB6E0, + 0x591C, 0xD2B9, + 0x591F, 0xB9BB, + 0x5924, 0xE2B9, + 0x5925, 0xE2B7, + 0x5927, 0xB4F3, + 0x5929, 0xCCEC, + 0x592A, 0xCCAB, + 0x592B, 0xB7F2, + 0x592D, 0xD8B2, + 0x592E, 0xD1EB, + 0x592F, 0xBABB, + 0x5931, 0xCAA7, + 0x5934, 0xCDB7, + 0x5937, 0xD2C4, + 0x5938, 0xBFE4, + 0x5939, 0xBCD0, + 0x593A, 0xB6E1, + 0x593C, 0xDEC5, + 0x5941, 0xDEC6, + 0x5942, 0xDBBC, + 0x5944, 0xD1D9, + 0x5947, 0xC6E6, + 0x5948, 0xC4CE, + 0x5949, 0xB7EE, + 0x594B, 0xB7DC, + 0x594E, 0xBFFC, + 0x594F, 0xD7E0, + 0x5951, 0xC6F5, + 0x5954, 0xB1BC, + 0x5955, 0xDEC8, + 0x5956, 0xBDB1, + 0x5957, 0xCCD7, + 0x5958, 0xDECA, + 0x595A, 0xDEC9, + 0x5960, 0xB5EC, + 0x5962, 0xC9DD, + 0x5965, 0xB0C2, + 0x5973, 0xC5AE, + 0x5974, 0xC5AB, + 0x5976, 0xC4CC, + 0x5978, 0xBCE9, + 0x5979, 0xCBFD, + 0x597D, 0xBAC3, + 0x5981, 0xE5F9, + 0x5982, 0xC8E7, + 0x5983, 0xE5FA, + 0x5984, 0xCDFD, + 0x5986, 0xD7B1, + 0x5987, 0xB8BE, + 0x5988, 0xC2E8, + 0x598A, 0xC8D1, + 0x598D, 0xE5FB, + 0x5992, 0xB6CA, + 0x5993, 0xBCCB, + 0x5996, 0xD1FD, + 0x5997, 0xE6A1, + 0x5999, 0xC3EE, + 0x599E, 0xE6A4, + 0x59A3, 0xE5FE, + 0x59A4, 0xE6A5, + 0x59A5, 0xCDD7, + 0x59A8, 0xB7C1, + 0x59A9, 0xE5FC, + 0x59AA, 0xE5FD, + 0x59AB, 0xE6A3, + 0x59AE, 0xC4DD, + 0x59AF, 0xE6A8, + 0x59B2, 0xE6A7, + 0x59B9, 0xC3C3, + 0x59BB, 0xC6DE, + 0x59BE, 0xE6AA, + 0x59C6, 0xC4B7, + 0x59CA, 0xE6A2, + 0x59CB, 0xCABC, + 0x59D0, 0xBDE3, + 0x59D1, 0xB9C3, + 0x59D2, 0xE6A6, + 0x59D3, 0xD0D5, + 0x59D4, 0xCEAF, + 0x59D7, 0xE6A9, + 0x59D8, 0xE6B0, + 0x59DA, 0xD2A6, + 0x59DC, 0xBDAA, + 0x59DD, 0xE6AD, + 0x59E3, 0xE6AF, + 0x59E5, 0xC0D1, + 0x59E8, 0xD2CC, + 0x59EC, 0xBCA7, + 0x59F9, 0xE6B1, + 0x59FB, 0xD2F6, + 0x59FF, 0xD7CB, + 0x5A01, 0xCDFE, + 0x5A03, 0xCDDE, + 0x5A04, 0xC2A6, + 0x5A05, 0xE6AB, + 0x5A06, 0xE6AC, + 0x5A07, 0xBDBF, + 0x5A08, 0xE6AE, + 0x5A09, 0xE6B3, + 0x5A0C, 0xE6B2, + 0x5A11, 0xE6B6, + 0x5A13, 0xE6B8, + 0x5A18, 0xC4EF, + 0x5A1C, 0xC4C8, + 0x5A1F, 0xBEEA, + 0x5A20, 0xC9EF, + 0x5A23, 0xE6B7, + 0x5A25, 0xB6F0, + 0x5A29, 0xC3E4, + 0x5A31, 0xD3E9, + 0x5A32, 0xE6B4, + 0x5A34, 0xE6B5, + 0x5A36, 0xC8A2, + 0x5A3C, 0xE6BD, + 0x5A40, 0xE6B9, + 0x5A46, 0xC6C5, + 0x5A49, 0xCDF1, + 0x5A4A, 0xE6BB, + 0x5A55, 0xE6BC, + 0x5A5A, 0xBBE9, + 0x5A62, 0xE6BE, + 0x5A67, 0xE6BA, + 0x5A6A, 0xC0B7, + 0x5A74, 0xD3A4, + 0x5A75, 0xE6BF, + 0x5A76, 0xC9F4, + 0x5A77, 0xE6C3, + 0x5A7A, 0xE6C4, + 0x5A7F, 0xD0F6, + 0x5A92, 0xC3BD, + 0x5A9A, 0xC3C4, + 0x5A9B, 0xE6C2, + 0x5AAA, 0xE6C1, + 0x5AB2, 0xE6C7, + 0x5AB3, 0xCFB1, + 0x5AB5, 0xEBF4, + 0x5AB8, 0xE6CA, + 0x5ABE, 0xE6C5, + 0x5AC1, 0xBCDE, + 0x5AC2, 0xC9A9, + 0x5AC9, 0xBCB5, + 0x5ACC, 0xCFD3, + 0x5AD2, 0xE6C8, + 0x5AD4, 0xE6C9, + 0x5AD6, 0xE6CE, + 0x5AD8, 0xE6D0, + 0x5ADC, 0xE6D1, + 0x5AE0, 0xE6CB, + 0x5AE1, 0xB5D5, + 0x5AE3, 0xE6CC, + 0x5AE6, 0xE6CF, + 0x5AE9, 0xC4DB, + 0x5AEB, 0xE6C6, + 0x5AF1, 0xE6CD, + 0x5B09, 0xE6D2, + 0x5B16, 0xE6D4, + 0x5B17, 0xE6D3, + 0x5B32, 0xE6D5, + 0x5B34, 0xD9F8, + 0x5B37, 0xE6D6, + 0x5B40, 0xE6D7, + 0x5B50, 0xD7D3, + 0x5B51, 0xE6DD, + 0x5B53, 0xE6DE, + 0x5B54, 0xBFD7, + 0x5B55, 0xD4D0, + 0x5B57, 0xD7D6, + 0x5B58, 0xB4E6, + 0x5B59, 0xCBEF, + 0x5B5A, 0xE6DA, + 0x5B5B, 0xD8C3, + 0x5B5C, 0xD7CE, + 0x5B5D, 0xD0A2, + 0x5B5F, 0xC3CF, + 0x5B62, 0xE6DF, + 0x5B63, 0xBCBE, + 0x5B64, 0xB9C2, + 0x5B65, 0xE6DB, + 0x5B66, 0xD1A7, + 0x5B69, 0xBAA2, + 0x5B6A, 0xC2CF, + 0x5B6C, 0xD8AB, + 0x5B70, 0xCAEB, + 0x5B71, 0xE5EE, + 0x5B73, 0xE6DC, + 0x5B75, 0xB7F5, + 0x5B7A, 0xC8E6, + 0x5B7D, 0xC4F5, + 0x5B80, 0xE5B2, + 0x5B81, 0xC4FE, + 0x5B83, 0xCBFC, + 0x5B84, 0xE5B3, + 0x5B85, 0xD5AC, + 0x5B87, 0xD3EE, + 0x5B88, 0xCAD8, + 0x5B89, 0xB0B2, + 0x5B8B, 0xCBCE, + 0x5B8C, 0xCDEA, + 0x5B8F, 0xBAEA, + 0x5B93, 0xE5B5, + 0x5B95, 0xE5B4, + 0x5B97, 0xD7DA, + 0x5B98, 0xB9D9, + 0x5B99, 0xD6E6, + 0x5B9A, 0xB6A8, + 0x5B9B, 0xCDF0, + 0x5B9C, 0xD2CB, + 0x5B9D, 0xB1A6, + 0x5B9E, 0xCAB5, + 0x5BA0, 0xB3E8, + 0x5BA1, 0xC9F3, + 0x5BA2, 0xBFCD, + 0x5BA3, 0xD0FB, + 0x5BA4, 0xCAD2, + 0x5BA5, 0xE5B6, + 0x5BA6, 0xBBC2, + 0x5BAA, 0xCFDC, + 0x5BAB, 0xB9AC, + 0x5BB0, 0xD4D7, + 0x5BB3, 0xBAA6, + 0x5BB4, 0xD1E7, + 0x5BB5, 0xCFFC, + 0x5BB6, 0xBCD2, + 0x5BB8, 0xE5B7, + 0x5BB9, 0xC8DD, + 0x5BBD, 0xBFED, + 0x5BBE, 0xB1F6, + 0x5BBF, 0xCBDE, + 0x5BC2, 0xBCC5, + 0x5BC4, 0xBCC4, + 0x5BC5, 0xD2FA, + 0x5BC6, 0xC3DC, + 0x5BC7, 0xBFDC, + 0x5BCC, 0xB8BB, + 0x5BD0, 0xC3C2, + 0x5BD2, 0xBAAE, + 0x5BD3, 0xD4A2, + 0x5BDD, 0xC7DE, + 0x5BDE, 0xC4AF, + 0x5BDF, 0xB2EC, + 0x5BE1, 0xB9D1, + 0x5BE4, 0xE5BB, + 0x5BE5, 0xC1C8, + 0x5BE8, 0xD5AF, + 0x5BEE, 0xE5BC, + 0x5BF0, 0xE5BE, + 0x5BF8, 0xB4E7, + 0x5BF9, 0xB6D4, + 0x5BFA, 0xCBC2, + 0x5BFB, 0xD1B0, + 0x5BFC, 0xB5BC, + 0x5BFF, 0xCAD9, + 0x5C01, 0xB7E2, + 0x5C04, 0xC9E4, + 0x5C06, 0xBDAB, + 0x5C09, 0xCEBE, + 0x5C0A, 0xD7F0, + 0x5C0F, 0xD0A1, + 0x5C11, 0xC9D9, + 0x5C14, 0xB6FB, + 0x5C15, 0xE6D8, + 0x5C16, 0xBCE2, + 0x5C18, 0xB3BE, + 0x5C1A, 0xC9D0, + 0x5C1C, 0xE6D9, + 0x5C1D, 0xB3A2, + 0x5C22, 0xDECC, + 0x5C24, 0xD3C8, + 0x5C25, 0xDECD, + 0x5C27, 0xD2A2, + 0x5C2C, 0xDECE, + 0x5C31, 0xBECD, + 0x5C34, 0xDECF, + 0x5C38, 0xCAAC, + 0x5C39, 0xD2FC, + 0x5C3A, 0xB3DF, + 0x5C3B, 0xE5EA, + 0x5C3C, 0xC4E1, + 0x5C3D, 0xBEA1, + 0x5C3E, 0xCEB2, + 0x5C3F, 0xC4F2, + 0x5C40, 0xBED6, + 0x5C41, 0xC6A8, + 0x5C42, 0xB2E3, + 0x5C45, 0xBED3, + 0x5C48, 0xC7FC, + 0x5C49, 0xCCEB, + 0x5C4A, 0xBDEC, + 0x5C4B, 0xCEDD, + 0x5C4E, 0xCABA, + 0x5C4F, 0xC6C1, + 0x5C50, 0xE5EC, + 0x5C51, 0xD0BC, + 0x5C55, 0xD5B9, + 0x5C59, 0xE5ED, + 0x5C5E, 0xCAF4, + 0x5C60, 0xCDC0, + 0x5C61, 0xC2C5, + 0x5C63, 0xE5EF, + 0x5C65, 0xC2C4, + 0x5C66, 0xE5F0, + 0x5C6E, 0xE5F8, + 0x5C6F, 0xCDCD, + 0x5C71, 0xC9BD, + 0x5C79, 0xD2D9, + 0x5C7A, 0xE1A8, + 0x5C7F, 0xD3EC, + 0x5C81, 0xCBEA, + 0x5C82, 0xC6F1, + 0x5C88, 0xE1AC, + 0x5C8C, 0xE1A7, + 0x5C8D, 0xE1A9, + 0x5C90, 0xE1AA, + 0x5C91, 0xE1AF, + 0x5C94, 0xB2ED, + 0x5C96, 0xE1AB, + 0x5C97, 0xB8DA, + 0x5C98, 0xE1AD, + 0x5C99, 0xE1AE, + 0x5C9A, 0xE1B0, + 0x5C9B, 0xB5BA, + 0x5C9C, 0xE1B1, + 0x5CA2, 0xE1B3, + 0x5CA3, 0xE1B8, + 0x5CA9, 0xD1D2, + 0x5CAB, 0xE1B6, + 0x5CAC, 0xE1B5, + 0x5CAD, 0xC1EB, + 0x5CB1, 0xE1B7, + 0x5CB3, 0xD4C0, + 0x5CB5, 0xE1B2, + 0x5CB7, 0xE1BA, + 0x5CB8, 0xB0B6, + 0x5CBD, 0xE1B4, + 0x5CBF, 0xBFF9, + 0x5CC1, 0xE1B9, + 0x5CC4, 0xE1BB, + 0x5CCB, 0xE1BE, + 0x5CD2, 0xE1BC, + 0x5CD9, 0xD6C5, + 0x5CE1, 0xCFBF, + 0x5CE4, 0xE1BD, + 0x5CE5, 0xE1BF, + 0x5CE6, 0xC2CD, + 0x5CE8, 0xB6EB, + 0x5CEA, 0xD3F8, + 0x5CED, 0xC7CD, + 0x5CF0, 0xB7E5, + 0x5CFB, 0xBEFE, + 0x5D02, 0xE1C0, + 0x5D03, 0xE1C1, + 0x5D06, 0xE1C7, + 0x5D07, 0xB3E7, + 0x5D0E, 0xC6E9, + 0x5D14, 0xB4DE, + 0x5D16, 0xD1C2, + 0x5D1B, 0xE1C8, + 0x5D1E, 0xE1C6, + 0x5D24, 0xE1C5, + 0x5D26, 0xE1C3, + 0x5D27, 0xE1C2, + 0x5D29, 0xB1C0, + 0x5D2D, 0xD5B8, + 0x5D2E, 0xE1C4, + 0x5D34, 0xE1CB, + 0x5D3D, 0xE1CC, + 0x5D3E, 0xE1CA, + 0x5D47, 0xEFFA, + 0x5D4A, 0xE1D3, + 0x5D4B, 0xE1D2, + 0x5D4C, 0xC7B6, + 0x5D58, 0xE1C9, + 0x5D5B, 0xE1CE, + 0x5D5D, 0xE1D0, + 0x5D69, 0xE1D4, + 0x5D6B, 0xE1D1, + 0x5D6C, 0xE1CD, + 0x5D6F, 0xE1CF, + 0x5D74, 0xE1D5, + 0x5D82, 0xE1D6, + 0x5D99, 0xE1D7, + 0x5D9D, 0xE1D8, + 0x5DB7, 0xE1DA, + 0x5DC5, 0xE1DB, + 0x5DCD, 0xCEA1, + 0x5DDB, 0xE7DD, + 0x5DDD, 0xB4A8, + 0x5DDE, 0xD6DD, + 0x5DE1, 0xD1B2, + 0x5DE2, 0xB3B2, + 0x5DE5, 0xB9A4, + 0x5DE6, 0xD7F3, + 0x5DE7, 0xC7C9, + 0x5DE8, 0xBEDE, + 0x5DE9, 0xB9AE, + 0x5DEB, 0xCED7, + 0x5DEE, 0xB2EE, + 0x5DEF, 0xDBCF, + 0x5DF1, 0xBCBA, + 0x5DF2, 0xD2D1, + 0x5DF3, 0xCBC8, + 0x5DF4, 0xB0CD, + 0x5DF7, 0xCFEF, + 0x5DFD, 0xD9E3, + 0x5DFE, 0xBDED, + 0x5E01, 0xB1D2, + 0x5E02, 0xCAD0, + 0x5E03, 0xB2BC, + 0x5E05, 0xCBA7, + 0x5E06, 0xB7AB, + 0x5E08, 0xCAA6, + 0x5E0C, 0xCFA3, + 0x5E0F, 0xE0F8, + 0x5E10, 0xD5CA, + 0x5E11, 0xE0FB, + 0x5E14, 0xE0FA, + 0x5E15, 0xC5C1, + 0x5E16, 0xCCFB, + 0x5E18, 0xC1B1, + 0x5E19, 0xE0F9, + 0x5E1A, 0xD6E3, + 0x5E1B, 0xB2AF, + 0x5E1C, 0xD6C4, + 0x5E1D, 0xB5DB, + 0x5E26, 0xB4F8, + 0x5E27, 0xD6A1, + 0x5E2D, 0xCFAF, + 0x5E2E, 0xB0EF, + 0x5E31, 0xE0FC, + 0x5E37, 0xE1A1, + 0x5E38, 0xB3A3, + 0x5E3B, 0xE0FD, + 0x5E3C, 0xE0FE, + 0x5E3D, 0xC3B1, + 0x5E42, 0xC3DD, + 0x5E44, 0xE1A2, + 0x5E45, 0xB7F9, + 0x5E4C, 0xBBCF, + 0x5E54, 0xE1A3, + 0x5E55, 0xC4BB, + 0x5E5B, 0xE1A4, + 0x5E5E, 0xE1A5, + 0x5E61, 0xE1A6, + 0x5E62, 0xB4B1, + 0x5E72, 0xB8C9, + 0x5E73, 0xC6BD, + 0x5E74, 0xC4EA, + 0x5E76, 0xB2A2, + 0x5E78, 0xD0D2, + 0x5E7A, 0xE7DB, + 0x5E7B, 0xBBC3, + 0x5E7C, 0xD3D7, + 0x5E7D, 0xD3C4, + 0x5E7F, 0xB9E3, + 0x5E80, 0xE2CF, + 0x5E84, 0xD7AF, + 0x5E86, 0xC7EC, + 0x5E87, 0xB1D3, + 0x5E8A, 0xB4B2, + 0x5E8B, 0xE2D1, + 0x5E8F, 0xD0F2, + 0x5E90, 0xC2AE, + 0x5E91, 0xE2D0, + 0x5E93, 0xBFE2, + 0x5E94, 0xD3A6, + 0x5E95, 0xB5D7, + 0x5E96, 0xE2D2, + 0x5E97, 0xB5EA, + 0x5E99, 0xC3ED, + 0x5E9A, 0xB8FD, + 0x5E9C, 0xB8AE, + 0x5E9E, 0xC5D3, + 0x5E9F, 0xB7CF, + 0x5EA0, 0xE2D4, + 0x5EA5, 0xE2D3, + 0x5EA6, 0xB6C8, + 0x5EA7, 0xD7F9, + 0x5EAD, 0xCDA5, + 0x5EB3, 0xE2D8, + 0x5EB5, 0xE2D6, + 0x5EB6, 0xCAFC, + 0x5EB7, 0xBFB5, + 0x5EB8, 0xD3B9, + 0x5EB9, 0xE2D5, + 0x5EBE, 0xE2D7, + 0x5EC9, 0xC1AE, + 0x5ECA, 0xC0C8, + 0x5ED1, 0xE2DB, + 0x5ED2, 0xE2DA, + 0x5ED3, 0xC0AA, + 0x5ED6, 0xC1CE, + 0x5EDB, 0xE2DC, + 0x5EE8, 0xE2DD, + 0x5EEA, 0xE2DE, + 0x5EF4, 0xDBC8, + 0x5EF6, 0xD1D3, + 0x5EF7, 0xCDA2, + 0x5EFA, 0xBDA8, + 0x5EFE, 0xDEC3, + 0x5EFF, 0xD8A5, + 0x5F00, 0xBFAA, + 0x5F01, 0xDBCD, + 0x5F02, 0xD2EC, + 0x5F03, 0xC6FA, + 0x5F04, 0xC5AA, + 0x5F08, 0xDEC4, + 0x5F0A, 0xB1D7, + 0x5F0B, 0xDFAE, + 0x5F0F, 0xCABD, + 0x5F11, 0xDFB1, + 0x5F13, 0xB9AD, + 0x5F15, 0xD2FD, + 0x5F17, 0xB8A5, + 0x5F18, 0xBAEB, + 0x5F1B, 0xB3DA, + 0x5F1F, 0xB5DC, + 0x5F20, 0xD5C5, + 0x5F25, 0xC3D6, + 0x5F26, 0xCFD2, + 0x5F27, 0xBBA1, + 0x5F29, 0xE5F3, + 0x5F2A, 0xE5F2, + 0x5F2D, 0xE5F4, + 0x5F2F, 0xCDE4, + 0x5F31, 0xC8F5, + 0x5F39, 0xB5AF, + 0x5F3A, 0xC7BF, + 0x5F3C, 0xE5F6, + 0x5F40, 0xECB0, + 0x5F50, 0xE5E6, + 0x5F52, 0xB9E9, + 0x5F53, 0xB5B1, + 0x5F55, 0xC2BC, + 0x5F56, 0xE5E8, + 0x5F57, 0xE5E7, + 0x5F58, 0xE5E9, + 0x5F5D, 0xD2CD, + 0x5F61, 0xE1EA, + 0x5F62, 0xD0CE, + 0x5F64, 0xCDAE, + 0x5F66, 0xD1E5, + 0x5F69, 0xB2CA, + 0x5F6A, 0xB1EB, + 0x5F6C, 0xB1F2, + 0x5F6D, 0xC5ED, + 0x5F70, 0xD5C3, + 0x5F71, 0xD3B0, + 0x5F73, 0xE1DC, + 0x5F77, 0xE1DD, + 0x5F79, 0xD2DB, + 0x5F7B, 0xB3B9, + 0x5F7C, 0xB1CB, + 0x5F80, 0xCDF9, + 0x5F81, 0xD5F7, + 0x5F82, 0xE1DE, + 0x5F84, 0xBEB6, + 0x5F85, 0xB4FD, + 0x5F87, 0xE1DF, + 0x5F88, 0xBADC, + 0x5F89, 0xE1E0, + 0x5F8A, 0xBBB2, + 0x5F8B, 0xC2C9, + 0x5F8C, 0xE1E1, + 0x5F90, 0xD0EC, + 0x5F92, 0xCDBD, + 0x5F95, 0xE1E2, + 0x5F97, 0xB5C3, + 0x5F98, 0xC5C7, + 0x5F99, 0xE1E3, + 0x5F9C, 0xE1E4, + 0x5FA1, 0xD3F9, + 0x5FA8, 0xE1E5, + 0x5FAA, 0xD1AD, + 0x5FAD, 0xE1E6, + 0x5FAE, 0xCEA2, + 0x5FB5, 0xE1E7, + 0x5FB7, 0xB5C2, + 0x5FBC, 0xE1E8, + 0x5FBD, 0xBBD5, + 0x5FC3, 0xD0C4, + 0x5FC4, 0xE2E0, + 0x5FC5, 0xB1D8, + 0x5FC6, 0xD2E4, + 0x5FC9, 0xE2E1, + 0x5FCC, 0xBCC9, + 0x5FCD, 0xC8CC, + 0x5FCF, 0xE2E3, + 0x5FD0, 0xECFE, + 0x5FD1, 0xECFD, + 0x5FD2, 0xDFAF, + 0x5FD6, 0xE2E2, + 0x5FD7, 0xD6BE, + 0x5FD8, 0xCDFC, + 0x5FD9, 0xC3A6, + 0x5FDD, 0xE3C3, + 0x5FE0, 0xD6D2, + 0x5FE1, 0xE2E7, + 0x5FE4, 0xE2E8, + 0x5FE7, 0xD3C7, + 0x5FEA, 0xE2EC, + 0x5FEB, 0xBFEC, + 0x5FED, 0xE2ED, + 0x5FEE, 0xE2E5, + 0x5FF1, 0xB3C0, + 0x5FF5, 0xC4EE, + 0x5FF8, 0xE2EE, + 0x5FFB, 0xD0C3, + 0x5FFD, 0xBAF6, + 0x5FFE, 0xE2E9, + 0x5FFF, 0xB7DE, + 0x6000, 0xBBB3, + 0x6001, 0xCCAC, + 0x6002, 0xCBCB, + 0x6003, 0xE2E4, + 0x6004, 0xE2E6, + 0x6005, 0xE2EA, + 0x6006, 0xE2EB, + 0x600A, 0xE2F7, + 0x600D, 0xE2F4, + 0x600E, 0xD4F5, + 0x600F, 0xE2F3, + 0x6012, 0xC5AD, + 0x6014, 0xD5FA, + 0x6015, 0xC5C2, + 0x6016, 0xB2C0, + 0x6019, 0xE2EF, + 0x601B, 0xE2F2, + 0x601C, 0xC1AF, + 0x601D, 0xCBBC, + 0x6020, 0xB5A1, + 0x6021, 0xE2F9, + 0x6025, 0xBCB1, + 0x6026, 0xE2F1, + 0x6027, 0xD0D4, + 0x6028, 0xD4B9, + 0x6029, 0xE2F5, + 0x602A, 0xB9D6, + 0x602B, 0xE2F6, + 0x602F, 0xC7D3, + 0x6035, 0xE2F0, + 0x603B, 0xD7DC, + 0x603C, 0xEDA1, + 0x603F, 0xE2F8, + 0x6041, 0xEDA5, + 0x6042, 0xE2FE, + 0x6043, 0xCAD1, + 0x604B, 0xC1B5, + 0x604D, 0xBBD0, + 0x6050, 0xBFD6, + 0x6052, 0xBAE3, + 0x6055, 0xCBA1, + 0x6059, 0xEDA6, + 0x605A, 0xEDA3, + 0x605D, 0xEDA2, + 0x6062, 0xBBD6, + 0x6063, 0xEDA7, + 0x6064, 0xD0F4, + 0x6067, 0xEDA4, + 0x6068, 0xBADE, + 0x6069, 0xB6F7, + 0x606A, 0xE3A1, + 0x606B, 0xB6B2, + 0x606C, 0xCCF1, + 0x606D, 0xB9A7, + 0x606F, 0xCFA2, + 0x6070, 0xC7A1, + 0x6073, 0xBFD2, + 0x6076, 0xB6F1, + 0x6078, 0xE2FA, + 0x6079, 0xE2FB, + 0x607A, 0xE2FD, + 0x607B, 0xE2FC, + 0x607C, 0xC4D5, + 0x607D, 0xE3A2, + 0x607F, 0xD3C1, + 0x6083, 0xE3A7, + 0x6084, 0xC7C4, + 0x6089, 0xCFA4, + 0x608C, 0xE3A9, + 0x608D, 0xBAB7, + 0x6092, 0xE3A8, + 0x6094, 0xBBDA, + 0x6096, 0xE3A3, + 0x609A, 0xE3A4, + 0x609B, 0xE3AA, + 0x609D, 0xE3A6, + 0x609F, 0xCEF2, + 0x60A0, 0xD3C6, + 0x60A3, 0xBBBC, + 0x60A6, 0xD4C3, + 0x60A8, 0xC4FA, + 0x60AB, 0xEDA8, + 0x60AC, 0xD0FC, + 0x60AD, 0xE3A5, + 0x60AF, 0xC3F5, + 0x60B1, 0xE3AD, + 0x60B2, 0xB1AF, + 0x60B4, 0xE3B2, + 0x60B8, 0xBCC2, + 0x60BB, 0xE3AC, + 0x60BC, 0xB5BF, + 0x60C5, 0xC7E9, + 0x60C6, 0xE3B0, + 0x60CA, 0xBEAA, + 0x60CB, 0xCDEF, + 0x60D1, 0xBBF3, + 0x60D5, 0xCCE8, + 0x60D8, 0xE3AF, + 0x60DA, 0xE3B1, + 0x60DC, 0xCFA7, + 0x60DD, 0xE3AE, + 0x60DF, 0xCEA9, + 0x60E0, 0xBBDD, + 0x60E6, 0xB5EB, + 0x60E7, 0xBEE5, + 0x60E8, 0xB2D2, + 0x60E9, 0xB3CD, + 0x60EB, 0xB1B9, + 0x60EC, 0xE3AB, + 0x60ED, 0xB2D1, + 0x60EE, 0xB5AC, + 0x60EF, 0xB9DF, + 0x60F0, 0xB6E8, + 0x60F3, 0xCFEB, + 0x60F4, 0xE3B7, + 0x60F6, 0xBBCC, + 0x60F9, 0xC8C7, + 0x60FA, 0xD0CA, + 0x6100, 0xE3B8, + 0x6101, 0xB3EE, + 0x6106, 0xEDA9, + 0x6108, 0xD3FA, + 0x6109, 0xD3E4, + 0x610D, 0xEDAA, + 0x610E, 0xE3B9, + 0x610F, 0xD2E2, + 0x6115, 0xE3B5, + 0x611A, 0xD3DE, + 0x611F, 0xB8D0, + 0x6120, 0xE3B3, + 0x6123, 0xE3B6, + 0x6124, 0xB7DF, + 0x6126, 0xE3B4, + 0x6127, 0xC0A2, + 0x612B, 0xE3BA, + 0x613F, 0xD4B8, + 0x6148, 0xB4C8, + 0x614A, 0xE3BB, + 0x614C, 0xBBC5, + 0x614E, 0xC9F7, + 0x6151, 0xC9E5, + 0x6155, 0xC4BD, + 0x615D, 0xEDAB, + 0x6162, 0xC2FD, + 0x6167, 0xBBDB, + 0x6168, 0xBFAE, + 0x6170, 0xCEBF, + 0x6175, 0xE3BC, + 0x6177, 0xBFB6, + 0x618B, 0xB1EF, + 0x618E, 0xD4F7, + 0x6194, 0xE3BE, + 0x619D, 0xEDAD, + 0x61A7, 0xE3BF, + 0x61A8, 0xBAA9, + 0x61A9, 0xEDAC, + 0x61AC, 0xE3BD, + 0x61B7, 0xE3C0, + 0x61BE, 0xBAB6, + 0x61C2, 0xB6AE, + 0x61C8, 0xD0B8, + 0x61CA, 0xB0C3, + 0x61CB, 0xEDAE, + 0x61D1, 0xEDAF, + 0x61D2, 0xC0C1, + 0x61D4, 0xE3C1, + 0x61E6, 0xC5B3, + 0x61F5, 0xE3C2, + 0x61FF, 0xDCB2, + 0x6206, 0xEDB0, + 0x6208, 0xB8EA, + 0x620A, 0xCEEC, + 0x620B, 0xEAA7, + 0x620C, 0xD0E7, + 0x620D, 0xCAF9, + 0x620E, 0xC8D6, + 0x620F, 0xCFB7, + 0x6210, 0xB3C9, + 0x6211, 0xCED2, + 0x6212, 0xBDE4, + 0x6215, 0xE3DE, + 0x6216, 0xBBF2, + 0x6217, 0xEAA8, + 0x6218, 0xD5BD, + 0x621A, 0xC6DD, + 0x621B, 0xEAA9, + 0x621F, 0xEAAA, + 0x6221, 0xEAAC, + 0x6222, 0xEAAB, + 0x6224, 0xEAAE, + 0x6225, 0xEAAD, + 0x622A, 0xBDD8, + 0x622C, 0xEAAF, + 0x622E, 0xC2BE, + 0x6233, 0xB4C1, + 0x6234, 0xB4F7, + 0x6237, 0xBBA7, + 0x623D, 0xECE6, + 0x623E, 0xECE5, + 0x623F, 0xB7BF, + 0x6240, 0xCBF9, + 0x6241, 0xB1E2, + 0x6243, 0xECE7, + 0x6247, 0xC9C8, + 0x6248, 0xECE8, + 0x6249, 0xECE9, + 0x624B, 0xCAD6, + 0x624C, 0xDED0, + 0x624D, 0xB2C5, + 0x624E, 0xD4FA, + 0x6251, 0xC6CB, + 0x6252, 0xB0C7, + 0x6253, 0xB4F2, + 0x6254, 0xC8D3, + 0x6258, 0xCDD0, + 0x625B, 0xBFB8, + 0x6263, 0xBFDB, + 0x6266, 0xC7A4, + 0x6267, 0xD6B4, + 0x6269, 0xC0A9, + 0x626A, 0xDED1, + 0x626B, 0xC9A8, + 0x626C, 0xD1EF, + 0x626D, 0xC5A4, + 0x626E, 0xB0E7, + 0x626F, 0xB3B6, + 0x6270, 0xC8C5, + 0x6273, 0xB0E2, + 0x6276, 0xB7F6, + 0x6279, 0xC5FA, + 0x627C, 0xB6F3, + 0x627E, 0xD5D2, + 0x627F, 0xB3D0, + 0x6280, 0xBCBC, + 0x6284, 0xB3AD, + 0x6289, 0xBEF1, + 0x628A, 0xB0D1, + 0x6291, 0xD2D6, + 0x6292, 0xCAE3, + 0x6293, 0xD7A5, + 0x6295, 0xCDB6, + 0x6296, 0xB6B6, + 0x6297, 0xBFB9, + 0x6298, 0xD5DB, + 0x629A, 0xB8A7, + 0x629B, 0xC5D7, + 0x629F, 0xDED2, + 0x62A0, 0xBFD9, + 0x62A1, 0xC2D5, + 0x62A2, 0xC7C0, + 0x62A4, 0xBBA4, + 0x62A5, 0xB1A8, + 0x62A8, 0xC5EA, + 0x62AB, 0xC5FB, + 0x62AC, 0xCCA7, + 0x62B1, 0xB1A7, + 0x62B5, 0xB5D6, + 0x62B9, 0xC4A8, + 0x62BB, 0xDED3, + 0x62BC, 0xD1BA, + 0x62BD, 0xB3E9, + 0x62BF, 0xC3F2, + 0x62C2, 0xB7F7, + 0x62C4, 0xD6F4, + 0x62C5, 0xB5A3, + 0x62C6, 0xB2F0, + 0x62C7, 0xC4B4, + 0x62C8, 0xC4E9, + 0x62C9, 0xC0AD, + 0x62CA, 0xDED4, + 0x62CC, 0xB0E8, + 0x62CD, 0xC5C4, + 0x62CE, 0xC1E0, + 0x62D0, 0xB9D5, + 0x62D2, 0xBEDC, + 0x62D3, 0xCDD8, + 0x62D4, 0xB0CE, + 0x62D6, 0xCDCF, + 0x62D7, 0xDED6, + 0x62D8, 0xBED0, + 0x62D9, 0xD7BE, + 0x62DA, 0xDED5, + 0x62DB, 0xD5D0, + 0x62DC, 0xB0DD, + 0x62DF, 0xC4E2, + 0x62E2, 0xC2A3, + 0x62E3, 0xBCF0, + 0x62E5, 0xD3B5, + 0x62E6, 0xC0B9, + 0x62E7, 0xC5A1, + 0x62E8, 0xB2A6, + 0x62E9, 0xD4F1, + 0x62EC, 0xC0A8, + 0x62ED, 0xCAC3, + 0x62EE, 0xDED7, + 0x62EF, 0xD5FC, + 0x62F1, 0xB9B0, + 0x62F3, 0xC8AD, + 0x62F4, 0xCBA9, + 0x62F6, 0xDED9, + 0x62F7, 0xBFBD, + 0x62FC, 0xC6B4, + 0x62FD, 0xD7A7, + 0x62FE, 0xCAB0, + 0x62FF, 0xC4C3, + 0x6301, 0xB3D6, + 0x6302, 0xB9D2, + 0x6307, 0xD6B8, + 0x6308, 0xEAFC, + 0x6309, 0xB0B4, + 0x630E, 0xBFE6, + 0x6311, 0xCCF4, + 0x6316, 0xCDDA, + 0x631A, 0xD6BF, + 0x631B, 0xC2CE, + 0x631D, 0xCECE, + 0x631E, 0xCCA2, + 0x631F, 0xD0AE, + 0x6320, 0xC4D3, + 0x6321, 0xB5B2, + 0x6322, 0xDED8, + 0x6323, 0xD5F5, + 0x6324, 0xBCB7, + 0x6325, 0xBBD3, + 0x6328, 0xB0A4, + 0x632A, 0xC5B2, + 0x632B, 0xB4EC, + 0x632F, 0xD5F1, + 0x6332, 0xEAFD, + 0x6339, 0xDEDA, + 0x633A, 0xCDA6, + 0x633D, 0xCDEC, + 0x6342, 0xCEE6, + 0x6343, 0xDEDC, + 0x6345, 0xCDB1, + 0x6346, 0xC0A6, + 0x6349, 0xD7BD, + 0x634B, 0xDEDB, + 0x634C, 0xB0C6, + 0x634D, 0xBAB4, + 0x634E, 0xC9D3, + 0x634F, 0xC4F3, + 0x6350, 0xBEE8, + 0x6355, 0xB2B6, + 0x635E, 0xC0CC, + 0x635F, 0xCBF0, + 0x6361, 0xBCF1, + 0x6362, 0xBBBB, + 0x6363, 0xB5B7, + 0x6367, 0xC5F5, + 0x6369, 0xDEE6, + 0x636D, 0xDEE3, + 0x636E, 0xBEDD, + 0x6371, 0xDEDF, + 0x6376, 0xB4B7, + 0x6377, 0xBDDD, + 0x637A, 0xDEE0, + 0x637B, 0xC4ED, + 0x6380, 0xCFC6, + 0x6382, 0xB5E0, + 0x6387, 0xB6DE, + 0x6388, 0xCADA, + 0x6389, 0xB5F4, + 0x638A, 0xDEE5, + 0x638C, 0xD5C6, + 0x638E, 0xDEE1, + 0x638F, 0xCCCD, + 0x6390, 0xC6FE, + 0x6392, 0xC5C5, + 0x6396, 0xD2B4, + 0x6398, 0xBEF2, + 0x63A0, 0xC2D3, + 0x63A2, 0xCCBD, + 0x63A3, 0xB3B8, + 0x63A5, 0xBDD3, + 0x63A7, 0xBFD8, + 0x63A8, 0xCDC6, + 0x63A9, 0xD1DA, + 0x63AA, 0xB4EB, + 0x63AC, 0xDEE4, + 0x63AD, 0xDEDD, + 0x63AE, 0xDEE7, + 0x63B0, 0xEAFE, + 0x63B3, 0xC2B0, + 0x63B4, 0xDEE2, + 0x63B7, 0xD6C0, + 0x63B8, 0xB5A7, + 0x63BA, 0xB2F4, + 0x63BC, 0xDEE8, + 0x63BE, 0xDEF2, + 0x63C4, 0xDEED, + 0x63C6, 0xDEF1, + 0x63C9, 0xC8E0, + 0x63CD, 0xD7E1, + 0x63CE, 0xDEEF, + 0x63CF, 0xC3E8, + 0x63D0, 0xCCE1, + 0x63D2, 0xB2E5, + 0x63D6, 0xD2BE, + 0x63DE, 0xDEEE, + 0x63E0, 0xDEEB, + 0x63E1, 0xCED5, + 0x63E3, 0xB4A7, + 0x63E9, 0xBFAB, + 0x63EA, 0xBEBE, + 0x63ED, 0xBDD2, + 0x63F2, 0xDEE9, + 0x63F4, 0xD4AE, + 0x63F6, 0xDEDE, + 0x63F8, 0xDEEA, + 0x63FD, 0xC0BF, + 0x63FF, 0xDEEC, + 0x6400, 0xB2F3, + 0x6401, 0xB8E9, + 0x6402, 0xC2A7, + 0x6405, 0xBDC1, + 0x640B, 0xDEF5, + 0x640C, 0xDEF8, + 0x640F, 0xB2AB, + 0x6410, 0xB4A4, + 0x6413, 0xB4EA, + 0x6414, 0xC9A6, + 0x641B, 0xDEF6, + 0x641C, 0xCBD1, + 0x641E, 0xB8E3, + 0x6420, 0xDEF7, + 0x6421, 0xDEFA, + 0x6426, 0xDEF9, + 0x642A, 0xCCC2, + 0x642C, 0xB0E1, + 0x642D, 0xB4EE, + 0x6434, 0xE5BA, + 0x643A, 0xD0AF, + 0x643D, 0xB2EB, + 0x643F, 0xEBA1, + 0x6441, 0xDEF4, + 0x6444, 0xC9E3, + 0x6445, 0xDEF3, + 0x6446, 0xB0DA, + 0x6447, 0xD2A1, + 0x6448, 0xB1F7, + 0x644A, 0xCCAF, + 0x6452, 0xDEF0, + 0x6454, 0xCBA4, + 0x6458, 0xD5AA, + 0x645E, 0xDEFB, + 0x6467, 0xB4DD, + 0x6469, 0xC4A6, + 0x646D, 0xDEFD, + 0x6478, 0xC3FE, + 0x6479, 0xC4A1, + 0x647A, 0xDFA1, + 0x6482, 0xC1CC, + 0x6484, 0xDEFC, + 0x6485, 0xBEEF, + 0x6487, 0xC6B2, + 0x6491, 0xB3C5, + 0x6492, 0xC8F6, + 0x6495, 0xCBBA, + 0x6496, 0xDEFE, + 0x6499, 0xDFA4, + 0x649E, 0xD7B2, + 0x64A4, 0xB3B7, + 0x64A9, 0xC1C3, + 0x64AC, 0xC7CB, + 0x64AD, 0xB2A5, + 0x64AE, 0xB4E9, + 0x64B0, 0xD7AB, + 0x64B5, 0xC4EC, + 0x64B7, 0xDFA2, + 0x64B8, 0xDFA3, + 0x64BA, 0xDFA5, + 0x64BC, 0xBAB3, + 0x64C0, 0xDFA6, + 0x64C2, 0xC0DE, + 0x64C5, 0xC9C3, + 0x64CD, 0xB2D9, + 0x64CE, 0xC7E6, + 0x64D0, 0xDFA7, + 0x64D2, 0xC7DC, + 0x64D7, 0xDFA8, + 0x64D8, 0xEBA2, + 0x64DE, 0xCBD3, + 0x64E2, 0xDFAA, + 0x64E4, 0xDFA9, + 0x64E6, 0xB2C1, + 0x6500, 0xC5CA, + 0x6509, 0xDFAB, + 0x6512, 0xD4DC, + 0x6518, 0xC8C1, + 0x6525, 0xDFAC, + 0x652B, 0xBEF0, + 0x652E, 0xDFAD, + 0x652F, 0xD6A7, + 0x6534, 0xEAB7, + 0x6535, 0xEBB6, + 0x6536, 0xCAD5, + 0x6538, 0xD8FC, + 0x6539, 0xB8C4, + 0x653B, 0xB9A5, + 0x653E, 0xB7C5, + 0x653F, 0xD5FE, + 0x6545, 0xB9CA, + 0x6548, 0xD0A7, + 0x6549, 0xF4CD, + 0x654C, 0xB5D0, + 0x654F, 0xC3F4, + 0x6551, 0xBEC8, + 0x6555, 0xEBB7, + 0x6556, 0xB0BD, + 0x6559, 0xBDCC, + 0x655B, 0xC1B2, + 0x655D, 0xB1D6, + 0x655E, 0xB3A8, + 0x6562, 0xB8D2, + 0x6563, 0xC9A2, + 0x6566, 0xB6D8, + 0x656B, 0xEBB8, + 0x656C, 0xBEB4, + 0x6570, 0xCAFD, + 0x6572, 0xC7C3, + 0x6574, 0xD5FB, + 0x6577, 0xB7F3, + 0x6587, 0xCEC4, + 0x658B, 0xD5AB, + 0x658C, 0xB1F3, + 0x6590, 0xECB3, + 0x6591, 0xB0DF, + 0x6593, 0xECB5, + 0x6597, 0xB6B7, + 0x6599, 0xC1CF, + 0x659B, 0xF5FA, + 0x659C, 0xD0B1, + 0x659F, 0xD5E5, + 0x65A1, 0xCED3, + 0x65A4, 0xBDEF, + 0x65A5, 0xB3E2, + 0x65A7, 0xB8AB, + 0x65A9, 0xD5B6, + 0x65AB, 0xEDBD, + 0x65AD, 0xB6CF, + 0x65AF, 0xCBB9, + 0x65B0, 0xD0C2, + 0x65B9, 0xB7BD, + 0x65BC, 0xECB6, + 0x65BD, 0xCAA9, + 0x65C1, 0xC5D4, + 0x65C3, 0xECB9, + 0x65C4, 0xECB8, + 0x65C5, 0xC2C3, + 0x65C6, 0xECB7, + 0x65CB, 0xD0FD, + 0x65CC, 0xECBA, + 0x65CE, 0xECBB, + 0x65CF, 0xD7E5, + 0x65D2, 0xECBC, + 0x65D6, 0xECBD, + 0x65D7, 0xC6EC, + 0x65E0, 0xCEDE, + 0x65E2, 0xBCC8, + 0x65E5, 0xC8D5, + 0x65E6, 0xB5A9, + 0x65E7, 0xBEC9, + 0x65E8, 0xD6BC, + 0x65E9, 0xD4E7, + 0x65EC, 0xD1AE, + 0x65ED, 0xD0F1, + 0x65EE, 0xEAB8, + 0x65EF, 0xEAB9, + 0x65F0, 0xEABA, + 0x65F1, 0xBAB5, + 0x65F6, 0xCAB1, + 0x65F7, 0xBFF5, + 0x65FA, 0xCDFA, + 0x6600, 0xEAC0, + 0x6602, 0xB0BA, + 0x6603, 0xEABE, + 0x6606, 0xC0A5, + 0x660A, 0xEABB, + 0x660C, 0xB2FD, + 0x660E, 0xC3F7, + 0x660F, 0xBBE8, + 0x6613, 0xD2D7, + 0x6614, 0xCEF4, + 0x6615, 0xEABF, + 0x6619, 0xEABC, + 0x661D, 0xEAC3, + 0x661F, 0xD0C7, + 0x6620, 0xD3B3, + 0x6625, 0xB4BA, + 0x6627, 0xC3C1, + 0x6628, 0xD7F2, + 0x662D, 0xD5D1, + 0x662F, 0xCAC7, + 0x6631, 0xEAC5, + 0x6634, 0xEAC4, + 0x6635, 0xEAC7, + 0x6636, 0xEAC6, + 0x663C, 0xD6E7, + 0x663E, 0xCFD4, + 0x6641, 0xEACB, + 0x6643, 0xBBCE, + 0x664B, 0xBDFA, + 0x664C, 0xC9CE, + 0x664F, 0xEACC, + 0x6652, 0xC9B9, + 0x6653, 0xCFFE, + 0x6654, 0xEACA, + 0x6655, 0xD4CE, + 0x6656, 0xEACD, + 0x6657, 0xEACF, + 0x665A, 0xCDED, + 0x665F, 0xEAC9, + 0x6661, 0xEACE, + 0x6664, 0xCEEE, + 0x6666, 0xBBDE, + 0x6668, 0xB3BF, + 0x666E, 0xC6D5, + 0x666F, 0xBEB0, + 0x6670, 0xCEFA, + 0x6674, 0xC7E7, + 0x6676, 0xBEA7, + 0x6677, 0xEAD0, + 0x667A, 0xD6C7, + 0x667E, 0xC1C0, + 0x6682, 0xD4DD, + 0x6684, 0xEAD1, + 0x6687, 0xCFBE, + 0x668C, 0xEAD2, + 0x6691, 0xCAEE, + 0x6696, 0xC5AF, + 0x6697, 0xB0B5, + 0x669D, 0xEAD4, + 0x66A7, 0xEAD3, + 0x66A8, 0xF4DF, + 0x66AE, 0xC4BA, + 0x66B4, 0xB1A9, + 0x66B9, 0xE5DF, + 0x66BE, 0xEAD5, + 0x66D9, 0xCAEF, + 0x66DB, 0xEAD6, + 0x66DC, 0xEAD7, + 0x66DD, 0xC6D8, + 0x66E6, 0xEAD8, + 0x66E9, 0xEAD9, + 0x66F0, 0xD4BB, + 0x66F2, 0xC7FA, + 0x66F3, 0xD2B7, + 0x66F4, 0xB8FC, + 0x66F7, 0xEAC2, + 0x66F9, 0xB2DC, + 0x66FC, 0xC2FC, + 0x66FE, 0xD4F8, + 0x66FF, 0xCCE6, + 0x6700, 0xD7EE, + 0x6708, 0xD4C2, + 0x6709, 0xD3D0, + 0x670A, 0xEBC3, + 0x670B, 0xC5F3, + 0x670D, 0xB7FE, + 0x6710, 0xEBD4, + 0x6714, 0xCBB7, + 0x6715, 0xEBDE, + 0x6717, 0xC0CA, + 0x671B, 0xCDFB, + 0x671D, 0xB3AF, + 0x671F, 0xC6DA, + 0x6726, 0xEBFC, + 0x6728, 0xC4BE, + 0x672A, 0xCEB4, + 0x672B, 0xC4A9, + 0x672C, 0xB1BE, + 0x672D, 0xD4FD, + 0x672F, 0xCAF5, + 0x6731, 0xD6EC, + 0x6734, 0xC6D3, + 0x6735, 0xB6E4, + 0x673A, 0xBBFA, + 0x673D, 0xD0E0, + 0x6740, 0xC9B1, + 0x6742, 0xD4D3, + 0x6743, 0xC8A8, + 0x6746, 0xB8CB, + 0x6748, 0xE8BE, + 0x6749, 0xC9BC, + 0x674C, 0xE8BB, + 0x674E, 0xC0EE, + 0x674F, 0xD0D3, + 0x6750, 0xB2C4, + 0x6751, 0xB4E5, + 0x6753, 0xE8BC, + 0x6756, 0xD5C8, + 0x675C, 0xB6C5, + 0x675E, 0xE8BD, + 0x675F, 0xCAF8, + 0x6760, 0xB8DC, + 0x6761, 0xCCF5, + 0x6765, 0xC0B4, + 0x6768, 0xD1EE, + 0x6769, 0xE8BF, + 0x676A, 0xE8C2, + 0x676D, 0xBABC, + 0x676F, 0xB1AD, + 0x6770, 0xBDDC, + 0x6772, 0xEABD, + 0x6773, 0xE8C3, + 0x6775, 0xE8C6, + 0x6777, 0xE8CB, + 0x677C, 0xE8CC, + 0x677E, 0xCBC9, + 0x677F, 0xB0E5, + 0x6781, 0xBCAB, + 0x6784, 0xB9B9, + 0x6787, 0xE8C1, + 0x6789, 0xCDF7, + 0x678B, 0xE8CA, + 0x6790, 0xCEF6, + 0x6795, 0xD5ED, + 0x6797, 0xC1D6, + 0x6798, 0xE8C4, + 0x679A, 0xC3B6, + 0x679C, 0xB9FB, + 0x679D, 0xD6A6, + 0x679E, 0xE8C8, + 0x67A2, 0xCAE0, + 0x67A3, 0xD4E6, + 0x67A5, 0xE8C0, + 0x67A7, 0xE8C5, + 0x67A8, 0xE8C7, + 0x67AA, 0xC7B9, + 0x67AB, 0xB7E3, + 0x67AD, 0xE8C9, + 0x67AF, 0xBFDD, + 0x67B0, 0xE8D2, + 0x67B3, 0xE8D7, + 0x67B5, 0xE8D5, + 0x67B6, 0xBCDC, + 0x67B7, 0xBCCF, + 0x67B8, 0xE8DB, + 0x67C1, 0xE8DE, + 0x67C3, 0xE8DA, + 0x67C4, 0xB1FA, + 0x67CF, 0xB0D8, + 0x67D0, 0xC4B3, + 0x67D1, 0xB8CC, + 0x67D2, 0xC6E2, + 0x67D3, 0xC8BE, + 0x67D4, 0xC8E1, + 0x67D8, 0xE8CF, + 0x67D9, 0xE8D4, + 0x67DA, 0xE8D6, + 0x67DC, 0xB9F1, + 0x67DD, 0xE8D8, + 0x67DE, 0xD7F5, + 0x67E0, 0xC4FB, + 0x67E2, 0xE8DC, + 0x67E5, 0xB2E9, + 0x67E9, 0xE8D1, + 0x67EC, 0xBCED, + 0x67EF, 0xBFC2, + 0x67F0, 0xE8CD, + 0x67F1, 0xD6F9, + 0x67F3, 0xC1F8, + 0x67F4, 0xB2F1, + 0x67FD, 0xE8DF, + 0x67FF, 0xCAC1, + 0x6800, 0xE8D9, + 0x6805, 0xD5A4, + 0x6807, 0xB1EA, + 0x6808, 0xD5BB, + 0x6809, 0xE8CE, + 0x680A, 0xE8D0, + 0x680B, 0xB6B0, + 0x680C, 0xE8D3, + 0x680E, 0xE8DD, + 0x680F, 0xC0B8, + 0x6811, 0xCAF7, + 0x6813, 0xCBA8, + 0x6816, 0xC6DC, + 0x6817, 0xC0F5, + 0x681D, 0xE8E9, + 0x6821, 0xD0A3, + 0x6829, 0xE8F2, + 0x682A, 0xD6EA, + 0x6832, 0xE8E0, + 0x6833, 0xE8E1, + 0x6837, 0xD1F9, + 0x6838, 0xBACB, + 0x6839, 0xB8F9, + 0x683C, 0xB8F1, + 0x683D, 0xD4D4, + 0x683E, 0xE8EF, + 0x6840, 0xE8EE, + 0x6841, 0xE8EC, + 0x6842, 0xB9F0, + 0x6843, 0xCCD2, + 0x6844, 0xE8E6, + 0x6845, 0xCEA6, + 0x6846, 0xBFF2, + 0x6848, 0xB0B8, + 0x6849, 0xE8F1, + 0x684A, 0xE8F0, + 0x684C, 0xD7C0, + 0x684E, 0xE8E4, + 0x6850, 0xCDA9, + 0x6851, 0xC9A3, + 0x6853, 0xBBB8, + 0x6854, 0xBDDB, + 0x6855, 0xE8EA, + 0x6860, 0xE8E2, + 0x6861, 0xE8E3, + 0x6862, 0xE8E5, + 0x6863, 0xB5B5, + 0x6864, 0xE8E7, + 0x6865, 0xC7C5, + 0x6866, 0xE8EB, + 0x6867, 0xE8ED, + 0x6868, 0xBDB0, + 0x6869, 0xD7AE, + 0x686B, 0xE8F8, + 0x6874, 0xE8F5, + 0x6876, 0xCDB0, + 0x6877, 0xE8F6, + 0x6881, 0xC1BA, + 0x6883, 0xE8E8, + 0x6885, 0xC3B7, + 0x6886, 0xB0F0, + 0x688F, 0xE8F4, + 0x6893, 0xE8F7, + 0x6897, 0xB9A3, + 0x68A2, 0xC9D2, + 0x68A6, 0xC3CE, + 0x68A7, 0xCEE0, + 0x68A8, 0xC0E6, + 0x68AD, 0xCBF3, + 0x68AF, 0xCCDD, + 0x68B0, 0xD0B5, + 0x68B3, 0xCAE1, + 0x68B5, 0xE8F3, + 0x68C0, 0xBCEC, + 0x68C2, 0xE8F9, + 0x68C9, 0xC3DE, + 0x68CB, 0xC6E5, + 0x68CD, 0xB9F7, + 0x68D2, 0xB0F4, + 0x68D5, 0xD7D8, + 0x68D8, 0xBCAC, + 0x68DA, 0xC5EF, + 0x68E0, 0xCCC4, + 0x68E3, 0xE9A6, + 0x68EE, 0xC9AD, + 0x68F0, 0xE9A2, + 0x68F1, 0xC0E2, + 0x68F5, 0xBFC3, + 0x68F9, 0xE8FE, + 0x68FA, 0xB9D7, + 0x68FC, 0xE8FB, + 0x6901, 0xE9A4, + 0x6905, 0xD2CE, + 0x690B, 0xE9A3, + 0x690D, 0xD6B2, + 0x690E, 0xD7B5, + 0x6910, 0xE9A7, + 0x6912, 0xBDB7, + 0x691F, 0xE8FC, + 0x6920, 0xE8FD, + 0x6924, 0xE9A1, + 0x692D, 0xCDD6, + 0x6930, 0xD2AC, + 0x6934, 0xE9B2, + 0x6939, 0xE9A9, + 0x693D, 0xB4AA, + 0x693F, 0xB4BB, + 0x6942, 0xE9AB, + 0x6954, 0xD0A8, + 0x6957, 0xE9A5, + 0x695A, 0xB3FE, + 0x695D, 0xE9AC, + 0x695E, 0xC0E3, + 0x6960, 0xE9AA, + 0x6963, 0xE9B9, + 0x6966, 0xE9B8, + 0x696B, 0xE9AE, + 0x696E, 0xE8FA, + 0x6971, 0xE9A8, + 0x6977, 0xBFAC, + 0x6978, 0xE9B1, + 0x6979, 0xE9BA, + 0x697C, 0xC2A5, + 0x6980, 0xE9AF, + 0x6982, 0xB8C5, + 0x6984, 0xE9AD, + 0x6986, 0xD3DC, + 0x6987, 0xE9B4, + 0x6988, 0xE9B5, + 0x6989, 0xE9B7, + 0x698D, 0xE9C7, + 0x6994, 0xC0C6, + 0x6995, 0xE9C5, + 0x6998, 0xE9B0, + 0x699B, 0xE9BB, + 0x699C, 0xB0F1, + 0x69A7, 0xE9BC, + 0x69A8, 0xD5A5, + 0x69AB, 0xE9BE, + 0x69AD, 0xE9BF, + 0x69B1, 0xE9C1, + 0x69B4, 0xC1F1, + 0x69B7, 0xC8B6, + 0x69BB, 0xE9BD, + 0x69C1, 0xE9C2, + 0x69CA, 0xE9C3, + 0x69CC, 0xE9B3, + 0x69CE, 0xE9B6, + 0x69D0, 0xBBB1, + 0x69D4, 0xE9C0, + 0x69DB, 0xBCF7, + 0x69DF, 0xE9C4, + 0x69E0, 0xE9C6, + 0x69ED, 0xE9CA, + 0x69F2, 0xE9CE, + 0x69FD, 0xB2DB, + 0x69FF, 0xE9C8, + 0x6A0A, 0xB7AE, + 0x6A17, 0xE9CB, + 0x6A18, 0xE9CC, + 0x6A1F, 0xD5C1, + 0x6A21, 0xC4A3, + 0x6A28, 0xE9D8, + 0x6A2A, 0xBAE1, + 0x6A2F, 0xE9C9, + 0x6A31, 0xD3A3, + 0x6A35, 0xE9D4, + 0x6A3D, 0xE9D7, + 0x6A3E, 0xE9D0, + 0x6A44, 0xE9CF, + 0x6A47, 0xC7C1, + 0x6A50, 0xE9D2, + 0x6A58, 0xE9D9, + 0x6A59, 0xB3C8, + 0x6A5B, 0xE9D3, + 0x6A61, 0xCFF0, + 0x6A65, 0xE9CD, + 0x6A71, 0xB3F7, + 0x6A79, 0xE9D6, + 0x6A7C, 0xE9DA, + 0x6A80, 0xCCB4, + 0x6A84, 0xCFAD, + 0x6A8E, 0xE9D5, + 0x6A90, 0xE9DC, + 0x6A91, 0xE9DB, + 0x6A97, 0xE9DE, + 0x6AA0, 0xE9D1, + 0x6AA9, 0xE9DD, + 0x6AAB, 0xE9DF, + 0x6AAC, 0xC3CA, + 0x6B20, 0xC7B7, + 0x6B21, 0xB4CE, + 0x6B22, 0xBBB6, + 0x6B23, 0xD0C0, + 0x6B24, 0xECA3, + 0x6B27, 0xC5B7, + 0x6B32, 0xD3FB, + 0x6B37, 0xECA4, + 0x6B39, 0xECA5, + 0x6B3A, 0xC6DB, + 0x6B3E, 0xBFEE, + 0x6B43, 0xECA6, + 0x6B46, 0xECA7, + 0x6B47, 0xD0AA, + 0x6B49, 0xC7B8, + 0x6B4C, 0xB8E8, + 0x6B59, 0xECA8, + 0x6B62, 0xD6B9, + 0x6B63, 0xD5FD, + 0x6B64, 0xB4CB, + 0x6B65, 0xB2BD, + 0x6B66, 0xCEE4, + 0x6B67, 0xC6E7, + 0x6B6A, 0xCDE1, + 0x6B79, 0xB4F5, + 0x6B7B, 0xCBC0, + 0x6B7C, 0xBCDF, + 0x6B81, 0xE9E2, + 0x6B82, 0xE9E3, + 0x6B83, 0xD1EA, + 0x6B84, 0xE9E5, + 0x6B86, 0xB4F9, + 0x6B87, 0xE9E4, + 0x6B89, 0xD1B3, + 0x6B8A, 0xCAE2, + 0x6B8B, 0xB2D0, + 0x6B8D, 0xE9E8, + 0x6B92, 0xE9E6, + 0x6B93, 0xE9E7, + 0x6B96, 0xD6B3, + 0x6B9A, 0xE9E9, + 0x6B9B, 0xE9EA, + 0x6BA1, 0xE9EB, + 0x6BAA, 0xE9EC, + 0x6BB3, 0xECAF, + 0x6BB4, 0xC5B9, + 0x6BB5, 0xB6CE, + 0x6BB7, 0xD2F3, + 0x6BBF, 0xB5EE, + 0x6BC1, 0xBBD9, + 0x6BC2, 0xECB1, + 0x6BC5, 0xD2E3, + 0x6BCB, 0xCEE3, + 0x6BCD, 0xC4B8, + 0x6BCF, 0xC3BF, + 0x6BD2, 0xB6BE, + 0x6BD3, 0xD8B9, + 0x6BD4, 0xB1C8, + 0x6BD5, 0xB1CF, + 0x6BD6, 0xB1D1, + 0x6BD7, 0xC5FE, + 0x6BD9, 0xB1D0, + 0x6BDB, 0xC3AB, + 0x6BE1, 0xD5B1, + 0x6BEA, 0xEBA4, + 0x6BEB, 0xBAC1, + 0x6BEF, 0xCCBA, + 0x6BF3, 0xEBA5, + 0x6BF5, 0xEBA7, + 0x6BF9, 0xEBA8, + 0x6BFD, 0xEBA6, + 0x6C05, 0xEBA9, + 0x6C06, 0xEBAB, + 0x6C07, 0xEBAA, + 0x6C0D, 0xEBAC, + 0x6C0F, 0xCACF, + 0x6C10, 0xD8B5, + 0x6C11, 0xC3F1, + 0x6C13, 0xC3A5, + 0x6C14, 0xC6F8, + 0x6C15, 0xEBAD, + 0x6C16, 0xC4CA, + 0x6C18, 0xEBAE, + 0x6C19, 0xEBAF, + 0x6C1A, 0xEBB0, + 0x6C1B, 0xB7D5, + 0x6C1F, 0xB7FA, + 0x6C21, 0xEBB1, + 0x6C22, 0xC7E2, + 0x6C24, 0xEBB3, + 0x6C26, 0xBAA4, + 0x6C27, 0xD1F5, + 0x6C28, 0xB0B1, + 0x6C29, 0xEBB2, + 0x6C2A, 0xEBB4, + 0x6C2E, 0xB5AA, + 0x6C2F, 0xC2C8, + 0x6C30, 0xC7E8, + 0x6C32, 0xEBB5, + 0x6C34, 0xCBAE, + 0x6C35, 0xE3DF, + 0x6C38, 0xD3C0, + 0x6C3D, 0xD9DB, + 0x6C40, 0xCDA1, + 0x6C41, 0xD6AD, + 0x6C42, 0xC7F3, + 0x6C46, 0xD9E0, + 0x6C47, 0xBBE3, + 0x6C49, 0xBABA, + 0x6C4A, 0xE3E2, + 0x6C50, 0xCFAB, + 0x6C54, 0xE3E0, + 0x6C55, 0xC9C7, + 0x6C57, 0xBAB9, + 0x6C5B, 0xD1B4, + 0x6C5C, 0xE3E1, + 0x6C5D, 0xC8EA, + 0x6C5E, 0xB9AF, + 0x6C5F, 0xBDAD, + 0x6C60, 0xB3D8, + 0x6C61, 0xCEDB, + 0x6C64, 0xCCC0, + 0x6C68, 0xE3E8, + 0x6C69, 0xE3E9, + 0x6C6A, 0xCDF4, + 0x6C70, 0xCCAD, + 0x6C72, 0xBCB3, + 0x6C74, 0xE3EA, + 0x6C76, 0xE3EB, + 0x6C79, 0xD0DA, + 0x6C7D, 0xC6FB, + 0x6C7E, 0xB7DA, + 0x6C81, 0xC7DF, + 0x6C82, 0xD2CA, + 0x6C83, 0xCED6, + 0x6C85, 0xE3E4, + 0x6C86, 0xE3EC, + 0x6C88, 0xC9F2, + 0x6C89, 0xB3C1, + 0x6C8C, 0xE3E7, + 0x6C8F, 0xC6E3, + 0x6C90, 0xE3E5, + 0x6C93, 0xEDB3, + 0x6C94, 0xE3E6, + 0x6C99, 0xC9B3, + 0x6C9B, 0xC5E6, + 0x6C9F, 0xB9B5, + 0x6CA1, 0xC3BB, + 0x6CA3, 0xE3E3, + 0x6CA4, 0xC5BD, + 0x6CA5, 0xC1A4, + 0x6CA6, 0xC2D9, + 0x6CA7, 0xB2D7, + 0x6CA9, 0xE3ED, + 0x6CAA, 0xBBA6, + 0x6CAB, 0xC4AD, + 0x6CAD, 0xE3F0, + 0x6CAE, 0xBEDA, + 0x6CB1, 0xE3FB, + 0x6CB2, 0xE3F5, + 0x6CB3, 0xBAD3, + 0x6CB8, 0xB7D0, + 0x6CB9, 0xD3CD, + 0x6CBB, 0xD6CE, + 0x6CBC, 0xD5D3, + 0x6CBD, 0xB9C1, + 0x6CBE, 0xD5B4, + 0x6CBF, 0xD1D8, + 0x6CC4, 0xD0B9, + 0x6CC5, 0xC7F6, + 0x6CC9, 0xC8AA, + 0x6CCA, 0xB2B4, + 0x6CCC, 0xC3DA, + 0x6CD0, 0xE3EE, + 0x6CD3, 0xE3FC, + 0x6CD4, 0xE3EF, + 0x6CD5, 0xB7A8, + 0x6CD6, 0xE3F7, + 0x6CD7, 0xE3F4, + 0x6CDB, 0xB7BA, + 0x6CDE, 0xC5A2, + 0x6CE0, 0xE3F6, + 0x6CE1, 0xC5DD, + 0x6CE2, 0xB2A8, + 0x6CE3, 0xC6FC, + 0x6CE5, 0xC4E0, + 0x6CE8, 0xD7A2, + 0x6CEA, 0xC0E1, + 0x6CEB, 0xE3F9, + 0x6CEE, 0xE3FA, + 0x6CEF, 0xE3FD, + 0x6CF0, 0xCCA9, + 0x6CF1, 0xE3F3, + 0x6CF3, 0xD3BE, + 0x6CF5, 0xB1C3, + 0x6CF6, 0xEDB4, + 0x6CF7, 0xE3F1, + 0x6CF8, 0xE3F2, + 0x6CFA, 0xE3F8, + 0x6CFB, 0xD0BA, + 0x6CFC, 0xC6C3, + 0x6CFD, 0xD4F3, + 0x6CFE, 0xE3FE, + 0x6D01, 0xBDE0, + 0x6D04, 0xE4A7, + 0x6D07, 0xE4A6, + 0x6D0B, 0xD1F3, + 0x6D0C, 0xE4A3, + 0x6D0E, 0xE4A9, + 0x6D12, 0xC8F7, + 0x6D17, 0xCFB4, + 0x6D19, 0xE4A8, + 0x6D1A, 0xE4AE, + 0x6D1B, 0xC2E5, + 0x6D1E, 0xB6B4, + 0x6D25, 0xBDF2, + 0x6D27, 0xE4A2, + 0x6D2A, 0xBAE9, + 0x6D2B, 0xE4AA, + 0x6D2E, 0xE4AC, + 0x6D31, 0xB6FD, + 0x6D32, 0xD6DE, + 0x6D33, 0xE4B2, + 0x6D35, 0xE4AD, + 0x6D39, 0xE4A1, + 0x6D3B, 0xBBEE, + 0x6D3C, 0xCDDD, + 0x6D3D, 0xC7A2, + 0x6D3E, 0xC5C9, + 0x6D41, 0xC1F7, + 0x6D43, 0xE4A4, + 0x6D45, 0xC7B3, + 0x6D46, 0xBDAC, + 0x6D47, 0xBDBD, + 0x6D48, 0xE4A5, + 0x6D4A, 0xD7C7, + 0x6D4B, 0xB2E2, + 0x6D4D, 0xE4AB, + 0x6D4E, 0xBCC3, + 0x6D4F, 0xE4AF, + 0x6D51, 0xBBEB, + 0x6D52, 0xE4B0, + 0x6D53, 0xC5A8, + 0x6D54, 0xE4B1, + 0x6D59, 0xD5E3, + 0x6D5A, 0xBFA3, + 0x6D5C, 0xE4BA, + 0x6D5E, 0xE4B7, + 0x6D60, 0xE4BB, + 0x6D63, 0xE4BD, + 0x6D66, 0xC6D6, + 0x6D69, 0xBAC6, + 0x6D6A, 0xC0CB, + 0x6D6E, 0xB8A1, + 0x6D6F, 0xE4B4, + 0x6D74, 0xD4A1, + 0x6D77, 0xBAA3, + 0x6D78, 0xBDFE, + 0x6D7C, 0xE4BC, + 0x6D82, 0xCDBF, + 0x6D85, 0xC4F9, + 0x6D88, 0xCFFB, + 0x6D89, 0xC9E6, + 0x6D8C, 0xD3BF, + 0x6D8E, 0xCFD1, + 0x6D91, 0xE4B3, + 0x6D93, 0xE4B8, + 0x6D94, 0xE4B9, + 0x6D95, 0xCCE9, + 0x6D9B, 0xCCCE, + 0x6D9D, 0xC0D4, + 0x6D9E, 0xE4B5, + 0x6D9F, 0xC1B0, + 0x6DA0, 0xE4B6, + 0x6DA1, 0xCED0, + 0x6DA3, 0xBBC1, + 0x6DA4, 0xB5D3, + 0x6DA6, 0xC8F3, + 0x6DA7, 0xBDA7, + 0x6DA8, 0xD5C7, + 0x6DA9, 0xC9AC, + 0x6DAA, 0xB8A2, + 0x6DAB, 0xE4CA, + 0x6DAE, 0xE4CC, + 0x6DAF, 0xD1C4, + 0x6DB2, 0xD2BA, + 0x6DB5, 0xBAAD, + 0x6DB8, 0xBAD4, + 0x6DBF, 0xE4C3, + 0x6DC0, 0xB5ED, + 0x6DC4, 0xD7CD, + 0x6DC5, 0xE4C0, + 0x6DC6, 0xCFFD, + 0x6DC7, 0xE4BF, + 0x6DCB, 0xC1DC, + 0x6DCC, 0xCCCA, + 0x6DD1, 0xCAE7, + 0x6DD6, 0xC4D7, + 0x6DD8, 0xCCD4, + 0x6DD9, 0xE4C8, + 0x6DDD, 0xE4C7, + 0x6DDE, 0xE4C1, + 0x6DE0, 0xE4C4, + 0x6DE1, 0xB5AD, + 0x6DE4, 0xD3D9, + 0x6DE6, 0xE4C6, + 0x6DEB, 0xD2F9, + 0x6DEC, 0xB4E3, + 0x6DEE, 0xBBB4, + 0x6DF1, 0xC9EE, + 0x6DF3, 0xB4BE, + 0x6DF7, 0xBBEC, + 0x6DF9, 0xD1CD, + 0x6DFB, 0xCCED, + 0x6DFC, 0xEDB5, + 0x6E05, 0xC7E5, + 0x6E0A, 0xD4A8, + 0x6E0C, 0xE4CB, + 0x6E0D, 0xD7D5, + 0x6E0E, 0xE4C2, + 0x6E10, 0xBDA5, + 0x6E11, 0xE4C5, + 0x6E14, 0xD3E6, + 0x6E16, 0xE4C9, + 0x6E17, 0xC9F8, + 0x6E1A, 0xE4BE, + 0x6E1D, 0xD3E5, + 0x6E20, 0xC7FE, + 0x6E21, 0xB6C9, + 0x6E23, 0xD4FC, + 0x6E24, 0xB2B3, + 0x6E25, 0xE4D7, + 0x6E29, 0xCEC2, + 0x6E2B, 0xE4CD, + 0x6E2D, 0xCEBC, + 0x6E2F, 0xB8DB, + 0x6E32, 0xE4D6, + 0x6E34, 0xBFCA, + 0x6E38, 0xD3CE, + 0x6E3A, 0xC3EC, + 0x6E43, 0xC5C8, + 0x6E44, 0xE4D8, + 0x6E4D, 0xCDC4, + 0x6E4E, 0xE4CF, + 0x6E53, 0xE4D4, + 0x6E54, 0xE4D5, + 0x6E56, 0xBAFE, + 0x6E58, 0xCFE6, + 0x6E5B, 0xD5BF, + 0x6E5F, 0xE4D2, + 0x6E6B, 0xE4D0, + 0x6E6E, 0xE4CE, + 0x6E7E, 0xCDE5, + 0x6E7F, 0xCAAA, + 0x6E83, 0xC0A3, + 0x6E85, 0xBDA6, + 0x6E86, 0xE4D3, + 0x6E89, 0xB8C8, + 0x6E8F, 0xE4E7, + 0x6E90, 0xD4B4, + 0x6E98, 0xE4DB, + 0x6E9C, 0xC1EF, + 0x6E9F, 0xE4E9, + 0x6EA2, 0xD2E7, + 0x6EA5, 0xE4DF, + 0x6EA7, 0xE4E0, + 0x6EAA, 0xCFAA, + 0x6EAF, 0xCBDD, + 0x6EB1, 0xE4DA, + 0x6EB2, 0xE4D1, + 0x6EB4, 0xE4E5, + 0x6EB6, 0xC8DC, + 0x6EB7, 0xE4E3, + 0x6EBA, 0xC4E7, + 0x6EBB, 0xE4E2, + 0x6EBD, 0xE4E1, + 0x6EC1, 0xB3FC, + 0x6EC2, 0xE4E8, + 0x6EC7, 0xB5E1, + 0x6ECB, 0xD7CC, + 0x6ECF, 0xE4E6, + 0x6ED1, 0xBBAC, + 0x6ED3, 0xD7D2, + 0x6ED4, 0xCCCF, + 0x6ED5, 0xEBF8, + 0x6ED7, 0xE4E4, + 0x6EDA, 0xB9F6, + 0x6EDE, 0xD6CD, + 0x6EDF, 0xE4D9, + 0x6EE0, 0xE4DC, + 0x6EE1, 0xC2FA, + 0x6EE2, 0xE4DE, + 0x6EE4, 0xC2CB, + 0x6EE5, 0xC0C4, + 0x6EE6, 0xC2D0, + 0x6EE8, 0xB1F5, + 0x6EE9, 0xCCB2, + 0x6EF4, 0xB5CE, + 0x6EF9, 0xE4EF, + 0x6F02, 0xC6AF, + 0x6F06, 0xC6E1, + 0x6F09, 0xE4F5, + 0x6F0F, 0xC2A9, + 0x6F13, 0xC0EC, + 0x6F14, 0xD1DD, + 0x6F15, 0xE4EE, + 0x6F20, 0xC4AE, + 0x6F24, 0xE4ED, + 0x6F29, 0xE4F6, + 0x6F2A, 0xE4F4, + 0x6F2B, 0xC2FE, + 0x6F2D, 0xE4DD, + 0x6F2F, 0xE4F0, + 0x6F31, 0xCAFE, + 0x6F33, 0xD5C4, + 0x6F36, 0xE4F1, + 0x6F3E, 0xD1FA, + 0x6F46, 0xE4EB, + 0x6F47, 0xE4EC, + 0x6F4B, 0xE4F2, + 0x6F4D, 0xCEAB, + 0x6F58, 0xC5CB, + 0x6F5C, 0xC7B1, + 0x6F5E, 0xC2BA, + 0x6F62, 0xE4EA, + 0x6F66, 0xC1CA, + 0x6F6D, 0xCCB6, + 0x6F6E, 0xB3B1, + 0x6F72, 0xE4FB, + 0x6F74, 0xE4F3, + 0x6F78, 0xE4FA, + 0x6F7A, 0xE4FD, + 0x6F7C, 0xE4FC, + 0x6F84, 0xB3CE, + 0x6F88, 0xB3BA, + 0x6F89, 0xE4F7, + 0x6F8C, 0xE4F9, + 0x6F8D, 0xE4F8, + 0x6F8E, 0xC5EC, + 0x6F9C, 0xC0BD, + 0x6FA1, 0xD4E8, + 0x6FA7, 0xE5A2, + 0x6FB3, 0xB0C4, + 0x6FB6, 0xE5A4, + 0x6FB9, 0xE5A3, + 0x6FC0, 0xBCA4, + 0x6FC2, 0xE5A5, + 0x6FC9, 0xE5A1, + 0x6FD1, 0xE4FE, + 0x6FD2, 0xB1F4, + 0x6FDE, 0xE5A8, + 0x6FE0, 0xE5A9, + 0x6FE1, 0xE5A6, + 0x6FEE, 0xE5A7, + 0x6FEF, 0xE5AA, + 0x7011, 0xC6D9, + 0x701A, 0xE5AB, + 0x701B, 0xE5AD, + 0x7023, 0xE5AC, + 0x7035, 0xE5AF, + 0x7039, 0xE5AE, + 0x704C, 0xB9E0, + 0x704F, 0xE5B0, + 0x705E, 0xE5B1, + 0x706B, 0xBBF0, + 0x706C, 0xECE1, + 0x706D, 0xC3F0, + 0x706F, 0xB5C6, + 0x7070, 0xBBD2, + 0x7075, 0xC1E9, + 0x7076, 0xD4EE, + 0x7078, 0xBEC4, + 0x707C, 0xD7C6, + 0x707E, 0xD4D6, + 0x707F, 0xB2D3, + 0x7080, 0xECBE, + 0x7085, 0xEAC1, + 0x7089, 0xC2AF, + 0x708A, 0xB4B6, + 0x708E, 0xD1D7, + 0x7092, 0xB3B4, + 0x7094, 0xC8B2, + 0x7095, 0xBFBB, + 0x7096, 0xECC0, + 0x7099, 0xD6CB, + 0x709C, 0xECBF, + 0x709D, 0xECC1, + 0x70AB, 0xECC5, + 0x70AC, 0xBEE6, + 0x70AD, 0xCCBF, + 0x70AE, 0xC5DA, + 0x70AF, 0xBEBC, + 0x70B1, 0xECC6, + 0x70B3, 0xB1FE, + 0x70B7, 0xECC4, + 0x70B8, 0xD5A8, + 0x70B9, 0xB5E3, + 0x70BB, 0xECC2, + 0x70BC, 0xC1B6, + 0x70BD, 0xB3E3, + 0x70C0, 0xECC3, + 0x70C1, 0xCBB8, + 0x70C2, 0xC0C3, + 0x70C3, 0xCCFE, + 0x70C8, 0xC1D2, + 0x70CA, 0xECC8, + 0x70D8, 0xBAE6, + 0x70D9, 0xC0D3, + 0x70DB, 0xD6F2, + 0x70DF, 0xD1CC, + 0x70E4, 0xBFBE, + 0x70E6, 0xB7B3, + 0x70E7, 0xC9D5, + 0x70E8, 0xECC7, + 0x70E9, 0xBBE2, + 0x70EB, 0xCCCC, + 0x70EC, 0xBDFD, + 0x70ED, 0xC8C8, + 0x70EF, 0xCFA9, + 0x70F7, 0xCDE9, + 0x70F9, 0xC5EB, + 0x70FD, 0xB7E9, + 0x7109, 0xD1C9, + 0x710A, 0xBAB8, + 0x7110, 0xECC9, + 0x7113, 0xECCA, + 0x7115, 0xBBC0, + 0x7116, 0xECCB, + 0x7118, 0xECE2, + 0x7119, 0xB1BA, + 0x711A, 0xB7D9, + 0x7126, 0xBDB9, + 0x712F, 0xECCC, + 0x7130, 0xD1E6, + 0x7131, 0xECCD, + 0x7136, 0xC8BB, + 0x7145, 0xECD1, + 0x714A, 0xECD3, + 0x714C, 0xBBCD, + 0x714E, 0xBCE5, + 0x715C, 0xECCF, + 0x715E, 0xC9B7, + 0x7164, 0xC3BA, + 0x7166, 0xECE3, + 0x7167, 0xD5D5, + 0x7168, 0xECD0, + 0x716E, 0xD6F3, + 0x7172, 0xECD2, + 0x7173, 0xECCE, + 0x7178, 0xECD4, + 0x717A, 0xECD5, + 0x717D, 0xC9BF, + 0x7184, 0xCFA8, + 0x718A, 0xD0DC, + 0x718F, 0xD1AC, + 0x7194, 0xC8DB, + 0x7198, 0xECD6, + 0x7199, 0xCEF5, + 0x719F, 0xCAEC, + 0x71A0, 0xECDA, + 0x71A8, 0xECD9, + 0x71AC, 0xB0BE, + 0x71B3, 0xECD7, + 0x71B5, 0xECD8, + 0x71B9, 0xECE4, + 0x71C3, 0xC8BC, + 0x71CE, 0xC1C7, + 0x71D4, 0xECDC, + 0x71D5, 0xD1E0, + 0x71E0, 0xECDB, + 0x71E5, 0xD4EF, + 0x71E7, 0xECDD, + 0x71EE, 0xDBC6, + 0x71F9, 0xECDE, + 0x7206, 0xB1AC, + 0x721D, 0xECDF, + 0x7228, 0xECE0, + 0x722A, 0xD7A6, + 0x722C, 0xC5C0, + 0x7230, 0xEBBC, + 0x7231, 0xB0AE, + 0x7235, 0xBEF4, + 0x7236, 0xB8B8, + 0x7237, 0xD2AF, + 0x7238, 0xB0D6, + 0x7239, 0xB5F9, + 0x723B, 0xD8B3, + 0x723D, 0xCBAC, + 0x723F, 0xE3DD, + 0x7247, 0xC6AC, + 0x7248, 0xB0E6, + 0x724C, 0xC5C6, + 0x724D, 0xEBB9, + 0x7252, 0xEBBA, + 0x7256, 0xEBBB, + 0x7259, 0xD1C0, + 0x725B, 0xC5A3, + 0x725D, 0xEAF2, + 0x725F, 0xC4B2, + 0x7261, 0xC4B5, + 0x7262, 0xC0CE, + 0x7266, 0xEAF3, + 0x7267, 0xC4C1, + 0x7269, 0xCEEF, + 0x726E, 0xEAF0, + 0x726F, 0xEAF4, + 0x7272, 0xC9FC, + 0x7275, 0xC7A3, + 0x7279, 0xCCD8, + 0x727A, 0xCEFE, + 0x727E, 0xEAF5, + 0x727F, 0xEAF6, + 0x7280, 0xCFAC, + 0x7281, 0xC0E7, + 0x7284, 0xEAF7, + 0x728A, 0xB6BF, + 0x728B, 0xEAF8, + 0x728D, 0xEAF9, + 0x728F, 0xEAFA, + 0x7292, 0xEAFB, + 0x729F, 0xEAF1, + 0x72AC, 0xC8AE, + 0x72AD, 0xE1EB, + 0x72AF, 0xB7B8, + 0x72B0, 0xE1EC, + 0x72B4, 0xE1ED, + 0x72B6, 0xD7B4, + 0x72B7, 0xE1EE, + 0x72B8, 0xE1EF, + 0x72B9, 0xD3CC, + 0x72C1, 0xE1F1, + 0x72C2, 0xBFF1, + 0x72C3, 0xE1F0, + 0x72C4, 0xB5D2, + 0x72C8, 0xB1B7, + 0x72CD, 0xE1F3, + 0x72CE, 0xE1F2, + 0x72D0, 0xBAFC, + 0x72D2, 0xE1F4, + 0x72D7, 0xB9B7, + 0x72D9, 0xBED1, + 0x72DE, 0xC4FC, + 0x72E0, 0xBADD, + 0x72E1, 0xBDC6, + 0x72E8, 0xE1F5, + 0x72E9, 0xE1F7, + 0x72EC, 0xB6C0, + 0x72ED, 0xCFC1, + 0x72EE, 0xCAA8, + 0x72EF, 0xE1F6, + 0x72F0, 0xD5F8, + 0x72F1, 0xD3FC, + 0x72F2, 0xE1F8, + 0x72F3, 0xE1FC, + 0x72F4, 0xE1F9, + 0x72F7, 0xE1FA, + 0x72F8, 0xC0EA, + 0x72FA, 0xE1FE, + 0x72FB, 0xE2A1, + 0x72FC, 0xC0C7, + 0x7301, 0xE1FB, + 0x7303, 0xE1FD, + 0x730A, 0xE2A5, + 0x730E, 0xC1D4, + 0x7313, 0xE2A3, + 0x7315, 0xE2A8, + 0x7316, 0xB2FE, + 0x7317, 0xE2A2, + 0x731B, 0xC3CD, + 0x731C, 0xB2C2, + 0x731D, 0xE2A7, + 0x731E, 0xE2A6, + 0x7321, 0xE2A4, + 0x7322, 0xE2A9, + 0x7325, 0xE2AB, + 0x7329, 0xD0C9, + 0x732A, 0xD6ED, + 0x732B, 0xC3A8, + 0x732C, 0xE2AC, + 0x732E, 0xCFD7, + 0x7331, 0xE2AE, + 0x7334, 0xBAEF, + 0x7337, 0xE9E0, + 0x7338, 0xE2AD, + 0x7339, 0xE2AA, + 0x733E, 0xBBAB, + 0x733F, 0xD4B3, + 0x734D, 0xE2B0, + 0x7350, 0xE2AF, + 0x7352, 0xE9E1, + 0x7357, 0xE2B1, + 0x7360, 0xE2B2, + 0x736C, 0xE2B3, + 0x736D, 0xCCA1, + 0x736F, 0xE2B4, + 0x737E, 0xE2B5, + 0x7384, 0xD0FE, + 0x7387, 0xC2CA, + 0x7389, 0xD3F1, + 0x738B, 0xCDF5, + 0x738E, 0xE7E0, + 0x7391, 0xE7E1, + 0x7396, 0xBEC1, + 0x739B, 0xC2EA, + 0x739F, 0xE7E4, + 0x73A2, 0xE7E3, + 0x73A9, 0xCDE6, + 0x73AB, 0xC3B5, + 0x73AE, 0xE7E2, + 0x73AF, 0xBBB7, + 0x73B0, 0xCFD6, + 0x73B2, 0xC1E1, + 0x73B3, 0xE7E9, + 0x73B7, 0xE7E8, + 0x73BA, 0xE7F4, + 0x73BB, 0xB2A3, + 0x73C0, 0xE7EA, + 0x73C2, 0xE7E6, + 0x73C8, 0xE7EC, + 0x73C9, 0xE7EB, + 0x73CA, 0xC9BA, + 0x73CD, 0xD5E4, + 0x73CF, 0xE7E5, + 0x73D0, 0xB7A9, + 0x73D1, 0xE7E7, + 0x73D9, 0xE7EE, + 0x73DE, 0xE7F3, + 0x73E0, 0xD6E9, + 0x73E5, 0xE7ED, + 0x73E7, 0xE7F2, + 0x73E9, 0xE7F1, + 0x73ED, 0xB0E0, + 0x73F2, 0xE7F5, + 0x7403, 0xC7F2, + 0x7405, 0xC0C5, + 0x7406, 0xC0ED, + 0x7409, 0xC1F0, + 0x740A, 0xE7F0, + 0x740F, 0xE7F6, + 0x7410, 0xCBF6, + 0x741A, 0xE8A2, + 0x741B, 0xE8A1, + 0x7422, 0xD7C1, + 0x7425, 0xE7FA, + 0x7426, 0xE7F9, + 0x7428, 0xE7FB, + 0x742A, 0xE7F7, + 0x742C, 0xE7FE, + 0x742E, 0xE7FD, + 0x7430, 0xE7FC, + 0x7433, 0xC1D5, + 0x7434, 0xC7D9, + 0x7435, 0xC5FD, + 0x7436, 0xC5C3, + 0x743C, 0xC7ED, + 0x7441, 0xE8A3, + 0x7455, 0xE8A6, + 0x7457, 0xE8A5, + 0x7459, 0xE8A7, + 0x745A, 0xBAF7, + 0x745B, 0xE7F8, + 0x745C, 0xE8A4, + 0x745E, 0xC8F0, + 0x745F, 0xC9AA, + 0x746D, 0xE8A9, + 0x7470, 0xB9E5, + 0x7476, 0xD1FE, + 0x7477, 0xE8A8, + 0x747E, 0xE8AA, + 0x7480, 0xE8AD, + 0x7481, 0xE8AE, + 0x7483, 0xC1A7, + 0x7487, 0xE8AF, + 0x748B, 0xE8B0, + 0x748E, 0xE8AC, + 0x7490, 0xE8B4, + 0x749C, 0xE8AB, + 0x749E, 0xE8B1, + 0x74A7, 0xE8B5, + 0x74A8, 0xE8B2, + 0x74A9, 0xE8B3, + 0x74BA, 0xE8B7, + 0x74D2, 0xE8B6, + 0x74DC, 0xB9CF, + 0x74DE, 0xF0AC, + 0x74E0, 0xF0AD, + 0x74E2, 0xC6B0, + 0x74E3, 0xB0EA, + 0x74E4, 0xC8BF, + 0x74E6, 0xCDDF, + 0x74EE, 0xCECD, + 0x74EF, 0xEAB1, + 0x74F4, 0xEAB2, + 0x74F6, 0xC6BF, + 0x74F7, 0xB4C9, + 0x74FF, 0xEAB3, + 0x7504, 0xD5E7, + 0x750D, 0xDDF9, + 0x750F, 0xEAB4, + 0x7511, 0xEAB5, + 0x7513, 0xEAB6, + 0x7518, 0xB8CA, + 0x7519, 0xDFB0, + 0x751A, 0xC9F5, + 0x751C, 0xCCF0, + 0x751F, 0xC9FA, + 0x7525, 0xC9FB, + 0x7528, 0xD3C3, + 0x7529, 0xCBA6, + 0x752B, 0xB8A6, + 0x752C, 0xF0AE, + 0x752D, 0xB1C2, + 0x752F, 0xE5B8, + 0x7530, 0xCCEF, + 0x7531, 0xD3C9, + 0x7532, 0xBCD7, + 0x7533, 0xC9EA, + 0x7535, 0xB5E7, + 0x7537, 0xC4D0, + 0x7538, 0xB5E9, + 0x753A, 0xEEAE, + 0x753B, 0xBBAD, + 0x753E, 0xE7DE, + 0x7540, 0xEEAF, + 0x7545, 0xB3A9, + 0x7548, 0xEEB2, + 0x754B, 0xEEB1, + 0x754C, 0xBDE7, + 0x754E, 0xEEB0, + 0x754F, 0xCEB7, + 0x7554, 0xC5CF, + 0x7559, 0xC1F4, + 0x755A, 0xDBCE, + 0x755B, 0xEEB3, + 0x755C, 0xD0F3, + 0x7565, 0xC2D4, + 0x7566, 0xC6E8, + 0x756A, 0xB7AC, + 0x7572, 0xEEB4, + 0x7574, 0xB3EB, + 0x7578, 0xBBFB, + 0x7579, 0xEEB5, + 0x757F, 0xE7DC, + 0x7583, 0xEEB6, + 0x7586, 0xBDAE, + 0x758B, 0xF1E2, + 0x758F, 0xCAE8, + 0x7591, 0xD2C9, + 0x7592, 0xF0DA, + 0x7594, 0xF0DB, + 0x7596, 0xF0DC, + 0x7597, 0xC1C6, + 0x7599, 0xB8ED, + 0x759A, 0xBECE, + 0x759D, 0xF0DE, + 0x759F, 0xC5B1, + 0x75A0, 0xF0DD, + 0x75A1, 0xD1F1, + 0x75A3, 0xF0E0, + 0x75A4, 0xB0CC, + 0x75A5, 0xBDEA, + 0x75AB, 0xD2DF, + 0x75AC, 0xF0DF, + 0x75AE, 0xB4AF, + 0x75AF, 0xB7E8, + 0x75B0, 0xF0E6, + 0x75B1, 0xF0E5, + 0x75B2, 0xC6A3, + 0x75B3, 0xF0E1, + 0x75B4, 0xF0E2, + 0x75B5, 0xB4C3, + 0x75B8, 0xF0E3, + 0x75B9, 0xD5EE, + 0x75BC, 0xCCDB, + 0x75BD, 0xBED2, + 0x75BE, 0xBCB2, + 0x75C2, 0xF0E8, + 0x75C3, 0xF0E7, + 0x75C4, 0xF0E4, + 0x75C5, 0xB2A1, + 0x75C7, 0xD6A2, + 0x75C8, 0xD3B8, + 0x75C9, 0xBEB7, + 0x75CA, 0xC8AC, + 0x75CD, 0xF0EA, + 0x75D2, 0xD1F7, + 0x75D4, 0xD6CC, + 0x75D5, 0xBADB, + 0x75D6, 0xF0E9, + 0x75D8, 0xB6BB, + 0x75DB, 0xCDB4, + 0x75DE, 0xC6A6, + 0x75E2, 0xC1A1, + 0x75E3, 0xF0EB, + 0x75E4, 0xF0EE, + 0x75E6, 0xF0ED, + 0x75E7, 0xF0F0, + 0x75E8, 0xF0EC, + 0x75EA, 0xBBBE, + 0x75EB, 0xF0EF, + 0x75F0, 0xCCB5, + 0x75F1, 0xF0F2, + 0x75F4, 0xB3D5, + 0x75F9, 0xB1D4, + 0x75FC, 0xF0F3, + 0x75FF, 0xF0F4, + 0x7600, 0xF0F6, + 0x7601, 0xB4E1, + 0x7603, 0xF0F1, + 0x7605, 0xF0F7, + 0x760A, 0xF0FA, + 0x760C, 0xF0F8, + 0x7610, 0xF0F5, + 0x7615, 0xF0FD, + 0x7617, 0xF0F9, + 0x7618, 0xF0FC, + 0x7619, 0xF0FE, + 0x761B, 0xF1A1, + 0x761F, 0xCEC1, + 0x7620, 0xF1A4, + 0x7622, 0xF1A3, + 0x7624, 0xC1F6, + 0x7625, 0xF0FB, + 0x7626, 0xCADD, + 0x7629, 0xB4F1, + 0x762A, 0xB1F1, + 0x762B, 0xCCB1, + 0x762D, 0xF1A6, + 0x7630, 0xF1A7, + 0x7633, 0xF1AC, + 0x7634, 0xD5CE, + 0x7635, 0xF1A9, + 0x7638, 0xC8B3, + 0x763C, 0xF1A2, + 0x763E, 0xF1AB, + 0x763F, 0xF1A8, + 0x7640, 0xF1A5, + 0x7643, 0xF1AA, + 0x764C, 0xB0A9, + 0x764D, 0xF1AD, + 0x7654, 0xF1AF, + 0x7656, 0xF1B1, + 0x765C, 0xF1B0, + 0x765E, 0xF1AE, + 0x7663, 0xD1A2, + 0x766B, 0xF1B2, + 0x766F, 0xF1B3, + 0x7678, 0xB9EF, + 0x767B, 0xB5C7, + 0x767D, 0xB0D7, + 0x767E, 0xB0D9, + 0x7682, 0xD4ED, + 0x7684, 0xB5C4, + 0x7686, 0xBDD4, + 0x7687, 0xBBCA, + 0x7688, 0xF0A7, + 0x768B, 0xB8DE, + 0x768E, 0xF0A8, + 0x7691, 0xB0A8, + 0x7693, 0xF0A9, + 0x7696, 0xCDEE, + 0x7699, 0xF0AA, + 0x76A4, 0xF0AB, + 0x76AE, 0xC6A4, + 0x76B1, 0xD6E5, + 0x76B2, 0xF1E4, + 0x76B4, 0xF1E5, + 0x76BF, 0xC3F3, + 0x76C2, 0xD3DB, + 0x76C5, 0xD6D1, + 0x76C6, 0xC5E8, + 0x76C8, 0xD3AF, + 0x76CA, 0xD2E6, + 0x76CD, 0xEEC1, + 0x76CE, 0xB0BB, + 0x76CF, 0xD5B5, + 0x76D0, 0xD1CE, + 0x76D1, 0xBCE0, + 0x76D2, 0xBAD0, + 0x76D4, 0xBFF8, + 0x76D6, 0xB8C7, + 0x76D7, 0xB5C1, + 0x76D8, 0xC5CC, + 0x76DB, 0xCAA2, + 0x76DF, 0xC3CB, + 0x76E5, 0xEEC2, + 0x76EE, 0xC4BF, + 0x76EF, 0xB6A2, + 0x76F1, 0xEDEC, + 0x76F2, 0xC3A4, + 0x76F4, 0xD6B1, + 0x76F8, 0xCFE0, + 0x76F9, 0xEDEF, + 0x76FC, 0xC5CE, + 0x76FE, 0xB6DC, + 0x7701, 0xCAA1, + 0x7704, 0xEDED, + 0x7707, 0xEDF0, + 0x7708, 0xEDF1, + 0x7709, 0xC3BC, + 0x770B, 0xBFB4, + 0x770D, 0xEDEE, + 0x7719, 0xEDF4, + 0x771A, 0xEDF2, + 0x771F, 0xD5E6, + 0x7720, 0xC3DF, + 0x7722, 0xEDF3, + 0x7726, 0xEDF6, + 0x7728, 0xD5A3, + 0x7729, 0xD1A3, + 0x772D, 0xEDF5, + 0x772F, 0xC3D0, + 0x7735, 0xEDF7, + 0x7736, 0xBFF4, + 0x7737, 0xBEEC, + 0x7738, 0xEDF8, + 0x773A, 0xCCF7, + 0x773C, 0xD1DB, + 0x7740, 0xD7C5, + 0x7741, 0xD5F6, + 0x7743, 0xEDFC, + 0x7747, 0xEDFB, + 0x7750, 0xEDF9, + 0x7751, 0xEDFA, + 0x775A, 0xEDFD, + 0x775B, 0xBEA6, + 0x7761, 0xCBAF, + 0x7762, 0xEEA1, + 0x7763, 0xB6BD, + 0x7765, 0xEEA2, + 0x7766, 0xC4C0, + 0x7768, 0xEDFE, + 0x776B, 0xBDDE, + 0x776C, 0xB2C7, + 0x7779, 0xB6C3, + 0x777D, 0xEEA5, + 0x777E, 0xD8BA, + 0x777F, 0xEEA3, + 0x7780, 0xEEA6, + 0x7784, 0xC3E9, + 0x7785, 0xB3F2, + 0x778C, 0xEEA7, + 0x778D, 0xEEA4, + 0x778E, 0xCFB9, + 0x7791, 0xEEA8, + 0x7792, 0xC2F7, + 0x779F, 0xEEA9, + 0x77A0, 0xEEAA, + 0x77A2, 0xDEAB, + 0x77A5, 0xC6B3, + 0x77A7, 0xC7C6, + 0x77A9, 0xD6F5, + 0x77AA, 0xB5C9, + 0x77AC, 0xCBB2, + 0x77B0, 0xEEAB, + 0x77B3, 0xCDAB, + 0x77B5, 0xEEAC, + 0x77BB, 0xD5B0, + 0x77BD, 0xEEAD, + 0x77BF, 0xF6C4, + 0x77CD, 0xDBC7, + 0x77D7, 0xB4A3, + 0x77DB, 0xC3AC, + 0x77DC, 0xF1E6, + 0x77E2, 0xCAB8, + 0x77E3, 0xD2D3, + 0x77E5, 0xD6AA, + 0x77E7, 0xEFF2, + 0x77E9, 0xBED8, + 0x77EB, 0xBDC3, + 0x77EC, 0xEFF3, + 0x77ED, 0xB6CC, + 0x77EE, 0xB0AB, + 0x77F3, 0xCAAF, + 0x77F6, 0xEDB6, + 0x77F8, 0xEDB7, + 0x77FD, 0xCEF9, + 0x77FE, 0xB7AF, + 0x77FF, 0xBFF3, + 0x7800, 0xEDB8, + 0x7801, 0xC2EB, + 0x7802, 0xC9B0, + 0x7809, 0xEDB9, + 0x780C, 0xC6F6, + 0x780D, 0xBFB3, + 0x7811, 0xEDBC, + 0x7812, 0xC5F8, + 0x7814, 0xD1D0, + 0x7816, 0xD7A9, + 0x7817, 0xEDBA, + 0x7818, 0xEDBB, + 0x781A, 0xD1E2, + 0x781C, 0xEDBF, + 0x781D, 0xEDC0, + 0x781F, 0xEDC4, + 0x7823, 0xEDC8, + 0x7825, 0xEDC6, + 0x7826, 0xEDCE, + 0x7827, 0xD5E8, + 0x7829, 0xEDC9, + 0x782C, 0xEDC7, + 0x782D, 0xEDBE, + 0x7830, 0xC5E9, + 0x7834, 0xC6C6, + 0x7837, 0xC9E9, + 0x7838, 0xD4D2, + 0x7839, 0xEDC1, + 0x783A, 0xEDC2, + 0x783B, 0xEDC3, + 0x783C, 0xEDC5, + 0x783E, 0xC0F9, + 0x7840, 0xB4A1, + 0x7845, 0xB9E8, + 0x7847, 0xEDD0, + 0x784C, 0xEDD1, + 0x784E, 0xEDCA, + 0x7850, 0xEDCF, + 0x7852, 0xCEF8, + 0x7855, 0xCBB6, + 0x7856, 0xEDCC, + 0x7857, 0xEDCD, + 0x785D, 0xCFF5, + 0x786A, 0xEDD2, + 0x786B, 0xC1F2, + 0x786C, 0xD3B2, + 0x786D, 0xEDCB, + 0x786E, 0xC8B7, + 0x7877, 0xBCEF, + 0x787C, 0xC5F0, + 0x7887, 0xEDD6, + 0x7889, 0xB5EF, + 0x788C, 0xC2B5, + 0x788D, 0xB0AD, + 0x788E, 0xCBE9, + 0x7891, 0xB1AE, + 0x7893, 0xEDD4, + 0x7897, 0xCDEB, + 0x7898, 0xB5E2, + 0x789A, 0xEDD5, + 0x789B, 0xEDD3, + 0x789C, 0xEDD7, + 0x789F, 0xB5FA, + 0x78A1, 0xEDD8, + 0x78A3, 0xEDD9, + 0x78A5, 0xEDDC, + 0x78A7, 0xB1CC, + 0x78B0, 0xC5F6, + 0x78B1, 0xBCEE, + 0x78B2, 0xEDDA, + 0x78B3, 0xCCBC, + 0x78B4, 0xB2EA, + 0x78B9, 0xEDDB, + 0x78BE, 0xC4EB, + 0x78C1, 0xB4C5, + 0x78C5, 0xB0F5, + 0x78C9, 0xEDDF, + 0x78CA, 0xC0DA, + 0x78CB, 0xB4E8, + 0x78D0, 0xC5CD, + 0x78D4, 0xEDDD, + 0x78D5, 0xBFC4, + 0x78D9, 0xEDDE, + 0x78E8, 0xC4A5, + 0x78EC, 0xEDE0, + 0x78F2, 0xEDE1, + 0x78F4, 0xEDE3, + 0x78F7, 0xC1D7, + 0x78FA, 0xBBC7, + 0x7901, 0xBDB8, + 0x7905, 0xEDE2, + 0x7913, 0xEDE4, + 0x791E, 0xEDE6, + 0x7924, 0xEDE5, + 0x7934, 0xEDE7, + 0x793A, 0xCABE, + 0x793B, 0xECEA, + 0x793C, 0xC0F1, + 0x793E, 0xC9E7, + 0x7940, 0xECEB, + 0x7941, 0xC6EE, + 0x7946, 0xECEC, + 0x7948, 0xC6ED, + 0x7949, 0xECED, + 0x7953, 0xECF0, + 0x7956, 0xD7E6, + 0x7957, 0xECF3, + 0x795A, 0xECF1, + 0x795B, 0xECEE, + 0x795C, 0xECEF, + 0x795D, 0xD7A3, + 0x795E, 0xC9F1, + 0x795F, 0xCBEE, + 0x7960, 0xECF4, + 0x7962, 0xECF2, + 0x7965, 0xCFE9, + 0x7967, 0xECF6, + 0x7968, 0xC6B1, + 0x796D, 0xBCC0, + 0x796F, 0xECF5, + 0x7977, 0xB5BB, + 0x7978, 0xBBF6, + 0x797A, 0xECF7, + 0x7980, 0xD9F7, + 0x7981, 0xBDFB, + 0x7984, 0xC2BB, + 0x7985, 0xECF8, + 0x798A, 0xECF9, + 0x798F, 0xB8A3, + 0x799A, 0xECFA, + 0x79A7, 0xECFB, + 0x79B3, 0xECFC, + 0x79B9, 0xD3ED, + 0x79BA, 0xD8AE, + 0x79BB, 0xC0EB, + 0x79BD, 0xC7DD, + 0x79BE, 0xBACC, + 0x79C0, 0xD0E3, + 0x79C1, 0xCBBD, + 0x79C3, 0xCDBA, + 0x79C6, 0xB8D1, + 0x79C9, 0xB1FC, + 0x79CB, 0xC7EF, + 0x79CD, 0xD6D6, + 0x79D1, 0xBFC6, + 0x79D2, 0xC3EB, + 0x79D5, 0xEFF5, + 0x79D8, 0xC3D8, + 0x79DF, 0xD7E2, + 0x79E3, 0xEFF7, + 0x79E4, 0xB3D3, + 0x79E6, 0xC7D8, + 0x79E7, 0xD1ED, + 0x79E9, 0xD6C8, + 0x79EB, 0xEFF8, + 0x79ED, 0xEFF6, + 0x79EF, 0xBBFD, + 0x79F0, 0xB3C6, + 0x79F8, 0xBDD5, + 0x79FB, 0xD2C6, + 0x79FD, 0xBBE0, + 0x7A00, 0xCFA1, + 0x7A02, 0xEFFC, + 0x7A03, 0xEFFB, + 0x7A06, 0xEFF9, + 0x7A0B, 0xB3CC, + 0x7A0D, 0xC9D4, + 0x7A0E, 0xCBB0, + 0x7A14, 0xEFFE, + 0x7A17, 0xB0DE, + 0x7A1A, 0xD6C9, + 0x7A1E, 0xEFFD, + 0x7A20, 0xB3ED, + 0x7A23, 0xF6D5, + 0x7A33, 0xCEC8, + 0x7A37, 0xF0A2, + 0x7A39, 0xF0A1, + 0x7A3B, 0xB5BE, + 0x7A3C, 0xBCDA, + 0x7A3D, 0xBBFC, + 0x7A3F, 0xB8E5, + 0x7A46, 0xC4C2, + 0x7A51, 0xF0A3, + 0x7A57, 0xCBEB, + 0x7A70, 0xF0A6, + 0x7A74, 0xD1A8, + 0x7A76, 0xBEBF, + 0x7A77, 0xC7EE, + 0x7A78, 0xF1B6, + 0x7A79, 0xF1B7, + 0x7A7A, 0xBFD5, + 0x7A7F, 0xB4A9, + 0x7A80, 0xF1B8, + 0x7A81, 0xCDBB, + 0x7A83, 0xC7D4, + 0x7A84, 0xD5AD, + 0x7A86, 0xF1B9, + 0x7A88, 0xF1BA, + 0x7A8D, 0xC7CF, + 0x7A91, 0xD2A4, + 0x7A92, 0xD6CF, + 0x7A95, 0xF1BB, + 0x7A96, 0xBDD1, + 0x7A97, 0xB4B0, + 0x7A98, 0xBEBD, + 0x7A9C, 0xB4DC, + 0x7A9D, 0xCED1, + 0x7A9F, 0xBFDF, + 0x7AA0, 0xF1BD, + 0x7AA5, 0xBFFA, + 0x7AA6, 0xF1BC, + 0x7AA8, 0xF1BF, + 0x7AAC, 0xF1BE, + 0x7AAD, 0xF1C0, + 0x7AB3, 0xF1C1, + 0x7ABF, 0xC1FE, + 0x7ACB, 0xC1A2, + 0x7AD6, 0xCAFA, + 0x7AD9, 0xD5BE, + 0x7ADE, 0xBEBA, + 0x7ADF, 0xBEB9, + 0x7AE0, 0xD5C2, + 0x7AE3, 0xBFA2, + 0x7AE5, 0xCDAF, + 0x7AE6, 0xF1B5, + 0x7AED, 0xBDDF, + 0x7AEF, 0xB6CB, + 0x7AF9, 0xD6F1, + 0x7AFA, 0xF3C3, + 0x7AFD, 0xF3C4, + 0x7AFF, 0xB8CD, + 0x7B03, 0xF3C6, + 0x7B04, 0xF3C7, + 0x7B06, 0xB0CA, + 0x7B08, 0xF3C5, + 0x7B0A, 0xF3C9, + 0x7B0B, 0xCBF1, + 0x7B0F, 0xF3CB, + 0x7B11, 0xD0A6, + 0x7B14, 0xB1CA, + 0x7B15, 0xF3C8, + 0x7B19, 0xF3CF, + 0x7B1B, 0xB5D1, + 0x7B1E, 0xF3D7, + 0x7B20, 0xF3D2, + 0x7B24, 0xF3D4, + 0x7B25, 0xF3D3, + 0x7B26, 0xB7FB, + 0x7B28, 0xB1BF, + 0x7B2A, 0xF3CE, + 0x7B2B, 0xF3CA, + 0x7B2C, 0xB5DA, + 0x7B2E, 0xF3D0, + 0x7B31, 0xF3D1, + 0x7B33, 0xF3D5, + 0x7B38, 0xF3CD, + 0x7B3A, 0xBCE3, + 0x7B3C, 0xC1FD, + 0x7B3E, 0xF3D6, + 0x7B45, 0xF3DA, + 0x7B47, 0xF3CC, + 0x7B49, 0xB5C8, + 0x7B4B, 0xBDEE, + 0x7B4C, 0xF3DC, + 0x7B4F, 0xB7A4, + 0x7B50, 0xBFF0, + 0x7B51, 0xD6FE, + 0x7B52, 0xCDB2, + 0x7B54, 0xB4F0, + 0x7B56, 0xB2DF, + 0x7B58, 0xF3D8, + 0x7B5A, 0xF3D9, + 0x7B5B, 0xC9B8, + 0x7B5D, 0xF3DD, + 0x7B60, 0xF3DE, + 0x7B62, 0xF3E1, + 0x7B6E, 0xF3DF, + 0x7B71, 0xF3E3, + 0x7B72, 0xF3E2, + 0x7B75, 0xF3DB, + 0x7B77, 0xBFEA, + 0x7B79, 0xB3EF, + 0x7B7B, 0xF3E0, + 0x7B7E, 0xC7A9, + 0x7B80, 0xBCF2, + 0x7B85, 0xF3EB, + 0x7B8D, 0xB9BF, + 0x7B90, 0xF3E4, + 0x7B94, 0xB2AD, + 0x7B95, 0xBBFE, + 0x7B97, 0xCBE3, + 0x7B9C, 0xF3ED, + 0x7B9D, 0xF3E9, + 0x7BA1, 0xB9DC, + 0x7BA2, 0xF3EE, + 0x7BA6, 0xF3E5, + 0x7BA7, 0xF3E6, + 0x7BA8, 0xF3EA, + 0x7BA9, 0xC2E1, + 0x7BAA, 0xF3EC, + 0x7BAB, 0xF3EF, + 0x7BAC, 0xF3E8, + 0x7BAD, 0xBCFD, + 0x7BB1, 0xCFE4, + 0x7BB4, 0xF3F0, + 0x7BB8, 0xF3E7, + 0x7BC1, 0xF3F2, + 0x7BC6, 0xD7AD, + 0x7BC7, 0xC6AA, + 0x7BCC, 0xF3F3, + 0x7BD1, 0xF3F1, + 0x7BD3, 0xC2A8, + 0x7BD9, 0xB8DD, + 0x7BDA, 0xF3F5, + 0x7BDD, 0xF3F4, + 0x7BE1, 0xB4DB, + 0x7BE5, 0xF3F6, + 0x7BE6, 0xF3F7, + 0x7BEA, 0xF3F8, + 0x7BEE, 0xC0BA, + 0x7BF1, 0xC0E9, + 0x7BF7, 0xC5F1, + 0x7BFC, 0xF3FB, + 0x7BFE, 0xF3FA, + 0x7C07, 0xB4D8, + 0x7C0B, 0xF3FE, + 0x7C0C, 0xF3F9, + 0x7C0F, 0xF3FC, + 0x7C16, 0xF3FD, + 0x7C1F, 0xF4A1, + 0x7C26, 0xF4A3, + 0x7C27, 0xBBC9, + 0x7C2A, 0xF4A2, + 0x7C38, 0xF4A4, + 0x7C3F, 0xB2BE, + 0x7C40, 0xF4A6, + 0x7C41, 0xF4A5, + 0x7C4D, 0xBCAE, + 0x7C73, 0xC3D7, + 0x7C74, 0xD9E1, + 0x7C7B, 0xC0E0, + 0x7C7C, 0xF4CC, + 0x7C7D, 0xD7D1, + 0x7C89, 0xB7DB, + 0x7C91, 0xF4CE, + 0x7C92, 0xC1A3, + 0x7C95, 0xC6C9, + 0x7C97, 0xB4D6, + 0x7C98, 0xD5B3, + 0x7C9C, 0xF4D0, + 0x7C9D, 0xF4CF, + 0x7C9E, 0xF4D1, + 0x7C9F, 0xCBDA, + 0x7CA2, 0xF4D2, + 0x7CA4, 0xD4C1, + 0x7CA5, 0xD6E0, + 0x7CAA, 0xB7E0, + 0x7CAE, 0xC1B8, + 0x7CB1, 0xC1BB, + 0x7CB2, 0xF4D3, + 0x7CB3, 0xBEAC, + 0x7CB9, 0xB4E2, + 0x7CBC, 0xF4D4, + 0x7CBD, 0xF4D5, + 0x7CBE, 0xBEAB, + 0x7CC1, 0xF4D6, + 0x7CC5, 0xF4DB, + 0x7CC7, 0xF4D7, + 0x7CC8, 0xF4DA, + 0x7CCA, 0xBAFD, + 0x7CCC, 0xF4D8, + 0x7CCD, 0xF4D9, + 0x7CD5, 0xB8E2, + 0x7CD6, 0xCCC7, + 0x7CD7, 0xF4DC, + 0x7CD9, 0xB2DA, + 0x7CDC, 0xC3D3, + 0x7CDF, 0xD4E3, + 0x7CE0, 0xBFB7, + 0x7CE8, 0xF4DD, + 0x7CEF, 0xC5B4, + 0x7CF8, 0xF4E9, + 0x7CFB, 0xCFB5, + 0x7D0A, 0xCEC9, + 0x7D20, 0xCBD8, + 0x7D22, 0xCBF7, + 0x7D27, 0xBDF4, + 0x7D2B, 0xD7CF, + 0x7D2F, 0xC0DB, + 0x7D6E, 0xD0F5, + 0x7D77, 0xF4EA, + 0x7DA6, 0xF4EB, + 0x7DAE, 0xF4EC, + 0x7E3B, 0xF7E3, + 0x7E41, 0xB7B1, + 0x7E47, 0xF4ED, + 0x7E82, 0xD7EB, + 0x7E9B, 0xF4EE, + 0x7E9F, 0xE6F9, + 0x7EA0, 0xBEC0, + 0x7EA1, 0xE6FA, + 0x7EA2, 0xBAEC, + 0x7EA3, 0xE6FB, + 0x7EA4, 0xCFCB, + 0x7EA5, 0xE6FC, + 0x7EA6, 0xD4BC, + 0x7EA7, 0xBCB6, + 0x7EA8, 0xE6FD, + 0x7EA9, 0xE6FE, + 0x7EAA, 0xBCCD, + 0x7EAB, 0xC8D2, + 0x7EAC, 0xCEB3, + 0x7EAD, 0xE7A1, + 0x7EAF, 0xB4BF, + 0x7EB0, 0xE7A2, + 0x7EB1, 0xC9B4, + 0x7EB2, 0xB8D9, + 0x7EB3, 0xC4C9, + 0x7EB5, 0xD7DD, + 0x7EB6, 0xC2DA, + 0x7EB7, 0xB7D7, + 0x7EB8, 0xD6BD, + 0x7EB9, 0xCEC6, + 0x7EBA, 0xB7C4, + 0x7EBD, 0xC5A6, + 0x7EBE, 0xE7A3, + 0x7EBF, 0xCFDF, + 0x7EC0, 0xE7A4, + 0x7EC1, 0xE7A5, + 0x7EC2, 0xE7A6, + 0x7EC3, 0xC1B7, + 0x7EC4, 0xD7E9, + 0x7EC5, 0xC9F0, + 0x7EC6, 0xCFB8, + 0x7EC7, 0xD6AF, + 0x7EC8, 0xD6D5, + 0x7EC9, 0xE7A7, + 0x7ECA, 0xB0ED, + 0x7ECB, 0xE7A8, + 0x7ECC, 0xE7A9, + 0x7ECD, 0xC9DC, + 0x7ECE, 0xD2EF, + 0x7ECF, 0xBEAD, + 0x7ED0, 0xE7AA, + 0x7ED1, 0xB0F3, + 0x7ED2, 0xC8DE, + 0x7ED3, 0xBDE1, + 0x7ED4, 0xE7AB, + 0x7ED5, 0xC8C6, + 0x7ED7, 0xE7AC, + 0x7ED8, 0xBBE6, + 0x7ED9, 0xB8F8, + 0x7EDA, 0xD1A4, + 0x7EDB, 0xE7AD, + 0x7EDC, 0xC2E7, + 0x7EDD, 0xBEF8, + 0x7EDE, 0xBDCA, + 0x7EDF, 0xCDB3, + 0x7EE0, 0xE7AE, + 0x7EE1, 0xE7AF, + 0x7EE2, 0xBEEE, + 0x7EE3, 0xD0E5, + 0x7EE5, 0xCBE7, + 0x7EE6, 0xCCD0, + 0x7EE7, 0xBCCC, + 0x7EE8, 0xE7B0, + 0x7EE9, 0xBCA8, + 0x7EEA, 0xD0F7, + 0x7EEB, 0xE7B1, + 0x7EED, 0xD0F8, + 0x7EEE, 0xE7B2, + 0x7EEF, 0xE7B3, + 0x7EF0, 0xB4C2, + 0x7EF1, 0xE7B4, + 0x7EF2, 0xE7B5, + 0x7EF3, 0xC9FE, + 0x7EF4, 0xCEAC, + 0x7EF5, 0xC3E0, + 0x7EF6, 0xE7B7, + 0x7EF7, 0xB1C1, + 0x7EF8, 0xB3F1, + 0x7EFA, 0xE7B8, + 0x7EFB, 0xE7B9, + 0x7EFC, 0xD7DB, + 0x7EFD, 0xD5C0, + 0x7EFE, 0xE7BA, + 0x7EFF, 0xC2CC, + 0x7F00, 0xD7BA, + 0x7F01, 0xE7BB, + 0x7F02, 0xE7BC, + 0x7F03, 0xE7BD, + 0x7F04, 0xBCEA, + 0x7F05, 0xC3E5, + 0x7F06, 0xC0C2, + 0x7F07, 0xE7BE, + 0x7F08, 0xE7BF, + 0x7F09, 0xBCA9, + 0x7F0B, 0xE7C0, + 0x7F0C, 0xE7C1, + 0x7F0D, 0xE7B6, + 0x7F0E, 0xB6D0, + 0x7F0F, 0xE7C2, + 0x7F11, 0xE7C3, + 0x7F12, 0xE7C4, + 0x7F13, 0xBBBA, + 0x7F14, 0xB5DE, + 0x7F15, 0xC2C6, + 0x7F16, 0xB1E0, + 0x7F17, 0xE7C5, + 0x7F18, 0xD4B5, + 0x7F19, 0xE7C6, + 0x7F1A, 0xB8BF, + 0x7F1B, 0xE7C8, + 0x7F1C, 0xE7C7, + 0x7F1D, 0xB7EC, + 0x7F1F, 0xE7C9, + 0x7F20, 0xB2F8, + 0x7F21, 0xE7CA, + 0x7F22, 0xE7CB, + 0x7F23, 0xE7CC, + 0x7F24, 0xE7CD, + 0x7F25, 0xE7CE, + 0x7F26, 0xE7CF, + 0x7F27, 0xE7D0, + 0x7F28, 0xD3A7, + 0x7F29, 0xCBF5, + 0x7F2A, 0xE7D1, + 0x7F2B, 0xE7D2, + 0x7F2C, 0xE7D3, + 0x7F2D, 0xE7D4, + 0x7F2E, 0xC9C9, + 0x7F2F, 0xE7D5, + 0x7F30, 0xE7D6, + 0x7F31, 0xE7D7, + 0x7F32, 0xE7D8, + 0x7F33, 0xE7D9, + 0x7F34, 0xBDC9, + 0x7F35, 0xE7DA, + 0x7F36, 0xF3BE, + 0x7F38, 0xB8D7, + 0x7F3A, 0xC8B1, + 0x7F42, 0xF3BF, + 0x7F44, 0xF3C0, + 0x7F45, 0xF3C1, + 0x7F50, 0xB9DE, + 0x7F51, 0xCDF8, + 0x7F54, 0xD8E8, + 0x7F55, 0xBAB1, + 0x7F57, 0xC2DE, + 0x7F58, 0xEEB7, + 0x7F5A, 0xB7A3, + 0x7F5F, 0xEEB9, + 0x7F61, 0xEEB8, + 0x7F62, 0xB0D5, + 0x7F68, 0xEEBB, + 0x7F69, 0xD5D6, + 0x7F6A, 0xD7EF, + 0x7F6E, 0xD6C3, + 0x7F71, 0xEEBD, + 0x7F72, 0xCAF0, + 0x7F74, 0xEEBC, + 0x7F79, 0xEEBE, + 0x7F7E, 0xEEC0, + 0x7F81, 0xEEBF, + 0x7F8A, 0xD1F2, + 0x7F8C, 0xC7BC, + 0x7F8E, 0xC3C0, + 0x7F94, 0xB8E1, + 0x7F9A, 0xC1E7, + 0x7F9D, 0xF4C6, + 0x7F9E, 0xD0DF, + 0x7F9F, 0xF4C7, + 0x7FA1, 0xCFDB, + 0x7FA4, 0xC8BA, + 0x7FA7, 0xF4C8, + 0x7FAF, 0xF4C9, + 0x7FB0, 0xF4CA, + 0x7FB2, 0xF4CB, + 0x7FB8, 0xD9FA, + 0x7FB9, 0xB8FE, + 0x7FBC, 0xE5F1, + 0x7FBD, 0xD3F0, + 0x7FBF, 0xF4E0, + 0x7FC1, 0xCECC, + 0x7FC5, 0xB3E1, + 0x7FCA, 0xF1B4, + 0x7FCC, 0xD2EE, + 0x7FCE, 0xF4E1, + 0x7FD4, 0xCFE8, + 0x7FD5, 0xF4E2, + 0x7FD8, 0xC7CC, + 0x7FDF, 0xB5D4, + 0x7FE0, 0xB4E4, + 0x7FE1, 0xF4E4, + 0x7FE5, 0xF4E3, + 0x7FE6, 0xF4E5, + 0x7FE9, 0xF4E6, + 0x7FEE, 0xF4E7, + 0x7FF0, 0xBAB2, + 0x7FF1, 0xB0BF, + 0x7FF3, 0xF4E8, + 0x7FFB, 0xB7AD, + 0x7FFC, 0xD2ED, + 0x8000, 0xD2AB, + 0x8001, 0xC0CF, + 0x8003, 0xBFBC, + 0x8004, 0xEBA3, + 0x8005, 0xD5DF, + 0x8006, 0xEAC8, + 0x800B, 0xF1F3, + 0x800C, 0xB6F8, + 0x800D, 0xCBA3, + 0x8010, 0xC4CD, + 0x8012, 0xF1E7, + 0x8014, 0xF1E8, + 0x8015, 0xB8FB, + 0x8016, 0xF1E9, + 0x8017, 0xBAC4, + 0x8018, 0xD4C5, + 0x8019, 0xB0D2, + 0x801C, 0xF1EA, + 0x8020, 0xF1EB, + 0x8022, 0xF1EC, + 0x8025, 0xF1ED, + 0x8026, 0xF1EE, + 0x8027, 0xF1EF, + 0x8028, 0xF1F1, + 0x8029, 0xF1F0, + 0x802A, 0xC5D5, + 0x8031, 0xF1F2, + 0x8033, 0xB6FA, + 0x8035, 0xF1F4, + 0x8036, 0xD2AE, + 0x8037, 0xDEC7, + 0x8038, 0xCBCA, + 0x803B, 0xB3DC, + 0x803D, 0xB5A2, + 0x803F, 0xB9A2, + 0x8042, 0xC4F4, + 0x8043, 0xF1F5, + 0x8046, 0xF1F6, + 0x804A, 0xC1C4, + 0x804B, 0xC1FB, + 0x804C, 0xD6B0, + 0x804D, 0xF1F7, + 0x8052, 0xF1F8, + 0x8054, 0xC1AA, + 0x8058, 0xC6B8, + 0x805A, 0xBEDB, + 0x8069, 0xF1F9, + 0x806A, 0xB4CF, + 0x8071, 0xF1FA, + 0x807F, 0xEDB2, + 0x8080, 0xEDB1, + 0x8083, 0xCBE0, + 0x8084, 0xD2DE, + 0x8086, 0xCBC1, + 0x8087, 0xD5D8, + 0x8089, 0xC8E2, + 0x808B, 0xC0DF, + 0x808C, 0xBCA1, + 0x8093, 0xEBC1, + 0x8096, 0xD0A4, + 0x8098, 0xD6E2, + 0x809A, 0xB6C7, + 0x809B, 0xB8D8, + 0x809C, 0xEBC0, + 0x809D, 0xB8CE, + 0x809F, 0xEBBF, + 0x80A0, 0xB3A6, + 0x80A1, 0xB9C9, + 0x80A2, 0xD6AB, + 0x80A4, 0xB7F4, + 0x80A5, 0xB7CA, + 0x80A9, 0xBCE7, + 0x80AA, 0xB7BE, + 0x80AB, 0xEBC6, + 0x80AD, 0xEBC7, + 0x80AE, 0xB0B9, + 0x80AF, 0xBFCF, + 0x80B1, 0xEBC5, + 0x80B2, 0xD3FD, + 0x80B4, 0xEBC8, + 0x80B7, 0xEBC9, + 0x80BA, 0xB7CE, + 0x80BC, 0xEBC2, + 0x80BD, 0xEBC4, + 0x80BE, 0xC9F6, + 0x80BF, 0xD6D7, + 0x80C0, 0xD5CD, + 0x80C1, 0xD0B2, + 0x80C2, 0xEBCF, + 0x80C3, 0xCEB8, + 0x80C4, 0xEBD0, + 0x80C6, 0xB5A8, + 0x80CC, 0xB1B3, + 0x80CD, 0xEBD2, + 0x80CE, 0xCCA5, + 0x80D6, 0xC5D6, + 0x80D7, 0xEBD3, + 0x80D9, 0xEBD1, + 0x80DA, 0xC5DF, + 0x80DB, 0xEBCE, + 0x80DC, 0xCAA4, + 0x80DD, 0xEBD5, + 0x80DE, 0xB0FB, + 0x80E1, 0xBAFA, + 0x80E4, 0xD8B7, + 0x80E5, 0xF1E3, + 0x80E7, 0xEBCA, + 0x80E8, 0xEBCB, + 0x80E9, 0xEBCC, + 0x80EA, 0xEBCD, + 0x80EB, 0xEBD6, + 0x80EC, 0xE6C0, + 0x80ED, 0xEBD9, + 0x80EF, 0xBFE8, + 0x80F0, 0xD2C8, + 0x80F1, 0xEBD7, + 0x80F2, 0xEBDC, + 0x80F3, 0xB8EC, + 0x80F4, 0xEBD8, + 0x80F6, 0xBDBA, + 0x80F8, 0xD0D8, + 0x80FA, 0xB0B7, + 0x80FC, 0xEBDD, + 0x80FD, 0xC4DC, + 0x8102, 0xD6AC, + 0x8106, 0xB4E0, + 0x8109, 0xC2F6, + 0x810A, 0xBCB9, + 0x810D, 0xEBDA, + 0x810E, 0xEBDB, + 0x810F, 0xD4E0, + 0x8110, 0xC6EA, + 0x8111, 0xC4D4, + 0x8112, 0xEBDF, + 0x8113, 0xC5A7, + 0x8114, 0xD9F5, + 0x8116, 0xB2B1, + 0x8118, 0xEBE4, + 0x811A, 0xBDC5, + 0x811E, 0xEBE2, + 0x812C, 0xEBE3, + 0x812F, 0xB8AC, + 0x8131, 0xCDD1, + 0x8132, 0xEBE5, + 0x8136, 0xEBE1, + 0x8138, 0xC1B3, + 0x813E, 0xC6A2, + 0x8146, 0xCCF3, + 0x8148, 0xEBE6, + 0x814A, 0xC0B0, + 0x814B, 0xD2B8, + 0x814C, 0xEBE7, + 0x8150, 0xB8AF, + 0x8151, 0xB8AD, + 0x8153, 0xEBE8, + 0x8154, 0xC7BB, + 0x8155, 0xCDF3, + 0x8159, 0xEBEA, + 0x815A, 0xEBEB, + 0x8160, 0xEBED, + 0x8165, 0xD0C8, + 0x8167, 0xEBF2, + 0x8169, 0xEBEE, + 0x816D, 0xEBF1, + 0x816E, 0xC8F9, + 0x8170, 0xD1FC, + 0x8171, 0xEBEC, + 0x8174, 0xEBE9, + 0x8179, 0xB8B9, + 0x817A, 0xCFD9, + 0x817B, 0xC4E5, + 0x817C, 0xEBEF, + 0x817D, 0xEBF0, + 0x817E, 0xCCDA, + 0x817F, 0xCDC8, + 0x8180, 0xB0F2, + 0x8182, 0xEBF6, + 0x8188, 0xEBF5, + 0x818A, 0xB2B2, + 0x818F, 0xB8E0, + 0x8191, 0xEBF7, + 0x8198, 0xB1EC, + 0x819B, 0xCCC5, + 0x819C, 0xC4A4, + 0x819D, 0xCFA5, + 0x81A3, 0xEBF9, + 0x81A6, 0xECA2, + 0x81A8, 0xC5F2, + 0x81AA, 0xEBFA, + 0x81B3, 0xC9C5, + 0x81BA, 0xE2DF, + 0x81BB, 0xEBFE, + 0x81C0, 0xCDCE, + 0x81C1, 0xECA1, + 0x81C2, 0xB1DB, + 0x81C3, 0xD3B7, + 0x81C6, 0xD2DC, + 0x81CA, 0xEBFD, + 0x81CC, 0xEBFB, + 0x81E3, 0xB3BC, + 0x81E7, 0xEAB0, + 0x81EA, 0xD7D4, + 0x81EC, 0xF4AB, + 0x81ED, 0xB3F4, + 0x81F3, 0xD6C1, + 0x81F4, 0xD6C2, + 0x81FB, 0xD5E9, + 0x81FC, 0xBECA, + 0x81FE, 0xF4A7, + 0x8200, 0xD2A8, + 0x8201, 0xF4A8, + 0x8202, 0xF4A9, + 0x8204, 0xF4AA, + 0x8205, 0xBECB, + 0x8206, 0xD3DF, + 0x820C, 0xC9E0, + 0x820D, 0xC9E1, + 0x8210, 0xF3C2, + 0x8212, 0xCAE6, + 0x8214, 0xCCF2, + 0x821B, 0xE2B6, + 0x821C, 0xCBB4, + 0x821E, 0xCEE8, + 0x821F, 0xD6DB, + 0x8221, 0xF4AD, + 0x8222, 0xF4AE, + 0x8223, 0xF4AF, + 0x8228, 0xF4B2, + 0x822A, 0xBABD, + 0x822B, 0xF4B3, + 0x822C, 0xB0E3, + 0x822D, 0xF4B0, + 0x822F, 0xF4B1, + 0x8230, 0xBDA2, + 0x8231, 0xB2D5, + 0x8233, 0xF4B6, + 0x8234, 0xF4B7, + 0x8235, 0xB6E6, + 0x8236, 0xB2B0, + 0x8237, 0xCFCF, + 0x8238, 0xF4B4, + 0x8239, 0xB4AC, + 0x823B, 0xF4B5, + 0x823E, 0xF4B8, + 0x8244, 0xF4B9, + 0x8247, 0xCDA7, + 0x8249, 0xF4BA, + 0x824B, 0xF4BB, + 0x824F, 0xF4BC, + 0x8258, 0xCBD2, + 0x825A, 0xF4BD, + 0x825F, 0xF4BE, + 0x8268, 0xF4BF, + 0x826E, 0xF4DE, + 0x826F, 0xC1BC, + 0x8270, 0xBCE8, + 0x8272, 0xC9AB, + 0x8273, 0xD1DE, + 0x8274, 0xE5F5, + 0x8279, 0xDCB3, + 0x827A, 0xD2D5, + 0x827D, 0xDCB4, + 0x827E, 0xB0AC, + 0x827F, 0xDCB5, + 0x8282, 0xBDDA, + 0x8284, 0xDCB9, + 0x8288, 0xD8C2, + 0x828A, 0xDCB7, + 0x828B, 0xD3F3, + 0x828D, 0xC9D6, + 0x828E, 0xDCBA, + 0x828F, 0xDCB6, + 0x8291, 0xDCBB, + 0x8292, 0xC3A2, + 0x8297, 0xDCBC, + 0x8298, 0xDCC5, + 0x8299, 0xDCBD, + 0x829C, 0xCEDF, + 0x829D, 0xD6A5, + 0x829F, 0xDCCF, + 0x82A1, 0xDCCD, + 0x82A4, 0xDCD2, + 0x82A5, 0xBDE6, + 0x82A6, 0xC2AB, + 0x82A8, 0xDCB8, + 0x82A9, 0xDCCB, + 0x82AA, 0xDCCE, + 0x82AB, 0xDCBE, + 0x82AC, 0xB7D2, + 0x82AD, 0xB0C5, + 0x82AE, 0xDCC7, + 0x82AF, 0xD0BE, + 0x82B0, 0xDCC1, + 0x82B1, 0xBBA8, + 0x82B3, 0xB7BC, + 0x82B4, 0xDCCC, + 0x82B7, 0xDCC6, + 0x82B8, 0xDCBF, + 0x82B9, 0xC7DB, + 0x82BD, 0xD1BF, + 0x82BE, 0xDCC0, + 0x82C1, 0xDCCA, + 0x82C4, 0xDCD0, + 0x82C7, 0xCEAD, + 0x82C8, 0xDCC2, + 0x82CA, 0xDCC3, + 0x82CB, 0xDCC8, + 0x82CC, 0xDCC9, + 0x82CD, 0xB2D4, + 0x82CE, 0xDCD1, + 0x82CF, 0xCBD5, + 0x82D1, 0xD4B7, + 0x82D2, 0xDCDB, + 0x82D3, 0xDCDF, + 0x82D4, 0xCCA6, + 0x82D5, 0xDCE6, + 0x82D7, 0xC3E7, + 0x82D8, 0xDCDC, + 0x82DB, 0xBFC1, + 0x82DC, 0xDCD9, + 0x82DE, 0xB0FA, + 0x82DF, 0xB9B6, + 0x82E0, 0xDCE5, + 0x82E1, 0xDCD3, + 0x82E3, 0xDCC4, + 0x82E4, 0xDCD6, + 0x82E5, 0xC8F4, + 0x82E6, 0xBFE0, + 0x82EB, 0xC9BB, + 0x82EF, 0xB1BD, + 0x82F1, 0xD3A2, + 0x82F4, 0xDCDA, + 0x82F7, 0xDCD5, + 0x82F9, 0xC6BB, + 0x82FB, 0xDCDE, + 0x8301, 0xD7C2, + 0x8302, 0xC3AF, + 0x8303, 0xB7B6, + 0x8304, 0xC7D1, + 0x8305, 0xC3A9, + 0x8306, 0xDCE2, + 0x8307, 0xDCD8, + 0x8308, 0xDCEB, + 0x8309, 0xDCD4, + 0x830C, 0xDCDD, + 0x830E, 0xBEA5, + 0x830F, 0xDCD7, + 0x8311, 0xDCE0, + 0x8314, 0xDCE3, + 0x8315, 0xDCE4, + 0x8317, 0xDCF8, + 0x831A, 0xDCE1, + 0x831B, 0xDDA2, + 0x831C, 0xDCE7, + 0x8327, 0xBCEB, + 0x8328, 0xB4C4, + 0x832B, 0xC3A3, + 0x832C, 0xB2E7, + 0x832D, 0xDCFA, + 0x832F, 0xDCF2, + 0x8331, 0xDCEF, + 0x8333, 0xDCFC, + 0x8334, 0xDCEE, + 0x8335, 0xD2F0, + 0x8336, 0xB2E8, + 0x8338, 0xC8D7, + 0x8339, 0xC8E3, + 0x833A, 0xDCFB, + 0x833C, 0xDCED, + 0x8340, 0xDCF7, + 0x8343, 0xDCF5, + 0x8346, 0xBEA3, + 0x8347, 0xDCF4, + 0x8349, 0xB2DD, + 0x834F, 0xDCF3, + 0x8350, 0xBCF6, + 0x8351, 0xDCE8, + 0x8352, 0xBBC4, + 0x8354, 0xC0F3, + 0x835A, 0xBCD4, + 0x835B, 0xDCE9, + 0x835C, 0xDCEA, + 0x835E, 0xDCF1, + 0x835F, 0xDCF6, + 0x8360, 0xDCF9, + 0x8361, 0xB5B4, + 0x8363, 0xC8D9, + 0x8364, 0xBBE7, + 0x8365, 0xDCFE, + 0x8366, 0xDCFD, + 0x8367, 0xD3AB, + 0x8368, 0xDDA1, + 0x8369, 0xDDA3, + 0x836A, 0xDDA5, + 0x836B, 0xD2F1, + 0x836C, 0xDDA4, + 0x836D, 0xDDA6, + 0x836E, 0xDDA7, + 0x836F, 0xD2A9, + 0x8377, 0xBAC9, + 0x8378, 0xDDA9, + 0x837B, 0xDDB6, + 0x837C, 0xDDB1, + 0x837D, 0xDDB4, + 0x8385, 0xDDB0, + 0x8386, 0xC6CE, + 0x8389, 0xC0F2, + 0x838E, 0xC9AF, + 0x8392, 0xDCEC, + 0x8393, 0xDDAE, + 0x8398, 0xDDB7, + 0x839B, 0xDCF0, + 0x839C, 0xDDAF, + 0x839E, 0xDDB8, + 0x83A0, 0xDDAC, + 0x83A8, 0xDDB9, + 0x83A9, 0xDDB3, + 0x83AA, 0xDDAD, + 0x83AB, 0xC4AA, + 0x83B0, 0xDDA8, + 0x83B1, 0xC0B3, + 0x83B2, 0xC1AB, + 0x83B3, 0xDDAA, + 0x83B4, 0xDDAB, + 0x83B6, 0xDDB2, + 0x83B7, 0xBBF1, + 0x83B8, 0xDDB5, + 0x83B9, 0xD3A8, + 0x83BA, 0xDDBA, + 0x83BC, 0xDDBB, + 0x83BD, 0xC3A7, + 0x83C0, 0xDDD2, + 0x83C1, 0xDDBC, + 0x83C5, 0xDDD1, + 0x83C7, 0xB9BD, + 0x83CA, 0xBED5, + 0x83CC, 0xBEFA, + 0x83CF, 0xBACA, + 0x83D4, 0xDDCA, + 0x83D6, 0xDDC5, + 0x83D8, 0xDDBF, + 0x83DC, 0xB2CB, + 0x83DD, 0xDDC3, + 0x83DF, 0xDDCB, + 0x83E0, 0xB2A4, + 0x83E1, 0xDDD5, + 0x83E5, 0xDDBE, + 0x83E9, 0xC6D0, + 0x83EA, 0xDDD0, + 0x83F0, 0xDDD4, + 0x83F1, 0xC1E2, + 0x83F2, 0xB7C6, + 0x83F8, 0xDDCE, + 0x83F9, 0xDDCF, + 0x83FD, 0xDDC4, + 0x8401, 0xDDBD, + 0x8403, 0xDDCD, + 0x8404, 0xCCD1, + 0x8406, 0xDDC9, + 0x840B, 0xDDC2, + 0x840C, 0xC3C8, + 0x840D, 0xC6BC, + 0x840E, 0xCEAE, + 0x840F, 0xDDCC, + 0x8411, 0xDDC8, + 0x8418, 0xDDC1, + 0x841C, 0xDDC6, + 0x841D, 0xC2DC, + 0x8424, 0xD3A9, + 0x8425, 0xD3AA, + 0x8426, 0xDDD3, + 0x8427, 0xCFF4, + 0x8428, 0xC8F8, + 0x8431, 0xDDE6, + 0x8438, 0xDDC7, + 0x843C, 0xDDE0, + 0x843D, 0xC2E4, + 0x8446, 0xDDE1, + 0x8451, 0xDDD7, + 0x8457, 0xD6F8, + 0x8459, 0xDDD9, + 0x845A, 0xDDD8, + 0x845B, 0xB8F0, + 0x845C, 0xDDD6, + 0x8461, 0xC6CF, + 0x8463, 0xB6AD, + 0x8469, 0xDDE2, + 0x846B, 0xBAF9, + 0x846C, 0xD4E1, + 0x846D, 0xDDE7, + 0x8471, 0xB4D0, + 0x8473, 0xDDDA, + 0x8475, 0xBFFB, + 0x8476, 0xDDE3, + 0x8478, 0xDDDF, + 0x847A, 0xDDDD, + 0x8482, 0xB5D9, + 0x8487, 0xDDDB, + 0x8488, 0xDDDC, + 0x8489, 0xDDDE, + 0x848B, 0xBDAF, + 0x848C, 0xDDE4, + 0x848E, 0xDDE5, + 0x8497, 0xDDF5, + 0x8499, 0xC3C9, + 0x849C, 0xCBE2, + 0x84A1, 0xDDF2, + 0x84AF, 0xD8E1, + 0x84B2, 0xC6D1, + 0x84B4, 0xDDF4, + 0x84B8, 0xD5F4, + 0x84B9, 0xDDF3, + 0x84BA, 0xDDF0, + 0x84BD, 0xDDEC, + 0x84BF, 0xDDEF, + 0x84C1, 0xDDE8, + 0x84C4, 0xD0EE, + 0x84C9, 0xC8D8, + 0x84CA, 0xDDEE, + 0x84CD, 0xDDE9, + 0x84D0, 0xDDEA, + 0x84D1, 0xCBF2, + 0x84D3, 0xDDED, + 0x84D6, 0xB1CD, + 0x84DD, 0xC0B6, + 0x84DF, 0xBCBB, + 0x84E0, 0xDDF1, + 0x84E3, 0xDDF7, + 0x84E5, 0xDDF6, + 0x84E6, 0xDDEB, + 0x84EC, 0xC5EE, + 0x84F0, 0xDDFB, + 0x84FC, 0xDEA4, + 0x84FF, 0xDEA3, + 0x850C, 0xDDF8, + 0x8511, 0xC3EF, + 0x8513, 0xC2FB, + 0x8517, 0xD5E1, + 0x851A, 0xCEB5, + 0x851F, 0xDDFD, + 0x8521, 0xB2CC, + 0x852B, 0xC4E8, + 0x852C, 0xCADF, + 0x8537, 0xC7BE, + 0x8538, 0xDDFA, + 0x8539, 0xDDFC, + 0x853A, 0xDDFE, + 0x853B, 0xDEA2, + 0x853C, 0xB0AA, + 0x853D, 0xB1CE, + 0x8543, 0xDEAC, + 0x8548, 0xDEA6, + 0x8549, 0xBDB6, + 0x854A, 0xC8EF, + 0x8556, 0xDEA1, + 0x8559, 0xDEA5, + 0x855E, 0xDEA9, + 0x8564, 0xDEA8, + 0x8568, 0xDEA7, + 0x8572, 0xDEAD, + 0x8574, 0xD4CC, + 0x8579, 0xDEB3, + 0x857A, 0xDEAA, + 0x857B, 0xDEAE, + 0x857E, 0xC0D9, + 0x8584, 0xB1A1, + 0x8585, 0xDEB6, + 0x8587, 0xDEB1, + 0x858F, 0xDEB2, + 0x859B, 0xD1A6, + 0x859C, 0xDEB5, + 0x85A4, 0xDEAF, + 0x85A8, 0xDEB0, + 0x85AA, 0xD0BD, + 0x85AE, 0xDEB4, + 0x85AF, 0xCAED, + 0x85B0, 0xDEB9, + 0x85B7, 0xDEB8, + 0x85B9, 0xDEB7, + 0x85C1, 0xDEBB, + 0x85C9, 0xBDE5, + 0x85CF, 0xB2D8, + 0x85D0, 0xC3EA, + 0x85D3, 0xDEBA, + 0x85D5, 0xC5BA, + 0x85DC, 0xDEBC, + 0x85E4, 0xCCD9, + 0x85E9, 0xB7AA, + 0x85FB, 0xD4E5, + 0x85FF, 0xDEBD, + 0x8605, 0xDEBF, + 0x8611, 0xC4A2, + 0x8616, 0xDEC1, + 0x8627, 0xDEBE, + 0x8629, 0xDEC0, + 0x8638, 0xD5BA, + 0x863C, 0xDEC2, + 0x864D, 0xF2AE, + 0x864E, 0xBBA2, + 0x864F, 0xC2B2, + 0x8650, 0xC5B0, + 0x8651, 0xC2C7, + 0x8654, 0xF2AF, + 0x865A, 0xD0E9, + 0x865E, 0xD3DD, + 0x8662, 0xEBBD, + 0x866B, 0xB3E6, + 0x866C, 0xF2B0, + 0x866E, 0xF2B1, + 0x8671, 0xCAAD, + 0x8679, 0xBAE7, + 0x867A, 0xF2B3, + 0x867B, 0xF2B5, + 0x867C, 0xF2B4, + 0x867D, 0xCBE4, + 0x867E, 0xCFBA, + 0x867F, 0xF2B2, + 0x8680, 0xCAB4, + 0x8681, 0xD2CF, + 0x8682, 0xC2EC, + 0x868A, 0xCEC3, + 0x868B, 0xF2B8, + 0x868C, 0xB0F6, + 0x868D, 0xF2B7, + 0x8693, 0xF2BE, + 0x8695, 0xB2CF, + 0x869C, 0xD1C1, + 0x869D, 0xF2BA, + 0x86A3, 0xF2BC, + 0x86A4, 0xD4E9, + 0x86A7, 0xF2BB, + 0x86A8, 0xF2B6, + 0x86A9, 0xF2BF, + 0x86AA, 0xF2BD, + 0x86AC, 0xF2B9, + 0x86AF, 0xF2C7, + 0x86B0, 0xF2C4, + 0x86B1, 0xF2C6, + 0x86B4, 0xF2CA, + 0x86B5, 0xF2C2, + 0x86B6, 0xF2C0, + 0x86BA, 0xF2C5, + 0x86C0, 0xD6FB, + 0x86C4, 0xF2C1, + 0x86C6, 0xC7F9, + 0x86C7, 0xC9DF, + 0x86C9, 0xF2C8, + 0x86CA, 0xB9C6, + 0x86CB, 0xB5B0, + 0x86CE, 0xF2C3, + 0x86CF, 0xF2C9, + 0x86D0, 0xF2D0, + 0x86D1, 0xF2D6, + 0x86D4, 0xBBD7, + 0x86D8, 0xF2D5, + 0x86D9, 0xCDDC, + 0x86DB, 0xD6EB, + 0x86DE, 0xF2D2, + 0x86DF, 0xF2D4, + 0x86E4, 0xB8F2, + 0x86E9, 0xF2CB, + 0x86ED, 0xF2CE, + 0x86EE, 0xC2F9, + 0x86F0, 0xD5DD, + 0x86F1, 0xF2CC, + 0x86F2, 0xF2CD, + 0x86F3, 0xF2CF, + 0x86F4, 0xF2D3, + 0x86F8, 0xF2D9, + 0x86F9, 0xD3BC, + 0x86FE, 0xB6EA, + 0x8700, 0xCAF1, + 0x8702, 0xB7E4, + 0x8703, 0xF2D7, + 0x8707, 0xF2D8, + 0x8708, 0xF2DA, + 0x8709, 0xF2DD, + 0x870A, 0xF2DB, + 0x870D, 0xF2DC, + 0x8712, 0xD1D1, + 0x8713, 0xF2D1, + 0x8715, 0xCDC9, + 0x8717, 0xCECF, + 0x8718, 0xD6A9, + 0x871A, 0xF2E3, + 0x871C, 0xC3DB, + 0x871E, 0xF2E0, + 0x8721, 0xC0AF, + 0x8722, 0xF2EC, + 0x8723, 0xF2DE, + 0x8725, 0xF2E1, + 0x8729, 0xF2E8, + 0x872E, 0xF2E2, + 0x8731, 0xF2E7, + 0x8734, 0xF2E6, + 0x8737, 0xF2E9, + 0x873B, 0xF2DF, + 0x873E, 0xF2E4, + 0x873F, 0xF2EA, + 0x8747, 0xD3AC, + 0x8748, 0xF2E5, + 0x8749, 0xB2F5, + 0x874C, 0xF2F2, + 0x874E, 0xD0AB, + 0x8753, 0xF2F5, + 0x8757, 0xBBC8, + 0x8759, 0xF2F9, + 0x8760, 0xF2F0, + 0x8763, 0xF2F6, + 0x8764, 0xF2F8, + 0x8765, 0xF2FA, + 0x876E, 0xF2F3, + 0x8770, 0xF2F1, + 0x8774, 0xBAFB, + 0x8776, 0xB5FB, + 0x877B, 0xF2EF, + 0x877C, 0xF2F7, + 0x877D, 0xF2ED, + 0x877E, 0xF2EE, + 0x8782, 0xF2EB, + 0x8783, 0xF3A6, + 0x8785, 0xF3A3, + 0x8788, 0xF3A2, + 0x878B, 0xF2F4, + 0x878D, 0xC8DA, + 0x8793, 0xF2FB, + 0x8797, 0xF3A5, + 0x879F, 0xC3F8, + 0x87A8, 0xF2FD, + 0x87AB, 0xF3A7, + 0x87AC, 0xF3A9, + 0x87AD, 0xF3A4, + 0x87AF, 0xF2FC, + 0x87B3, 0xF3AB, + 0x87B5, 0xF3AA, + 0x87BA, 0xC2DD, + 0x87BD, 0xF3AE, + 0x87C0, 0xF3B0, + 0x87C6, 0xF3A1, + 0x87CA, 0xF3B1, + 0x87CB, 0xF3AC, + 0x87D1, 0xF3AF, + 0x87D2, 0xF2FE, + 0x87D3, 0xF3AD, + 0x87DB, 0xF3B2, + 0x87E0, 0xF3B4, + 0x87E5, 0xF3A8, + 0x87EA, 0xF3B3, + 0x87EE, 0xF3B5, + 0x87F9, 0xD0B7, + 0x87FE, 0xF3B8, + 0x8803, 0xD9F9, + 0x880A, 0xF3B9, + 0x8813, 0xF3B7, + 0x8815, 0xC8E4, + 0x8816, 0xF3B6, + 0x881B, 0xF3BA, + 0x8821, 0xF3BB, + 0x8822, 0xB4C0, + 0x8832, 0xEEC3, + 0x8839, 0xF3BC, + 0x883C, 0xF3BD, + 0x8840, 0xD1AA, + 0x8844, 0xF4AC, + 0x8845, 0xD0C6, + 0x884C, 0xD0D0, + 0x884D, 0xD1DC, + 0x8854, 0xCFCE, + 0x8857, 0xBDD6, + 0x8859, 0xD1C3, + 0x8861, 0xBAE2, + 0x8862, 0xE1E9, + 0x8863, 0xD2C2, + 0x8864, 0xF1C2, + 0x8865, 0xB2B9, + 0x8868, 0xB1ED, + 0x8869, 0xF1C3, + 0x886B, 0xC9C0, + 0x886C, 0xB3C4, + 0x886E, 0xD9F2, + 0x8870, 0xCBA5, + 0x8872, 0xF1C4, + 0x8877, 0xD6D4, + 0x887D, 0xF1C5, + 0x887E, 0xF4C0, + 0x887F, 0xF1C6, + 0x8881, 0xD4AC, + 0x8882, 0xF1C7, + 0x8884, 0xB0C0, + 0x8885, 0xF4C1, + 0x8888, 0xF4C2, + 0x888B, 0xB4FC, + 0x888D, 0xC5DB, + 0x8892, 0xCCBB, + 0x8896, 0xD0E4, + 0x889C, 0xCDE0, + 0x88A2, 0xF1C8, + 0x88A4, 0xD9F3, + 0x88AB, 0xB1BB, + 0x88AD, 0xCFAE, + 0x88B1, 0xB8A4, + 0x88B7, 0xF1CA, + 0x88BC, 0xF1CB, + 0x88C1, 0xB2C3, + 0x88C2, 0xC1D1, + 0x88C5, 0xD7B0, + 0x88C6, 0xF1C9, + 0x88C9, 0xF1CC, + 0x88CE, 0xF1CE, + 0x88D2, 0xD9F6, + 0x88D4, 0xD2E1, + 0x88D5, 0xD4A3, + 0x88D8, 0xF4C3, + 0x88D9, 0xC8B9, + 0x88DF, 0xF4C4, + 0x88E2, 0xF1CD, + 0x88E3, 0xF1CF, + 0x88E4, 0xBFE3, + 0x88E5, 0xF1D0, + 0x88E8, 0xF1D4, + 0x88F0, 0xF1D6, + 0x88F1, 0xF1D1, + 0x88F3, 0xC9D1, + 0x88F4, 0xC5E1, + 0x88F8, 0xC2E3, + 0x88F9, 0xB9FC, + 0x88FC, 0xF1D3, + 0x88FE, 0xF1D5, + 0x8902, 0xB9D3, + 0x890A, 0xF1DB, + 0x8910, 0xBAD6, + 0x8912, 0xB0FD, + 0x8913, 0xF1D9, + 0x8919, 0xF1D8, + 0x891A, 0xF1D2, + 0x891B, 0xF1DA, + 0x8921, 0xF1D7, + 0x8925, 0xC8EC, + 0x892A, 0xCDCA, + 0x892B, 0xF1DD, + 0x8930, 0xE5BD, + 0x8934, 0xF1DC, + 0x8936, 0xF1DE, + 0x8941, 0xF1DF, + 0x8944, 0xCFE5, + 0x895E, 0xF4C5, + 0x895F, 0xBDF3, + 0x8966, 0xF1E0, + 0x897B, 0xF1E1, + 0x897F, 0xCEF7, + 0x8981, 0xD2AA, + 0x8983, 0xF1FB, + 0x8986, 0xB8B2, + 0x89C1, 0xBCFB, + 0x89C2, 0xB9DB, + 0x89C4, 0xB9E6, + 0x89C5, 0xC3D9, + 0x89C6, 0xCAD3, + 0x89C7, 0xEAE8, + 0x89C8, 0xC0C0, + 0x89C9, 0xBEF5, + 0x89CA, 0xEAE9, + 0x89CB, 0xEAEA, + 0x89CC, 0xEAEB, + 0x89CE, 0xEAEC, + 0x89CF, 0xEAED, + 0x89D0, 0xEAEE, + 0x89D1, 0xEAEF, + 0x89D2, 0xBDC7, + 0x89D6, 0xF5FB, + 0x89DA, 0xF5FD, + 0x89DC, 0xF5FE, + 0x89DE, 0xF5FC, + 0x89E3, 0xBDE2, + 0x89E5, 0xF6A1, + 0x89E6, 0xB4A5, + 0x89EB, 0xF6A2, + 0x89EF, 0xF6A3, + 0x89F3, 0xECB2, + 0x8A00, 0xD1D4, + 0x8A07, 0xD9EA, + 0x8A3E, 0xF6A4, + 0x8A48, 0xEEBA, + 0x8A79, 0xD5B2, + 0x8A89, 0xD3FE, + 0x8A8A, 0xCCDC, + 0x8A93, 0xCAC4, + 0x8B07, 0xE5C0, + 0x8B26, 0xF6A5, + 0x8B66, 0xBEAF, + 0x8B6C, 0xC6A9, + 0x8BA0, 0xDAA5, + 0x8BA1, 0xBCC6, + 0x8BA2, 0xB6A9, + 0x8BA3, 0xB8BC, + 0x8BA4, 0xC8CF, + 0x8BA5, 0xBCA5, + 0x8BA6, 0xDAA6, + 0x8BA7, 0xDAA7, + 0x8BA8, 0xCCD6, + 0x8BA9, 0xC8C3, + 0x8BAA, 0xDAA8, + 0x8BAB, 0xC6FD, + 0x8BAD, 0xD1B5, + 0x8BAE, 0xD2E9, + 0x8BAF, 0xD1B6, + 0x8BB0, 0xBCC7, + 0x8BB2, 0xBDB2, + 0x8BB3, 0xBBE4, + 0x8BB4, 0xDAA9, + 0x8BB5, 0xDAAA, + 0x8BB6, 0xD1C8, + 0x8BB7, 0xDAAB, + 0x8BB8, 0xD0ED, + 0x8BB9, 0xB6EF, + 0x8BBA, 0xC2DB, + 0x8BBC, 0xCBCF, + 0x8BBD, 0xB7ED, + 0x8BBE, 0xC9E8, + 0x8BBF, 0xB7C3, + 0x8BC0, 0xBEF7, + 0x8BC1, 0xD6A4, + 0x8BC2, 0xDAAC, + 0x8BC3, 0xDAAD, + 0x8BC4, 0xC6C0, + 0x8BC5, 0xD7E7, + 0x8BC6, 0xCAB6, + 0x8BC8, 0xD5A9, + 0x8BC9, 0xCBDF, + 0x8BCA, 0xD5EF, + 0x8BCB, 0xDAAE, + 0x8BCC, 0xD6DF, + 0x8BCD, 0xB4CA, + 0x8BCE, 0xDAB0, + 0x8BCF, 0xDAAF, + 0x8BD1, 0xD2EB, + 0x8BD2, 0xDAB1, + 0x8BD3, 0xDAB2, + 0x8BD4, 0xDAB3, + 0x8BD5, 0xCAD4, + 0x8BD6, 0xDAB4, + 0x8BD7, 0xCAAB, + 0x8BD8, 0xDAB5, + 0x8BD9, 0xDAB6, + 0x8BDA, 0xB3CF, + 0x8BDB, 0xD6EF, + 0x8BDC, 0xDAB7, + 0x8BDD, 0xBBB0, + 0x8BDE, 0xB5AE, + 0x8BDF, 0xDAB8, + 0x8BE0, 0xDAB9, + 0x8BE1, 0xB9EE, + 0x8BE2, 0xD1AF, + 0x8BE3, 0xD2E8, + 0x8BE4, 0xDABA, + 0x8BE5, 0xB8C3, + 0x8BE6, 0xCFEA, + 0x8BE7, 0xB2EF, + 0x8BE8, 0xDABB, + 0x8BE9, 0xDABC, + 0x8BEB, 0xBDEB, + 0x8BEC, 0xCEDC, + 0x8BED, 0xD3EF, + 0x8BEE, 0xDABD, + 0x8BEF, 0xCEF3, + 0x8BF0, 0xDABE, + 0x8BF1, 0xD3D5, + 0x8BF2, 0xBBE5, + 0x8BF3, 0xDABF, + 0x8BF4, 0xCBB5, + 0x8BF5, 0xCBD0, + 0x8BF6, 0xDAC0, + 0x8BF7, 0xC7EB, + 0x8BF8, 0xD6EE, + 0x8BF9, 0xDAC1, + 0x8BFA, 0xC5B5, + 0x8BFB, 0xB6C1, + 0x8BFC, 0xDAC2, + 0x8BFD, 0xB7CC, + 0x8BFE, 0xBFCE, + 0x8BFF, 0xDAC3, + 0x8C00, 0xDAC4, + 0x8C01, 0xCBAD, + 0x8C02, 0xDAC5, + 0x8C03, 0xB5F7, + 0x8C04, 0xDAC6, + 0x8C05, 0xC1C2, + 0x8C06, 0xD7BB, + 0x8C07, 0xDAC7, + 0x8C08, 0xCCB8, + 0x8C0A, 0xD2EA, + 0x8C0B, 0xC4B1, + 0x8C0C, 0xDAC8, + 0x8C0D, 0xB5FD, + 0x8C0E, 0xBBD1, + 0x8C0F, 0xDAC9, + 0x8C10, 0xD0B3, + 0x8C11, 0xDACA, + 0x8C12, 0xDACB, + 0x8C13, 0xCEBD, + 0x8C14, 0xDACC, + 0x8C15, 0xDACD, + 0x8C16, 0xDACE, + 0x8C17, 0xB2F7, + 0x8C18, 0xDAD1, + 0x8C19, 0xDACF, + 0x8C1A, 0xD1E8, + 0x8C1B, 0xDAD0, + 0x8C1C, 0xC3D5, + 0x8C1D, 0xDAD2, + 0x8C1F, 0xDAD3, + 0x8C20, 0xDAD4, + 0x8C21, 0xDAD5, + 0x8C22, 0xD0BB, + 0x8C23, 0xD2A5, + 0x8C24, 0xB0F9, + 0x8C25, 0xDAD6, + 0x8C26, 0xC7AB, + 0x8C27, 0xDAD7, + 0x8C28, 0xBDF7, + 0x8C29, 0xC3A1, + 0x8C2A, 0xDAD8, + 0x8C2B, 0xDAD9, + 0x8C2C, 0xC3FD, + 0x8C2D, 0xCCB7, + 0x8C2E, 0xDADA, + 0x8C2F, 0xDADB, + 0x8C30, 0xC0BE, + 0x8C31, 0xC6D7, + 0x8C32, 0xDADC, + 0x8C33, 0xDADD, + 0x8C34, 0xC7B4, + 0x8C35, 0xDADE, + 0x8C36, 0xDADF, + 0x8C37, 0xB9C8, + 0x8C41, 0xBBED, + 0x8C46, 0xB6B9, + 0x8C47, 0xF4F8, + 0x8C49, 0xF4F9, + 0x8C4C, 0xCDE3, + 0x8C55, 0xF5B9, + 0x8C5A, 0xEBE0, + 0x8C61, 0xCFF3, + 0x8C62, 0xBBBF, + 0x8C6A, 0xBAC0, + 0x8C6B, 0xD4A5, + 0x8C73, 0xE1D9, + 0x8C78, 0xF5F4, + 0x8C79, 0xB1AA, + 0x8C7A, 0xB2F2, + 0x8C82, 0xF5F5, + 0x8C85, 0xF5F7, + 0x8C89, 0xBAD1, + 0x8C8A, 0xF5F6, + 0x8C8C, 0xC3B2, + 0x8C94, 0xF5F9, + 0x8C98, 0xF5F8, + 0x8D1D, 0xB1B4, + 0x8D1E, 0xD5EA, + 0x8D1F, 0xB8BA, + 0x8D21, 0xB9B1, + 0x8D22, 0xB2C6, + 0x8D23, 0xD4F0, + 0x8D24, 0xCFCD, + 0x8D25, 0xB0DC, + 0x8D26, 0xD5CB, + 0x8D27, 0xBBF5, + 0x8D28, 0xD6CA, + 0x8D29, 0xB7B7, + 0x8D2A, 0xCCB0, + 0x8D2B, 0xC6B6, + 0x8D2C, 0xB1E1, + 0x8D2D, 0xB9BA, + 0x8D2E, 0xD6FC, + 0x8D2F, 0xB9E1, + 0x8D30, 0xB7A1, + 0x8D31, 0xBCFA, + 0x8D32, 0xEADA, + 0x8D33, 0xEADB, + 0x8D34, 0xCCF9, + 0x8D35, 0xB9F3, + 0x8D36, 0xEADC, + 0x8D37, 0xB4FB, + 0x8D38, 0xC3B3, + 0x8D39, 0xB7D1, + 0x8D3A, 0xBAD8, + 0x8D3B, 0xEADD, + 0x8D3C, 0xD4F4, + 0x8D3D, 0xEADE, + 0x8D3E, 0xBCD6, + 0x8D3F, 0xBBDF, + 0x8D40, 0xEADF, + 0x8D41, 0xC1DE, + 0x8D42, 0xC2B8, + 0x8D43, 0xD4DF, + 0x8D44, 0xD7CA, + 0x8D45, 0xEAE0, + 0x8D46, 0xEAE1, + 0x8D47, 0xEAE4, + 0x8D48, 0xEAE2, + 0x8D49, 0xEAE3, + 0x8D4A, 0xC9DE, + 0x8D4B, 0xB8B3, + 0x8D4C, 0xB6C4, + 0x8D4D, 0xEAE5, + 0x8D4E, 0xCAEA, + 0x8D4F, 0xC9CD, + 0x8D50, 0xB4CD, + 0x8D53, 0xE2D9, + 0x8D54, 0xC5E2, + 0x8D55, 0xEAE6, + 0x8D56, 0xC0B5, + 0x8D58, 0xD7B8, + 0x8D59, 0xEAE7, + 0x8D5A, 0xD7AC, + 0x8D5B, 0xC8FC, + 0x8D5C, 0xD8D3, + 0x8D5D, 0xD8CD, + 0x8D5E, 0xD4DE, + 0x8D60, 0xD4F9, + 0x8D61, 0xC9C4, + 0x8D62, 0xD3AE, + 0x8D63, 0xB8D3, + 0x8D64, 0xB3E0, + 0x8D66, 0xC9E2, + 0x8D67, 0xF4F6, + 0x8D6B, 0xBAD5, + 0x8D6D, 0xF4F7, + 0x8D70, 0xD7DF, + 0x8D73, 0xF4F1, + 0x8D74, 0xB8B0, + 0x8D75, 0xD5D4, + 0x8D76, 0xB8CF, + 0x8D77, 0xC6F0, + 0x8D81, 0xB3C3, + 0x8D84, 0xF4F2, + 0x8D85, 0xB3AC, + 0x8D8A, 0xD4BD, + 0x8D8B, 0xC7F7, + 0x8D91, 0xF4F4, + 0x8D94, 0xF4F3, + 0x8D9F, 0xCCCB, + 0x8DA3, 0xC8A4, + 0x8DB1, 0xF4F5, + 0x8DB3, 0xD7E3, + 0x8DB4, 0xC5BF, + 0x8DB5, 0xF5C0, + 0x8DB8, 0xF5BB, + 0x8DBA, 0xF5C3, + 0x8DBC, 0xF5C2, + 0x8DBE, 0xD6BA, + 0x8DBF, 0xF5C1, + 0x8DC3, 0xD4BE, + 0x8DC4, 0xF5C4, + 0x8DC6, 0xF5CC, + 0x8DCB, 0xB0CF, + 0x8DCC, 0xB5F8, + 0x8DCE, 0xF5C9, + 0x8DCF, 0xF5CA, + 0x8DD1, 0xC5DC, + 0x8DD6, 0xF5C5, + 0x8DD7, 0xF5C6, + 0x8DDA, 0xF5C7, + 0x8DDB, 0xF5CB, + 0x8DDD, 0xBEE0, + 0x8DDE, 0xF5C8, + 0x8DDF, 0xB8FA, + 0x8DE3, 0xF5D0, + 0x8DE4, 0xF5D3, + 0x8DE8, 0xBFE7, + 0x8DEA, 0xB9F2, + 0x8DEB, 0xF5BC, + 0x8DEC, 0xF5CD, + 0x8DEF, 0xC2B7, + 0x8DF3, 0xCCF8, + 0x8DF5, 0xBCF9, + 0x8DF7, 0xF5CE, + 0x8DF8, 0xF5CF, + 0x8DF9, 0xF5D1, + 0x8DFA, 0xB6E5, + 0x8DFB, 0xF5D2, + 0x8DFD, 0xF5D5, + 0x8E05, 0xF5BD, + 0x8E09, 0xF5D4, + 0x8E0A, 0xD3BB, + 0x8E0C, 0xB3EC, + 0x8E0F, 0xCCA4, + 0x8E14, 0xF5D6, + 0x8E1D, 0xF5D7, + 0x8E1E, 0xBEE1, + 0x8E1F, 0xF5D8, + 0x8E22, 0xCCDF, + 0x8E23, 0xF5DB, + 0x8E29, 0xB2C8, + 0x8E2A, 0xD7D9, + 0x8E2C, 0xF5D9, + 0x8E2E, 0xF5DA, + 0x8E2F, 0xF5DC, + 0x8E31, 0xF5E2, + 0x8E35, 0xF5E0, + 0x8E39, 0xF5DF, + 0x8E3A, 0xF5DD, + 0x8E3D, 0xF5E1, + 0x8E40, 0xF5DE, + 0x8E41, 0xF5E4, + 0x8E42, 0xF5E5, + 0x8E44, 0xCCE3, + 0x8E47, 0xE5BF, + 0x8E48, 0xB5B8, + 0x8E49, 0xF5E3, + 0x8E4A, 0xF5E8, + 0x8E4B, 0xCCA3, + 0x8E51, 0xF5E6, + 0x8E52, 0xF5E7, + 0x8E59, 0xF5BE, + 0x8E66, 0xB1C4, + 0x8E69, 0xF5BF, + 0x8E6C, 0xB5C5, + 0x8E6D, 0xB2E4, + 0x8E6F, 0xF5EC, + 0x8E70, 0xF5E9, + 0x8E72, 0xB6D7, + 0x8E74, 0xF5ED, + 0x8E76, 0xF5EA, + 0x8E7C, 0xF5EB, + 0x8E7F, 0xB4DA, + 0x8E81, 0xD4EA, + 0x8E85, 0xF5EE, + 0x8E87, 0xB3F9, + 0x8E8F, 0xF5EF, + 0x8E90, 0xF5F1, + 0x8E94, 0xF5F0, + 0x8E9C, 0xF5F2, + 0x8E9E, 0xF5F3, + 0x8EAB, 0xC9ED, + 0x8EAC, 0xB9AA, + 0x8EAF, 0xC7FB, + 0x8EB2, 0xB6E3, + 0x8EBA, 0xCCC9, + 0x8ECE, 0xEAA6, + 0x8F66, 0xB3B5, + 0x8F67, 0xD4FE, + 0x8F68, 0xB9EC, + 0x8F69, 0xD0F9, + 0x8F6B, 0xE9ED, + 0x8F6C, 0xD7AA, + 0x8F6D, 0xE9EE, + 0x8F6E, 0xC2D6, + 0x8F6F, 0xC8ED, + 0x8F70, 0xBAE4, + 0x8F71, 0xE9EF, + 0x8F72, 0xE9F0, + 0x8F73, 0xE9F1, + 0x8F74, 0xD6E1, + 0x8F75, 0xE9F2, + 0x8F76, 0xE9F3, + 0x8F77, 0xE9F5, + 0x8F78, 0xE9F4, + 0x8F79, 0xE9F6, + 0x8F7A, 0xE9F7, + 0x8F7B, 0xC7E1, + 0x8F7C, 0xE9F8, + 0x8F7D, 0xD4D8, + 0x8F7E, 0xE9F9, + 0x8F7F, 0xBDCE, + 0x8F81, 0xE9FA, + 0x8F82, 0xE9FB, + 0x8F83, 0xBDCF, + 0x8F84, 0xE9FC, + 0x8F85, 0xB8A8, + 0x8F86, 0xC1BE, + 0x8F87, 0xE9FD, + 0x8F88, 0xB1B2, + 0x8F89, 0xBBD4, + 0x8F8A, 0xB9F5, + 0x8F8B, 0xE9FE, + 0x8F8D, 0xEAA1, + 0x8F8E, 0xEAA2, + 0x8F8F, 0xEAA3, + 0x8F90, 0xB7F8, + 0x8F91, 0xBCAD, + 0x8F93, 0xCAE4, + 0x8F94, 0xE0CE, + 0x8F95, 0xD4AF, + 0x8F96, 0xCFBD, + 0x8F97, 0xD5B7, + 0x8F98, 0xEAA4, + 0x8F99, 0xD5DE, + 0x8F9A, 0xEAA5, + 0x8F9B, 0xD0C1, + 0x8F9C, 0xB9BC, + 0x8F9E, 0xB4C7, + 0x8F9F, 0xB1D9, + 0x8FA3, 0xC0B1, + 0x8FA8, 0xB1E6, + 0x8FA9, 0xB1E7, + 0x8FAB, 0xB1E8, + 0x8FB0, 0xB3BD, + 0x8FB1, 0xC8E8, + 0x8FB6, 0xE5C1, + 0x8FB9, 0xB1DF, + 0x8FBD, 0xC1C9, + 0x8FBE, 0xB4EF, + 0x8FC1, 0xC7A8, + 0x8FC2, 0xD3D8, + 0x8FC4, 0xC6F9, + 0x8FC5, 0xD1B8, + 0x8FC7, 0xB9FD, + 0x8FC8, 0xC2F5, + 0x8FCE, 0xD3AD, + 0x8FD0, 0xD4CB, + 0x8FD1, 0xBDFC, + 0x8FD3, 0xE5C2, + 0x8FD4, 0xB7B5, + 0x8FD5, 0xE5C3, + 0x8FD8, 0xBBB9, + 0x8FD9, 0xD5E2, + 0x8FDB, 0xBDF8, + 0x8FDC, 0xD4B6, + 0x8FDD, 0xCEA5, + 0x8FDE, 0xC1AC, + 0x8FDF, 0xB3D9, + 0x8FE2, 0xCCF6, + 0x8FE4, 0xE5C6, + 0x8FE5, 0xE5C4, + 0x8FE6, 0xE5C8, + 0x8FE8, 0xE5CA, + 0x8FE9, 0xE5C7, + 0x8FEA, 0xB5CF, + 0x8FEB, 0xC6C8, + 0x8FED, 0xB5FC, + 0x8FEE, 0xE5C5, + 0x8FF0, 0xCAF6, + 0x8FF3, 0xE5C9, + 0x8FF7, 0xC3D4, + 0x8FF8, 0xB1C5, + 0x8FF9, 0xBCA3, + 0x8FFD, 0xD7B7, + 0x9000, 0xCDCB, + 0x9001, 0xCBCD, + 0x9002, 0xCACA, + 0x9003, 0xCCD3, + 0x9004, 0xE5CC, + 0x9005, 0xE5CB, + 0x9006, 0xC4E6, + 0x9009, 0xD1A1, + 0x900A, 0xD1B7, + 0x900B, 0xE5CD, + 0x900D, 0xE5D0, + 0x900F, 0xCDB8, + 0x9010, 0xD6F0, + 0x9011, 0xE5CF, + 0x9012, 0xB5DD, + 0x9014, 0xCDBE, + 0x9016, 0xE5D1, + 0x9017, 0xB6BA, + 0x901A, 0xCDA8, + 0x901B, 0xB9E4, + 0x901D, 0xCAC5, + 0x901E, 0xB3D1, + 0x901F, 0xCBD9, + 0x9020, 0xD4EC, + 0x9021, 0xE5D2, + 0x9022, 0xB7EA, + 0x9026, 0xE5CE, + 0x902D, 0xE5D5, + 0x902E, 0xB4FE, + 0x902F, 0xE5D6, + 0x9035, 0xE5D3, + 0x9036, 0xE5D4, + 0x9038, 0xD2DD, + 0x903B, 0xC2DF, + 0x903C, 0xB1C6, + 0x903E, 0xD3E2, + 0x9041, 0xB6DD, + 0x9042, 0xCBEC, + 0x9044, 0xE5D7, + 0x9047, 0xD3F6, + 0x904D, 0xB1E9, + 0x904F, 0xB6F4, + 0x9050, 0xE5DA, + 0x9051, 0xE5D8, + 0x9052, 0xE5D9, + 0x9053, 0xB5C0, + 0x9057, 0xD2C5, + 0x9058, 0xE5DC, + 0x905B, 0xE5DE, + 0x9062, 0xE5DD, + 0x9063, 0xC7B2, + 0x9065, 0xD2A3, + 0x9068, 0xE5DB, + 0x906D, 0xD4E2, + 0x906E, 0xD5DA, + 0x9074, 0xE5E0, + 0x9075, 0xD7F1, + 0x907D, 0xE5E1, + 0x907F, 0xB1DC, + 0x9080, 0xD1FB, + 0x9082, 0xE5E2, + 0x9083, 0xE5E4, + 0x9088, 0xE5E3, + 0x908B, 0xE5E5, + 0x9091, 0xD2D8, + 0x9093, 0xB5CB, + 0x9095, 0xE7DF, + 0x9097, 0xDAF5, + 0x9099, 0xDAF8, + 0x909B, 0xDAF6, + 0x909D, 0xDAF7, + 0x90A1, 0xDAFA, + 0x90A2, 0xD0CF, + 0x90A3, 0xC4C7, + 0x90A6, 0xB0EE, + 0x90AA, 0xD0B0, + 0x90AC, 0xDAF9, + 0x90AE, 0xD3CA, + 0x90AF, 0xBAAA, + 0x90B0, 0xDBA2, + 0x90B1, 0xC7F1, + 0x90B3, 0xDAFC, + 0x90B4, 0xDAFB, + 0x90B5, 0xC9DB, + 0x90B6, 0xDAFD, + 0x90B8, 0xDBA1, + 0x90B9, 0xD7DE, + 0x90BA, 0xDAFE, + 0x90BB, 0xC1DA, + 0x90BE, 0xDBA5, + 0x90C1, 0xD3F4, + 0x90C4, 0xDBA7, + 0x90C5, 0xDBA4, + 0x90C7, 0xDBA8, + 0x90CA, 0xBDBC, + 0x90CE, 0xC0C9, + 0x90CF, 0xDBA3, + 0x90D0, 0xDBA6, + 0x90D1, 0xD6A3, + 0x90D3, 0xDBA9, + 0x90D7, 0xDBAD, + 0x90DB, 0xDBAE, + 0x90DC, 0xDBAC, + 0x90DD, 0xBAC2, + 0x90E1, 0xBFA4, + 0x90E2, 0xDBAB, + 0x90E6, 0xDBAA, + 0x90E7, 0xD4C7, + 0x90E8, 0xB2BF, + 0x90EB, 0xDBAF, + 0x90ED, 0xB9F9, + 0x90EF, 0xDBB0, + 0x90F4, 0xB3BB, + 0x90F8, 0xB5A6, + 0x90FD, 0xB6BC, + 0x90FE, 0xDBB1, + 0x9102, 0xB6F5, + 0x9104, 0xDBB2, + 0x9119, 0xB1C9, + 0x911E, 0xDBB4, + 0x9122, 0xDBB3, + 0x9123, 0xDBB5, + 0x912F, 0xDBB7, + 0x9131, 0xDBB6, + 0x9139, 0xDBB8, + 0x9143, 0xDBB9, + 0x9146, 0xDBBA, + 0x9149, 0xD3CF, + 0x914A, 0xF4FA, + 0x914B, 0xC7F5, + 0x914C, 0xD7C3, + 0x914D, 0xC5E4, + 0x914E, 0xF4FC, + 0x914F, 0xF4FD, + 0x9150, 0xF4FB, + 0x9152, 0xBEC6, + 0x9157, 0xD0EF, + 0x915A, 0xB7D3, + 0x915D, 0xD4CD, + 0x915E, 0xCCAA, + 0x9161, 0xF5A2, + 0x9162, 0xF5A1, + 0x9163, 0xBAA8, + 0x9164, 0xF4FE, + 0x9165, 0xCBD6, + 0x9169, 0xF5A4, + 0x916A, 0xC0D2, + 0x916C, 0xB3EA, + 0x916E, 0xCDAA, + 0x916F, 0xF5A5, + 0x9170, 0xF5A3, + 0x9171, 0xBDB4, + 0x9172, 0xF5A8, + 0x9174, 0xF5A9, + 0x9175, 0xBDCD, + 0x9176, 0xC3B8, + 0x9177, 0xBFE1, + 0x9178, 0xCBE1, + 0x9179, 0xF5AA, + 0x917D, 0xF5A6, + 0x917E, 0xF5A7, + 0x917F, 0xC4F0, + 0x9185, 0xF5AC, + 0x9187, 0xB4BC, + 0x9189, 0xD7ED, + 0x918B, 0xB4D7, + 0x918C, 0xF5AB, + 0x918D, 0xF5AE, + 0x9190, 0xF5AD, + 0x9191, 0xF5AF, + 0x9192, 0xD0D1, + 0x919A, 0xC3D1, + 0x919B, 0xC8A9, + 0x91A2, 0xF5B0, + 0x91A3, 0xF5B1, + 0x91AA, 0xF5B2, + 0x91AD, 0xF5B3, + 0x91AE, 0xF5B4, + 0x91AF, 0xF5B5, + 0x91B4, 0xF5B7, + 0x91B5, 0xF5B6, + 0x91BA, 0xF5B8, + 0x91C7, 0xB2C9, + 0x91C9, 0xD3D4, + 0x91CA, 0xCACD, + 0x91CC, 0xC0EF, + 0x91CD, 0xD6D8, + 0x91CE, 0xD2B0, + 0x91CF, 0xC1BF, + 0x91D1, 0xBDF0, + 0x91DC, 0xB8AA, + 0x9274, 0xBCF8, + 0x928E, 0xF6C6, + 0x92AE, 0xF6C7, + 0x92C8, 0xF6C8, + 0x933E, 0xF6C9, + 0x936A, 0xF6CA, + 0x938F, 0xF6CC, + 0x93CA, 0xF6CB, + 0x93D6, 0xF7E9, + 0x943E, 0xF6CD, + 0x946B, 0xF6CE, + 0x9485, 0xEEC4, + 0x9486, 0xEEC5, + 0x9487, 0xEEC6, + 0x9488, 0xD5EB, + 0x9489, 0xB6A4, + 0x948A, 0xEEC8, + 0x948B, 0xEEC7, + 0x948C, 0xEEC9, + 0x948D, 0xEECA, + 0x948E, 0xC7A5, + 0x948F, 0xEECB, + 0x9490, 0xEECC, + 0x9492, 0xB7B0, + 0x9493, 0xB5F6, + 0x9494, 0xEECD, + 0x9495, 0xEECF, + 0x9497, 0xEECE, + 0x9499, 0xB8C6, + 0x949A, 0xEED0, + 0x949B, 0xEED1, + 0x949C, 0xEED2, + 0x949D, 0xB6DB, + 0x949E, 0xB3AE, + 0x949F, 0xD6D3, + 0x94A0, 0xC4C6, + 0x94A1, 0xB1B5, + 0x94A2, 0xB8D6, + 0x94A3, 0xEED3, + 0x94A4, 0xEED4, + 0x94A5, 0xD4BF, + 0x94A6, 0xC7D5, + 0x94A7, 0xBEFB, + 0x94A8, 0xCED9, + 0x94A9, 0xB9B3, + 0x94AA, 0xEED6, + 0x94AB, 0xEED5, + 0x94AC, 0xEED8, + 0x94AD, 0xEED7, + 0x94AE, 0xC5A5, + 0x94AF, 0xEED9, + 0x94B0, 0xEEDA, + 0x94B1, 0xC7AE, + 0x94B2, 0xEEDB, + 0x94B3, 0xC7AF, + 0x94B4, 0xEEDC, + 0x94B5, 0xB2A7, + 0x94B6, 0xEEDD, + 0x94B7, 0xEEDE, + 0x94B8, 0xEEDF, + 0x94B9, 0xEEE0, + 0x94BA, 0xEEE1, + 0x94BB, 0xD7EA, + 0x94BC, 0xEEE2, + 0x94BD, 0xEEE3, + 0x94BE, 0xBCD8, + 0x94BF, 0xEEE4, + 0x94C0, 0xD3CB, + 0x94C1, 0xCCFA, + 0x94C2, 0xB2AC, + 0x94C3, 0xC1E5, + 0x94C4, 0xEEE5, + 0x94C5, 0xC7A6, + 0x94C6, 0xC3AD, + 0x94C8, 0xEEE6, + 0x94C9, 0xEEE7, + 0x94CA, 0xEEE8, + 0x94CB, 0xEEE9, + 0x94CC, 0xEEEA, + 0x94CD, 0xEEEB, + 0x94CE, 0xEEEC, + 0x94D0, 0xEEED, + 0x94D1, 0xEEEE, + 0x94D2, 0xEEEF, + 0x94D5, 0xEEF0, + 0x94D6, 0xEEF1, + 0x94D7, 0xEEF2, + 0x94D8, 0xEEF4, + 0x94D9, 0xEEF3, + 0x94DB, 0xEEF5, + 0x94DC, 0xCDAD, + 0x94DD, 0xC2C1, + 0x94DE, 0xEEF6, + 0x94DF, 0xEEF7, + 0x94E0, 0xEEF8, + 0x94E1, 0xD5A1, + 0x94E2, 0xEEF9, + 0x94E3, 0xCFB3, + 0x94E4, 0xEEFA, + 0x94E5, 0xEEFB, + 0x94E7, 0xEEFC, + 0x94E8, 0xEEFD, + 0x94E9, 0xEFA1, + 0x94EA, 0xEEFE, + 0x94EB, 0xEFA2, + 0x94EC, 0xB8F5, + 0x94ED, 0xC3FA, + 0x94EE, 0xEFA3, + 0x94EF, 0xEFA4, + 0x94F0, 0xBDC2, + 0x94F1, 0xD2BF, + 0x94F2, 0xB2F9, + 0x94F3, 0xEFA5, + 0x94F4, 0xEFA6, + 0x94F5, 0xEFA7, + 0x94F6, 0xD2F8, + 0x94F7, 0xEFA8, + 0x94F8, 0xD6FD, + 0x94F9, 0xEFA9, + 0x94FA, 0xC6CC, + 0x94FC, 0xEFAA, + 0x94FD, 0xEFAB, + 0x94FE, 0xC1B4, + 0x94FF, 0xEFAC, + 0x9500, 0xCFFA, + 0x9501, 0xCBF8, + 0x9502, 0xEFAE, + 0x9503, 0xEFAD, + 0x9504, 0xB3FA, + 0x9505, 0xB9F8, + 0x9506, 0xEFAF, + 0x9507, 0xEFB0, + 0x9508, 0xD0E2, + 0x9509, 0xEFB1, + 0x950A, 0xEFB2, + 0x950B, 0xB7E6, + 0x950C, 0xD0BF, + 0x950D, 0xEFB3, + 0x950E, 0xEFB4, + 0x950F, 0xEFB5, + 0x9510, 0xC8F1, + 0x9511, 0xCCE0, + 0x9512, 0xEFB6, + 0x9513, 0xEFB7, + 0x9514, 0xEFB8, + 0x9515, 0xEFB9, + 0x9516, 0xEFBA, + 0x9517, 0xD5E0, + 0x9518, 0xEFBB, + 0x9519, 0xB4ED, + 0x951A, 0xC3AA, + 0x951B, 0xEFBC, + 0x951D, 0xEFBD, + 0x951E, 0xEFBE, + 0x951F, 0xEFBF, + 0x9521, 0xCEFD, + 0x9522, 0xEFC0, + 0x9523, 0xC2E0, + 0x9524, 0xB4B8, + 0x9525, 0xD7B6, + 0x9526, 0xBDF5, + 0x9528, 0xCFC7, + 0x9529, 0xEFC3, + 0x952A, 0xEFC1, + 0x952B, 0xEFC2, + 0x952C, 0xEFC4, + 0x952D, 0xB6A7, + 0x952E, 0xBCFC, + 0x952F, 0xBEE2, + 0x9530, 0xC3CC, + 0x9531, 0xEFC5, + 0x9532, 0xEFC6, + 0x9534, 0xEFC7, + 0x9535, 0xEFCF, + 0x9536, 0xEFC8, + 0x9537, 0xEFC9, + 0x9538, 0xEFCA, + 0x9539, 0xC7C2, + 0x953A, 0xEFF1, + 0x953B, 0xB6CD, + 0x953C, 0xEFCB, + 0x953E, 0xEFCC, + 0x953F, 0xEFCD, + 0x9540, 0xB6C6, + 0x9541, 0xC3BE, + 0x9542, 0xEFCE, + 0x9544, 0xEFD0, + 0x9545, 0xEFD1, + 0x9546, 0xEFD2, + 0x9547, 0xD5F2, + 0x9549, 0xEFD3, + 0x954A, 0xC4F7, + 0x954C, 0xEFD4, + 0x954D, 0xC4F8, + 0x954E, 0xEFD5, + 0x954F, 0xEFD6, + 0x9550, 0xB8E4, + 0x9551, 0xB0F7, + 0x9552, 0xEFD7, + 0x9553, 0xEFD8, + 0x9554, 0xEFD9, + 0x9556, 0xEFDA, + 0x9557, 0xEFDB, + 0x9558, 0xEFDC, + 0x9559, 0xEFDD, + 0x955B, 0xEFDE, + 0x955C, 0xBEB5, + 0x955D, 0xEFE1, + 0x955E, 0xEFDF, + 0x955F, 0xEFE0, + 0x9561, 0xEFE2, + 0x9562, 0xEFE3, + 0x9563, 0xC1CD, + 0x9564, 0xEFE4, + 0x9565, 0xEFE5, + 0x9566, 0xEFE6, + 0x9567, 0xEFE7, + 0x9568, 0xEFE8, + 0x9569, 0xEFE9, + 0x956A, 0xEFEA, + 0x956B, 0xEFEB, + 0x956C, 0xEFEC, + 0x956D, 0xC0D8, + 0x956F, 0xEFED, + 0x9570, 0xC1AD, + 0x9571, 0xEFEE, + 0x9572, 0xEFEF, + 0x9573, 0xEFF0, + 0x9576, 0xCFE2, + 0x957F, 0xB3A4, + 0x95E8, 0xC3C5, + 0x95E9, 0xE3C5, + 0x95EA, 0xC9C1, + 0x95EB, 0xE3C6, + 0x95ED, 0xB1D5, + 0x95EE, 0xCECA, + 0x95EF, 0xB4B3, + 0x95F0, 0xC8F2, + 0x95F1, 0xE3C7, + 0x95F2, 0xCFD0, + 0x95F3, 0xE3C8, + 0x95F4, 0xBCE4, + 0x95F5, 0xE3C9, + 0x95F6, 0xE3CA, + 0x95F7, 0xC3C6, + 0x95F8, 0xD5A2, + 0x95F9, 0xC4D6, + 0x95FA, 0xB9EB, + 0x95FB, 0xCEC5, + 0x95FC, 0xE3CB, + 0x95FD, 0xC3F6, + 0x95FE, 0xE3CC, + 0x9600, 0xB7A7, + 0x9601, 0xB8F3, + 0x9602, 0xBAD2, + 0x9603, 0xE3CD, + 0x9604, 0xE3CE, + 0x9605, 0xD4C4, + 0x9606, 0xE3CF, + 0x9608, 0xE3D0, + 0x9609, 0xD1CB, + 0x960A, 0xE3D1, + 0x960B, 0xE3D2, + 0x960C, 0xE3D3, + 0x960D, 0xE3D4, + 0x960E, 0xD1D6, + 0x960F, 0xE3D5, + 0x9610, 0xB2FB, + 0x9611, 0xC0BB, + 0x9612, 0xE3D6, + 0x9614, 0xC0AB, + 0x9615, 0xE3D7, + 0x9616, 0xE3D8, + 0x9617, 0xE3D9, + 0x9619, 0xE3DA, + 0x961A, 0xE3DB, + 0x961C, 0xB8B7, + 0x961D, 0xDAE2, + 0x961F, 0xB6D3, + 0x9621, 0xDAE4, + 0x9622, 0xDAE3, + 0x962A, 0xDAE6, + 0x962E, 0xC8EE, + 0x9631, 0xDAE5, + 0x9632, 0xB7C0, + 0x9633, 0xD1F4, + 0x9634, 0xD2F5, + 0x9635, 0xD5F3, + 0x9636, 0xBDD7, + 0x963B, 0xD7E8, + 0x963C, 0xDAE8, + 0x963D, 0xDAE7, + 0x963F, 0xB0A2, + 0x9640, 0xCDD3, + 0x9642, 0xDAE9, + 0x9644, 0xB8BD, + 0x9645, 0xBCCA, + 0x9646, 0xC2BD, + 0x9647, 0xC2A4, + 0x9648, 0xB3C2, + 0x9649, 0xDAEA, + 0x964B, 0xC2AA, + 0x964C, 0xC4B0, + 0x964D, 0xBDB5, + 0x9650, 0xCFDE, + 0x9654, 0xDAEB, + 0x9655, 0xC9C2, + 0x965B, 0xB1DD, + 0x965F, 0xDAEC, + 0x9661, 0xB6B8, + 0x9662, 0xD4BA, + 0x9664, 0xB3FD, + 0x9667, 0xDAED, + 0x9668, 0xD4C9, + 0x9669, 0xCFD5, + 0x966A, 0xC5E3, + 0x966C, 0xDAEE, + 0x9672, 0xDAEF, + 0x9674, 0xDAF0, + 0x9675, 0xC1EA, + 0x9676, 0xCCD5, + 0x9677, 0xCFDD, + 0x9685, 0xD3E7, + 0x9686, 0xC2A1, + 0x9688, 0xDAF1, + 0x968B, 0xCBE5, + 0x968D, 0xDAF2, + 0x968F, 0xCBE6, + 0x9690, 0xD2FE, + 0x9694, 0xB8F4, + 0x9697, 0xDAF3, + 0x9698, 0xB0AF, + 0x9699, 0xCFB6, + 0x969C, 0xD5CF, + 0x96A7, 0xCBED, + 0x96B0, 0xDAF4, + 0x96B3, 0xE3C4, + 0x96B6, 0xC1A5, + 0x96B9, 0xF6BF, + 0x96BC, 0xF6C0, + 0x96BD, 0xF6C1, + 0x96BE, 0xC4D1, + 0x96C0, 0xC8B8, + 0x96C1, 0xD1E3, + 0x96C4, 0xD0DB, + 0x96C5, 0xD1C5, + 0x96C6, 0xBCAF, + 0x96C7, 0xB9CD, + 0x96C9, 0xEFF4, + 0x96CC, 0xB4C6, + 0x96CD, 0xD3BA, + 0x96CE, 0xF6C2, + 0x96CF, 0xB3FB, + 0x96D2, 0xF6C3, + 0x96D5, 0xB5F1, + 0x96E0, 0xF6C5, + 0x96E8, 0xD3EA, + 0x96E9, 0xF6A7, + 0x96EA, 0xD1A9, + 0x96EF, 0xF6A9, + 0x96F3, 0xF6A8, + 0x96F6, 0xC1E3, + 0x96F7, 0xC0D7, + 0x96F9, 0xB1A2, + 0x96FE, 0xCEED, + 0x9700, 0xD0E8, + 0x9701, 0xF6AB, + 0x9704, 0xCFF6, + 0x9706, 0xF6AA, + 0x9707, 0xD5F0, + 0x9708, 0xF6AC, + 0x9709, 0xC3B9, + 0x970D, 0xBBF4, + 0x970E, 0xF6AE, + 0x970F, 0xF6AD, + 0x9713, 0xC4DE, + 0x9716, 0xC1D8, + 0x971C, 0xCBAA, + 0x971E, 0xCFBC, + 0x972A, 0xF6AF, + 0x972D, 0xF6B0, + 0x9730, 0xF6B1, + 0x9732, 0xC2B6, + 0x9738, 0xB0D4, + 0x9739, 0xC5F9, + 0x973E, 0xF6B2, + 0x9752, 0xC7E0, + 0x9753, 0xF6A6, + 0x9756, 0xBEB8, + 0x9759, 0xBEB2, + 0x975B, 0xB5E5, + 0x975E, 0xB7C7, + 0x9760, 0xBFBF, + 0x9761, 0xC3D2, + 0x9762, 0xC3E6, + 0x9765, 0xD8CC, + 0x9769, 0xB8EF, + 0x9773, 0xBDF9, + 0x9774, 0xD1A5, + 0x9776, 0xB0D0, + 0x977C, 0xF7B0, + 0x9785, 0xF7B1, + 0x978B, 0xD0AC, + 0x978D, 0xB0B0, + 0x9791, 0xF7B2, + 0x9792, 0xF7B3, + 0x9794, 0xF7B4, + 0x9798, 0xC7CA, + 0x97A0, 0xBECF, + 0x97A3, 0xF7B7, + 0x97AB, 0xF7B6, + 0x97AD, 0xB1DE, + 0x97AF, 0xF7B5, + 0x97B2, 0xF7B8, + 0x97B4, 0xF7B9, + 0x97E6, 0xCEA4, + 0x97E7, 0xC8CD, + 0x97E9, 0xBAAB, + 0x97EA, 0xE8B8, + 0x97EB, 0xE8B9, + 0x97EC, 0xE8BA, + 0x97ED, 0xBEC2, + 0x97F3, 0xD2F4, + 0x97F5, 0xD4CF, + 0x97F6, 0xC9D8, + 0x9875, 0xD2B3, + 0x9876, 0xB6A5, + 0x9877, 0xC7EA, + 0x9878, 0xF1FC, + 0x9879, 0xCFEE, + 0x987A, 0xCBB3, + 0x987B, 0xD0EB, + 0x987C, 0xE7EF, + 0x987D, 0xCDE7, + 0x987E, 0xB9CB, + 0x987F, 0xB6D9, + 0x9880, 0xF1FD, + 0x9881, 0xB0E4, + 0x9882, 0xCBCC, + 0x9883, 0xF1FE, + 0x9884, 0xD4A4, + 0x9885, 0xC2AD, + 0x9886, 0xC1EC, + 0x9887, 0xC6C4, + 0x9888, 0xBEB1, + 0x9889, 0xF2A1, + 0x988A, 0xBCD5, + 0x988C, 0xF2A2, + 0x988D, 0xF2A3, + 0x988F, 0xF2A4, + 0x9890, 0xD2C3, + 0x9891, 0xC6B5, + 0x9893, 0xCDC7, + 0x9894, 0xF2A5, + 0x9896, 0xD3B1, + 0x9897, 0xBFC5, + 0x9898, 0xCCE2, + 0x989A, 0xF2A6, + 0x989B, 0xF2A7, + 0x989C, 0xD1D5, + 0x989D, 0xB6EE, + 0x989E, 0xF2A8, + 0x989F, 0xF2A9, + 0x98A0, 0xB5DF, + 0x98A1, 0xF2AA, + 0x98A2, 0xF2AB, + 0x98A4, 0xB2FC, + 0x98A5, 0xF2AC, + 0x98A6, 0xF2AD, + 0x98A7, 0xC8A7, + 0x98CE, 0xB7E7, + 0x98D1, 0xECA9, + 0x98D2, 0xECAA, + 0x98D3, 0xECAB, + 0x98D5, 0xECAC, + 0x98D8, 0xC6AE, + 0x98D9, 0xECAD, + 0x98DA, 0xECAE, + 0x98DE, 0xB7C9, + 0x98DF, 0xCAB3, + 0x98E7, 0xE2B8, + 0x98E8, 0xF7CF, + 0x990D, 0xF7D0, + 0x9910, 0xB2CD, + 0x992E, 0xF7D1, + 0x9954, 0xF7D3, + 0x9955, 0xF7D2, + 0x9963, 0xE2BB, + 0x9965, 0xBCA2, + 0x9967, 0xE2BC, + 0x9968, 0xE2BD, + 0x9969, 0xE2BE, + 0x996A, 0xE2BF, + 0x996B, 0xE2C0, + 0x996C, 0xE2C1, + 0x996D, 0xB7B9, + 0x996E, 0xD2FB, + 0x996F, 0xBDA4, + 0x9970, 0xCACE, + 0x9971, 0xB1A5, + 0x9972, 0xCBC7, + 0x9974, 0xE2C2, + 0x9975, 0xB6FC, + 0x9976, 0xC8C4, + 0x9977, 0xE2C3, + 0x997A, 0xBDC8, + 0x997C, 0xB1FD, + 0x997D, 0xE2C4, + 0x997F, 0xB6F6, + 0x9980, 0xE2C5, + 0x9981, 0xC4D9, + 0x9984, 0xE2C6, + 0x9985, 0xCFDA, + 0x9986, 0xB9DD, + 0x9987, 0xE2C7, + 0x9988, 0xC0A1, + 0x998A, 0xE2C8, + 0x998B, 0xB2F6, + 0x998D, 0xE2C9, + 0x998F, 0xC1F3, + 0x9990, 0xE2CA, + 0x9991, 0xE2CB, + 0x9992, 0xC2F8, + 0x9993, 0xE2CC, + 0x9994, 0xE2CD, + 0x9995, 0xE2CE, + 0x9996, 0xCAD7, + 0x9997, 0xD8B8, + 0x9998, 0xD9E5, + 0x9999, 0xCFE3, + 0x99A5, 0xF0A5, + 0x99A8, 0xDCB0, + 0x9A6C, 0xC2ED, + 0x9A6D, 0xD4A6, + 0x9A6E, 0xCDD4, + 0x9A6F, 0xD1B1, + 0x9A70, 0xB3DB, + 0x9A71, 0xC7FD, + 0x9A73, 0xB2B5, + 0x9A74, 0xC2BF, + 0x9A75, 0xE6E0, + 0x9A76, 0xCABB, + 0x9A77, 0xE6E1, + 0x9A78, 0xE6E2, + 0x9A79, 0xBED4, + 0x9A7A, 0xE6E3, + 0x9A7B, 0xD7A4, + 0x9A7C, 0xCDD5, + 0x9A7D, 0xE6E5, + 0x9A7E, 0xBCDD, + 0x9A7F, 0xE6E4, + 0x9A80, 0xE6E6, + 0x9A81, 0xE6E7, + 0x9A82, 0xC2EE, + 0x9A84, 0xBDBE, + 0x9A85, 0xE6E8, + 0x9A86, 0xC2E6, + 0x9A87, 0xBAA7, + 0x9A88, 0xE6E9, + 0x9A8A, 0xE6EA, + 0x9A8B, 0xB3D2, + 0x9A8C, 0xD1E9, + 0x9A8F, 0xBFA5, + 0x9A90, 0xE6EB, + 0x9A91, 0xC6EF, + 0x9A92, 0xE6EC, + 0x9A93, 0xE6ED, + 0x9A96, 0xE6EE, + 0x9A97, 0xC6AD, + 0x9A98, 0xE6EF, + 0x9A9A, 0xC9A7, + 0x9A9B, 0xE6F0, + 0x9A9C, 0xE6F1, + 0x9A9D, 0xE6F2, + 0x9A9E, 0xE5B9, + 0x9A9F, 0xE6F3, + 0x9AA0, 0xE6F4, + 0x9AA1, 0xC2E2, + 0x9AA2, 0xE6F5, + 0x9AA3, 0xE6F6, + 0x9AA4, 0xD6E8, + 0x9AA5, 0xE6F7, + 0x9AA7, 0xE6F8, + 0x9AA8, 0xB9C7, + 0x9AB0, 0xF7BB, + 0x9AB1, 0xF7BA, + 0x9AB6, 0xF7BE, + 0x9AB7, 0xF7BC, + 0x9AB8, 0xBAA1, + 0x9ABA, 0xF7BF, + 0x9ABC, 0xF7C0, + 0x9AC0, 0xF7C2, + 0x9AC1, 0xF7C1, + 0x9AC2, 0xF7C4, + 0x9AC5, 0xF7C3, + 0x9ACB, 0xF7C5, + 0x9ACC, 0xF7C6, + 0x9AD1, 0xF7C7, + 0x9AD3, 0xCBE8, + 0x9AD8, 0xB8DF, + 0x9ADF, 0xF7D4, + 0x9AE1, 0xF7D5, + 0x9AE6, 0xF7D6, + 0x9AEB, 0xF7D8, + 0x9AED, 0xF7DA, + 0x9AEF, 0xF7D7, + 0x9AF9, 0xF7DB, + 0x9AFB, 0xF7D9, + 0x9B03, 0xD7D7, + 0x9B08, 0xF7DC, + 0x9B0F, 0xF7DD, + 0x9B13, 0xF7DE, + 0x9B1F, 0xF7DF, + 0x9B23, 0xF7E0, + 0x9B2F, 0xDBCB, + 0x9B32, 0xD8AA, + 0x9B3B, 0xE5F7, + 0x9B3C, 0xB9ED, + 0x9B41, 0xBFFD, + 0x9B42, 0xBBEA, + 0x9B43, 0xF7C9, + 0x9B44, 0xC6C7, + 0x9B45, 0xF7C8, + 0x9B47, 0xF7CA, + 0x9B48, 0xF7CC, + 0x9B49, 0xF7CB, + 0x9B4D, 0xF7CD, + 0x9B4F, 0xCEBA, + 0x9B51, 0xF7CE, + 0x9B54, 0xC4A7, + 0x9C7C, 0xD3E3, + 0x9C7F, 0xF6CF, + 0x9C81, 0xC2B3, + 0x9C82, 0xF6D0, + 0x9C85, 0xF6D1, + 0x9C86, 0xF6D2, + 0x9C87, 0xF6D3, + 0x9C88, 0xF6D4, + 0x9C8B, 0xF6D6, + 0x9C8D, 0xB1AB, + 0x9C8E, 0xF6D7, + 0x9C90, 0xF6D8, + 0x9C91, 0xF6D9, + 0x9C92, 0xF6DA, + 0x9C94, 0xF6DB, + 0x9C95, 0xF6DC, + 0x9C9A, 0xF6DD, + 0x9C9B, 0xF6DE, + 0x9C9C, 0xCFCA, + 0x9C9E, 0xF6DF, + 0x9C9F, 0xF6E0, + 0x9CA0, 0xF6E1, + 0x9CA1, 0xF6E2, + 0x9CA2, 0xF6E3, + 0x9CA3, 0xF6E4, + 0x9CA4, 0xC0F0, + 0x9CA5, 0xF6E5, + 0x9CA6, 0xF6E6, + 0x9CA7, 0xF6E7, + 0x9CA8, 0xF6E8, + 0x9CA9, 0xF6E9, + 0x9CAB, 0xF6EA, + 0x9CAD, 0xF6EB, + 0x9CAE, 0xF6EC, + 0x9CB0, 0xF6ED, + 0x9CB1, 0xF6EE, + 0x9CB2, 0xF6EF, + 0x9CB3, 0xF6F0, + 0x9CB4, 0xF6F1, + 0x9CB5, 0xF6F2, + 0x9CB6, 0xF6F3, + 0x9CB7, 0xF6F4, + 0x9CB8, 0xBEA8, + 0x9CBA, 0xF6F5, + 0x9CBB, 0xF6F6, + 0x9CBC, 0xF6F7, + 0x9CBD, 0xF6F8, + 0x9CC3, 0xC8FA, + 0x9CC4, 0xF6F9, + 0x9CC5, 0xF6FA, + 0x9CC6, 0xF6FB, + 0x9CC7, 0xF6FC, + 0x9CCA, 0xF6FD, + 0x9CCB, 0xF6FE, + 0x9CCC, 0xF7A1, + 0x9CCD, 0xF7A2, + 0x9CCE, 0xF7A3, + 0x9CCF, 0xF7A4, + 0x9CD0, 0xF7A5, + 0x9CD3, 0xF7A6, + 0x9CD4, 0xF7A7, + 0x9CD5, 0xF7A8, + 0x9CD6, 0xB1EE, + 0x9CD7, 0xF7A9, + 0x9CD8, 0xF7AA, + 0x9CD9, 0xF7AB, + 0x9CDC, 0xF7AC, + 0x9CDD, 0xF7AD, + 0x9CDE, 0xC1DB, + 0x9CDF, 0xF7AE, + 0x9CE2, 0xF7AF, + 0x9E1F, 0xC4F1, + 0x9E20, 0xF0AF, + 0x9E21, 0xBCA6, + 0x9E22, 0xF0B0, + 0x9E23, 0xC3F9, + 0x9E25, 0xC5B8, + 0x9E26, 0xD1BB, + 0x9E28, 0xF0B1, + 0x9E29, 0xF0B2, + 0x9E2A, 0xF0B3, + 0x9E2B, 0xF0B4, + 0x9E2C, 0xF0B5, + 0x9E2D, 0xD1BC, + 0x9E2F, 0xD1EC, + 0x9E31, 0xF0B7, + 0x9E32, 0xF0B6, + 0x9E33, 0xD4A7, + 0x9E35, 0xCDD2, + 0x9E36, 0xF0B8, + 0x9E37, 0xF0BA, + 0x9E38, 0xF0B9, + 0x9E39, 0xF0BB, + 0x9E3A, 0xF0BC, + 0x9E3D, 0xB8EB, + 0x9E3E, 0xF0BD, + 0x9E3F, 0xBAE8, + 0x9E41, 0xF0BE, + 0x9E42, 0xF0BF, + 0x9E43, 0xBEE9, + 0x9E44, 0xF0C0, + 0x9E45, 0xB6EC, + 0x9E46, 0xF0C1, + 0x9E47, 0xF0C2, + 0x9E48, 0xF0C3, + 0x9E49, 0xF0C4, + 0x9E4A, 0xC8B5, + 0x9E4B, 0xF0C5, + 0x9E4C, 0xF0C6, + 0x9E4E, 0xF0C7, + 0x9E4F, 0xC5F4, + 0x9E51, 0xF0C8, + 0x9E55, 0xF0C9, + 0x9E57, 0xF0CA, + 0x9E58, 0xF7BD, + 0x9E5A, 0xF0CB, + 0x9E5B, 0xF0CC, + 0x9E5C, 0xF0CD, + 0x9E5E, 0xF0CE, + 0x9E63, 0xF0CF, + 0x9E64, 0xBAD7, + 0x9E66, 0xF0D0, + 0x9E67, 0xF0D1, + 0x9E68, 0xF0D2, + 0x9E69, 0xF0D3, + 0x9E6A, 0xF0D4, + 0x9E6B, 0xF0D5, + 0x9E6C, 0xF0D6, + 0x9E6D, 0xF0D8, + 0x9E70, 0xD3A5, + 0x9E71, 0xF0D7, + 0x9E73, 0xF0D9, + 0x9E7E, 0xF5BA, + 0x9E7F, 0xC2B9, + 0x9E82, 0xF7E4, + 0x9E87, 0xF7E5, + 0x9E88, 0xF7E6, + 0x9E8B, 0xF7E7, + 0x9E92, 0xF7E8, + 0x9E93, 0xC2B4, + 0x9E9D, 0xF7EA, + 0x9E9F, 0xF7EB, + 0x9EA6, 0xC2F3, + 0x9EB4, 0xF4F0, + 0x9EB8, 0xF4EF, + 0x9EBB, 0xC2E9, + 0x9EBD, 0xF7E1, + 0x9EBE, 0xF7E2, + 0x9EC4, 0xBBC6, + 0x9EC9, 0xD9E4, + 0x9ECD, 0xCAF2, + 0x9ECE, 0xC0E8, + 0x9ECF, 0xF0A4, + 0x9ED1, 0xBADA, + 0x9ED4, 0xC7AD, + 0x9ED8, 0xC4AC, + 0x9EDB, 0xF7EC, + 0x9EDC, 0xF7ED, + 0x9EDD, 0xF7EE, + 0x9EDF, 0xF7F0, + 0x9EE0, 0xF7EF, + 0x9EE2, 0xF7F1, + 0x9EE5, 0xF7F4, + 0x9EE7, 0xF7F3, + 0x9EE9, 0xF7F2, + 0x9EEA, 0xF7F5, + 0x9EEF, 0xF7F6, + 0x9EF9, 0xEDE9, + 0x9EFB, 0xEDEA, + 0x9EFC, 0xEDEB, + 0x9EFE, 0xF6BC, + 0x9F0B, 0xF6BD, + 0x9F0D, 0xF6BE, + 0x9F0E, 0xB6A6, + 0x9F10, 0xD8BE, + 0x9F13, 0xB9C4, + 0x9F17, 0xD8BB, + 0x9F19, 0xDCB1, + 0x9F20, 0xCAF3, + 0x9F22, 0xF7F7, + 0x9F2C, 0xF7F8, + 0x9F2F, 0xF7F9, + 0x9F37, 0xF7FB, + 0x9F39, 0xF7FA, + 0x9F3B, 0xB1C7, + 0x9F3D, 0xF7FC, + 0x9F3E, 0xF7FD, + 0x9F44, 0xF7FE, + 0x9F50, 0xC6EB, + 0x9F51, 0xECB4, + 0x9F7F, 0xB3DD, + 0x9F80, 0xF6B3, + 0x9F83, 0xF6B4, + 0x9F84, 0xC1E4, + 0x9F85, 0xF6B5, + 0x9F86, 0xF6B6, + 0x9F87, 0xF6B7, + 0x9F88, 0xF6B8, + 0x9F89, 0xF6B9, + 0x9F8A, 0xF6BA, + 0x9F8B, 0xC8A3, + 0x9F8C, 0xF6BB, + 0x9F99, 0xC1FA, + 0x9F9A, 0xB9A8, + 0x9F9B, 0xEDE8, + 0x9F9F, 0xB9EA, + 0x9FA0, 0xD9DF, + 0xFF01, 0xA3A1, + 0xFF02, 0xA3A2, + 0xFF03, 0xA3A3, + 0xFF04, 0xA1E7, + 0xFF05, 0xA3A5, + 0xFF06, 0xA3A6, + 0xFF07, 0xA3A7, + 0xFF08, 0xA3A8, + 0xFF09, 0xA3A9, + 0xFF0A, 0xA3AA, + 0xFF0B, 0xA3AB, + 0xFF0C, 0xA3AC, + 0xFF0D, 0xA3AD, + 0xFF0E, 0xA3AE, + 0xFF0F, 0xA3AF, + 0xFF10, 0xA3B0, + 0xFF11, 0xA3B1, + 0xFF12, 0xA3B2, + 0xFF13, 0xA3B3, + 0xFF14, 0xA3B4, + 0xFF15, 0xA3B5, + 0xFF16, 0xA3B6, + 0xFF17, 0xA3B7, + 0xFF18, 0xA3B8, + 0xFF19, 0xA3B9, + 0xFF1A, 0xA3BA, + 0xFF1B, 0xA3BB, + 0xFF1C, 0xA3BC, + 0xFF1D, 0xA3BD, + 0xFF1E, 0xA3BE, + 0xFF1F, 0xA3BF, + 0xFF20, 0xA3C0, + 0xFF21, 0xA3C1, + 0xFF22, 0xA3C2, + 0xFF23, 0xA3C3, + 0xFF24, 0xA3C4, + 0xFF25, 0xA3C5, + 0xFF26, 0xA3C6, + 0xFF27, 0xA3C7, + 0xFF28, 0xA3C8, + 0xFF29, 0xA3C9, + 0xFF2A, 0xA3CA, + 0xFF2B, 0xA3CB, + 0xFF2C, 0xA3CC, + 0xFF2D, 0xA3CD, + 0xFF2E, 0xA3CE, + 0xFF2F, 0xA3CF, + 0xFF30, 0xA3D0, + 0xFF31, 0xA3D1, + 0xFF32, 0xA3D2, + 0xFF33, 0xA3D3, + 0xFF34, 0xA3D4, + 0xFF35, 0xA3D5, + 0xFF36, 0xA3D6, + 0xFF37, 0xA3D7, + 0xFF38, 0xA3D8, + 0xFF39, 0xA3D9, + 0xFF3A, 0xA3DA, + 0xFF3B, 0xA3DB, + 0xFF3C, 0xA3DC, + 0xFF3D, 0xA3DD, + 0xFF3E, 0xA3DE, + 0xFF3F, 0xA3DF, + 0xFF40, 0xA3E0, + 0xFF41, 0xA3E1, + 0xFF42, 0xA3E2, + 0xFF43, 0xA3E3, + 0xFF44, 0xA3E4, + 0xFF45, 0xA3E5, + 0xFF46, 0xA3E6, + 0xFF47, 0xA3E7, + 0xFF48, 0xA3E8, + 0xFF49, 0xA3E9, + 0xFF4A, 0xA3EA, + 0xFF4B, 0xA3EB, + 0xFF4C, 0xA3EC, + 0xFF4D, 0xA3ED, + 0xFF4E, 0xA3EE, + 0xFF4F, 0xA3EF, + 0xFF50, 0xA3F0, + 0xFF51, 0xA3F1, + 0xFF52, 0xA3F2, + 0xFF53, 0xA3F3, + 0xFF54, 0xA3F4, + 0xFF55, 0xA3F5, + 0xFF56, 0xA3F6, + 0xFF57, 0xA3F7, + 0xFF58, 0xA3F8, + 0xFF59, 0xA3F9, + 0xFF5A, 0xA3FA, + 0xFF5B, 0xA3FB, + 0xFF5C, 0xA3FC, + 0xFF5D, 0xA3FD, + 0xFF5E, 0xA1AB, + 0xFFE0, 0xA1E9, + 0xFFE1, 0xA1EA, + 0xFFE3, 0xA3FE, + 0xFFE5, 0xA3A4 +}; diff --git a/3rdparty/zint-2.4.4/backend/gridmtx.c b/3rdparty/zint-2.4.4/backend/gridmtx.c new file mode 100644 index 0000000..8622817 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/gridmtx.c @@ -0,0 +1,1089 @@ +/* gridmtx.c - Grid Matrix + + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* This file impliments Grid Matrix as specified in + AIM Global Document Number AIMD014 Rev. 1.63 Revised 9 Dec 2008 */ + +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" +#include "reedsol.h" +#include "gridmtx.h" +#include "gb2312.h" + +int number_lat(int gbdata[], int length, int position) +{ + /* Attempt to calculate the 'cost' of using numeric mode from a given position in number of bits */ + /* Also ensures that numeric mode is not selected when it cannot be used: for example in + a string which has "2.2.0" (cannot have more than one non-numeric character for each + block of three numeric characters) */ + int sp; + int numb = 0, nonum = 0, done; + int tally = 0; + + sp = position; + + do { + done = 0; + + if((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) { numb++; done = 1; } + switch(gbdata[sp]) { + case ' ': + case '+': + case '-': + case '.': + case ',': + nonum++; + done = 1; + } + if((sp + 1) < length) { + if((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) { + nonum++; + done = 1; + sp++; + } + } + + if(done == 0) { + tally += 80; + } else { + if(numb == 3) { + if(nonum == 0) { + tally += 10; + } + if(nonum == 1) { + tally += 20; + } + if(nonum > 1) { + tally += 80; + } + numb = 0; + nonum = 0; + } + } + + sp++; + } while ((sp < length) && (sp <= (position + 8))); + + if(numb == 0) { + tally += 80; + } + + if(numb > 1) { + if(nonum == 0) { + tally += 10; + } + if(nonum == 1) { + tally += 20; + } + if(nonum > 1) { + tally += 80; + } + } + + return tally; +} + +int seek_forward(int gbdata[], int length, int position, int current_mode) +{ + /* In complete contrast to the method recommended in Annex D of the ANSI standard this + code uses a look-ahead test in the same manner as Data Matrix. This decision was made + because the "official" algorithm does not provide clear methods for dealing with all + possible combinations of input data */ + + int number_count, byte_count, mixed_count, upper_count, lower_count, chinese_count; + int sp, best_mode, done; + int best_count, last = -1; + int debug = 0; + + if(gbdata[position] > 0xff) { return GM_CHINESE; } + + switch(current_mode) { + case GM_CHINESE: + number_count = 13; + byte_count = 13; + mixed_count = 13; + upper_count = 13; + lower_count = 13; + chinese_count = 0; + break; + case GM_NUMBER: + number_count = 0; + byte_count = 10; + mixed_count = 10; + upper_count = 10; + lower_count = 10; + chinese_count = 10; + break; + case GM_LOWER: + number_count = 5; + byte_count = 7; + mixed_count = 7; + upper_count = 5; + lower_count = 0; + chinese_count = 5; + break; + case GM_UPPER: + number_count = 5; + byte_count = 7; + mixed_count = 7; + upper_count = 0; + lower_count = 5; + chinese_count = 5; + break; + case GM_MIXED: + number_count = 10; + byte_count = 10; + mixed_count = 0; + upper_count = 10; + lower_count = 10; + chinese_count = 10; + break; + case GM_BYTE: + number_count = 4; + byte_count = 0; + mixed_count = 4; + upper_count = 4; + lower_count = 4; + chinese_count = 4; + default: /* Start of symbol */ + number_count = 4; + byte_count = 4; + mixed_count = 4; + upper_count = 4; + lower_count = 4; + chinese_count = 4; + } + + for(sp = position; (sp < length) && (sp <= (position + 8)); sp++) { + + done = 0; + + if(gbdata[sp] >= 0xff) { + byte_count += 17; + mixed_count += 23; + upper_count += 18; + lower_count += 18; + chinese_count += 13; + done = 1; + } + + if((gbdata[sp] >= 'a') && (gbdata[sp] <= 'z')) { + byte_count += 8; + mixed_count += 6; + upper_count += 10; + lower_count += 5; + chinese_count += 13; + done = 1; + } + + if((gbdata[sp] >= 'A') && (gbdata[sp] <= 'Z')) { + byte_count += 8; + mixed_count += 6; + upper_count += 5; + lower_count += 10; + chinese_count += 13; + done = 1; + } + + if((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) { + byte_count += 8; + mixed_count += 6; + upper_count += 8; + lower_count += 8; + chinese_count += 13; + done = 1; + } + + if(gbdata[sp] == ' ') { + byte_count += 8; + mixed_count += 6; + upper_count += 5; + lower_count += 5; + chinese_count += 13; + done = 1; + } + + if(done == 0) { + /* Control character */ + byte_count += 8; + mixed_count += 16; + upper_count += 13; + lower_count += 13; + chinese_count += 13; + } + + if(gbdata[sp] >= 0x7f) { + mixed_count += 20; + upper_count += 20; + lower_count += 20; + } + } + + /* Adjust for */ + for(sp = position; (sp < (length - 1)) && (sp <= (position + 7)); sp++) { + if((gbdata[sp] == 0x13) && (gbdata[sp] == 0x10)) { + chinese_count -= 13; + } + } + + /* Adjust for double digits */ + for(sp = position; (sp < (length - 1)) && (sp <= (position + 7)); sp++) { + if(sp != last) { + if(((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) && ((gbdata[sp + 1] >= '0') && (gbdata[sp + 1] <= '9'))) { + chinese_count -= 13; + last = sp + 1; + } + } + } + + /* Numeric mode is more complex */ + number_count += number_lat(gbdata, length, position); + + if(debug) { printf("C %d / B %d / M %d / U %d / L %d / N %d\n", chinese_count, byte_count, mixed_count, upper_count, lower_count, number_count); } + + best_count = chinese_count; + best_mode = GM_CHINESE; + + if(byte_count <= best_count) { + best_count = byte_count; + best_mode = GM_BYTE; + } + + if(mixed_count <= best_count) { + best_count = mixed_count; + best_mode = GM_MIXED; + } + + if(upper_count <= best_count) { + best_count = upper_count; + best_mode = GM_UPPER; + } + + if(lower_count <= best_count) { + best_count = lower_count; + best_mode = GM_LOWER; + } + + if(number_count <= best_count) { + best_count = number_count; + best_mode = GM_NUMBER; + } + + return best_mode; +} + +void add_byte_count(char binary[], int byte_count_posn, int byte_count) +{ + /* Add the length indicator for byte encoded blocks */ + if(byte_count & 0x100) { binary[byte_count_posn] = '0'; } else { binary[byte_count_posn] = '1'; } + if(byte_count & 0x80) { binary[byte_count_posn + 1] = '0'; } else { binary[byte_count_posn + 1] = '1'; } + if(byte_count & 0x40) { binary[byte_count_posn + 2] = '0'; } else { binary[byte_count_posn + 2] = '1'; } + if(byte_count & 0x20) { binary[byte_count_posn + 3] = '0'; } else { binary[byte_count_posn + 3] = '1'; } + if(byte_count & 0x10) { binary[byte_count_posn + 4] = '0'; } else { binary[byte_count_posn + 4] = '1'; } + if(byte_count & 0x08) { binary[byte_count_posn + 5] = '0'; } else { binary[byte_count_posn + 5] = '1'; } + if(byte_count & 0x04) { binary[byte_count_posn + 6] = '0'; } else { binary[byte_count_posn + 6] = '1'; } + if(byte_count & 0x02) { binary[byte_count_posn + 7] = '0'; } else { binary[byte_count_posn + 7] = '1'; } + if(byte_count & 0x01) { binary[byte_count_posn + 8] = '0'; } else { binary[byte_count_posn + 8] = '1'; } +} + +void add_shift_char(char binary[], int shifty) +{ + /* Add a control character to the data stream */ + int i, debug = 0; + int glyph = 0; + + for(i = 0; i < 64; i++) { + if(shift_set[i] == shifty) { + glyph = i; + } + } + + if(debug) { printf("SHIFT [%d] ", glyph); } + + if(glyph & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); } +} + +int gm_encode(int gbdata[], int length, char binary[], int reader) +{ + /* Create a binary stream representation of the input data. + 7 sets are defined - Chinese characters, Numerals, Lower case letters, Upper case letters, + Mixed numerals and latters, Control characters and 8-bit binary data */ + int sp, current_mode, next_mode, last_mode, glyph = 0; + int c1, c2, done; + int p = 0, ppos; + int numbuf[3], punt = 0; + int number_pad_posn, debug = 0; + int byte_count_posn = 0, byte_count = 0; + int shift, i; + + strcpy(binary, ""); + + sp = 0; + current_mode = 0; + last_mode = 0; + number_pad_posn = 0; + + if(reader) { + concat(binary, "1010"); /* FNC3 - Reader Initialisation */ + } + + do { + next_mode = seek_forward(gbdata, length, sp, current_mode); + + if(next_mode != current_mode) { + switch(current_mode) { + case 0: + switch(next_mode) { + case GM_CHINESE: concat(binary, "0001"); break; + case GM_NUMBER: concat(binary, "0010"); break; + case GM_LOWER: concat(binary, "0011"); break; + case GM_UPPER: concat(binary, "0100"); break; + case GM_MIXED: concat(binary, "0101"); break; + case GM_BYTE: concat(binary, "0111"); break; + } + break; + case GM_CHINESE: + switch(next_mode) { + case GM_NUMBER: concat(binary, "1111111100001"); break; // 8161 + case GM_LOWER: concat(binary, "1111111100010"); break; // 8162 + case GM_UPPER: concat(binary, "1111111100011"); break; // 8163 + case GM_MIXED: concat(binary, "1111111100100"); break; // 8164 + case GM_BYTE: concat(binary, "1111111100101"); break; // 8165 + } + break; + case GM_NUMBER: + /* add numeric block padding value */ + switch(p) { + case 1: binary[number_pad_posn] = '1'; binary[number_pad_posn + 1] = '0'; break; // 2 pad digits + case 2: binary[number_pad_posn] = '0'; binary[number_pad_posn + 1] = '1'; break; // 1 pad digit + case 3: binary[number_pad_posn] = '0'; binary[number_pad_posn + 1] = '0'; break; // 0 pad digits + } + switch(next_mode) { + case GM_CHINESE: concat(binary, "1111111011"); break; // 1019 + case GM_LOWER: concat(binary, "1111111100"); break; // 1020 + case GM_UPPER: concat(binary, "1111111101"); break; // 1021 + case GM_MIXED: concat(binary, "1111111110"); break; // 1022 + case GM_BYTE: concat(binary, "1111111111"); break; // 1023 + } + break; + case GM_LOWER: + case GM_UPPER: + switch(next_mode) { + case GM_CHINESE: concat(binary, "11100"); break; // 28 + case GM_NUMBER: concat(binary, "11101"); break; // 29 + case GM_LOWER: + case GM_UPPER: concat(binary, "11110"); break; // 30 + case GM_MIXED: concat(binary, "1111100"); break; // 124 + case GM_BYTE: concat(binary, "1111110"); break; // 126 + } + break; + case GM_MIXED: + switch(next_mode) { + case GM_CHINESE: concat(binary, "1111110001"); break; // 1009 + case GM_NUMBER: concat(binary, "1111110010"); break; // 1010 + case GM_LOWER: concat(binary, "1111110011"); break; // 1011 + case GM_UPPER: concat(binary, "1111110100"); break; // 1012 + case GM_BYTE: concat(binary, "1111110111"); break; // 1015 + } + break; + case GM_BYTE: + /* add byte block length indicator */ + add_byte_count(binary, byte_count_posn, byte_count); + byte_count = 0; + switch(next_mode) { + case GM_CHINESE: concat(binary, "0001"); break; // 1 + case GM_NUMBER: concat(binary, "0010"); break; // 2 + case GM_LOWER: concat(binary, "0011"); break; // 3 + case GM_UPPER: concat(binary, "0100"); break; // 4 + case GM_MIXED: concat(binary, "0101"); break; // 5 + } + break; + } + if(debug) { + switch(next_mode) { + case GM_CHINESE: printf("CHIN "); break; + case GM_NUMBER: printf("NUMB "); break; + case GM_LOWER: printf("LOWR "); break; + case GM_UPPER: printf("UPPR "); break; + case GM_MIXED: printf("MIXD "); break; + case GM_BYTE: printf("BYTE "); break; + } + } + } + last_mode = current_mode; + current_mode = next_mode; + + switch(current_mode) { + case GM_CHINESE: + done = 0; + if(gbdata[sp] > 0xff) { + /* GB2312 character */ + c1 = (gbdata[sp] & 0xff00) >> 8; + c2 = gbdata[sp] & 0xff; + + if((c1 >= 0xa0) && (c1 <= 0xa9)) { + glyph = (0x60 * (c1 - 0xa1)) + (c2 - 0xa0); + } + if((c1 >= 0xb0) && (c1 <= 0xf7)) { + glyph = (0x60 * (c1 - 0xb0 + 9)) + (c2 - 0xa0); + } + done = 1; + } + if(!(done)) { + if(sp != (length - 1)) { + if((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) { + /* End of Line */ + glyph = 7776; + sp++; + } + done = 1; + } + } + if(!(done)) { + if(sp != (length - 1)) { + if(((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) && + ((gbdata[sp + 1] >= '0') && (gbdata[sp + 1] <= '9'))) { + /* Two digits */ + glyph = 8033 + (10 * (gbdata[sp] - '0')) + (gbdata[sp + 1] - '0'); + sp++; + } + } + } + if(!(done)) { + /* Byte value */ + glyph = 7777 + gbdata[sp]; + } + + if(debug) { printf("[%d] ", glyph); } + + if(glyph & 0x1000) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x800) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x400) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); } + sp++; + break; + + case GM_NUMBER: + if(last_mode != current_mode) { + /* Reserve a space for numeric digit padding value (2 bits) */ + number_pad_posn = strlen(binary); + concat(binary, "XX"); + } + p = 0; + ppos = -1; + + /* Numeric compression can also include certain combinations of + non-numeric character */ + + numbuf[0] = '0'; + numbuf[1] = '0'; + numbuf[2] = '0'; + do { + if((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) { + numbuf[p] = gbdata[sp]; + sp++; + p++; + } + switch(gbdata[sp]) { + case ' ': + case '+': + case '-': + case '.': + case ',': + punt = gbdata[sp]; + sp++; + ppos = p; + break; + } + if(sp < (length - 1)) { + if((gbdata[sp] == 0x13) && (gbdata[sp + 1] == 0x10)) { + /* */ + punt = gbdata[sp]; + sp += 2; + ppos = p; + } + } + } while ((p < 3) && (sp < length)); + + if(ppos != -1) { + switch(punt) { + case ' ': glyph = 0; break; + case '+': glyph = 3; break; + case '-': glyph = 6; break; + case '.': glyph = 9; break; + case ',': glyph = 12; break; + case 0x13: glyph = 15; break; + } + glyph += ppos; + glyph += 1000; + + if(debug) { printf("[%d] ", glyph); } + + if(glyph & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); } + } + + glyph = (100 * (numbuf[0] - '0')) + (10 * (numbuf[1] - '0')) + (numbuf[2] - '0'); + if(debug) { printf("[%d] ", glyph); } + + if(glyph & 0x200) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x100) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); } + break; + + case GM_BYTE: + if(last_mode != current_mode) { + /* Reserve space for byte block length indicator (9 bits) */ + byte_count_posn = strlen(binary); + concat(binary, "LLLLLLLLL"); + } + if(byte_count == 512) { + /* Maximum byte block size is 512 bytes. If longer is needed then start a new block */ + add_byte_count(binary, byte_count_posn, byte_count); + concat(binary, "0111"); + byte_count_posn = strlen(binary); + concat(binary, "LLLLLLLLL"); + byte_count = 0; + } + + glyph = gbdata[sp]; + if(debug) { printf("[%d] ", glyph); } + if(glyph & 0x80) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x40) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); } + sp++; + byte_count++; + break; + + case GM_MIXED: + shift = 1; + if((gbdata[sp] >= '0') && (gbdata[sp] <= '9')) { shift = 0; } + if((gbdata[sp] >= 'A') && (gbdata[sp] <= 'Z')) { shift = 0; } + if((gbdata[sp] >= 'a') && (gbdata[sp] <= 'z')) { shift = 0; } + if(gbdata[sp] == ' ') { shift = 0; } + + if(shift == 0) { + /* Mixed Mode character */ + glyph = posn(EUROPIUM, gbdata[sp]); + if(debug) { printf("[%d] ", glyph); } + + if(glyph & 0x20) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); } + } else { + /* Shift Mode character */ + concat(binary, "1111110110"); /* 1014 - shift indicator */ + add_shift_char(binary, gbdata[sp]); + } + + sp++; + break; + + case GM_UPPER: + shift = 1; + if((gbdata[sp] >= 'A') && (gbdata[sp] <= 'Z')) { shift = 0; } + if(gbdata[sp] == ' ') { shift = 0; } + + if(shift == 0) { + /* Upper Case character */ + glyph = posn("ABCDEFGHIJKLMNOPQRSTUVWXYZ ", gbdata[sp]); + if(debug) { printf("[%d] ", glyph); } + + if(glyph & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); } + } else { + /* Shift Mode character */ + concat(binary, "1111101"); /* 127 - shift indicator */ + add_shift_char(binary, gbdata[sp]); + } + + sp++; + break; + + case GM_LOWER: + shift = 1; + if((gbdata[sp] >= 'a') && (gbdata[sp] <= 'z')) { shift = 0; } + if(gbdata[sp] == ' ') { shift = 0; } + + if(shift == 0) { + /* Lower Case character */ + glyph = posn("abcdefghijklmnopqrstuvwxyz ", gbdata[sp]); + if(debug) { printf("[%d] ", glyph); } + + if(glyph & 0x10) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x08) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x04) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x02) { concat(binary, "1"); } else { concat(binary, "0"); } + if(glyph & 0x01) { concat(binary, "1"); } else { concat(binary, "0"); } + } else { + /* Shift Mode character */ + concat(binary, "1111101"); /* 127 - shift indicator */ + add_shift_char(binary, gbdata[sp]); + } + + sp++; + break; + } + if(strlen(binary) > 9191) { + return ERROR_TOO_LONG; + } + + } while(sp < length); + + if(current_mode == GM_NUMBER) { + /* add numeric block padding value */ + switch(p) { + case 1: binary[number_pad_posn] = '1'; binary[number_pad_posn + 1] = '0'; break; // 2 pad digits + case 2: binary[number_pad_posn] = '0'; binary[number_pad_posn + 1] = '1'; break; // 1 pad digit + case 3: binary[number_pad_posn] = '0'; binary[number_pad_posn + 1] = '0'; break; // 0 pad digits + } + } + + if(current_mode == GM_BYTE) { + /* Add byte block length indicator */ + add_byte_count(binary, byte_count_posn, byte_count); + } + + /* Add "end of data" character */ + switch(current_mode) { + case GM_CHINESE: concat(binary, "1111111100000"); break; // 8160 + case GM_NUMBER: concat(binary, "1111111010"); break; // 1018 + case GM_LOWER: + case GM_UPPER: concat(binary, "11011"); break; // 27 + case GM_MIXED: concat(binary, "1111110000"); break; // 1008 + case GM_BYTE: concat(binary, "0000"); break; // 0 + } + + /* Add padding bits if required */ + p = 7 - (strlen(binary) % 7); + if(p == 7) { p = 0; } + for(i = 0; i < p; i++) { + concat(binary, "0"); + } + + if(strlen(binary) > 9191) { + return ERROR_TOO_LONG; + } + return 0; +} + +void gm_add_ecc(char binary[], int data_posn, int layers, int ecc_level, int word[]) +{ + int total_cw, data_cw, i, j, wp; + int n1, b1, n2, b2, e1, b3, e2; + int block_size, data_size, ecc_size, toggle; + int data[1320], block[130]; + unsigned char data_block[115], ecc_block[70]; + + total_cw = gm_total_cw[(layers - 1)]; + data_cw = gm_data_codewords[((layers - 1) * 5) + (ecc_level - 1)]; + + for(i = 0; i < 1320; i++) { + data[i] = 0; + } + + /* Convert from binary sream to 7-bit codewords */ + for(i = 0; i < data_posn; i++) { + if(binary[i * 7] == '1') { data[i] += 0x40; } + if(binary[(i * 7) + 1] == '1') { data[i] += 0x20; } + if(binary[(i * 7) + 2] == '1') { data[i] += 0x10; } + if(binary[(i * 7) + 3] == '1') { data[i] += 0x08; } + if(binary[(i * 7) + 4] == '1') { data[i] += 0x04; } + if(binary[(i * 7) + 5] == '1') { data[i] += 0x02; } + if(binary[(i * 7) + 6] == '1') { data[i] += 0x01; } + } + + /* Add padding codewords */ + data[data_posn] = 0x00; + for(i = (data_posn + 1); i < data_cw; i++) { + if(i & 1) { + data[i] = 0x7e; + toggle = 1; + } else { + data[i] = 0x00; + toggle = 0; + } + } + + /* Get block sizes */ + n1 = gm_n1[(layers - 1)]; + b1 = gm_b1[(layers - 1)]; + n2 = n1 - 1; + b2 = gm_b2[(layers - 1)]; + e1 = gm_ebeb[((layers - 1) * 20) + ((ecc_level - 1) * 4)]; + b3 = gm_ebeb[((layers - 1) * 20) + ((ecc_level - 1) * 4) + 1]; + e2 = gm_ebeb[((layers - 1) * 20) + ((ecc_level - 1) * 4) + 2]; + + /* Split the data into blocks */ + wp = 0; + for(i = 0; i < (b1 + b2); i++) { + if(i < b1) { block_size = n1; } else { block_size = n2; } + if(i < b3) { ecc_size = e1; } else { ecc_size = e2; } + data_size = block_size - ecc_size; + + /* printf("block %d/%d: data %d / ecc %d\n", i + 1, (b1 + b2), data_size, ecc_size);*/ + + for(j = 0; j < data_size; j++) { + data_block[j] = data[wp]; + wp++; + } + + /* Calculate ECC data for this block */ + rs_init_gf(0x89); + rs_init_code(ecc_size, 1); + rs_encode(data_size, data_block, ecc_block); + rs_free(); + + /* Correct error correction data but in reverse order */ + for(j = 0; j < data_size; j++) { + block[j] = data_block[j]; + } + for(j = 0; j < ecc_size; j++) { + block[(j + data_size)] = ecc_block[ecc_size - j - 1]; + } + + for(j = 0; j < n2; j++) { + word[((b1 + b2) * j) + i] = block[j]; + } + if(block_size == n1) { + word[((b1 + b2) * (n1 - 1)) + i] = block[(n1 - 1)]; + } + } +} + +void place_macromodule(char grid[], int x, int y, int word1, int word2, int size) +{ + int i, j; + + i = (x * 6) + 1; + j = (y * 6) + 1; + + if(word2 & 0x40) { grid[(j * size) + i + 2] = '1'; } + if(word2 & 0x20) { grid[(j * size) + i + 3] = '1'; } + if(word2 & 0x10) { grid[((j + 1) * size) + i] = '1'; } + if(word2 & 0x08) { grid[((j + 1) * size) + i + 1] = '1'; } + if(word2 & 0x04) { grid[((j + 1) * size) + i + 2] = '1'; } + if(word2 & 0x02) { grid[((j + 1) * size) + i + 3] = '1'; } + if(word2 & 0x01) { grid[((j + 2) * size) + i] = '1'; } + if(word1 & 0x40) { grid[((j + 2) * size) + i + 1] = '1'; } + if(word1 & 0x20) { grid[((j + 2) * size) + i + 2] = '1'; } + if(word1 & 0x10) { grid[((j + 2) * size) + i + 3] = '1'; } + if(word1 & 0x08) { grid[((j + 3) * size) + i] = '1'; } + if(word1 & 0x04) { grid[((j + 3) * size) + i + 1] = '1'; } + if(word1 & 0x02) { grid[((j + 3) * size) + i + 2] = '1'; } + if(word1 & 0x01) { grid[((j + 3) * size) + i + 3] = '1'; } +} + +void place_data_in_grid(int word[], char grid[], int modules, int size) +{ + int x, y, macromodule, offset; + + offset = 13 - ((modules - 1) / 2); + for(y = 0; y < modules; y++) { + for(x = 0; x < modules; x++) { + macromodule = gm_macro_matrix[((y + offset) * 27) + (x + offset)]; + place_macromodule(grid, x, y, word[macromodule * 2], word[(macromodule * 2) + 1], size); + } + } +} + +void place_layer_id(char* grid, int size, int layers, int modules, int ecc_level) +{ + /* Place the layer ID into each macromodule */ + + int i, j, layer, start, stop; + +#ifndef _MSC_VER + int layerid[layers + 1]; + int id[modules * modules]; +#else + int* layerid = (int *)_alloca((layers + 1) * sizeof(int)); + int* id = (int *)_alloca((modules * modules) * sizeof(int)); +#endif + + /* Calculate Layer IDs */ + for(i = 0; i <= layers; i++) { + if(ecc_level == 1) { + layerid[i] = 3 - (i % 4); + } else { + layerid[i] = (i + 5 - ecc_level) % 4; + } + } + + for(i = 0; i < modules; i++) { + for(j = 0; j < modules; j++) { + id[(i * modules) + j] = 0; + } + } + + /* Calculate which value goes in each macromodule */ + start = modules / 2; + stop = modules / 2; + for(layer = 0; layer <= layers; layer++) { + for(i = start; i <= stop; i++) { + id[(start * modules) + i] = layerid[layer]; + id[(i * modules) + start] = layerid[layer]; + id[((modules - start - 1) * modules) + i] = layerid[layer]; + id[(i * modules) + (modules - start - 1)] = layerid[layer]; + } + start--; + stop++; + } + + /* Place the data in the grid */ + for(i = 0; i < modules; i++) { + for(j = 0; j < modules; j++) { + if(id[(i * modules) + j] & 0x02) { + grid[(((i * 6) + 1) * size) + (j * 6) + 1] = '1'; + } + if(id[(i * modules) + j] & 0x01) { + grid[(((i * 6) + 1) * size) + (j * 6) + 2] = '1'; + } + } + } +} + +int grid_matrix(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int size, modules, dark, error_number; + int auto_layers, min_layers, layers, auto_ecc_level, min_ecc_level, ecc_level; + int x, y, i, j, glyph; + char binary[9300]; + int data_cw, input_latch = 0; + int word[1460], data_max, reader = 0; + +#ifndef _MSC_VER + int utfdata[length + 1]; + int gbdata[length + 1]; +#else + int* utfdata = (int *)_alloca((length + 1) * sizeof(int)); + int* gbdata = (int *)_alloca((length + 1) * sizeof(int)); +#endif + + for(i = 0; i < 1460; i++) { + word[i] = 0; + } + + switch(symbol->input_mode) { + case DATA_MODE: + for(i = 0; i < length; i++) { + gbdata[i] = (int)source[i]; + } + break; + default: + /* Convert Unicode input to GB-2312 */ + error_number = utf8toutf16(symbol, source, utfdata, &length); + if(error_number != 0) { return error_number; } + + for(i = 0; i < length; i++) { + if(utfdata[i] <= 0xff) { + gbdata[i] = utfdata[i]; + } else { + j = 0; + glyph = 0; + do { + if(gb2312_lookup[j * 2] == utfdata[i]) { + glyph = gb2312_lookup[(j * 2) + 1]; + } + j++; + } while ((j < 7445) && (glyph == 0)); + if(glyph == 0) { + strcpy(symbol->errtxt, "Invalid character in input data"); + return ERROR_INVALID_DATA1; + } + gbdata[i] = glyph; + } + } + break; + } + + if(symbol->output_options & READER_INIT) reader = 1; + + error_number = gm_encode(gbdata, length, binary, reader); + if(error_number != 0) { + strcpy(symbol->errtxt, "Input data too long"); + return error_number; + } + + /* Determine the size of the symbol */ + data_cw = strlen(binary) / 7; + + auto_layers = 13; + for(i = 12; i > 0; i--) { + if(gm_recommend_cw[(i - 1)] >= data_cw) { auto_layers = i; } + } + min_layers = 13; + for(i = 12; i > 0; i--) { + if(gm_max_cw[(i - 1)] >= data_cw) { min_layers = i; } + } + layers = auto_layers; + auto_ecc_level = 3; + if(layers == 1) { auto_ecc_level = 5; } + if((layers == 2) || (layers == 3)) { auto_ecc_level = 4; } + min_ecc_level = 1; + if(layers == 1) { min_ecc_level = 4; } + if((layers == 2) || (layers == 3)) { min_ecc_level = 2; } + ecc_level = auto_ecc_level; + + if((symbol->option_2 >= 1) && (symbol->option_2 <= 13)) { + input_latch = 1; + if(symbol->option_2 > min_layers) { + layers = symbol->option_2; + } else { + layers = min_layers; + } + } + + if(input_latch == 1) { + auto_ecc_level = 3; + if(layers == 1) { auto_ecc_level = 5; } + if((layers == 2) || (layers == 3)) { auto_ecc_level = 4; } + ecc_level = auto_ecc_level; + if(data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) { + layers++; + } + } + + if(input_latch == 0) { + if((symbol->option_1 >= 1) && (symbol->option_1 <= 5)) { + if(symbol->option_1 > min_ecc_level) { + ecc_level = symbol->option_1; + } else { + ecc_level = min_ecc_level; + } + } + if(data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) { + do { + layers++; + } while ((data_cw > gm_data_codewords[(5 * (layers - 1)) + (ecc_level - 1)]) && (layers <= 13)); + } + } + + data_max = 1313; + switch(ecc_level) { + case 2: data_max = 1167; break; + case 3: data_max = 1021; break; + case 4: data_max = 875; break; + case 5: data_max = 729; break; + } + + if(data_cw > data_max) { + strcpy(symbol->errtxt, "Input data too long"); + return ERROR_TOO_LONG; + } + + gm_add_ecc(binary, data_cw, layers, ecc_level, word); + size = 6 + (layers * 12); + modules = 1 + (layers * 2); + +#ifndef _MSC_VER + char grid[size * size]; +#else + char* grid = (char *)_alloca((size * size) * sizeof(char)); +#endif + + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + grid[(y * size) + x] = '0'; + } + } + + place_data_in_grid(word, grid, modules, size); + place_layer_id(grid, size, layers, modules, ecc_level); + + /* Add macromodule frames */ + for(x = 0; x < modules; x++) { + dark = 1 - (x & 1); + for(y = 0; y < modules; y++) { + if(dark == 1) { + for(i = 0; i < 5; i++) { + grid[((y * 6) * size) + (x * 6) + i] = '1'; + grid[(((y * 6) + 5) * size) + (x * 6) + i] = '1'; + grid[(((y * 6) + i) * size) + (x * 6)] = '1'; + grid[(((y * 6) + i) * size) + (x * 6) + 5] = '1'; + } + grid[(((y * 6) + 5) * size) + (x * 6) + 5] = '1'; + dark = 0; + } else { + dark = 1; + } + } + } + + /* Copy values to symbol */ + symbol->width = size; + symbol->rows = size; + + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + if(grid[(y * size) + x] == '1') { + set_module(symbol, y, x); + } + } + symbol->row_height[x] = 1; + } + + return 0; +} diff --git a/3rdparty/zint-2.4.4/backend/gridmtx.h b/3rdparty/zint-2.4.4/backend/gridmtx.h new file mode 100644 index 0000000..ba684a1 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/gridmtx.h @@ -0,0 +1,160 @@ +/* gridmtx.h - definitions for Grid Matrix + + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define GM_NUMBER 1 +#define GM_LOWER 2 +#define GM_UPPER 3 +#define GM_MIXED 4 +#define GM_CONTROL 5 +#define GM_BYTE 6 +#define GM_CHINESE 7 + +#define EUROPIUM "0123456789ABCDEFGHIJKLMOPRSTUVWXYZabcdefghijklmnopqrstuvwxyz " + +static char shift_set[] = { + /* From Table 7 - Encoding of control characters */ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* NULL -> SI */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* DLE -> US */ + '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', + ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~' +}; + +static int gm_recommend_cw[] = { 9, 30, 59, 114, 170, 237, 315, 405, 506, 618, 741, 875, 1021 }; +static int gm_max_cw[] = { 11, 40, 79, 146, 218, 305, 405, 521, 650, 794, 953, 1125, 1313 }; +static int gm_total_cw[] = { 18, 50, 98, 162, 242, 338, 450, 578, 722, 882, 1058, 1250, 1458 }; + +static int gm_data_codewords[] = { + 0, 15, 13, 11, 9, + 45, 40, 35, 30, 25, + 89, 79, 69, 59, 49, + 146, 130, 114, 98, 81, + 218, 194, 170, 146, 121, + 305, 271, 237, 203, 169, + 405, 360, 315, 270, 225, + 521, 463, 405, 347, 289, + 650, 578, 506, 434, 361, + 794, 706, 618, 530, 441, + 953, 847, 741, 635, 529, + 1125, 1000, 875, 750, 625, + 1313, 1167, 1021, 875, 729 +}; + +static int gm_n1[] = { 18, 50, 98, 81, 121, 113, 113, 116, 121, 126, 118, 125, 122 }; +static int gm_b1[] = { 1, 1, 1, 2, 2, 2, 2, 3, 2, 7, 5, 10, 6 }; +static int gm_b2[] = { 0, 0, 0, 0, 0, 1, 2, 2, 4, 0, 4, 0, 6 }; + +static int gm_ebeb[] = { + /* E1 B3 E2 B4 */ + 0, 0, 0, 0, // version 1 + 3, 1, 0, 0, + 5, 1, 0, 0, + 7, 1, 0, 0, + 9, 1, 0, 0, + 5, 1, 0, 0, // version 2 + 10, 1, 0, 0, + 15, 1, 0, 0, + 20, 1, 0, 0, + 25, 1, 0, 0, + 9, 1, 0, 0, // version 3 + 19, 1, 0, 0, + 29, 1, 0, 0, + 39, 1, 0, 0, + 49, 1, 0, 0, + 8, 2, 0, 0, // version 4 + 16, 2, 0, 0, + 24, 2, 0, 0, + 32, 2, 0, 0, + 41, 1, 10, 1, + 12, 2, 0, 0, // version 5 + 24, 2, 0, 0, + 36, 2, 0, 0, + 48, 2, 0, 0, + 61, 1, 60, 1, + 11, 3, 0, 0, // version 6 + 23, 1, 22, 2, + 34, 2, 33, 1, + 45, 3, 0, 0, + 57, 1, 56, 2, + 12, 1, 11, 3, // version 7 + 23, 2, 22, 2, + 34, 3, 33, 1, + 45, 4, 0, 0, + 57, 1, 56, 3, + 12, 2, 11, 3, // version 8 + 23, 5, 0, 0, + 35, 3, 34, 2, + 47, 1, 46, 4, + 58, 4, 57, 1, + 12, 6, 0, 0, // version 9 + 24, 6, 0, 0, + 36, 6, 0, 0, + 48, 6, 0, 0, + 61, 1, 60, 5, + 13, 4, 12, 3, // version 10 + 26, 1, 25, 6, + 38, 5, 37, 2, + 51, 2, 50, 5, + 63, 7, 0, 0, + 12, 6, 11, 3, // version 11 + 24, 4, 23, 5, + 36, 2, 35, 7, + 47, 9, 0, 0, + 59, 7, 58, 2, + 13, 5, 12, 5, // version 12 + 25, 10, 0, 0, + 38, 5, 37, 5, + 50, 10, 0, 0, + 63, 5, 62, 5, + 13, 1, 12, 11, //version 13 + 25, 3, 24, 9, + 37, 5, 36, 7, + 49, 7, 48, 5, + 61, 9, 60, 3 +}; + +static int gm_macro_matrix[] = { + 728,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650, + 727,624,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,651, + 726,623,528,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,553,652, + 725,622,527,440,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,463,554,653, + 724,621,526,439,360,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,381,464,555,654, + 723,620,525,438,359,288,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,307,382,465,556,655, + 722,619,524,437,358,287,224,169,170,171,172,173,174,175,176,177,178,179,180,181,182,241,308,383,466,557,656, + 721,618,523,436,357,286,223,168,121,122,123,124,125,126,127,128,129,130,131,132,183,242,309,384,467,558,657, + 720,617,522,435,356,285,222,167,120,81,82,83,84,85,86,87,88,89,90,133,184,243,310,385,468,559,658, + 719,616,521,434,355,284,221,166,119,80,49,50,51,52,53,54,55,56,91,134,185,244,311,386,469,560,659, + 718,615,520,433,354,283,220,165,118,79,48,25,26,27,28,29,30,57,92,135,186,245,312,387,470,561,660, + 717,614,519,432,353,282,219,164,117,78,47,24,9,10,11,12,31,58,93,136,187,246,313,388,471,562,661, + 716,613,518,431,352,281,218,163,116,77,46,23,8,1,2,13,32,59,94,137,188,247,314,389,472,563,662, + 715,612,517,430,351,280,217,162,115,76,45,22,7,0,3,14,33,60,95,138,189,248,315,390,473,564,663, + 714,611,516,429,350,279,216,161,114,75,44,21,6,5,4,15,34,61,96,139,190,249,316,391,474,565,664, + 713,610,515,428,349,278,215,160,113,74,43,20,19,18,17,16,35,62,97,140,191,250,317,392,475,566,665, + 712,609,514,427,348,277,214,159,112,73,42,41,40,39,38,37,36,63,98,141,192,251,318,393,476,567,666, + 711,608,513,426,347,276,213,158,111,72,71,70,69,68,67,66,65,64,99,142,193,252,319,394,477,568,667, + 710,607,512,425,346,275,212,157,110,109,108,107,106,105,104,103,102,101,100,143,194,253,320,395,478,569,668, + 709,606,511,424,345,274,211,156,155,154,153,152,151,150,149,148,147,146,145,144,195,254,321,396,479,570,669, + 708,605,510,423,344,273,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,255,322,397,480,571,670, + 707,604,509,422,343,272,271,270,269,268,267,266,265,264,263,262,261,260,259,258,257,256,323,398,481,572,671, + 706,603,508,421,342,341,340,339,338,337,336,335,334,333,332,331,330,329,328,327,326,325,324,399,482,573,672, + 705,602,507,420,419,418,417,416,415,414,413,412,411,410,409,408,407,406,405,404,403,402,401,400,483,574,673, + 704,601,506,505,504,503,502,501,500,499,498,497,496,495,494,493,492,491,490,489,488,487,486,485,484,575,674, + 703,600,599,598,597,596,595,594,593,592,591,590,589,588,587,586,585,584,583,582,581,580,579,578,577,576,675, + 702,701,700,699,698,697,696,695,694,693,692,691,690,689,688,687,686,685,684,683,682,681,680,679,678,677,676, +}; diff --git a/3rdparty/zint-2.4.4/backend/gs1.c b/3rdparty/zint-2.4.4/backend/gs1.c new file mode 100644 index 0000000..45e14dd --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/gs1.c @@ -0,0 +1,311 @@ +/* gs1.c - Verifies GS1 data */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" +#include "gs1.h" + +/* This code does some checks on the integrity of GS1 data. It is not intended + to be bulletproof, nor does it report very accurately what problem was found + or where, but should prevent some of the more common encoding errors */ + +void itostr(char ai_string[], int ai_value) +{ + int thou, hund, ten, unit; + char temp[2]; + + strcpy(ai_string, "("); + thou = ai_value / 1000; + hund = (ai_value - (1000 * thou)) / 100; + ten = (ai_value - ((1000 * thou) + (100 * hund))) / 10; + unit = ai_value - ((1000 * thou) + (100 * hund) + (10 * ten)); + + temp[1] = '\0'; + if(ai_value >= 1000) { temp[0] = itoc(thou); concat(ai_string, temp); } + if(ai_value >= 100) { temp[0] = itoc(hund); concat(ai_string, temp); } + temp[0] = itoc(ten); + concat(ai_string, temp); + temp[0] = itoc(unit); + concat(ai_string, temp); + concat(ai_string, ")"); +} + +int gs1_verify(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len, char reduced[]) +{ + int i, j, last_ai, ai_latch; + char ai_string[6]; + int bracket_level, max_bracket_level, ai_length, max_ai_length, min_ai_length; + int ai_value[100], ai_location[100], ai_count, data_location[100], data_length[100]; + int error_latch; + + /* Detect extended ASCII characters */ + for(i = 0; i < (int)src_len; i++) { + if(source[i] >=128) { + strcpy(symbol->errtxt, "Extended ASCII characters are not supported by GS1"); + return ERROR_INVALID_DATA1; + } + if(source[i] < 32) { + strcpy(symbol->errtxt, "Control characters are not supported by GS1"); + return ERROR_INVALID_DATA1; + } + } + + if(source[0] != '[') { + strcpy(symbol->errtxt, "Data does not start with an AI"); + return ERROR_INVALID_DATA1; + } + + /* Check the position of the brackets */ + bracket_level = 0; + max_bracket_level = 0; + ai_length = 0; + max_ai_length = 0; + min_ai_length = 5; + j = 0; + ai_latch = 0; + for(i = 0; i < (int)src_len; i++) { + ai_length += j; + if(((j == 1) && (source[i] != ']')) && ((source[i] < '0') || (source[i] > '9'))) { ai_latch = 1; } + if(source[i] == '[') { bracket_level++; j = 1; } + if(source[i] == ']') { + bracket_level--; + if(ai_length < min_ai_length) { min_ai_length = ai_length; } + j = 0; + ai_length = 0; + } + if(bracket_level > max_bracket_level) { max_bracket_level = bracket_level; } + if(ai_length > max_ai_length) { max_ai_length = ai_length; } + } + min_ai_length--; + + if(bracket_level != 0) { + /* Not all brackets are closed */ + strcpy(symbol->errtxt, "Malformed AI in input data (brackets don\'t match)"); + return ERROR_INVALID_DATA1; + } + + if(max_bracket_level > 1) { + /* Nested brackets */ + strcpy(symbol->errtxt, "Found nested brackets in input data"); + return ERROR_INVALID_DATA1; + } + + if(max_ai_length > 4) { + /* AI is too long */ + strcpy(symbol->errtxt, "Invalid AI in input data (AI too long)"); + return ERROR_INVALID_DATA1; + } + + if(min_ai_length <= 1) { + /* AI is too short */ + strcpy(symbol->errtxt, "Invalid AI in input data (AI too short)"); + return ERROR_INVALID_DATA1; + } + + if(ai_latch == 1) { + /* Non-numeric data in AI */ + strcpy(symbol->errtxt, "Invalid AI in input data (non-numeric characters in AI)"); + return ERROR_INVALID_DATA1; + } + + ai_count = 0; + for(i = 1; i < (int)src_len; i++) { + if(source[i - 1] == '[') { + ai_location[ai_count] = i; + j = 0; + do { + ai_string[j] = source[i + j]; + j++; + } while (ai_string[j - 1] != ']'); + ai_string[j - 1] = '\0'; + ai_value[ai_count] = atoi(ai_string); + ai_count++; + } + } + + for(i = 0; i < ai_count; i++) { + data_location[i] = ai_location[i] + 3; + if(ai_value[i] >= 100) { data_location[i]++; } + if(ai_value[i] >= 1000) { data_location[i]++; } + data_length[i] = 0; + do { + data_length[i]++; + } while ((source[data_location[i] + data_length[i] - 1] != '[') && (source[data_location[i] + data_length[i] - 1] != '\0')); + data_length[i]--; + } + + for(i = 0; i < ai_count; i++) { + if(data_length[i] == 0) { + /* No data for given AI */ + strcpy(symbol->errtxt, "Empty data field in input data"); + return ERROR_INVALID_DATA1; + } + } + + error_latch = 0; + strcpy(ai_string, ""); + for(i = 0; i < ai_count; i++) { + switch (ai_value[i]) { + case 0: if(data_length[i] != 18) { error_latch = 1; } break; + case 1: + case 2: + case 3: if(data_length[i] != 14) { error_latch = 1; } break; + case 4: if(data_length[i] != 16) { error_latch = 1; } break; + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: if(data_length[i] != 6) { error_latch = 1; } break; + case 20: if(data_length[i] != 2) { error_latch = 1; } break; + case 23: + case 24: + case 25: + case 39: + case 40: + case 41: + case 42: + case 70: + case 80: + case 81: error_latch = 2; break; + } + if( + ((ai_value[i] >= 100) && (ai_value[i] <= 179)) + || ((ai_value[i] >= 1000) && (ai_value[i] <= 1799)) + || ((ai_value[i] >= 200) && (ai_value[i] <= 229)) + || ((ai_value[i] >= 2000) && (ai_value[i] <= 2299)) + || ((ai_value[i] >= 300) && (ai_value[i] <= 309)) + || ((ai_value[i] >= 3000) && (ai_value[i] <= 3099)) + || ((ai_value[i] >= 31) && (ai_value[i] <= 36)) + || ((ai_value[i] >= 310) && (ai_value[i] <= 369)) + ) { + error_latch = 2; + } + if((ai_value[i] >= 3100) && (ai_value[i] <= 3699)) { + if(data_length[i] != 6) { + error_latch = 1; + } + } + if( + ((ai_value[i] >= 370) && (ai_value[i] <= 379)) + || ((ai_value[i] >= 3700) && (ai_value[i] <= 3799)) + ) { + error_latch = 2; + } + if((ai_value[i] >= 410) && (ai_value[i] <= 415)) { + if(data_length[i] != 13) { + error_latch = 1; + } + } + if( + ((ai_value[i] >= 4100) && (ai_value[i] <= 4199)) + || ((ai_value[i] >= 700) && (ai_value[i] <= 703)) + || ((ai_value[i] >= 800) && (ai_value[i] <= 810)) + || ((ai_value[i] >= 900) && (ai_value[i] <= 999)) + || ((ai_value[i] >= 9000) && (ai_value[i] <= 9999)) + ) { + error_latch = 2; + } + if((error_latch < 4) && (error_latch > 0)) { + /* error has just been detected: capture AI */ + itostr(ai_string, ai_value[i]); + error_latch += 4; + } + } + + if(error_latch == 5) { + strcpy(symbol->errtxt, "Invalid data length for AI "); + concat(symbol->errtxt, ai_string); + return ERROR_INVALID_DATA1; + } + + if(error_latch == 6) { + strcpy(symbol->errtxt, "Invalid AI value "); + concat(symbol->errtxt, ai_string); + return ERROR_INVALID_DATA1; + } + + /* Resolve AI data - put resulting string in 'reduced' */ + j = 0; + last_ai = 0; + ai_latch = 1; + for(i = 0; i < (int)src_len; i++) { + if((source[i] != '[') && (source[i] != ']')) { + reduced[j++] = source[i]; + } + if(source[i] == '[') { + /* Start of an AI string */ + if(ai_latch == 0) { + reduced[j++] = '['; + } + ai_string[0] = source[i + 1]; + ai_string[1] = source[i + 2]; + ai_string[2] = '\0'; + last_ai = atoi(ai_string); + ai_latch = 0; + /* The following values from "GS-1 General Specification version 8.0 issue 2, May 2008" + figure 5.4.8.2.1 - 1 "Element Strings with Pre-Defined Length Using Application Identifiers" */ + if( + ((last_ai >= 0) && (last_ai <= 4)) + || ((last_ai >= 11) && (last_ai <= 20)) + || (last_ai == 23) /* legacy support - see 5.3.8.2.2 */ + || ((last_ai >= 31) && (last_ai <= 36)) + || (last_ai == 41) + ) { + ai_latch = 1; + } + } + /* The ']' character is simply dropped from the input */ + } + reduced[j] = '\0'; + + /* the character '[' in the reduced string refers to the FNC1 character */ + return 0; +} + +int ugs1_verify(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len, unsigned char reduced[]) +{ + /* Only to keep the compiler happy */ +#ifndef _MSC_VER + char temp[src_len + 5]; +#else + char* temp = (char*)_alloca(src_len + 5); +#endif + int error_number; + + error_number = gs1_verify(symbol, source, src_len, temp); + if(error_number != 0) { return error_number; } + + if (strlen(temp) < src_len + 5) { + ustrcpy(reduced, (unsigned char*)temp); + return 0; + } + strcpy(symbol->errtxt, "ugs1_verify overflow"); + return ERROR_INVALID_DATA1; +} diff --git a/3rdparty/zint-2.4.4/backend/gs1.h b/3rdparty/zint-2.4.4/backend/gs1.h new file mode 100644 index 0000000..42b40df --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/gs1.h @@ -0,0 +1,35 @@ +/* gs1.h - Verifies GS1 data */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +#ifndef __GS1_H +#define __GS1_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +extern int gs1_verify(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len, char reduced[]); +extern int ugs1_verify(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len, unsigned char reduced[]); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __GS1_H */ \ No newline at end of file diff --git a/3rdparty/zint-2.4.4/backend/imail.c b/3rdparty/zint-2.4.4/backend/imail.c new file mode 100644 index 0000000..5094139 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/imail.c @@ -0,0 +1,700 @@ +/* imail.c - Handles Intelligent Mail (aka OneCode) for USPS */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* The function "USPS_MSB_Math_CRC11GenerateFrameCheckSequence" + is Copyright (C) 2006 United States Postal Service */ + +static short int BCD[40] = { + 0, 0, 0, 0, + 1, 0, 0, 0, + 0, 1, 0, 0, + 1, 1, 0, 0, + 0, 0, 1, 0, + 1, 0, 1, 0, + 0, 1, 1, 0, + 1, 1, 1, 0, + 0, 0, 0, 1, + 1, 0, 0, 1 +}; + +#include +#include +#include +#include "common.h" +#include "large.h" + +#define SODIUM "0123456789-" + +/* The following lookup tables were generated using the code in Appendix C */ + +static unsigned short AppxD_I[1287] = { /* Appendix D Table 1 - 5 of 13 characters */ + 0x001F, 0x1F00, 0x002F, 0x1E80, 0x0037, 0x1D80, 0x003B, 0x1B80, 0x003D, 0x1780, + 0x003E, 0x0F80, 0x004F, 0x1E40, 0x0057, 0x1D40, 0x005B, 0x1B40, 0x005D, 0x1740, + 0x005E, 0x0F40, 0x0067, 0x1CC0, 0x006B, 0x1AC0, 0x006D, 0x16C0, 0x006E, 0x0EC0, + 0x0073, 0x19C0, 0x0075, 0x15C0, 0x0076, 0x0DC0, 0x0079, 0x13C0, 0x007A, 0x0BC0, + 0x007C, 0x07C0, 0x008F, 0x1E20, 0x0097, 0x1D20, 0x009B, 0x1B20, 0x009D, 0x1720, + 0x009E, 0x0F20, 0x00A7, 0x1CA0, 0x00AB, 0x1AA0, 0x00AD, 0x16A0, 0x00AE, 0x0EA0, + 0x00B3, 0x19A0, 0x00B5, 0x15A0, 0x00B6, 0x0DA0, 0x00B9, 0x13A0, 0x00BA, 0x0BA0, + 0x00BC, 0x07A0, 0x00C7, 0x1C60, 0x00CB, 0x1A60, 0x00CD, 0x1660, 0x00CE, 0x0E60, + 0x00D3, 0x1960, 0x00D5, 0x1560, 0x00D6, 0x0D60, 0x00D9, 0x1360, 0x00DA, 0x0B60, + 0x00DC, 0x0760, 0x00E3, 0x18E0, 0x00E5, 0x14E0, 0x00E6, 0x0CE0, 0x00E9, 0x12E0, + 0x00EA, 0x0AE0, 0x00EC, 0x06E0, 0x00F1, 0x11E0, 0x00F2, 0x09E0, 0x00F4, 0x05E0, + 0x00F8, 0x03E0, 0x010F, 0x1E10, 0x0117, 0x1D10, 0x011B, 0x1B10, 0x011D, 0x1710, + 0x011E, 0x0F10, 0x0127, 0x1C90, 0x012B, 0x1A90, 0x012D, 0x1690, 0x012E, 0x0E90, + 0x0133, 0x1990, 0x0135, 0x1590, 0x0136, 0x0D90, 0x0139, 0x1390, 0x013A, 0x0B90, + 0x013C, 0x0790, 0x0147, 0x1C50, 0x014B, 0x1A50, 0x014D, 0x1650, 0x014E, 0x0E50, + 0x0153, 0x1950, 0x0155, 0x1550, 0x0156, 0x0D50, 0x0159, 0x1350, 0x015A, 0x0B50, + 0x015C, 0x0750, 0x0163, 0x18D0, 0x0165, 0x14D0, 0x0166, 0x0CD0, 0x0169, 0x12D0, + 0x016A, 0x0AD0, 0x016C, 0x06D0, 0x0171, 0x11D0, 0x0172, 0x09D0, 0x0174, 0x05D0, + 0x0178, 0x03D0, 0x0187, 0x1C30, 0x018B, 0x1A30, 0x018D, 0x1630, 0x018E, 0x0E30, + 0x0193, 0x1930, 0x0195, 0x1530, 0x0196, 0x0D30, 0x0199, 0x1330, 0x019A, 0x0B30, + 0x019C, 0x0730, 0x01A3, 0x18B0, 0x01A5, 0x14B0, 0x01A6, 0x0CB0, 0x01A9, 0x12B0, + 0x01AA, 0x0AB0, 0x01AC, 0x06B0, 0x01B1, 0x11B0, 0x01B2, 0x09B0, 0x01B4, 0x05B0, + 0x01B8, 0x03B0, 0x01C3, 0x1870, 0x01C5, 0x1470, 0x01C6, 0x0C70, 0x01C9, 0x1270, + 0x01CA, 0x0A70, 0x01CC, 0x0670, 0x01D1, 0x1170, 0x01D2, 0x0970, 0x01D4, 0x0570, + 0x01D8, 0x0370, 0x01E1, 0x10F0, 0x01E2, 0x08F0, 0x01E4, 0x04F0, 0x01E8, 0x02F0, + 0x020F, 0x1E08, 0x0217, 0x1D08, 0x021B, 0x1B08, 0x021D, 0x1708, 0x021E, 0x0F08, + 0x0227, 0x1C88, 0x022B, 0x1A88, 0x022D, 0x1688, 0x022E, 0x0E88, 0x0233, 0x1988, + 0x0235, 0x1588, 0x0236, 0x0D88, 0x0239, 0x1388, 0x023A, 0x0B88, 0x023C, 0x0788, + 0x0247, 0x1C48, 0x024B, 0x1A48, 0x024D, 0x1648, 0x024E, 0x0E48, 0x0253, 0x1948, + 0x0255, 0x1548, 0x0256, 0x0D48, 0x0259, 0x1348, 0x025A, 0x0B48, 0x025C, 0x0748, + 0x0263, 0x18C8, 0x0265, 0x14C8, 0x0266, 0x0CC8, 0x0269, 0x12C8, 0x026A, 0x0AC8, + 0x026C, 0x06C8, 0x0271, 0x11C8, 0x0272, 0x09C8, 0x0274, 0x05C8, 0x0278, 0x03C8, + 0x0287, 0x1C28, 0x028B, 0x1A28, 0x028D, 0x1628, 0x028E, 0x0E28, 0x0293, 0x1928, + 0x0295, 0x1528, 0x0296, 0x0D28, 0x0299, 0x1328, 0x029A, 0x0B28, 0x029C, 0x0728, + 0x02A3, 0x18A8, 0x02A5, 0x14A8, 0x02A6, 0x0CA8, 0x02A9, 0x12A8, 0x02AA, 0x0AA8, + 0x02AC, 0x06A8, 0x02B1, 0x11A8, 0x02B2, 0x09A8, 0x02B4, 0x05A8, 0x02B8, 0x03A8, + 0x02C3, 0x1868, 0x02C5, 0x1468, 0x02C6, 0x0C68, 0x02C9, 0x1268, 0x02CA, 0x0A68, + 0x02CC, 0x0668, 0x02D1, 0x1168, 0x02D2, 0x0968, 0x02D4, 0x0568, 0x02D8, 0x0368, + 0x02E1, 0x10E8, 0x02E2, 0x08E8, 0x02E4, 0x04E8, 0x0307, 0x1C18, 0x030B, 0x1A18, + 0x030D, 0x1618, 0x030E, 0x0E18, 0x0313, 0x1918, 0x0315, 0x1518, 0x0316, 0x0D18, + 0x0319, 0x1318, 0x031A, 0x0B18, 0x031C, 0x0718, 0x0323, 0x1898, 0x0325, 0x1498, + 0x0326, 0x0C98, 0x0329, 0x1298, 0x032A, 0x0A98, 0x032C, 0x0698, 0x0331, 0x1198, + 0x0332, 0x0998, 0x0334, 0x0598, 0x0338, 0x0398, 0x0343, 0x1858, 0x0345, 0x1458, + 0x0346, 0x0C58, 0x0349, 0x1258, 0x034A, 0x0A58, 0x034C, 0x0658, 0x0351, 0x1158, + 0x0352, 0x0958, 0x0354, 0x0558, 0x0361, 0x10D8, 0x0362, 0x08D8, 0x0364, 0x04D8, + 0x0383, 0x1838, 0x0385, 0x1438, 0x0386, 0x0C38, 0x0389, 0x1238, 0x038A, 0x0A38, + 0x038C, 0x0638, 0x0391, 0x1138, 0x0392, 0x0938, 0x0394, 0x0538, 0x03A1, 0x10B8, + 0x03A2, 0x08B8, 0x03A4, 0x04B8, 0x03C1, 0x1078, 0x03C2, 0x0878, 0x03C4, 0x0478, + 0x040F, 0x1E04, 0x0417, 0x1D04, 0x041B, 0x1B04, 0x041D, 0x1704, 0x041E, 0x0F04, + 0x0427, 0x1C84, 0x042B, 0x1A84, 0x042D, 0x1684, 0x042E, 0x0E84, 0x0433, 0x1984, + 0x0435, 0x1584, 0x0436, 0x0D84, 0x0439, 0x1384, 0x043A, 0x0B84, 0x043C, 0x0784, + 0x0447, 0x1C44, 0x044B, 0x1A44, 0x044D, 0x1644, 0x044E, 0x0E44, 0x0453, 0x1944, + 0x0455, 0x1544, 0x0456, 0x0D44, 0x0459, 0x1344, 0x045A, 0x0B44, 0x045C, 0x0744, + 0x0463, 0x18C4, 0x0465, 0x14C4, 0x0466, 0x0CC4, 0x0469, 0x12C4, 0x046A, 0x0AC4, + 0x046C, 0x06C4, 0x0471, 0x11C4, 0x0472, 0x09C4, 0x0474, 0x05C4, 0x0487, 0x1C24, + 0x048B, 0x1A24, 0x048D, 0x1624, 0x048E, 0x0E24, 0x0493, 0x1924, 0x0495, 0x1524, + 0x0496, 0x0D24, 0x0499, 0x1324, 0x049A, 0x0B24, 0x049C, 0x0724, 0x04A3, 0x18A4, + 0x04A5, 0x14A4, 0x04A6, 0x0CA4, 0x04A9, 0x12A4, 0x04AA, 0x0AA4, 0x04AC, 0x06A4, + 0x04B1, 0x11A4, 0x04B2, 0x09A4, 0x04B4, 0x05A4, 0x04C3, 0x1864, 0x04C5, 0x1464, + 0x04C6, 0x0C64, 0x04C9, 0x1264, 0x04CA, 0x0A64, 0x04CC, 0x0664, 0x04D1, 0x1164, + 0x04D2, 0x0964, 0x04D4, 0x0564, 0x04E1, 0x10E4, 0x04E2, 0x08E4, 0x0507, 0x1C14, + 0x050B, 0x1A14, 0x050D, 0x1614, 0x050E, 0x0E14, 0x0513, 0x1914, 0x0515, 0x1514, + 0x0516, 0x0D14, 0x0519, 0x1314, 0x051A, 0x0B14, 0x051C, 0x0714, 0x0523, 0x1894, + 0x0525, 0x1494, 0x0526, 0x0C94, 0x0529, 0x1294, 0x052A, 0x0A94, 0x052C, 0x0694, + 0x0531, 0x1194, 0x0532, 0x0994, 0x0534, 0x0594, 0x0543, 0x1854, 0x0545, 0x1454, + 0x0546, 0x0C54, 0x0549, 0x1254, 0x054A, 0x0A54, 0x054C, 0x0654, 0x0551, 0x1154, + 0x0552, 0x0954, 0x0561, 0x10D4, 0x0562, 0x08D4, 0x0583, 0x1834, 0x0585, 0x1434, + 0x0586, 0x0C34, 0x0589, 0x1234, 0x058A, 0x0A34, 0x058C, 0x0634, 0x0591, 0x1134, + 0x0592, 0x0934, 0x05A1, 0x10B4, 0x05A2, 0x08B4, 0x05C1, 0x1074, 0x05C2, 0x0874, + 0x0607, 0x1C0C, 0x060B, 0x1A0C, 0x060D, 0x160C, 0x060E, 0x0E0C, 0x0613, 0x190C, + 0x0615, 0x150C, 0x0616, 0x0D0C, 0x0619, 0x130C, 0x061A, 0x0B0C, 0x061C, 0x070C, + 0x0623, 0x188C, 0x0625, 0x148C, 0x0626, 0x0C8C, 0x0629, 0x128C, 0x062A, 0x0A8C, + 0x062C, 0x068C, 0x0631, 0x118C, 0x0632, 0x098C, 0x0643, 0x184C, 0x0645, 0x144C, + 0x0646, 0x0C4C, 0x0649, 0x124C, 0x064A, 0x0A4C, 0x0651, 0x114C, 0x0652, 0x094C, + 0x0661, 0x10CC, 0x0662, 0x08CC, 0x0683, 0x182C, 0x0685, 0x142C, 0x0686, 0x0C2C, + 0x0689, 0x122C, 0x068A, 0x0A2C, 0x0691, 0x112C, 0x0692, 0x092C, 0x06A1, 0x10AC, + 0x06A2, 0x08AC, 0x06C1, 0x106C, 0x06C2, 0x086C, 0x0703, 0x181C, 0x0705, 0x141C, + 0x0706, 0x0C1C, 0x0709, 0x121C, 0x070A, 0x0A1C, 0x0711, 0x111C, 0x0712, 0x091C, + 0x0721, 0x109C, 0x0722, 0x089C, 0x0741, 0x105C, 0x0742, 0x085C, 0x0781, 0x103C, + 0x0782, 0x083C, 0x080F, 0x1E02, 0x0817, 0x1D02, 0x081B, 0x1B02, 0x081D, 0x1702, + 0x081E, 0x0F02, 0x0827, 0x1C82, 0x082B, 0x1A82, 0x082D, 0x1682, 0x082E, 0x0E82, + 0x0833, 0x1982, 0x0835, 0x1582, 0x0836, 0x0D82, 0x0839, 0x1382, 0x083A, 0x0B82, + 0x0847, 0x1C42, 0x084B, 0x1A42, 0x084D, 0x1642, 0x084E, 0x0E42, 0x0853, 0x1942, + 0x0855, 0x1542, 0x0856, 0x0D42, 0x0859, 0x1342, 0x085A, 0x0B42, 0x0863, 0x18C2, + 0x0865, 0x14C2, 0x0866, 0x0CC2, 0x0869, 0x12C2, 0x086A, 0x0AC2, 0x0871, 0x11C2, + 0x0872, 0x09C2, 0x0887, 0x1C22, 0x088B, 0x1A22, 0x088D, 0x1622, 0x088E, 0x0E22, + 0x0893, 0x1922, 0x0895, 0x1522, 0x0896, 0x0D22, 0x0899, 0x1322, 0x089A, 0x0B22, + 0x08A3, 0x18A2, 0x08A5, 0x14A2, 0x08A6, 0x0CA2, 0x08A9, 0x12A2, 0x08AA, 0x0AA2, + 0x08B1, 0x11A2, 0x08B2, 0x09A2, 0x08C3, 0x1862, 0x08C5, 0x1462, 0x08C6, 0x0C62, + 0x08C9, 0x1262, 0x08CA, 0x0A62, 0x08D1, 0x1162, 0x08D2, 0x0962, 0x08E1, 0x10E2, + 0x0907, 0x1C12, 0x090B, 0x1A12, 0x090D, 0x1612, 0x090E, 0x0E12, 0x0913, 0x1912, + 0x0915, 0x1512, 0x0916, 0x0D12, 0x0919, 0x1312, 0x091A, 0x0B12, 0x0923, 0x1892, + 0x0925, 0x1492, 0x0926, 0x0C92, 0x0929, 0x1292, 0x092A, 0x0A92, 0x0931, 0x1192, + 0x0932, 0x0992, 0x0943, 0x1852, 0x0945, 0x1452, 0x0946, 0x0C52, 0x0949, 0x1252, + 0x094A, 0x0A52, 0x0951, 0x1152, 0x0961, 0x10D2, 0x0983, 0x1832, 0x0985, 0x1432, + 0x0986, 0x0C32, 0x0989, 0x1232, 0x098A, 0x0A32, 0x0991, 0x1132, 0x09A1, 0x10B2, + 0x09C1, 0x1072, 0x0A07, 0x1C0A, 0x0A0B, 0x1A0A, 0x0A0D, 0x160A, 0x0A0E, 0x0E0A, + 0x0A13, 0x190A, 0x0A15, 0x150A, 0x0A16, 0x0D0A, 0x0A19, 0x130A, 0x0A1A, 0x0B0A, + 0x0A23, 0x188A, 0x0A25, 0x148A, 0x0A26, 0x0C8A, 0x0A29, 0x128A, 0x0A2A, 0x0A8A, + 0x0A31, 0x118A, 0x0A43, 0x184A, 0x0A45, 0x144A, 0x0A46, 0x0C4A, 0x0A49, 0x124A, + 0x0A51, 0x114A, 0x0A61, 0x10CA, 0x0A83, 0x182A, 0x0A85, 0x142A, 0x0A86, 0x0C2A, + 0x0A89, 0x122A, 0x0A91, 0x112A, 0x0AA1, 0x10AA, 0x0AC1, 0x106A, 0x0B03, 0x181A, + 0x0B05, 0x141A, 0x0B06, 0x0C1A, 0x0B09, 0x121A, 0x0B11, 0x111A, 0x0B21, 0x109A, + 0x0B41, 0x105A, 0x0B81, 0x103A, 0x0C07, 0x1C06, 0x0C0B, 0x1A06, 0x0C0D, 0x1606, + 0x0C0E, 0x0E06, 0x0C13, 0x1906, 0x0C15, 0x1506, 0x0C16, 0x0D06, 0x0C19, 0x1306, + 0x0C23, 0x1886, 0x0C25, 0x1486, 0x0C26, 0x0C86, 0x0C29, 0x1286, 0x0C31, 0x1186, + 0x0C43, 0x1846, 0x0C45, 0x1446, 0x0C49, 0x1246, 0x0C51, 0x1146, 0x0C61, 0x10C6, + 0x0C83, 0x1826, 0x0C85, 0x1426, 0x0C89, 0x1226, 0x0C91, 0x1126, 0x0CA1, 0x10A6, + 0x0CC1, 0x1066, 0x0D03, 0x1816, 0x0D05, 0x1416, 0x0D09, 0x1216, 0x0D11, 0x1116, + 0x0D21, 0x1096, 0x0D41, 0x1056, 0x0D81, 0x1036, 0x0E03, 0x180E, 0x0E05, 0x140E, + 0x0E09, 0x120E, 0x0E11, 0x110E, 0x0E21, 0x108E, 0x0E41, 0x104E, 0x0E81, 0x102E, + 0x0F01, 0x101E, 0x100F, 0x1E01, 0x1017, 0x1D01, 0x101B, 0x1B01, 0x101D, 0x1701, + 0x1027, 0x1C81, 0x102B, 0x1A81, 0x102D, 0x1681, 0x1033, 0x1981, 0x1035, 0x1581, + 0x1039, 0x1381, 0x1047, 0x1C41, 0x104B, 0x1A41, 0x104D, 0x1641, 0x1053, 0x1941, + 0x1055, 0x1541, 0x1059, 0x1341, 0x1063, 0x18C1, 0x1065, 0x14C1, 0x1069, 0x12C1, + 0x1071, 0x11C1, 0x1087, 0x1C21, 0x108B, 0x1A21, 0x108D, 0x1621, 0x1093, 0x1921, + 0x1095, 0x1521, 0x1099, 0x1321, 0x10A3, 0x18A1, 0x10A5, 0x14A1, 0x10A9, 0x12A1, + 0x10B1, 0x11A1, 0x10C3, 0x1861, 0x10C5, 0x1461, 0x10C9, 0x1261, 0x10D1, 0x1161, + 0x1107, 0x1C11, 0x110B, 0x1A11, 0x110D, 0x1611, 0x1113, 0x1911, 0x1115, 0x1511, + 0x1119, 0x1311, 0x1123, 0x1891, 0x1125, 0x1491, 0x1129, 0x1291, 0x1131, 0x1191, + 0x1143, 0x1851, 0x1145, 0x1451, 0x1149, 0x1251, 0x1183, 0x1831, 0x1185, 0x1431, + 0x1189, 0x1231, 0x1207, 0x1C09, 0x120B, 0x1A09, 0x120D, 0x1609, 0x1213, 0x1909, + 0x1215, 0x1509, 0x1219, 0x1309, 0x1223, 0x1889, 0x1225, 0x1489, 0x1229, 0x1289, + 0x1243, 0x1849, 0x1245, 0x1449, 0x1283, 0x1829, 0x1285, 0x1429, 0x1303, 0x1819, + 0x1305, 0x1419, 0x1407, 0x1C05, 0x140B, 0x1A05, 0x140D, 0x1605, 0x1413, 0x1905, + 0x1415, 0x1505, 0x1423, 0x1885, 0x1425, 0x1485, 0x1443, 0x1845, 0x1483, 0x1825, + 0x1503, 0x1815, 0x1603, 0x180D, 0x1807, 0x1C03, 0x180B, 0x1A03, 0x1813, 0x1903, + 0x1823, 0x1883, 0x1843, 0x1445, 0x1249, 0x1151, 0x10E1, 0x0C46, 0x0A4A, 0x0952, + 0x08E2, 0x064C, 0x0554, 0x04E4, 0x0358, 0x02E8, 0x01F0 }; + +static unsigned short AppxD_II[78] = { /* Appendix D Table II - 2 of 13 characters */ + 0x0003, 0x1800, 0x0005, 0x1400, 0x0006, 0x0C00, 0x0009, 0x1200, 0x000A, 0x0A00, + 0x000C, 0x0600, 0x0011, 0x1100, 0x0012, 0x0900, 0x0014, 0x0500, 0x0018, 0x0300, + 0x0021, 0x1080, 0x0022, 0x0880, 0x0024, 0x0480, 0x0028, 0x0280, 0x0030, 0x0180, + 0x0041, 0x1040, 0x0042, 0x0840, 0x0044, 0x0440, 0x0048, 0x0240, 0x0050, 0x0140, + 0x0060, 0x00C0, 0x0081, 0x1020, 0x0082, 0x0820, 0x0084, 0x0420, 0x0088, 0x0220, + 0x0090, 0x0120, 0x0101, 0x1010, 0x0102, 0x0810, 0x0104, 0x0410, 0x0108, 0x0210, + 0x0201, 0x1008, 0x0202, 0x0808, 0x0204, 0x0408, 0x0401, 0x1004, 0x0402, 0x0804, + 0x0801, 0x1002, 0x1001, 0x0802, 0x0404, 0x0208, 0x0110, 0x00A0 }; + +static int AppxD_IV[130] = { /* Appendix D Table IV - Bar-to-Character Mapping (reverse lookup) */ + 67, 6, 78, 16, 86, 95, 34, 40, 45, 113, 117, 121, 62, 87, 18, 104, 41, 76, 57, 119, 115, 72, 97, + 2, 127, 26, 105, 35, 122, 52, 114, 7, 24, 82, 68, 63, 94, 44, 77, 112, 70, 100, 39, 30, 107, + 15, 125, 85, 10, 65, 54, 88, 20, 106, 46, 66, 8, 116, 29, 61, 99, 80, 90, 37, 123, 51, 25, 84, + 129, 56, 4, 109, 96, 28, 36, 47, 11, 71, 33, 102, 21, 9, 17, 49, 124, 79, 64, 91, 42, 69, 53, + 60, 14, 1, 27, 103, 126, 75, 89, 50, 120, 19, 32, 110, 92, 111, 130, 59, 31, 12, 81, 43, 55, + 5, 74, 22, 101, 128, 58, 118, 48, 108, 38, 98, 93, 23, 83, 13, 73, 3 }; + +/*************************************************************************** + ** USPS_MSB_Math_CRC11GenerateFrameCheckSequence + ** + ** Inputs: + ** ByteAttayPtr is the address of a 13 byte array holding 102 bytes which + ** are right justified - ie: the leftmost 2 bits of the first byte do not + ** hold data and must be set to zero. + ** + ** Outputs: + ** return unsigned short - 11 bit Frame Check Sequence (right justified) +***************************************************************************/ +extern unsigned short + USPS_MSB_Math_CRC11GenerateFrameCheckSequence( unsigned char *ByteArrayPtr ) + +{ + unsigned short GeneratorPolynomial = 0x0F35; + unsigned short FrameCheckSequence = 0x07FF; + unsigned short Data; + int ByteIndex, Bit; + + /* Do most significant byte skipping the 2 most significant bits */ + Data = *ByteArrayPtr << 5; + ByteArrayPtr++; + for ( Bit = 2; Bit < 8; Bit++ ) + { + if ( (FrameCheckSequence ^ Data) & 0x400 ) + FrameCheckSequence = (FrameCheckSequence << 1) ^ GeneratorPolynomial; + else + FrameCheckSequence = (FrameCheckSequence << 1); + FrameCheckSequence &= 0x7FF; + Data <<= 1; + } + /* Do rest of the bytes */ + for ( ByteIndex = 1; ByteIndex < 13; ByteIndex++ ) + { + Data = *ByteArrayPtr << 3; + ByteArrayPtr++; + for ( Bit = 0; Bit < 8; Bit++ ) + { + if ( (FrameCheckSequence ^ Data) & 0x0400 ) { + FrameCheckSequence = (FrameCheckSequence << 1) ^ GeneratorPolynomial; + } else { + FrameCheckSequence = (FrameCheckSequence << 1); + } + FrameCheckSequence &= 0x7FF; + Data <<= 1; + } + } + return FrameCheckSequence; +} + +void breakup(short int fcs_bit[], unsigned short usps_crc) +{ + int i; + + for(i = 0; i < 13; i++) { + fcs_bit[i] = 0; + } + + if(usps_crc >= 4096) { + fcs_bit[12] = 1; + usps_crc -= 4096; + } + if(usps_crc >= 2048) { + fcs_bit[11] = 1; + usps_crc -= 2048; + } + if(usps_crc >= 1024) { + fcs_bit[10] = 1; + usps_crc -= 1024; + } + if(usps_crc >= 512) { + fcs_bit[9] = 1; + usps_crc -= 512; + } + if(usps_crc >= 256) { + fcs_bit[8] = 1; + usps_crc -= 256; + } + if(usps_crc >= 128) { + fcs_bit[7] = 1; + usps_crc -= 128; + } + if(usps_crc >= 64) { + fcs_bit[6] = 1; + usps_crc -= 64; + } + if(usps_crc >= 32) { + fcs_bit[5] = 1; + usps_crc -= 32; + } + if(usps_crc >= 16) { + fcs_bit[4] = 1; + usps_crc -= 16; + } + if(usps_crc >= 8) { + fcs_bit[3] = 1; + usps_crc -= 8; + } + if(usps_crc >= 4) { + fcs_bit[2] = 1; + usps_crc -= 4; + } + if(usps_crc >= 2) { + fcs_bit[1] = 1; + usps_crc -= 2; + } + if(usps_crc == 1) { + fcs_bit[0] = 1; + } +} + +int imail(struct zint_symbol *symbol, unsigned char source[], int length) +{ + char data_pattern[200]; + int error_number; + int i, j, read; + char zip[35], tracker[35], zip_adder[11], temp[2]; + short int accum[112], x_reg[112], y_reg[112]; + unsigned char byte_array[13]; + unsigned short usps_crc; + int codeword[10]; + unsigned short characters[10]; + short int bit_pattern[13], bar_map[130]; + + error_number = 0; + + if(length > 32) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(SODIUM, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + strcpy(zip, ""); + strcpy(tracker, ""); + + /* separate the tracking code from the routing code */ + + read = 0; + j = 0; + for(i = 0; i < length; i++) { + if(source[i] == '-') { + tracker[read] = '\0'; + j = 1; + read = 0; + } else { + if(j == 0) { + /* reading tracker */ + tracker[read] = source[i]; + read++; + } else { + /* reading zip code */ + zip[read] = source[i]; + read++; + } + } + } + if(j == 0) { + tracker[read] = '\0'; + } else { + zip[read] = '\0'; + } + + if(strlen(tracker) != 20) { + strcpy(symbol->errtxt, "Invalid length tracking code"); + return ERROR_INVALID_DATA1; + } + if(strlen(zip) > 11) { + strcpy(symbol->errtxt, "Invalid ZIP code"); + return ERROR_INVALID_DATA1; + } + + /* *** Step 1 - Conversion of Data Fields into Binary Data *** */ + + /* Routing code first */ + + for(i = 0; i < 112; i++) { + accum[i] = 0; + } + + for(read = 0; read < strlen(zip); read++) { + + for(i = 0; i < 112; i++) { + x_reg[i] = accum[i]; + } + + for(i = 0; i < 9; i++) { + binary_add(accum, x_reg); + } + + x_reg[0] = BCD[ctoi(zip[read]) * 4]; + x_reg[1] = BCD[(ctoi(zip[read]) * 4) + 1]; + x_reg[2] = BCD[(ctoi(zip[read]) * 4) + 2]; + x_reg[3] = BCD[(ctoi(zip[read]) * 4) + 3]; + for(i = 4; i < 112; i++) { + x_reg[i] = 0; + } + + binary_add(accum, x_reg); + } + + /* add weight to routing code */ + + for(i = 0; i < 112; i++) { + x_reg[i] = accum[i]; + } + + if(strlen(zip) > 9) { + strcpy(zip_adder, "1000100001"); + } else { + if(strlen(zip) > 5) { + strcpy(zip_adder, "100001"); + } else { + if(strlen(zip) > 0) { + strcpy(zip_adder, "1"); + } else { + strcpy(zip_adder, "0"); + } + } + } + + for(i = 0; i < 112; i++) { + accum[i] = 0; + } + + for(read = 0; read < strlen(zip_adder); read++) { + + for(i = 0; i < 112; i++) { + y_reg[i] = accum[i]; + } + + for(i = 0; i < 9; i++) { + binary_add(accum, y_reg); + } + + y_reg[0] = BCD[ctoi(zip_adder[read]) * 4]; + y_reg[1] = BCD[(ctoi(zip_adder[read]) * 4) + 1]; + y_reg[2] = BCD[(ctoi(zip_adder[read]) * 4) + 2]; + y_reg[3] = BCD[(ctoi(zip_adder[read]) * 4) + 3]; + for(i = 4; i < 112; i++) { + y_reg[i] = 0; + } + + binary_add(accum, y_reg); + } + + binary_add(accum, x_reg); + + /* tracking code */ + + /* multiply by 10 */ + for(i = 0; i < 112; i++) { + y_reg[i] = accum[i]; + } + + for(i = 0; i < 9; i++) { + binary_add(accum, y_reg); + } + + /* add first digit of tracker */ + y_reg[0] = BCD[ctoi(tracker[0]) * 4]; + y_reg[1] = BCD[(ctoi(tracker[0]) * 4) + 1]; + y_reg[2] = BCD[(ctoi(tracker[0]) * 4) + 2]; + y_reg[3] = BCD[(ctoi(tracker[0]) * 4) + 3]; + for(i = 4; i < 112; i++) { + y_reg[i] = 0; + } + + binary_add(accum, y_reg); + + /* multiply by 5 */ + for(i = 0; i < 112; i++) { + y_reg[i] = accum[i]; + } + + for(i = 0; i < 4; i++) { + binary_add(accum, y_reg); + } + + /* add second digit */ + y_reg[0] = BCD[ctoi(tracker[1]) * 4]; + y_reg[1] = BCD[(ctoi(tracker[1]) * 4) + 1]; + y_reg[2] = BCD[(ctoi(tracker[1]) * 4) + 2]; + y_reg[3] = BCD[(ctoi(tracker[1]) * 4) + 3]; + for(i = 4; i < 112; i++) { + y_reg[i] = 0; + } + + binary_add(accum, y_reg); + + /* and then the rest */ + + for(read = 2; read < strlen(tracker); read++) { + + for(i = 0; i < 112; i++) { + y_reg[i] = accum[i]; + } + + for(i = 0; i < 9; i++) { + binary_add(accum, y_reg); + } + + y_reg[0] = BCD[ctoi(tracker[read]) * 4]; + y_reg[1] = BCD[(ctoi(tracker[read]) * 4) + 1]; + y_reg[2] = BCD[(ctoi(tracker[read]) * 4) + 2]; + y_reg[3] = BCD[(ctoi(tracker[read]) * 4) + 3]; + for(i = 4; i < 112; i++) { + y_reg[i] = 0; + } + + binary_add(accum, y_reg); + } + + /* printf("Binary data 1: "); + hex_dump(accum); */ + + /* *** Step 2 - Generation of 11-bit CRC on Binary Data *** */ + + accum[103] = 0; + accum[102] = 0; + + memset(byte_array, 0, 13); + for(j = 0; j < 13; j++) { + i = 96 - (8 * j); + byte_array[j] = 0; + byte_array[j] += accum[i]; + byte_array[j] += 2 * accum[i + 1]; + byte_array[j] += 4 * accum[i + 2]; + byte_array[j] += 8 * accum[i + 3]; + byte_array[j] += 16 * accum[i + 4]; + byte_array[j] += 32 * accum[i + 5]; + byte_array[j] += 64 * accum[i + 6]; + byte_array[j] += 128 * accum[i + 7]; + } + + usps_crc = USPS_MSB_Math_CRC11GenerateFrameCheckSequence(byte_array); + /* printf("FCS 2: %4.4X\n", usps_crc); */ + + /* *** Step 3 - Conversion from Binary Data to Codewords *** */ + + /* start with codeword J which is base 636 */ + for(i = 0; i < 112; i++) { + x_reg[i] = 0; + y_reg[i] = 0; + } + + x_reg[101] = 1; + x_reg[98] = 1; + x_reg[97] = 1; + x_reg[96] = 1; + x_reg[95] = 1; + x_reg[94] = 1; + + for(i = 92; i >= 0; i--) { + y_reg[i] = islarger(accum, x_reg); + if(y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + codeword[9] = (accum[9] * 512) + (accum[8] * 256) + (accum[7] * 128) + (accum[6] * 64) + + (accum[5] * 32) + (accum[4] * 16) + (accum[3] * 8) + (accum[2] * 4) + + (accum[1] * 2) + accum[0]; + + /* then codewords I to B with base 1365 */ + + for(j = 8; j > 0; j--) { + for(i = 0; i < 112; i++) { + accum[i] = y_reg[i]; + y_reg[i] = 0; + x_reg[i] = 0; + } + x_reg[101] = 1; + x_reg[99] = 1; + x_reg[97] = 1; + x_reg[95] = 1; + x_reg[93] = 1; + x_reg[91] = 1; + for(i = 91; i >= 0; i--) { + y_reg[i] = islarger(accum, x_reg); + if(y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + codeword[j] = (accum[10] * 1024) + (accum[9] * 512) + (accum[8] * 256) + + (accum[7] * 128) + (accum[6] * 64) + (accum[5] * 32) + + (accum[4] * 16) + (accum[3] * 8) + (accum[2] * 4) + + (accum[1] * 2) + accum[0]; + } + + codeword[0] = (y_reg[10] * 1024) + (y_reg[9] * 512) + (y_reg[8] * 256) + + (y_reg[7] * 128) + (y_reg[6] * 64) + (y_reg[5] * 32) + + (y_reg[4] * 16) + (y_reg[3] * 8) + (y_reg[2] * 4) + + (y_reg[1] * 2) + y_reg[0]; + + for(i = 0; i < 8; i++) { + if(codeword[i] == 1365) { + codeword[i] = 0; + codeword[i + 1]++; + } + } + + /* printf("Codewords 3: "); + for(i = 0; i < 10; i++) { + printf("%d ", codeword[i]); + } + printf("\n"); */ + + /* *** Step 4 - Inserting Additional Information into Codewords *** */ + + codeword[9] = codeword[9] * 2; + + if(usps_crc >= 1024) { + codeword[0] += 659; + } + + /* printf("Codewords 4b: "); + for(i = 0; i < 10; i++) { + printf("%d ", codeword[i]); + } + printf("\n"); */ + + /* *** Step 5 - Conversion from Codewords to Characters *** */ + + for(i = 0; i < 10; i++) { + if(codeword[i] < 1287) { + characters[i] = AppxD_I[codeword[i]]; + } else { + characters[i] = AppxD_II[codeword[i] - 1287]; + } + } + + /* printf("Characters 5a: "); + for(i = 0; i < 10; i++) { + printf("%4.4X ", characters[i]); + } + printf("\n"); */ + + breakup(bit_pattern, usps_crc); + + for(i = 0; i < 10; i++) { + if(bit_pattern[i] == 1) { + characters[i] = 0x1FFF - characters[i]; + } + } + + /* printf("Characters 5b: "); + for(i = 0; i < 10; i++) { + printf("%4.4X ", characters[i]); + } + printf("\n"); */ + + /* *** Step 6 - Conversion from Characters to the Intelligent Mail Barcode *** */ + + for(i = 0; i < 10; i++) { + breakup(bit_pattern, characters[i]); + for(j = 0; j < 13; j++) { + bar_map[AppxD_IV[(13 * i) + j] - 1] = bit_pattern[j]; + } + } + + strcpy(data_pattern, ""); + temp[1] = '\0'; + for(i = 0; i < 65; i++) { + j = 0; + if(bar_map[i] == 0) + j += 1; + if(bar_map[i + 65] == 0) + j += 2; + temp[0] = itoc(j); + concat(data_pattern, temp); + } + + /* Translate 4-state data pattern to symbol */ + read = 0; + for(i = 0; i < strlen(data_pattern); i++) + { + if((data_pattern[i] == '1') || (data_pattern[i] == '0')) + { + set_module(symbol, 0, read); + } + set_module(symbol, 1, read); + if((data_pattern[i] == '2') || (data_pattern[i] == '0')) + { + set_module(symbol, 2, read); + } + read += 2; + } + + symbol->row_height[0] = 3; + symbol->row_height[1] = 2; + symbol->row_height[2] = 3; + + symbol->rows = 3; + symbol->width = read - 1; + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/large.c b/3rdparty/zint-2.4.4/backend/large.c new file mode 100644 index 0000000..e3f0453 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/large.c @@ -0,0 +1,227 @@ +/* large.c - Handles binary manipulation of large numbers */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include "common.h" +#include "large.h" + +static short int BCD[40] = { + 0, 0, 0, 0, + 1, 0, 0, 0, + 0, 1, 0, 0, + 1, 1, 0, 0, + 0, 0, 1, 0, + 1, 0, 1, 0, + 0, 1, 1, 0, + 1, 1, 1, 0, + 0, 0, 0, 1, + 1, 0, 0, 1 }; + +void binary_add(short int accumulator[], short int input_buffer[]) +{ /* Binary addition */ + int i, carry, done; + carry = 0; + + for(i = 0; i < 112; i++) { + done = 0; + if(((input_buffer[i] == 0) && (accumulator[i] == 0)) && ((carry == 0) && (done == 0))) { + accumulator[i] = 0; + carry = 0; + done = 1; + } + if(((input_buffer[i] == 0) && (accumulator[i] == 0)) && ((carry == 1) && (done == 0))) { + accumulator[i] = 1; + carry = 0; + done = 1; + } + if(((input_buffer[i] == 0) && (accumulator[i] == 1)) && ((carry == 0) && (done == 0))) { + accumulator[i] = 1; + carry = 0; + done = 1; + } + if(((input_buffer[i] == 0) && (accumulator[i] == 1)) && ((carry == 1) && (done == 0))) { + accumulator[i] = 0; + carry = 1; + done = 1; + } + if(((input_buffer[i] == 1) && (accumulator[i] == 0)) && ((carry == 0) && (done == 0))) { + accumulator[i] = 1; + carry = 0; + done = 1; + } + if(((input_buffer[i] == 1) && (accumulator[i] == 0)) && ((carry == 1) && (done == 0))) { + accumulator[i] = 0; + carry = 1; + done = 1; + } + if(((input_buffer[i] == 1) && (accumulator[i] == 1)) && ((carry == 0) && (done == 0))) { + accumulator[i] = 0; + carry = 1; + done = 1; + } + if(((input_buffer[i] == 1) && (accumulator[i] == 1)) && ((carry == 1) && (done == 0))) { + accumulator[i] = 1; + carry = 1; + done = 1; + } + } +} + +void binary_subtract(short int accumulator[], short int input_buffer[]) +{ /* 2's compliment subtraction */ + /* take input_buffer from accumulator and put answer in accumulator */ + int i; + short int sub_buffer[112]; + + for(i = 0; i < 112; i++) { + if(input_buffer[i] == 0) { + sub_buffer[i] = 1; + } else { + sub_buffer[i] = 0; + } + } + binary_add(accumulator, sub_buffer); + + sub_buffer[0] = 1; + + for(i = 1; i < 112; i++) { + sub_buffer[i] = 0; + } + binary_add(accumulator, sub_buffer); +} + +void shiftdown(short int buffer[]) +{ + int i; + + buffer[102] = 0; + buffer[103] = 0; + + for(i = 0; i < 102; i++) { + buffer[i] = buffer[i + 1]; + } +} + +void shiftup(short int buffer[]) +{ + int i; + + for(i = 102; i > 0; i--) { + buffer[i] = buffer[i - 1]; + } + + buffer[0] = 0; +} + +short int islarger(short int accum[], short int reg[]) +{ + /* Returns 1 if accum[] is larger than reg[], else 0 */ + int i, latch, larger; + latch = 0; + i = 103; + larger = 0; + + + do { + if((accum[i] == 1) && (reg[i] == 0)) { + latch = 1; + larger = 1; + } + if((accum[i] == 0) && (reg[i] == 1)) { + latch = 1; + } + i--; + } while ((latch == 0) && (i >= -1)); + + return larger; +} + +void binary_load(short int reg[], char data[], const unsigned int src_len) +{ + int read, i; + short int temp[112] = { 0 }; + + for(i = 0; i < 112; i++) { + reg[i] = 0; + } + + for(read = 0; read < (int)src_len; read++) { + + for(i = 0; i < 112; i++) { + temp[i] = reg[i]; + } + + for(i = 0; i < 9; i++) { + binary_add(reg, temp); + } + + temp[0] = BCD[ctoi(data[read]) * 4]; + temp[1] = BCD[(ctoi(data[read]) * 4) + 1]; + temp[2] = BCD[(ctoi(data[read]) * 4) + 2]; + temp[3] = BCD[(ctoi(data[read]) * 4) + 3]; + for(i = 4; i < 112; i++) { + temp[i] = 0; + } + + binary_add(reg, temp); + } +} + +void hex_dump(short int input_buffer[]) +{ + int i, digit, byte_space; + + byte_space = 1; + for(i = 100; i >= 0; i-=4) { + digit = 0; + digit += 1 * input_buffer[i]; + digit += 2 * input_buffer[i + 1]; + digit += 4 * input_buffer[i + 2]; + digit += 8 * input_buffer[i + 3]; + + switch(digit) { + case 0: printf("0"); break; + case 1: printf("1"); break; + case 2: printf("2"); break; + case 3: printf("3"); break; + case 4: printf("4"); break; + case 5: printf("5"); break; + case 6: printf("6"); break; + case 7: printf("7"); break; + case 8: printf("8"); break; + case 9: printf("9"); break; + case 10: printf("A"); break; + case 11: printf("B"); break; + case 12: printf("C"); break; + case 13: printf("D"); break; + case 14: printf("E"); break; + case 15: printf("F"); break; + } + if(byte_space == 1) { + byte_space = 0; + } else { + byte_space = 1; + printf(" "); + } + } + printf("\n"); +} diff --git a/3rdparty/zint-2.4.4/backend/large.h b/3rdparty/zint-2.4.4/backend/large.h new file mode 100644 index 0000000..72076b0 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/large.h @@ -0,0 +1,40 @@ +/* large.h - Handles binary manipulation of large numbers */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +#ifndef __LARGE_H +#define __LARGE_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +extern void binary_load(short int reg[], char data[], const unsigned int src_len); +extern void binary_add(short int accumulator[], short int input_buffer[]); +extern void binary_subtract(short int accumulator[], short int input_buffer[]); +extern void shiftdown(short int buffer[]); +extern void shiftup(short int buffer[]); +extern short int islarger(short int accum[], short int reg[]); +extern void hex_dump(short int input_buffer[]); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __LARGE_H */ diff --git a/3rdparty/zint-2.4.4/backend/library.c b/3rdparty/zint-2.4.4/backend/library.c new file mode 100644 index 0000000..dd173a1 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/library.c @@ -0,0 +1,905 @@ +/* library.c - external functions of libzint + + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" +#include "gs1.h" + +#define TECHNETIUM "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%" + +struct zint_symbol *ZBarcode_Create() +{ + struct zint_symbol *symbol; + int i; + + symbol = (struct zint_symbol*)malloc(sizeof(*symbol)); + if (!symbol) return NULL; + + memset(symbol, 0, sizeof(*symbol)); + symbol->symbology = BARCODE_CODE128; + symbol->height = 0; + symbol->whitespace_width = 0; + symbol->border_width = 0; + symbol->output_options = 0; + symbol->rows = 0; + symbol->width = 0; + strcpy(symbol->fgcolour, "000000"); + strcpy(symbol->bgcolour, "ffffff"); + strcpy(symbol->outfile, ""); + symbol->scale = 1.0; + symbol->option_1 = -1; + symbol->option_2 = 0; + symbol->option_3 = 928; // PDF_MAX + symbol->show_hrt = 1; // Show human readable text + symbol->input_mode = DATA_MODE; + strcpy(symbol->primary, ""); + memset(&(symbol->encoded_data[0][0]),0,sizeof(symbol->encoded_data)); + for(i = 0; i < 178; i++) { + symbol->row_height[i] = 0; + } + symbol->bitmap = NULL; + symbol->bitmap_width = 0; + symbol->bitmap_height = 0; + return symbol; +} + +void ZBarcode_Clear(struct zint_symbol *symbol) +{ + int i, j; + + for(i = 0; i < symbol->rows; i++) { + for(j = 0; j < symbol->width; j++) { + unset_module(symbol, i, j); + } + } + symbol->rows = 0; + symbol->width = 0; + symbol->text[0] = '\0'; + symbol->errtxt[0] = '\0'; + if (symbol->bitmap != NULL) + free(symbol->bitmap); + symbol->bitmap = NULL; + symbol->bitmap_width = 0; + symbol->bitmap_height = 0; +} + +void ZBarcode_Delete(struct zint_symbol *symbol) +{ + if (symbol->bitmap != NULL) + free(symbol->bitmap); + + // If there is a rendered version, ensure it's memory is released + if (symbol->rendered != NULL) { + struct zint_render_line *line, *l; + struct zint_render_string *string, *s; + + // Free lines + line = symbol->rendered->lines; + while(line) { + l = line; + line = line->next; + free(l); + } + // Free Strings + string = symbol->rendered->strings; + while (string) { + s = string; + string = string->next; + free(s->text); + free(s); + } + + // Free Render + free(symbol->rendered); + } + free(symbol); +} + +extern int eanx(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN system barcodes */ +extern int c39(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 3 from 9 (or Code 39) */ +extern int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmazentral Nummer (PZN) */ +extern int ec39(struct zint_symbol *symbol, unsigned char source[], int length); /* Extended Code 3 from 9 (or Code 39+) */ +extern int codabar(struct zint_symbol *symbol, unsigned char source[], int length); /* Codabar - a simple substitution cipher */ +extern int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Standard (& Matrix) */ +extern int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Industrial */ +extern int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 IATA */ +extern int interleaved_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Interleaved */ +extern int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Data Logic */ +extern int itf14(struct zint_symbol *symbol, unsigned char source[], int length); /* ITF-14 */ +extern int dpleit(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Leitcode */ +extern int dpident(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Identcode */ +extern int c93(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 93 - a re-working of Code 39+, generates 2 check digits */ +extern int code_128(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 128 and NVE-18 */ +extern int ean_128(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-128 (GS1-128) */ +extern int code_11(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 11 */ +extern int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length); /* MSI Plessey */ +extern int telepen(struct zint_symbol *symbol, unsigned char source[], int length); /* Telepen ASCII */ +extern int telepen_num(struct zint_symbol *symbol, unsigned char source[], int length); /* Telepen Numeric */ +extern int plessey(struct zint_symbol *symbol, unsigned char source[], int length); /* Plessey Code */ +extern int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode One Track */ +extern int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length); /* Flattermarken */ +extern int fim(struct zint_symbol *symbol, unsigned char source[], int length); /* Facing Identification Mark */ +extern int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode Two Track */ +extern int post_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* Postnet */ +extern int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* PLANET */ +extern int imail(struct zint_symbol *symbol, unsigned char source[], int length); /* Intelligent Mail (aka USPS OneCode) */ +extern int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* RM4SCC */ +extern int australia_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Australia Post 4-state */ +extern int code16k(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 16k */ +extern int pdf417enc(struct zint_symbol *symbol, unsigned char source[], int length); /* PDF417 */ +extern int dmatrix(struct zint_symbol *symbol, unsigned char source[], int length); /* Data Matrix (IEC16022) */ +extern int qr_code(struct zint_symbol *symbol, unsigned char source[], int length); /* QR Code */ +extern int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], int length); /* Micro PDF417 */ +extern int maxicode(struct zint_symbol *symbol, unsigned char source[], int length); /* Maxicode */ +extern int rss14(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS-14 */ +extern int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Limited */ +extern int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Expanded */ +extern int composite(struct zint_symbol *symbol, unsigned char source[], int length); /* Composite Symbology */ +extern int kix_code(struct zint_symbol *symbol, unsigned char source[], int length); /* TNT KIX Code */ +extern int aztec(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Code */ +extern int code32(struct zint_symbol *symbol, unsigned char source[], int length); /* Italian Pharmacode */ +extern int daft_code(struct zint_symbol *symbol, unsigned char source[], int length); /* DAFT Code */ +extern int ean_14(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-14 */ +extern int nve_18(struct zint_symbol *symbol, unsigned char source[], int length); /* NVE-18 */ +extern int microqr(struct zint_symbol *symbol, unsigned char source[], int length); /* Micro QR Code */ +extern int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Runes */ +extern int korea_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Korea Post */ +extern int japan_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Japanese Post */ +extern int code_49(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 49 */ +extern int channel_code(struct zint_symbol *symbol, unsigned char source[], int length); /* Channel Code */ +extern int code_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Code One */ +extern int grid_matrix(struct zint_symbol *symbol, unsigned char source[], int length); /* Grid Matrix */ + +#ifndef NO_PNG +extern int png_handle(struct zint_symbol *symbol, int rotate_angle); +#endif + +extern int render_plot(struct zint_symbol *symbol, float width, float height); + +extern int bmp_handle(struct zint_symbol *symbol, int rotate_angle); +extern int ps_plot(struct zint_symbol *symbol); +extern int svg_plot(struct zint_symbol *symbol); + +void error_tag(char error_string[], int error_number) +{ + char error_buffer[100]; + + if(error_number != 0) { + strcpy(error_buffer, error_string); + + if(error_number > 4) { + strcpy(error_string, "error: "); + } else { + strcpy(error_string, "warning: "); + } + + concat(error_string, error_buffer); + } +} + +int dump_plot(struct zint_symbol *symbol) +{ + FILE *f; + int i, r; + + if(symbol->output_options & BARCODE_STDOUT) { + f = stdout; + } else { + f = fopen(symbol->outfile, "w"); + if(!f) { + strcpy(symbol->errtxt, "Could not open output file"); + return ERROR_FILE_ACCESS; + } + } + + fputs("[\n", f); + for (r = 0; r < symbol->rows; r++) { + fputs(" [ ", f); + for (i = 0; i < symbol->width; i++) { + fputs(module_is_set(symbol, r, i) ? "1 " : "0 ", f); + } + fputs("]\n", f); + } + fputs("]\n", f); + + fclose(f); + + return 0; +} + +int hibc(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int counter, error_number, i; + char to_process[40], temp[2], check_digit; + + if(length > 36) { + strcpy(symbol->errtxt, "Data too long for HIBC LIC"); + return ERROR_TOO_LONG; + } + to_upper(source); + error_number = is_sane(TECHNETIUM , source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + strcpy(to_process, "+"); + counter = 41; + for(i = 0; i < length; i++) { + counter += posn(TECHNETIUM, source[i]); + } + counter = counter % 43; + + if(counter < 10) { + check_digit = itoc(counter); + } else { + if(counter < 36) { + check_digit = (counter - 10) + 'A'; + } else { + switch(counter) { + case 36: check_digit = '-'; break; + case 37: check_digit = '.'; break; + case 38: check_digit = ' '; break; + case 39: check_digit = '$'; break; + case 40: check_digit = '/'; break; + case 41: check_digit = '+'; break; + case 42: check_digit = '%'; break; + default: check_digit = ' '; break; /* Keep compiler happy */ + } + } + } + + temp[0] = check_digit; + temp[1] = '\0'; + + concat(to_process, (char *)source); + concat(to_process, temp); + length = strlen(to_process); + + switch(symbol->symbology) { + case BARCODE_HIBC_128: + error_number = code_128(symbol, (unsigned char *)to_process, length); + ustrcpy(symbol->text, (unsigned char*)"*"); + uconcat(symbol->text, (unsigned char*)to_process); + uconcat(symbol->text, (unsigned char*)"*"); + break; + case BARCODE_HIBC_39: + symbol->option_2 = 0; + error_number = c39(symbol, (unsigned char *)to_process, length); + ustrcpy(symbol->text, (unsigned char*)"*"); + uconcat(symbol->text, (unsigned char*)to_process); + uconcat(symbol->text, (unsigned char*)"*"); + break; + case BARCODE_HIBC_DM: + error_number = dmatrix(symbol, (unsigned char *)to_process, length); + break; + case BARCODE_HIBC_QR: + error_number = qr_code(symbol, (unsigned char *)to_process, length); + break; + case BARCODE_HIBC_PDF: + error_number = pdf417enc(symbol, (unsigned char *)to_process, length); + break; + case BARCODE_HIBC_MICPDF: + error_number = micro_pdf417(symbol, (unsigned char *)to_process, length); + break; + case BARCODE_HIBC_AZTEC: + error_number = aztec(symbol, (unsigned char *)to_process, length); + break; + } + + return error_number; +} + +int gs1_compliant(int symbology) +{ + /* Returns 1 if symbology supports GS1 data */ + + int result = 0; + + switch(symbology) { + case BARCODE_EAN128: + case BARCODE_RSS_EXP: + case BARCODE_RSS_EXPSTACK: + case BARCODE_EANX_CC: + case BARCODE_EAN128_CC: + case BARCODE_RSS14_CC: + case BARCODE_RSS_LTD_CC: + case BARCODE_RSS_EXP_CC: + case BARCODE_UPCA_CC: + case BARCODE_UPCE_CC: + case BARCODE_RSS14STACK_CC: + case BARCODE_RSS14_OMNI_CC: + case BARCODE_RSS_EXPSTACK_CC: + case BARCODE_CODE16K: + case BARCODE_AZTEC: + case BARCODE_DATAMATRIX: + case BARCODE_CODEONE: + case BARCODE_CODE49: + case BARCODE_QRCODE: + result = 1; + break; + } + + return result; +} + +int ZBarcode_ValidID(int symbol_id) +{ + /* Checks whether a symbology is supported */ + + int result = 0; + + switch(symbol_id) { + case BARCODE_CODE11: + case BARCODE_C25MATRIX: + case BARCODE_C25INTER: + case BARCODE_C25IATA: + case BARCODE_C25LOGIC: + case BARCODE_C25IND: + case BARCODE_CODE39: + case BARCODE_EXCODE39: + case BARCODE_EANX: + case BARCODE_EAN128: + case BARCODE_CODABAR: + case BARCODE_CODE128: + case BARCODE_DPLEIT: + case BARCODE_DPIDENT: + case BARCODE_CODE16K: + case BARCODE_CODE49: + case BARCODE_CODE93: + case BARCODE_FLAT: + case BARCODE_RSS14: + case BARCODE_RSS_LTD: + case BARCODE_RSS_EXP: + case BARCODE_TELEPEN: + case BARCODE_UPCA: + case BARCODE_UPCE: + case BARCODE_POSTNET: + case BARCODE_MSI_PLESSEY: + case BARCODE_FIM: + case BARCODE_LOGMARS: + case BARCODE_PHARMA: + case BARCODE_PZN: + case BARCODE_PHARMA_TWO: + case BARCODE_PDF417: + case BARCODE_PDF417TRUNC: + case BARCODE_MAXICODE: + case BARCODE_QRCODE: + case BARCODE_CODE128B: + case BARCODE_AUSPOST: + case BARCODE_AUSREPLY: + case BARCODE_AUSROUTE: + case BARCODE_AUSREDIRECT: + case BARCODE_ISBNX: + case BARCODE_RM4SCC: + case BARCODE_DATAMATRIX: + case BARCODE_EAN14: + case BARCODE_NVE18: + case BARCODE_JAPANPOST: + case BARCODE_KOREAPOST: + case BARCODE_RSS14STACK: + case BARCODE_RSS14STACK_OMNI: + case BARCODE_RSS_EXPSTACK: + case BARCODE_PLANET: + case BARCODE_MICROPDF417: + case BARCODE_ONECODE: + case BARCODE_PLESSEY: + case BARCODE_TELEPEN_NUM: + case BARCODE_ITF14: + case BARCODE_KIX: + case BARCODE_AZTEC: + case BARCODE_DAFT: + case BARCODE_MICROQR: + case BARCODE_HIBC_128: + case BARCODE_HIBC_39: + case BARCODE_HIBC_DM: + case BARCODE_HIBC_QR: + case BARCODE_HIBC_PDF: + case BARCODE_HIBC_MICPDF: + case BARCODE_HIBC_AZTEC: + case BARCODE_AZRUNE: + case BARCODE_CODE32: + case BARCODE_EANX_CC: + case BARCODE_EAN128_CC: + case BARCODE_RSS14_CC: + case BARCODE_RSS_LTD_CC: + case BARCODE_RSS_EXP_CC: + case BARCODE_UPCA_CC: + case BARCODE_UPCE_CC: + case BARCODE_RSS14STACK_CC: + case BARCODE_RSS14_OMNI_CC: + case BARCODE_RSS_EXPSTACK_CC: + case BARCODE_CHANNEL: + case BARCODE_CODEONE: + case BARCODE_GRIDMATRIX: + result = 1; + break; + } + + return result; +} + +int extended_charset(struct zint_symbol *symbol, unsigned char *source, int length) +{ + int error_number = 0; + + /* These are the "elite" standards which can support multiple character sets */ + switch(symbol->symbology) { + case BARCODE_QRCODE: error_number = qr_code(symbol, source, length); break; + case BARCODE_MICROQR: error_number = microqr(symbol, source, length); break; + case BARCODE_GRIDMATRIX: error_number = grid_matrix(symbol, source, length); break; + } + + return error_number; +} + +int reduced_charset(struct zint_symbol *symbol, unsigned char *source, int length) +{ + /* These are the "norm" standards which only support Latin-1 at most */ + int error_number = 0; + +#ifndef _MSC_VER + unsigned char preprocessed[length + 1]; +#else + unsigned char* preprocessed = (unsigned char*)_alloca(length + 1); +#endif + + if(symbol->symbology == BARCODE_CODE16K) { + symbol->whitespace_width = 16; + symbol->border_width = 2; + symbol->output_options = BARCODE_BIND; + } + + if(symbol->symbology == BARCODE_ITF14) { + symbol->whitespace_width = 20; + symbol->border_width = 8; + symbol->output_options = BARCODE_BOX; + } + + switch(symbol->input_mode) { + case DATA_MODE: + case GS1_MODE: + memcpy(preprocessed, source, length); + preprocessed[length] = '\0'; + break; + case UNICODE_MODE: + error_number = latin1_process(symbol, source, preprocessed, &length); + if(error_number != 0) { return error_number; } + break; + } + + switch(symbol->symbology) { + case BARCODE_C25MATRIX: error_number = matrix_two_of_five(symbol, preprocessed, length); break; + case BARCODE_C25IND: error_number = industrial_two_of_five(symbol, preprocessed, length); break; + case BARCODE_C25INTER: error_number = interleaved_two_of_five(symbol, preprocessed, length); break; + case BARCODE_C25IATA: error_number = iata_two_of_five(symbol, preprocessed, length); break; + case BARCODE_C25LOGIC: error_number = logic_two_of_five(symbol, preprocessed, length); break; + case BARCODE_DPLEIT: error_number = dpleit(symbol, preprocessed, length); break; + case BARCODE_DPIDENT: error_number = dpident(symbol, preprocessed, length); break; + case BARCODE_UPCA: error_number = eanx(symbol, preprocessed, length); break; + case BARCODE_UPCE: error_number = eanx(symbol, preprocessed, length); break; + case BARCODE_EANX: error_number = eanx(symbol, preprocessed, length); break; + case BARCODE_EAN128: error_number = ean_128(symbol, preprocessed, length); break; + case BARCODE_CODE39: error_number = c39(symbol, preprocessed, length); break; + case BARCODE_PZN: error_number = pharmazentral(symbol, preprocessed, length); break; + case BARCODE_EXCODE39: error_number = ec39(symbol, preprocessed, length); break; + case BARCODE_CODABAR: error_number = codabar(symbol, preprocessed, length); break; + case BARCODE_CODE93: error_number = c93(symbol, preprocessed, length); break; + case BARCODE_LOGMARS: error_number = c39(symbol, preprocessed, length); break; + case BARCODE_CODE128: error_number = code_128(symbol, preprocessed, length); break; + case BARCODE_CODE128B: error_number = code_128(symbol, preprocessed, length); break; + case BARCODE_NVE18: error_number = nve_18(symbol, preprocessed, length); break; + case BARCODE_CODE11: error_number = code_11(symbol, preprocessed, length); break; + case BARCODE_MSI_PLESSEY: error_number = msi_handle(symbol, preprocessed, length); break; + case BARCODE_TELEPEN: error_number = telepen(symbol, preprocessed, length); break; + case BARCODE_TELEPEN_NUM: error_number = telepen_num(symbol, preprocessed, length); break; + case BARCODE_PHARMA: error_number = pharma_one(symbol, preprocessed, length); break; + case BARCODE_PLESSEY: error_number = plessey(symbol, preprocessed, length); break; + case BARCODE_ITF14: error_number = itf14(symbol, preprocessed, length); break; + case BARCODE_FLAT: error_number = flattermarken(symbol, preprocessed, length); break; + case BARCODE_FIM: error_number = fim(symbol, preprocessed, length); break; + case BARCODE_POSTNET: error_number = post_plot(symbol, preprocessed, length); break; + case BARCODE_PLANET: error_number = planet_plot(symbol, preprocessed, length); break; + case BARCODE_RM4SCC: error_number = royal_plot(symbol, preprocessed, length); break; + case BARCODE_AUSPOST: error_number = australia_post(symbol, preprocessed, length); break; + case BARCODE_AUSREPLY: error_number = australia_post(symbol, preprocessed, length); break; + case BARCODE_AUSROUTE: error_number = australia_post(symbol, preprocessed, length); break; + case BARCODE_AUSREDIRECT: error_number = australia_post(symbol, preprocessed, length); break; + case BARCODE_CODE16K: error_number = code16k(symbol, preprocessed, length); break; + case BARCODE_PHARMA_TWO: error_number = pharma_two(symbol, preprocessed, length); break; + case BARCODE_ONECODE: error_number = imail(symbol, preprocessed, length); break; + case BARCODE_ISBNX: error_number = eanx(symbol, preprocessed, length); break; + case BARCODE_RSS14: error_number = rss14(symbol, preprocessed, length); break; + case BARCODE_RSS14STACK: error_number = rss14(symbol, preprocessed, length); break; + case BARCODE_RSS14STACK_OMNI: error_number = rss14(symbol, preprocessed, length); break; + case BARCODE_RSS_LTD: error_number = rsslimited(symbol, preprocessed, length); break; + case BARCODE_RSS_EXP: error_number = rssexpanded(symbol, preprocessed, length); break; + case BARCODE_RSS_EXPSTACK: error_number = rssexpanded(symbol, preprocessed, length); break; + case BARCODE_EANX_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_EAN128_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_RSS14_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_RSS_LTD_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_RSS_EXP_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_UPCA_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_UPCE_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_RSS14STACK_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_RSS14_OMNI_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_RSS_EXPSTACK_CC: error_number = composite(symbol, preprocessed, length); break; + case BARCODE_KIX: error_number = kix_code(symbol, preprocessed, length); break; + case BARCODE_CODE32: error_number = code32(symbol, preprocessed, length); break; + case BARCODE_DAFT: error_number = daft_code(symbol, preprocessed, length); break; + case BARCODE_EAN14: error_number = ean_14(symbol, preprocessed, length); break; + case BARCODE_AZRUNE: error_number = aztec_runes(symbol, preprocessed, length); break; + case BARCODE_KOREAPOST: error_number = korea_post(symbol, preprocessed, length); break; + case BARCODE_HIBC_128: error_number = hibc(symbol, preprocessed, length); break; + case BARCODE_HIBC_39: error_number = hibc(symbol, preprocessed, length); break; + case BARCODE_HIBC_DM: error_number = hibc(symbol, preprocessed, length); break; + case BARCODE_HIBC_QR: error_number = hibc(symbol, preprocessed, length); break; + case BARCODE_HIBC_PDF: error_number = hibc(symbol, preprocessed, length); break; + case BARCODE_HIBC_MICPDF: error_number = hibc(symbol, preprocessed, length); break; + case BARCODE_HIBC_AZTEC: error_number = hibc(symbol, preprocessed, length); break; + case BARCODE_JAPANPOST: error_number = japan_post(symbol, preprocessed, length); break; + case BARCODE_CODE49: error_number = code_49(symbol, preprocessed, length); break; + case BARCODE_CHANNEL: error_number = channel_code(symbol, preprocessed, length); break; + case BARCODE_CODEONE: error_number = code_one(symbol, preprocessed, length); break; + case BARCODE_DATAMATRIX: error_number = dmatrix(symbol, preprocessed, length); break; + case BARCODE_PDF417: error_number = pdf417enc(symbol, preprocessed, length); break; + case BARCODE_PDF417TRUNC: error_number = pdf417enc(symbol, preprocessed, length); break; + case BARCODE_MICROPDF417: error_number = micro_pdf417(symbol, preprocessed, length); break; + case BARCODE_MAXICODE: error_number = maxicode(symbol, preprocessed, length); break; + case BARCODE_AZTEC: error_number = aztec(symbol, preprocessed, length); break; + } + + return error_number; +} + +int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *source, int length) +{ + int error_number, error_buffer, i; + error_number = 0; + + if(length == 0) { + length = ustrlen(source); + } + if(length == 0) { + strcpy(symbol->errtxt, "No input data"); + error_tag(symbol->errtxt, ERROR_INVALID_DATA1); + return ERROR_INVALID_DATA1; + } + + if(strcmp(symbol->outfile, "") == 0) { + strcpy(symbol->outfile, "out.png"); + } +#ifndef _MSC_VER + unsigned char local_source[length + 1]; +#else + unsigned char* local_source = (unsigned char*)_alloca(length + 1); +#endif + + /* First check the symbology field */ + if(symbol->symbology < 1) { strcpy(symbol->errtxt, "Symbology out of range, using Code 128"); symbol->symbology = BARCODE_CODE128; error_number = WARN_INVALID_OPTION; } + + /* symbol->symbologys 1 to 86 are defined by tbarcode */ + if(symbol->symbology == 5) { symbol->symbology = BARCODE_C25MATRIX; } + if((symbol->symbology >= 10) && (symbol->symbology <= 12)) { symbol->symbology = BARCODE_EANX; } + if((symbol->symbology == 14) || (symbol->symbology == 15)) { symbol->symbology = BARCODE_EANX; } + if(symbol->symbology == 17) { symbol->symbology = BARCODE_UPCA; } + if(symbol->symbology == 19) { strcpy(symbol->errtxt, "Codabar 18 not supported, using Codabar"); symbol->symbology = BARCODE_CODABAR; error_number = WARN_INVALID_OPTION; } + if(symbol->symbology == 26) { symbol->symbology = BARCODE_UPCA; } + if(symbol->symbology == 27) { strcpy(symbol->errtxt, "UPCD1 not supported"); error_number = ERROR_INVALID_OPTION; } + if(symbol->symbology == 33) { symbol->symbology = BARCODE_EAN128; } + if((symbol->symbology == 35) || (symbol->symbology == 36)) { symbol->symbology = BARCODE_UPCA; } + if((symbol->symbology == 38) || (symbol->symbology == 39)) { symbol->symbology = BARCODE_UPCE; } + if((symbol->symbology >= 41) && (symbol->symbology <= 45)) { symbol->symbology = BARCODE_POSTNET; } + if(symbol->symbology == 46) { symbol->symbology = BARCODE_PLESSEY; } + if(symbol->symbology == 48) { symbol->symbology = BARCODE_NVE18; } + if(symbol->symbology == 54) { strcpy(symbol->errtxt, "General Parcel Code not supported, using Code 128"); symbol->symbology = BARCODE_CODE128; error_number = WARN_INVALID_OPTION; } + if((symbol->symbology == 59) || (symbol->symbology == 61)) { symbol->symbology = BARCODE_CODE128; } + if(symbol->symbology == 62) { symbol->symbology = BARCODE_CODE93; } + if((symbol->symbology == 64) || (symbol->symbology == 65)) { symbol->symbology = BARCODE_AUSPOST; } + if(symbol->symbology == 73) { strcpy(symbol->errtxt, "Codablock E not supported"); error_number = ERROR_INVALID_OPTION; } + if(symbol->symbology == 78) { symbol->symbology = BARCODE_RSS14; } + if(symbol->symbology == 83) { symbol->symbology = BARCODE_PLANET; } + if(symbol->symbology == 88) { symbol->symbology = BARCODE_EAN128; } + if(symbol->symbology == 91) { strcpy(symbol->errtxt, "Symbology out of range, using Code 128"); symbol->symbology = BARCODE_CODE128; error_number = WARN_INVALID_OPTION; } + if((symbol->symbology >= 94) && (symbol->symbology <= 96)) { strcpy(symbol->errtxt, "Symbology out of range, using Code 128"); symbol->symbology = BARCODE_CODE128; error_number = WARN_INVALID_OPTION; } + if(symbol->symbology == 100) { symbol->symbology = BARCODE_HIBC_128; } + if(symbol->symbology == 101) { symbol->symbology = BARCODE_HIBC_39; } + if(symbol->symbology == 103) { symbol->symbology = BARCODE_HIBC_DM; } + if(symbol->symbology == 105) { symbol->symbology = BARCODE_HIBC_QR; } + if(symbol->symbology == 107) { symbol->symbology = BARCODE_HIBC_PDF; } + if(symbol->symbology == 109) { symbol->symbology = BARCODE_HIBC_MICPDF; } + if(symbol->symbology == 111) { symbol->symbology = BARCODE_HIBC_BLOCKF; } + if((symbol->symbology >= 113) && (symbol->symbology <= 127)) { strcpy(symbol->errtxt, "Symbology out of range, using Code 128"); symbol->symbology = BARCODE_CODE128; error_number = WARN_INVALID_OPTION; } + /* Everything from 128 up is Zint-specific */ + if(symbol->symbology >= 143) { strcpy(symbol->errtxt, "Symbology out of range, using Code 128"); symbol->symbology = BARCODE_CODE128; error_number = WARN_INVALID_OPTION; } + if((symbol->symbology == BARCODE_CODABLOCKF) || (symbol->symbology == BARCODE_HIBC_BLOCKF)) { strcpy(symbol->errtxt, "Codablock F not supported"); error_number = ERROR_INVALID_OPTION; } + + if(error_number > 4) { + error_tag(symbol->errtxt, error_number); + return error_number; + } else { + error_buffer = error_number; + } + + if((symbol->input_mode < 0) || (symbol->input_mode > 2)) { symbol->input_mode = DATA_MODE; } + + if(symbol->input_mode == GS1_MODE) { + for(i = 0; i < length; i++) { + if(source[i] == '\0') { + strcpy(symbol->errtxt, "NULL characters not permitted in GS1 mode"); + return ERROR_INVALID_DATA1; + } + } + if(gs1_compliant(symbol->symbology) == 1) { + error_number = ugs1_verify(symbol, source, length, local_source); + if(error_number != 0) { return error_number; } + length = ustrlen(local_source); + } else { + strcpy(symbol->errtxt, "Selected symbology does not support GS1 mode"); + return ERROR_INVALID_OPTION; + } + } else { + memcpy(local_source, source, length); + local_source[length] = '\0'; + } + + switch(symbol->symbology) { + case BARCODE_QRCODE: + case BARCODE_MICROQR: + case BARCODE_GRIDMATRIX: + error_number = extended_charset(symbol, local_source, length); + break; + default: + error_number = reduced_charset(symbol, local_source, length); + break; + } + + if((symbol->symbology == BARCODE_CODE128) || (symbol->symbology == BARCODE_CODE128B)) { + for(i = 0; i < length; i++) { + if(local_source[i] == '\0') { + symbol->text[i] = ' '; + } else { + symbol->text[i] = local_source[i]; + } + } + } + + if(error_number == 0) { + error_number = error_buffer; + } + error_tag(symbol->errtxt, error_number); + /*printf("%s\n",symbol->text);*/ + return error_number; +} + +int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) +{ + int error_number; + char output[4]; + + switch(rotate_angle) { + case 0: + case 90: + case 180: + case 270: + break; + default: + strcpy(symbol->errtxt, "Invalid rotation angle"); + return ERROR_INVALID_OPTION; + break; + } + + if(strlen(symbol->outfile) > 3) { + output[0] = symbol->outfile[strlen(symbol->outfile) - 3]; + output[1] = symbol->outfile[strlen(symbol->outfile) - 2]; + output[2] = symbol->outfile[strlen(symbol->outfile) - 1]; + output[3] = '\0'; + to_upper((unsigned char*)output); + +#ifndef NO_PNG + if(!(strcmp(output, "PNG"))) { + if(symbol->scale < 1.0) { symbol->text[0] = '\0'; } + error_number = png_handle(symbol, rotate_angle); + } else +#endif + if(!(strcmp(output, "TXT"))) { + error_number = dump_plot(symbol); + } else + if(!(strcmp(output, "EPS"))) { + error_number = ps_plot(symbol); + } else + if(!(strcmp(output, "SVG"))) { + error_number = svg_plot(symbol); + } else + { + strcpy(symbol->errtxt, "Unknown output format"); + error_tag(symbol->errtxt, ERROR_INVALID_OPTION); + return ERROR_INVALID_OPTION; + } + } else { + strcpy(symbol->errtxt, "Unknown output format"); + error_tag(symbol->errtxt, ERROR_INVALID_OPTION); + return ERROR_INVALID_OPTION; + } + + error_tag(symbol->errtxt, error_number); + return error_number; +} + +int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle) +{ + int error_number; + + switch(rotate_angle) { + case 0: + case 90: + case 180: + case 270: + break; + default: + strcpy(symbol->errtxt, "Invalid rotation angle"); + return ERROR_INVALID_OPTION; + break; + } + + error_number = bmp_handle(symbol, rotate_angle); + error_tag(symbol->errtxt, error_number); + return error_number; +} + +int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle) +{ + int error_number; + + error_number = 0; + + error_number = ZBarcode_Encode(symbol, input, length); + if(error_number != 0) { + return error_number; + } + + error_number = ZBarcode_Print(symbol, rotate_angle); + return error_number; +} + +int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle) +{ + int error_number; + + error_number = 0; + + error_number = ZBarcode_Encode(symbol, input, length); + if(error_number != 0) { + return error_number; + } + + error_number = ZBarcode_Buffer(symbol, rotate_angle); + return error_number; +} + +int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename) +{ + FILE *file; + unsigned char *buffer; + unsigned long fileLen; + unsigned int nRead = 0, n = 0; + int ret; + + if (!strcmp(filename, "-")) { + file = stdin; + fileLen = 7100; + } else { + file = fopen(filename, "rb"); + if (!file) { + strcpy(symbol->errtxt, "Unable to read input file"); + return ERROR_INVALID_DATA1; + } + + /* Get file length */ + fseek(file, 0, SEEK_END); + fileLen = ftell(file); + fseek(file, 0, SEEK_SET); + + if(fileLen > 7100) { + /* The largest amount of data that can be encoded is 7089 numeric digits in QR Code */ + strcpy(symbol->errtxt, "Input file too long"); + fclose(file); + return ERROR_INVALID_DATA1; + } + } + + /* Allocate memory */ + buffer = (unsigned char *)malloc(fileLen * sizeof(unsigned char)); + if(!buffer) { + strcpy(symbol->errtxt, "Internal memory error"); + fclose(file); + return ERROR_MEMORY; + } + + /* Read file contents into buffer */ + + do + { + n = fread(buffer + nRead, 1, fileLen - nRead, file); + if (ferror(file)) + { + strcpy(symbol->errtxt, strerror(errno)); + nRead = 0; + return ERROR_INVALID_DATA1; + } + nRead += n; + } while (!feof(file) && (0 < n) && (nRead < fileLen)); + + fclose(file); + ret = ZBarcode_Encode(symbol, buffer, nRead); + free(buffer); + return ret; +} + +int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, int rotate_angle) +{ + int error_number; + + error_number = 0; + + error_number = ZBarcode_Encode_File(symbol, filename); + if(error_number != 0) { + return error_number; + } + + return ZBarcode_Print(symbol, rotate_angle); +} + +int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, int rotate_angle) +{ + int error_number; + + error_number = 0; + + error_number = ZBarcode_Encode_File(symbol, filename); + if(error_number != 0) { + return error_number; + } + + return ZBarcode_Buffer(symbol, rotate_angle); +} + +/* + * Rendering support, initially added by Sam Lown. + * + * Converts encoded data into an intermediate format to be interpreted + * in other applications using this library. + * + * If the width and height are not set to zero, the barcode will be resized to those + * dimensions. The symbol->scale and symbol->height values are totally ignored in this case. + * + */ +int ZBarcode_Render(struct zint_symbol *symbol, float width, float height) +{ + // Send the request to the render_plot method + return render_plot(symbol, width, height); +} diff --git a/3rdparty/zint-2.4.4/backend/maxicode.c b/3rdparty/zint-2.4.4/backend/maxicode.c new file mode 100644 index 0000000..53ce12e --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/maxicode.c @@ -0,0 +1,709 @@ +/* maxicode.c - Handles Maxicode */ + +/* + libzint - the open source barcode library + Copyright (C) 2010 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* Includes corrections thanks to Monica Swanson @ Source Technologies */ + +#include "common.h" +#include "maxicode.h" +#include "reedsol.h" +#include +#include +#ifdef __APPLE__ +#include +#else +#include +#endif + +int maxi_codeword[144]; + +void maxi_do_primary_check( ) +{ + /* Handles error correction of primary message */ + unsigned char data[15]; + unsigned char results[15]; + int j; + int datalen = 10; + int ecclen = 10; + + rs_init_gf(0x43); + rs_init_code(ecclen, 1); + + for(j = 0; j < datalen; j += 1) + data[j] = maxi_codeword[j]; + + rs_encode(datalen, data, results); + + for ( j = 0; j < ecclen; j += 1) + maxi_codeword[ datalen + j] = results[ecclen - 1 - j]; + rs_free(); +} + +void maxi_do_secondary_chk_odd( int ecclen ) +{ + /* Handles error correction of odd characters in secondary */ + unsigned char data[100]; + unsigned char results[30]; + int j; + int datalen = 68; + + rs_init_gf(0x43); + rs_init_code(ecclen, 1); + + if (ecclen == 20) + datalen = 84; + + for(j = 0; j < datalen; j += 1) + if (j & 1) // odd + data[(j-1)/2] = maxi_codeword[j + 20]; + + rs_encode(datalen/2, data, results); + + for ( j = 0; j < (ecclen); j += 1) + maxi_codeword[ datalen + (2 *j) + 1 + 20 ] = results[ecclen - 1 - j]; + rs_free(); +} + +void maxi_do_secondary_chk_even(int ecclen ) +{ + /* Handles error correction of even characters in secondary */ + unsigned char data[100]; + unsigned char results[30]; + int j; + int datalen = 68; + + if (ecclen == 20) + datalen = 84; + + rs_init_gf(0x43); + rs_init_code(ecclen, 1); + + for(j = 0; j < datalen + 1; j += 1) + if (!(j & 1)) // even + data[j/2] = maxi_codeword[j + 20]; + + rs_encode(datalen/2, data, results); + + for ( j = 0; j < (ecclen); j += 1) + maxi_codeword[ datalen + (2 *j) + 20] = results[ecclen - 1 - j]; + rs_free(); +} + +void maxi_bump(int set[], int character[], int bump_posn) +{ + /* Moves everything up so that a shift or latch can be inserted */ + int i; + + for(i = 143; i > bump_posn; i--) { + set[i] = set[i - 1]; + character[i] = character[i - 1]; + } +} + +int maxi_text_process(int mode, unsigned char source[], int length) +{ + /* Format text according to Appendix A */ + + /* This code doesn't make use of [Lock in C], [Lock in D] + and [Lock in E] and so is not always the most efficient at + compressing data, but should suffice for most applications */ + + int set[144], character[144], i, j, done, count, current_set; + + if(length > 138) { + return ERROR_TOO_LONG; + } + + for(i = 0; i < 144; i++) { + set[i] = -1; + character[i] = 0; + } + + for (i = 0; i < length; i++) { + /* Look up characters in table from Appendix A - this gives + value and code set for most characters */ + set[i] = maxiCodeSet[source[i]]; + character[i] = maxiSymbolChar[source[i]]; + } + + /* If a character can be represented in more than one code set, + pick which version to use */ + if(set[0] == 0) { + if(character[0] == 13) { + character[0] = 0; + } + set[0] = 1; + } + + for(i = 1; i < length; i++) { + if(set[i] == 0) { + done = 0; + /* Special character */ + if(character[i] == 13) { + /* Carriage Return */ + if(set[i - 1] == 5) { + character[i] = 13; + set[i] = 5; + } else { + if((i != length - 1) && (set[i + 1] == 5)) { + character[i] = 13; + set[i] = 5; + } else { + character[i] = 0; + set[i] = 1; + } + } + done = 1; + } + + if((character[i] == 28) && (done == 0)) { + /* FS */ + if(set[i - 1] == 5) { + character[i] = 32; + set[i] = 5; + } else { + set[i] = set[i - 1]; + } + done = 1; + } + + if((character[i] == 29) && (done == 0)) { + /* GS */ + if(set[i - 1] == 5) { + character[i] = 33; + set[i] = 5; + } else { + set[i] = set[i - 1]; + } + done = 1; + } + + if((character[i] == 30) && (done == 0)) { + /* RS */ + if(set[i - 1] == 5) { + character[i] = 34; + set[i] = 5; + } else { + set[i] = set[i - 1]; + } + done = 1; + } + + if((character[i] == 32) && (done == 0)) { + /* Space */ + if(set[i - 1] == 1) { + character[i] = 32; + set[i] = 1; + } + if(set[i - 1] == 2) { + character[i] = 47; + set[i] = 2; + } + if(set[i - 1] >= 3) { + if(i != length - 1) { + if(set[i + 1] == 1) { + character[i] = 32; + set[i] = 1; + } + if(set[i + 1] == 2) { + character[i] = 47; + set[i] = 2; + } + if(set[i + 1] >= 3) { + character[i] = 59; + set[i] = set[i - 1]; + } + } else { + character[i] = 59; + set[i] = set[i - 1]; + } + } + done = 1; + } + + if((character[i] == 44) && (done == 0)) { + /* Comma */ + if(set[i - 1] == 2) { + character[i] = 48; + set[i] = 2; + } else { + if((i != length - 1) && (set[i + 1] == 2)) { + character[i] = 48; + set[i] = 2; + } else { + set[i] = 1; + } + } + done = 1; + } + + if((character[i] == 46) && (done == 0)) { + /* Full Stop */ + if(set[i - 1] == 2) { + character[i] = 49; + set[i] = 2; + } else { + if((i != length - 1) && (set[i + 1] == 2)) { + character[i] = 49; + set[i] = 2; + } else { + set[i] = 1; + } + } + done = 1; + } + + if((character[i] == 47) && (done == 0)) { + /* Slash */ + if(set[i - 1] == 2) { + character[i] = 50; + set[i] = 2; + } else { + if((i != length - 1) && (set[i + 1] == 2)) { + character[i] = 50; + set[i] = 2; + } else { + set[i] = 1; + } + } + done = 1; + } + + if((character[i] == 58) && (done == 0)) { + /* Colon */ + if(set[i - 1] == 2) { + character[i] = 51; + set[i] = 2; + } else { + if((i != length - 1) && (set[i + 1] == 2)) { + character[i] = 51; + set[i] = 2; + } else { + set[i] = 1; + } + } + done = 1; + } + } + } + + for(i = length; i < 144; i++) { + /* Add the padding */ + if(set[length - 1] == 2) { + set[i] = 2; + } else { + set[i] = 1; + } + character[i] = 33; + } + + /* Find candidates for number compression */ + if((mode == 2) || (mode ==3)) { j = 0; } else { j = 9; } + /* Number compression not allowed in primary message */ + count = 0; + for(i = j; i < 143; i++) { + if((set[i] == 1) && ((character[i] >= 48) && (character[i] <= 57))) { + /* Character is a number */ + count++; + } else { + count = 0; + } + if(count == 9) { + /* Nine digits in a row can be compressed */ + set[i] = 6; + set[i - 1] = 6; + set[i - 2] = 6; + set[i - 3] = 6; + set[i - 4] = 6; + set[i - 5] = 6; + set[i - 6] = 6; + set[i - 7] = 6; + set[i - 8] = 6; + count = 0; + } + } + + /* Add shift and latch characters */ + current_set = 1; + i = 0; + do { + + if(set[i] != current_set) { + switch(set[i]) { + case 1: + if(set[i + 1] == 1) { + if(set[i + 2] == 1) { + if(set[i + 3] == 1) { + /* Latch A */ + maxi_bump(set, character, i); + character[i] = 63; + current_set = 1; + length++; + } else { + /* 3 Shift A */ + maxi_bump(set, character, i); + character[i] = 57; + length++; + i += 2; + } + } else { + /* 2 Shift A */ + maxi_bump(set, character, i); + character[i] = 56; + length++; + i++; + } + } else { + /* Shift A */ + maxi_bump(set, character, i); + character[i] = 59; + length++; + } + break; + case 2: + if(set[i + 1] == 2) { + /* Latch B */ + maxi_bump(set, character, i); + character[i] = 63; + current_set = 2; + length++; + } else { + /* Shift B */ + maxi_bump(set, character, i); + character[i] = 59; + length++; + } + break; + case 3: + /* Shift C */ + maxi_bump(set, character, i); + character[i] = 60; + length++; + break; + case 4: + /* Shift D */ + maxi_bump(set, character, i); + character[i] = 61; + length++; + break; + case 5: + /* Shift E */ + maxi_bump(set, character, i); + character[i] = 62; + length++; + break; + case 6: + /* Number Compressed */ + /* Do nothing */ + break; + } + i++; + } + i++; + } while(i < 145); + + /* Number compression has not been forgotten! - It's handled below */ + i = 0; + do { + if (set[i] == 6) { + /* Number compression */ + char substring[11]; + int value; + + for(j = 0; j < 10; j++) { + substring[j] = character[i + j]; + } + substring[10] = '\0'; + value = atoi(substring); + + character[i] = 31; /* NS */ + character[i + 1] = (value & 0x3f000000) >> 24; + character[i + 2] = (value & 0xfc0000) >> 18; + character[i + 3] = (value & 0x3f000) >> 12; + character[i + 4] = (value & 0xfc0) >> 6; + character[i + 5] = (value & 0x3f); + + i += 6; + for(j = i; j < 140; j++) { + set[j] = set[j + 3]; + character[j] = character[j + 3]; + } + length -= 3; + } else { + i++; + } + } while (i <= 143); + + if(((mode ==2) || (mode == 3)) && (length > 84)) { + return ERROR_TOO_LONG; + } + + if(((mode == 4) || (mode == 6)) && (length > 93)) { + return ERROR_TOO_LONG; + } + + if((mode == 5) && (length > 77)) { + return ERROR_TOO_LONG; + } + + + /* Copy the encoded text into the codeword array */ + if((mode == 2) || (mode == 3)) { + for(i = 0; i < 84; i++) { /* secondary only */ + maxi_codeword[i + 20] = character[i]; + } + } + + if((mode == 4) || (mode == 6)) { + for(i = 0; i < 9; i++) { /* primary */ + maxi_codeword[i + 1] = character[i]; + } + for(i = 0; i < 84; i++) { /* secondary */ + maxi_codeword[i + 20] = character[i + 9]; + } + } + + if(mode == 5) { + for(i = 0; i < 9; i++) { /* primary */ + maxi_codeword[i + 1] = character[i]; + } + for(i = 0; i < 68; i++) { /* secondary */ + maxi_codeword[i + 20] = character[i + 9]; + } + } + + return 0; +} + +void maxi_do_primary_2(char postcode[], int country, int service) +{ + /* Format structured primary for Mode 2 */ + int postcode_length, postcode_num, i; + + for(i = 0; i < 10; i++) { + if((postcode[i] < '0') || (postcode[i] > '9')) { + postcode[i] = '\0'; + } + } + + postcode_length = strlen(postcode); + postcode_num = atoi(postcode); + + maxi_codeword[0] = ((postcode_num & 0x03) << 4) | 2; + maxi_codeword[1] = ((postcode_num & 0xfc) >> 2); + maxi_codeword[2] = ((postcode_num & 0x3f00) >> 8); + maxi_codeword[3] = ((postcode_num & 0xfc000) >> 14); + maxi_codeword[4] = ((postcode_num & 0x3f00000) >> 20); + maxi_codeword[5] = ((postcode_num & 0x3c000000) >> 26) | ((postcode_length & 0x3) << 4); + maxi_codeword[6] = ((postcode_length & 0x3c) >> 2) | ((country & 0x3) << 4); + maxi_codeword[7] = (country & 0xfc) >> 2; + maxi_codeword[8] = ((country & 0x300) >> 8) | ((service & 0xf) << 2); + maxi_codeword[9] = ((service & 0x3f0) >> 4); +} + +void maxi_do_primary_3(char postcode[], int country, int service) +{ + /* Format structured primary for Mode 3 */ + int i, h; + + h = strlen(postcode); + to_upper((unsigned char*)postcode); + for(i = 0; i < h; i++) { + if((postcode[i] >= 'A') && (postcode[i] <= 'Z')) { + /* (Capital) letters shifted to Code Set A values */ + postcode[i] -= 64; + } + if(((postcode[i] == 27) || (postcode[i] == 31)) || ((postcode[i] == 33) || (postcode[i] >= 59))) { + /* Not a valid postcode character */ + postcode[i] = ' '; + } + /* Input characters lower than 27 (NUL - SUB) in postcode are + interpreted as capital letters in Code Set A (e.g. LF becomes 'J') */ + } + + maxi_codeword[0] = ((postcode[5] & 0x03) << 4) | 3; + maxi_codeword[1] = ((postcode[4] & 0x03) << 4) | ((postcode[5] & 0x3c) >> 2); + maxi_codeword[2] = ((postcode[3] & 0x03) << 4) | ((postcode[4] & 0x3c) >> 2); + maxi_codeword[3] = ((postcode[2] & 0x03) << 4) | ((postcode[3] & 0x3c) >> 2); + maxi_codeword[4] = ((postcode[1] & 0x03) << 4) | ((postcode[2] & 0x3c) >> 2); + maxi_codeword[5] = ((postcode[0] & 0x03) << 4) | ((postcode[1] & 0x3c) >> 2); + maxi_codeword[6] = ((postcode[0] & 0x3c) >> 2) | ((country & 0x3) << 4); + maxi_codeword[7] = (country & 0xfc) >> 2; + maxi_codeword[8] = ((country & 0x300) >> 8) | ((service & 0xf) << 2); + maxi_codeword[9] = ((service & 0x3f0) >> 4); +} + +int maxicode(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int i, j, block, bit, mode, countrycode = 0, service = 0, lp = 0; + int bit_pattern[7], internal_error = 0, eclen, error_number; + char postcode[12], countrystr[4], servicestr[4]; + +#ifndef _MSC_VER + unsigned char local_source[length + 1]; +#else + unsigned char* local_source = (unsigned char*)_alloca(length + 1); +#endif + + mode = symbol->option_1; + strcpy(postcode, ""); + strcpy(countrystr, ""); + strcpy(servicestr, ""); + + /* The following to be replaced by ECI handling */ + switch(symbol->input_mode) { + case DATA_MODE: + case GS1_MODE: + memcpy(local_source, source, length); + local_source[length] = '\0'; + break; + case UNICODE_MODE: + error_number = latin1_process(symbol, source, local_source, &length); + if(error_number != 0) { return error_number; } + break; + } + memset(maxi_codeword, 0, sizeof(maxi_codeword)); + + if(mode == -1) { /* If mode is unspecified */ + lp = strlen(symbol->primary); + if(lp == 0) { + mode = 4; + } else { + mode = 2; + for(i = 0; i < 10 && i < lp; i++) { + if((symbol->primary[i] < 48) || (symbol->primary[i] > 57)) { + mode = 3; + break; + } + } + } + } + + if((mode < 2) || (mode > 6)) { /* Only codes 2 to 6 supported */ + strcpy(symbol->errtxt, "Invalid Maxicode Mode"); + return ERROR_INVALID_OPTION; + } + + if((mode == 2) || (mode == 3)) { /* Modes 2 and 3 need data in symbol->primary */ + if(lp == 0){ /* Mode set manually means lp doesn't get set */ + lp = strlen( symbol->primary ); + } + if(lp != 15) { + strcpy(symbol->errtxt, "Invalid Primary String"); + return ERROR_INVALID_DATA1; + } + + for(i = 9; i < 15; i++) { /* check that country code and service are numeric */ + if((symbol->primary[i] < '0') || (symbol->primary[i] > '9')) { + strcpy(symbol->errtxt, "Invalid Primary String"); + return ERROR_INVALID_DATA1; + } + } + + memcpy(postcode, symbol->primary, 9); + postcode[9] = '\0'; + + if(mode == 2) { + for(i = 0; i < 10; i++) { + if(postcode[i] == ' ') { + postcode[i] = '\0'; + } + } + } + else if(mode == 3) { postcode[6] = '\0'; } + + countrystr[0] = symbol->primary[9]; + countrystr[1] = symbol->primary[10]; + countrystr[2] = symbol->primary[11]; + countrystr[3] = '\0'; + + servicestr[0] = symbol->primary[12]; + servicestr[1] = symbol->primary[13]; + servicestr[2] = symbol->primary[14]; + servicestr[3] = '\0'; + + countrycode = atoi(countrystr); + service = atoi(servicestr); + + if(mode == 2) { maxi_do_primary_2(postcode, countrycode, service); } + if(mode == 3) { maxi_do_primary_3(postcode, countrycode, service); } + } else { + maxi_codeword[0] = mode; + } + + i = maxi_text_process(mode, local_source, length); + if(i == ERROR_TOO_LONG ) { + strcpy(symbol->errtxt, "Input data too long"); + return i; + } + + /* All the data is sorted - now do error correction */ + maxi_do_primary_check(); /* always EEC */ + + if ( mode == 5 ) + eclen = 56; // 68 data codewords , 56 error corrections + else + eclen = 40; // 84 data codewords, 40 error corrections + + maxi_do_secondary_chk_even(eclen/2); // do error correction of even + maxi_do_secondary_chk_odd(eclen/2); // do error correction of odd + + /* Copy data into symbol grid */ + for(i = 0; i < 33; i++) { + for(j = 0; j < 30; j++) { + block = (MaxiGrid[(i * 30) + j] + 5) / 6; + bit = (MaxiGrid[(i * 30) + j] + 5) % 6; + + if(block != 0) { + + bit_pattern[0] = (maxi_codeword[block - 1] & 0x20) >> 5; + bit_pattern[1] = (maxi_codeword[block - 1] & 0x10) >> 4; + bit_pattern[2] = (maxi_codeword[block - 1] & 0x8) >> 3; + bit_pattern[3] = (maxi_codeword[block - 1] & 0x4) >> 2; + bit_pattern[4] = (maxi_codeword[block - 1] & 0x2) >> 1; + bit_pattern[5] = (maxi_codeword[block - 1] & 0x1); + + if(bit_pattern[bit] != 0) { + set_module(symbol, i, j); + } + } + } + } + + /* Add orientation markings */ + set_module(symbol, 0, 28); // Top right filler + set_module(symbol, 0, 29); + set_module(symbol, 9, 10); // Top left marker + set_module(symbol, 9, 11); + set_module(symbol, 10, 11); + set_module(symbol, 15, 7); // Left hand marker + set_module(symbol, 16, 8); + set_module(symbol, 16, 20); // Right hand marker + set_module(symbol, 17, 20); + set_module(symbol, 22, 10); // Bottom left marker + set_module(symbol, 23, 10); + set_module(symbol, 22, 17); // Bottom right marker + set_module(symbol, 23, 17); + + symbol->width = 30; + symbol->rows = 33; + + return internal_error; +} diff --git a/3rdparty/zint-2.4.4/backend/maxicode.h b/3rdparty/zint-2.4.4/backend/maxicode.h new file mode 100644 index 0000000..f03a902 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/maxicode.h @@ -0,0 +1,90 @@ +/* maxicode.h - Handles Maxicode */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +static int MaxiGrid[] = { /* ISO/IEC 16023 Figure 5 - MaxiCode Module Sequence */ /* 30 x 33 data grid */ + 122, 121, 128, 127, 134, 133, 140, 139, 146, 145, 152, 151, 158, 157, 164, 163, 170, 169, 176, 175, 182, 181, 188, 187, 194, 193, 200, 199, 0, 0, + 124, 123, 130, 129, 136, 135, 142, 141, 148, 147, 154, 153, 160, 159, 166, 165, 172, 171, 178, 177, 184, 183, 190, 189, 196, 195, 202, 201, 817, 0, + 126, 125, 132, 131, 138, 137, 144, 143, 150, 149, 156, 155, 162, 161, 168, 167, 174, 173, 180, 179, 186, 185, 192, 191, 198, 197, 204, 203, 819, 818, + 284, 283, 278, 277, 272, 271, 266, 265, 260, 259, 254, 253, 248, 247, 242, 241, 236, 235, 230, 229, 224, 223, 218, 217, 212, 211, 206, 205, 820, 0, + 286, 285, 280, 279, 274, 273, 268, 267, 262, 261, 256, 255, 250, 249, 244, 243, 238, 237, 232, 231, 226, 225, 220, 219, 214, 213, 208, 207, 822, 821, + 288, 287, 282, 281, 276, 275, 270, 269, 264, 263, 258, 257, 252, 251, 246, 245, 240, 239, 234, 233, 228, 227, 222, 221, 216, 215, 210, 209, 823, 0, + 290, 289, 296, 295, 302, 301, 308, 307, 314, 313, 320, 319, 326, 325, 332, 331, 338, 337, 344, 343, 350, 349, 356, 355, 362, 361, 368, 367, 825, 824, + 292, 291, 298, 297, 304, 303, 310, 309, 316, 315, 322, 321, 328, 327, 334, 333, 340, 339, 346, 345, 352, 351, 358, 357, 364, 363, 370, 369, 826, 0, + 294, 293, 300, 299, 306, 305, 312, 311, 318, 317, 324, 323, 330, 329, 336, 335, 342, 341, 348, 347, 354, 353, 360, 359, 366, 365, 372, 371, 828, 827, + 410, 409, 404, 403, 398, 397, 392, 391, 80, 79, 0, 0, 14, 13, 38, 37, 3, 0, 45, 44, 110, 109, 386, 385, 380, 379, 374, 373, 829, 0, + 412, 411, 406, 405, 400, 399, 394, 393, 82, 81, 41, 0, 16, 15, 40, 39, 4, 0, 0, 46, 112, 111, 388, 387, 382, 381, 376, 375, 831, 830, + 414, 413, 408, 407, 402, 401, 396, 395, 84, 83, 42, 0, 0, 0, 0, 0, 6, 5, 48, 47, 114, 113, 390, 389, 384, 383, 378, 377, 832, 0, + 416, 415, 422, 421, 428, 427, 104, 103, 56, 55, 17, 0, 0, 0, 0, 0, 0, 0, 21, 20, 86, 85, 434, 433, 440, 439, 446, 445, 834, 833, + 418, 417, 424, 423, 430, 429, 106, 105, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 23, 22, 88, 87, 436, 435, 442, 441, 448, 447, 835, 0, + 420, 419, 426, 425, 432, 431, 108, 107, 60, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 90, 89, 438, 437, 444, 443, 450, 449, 837, 836, + 482, 481, 476, 475, 470, 469, 49, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 54, 53, 464, 463, 458, 457, 452, 451, 838, 0, + 484, 483, 478, 477, 472, 471, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 465, 460, 459, 454, 453, 840, 839, + 486, 485, 480, 479, 474, 473, 52, 51, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 43, 468, 467, 462, 461, 456, 455, 841, 0, + 488, 487, 494, 493, 500, 499, 98, 97, 62, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 92, 91, 506, 505, 512, 511, 518, 517, 843, 842, + 490, 489, 496, 495, 502, 501, 100, 99, 64, 63, 0, 0, 0, 0, 0, 0, 0, 0, 29, 28, 94, 93, 508, 507, 514, 513, 520, 519, 844, 0, + 492, 491, 498, 497, 504, 503, 102, 101, 66, 65, 18, 0, 0, 0, 0, 0, 0, 0, 19, 30, 96, 95, 510, 509, 516, 515, 522, 521, 846, 845, + 560, 559, 554, 553, 548, 547, 542, 541, 74, 73, 33, 0, 0, 0, 0, 0, 0, 11, 68, 67, 116, 115, 536, 535, 530, 529, 524, 523, 847, 0, + 562, 561, 556, 555, 550, 549, 544, 543, 76, 75, 0, 0, 8, 7, 36, 35, 12, 0, 70, 69, 118, 117, 538, 537, 532, 531, 526, 525, 849, 848, + 564, 563, 558, 557, 552, 551, 546, 545, 78, 77, 0, 34, 10, 9, 26, 25, 0, 0, 72, 71, 120, 119, 540, 539, 534, 533, 528, 527, 850, 0, + 566, 565, 572, 571, 578, 577, 584, 583, 590, 589, 596, 595, 602, 601, 608, 607, 614, 613, 620, 619, 626, 625, 632, 631, 638, 637, 644, 643, 852, 851, + 568, 567, 574, 573, 580, 579, 586, 585, 592, 591, 598, 597, 604, 603, 610, 609, 616, 615, 622, 621, 628, 627, 634, 633, 640, 639, 646, 645, 853, 0, + 570, 569, 576, 575, 582, 581, 588, 587, 594, 593, 600, 599, 606, 605, 612, 611, 618, 617, 624, 623, 630, 629, 636, 635, 642, 641, 648, 647, 855, 854, + 728, 727, 722, 721, 716, 715, 710, 709, 704, 703, 698, 697, 692, 691, 686, 685, 680, 679, 674, 673, 668, 667, 662, 661, 656, 655, 650, 649, 856, 0, + 730, 729, 724, 723, 718, 717, 712, 711, 706, 705, 700, 699, 694, 693, 688, 687, 682, 681, 676, 675, 670, 669, 664, 663, 658, 657, 652, 651, 858, 857, + 732, 731, 726, 725, 720, 719, 714, 713, 708, 707, 702, 701, 696, 695, 690, 689, 684, 683, 678, 677, 672, 671, 666, 665, 660, 659, 654, 653, 859, 0, + 734, 733, 740, 739, 746, 745, 752, 751, 758, 757, 764, 763, 770, 769, 776, 775, 782, 781, 788, 787, 794, 793, 800, 799, 806, 805, 812, 811, 861, 860, + 736, 735, 742, 741, 748, 747, 754, 753, 760, 759, 766, 765, 772, 771, 778, 777, 784, 783, 790, 789, 796, 795, 802, 801, 808, 807, 814, 813, 862, 0, + 738, 737, 744, 743, 750, 749, 756, 755, 762, 761, 768, 767, 774, 773, 780, 779, 786, 785, 792, 791, 798, 797, 804, 803, 810, 809, 816, 815, 864, 863 +}; + +int maxiCodeSet[256] = { /* from Appendix A - ASCII character to Code Set (e.g. 2 = Set B) */ + /* set 0 refers to special characters that fit into more than one set (e.g. GS) */ + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 0, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 4, 5, 5, 5, 5, 5, 5, 4, 5, 3, 4, 3, 5, 5, 4, 4, 3, 3, 3, + 4, 3, 5, 4, 4, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 +}; + +int maxiSymbolChar[256] = { /* from Appendix A - ASCII character to symbol value */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 30, 28, 29, 30, 35, 32, 53, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 37, + 38, 39, 40, 41, 52, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 42, 43, 44, 45, 46, 0, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 32, 54, 34, 35, 36, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 36, + 37, 37, 38, 39, 40, 41, 42, 43, 38, 44, 37, 39, 38, 45, 46, 40, 41, 39, 40, 41, + 42, 42, 47, 43, 44, 43, 44, 45, 45, 46, 47, 46, 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, + 33, 34, 35, 36, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36 +}; + diff --git a/3rdparty/zint-2.4.4/backend/maxipng.h b/3rdparty/zint-2.4.4/backend/maxipng.h new file mode 100644 index 0000000..d7beb6c --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/maxipng.h @@ -0,0 +1,138 @@ +/* maxipng.h - Shapes for Maxicode output to PNG file */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* This file contains the pixel-by-pixel representation of maxicode glyphs + at a resolution of 12 pixels per millimeter. hexagon[] is taken directly + from ISO 16023 Annex J. bullseye[] was calculated by the Gimp */ + +#define SSET "0123456789ABCDEF" + +static int hexagon[120] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static unsigned int bullseye_compressed[] = { + 0,0,0,0,0,255,248,0,0,0,0,0, + 0,0,0,0,31,255,255,192,0,0,0,0, + 0,0,0,1,255,255,255,252,0,0,0,0, + 0,0,0,7,255,255,255,255,0,0,0,0, + 0,0,0,31,255,255,255,255,192,0,0,0, + 0,0,0,127,255,255,255,255,240,0,0,0, + 0,0,1,255,255,255,255,255,252,0,0,0, + 0,0,7,255,255,255,255,255,255,0,0,0, + 0,0,15,255,255,0,7,255,255,128,0,0, + 0,0,63,255,240,0,0,127,255,224,0,0, + 0,0,127,255,128,0,0,15,255,240,0,0, + 0,0,255,252,0,0,0,1,255,248,0,0, + 0,1,255,240,0,0,0,0,127,252,0,0, + 0,3,255,224,0,0,0,0,63,254,0,0, + 0,7,255,128,0,0,0,0,15,255,0,0, + 0,15,255,0,0,0,0,0,7,255,128,0, + 0,31,252,0,0,127,240,0,1,255,192,0, + 0,63,248,0,7,255,255,0,0,255,224,0, + 0,127,240,0,63,255,255,224,0,127,240,0, + 0,127,224,0,255,255,255,248,0,63,240,0, + 0,255,192,1,255,255,255,252,0,31,248,0, + 1,255,128,7,255,255,255,255,0,15,252,0, + 1,255,0,15,255,255,255,255,128,7,252,0, + 3,255,0,63,255,255,255,255,224,7,254,0, + 3,254,0,127,255,192,31,255,240,3,254,0, + 7,252,0,255,252,0,1,255,248,1,255,0, + 7,252,1,255,240,0,0,127,252,1,255,0, + 15,248,1,255,192,0,0,31,252,0,255,128, + 15,240,3,255,128,0,0,15,254,0,127,128, + 31,240,7,255,0,0,0,7,255,0,127,192, + 31,224,7,254,0,0,0,3,255,0,63,192, + 63,224,15,252,0,0,0,1,255,128,63,224, + 63,224,31,248,0,63,192,0,255,192,63,224, + 63,192,31,240,0,255,240,0,127,192,31,224, + 63,192,63,224,3,255,252,0,63,224,31,224, + 127,192,63,224,7,255,254,0,63,224,31,240, + 127,128,63,192,15,255,255,0,31,224,15,240, + 127,128,127,192,31,255,255,128,31,240,15,240, + 127,128,127,128,63,255,255,192,15,240,15,240, + 127,128,127,128,63,255,255,192,15,240,15,240, + 255,0,127,128,127,240,255,224,15,240,7,240, + 255,0,255,128,127,192,63,224,15,248,7,240, + 255,0,255,0,255,128,31,240,7,248,7,240, + 255,0,255,0,255,128,31,240,7,248,7,240, + 255,0,255,0,255,0,15,240,7,248,7,240, + 255,0,255,0,255,0,15,240,7,248,7,240, + 255,0,255,0,255,0,15,240,7,248,7,240, + 255,0,255,0,255,0,15,240,7,248,7,240, + 255,0,255,0,255,128,31,240,7,248,7,240, + 255,0,255,0,255,128,31,240,7,248,7,240, + 255,0,255,0,127,192,63,224,7,248,7,240, + 255,0,255,128,127,240,255,224,15,248,7,240, + 255,0,127,128,63,255,255,192,15,240,7,240, + 127,128,127,128,63,255,255,192,15,240,15,240, + 127,128,127,128,31,255,255,128,15,240,15,240, + 127,128,127,192,15,255,255,0,31,240,15,240, + 127,128,63,192,7,255,254,0,31,224,15,240, + 127,192,63,224,3,255,252,0,63,224,31,240, + 63,192,63,224,0,255,240,0,63,224,31,224, + 63,192,31,240,0,63,192,0,127,192,31,224, + 63,224,31,248,0,0,0,0,255,192,63,224, + 63,224,15,252,0,0,0,1,255,128,63,224, + 31,224,7,254,0,0,0,3,255,0,63,192, + 31,240,7,255,0,0,0,7,255,0,127,192, + 15,240,3,255,128,0,0,15,254,0,127,128, + 15,248,1,255,192,0,0,31,252,0,255,128, + 7,252,1,255,240,0,0,127,252,1,255,0, + 7,252,0,255,252,0,1,255,248,1,255,0, + 3,254,0,127,255,192,31,255,240,3,254,0, + 3,255,0,63,255,255,255,255,224,7,254,0, + 1,255,0,15,255,255,255,255,128,7,252,0, + 1,255,128,7,255,255,255,255,0,15,252,0, + 0,255,192,1,255,255,255,252,0,31,248,0, + 0,127,224,0,255,255,255,248,0,63,240,0, + 0,127,240,0,63,255,255,224,0,127,240,0, + 0,63,248,0,7,255,255,0,0,255,224,0, + 0,31,252,0,0,127,240,0,1,255,192,0, + 0,15,255,0,0,0,0,0,7,255,128,0, + 0,7,255,128,0,0,0,0,15,255,0,0, + 0,3,255,224,0,0,0,0,63,254,0,0, + 0,1,255,240,0,0,0,0,127,252,0,0, + 0,0,255,252,0,0,0,1,255,248,0,0, + 0,0,127,255,128,0,0,15,255,240,0,0, + 0,0,63,255,240,0,0,127,255,224,0,0, + 0,0,15,255,255,0,7,255,255,128,0,0, + 0,0,7,255,255,255,255,255,255,0,0,0, + 0,0,1,255,255,255,255,255,252,0,0,0, + 0,0,0,127,255,255,255,255,240,0,0,0, + 0,0,0,31,255,255,255,255,192,0,0,0, + 0,0,0,7,255,255,255,255,0,0,0,0, + 0,0,0,1,255,255,255,252,0,0,0,0, + 0,0,0,0,31,255,255,192,0,0,0,0, + 0,0,0,0,0,255,248,0,0,0,0,0 +}; + diff --git a/3rdparty/zint-2.4.4/backend/medical.c b/3rdparty/zint-2.4.4/backend/medical.c new file mode 100644 index 0000000..e26c410 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/medical.c @@ -0,0 +1,308 @@ +/* medical.c - Handles 1 track and 2 track pharmacode and Codabar */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include "common.h" + +extern int c39(struct zint_symbol *symbol, unsigned char source[], int length); +/* Codabar table checked against EN 798:1995 */ + +#define CALCIUM "0123456789-$:/.+ABCD" + +static char *CodaTable[20] = {"11111221", "11112211", "11121121", "22111111", "11211211", "21111211", + "12111121", "12112111", "12211111", "21121111", "11122111", "11221111", "21112121", "21211121", + "21212111", "11212121", "11221211", "12121121", "11121221", "11122211"}; + +int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* "Pharmacode can represent only a single integer from 3 to 131070. Unlike other + commonly used one-dimensional barcode schemes, pharmacode does not store the data in a + form corresponding to the human-readable digits; the number is encoded in binary, rather + than decimal. Pharmacode is read from right to left: with n as the bar position starting + at 0 on the right, each narrow bar adds 2n to the value and each wide bar adds 2(2^n). + The minimum barcode is 2 bars and the maximum 16, so the smallest number that could + be encoded is 3 (2 narrow bars) and the biggest is 131070 (16 wide bars)." + - http://en.wikipedia.org/wiki/Pharmacode */ + + /* This code uses the One Track Pharamacode calculating algorithm as recommended by + the specification at http://www.laetus.com/laetus.php?request=file&id=69 */ + + unsigned long int tester; + int counter, error_number, h; + char inter[18] = { 0 }; /* 131070 -> 17 bits */ + char dest[64]; /* 17 * 2 + 1 */ + + error_number = 0; + + if(length > 6) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + tester = atoi((char*)source); + + if((tester < 3) || (tester > 131070)) { + strcpy(symbol->errtxt, "Data out of range"); + return ERROR_INVALID_DATA1; + } + + do + { + if(!(tester & 1)) { + concat(inter, "W"); + tester = (tester - 2) / 2; + } else { + concat(inter, "N"); + tester = (tester - 1) / 2; + } + } + while(tester != 0); + + h = strlen(inter) - 1; + *dest = '\0'; + for(counter = h; counter >= 0; counter--) { + if(inter[counter] == 'W') { + concat(dest, "32"); + } else { + concat(dest, "12"); + } + } + + expand(symbol, dest); + + return error_number; +} + +int pharma_two_calc(struct zint_symbol *symbol, unsigned char source[], char dest[]) +{ + /* This code uses the Two Track Pharamacode defined in the document at + http://www.laetus.com/laetus.php?request=file&id=69 and using a modified + algorithm from the One Track system. This standard accepts integet values + from 4 to 64570080. */ + + unsigned long int tester; + int counter, h; + char inter[17]; + int error_number; + + tester = atoi((char*)source); + + if((tester < 4) || (tester > 64570080)) + { + strcpy(symbol->errtxt, "Data out of range"); + return ERROR_INVALID_DATA1; + } + error_number = 0; + strcpy(inter, ""); + do + { + switch(tester%3) { + case 0: + concat(inter, "3"); + tester = (tester - 3) / 3; + break; + case 1: + concat(inter, "1"); + tester = (tester - 1) / 3; + break; + case 2: + concat(inter, "2"); + tester = (tester - 2) / 3; + break; + } + } + while(tester != 0); + + h = strlen(inter) - 1; + for(counter = h; counter >= 0; counter--) + { + dest[h - counter] = inter[counter]; + } + dest[h + 1] = '\0'; + + return error_number; +} + +int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* Draws the patterns for two track pharmacode */ + char height_pattern[200]; + unsigned int loopey, h; + int writer; + int error_number = 0; + strcpy(height_pattern, ""); + + if(length > 8) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + error_number = pharma_two_calc(symbol, source, height_pattern); + if(error_number != 0) { + return error_number; + } + + writer = 0; + h = strlen(height_pattern); + for(loopey = 0; loopey < h; loopey++) + { + if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '3')) + { + set_module(symbol, 0, writer); + } + if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '3')) + { + set_module(symbol, 1, writer); + } + writer += 2; + } + symbol->rows = 2; + symbol->width = writer - 1; + + + return error_number; +} + +int codabar(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* The Codabar system consisting of simple substitution */ + + int i, error_number; + char dest[512]; + + error_number = 0; + strcpy(dest, ""); + + if(length > 60) { /* No stack smashing please */ + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + to_upper(source); + error_number = is_sane(CALCIUM, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + /* Codabar must begin and end with the characters A, B, C or D */ + if((source[0] != 'A') && (source[0] != 'B') && (source[0] != 'C') && (source[0] != 'D')) + { + strcpy(symbol->errtxt, "Invalid characters in data"); + return ERROR_INVALID_DATA1; + } + + if((source[length - 1] != 'A') && (source[length - 1] != 'B') && + (source[length - 1] != 'C') && (source[length - 1] != 'D')) + { + strcpy(symbol->errtxt, "Invalid characters in data"); + return ERROR_INVALID_DATA1; + } + + for(i = 0; i < length; i++) + { + lookup(CALCIUM, CodaTable, source[i], dest); + } + + expand(symbol, dest); + ustrcpy(symbol->text, source); + return error_number; +} + +int code32(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Italian Pharmacode */ + int i, zeroes, error_number, checksum, checkpart, checkdigit; + char localstr[10], risultante[7]; + long int pharmacode, remainder, devisor; + int codeword[6]; + char tabella[34]; + + /* Validate the input */ + if(length > 8) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* Add leading zeros as required */ + zeroes = 8 - length; + memset(localstr, '0', zeroes); + strcpy(localstr + zeroes, (char*)source); + + /* Calculate the check digit */ + checksum = 0; + checkpart = 0; + for(i = 0; i < 4; i++) { + checkpart = ctoi(localstr[i * 2]); + checksum += checkpart; + checkpart = 2 * (ctoi(localstr[(i * 2) + 1])); + if(checkpart >= 10) { + checksum += (checkpart - 10) + 1; + } else { + checksum += checkpart; + } + } + + /* Add check digit to data string */ + checkdigit = checksum % 10; + localstr[8] = itoc(checkdigit); + localstr[9] = '\0'; + + /* Convert string into an integer value */ + pharmacode = atoi(localstr); + + /* Convert from decimal to base-32 */ + devisor = 33554432; + for(i = 5; i >= 0; i--) { + codeword[i] = pharmacode / devisor; + remainder = pharmacode % devisor; + pharmacode = remainder; + devisor /= 32; + } + + /* Look up values in 'Tabella di conversione' */ + strcpy(tabella, "0123456789BCDFGHJKLMNPQRSTUVWXYZ"); + for(i = 5; i >= 0; i--) { + risultante[5 - i] = tabella[codeword[i]]; + } + risultante[6] = '\0'; + /* Plot the barcode using Code 39 */ + error_number = c39(symbol, (unsigned char*)risultante, strlen(risultante)); + if(error_number != 0) { return error_number; } + + /* Override the normal text output with the Pharmacode number */ + ustrcpy(symbol->text, (unsigned char*)"A"); + uconcat(symbol->text, (unsigned char*)localstr); + + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/ms_stdint.h b/3rdparty/zint-2.4.4/backend/ms_stdint.h new file mode 100644 index 0000000..76987ab --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/ms_stdint.h @@ -0,0 +1,234 @@ +// ISO C9x compliant stdint.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006-2008 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// + +/* @(#) $Id: ms_stdint.h,v 1.1 2009/09/19 08:16:21 hooper114 Exp $ */ + +#ifndef _MSC_VER // [ +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif // _MSC_VER ] + +#ifndef _MSC_STDINT_H_ // [ +#define _MSC_STDINT_H_ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include + +// For Visual Studio 6 in C++ mode wrap include with 'extern "C++" {}' +// or compiler give many errors like this: +// error C2733: second C linkage of overloaded function 'wmemchr' not allowed +#if (_MSC_VER < 1300) && defined(__cplusplus) + extern "C++" { +#endif +# include +#if (_MSC_VER < 1300) && defined(__cplusplus) + } +#endif + +// Define _W64 macros to mark types changing their size, like intptr_t. +#ifndef _W64 +# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 +# define _W64 __w64 +# else +# define _W64 +# endif +#endif + + +// 7.18.1 Integer types + +// 7.18.1.1 Exact-width integer types +typedef __int8 int8_t; +typedef __int16 int16_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; + +// 7.18.1.2 Minimum-width integer types +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +typedef int64_t int_least64_t; +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +typedef uint64_t uint_least64_t; + +// 7.18.1.3 Fastest minimum-width integer types +typedef int8_t int_fast8_t; +typedef int16_t int_fast16_t; +typedef int32_t int_fast32_t; +typedef int64_t int_fast64_t; +typedef uint8_t uint_fast8_t; +typedef uint16_t uint_fast16_t; +typedef uint32_t uint_fast32_t; +typedef uint64_t uint_fast64_t; + +// 7.18.1.4 Integer types capable of holding object pointers +#ifdef _WIN64 // [ + typedef __int64 intptr_t; + typedef unsigned __int64 uintptr_t; +#else // _WIN64 ][ + typedef _W64 int intptr_t; + typedef _W64 unsigned int uintptr_t; +#endif // _WIN64 ] + +// 7.18.1.5 Greatest-width integer types +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; + + +// 7.18.2 Limits of specified-width integer types + +#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 + +// 7.18.2.1 Limits of exact-width integer types +#define INT8_MIN ((int8_t)_I8_MIN) +#define INT8_MAX _I8_MAX +#define INT16_MIN ((int16_t)_I16_MIN) +#define INT16_MAX _I16_MAX +#define INT32_MIN ((int32_t)_I32_MIN) +#define INT32_MAX _I32_MAX +#define INT64_MIN ((int64_t)_I64_MIN) +#define INT64_MAX _I64_MAX +#define UINT8_MAX _UI8_MAX +#define UINT16_MAX _UI16_MAX +#define UINT32_MAX _UI32_MAX +#define UINT64_MAX _UI64_MAX + +// 7.18.2.2 Limits of minimum-width integer types +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MIN INT64_MIN +#define INT_LEAST64_MAX INT64_MAX +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX +#define UINT_LEAST64_MAX UINT64_MAX + +// 7.18.2.3 Limits of fastest minimum-width integer types +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST32_MAX INT32_MAX +#define INT_FAST64_MIN INT64_MIN +#define INT_FAST64_MAX INT64_MAX +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_MAX + +// 7.18.2.4 Limits of integer types capable of holding object pointers +#ifdef _WIN64 // [ +# define INTPTR_MIN INT64_MIN +# define INTPTR_MAX INT64_MAX +# define UINTPTR_MAX UINT64_MAX +#else // _WIN64 ][ +# define INTPTR_MIN INT32_MIN +# define INTPTR_MAX INT32_MAX +# define UINTPTR_MAX UINT32_MAX +#endif // _WIN64 ] + +// 7.18.2.5 Limits of greatest-width integer types +#define INTMAX_MIN INT64_MIN +#define INTMAX_MAX INT64_MAX +#define UINTMAX_MAX UINT64_MAX + +// 7.18.3 Limits of other integer types + +#ifdef _WIN64 // [ +# define PTRDIFF_MIN _I64_MIN +# define PTRDIFF_MAX _I64_MAX +#else // _WIN64 ][ +# define PTRDIFF_MIN _I32_MIN +# define PTRDIFF_MAX _I32_MAX +#endif // _WIN64 ] + +#define SIG_ATOMIC_MIN INT_MIN +#define SIG_ATOMIC_MAX INT_MAX + +#ifndef SIZE_MAX // [ +# ifdef _WIN64 // [ +# define SIZE_MAX _UI64_MAX +# else // _WIN64 ][ +# define SIZE_MAX _UI32_MAX +# endif // _WIN64 ] +#endif // SIZE_MAX ] + +// WCHAR_MIN and WCHAR_MAX are also defined in +#ifndef WCHAR_MIN // [ +# define WCHAR_MIN 0 +#endif // WCHAR_MIN ] +#ifndef WCHAR_MAX // [ +# define WCHAR_MAX _UI16_MAX +#endif // WCHAR_MAX ] + +#define WINT_MIN 0 +#define WINT_MAX _UI16_MAX + +#endif // __STDC_LIMIT_MACROS ] + + +// 7.18.4 Limits of other integer types + +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 + +// 7.18.4.1 Macros for minimum-width integer constants + +#define INT8_C(val) val##i8 +#define INT16_C(val) val##i16 +#define INT32_C(val) val##i32 +#define INT64_C(val) val##i64 + +#define UINT8_C(val) val##ui8 +#define UINT16_C(val) val##ui16 +#define UINT32_C(val) val##ui32 +#define UINT64_C(val) val##ui64 + +// 7.18.4.2 Macros for greatest-width integer constants +#define INTMAX_C INT64_C +#define UINTMAX_C UINT64_C + +#endif // __STDC_CONSTANT_MACROS ] + + +#endif // _MSC_STDINT_H_ ] diff --git a/3rdparty/zint-2.4.4/backend/pdf417.c b/3rdparty/zint-2.4.4/backend/pdf417.c new file mode 100644 index 0000000..91d47e6 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/pdf417.c @@ -0,0 +1,1069 @@ +/* pdf417.c - Handles PDF417 stacked symbology */ + +/* Zint - A barcode generating program using libpng + Copyright (C) 2008 Robin Stuart + Portions Copyright (C) 2004 Grandzebu + Bug Fixes thanks to KL Chin + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* This code is adapted from "Code barre PDF 417 / PDF 417 barcode" v2.5.0 + which is Copyright (C) 2004 (Grandzebu). + The original code can be downloaded from http://grandzebu.net/index.php */ + +/* NOTE: symbol->option_1 is used to specify the security level (i.e. control the + number of check codewords) + + symbol->option_2 is used to adjust the width of the resulting symbol (i.e. the + number of codeword columns not including row start and end data) */ + +/* @(#) $Id: pdf417.c,v 1.21 2010/01/28 17:55:59 hooper114 Exp $ */ + +#include +#include +#include +#include +#ifndef _MSC_VER +#include +#else +#include +#include "ms_stdint.h" +#endif +#include "pdf417.h" +#include "common.h" +#include "large.h" + +/* + Three figure numbers in comments give the location of command equivalents in the + original Visual Basic source code file pdf417.frm + this code retains some original (French) procedure and variable names to ease conversion */ + +/* text mode processing tables */ + +static int asciix[95] = { 7, 8, 8, 4, 12, 4, 4, 8, 8, 8, 12, 4, 12, 12, 12, 12, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 12, 8, 8, 4, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 8, 8, 8, 4, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 8, 8, 8, 8 }; + +static int asciiy[95] = { 26, 10, 20, 15, 18, 21, 10, 28, 23, 24, 22, 20, 13, 16, 17, 19, 0, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 14, 0, 1, 23, 2, 25, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 4, 5, 6, 24, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 21, 27, 9 }; + +/* Automatic sizing table */ + +static int MicroAutosize[56] = +{ 4, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 20, 24, 29, 30, 33, 34, 37, 39, 46, 54, 58, 70, 72, 82, 90, 108, 126, + 1, 14, 2, 7, 3, 25, 8, 16, 5, 17, 9, 6, 10, 11, 28, 12, 19, 13, 29, 20, 30, 21, 22, 31, 23, 32, 33, 34 +}; + +int liste[2][1000]; /* global - okay, so I got _almost_ everything local! */ + +/* 866 */ + +int quelmode(char codeascii) +{ + int mode = BYT; + if ((codeascii == '\t') || (codeascii == '\n') || (codeascii == '\r') || ((codeascii >= ' ') && (codeascii <= '~'))) { mode = TEX; } + else if((codeascii >= '0') && (codeascii <= '9')) { mode = NUM; } + /* 876 */ + + return mode; +} + +/* 844 */ +void regroupe(int *indexliste) +{ + int i, j; + + /* bring together same type blocks */ + if(*(indexliste) > 1) { + i = 1; + while(i < *(indexliste)) { + if(liste[1][i - 1] == liste[1][i]) { + /* bring together */ + liste[0][i - 1] = liste[0][i - 1] + liste[0][i]; + j = i + 1; + + /* decreace the list */ + while(j < *(indexliste)) { + liste[0][j - 1] = liste[0][j]; + liste[1][j - 1] = liste[1][j]; + j++; + } + *(indexliste) = *(indexliste) - 1; + i--; + } + i++; + } + } + /* 865 */ +} + +/* 478 */ +void pdfsmooth(int *indexliste) +{ + int i, crnt, last, next, length; + + for(i = 0; i < *(indexliste); i++) { + crnt = liste[1][i]; + length = liste[0][i]; + if(i != 0) { last = liste[1][i - 1]; } else { last = FALSE; } + if(i != *(indexliste) - 1) { next = liste[1][i + 1]; } else { next = FALSE; } + + if(crnt == NUM) { + if(i == 0) { /* first block */ + if(*(indexliste) > 1) { /* and there are others */ + if((next == TEX) && (length < 8)) { liste[1][i] = TEX;} + if((next == BYT) && (length == 1)) { liste[1][i] = BYT; } + } + } else { + if(i == *(indexliste) - 1) { /* last block */ + if((last == TEX) && (length < 7)) { liste[1][i] = TEX; } + if((last == BYT) && (length == 1)) { liste[1][i] = BYT; } + } else { /* not first or last block */ + if(((last == BYT) && (next == BYT)) && (length < 4)) { liste[1][i] = BYT; } + if(((last == BYT) && (next == TEX)) && (length < 4)) { liste[1][i] = TEX; } + if(((last == TEX) && (next == BYT)) && (length < 5)) { liste[1][i] = TEX; } + if(((last == TEX) && (next == TEX)) && (length < 8)) { liste[1][i] = TEX; } + } + } + } + } + regroupe(indexliste); + /* 520 */ + for(i = 0; i < *(indexliste); i++) { + crnt = liste[1][i]; + length = liste[0][i]; + if(i != 0) { last = liste[1][i - 1]; } else { last = FALSE; } + if(i != *(indexliste) - 1) { next = liste[1][i + 1]; } else { next = FALSE; } + + if((crnt == TEX) && (i > 0)) { /* not the first */ + if(i == *(indexliste) - 1) { /* the last one */ + if((last == BYT) && (length == 1)) { liste[1][i] = BYT; } + } else { /* not the last one */ + if(((last == BYT) && (next == BYT)) && (length < 5)) { liste[1][i] = BYT; } + if((((last == BYT) && (next != BYT)) || ((last != BYT) && (next == BYT))) && (length < 3)) { + liste[1][i] = BYT; + } + } + } + } + /* 540 */ + regroupe(indexliste); +} + +/* 547 */ +void textprocess(int *chainemc, int *mclength, char chaine[], int start, int length, int block) +{ + int j, indexlistet, curtable, listet[2][5000], chainet[5000], wnet; + char codeascii; + + codeascii = 0; + wnet = 0; + + for(j = 0; j < 1000; j++) { + listet[0][j] = 0; + } + /* listet will contain the table numbers and the value of each characters */ + for(indexlistet = 0; indexlistet < length; indexlistet++) { + codeascii = chaine[start + indexlistet]; + switch(codeascii) { + case '\t': listet[0][indexlistet] = 12; listet[1][indexlistet] = 12; break; + case '\n': listet[0][indexlistet] = 8; listet[1][indexlistet] = 15; break; + case 13: listet[0][indexlistet] = 12; listet[1][indexlistet] = 11; break; + default: listet[0][indexlistet] = asciix[codeascii - 32]; + listet[1][indexlistet] = asciiy[codeascii - 32]; break; + } + } + + /* 570 */ + curtable = 1; /* default table */ + for(j = 0; j < length; j++) { + if(listet[0][j] & curtable) { /* The character is in the current table */ + chainet[wnet] = listet[1][j]; + wnet++; + } else { /* Obliged to change table */ + int flag = FALSE; /* True if we change table for only one character */ + if (j == (length - 1)) { + flag = TRUE; + } else { + if(!(listet[0][j] & listet[0][j + 1])) { flag = TRUE; } + } + + if (flag) { /* we change only one character - look for temporary switch */ + if((listet[0][j] & 1) && (curtable == 2)) { /* T_UPP */ + chainet[wnet] = 27; + chainet[wnet + 1] = listet[1][j]; + wnet += 2; + } + if(listet[0][j] & 8) { /* T_PUN */ + chainet[wnet] = 29; + chainet[wnet + 1] = listet[1][j]; + wnet += 2; + } + if(!(((listet[0][j] & 1) && (curtable == 2)) || (listet[0][j] & 8))) { + /* No temporary switch available */ + flag = FALSE; + } + } + + /* 599 */ + if (!(flag)) { + int newtable; + + if(j == (length - 1)) { + newtable = listet[0][j]; + } else { + if(!(listet[0][j] & listet[0][j + 1])) { + newtable = listet[0][j]; + } else { + newtable = listet[0][j] & listet[0][j + 1]; + } + } + + /* Maintain the first if several tables are possible */ + switch (newtable) { + case 3: + case 5: + case 7: + case 9: + case 11: + case 13: + case 15: + newtable = 1; break; + case 6: + case 10: + case 14: + newtable = 2; break; + case 12: + newtable = 4; break; + } + + /* 619 - select the switch */ + switch (curtable) { + case 1: + switch (newtable) { + case 2: chainet[wnet] = 27; wnet++; break; + case 4: chainet[wnet] = 28; wnet++; break; + case 8: chainet[wnet] = 28; wnet++; chainet[wnet] = 25; wnet++; break; + } break; + case 2: + switch (newtable) { + case 1: chainet[wnet] = 28; wnet++; chainet[wnet] = 28; wnet++; break; + case 4: chainet[wnet] = 28; wnet++; break; + case 8: chainet[wnet] = 28; wnet++; chainet[wnet] = 25; wnet++; break; + } break; + case 4: + switch (newtable) { + case 1: chainet[wnet] = 28; wnet++; break; + case 2: chainet[wnet] = 27; wnet++; break; + case 8: chainet[wnet] = 25; wnet++; break; + } break; + case 8: + switch (newtable) { + case 1: chainet[wnet] = 29; wnet++; break; + case 2: chainet[wnet] = 29; wnet++; chainet[wnet] = 27; wnet++; break; + case 4: chainet[wnet] = 29; wnet++; chainet[wnet] = 28; wnet++; break; + } break; + } + curtable = newtable; + /* 659 - at last we add the character */ + chainet[wnet] = listet[1][j]; + wnet++; + } + } + } + + /* 663 */ + if (wnet & 1) { + chainet[wnet] = 29; + wnet++; + } + /* Now translate the string chainet into codewords */ + chainemc[*(mclength)] = 900; + *(mclength) = *(mclength) + 1; + + for(j = 0; j < wnet; j+= 2) { + int cw_number; + + cw_number = (30 * chainet[j]) + chainet[j + 1]; + chainemc[*(mclength)] = cw_number; + *(mclength) = *(mclength) + 1; + + } +} + +/* 671 */ +void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start, int length, int block) +{ + int debug = 0; + int len = 0; + unsigned int chunkLen = 0; + uint64_t mantisa = 0ULL; + uint64_t total = 0ULL; + + if(debug) printf("\nEntering byte mode at position %d\n", start); + + if(length == 1) { + chainemc[(*mclength)++] = 913; + chainemc[(*mclength)++] = chaine[start]; + if(debug) { printf("913 %d\n", chainemc[*mclength - 1]); } + } else { + /* select the switch for multiple of 6 bytes */ + if (length % 6 == 0) { + chainemc[(*mclength)++] = 924; + if(debug) printf("924 "); + } else { + chainemc[(*mclength)++] = 901; + if(debug) printf("901 "); + } + + while (len < length) + { + chunkLen = length - len; + if (6 <= chunkLen) /* Take groups of 6 */ + { + chunkLen = 6; + len += chunkLen; + total = 0ULL; + + while (chunkLen--) + { + mantisa = chaine[start++]; + total |= mantisa << (uint64_t)(chunkLen * 8ULL); + } + + chunkLen = 5; + + while (chunkLen--) + { + chainemc[*mclength + chunkLen] = (int)(total % 900ULL); + total /= 900ULL; + } + *mclength += 5; + } + else /* If it remain a group of less than 6 bytes */ + { + len += chunkLen; + while (chunkLen--) + { + chainemc[(*mclength)++] = chaine[start++]; + } + } + } + } +} + +/* 712 */ +void numbprocess(int *chainemc, int *mclength, char chaine[], int start, int length, int block) +{ + int j, loop, longueur, dummy[100], dumlength, diviseur, nombre; + char chainemod[50], chainemult[100], temp; + + strcpy(chainemod, ""); + for(loop = 0; loop <= 50; loop++) { + dummy[loop] = 0; + } + + chainemc[*(mclength)] = 902; + *(mclength) = *(mclength) + 1; + + j = 0; + while(j < length) { + dumlength = 0; + strcpy(chainemod, ""); + longueur = length - j; + if(longueur > 44) { longueur = 44; } + concat(chainemod, "1"); + for(loop = 1; loop <= longueur; loop++) { + chainemod[loop] = chaine[start + loop + j - 1]; + } + chainemod[longueur + 1] = '\0'; + do { + diviseur = 900; + + /* 877 - gosub Modulo */ + strcpy(chainemult, ""); + nombre = 0; + while(strlen(chainemod) != 0) { + nombre *= 10; + nombre += ctoi(chainemod[0]); + for(loop = 0; loop < strlen(chainemod); loop++) { + chainemod[loop] = chainemod[loop + 1]; + } + if (nombre < diviseur) { + if (strlen(chainemult) != 0) { concat(chainemult, "0"); } + } else { + temp = (nombre / diviseur) + '0'; + chainemult[strlen(chainemult) + 1] = '\0'; + chainemult[strlen(chainemult)] = temp; + } + nombre = nombre % diviseur; + } + diviseur = nombre; + /* return to 723 */ + + for(loop = dumlength; loop > 0; loop--) { + dummy[loop] = dummy[loop - 1]; + } + dummy[0] = diviseur; + dumlength++; + strcpy(chainemod, chainemult); + } while(strlen(chainemult) != 0); + for(loop = 0; loop < dumlength; loop++) { + chainemc[*(mclength)] = dummy[loop]; + *(mclength) = *(mclength) + 1; + } + j += longueur; + } +} + +/* 366 */ +int pdf417(struct zint_symbol *symbol, unsigned char chaine[], int length) +{ + int i, k, j, indexchaine, indexliste, mode, longueur, loop, mccorrection[520], offset; + int total, chainemc[2700], mclength, c1, c2, c3, dummy[35], codeerr; + char codebarre[140], pattern[580]; + int debug = 0; + + codeerr = 0; + + /* 456 */ + indexliste = 0; + indexchaine = 0; + + mode = quelmode(chaine[indexchaine]); + + for(i = 0; i < 1000; i++) { + liste[0][i] = 0; + } + + /* 463 */ + do { + liste[1][indexliste] = mode; + while ((liste[1][indexliste] == mode) && (indexchaine < length)) { + liste[0][indexliste]++; + indexchaine++; + mode = quelmode(chaine[indexchaine]); + } + indexliste++; + } while (indexchaine < length); + + /* 474 */ + pdfsmooth(&indexliste); + + if(debug) { + printf("Initial block pattern:\n"); + for(i = 0; i < indexliste; i++) { + printf("Len: %d Type: ", liste[0][i]); + switch(liste[1][i]) { + case TEX: printf("Text\n"); break; + case BYT: printf("Byte\n"); break; + case NUM: printf("Number\n"); break; + default: printf("ERROR\n"); break; + } + } + } + + /* 541 - now compress the data */ + indexchaine = 0; + mclength = 0; + if(symbol->output_options & READER_INIT) { + chainemc[mclength] = 921; /* Reader Initialisation */ + mclength++; + } + for(i = 0; i < indexliste; i++) { + switch(liste[1][i]) { + case TEX: /* 547 - text mode */ + textprocess(chainemc, &mclength, (char*)chaine, indexchaine, liste[0][i], i); + break; + case BYT: /* 670 - octet stream mode */ + byteprocess(chainemc, &mclength, chaine, indexchaine, liste[0][i], i); + break; + case NUM: /* 712 - numeric mode */ + numbprocess(chainemc, &mclength, (char*)chaine, indexchaine, liste[0][i], i); + break; + } + indexchaine = indexchaine + liste[0][i]; + } + + if(debug) { + printf("\nCompressed data stream:\n"); + for(i = 0; i < mclength; i++) { + printf("%d ", chainemc[i]); + } + printf("\n\n"); + } + + /* 752 - Now take care of the number of CWs per row */ + if (symbol->option_1 < 0) { + symbol->option_1 = 6; + if(mclength <= 863) { symbol->option_1 = 5; } + if(mclength <= 320) { symbol->option_1 = 4; } + if(mclength <= 160) { symbol->option_1 = 3; } + if(mclength <= 40) { symbol->option_1 = 2; } + } + k = 1; + for(loop = 1; loop <= (symbol->option_1 + 1); loop++) + { + k *= 2; + } + longueur = mclength; + if(symbol->option_2 > 30) { symbol->option_2 = 30; } + if(symbol->option_2 < 1) { + symbol->option_2 = 0.5 + sqrt((longueur + k) / 3.0); + } + if(((longueur + k) / symbol->option_2) > 90) { + /* stop the symbol from becoming too high */ + symbol->option_2 = symbol->option_2 + 1; + } + + if(longueur + k > 928) { + /* Enforce maximum codeword limit */ + return 2; + } + + if(((longueur + k) / symbol->option_2) > 90) { + return 4; + } + + /* 781 - Padding calculation */ + longueur = mclength + 1 + k; + i = 0; + if ((longueur / symbol->option_2) < 3) { + i = (symbol->option_2 * 3) - longueur; /* A bar code must have at least three rows */ + } else { + if((longueur % symbol->option_2) > 0) { i = symbol->option_2 - (longueur % symbol->option_2); } + } + /* We add the padding */ + while (i > 0) { + chainemc[mclength] = 900; + mclength++; + i--; + } + /* we add the length descriptor */ + for(i = mclength; i > 0; i--) { + chainemc[i] = chainemc[i - 1]; + } + chainemc[0] = mclength + 1; + mclength++; + + /* 796 - we now take care of the Reed Solomon codes */ + switch(symbol->option_1) { + case 1: offset = 2; break; + case 2: offset = 6; break; + case 3: offset = 14; break; + case 4: offset = 30; break; + case 5: offset = 62; break; + case 6: offset = 126; break; + case 7: offset = 254; break; + case 8: offset = 510; break; + default: offset = 0; break; + } + + longueur = mclength; + for(loop = 0; loop < 520; loop++) { + mccorrection[loop] = 0; + } + total = 0; + for(i = 0; i < longueur; i++) { + total = (chainemc[i] + mccorrection[k - 1]) % 929; + for(j = k - 1; j > 0; j--) { + mccorrection[j] = (mccorrection[j - 1] + 929 - (total * coefrs[offset + j]) % 929) % 929; + } + mccorrection[0] = (929 - (total * coefrs[offset + j]) % 929) % 929; + } + + /* we add these codes to the string */ + for(i = k - 1; i >= 0; i--) { + chainemc[mclength++] = mccorrection[i] ? 929 - mccorrection[i] : 0; + } + + /* 818 - The CW string is finished */ + c1 = (mclength / symbol->option_2 - 1) / 3; + c2 = symbol->option_1 * 3 + (mclength / symbol->option_2 - 1) % 3; + c3 = symbol->option_2 - 1; + + /* we now encode each row */ + for(i = 0; i <= (mclength / symbol->option_2) - 1; i++) { + for(j = 0; j < symbol->option_2 ; j++) { + dummy[j + 1] = chainemc[i * symbol->option_2 + j]; + } + k = (i / 3) * 30; + switch(i % 3) { + /* follows this pattern from US Patent 5,243,655: + Row 0: L0 (row #, # of rows) R0 (row #, # of columns) + Row 1: L1 (row #, security level) R1 (row #, # of rows) + Row 2: L2 (row #, # of columns) R2 (row #, security level) + Row 3: L3 (row #, # of rows) R3 (row #, # of columns) + etc. */ + case 0: + dummy[0] = k + c1; + dummy[symbol->option_2 + 1] = k + c3; + break; + case 1: + dummy[0] = k + c2; + dummy[symbol->option_2 + 1] = k + c1; + break; + case 2: + dummy[0] = k + c3; + dummy[symbol->option_2 + 1] = k + c2; + break; + } + strcpy(codebarre, "+*"); /* Start with a start char and a separator */ + if(symbol->symbology == BARCODE_PDF417TRUNC) { + /* truncated - so same as before except knock off the last 5 chars */ + for(j = 0; j <= symbol->option_2; j++) { + switch(i % 3) { + case 1: offset = 929; break; + case 2: offset = 1858; break; + default: offset = 0; break; + } + concat(codebarre, codagemc[offset + dummy[j]]); + concat(codebarre, "*"); + } + } else { + /* normal PDF417 symbol */ + for(j = 0; j <= symbol->option_2 + 1; j++) { + switch(i % 3) { + case 1: offset = 929; /* cluster(3) */ break; + case 2: offset = 1858; /* cluster(6) */ break; + default: offset = 0; /* cluster(0) */ break; + } + concat(codebarre, codagemc[offset + dummy[j]]); + concat(codebarre, "*"); + } + concat(codebarre, "-"); + } + + strcpy(pattern, ""); + for(loop = 0; loop < strlen(codebarre); loop++) { + lookup(BRSET, PDFttf, codebarre[loop], pattern); + } + for(loop = 0; loop < strlen(pattern); loop++) { + if(pattern[loop] == '1') { set_module(symbol, i, loop); } + } + if(symbol->height == 0) { + symbol->row_height[i] = 3; + } + } + symbol->rows = (mclength / symbol->option_2); + symbol->width = strlen(pattern); + + /* 843 */ + return codeerr; +} + +/* 345 */ +int pdf417enc(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int codeerr, error_number; + + error_number = 0; + + if((symbol->option_1 < -1) || (symbol->option_1 > 8)) { + strcpy(symbol->errtxt, "Security value out of range"); + symbol->option_1 = -1; + error_number = WARN_INVALID_OPTION; + } + if((symbol->option_2 < 0) || (symbol->option_2 > 30)) { + strcpy(symbol->errtxt, "Number of columns out of range"); + symbol->option_2 = 0; + error_number = WARN_INVALID_OPTION; + } + + /* 349 */ + codeerr = pdf417(symbol, source, length); + + /* 352 */ + if(codeerr != 0) { + switch(codeerr) { + case 1: + strcpy(symbol->errtxt, "No such file or file unreadable"); + error_number = ERROR_INVALID_OPTION; + break; + case 2: + strcpy(symbol->errtxt, "Input string too long"); + error_number = ERROR_TOO_LONG; + break; + case 3: + strcpy(symbol->errtxt, "Number of codewords per row too small"); + error_number = WARN_INVALID_OPTION; + break; + case 4: + strcpy(symbol->errtxt, "Data too long for specified number of columns"); + error_number = ERROR_TOO_LONG; + break; + default: + strcpy(symbol->errtxt, "Something strange happened"); + error_number = ERROR_ENCODING_PROBLEM; + break; + } + } + + /* 364 */ + return error_number; +} + + +int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], int length) +{ /* like PDF417 only much smaller! */ + + int i, k, j, indexchaine, indexliste, mode, longueur, mccorrection[50], offset; + int total, chainemc[2700], mclength, dummy[5], codeerr; + char codebarre[100], pattern[580]; + int variant, LeftRAPStart, CentreRAPStart, RightRAPStart, StartCluster; + int LeftRAP, CentreRAP, RightRAP, Cluster, writer, flip, loop; + int debug = 0; + + /* Encoding starts out the same as PDF417, so use the same code */ + codeerr = 0; + + /* 456 */ + indexliste = 0; + indexchaine = 0; + + mode = quelmode(chaine[indexchaine]); + + for(i = 0; i < 1000; i++) { + liste[0][i] = 0; + } + + /* 463 */ + do { + liste[1][indexliste] = mode; + while ((liste[1][indexliste] == mode) && (indexchaine < length)) { + liste[0][indexliste]++; + indexchaine++; + mode = quelmode(chaine[indexchaine]); + } + indexliste++; + } while (indexchaine < length); + + /* 474 */ + pdfsmooth(&indexliste); + + if(debug) { + printf("Initial mapping:\n"); + for(i = 0; i < indexliste; i++) { + printf("len: %d type: ", liste[0][i]); + switch(liste[1][i]) { + case TEX: printf("TEXT\n"); break; + case BYT: printf("BYTE\n"); break; + case NUM: printf("NUMBER\n"); break; + default: printf("*ERROR*\n"); break; + } + } + } + + /* 541 - now compress the data */ + indexchaine = 0; + mclength = 0; + if(symbol->output_options & READER_INIT) { + chainemc[mclength] = 921; /* Reader Initialisation */ + mclength++; + } + for(i = 0; i < indexliste; i++) { + switch(liste[1][i]) { + case TEX: /* 547 - text mode */ + textprocess(chainemc, &mclength, (char*)chaine, indexchaine, liste[0][i], i); + break; + case BYT: /* 670 - octet stream mode */ + byteprocess(chainemc, &mclength, chaine, indexchaine, liste[0][i], i); + break; + case NUM: /* 712 - numeric mode */ + numbprocess(chainemc, &mclength, (char*)chaine, indexchaine, liste[0][i], i); + break; + } + indexchaine = indexchaine + liste[0][i]; + } + + /* This is where it all changes! */ + + if(mclength > 126) { + strcpy(symbol->errtxt, "Input data too long"); + return ERROR_TOO_LONG; + } + if(symbol->option_2 > 4) { + strcpy(symbol->errtxt, "Specified width out of range"); + symbol->option_2 = 0; + codeerr = WARN_INVALID_OPTION; + } + + if(debug) { + printf("\nEncoded Data Stream:\n"); + for(i = 0; i < mclength; i++) { + printf("0x%02X ", chainemc[i]); + } + printf("\n"); + } + + /* Now figure out which variant of the symbol to use and load values accordingly */ + + variant = 0; + + if((symbol->option_2 == 1) && (mclength > 20)) { + /* the user specified 1 column but the data doesn't fit - go to automatic */ + symbol->option_2 = 0; + strcpy(symbol->errtxt, "Specified symbol size too small for data"); + codeerr = WARN_INVALID_OPTION; + } + + if((symbol->option_2 == 2) && (mclength > 37)) { + /* the user specified 2 columns but the data doesn't fit - go to automatic */ + symbol->option_2 = 0; + strcpy(symbol->errtxt, "Specified symbol size too small for data"); + codeerr = WARN_INVALID_OPTION; + } + + if((symbol->option_2 == 3) && (mclength > 82)) { + /* the user specified 3 columns but the data doesn't fit - go to automatic */ + symbol->option_2 = 0; + strcpy(symbol->errtxt, "Specified symbol size too small for data"); + codeerr = WARN_INVALID_OPTION; + } + + if(symbol->option_2 == 1) { + /* the user specified 1 column and the data does fit */ + variant = 6; + if(mclength <= 16) { variant = 5; } + if(mclength <= 12) { variant = 4; } + if(mclength <= 10) { variant = 3; } + if(mclength <= 7) { variant = 2; } + if(mclength <= 4) { variant = 1; } + } + + if(symbol->option_2 == 2) { + /* the user specified 2 columns and the data does fit */ + variant = 13; + if(mclength <= 33) { variant = 12; } + if(mclength <= 29) { variant = 11; } + if(mclength <= 24) { variant = 10; } + if(mclength <= 19) { variant = 9; } + if(mclength <= 13) { variant = 8; } + if(mclength <= 8) { variant = 7; } + } + + if(symbol->option_2 == 3) { + /* the user specified 3 columns and the data does fit */ + variant = 23; + if(mclength <= 70) { variant = 22; } + if(mclength <= 58) { variant = 21; } + if(mclength <= 46) { variant = 20; } + if(mclength <= 34) { variant = 19; } + if(mclength <= 24) { variant = 18; } + if(mclength <= 18) { variant = 17; } + if(mclength <= 14) { variant = 16; } + if(mclength <= 10) { variant = 15; } + if(mclength <= 6) { variant = 14; } + } + + if(symbol->option_2 == 4) { + /* the user specified 4 columns and the data does fit */ + variant = 34; + if(mclength <= 108) { variant = 33; } + if(mclength <= 90) { variant = 32; } + if(mclength <= 72) { variant = 31; } + if(mclength <= 54) { variant = 30; } + if(mclength <= 39) { variant = 29; } + if(mclength <= 30) { variant = 28; } + if(mclength <= 24) { variant = 27; } + if(mclength <= 18) { variant = 26; } + if(mclength <= 12) { variant = 25; } + if(mclength <= 8) { variant = 24; } + } + + if(variant == 0) { + /* Zint can choose automatically from all available variations */ + for(i = 27; i >= 0; i--) { + + if(MicroAutosize[i] >= mclength) { + variant = MicroAutosize[i + 28]; + } + } + } + + /* Now we have the variant we can load the data */ + variant --; + symbol->option_2 = MicroVariants[variant]; /* columns */ + symbol->rows = MicroVariants[variant + 34]; /* rows */ + k = MicroVariants[variant + 68]; /* number of EC CWs */ + longueur = (symbol->option_2 * symbol->rows) - k; /* number of non-EC CWs */ + i = longueur - mclength; /* amount of padding required */ + offset = MicroVariants[variant + 102]; /* coefficient offset */ + + if(debug) { + printf("\nChoose symbol size:\n"); + printf("%d columns x %d rows\n", symbol->option_2, symbol->rows); + printf("%d data codewords (including %d pads), %d ecc codewords\n", longueur, i, k); + printf("\n"); + } + + /* We add the padding */ + while (i > 0) { + chainemc[mclength] = 900; + mclength++; + i--; + } + + /* Reed-Solomon error correction */ + longueur = mclength; + for(loop = 0; loop < 50; loop++) { + mccorrection[loop] = 0; + } + total = 0; + for(i = 0; i < longueur; i++) { + total = (chainemc[i] + mccorrection[k - 1]) % 929; + for(j = k - 1; j >= 0; j--) { + if(j == 0) { + mccorrection[j] = (929 - (total * Microcoeffs[offset + j]) % 929) % 929; + } else { + mccorrection[j] = (mccorrection[j - 1] + 929 - (total * Microcoeffs[offset + j]) % 929) % 929; + } + } + } + + for(j = 0; j < k; j++) { + if(mccorrection[j] != 0) { mccorrection[j] = 929 - mccorrection[j]; } + } + /* we add these codes to the string */ + for(i = k - 1; i >= 0; i--) { + chainemc[mclength] = mccorrection[i]; + mclength++; + } + + if(debug) { + printf("Encoded Data Stream with ECC:\n"); + for(i = 0; i < mclength; i++) { + printf("0x%02X ", chainemc[i]); + } + printf("\n"); + } + + /* Now get the RAP (Row Address Pattern) start values */ + LeftRAPStart = RAPTable[variant]; + CentreRAPStart = RAPTable[variant + 34]; + RightRAPStart = RAPTable[variant + 68]; + StartCluster = RAPTable[variant + 102] / 3; + + /* That's all values loaded, get on with the encoding */ + + LeftRAP = LeftRAPStart; + CentreRAP = CentreRAPStart; + RightRAP = RightRAPStart; + Cluster = StartCluster; /* Cluster can be 0, 1 or 2 for Cluster(0), Cluster(3) and Cluster(6) */ + + if(debug) printf("\nInternal row representation:\n"); + for(i = 0; i < symbol->rows; i++) { + if(debug) printf("row %d: ", i); + strcpy(codebarre, ""); + offset = 929 * Cluster; + for(j = 0; j < 5; j++) { + dummy[j] = 0; + } + for(j = 0; j < symbol->option_2 ; j++) { + dummy[j + 1] = chainemc[i * symbol->option_2 + j]; + if(debug) printf("[%d] ", dummy[j + 1]); + } + + /* Copy the data into codebarre */ + concat(codebarre, RAPLR[LeftRAP]); + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[1]]); + concat(codebarre, "1"); + if(symbol->option_2 == 3) { + concat(codebarre, RAPC[CentreRAP]); + } + if(symbol->option_2 >= 2) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[2]]); + concat(codebarre, "1"); + } + if(symbol->option_2 == 4) { + concat(codebarre, RAPC[CentreRAP]); + } + if(symbol->option_2 >= 3) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[3]]); + concat(codebarre, "1"); + } + if(symbol->option_2 == 4) { + concat(codebarre, "1"); + concat(codebarre, codagemc[offset + dummy[4]]); + concat(codebarre, "1"); + } + concat(codebarre, RAPLR[RightRAP]); + concat(codebarre, "1"); /* stop */ + if(debug) printf("%s\n", codebarre); + + /* Now codebarre is a mixture of letters and numbers */ + + writer = 0; + flip = 1; + strcpy(pattern, ""); + for(loop = 0; loop < strlen(codebarre); loop++) { + if((codebarre[loop] >= '0') && (codebarre[loop] <= '9')) { + for(k = 0; k < ctoi(codebarre[loop]); k++) { + if(flip == 0) { + pattern[writer] = '0'; + } else { + pattern[writer] = '1'; + } + writer++; + } + pattern[writer] = '\0'; + if(flip == 0) { + flip = 1; + } else { + flip = 0; + } + } else { + lookup(BRSET, PDFttf, codebarre[loop], pattern); + writer += 5; + } + } + symbol->width = writer; + + /* so now pattern[] holds the string of '1's and '0's. - copy this to the symbol */ + for(loop = 0; loop < strlen(pattern); loop++) { + if(pattern[loop] == '1') { set_module(symbol, i, loop); } + } + symbol->row_height[i] = 2; + + /* Set up RAPs and Cluster for next row */ + LeftRAP++; + CentreRAP++; + RightRAP++; + Cluster++; + + if(LeftRAP == 53) { + LeftRAP = 1; + } + if(CentreRAP == 53) { + CentreRAP = 1; + } + if(RightRAP == 53) { + RightRAP = 1; + } + if(Cluster == 3) { + Cluster = 0; + } + } + + return codeerr; +} + diff --git a/3rdparty/zint-2.4.4/backend/pdf417.h b/3rdparty/zint-2.4.4/backend/pdf417.h new file mode 100644 index 0000000..4e65ecf --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/pdf417.h @@ -0,0 +1,438 @@ +/* pdf417.h - PDF417 tables and coefficients */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + Portions Copyright (C) 2004 Grandzebu + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* this file contains the character table, the pre-calculated coefficients and the + codeword patterns taken from lines 416 to 454 of pdf417.frm */ + +#define TRUE 1 +#define FALSE 0 +#define TEX 900 +#define BYT 901 +#define NUM 902 + +#define BRSET "ABCDEFabcdefghijklmnopqrstuvwxyz*+-" + +/* PDF417 error correction coefficients from Grand Zebu */ +static int coefrs[1022] = { + /* k = 2 */ + 27, 917, + + /* k = 4 */ + 522, 568, 723, 809, + + /* k = 8 */ + 237, 308, 436, 284, 646, 653, 428, 379, + + /* k = 16 */ + 274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65, + + /* k = 32 */ + 361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, 517, + 273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410, + + /* k = 64 */ + 539, 422, 6, 93, 862, 771, 453, 106, 610, 287, 107, 505, 733, 877, 381, 612, + 723, 476, 462, 172, 430, 609, 858, 822, 543, 376, 511, 400, 672, 762, 283, 184, + 440, 35, 519, 31, 460, 594, 225, 535, 517, 352, 605, 158, 651, 201, 488, 502, + 648, 733, 717, 83, 404, 97, 280, 771, 840, 629, 4, 381, 843, 623, 264, 543, + + /* k = 128 */ + 521, 310, 864, 547, 858, 580, 296, 379, 53, 779, 897, 444, 400, 925, 749, 415, + 822, 93, 217, 208, 928, 244, 583, 620, 246, 148, 447, 631, 292, 908, 490, 704, + 516, 258, 457, 907, 594, 723, 674, 292, 272, 96, 684, 432, 686, 606, 860, 569, + 193, 219, 129, 186, 236, 287, 192, 775, 278, 173, 40, 379, 712, 463, 646, 776, + 171, 491, 297, 763, 156, 732, 95, 270, 447, 90, 507, 48, 228, 821, 808, 898, + 784, 663, 627, 378, 382, 262, 380, 602, 754, 336, 89, 614, 87, 432, 670, 616, + 157, 374, 242, 726, 600, 269, 375, 898, 845, 454, 354, 130, 814, 587, 804, 34, + 211, 330, 539, 297, 827, 865, 37, 517, 834, 315, 550, 86, 801, 4, 108, 539, + + /* k = 256 */ + 524, 894, 75, 766, 882, 857, 74, 204, 82, 586, 708, 250, 905, 786, 138, 720, + 858, 194, 311, 913, 275, 190, 375, 850, 438, 733, 194, 280, 201, 280, 828, 757, + 710, 814, 919, 89, 68, 569, 11, 204, 796, 605, 540, 913, 801, 700, 799, 137, + 439, 418, 592, 668, 353, 859, 370, 694, 325, 240, 216, 257, 284, 549, 209, 884, + 315, 70, 329, 793, 490, 274, 877, 162, 749, 812, 684, 461, 334, 376, 849, 521, + 307, 291, 803, 712, 19, 358, 399, 908, 103, 511, 51, 8, 517, 225, 289, 470, + 637, 731, 66, 255, 917, 269, 463, 830, 730, 433, 848, 585, 136, 538, 906, 90, + 2, 290, 743, 199, 655, 903, 329, 49, 802, 580, 355, 588, 188, 462, 10, 134, + 628, 320, 479, 130, 739, 71, 263, 318, 374, 601, 192, 605, 142, 673, 687, 234, + 722, 384, 177, 752, 607, 640, 455, 193, 689, 707, 805, 641, 48, 60, 732, 621, + 895, 544, 261, 852, 655, 309, 697, 755, 756, 60, 231, 773, 434, 421, 726, 528, + 503, 118, 49, 795, 32, 144, 500, 238, 836, 394, 280, 566, 319, 9, 647, 550, + 73, 914, 342, 126, 32, 681, 331, 792, 620, 60, 609, 441, 180, 791, 893, 754, + 605, 383, 228, 749, 760, 213, 54, 297, 134, 54, 834, 299, 922, 191, 910, 532, + 609, 829, 189, 20, 167, 29, 872, 449, 83, 402, 41, 656, 505, 579, 481, 173, + 404, 251, 688, 95, 497, 555, 642, 543, 307, 159, 924, 558, 648, 55, 497, 10, + + /* k = 512 */ + 352, 77, 373, 504, 35, 599, 428, 207, 409, 574, 118, 498, 285, 380, 350, 492, + 197, 265, 920, 155, 914, 299, 229, 643, 294, 871, 306, 88, 87, 193, 352, 781, + 846, 75, 327, 520, 435, 543, 203, 666, 249, 346, 781, 621, 640, 268, 794, 534, + 539, 781, 408, 390, 644, 102, 476, 499, 290, 632, 545, 37, 858, 916, 552, 41, + 542, 289, 122, 272, 383, 800, 485, 98, 752, 472, 761, 107, 784, 860, 658, 741, + 290, 204, 681, 407, 855, 85, 99, 62, 482, 180, 20, 297, 451, 593, 913, 142, + 808, 684, 287, 536, 561, 76, 653, 899, 729, 567, 744, 390, 513, 192, 516, 258, + 240, 518, 794, 395, 768, 848, 51, 610, 384, 168, 190, 826, 328, 596, 786, 303, + 570, 381, 415, 641, 156, 237, 151, 429, 531, 207, 676, 710, 89, 168, 304, 402, + 40, 708, 575, 162, 864, 229, 65, 861, 841, 512, 164, 477, 221, 92, 358, 785, + 288, 357, 850, 836, 827, 736, 707, 94, 8, 494, 114, 521, 2, 499, 851, 543, + 152, 729, 771, 95, 248, 361, 578, 323, 856, 797, 289, 51, 684, 466, 533, 820, + 669, 45, 902, 452, 167, 342, 244, 173, 35, 463, 651, 51, 699, 591, 452, 578, + 37, 124, 298, 332, 552, 43, 427, 119, 662, 777, 475, 850, 764, 364, 578, 911, + 283, 711, 472, 420, 245, 288, 594, 394, 511, 327, 589, 777, 699, 688, 43, 408, + 842, 383, 721, 521, 560, 644, 714, 559, 62, 145, 873, 663, 713, 159, 672, 729, + 624, 59, 193, 417, 158, 209, 563, 564, 343, 693, 109, 608, 563, 365, 181, 772, + 677, 310, 248, 353, 708, 410, 579, 870, 617, 841, 632, 860, 289, 536, 35, 777, + 618, 586, 424, 833, 77, 597, 346, 269, 757, 632, 695, 751, 331, 247, 184, 45, + 787, 680, 18, 66, 407, 369, 54, 492, 228, 613, 830, 922, 437, 519, 644, 905, + 789, 420, 305, 441, 207, 300, 892, 827, 141, 537, 381, 662, 513, 56, 252, 341, + 242, 797, 838, 837, 720, 224, 307, 631, 61, 87, 560, 310, 756, 665, 397, 808, + 851, 309, 473, 795, 378, 31, 647, 915, 459, 806, 590, 731, 425, 216, 548, 249, + 321, 881, 699, 535, 673, 782, 210, 815, 905, 303, 843, 922, 281, 73, 469, 791, + 660, 162, 498, 308, 155, 422, 907, 817, 187, 62, 16, 425, 535, 336, 286, 437, + 375, 273, 610, 296, 183, 923, 116, 667, 751, 353, 62, 366, 691, 379, 687, 842, + 37, 357, 720, 742, 330, 5, 39, 923, 311, 424, 242, 749, 321, 54, 669, 316, + 342, 299, 534, 105, 667, 488, 640, 672, 576, 540, 316, 486, 721, 610, 46, 656, + 447, 171, 616, 464, 190, 531, 297, 321, 762, 752, 533, 175, 134, 14, 381, 433, + 717, 45, 111, 20, 596, 284, 736, 138, 646, 411, 877, 669, 141, 919, 45, 780, + 407, 164, 332, 899, 165, 726, 600, 325, 498, 655, 357, 752, 768, 223, 849, 647, + 63, 310, 863, 251, 366, 304, 282, 738, 675, 410, 389, 244, 31, 121, 303, 263 }; + + +static char *codagemc[2787] = { "urA", "xfs", "ypy", "unk", "xdw", "yoz", "pDA", "uls", "pBk", "eBA", + "pAs", "eAk", "prA", "uvs", "xhy", "pnk", "utw", "xgz", "fDA", "pls", "fBk", "frA", "pvs", + "uxy", "fnk", "ptw", "uwz", "fls", "psy", "fvs", "pxy", "ftw", "pwz", "fxy", "yrx", "ufk", + "xFw", "ymz", "onA", "uds", "xEy", "olk", "ucw", "dBA", "oks", "uci", "dAk", "okg", "dAc", + "ovk", "uhw", "xaz", "dnA", "ots", "ugy", "dlk", "osw", "ugj", "dks", "osi", "dvk", "oxw", + "uiz", "dts", "owy", "dsw", "owj", "dxw", "oyz", "dwy", "dwj", "ofA", "uFs", "xCy", "odk", + "uEw", "xCj", "clA", "ocs", "uEi", "ckk", "ocg", "ckc", "ckE", "cvA", "ohs", "uay", "ctk", + "ogw", "uaj", "css", "ogi", "csg", "csa", "cxs", "oiy", "cww", "oij", "cwi", "cyy", "oFk", + "uCw", "xBj", "cdA", "oEs", "uCi", "cck", "oEg", "uCb", "ccc", "oEa", "ccE", "oED", "chk", + "oaw", "uDj", "cgs", "oai", "cgg", "oab", "cga", "cgD", "obj", "cib", "cFA", "oCs", "uBi", + "cEk", "oCg", "uBb", "cEc", "oCa", "cEE", "oCD", "cEC", "cas", "cag", "caa", "cCk", "uAr", + "oBa", "oBD", "cCB", "tfk", "wpw", "yez", "mnA", "tds", "woy", "mlk", "tcw", "woj", "FBA", + "mks", "FAk", "mvk", "thw", "wqz", "FnA", "mts", "tgy", "Flk", "msw", "Fks", "Fkg", "Fvk", + "mxw", "tiz", "Fts", "mwy", "Fsw", "Fsi", "Fxw", "myz", "Fwy", "Fyz", "vfA", "xps", "yuy", + "vdk", "xow", "yuj", "qlA", "vcs", "xoi", "qkk", "vcg", "xob", "qkc", "vca", "mfA", "tFs", + "wmy", "qvA", "mdk", "tEw", "wmj", "qtk", "vgw", "xqj", "hlA", "Ekk", "mcg", "tEb", "hkk", + "qsg", "hkc", "EvA", "mhs", "tay", "hvA", "Etk", "mgw", "taj", "htk", "qww", "vij", "hss", + "Esg", "hsg", "Exs", "miy", "hxs", "Eww", "mij", "hww", "qyj", "hwi", "Eyy", "hyy", "Eyj", + "hyj", "vFk", "xmw", "ytj", "qdA", "vEs", "xmi", "qck", "vEg", "xmb", "qcc", "vEa", "qcE", + "qcC", "mFk", "tCw", "wlj", "qhk", "mEs", "tCi", "gtA", "Eck", "vai", "tCb", "gsk", "Ecc", + "mEa", "gsc", "qga", "mED", "EcC", "Ehk", "maw", "tDj", "gxk", "Egs", "mai", "gws", "qii", + "mab", "gwg", "Ega", "EgD", "Eiw", "mbj", "gyw", "Eii", "gyi", "Eib", "gyb", "gzj", "qFA", + "vCs", "xli", "qEk", "vCg", "xlb", "qEc", "vCa", "qEE", "vCD", "qEC", "qEB", "EFA", "mCs", + "tBi", "ghA", "EEk", "mCg", "tBb", "ggk", "qag", "vDb", "ggc", "EEE", "mCD", "ggE", "qaD", + "ggC", "Eas", "mDi", "gis", "Eag", "mDb", "gig", "qbb", "gia", "EaD", "giD", "gji", "gjb", + "qCk", "vBg", "xkr", "qCc", "vBa", "qCE", "vBD", "qCC", "qCB", "ECk", "mBg", "tAr", "gak", + "ECc", "mBa", "gac", "qDa", "mBD", "gaE", "ECC", "gaC", "ECB", "EDg", "gbg", "gba", "gbD", + "vAq", "vAn", "qBB", "mAq", "EBE", "gDE", "gDC", "gDB", "lfA", "sps", "wey", "ldk", "sow", + "ClA", "lcs", "soi", "Ckk", "lcg", "Ckc", "CkE", "CvA", "lhs", "sqy", "Ctk", "lgw", "sqj", + "Css", "lgi", "Csg", "Csa", "Cxs", "liy", "Cww", "lij", "Cwi", "Cyy", "Cyj", "tpk", "wuw", + "yhj", "ndA", "tos", "wui", "nck", "tog", "wub", "ncc", "toa", "ncE", "toD", "lFk", "smw", + "wdj", "nhk", "lEs", "smi", "atA", "Cck", "tqi", "smb", "ask", "ngg", "lEa", "asc", "CcE", + "asE", "Chk", "law", "snj", "axk", "Cgs", "trj", "aws", "nii", "lab", "awg", "Cga", "awa", + "Ciw", "lbj", "ayw", "Cii", "ayi", "Cib", "Cjj", "azj", "vpA", "xus", "yxi", "vok", "xug", + "yxb", "voc", "xua", "voE", "xuD", "voC", "nFA", "tms", "wti", "rhA", "nEk", "xvi", "wtb", + "rgk", "vqg", "xvb", "rgc", "nEE", "tmD", "rgE", "vqD", "nEB", "CFA", "lCs", "sli", "ahA", + "CEk", "lCg", "slb", "ixA", "agk", "nag", "tnb", "iwk", "rig", "vrb", "lCD", "iwc", "agE", + "naD", "iwE", "CEB", "Cas", "lDi", "ais", "Cag", "lDb", "iys", "aig", "nbb", "iyg", "rjb", + "CaD", "aiD", "Cbi", "aji", "Cbb", "izi", "ajb", "vmk", "xtg", "ywr", "vmc", "xta", "vmE", + "xtD", "vmC", "vmB", "nCk", "tlg", "wsr", "rak", "nCc", "xtr", "rac", "vna", "tlD", "raE", + "nCC", "raC", "nCB", "raB", "CCk", "lBg", "skr", "aak", "CCc", "lBa", "iik", "aac", "nDa", + "lBD", "iic", "rba", "CCC", "iiE", "aaC", "CCB", "aaB", "CDg", "lBr", "abg", "CDa", "ijg", + "aba", "CDD", "ija", "abD", "CDr", "ijr", "vlc", "xsq", "vlE", "xsn", "vlC", "vlB", "nBc", + "tkq", "rDc", "nBE", "tkn", "rDE", "vln", "rDC", "nBB", "rDB", "CBc", "lAq", "aDc", "CBE", + "lAn", "ibc", "aDE", "nBn", "ibE", "rDn", "CBB", "ibC", "aDB", "ibB", "aDq", "ibq", "ibn", + "xsf", "vkl", "tkf", "nAm", "nAl", "CAo", "aBo", "iDo", "CAl", "aBl", "kpk", "BdA", "kos", + "Bck", "kog", "seb", "Bcc", "koa", "BcE", "koD", "Bhk", "kqw", "sfj", "Bgs", "kqi", "Bgg", + "kqb", "Bga", "BgD", "Biw", "krj", "Bii", "Bib", "Bjj", "lpA", "sus", "whi", "lok", "sug", + "loc", "sua", "loE", "suD", "loC", "BFA", "kms", "sdi", "DhA", "BEk", "svi", "sdb", "Dgk", + "lqg", "svb", "Dgc", "BEE", "kmD", "DgE", "lqD", "BEB", "Bas", "kni", "Dis", "Bag", "knb", + "Dig", "lrb", "Dia", "BaD", "Bbi", "Dji", "Bbb", "Djb", "tuk", "wxg", "yir", "tuc", "wxa", + "tuE", "wxD", "tuC", "tuB", "lmk", "stg", "nqk", "lmc", "sta", "nqc", "tva", "stD", "nqE", + "lmC", "nqC", "lmB", "nqB", "BCk", "klg", "Dak", "BCc", "str", "bik", "Dac", "lna", "klD", + "bic", "nra", "BCC", "biE", "DaC", "BCB", "DaB", "BDg", "klr", "Dbg", "BDa", "bjg", "Dba", + "BDD", "bja", "DbD", "BDr", "Dbr", "bjr", "xxc", "yyq", "xxE", "yyn", "xxC", "xxB", "ttc", + "wwq", "vvc", "xxq", "wwn", "vvE", "xxn", "vvC", "ttB", "vvB", "llc", "ssq", "nnc", "llE", + "ssn", "rrc", "nnE", "ttn", "rrE", "vvn", "llB", "rrC", "nnB", "rrB", "BBc", "kkq", "DDc", + "BBE", "kkn", "bbc", "DDE", "lln", "jjc", "bbE", "nnn", "BBB", "jjE", "rrn", "DDB", "jjC", + "BBq", "DDq", "BBn", "bbq", "DDn", "jjq", "bbn", "jjn", "xwo", "yyf", "xwm", "xwl", "tso", + "wwf", "vto", "xwv", "vtm", "tsl", "vtl", "lko", "ssf", "nlo", "lkm", "rno", "nlm", "lkl", + "rnm", "nll", "rnl", "BAo", "kkf", "DBo", "lkv", "bDo", "DBm", "BAl", "jbo", "bDm", "DBl", + "jbm", "bDl", "jbl", "DBv", "jbv", "xwd", "vsu", "vst", "nku", "rlu", "rlt", "DAu", "bBu", + "jDu", "jDt", "ApA", "Aok", "keg", "Aoc", "AoE", "AoC", "Aqs", "Aqg", "Aqa", "AqD", "Ari", + "Arb", "kuk", "kuc", "sha", "kuE", "shD", "kuC", "kuB", "Amk", "kdg", "Bqk", "kvg", "kda", + "Bqc", "kva", "BqE", "kvD", "BqC", "AmB", "BqB", "Ang", "kdr", "Brg", "kvr", "Bra", "AnD", + "BrD", "Anr", "Brr", "sxc", "sxE", "sxC", "sxB", "ktc", "lvc", "sxq", "sgn", "lvE", "sxn", + "lvC", "ktB", "lvB", "Alc", "Bnc", "AlE", "kcn", "Drc", "BnE", "AlC", "DrE", "BnC", "AlB", + "DrC", "BnB", "Alq", "Bnq", "Aln", "Drq", "Bnn", "Drn", "wyo", "wym", "wyl", "swo", "txo", + "wyv", "txm", "swl", "txl", "kso", "sgf", "lto", "swv", "nvo", "ltm", "ksl", "nvm", "ltl", + "nvl", "Ako", "kcf", "Blo", "ksv", "Dno", "Blm", "Akl", "bro", "Dnm", "Bll", "brm", "Dnl", + "Akv", "Blv", "Dnv", "brv", "yze", "yzd", "wye", "xyu", "wyd", "xyt", "swe", "twu", "swd", + "vxu", "twt", "vxt", "kse", "lsu", "ksd", "ntu", "lst", "rvu", "ypk", "zew", "xdA", "yos", + "zei", "xck", "yog", "zeb", "xcc", "yoa", "xcE", "yoD", "xcC", "xhk", "yqw", "zfj", "utA", + "xgs", "yqi", "usk", "xgg", "yqb", "usc", "xga", "usE", "xgD", "usC", "uxk", "xiw", "yrj", + "ptA", "uws", "xii", "psk", "uwg", "xib", "psc", "uwa", "psE", "uwD", "psC", "pxk", "uyw", + "xjj", "ftA", "pws", "uyi", "fsk", "pwg", "uyb", "fsc", "pwa", "fsE", "pwD", "fxk", "pyw", + "uzj", "fws", "pyi", "fwg", "pyb", "fwa", "fyw", "pzj", "fyi", "fyb", "xFA", "yms", "zdi", + "xEk", "ymg", "zdb", "xEc", "yma", "xEE", "ymD", "xEC", "xEB", "uhA", "xas", "yni", "ugk", + "xag", "ynb", "ugc", "xaa", "ugE", "xaD", "ugC", "ugB", "oxA", "uis", "xbi", "owk", "uig", + "xbb", "owc", "uia", "owE", "uiD", "owC", "owB", "dxA", "oys", "uji", "dwk", "oyg", "ujb", + "dwc", "oya", "dwE", "oyD", "dwC", "dys", "ozi", "dyg", "ozb", "dya", "dyD", "dzi", "dzb", + "xCk", "ylg", "zcr", "xCc", "yla", "xCE", "ylD", "xCC", "xCB", "uak", "xDg", "ylr", "uac", + "xDa", "uaE", "xDD", "uaC", "uaB", "oik", "ubg", "xDr", "oic", "uba", "oiE", "ubD", "oiC", + "oiB", "cyk", "ojg", "ubr", "cyc", "oja", "cyE", "ojD", "cyC", "cyB", "czg", "ojr", "cza", + "czD", "czr", "xBc", "ykq", "xBE", "ykn", "xBC", "xBB", "uDc", "xBq", "uDE", "xBn", "uDC", + "uDB", "obc", "uDq", "obE", "uDn", "obC", "obB", "cjc", "obq", "cjE", "obn", "cjC", "cjB", + "cjq", "cjn", "xAo", "ykf", "xAm", "xAl", "uBo", "xAv", "uBm", "uBl", "oDo", "uBv", "oDm", + "oDl", "cbo", "oDv", "cbm", "cbl", "xAe", "xAd", "uAu", "uAt", "oBu", "oBt", "wpA", "yes", + "zFi", "wok", "yeg", "zFb", "woc", "yea", "woE", "yeD", "woC", "woB", "thA", "wqs", "yfi", + "tgk", "wqg", "yfb", "tgc", "wqa", "tgE", "wqD", "tgC", "tgB", "mxA", "tis", "wri", "mwk", + "tig", "wrb", "mwc", "tia", "mwE", "tiD", "mwC", "mwB", "FxA", "mys", "tji", "Fwk", "myg", + "tjb", "Fwc", "mya", "FwE", "myD", "FwC", "Fys", "mzi", "Fyg", "mzb", "Fya", "FyD", "Fzi", + "Fzb", "yuk", "zhg", "hjs", "yuc", "zha", "hbw", "yuE", "zhD", "hDy", "yuC", "yuB", "wmk", + "ydg", "zEr", "xqk", "wmc", "zhr", "xqc", "yva", "ydD", "xqE", "wmC", "xqC", "wmB", "xqB", + "tak", "wng", "ydr", "vik", "tac", "wna", "vic", "xra", "wnD", "viE", "taC", "viC", "taB", + "viB", "mik", "tbg", "wnr", "qyk", "mic", "tba", "qyc", "vja", "tbD", "qyE", "miC", "qyC", + "miB", "qyB", "Eyk", "mjg", "tbr", "hyk", "Eyc", "mja", "hyc", "qza", "mjD", "hyE", "EyC", + "hyC", "EyB", "Ezg", "mjr", "hzg", "Eza", "hza", "EzD", "hzD", "Ezr", "ytc", "zgq", "grw", + "ytE", "zgn", "gny", "ytC", "glz", "ytB", "wlc", "ycq", "xnc", "wlE", "ycn", "xnE", "ytn", + "xnC", "wlB", "xnB", "tDc", "wlq", "vbc", "tDE", "wln", "vbE", "xnn", "vbC", "tDB", "vbB", + "mbc", "tDq", "qjc", "mbE", "tDn", "qjE", "vbn", "qjC", "mbB", "qjB", "Ejc", "mbq", "gzc", + "EjE", "mbn", "gzE", "qjn", "gzC", "EjB", "gzB", "Ejq", "gzq", "Ejn", "gzn", "yso", "zgf", + "gfy", "ysm", "gdz", "ysl", "wko", "ycf", "xlo", "ysv", "xlm", "wkl", "xll", "tBo", "wkv", + "vDo", "tBm", "vDm", "tBl", "vDl", "mDo", "tBv", "qbo", "vDv", "qbm", "mDl", "qbl", "Ebo", + "mDv", "gjo", "Ebm", "gjm", "Ebl", "gjl", "Ebv", "gjv", "yse", "gFz", "ysd", "wke", "xku", + "wkd", "xkt", "tAu", "vBu", "tAt", "vBt", "mBu", "qDu", "mBt", "qDt", "EDu", "gbu", "EDt", + "gbt", "ysF", "wkF", "xkh", "tAh", "vAx", "mAx", "qBx", "wek", "yFg", "zCr", "wec", "yFa", + "weE", "yFD", "weC", "weB", "sqk", "wfg", "yFr", "sqc", "wfa", "sqE", "wfD", "sqC", "sqB", + "lik", "srg", "wfr", "lic", "sra", "liE", "srD", "liC", "liB", "Cyk", "ljg", "srr", "Cyc", + "lja", "CyE", "ljD", "CyC", "CyB", "Czg", "ljr", "Cza", "CzD", "Czr", "yhc", "zaq", "arw", + "yhE", "zan", "any", "yhC", "alz", "yhB", "wdc", "yEq", "wvc", "wdE", "yEn", "wvE", "yhn", + "wvC", "wdB", "wvB", "snc", "wdq", "trc", "snE", "wdn", "trE", "wvn", "trC", "snB", "trB", + "lbc", "snq", "njc", "lbE", "snn", "njE", "trn", "njC", "lbB", "njB", "Cjc", "lbq", "azc", + "CjE", "lbn", "azE", "njn", "azC", "CjB", "azB", "Cjq", "azq", "Cjn", "azn", "zio", "irs", + "rfy", "zim", "inw", "rdz", "zil", "ily", "ikz", "ygo", "zaf", "afy", "yxo", "ziv", "ivy", + "adz", "yxm", "ygl", "itz", "yxl", "wco", "yEf", "wto", "wcm", "xvo", "yxv", "wcl", "xvm", + "wtl", "xvl", "slo", "wcv", "tno", "slm", "vro", "tnm", "sll", "vrm", "tnl", "vrl", "lDo", + "slv", "nbo", "lDm", "rjo", "nbm", "lDl", "rjm", "nbl", "rjl", "Cbo", "lDv", "ajo", "Cbm", + "izo", "ajm", "Cbl", "izm", "ajl", "izl", "Cbv", "ajv", "zie", "ifw", "rFz", "zid", "idy", + "icz", "yge", "aFz", "ywu", "ygd", "ihz", "ywt", "wce", "wsu", "wcd", "xtu", "wst", "xtt", + "sku", "tlu", "skt", "vnu", "tlt", "vnt", "lBu", "nDu", "lBt", "rbu", "nDt", "rbt", "CDu", + "abu", "CDt", "iju", "abt", "ijt", "ziF", "iFy", "iEz", "ygF", "ywh", "wcF", "wsh", "xsx", + "skh", "tkx", "vlx", "lAx", "nBx", "rDx", "CBx", "aDx", "ibx", "iCz", "wFc", "yCq", "wFE", + "yCn", "wFC", "wFB", "sfc", "wFq", "sfE", "wFn", "sfC", "sfB", "krc", "sfq", "krE", "sfn", + "krC", "krB", "Bjc", "krq", "BjE", "krn", "BjC", "BjB", "Bjq", "Bjn", "yao", "zDf", "Dfy", + "yam", "Ddz", "yal", "wEo", "yCf", "who", "wEm", "whm", "wEl", "whl", "sdo", "wEv", "svo", + "sdm", "svm", "sdl", "svl", "kno", "sdv", "lro", "knm", "lrm", "knl", "lrl", "Bbo", "knv", + "Djo", "Bbm", "Djm", "Bbl", "Djl", "Bbv", "Djv", "zbe", "bfw", "npz", "zbd", "bdy", "bcz", + "yae", "DFz", "yiu", "yad", "bhz", "yit", "wEe", "wgu", "wEd", "wxu", "wgt", "wxt", "scu", + "stu", "sct", "tvu", "stt", "tvt", "klu", "lnu", "klt", "nru", "lnt", "nrt", "BDu", "Dbu", + "BDt", "bju", "Dbt", "bjt", "jfs", "rpy", "jdw", "roz", "jcy", "jcj", "zbF", "bFy", "zjh", + "jhy", "bEz", "jgz", "yaF", "yih", "yyx", "wEF", "wgh", "wwx", "xxx", "sch", "ssx", "ttx", + "vvx", "kkx", "llx", "nnx", "rrx", "BBx", "DDx", "bbx", "jFw", "rmz", "jEy", "jEj", "bCz", + "jaz", "jCy", "jCj", "jBj", "wCo", "wCm", "wCl", "sFo", "wCv", "sFm", "sFl", "kfo", "sFv", + "kfm", "kfl", "Aro", "kfv", "Arm", "Arl", "Arv", "yDe", "Bpz", "yDd", "wCe", "wau", "wCd", + "wat", "sEu", "shu", "sEt", "sht", "kdu", "kvu", "kdt", "kvt", "Anu", "Bru", "Ant", "Brt", + "zDp", "Dpy", "Doz", "yDF", "ybh", "wCF", "wah", "wix", "sEh", "sgx", "sxx", "kcx", "ktx", + "lvx", "Alx", "Bnx", "Drx", "bpw", "nuz", "boy", "boj", "Dmz", "bqz", "jps", "ruy", "jow", + "ruj", "joi", "job", "bmy", "jqy", "bmj", "jqj", "jmw", "rtj", "jmi", "jmb", "blj", "jnj", + "jli", "jlb", "jkr", "sCu", "sCt", "kFu", "kFt", "Afu", "Aft", "wDh", "sCh", "sax", "kEx", + "khx", "Adx", "Avx", "Buz", "Duy", "Duj", "buw", "nxj", "bui", "bub", "Dtj", "bvj", "jus", + "rxi", "jug", "rxb", "jua", "juD", "bti", "jvi", "btb", "jvb", "jtg", "rwr", "jta", "jtD", + "bsr", "jtr", "jsq", "jsn", "Bxj", "Dxi", "Dxb", "bxg", "nyr", "bxa", "bxD", "Dwr", "bxr", + "bwq", "bwn", "pjk", "urw", "ejA", "pbs", "uny", "ebk", "pDw", "ulz", "eDs", "pBy", "eBw", + "zfc", "fjk", "prw", "zfE", "fbs", "pny", "zfC", "fDw", "plz", "zfB", "fBy", "yrc", "zfq", + "frw", "yrE", "zfn", "fny", "yrC", "flz", "yrB", "xjc", "yrq", "xjE", "yrn", "xjC", "xjB", + "uzc", "xjq", "uzE", "xjn", "uzC", "uzB", "pzc", "uzq", "pzE", "uzn", "pzC", "djA", "ors", + "ufy", "dbk", "onw", "udz", "dDs", "oly", "dBw", "okz", "dAy", "zdo", "drs", "ovy", "zdm", + "dnw", "otz", "zdl", "dly", "dkz", "yno", "zdv", "dvy", "ynm", "dtz", "ynl", "xbo", "ynv", + "xbm", "xbl", "ujo", "xbv", "ujm", "ujl", "ozo", "ujv", "ozm", "ozl", "crk", "ofw", "uFz", + "cns", "ody", "clw", "ocz", "cky", "ckj", "zcu", "cvw", "ohz", "zct", "cty", "csz", "ylu", + "cxz", "ylt", "xDu", "xDt", "ubu", "ubt", "oju", "ojt", "cfs", "oFy", "cdw", "oEz", "ccy", + "ccj", "zch", "chy", "cgz", "ykx", "xBx", "uDx", "cFw", "oCz", "cEy", "cEj", "caz", "cCy", + "cCj", "FjA", "mrs", "tfy", "Fbk", "mnw", "tdz", "FDs", "mly", "FBw", "mkz", "FAy", "zFo", + "Frs", "mvy", "zFm", "Fnw", "mtz", "zFl", "Fly", "Fkz", "yfo", "zFv", "Fvy", "yfm", "Ftz", + "yfl", "wro", "yfv", "wrm", "wrl", "tjo", "wrv", "tjm", "tjl", "mzo", "tjv", "mzm", "mzl", + "qrk", "vfw", "xpz", "hbA", "qns", "vdy", "hDk", "qlw", "vcz", "hBs", "qky", "hAw", "qkj", + "hAi", "Erk", "mfw", "tFz", "hrk", "Ens", "mdy", "hns", "qty", "mcz", "hlw", "Eky", "hky", + "Ekj", "hkj", "zEu", "Evw", "mhz", "zhu", "zEt", "hvw", "Ety", "zht", "hty", "Esz", "hsz", + "ydu", "Exz", "yvu", "ydt", "hxz", "yvt", "wnu", "xru", "wnt", "xrt", "tbu", "vju", "tbt", + "vjt", "mju", "mjt", "grA", "qfs", "vFy", "gnk", "qdw", "vEz", "gls", "qcy", "gkw", "qcj", + "gki", "gkb", "Efs", "mFy", "gvs", "Edw", "mEz", "gtw", "qgz", "gsy", "Ecj", "gsj", "zEh", + "Ehy", "zgx", "gxy", "Egz", "gwz", "ycx", "ytx", "wlx", "xnx", "tDx", "vbx", "mbx", "gfk", + "qFw", "vCz", "gds", "qEy", "gcw", "qEj", "gci", "gcb", "EFw", "mCz", "ghw", "EEy", "ggy", + "EEj", "ggj", "Eaz", "giz", "gFs", "qCy", "gEw", "qCj", "gEi", "gEb", "ECy", "gay", "ECj", + "gaj", "gCw", "qBj", "gCi", "gCb", "EBj", "gDj", "gBi", "gBb", "Crk", "lfw", "spz", "Cns", + "ldy", "Clw", "lcz", "Cky", "Ckj", "zCu", "Cvw", "lhz", "zCt", "Cty", "Csz", "yFu", "Cxz", + "yFt", "wfu", "wft", "sru", "srt", "lju", "ljt", "arA", "nfs", "tpy", "ank", "ndw", "toz", + "als", "ncy", "akw", "ncj", "aki", "akb", "Cfs", "lFy", "avs", "Cdw", "lEz", "atw", "ngz", + "asy", "Ccj", "asj", "zCh", "Chy", "zax", "axy", "Cgz", "awz", "yEx", "yhx", "wdx", "wvx", + "snx", "trx", "lbx", "rfk", "vpw", "xuz", "inA", "rds", "voy", "ilk", "rcw", "voj", "iks", + "rci", "ikg", "rcb", "ika", "afk", "nFw", "tmz", "ivk", "ads", "nEy", "its", "rgy", "nEj", + "isw", "aci", "isi", "acb", "isb", "CFw", "lCz", "ahw", "CEy", "ixw", "agy", "CEj", "iwy", + "agj", "iwj", "Caz", "aiz", "iyz", "ifA", "rFs", "vmy", "idk", "rEw", "vmj", "ics", "rEi", + "icg", "rEb", "ica", "icD", "aFs", "nCy", "ihs", "aEw", "nCj", "igw", "raj", "igi", "aEb", + "igb", "CCy", "aay", "CCj", "iiy", "aaj", "iij", "iFk", "rCw", "vlj", "iEs", "rCi", "iEg", + "rCb", "iEa", "iED", "aCw", "nBj", "iaw", "aCi", "iai", "aCb", "iab", "CBj", "aDj", "ibj", + "iCs", "rBi", "iCg", "rBb", "iCa", "iCD", "aBi", "iDi", "aBb", "iDb", "iBg", "rAr", "iBa", + "iBD", "aAr", "iBr", "iAq", "iAn", "Bfs", "kpy", "Bdw", "koz", "Bcy", "Bcj", "Bhy", "Bgz", + "yCx", "wFx", "sfx", "krx", "Dfk", "lpw", "suz", "Dds", "loy", "Dcw", "loj", "Dci", "Dcb", + "BFw", "kmz", "Dhw", "BEy", "Dgy", "BEj", "Dgj", "Baz", "Diz", "bfA", "nps", "tuy", "bdk", + "now", "tuj", "bcs", "noi", "bcg", "nob", "bca", "bcD", "DFs", "lmy", "bhs", "DEw", "lmj", + "bgw", "DEi", "bgi", "DEb", "bgb", "BCy", "Day", "BCj", "biy", "Daj", "bij", "rpk", "vuw", + "xxj", "jdA", "ros", "vui", "jck", "rog", "vub", "jcc", "roa", "jcE", "roD", "jcC", "bFk", + "nmw", "ttj", "jhk", "bEs", "nmi", "jgs", "rqi", "nmb", "jgg", "bEa", "jga", "bED", "jgD", + "DCw", "llj", "baw", "DCi", "jiw", "bai", "DCb", "jii", "bab", "jib", "BBj", "DDj", "bbj", + "jjj", "jFA", "rms", "vti", "jEk", "rmg", "vtb", "jEc", "rma", "jEE", "rmD", "jEC", "jEB", + "bCs", "nli", "jas", "bCg", "nlb", "jag", "rnb", "jaa", "bCD", "jaD", "DBi", "bDi", "DBb", + "jbi", "bDb", "jbb", "jCk", "rlg", "vsr", "jCc", "rla", "jCE", "rlD", "jCC", "jCB", "bBg", + "nkr", "jDg", "bBa", "jDa", "bBD", "jDD", "DAr", "bBr", "jDr", "jBc", "rkq", "jBE", "rkn", + "jBC", "jBB", "bAq", "jBq", "bAn", "jBn", "jAo", "rkf", "jAm", "jAl", "bAf", "jAv", "Apw", + "kez", "Aoy", "Aoj", "Aqz", "Bps", "kuy", "Bow", "kuj", "Boi", "Bob", "Amy", "Bqy", "Amj", + "Bqj", "Dpk", "luw", "sxj", "Dos", "lui", "Dog", "lub", "Doa", "DoD", "Bmw", "ktj", "Dqw", + "Bmi", "Dqi", "Bmb", "Dqb", "Alj", "Bnj", "Drj", "bpA", "nus", "txi", "bok", "nug", "txb", + "boc", "nua", "boE", "nuD", "boC", "boB", "Dms", "lti", "bqs", "Dmg", "ltb", "bqg", "nvb", + "bqa", "DmD", "bqD", "Bli", "Dni", "Blb", "bri", "Dnb", "brb", "ruk", "vxg", "xyr", "ruc", + "vxa", "ruE", "vxD", "ruC", "ruB", "bmk", "ntg", "twr", "jqk", "bmc", "nta", "jqc", "rva", + "ntD", "jqE", "bmC", "jqC", "bmB", "jqB", "Dlg", "lsr", "bng", "Dla", "jrg", "bna", "DlD", + "jra", "bnD", "jrD", "Bkr", "Dlr", "bnr", "jrr", "rtc", "vwq", "rtE", "vwn", "rtC", "rtB", + "blc", "nsq", "jnc", "blE", "nsn", "jnE", "rtn", "jnC", "blB", "jnB", "Dkq", "blq", "Dkn", + "jnq", "bln", "jnn", "rso", "vwf", "rsm", "rsl", "bko", "nsf", "jlo", "bkm", "jlm", "bkl", + "jll", "Dkf", "bkv", "jlv", "rse", "rsd", "bke", "jku", "bkd", "jkt", "Aey", "Aej", "Auw", + "khj", "Aui", "Aub", "Adj", "Avj", "Bus", "kxi", "Bug", "kxb", "Bua", "BuD", "Ati", "Bvi", + "Atb", "Bvb", "Duk", "lxg", "syr", "Duc", "lxa", "DuE", "lxD", "DuC", "DuB", "Btg", "kwr", + "Dvg", "lxr", "Dva", "BtD", "DvD", "Asr", "Btr", "Dvr", "nxc", "tyq", "nxE", "tyn", "nxC", + "nxB", "Dtc", "lwq", "bvc", "nxq", "lwn", "bvE", "DtC", "bvC", "DtB", "bvB", "Bsq", "Dtq", + "Bsn", "bvq", "Dtn", "bvn", "vyo", "xzf", "vym", "vyl", "nwo", "tyf", "rxo", "nwm", "rxm", + "nwl", "rxl", "Dso", "lwf", "bto", "Dsm", "jvo", "btm", "Dsl", "jvm", "btl", "jvl", "Bsf", + "Dsv", "btv", "jvv", "vye", "vyd", "nwe", "rwu", "nwd", "rwt", "Dse", "bsu", "Dsd", "jtu", + "bst", "jtt", "vyF", "nwF", "rwh", "DsF", "bsh", "jsx", "Ahi", "Ahb", "Axg", "kir", "Axa", + "AxD", "Agr", "Axr", "Bxc", "kyq", "BxE", "kyn", "BxC", "BxB", "Awq", "Bxq", "Awn", "Bxn", + "lyo", "szf", "lym", "lyl", "Bwo", "kyf", "Dxo", "lyv", "Dxm", "Bwl", "Dxl", "Awf", "Bwv", + "Dxv", "tze", "tzd", "lye", "nyu", "lyd", "nyt", "Bwe", "Dwu", "Bwd", "bxu", "Dwt", "bxt", + "tzF", "lyF", "nyh", "BwF", "Dwh", "bwx", "Aiq", "Ain", "Ayo", "kjf", "Aym", "Ayl", "Aif", + "Ayv", "kze", "kzd", "Aye", "Byu", "Ayd", "Byt", "szp" }; + +/* converts values into bar patterns - replacing Grand Zebu's true type font */ +static char *PDFttf[35] = { "00000", "00001", "00010", "00011", "00100", "00101", "00110", "00111", + "01000", "01001", "01010", "01011", "01100", "01101", "01110", "01111", "10000", "10001", + "10010", "10011", "10100", "10101", "10110", "10111", "11000", "11001", "11010", + "11011", "11100", "11101", "11110", "11111", "01", "1111111101010100", "11111101000101001"}; + +/* MicroPDF417 coefficients from ISO/IEC 24728:2006 Annex F */ +static int Microcoeffs[344] = { + /* k = 7 */ + 76, 925, 537, 597, 784, 691, 437, + + /* k = 8 */ + 237, 308, 436, 284, 646, 653, 428, 379, + + /* k = 9 */ + 567, 527, 622, 257, 289, 362, 501, 441, 205, + + /* k = 10 */ + 377, 457, 64, 244, 826, 841, 818, 691, 266, 612, + + /* k = 11 */ + 462, 45, 565, 708, 825, 213, 15, 68, 327, 602, 904, + + /* k = 12 */ + 597, 864, 757, 201, 646, 684, 347, 127, 388, 7, 69, 851, + + /* k = 13 */ + 764, 713, 342, 384, 606, 583, 322, 592, 678, 204, 184, 394, 692, + + /* k = 14 */ + 669, 677, 154, 187, 241, 286, 274, 354, 478, 915, 691, 833, 105, 215, + + /* k = 15 */ + 460, 829, 476, 109, 904, 664, 230, 5, 80, 74, 550, 575, 147, 868, 642, + + /* k = 16 */ + 274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, 42, 176, 65, + + /* k = 18 */ + 279, 577, 315, 624, 37, 855, 275, 739, 120, 297, 312, 202, 560, 321, 233, 756, + 760, 573, + + /* k = 21 */ + 108, 519, 781, 534, 129, 425, 681, 553, 422, 716, 763, 693, 624, 610, 310, 691, + 347, 165, 193, 259, 568, + + /* k = 26 */ + 443, 284, 887, 544, 788, 93, 477, 760, 331, 608, 269, 121, 159, 830, 446, 893, + 699, 245, 441, 454, 325, 858, 131, 847, 764, 169, + + /* k = 32 */ + 361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, 284, 193, 517, + 273, 494, 263, 147, 593, 800, 571, 320, 803, 133, 231, 390, 685, 330, 63, 410, + + /* k = 38 */ + 234, 228, 438, 848, 133, 703, 529, 721, 788, 322, 280, 159, 738, 586, 388, 684, + 445, 680, 245, 595, 614, 233, 812, 32, 284, 658, 745, 229, 95, 689, 920, 771, + 554, 289, 231, 125, 117, 518, + + /* k = 44 */ + 476, 36, 659, 848, 678, 64, 764, 840, 157, 915, 470, 876, 109, 25, 632, 405, + 417, 436, 714, 60, 376, 97, 413, 706, 446, 21, 3, 773, 569, 267, 272, 213, + 31, 560, 231, 758, 103, 271, 572, 436, 339, 730, 82, 285, + + /* k = 50 */ + 923, 797, 576, 875, 156, 706, 63, 81, 257, 874, 411, 416, 778, 50, 205, 303, + 188, 535, 909, 155, 637, 230, 534, 96, 575, 102, 264, 233, 919, 593, 865, 26, + 579, 623, 766, 146, 10, 739, 246, 127, 71, 244, 211, 477, 920, 876, 427, 820, + 718, 435 }; + +/* rows, columns, error codewords, k-offset of valid MicroPDF417 sizes from ISO/IEC 24728:2006 */ +static int MicroVariants[170] = +{ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 11, 14, 17, 20, 24, 28, 8, 11, 14, 17, 20, 23, 26, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, 4, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, + 7, 7, 7, 8, 8, 8, 8, 9, 9, 10, 11, 13, 15, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, 8, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, + 0, 0, 0, 7, 7, 7, 7, 15, 15, 24, 34, 57, 84, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294, 7, 45, 70, 99, 115, 133, 154, 180, 212, 250, 294 }; +/* rows, columns, error codewords, k-offset */ + +/* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24728:2006 tables 10, 11 and 12 */ +static int RAPTable[136] = +{ 1, 8, 36, 19, 9, 25, 1, 1, 8, 36, 19, 9, 27, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, 47, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, 19, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, + 9, 8, 36, 19, 17, 33, 1, 9, 8, 36, 19, 17, 35, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, 43, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, + 0, 3, 6, 0, 6, 0, 0, 0, 3, 6, 0, 6, 6, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0, 3, 0, 0, 6, 0, 0, 0, 0, 6, 6, 0 }; + +/* Left and Right Row Address Pattern from Table 2 */ +static char *RAPLR[53] = {"", "221311", "311311", "312211", "222211", "213211", "214111", "223111", + "313111", "322111", "412111", "421111", "331111", "241111", "232111", "231211", "321211", + "411211", "411121", "411112", "321112", "312112", "311212", "311221", "311131", "311122", + "311113", "221113", "221122", "221131", "221221", "222121", "312121", "321121", "231121", + "231112", "222112", "213112", "212212", "212221", "212131", "212122", "212113", "211213", + "211123", "211132", "211141", "211231", "211222", "211312", "211321", "211411", "212311" }; + +/* Centre Row Address Pattern from Table 2 */ +static char *RAPC[53] = {"", "112231", "121231", "122131", "131131", "131221", "132121", "141121", + "141211", "142111", "133111", "132211", "131311", "122311", "123211", "124111", "115111", + "114211", "114121", "123121", "123112", "122212", "122221", "121321", "121411", "112411", + "113311", "113221", "113212", "113122", "122122", "131122", "131113", "122113", "113113", + "112213", "112222", "112312", "112321", "111421", "111331", "111322", "111232", "111223", + "111133", "111124", "111214", "112114", "121114", "121123", "121132", "112132", "112141" }; + +void byteprocess(int *chainemc, int *mclength, unsigned char chaine[], int start, int length, int block); \ No newline at end of file diff --git a/3rdparty/zint-2.4.4/backend/plessey.c b/3rdparty/zint-2.4.4/backend/plessey.c new file mode 100644 index 0000000..3c4cb5f --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/plessey.c @@ -0,0 +1,498 @@ +/* plessey.c - Handles Plessey and MSI Plessey */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include "common.h" + + +#define SSET "0123456789ABCDEF" +static char *PlessTable[16] = {"13131313", "31131313", "13311313", "31311313", "13133113", "31133113", + "13313113", "31313113", "13131331", "31131331", "13311331", "31311331", "13133131", + "31133131", "13313131", "31313131"}; + +static char *MSITable[10] = {"12121212", "12121221", "12122112", "12122121", "12211212", "12211221", + "12212112", "12212121", "21121212", "21121221"}; + + +int plessey(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Not MSI/Plessey but the older Plessey standard */ + + unsigned int i, check; + unsigned char *checkptr; + static char grid[9] = {1,1,1,1,0,1,0,0,1}; + char dest[1024]; /* 8 + 65 * 8 + 8 * 2 + 9 + 1 ~ 1024 */ + int error_number; + + error_number = 0; + + if(length > 65) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(SSET, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + checkptr = (unsigned char *)calloc (1, length * 4 + 8); + + /* Start character */ + strcpy(dest, "31311331"); + + /* Data area */ + for(i = 0; i < length; i++) + { + check = posn(SSET, source[i]); + lookup(SSET, PlessTable, source[i], dest); + checkptr[4*i] = check & 1; + checkptr[4*i+1] = (check >> 1) & 1; + checkptr[4*i+2] = (check >> 2) & 1; + checkptr[4*i+3] = (check >> 3) & 1; + } + + /* CRC check digit code adapted from code by Leonid A. Broukhis + used in GNU Barcode */ + + for (i = 0; i < (4 * length); i++) { + int j; + if (checkptr[i]) + for (j = 0; j < 9; j++) + checkptr[i+j] ^= grid[j]; + } + + for (i = 0; i < 8; i++) { + switch(checkptr[length * 4 + i]) + { + case 0: concat(dest, "13"); break; + case 1: concat(dest, "31"); break; + } + } + + /* Stop character */ + concat(dest, "331311313"); + + expand(symbol, dest); + ustrcpy(symbol->text, source); + free(checkptr); + return error_number; +} + +int msi_plessey(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Plain MSI Plessey - does not calculate any check character */ + + unsigned int i; + char dest[512]; /* 2 + 55 * 8 + 3 + 1 ~ 512 */ + + if(length > 55) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* start character */ + strcpy(dest, "21"); + + for(i = 0; i < length; i++) + { + lookup(NEON, MSITable, source[i], dest); + } + + /* Stop character */ + concat (dest, "121"); + + expand(symbol, dest); + ustrcpy(symbol->text, source); + return 0; +} + +int msi_plessey_mod10(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* MSI Plessey with Modulo 10 check digit - algorithm from Barcode Island + http://www.barcodeisland.com/ */ + + int i; + unsigned long wright, dau, pedwar, pump, n; + char un[200], tri[32]; + int error_number, h; + char dest[1000]; + + error_number = 0; + + if(length > 18) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* start character */ + strcpy(dest, "21"); + + /* draw data section */ + for(i = 0; i < length; i++) + { + lookup(NEON, MSITable, source[i], dest); + } + + /* caluculate check digit */ + wright = 0; + n = !(length & 1); + for(i = n; i < length; i += 2) + { + un[wright++] = source[i]; + } + un[wright] = '\0'; + + dau = strtoul(un, NULL, 10); + dau *= 2; + + sprintf(tri, "%ld", dau); + + pedwar = 0; + h = strlen(tri); + for(i = 0; i < h; i++) + { + pedwar += ctoi(tri[i]); + } + + n = length & 1; + for(i = n; i < length; i+=2) + { + pedwar += ctoi(source[i]); + } + + pump = (10 - pedwar % 10); + if(pump == 10) + { + pump = 0; + } + + /* draw check digit */ + lookup(NEON, MSITable, itoc(pump), dest); + + /* Stop character */ + concat (dest, "121"); + expand(symbol, dest); + + ustrcpy(symbol->text, source); + symbol->text[length] = itoc(pump); + symbol->text[length + 1] = '\0'; + return error_number; +} + +int msi_plessey_mod1010(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) +{ /* MSI Plessey with two Modulo 10 check digits - algorithm from + Barcode Island http://www.barcodeisland.com/ */ + + unsigned long i, n, wright, dau, pedwar, pump, chwech; + char un[16], tri[32]; + int error_number, h; + char dest[1000]; + + error_number = 0; + + if(src_len > 18) { /* No Entry Stack Smashers! limit because of str->number conversion*/ + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* start character */ + strcpy(dest, "21"); + + /* draw data section */ + for(i = 0; i < src_len; i++) + { + lookup(NEON, MSITable, source[i], dest); + } + + /* calculate first check digit */ + wright = 0; + + n = !(src_len & 1); + for(i = n; i < src_len; i += 2) + { + un[wright++] = source[i]; + } + un[wright] = '\0'; + + dau = strtoul(un, NULL, 10); + dau *= 2; + + sprintf(tri, "%ld", dau); + + pedwar = 0; + h = strlen(tri); + for(i = 0; i < h; i++) + { + pedwar += ctoi(tri[i]); + } + + n = src_len & 1; + for(i = n; i < src_len; i += 2) + { + pedwar += ctoi(source[i]); + } + + pump = 10 - pedwar % 10; + if(pump == 10) + { + pump = 0; + } + + /* calculate second check digit */ + wright = 0; + n = src_len & 1; + for(i = n; i < src_len; i += 2) + { + un[wright++] = source[i]; + } + un[wright++] = itoc(pump); + un[wright] = '\0'; + + dau = strtoul(un, NULL, 10); + dau *= 2; + + sprintf(tri, "%ld", dau); + + pedwar = 0; + h = strlen(tri); + for(i = 0; i < h; i++) + { + pedwar += ctoi(tri[i]); + } + + + i = !(src_len & 1); + for(; i < src_len; i += 2) + { + pedwar += ctoi(source[i]); + } + + chwech = 10 - pedwar % 10; + if(chwech == 10) + { + chwech = 0; + } + + /* Draw check digits */ + lookup(NEON, MSITable, itoc(pump), dest); + lookup(NEON, MSITable, itoc(chwech), dest); + + /* Stop character */ + concat (dest, "121"); + + expand(symbol, dest); + + ustrcpy(symbol->text, source); + symbol->text[src_len] = itoc(pump); + symbol->text[src_len + 1] = itoc(chwech); + symbol->text[src_len + 2] = '\0'; + + return error_number; +} + + +int msi_plessey_mod11(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) +{ + /* Calculate a Modulo 11 check digit using the system discussed on Wikipedia - + see http://en.wikipedia.org/wiki/Talk:MSI_Barcode */ + /* uses the IBM weight system */ + + int i, weight, x, check; + int error_number; + char dest[1000]; + + error_number = 0; + + if(src_len > 55) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* start character */ + strcpy(dest, "21"); + + /* draw data section */ + for(i = 0; i < src_len; i++) + { + lookup(NEON, MSITable, source[i], dest); + } + + /* calculate check digit */ + x = 0; + weight = 2; + for(i = src_len - 1; i >= 0; i--) { + x += weight * ctoi(source[i]); + weight++; + if(weight > 7) { + weight = 2; + } + } + + check = (11 - (x % 11)) % 11; + if(check == 10) { + lookup(NEON, MSITable, '1', dest); + lookup(NEON, MSITable, '0', dest); + } else { + lookup(NEON, MSITable, itoc(check), dest); + } + + /* stop character */ + concat (dest, "121"); + + expand(symbol, dest); + + ustrcpy(symbol->text, source); + if(check == 10) { + concat((char* )symbol->text, "10"); + } else { + symbol->text[src_len] = itoc(check); + symbol->text[src_len + 1] = '\0'; + } + + return error_number; +} + +int msi_plessey_mod1110(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len) +{ + /* Combining the Barcode Island and Wikipedia code */ + /* Verified against http://www.bokai.com/BarcodeJSP/applet/BarcodeSampleApplet.htm */ + /* Weighted using the IBM system */ + + int i; + unsigned long weight, x, check, wright, dau, pedwar, pump, h; + char un[16], tri[16]; + int error_number; + char dest[1000]; + unsigned char temp[32]; + unsigned int temp_len; + + error_number = 0; + + if(src_len > 18) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* start character */ + strcpy(dest, "21"); + + /* draw data section */ + for(i = 0; i < src_len; i++) + { + lookup(NEON, MSITable, source[i], dest); + } + + /* calculate first (mod 11) digit */ + x = 0; + weight = 2; + for(i = src_len - 1; i >= 0; i--) { + x += weight * ctoi(source[i]); + weight++; + if(weight > 7) { + weight = 2; + } + } + + check = (11 - (x % 11)) % 11; + ustrcpy(temp, source); + temp_len = src_len; + if(check == 10) { + lookup(NEON, MSITable, '1', dest); + lookup(NEON, MSITable, '0', dest); + uconcat(temp, (unsigned char *)"10"); + temp_len += 2; + } else { + lookup(NEON, MSITable, itoc(check), dest); + temp[temp_len++] = itoc(check); + temp[temp_len] = '\0'; + } + + /* caluculate second (mod 10) check digit */ + wright = 0; + i = !(temp_len & 1); + for(; i < temp_len; i += 2) + { + un[wright++] = temp[i]; + } + un[wright] = '\0'; + + dau = strtoul(un, NULL, 10); + dau *= 2; + + sprintf(tri, "%ld", dau); + + pedwar = 0; + h = strlen(tri); + for(i = 0; i < h; i++) + { + pedwar += ctoi(tri[i]); + } + + i = temp_len & 1; + for(; i < temp_len; i+=2) + { + pedwar += ctoi(temp[i]); + } + + pump = 10 - pedwar % 10; + if(pump == 10) + { + pump = 0; + } + + /* draw check digit */ + lookup(NEON, MSITable, itoc(pump), dest); + + /* stop character */ + concat (dest, "121"); + expand(symbol, dest); + + temp[temp_len++] = itoc(pump); + temp[temp_len] = '\0'; + + + ustrcpy(symbol->text, temp); + return error_number; +} + +int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length) { + int error_number; + + error_number = is_sane(NEON, source, length); + if(error_number != 0) { + strcpy(symbol->errtxt, "Invalid characters in input data"); + return ERROR_INVALID_DATA1; + } + + + if((symbol->option_2 < 0) || (symbol->option_2 > 4)) { + symbol->option_2 = 0; + } + + switch(symbol->option_2) { + case 0: error_number = msi_plessey(symbol, source, length); break; + case 1: error_number = msi_plessey_mod10(symbol, source, length); break; + case 2: error_number = msi_plessey_mod1010(symbol, source, length); break; + case 3: error_number = msi_plessey_mod11(symbol, source, length); break; + case 4: error_number = msi_plessey_mod1110(symbol, source, length); break; + } + + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/png.c b/3rdparty/zint-2.4.4/backend/png.c new file mode 100644 index 0000000..251df8b --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/png.c @@ -0,0 +1,1146 @@ +/* png.c - Handles output to PNG file */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#ifdef _MSC_VER +#include +#include +#endif +#include +#include +#include "common.h" + +#ifdef _MSC_VER +#include +#endif /* _MSC_VER */ + +#ifndef NO_PNG +#include "png.h" /* libpng header; includes zlib.h and setjmp.h */ +#endif /* NO_PNG */ +#include "maxipng.h" /* Maxicode shapes */ + +#include "font.h" /* Font for human readable text */ + +#define SSET "0123456789ABCDEF" + +#define PNG_DATA 100 +#define BMP_DATA 200 + +#ifndef NO_PNG +struct mainprog_info_type { + long width; + long height; + FILE *outfile; + jmp_buf jmpbuf; +}; + +static void writepng_error_handler(png_structp png_ptr, png_const_charp msg) +{ + struct mainprog_info_type *graphic; + + fprintf(stderr, "writepng libpng error: %s\n", msg); + fflush(stderr); + + graphic = (struct mainprog_info_type*)png_get_error_ptr(png_ptr); + if (graphic == NULL) { /* we are completely hosed now */ + fprintf(stderr, + "writepng severe error: jmpbuf not recoverable; terminating.\n"); + fflush(stderr); + return; + } + longjmp(graphic->jmpbuf, 1); +} + +int png_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width, char *pixelbuf, int rotate_angle) +{ + struct mainprog_info_type wpng_info; + struct mainprog_info_type *graphic; + +#ifndef _MSC_VER + unsigned char outdata[image_width * 3]; +#else + unsigned char* outdata = (unsigned char*)_alloca(image_width * 3); +#endif + png_structp png_ptr; + png_infop info_ptr; + graphic = &wpng_info; + unsigned long rowbytes; + unsigned char *image_data; + int i, row, column, errno; + int fgred, fggrn, fgblu, bgred, bggrn, bgblu; + + switch(rotate_angle) { + case 0: + case 180: + graphic->width = image_width; + graphic->height = image_height; + break; + case 90: + case 270: + graphic->width = image_height; + graphic->height = image_width; + break; + } + + /* sort out colour options */ + to_upper((unsigned char*)symbol->fgcolour); + to_upper((unsigned char*)symbol->bgcolour); + + if(strlen(symbol->fgcolour) != 6) { + strcpy(symbol->errtxt, "Malformed foreground colour target"); + return ERROR_INVALID_OPTION; + } + if(strlen(symbol->bgcolour) != 6) { + strcpy(symbol->errtxt, "Malformed background colour target"); + return ERROR_INVALID_OPTION; + } + errno = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour)); + if (errno == ERROR_INVALID_DATA) { + strcpy(symbol->errtxt, "Malformed foreground colour target"); + return ERROR_INVALID_OPTION; + } + errno = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->bgcolour)); + if (errno == ERROR_INVALID_DATA) { + strcpy(symbol->errtxt, "Malformed background colour target"); + return ERROR_INVALID_OPTION; + } + + fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); + fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); + fgblu = (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]); + bgred = (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]); + bggrn = (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]); + bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); + + /* Open output file in binary mode */ + if((symbol->output_options & BARCODE_STDOUT) != 0) { +#ifdef _MSC_VER + if (-1 == _setmode(_fileno(stdout), _O_BINARY)) { + strcpy(symbol->errtxt, "Can't open output file"); + return ERROR_FILE_ACCESS; + } +#endif + graphic->outfile = stdout; + } else { + if (!(graphic->outfile = fopen(symbol->outfile, "wb"))) { + strcpy(symbol->errtxt, "Can't open output file"); + return ERROR_FILE_ACCESS; + } + } + + /* Set up error handling routine as proc() above */ + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, graphic, writepng_error_handler, NULL); + if (!png_ptr) { + strcpy(symbol->errtxt, "Out of memory"); + return ERROR_MEMORY; + } + + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + png_destroy_write_struct(&png_ptr, NULL); + strcpy(symbol->errtxt, "Out of memory"); + return ERROR_MEMORY; + } + + /* catch jumping here */ + if (setjmp(graphic->jmpbuf)) { + png_destroy_write_struct(&png_ptr, &info_ptr); + strcpy(symbol->errtxt, "libpng error occurred"); + return ERROR_MEMORY; + } + + /* open output file with libpng */ + png_init_io(png_ptr, graphic->outfile); + + /* set compression */ + png_set_compression_level(png_ptr, Z_BEST_COMPRESSION); + + /* set Header block */ + png_set_IHDR(png_ptr, info_ptr, graphic->width, graphic->height, + 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + + /* write all chunks up to (but not including) first IDAT */ + png_write_info(png_ptr, info_ptr); + + /* set up the transformations: for now, just pack low-bit-depth pixels + into bytes (one, two or four pixels per byte) */ + png_set_packing(png_ptr); + + /* set rowbytes - depends on picture depth */ + rowbytes = wpng_info.width * 3; + + /* Pixel Plotting */ + + switch(rotate_angle) { + case 0: /* Plot the right way up */ + for(row = 0; row < image_height; row++) { + for(column = 0; column < image_width; column++) { + i = column * 3; + switch(*(pixelbuf + (image_width * row) + column)) + { + case '1': + outdata[i] = fgred; + outdata[i + 1] = fggrn; + outdata[i + 2] = fgblu; + break; + default: + outdata[i] = bgred; + outdata[i + 1] = bggrn; + outdata[i + 2] = bgblu; + break; + + } + } + /* write row contents to file */ + image_data = outdata; + png_write_row(png_ptr, image_data); + } + break; + case 90: /* Plot 90 degrees clockwise */ + for(row = 0; row < image_width; row++) { + for(column = 0; column < image_height; column++) { + i = column * 3; + switch(*(pixelbuf + (image_width * (image_height - column - 1)) + row)) + { + case '1': + outdata[i] = fgred; + outdata[i + 1] = fggrn; + outdata[i + 2] = fgblu; + break; + default: + outdata[i] = bgred; + outdata[i + 1] = bggrn; + outdata[i + 2] = bgblu; + break; + + } + } + + /* write row contents to file */ + image_data = outdata; + png_write_row(png_ptr, image_data); + } + break; + case 180: /* Plot upside down */ + for(row = 0; row < image_height; row++) { + for(column = 0; column < image_width; column++) { + i = column * 3; + switch(*(pixelbuf + (image_width * (image_height - row - 1)) + (image_width - column - 1))) + { + case '1': + outdata[i] = fgred; + outdata[i + 1] = fggrn; + outdata[i + 2] = fgblu; + break; + default: + outdata[i] = bgred; + outdata[i + 1] = bggrn; + outdata[i + 2] = bgblu; + break; + + } + } + + /* write row contents to file */ + image_data = outdata; + png_write_row(png_ptr, image_data); + } + break; + case 270: /* Plot 90 degrees anti-clockwise */ + for(row = 0; row < image_width; row++) { + for(column = 0; column < image_height; column++) { + i = column * 3; + switch(*(pixelbuf + (image_width * column) + (image_width - row - 1))) + { + case '1': + outdata[i] = fgred; + outdata[i + 1] = fggrn; + outdata[i + 2] = fgblu; + break; + default: + outdata[i] = bgred; + outdata[i + 1] = bggrn; + outdata[i + 2] = bgblu; + break; + + } + } + + /* write row contents to file */ + image_data = outdata; + png_write_row(png_ptr, image_data); + } + break; + } + + /* End the file */ + png_write_end(png_ptr, NULL); + + /* make sure we have disengaged */ + if (png_ptr && info_ptr) png_destroy_write_struct(&png_ptr, &info_ptr); + fclose(wpng_info.outfile); + return 0; +} +#endif /* NO_PNG */ + +int bmp_pixel_plot(struct zint_symbol *symbol, int image_height, int image_width, char *pixelbuf, int rotate_angle) +{ + unsigned long rowbytes; + int i, row, column, errno; + int fgred, fggrn, fgblu, bgred, bggrn, bgblu; + + switch(rotate_angle) { + case 0: + case 180: + symbol->bitmap_width = image_width; + symbol->bitmap_height = image_height; + break; + case 90: + case 270: + symbol->bitmap_width = image_height; + symbol->bitmap_height = image_width; + break; + } + + if (symbol->bitmap != NULL) + free(symbol->bitmap); + + symbol->bitmap = (char *) malloc(image_width * image_height * 3); + + + /* sort out colour options */ + to_upper((unsigned char*)symbol->fgcolour); + to_upper((unsigned char*)symbol->bgcolour); + + if(strlen(symbol->fgcolour) != 6) { + strcpy(symbol->errtxt, "Malformed foreground colour target"); + return ERROR_INVALID_OPTION; + } + if(strlen(symbol->bgcolour) != 6) { + strcpy(symbol->errtxt, "Malformed background colour target"); + return ERROR_INVALID_OPTION; + } + errno = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour)); + if (errno == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Malformed foreground colour target"); + return ERROR_INVALID_OPTION; + } + errno = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->fgcolour)); + if (errno == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Malformed background colour target"); + return ERROR_INVALID_OPTION; + } + + fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); + fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); + fgblu = (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]); + bgred = (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]); + bggrn = (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]); + bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); + + /* set rowbytes - depends on picture depth */ + rowbytes = symbol->bitmap_width * 3; + + /* Pixel Plotting */ + i = 0; + switch(rotate_angle) { + case 0: /* Plot the right way up */ + for(row = 0; row < image_height; row++) { + for(column = 0; column < image_width; column++) { + switch(*(pixelbuf + (image_width * row) + column)) + { + case '1': + symbol->bitmap[i++] = fgred; + symbol->bitmap[i++] = fggrn; + symbol->bitmap[i++] = fgblu; + break; + default: + symbol->bitmap[i++] = bgred; + symbol->bitmap[i++] = bggrn; + symbol->bitmap[i++] = bgblu; + break; + + } + } + } + break; + case 90: /* Plot 90 degrees clockwise */ + for(row = 0; row < image_width; row++) { + for(column = 0; column < image_height; column++) { + switch(*(pixelbuf + (image_width * (image_height - column - 1)) + row)) + { + case '1': + symbol->bitmap[i++] = fgred; + symbol->bitmap[i++] = fggrn; + symbol->bitmap[i++] = fgblu; + break; + default: + symbol->bitmap[i++] = bgred; + symbol->bitmap[i++] = bggrn; + symbol->bitmap[i++] = bgblu; + break; + + } + } + } + break; + case 180: /* Plot upside down */ + for(row = 0; row < image_height; row++) { + for(column = 0; column < image_width; column++) { + switch(*(pixelbuf + (image_width * (image_height - row - 1)) + (image_width - column - 1))) + { + case '1': + symbol->bitmap[i++] = fgred; + symbol->bitmap[i++] = fggrn; + symbol->bitmap[i++] = fgblu; + break; + default: + symbol->bitmap[i++] = bgred; + symbol->bitmap[i++] = bggrn; + symbol->bitmap[i++] = bgblu; + break; + + } + } + } + break; + case 270: /* Plot 90 degrees anti-clockwise */ + for(row = 0; row < image_width; row++) { + for(column = 0; column < image_height; column++) { + switch(*(pixelbuf + (image_width * column) + (image_width - row - 1))) + { + case '1': + symbol->bitmap[i++] = fgred; + symbol->bitmap[i++] = fggrn; + symbol->bitmap[i++] = fgblu; + break; + default: + symbol->bitmap[i++] = bgred; + symbol->bitmap[i++] = bggrn; + symbol->bitmap[i++] = bgblu; + break; + + } + } + } + break; + } + + return 0; +} + +int png_to_file(struct zint_symbol *symbol, int image_height, int image_width, char *pixelbuf, int rotate_angle, int image_type) +{ + int error_number; + float scaler = symbol->scale; + char *scaled_pixelbuf; + int horiz, vert, i; + int scale_width, scale_height; + + if(scaler == 0) { scaler = 0.5; } + scale_width = image_width * scaler; + scale_height = image_height * scaler; + + /* Apply scale options by creating another pixel buffer */ + if (!(scaled_pixelbuf = (char *) malloc(scale_width * scale_height))) { + printf("Insufficient memory for pixel buffer"); + return ERROR_ENCODING_PROBLEM; + } else { + for(i = 0; i < (scale_width * scale_height); i++) { + *(scaled_pixelbuf + i) = '0'; + } + } + + for(vert = 0; vert < scale_height; vert++) { + for(horiz = 0; horiz < scale_width; horiz++) { + *(scaled_pixelbuf + (vert * scale_width) + horiz) = *(pixelbuf + ((int)(vert / scaler) * image_width) + (int)(horiz / scaler)); + } + } + + if(image_type == PNG_DATA) { +#ifndef NO_PNG + error_number = png_pixel_plot(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle); +#else + return ERROR_INVALID_OPTION; +#endif + } else { + error_number = bmp_pixel_plot(symbol, scale_height, scale_width, scaled_pixelbuf, rotate_angle); + } + + free(scaled_pixelbuf); + + return error_number; +} + +void draw_bar(char *pixelbuf, int xpos, int xlen, int ypos, int ylen, int image_width, int image_height) +{ + /* Draw a rectangle */ + int i, j, png_ypos; + + png_ypos = image_height - ypos - ylen; + /* This fudge is needed because EPS measures height from the bottom up but + PNG measures y position from the top down */ + + for(i = (xpos); i < (xpos + xlen); i++) { + for( j = (png_ypos); j < (png_ypos + ylen); j++) { + *(pixelbuf + (image_width * j) + i) = '1'; + } + } +} + +int bullseye_pixel(int row, int col) { + int block_val, block_pos, return_val; + + block_val = bullseye_compressed[(row * 12) + (col / 8)]; + return_val = 0; + block_pos = col % 8; + + switch(block_pos) { + case 0: if((block_val & 0x80) != 0) { return_val = 1; } break; + case 1: if((block_val & 0x40) != 0) { return_val = 1; } break; + case 2: if((block_val & 0x20) != 0) { return_val = 1; } break; + case 3: if((block_val & 0x10) != 0) { return_val = 1; } break; + case 4: if((block_val & 0x08) != 0) { return_val = 1; } break; + case 5: if((block_val & 0x04) != 0) { return_val = 1; } break; + case 6: if((block_val & 0x02) != 0) { return_val = 1; } break; + case 7: if((block_val & 0x01) != 0) { return_val = 1; } break; + } + + return return_val; +} + +void draw_bullseye(char *pixelbuf, int image_width, int xoffset, int yoffset) +{ + /* Central bullseye in Maxicode symbols */ + int i, j; + + for(j = 103; j < 196; j++) { + for(i = 0; i < 93; i++) { + if(bullseye_pixel(j - 103, i)) { + /* if(bullseye[(((j - 103) * 93) + i)] == 1) { */ + *(pixelbuf + (image_width * j) + (image_width * yoffset) + i + 99 + xoffset) = '1'; + } + } + } +} + +void draw_hexagon(char *pixelbuf, int image_width, int xposn, int yposn) +{ + /* Put a hexagon into the pixel buffer */ + int i, j; + + for(i = 0; i < 12; i++) { + for(j = 0; j < 10; j++) { + if(hexagon[(i * 10) + j] == 1) { + *(pixelbuf + (image_width * i) + (image_width * yposn) + xposn + j) = '1'; + } + } + } +} + +void draw_letter(char *pixelbuf, unsigned char letter, int xposn, int yposn, int smalltext, int image_width, int image_height) +{ + /* Put a letter into a position */ + int skip, i, j, glyph_no, alphabet; + + skip = 0; + alphabet = 0; + + if(letter < 33) { skip = 1; } + if((letter > 127) && (letter < 161)) { skip = 1; } + + if(skip == 0) { + if(letter > 128) { + alphabet = 1; + glyph_no = letter - 161; + } else { + glyph_no = letter - 33; + } + + if(smalltext) { + for(i = 0; i <= 8; i++) { + for(j = 0; j < 5; j++) { + if(alphabet == 0) { + if(small_font[(glyph_no * 5) + (i * 475) + j - 1] == 1) { + *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } + } else { + if(small_font_extended[(glyph_no * 5) + (i * 475) + j - 1] == 1) { + *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } + } + } + } + } else { + for(i = 0; i <= 13; i++) { + for(j = 0; j < 7 ; j++) { + if(alphabet == 0) { + if(ascii_font[(glyph_no * 7) + (i * 665) + j - 1] == 1) { + *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } + } else { + if(ascii_ext_font[(glyph_no * 7) + (i * 665) + j - 1] == 1) { + *(pixelbuf + (i * image_width) + (yposn * image_width) + xposn + j) = '1'; + } + } + } + } + } + } +} + +void draw_string(char *pixbuf, char input_string[], int xposn, int yposn, int smalltext, int image_width, int image_height) +{ + /* Plot a string into the pixel buffer */ + int i, string_length, string_left_hand; + + string_length = strlen(input_string); + string_left_hand = xposn - ((7 * string_length) / 2); + + for(i = 0; i < string_length; i++) { + draw_letter(pixbuf, input_string[i], string_left_hand + (i * 7), yposn, smalltext, image_width, image_height); + } + +} + +int maxi_png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) +{ + int i, row, column, xposn, yposn; + int image_height, image_width; + char *pixelbuf; + int error_number; + int xoffset, yoffset; + + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + image_width = 300 + (2 * xoffset * 2); + image_height = 300 + (2 * yoffset * 2); + + if (!(pixelbuf = (char *) malloc(image_width * image_height))) { + printf("Insifficient memory for pixel buffer"); + return ERROR_ENCODING_PROBLEM; + } else { + for(i = 0; i < (image_width * image_height); i++) { + *(pixelbuf + i) = '0'; + } + } + + draw_bullseye(pixelbuf, image_width, (2 * xoffset), (2 * yoffset)); + + for(row = 0; row < symbol->rows; row++) { + yposn = row * 9; + for(column = 0; column < symbol->width; column++) { + xposn = column * 10; + if(module_is_set(symbol, row, column)) { + if(row & 1) { + /* Odd (reduced) row */ + xposn += 5; + draw_hexagon(pixelbuf, image_width, xposn + (2 * xoffset), yposn + (2 * yoffset)); + } else { + /* Even (full) row */ + draw_hexagon(pixelbuf, image_width, xposn + (2 * xoffset), yposn + (2 * yoffset)); + } + } + } + } + + if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + /* boundary bars */ + draw_bar(pixelbuf, 0, image_width, 0, symbol->border_width * 2, image_width, image_height); + draw_bar(pixelbuf, 0, image_width, 300 + (symbol->border_width * 2), symbol->border_width * 2, image_width, image_height); + } + + if((symbol->output_options & BARCODE_BOX) != 0) { + /* side bars */ + draw_bar(pixelbuf, 0, symbol->border_width * 2, 0, image_height, image_width, image_height); + draw_bar(pixelbuf, 300 + ((symbol->border_width + symbol->whitespace_width + symbol->whitespace_width) * 2), symbol->border_width * 2, 0, image_height, image_width, image_height); + } + + error_number=png_to_file(symbol, image_height, image_width, pixelbuf, rotate_angle, data_type); + free(pixelbuf); + return error_number; +} + +void to_latin1(unsigned char source[], unsigned char preprocessed[]) +{ + int j, i, input_length; + + input_length = ustrlen(source); + + j = 0; + i = 0; + do { + if(source[i] < 128) { + preprocessed[j] = source[i]; + j++; + i++; + } else { + if(source[i] == 0xC2) { + preprocessed[j] = source[i + 1]; + j++; + i += 2; + } + if(source[i] == 0xC3) { + preprocessed[j] = source[i + 1] + 64; + j++; + i += 2; + } + } + } while (i < input_length); + preprocessed[j] = '\0'; + + return; +} + +int png_plot(struct zint_symbol *symbol, int rotate_angle, int data_type) +{ + int textdone, main_width, comp_offset, large_bar_count; + char textpart[10], addon[6]; + float addon_text_posn, preset_height, large_bar_height; + int i, r, textoffset, yoffset, xoffset, latch, image_width, image_height; + char *pixelbuf; + int addon_latch = 0, smalltext = 0; + int this_row, block_width, plot_height, plot_yposn, textpos; + float row_height, row_posn; + int error_number; + int default_text_posn; + int next_yposn; +#ifndef _MSC_VER + unsigned char local_text[ustrlen(symbol->text) + 1]; +#else + unsigned char* local_text = (unsigned char*)_alloca(ustrlen(symbol->text) + 1); +#endif + + if(symbol->show_hrt != 0) { + to_latin1(symbol->text, local_text); + } else { + local_text[0] = '\0'; + } + + textdone = 0; + main_width = symbol->width; + strcpy(addon, ""); + comp_offset = 0; + addon_text_posn = 0.0; + row_height = 0; + if(symbol->output_options & SMALL_TEXT) { + smalltext = 1; + } + + if (symbol->height == 0) { + symbol->height = 50; + } + + large_bar_count = 0; + preset_height = 0.0; + for(i = 0; i < symbol->rows; i++) { + preset_height += symbol->row_height[i]; + if(symbol->row_height[i] == 0) { + large_bar_count++; + } + } + + if (large_bar_count == 0) { + symbol->height = preset_height; + large_bar_height = 10; + } else { + large_bar_height = (symbol->height - preset_height) / large_bar_count; + } + + while(!(module_is_set(symbol, symbol->rows - 1, comp_offset))) { + comp_offset++; + } + + /* Certain symbols need whitespace otherwise characters get chopped off the sides */ + if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) + || (symbol->symbology == BARCODE_ISBNX)) { + switch(ustrlen(local_text)) { + case 13: /* EAN 13 */ + case 16: + case 19: + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + } + main_width = 96 + comp_offset; + break; + default: + main_width = 68 + comp_offset; + } + } + + if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) { + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + main_width = 96 + comp_offset; + } + } + + if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) { + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + main_width = 51 + comp_offset; + } + } + + latch = 0; + r = 0; + /* Isolate add-on text */ + if(is_extendable(symbol->symbology)) { + for(i = 0; i < ustrlen(local_text); i++) { + if (latch == 1) { + addon[r] = local_text[i]; + r++; + } + if (symbol->text[i] == '+') { + latch = 1; + } + } + } + addon[r] = '\0'; + + if(ustrlen(local_text) != 0) { + textoffset = 9; + } else { + textoffset = 0; + } + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + image_width = 2 * (symbol->width + xoffset + xoffset); + image_height = 2 * (symbol->height + textoffset + yoffset + yoffset); + + if (!(pixelbuf = (char *) malloc(image_width * image_height))) { + printf("Insufficient memory for pixel buffer"); + return ERROR_ENCODING_PROBLEM; + } else { + for(i = 0; i < (image_width * image_height); i++) { + *(pixelbuf + i) = '0'; + } + } + + if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + default_text_posn = image_height - 17; + } else { + default_text_posn = image_height - 17 - symbol->border_width - symbol->border_width; + } + + row_posn = textoffset + yoffset; + next_yposn = textoffset + yoffset; + row_height = 0; + + /* Plot the body of the symbol to the pixel buffer */ + for(r = 0; r < symbol->rows; r++) { + this_row = symbol->rows - r - 1; /* invert r otherwise plots upside down */ + row_posn += row_height; + plot_yposn = next_yposn; + if(symbol->row_height[this_row] == 0) { + row_height = large_bar_height; + } else { + row_height = symbol->row_height[this_row]; + } + next_yposn = (int)(row_posn + row_height); + plot_height = next_yposn - plot_yposn; + + i = 0; + if(module_is_set(symbol, this_row, 0)) { + latch = 1; + } else { + latch = 0; + } + + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); + if((addon_latch == 0) && (r == 0) && (i > main_width)) { + plot_height = (int)(row_height - 5.0); + plot_yposn = (int)(row_posn - 5.0); + addon_text_posn = row_posn + row_height - 8.0; + addon_latch = 1; + } + if(latch == 1) { + /* a bar */ + draw_bar(pixelbuf, (i + xoffset) * 2, block_width * 2, plot_yposn * 2, plot_height * 2, image_width, image_height); + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + + } while (i < symbol->width); + } + + xoffset += comp_offset; + + if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) || (symbol->symbology == BARCODE_ISBNX)) { + /* guard bar extensions and text formatting for EAN8 and EAN13 */ + switch(ustrlen(local_text)) { + case 8: /* EAN-8 */ + case 11: + case 14: + draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (32 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (34 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (64 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (66 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + for(i = 0; i < 4; i++) { + textpart[i] = symbol->text[i]; + } + textpart[4] = '\0'; + textpos = 2 * (17 + xoffset); + + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + for(i = 0; i < 4; i++) { + textpart[i] = symbol->text[i + 4]; + } + textpart[4] = '\0'; + textpos = 2 * (50 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = 2 * (xoffset + 86); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); + break; + case 5: + textpos = 2 * (xoffset + 100); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); + break; + } + + break; + case 13: /* EAN 13 */ + case 16: + case 19: + draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (92 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (94 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = 2 * (-7 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + textpos = 2 * (24 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 7]; + } + textpart[6] = '\0'; + textpos = 2 * (71 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = 2 * (xoffset + 114); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); + break; + case 5: + textpos = 2 * (xoffset + 128); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); + break; + } + break; + + } + } + + if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) { + /* guard bar extensions and text formatting for UPCA */ + latch = 1; + + i = 0 + comp_offset; + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); + if(latch == 1) { + /* a bar */ + draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + } while (i < 11 + comp_offset); + draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + latch = 1; + i = 85 + comp_offset; + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); + if(latch == 1) { + /* a bar */ + draw_bar(pixelbuf, (i + xoffset - comp_offset) * 2, block_width * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + } while (i < 96 + comp_offset); + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = 2 * (-5 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + for(i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[5] = '\0'; + textpos = 2 * (27 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + for(i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 6]; + } + textpart[6] = '\0'; + textpos = 2 * (68 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + textpart[0] = symbol->text[11]; + textpart[1] = '\0'; + textpos = 2 * (100 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = 2 * (xoffset + 116); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); + break; + case 5: + textpos = 2 * (xoffset + 130); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); + break; + } + + } + + if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) { + /* guard bar extensions and text formatting for UPCE */ + draw_bar(pixelbuf, (0 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (2 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (46 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (48 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + draw_bar(pixelbuf, (50 + xoffset) * 2, 1 * 2, (4 + (int)yoffset) * 2, 5 * 2, image_width, image_height); + + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = 2 * (-5 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + textpos = 2 * (24 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + textpart[0] = symbol->text[7]; + textpart[1] = '\0'; + textpos = 2 * (55 + xoffset); + draw_string(pixelbuf, textpart, textpos, default_text_posn, smalltext, image_width, image_height); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = 2 * (xoffset + 70); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); + break; + case 5: + textpos = 2 * (xoffset + 84); + draw_string(pixelbuf, addon, textpos, image_height - (addon_text_posn * 2) - 13, smalltext, image_width, image_height); + break; + } + + } + + xoffset -= comp_offset; + + /* Put boundary bars or box around symbol */ + if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + /* boundary bars */ + draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height); + draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height); + if((symbol->output_options & BARCODE_BIND) != 0) { + if((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) { + /* row binding */ + for(r = 1; r < symbol->rows; r++) { + draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, ((r * row_height) + textoffset + yoffset - 1) * 2, 2 * 2, image_width, image_height); + } + } + } + } + + if((symbol->output_options & BARCODE_BOX) != 0) { + /* side bars */ + draw_bar(pixelbuf, 0, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height); + draw_bar(pixelbuf, (symbol->width + xoffset + xoffset - symbol->border_width) * 2, symbol->border_width * 2, textoffset * 2, (symbol->height + (2 * symbol->border_width)) * 2, image_width, image_height); + } + + /* Put the human readable text at the bottom */ + if((textdone == 0) && (ustrlen(local_text) != 0)) { + textpos = (image_width / 2); + draw_string(pixelbuf, (char*)local_text, textpos, default_text_posn, smalltext, image_width, image_height); + } + + error_number=png_to_file(symbol, image_height, image_width, pixelbuf, rotate_angle, data_type); + free(pixelbuf); + return error_number; +} + +#ifndef NO_PNG +int png_handle(struct zint_symbol *symbol, int rotate_angle) +{ + int error; + + if(symbol->symbology == BARCODE_MAXICODE) { + error = maxi_png_plot(symbol, rotate_angle, PNG_DATA); + } else { + + error = png_plot(symbol, rotate_angle, PNG_DATA); + } + + return error; +} +#endif /* NO_PNG */ + +int bmp_handle(struct zint_symbol *symbol, int rotate_angle) +{ + int error; + + if(symbol->symbology == BARCODE_MAXICODE) { + error = maxi_png_plot(symbol, rotate_angle, BMP_DATA); + } else { + error = png_plot(symbol, rotate_angle, BMP_DATA); + } + + return error; +} + diff --git a/3rdparty/zint-2.4.4/backend/postal.c b/3rdparty/zint-2.4.4/backend/postal.c new file mode 100644 index 0000000..f6a480f --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/postal.c @@ -0,0 +1,594 @@ +/* postal.c - Handles PostNet, PLANET, FIM. RM4SCC and Flattermarken */ + +/* Zint - A barcode generating program using libpng + Copyright (C) 2008 Robin Stuart + Including bug fixes by Bryan Hatton + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" + +#define DAFTSET "DAFT" +#define KRSET "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" +#define KASUTSET "1234567890-abcdefgh" +#define CHKASUTSET "0123456789-abcdefgh" +#define SHKASUTSET "1234567890-ABCDEFGHIJKLMNOPQRSTUVWXYZ" + +/* PostNet number encoding table - In this table L is long as S is short */ +static char *PNTable[10] = {"LLSSS", "SSSLL", "SSLSL", "SSLLS", "SLSSL", "SLSLS", "SLLSS", "LSSSL", + "LSSLS", "LSLSS"}; +static char *PLTable[10] = {"SSLLL", "LLLSS", "LLSLS", "LLSSL", "LSLLS", "LSLSL", "LSSLL", "SLLLS", + "SLLSL", "SLSLL"}; + +static char *RoyalValues[36] = {"11", "12", "13", "14", "15", "10", "21", "22", "23", "24", "25", + "20", "31", "32", "33", "34", "35", "30", "41", "42", "43", "44", "45", "40", "51", "52", + "53", "54", "55", "50", "01", "02", "03", "04", "05", "00"}; + +/* 0 = Full, 1 = Ascender, 2 = Descender, 3 = Tracker */ +static char *RoyalTable[36] = {"3300", "3210", "3201", "2310", "2301", "2211", "3120", "3030", "3021", + "2130", "2121", "2031", "3102", "3012", "3003", "2112", "2103", "2013", "1320", "1230", + "1221", "0330", "0321", "0231", "1302", "1212", "1203", "0312", "0303", "0213", "1122", + "1032", "1023", "0132", "0123", "0033"}; + +static char *FlatTable[10] = {"0504", "18", "0117", "0216", "0315", "0414", "0513", "0612", "0711", + "0810"}; + +static char *KoreaTable[10] = {"1313150613", "0713131313", "0417131313", "1506131313", + "0413171313", "17171313", "1315061313", "0413131713", "17131713", "13171713"}; + +static char *JapanTable[19] = {"114", "132", "312", "123", "141", "321", "213", "231", "411", "144", + "414", "324", "342", "234", "432", "243", "423", "441", "111"}; + +int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) +{ + /* Handles the PostNet system used for Zip codes in the US */ + unsigned int sum, check_digit; + int i, error_number; + + error_number = 0; + + if(length > 38) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + sum = 0; + + /* start character */ + strcpy(dest, "L"); + + for (i=0; i < length; i++) + { + lookup(NEON, PNTable, source[i], dest); + sum += ctoi(source[i]); + } + + check_digit = (10 - (sum % 10)) % 10; + concat(dest, PNTable[check_digit]); + + /* stop character */ + concat (dest, "L"); + + return error_number; +} + +int post_plot(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* Puts PostNet barcodes into the pattern matrix */ + char height_pattern[256]; /* 5 + 38 * 5 + 5 + 5 + 1 ~ 256 */ + unsigned int loopey, h; + int writer; + int error_number; + + error_number = 0; + + error_number = postnet(symbol, source, height_pattern, length); + if(error_number != 0) { + return error_number; + } + + writer = 0; + h = strlen(height_pattern); + for(loopey = 0; loopey < h; loopey++) + { + if(height_pattern[loopey] == 'L') + { + set_module(symbol, 0, writer); + } + set_module(symbol, 1, writer); + writer += 3; + } + symbol->row_height[0] = 6; + symbol->row_height[1] = 6; + symbol->rows = 2; + symbol->width = writer - 1; + + return error_number; +} + +int planet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) +{ + /* Handles the PLANET system used for item tracking in the US */ + unsigned int sum, check_digit; + int i, error_number; + + error_number = 0; + + if(length > 38) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + sum = 0; + + /* start character */ + strcpy(dest, "L"); + + for (i=0; i < length; i++) { + lookup(NEON, PLTable, source[i], dest); + sum += ctoi(source[i]); + } + + check_digit = (10 - (sum % 10)) % 10; + concat(dest, PLTable[check_digit]); + + /* stop character */ + concat (dest, "L"); + + return error_number; +} + +int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* Puts PLANET barcodes into the pattern matrix */ + char height_pattern[256]; /* 5 + 38 * 5 + 5 + 5 + 1 ~ 256 */ + unsigned int loopey, h; + int writer; + int error_number; + + error_number = 0; + + error_number = planet(symbol, source, height_pattern, length); + if(error_number != 0) { + return error_number; + } + + writer = 0; + h = strlen(height_pattern); + for(loopey = 0; loopey < h; loopey++) + { + if(height_pattern[loopey] == 'L') + { + set_module(symbol, 0, writer); + } + set_module(symbol, 1, writer); + writer += 3; + } + symbol->row_height[0] = 6; + symbol->row_height[1] = 6; + symbol->rows = 2; + symbol->width = writer - 1; + return error_number; +} + +int korea_post(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Korean Postal Authority */ + + int total, loop, check, zeroes, error_number; + char localstr[8], dest[80]; + + error_number = 0; + if(length > 6) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + zeroes = 6 - length; + memset(localstr, '0', zeroes); + strcpy(localstr + zeroes, (char *)source); + + total = 0; + for(loop = 0; loop < 6; loop++) { + total += ctoi(localstr[loop]); + } + check = 10 - (total % 10); + if(check == 10) { check = 0; } + localstr[6] = itoc(check); + localstr[7] = '\0'; + *dest = '\0'; + for(loop = 5; loop >= 0; loop--) { + lookup(NEON, KoreaTable, localstr[loop], dest); + } + lookup(NEON, KoreaTable, localstr[6], dest); + expand(symbol, dest); + ustrcpy(symbol->text, (unsigned char*)localstr); + return error_number; +} + +int fim(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* The simplest barcode symbology ever! Supported by MS Word, so here it is! */ + /* glyphs from http://en.wikipedia.org/wiki/Facing_Identification_Mark */ + + char dest[16] = { 0 }; + + if(length > 1) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + switch((char)source[0]) { + case 'a': + case 'A': + strcpy(dest, "111515111"); + break; + case 'b': + case 'B': + strcpy(dest, "13111311131"); + break; + case 'c': + case 'C': + strcpy(dest, "11131313111"); + break; + case 'd': + case 'D': + strcpy(dest, "1111131311111"); + break; + default: + strcpy(symbol->errtxt, "Invalid characters in data"); + return ERROR_INVALID_DATA1; + break; + } + + expand(symbol, dest); + return 0; +} + +char rm4scc(char source[], unsigned char dest[], int length) +{ + /* Handles the 4 State barcodes used in the UK by Royal Mail */ + unsigned int i; + int top, bottom, row, column, check_digit; + char values[3], set_copy[] = KRSET; + + top = 0; + bottom = 0; + + /* start character */ + strcpy((char*)dest, "1"); + + for (i = 0; i < length; i++) { + lookup(KRSET, RoyalTable, source[i], (char*)dest); + strcpy(values, RoyalValues[posn(KRSET, source[i])]); + top += ctoi(values[0]); + bottom += ctoi(values[1]); + } + + /* Calculate the check digit */ + row = (top % 6) - 1; + column = (bottom % 6) - 1; + if(row == -1) { row = 5; } + if(column == -1) { column = 5; } + check_digit = (6 * row) + column; + concat((char*)dest, RoyalTable[check_digit]); + + /* stop character */ + concat ((char*)dest, "0"); + + return set_copy[check_digit]; +} + +int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* Puts RM4SCC into the data matrix */ + char height_pattern[200], check; + int loopey, h, writer; + int error_number; + strcpy(height_pattern, ""); + + error_number = 0; + + if(length > 120) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + to_upper(source); + error_number = is_sane(KRSET, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + check = rm4scc((char*)source, (unsigned char*)height_pattern, length); + + writer = 0; + h = strlen(height_pattern); + for(loopey = 0; loopey < h; loopey++) { + if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '0')) { + set_module(symbol, 0, writer); + } + set_module(symbol, 1, writer); + if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '0')) { + set_module(symbol, 2, writer); + } + writer += 2; + } + + symbol->row_height[0] = 3; + symbol->row_height[1] = 2; + symbol->row_height[2] = 3; + symbol->rows = 3; + symbol->width = writer - 1; + + return error_number; +} + +int kix_code(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* Handles Dutch Post TNT KIX symbols */ + /* The same as RM4SCC but without check digit */ + /* Specification at http://www.tntpost.nl/zakelijk/klantenservice/downloads/kIX_code/download.aspx */ + char height_pattern[50], localstr[20]; + int loopey, writer, i, h; + int error_number; /* zeroes; */ + strcpy(height_pattern, ""); + + error_number = 0; + + if(length > 18) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + to_upper(source); + error_number = is_sane(KRSET, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* Add leading zeroes */ + /* zeroes = 11 - length; + memset(localstr, '0', zeroes); + strcpy(localstr + zeroes, (char *)source);*/ + strcpy(localstr, (char *)source); + + /* Encode data */ + for (i = 0; i < 18; i++) { + lookup(KRSET, RoyalTable, localstr[i], height_pattern); + } + + writer = 0; + h = strlen(height_pattern); + for(loopey = 0; loopey < h; loopey++) { + if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '0')) { + set_module(symbol, 0, writer); + } + set_module(symbol, 1, writer); + if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '0')) { + set_module(symbol, 2, writer); + } + writer += 2; + } + + symbol->row_height[0] = 3; + symbol->row_height[1] = 2; + symbol->row_height[2] = 3; + symbol->rows = 3; + symbol->width = writer - 1; + + return error_number; +} + +int daft_code(struct zint_symbol *symbol, unsigned char source[], int length) +{ + /* Handles DAFT Code symbols */ + /* Presumably 'daft' doesn't mean the same thing in Germany as it does in the UK! */ + char height_pattern[100]; + unsigned int loopey, h; + int writer, i, error_number; + strcpy(height_pattern, ""); + + error_number = 0; + if(length > 50) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + to_upper((unsigned char*)source); + error_number = is_sane(DAFTSET, (unsigned char*)source, length); + + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + for (i = 0; i < length; i++) { + if(source[i] == 'D') { concat(height_pattern, "2"); } + if(source[i] == 'A') { concat(height_pattern, "1"); } + if(source[i] == 'F') { concat(height_pattern, "0"); } + if(source[i] == 'T') { concat(height_pattern, "3"); } + } + + writer = 0; + h = strlen(height_pattern); + for(loopey = 0; loopey < h; loopey++) + { + if((height_pattern[loopey] == '1') || (height_pattern[loopey] == '0')) + { + set_module(symbol, 0, writer); + } + set_module(symbol, 1, writer); + if((height_pattern[loopey] == '2') || (height_pattern[loopey] == '0')) + { + set_module(symbol, 2, writer); + } + writer += 2; + } + + symbol->row_height[0] = 3; + symbol->row_height[1] = 2; + symbol->row_height[2] = 3; + symbol->rows = 3; + symbol->width = writer - 1; + + return error_number; +} + +int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Flattermarken - Not really a barcode symbology and (in my opinion) probably not much use + but it's supported by TBarCode so it's supported by Zint! */ + int loop, error_number; + char dest[512]; /* 90 * 4 + 1 ~ */ + + error_number = 0; + + if(length > 90) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + *dest = '\0'; + for(loop = 0; loop < length; loop++) { + lookup(NEON, FlatTable, source[loop], dest); + } + + expand(symbol, dest); + return error_number; +} + +int japan_post(struct zint_symbol *symbol, unsigned char source[], int length) +{ /* Japanese Postal Code (Kasutama Barcode) */ + int error_number, h; + char pattern[69]; + int writer, loopey, inter_posn, i, sum, check; + char check_char; + char inter[23]; + +#ifndef _MSC_VER + char local_source[length + 1]; +#else + char* local_source = (char*)_alloca(length + 1); +#endif + + inter_posn = 0; + error_number = 0; + + strcpy(local_source, (char*)source); + for(i = 0; i < length; i++) { + local_source[i] = source[i]; + } + to_upper((unsigned char*)local_source); + error_number = is_sane(SHKASUTSET, (unsigned char*)local_source, length); + + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + memset(inter, 'd', 20);/* Pad character CC4 */ + inter[20] = '\0'; + + i = 0; + inter_posn = 0; + do { + if(((local_source[i] >= '0') && (local_source[i] <= '9')) || (local_source[i] == '-')) { + inter[inter_posn] = local_source[i]; + inter_posn++; + } else { + if((local_source[i] >= 'A') && (local_source[i] <= 'J')) { + inter[inter_posn] = 'a'; + inter[inter_posn + 1] = local_source[i] - 'A' + '0'; + inter_posn += 2; + } + if((local_source[i] >= 'K') && (local_source[i] <= 'T')) { + inter[inter_posn] = 'b'; + inter[inter_posn + 1] = local_source[i] - 'K' + '0'; + inter_posn += 2; + } + if((local_source[i] >= 'U') && (local_source[i] <= 'Z')) { + inter[inter_posn] = 'c'; + inter[inter_posn + 1] = local_source[i] - 'U' + '0'; + inter_posn += 2; + } + } + i++; + }while((i < length) && (inter_posn < 20)); + inter[20] = '\0'; + + strcpy(pattern, "13"); /* Start */ + + sum = 0; + for(i = 0; i < 20; i++) { + concat(pattern, JapanTable[posn(KASUTSET, inter[i])]); + sum += posn(CHKASUTSET, inter[i]); + /* printf("%c (%d)\n", inter[i], posn(CHKASUTSET, inter[i])); */ + } + + /* Calculate check digit */ + check = 19 - (sum % 19); + if(check == 19) { check = 0; } + if(check <= 9) { check_char = check + '0'; } + if(check == 10) { check_char = '-'; } + if(check >= 11) { check_char = (check - 11) + 'a'; } + concat(pattern, JapanTable[posn(KASUTSET, check_char)]); + /* printf("check %c (%d)\n", check_char, check); */ + + concat(pattern, "31"); /* Stop */ + + /* Resolve pattern to 4-state symbols */ + writer = 0; + h = strlen(pattern); + for(loopey = 0; loopey < h; loopey++) + { + if((pattern[loopey] == '2') || (pattern[loopey] == '1')) + { + set_module(symbol, 0, writer); + } + set_module(symbol, 1, writer); + if((pattern[loopey] == '3') || (pattern[loopey] == '1')) + { + set_module(symbol, 2, writer); + } + writer += 2; + } + + symbol->row_height[0] = 3; + symbol->row_height[1] = 2; + symbol->row_height[2] = 3; + symbol->rows = 3; + symbol->width = writer - 1; + + return error_number; +} diff --git a/3rdparty/zint-2.4.4/backend/ps.c b/3rdparty/zint-2.4.4/backend/ps.c new file mode 100644 index 0000000..7543561 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/ps.c @@ -0,0 +1,761 @@ +/* ps.c - Post Script output */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include +#include "common.h" + +#define SSET "0123456789ABCDEF" + +/* This file has expanded quite a bit since version 1.5 in order to accomodate + the formatting rules for EAN and UPC symbols as set out in EN 797:1995 - the + down side of this support is that the code is now vertually unreadable! */ + +int ps_plot(struct zint_symbol *symbol) +{ + int i, block_width, latch, r, this_row; + float textpos, large_bar_height, preset_height, row_height, row_posn; + FILE *feps; + int fgred, fggrn, fgblu, bgred, bggrn, bgblu; + float red_ink, green_ink, blue_ink, red_paper, green_paper, blue_paper; + int error_number = 0; + int textoffset, xoffset, yoffset, textdone, main_width; + char textpart[10], addon[6]; + int large_bar_count, comp_offset; + float addon_text_posn; + float scaler = symbol->scale; + float default_text_posn; + int plot_text = 1; + const char *locale = NULL; + + row_height=0; + textdone = 0; + main_width = symbol->width; + strcpy(addon, ""); + comp_offset = 0; + addon_text_posn = 0.0; + + if((symbol->output_options & BARCODE_STDOUT) != 0) { + feps = stdout; + } else { + feps = fopen(symbol->outfile, "w"); + } + if(feps == NULL) { + strcpy(symbol->errtxt, "Could not open output file"); + return ERROR_FILE_ACCESS; + } + + /* sort out colour options */ + to_upper((unsigned char*)symbol->fgcolour); + to_upper((unsigned char*)symbol->bgcolour); + + if(strlen(symbol->fgcolour) != 6) { + strcpy(symbol->errtxt, "Malformed foreground colour target"); + return ERROR_INVALID_OPTION; + } + if(strlen(symbol->bgcolour) != 6) { + strcpy(symbol->errtxt, "Malformed background colour target"); + return ERROR_INVALID_OPTION; + } + error_number = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour)); + if (error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Malformed foreground colour target"); + return ERROR_INVALID_OPTION; + } + error_number = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->bgcolour)); + if (error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Malformed background colour target"); + return ERROR_INVALID_OPTION; + } + locale = setlocale(LC_ALL, "C"); + + fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); + fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); + fgblu = (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]); + bgred = (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]); + bggrn = (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]); + bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); + red_ink = fgred / 256.0; + green_ink = fggrn / 256.0; + blue_ink = fgblu / 256.0; + red_paper = bgred / 256.0; + green_paper = bggrn / 256.0; + blue_paper = bgblu / 256.0; + + if (symbol->height == 0) { + symbol->height = 50; + } + + large_bar_count = 0; + preset_height = 0.0; + for(i = 0; i < symbol->rows; i++) { + preset_height += symbol->row_height[i]; + if(symbol->row_height[i] == 0) { + large_bar_count++; + } + } + large_bar_height = (symbol->height - preset_height) / large_bar_count; + + if (large_bar_count == 0) { + symbol->height = preset_height; + } + + while(!(module_is_set(symbol, symbol->rows - 1, comp_offset))) { + comp_offset++; + } + + /* Certain symbols need whitespace otherwise characters get chopped off the sides */ + if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) + || (symbol->symbology == BARCODE_ISBNX)) { + switch(ustrlen(symbol->text)) { + case 13: /* EAN 13 */ + case 16: + case 19: + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + } + main_width = 96 + comp_offset; + break; + default: + main_width = 68 + comp_offset; + } + } + + if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) { + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + main_width = 96 + comp_offset; + } + } + + if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) { + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + main_width = 51 + comp_offset; + } + } + + latch = 0; + r = 0; + /* Isolate add-on text */ + if(is_extendable(symbol->symbology)) { + for(i = 0; i < ustrlen(symbol->text); i++) { + if (latch == 1) { + addon[r] = symbol->text[i]; + r++; + } + if (symbol->text[i] == '+') { + latch = 1; + } + } + } + addon[r] = '\0'; + + if((symbol->show_hrt == 0) || (ustrlen(symbol->text) == 0)) { + plot_text = 0; + } + if(plot_text) { + textoffset = 9; + } else { + textoffset = 0; + } + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + + /* Start writing the header */ + fprintf(feps, "%%!PS-Adobe-3.0 EPSF-3.0\n"); + fprintf(feps, "%%%%Creator: Zint %s\n", ZINT_VERSION); + if(ustrlen(symbol->text) != 0) { + fprintf(feps, "%%%%Title: %s\n",symbol->text); + } else { + fprintf(feps, "%%%%Title: Zint Generated Symbol\n"); + } + fprintf(feps, "%%%%Pages: 0\n"); + if(symbol->symbology != BARCODE_MAXICODE) { + fprintf(feps, "%%%%BoundingBox: 0 0 %d %d\n", roundup((symbol->width + xoffset + xoffset) * scaler), roundup((symbol->height + textoffset + yoffset + yoffset) * scaler)); + } else { + fprintf(feps, "%%%%BoundingBox: 0 0 %d %d\n", roundup((74.0 + xoffset + xoffset) * scaler), roundup((72.0 + yoffset + yoffset) * scaler)); + } + fprintf(feps, "%%%%EndComments\n"); + + /* Definitions */ + fprintf(feps, "/TL { setlinewidth moveto lineto stroke } bind def\n"); + fprintf(feps, "/TC { moveto 0 360 arc 360 0 arcn fill } bind def\n"); + fprintf(feps, "/TH { 0 setlinewidth moveto lineto lineto lineto lineto lineto closepath fill } bind def\n"); + fprintf(feps, "/TB { 2 copy } bind def\n"); + fprintf(feps, "/TR { newpath 4 1 roll exch moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath fill } bind def\n"); + fprintf(feps, "/TE { pop pop } bind def\n"); + + fprintf(feps, "newpath\n"); + + /* Now the actual representation */ + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_paper, green_paper, blue_paper); + fprintf(feps, "%.2f 0.00 TB 0.00 %.2f TR\n", (symbol->height + textoffset + yoffset + yoffset) * scaler, (symbol->width + xoffset + xoffset) * scaler); + + if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + default_text_posn = 0.5 * scaler; + } else { + default_text_posn = (symbol->border_width + 0.5) * scaler; + } + + if(symbol->symbology == BARCODE_MAXICODE) { + /* Maxicode uses hexagons */ + float ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy, mx, my; + + + textoffset = 0.0; + if (((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, textoffset * scaler, 0.0, (74.0 + xoffset + xoffset) * scaler); + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, (textoffset + 72.0 + symbol->border_width) * scaler, 0.0, (74.0 + xoffset + xoffset) * scaler); + } + if((symbol->output_options & BARCODE_BOX) != 0) { + /* side bars */ + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", (72.0 + (2 * symbol->border_width)) * scaler, textoffset * scaler, 0.0, symbol->border_width * scaler); + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", (72.0 + (2 * symbol->border_width)) * scaler, textoffset * scaler, (74.0 + xoffset + xoffset - symbol->border_width) * scaler, symbol->border_width * scaler); + } + + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TC\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 10.85 * scaler, (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 8.97 * scaler, (44.73 + xoffset) * scaler, (35.60 + yoffset) * scaler); + fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TC\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 7.10 * scaler, (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 5.22 * scaler, (40.98 + xoffset) * scaler, (35.60 + yoffset) * scaler); + fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TC\n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 3.31 * scaler, (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 1.43 * scaler, (37.19 + xoffset) * scaler, (35.60 + yoffset) * scaler); + for(r = 0; r < symbol->rows; r++) { + for(i = 0; i < symbol->width; i++) { + if(module_is_set(symbol, r, i)) { + /* Dump a hexagon */ + my = ((symbol->rows - r - 1)) * 2.135 + 1.43; + ay = my + 1.0 + yoffset; + by = my + 0.5 + yoffset; + cy = my - 0.5 + yoffset; + dy = my - 1.0 + yoffset; + ey = my - 0.5 + yoffset; + fy = my + 0.5 + yoffset; + + mx = 2.46 * i + 1.23 + (r & 1 ? 1.23 : 0); + + ax = mx + xoffset; + bx = mx + 0.86 + xoffset; + cx = mx + 0.86 + xoffset; + dx = mx + xoffset; + ex = mx - 0.86 + xoffset; + fx = mx - 0.86 + xoffset; + fprintf(feps, "%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f TH\n", ax * scaler, ay * scaler, bx * scaler, by * scaler, cx * scaler, cy * scaler, dx * scaler, dy * scaler, ex * scaler, ey * scaler, fx * scaler, fy * scaler); + } + } + } + } + + if(symbol->symbology != BARCODE_MAXICODE) { + /* everything else uses rectangles (or squares) */ + /* Works from the bottom of the symbol up */ + int addon_latch = 0; + + for(r = 0; r < symbol->rows; r++) { + this_row = symbol->rows - r - 1; /* invert r otherwise plots upside down */ + if(symbol->row_height[this_row] == 0) { + row_height = large_bar_height; + } else { + row_height = symbol->row_height[this_row]; + } + row_posn = 0; + for(i = 0; i < r; i++) { + if(symbol->row_height[symbol->rows - i - 1] == 0) { + row_posn += large_bar_height; + } else { + row_posn += symbol->row_height[symbol->rows - i - 1]; + } + } + row_posn += (textoffset + yoffset); + + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f ", row_height * scaler, row_posn * scaler); + i = 0; + if(module_is_set(symbol, this_row, 0)) { + latch = 1; + } else { + latch = 0; + } + + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); + if((addon_latch == 0) && (r == 0) && (i > main_width)) { + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f ", (row_height - 5.0) * scaler, (row_posn - 5.0) * scaler); + addon_text_posn = row_posn + row_height - 8.0; + addon_latch = 1; + } + if(latch == 1) { + /* a bar */ + fprintf(feps, "TB %.2f %.2f TR\n", (i + xoffset) * scaler, block_width * scaler); + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + + } while (i < symbol->width); + } + } + /* That's done the actual data area, everything else is human-friendly */ + + xoffset += comp_offset; + + if (plot_text) { + if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) || + (symbol->symbology == BARCODE_ISBNX)) { + /* guard bar extensions and text formatting for EAN8 and EAN13 */ + switch(ustrlen(symbol->text)) { + case 8: /* EAN-8 */ + case 11: + case 14: + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f ", 5.0 * scaler, (4.0 + yoffset) * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (0 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (2 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (32 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (34 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (64 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (66 + xoffset) * scaler, 1 * scaler); + for(i = 0; i < 4; i++) { + textpart[i] = symbol->text[i]; + } + textpart[4] = '\0'; + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = 17; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + for(i = 0; i < 4; i++) { + textpart[i] = symbol->text[i + 4]; + } + textpart[4] = '\0'; + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = 50; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + textdone = 1; + switch(strlen(addon)) { + case 2: + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = xoffset + 86; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", textpos * scaler, addon_text_posn * scaler); + fprintf(feps, " (%s) stringwidth\n", addon); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", addon); + fprintf(feps, "setmatrix\n"); + break; + case 5: + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = xoffset + 100; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", textpos * scaler, addon_text_posn * scaler); + fprintf(feps, " (%s) stringwidth\n", addon); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", addon); + fprintf(feps, "setmatrix\n"); + break; + } + + break; + case 13: /* EAN 13 */ + case 16: + case 19: + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f ", 5.0 * scaler, (4.0 + yoffset) * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (0 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (2 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (46 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (48 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (92 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (94 + xoffset) * scaler, 1 * scaler); + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = -7; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = 24; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 7]; + } + textpart[6] = '\0'; + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = 71; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + textdone = 1; + switch(strlen(addon)) { + case 2: + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = xoffset + 114; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", textpos * scaler, addon_text_posn * scaler); + fprintf(feps, " (%s) stringwidth\n", addon); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", addon); + fprintf(feps, "setmatrix\n"); + break; + case 5: + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = xoffset + 128; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", textpos * scaler, addon_text_posn * scaler); + fprintf(feps, " (%s) stringwidth\n", addon); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", addon); + fprintf(feps, "setmatrix\n"); + break; + } + break; + + } + } + + if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) { + /* guard bar extensions and text formatting for UPCA */ + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f ", 5.0 * scaler, (4.0 + yoffset) * scaler); + latch = 1; + + i = 0 + comp_offset; + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); + if(latch == 1) { + /* a bar */ + fprintf(feps, "TB %.2f %.2f TR\n", (i + xoffset - comp_offset) * scaler, block_width * scaler); + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + } while (i < 11 + comp_offset); + fprintf(feps, "TB %.2f %.2f TR\n", (46 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (48 + xoffset) * scaler, 1 * scaler); + latch = 1; + i = 85 + comp_offset; + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); + if(latch == 1) { + /* a bar */ + fprintf(feps, "TB %.2f %.2f TR\n", (i + xoffset - comp_offset) * scaler, block_width * scaler); + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + } while (i < 96 + comp_offset); + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); + textpos = -5; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + for(i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[5] = '\0'; + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = 27; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + for(i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 6]; + } + textpart[6] = '\0'; + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = 68; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + textpart[0] = symbol->text[11]; + textpart[1] = '\0'; + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); + textpos = 100; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + textdone = 1; + switch(strlen(addon)) { + case 2: + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = xoffset + 116; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", textpos * scaler, addon_text_posn * scaler); + fprintf(feps, " (%s) stringwidth\n", addon); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", addon); + fprintf(feps, "setmatrix\n"); + break; + case 5: + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = xoffset + 130; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", textpos * scaler, addon_text_posn * scaler); + fprintf(feps, " (%s) stringwidth\n", addon); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", addon); + fprintf(feps, "setmatrix\n"); + break; + } + + } + + if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) { + /* guard bar extensions and text formatting for UPCE */ + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f ", 5.0 * scaler, (4.0 + yoffset) * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (0 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (2 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (46 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (48 + xoffset) * scaler, 1 * scaler); + fprintf(feps, "TB %.2f %.2f TR\n", (50 + xoffset) * scaler, 1 * scaler); + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); + textpos = -5; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = 24; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + textpart[0] = symbol->text[7]; + textpart[1] = '\0'; + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); + textpos = 55; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", textpart); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", textpart); + fprintf(feps, "setmatrix\n"); + textdone = 1; + switch(strlen(addon)) { + case 2: + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = xoffset + 70; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", textpos * scaler, addon_text_posn * scaler); + fprintf(feps, " (%s) stringwidth\n", addon); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", addon); + fprintf(feps, "setmatrix\n"); + break; + case 5: + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 11.0 * scaler); + textpos = xoffset + 84; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", textpos * scaler, addon_text_posn * scaler); + fprintf(feps, " (%s) stringwidth\n", addon); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", addon); + fprintf(feps, "setmatrix\n"); + break; + } + + } + } /* if (plot_text) */ + + xoffset -= comp_offset; + + switch(symbol->symbology) { + case BARCODE_MAXICODE: + /* Do nothing! (It's already been done) */ + break; + default: + if((symbol->output_options & BARCODE_BIND) != 0) { + if((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) { + /* row binding */ + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + for(r = 1; r < symbol->rows; r++) { + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", 2.0 * scaler, ((r * row_height) + textoffset + yoffset - 1) * scaler, xoffset * scaler, symbol->width * scaler); + } + } + } + if (((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, textoffset * scaler, 0.0, (symbol->width + xoffset + xoffset) * scaler); + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, (textoffset + symbol->height + symbol->border_width) * scaler, 0.0, (symbol->width + xoffset + xoffset) * scaler); + } + if((symbol->output_options & BARCODE_BOX) != 0) { + /* side bars */ + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", (symbol->height + (2 * symbol->border_width)) * scaler, textoffset * scaler, 0.0, symbol->border_width * scaler); + fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", (symbol->height + (2 * symbol->border_width)) * scaler, textoffset * scaler, (symbol->width + xoffset + xoffset - symbol->border_width) * scaler, symbol->border_width * scaler); + } + break; + } + + /* Put the human readable text at the bottom */ + if(plot_text && (textdone == 0)) { + fprintf(feps, "TE\n"); + fprintf(feps, "%.2f %.2f %.2f setrgbcolor\n", red_ink, green_ink, blue_ink); + fprintf(feps, "matrix currentmatrix\n"); + fprintf(feps, "/Helvetica findfont\n"); + fprintf(feps, "%.2f scalefont setfont\n", 8.0 * scaler); + textpos = symbol->width / 2.0; + fprintf(feps, " 0 0 moveto %.2f %.2f translate 0.00 rotate 0 0 moveto\n", (textpos + xoffset) * scaler, default_text_posn); + fprintf(feps, " (%s) stringwidth\n", symbol->text); + fprintf(feps, "pop\n"); + fprintf(feps, "-2 div 0 rmoveto\n"); + fprintf(feps, " (%s) show\n", symbol->text); + fprintf(feps, "setmatrix\n"); + } + fprintf(feps, "\nshowpage\n"); + + fclose(feps); + + if (locale) + setlocale(LC_ALL, locale); + + return error_number; +} + diff --git a/3rdparty/zint-2.4.4/backend/qr.c b/3rdparty/zint-2.4.4/backend/qr.c new file mode 100644 index 0000000..bfe0f13 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/qr.c @@ -0,0 +1,2237 @@ +/* qr.c Handles QR Code */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" +#include +#include "sjis.h" +#include "qr.h" +#include "reedsol.h" + +int in_alpha(int glyph) { + /* Returns true if input glyph is in the Alphanumeric set */ + int retval = 0; + char cglyph = (char) glyph; + + if((cglyph >= '0') && (cglyph <= '9')) { + retval = 1; + } + if((cglyph >= 'A') && (cglyph <= 'Z')) { + retval = 1; + } + switch (cglyph) { + case ' ': + case '$': + case '%': + case '*': + case '+': + case '-': + case '.': + case '/': + case ':': + retval = 1; + break; + } + + return retval; +} + +void define_mode(char mode[], int jisdata[], int length, int gs1) +{ + /* Values placed into mode[] are: K = Kanji, B = Binary, A = Alphanumeric, N = Numeric */ + int i, mlen, j; + + for(i = 0; i < length; i++) { + if(jisdata[i] > 0xff) { + mode[i] = 'K'; + } else { + mode[i] = 'B'; + if(in_alpha(jisdata[i])) { mode[i] = 'A'; } + if(gs1 && (jisdata[i] == '[')) { mode[i] = 'A'; } + if((jisdata[i] >= '0') && (jisdata[i] <= '9')) { mode[i] = 'N'; } + } + } + + /* If less than 6 numeric digits together then don't use numeric mode */ + for(i = 0; i < length; i++) { + if(mode[i] == 'N') { + if(((i != 0) && (mode[i - 1] != 'N')) || (i == 0)) { + mlen = 0; + while (((mlen + i) < length) && (mode[mlen + i] == 'N')) { + mlen++; + }; + if(mlen < 6) { + for(j = 0; j < mlen; j++) { + mode[i + j] = 'A'; + } + } + } + } + } + + /* If less than 4 alphanumeric characters together then don't use alphanumeric mode */ + for(i = 0; i < length; i++) { + if(mode[i] == 'A') { + if(((i != 0) && (mode[i - 1] != 'A')) || (i == 0)) { + mlen = 0; + while (((mlen + i) < length) && (mode[mlen + i] == 'A')) { + mlen++; + }; + if(mlen < 6) { + for(j = 0; j < mlen; j++) { + mode[i + j] = 'B'; + } + } + } + } + } +} + +int estimate_binary_length(char mode[], int length, int gs1) +{ + /* Make an estimate (worst case scenario) of how long the binary string will be */ + int i, count = 0; + char current = 0; + int a_count = 0; + int n_count = 0; + + if(gs1) { count += 4; } + + for(i = 0; i < length; i++) { + if(mode[i] != current) { + switch(mode[i]) { + case 'K': count += 12 + 4; current = 'K'; break; + case 'B': count += 16 + 4; current = 'B'; break; + case 'A': count += 13 + 4; current = 'A'; a_count = 0; break; + case 'N': count += 14 + 4; current = 'N'; n_count = 0; break; + } + } + + switch(mode[i]) { + case 'K': count += 13; break; + case 'B': count += 8; break; + case 'A': + a_count++; + if((a_count & 1) == 0) { + count += 5; // 11 in total + a_count = 0; + } + else + count += 6; + break; + case 'N': + n_count++; + if((n_count % 3) == 0) { + count += 3; // 10 in total + n_count = 0; + } + else if ((n_count & 1) == 0) + count += 3; // 7 in total + else + count += 4; + break; + } + } + + return count; +} + +static void qr_bscan(char *binary, int data, int h) +{ + for (; h; h>>=1) { + concat(binary, data & h ? "1" : "0"); + } +} + +void qr_binary(int datastream[], int version, int target_binlen, char mode[], int jisdata[], int length, int gs1, int est_binlen) +{ + /* Convert input data to a binary stream and add padding */ + int position = 0, debug = 0; + int short_data_block_length, i, scheme = 1; + char data_block, padbits; + int current_binlen, current_bytes; + int toggle, percent; + +#ifndef _MSC_VER + char binary[est_binlen + 12]; +#else + char* binary = (char *)_alloca(est_binlen + 12); +#endif + strcpy(binary, ""); + + if(gs1) { + concat(binary, "0101"); /* FNC1 */ + } + + if(version <= 9) { + scheme = 1; + } else if((version >= 10) && (version <= 26)) { + scheme = 2; + } else if(version >= 27) { + scheme = 3; + } + + if(debug) { + for(i = 0; i < length; i++) { + printf("%c", mode[i]); + } + printf("\n"); + } + + percent = 0; + + do { + data_block = mode[position]; + short_data_block_length = 0; + do { + short_data_block_length++; + } while (((short_data_block_length + position) < length) && (mode[position + short_data_block_length] == data_block)); + + switch(data_block) { + case 'K': + /* Kanji mode */ + /* Mode indicator */ + concat(binary, "1000"); + + /* Character count indicator */ + qr_bscan(binary, short_data_block_length, 0x20 << (scheme*2)); /* scheme = 1..3 */ + + if(debug) { printf("Kanji block (length %d)\n\t", short_data_block_length); } + + /* Character representation */ + for(i = 0; i < short_data_block_length; i++) { + int jis = jisdata[position + i]; + int msb, lsb, prod; + + if(jis > 0x9fff) { jis -= 0xc140; } + msb = (jis & 0xff00) >> 4; + lsb = (jis & 0xff); + prod = (msb * 0xc0) + lsb; + + qr_bscan(binary, prod, 0x1000); + + if(debug) { printf("0x%4X ", prod); } + } + + if(debug) { printf("\n"); } + + break; + case 'B': + /* Byte mode */ + /* Mode indicator */ + concat(binary, "0100"); + + /* Character count indicator */ + qr_bscan(binary, short_data_block_length, scheme > 1 ? 0x8000 : 0x80); /* scheme = 1..3 */ + + if(debug) { printf("Byte block (length %d)\n\t", short_data_block_length); } + + /* Character representation */ + for(i = 0; i < short_data_block_length; i++) { + int byte = jisdata[position + i]; + + if(gs1 && (byte == '[')) { + byte = 0x1d; /* FNC1 */ + } + + qr_bscan(binary, byte, 0x80); + + if(debug) { printf("0x%2X(%d) ", byte, byte); } + } + + if(debug) { printf("\n"); } + + break; + case 'A': + /* Alphanumeric mode */ + /* Mode indicator */ + concat(binary, "0010"); + + /* Character count indicator */ + qr_bscan(binary, short_data_block_length, 0x40 << (2 * scheme)); /* scheme = 1..3 */ + + if(debug) { printf("Alpha block (length %d)\n\t", short_data_block_length); } + + /* Character representation */ + i = 0; + while ( i < short_data_block_length ) { + int count; + int first = 0, second = 0, prod; + + if(percent == 0) { + if(gs1 && (jisdata[position + i] == '%')) { + first = posn(RHODIUM, '%'); + second = posn(RHODIUM, '%'); + count = 2; + prod = (first * 45) + second; + i++; + } else { + if(gs1 && (jisdata[position + i] == '[')) { + first = posn(RHODIUM, '%'); /* FNC1 */ + } else { + first = posn(RHODIUM, (char) jisdata[position + i]); + } + count = 1; + i++; + prod = first; + + if(mode[position + i] == 'A') { + if(gs1 && (jisdata[position + i] == '%')) { + second = posn(RHODIUM, '%'); + count = 2; + prod = (first * 45) + second; + percent = 1; + } else { + if(gs1 && (jisdata[position + i] == '[')) { + second = posn(RHODIUM, '%'); /* FNC1 */ + } else { + second = posn(RHODIUM, (char) jisdata[position + i]); + } + count = 2; + i++; + prod = (first * 45) + second; + } + } + } + } else { + first = posn(RHODIUM, '%'); + count = 1; + i++; + prod = first; + percent = 0; + + if(mode[position + i] == 'A') { + if(gs1 && (jisdata[position + i] == '%')) { + second = posn(RHODIUM, '%'); + count = 2; + prod = (first * 45) + second; + percent = 1; + } else { + if(gs1 && (jisdata[position + i] == '[')) { + second = posn(RHODIUM, '%'); /* FNC1 */ + } else { + second = posn(RHODIUM, (char) jisdata[position + i]); + } + count = 2; + i++; + prod = (first * 45) + second; + } + } + } + + qr_bscan(binary, prod, count == 2 ? 0x400 : 0x20); /* count = 1..2 */ + + if(debug) { printf("0x%4X ", prod); } + }; + + if(debug) { printf("\n"); } + + break; + case 'N': + /* Numeric mode */ + /* Mode indicator */ + concat(binary, "0001"); + + /* Character count indicator */ + qr_bscan(binary, short_data_block_length, 0x80 << (2 * scheme)); /* scheme = 1..3 */ + + if(debug) { printf("Number block (length %d)\n\t", short_data_block_length); } + + /* Character representation */ + i = 0; + while ( i < short_data_block_length ) { + int count; + int first = 0, second = 0, third = 0, prod; + + first = posn(NEON, (char) jisdata[position + i]); + count = 1; + prod = first; + + if(mode[position + i + 1] == 'N') { + second = posn(NEON, (char) jisdata[position + i + 1]); + count = 2; + prod = (prod * 10) + second; + + if(mode[position + i + 2] == 'N') { + third = posn(NEON, (char) jisdata[position + i + 2]); + count = 3; + prod = (prod * 10) + third; + } + } + + qr_bscan(binary, prod, 1 << (3 * count)); /* count = 1..3 */ + + if(debug) { printf("0x%4X (%d)", prod, prod); } + + i += count; + }; + + if(debug) { printf("\n"); } + + break; + } + + position += short_data_block_length; + } while (position < length) ; + + /* Terminator */ + concat(binary, "0000"); + + current_binlen = strlen(binary); + padbits = 8 - (current_binlen % 8); + if(padbits == 8) { padbits = 0; } + current_bytes = (current_binlen + padbits) / 8; + + /* Padding bits */ + for(i = 0; i < padbits; i++) { + concat(binary, "0"); + } + + /* Put data into 8-bit codewords */ + for(i = 0; i < current_bytes; i++) { + datastream[i] = 0x00; + if(binary[i * 8] == '1') { datastream[i] += 0x80; } + if(binary[i * 8 + 1] == '1') { datastream[i] += 0x40; } + if(binary[i * 8 + 2] == '1') { datastream[i] += 0x20; } + if(binary[i * 8 + 3] == '1') { datastream[i] += 0x10; } + if(binary[i * 8 + 4] == '1') { datastream[i] += 0x08; } + if(binary[i * 8 + 5] == '1') { datastream[i] += 0x04; } + if(binary[i * 8 + 6] == '1') { datastream[i] += 0x02; } + if(binary[i * 8 + 7] == '1') { datastream[i] += 0x01; } + } + + /* Add pad codewords */ + toggle = 0; + for(i = current_bytes; i < target_binlen; i++) { + if(toggle == 0) { + datastream[i] = 0xec; + toggle = 1; + } else { + datastream[i] = 0x11; + toggle = 0; + } + } + + if(debug) { + printf("Resulting codewords:\n\t"); + for(i = 0; i < target_binlen; i++) { + printf("0x%2X ", datastream[i]); + } + printf("\n"); + } +} + +void add_ecc(int fullstream[], int datastream[], int version, int data_cw, int blocks) +{ + /* Split data into blocks, add error correction and then interleave the blocks and error correction data */ + int ecc_cw = qr_total_codewords[version - 1] - data_cw; + int short_data_block_length = data_cw / blocks; + int qty_long_blocks = data_cw % blocks; + int qty_short_blocks = blocks - qty_long_blocks; + int ecc_block_length = ecc_cw / blocks; + int i, j, length_this_block, posn, debug = 0; + + +#ifndef _MSC_VER + unsigned char data_block[short_data_block_length + 2]; + unsigned char ecc_block[ecc_block_length + 2]; + int interleaved_data[data_cw + 2]; + int interleaved_ecc[ecc_cw + 2]; +#else + unsigned char* data_block = (unsigned char *)_alloca(short_data_block_length + 2); + unsigned char* ecc_block = (unsigned char *)_alloca(ecc_block_length + 2); + int* interleaved_data = (int *)_alloca((data_cw + 2) * sizeof(int)); + int* interleaved_ecc = (int *)_alloca((ecc_cw + 2) * sizeof(int)); +#endif + + posn = 0; + + for(i = 0; i < blocks; i++) { + if(i < qty_short_blocks) { length_this_block = short_data_block_length; } else { length_this_block = short_data_block_length + 1; } + + for(j = 0; j < ecc_block_length; j++) { + ecc_block[j] = 0; + } + + for(j = 0; j < length_this_block; j++) { + data_block[j] = (unsigned char) datastream[posn + j]; + } + + rs_init_gf(0x11d); + rs_init_code(ecc_block_length, 0); + rs_encode(length_this_block, data_block, ecc_block); + rs_free(); + + if(debug) { + printf("Block %d: ", i + 1); + for(j = 0; j < length_this_block; j++) { + printf("%2X ", data_block[j]); + } + if(i < qty_short_blocks) { + printf(" "); + } + printf(" // "); + for(j = 0; j < ecc_block_length; j++) { + printf("%2X ", ecc_block[ecc_block_length - j - 1]); + } + printf("\n"); + } + + for(j = 0; j < short_data_block_length; j++) { + interleaved_data[(j * blocks) + i] = (int) data_block[j]; + } + + if(i >= qty_short_blocks){ + interleaved_data[(short_data_block_length * blocks) + (i - qty_short_blocks)] = (int) data_block[short_data_block_length]; + } + + for(j = 0; j < ecc_block_length; j++) { + interleaved_ecc[(j * blocks) + i] = (int) ecc_block[ecc_block_length - j - 1]; + } + + posn += length_this_block; + } + + for(j = 0; j < data_cw; j++) { + fullstream[j] = interleaved_data[j]; + } + for(j = 0; j < ecc_cw; j++) { + fullstream[j + data_cw] = interleaved_ecc[j]; + } + + if(debug) { + printf("\nData Stream: \n"); + for(j = 0; j < (data_cw + ecc_cw); j++) { + printf("%2X ", fullstream[j]); + } + printf("\n"); + } +} + +void place_finder(unsigned char grid[], int size, int x, int y) +{ + int xp, yp; + + int finder[] = { + 1, 1, 1, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 1, + 1, 0, 1, 1, 1, 0, 1, + 1, 0, 1, 1, 1, 0, 1, + 1, 0, 1, 1, 1, 0, 1, + 1, 0, 0, 0, 0, 0, 1, + 1, 1, 1, 1, 1, 1, 1 + }; + + for(xp = 0; xp < 7; xp++) { + for(yp = 0; yp < 7; yp++) { + if (finder[xp + (7 * yp)] == 1) { + grid[((yp + y) * size) + (xp + x)] = 0x11; + } else { + grid[((yp + y) * size) + (xp + x)] = 0x10; + } + } + } +} + +void place_align(unsigned char grid[], int size, int x, int y) +{ + int xp, yp; + + int alignment[] = { + 1, 1, 1, 1, 1, + 1, 0, 0, 0, 1, + 1, 0, 1, 0, 1, + 1, 0, 0, 0, 1, + 1, 1, 1, 1, 1 + }; + + x -= 2; + y -= 2; /* Input values represent centre of pattern */ + + for(xp = 0; xp < 5; xp++) { + for(yp = 0; yp < 5; yp++) { + if (alignment[xp + (5 * yp)] == 1) { + grid[((yp + y) * size) + (xp + x)] = 0x11; + } else { + grid[((yp + y) * size) + (xp + x)] = 0x10; + } + } + } +} + +void setup_grid(unsigned char* grid, int size, int version) +{ + int i, toggle = 1; + int loopsize, x, y, xcoord, ycoord; + + /* Add timing patterns */ + for(i = 0; i < size; i++) { + if(toggle == 1) { + grid[(6 * size) + i] = 0x21; + grid[(i * size) + 6] = 0x21; + toggle = 0; + } else { + grid[(6 * size) + i] = 0x20; + grid[(i * size) + 6] = 0x20; + toggle = 1; + } + } + + /* Add finder patterns */ + place_finder(grid, size, 0, 0); + place_finder(grid, size, 0, size - 7); + place_finder(grid, size, size - 7, 0); + + /* Add separators */ + for(i = 0; i < 7; i++) { + grid[(7 * size) + i] = 0x10; + grid[(i * size) + 7] = 0x10; + grid[(7 * size) + (size - 1 - i)] = 0x10; + grid[(i * size) + (size - 8)] = 0x10; + grid[((size - 8) * size) + i] = 0x10; + grid[((size - 1 - i) * size) + 7] = 0x10; + } + grid[(7 * size) + 7] = 0x10; + grid[(7 * size) + (size - 8)] = 0x10; + grid[((size - 8) * size) + 7] = 0x10; + + /* Add alignment patterns */ + if(version != 1) { + /* Version 1 does not have alignment patterns */ + + loopsize = qr_align_loopsize[version - 1]; + for(x = 0; x < loopsize; x++) { + for(y = 0; y < loopsize; y++) { + xcoord = qr_table_e1[((version - 2) * 7) + x]; + ycoord = qr_table_e1[((version - 2) * 7) + y]; + + if(!(grid[(ycoord * size) + xcoord] & 0x10)) { + place_align(grid, size, xcoord, ycoord); + } + } + } + } + + /* Reserve space for format information */ + for(i = 0; i < 8; i++) { + grid[(8 * size) + i] += 0x20; + grid[(i * size) + 8] += 0x20; + grid[(8 * size) + (size - 1 - i)] = 0x20; + grid[((size - 1 - i) * size) + 8] = 0x20; + } + grid[(8 * size) + 8] += 20; + grid[((size - 1 - 7) * size) + 8] = 0x21; /* Dark Module from Figure 25 */ + + /* Reserve space for version information */ + if(version >= 7) { + for(i = 0; i < 6; i++) { + grid[((size - 9) * size) + i] = 0x20; + grid[((size - 10) * size) + i] = 0x20; + grid[((size - 11) * size) + i] = 0x20; + grid[(i * size) + (size - 9)] = 0x20; + grid[(i * size) + (size - 10)] = 0x20; + grid[(i * size) + (size - 11)] = 0x20; + } + } +} + +int cwbit(int* datastream, int i) { + int word = i / 8; + int bit = i % 8; + int resultant = 0; + + switch(bit) { + case 0: if(datastream[word] & 0x80) { resultant = 1; } else { resultant = 0; } break; + case 1: if(datastream[word] & 0x40) { resultant = 1; } else { resultant = 0; } break; + case 2: if(datastream[word] & 0x20) { resultant = 1; } else { resultant = 0; } break; + case 3: if(datastream[word] & 0x10) { resultant = 1; } else { resultant = 0; } break; + case 4: if(datastream[word] & 0x08) { resultant = 1; } else { resultant = 0; } break; + case 5: if(datastream[word] & 0x04) { resultant = 1; } else { resultant = 0; } break; + case 6: if(datastream[word] & 0x02) { resultant = 1; } else { resultant = 0; } break; + case 7: if(datastream[word] & 0x01) { resultant = 1; } else { resultant = 0; } break; + } + + return resultant; +} + +void populate_grid(unsigned char* grid, int size, int* datastream, int cw) +{ + int direction = 1; /* up */ + int row = 0; /* right hand side */ + + int i, n, x, y; + + n = cw * 8; + y = size - 1; + i = 0; + do { + x = (size - 2) - (row * 2); + if(x < 6) + x--; /* skip over vertical timing pattern */ + + if(!(grid[(y * size) + (x + 1)] & 0xf0)) { + if (cwbit(datastream, i)) { + grid[(y * size) + (x + 1)] = 0x01; + } else { + grid[(y * size) + (x + 1)] = 0x00; + } + i++; + } + + if(i < n) { + if(!(grid[(y * size) + x] & 0xf0)) { + if (cwbit(datastream, i)) { + grid[(y * size) + x] = 0x01; + } else { + grid[(y * size) + x] = 0x00; + } + i++; + } + } + + if(direction) { y--; } else { y++; } + if(y == -1) { + /* reached the top */ + row++; + y = 0; + direction = 0; + } + if(y == size) { + /* reached the bottom */ + row++; + y = size - 1; + direction = 1; + } + } while (i < n); +} + +int evaluate(unsigned char *grid, int size, int pattern) +{ + int x, y, block; + int result = 0; + char state; + int p; + int dark_mods; + int percentage, k; + +#ifndef _MSC_VER + char local[size * size]; +#else + char* local = (char *)_alloca((size * size) * sizeof(char)); +#endif + + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + switch(pattern) { + case 0: if (grid[(y * size) + x] & 0x01) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; } break; + case 1: if (grid[(y * size) + x] & 0x02) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; } break; + case 2: if (grid[(y * size) + x] & 0x04) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; } break; + case 3: if (grid[(y * size) + x] & 0x08) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; } break; + case 4: if (grid[(y * size) + x] & 0x10) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; } break; + case 5: if (grid[(y * size) + x] & 0x20) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; } break; + case 6: if (grid[(y * size) + x] & 0x40) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; } break; + case 7: if (grid[(y * size) + x] & 0x80) { local[(y * size) + x] = '1'; } else { local[(y * size) + x] = '0'; } break; + } + } + } + + /* Test 1: Adjacent modules in row/column in same colour */ + /* Vertical */ + for(x = 0; x < size; x++) { + state = local[x]; + block = 0; + for(y = 0; y < size; y++) { + if(local[(y * size) + x] == state) { + block++; + } else { + if(block > 5) { + result += (3 + block); + } + block = 0; + state = local[(y * size) + x]; + } + } + if(block > 5) { + result += (3 + block); + } + } + + /* Horizontal */ + for(y = 0; y < size; y++) { + state = local[y * size]; + block = 0; + for(x = 0; x < size; x++) { + if(local[(y * size) + x] == state) { + block++; + } else { + if(block > 5) { + result += (3 + block); + } + block = 0; + state = local[(y * size) + x]; + } + } + if(block > 5) { + result += (3 + block); + } + } + + /* Test 2 is not implimented */ + + /* Test 3: 1:1:3:1:1 ratio pattern in row/column */ + /* Vertical */ + for(x = 0; x < size; x++) { + for(y = 0; y < (size - 7); y++) { + p = 0; + if(local[(y * size) + x] == '1') { p += 0x40; } + if(local[((y + 1) * size) + x] == '1') { p += 0x20; } + if(local[((y + 2) * size) + x] == '1') { p += 0x10; } + if(local[((y + 3) * size) + x] == '1') { p += 0x08; } + if(local[((y + 4) * size) + x] == '1') { p += 0x04; } + if(local[((y + 5) * size) + x] == '1') { p += 0x02; } + if(local[((y + 6) * size) + x] == '1') { p += 0x01; } + if(p == 0x5d) { + result += 40; + } + } + } + + /* Horizontal */ + for(y = 0; y < size; y++) { + for(x = 0; x < (size - 7); x++) { + p = 0; + if(local[(y * size) + x] == '1') { p += 0x40; } + if(local[(y * size) + x + 1] == '1') { p += 0x20; } + if(local[(y * size) + x + 2] == '1') { p += 0x10; } + if(local[(y * size) + x + 3] == '1') { p += 0x08; } + if(local[(y * size) + x + 4] == '1') { p += 0x04; } + if(local[(y * size) + x + 5] == '1') { p += 0x02; } + if(local[(y * size) + x + 6] == '1') { p += 0x01; } + if(p == 0x5d) { + result += 40; + } + } + } + + /* Test 4: Proportion of dark modules in entire symbol */ + dark_mods = 0; + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + if(local[(y * size) + x] == '1') { + dark_mods++; + } + } + } + percentage = 100 * (dark_mods / (size * size)); + if(percentage <= 50) { + k = ((100 - percentage) - 50) / 5; + } else { + k = (percentage - 50) / 5; + } + + result += 10 * k; + + return result; +} + + +int apply_bitmask(unsigned char *grid, int size) +{ + int x, y; + unsigned char p; + int pattern, penalty[8]; + int best_val, best_pattern; + int bit; + +#ifndef _MSC_VER + unsigned char mask[size * size]; + unsigned char eval[size * size]; +#else + unsigned char* mask = (unsigned char *)_alloca((size * size) * sizeof(unsigned char)); + unsigned char* eval = (unsigned char *)_alloca((size * size) * sizeof(unsigned char)); +#endif + + /* Perform data masking */ + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + mask[(y * size) + x] = 0x00; + + if (!(grid[(y * size) + x] & 0xf0)) { + if(((y + x) & 1) == 0) { mask[(y * size) + x] += 0x01; } + if((y & 1) == 0) { mask[(y * size) + x] += 0x02; } + if((x % 3) == 0) { mask[(y * size) + x] += 0x04; } + if(((y + x) % 3) == 0) { mask[(y * size) + x] += 0x08; } + if((((y / 2) + (x / 3)) & 1) == 0) { mask[(y * size) + x] += 0x10; } + if((((y * x) & 1) + ((y * x) % 3)) == 0) { mask[(y * size) + x] += 0x20; } + if(((((y * x) & 1) + ((y * x) % 3)) & 1) == 0) { mask[(y * size) + x] += 0x40; } + if(((((y + x) & 1) + ((y * x) % 3)) & 1) == 0) { mask[(y * size) + x] += 0x80; } + } + } + } + + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + if(grid[(y * size) + x] & 0x01) { p = 0xff; } else { p = 0x00; } + + eval[(y * size) + x] = mask[(y * size) + x] ^ p; + } + } + + + /* Evaluate result */ + for(pattern = 0; pattern < 8; pattern++) { + penalty[pattern] = evaluate(eval, size, pattern); + } + + best_pattern = 0; + best_val = penalty[0]; + for(pattern = 1; pattern < 8; pattern++) { + if(penalty[pattern] < best_val) { + best_pattern = pattern; + best_val = penalty[pattern]; + } + } + + /* Apply mask */ + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + bit = 0; + switch(best_pattern) { + case 0: if(mask[(y * size) + x] & 0x01) { bit = 1; } break; + case 1: if(mask[(y * size) + x] & 0x02) { bit = 1; } break; + case 2: if(mask[(y * size) + x] & 0x04) { bit = 1; } break; + case 3: if(mask[(y * size) + x] & 0x08) { bit = 1; } break; + case 4: if(mask[(y * size) + x] & 0x10) { bit = 1; } break; + case 5: if(mask[(y * size) + x] & 0x20) { bit = 1; } break; + case 6: if(mask[(y * size) + x] & 0x40) { bit = 1; } break; + case 7: if(mask[(y * size) + x] & 0x80) { bit = 1; } break; + } + if(bit == 1) { + if(grid[(y * size) + x] & 0x01) { + grid[(y * size) + x] = 0x00; + } else { + grid[(y * size) + x] = 0x01; + } + } + } + } + + return best_pattern; +} + +void add_format_info(unsigned char *grid, int size, int ecc_level, int pattern) +{ + /* Add format information to grid */ + + int format = pattern; + unsigned int seq; + int i; + + switch(ecc_level) { + case LEVEL_L: format += 0x08; break; + case LEVEL_Q: format += 0x18; break; + case LEVEL_H: format += 0x10; break; + } + + seq = qr_annex_c[format]; + + for(i = 0; i < 6; i++) { + grid[(i * size) + 8] += (seq >> i) & 0x01; + } + + for(i = 0; i < 8; i++) { + grid[(8 * size) + (size - i - 1)] += (seq >> i) & 0x01; + } + + for(i = 0; i < 6; i++) { + grid[(8 * size) + (5 - i)] += (seq >> (i + 9)) & 0x01; + } + + for(i = 0; i < 7; i++) { + grid[(((size - 7) + i) * size) + 8] += (seq >> (i + 8)) & 0x01; + } + + grid[(7 * size) + 8] += (seq >> 6) & 0x01; + grid[(8 * size) + 8] += (seq >> 7) & 0x01; + grid[(8 * size) + 7] += (seq >> 8) & 0x01; +} + +void add_version_info(unsigned char *grid, int size, int version) +{ + /* Add version information */ + int i; + + long int version_data = qr_annex_d[version - 7]; + for(i = 0; i < 6; i++) { + grid[((size - 11) * size) + i] += (version_data >> (i * 3)) & 0x01; + grid[((size - 10) * size) + i] += (version_data >> ((i * 3) + 1)) & 0x01; + grid[((size - 9) * size) + i] += (version_data >> ((i * 3) + 2)) & 0x01; + grid[(i * size) + (size - 11)] += (version_data >> (i * 3)) & 0x01; + grid[(i * size) + (size - 10)] += (version_data >> ((i * 3) + 1)) & 0x01; + grid[(i * size) + (size - 9)] += (version_data >> ((i * 3) + 2)) & 0x01; + } +} + +int qr_code(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int error_number, i, j, glyph, est_binlen; + int ecc_level, autosize, version, max_cw, target_binlen, blocks, size; + int bitmask, gs1; + +#ifndef _MSC_VER + int utfdata[length + 1]; + int jisdata[length + 1]; + char mode[length + 1]; +#else + int* utfdata = (int *)_alloca((length + 1) * sizeof(int)); + int* jisdata = (int *)_alloca((length + 1) * sizeof(int)); + char* mode = (char *)_alloca(length + 1); +#endif + + gs1 = (symbol->input_mode == GS1_MODE); + + switch(symbol->input_mode) { + case DATA_MODE: + for(i = 0; i < length; i++) { + jisdata[i] = (int)source[i]; + } + break; + default: + /* Convert Unicode input to Shift-JIS */ + error_number = utf8toutf16(symbol, source, utfdata, &length); + if(error_number != 0) { return error_number; } + + for(i = 0; i < length; i++) { + if(utfdata[i] <= 0xff) { + jisdata[i] = utfdata[i]; + } else { + j = 0; + glyph = 0; + do { + if(sjis_lookup[j * 2] == utfdata[i]) { + glyph = sjis_lookup[(j * 2) + 1]; + } + j++; + } while ((j < 6843) && (glyph == 0)); + if(glyph == 0) { + strcpy(symbol->errtxt, "Invalid character in input data"); + return ERROR_INVALID_DATA1; + } + jisdata[i] = glyph; + } + } + break; + } + + define_mode(mode, jisdata, length, gs1); + est_binlen = estimate_binary_length(mode, length, gs1); + + ecc_level = LEVEL_L; + max_cw = 2956; + if((symbol->option_1 >= 1) && (symbol->option_1 <= 4)) { + switch (symbol->option_1) { + case 1: ecc_level = LEVEL_L; max_cw = 2956; break; + case 2: ecc_level = LEVEL_M; max_cw = 2334; break; + case 3: ecc_level = LEVEL_Q; max_cw = 1666; break; + case 4: ecc_level = LEVEL_H; max_cw = 1276; break; + } + } + + if(est_binlen > (8 * max_cw)) { + strcpy(symbol->errtxt, "Input too long for selected error correction level"); + return ERROR_TOO_LONG; + } + + autosize = 40; + for(i = 39; i >= 0; i--) { + switch(ecc_level) { + case LEVEL_L: + if ((8 * qr_data_codewords_L[i]) >= est_binlen) { + autosize = i + 1; + } + break; + case LEVEL_M: + if ((8 * qr_data_codewords_M[i]) >= est_binlen) { + autosize = i + 1; + } + break; + case LEVEL_Q: + if ((8 * qr_data_codewords_Q[i]) >= est_binlen) { + autosize = i + 1; + } + break; + case LEVEL_H: + if ((8 * qr_data_codewords_H[i]) >= est_binlen) { + autosize = i + 1; + } + break; + } + } + + if((symbol->option_2 >= 1) && (symbol->option_2 <= 40)) { + if (symbol->option_2 > autosize) { + version = symbol->option_2; + } else { + version = autosize; + } + } else { + version = autosize; + } + + /* Ensure maxium error correction capacity */ + if(est_binlen <= qr_data_codewords_M[version - 1]) { ecc_level = LEVEL_M; } + if(est_binlen <= qr_data_codewords_Q[version - 1]) { ecc_level = LEVEL_Q; } + if(est_binlen <= qr_data_codewords_H[version - 1]) { ecc_level = LEVEL_H; } + + target_binlen = qr_data_codewords_L[version - 1]; blocks = qr_blocks_L[version - 1]; + switch(ecc_level) { + case LEVEL_M: target_binlen = qr_data_codewords_M[version - 1]; blocks = qr_blocks_M[version - 1]; break; + case LEVEL_Q: target_binlen = qr_data_codewords_Q[version - 1]; blocks = qr_blocks_Q[version - 1]; break; + case LEVEL_H: target_binlen = qr_data_codewords_H[version - 1]; blocks = qr_blocks_H[version - 1]; break; + } + +#ifndef _MSC_VER + int datastream[target_binlen + 1]; + int fullstream[qr_total_codewords[version - 1] + 1]; +#else + int* datastream = (int *)_alloca((target_binlen + 1) * sizeof(int)); + int* fullstream = (int *)_alloca((qr_total_codewords[version - 1] + 1) * sizeof(int)); +#endif + + qr_binary(datastream, version, target_binlen, mode, jisdata, length, gs1, est_binlen); + add_ecc(fullstream, datastream, version, target_binlen, blocks); + + size = qr_sizes[version - 1]; +#ifndef _MSC_VER + unsigned char grid[size * size]; +#else + unsigned char* grid = (unsigned char *)_alloca((size * size) * sizeof(unsigned char)); +#endif + + for(i = 0; i < size; i++) { + for(j = 0; j < size; j++) { + grid[(i * size) + j] = 0; + } + } + + setup_grid(grid, size, version); + populate_grid(grid, size, fullstream, qr_total_codewords[version - 1]); + bitmask = apply_bitmask(grid, size); + add_format_info(grid, size, ecc_level, bitmask); + if(version >= 7) { + add_version_info(grid, size, version); + } + + symbol->width = size; + symbol->rows = size; + + for(i = 0; i < size; i++) { + for(j = 0; j < size; j++) { + if(grid[(i * size) + j] & 0x01) { + set_module(symbol, i, j); + } + } + symbol->row_height[i] = 1; + } + + return 0; +} + +/* NOTE: From this point forward concerns Micro QR Code only */ + +int micro_qr_intermediate(char binary[], int jisdata[], char mode[], int length, int *kanji_used, int *alphanum_used, int *byte_used) +{ + /* Convert input data to an "intermediate stage" where data is binary encoded but + control information is not */ + int position = 0, debug = 0; + int short_data_block_length, i; + char data_block; + char buffer[2]; + + strcpy(binary, ""); + + if(debug) { + for(i = 0; i < length; i++) { + printf("%c", mode[i]); + } + printf("\n"); + } + + do { + if(strlen(binary) > 128) { + return ERROR_TOO_LONG; + } + + data_block = mode[position]; + short_data_block_length = 0; + do { + short_data_block_length++; + } while (((short_data_block_length + position) < length) && (mode[position + short_data_block_length] == data_block)); + + switch(data_block) { + case 'K': + /* Kanji mode */ + /* Mode indicator */ + concat(binary, "K"); + *kanji_used = 1; + + /* Character count indicator */ + buffer[0] = short_data_block_length; + buffer[1] = '\0'; + concat(binary, buffer); + + if(debug) { printf("Kanji block (length %d)\n\t", short_data_block_length); } + + /* Character representation */ + for(i = 0; i < short_data_block_length; i++) { + int jis = jisdata[position + i]; + int msb, lsb, prod; + + if(jis > 0x9fff) { jis -= 0xc140; } + msb = (jis & 0xff00) >> 4; + lsb = (jis & 0xff); + prod = (msb * 0xc0) + lsb; + + qr_bscan(binary, prod, 0x1000); + + if(debug) { printf("0x%4X ", prod); } + + if(strlen(binary) > 128) { + return ERROR_TOO_LONG; + } + } + + if(debug) { printf("\n"); } + + break; + case 'B': + /* Byte mode */ + /* Mode indicator */ + concat(binary, "B"); + *byte_used = 1; + + /* Character count indicator */ + buffer[0] = short_data_block_length; + buffer[1] = '\0'; + concat(binary, buffer); + + if(debug) { printf("Byte block (length %d)\n\t", short_data_block_length); } + + /* Character representation */ + for(i = 0; i < short_data_block_length; i++) { + int byte = jisdata[position + i]; + + qr_bscan(binary, byte, 0x80); + + if(debug) { printf("0x%4X ", byte); } + + if(strlen(binary) > 128) { + return ERROR_TOO_LONG; + } + } + + if(debug) { printf("\n"); } + + break; + case 'A': + /* Alphanumeric mode */ + /* Mode indicator */ + concat(binary, "A"); + *alphanum_used = 1; + + /* Character count indicator */ + buffer[0] = short_data_block_length; + buffer[1] = '\0'; + concat(binary, buffer); + + if(debug) { printf("Alpha block (length %d)\n\t", short_data_block_length); } + + /* Character representation */ + i = 0; + while ( i < short_data_block_length ) { + int count; + int first = 0, second = 0, prod; + + first = posn(RHODIUM, (char) jisdata[position + i]); + count = 1; + prod = first; + + if(mode[position + i + 1] == 'A') { + second = posn(RHODIUM, (char) jisdata[position + i + 1]); + count = 2; + prod = (first * 45) + second; + } + + qr_bscan(binary, prod, 1 << (5 * count)); /* count = 1..2 */ + + if(debug) { printf("0x%4X ", prod); } + + if(strlen(binary) > 128) { + return ERROR_TOO_LONG; + } + + i += 2; + }; + + if(debug) { printf("\n"); } + + break; + case 'N': + /* Numeric mode */ + /* Mode indicator */ + concat(binary, "N"); + + /* Character count indicator */ + buffer[0] = short_data_block_length; + buffer[1] = '\0'; + concat(binary, buffer); + + if(debug) { printf("Number block (length %d)\n\t", short_data_block_length); } + + /* Character representation */ + i = 0; + while ( i < short_data_block_length ) { + int count; + int first = 0, second = 0, third = 0, prod; + + first = posn(NEON, (char) jisdata[position + i]); + count = 1; + prod = first; + + if(mode[position + i + 1] == 'N') { + second = posn(NEON, (char) jisdata[position + i + 1]); + count = 2; + prod = (prod * 10) + second; + } + + if(mode[position + i + 2] == 'N') { + third = posn(NEON, (char) jisdata[position + i + 2]); + count = 3; + prod = (prod * 10) + third; + } + + qr_bscan(binary, prod, 1 << (3 * count)); /* count = 1..3 */ + + if(debug) { printf("0x%4X (%d)", prod, prod); } + + if(strlen(binary) > 128) { + return ERROR_TOO_LONG; + } + + i += 3; + }; + + if(debug) { printf("\n"); } + + break; + } + + position += short_data_block_length; + } while (position < length - 1) ; + + return 0; +} + +void get_bitlength(int count[], char stream[]) { + int length, i; + + length = strlen(stream); + + for(i = 0; i < 4; i++) { + count[i] = 0; + } + + i = 0; + do { + if((stream[i] == '0') || (stream[i] == '1')) { + count[0]++; + count[1]++; + count[2]++; + count[3]++; + i++; + } else { + switch(stream[i]) { + case 'K': + count[2] += 5; + count[3] += 7; + i += 2; + break; + case 'B': + count[2] += 6; + count[3] += 8; + i += 2; + break; + case 'A': + count[1] += 4; + count[2] += 6; + count[3] += 8; + i += 2; + break; + case 'N': + count[0] += 3; + count[1] += 5; + count[2] += 7; + count[3] += 9; + i += 2; + break; + } + } + } while (i < length); +} + +void microqr_expand_binary(char binary_stream[], char full_stream[], int version) +{ + int i, length; + + length = strlen(binary_stream); + + i = 0; + do { + switch(binary_stream[i]) { + case '1': concat(full_stream, "1"); i++; break; + case '0': concat(full_stream, "0"); i++; break; + case 'N': + /* Numeric Mode */ + /* Mode indicator */ + switch(version) { + case 1: concat(full_stream, "0"); break; + case 2: concat(full_stream, "00"); break; + case 3: concat(full_stream, "000"); break; + } + + /* Character count indicator */ + qr_bscan(full_stream, binary_stream[i + 1], 4 << version); /* version = 0..3 */ + + i += 2; + break; + case 'A': + /* Alphanumeric Mode */ + /* Mode indicator */ + switch(version) { + case 1: concat(full_stream, "1"); break; + case 2: concat(full_stream, "01"); break; + case 3: concat(full_stream, "001"); break; + } + + /* Character count indicator */ + qr_bscan(full_stream, binary_stream[i + 1], 2 << version); /* version = 1..3 */ + + i += 2; + break; + case 'B': + /* Byte Mode */ + /* Mode indicator */ + switch(version) { + case 2: concat(full_stream, "10"); break; + case 3: concat(full_stream, "010"); break; + } + + /* Character count indicator */ + qr_bscan(full_stream, binary_stream[i + 1], 2 << version); /* version = 2..3 */ + + i += 2; + break; + case 'K': + /* Kanji Mode */ + /* Mode indicator */ + switch(version) { + case 2: concat(full_stream, "11"); break; + case 3: concat(full_stream, "011"); break; + } + + /* Character count indicator */ + qr_bscan(full_stream, binary_stream[i + 1], 1 << version); /* version = 2..3 */ + + i += 2; + break; + } + + } while (i < length); +} + +void micro_qr_m1(char binary_data[]) +{ + int i, latch; + int bits_total, bits_left, remainder; + int data_codewords, ecc_codewords; + unsigned char data_blocks[4], ecc_blocks[3]; + + bits_total = 20; + latch = 0; + + /* Add terminator */ + bits_left = bits_total - strlen(binary_data); + if(bits_left <= 3) { + for(i = 0; i < bits_left; i++) { + concat(binary_data, "0"); + } + latch = 1; + } else { + concat(binary_data, "000"); + } + + if(latch == 0) { + /* Manage last (4-bit) block */ + bits_left = bits_total - strlen(binary_data); + if(bits_left <= 4) { + for(i = 0; i < bits_left; i++) { + concat(binary_data, "0"); + } + latch = 1; + } + } + + if(latch == 0) { + /* Complete current byte */ + remainder = 8 - (strlen(binary_data) % 8); + if(remainder == 8) { remainder = 0; } + for(i = 0; i < remainder; i++) { + concat(binary_data, "0"); + } + + /* Add padding */ + bits_left = bits_total - strlen(binary_data); + if(bits_left > 4) { + remainder = (bits_left - 4) / 8; + for(i = 0; i < remainder; i++) { + concat(binary_data, i & 1 ? "00010001" : "11101100"); + } + } + concat(binary_data, "0000"); + } + + data_codewords = 3; + ecc_codewords = 2; + + /* Copy data into codewords */ + for(i = 0; i < (data_codewords - 1); i++) { + data_blocks[i] = 0; + if(binary_data[i * 8] == '1') { data_blocks[i] += 0x80; } + if(binary_data[(i * 8) + 1] == '1') { data_blocks[i] += 0x40; } + if(binary_data[(i * 8) + 2] == '1') { data_blocks[i] += 0x20; } + if(binary_data[(i * 8) + 3] == '1') { data_blocks[i] += 0x10; } + if(binary_data[(i * 8) + 4] == '1') { data_blocks[i] += 0x08; } + if(binary_data[(i * 8) + 5] == '1') { data_blocks[i] += 0x04; } + if(binary_data[(i * 8) + 6] == '1') { data_blocks[i] += 0x02; } + if(binary_data[(i * 8) + 7] == '1') { data_blocks[i] += 0x01; } + } + data_blocks[2] = 0; + if(binary_data[16] == '1') { data_blocks[2] += 0x08; } + if(binary_data[17] == '1') { data_blocks[2] += 0x04; } + if(binary_data[18] == '1') { data_blocks[2] += 0x02; } + if(binary_data[19] == '1') { data_blocks[2] += 0x01; } + + /* Calculate Reed-Solomon error codewords */ + rs_init_gf(0x11d); + rs_init_code(ecc_codewords, 0); + rs_encode(data_codewords,data_blocks,ecc_blocks); + rs_free(); + + /* Add Reed-Solomon codewords to binary data */ + for(i = 0; i < ecc_codewords; i++) { + qr_bscan(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80); + } +} + +void micro_qr_m2(char binary_data[], int ecc_mode) +{ + int i, latch; + int bits_total, bits_left, remainder; + int data_codewords, ecc_codewords; + unsigned char data_blocks[6], ecc_blocks[7]; + + latch = 0; + + if(ecc_mode == LEVEL_L) { bits_total = 40; } + if(ecc_mode == LEVEL_M) { bits_total = 32; } + + /* Add terminator */ + bits_left = bits_total - strlen(binary_data); + if(bits_left <= 5) { + for(i = 0; i < bits_left; i++) { + concat(binary_data, "0"); + } + latch = 1; + } else { + concat(binary_data, "00000"); + } + + if(latch == 0) { + /* Complete current byte */ + remainder = 8 - (strlen(binary_data) % 8); + if(remainder == 8) { remainder = 0; } + for(i = 0; i < remainder; i++) { + concat(binary_data, "0"); + } + + /* Add padding */ + bits_left = bits_total - strlen(binary_data); + remainder = bits_left / 8; + for(i = 0; i < remainder; i++) { + concat(binary_data, i & 1 ? "00010001" : "11101100"); + } + } + + if(ecc_mode == LEVEL_L) { data_codewords = 5; ecc_codewords = 5; } + if(ecc_mode == LEVEL_M) { data_codewords = 4; ecc_codewords = 6; } + + /* Copy data into codewords */ + for(i = 0; i < data_codewords; i++) { + data_blocks[i] = 0; + if(binary_data[i * 8] == '1') { data_blocks[i] += 0x80; } + if(binary_data[(i * 8) + 1] == '1') { data_blocks[i] += 0x40; } + if(binary_data[(i * 8) + 2] == '1') { data_blocks[i] += 0x20; } + if(binary_data[(i * 8) + 3] == '1') { data_blocks[i] += 0x10; } + if(binary_data[(i * 8) + 4] == '1') { data_blocks[i] += 0x08; } + if(binary_data[(i * 8) + 5] == '1') { data_blocks[i] += 0x04; } + if(binary_data[(i * 8) + 6] == '1') { data_blocks[i] += 0x02; } + if(binary_data[(i * 8) + 7] == '1') { data_blocks[i] += 0x01; } + } + + /* Calculate Reed-Solomon error codewords */ + rs_init_gf(0x11d); + rs_init_code(ecc_codewords, 0); + rs_encode(data_codewords,data_blocks,ecc_blocks); + rs_free(); + + /* Add Reed-Solomon codewords to binary data */ + for(i = 0; i < ecc_codewords; i++) { + qr_bscan(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80); + } + + return; +} + +void micro_qr_m3(char binary_data[], int ecc_mode) +{ + int i, latch; + int bits_total, bits_left, remainder; + int data_codewords, ecc_codewords; + unsigned char data_blocks[12], ecc_blocks[9]; + + latch = 0; + + if(ecc_mode == LEVEL_L) { bits_total = 84; } + if(ecc_mode == LEVEL_M) { bits_total = 68; } + + /* Add terminator */ + bits_left = bits_total - strlen(binary_data); + if(bits_left <= 7) { + for(i = 0; i < bits_left; i++) { + concat(binary_data, "0"); + } + latch = 1; + } else { + concat(binary_data, "0000000"); + } + + if(latch == 0) { + /* Manage last (4-bit) block */ + bits_left = bits_total - strlen(binary_data); + if(bits_left <= 4) { + for(i = 0; i < bits_left; i++) { + concat(binary_data, "0"); + } + latch = 1; + } + } + + if(latch == 0) { + /* Complete current byte */ + remainder = 8 - (strlen(binary_data) % 8); + if(remainder == 8) { remainder = 0; } + for(i = 0; i < remainder; i++) { + concat(binary_data, "0"); + } + + /* Add padding */ + bits_left = bits_total - strlen(binary_data); + if(bits_left > 4) { + remainder = (bits_left - 4) / 8; + for(i = 0; i < remainder; i++) { + concat(binary_data, i & 1 ? "00010001" : "11101100"); + } + } + concat(binary_data, "0000"); + } + + if(ecc_mode == LEVEL_L) { data_codewords = 11; ecc_codewords = 6; } + if(ecc_mode == LEVEL_M) { data_codewords = 9; ecc_codewords = 8; } + + /* Copy data into codewords */ + for(i = 0; i < (data_codewords - 1); i++) { + data_blocks[i] = 0; + if(binary_data[i * 8] == '1') { data_blocks[i] += 0x80; } + if(binary_data[(i * 8) + 1] == '1') { data_blocks[i] += 0x40; } + if(binary_data[(i * 8) + 2] == '1') { data_blocks[i] += 0x20; } + if(binary_data[(i * 8) + 3] == '1') { data_blocks[i] += 0x10; } + if(binary_data[(i * 8) + 4] == '1') { data_blocks[i] += 0x08; } + if(binary_data[(i * 8) + 5] == '1') { data_blocks[i] += 0x04; } + if(binary_data[(i * 8) + 6] == '1') { data_blocks[i] += 0x02; } + if(binary_data[(i * 8) + 7] == '1') { data_blocks[i] += 0x01; } + } + + if(ecc_mode == LEVEL_L) { + data_blocks[11] = 0; + if(binary_data[80] == '1') { data_blocks[2] += 0x08; } + if(binary_data[81] == '1') { data_blocks[2] += 0x04; } + if(binary_data[82] == '1') { data_blocks[2] += 0x02; } + if(binary_data[83] == '1') { data_blocks[2] += 0x01; } + } + + if(ecc_mode == LEVEL_M) { + data_blocks[9] = 0; + if(binary_data[64] == '1') { data_blocks[2] += 0x08; } + if(binary_data[65] == '1') { data_blocks[2] += 0x04; } + if(binary_data[66] == '1') { data_blocks[2] += 0x02; } + if(binary_data[67] == '1') { data_blocks[2] += 0x01; } + } + + /* Calculate Reed-Solomon error codewords */ + rs_init_gf(0x11d); + rs_init_code(ecc_codewords, 0); + rs_encode(data_codewords,data_blocks,ecc_blocks); + rs_free(); + + /* Add Reed-Solomon codewords to binary data */ + for(i = 0; i < ecc_codewords; i++) { + qr_bscan(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80); + } + + return; +} + +void micro_qr_m4(char binary_data[], int ecc_mode) +{ + int i, latch; + int bits_total, bits_left, remainder; + int data_codewords, ecc_codewords; + unsigned char data_blocks[17], ecc_blocks[15]; + + latch = 0; + + if(ecc_mode == LEVEL_L) { bits_total = 128; } + if(ecc_mode == LEVEL_M) { bits_total = 112; } + if(ecc_mode == LEVEL_Q) { bits_total = 80; } + + /* Add terminator */ + bits_left = bits_total - strlen(binary_data); + if(bits_left <= 9) { + for(i = 0; i < bits_left; i++) { + concat(binary_data, "0"); + } + latch = 1; + } else { + concat(binary_data, "000000000"); + } + + if(latch == 0) { + /* Complete current byte */ + remainder = 8 - (strlen(binary_data) % 8); + if(remainder == 8) { remainder = 0; } + for(i = 0; i < remainder; i++) { + concat(binary_data, "0"); + } + + /* Add padding */ + bits_left = bits_total - strlen(binary_data); + remainder = bits_left / 8; + for(i = 0; i < remainder; i++) { + concat(binary_data, i & 1 ? "00010001" : "11101100"); + } + } + + if(ecc_mode == LEVEL_L) { data_codewords = 16; ecc_codewords = 8; } + if(ecc_mode == LEVEL_M) { data_codewords = 14; ecc_codewords = 10; } + if(ecc_mode == LEVEL_Q) { data_codewords = 10; ecc_codewords = 14; } + + /* Copy data into codewords */ + for(i = 0; i < data_codewords; i++) { + data_blocks[i] = 0; + if(binary_data[i * 8] == '1') { data_blocks[i] += 0x80; } + if(binary_data[(i * 8) + 1] == '1') { data_blocks[i] += 0x40; } + if(binary_data[(i * 8) + 2] == '1') { data_blocks[i] += 0x20; } + if(binary_data[(i * 8) + 3] == '1') { data_blocks[i] += 0x10; } + if(binary_data[(i * 8) + 4] == '1') { data_blocks[i] += 0x08; } + if(binary_data[(i * 8) + 5] == '1') { data_blocks[i] += 0x04; } + if(binary_data[(i * 8) + 6] == '1') { data_blocks[i] += 0x02; } + if(binary_data[(i * 8) + 7] == '1') { data_blocks[i] += 0x01; } + } + + /* Calculate Reed-Solomon error codewords */ + rs_init_gf(0x11d); + rs_init_code(ecc_codewords, 0); + rs_encode(data_codewords,data_blocks,ecc_blocks); + rs_free(); + + /* Add Reed-Solomon codewords to binary data */ + for(i = 0; i < ecc_codewords; i++) { + qr_bscan(binary_data, ecc_blocks[ecc_codewords - i - 1], 0x80); + } +} + +void micro_setup_grid(unsigned char* grid, int size) +{ + int i, toggle = 1; + + /* Add timing patterns */ + for(i = 0; i < size; i++) { + if(toggle == 1) { + grid[i] = 0x21; + grid[(i * size)] = 0x21; + toggle = 0; + } else { + grid[i] = 0x20; + grid[(i * size)] = 0x20; + toggle = 1; + } + } + + /* Add finder patterns */ + place_finder(grid, size, 0, 0); + + /* Add separators */ + for(i = 0; i < 7; i++) { + grid[(7 * size) + i] = 0x10; + grid[(i * size) + 7] = 0x10; + } + grid[(7 * size) + 7] = 0x10; + + + /* Reserve space for format information */ + for(i = 0; i < 8; i++) { + grid[(8 * size) + i] += 0x20; + grid[(i * size) + 8] += 0x20; + } + grid[(8 * size) + 8] += 20; +} + +void micro_populate_grid(unsigned char* grid, int size, char full_stream[]) +{ + int direction = 1; /* up */ + int row = 0; /* right hand side */ + + int i, n, x, y; + + n = strlen(full_stream); + y = size - 1; + i = 0; + do { + x = (size - 2) - (row * 2); + + if(!(grid[(y * size) + (x + 1)] & 0xf0)) { + if (full_stream[i] == '1') { + grid[(y * size) + (x + 1)] = 0x01; + } else { + grid[(y * size) + (x + 1)] = 0x00; + } + i++; + } + + if(i < n) { + if(!(grid[(y * size) + x] & 0xf0)) { + if (full_stream[i] == '1') { + grid[(y * size) + x] = 0x01; + } else { + grid[(y * size) + x] = 0x00; + } + i++; + } + } + + if(direction) { y--; } else { y++; } + if(y == 0) { + /* reached the top */ + row++; + y = 1; + direction = 0; + } + if(y == size) { + /* reached the bottom */ + row++; + y = size - 1; + direction = 1; + } + } while (i < n); +} + +int micro_evaluate(unsigned char *grid, int size, int pattern) +{ + int sum1, sum2, i, filter = 0, retval; + + switch(pattern) { + case 0: filter = 0x01; break; + case 1: filter = 0x02; break; + case 2: filter = 0x04; break; + case 3: filter = 0x08; break; + } + + sum1 = 0; + sum2 = 0; + for(i = 1; i < size; i++) { + if(grid[(i * size) + size - 1] & filter) { sum1++; } + if(grid[((size - 1) * size) + i] & filter) { sum2++; } + } + + if(sum1 <= sum2) { retval = (sum1 * 16) + sum2; } else { retval = (sum2 * 16) + sum1; } + + return retval; +} + +int micro_apply_bitmask(unsigned char *grid, int size) +{ + int x, y; + unsigned char p; + int pattern, value[8]; + int best_val, best_pattern; + int bit; + +#ifndef _MSC_VER + unsigned char mask[size * size]; + unsigned char eval[size * size]; +#else + unsigned char* mask = (unsigned char *)_alloca((size * size) * sizeof(unsigned char)); + unsigned char* eval = (unsigned char *)_alloca((size * size) * sizeof(unsigned char)); +#endif + + /* Perform data masking */ + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + mask[(y * size) + x] = 0x00; + + if (!(grid[(y * size) + x] & 0xf0)) { + if((y & 1) == 0) { + mask[(y * size) + x] += 0x01; + } + + if((((y / 2) + (x / 3)) & 1) == 0) { + mask[(y * size) + x] += 0x02; + } + + if(((((y * x) & 1) + ((y * x) % 3)) & 1) == 0) { + mask[(y * size) + x] += 0x04; + } + + if(((((y + x) & 1) + ((y * x) % 3)) & 1) == 0) { + mask[(y * size) + x] += 0x08; + } + } + } + } + + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + if(grid[(y * size) + x] & 0x01) { p = 0xff; } else { p = 0x00; } + + eval[(y * size) + x] = mask[(y * size) + x] ^ p; + } + } + + + /* Evaluate result */ + for(pattern = 0; pattern < 8; pattern++) { + value[pattern] = micro_evaluate(eval, size, pattern); + } + + best_pattern = 0; + best_val = value[0]; + for(pattern = 1; pattern < 4; pattern++) { + if(value[pattern] > best_val) { + best_pattern = pattern; + best_val = value[pattern]; + } + } + + /* Apply mask */ + for(x = 0; x < size; x++) { + for(y = 0; y < size; y++) { + bit = 0; + switch(best_pattern) { + case 0: if(mask[(y * size) + x] & 0x01) { bit = 1; } break; + case 1: if(mask[(y * size) + x] & 0x02) { bit = 1; } break; + case 2: if(mask[(y * size) + x] & 0x04) { bit = 1; } break; + case 3: if(mask[(y * size) + x] & 0x08) { bit = 1; } break; + } + if(bit == 1) { + if(grid[(y * size) + x] & 0x01) { + grid[(y * size) + x] = 0x00; + } else { + grid[(y * size) + x] = 0x01; + } + } + } + } + + return best_pattern; +} + +int microqr(struct zint_symbol *symbol, unsigned char source[], int length) +{ + int i, j, glyph, size; + char binary_stream[200]; + char full_stream[200]; + int utfdata[40]; + int jisdata[40]; + char mode[40]; + int error_number, kanji_used = 0, alphanum_used = 0, byte_used = 0; + int version_valid[4]; + int binary_count[4]; + int ecc_level, autoversion, version; + int n_count, a_count, bitmask, format, format_full; + + if(length > 35) { + strcpy(symbol->errtxt, "Input data too long"); + return ERROR_TOO_LONG; + } + + for(i = 0; i < 4; i++) { + version_valid[i] = 1; + } + + switch(symbol->input_mode) { + case DATA_MODE: + for(i = 0; i < length; i++) { + jisdata[i] = (int)source[i]; + } + break; + default: + /* Convert Unicode input to Shift-JIS */ + error_number = utf8toutf16(symbol, source, utfdata, &length); + if(error_number != 0) { return error_number; } + + for(i = 0; i < length; i++) { + if(utfdata[i] <= 0xff) { + jisdata[i] = utfdata[i]; + } else { + j = 0; + glyph = 0; + do { + if(sjis_lookup[j * 2] == utfdata[i]) { + glyph = sjis_lookup[(j * 2) + 1]; + } + j++; + } while ((j < 6843) && (glyph == 0)); + if(glyph == 0) { + strcpy(symbol->errtxt, "Invalid character in input data"); + return ERROR_INVALID_DATA1; + } + jisdata[i] = glyph; + } + } + break; + } + + define_mode(mode, jisdata, length, 0); + + n_count = 0; + a_count = 0; + for(i = 0; i < length; i++) { + if((jisdata[i] >= '0') && (jisdata[i] <= '9')) { n_count++; } + if(in_alpha(jisdata[i])) { a_count++; } + } + + if(a_count == length) { + /* All data can be encoded in Alphanumeric mode */ + for(i = 0; i < length; i++) { + mode[i] = 'A'; + } + } + + if(n_count == length) { + /* All data can be encoded in Numeric mode */ + for(i = 0; i < length; i++) { + mode[i] = 'N'; + } + } + + error_number = micro_qr_intermediate(binary_stream, jisdata, mode, length, &kanji_used, &alphanum_used, &byte_used); + if(error_number != 0) { + strcpy(symbol->errtxt, "Input data too long"); + return error_number; + } + + get_bitlength(binary_count, binary_stream); + + /* Eliminate possivle versions depending on type of content */ + if(byte_used) { + version_valid[0] = 0; + version_valid[1] = 0; + } + + if(alphanum_used) { + version_valid[0] = 0; + } + + if(kanji_used) { + version_valid[0] = 0; + version_valid[1] = 0; + } + + /* Eliminate possible versions depending on length of binary data */ + if(binary_count[0] > 20) { version_valid[0] = 0; } + if(binary_count[1] > 40) { version_valid[1] = 0; } + if(binary_count[2] > 84) { version_valid[2] = 0; } + if(binary_count[3] > 128) { + strcpy(symbol->errtxt, "Input data too long"); + return ERROR_TOO_LONG; + } + + /* Eliminate possible versions depending on error correction level specified */ + ecc_level = LEVEL_L; + if((symbol->option_1 >= 1) && (symbol->option_2 <= 4)) { + ecc_level = symbol->option_1; + } + + if(ecc_level == LEVEL_H) { + strcpy(symbol->errtxt, "Error correction level H not available"); + return ERROR_INVALID_OPTION; + } + + if(ecc_level == LEVEL_Q) { + version_valid[0] = 0; + version_valid[1] = 0; + version_valid[2] = 0; + if(binary_count[3] > 80) { + strcpy(symbol->errtxt, "Input data too long"); + return ERROR_TOO_LONG; + } + } + + if(ecc_level == LEVEL_M) { + version_valid[0] = 0; + if(binary_count[1] > 32) { version_valid[1] = 0; } + if(binary_count[2] > 68) { version_valid[2] = 0; } + if(binary_count[3] > 112) { + strcpy(symbol->errtxt, "Input data too long"); + return ERROR_TOO_LONG; + } + } + + autoversion = 3; + if(version_valid[2]) { autoversion = 2; } + if(version_valid[1]) { autoversion = 1; } + if(version_valid[0]) { autoversion = 0; } + + version = autoversion; + /* Get version from user */ + if((symbol->option_2 >= 1) && (symbol->option_2 <= 4)) { + if(symbol->option_2 >= autoversion) { + version = symbol->option_2; + } + } + + /* If there is enough unused space then increase the error correction level */ + if(version == 3) { + if(binary_count[3] <= 112) { ecc_level = LEVEL_M; } + if(binary_count[3] <= 80) { ecc_level = LEVEL_Q; } + } + + if(version == 2) { + if(binary_count[2] <= 68) { ecc_level = LEVEL_M; } + } + + if(version == 1) { + if(binary_count[1] <= 32) { ecc_level = LEVEL_M; } + } + + strcpy(full_stream, ""); + microqr_expand_binary(binary_stream, full_stream, version); + + switch(version) { + case 0: micro_qr_m1(full_stream); break; + case 1: micro_qr_m2(full_stream, ecc_level); break; + case 2: micro_qr_m3(full_stream, ecc_level); break; + case 3: micro_qr_m4(full_stream, ecc_level); break; + } + + size = micro_qr_sizes[version]; +#ifndef _MSC_VER + unsigned char grid[size * size]; +#else + unsigned char* grid = (unsigned char *)_alloca((size * size) * sizeof(unsigned char)); +#endif + + for(i = 0; i < size; i++) { + for(j = 0; j < size; j++) { + grid[(i * size) + j] = 0; + } + } + + micro_setup_grid(grid, size); + micro_populate_grid(grid, size, full_stream); + bitmask = micro_apply_bitmask(grid, size); + + /* Add format data */ + format = 0; + switch(version) { + case 1: switch(ecc_level) { + case 1: format = 1; break; + case 2: format = 2; break; + } + break; + case 2: switch(ecc_level) { + case 1: format = 3; break; + case 2: format = 4; break; + } + break; + case 3: switch(ecc_level) { + case 1: format = 5; break; + case 2: format = 6; break; + case 3: format = 7; break; + } + break; + } + + format_full = qr_annex_c1[(format << 2) + bitmask]; + + if(format_full & 0x4000) { grid[(8 * size) + 1] += 0x01; } + if(format_full & 0x2000) { grid[(8 * size) + 2] += 0x01; } + if(format_full & 0x1000) { grid[(8 * size) + 3] += 0x01; } + if(format_full & 0x800) { grid[(8 * size) + 4] += 0x01; } + if(format_full & 0x400) { grid[(8 * size) + 5] += 0x01; } + if(format_full & 0x200) { grid[(8 * size) + 6] += 0x01; } + if(format_full & 0x100) { grid[(8 * size) + 7] += 0x01; } + if(format_full & 0x80) { grid[(8 * size) + 8] += 0x01; } + if(format_full & 0x40) { grid[(7 * size) + 8] += 0x01; } + if(format_full & 0x20) { grid[(6 * size) + 8] += 0x01; } + if(format_full & 0x10) { grid[(5 * size) + 8] += 0x01; } + if(format_full & 0x08) { grid[(4 * size) + 8] += 0x01; } + if(format_full & 0x04) { grid[(3 * size) + 8] += 0x01; } + if(format_full & 0x02) { grid[(2 * size) + 8] += 0x01; } + if(format_full & 0x01) { grid[(1 * size) + 8] += 0x01; } + + symbol->width = size; + symbol->rows = size; + + for(i = 0; i < size; i++) { + for(j = 0; j < size; j++) { + if(grid[(i * size) + j] & 0x01) { + set_module(symbol, i, j); + } + } + symbol->row_height[i] = 1; + } + + return 0; +} diff --git a/3rdparty/zint-2.4.4/backend/qr.h b/3rdparty/zint-2.4.4/backend/qr.h new file mode 100644 index 0000000..47576d5 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/qr.h @@ -0,0 +1,156 @@ +/* qr.h Data for QR Code */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + Copyright (C) 2006 Kentaro Fukuchi + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define LEVEL_L 1 +#define LEVEL_M 2 +#define LEVEL_Q 3 +#define LEVEL_H 4 + +#define RHODIUM "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:" + +/* From ISO/IEC 18004:2006 Table 7 */ +static int qr_data_codewords_L[] = { + 19, 34, 55, 80, 108, 136, 156, 194, 232, 274, 324, 370, 428, 461, 523, 589, 647, + 721, 795, 861, 932, 1006, 1094, 1174, 1276, 1370, 1468, 1531, 1631, + 1735, 1843, 1955, 2071, 2191, 2306, 2434, 2566, 2702, 2812, 2956 +}; + +static int qr_data_codewords_M[] = { + 16, 28, 44, 64, 86, 108, 124, 154, 182, 216, 254, 290, 334, 365, 415, 453, 507, + 563, 627, 669, 714, 782, 860, 914, 1000, 1062, 1128, 1193, 1267, + 1373, 1455, 1541, 1631, 1725, 1812, 1914, 1992, 2102, 2216, 2334 +}; + +static int qr_data_codewords_Q[] = { + 13, 22, 34, 48, 62, 76, 88, 110, 132, 154, 180, 206, 244, 261, 295, 325, 367, + 397, 445, 485, 512, 568, 614, 664, 718, 754, 808, 871, 911, + 985, 1033, 1115, 1171, 1231, 1286, 1354, 1426, 1502, 1582, 1666 +}; + +static int qr_data_codewords_H[] = { + 9, 16, 26, 36, 46, 60, 66, 86, 100, 122, 140, 158, 180, 197, 223, 253, 283, + 313, 341, 385, 406, 442, 464, 514, 538, 596, 628, 661, 701, + 745, 793, 845, 901, 961, 986, 1054, 1096, 1142, 1222, 1276 +}; + +static int qr_total_codewords[] = { + 26, 44, 70, 100, 134, 172, 196, 242, 292, 346, 404, 466, 532, 581, 655, 733, 815, + 901, 991, 1085, 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, + 2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706 +}; + +static int qr_blocks_L[] = { + 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, + 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25 +}; + +static int qr_blocks_M[] = { + 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, + 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49 +}; + +static int qr_blocks_Q[] = { + 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, + 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68 +}; + +static int qr_blocks_H[] = { + 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, + 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81 +}; + +static int qr_sizes[] = { + 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, + 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177 +}; + +static int micro_qr_sizes[] = { + 11, 13, 15, 17 +}; + +static int qr_align_loopsize[] = { + 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7 +}; + +static int qr_table_e1[] = { + 6, 18, 0, 0, 0, 0, 0, + 6, 22, 0, 0, 0, 0, 0, + 6, 26, 0, 0, 0, 0, 0, + 6, 30, 0, 0, 0, 0, 0, + 6, 34, 0, 0, 0, 0, 0, + 6, 22, 38, 0, 0, 0, 0, + 6, 24, 42, 0, 0, 0, 0, + 6, 26, 46, 0, 0, 0, 0, + 6, 28, 50, 0, 0, 0, 0, + 6, 30, 54, 0, 0, 0, 0, + 6, 32, 58, 0, 0, 0, 0, + 6, 34, 62, 0, 0, 0, 0, + 6, 26, 46, 66, 0, 0, 0, + 6, 26, 48, 70, 0, 0, 0, + 6, 26, 50, 74, 0, 0, 0, + 6, 30, 54, 78, 0, 0, 0, + 6, 30, 56, 82, 0, 0, 0, + 6, 30, 58, 86, 0, 0, 0, + 6, 34, 62, 90, 0, 0, 0, + 6, 28, 50, 72, 94, 0, 0, + 6, 26, 50, 74, 98, 0, 0, + 6, 30, 54, 78, 102, 0, 0, + 6, 28, 54, 80, 106, 0, 0, + 6, 32, 58, 84, 110, 0, 0, + 6, 30, 58, 86, 114, 0, 0, + 6, 34, 62, 90, 118, 0, 0, + 6, 26, 50, 74, 98, 122, 0, + 6, 30, 54, 78, 102, 126, 0, + 6, 26, 52, 78, 104, 130, 0, + 6, 30, 56, 82, 108, 134, 0, + 6, 34, 60, 86, 112, 138, 0, + 6, 30, 58, 86, 114, 142, 0, + 6, 34, 62, 90, 118, 146, 0, + 6, 30, 54, 78, 102, 126, 150, + 6, 24, 50, 76, 102, 128, 154, + 6, 28, 54, 80, 106, 132, 158, + 6, 32, 58, 84, 110, 136, 162, + 6, 26, 54, 82, 110, 138, 166, + 6, 30, 58, 86, 114, 142, 170 +}; + +static unsigned int qr_annex_c[] = { + /* Format information bit sequences */ + 0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0, 0x77c4, 0x72f3, 0x7daa, 0x789d, + 0x662f, 0x6318, 0x6c41, 0x6976, 0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b, + 0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed +}; + +static long int qr_annex_d[] = { + /* Version information bit sequences */ + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, 0x0f928, 0x10b78, + 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, 0x177ec, 0x18ec4, 0x191e1, 0x1afab, + 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, + 0x2542e, 0x26a64, 0x27541, 0x28c69 +}; + +static int qr_annex_c1[] = { + /* Micro QR Code format information */ + 0x4445, 0x4172, 0x4e2b, 0x4b1c, 0x55ae, 0x5099, 0x5fc0, 0x5af7, 0x6793, 0x62a4, 0x6dfd, 0x68ca, 0x7678, 0x734f, + 0x7c16, 0x7921, 0x06de, 0x03e9, 0x0cb0, 0x0987, 0x1735, 0x1202, 0x1d5b, 0x186c, 0x2508, 0x203f, 0x2f66, 0x2a51, 0x34e3, + 0x31d4, 0x3e8d, 0x3bba +}; \ No newline at end of file diff --git a/3rdparty/zint-2.4.4/backend/reedsol.c b/3rdparty/zint-2.4.4/backend/reedsol.c new file mode 100644 index 0000000..b37950b --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/reedsol.c @@ -0,0 +1,161 @@ +/** + * + * This is a simple Reed-Solomon encoder + * (C) Cliff Hones 2004 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +// It is not written with high efficiency in mind, so is probably +// not suitable for real-time encoding. The aim was to keep it +// simple, general and clear. +// +// + +// Usage: +// First call rs_init_gf(poly) to set up the Galois Field parameters. +// Then call rs_init_code(size, index) to set the encoding size +// Then call rs_encode(datasize, data, out) to encode the data. +// +// These can be called repeatedly as required - but note that +// rs_init_code must be called following any rs_init_gf call. +// +// If the parameters are fixed, some of the statics below can be +// replaced with constants in the obvious way, and additionally +// malloc/free can be avoided by using static arrays of a suitable +// size. + +#include // only needed for debug (main) +#include // only needed for malloc/free +#include "reedsol.h" +static int gfpoly; +static int symsize; // in bits +static int logmod; // 2**symsize - 1 +static int rlen; + +static int *logt = NULL, *alog = NULL, *rspoly = NULL; + +// rs_init_gf(poly) initialises the parameters for the Galois Field. +// The symbol size is determined from the highest bit set in poly +// This implementation will support sizes up to 30 bits (though that +// will result in very large log/antilog tables) - bit sizes of +// 8 or 4 are typical +// +// The poly is the bit pattern representing the GF characteristic +// polynomial. e.g. for ECC200 (8-bit symbols) the polynomial is +// a**8 + a**5 + a**3 + a**2 + 1, which translates to 0x12d. + +void rs_init_gf(int poly) +{ + int m, b, p, v; + + // Find the top bit, and hence the symbol size + for (b = 1, m = 0; b <= poly; b <<= 1) + m++; + b >>= 1; + m--; + gfpoly = poly; + symsize = m; + + // Calculate the log/alog tables + logmod = (1 << m) - 1; + logt = (int *)malloc(sizeof(int) * (logmod + 1)); + alog = (int *)malloc(sizeof(int) * logmod); + + for (p = 1, v = 0; v < logmod; v++) { + alog[v] = p; + logt[p] = v; + p <<= 1; + if (p & b) + p ^= poly; + } +} + +// rs_init_code(nsym, index) initialises the Reed-Solomon encoder +// nsym is the number of symbols to be generated (to be appended +// to the input data). index is usually 1 - it is the index of +// the constant in the first term (i) of the RS generator polynomial: +// (x + 2**i)*(x + 2**(i+1))*... [nsym terms] +// For ECC200, index is 1. + +void rs_init_code(int nsym, int index) +{ + int i, k; + + rspoly = (int *)malloc(sizeof(int) * (nsym + 1)); + + rlen = nsym; + + rspoly[0] = 1; + for (i = 1; i <= nsym; i++) { + rspoly[i] = 1; + for (k = i - 1; k > 0; k--) { + if (rspoly[k]) + rspoly[k] = alog[(logt[rspoly[k]] + index) % logmod]; + rspoly[k] ^= rspoly[k - 1]; + } + rspoly[0] = alog[(logt[rspoly[0]] + index) % logmod]; + index++; + } +} + +void rs_encode(int len, unsigned char *data, unsigned char *res) +{ + int i, k, m; + for (i = 0; i < rlen; i++) + res[i] = 0; + for (i = 0; i < len; i++) { + m = res[rlen - 1] ^ data[i]; + for (k = rlen - 1; k > 0; k--) { + if (m && rspoly[k]) + res[k] = res[k - 1] ^ alog[(logt[m] + logt[rspoly[k]]) % logmod]; + else + res[k] = res[k - 1]; + } + if (m && rspoly[0]) + res[0] = alog[(logt[m] + logt[rspoly[0]]) % logmod]; + else + res[0] = 0; + } +} + +void rs_encode_long(int len, unsigned int *data, unsigned int *res) +{ /* The same as above but for larger bitlengths - Aztec code compatible */ + int i, k, m; + for (i = 0; i < rlen; i++) + res[i] = 0; + for (i = 0; i < len; i++) { + m = res[rlen - 1] ^ data[i]; + for (k = rlen - 1; k > 0; k--) { + if (m && rspoly[k]) + res[k] = res[k - 1] ^ alog[(logt[m] + logt[rspoly[k]]) % logmod]; + else + res[k] = res[k - 1]; + } + if (m && rspoly[0]) + res[0] = alog[(logt[m] + logt[rspoly[0]]) % logmod]; + else + res[0] = 0; + } +} + +void rs_free(void) +{ /* Free memory */ + free(logt); + free(alog); + free(rspoly); + rspoly = NULL; +} diff --git a/3rdparty/zint-2.4.4/backend/reedsol.h b/3rdparty/zint-2.4.4/backend/reedsol.h new file mode 100644 index 0000000..3a7f8ef --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/reedsol.h @@ -0,0 +1,40 @@ +/** + * + * This is a simple Reed-Solomon encoder + * (C) Cliff Hones 2004 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __REEDSOL_H +#define __REEDSOL_H + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +extern void rs_init_gf(int poly); +extern void rs_init_code(int nsym, int index); +extern void rs_encode(int len, unsigned char *data, unsigned char *res); +extern void rs_encode_long(int len, unsigned int *data, unsigned int *res); +extern void rs_free(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __REEDSOL_H */ diff --git a/3rdparty/zint-2.4.4/backend/render.c b/3rdparty/zint-2.4.4/backend/render.c new file mode 100644 index 0000000..de086d5 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/render.c @@ -0,0 +1,798 @@ +/* + * render.c - Generic Rendered Format + * + * Initiall written by Sam Lown for use in gLabels. Converts encoded + * data into a generic internal structure of lines and characters + * usable in external applications. + */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" + +#define GL_CONST 2.8346 + +struct zint_render_line *render_plot_create_line(float x, float y, float width, float length); +int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line); +struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width); +int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring); +struct zint_render_hexagon *render_plot_create_hexagon(float x, float y); +int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *ring, struct zint_render_hexagon **last_hexagon); + +int render_plot_add_string(struct zint_symbol *symbol, unsigned char *text, float x, float y, float fsize, float width, struct zint_render_string **last_string); + +int render_plot(struct zint_symbol *symbol, float width, float height) +{ + struct zint_render *render; + struct zint_render_line *line, *last_line = NULL; + struct zint_render_string *last_string = NULL; + struct zint_render_ring *ring, *last_ring = NULL; + struct zint_render_hexagon *hexagon, *last_hexagon = NULL; + + int i, r, block_width, latch, this_row; + float textpos, textwidth, large_bar_height, preset_height, row_height, row_posn = 0.0; + // int error_number = 0; + int text_offset, text_height, xoffset, yoffset, textdone, main_symbol_width_x, addon_width_x; + char addon[6], textpart[10]; + int large_bar_count, symbol_lead_in, total_symbol_width_x, total_area_width_x; + float addon_text_posn; + float default_text_posn; + float scaler; + const char *locale = NULL; + int hide_text = 0; + float required_aspect; + float symbol_aspect = 1; + float x_dimension; + int upceanflag = 0; + + // Allocate memory for the rendered version +#ifndef _MSC_VER + render = symbol->rendered = malloc(sizeof(struct zint_render)); +#else + render = symbol->rendered = (struct zint_render *)_alloca(sizeof(struct zint_render)); +#endif + render->lines = NULL; + render->strings = NULL; + render->rings = NULL; + render->hexagons = NULL; + + locale = setlocale(LC_ALL, "C"); + + row_height = 0; + textdone = 0; + textpos = 0.0; + main_symbol_width_x = symbol->width; + strcpy(addon, ""); + symbol_lead_in = 0; + addon_text_posn = 0.0; + addon_width_x = 0; + + /* + * Determine if there will be any addon texts and text height + */ + latch = 0; + r = 0; + /* Isolate add-on text */ + if(is_extendable(symbol->symbology)) { + for(i = 0; i < ustrlen(symbol->text); i++) { + if (latch == 1) { + addon[r] = symbol->text[i]; + r++; + } + if (symbol->text[i] == '+') { + latch = 1; + } + } + } + addon[r] = '\0'; + + if((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)) { + hide_text = 1; + text_height = text_offset = 0.0; + } else { + text_height = 9.0; + text_offset = 2.0; + } + + + /* + * Calculate the width of the barcode, especially if there are any extra + * borders or white space to add. + */ + + while(!(module_is_set(symbol, symbol->rows - 1, symbol_lead_in))) { + symbol_lead_in++; + } + + /* Certain symbols need whitespace otherwise characters get chopped off the sides */ + if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) + || (symbol->symbology == BARCODE_ISBNX)) { + switch(ustrlen(symbol->text)) { + case 13: /* EAN 13 */ + case 16: + case 19: + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + } + main_symbol_width_x = 96 + symbol_lead_in; + upceanflag = 13; + break; + case 2: + main_symbol_width_x = 22 + symbol_lead_in; + upceanflag = 2; + break; + case 5: + main_symbol_width_x = 49 + symbol_lead_in; + upceanflag = 5; + break; + default: + main_symbol_width_x = 68 + symbol_lead_in; + upceanflag = 8; + } + switch(ustrlen(symbol->text)) { + case 11: + case 16: + /* EAN-2 add-on */ + addon_width_x = 31; + break; + case 14: + case 19: + /* EAN-5 add-on */ + addon_width_x = 58; + break; + } + } + + if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) { + upceanflag = 12; + if(symbol->whitespace_width < 10) { + symbol->whitespace_width = 10; + main_symbol_width_x = 96 + symbol_lead_in; + } + switch(ustrlen(symbol->text)) { + case 15: + /* EAN-2 add-on */ + addon_width_x = 31; + break; + case 18: + /* EAN-5 add-on */ + addon_width_x = 58; + break; + } + } + + if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) { + upceanflag = 6; + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + main_symbol_width_x = 51 + symbol_lead_in; + } + switch(ustrlen(symbol->text)) { + case 11: + /* EAN-2 add-on */ + addon_width_x = 31; + break; + case 14: + /* EAN-5 add-on */ + addon_width_x = 58; + break; + } + } + + total_symbol_width_x = main_symbol_width_x + addon_width_x; + total_area_width_x = total_symbol_width_x + (2 * (symbol->border_width + symbol->whitespace_width)); + + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + + // Determine if height should be overridden + large_bar_count = 0; + preset_height = 0.0; + for(i = 0; i < symbol->rows; i++) { + preset_height += symbol->row_height[i]; + if(symbol->row_height[i] == 0) { + large_bar_count++; + } + } + + if (large_bar_count == 0) { + required_aspect = width / height; + symbol_aspect = (total_symbol_width_x + (2 * xoffset)) / (preset_height + (2 * yoffset) + text_offset + text_height); + symbol->height = preset_height; + if (required_aspect > symbol_aspect) { + /* the area is too wide */ + scaler = height / (preset_height + (2 * yoffset) + text_offset + text_height); + render->width = symbol_aspect * height; + render->height = height; + } else { + /* the area is too high */ + scaler = width / (total_symbol_width_x + (2 * xoffset)); + render->width = width; + render->height = width / symbol_aspect; + } + } else { + scaler = width / (total_symbol_width_x + (2 * xoffset)); + symbol->height = (height / scaler) - ((2 * yoffset) + text_offset + text_height); + + render->width = width; + render->height = height; + } + large_bar_height = (symbol->height - preset_height) / large_bar_count; + + if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + default_text_posn = (symbol->height + text_offset + symbol->border_width + symbol->border_width) * scaler; + } else { + default_text_posn = (symbol->height + text_offset + symbol->border_width) * scaler; + } + + x_dimension = render->width / total_area_width_x; + x_dimension /= GL_CONST; + + /* Set minimum size of symbol */ + /* Barcode must be at least 2mm high by 2mm across */ + if(render->height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST) { + render->height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 2.0) * GL_CONST; + } + if(render->width < (2.0 * GL_CONST)) { + render->width = (2.0 * GL_CONST); + } + + if(symbol->symbology == BARCODE_CODABAR) { + /* The minimum X-dimension of Codabar is 0.191mm. The minimum bar height is 5mm */ + if(x_dimension < 0.191) { + render->width = 0.191 * GL_CONST * total_area_width_x; + } + if(render->height < ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST) { + render->height = ((x_dimension * ((2 * symbol->border_width) + text_offset + text_height)) + 5.0) * GL_CONST; + } + } + + if(symbol->symbology == BARCODE_CODE49) { + /* The minimum X-dimension of Code 49 is 0.191mm */ + if(x_dimension < 0.191) { + render->width = 0.191 * GL_CONST * total_area_width_x; + render->height = render->width / symbol_aspect; + } + } + + if(upceanflag != 0) { + /* The X-dimension of UPC/EAN symbols is fixed at 0.330mm */ + /* NOTE: This code will need adjustment before it correctly deals with composite symbols */ + render->width = 0.330 * GL_CONST * total_area_width_x; + /* The height is also fixed */ + switch (upceanflag) { + case 6: + case 12: + case 13: + /* UPC-A, UPC-E and EAN-13 */ + /* Height of bars should be 22.85mm */ + render->height = ((0.330 * ((2 * symbol->border_width) + text_offset + text_height)) + 22.85) * GL_CONST; + break; + case 8: + /* EAN-8 */ + /* Height of bars should be 18.23mm */ + render->height = ((0.330 * ((2 * symbol->border_width) + text_offset + text_height)) + 18.23) * GL_CONST; + break; + default: + /* EAN-2 and EAN-5 */ + /* Height of bars should be 21.10mm */ + render->height = ((0.330 * ((2 * symbol->border_width) + text_offset + text_height)) + 21.10) * GL_CONST; + } + } + + if(symbol->symbology == BARCODE_ONECODE) { + /* The size of USPS Intelligent Mail barcode is fixed */ + render->width = 0.508 * GL_CONST * total_area_width_x; + render->height = 4.064 * GL_CONST; + } + + if((symbol->symbology == BARCODE_POSTNET) || (symbol->symbology == BARCODE_PLANET)) { + /* The size of PostNet and PLANET are fized */ + render->width = 0.508 * GL_CONST * total_area_width_x; + render->height = 2.921 * GL_CONST; + } + + if(((symbol->symbology == BARCODE_AUSPOST) || (symbol->symbology == BARCODE_AUSREPLY)) || + ((symbol->symbology == BARCODE_AUSROUTE) || (symbol->symbology == BARCODE_AUSREDIRECT))) { + /* Australia Post use the same sizes as USPS */ + render->width = 0.508 * GL_CONST * total_area_width_x; + render->height = 4.064 * GL_CONST; + } + + if((symbol->symbology == BARCODE_RM4SCC) || (symbol->symbology == BARCODE_KIX)) { + /* Royal Mail and KIX Code uses 22 bars per inch */ + render->width = 0.577 * GL_CONST * total_area_width_x; + render->height = 5.22 * GL_CONST; + } + + if(symbol->symbology == BARCODE_MAXICODE) { + /* Maxicode is a fixed size */ + scaler = GL_CONST; /* Converts from millimeters to the scale used by glabels */ + render->width = 28.16 * scaler; + render->height = 26.86 * scaler; + + /* Central bullseye pattern */ + ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 0.85 * scaler, 0.67 * scaler); + render_plot_add_ring(symbol, ring, &last_ring); + ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 2.20 * scaler, 0.67 * scaler); + render_plot_add_ring(symbol, ring, &last_ring); + ring = render_plot_create_ring(13.64 * scaler, 13.43 * scaler, 3.54 * scaler, 0.67 * scaler); + render_plot_add_ring(symbol, ring, &last_ring); + + /* Hexagons */ + for(r = 0; r < symbol->rows; r++) { + for(i = 0; i < symbol->width; i++) { + if(module_is_set(symbol, r, i)) { + hexagon = render_plot_create_hexagon(((i * 0.88) + (r & 1 ? 1.76 : 1.32)) * scaler, ((r * 0.76) + 0.76) * scaler); + render_plot_add_hexagon(symbol, hexagon, &last_hexagon); + } + } + } + + } else { + /* everything else uses rectangles (or squares) */ + /* Works from the bottom of the symbol up */ + int addon_latch = 0; + + for(r = 0; r < symbol->rows; r++) { + this_row = r; + if(symbol->row_height[this_row] == 0) { + row_height = large_bar_height; + } else { + row_height = symbol->row_height[this_row]; + } + row_posn = 0; + for(i = 0; i < r; i++) { + if(symbol->row_height[i] == 0) { + row_posn += large_bar_height; + } else { + row_posn += symbol->row_height[i]; + } + } + row_posn += yoffset; + + i = 0; + if(module_is_set(symbol, this_row, 0)) { + latch = 1; + } else { + latch = 0; + } + + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); + if((addon_latch == 0) && (r == (symbol->rows - 1)) && (i > main_symbol_width_x)) { + addon_text_posn = row_posn * scaler; + addon_latch = 1; + } + if(latch == 1) { + /* a bar */ + if(addon_latch == 0) { + line = render_plot_create_line((i + xoffset) * scaler, (row_posn) * scaler, block_width * scaler, row_height * scaler); + } else { + line = render_plot_create_line((i + xoffset) * scaler, (row_posn + 10.0) * scaler, block_width * scaler, (row_height - 5.0) * scaler); + } + latch = 0; + + render_plot_add_line(symbol, line, &last_line); + } else { + /* a space */ + latch = 1; + } + i += block_width; + + } while (i < symbol->width); + } + } + /* That's done the actual data area, everything else is human-friendly */ + + + /* Add the text */ + xoffset -= symbol_lead_in; + row_posn = (row_posn + large_bar_height) * scaler; + + if (!hide_text) { + if(upceanflag == 8) { + /* guard bar extensions and text formatting for EAN-8 */ + i = 0; + for (line = symbol->rendered->lines; line != NULL; line = line->next) { + switch(i) { + case 0: + case 1: + case 10: + case 11: + case 20: + case 21: + line->length += (5.0 * scaler); + break; + } + i++; + } + + for(i = 0; i < 4; i++) { + textpart[i] = symbol->text[i]; + } + textpart[4] = '\0'; + textpos = 17; + textwidth = 4.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); + for(i = 0; i < 4; i++) { + textpart[i] = symbol->text[i + 4]; + } + textpart[4] = '\0'; + textpos = 50; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = xoffset + 86; + textwidth = 2.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, 11.0 * scaler, textwidth * scaler, &last_string); + break; + case 5: + textpos = xoffset + 100; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, 11.0 * scaler, textwidth * scaler, &last_string); + break; + } + + } + + if(upceanflag == 13) { + /* guard bar extensions and text formatting for EAN-13 */ + i = 0; + for (line = symbol->rendered->lines; line != NULL; line = line->next) { + switch(i) { + case 0: + case 1: + case 14: + case 15: + case 28: + case 29: + line->length += (5.0 * scaler); + break; + } + i++; + } + + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -5; // 7 + textwidth = 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); + + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + textpos = 25; + textwidth = 6.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 7]; + } + textpart[6] = '\0'; + textpos = 72; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = xoffset + 114; + textwidth = 2.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, 11.0 * scaler, textwidth * scaler, &last_string); + break; + case 5: + textpos = xoffset + 128; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, 11.0 * scaler, textwidth * scaler, &last_string); + break; + } + } + + if (upceanflag == 12) { + /* guard bar extensions and text formatting for UPCA */ + i = 0; + for (line = symbol->rendered->lines; line != NULL; line = line->next) { + switch(i) { + case 0: + case 1: + case 2: + case 3: + case 14: + case 15: + case 26: + case 27: + case 28: + case 29: + line->length += (5.0 * scaler); + break; + } + i++; + } + + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -5; + textwidth = 6.2; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string); + for(i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[5] = '\0'; + textpos = 27; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); + for(i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 6]; + } + textpos = 68; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); + textpart[0] = symbol->text[11]; + textpart[1] = '\0'; + textpos = 100; + textwidth = 6.2; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = xoffset + 116; + textwidth = 2.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, 11.0 * scaler, textwidth * scaler, &last_string); + break; + case 5: + textpos = xoffset + 130; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, 11.0 * scaler, textwidth * scaler, &last_string); + break; + } + } + + if (upceanflag == 6) { + /* guard bar extensions and text formatting for UPCE */ + i = 0; + for (line = symbol->rendered->lines; line != NULL; line = line->next) { + switch(i) { + case 0: + case 1: + case 14: + case 15: + case 16: + line->length += (5.0 * scaler); + break; + } + i++; + } + + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -5; + textwidth = 6.2; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + textpos = 24; + textwidth = 6.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn, 11.0 * scaler, textwidth * scaler, &last_string); + textpart[0] = symbol->text[7]; + textpart[1] = '\0'; + textpos = 55; + textwidth = 6.2; + render_plot_add_string(symbol, (unsigned char *) textpart, (textpos + xoffset) * scaler, default_text_posn + (2.0 * scaler), 8.0 * scaler, textwidth * scaler, &last_string); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = xoffset + 70; + textwidth = 2.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, 11.0 * scaler, textwidth * scaler, &last_string); + break; + case 5: + textpos = xoffset + 84; + textwidth = 5.0 * 8.5; + render_plot_add_string(symbol, (unsigned char *) addon, textpos * scaler, addon_text_posn * scaler, 11.0 * scaler, textwidth * scaler, &last_string); + break; + } + } + + /* Put normal human readable text at the bottom (and centered) */ + if (textdone == 0) { + // caculate start xoffset to center text + render_plot_add_string(symbol, symbol->text, ((symbol->width / 2.0) + xoffset) * scaler, default_text_posn, 9.0 * scaler, 0.0, &last_string); + } + } + + switch(symbol->symbology) { + case BARCODE_MAXICODE: + /* Do nothing! */ + break; + default: + if((symbol->output_options & BARCODE_BIND) != 0) { + if((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) { + /* row binding */ + for(r = 1; r < symbol->rows; r++) { + line = render_plot_create_line(xoffset * scaler, ((r * row_height) + yoffset - 1) * scaler, symbol->width * scaler, 2.0 * scaler); + render_plot_add_line(symbol, line, &last_line); + } + } + } + if (((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + line = render_plot_create_line(0, 0, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler); + render_plot_add_line(symbol, line, &last_line); + line = render_plot_create_line(0, (symbol->height + symbol->border_width) * scaler, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler); + render_plot_add_line(symbol, line, &last_line); + } + if((symbol->output_options & BARCODE_BOX) != 0) { + /* side bars */ + line = render_plot_create_line(0, 0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler); + render_plot_add_line(symbol, line, &last_line); + line = render_plot_create_line((symbol->width + xoffset + xoffset - symbol->border_width) * scaler, 0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler); + render_plot_add_line(symbol, line, &last_line); + } + break; + } + + if (locale) + setlocale(LC_ALL, locale); + + return 1; +} + + +/* + * Create a new line with its memory allocated ready for adding to the + * rendered structure. + * + * This is much quicker than writing out each line manually (in some cases!) + */ +struct zint_render_line *render_plot_create_line(float x, float y, float width, float length) +{ + struct zint_render_line *line; + +#ifndef _MSC_VER + line = malloc(sizeof(struct zint_render_line)); +#else + line = (struct zint_render_line *)_alloca(sizeof(struct zint_render_line)); +#endif + line->next = NULL; + line->x = x; + line->y = y; + line->width = width; + line->length = length; + + return line; +} + +/* + * Add the line to the current rendering and update the last line's + * next value. + */ +int render_plot_add_line(struct zint_symbol *symbol, struct zint_render_line *line, struct zint_render_line **last_line) +{ + if (*last_line) + (*last_line)->next = line; + else + symbol->rendered->lines = line; // first line + + *last_line = line; + return 1; +} + +struct zint_render_ring *render_plot_create_ring(float x, float y, float radius, float line_width) +{ + struct zint_render_ring *ring; + +#ifndef _MSC_VER + ring = malloc(sizeof(struct zint_render_ring)); +#else + ring = (struct zint_render_ring *)_alloca(sizeof(struct zint_render_ring)); +#endif + ring->next = NULL; + ring->x = x; + ring->y = y; + ring->radius = radius; + ring->line_width = line_width; + + return ring; +} + +int render_plot_add_ring(struct zint_symbol *symbol, struct zint_render_ring *ring, struct zint_render_ring **last_ring) +{ + if (*last_ring) + (*last_ring)->next = ring; + else + symbol->rendered->rings = ring; // first ring + + *last_ring = ring; + return 1; +} + +struct zint_render_hexagon *render_plot_create_hexagon(float x, float y) +{ + struct zint_render_hexagon *hexagon; + +#ifndef _MSC_VER + hexagon = malloc(sizeof(struct zint_render_hexagon)); +#else + hexagon = (struct zint_render_hexagon *)_alloca(sizeof(struct zint_render_hexagon)); +#endif + hexagon->next = NULL; + hexagon->x = x; + hexagon->y = y; + + return hexagon; +} + +int render_plot_add_hexagon(struct zint_symbol *symbol, struct zint_render_hexagon *hexagon, struct zint_render_hexagon **last_hexagon) +{ + if (*last_hexagon) + (*last_hexagon)->next = hexagon; + else + symbol->rendered->hexagons = hexagon; // first hexagon + + *last_hexagon = hexagon; + return 1; +} + +/* + * Add a string structure to the symbol. + * Coordinates assumed to be from top-center. + */ +int render_plot_add_string(struct zint_symbol *symbol, + unsigned char *text, float x, float y, float fsize, float width, + struct zint_render_string **last_string) +{ + struct zint_render_string *string; + +#ifndef _MSC_VER + string = malloc(sizeof(struct zint_render_string)); +#else + string = (struct zint_render_string *)_alloca(sizeof(struct zint_render_string)); +#endif + string->next = NULL; + string->x = x; + string->y = y; + string->width = width; + string->fsize = fsize; + string->length = ustrlen(text); +#ifndef _MSC_VER + string->text = malloc(sizeof(unsigned char) * (ustrlen(text) + 1)); +#else + string->text = (unsigned char *)_alloca((ustrlen(text) + 1) * sizeof(unsigned char)); +#endif + ustrcpy(string->text, text); + + if (*last_string) + (*last_string)->next = string; + else + symbol->rendered->strings = string; // First character + *last_string = string; + + return 1; +} diff --git a/3rdparty/zint-2.4.4/backend/rss.c b/3rdparty/zint-2.4.4/backend/rss.c new file mode 100644 index 0000000..edf1cdc --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/rss.c @@ -0,0 +1,2264 @@ +/* rss.c - Handles Reduced Space Symbology (GS1 DataBar) */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* The functions "combins" and "getRSSwidths" are copyright BSI and are + released with permission under the following terms: + + "Copyright subsists in all BSI publications. BSI also holds the copyright, in the + UK, of the international standardisation bodies. Except as + permitted under the Copyright, Designs and Patents Act 1988 no extract may be + reproduced, stored in a retrieval system or transmitted in any form or by any + means - electronic, photocopying, recording or otherwise - without prior written + permission from BSI. + + "This does not preclude the free use, in the course of implementing the standard, + of necessary details such as symbols, and size, type or grade designations. If these + details are to be used for any other purpose than implementation then the prior + written permission of BSI must be obtained." + + The date of publication for these functions is 30 November 2006 +*/ + +/* Includes numerous bugfixes thanks to Pablo Orduña @ the PIRAmIDE project */ + +#include +#include +#include +#ifdef _MSC_VER +#include +#endif +#include "common.h" +#include "large.h" +#include "rss.h" +#include "gs1.h" + +/********************************************************************** +* combins(n,r): returns the number of Combinations of r selected from n: +* Combinations = n! / ((n - r)! * r!) +**********************************************************************/ +int combins(int n, int r) { + int i, j; + int maxDenom, minDenom; + int val; + + if (n-r > r) { + minDenom = r; + maxDenom = n-r; + } + else { + minDenom = n-r; + maxDenom = r; + } + val = 1; + j = 1; + for (i = n; i > maxDenom; i--) { + val *= i; + if (j <= minDenom) { + val /= j; + j++; + } + } + for (; j <= minDenom; j++) { + val /= j; + } + return(val); +} + +/********************************************************************** +* getRSSwidths +* routine to generate widths for RSS elements for a given value.# +* +* Calling arguments: +* val = required value +* n = number of modules +* elements = elements in a set (RSS-14 & Expanded = 4; RSS Limited = 7) +* maxWidth = maximum module width of an element +* noNarrow = 0 will skip patterns without a one module wide element +* +* Return: +* static int widths[] = element widths +**********************************************************************/ +void getRSSwidths(int val, int n, int elements, int maxWidth, int noNarrow) +{ + int bar; + int elmWidth; + int mxwElement; + int subVal, lessVal; + int narrowMask = 0; + for (bar = 0; bar < elements-1; bar++) + { + for(elmWidth = 1, narrowMask |= (1<= elements-bar-1)) + { + subVal -= combins(n-elmWidth-(elements-bar), elements-bar-2); + } + /* less combinations with elements > maxVal */ + if (elements-bar-1 > 1) + { + lessVal = 0; + for (mxwElement = n-elmWidth-(elements-bar-2); + mxwElement > maxWidth; + mxwElement--) + { + lessVal += combins(n-elmWidth-mxwElement-1, elements-bar-3); + } + subVal -= lessVal * (elements-1-bar); + } + else if (n-elmWidth > maxWidth) + { + subVal--; + } + val -= subVal; + if (val < 0) break; + } + val += subVal; + n -= elmWidth; + widths[bar] = elmWidth; + } + widths[bar] = n; + return; +} + +int rss14(struct zint_symbol *symbol, unsigned char source[], int src_len) +{ /* GS1 DataBar-14 */ + int error_number = 0, i, j, mask; + short int accum[112], left_reg[112], right_reg[112], x_reg[112], y_reg[112]; + int data_character[4], data_group[4], v_odd[4], v_even[4]; + int data_widths[8][4], checksum, c_left, c_right, total_widths[46], writer; + char latch, hrt[15], temp[32]; + int check_digit, count, separator_row; + + separator_row = 0; + + if(src_len > 13) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, src_len); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* make some room for a separator row for composite symbols */ + switch(symbol->symbology) { + case BARCODE_RSS14_CC: + case BARCODE_RSS14STACK_CC: + case BARCODE_RSS14_OMNI_CC: + separator_row = symbol->rows; + symbol->row_height[separator_row] = 1; + symbol->rows += 1; + break; + } + + for(i = 0; i < 112; i++) { + accum[i] = 0; + x_reg[i] = 0; + y_reg[i] = 0; + } + + for(i = 0; i < 4; i++) { + data_character[i] = 0; + data_group[i] = 0; + } + + binary_load(accum, (char*)source, src_len); + strcpy(temp, "10000000000000"); + if(symbol->option_1 == 2) { + /* Add symbol linkage flag */ + binary_load(y_reg, temp, strlen(temp)); + binary_add(accum, y_reg); + for(i = 0; i < 112; i++) { + y_reg[i] = 0; + } + } + + /* Calculate left and right pair values */ + strcpy(temp, "4537077"); + binary_load(x_reg, temp, strlen(temp)); + + for(i = 0; i < 24; i++) { + shiftup(x_reg); + } + + for(i = 24; i >= 0; i--) { + y_reg[i] = islarger(accum, x_reg); + if(y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + for(i = 0; i < 112; i++) { + left_reg[i] = y_reg[i]; + right_reg[i] = accum[i]; + } + + /* Calculate four data characters */ + strcpy(temp, "1597"); + binary_load(x_reg, temp, strlen(temp)); + for(i = 0; i < 112; i++) { + accum[i] = left_reg[i]; + } + + for(i = 0; i < 24; i++) { + shiftup(x_reg); + } + + for(i = 24; i >= 0; i--) { + y_reg[i] = islarger(accum, x_reg); + if(y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + data_character[0] = 0; + data_character[1] = 0; + mask = 0x2000; + for(i = 13; i >= 0; i--) { + if(y_reg[i] == 1) { + data_character[0] += mask; + } + if(accum[i] == 1) { + data_character[1] += mask; + } + mask = mask >> 1; + } + strcpy(temp, "1597"); + binary_load(x_reg, temp, strlen(temp)); + for(i = 0; i < 112; i++) { + accum[i] = right_reg[i]; + } + + for(i = 0; i < 24; i++) { + shiftup(x_reg); + } + + for(i = 24; i >= 0; i--) { + y_reg[i] = islarger(accum, x_reg); + if(y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + data_character[2] = 0; + data_character[3] = 0; + mask = 0x2000; + for(i = 13; i >= 0; i--) { + if(y_reg[i] == 1) { + data_character[2] += mask; + } + if(accum[i] == 1) { + data_character[3] += mask; + } + mask = mask >> 1; + } + + /* Calculate odd and even subset values */ + + if((data_character[0] >= 0) && (data_character[0] <= 160)) { data_group[0] = 0; } + if((data_character[0] >= 161) && (data_character[0] <= 960)) { data_group[0] = 1; } + if((data_character[0] >= 961) && (data_character[0] <= 2014)) { data_group[0] = 2; } + if((data_character[0] >= 2015) && (data_character[0] <= 2714)) { data_group[0] = 3; } + if((data_character[0] >= 2715) && (data_character[0] <= 2840)) { data_group[0] = 4; } + if((data_character[1] >= 0) && (data_character[1] <= 335)) { data_group[1] = 5; } + if((data_character[1] >= 336) && (data_character[1] <= 1035)) { data_group[1] = 6; } + if((data_character[1] >= 1036) && (data_character[1] <= 1515)) { data_group[1] = 7; } + if((data_character[1] >= 1516) && (data_character[1] <= 1596)) { data_group[1] = 8; } + if((data_character[3] >= 0) && (data_character[3] <= 335)) { data_group[3] = 5; } + if((data_character[3] >= 336) && (data_character[3] <= 1035)) { data_group[3] = 6; } + if((data_character[3] >= 1036) && (data_character[3] <= 1515)) { data_group[3] = 7; } + if((data_character[3] >= 1516) && (data_character[3] <= 1596)) { data_group[3] = 8; } + if((data_character[2] >= 0) && (data_character[2] <= 160)) { data_group[2] = 0; } + if((data_character[2] >= 161) && (data_character[2] <= 960)) { data_group[2] = 1; } + if((data_character[2] >= 961) && (data_character[2] <= 2014)) { data_group[2] = 2; } + if((data_character[2] >= 2015) && (data_character[2] <= 2714)) { data_group[2] = 3; } + if((data_character[2] >= 2715) && (data_character[2] <= 2840)) { data_group[2] = 4; } + + v_odd[0] = (data_character[0] - g_sum_table[data_group[0]]) / t_table[data_group[0]]; + v_even[0] = (data_character[0] - g_sum_table[data_group[0]]) % t_table[data_group[0]]; + v_odd[1] = (data_character[1] - g_sum_table[data_group[1]]) % t_table[data_group[1]]; + v_even[1] = (data_character[1] - g_sum_table[data_group[1]]) / t_table[data_group[1]]; + v_odd[3] = (data_character[3] - g_sum_table[data_group[3]]) % t_table[data_group[3]]; + v_even[3] = (data_character[3] - g_sum_table[data_group[3]]) / t_table[data_group[3]]; + v_odd[2] = (data_character[2] - g_sum_table[data_group[2]]) / t_table[data_group[2]]; + v_even[2] = (data_character[2] - g_sum_table[data_group[2]]) % t_table[data_group[2]]; + + + /* Use RSS subset width algorithm */ + for(i = 0; i < 4; i++) { + if((i == 0)||(i == 2)) { + getRSSwidths(v_odd[i], modules_odd[data_group[i]], 4, widest_odd[data_group[i]], 1); + data_widths[0][i] = widths[0]; + data_widths[2][i] = widths[1]; + data_widths[4][i] = widths[2]; + data_widths[6][i] = widths[3]; + getRSSwidths(v_even[i], modules_even[data_group[i]], 4, widest_even[data_group[i]], 0); + data_widths[1][i] = widths[0]; + data_widths[3][i] = widths[1]; + data_widths[5][i] = widths[2]; + data_widths[7][i] = widths[3]; + } else { + getRSSwidths(v_odd[i], modules_odd[data_group[i]], 4, widest_odd[data_group[i]], 0); + data_widths[0][i] = widths[0]; + data_widths[2][i] = widths[1]; + data_widths[4][i] = widths[2]; + data_widths[6][i] = widths[3]; + getRSSwidths(v_even[i], modules_even[data_group[i]], 4, widest_even[data_group[i]], 1); + data_widths[1][i] = widths[0]; + data_widths[3][i] = widths[1]; + data_widths[5][i] = widths[2]; + data_widths[7][i] = widths[3]; + } + } + + + checksum = 0; + /* Calculate the checksum */ + for(i = 0; i < 8; i++) { + checksum += checksum_weight[i] * data_widths[i][0]; + checksum += checksum_weight[i+8] * data_widths[i][1]; + checksum += checksum_weight[i+16] * data_widths[i][2]; + checksum += checksum_weight[i+24] * data_widths[i][3]; + } + checksum %= 79; + + /* Calculate the two check characters */ + if(checksum >= 8) { checksum++; } + if(checksum >= 72) { checksum++; } + c_left = checksum / 9; + c_right = checksum % 9; + + /* Put element widths together */ + total_widths[0] = 1; + total_widths[1] = 1; + total_widths[44] = 1; + total_widths[45] = 1; + for(i = 0; i < 8; i++) { + total_widths[i + 2] = data_widths[i][0]; + total_widths[i + 15] = data_widths[7 - i][1]; + total_widths[i + 23] = data_widths[i][3]; + total_widths[i + 36] = data_widths[7 - i][2]; + } + for(i = 0; i < 5; i++) { + total_widths[i + 10] = finder_pattern[i + (5 * c_left)]; + total_widths[i + 31] = finder_pattern[(4 - i) + (5 * c_right)]; + } + + /* Put this data into the symbol */ + if((symbol->symbology == BARCODE_RSS14) || (symbol->symbology == BARCODE_RSS14_CC)) { + writer = 0; + latch = '0'; + for(i = 0; i < 46; i++) { + for(j = 0; j < total_widths[i]; j++) { + if(latch == '1') { set_module(symbol, symbol->rows, writer); } + writer++; + } + if(latch == '1') { + latch = '0'; + } else { + latch = '1'; + } + } + if(symbol->width < writer) { symbol->width = writer; } + if(symbol->symbology == BARCODE_RSS14_CC) { + /* separator pattern for composite symbol */ + for(i = 4; i < 92; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); } + } + latch = '1'; + for(i = 16; i < 32; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + if(latch == '1') { + set_module(symbol, separator_row, i); + latch = '0'; + } else { + unset_module(symbol, separator_row, i); + latch = '1'; + } + } else { + unset_module(symbol, separator_row, i); + latch = '1'; + } + } + latch = '1'; + for(i = 63; i < 78; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + if(latch == '1') { + set_module(symbol, separator_row, i); + latch = '0'; + } else { + unset_module(symbol, separator_row, i); + latch = '1'; + } + } else { + unset_module(symbol, separator_row, i); + latch = '1'; + } + } + } + symbol->rows = symbol->rows + 1; + + count = 0; + check_digit = 0; + + /* Calculate check digit from Annex A and place human readable text */ + ustrcpy(symbol->text, (unsigned char*)"(01)"); + for(i = 0; i < 14; i++) { + hrt[i] = '0'; + } + for(i = 0; i < src_len; i++) { + hrt[12 - i] = source[src_len - i - 1]; + } + hrt[14] = '\0'; + + for (i = 0; i < 13; i++) { + count += ctoi(hrt[i]); + + if (!(i & 1)) { + count += 2 * (ctoi(hrt[i])); + } + } + + check_digit = 10 - (count%10); + if (check_digit == 10) { check_digit = 0; } + hrt[13] = itoc(check_digit); + + uconcat(symbol->text, (unsigned char*)hrt); + } + + if((symbol->symbology == BARCODE_RSS14STACK) || (symbol->symbology == BARCODE_RSS14STACK_CC)) { + /* top row */ + writer = 0; + latch = '0'; + for(i = 0; i < 23; i++) { + for(j = 0; j < total_widths[i]; j++) { + if(latch == '1') { + set_module(symbol, symbol->rows, writer); + } else { + unset_module(symbol, symbol->rows, writer); + } + writer++; + } + if(latch == '1') { + latch = '0'; + } else { + latch = '1'; + } + } + set_module(symbol, symbol->rows, writer); + unset_module(symbol, symbol->rows, writer + 1); + symbol->row_height[symbol->rows] = 5; + /* bottom row */ + symbol->rows = symbol->rows + 2; + set_module(symbol, symbol->rows, 0); + unset_module(symbol, symbol->rows, 1); + writer = 0; + latch = '1'; + for(i = 23; i < 46; i++) { + for(j = 0; j < total_widths[i]; j++) { + if(latch == '1') { + set_module(symbol, symbol->rows, writer + 2); + } else { + unset_module(symbol, symbol->rows, writer + 2); + } + writer++; + } + if(latch == '1') { + latch = '0'; + } else { + latch = '1'; + } + } + symbol->row_height[symbol->rows] = 7; + /* separator pattern */ + for(i = 4; i < 46; i++) { + if(module_is_set(symbol, symbol->rows - 2, i) == module_is_set(symbol, symbol->rows, i)) { + if(!(module_is_set(symbol, symbol->rows - 2, i))) { + set_module(symbol, symbol->rows - 1, i); + } + } else { + if(!(module_is_set(symbol, symbol->rows - 1, i - 1))) { + set_module(symbol, symbol->rows - 1, i); + } + } + } + symbol->row_height[symbol->rows - 1] = 1; + if(symbol->symbology == BARCODE_RSS14STACK_CC) { + /* separator pattern for composite symbol */ + for(i = 4; i < 46; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); + } + } + latch = '1'; + for(i = 16; i < 32; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + if(latch == '1') { + set_module(symbol, separator_row, i); + latch = '0'; + } else { + unset_module(symbol, separator_row, i); + latch = '1'; + } + } else { + unset_module(symbol, separator_row, i); + latch = '1'; + } + } + } + symbol->rows = symbol->rows + 1; + if(symbol->width < 50) { symbol->width = 50; } + } + + if((symbol->symbology == BARCODE_RSS14STACK_OMNI) || (symbol->symbology == BARCODE_RSS14_OMNI_CC)) { + /* top row */ + writer = 0; + latch = '0'; + for(i = 0; i < 23; i++) { + for(j = 0; j < total_widths[i]; j++) { + if(latch == '1') { set_module(symbol, symbol->rows, writer); } else { unset_module(symbol, symbol->rows, writer); } + writer++; + } + latch = (latch == '1' ? '0' : '1'); + } + set_module(symbol, symbol->rows, writer); + unset_module(symbol, symbol->rows, writer + 1); + /* bottom row */ + symbol->rows = symbol->rows + 4; + set_module(symbol, symbol->rows, 0); + unset_module(symbol, symbol->rows, 1); + writer = 0; + latch = '1'; + for(i = 23; i < 46; i++) { + for(j = 0; j < total_widths[i]; j++) { + if(latch == '1') { set_module(symbol, symbol->rows, writer + 2); } else { unset_module(symbol, symbol->rows, writer + 2); } + writer++; + } + if(latch == '1') { + latch = '0'; + } else { + latch = '1'; + } + } + /* middle separator */ + for(i = 5; i < 46; i += 2) { + set_module(symbol, symbol->rows - 2, i); + } + symbol->row_height[symbol->rows - 2] = 1; + /* top separator */ + for(i = 4; i < 46; i++) { + if(!(module_is_set(symbol, symbol->rows - 4, i))) { + set_module(symbol, symbol->rows - 3, i); + } + } + latch = '1'; + for(i = 17; i < 33; i++) { + if(!(module_is_set(symbol, symbol->rows - 4, i))) { + if(latch == '1') { + set_module(symbol, symbol->rows - 3, i); + latch = '0'; + } else { + unset_module(symbol, symbol->rows - 3, i); + latch = '1'; + } + } else { + unset_module(symbol, symbol->rows - 3, i); + latch = '1'; + } + } + symbol->row_height[symbol->rows - 3] = 1; + /* bottom separator */ + for(i = 4; i < 46; i++) { + if(!(module_is_set(symbol, symbol->rows, i))) { + set_module(symbol, symbol->rows - 1, i); + } + } + latch = '1'; + for(i = 16; i < 32; i++) { + if(!(module_is_set(symbol, symbol->rows, i))) { + if(latch == '1') { + set_module(symbol, symbol->rows - 1, i); + latch = '0'; + } else { + unset_module(symbol, symbol->rows - 1, i); + latch = '1'; + } + } else { + unset_module(symbol, symbol->rows - 1, i); + latch = '1'; + } + } + symbol->row_height[symbol->rows - 1] = 1; + if(symbol->width < 50) { symbol->width = 50; } + if(symbol->symbology == BARCODE_RSS14_OMNI_CC) { + /* separator pattern for composite symbol */ + for(i = 4; i < 46; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); + } + } + latch = '1'; + for(i = 16; i < 32; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + if(latch == '1') { + set_module(symbol, separator_row, i); + latch = '0'; + } else { + unset_module(symbol, separator_row, i); + latch = '1'; + } + } else { + unset_module(symbol, separator_row, i); + latch = '1'; + } + } + } + symbol->rows = symbol->rows + 1; + } + + + return error_number; +} + +int rsslimited(struct zint_symbol *symbol, unsigned char source[], int src_len) +{ /* GS1 DataBar Limited */ + int error_number = 0, i, mask; + short int accum[112], left_reg[112], right_reg[112], x_reg[112], y_reg[112]; + int left_group, right_group, left_odd, left_even, right_odd, right_even; + int left_character, right_character, left_widths[14], right_widths[14]; + int checksum, check_elements[14], total_widths[46], writer, j, check_digit, count; + char latch, hrt[15], temp[32]; + int separator_row; + + separator_row = 0; + + if(src_len > 13) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + error_number = is_sane(NEON, source, src_len); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + if(src_len == 13) { + if((source[0] != '0') && (source[0] != '1')) { + strcpy(symbol->errtxt, "Input out of range"); + return ERROR_INVALID_DATA1; + } + } + + /* make some room for a separator row for composite symbols */ + if(symbol->symbology == BARCODE_RSS_LTD_CC) { + separator_row = symbol->rows; + symbol->row_height[separator_row] = 1; + symbol->rows += 1; + } + + for(i = 0; i < 112; i++) { + accum[i] = 0; + x_reg[i] = 0; + y_reg[i] = 0; + } + + binary_load(accum, (char*)source, src_len); + if(symbol->option_1 == 2) { + /* Add symbol linkage flag */ + strcpy(temp, "2015133531096"); + binary_load(y_reg, temp, strlen(temp)); + binary_add(accum, y_reg); + for(i = 0; i < 112; i++) { + y_reg[i] = 0; + } + } + + /* Calculate left and right pair values */ + strcpy(temp, "2013571"); + binary_load(x_reg, temp, strlen(temp)); + + for(i = 0; i < 24; i++) { + shiftup(x_reg); + } + + for(i = 24; i >= 0; i--) { + y_reg[i] = islarger(accum, x_reg); + if(y_reg[i] == 1) { + binary_subtract(accum, x_reg); + } + shiftdown(x_reg); + } + + for(i = 0; i < 112; i++) { + left_reg[i] = y_reg[i]; + right_reg[i] = accum[i]; + } + + left_group = 0; + strcpy(temp, "183063"); + binary_load(accum, temp, strlen(temp)); + if(islarger(left_reg, accum)) { left_group = 1; } + strcpy(temp, "820063"); + binary_load(accum, temp, strlen(temp)); + if(islarger(left_reg, accum)) { left_group = 2; } + strcpy(temp, "1000775"); + binary_load(accum, temp, strlen(temp)); + if(islarger(left_reg, accum)) { left_group = 3; } + strcpy(temp, "1491020"); + binary_load(accum, temp, strlen(temp)); + if(islarger(left_reg, accum)) { left_group = 4; } + strcpy(temp, "1979844"); + binary_load(accum, temp, strlen(temp)); + if(islarger(left_reg, accum)) { left_group = 5; } + strcpy(temp, "1996938"); + binary_load(accum, temp, strlen(temp)); + if(islarger(left_reg, accum)) { left_group = 6; } + right_group = 0; + strcpy(temp, "183063"); + binary_load(accum, temp, strlen(temp)); + if(islarger(right_reg, accum)) { right_group = 1; } + strcpy(temp, "820063"); + binary_load(accum, temp, strlen(temp)); + if(islarger(right_reg, accum)) { right_group = 2; } + strcpy(temp, "1000775"); + binary_load(accum, temp, strlen(temp)); + if(islarger(right_reg, accum)) { right_group = 3; } + strcpy(temp, "1491020"); + binary_load(accum, temp, strlen(temp)); + if(islarger(right_reg, accum)) { right_group = 4; } + strcpy(temp, "1979844"); + binary_load(accum, temp, strlen(temp)); + if(islarger(right_reg, accum)) { right_group = 5; } + strcpy(temp, "1996938"); + binary_load(accum, temp, strlen(temp)); + if(islarger(right_reg, accum)) { right_group = 6; } + + switch(left_group) { + case 1: strcpy(temp, "183064"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 2: strcpy(temp, "820064"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 3: strcpy(temp, "1000776"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 4: strcpy(temp, "1491021"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 5: strcpy(temp, "1979845"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + case 6: strcpy(temp, "1996939"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(left_reg, accum); + break; + } + + switch(right_group) { + case 1: strcpy(temp, "183064"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 2: strcpy(temp, "820064"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 3: strcpy(temp, "1000776"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 4: strcpy(temp, "1491021"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 5: strcpy(temp, "1979845"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + case 6: strcpy(temp, "1996939"); + binary_load(accum, temp, strlen(temp)); + binary_subtract(right_reg, accum); + break; + } + + left_character = 0; + right_character = 0; + mask = 0x800000; + for(i = 23; i >= 0; i--) { + if(left_reg[i] == 1) { + left_character += mask; + } + if(right_reg[i] == 1) { + right_character += mask; + } + mask = mask >> 1; + } + + left_odd = left_character / t_even_ltd[left_group]; + left_even = left_character % t_even_ltd[left_group]; + right_odd = right_character / t_even_ltd[right_group]; + right_even = right_character % t_even_ltd[right_group]; + + getRSSwidths(left_odd, modules_odd_ltd[left_group], 7, widest_odd_ltd[left_group], 1); + left_widths[0] = widths[0]; + left_widths[2] = widths[1]; + left_widths[4] = widths[2]; + left_widths[6] = widths[3]; + left_widths[8] = widths[4]; + left_widths[10] = widths[5]; + left_widths[12] = widths[6]; + getRSSwidths(left_even, modules_even_ltd[left_group], 7, widest_even_ltd[left_group], 0); + left_widths[1] = widths[0]; + left_widths[3] = widths[1]; + left_widths[5] = widths[2]; + left_widths[7] = widths[3]; + left_widths[9] = widths[4]; + left_widths[11] = widths[5]; + left_widths[13] = widths[6]; + getRSSwidths(right_odd, modules_odd_ltd[right_group], 7, widest_odd_ltd[right_group], 1); + right_widths[0] = widths[0]; + right_widths[2] = widths[1]; + right_widths[4] = widths[2]; + right_widths[6] = widths[3]; + right_widths[8] = widths[4]; + right_widths[10] = widths[5]; + right_widths[12] = widths[6]; + getRSSwidths(right_even, modules_even_ltd[right_group], 7, widest_even_ltd[right_group], 0); + right_widths[1] = widths[0]; + right_widths[3] = widths[1]; + right_widths[5] = widths[2]; + right_widths[7] = widths[3]; + right_widths[9] = widths[4]; + right_widths[11] = widths[5]; + right_widths[13] = widths[6]; + + checksum = 0; + /* Calculate the checksum */ + for(i = 0; i < 14; i++) { + checksum += checksum_weight_ltd[i] * left_widths[i]; + checksum += checksum_weight_ltd[i + 14] * right_widths[i]; + } + checksum %= 89; + + for(i = 0; i < 14; i++) { + check_elements[i] = finder_pattern_ltd[i + (checksum * 14)]; + } + + total_widths[0] = 1; + total_widths[1] = 1; + total_widths[44] = 1; + total_widths[45] = 1; + for(i = 0; i < 14; i++) { + total_widths[i + 2] = left_widths[i]; + total_widths[i + 16] = check_elements[i]; + total_widths[i + 30] = right_widths[i]; + } + + writer = 0; + latch = '0'; + for(i = 0; i < 46; i++) { + for(j = 0; j < total_widths[i]; j++) { + if(latch == '1') { set_module(symbol, symbol->rows, writer); } else { unset_module(symbol, symbol->rows, writer); } + writer++; + } + latch = (latch == '1' ? '0' : '1'); + } + if(symbol->width < writer) { symbol->width = writer; } + symbol->rows = symbol->rows + 1; + + /* add separator pattern if composite symbol */ + if(symbol->symbology == BARCODE_RSS_LTD_CC) { + for(i = 4; i < 70; i++) { + if(!(module_is_set(symbol, separator_row + 1, i))) { + set_module(symbol, separator_row, i); + } + } + } + + /* Calculate check digit from Annex A and place human readable text */ + + check_digit = 0; + count = 0; + + ustrcpy(symbol->text, (unsigned char*)"(01)"); + for(i = 0; i < 14; i++) { + hrt[i] = '0'; + } + for(i = 0; i < src_len; i++) { + hrt[12 - i] = source[src_len - i - 1]; + } + + for (i = 0; i < 13; i++) { + count += ctoi(hrt[i]); + + if (!(i & 1)) { + count += 2 * (ctoi(hrt[i])); + } + } + + check_digit = 10 - (count%10); + if (check_digit == 10) { check_digit = 0; } + + hrt[13] = itoc(check_digit); + hrt[14] = '\0'; + + uconcat(symbol->text, (unsigned char*)hrt); + + return error_number; +} + +int general_rules(char field[], char type[]) +{ /* Attempts to apply encoding rules from secions 7.2.5.5.1 to 7.2.5.5.3 + of ISO/IEC 24724:2006 */ + int block[2][200], block_count, i, j, k; + char current, next, last; + + block_count = 0; + + block[0][block_count] = 1; + block[1][block_count] = type[0]; + + for(i = 1; i < strlen(type); i++) { + current = type[i]; + last = type[i - 1]; + + if(current == last) { + block[0][block_count] = block[0][block_count] + 1; + } else { + block_count++; + block[0][block_count] = 1; + block[1][block_count] = type[i]; + } + } + + block_count++; + + for(i = 0; i < block_count; i++) { + } + + for(i = 0; i < block_count; i++) { + current = block[1][i]; + next = (block[1][i + 1] & 0xFF); + + if((current == ISOIEC) && (i != (block_count - 1))) { + if((next == ANY_ENC) && (block[0][i + 1] >= 4)) { + block[1][i + 1] = NUMERIC; + } + if((next == ANY_ENC) && (block[0][i + 1] < 4)) { + block[1][i + 1] = ISOIEC; + } + if((next == ALPHA_OR_ISO) && (block[0][i + 1] >= 5)) { + block[1][i + 1] = ALPHA; + } + if((next == ALPHA_OR_ISO) && (block[0][i + 1] < 5)) { + block[1][i + 1] = ISOIEC; + } + } + + if(current == ALPHA_OR_ISO) { + block[1][i] = ALPHA; + } + + if((current == ALPHA) && (i != (block_count - 1))) { + if((next == ANY_ENC) && (block[0][i + 1] >= 6)) { + block[1][i + 1] = NUMERIC; + } + if((next == ANY_ENC) && (block[0][i + 1] < 6)) { + if((i == block_count - 2) && (block[0][i + 1] >= 4)) { + block[1][i + 1] = NUMERIC; + } else { + block[1][i + 1] = ALPHA; + } + } + } + + if(current == ANY_ENC) { + block[1][i] = NUMERIC; + } + } + + if(block_count > 1) { + i = 1; + while(i < block_count) { + if(block[1][i - 1] == block[1][i]) { + /* bring together */ + block[0][i - 1] = block[0][i - 1] + block[0][i]; + j = i + 1; + + /* decreace the list */ + while(j < block_count) { + block[0][j - 1] = block[0][j]; + block[1][j - 1] = block[1][j]; + j++; + } + block_count--; + i--; + } + i++; + } + } + + for(i = 0; i < block_count - 1; i++) { + if((block[1][i] == NUMERIC) && (block[0][i] & 1)) { + /* Odd size numeric block */ + block[0][i] = block[0][i] - 1; + block[0][i + 1] = block[0][i + 1] + 1; + } + } + + j = 0; + for(i = 0; i < block_count; i++) { + for(k = 0; k < block[0][i]; k++) { + type[j] = block[1][i]; + j++; + } + } + + if((block[1][block_count - 1] == NUMERIC) && (block[0][block_count - 1] & 1)) { + /* If the last block is numeric and an odd size, further + processing needs to be done outside this procedure */ + return 1; + } else { + return 0; + } +} + +int rss_binary_string(struct zint_symbol *symbol, char source[], char binary_string[]) +{ /* Handles all data encodation from section 7.2.5 of ISO/IEC 24724 */ + int encoding_method, i, mask, j, read_posn, latch, debug = 0, last_mode = ISOIEC; +#ifndef _MSC_VER + char general_field[strlen(source)], general_field_type[strlen(source)]; +#else + char* general_field = (char*)_alloca(strlen(source)); + char* general_field_type = (char*)_alloca(strlen(source)); +#endif + int remainder, d1, d2, value; + char padstring[40]; + + read_posn=0; + value=0; + + /* Decide whether a compressed data field is required and if so what + method to use - method 2 = no compressed data field */ + + if((strlen(source) >= 16) && ((source[0] == '0') && (source[1] == '1'))) { + /* (01) and other AIs */ + encoding_method = 1; + if(debug) printf("Choosing Method 1\n"); + } else { + /* any AIs */ + encoding_method = 2; + if(debug) printf("Choosing Mehod 2\n"); + } + + if(((strlen(source) >= 20) && (encoding_method == 1)) && ((source[2] == '9') && (source[16] == '3'))) { + /* Possibly encoding method > 2 */ + if(debug) printf("Checking for other methods\n"); + + if((strlen(source) >= 26) && (source[17] == '1')) { + /* Methods 3, 7, 9, 11 and 13 */ + + if(source[18] == '0') { + /* (01) and (310x) */ + char weight_str[7]; + float weight; /* In kilos */ + + for(i = 0; i < 6; i++) { + weight_str[i] = source[20 + i]; + } + weight_str[6] = '\0'; + + if (weight_str[0] == '0') { /* Maximum weight = 99999 */ + + + encoding_method = 7; + + if((source[19] == '3') && (strlen(source) == 26)) { + /* (01) and (3103) */ + weight = atof(weight_str) / 1000.0; + + if(weight <= 32.767) { encoding_method = 3; } + } + + if(strlen(source) == 34){ + if((source[26] == '1') && (source[27] == '1')) { + /* (01), (310x) and (11) - metric weight and production date */ + encoding_method = 7; + } + + if((source[26] == '1') && (source[27] == '3')) { + /* (01), (310x) and (13) - metric weight and packaging date */ + encoding_method = 9; + } + + if((source[26] == '1') && (source[27] == '5')) { + /* (01), (310x) and (15) - metric weight and "best before" date */ + encoding_method = 11; + } + + if((source[26] == '1') && (source[27] == '7')) { + /* (01), (310x) and (17) - metric weight and expiration date */ + encoding_method = 13; + } + } + } + } + if(debug) printf("Now using method %d\n", encoding_method); + } + + if((strlen(source) >= 26) && (source[17] == '2')) { + /* Methods 4, 8, 10, 12 and 14 */ + + if(source[18] == '0') { + /* (01) and (320x) */ + char weight_str[7]; + float weight; /* In pounds */ + + for(i = 0; i < 6; i++) { + weight_str[i] = source[20 + i]; + } + weight_str[6] = '\0'; + + if (weight_str[0] == '0') { /* Maximum weight = 99999 */ + + encoding_method = 8; + + if(((source[19] == '2') || (source[19] == '3')) && (strlen(source) == 26)) { + /* (01) and (3202)/(3203) */ + + if(source[19] == '3') { + weight = atof(weight_str) / 1000.0; + if(weight <= 22.767) { + encoding_method = 4; + } + } else { + weight = atof(weight_str) / 100.0; + if(weight <= 99.99) { + encoding_method = 4; + } + } + + } + + if(strlen(source) == 34){ + if((source[26] == '1') && (source[27] == '1')) { + /* (01), (320x) and (11) - English weight and production date */ + encoding_method = 8; + } + + if((source[26] == '1') && (source[27] == '3')) { + /* (01), (320x) and (13) - English weight and packaging date */ + encoding_method = 10; + } + + if((source[26] == '1') && (source[27] == '5')) { + /* (01), (320x) and (15) - English weight and "best before" date */ + encoding_method = 12; + } + + if((source[26] == '1') && (source[27] == '7')) { + /* (01), (320x) and (17) - English weight and expiration date */ + encoding_method = 14; + } + } + } + } + if(debug) printf("Now using method %d\n", encoding_method); + + } + + if(source[17] == '9') { + /* Methods 5 and 6 */ + if((source[18] == '2') && ((source[19] >= '0') && (source[19] <= '3'))) { + /* (01) and (392x) */ + encoding_method = 5; + } + if((source[18] == '3') && ((source[19] >= '0') && (source[19] <= '3'))) { + /* (01) and (393x) */ + encoding_method = 6; + } + if(debug) printf("Now using method %d\n", encoding_method); + } + } + + switch(encoding_method) { /* Encoding method - Table 10 */ + case 1: concat(binary_string, "1XX"); read_posn = 16; break; + case 2: concat(binary_string, "00XX"); read_posn = 0; break; + case 3: concat(binary_string, "0100"); read_posn = strlen(source); break; + case 4: concat(binary_string, "0101"); read_posn = strlen(source); break; + case 5: concat(binary_string, "01100XX"); read_posn = 20; break; + case 6: concat(binary_string, "01101XX"); read_posn = 23; break; + case 7: concat(binary_string, "0111000"); read_posn = strlen(source); break; + case 8: concat(binary_string, "0111001"); read_posn = strlen(source); break; + case 9: concat(binary_string, "0111010"); read_posn = strlen(source); break; + case 10: concat(binary_string, "0111011"); read_posn = strlen(source); break; + case 11: concat(binary_string, "0111100"); read_posn = strlen(source); break; + case 12: concat(binary_string, "0111101"); read_posn = strlen(source); break; + case 13: concat(binary_string, "0111110"); read_posn = strlen(source); break; + case 14: concat(binary_string, "0111111"); read_posn = strlen(source); break; + } + if(debug) printf("Setting binary = %s\n", binary_string); + + /* Variable length symbol bit field is just given a place holder (XX) + for the time being */ + + /* Verify that the data to be placed in the compressed data field is all + numeric data before carrying out compression */ + for(i = 0; i < read_posn; i++) { + if((source[i] < '0') || (source[i] > '9')) { + if((source[i] != '[') && (source[i] != ']')) { + /* Something is wrong */ + strcpy(symbol->errtxt, "Invalid characters in input data"); + return ERROR_INVALID_DATA1; + } + } + } + + /* Now encode the compressed data field */ + + if(debug) printf("Proceeding to encode data\n"); + if(encoding_method == 1) { + /* Encoding method field "1" - general item identification data */ + char group[4]; + int group_val; + + group[0] = source[2]; + group[1] = '\0'; + group_val = atoi(group); + + mask = 0x08; + for(j = 0; j < 4; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + + for(i = 1; i < 5; i++) { + group[0] = source[(i * 3)]; + group[1] = source[(i * 3) + 1]; + group[2] = source[(i * 3) + 2]; + group[3] = '\0'; + group_val = atoi(group); + + mask = 0x200; + for(j = 0; j < 10; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + + } + + + if(encoding_method == 3) { + /* Encoding method field "0100" - variable weight item + (0,001 kilogram icrements) */ + char group[4]; + int group_val; + char weight_str[7]; + + for(i = 1; i < 5; i++) { + group[0] = source[(i * 3)]; + group[1] = source[(i * 3) + 1]; + group[2] = source[(i * 3) + 2]; + group[3] = '\0'; + group_val = atoi(group); + + mask = 0x200; + for(j = 0; j < 10; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + for(i = 0; i < 6; i++) { + weight_str[i] = source[20 + i]; + } + weight_str[6] = '\0'; + group_val = atoi(weight_str); + + mask = 0x4000; + for(j = 0; j < 15; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + + + } + + if(encoding_method == 4) { + /* Encoding method field "0101" - variable weight item (0,01 or + 0,001 pound increment) */ + char group[4]; + int group_val; + char weight_str[7]; + + for(i = 1; i < 5; i++) { + group[0] = source[(i * 3)]; + group[1] = source[(i * 3) + 1]; + group[2] = source[(i * 3) + 2]; + group[3] = '\0'; + group_val = atoi(group); + + mask = 0x200; + for(j = 0; j < 10; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + for(i = 0; i < 6; i++) { + weight_str[i] = source[20 + i]; + } + weight_str[6] = '\0'; + group_val = atoi(weight_str); + + if(source[19] == '3') { + group_val = group_val + 10000; + } + + mask = 0x4000; + for(j = 0; j < 15; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + + } + + + if((encoding_method >= 7) && (encoding_method <= 14)) { + /* Encoding method fields "0111000" through "0111111" - variable + weight item plus date */ + char group[4]; + int group_val; + char weight_str[8]; + char date_str[4]; + + for(i = 1; i < 5; i++) { + group[0] = source[(i * 3)]; + group[1] = source[(i * 3) + 1]; + group[2] = source[(i * 3) + 2]; + group[3] = '\0'; + group_val = atoi(group); + + mask = 0x200; + for(j = 0; j < 10; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + weight_str[0] = source[19]; + + for(i = 0; i < 5; i++) { + weight_str[i + 1] = source[21 + i]; + } + weight_str[6] = '\0'; + group_val = atoi(weight_str); + + mask = 0x80000; + for(j = 0; j < 20; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + + if(strlen(source) == 34) { + /* Date information is included */ + date_str[0] = source[28]; + date_str[1] = source[29]; + date_str[2] = '\0'; + group_val = atoi(date_str) * 384; + + date_str[0] = source[30]; + date_str[1] = source[31]; + group_val += (atoi(date_str) - 1) * 32; + + date_str[0] = source[32]; + date_str[1] = source[33]; + group_val += atoi(date_str); + } else { + group_val = 38400; + } + + mask = 0x8000; + for(j = 0; j < 16; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + + } + + if(encoding_method == 5) { + /* Encoding method field "01100" - variable measure item and price */ + char group[4]; + int group_val; + + for(i = 1; i < 5; i++) { + group[0] = source[(i * 3)]; + group[1] = source[(i * 3) + 1]; + group[2] = source[(i * 3) + 2]; + group[3] = '\0'; + group_val = atoi(group); + + mask = 0x200; + for(j = 0; j < 10; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + switch(source[19]) { + case '0': concat(binary_string, "00"); break; + case '1': concat(binary_string, "01"); break; + case '2': concat(binary_string, "10"); break; + case '3': concat(binary_string, "11"); break; + } + } + + if(encoding_method == 6) { + /* Encoding method "01101" - variable measure item and price with ISO 4217 + Currency Code */ + + char group[4]; + int group_val; + char currency_str[5]; + + for(i = 1; i < 5; i++) { + group[0] = source[(i * 3)]; + group[1] = source[(i * 3) + 1]; + group[2] = source[(i * 3) + 2]; + group[3] = '\0'; + group_val = atoi(group); + + mask = 0x200; + for(j = 0; j < 10; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + switch(source[19]) { + case '0': concat(binary_string, "00"); break; + case '1': concat(binary_string, "01"); break; + case '2': concat(binary_string, "10"); break; + case '3': concat(binary_string, "11"); break; + } + + for(i = 0; i < 3; i++) { + currency_str[i] = source[20 + i]; + } + currency_str[3] = '\0'; + group_val = atoi(currency_str); + + mask = 0x200; + for(j = 0; j < 10; j++) { + concat(binary_string, (group_val & mask) ? "1" : "0"); + mask = mask >> 1; + } + + + } + + /* The compressed data field has been processed if appropriate - the + rest of the data (if any) goes into a general-purpose data compaction field */ + + j = 0; + for(i = read_posn; i < strlen(source); i++) { + general_field[j] = source[i]; + j++; + } + general_field[j] = '\0'; + if(debug) printf("General field data = %s\n", general_field); + + latch = 0; + for(i = 0; i < strlen(general_field); i++) { + /* Table 13 - ISO/IEC 646 encodation */ + if((general_field[i] < ' ') || (general_field[i] > 'z')) { + general_field_type[i] = INVALID_CHAR; latch = 1; + } else { + general_field_type[i] = ISOIEC; + } + + if(general_field[i] == '#') { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == '$') { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == '@') { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == 92) { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == '^') { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + if(general_field[i] == 96) { + general_field_type[i] = INVALID_CHAR; latch = 1; + } + + /* Table 12 - Alphanumeric encodation */ + if((general_field[i] >= 'A') && (general_field[i] <= 'Z')) { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == '*') { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == ',') { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == '-') { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == '.') { + general_field_type[i] = ALPHA_OR_ISO; + } + if(general_field[i] == '/') { + general_field_type[i] = ALPHA_OR_ISO; + } + + /* Numeric encodation */ + if((general_field[i] >= '0') && (general_field[i] <= '9')) { + general_field_type[i] = ANY_ENC; + } + if(general_field[i] == '[') { + /* FNC1 can be encoded in any system */ + general_field_type[i] = ANY_ENC; + } + + } + + general_field_type[strlen(general_field)] = '\0'; + if(debug) printf("General field type: %s\n", general_field_type); + + if(latch == 1) { + /* Invalid characters in input data */ + strcpy(symbol->errtxt, "Invalid characters in input data"); + return ERROR_INVALID_DATA1; + } + + for(i = 0; i < strlen(general_field); i++) { + if((general_field_type[i] == ISOIEC) && (general_field[i + 1] == '[')) { + general_field_type[i + 1] = ISOIEC; + } + } + + for(i = 0; i < strlen(general_field); i++) { + if((general_field_type[i] == ALPHA_OR_ISO) && (general_field[i + 1] == '[')) { + general_field_type[i + 1] = ALPHA_OR_ISO; + } + } + + latch = general_rules(general_field, general_field_type); + if(debug) printf("General field type: %s\n", general_field_type); + + last_mode = NUMERIC; + + /* Set initial mode if not NUMERIC */ + if(general_field_type[0] == ALPHA) { + concat(binary_string, "0000"); /* Alphanumeric latch */ + last_mode = ALPHA; + } + if(general_field_type[0] == ISOIEC) { + concat(binary_string, "0000"); /* Alphanumeric latch */ + concat(binary_string, "00100"); /* ISO/IEC 646 latch */ + last_mode = ISOIEC; + } + + i = 0; + do { + if(debug) printf("Processing character %d ", i); + switch(general_field_type[i]) { + case NUMERIC: + if(debug) printf("as NUMERIC:"); + + if(last_mode != NUMERIC) { + concat(binary_string, "000"); /* Numeric latch */ + if(debug) printf("\n"); + } + + if(debug) printf(" %c%c > ", general_field[i], general_field[i + 1]); + if(general_field[i] != '[') { + d1 = ctoi(general_field[i]); + } else { + d1 = 10; + } + + if(general_field[i + 1] != '[') { + d2 = ctoi(general_field[i + 1]); + } else { + d2 = 10; + } + + value = (11 * d1) + d2 + 8; + + mask = 0x40; + for(j = 0; j < 7; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + if (debug) { + printf("%d", !!(value & mask)); + } + mask = mask >> 1; + } + + i += 2; + if(debug) printf("\n"); + last_mode = NUMERIC; + break; + + case ALPHA: + if(debug) printf("as ALPHA\n"); + if(i != 0) { + if(last_mode == NUMERIC) { + concat(binary_string, "0000"); /* Alphanumeric latch */ + } + if(last_mode == ISOIEC) { + concat(binary_string, "00100"); /* Alphanumeric latch */ + } + } + + if((general_field[i] >= '0') && (general_field[i] <= '9')) { + + value = general_field[i] - 43; + + mask = 0x10; + for(j = 0; j < 5; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + if((general_field[i] >= 'A') && (general_field[i] <= 'Z')) { + + value = general_field[i] - 33; + + mask = 0x20; + for(j = 0; j < 6; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + last_mode = ALPHA; + if(general_field[i] == '[') { concat(binary_string, "01111"); last_mode = NUMERIC; } /* FNC1/Numeric latch */ + if(general_field[i] == '*') concat(binary_string, "111010"); /* asterisk */ + if(general_field[i] == ',') concat(binary_string, "111011"); /* comma */ + if(general_field[i] == '-') concat(binary_string, "111100"); /* minus or hyphen */ + if(general_field[i] == '.') concat(binary_string, "111101"); /* period or full stop */ + if(general_field[i] == '/') concat(binary_string, "111110"); /* slash or solidus */ + + i++; + break; + + case ISOIEC: + if(debug) printf("as ISOIEC\n"); + if(i != 0) { + if(last_mode == NUMERIC) { + concat(binary_string, "0000"); /* Alphanumeric latch */ + concat(binary_string, "00100"); /* ISO/IEC 646 latch */ + } + if(last_mode == ALPHA) { + concat(binary_string, "00100"); /* ISO/IEC 646 latch */ + } + } + + if((general_field[i] >= '0') && (general_field[i] <= '9')) { + + value = general_field[i] - 43; + + mask = 0x10; + for(j = 0; j < 5; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + if((general_field[i] >= 'A') && (general_field[i] <= 'Z')) { + + value = general_field[i] - 1; + + mask = 0x40; + for(j = 0; j < 7; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + if((general_field[i] >= 'a') && (general_field[i] <= 'z')) { + + value = general_field[i] - 7; + + mask = 0x40; + for(j = 0; j < 7; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + last_mode = ISOIEC; + if(general_field[i] == '[') { concat(binary_string, "01111"); last_mode = NUMERIC; } /* FNC1/Numeric latch */ + if(general_field[i] == '!') concat(binary_string, "11101000"); /* exclamation mark */ + if(general_field[i] == 34) concat(binary_string, "11101001"); /* quotation mark */ + if(general_field[i] == 37) concat(binary_string, "11101010"); /* percent sign */ + if(general_field[i] == '&') concat(binary_string, "11101011"); /* ampersand */ + if(general_field[i] == 39) concat(binary_string, "11101100"); /* apostrophe */ + if(general_field[i] == '(') concat(binary_string, "11101101"); /* left parenthesis */ + if(general_field[i] == ')') concat(binary_string, "11101110"); /* right parenthesis */ + if(general_field[i] == '*') concat(binary_string, "11101111"); /* asterisk */ + if(general_field[i] == '+') concat(binary_string, "11110000"); /* plus sign */ + if(general_field[i] == ',') concat(binary_string, "11110001"); /* comma */ + if(general_field[i] == '-') concat(binary_string, "11110010"); /* minus or hyphen */ + if(general_field[i] == '.') concat(binary_string, "11110011"); /* period or full stop */ + if(general_field[i] == '/') concat(binary_string, "11110100"); /* slash or solidus */ + if(general_field[i] == ':') concat(binary_string, "11110101"); /* colon */ + if(general_field[i] == ';') concat(binary_string, "11110110"); /* semicolon */ + if(general_field[i] == '<') concat(binary_string, "11110111"); /* less-than sign */ + if(general_field[i] == '=') concat(binary_string, "11111000"); /* equals sign */ + if(general_field[i] == '>') concat(binary_string, "11111001"); /* greater-than sign */ + if(general_field[i] == '?') concat(binary_string, "11111010"); /* question mark */ + if(general_field[i] == '_') concat(binary_string, "11111011"); /* underline or low line */ + if(general_field[i] == ' ') concat(binary_string, "11111100"); /* space */ + + i++; + break; + } + } while (i + latch < strlen(general_field)); + if(debug) printf("Resultant binary = %s\n", binary_string); + if(debug) printf("\tLength: %d\n", (int)strlen(binary_string)); + + remainder = 12 - (strlen(binary_string) % 12); + if(remainder == 12) { remainder = 0; } + if(strlen(binary_string) < 36) { remainder = 36 - strlen(binary_string); } + + if(latch == 1) { + /* There is still one more numeric digit to encode */ + if(debug) printf("Adding extra (odd) numeric digit\n"); + + if(last_mode == NUMERIC) { + if((remainder >= 4) && (remainder <= 6)) { + value = ctoi(general_field[i]); + value++; + + mask = 0x08; + for(j = 0; j < 4; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + mask = mask >> 1; + } + } else { + d1 = ctoi(general_field[i]); + d2 = 10; + + value = (11 * d1) + d2 + 8; + + mask = 0x40; + for(j = 0; j < 7; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + } else { + value = general_field[i] - 43; + + mask = 0x10; + for(j = 0; j < 5; j++) { + concat(binary_string, (value & mask) ? "1" : "0"); + mask = mask >> 1; + } + } + + remainder = 12 - (strlen(binary_string) % 12); + if(remainder == 12) { remainder = 0; } + if(strlen(binary_string) < 36) { remainder = 36 - strlen(binary_string); } + if(debug) printf("Resultant binary = %s\n", binary_string); + if(debug) printf("\tLength: %d\n", (int)strlen(binary_string)); + } + + if(strlen(binary_string) > 252) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + + /* Now add padding to binary string (7.2.5.5.4) */ + i = remainder; + if((strlen(general_field) != 0) && (last_mode == NUMERIC)) { + strcpy(padstring, "0000"); + i -= 4; + } else { + strcpy(padstring, ""); + } + for(;i > 0;i -= 5) { + concat(padstring, "00100"); + } + + padstring[remainder] = '\0'; + concat(binary_string, padstring); + + /* Patch variable length symbol bit field */ + d1 = ((strlen(binary_string) / 12) + 1) & 1; + if(strlen(binary_string) <= 156) { d2 = 0; } else { d2 = 1; } + + if(encoding_method == 1) { + binary_string[2] = d1 ? '1' : '0'; + binary_string[3] = d2 ? '1' : '0'; + } + if(encoding_method == 2) { + binary_string[3] = d1 ? '1' : '0'; + binary_string[4] = d2 ? '1' : '0'; + } + if((encoding_method == 5) || (encoding_method == 6)) { + binary_string[6] = d1 ? '1' : '0'; + binary_string[7] = d2 ? '1' : '0'; + } + if(debug) printf("Resultant binary = %s\n", binary_string); + if(debug) printf("\tLength: %d\n", (int)strlen(binary_string)); + return 0; +} + +int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int src_len) +{ /* GS1 DataBar Expanded */ + int i, j, k, l, data_chars, vs[21], group[21], v_odd[21], v_even[21]; + char substring[21][14], latch; + int char_widths[21][8], checksum, check_widths[8], c_group; + int check_char, c_odd, c_even, elements[235], pattern_width, reader, writer; + int row, elements_in_sub, special_case_row, left_to_right; + int codeblocks, sub_elements[235], stack_rows, current_row, current_block; + int separator_row; +#ifndef _MSC_VER + char reduced[src_len], binary_string[7 * src_len]; +#else + char* reduced = (char*)_alloca(src_len); + char* binary_string = (char*)_alloca(7 * src_len); +#endif + + separator_row = 0; + reader=0; + + if(symbol->input_mode != GS1_MODE) { + /* GS1 data has not been verified yet */ + i = gs1_verify(symbol, source, src_len, reduced); + if(i != 0) { return i; } + } + + if((symbol->symbology == BARCODE_RSS_EXP_CC) || (symbol->symbology == BARCODE_RSS_EXPSTACK_CC)) { + /* make space for a composite separator pattern */ + separator_row = symbol->rows; + symbol->row_height[separator_row] = 1; + symbol->rows += 1; + } + + strcpy(binary_string, ""); + + if(symbol->option_1 == 2) { + concat(binary_string, "1"); + } else { + concat(binary_string, "0"); + } + + i = rss_binary_string(symbol, reduced, binary_string); + if(i != 0) { + return i; + } + + data_chars = strlen(binary_string) / 12; + + for(i = 0; i < data_chars; i++) { + for(j = 0; j < 12; j++) { + substring[i][j] = binary_string[(i * 12) + j]; + } + substring[i][12] = '\0'; + } + + for(i = 0; i < data_chars; i++) { + vs[i] = 0; + if(substring[i][0] == '1') { vs[i] += 2048; } + if(substring[i][1] == '1') { vs[i] += 1024; } + if(substring[i][2] == '1') { vs[i] += 512; } + if(substring[i][3] == '1') { vs[i] += 256; } + if(substring[i][4] == '1') { vs[i] += 128; } + if(substring[i][5] == '1') { vs[i] += 64; } + if(substring[i][6] == '1') { vs[i] += 32; } + if(substring[i][7] == '1') { vs[i] += 16; } + if(substring[i][8] == '1') { vs[i] += 8; } + if(substring[i][9] == '1') { vs[i] += 4; } + if(substring[i][10] == '1') { vs[i] += 2; } + if(substring[i][11] == '1') { vs[i] += 1; } + } + + for(i = 0; i < data_chars; i++) { + if(vs[i] <= 347) { group[i] = 1; } + if((vs[i] >= 348) && (vs[i] <= 1387)) { group[i] = 2; } + if((vs[i] >= 1388) && (vs[i] <= 2947)) { group[i] = 3; } + if((vs[i] >= 2948) && (vs[i] <= 3987)) { group[i] = 4; } + if(vs[i] >= 3988) { group[i] = 5; } + v_odd[i] = (vs[i] - g_sum_exp[group[i] - 1]) / t_even_exp[group[i] - 1]; + v_even[i] = (vs[i] - g_sum_exp[group[i] - 1]) % t_even_exp[group[i] - 1]; + + getRSSwidths(v_odd[i], modules_odd_exp[group[i] - 1], 4, widest_odd_exp[group[i] - 1], 0); + char_widths[i][0] = widths[0]; + char_widths[i][2] = widths[1]; + char_widths[i][4] = widths[2]; + char_widths[i][6] = widths[3]; + getRSSwidths(v_even[i], modules_even_exp[group[i] - 1], 4, widest_even_exp[group[i] - 1], 1); + char_widths[i][1] = widths[0]; + char_widths[i][3] = widths[1]; + char_widths[i][5] = widths[2]; + char_widths[i][7] = widths[3]; + } + + /* 7.2.6 Check character */ + /* The checksum value is equal to the mod 211 residue of the weighted sum of the widths of the + elements in the data characters. */ + checksum = 0; + for(i = 0; i < data_chars; i++) { + row = weight_rows[(((data_chars - 2) / 2) * 21) + i]; + for(j = 0; j < 8; j++) { + checksum += (char_widths[i][j] * checksum_weight_exp[(row * 8) + j]); + + } + } + + check_char = (211 * ((data_chars + 1) - 4)) + (checksum % 211); + + if(check_char <= 347) { c_group = 1; } + if((check_char >= 348) && (check_char <= 1387)) { c_group = 2; } + if((check_char >= 1388) && (check_char <= 2947)) { c_group = 3; } + if((check_char >= 2948) && (check_char <= 3987)) { c_group = 4; } + if(check_char >= 3988) { c_group = 5; } + + c_odd = (check_char - g_sum_exp[c_group - 1]) / t_even_exp[c_group - 1]; + c_even = (check_char - g_sum_exp[c_group - 1]) % t_even_exp[c_group - 1]; + + getRSSwidths(c_odd, modules_odd_exp[c_group - 1], 4, widest_odd_exp[c_group - 1], 0); + check_widths[0] = widths[0]; + check_widths[2] = widths[1]; + check_widths[4] = widths[2]; + check_widths[6] = widths[3]; + getRSSwidths(c_even, modules_even_exp[c_group - 1], 4, widest_even_exp[c_group - 1], 1); + check_widths[1] = widths[0]; + check_widths[3] = widths[1]; + check_widths[5] = widths[2]; + check_widths[7] = widths[3]; + + /* Initialise element array */ + pattern_width = ((((data_chars + 1) / 2) + ((data_chars + 1) & 1)) * 5) + ((data_chars + 1) * 8) + 4; + for(i = 0; i < pattern_width; i++) { + elements[i] = 0; + } + + elements[0] = 1; + elements[1] = 1; + elements[pattern_width - 2] = 1; + elements[pattern_width - 1] = 1; + + /* Put finder patterns in element array */ + for(i = 0; i < (((data_chars + 1) / 2) + ((data_chars + 1) & 1)); i++) { + k = ((((((data_chars + 1) - 2) / 2) + ((data_chars + 1) & 1)) - 1) * 11) + i; + for(j = 0; j < 5; j++) { + elements[(21 * i) + j + 10] = finder_pattern_exp[((finder_sequence[k] - 1) * 5) + j]; + } + } + + /* Put check character in element array */ + for(i = 0; i < 8; i++) { + elements[i + 2] = check_widths[i]; + } + + /* Put forward reading data characters in element array */ + for(i = 1; i < data_chars; i += 2) { + for(j = 0; j < 8; j++) { + elements[(((i - 1) / 2) * 21) + 23 + j] = char_widths[i][j]; + } + } + + /* Put reversed data characters in element array */ + for(i = 0; i < data_chars; i += 2) { + for(j = 0; j < 8; j++) { + elements[((i / 2) * 21) + 15 + j] = char_widths[i][7 - j]; + } + } + + if((symbol->symbology == BARCODE_RSS_EXP) || (symbol->symbology == BARCODE_RSS_EXP_CC)) { + /* Copy elements into symbol */ + writer = 0; + latch = '0'; + for(i = 0; i < pattern_width; i++) { + for(j = 0; j < elements[i]; j++) { + if(latch == '1') { set_module(symbol, symbol->rows, writer); } else { unset_module(symbol, symbol->rows, writer); } + writer++; + } + if(latch == '1') { + latch = '0'; + } else { + latch = '1'; + } + } + if(symbol->width < writer) { symbol->width = writer; } + symbol->rows = symbol->rows + 1; + if(symbol->symbology == BARCODE_RSS_EXP_CC) { + for(j = 4; j < (symbol->width - 4); j++) { + if(module_is_set(symbol, separator_row + 1, j)) { + unset_module(symbol, separator_row, j); + } else { + set_module(symbol, separator_row, j); + } + } + /* finder bar adjustment */ + for(j = 0; j < (writer / 49); j++) { + k = (49 * j) + 18; + for(i = 0; i < 15; i++) { + if((!(module_is_set(symbol, separator_row + 1, i + k - 1))) && + (!(module_is_set(symbol, separator_row + 1, i + k))) && + module_is_set(symbol, separator_row, i + k - 1)) { + unset_module(symbol, separator_row, i + k); + } + } + } + } + + /* Add human readable text */ + for(i = 0; i <= src_len; i++) { + if((source[i] != '[') && (source[i] != ']')) { + symbol->text[i] = source[i]; + } else { + if(source[i] == '[') { + symbol->text[i] = '('; + } + if(source[i] == ']') { + symbol->text[i] = ')'; + } + } + } + + } else { + /* RSS Expanded Stacked */ + + codeblocks = (data_chars + 1) / 2; + + if((symbol->option_2 < 1) || (symbol->option_2 > 10)) { + symbol->option_2 = 2; + } + if((symbol->option_1 == 2) && (symbol->option_2 == 1)) { + /* "There shall be a minimum of four symbol characters in the + first row of an RSS Expanded Stacked symbol when it is the linear + component of an EAN.UCC Composite symbol." */ + symbol->option_2 = 2; + } + + stack_rows = codeblocks / symbol->option_2; + if(codeblocks % symbol->option_2 > 0) { + stack_rows++; + } + + current_block = 0; + for(current_row = 1; current_row <= stack_rows; current_row++) { + for(i = 0; i < 235; i++) { + sub_elements[i] = 0; + } + special_case_row = 0; + + /* Row Start */ + sub_elements[0] = 1; + sub_elements[1] = 1; + elements_in_sub = 2; + + /* Row Data */ + reader = 0; + do { + if(((symbol->option_2 & 1) || (current_row & 1)) || + ((current_row == stack_rows) && (codeblocks != (current_row * symbol->option_2)) && + (((current_row * symbol->option_2) - codeblocks) & 1))) { + /* left to right */ + left_to_right = 1; + i = 2 + (current_block * 21); + for(j = 0; j < 21; j++) { + sub_elements[j + (reader * 21) + 2] = elements[i + j]; + elements_in_sub++; + } + } else { + /* right to left */ + left_to_right = 0; + if((current_row * symbol->option_2) < codeblocks) { + /* a full row */ + i = 2 + (((current_row * symbol->option_2) - reader - 1) * 21); + for(j = 0; j < 21; j++) { + sub_elements[(20 - j) + (reader * 21) + 2] = elements[i + j]; + elements_in_sub++; + } + } else { + /* a partial row */ + k = ((current_row * symbol->option_2) - codeblocks); + l = (current_row * symbol->option_2) - reader - 1; + i = 2 + ((l - k) * 21); + for(j = 0; j < 21; j++) { + sub_elements[(20 - j) + (reader * 21) + 2] = elements[i + j]; + elements_in_sub++; + } + } + } + reader++; + current_block++; + } while ((reader < symbol->option_2) && (current_block < codeblocks)); + + /* Row Stop */ + sub_elements[elements_in_sub] = 1; + sub_elements[elements_in_sub + 1] = 1; + elements_in_sub += 2; + + latch = current_row & 1 ? '0' : '1'; + + if ((current_row == stack_rows) && (codeblocks != (current_row * symbol->option_2)) && + (((current_row * symbol->option_2) - codeblocks) & 1) ) { + /* Special case bottom row */ + special_case_row = 1; + sub_elements[0] = 2; + latch = '0'; + } + + writer = 0; + for(i = 0; i < elements_in_sub; i++) { + for(j = 0; j < sub_elements[i]; j++) { + if(latch == '1') { set_module(symbol, symbol->rows, writer); } else { unset_module(symbol, symbol->rows, writer); } + writer++; + } + if(latch == '1') { + latch = '0'; + } else { + latch = '1'; + } + } + if(symbol->width < writer) { symbol->width = writer; } + + if(current_row != 1) { + /* middle separator pattern (above current row) */ + for(j = 5; j < (49 * symbol->option_2); j += 2) { + set_module(symbol, symbol->rows - 2, j); + } + symbol->row_height[symbol->rows - 2] = 1; + /* bottom separator pattern (above current row) */ + for(j = 4; j < (writer - 4); j++) { + if(module_is_set(symbol, symbol->rows, j)) { + unset_module(symbol, symbol->rows - 1, j); + } else { + set_module(symbol, symbol->rows - 1, j); + } + } + symbol->row_height[symbol->rows - 1] = 1; + /* finder bar adjustment */ + for(j = 0; j < reader; j++) { + k = (49 * j) + (special_case_row ? 19 : 18); + if(left_to_right) { + for(i = 0; i < 15; i++) { + if((!(module_is_set(symbol, symbol->rows, i + k - 1))) && + (!(module_is_set(symbol, symbol->rows, i + k))) && + module_is_set(symbol, symbol->rows - 1, i + k - 1)) { + unset_module(symbol, symbol->rows - 1, i + k); + } + } + } else { + for(i = 14; i >= 0; i--) { + if((!(module_is_set(symbol, symbol->rows, i + k + 1))) && + (!(module_is_set(symbol, symbol->rows, i + k))) && + module_is_set(symbol, symbol->rows - 1, i + k + 1)) { + unset_module(symbol, symbol->rows - 1, i + k); + } + } + } + } + } + + if(current_row != stack_rows) { + /* top separator pattern (below current row) */ + for(j = 4; j < (writer - 4); j++) { + if(module_is_set(symbol, symbol->rows, j)) { + unset_module(symbol, symbol->rows + 1, j); + } else { + set_module(symbol, symbol->rows + 1, j); + } + } + symbol->row_height[symbol->rows + 1] = 1; + /* finder bar adjustment */ + for(j = 0; j < reader; j++) { + k = (49 * j) + 18; + if(left_to_right) { + for(i = 0; i < 15; i++) { + if((!(module_is_set(symbol, symbol->rows, i + k - 1))) && + (!(module_is_set(symbol, symbol->rows, i + k))) && + module_is_set(symbol, symbol->rows + 1, i + k - 1)) { + unset_module(symbol, symbol->rows + 1, i + k); + } + } + } else{ + for(i = 14; i >= 0; i--) { + if((!(module_is_set(symbol, symbol->rows, i + k + 1))) && + (!(module_is_set(symbol, symbol->rows, i + k))) && + module_is_set(symbol, symbol->rows + 1, i + k + 1)) { + unset_module(symbol, symbol->rows + 1, i + k); + } + } + } + } + } + + symbol->rows = symbol->rows + 4; + } + symbol->rows = symbol->rows - 3; + if(symbol->symbology == BARCODE_RSS_EXPSTACK_CC) { + for(j = 4; j < (symbol->width - 4); j++) { + if(module_is_set(symbol, separator_row + 1, j)) { + unset_module(symbol, separator_row, j); + } else { + set_module(symbol, separator_row, j); + } + } + /* finder bar adjustment */ + for(j = 0; j < reader; j++) { + k = (49 * j) + 18; + for(i = 0; i < 15; i++) { + if((!(module_is_set(symbol, separator_row + 1, i + k - 1))) && + (!(module_is_set(symbol, separator_row + 1, i + k))) && + module_is_set(symbol, separator_row, i + k - 1)) { + unset_module(symbol, separator_row, i + k); + } + } + } + } + + } + + return 0; +} diff --git a/3rdparty/zint-2.4.4/backend/rss.h b/3rdparty/zint-2.4.4/backend/rss.h new file mode 100644 index 0000000..f1463a9 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/rss.h @@ -0,0 +1,225 @@ +/* rss.h - Data tables for Reduced Space Symbology */ + +/* + libzint - the open source barcode library + Copyright (C) 2007 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define NUMERIC 110 +#define ALPHA 97 +#define ISOIEC 105 +#define INVALID_CHAR 100 +#define ANY_ENC 120 +#define ALPHA_OR_ISO 121 + +/* RSS-14 Tables */ +static int g_sum_table[9] = { 0, 161, 961, 2015, 2715, 0, 336, 1036, 1516}; +static int t_table[9] = { 1, 10, 34, 70, 126, 4, 20, 48, 81}; +static int modules_odd[9] = { 12, 10, 8, 6, 4, 5, 7, 9, 11 }; +static int modules_even[9] = { 4, 6, 8, 10, 12, 10, 8, 6, 4 }; +static int widest_odd[9] = { 8, 6, 4, 3, 1, 2, 4, 6, 8 }; +static int widest_even[9] = { 1, 3, 5, 6, 8, 7, 5, 3, 1 }; +static int widths[8]; +static int finder_pattern[45] = { + 3, 8, 2, 1, 1, + 3, 5, 5, 1, 1, + 3, 3, 7, 1, 1, + 3, 1, 9, 1, 1, + 2, 7, 4, 1, 1, + 2, 5, 6, 1, 1, + 2, 3, 8, 1, 1, + 1, 5, 7, 1, 1, + 1, 3, 9, 1, 1 +}; +static int checksum_weight[32] = { /* Table 5 */ + 1, 3, 9, 27, 2, 6, 18, 54, + 4, 12, 36, 29, 8, 24, 72, 58, + 16, 48, 65, 37, 32, 17, 51, 74, + 64, 34, 23, 69, 49, 68, 46, 59 +}; + +/* RSS Limited Tables */ +static int t_even_ltd[7] = { 28, 728, 6454, 203, 2408, 1, 16632 }; +static int modules_odd_ltd[7] = { 17, 13, 9, 15, 11, 19, 7 }; +static int modules_even_ltd[7] = { 9, 13, 17, 11, 15, 7, 19 }; +static int widest_odd_ltd[7] = { 6, 5, 3, 5, 4, 8, 1 }; +static int widest_even_ltd[7] = { 3, 4, 6, 4, 5, 1, 8 }; +static int checksum_weight_ltd[28] = { /* Table 7 */ + 1, 3, 9, 27, 81, 65, 17, 51, 64, 14, 42, 37, 22, 66, + 20, 60, 2, 6, 18, 54, 73, 41, 34, 13, 39, 28, 84, 74 +}; +static int finder_pattern_ltd[1232] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, + 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 2, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, + 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, + 1, 1, 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, + 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, + 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, + 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, + 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, + 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, + 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, + 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, + 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, + 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, + 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, + 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, + 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, + 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, + 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, + 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, + 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1 +}; + +/* RSS Expanded Tables */ +static int g_sum_exp[5] = { 0, 348, 1388, 2948, 3988 }; +static int t_even_exp[5] = { 4, 20, 52, 104, 204 }; +static int modules_odd_exp[5] = { 12, 10, 8, 6, 4 }; +static int modules_even_exp[5] = { 5, 7, 9, 11, 13 }; +static int widest_odd_exp[5] = { 7, 5, 4, 3, 1 }; +static int widest_even_exp[5] = { 2, 4, 5, 6, 8 }; +static int checksum_weight_exp[184] = { /* Table 14 */ + 1, 3, 9, 27, 81, 32, 96, 77, + 20, 60, 180, 118, 143, 7, 21, 63, + 189, 145, 13, 39, 117, 140, 209, 205, + 193, 157, 49, 147, 19, 57, 171, 91, + 62, 186, 136, 197, 169, 85, 44, 132, + 185, 133, 188, 142, 4, 12, 36, 108, + 113, 128, 173, 97, 80, 29, 87, 50, + 150, 28, 84, 41, 123, 158, 52, 156, + 46, 138, 203, 187, 139, 206, 196, 166, + 76, 17, 51, 153, 37, 111, 122, 155, + 43, 129, 176, 106, 107, 110, 119, 146, + 16, 48, 144, 10, 30, 90, 59, 177, + 109, 116, 137, 200, 178, 112, 125, 164, + 70, 210, 208, 202, 184, 130, 179, 115, + 134, 191, 151, 31, 93, 68, 204, 190, + 148, 22, 66, 198, 172, 94, 71, 2, + 6, 18, 54, 162, 64, 192, 154, 40, + 120, 149, 25, 75, 14, 42, 126, 167, + 79, 26, 78, 23, 69, 207, 199, 175, + 103, 98, 83, 38, 114, 131, 182, 124, + 161, 61, 183, 127, 170, 88, 53, 159, + 55, 165, 73, 8, 24, 72, 5, 15, + 45, 135, 194, 160, 58, 174, 100, 89 +}; +static int finder_pattern_exp[60] = { /* Table 15 */ + 1, 8, 4, 1, 1, + 1, 1, 4, 8, 1, + 3, 6, 4, 1, 1, + 1, 1, 4, 6, 3, + 3, 4, 6, 1, 1, + 1, 1, 6, 4, 3, + 3, 2, 8, 1, 1, + 1, 1, 8, 2, 3, + 2, 6, 5, 1, 1, + 1, 1, 5, 6, 2, + 2, 2, 9, 1, 1, + 1, 1, 9, 2, 2 +}; +static int finder_sequence[198] = { /* Table 16 */ + 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 6, 3, 8, 0, 0, 0, 0, 0, 0, 0, + 1, 10, 3, 8, 5, 0, 0, 0, 0, 0, 0, + 1, 10, 3, 8, 7, 12, 0, 0, 0, 0, 0, + 1, 10, 3, 8, 9, 12, 11, 0, 0, 0, 0, + 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, + 1, 2, 3, 4, 5, 6, 7, 10, 9, 0, 0, + 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 0, + 1, 2, 3, 4, 5, 8, 7, 10, 9, 12, 11 +}; +static int weight_rows[210] = { + 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 6, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 10, 3, 4, 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 18, 3, 4, 13, 14, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 18, 3, 4, 13, 14, 11, 12, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 18, 3, 4, 13, 14, 15, 16, 21, 22, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17, 18, 15, 16, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17, 18, 19, 20, 21, 22, 0, 0, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 14, 11, 12, 17, 18, 15, 16, 21, 22, 19, 20 +}; diff --git a/3rdparty/zint-2.4.4/backend/sjis.h b/3rdparty/zint-2.4.4/backend/sjis.h new file mode 100644 index 0000000..a75d80b --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/sjis.h @@ -0,0 +1,6875 @@ +/* sjis.h - Unicode to Shift JIS lookup table + + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* Derived from : +## Shift_JIS (JIS X 0208:1997 Appendix 1) vs Unicode mapping table +## +## Date: 06 Mar 2002 06:01:22 GMT +## License: +## Copyright (C) 2001 earthian@tama.or.jp, All Rights Reserved. +## Copyright (C) 2001 I'O, All Rights Reserved. +## You can use, modify, distribute this table freely. +*/ + +unsigned long int sjis_lookup[] = { + 0x005C,0x815F, // REVERSE SOLIDUS + 0x00A2,0x8191, // CENT SIGN + 0x00A3,0x8192, // POUND SIGN + 0x00A7,0x8198, // SECTION SIGN + 0x00A8,0x814E, // DIAERESIS + 0x00AC,0x81CA, // NOT SIGN + 0x00B0,0x818B, // DEGREE SIGN + 0x00B1,0x817D, // PLUS-MINUS SIGN + 0x00B4,0x814C, // ACUTE ACCENT + 0x00B6,0x81F7, // PILCROW SIGN + 0x00D7,0x817E, // MULTIPLICATION SIGN + 0x00F7,0x8180, // DIVISION SIGN + 0x0391,0x839F, // GREEK CAPITAL LETTER ALPHA + 0x0392,0x83A0, // GREEK CAPITAL LETTER BETA + 0x0393,0x83A1, // GREEK CAPITAL LETTER GAMMA + 0x0394,0x83A2, // GREEK CAPITAL LETTER DELTA + 0x0395,0x83A3, // GREEK CAPITAL LETTER EPSILON + 0x0396,0x83A4, // GREEK CAPITAL LETTER ZETA + 0x0397,0x83A5, // GREEK CAPITAL LETTER ETA + 0x0398,0x83A6, // GREEK CAPITAL LETTER THETA + 0x0399,0x83A7, // GREEK CAPITAL LETTER IOTA + 0x039A,0x83A8, // GREEK CAPITAL LETTER KAPPA + 0x039B,0x83A9, // GREEK CAPITAL LETTER LAMDA + 0x039C,0x83AA, // GREEK CAPITAL LETTER MU + 0x039D,0x83AB, // GREEK CAPITAL LETTER NU + 0x039E,0x83AC, // GREEK CAPITAL LETTER XI + 0x039F,0x83AD, // GREEK CAPITAL LETTER OMICRON + 0x03A0,0x83AE, // GREEK CAPITAL LETTER PI + 0x03A1,0x83AF, // GREEK CAPITAL LETTER RHO + 0x03A3,0x83B0, // GREEK CAPITAL LETTER SIGMA + 0x03A4,0x83B1, // GREEK CAPITAL LETTER TAU + 0x03A5,0x83B2, // GREEK CAPITAL LETTER UPSILON + 0x03A6,0x83B3, // GREEK CAPITAL LETTER PHI + 0x03A7,0x83B4, // GREEK CAPITAL LETTER CHI + 0x03A8,0x83B5, // GREEK CAPITAL LETTER PSI + 0x03A9,0x83B6, // GREEK CAPITAL LETTER OMEGA + 0x03B1,0x83BF, // GREEK SMALL LETTER ALPHA + 0x03B2,0x83C0, // GREEK SMALL LETTER BETA + 0x03B3,0x83C1, // GREEK SMALL LETTER GAMMA + 0x03B4,0x83C2, // GREEK SMALL LETTER DELTA + 0x03B5,0x83C3, // GREEK SMALL LETTER EPSILON + 0x03B6,0x83C4, // GREEK SMALL LETTER ZETA + 0x03B7,0x83C5, // GREEK SMALL LETTER ETA + 0x03B8,0x83C6, // GREEK SMALL LETTER THETA + 0x03B9,0x83C7, // GREEK SMALL LETTER IOTA + 0x03BA,0x83C8, // GREEK SMALL LETTER KAPPA + 0x03BB,0x83C9, // GREEK SMALL LETTER LAMDA + 0x03BC,0x83CA, // GREEK SMALL LETTER MU + 0x03BD,0x83CB, // GREEK SMALL LETTER NU + 0x03BE,0x83CC, // GREEK SMALL LETTER XI + 0x03BF,0x83CD, // GREEK SMALL LETTER OMICRON + 0x03C0,0x83CE, // GREEK SMALL LETTER PI + 0x03C1,0x83CF, // GREEK SMALL LETTER RHO + 0x03C3,0x83D0, // GREEK SMALL LETTER SIGMA + 0x03C4,0x83D1, // GREEK SMALL LETTER TAU + 0x03C5,0x83D2, // GREEK SMALL LETTER UPSILON + 0x03C6,0x83D3, // GREEK SMALL LETTER PHI + 0x03C7,0x83D4, // GREEK SMALL LETTER CHI + 0x03C8,0x83D5, // GREEK SMALL LETTER PSI + 0x03C9,0x83D6, // GREEK SMALL LETTER OMEGA + 0x0401,0x8446, // CYRILLIC CAPITAL LETTER IO + 0x0410,0x8440, // CYRILLIC CAPITAL LETTER A + 0x0411,0x8441, // CYRILLIC CAPITAL LETTER BE + 0x0412,0x8442, // CYRILLIC CAPITAL LETTER VE + 0x0413,0x8443, // CYRILLIC CAPITAL LETTER GHE + 0x0414,0x8444, // CYRILLIC CAPITAL LETTER DE + 0x0415,0x8445, // CYRILLIC CAPITAL LETTER IE + 0x0416,0x8447, // CYRILLIC CAPITAL LETTER ZHE + 0x0417,0x8448, // CYRILLIC CAPITAL LETTER ZE + 0x0418,0x8449, // CYRILLIC CAPITAL LETTER I + 0x0419,0x844A, // CYRILLIC CAPITAL LETTER SHORT I + 0x041A,0x844B, // CYRILLIC CAPITAL LETTER KA + 0x041B,0x844C, // CYRILLIC CAPITAL LETTER EL + 0x041C,0x844D, // CYRILLIC CAPITAL LETTER EM + 0x041D,0x844E, // CYRILLIC CAPITAL LETTER EN + 0x041E,0x844F, // CYRILLIC CAPITAL LETTER O + 0x041F,0x8450, // CYRILLIC CAPITAL LETTER PE + 0x0420,0x8451, // CYRILLIC CAPITAL LETTER ER + 0x0421,0x8452, // CYRILLIC CAPITAL LETTER ES + 0x0422,0x8453, // CYRILLIC CAPITAL LETTER TE + 0x0423,0x8454, // CYRILLIC CAPITAL LETTER U + 0x0424,0x8455, // CYRILLIC CAPITAL LETTER EF + 0x0425,0x8456, // CYRILLIC CAPITAL LETTER HA + 0x0426,0x8457, // CYRILLIC CAPITAL LETTER TSE + 0x0427,0x8458, // CYRILLIC CAPITAL LETTER CHE + 0x0428,0x8459, // CYRILLIC CAPITAL LETTER SHA + 0x0429,0x845A, // CYRILLIC CAPITAL LETTER SHCHA + 0x042B,0x845C, // CYRILLIC CAPITAL LETTER YERU + 0x042C,0x845D, // CYRILLIC CAPITAL LETTER SOFT SIGN + 0x042D,0x845E, // CYRILLIC CAPITAL LETTER E + 0x042E,0x845F, // CYRILLIC CAPITAL LETTER YU + 0x042F,0x8460, // CYRILLIC CAPITAL LETTER YA + 0x0430,0x8470, // CYRILLIC SMALL LETTER A + 0x0431,0x8471, // CYRILLIC SMALL LETTER BE + 0x0432,0x8472, // CYRILLIC SMALL LETTER VE + 0x0433,0x8473, // CYRILLIC SMALL LETTER GHE + 0x0434,0x8474, // CYRILLIC SMALL LETTER DE + 0x0435,0x8475, // CYRILLIC SMALL LETTER IE + 0x0436,0x8477, // CYRILLIC SMALL LETTER ZHE + 0x0437,0x8478, // CYRILLIC SMALL LETTER ZE + 0x0438,0x8479, // CYRILLIC SMALL LETTER I + 0x0439,0x847A, // CYRILLIC SMALL LETTER SHORT I + 0x043A,0x847B, // CYRILLIC SMALL LETTER KA + 0x043B,0x847C, // CYRILLIC SMALL LETTER EL + 0x043C,0x847D, // CYRILLIC SMALL LETTER EM + 0x043D,0x847E, // CYRILLIC SMALL LETTER EN + 0x043E,0x8480, // CYRILLIC SMALL LETTER O + 0x043F,0x8481, // CYRILLIC SMALL LETTER PE + 0x0440,0x8482, // CYRILLIC SMALL LETTER ER + 0x0441,0x8483, // CYRILLIC SMALL LETTER ES + 0x0442,0x8484, // CYRILLIC SMALL LETTER TE + 0x0443,0x8485, // CYRILLIC SMALL LETTER U + 0x0444,0x8486, // CYRILLIC SMALL LETTER EF + 0x0445,0x8487, // CYRILLIC SMALL LETTER HA + 0x0446,0x8488, // CYRILLIC SMALL LETTER TSE + 0x0447,0x8489, // CYRILLIC SMALL LETTER CHE + 0x0448,0x848A, // CYRILLIC SMALL LETTER SHA + 0x0449,0x848B, // CYRILLIC SMALL LETTER SHCHA + 0x044A,0x848C, // CYRILLIC SMALL LETTER HARD SIGN + 0x044B,0x848D, // CYRILLIC SMALL LETTER YERU + 0x044C,0x848E, // CYRILLIC SMALL LETTER SOFT SIGN + 0x044D,0x848F, // CYRILLIC SMALL LETTER E + 0x044E,0x8490, // CYRILLIC SMALL LETTER YU + 0x044F,0x8491, // CYRILLIC SMALL LETTER YA + 0x0451,0x8476, // CYRILLIC SMALL LETTER IO + 0x2010,0x815D, // HYPHEN + 0x2014,0x815C, // EM DASH + 0x2016,0x8161, // DOUBLE VERTICAL LINE + 0x2018,0x8165, // LEFT SINGLE QUOTATION MARK + 0x2019,0x8166, // RIGHT SINGLE QUOTATION MARK + 0x201C,0x8167, // LEFT DOUBLE QUOTATION MARK + 0x201D,0x8168, // RIGHT DOUBLE QUOTATION MARK + 0x2020,0x81F5, // DAGGER + 0x2021,0x81F6, // DOUBLE DAGGER + 0x2025,0x8164, // TWO DOT LEADER + 0x2026,0x8163, // HORIZONTAL ELLIPSIS + 0x2030,0x81F1, // PER MILLE SIGN + 0x2032,0x818C, // PRIME + 0x2033,0x818D, // DOUBLE PRIME + 0x203B,0x81A6, // REFERENCE MARK + 0x2103,0x818E, // DEGREE CELSIUS + 0x212B,0x81F0, // ANGSTROM SIGN + 0x2190,0x81A9, // LEFTWARDS ARROW + 0x2191,0x81AA, // UPWARDS ARROW + 0x2192,0x81A8, // RIGHTWARDS ARROW + 0x2193,0x81AB, // DOWNWARDS ARROW + 0x21D2,0x81CB, // RIGHTWARDS DOUBLE ARROW + 0x21D4,0x81CC, // LEFT RIGHT DOUBLE ARROW + 0x2200,0x81CD, // FOR ALL + 0x2202,0x81DD, // PARTIAL DIFFERENTIAL + 0x2203,0x81CE, // THERE EXISTS + 0x2207,0x81DE, // NABLA + 0x2208,0x81B8, // ELEMENT OF + 0x220B,0x81B9, // CONTAINS AS MEMBER + 0x2212,0x817C, // MINUS SIGN + 0x221A,0x81E3, // SQUARE ROOT + 0x221D,0x81E5, // PROPORTIONAL TO + 0x221E,0x8187, // INFINITY + 0x2220,0x81DA, // ANGLE + 0x2227,0x81C8, // LOGICAL AND + 0x2228,0x81C9, // LOGICAL OR + 0x2229,0x81BF, // INTERSECTION + 0x222A,0x81BE, // UNION + 0x222B,0x81E7, // INTEGRAL + 0x222C,0x81E8, // DOUBLE INTEGRAL + 0x2234,0x8188, // THEREFORE + 0x2235,0x81E6, // BECAUSE + 0x223D,0x81E4, // REVERSED TILDE + 0x2252,0x81E0, // APPROXIMATELY EQUAL TO OR THE IMAGE OF + 0x2260,0x8182, // NOT EQUAL TO + 0x2261,0x81DF, // IDENTICAL TO + 0x2266,0x8185, // LESS-THAN OVER EQUAL TO + 0x2267,0x8186, // GREATER-THAN OVER EQUAL TO + 0x226A,0x81E1, // MUCH LESS-THAN + 0x226B,0x81E2, // MUCH GREATER-THAN + 0x2282,0x81BC, // SUBSET OF + 0x2283,0x81BD, // SUPERSET OF + 0x2286,0x81BA, // SUBSET OF OR EQUAL TO + 0x2287,0x81BB, // SUPERSET OF OR EQUAL TO + 0x22A5,0x81DB, // UP TACK + 0x2312,0x81DC, // ARC + 0x2500,0x849F, // BOX DRAWINGS LIGHT HORIZONTAL + 0x2501,0x84AA, // BOX DRAWINGS HEAVY HORIZONTAL + 0x2502,0x84A0, // BOX DRAWINGS LIGHT VERTICAL + 0x2503,0x84AB, // BOX DRAWINGS HEAVY VERTICAL + 0x250C,0x84A1, // BOX DRAWINGS LIGHT DOWN AND RIGHT + 0x250F,0x84AC, // BOX DRAWINGS HEAVY DOWN AND RIGHT + 0x2510,0x84A2, // BOX DRAWINGS LIGHT DOWN AND LEFT + 0x2513,0x84AD, // BOX DRAWINGS HEAVY DOWN AND LEFT + 0x2514,0x84A4, // BOX DRAWINGS LIGHT UP AND RIGHT + 0x2517,0x84AF, // BOX DRAWINGS HEAVY UP AND RIGHT + 0x2518,0x84A3, // BOX DRAWINGS LIGHT UP AND LEFT + 0x251B,0x84AE, // BOX DRAWINGS HEAVY UP AND LEFT + 0x251C,0x84A5, // BOX DRAWINGS LIGHT VERTICAL AND RIGHT + 0x251D,0x84BA, // BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY + 0x2520,0x84B5, // BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT + 0x2523,0x84B0, // BOX DRAWINGS HEAVY VERTICAL AND RIGHT + 0x2524,0x84A7, // BOX DRAWINGS LIGHT VERTICAL AND LEFT + 0x2525,0x84BC, // BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY + 0x2528,0x84B7, // BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT + 0x252B,0x84B2, // BOX DRAWINGS HEAVY VERTICAL AND LEFT + 0x252C,0x84A6, // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + 0x252F,0x84B6, // BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY + 0x2530,0x84BB, // BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT + 0x2533,0x84B1, // BOX DRAWINGS HEAVY DOWN AND HORIZONTAL + 0x2534,0x84A8, // BOX DRAWINGS LIGHT UP AND HORIZONTAL + 0x2537,0x84B8, // BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY + 0x2538,0x84BD, // BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT + 0x253B,0x84B3, // BOX DRAWINGS HEAVY UP AND HORIZONTAL + 0x253C,0x84A9, // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + 0x253F,0x84B9, // BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY + 0x2542,0x84BE, // BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT + 0x254B,0x84B4, // BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL + 0x25A0,0x81A1, // BLACK SQUARE + 0x25A1,0x81A0, // WHITE SQUARE + 0x25B2,0x81A3, // BLACK UP-POINTING TRIANGLE + 0x25B3,0x81A2, // WHITE UP-POINTING TRIANGLE + 0x25BC,0x81A5, // BLACK DOWN-POINTING TRIANGLE + 0x25BD,0x81A4, // WHITE DOWN-POINTING TRIANGLE + 0x25C6,0x819F, // BLACK DIAMOND + 0x25C7,0x819E, // WHITE DIAMOND + 0x25CB,0x819B, // WHITE CIRCLE + 0x25CE,0x819D, // BULLSEYE + 0x25CF,0x819C, // BLACK CIRCLE + 0x25EF,0x81FC, // LARGE CIRCLE + 0x2605,0x819A, // BLACK STAR + 0x2606,0x8199, // WHITE STAR + 0x2640,0x818A, // FEMALE SIGN + 0x2642,0x8189, // MALE SIGN + 0x266A,0x81F4, // EIGHTH NOTE + 0x266D,0x81F3, // MUSIC FLAT SIGN + 0x266F,0x81F2, // MUSIC SHARP SIGN + 0x3000,0x8140, // IDEOGRAPHIC SPACE + 0x3001,0x8141, // IDEOGRAPHIC COMMA + 0x3002,0x8142, // IDEOGRAPHIC FULL STOP + 0x3003,0x8156, // DITTO MARK + 0x3005,0x8158, // IDEOGRAPHIC ITERATION MARK + 0x3006,0x8159, // IDEOGRAPHIC CLOSING MARK + 0x3007,0x815A, // IDEOGRAPHIC NUMBER ZERO + 0x3008,0x8171, // LEFT ANGLE BRACKET + 0x3009,0x8172, // RIGHT ANGLE BRACKET + 0x300A,0x8173, // LEFT DOUBLE ANGLE BRACKET + 0x300B,0x8174, // RIGHT DOUBLE ANGLE BRACKET + 0x300C,0x8175, // LEFT CORNER BRACKET + 0x300D,0x8176, // RIGHT CORNER BRACKET + 0x300E,0x8177, // LEFT WHITE CORNER BRACKET + 0x300F,0x8178, // RIGHT WHITE CORNER BRACKET + 0x3010,0x8179, // LEFT BLACK LENTICULAR BRACKET + 0x3011,0x817A, // RIGHT BLACK LENTICULAR BRACKET + 0x3012,0x81A7, // POSTAL MARK + 0x3013,0x81AC, // GETA MARK + 0x3014,0x816B, // LEFT TORTOISE SHELL BRACKET + 0x3015,0x816C, // RIGHT TORTOISE SHELL BRACKET + 0x301C,0x8160, // WAVE DASH + 0x3041,0x829F, // HIRAGANA LETTER SMALL A + 0x3042,0x82A0, // HIRAGANA LETTER A + 0x3043,0x82A1, // HIRAGANA LETTER SMALL I + 0x3044,0x82A2, // HIRAGANA LETTER I + 0x3045,0x82A3, // HIRAGANA LETTER SMALL U + 0x3046,0x82A4, // HIRAGANA LETTER U + 0x3047,0x82A5, // HIRAGANA LETTER SMALL E + 0x3048,0x82A6, // HIRAGANA LETTER E + 0x3049,0x82A7, // HIRAGANA LETTER SMALL O + 0x304A,0x82A8, // HIRAGANA LETTER O + 0x304B,0x82A9, // HIRAGANA LETTER KA + 0x304C,0x82AA, // HIRAGANA LETTER GA + 0x304D,0x82AB, // HIRAGANA LETTER KI + 0x304E,0x82AC, // HIRAGANA LETTER GI + 0x304F,0x82AD, // HIRAGANA LETTER KU + 0x3050,0x82AE, // HIRAGANA LETTER GU + 0x3051,0x82AF, // HIRAGANA LETTER KE + 0x3052,0x82B0, // HIRAGANA LETTER GE + 0x3053,0x82B1, // HIRAGANA LETTER KO + 0x3054,0x82B2, // HIRAGANA LETTER GO + 0x3055,0x82B3, // HIRAGANA LETTER SA + 0x3056,0x82B4, // HIRAGANA LETTER ZA + 0x3057,0x82B5, // HIRAGANA LETTER SI + 0x3058,0x82B6, // HIRAGANA LETTER ZI + 0x3059,0x82B7, // HIRAGANA LETTER SU + 0x305A,0x82B8, // HIRAGANA LETTER ZU + 0x305B,0x82B9, // HIRAGANA LETTER SE + 0x305C,0x82BA, // HIRAGANA LETTER ZE + 0x305D,0x82BB, // HIRAGANA LETTER SO + 0x305E,0x82BC, // HIRAGANA LETTER ZO + 0x305F,0x82BD, // HIRAGANA LETTER TA + 0x3060,0x82BE, // HIRAGANA LETTER DA + 0x3061,0x82BF, // HIRAGANA LETTER TI + 0x3062,0x82C0, // HIRAGANA LETTER DI + 0x3063,0x82C1, // HIRAGANA LETTER SMALL TU + 0x3064,0x82C2, // HIRAGANA LETTER TU + 0x3065,0x82C3, // HIRAGANA LETTER DU + 0x3066,0x82C4, // HIRAGANA LETTER TE + 0x3067,0x82C5, // HIRAGANA LETTER DE + 0x3068,0x82C6, // HIRAGANA LETTER TO + 0x3069,0x82C7, // HIRAGANA LETTER DO + 0x306A,0x82C8, // HIRAGANA LETTER NA + 0x306B,0x82C9, // HIRAGANA LETTER NI + 0x306C,0x82CA, // HIRAGANA LETTER NU + 0x306D,0x82CB, // HIRAGANA LETTER NE + 0x306E,0x82CC, // HIRAGANA LETTER NO + 0x306F,0x82CD, // HIRAGANA LETTER HA + 0x3070,0x82CE, // HIRAGANA LETTER BA + 0x3071,0x82CF, // HIRAGANA LETTER PA + 0x3072,0x82D0, // HIRAGANA LETTER HI + 0x3073,0x82D1, // HIRAGANA LETTER BI + 0x3074,0x82D2, // HIRAGANA LETTER PI + 0x3075,0x82D3, // HIRAGANA LETTER HU + 0x3076,0x82D4, // HIRAGANA LETTER BU + 0x3077,0x82D5, // HIRAGANA LETTER PU + 0x3078,0x82D6, // HIRAGANA LETTER HE + 0x3079,0x82D7, // HIRAGANA LETTER BE + 0x307A,0x82D8, // HIRAGANA LETTER PE + 0x307B,0x82D9, // HIRAGANA LETTER HO + 0x307C,0x82DA, // HIRAGANA LETTER BO + 0x307D,0x82DB, // HIRAGANA LETTER PO + 0x307E,0x82DC, // HIRAGANA LETTER MA + 0x307F,0x82DD, // HIRAGANA LETTER MI + 0x3080,0x82DE, // HIRAGANA LETTER MU + 0x3081,0x82DF, // HIRAGANA LETTER ME + 0x3082,0x82E0, // HIRAGANA LETTER MO + 0x3083,0x82E1, // HIRAGANA LETTER SMALL YA + 0x3084,0x82E2, // HIRAGANA LETTER YA + 0x3085,0x82E3, // HIRAGANA LETTER SMALL YU + 0x3086,0x82E4, // HIRAGANA LETTER YU + 0x3087,0x82E5, // HIRAGANA LETTER SMALL YO + 0x3088,0x82E6, // HIRAGANA LETTER YO + 0x3089,0x82E7, // HIRAGANA LETTER RA + 0x308A,0x82E8, // HIRAGANA LETTER RI + 0x308B,0x82E9, // HIRAGANA LETTER RU + 0x308C,0x82EA, // HIRAGANA LETTER RE + 0x308D,0x82EB, // HIRAGANA LETTER RO + 0x308E,0x82EC, // HIRAGANA LETTER SMALL WA + 0x308F,0x82ED, // HIRAGANA LETTER WA + 0x3090,0x82EE, // HIRAGANA LETTER WI + 0x3091,0x82EF, // HIRAGANA LETTER WE + 0x3092,0x82F0, // HIRAGANA LETTER WO + 0x3093,0x82F1, // HIRAGANA LETTER N + 0x309B,0x814A, // KATAKANA-HIRAGANA VOICED SOUND MARK + 0x309C,0x814B, // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK + 0x309D,0x8154, // HIRAGANA ITERATION MARK + 0x309E,0x8155, // HIRAGANA VOICED ITERATION MARK + 0x30A1,0x8340, // KATAKANA LETTER SMALL A + 0x30A2,0x8341, // KATAKANA LETTER A + 0x30A3,0x8342, // KATAKANA LETTER SMALL I + 0x30A4,0x8343, // KATAKANA LETTER I + 0x30A5,0x8344, // KATAKANA LETTER SMALL U + 0x30A6,0x8345, // KATAKANA LETTER U + 0x30A7,0x8346, // KATAKANA LETTER SMALL E + 0x30A8,0x8347, // KATAKANA LETTER E + 0x30A9,0x8348, // KATAKANA LETTER SMALL O + 0x30AA,0x8349, // KATAKANA LETTER O + 0x30AB,0x834A, // KATAKANA LETTER KA + 0x30AC,0x834B, // KATAKANA LETTER GA + 0x30AD,0x834C, // KATAKANA LETTER KI + 0x30AE,0x834D, // KATAKANA LETTER GI + 0x30AF,0x834E, // KATAKANA LETTER KU + 0x30B0,0x834F, // KATAKANA LETTER GU + 0x30B1,0x8350, // KATAKANA LETTER KE + 0x30B2,0x8351, // KATAKANA LETTER GE + 0x30B3,0x8352, // KATAKANA LETTER KO + 0x30B4,0x8353, // KATAKANA LETTER GO + 0x30B5,0x8354, // KATAKANA LETTER SA + 0x30B6,0x8355, // KATAKANA LETTER ZA + 0x30B7,0x8356, // KATAKANA LETTER SI + 0x30B8,0x8357, // KATAKANA LETTER ZI + 0x30B9,0x8358, // KATAKANA LETTER SU + 0x30BA,0x8359, // KATAKANA LETTER ZU + 0x30BB,0x835A, // KATAKANA LETTER SE + 0x30BD,0x835C, // KATAKANA LETTER SO + 0x30BE,0x835D, // KATAKANA LETTER ZO + 0x30BF,0x835E, // KATAKANA LETTER TA + 0x30C0,0x835F, // KATAKANA LETTER DA + 0x30C1,0x8360, // KATAKANA LETTER TI + 0x30C2,0x8361, // KATAKANA LETTER DI + 0x30C3,0x8362, // KATAKANA LETTER SMALL TU + 0x30C4,0x8363, // KATAKANA LETTER TU + 0x30C5,0x8364, // KATAKANA LETTER DU + 0x30C6,0x8365, // KATAKANA LETTER TE + 0x30C7,0x8366, // KATAKANA LETTER DE + 0x30C8,0x8367, // KATAKANA LETTER TO + 0x30C9,0x8368, // KATAKANA LETTER DO + 0x30CA,0x8369, // KATAKANA LETTER NA + 0x30CB,0x836A, // KATAKANA LETTER NI + 0x30CC,0x836B, // KATAKANA LETTER NU + 0x30CD,0x836C, // KATAKANA LETTER NE + 0x30CE,0x836D, // KATAKANA LETTER NO + 0x30CF,0x836E, // KATAKANA LETTER HA + 0x30D0,0x836F, // KATAKANA LETTER BA + 0x30D1,0x8370, // KATAKANA LETTER PA + 0x30D2,0x8371, // KATAKANA LETTER HI + 0x30D3,0x8372, // KATAKANA LETTER BI + 0x30D4,0x8373, // KATAKANA LETTER PI + 0x30D5,0x8374, // KATAKANA LETTER HU + 0x30D6,0x8375, // KATAKANA LETTER BU + 0x30D7,0x8376, // KATAKANA LETTER PU + 0x30D8,0x8377, // KATAKANA LETTER HE + 0x30D9,0x8378, // KATAKANA LETTER BE + 0x30DA,0x8379, // KATAKANA LETTER PE + 0x30DB,0x837A, // KATAKANA LETTER HO + 0x30DC,0x837B, // KATAKANA LETTER BO + 0x30DD,0x837C, // KATAKANA LETTER PO + 0x30DE,0x837D, // KATAKANA LETTER MA + 0x30DF,0x837E, // KATAKANA LETTER MI + 0x30E0,0x8380, // KATAKANA LETTER MU + 0x30E1,0x8381, // KATAKANA LETTER ME + 0x30E2,0x8382, // KATAKANA LETTER MO + 0x30E3,0x8383, // KATAKANA LETTER SMALL YA + 0x30E4,0x8384, // KATAKANA LETTER YA + 0x30E5,0x8385, // KATAKANA LETTER SMALL YU + 0x30E6,0x8386, // KATAKANA LETTER YU + 0x30E7,0x8387, // KATAKANA LETTER SMALL YO + 0x30E8,0x8388, // KATAKANA LETTER YO + 0x30E9,0x8389, // KATAKANA LETTER RA + 0x30EA,0x838A, // KATAKANA LETTER RI + 0x30EB,0x838B, // KATAKANA LETTER RU + 0x30EC,0x838C, // KATAKANA LETTER RE + 0x30ED,0x838D, // KATAKANA LETTER RO + 0x30EE,0x838E, // KATAKANA LETTER SMALL WA + 0x30EF,0x838F, // KATAKANA LETTER WA + 0x30F0,0x8390, // KATAKANA LETTER WI + 0x30F1,0x8391, // KATAKANA LETTER WE + 0x30F2,0x8392, // KATAKANA LETTER WO + 0x30F3,0x8393, // KATAKANA LETTER N + 0x30F4,0x8394, // KATAKANA LETTER VU + 0x30F5,0x8395, // KATAKANA LETTER SMALL KA + 0x30F6,0x8396, // KATAKANA LETTER SMALL KE + 0x30FB,0x8145, // KATAKANA MIDDLE DOT + 0x30FD,0x8152, // KATAKANA ITERATION MARK + 0x30FE,0x8153, // KATAKANA VOICED ITERATION MARK + 0x4E00,0x88EA, // + 0x4E01,0x929A, // + 0x4E03,0x8EB5, // + 0x4E07,0x969C, // + 0x4E08,0x8FE4, // + 0x4E09,0x8E4F, // + 0x4E0A,0x8FE3, // + 0x4E0B,0x89BA, // + 0x4E0D,0x9573, // + 0x4E0E,0x975E, // + 0x4E10,0x98A0, // + 0x4E11,0x894E, // + 0x4E14,0x8A8E, // + 0x4E15,0x98A1, // + 0x4E16,0x90A2, // + 0x4E17,0x99C0, // + 0x4E18,0x8B75, // + 0x4E19,0x95B8, // + 0x4E1E,0x8FE5, // + 0x4E21,0x97BC, // + 0x4E26,0x95C0, // + 0x4E2A,0x98A2, // + 0x4E2D,0x9286, // + 0x4E31,0x98A3, // + 0x4E32,0x8BF8, // + 0x4E36,0x98A4, // + 0x4E38,0x8ADB, // + 0x4E39,0x924F, // + 0x4E3B,0x8EE5, // + 0x4E3C,0x98A5, // + 0x4E3F,0x98A6, // + 0x4E42,0x98A7, // + 0x4E43,0x9454, // + 0x4E45,0x8B76, // + 0x4E4B,0x9456, // + 0x4E4D,0x93E1, // + 0x4E4E,0x8CC1, // + 0x4E4F,0x9652, // + 0x4E55,0xE568, // + 0x4E56,0x98A8, // + 0x4E57,0x8FE6, // + 0x4E58,0x98A9, // + 0x4E59,0x89B3, // + 0x4E5D,0x8BE3, // + 0x4E5E,0x8CEE, // + 0x4E5F,0x96E7, // + 0x4E62,0x9BA4, // + 0x4E71,0x9790, // + 0x4E73,0x93FB, // + 0x4E7E,0x8AA3, // + 0x4E80,0x8B54, // + 0x4E82,0x98AA, // + 0x4E85,0x98AB, // + 0x4E86,0x97B9, // + 0x4E88,0x975C, // + 0x4E89,0x9188, // + 0x4E8A,0x98AD, // + 0x4E8B,0x8E96, // + 0x4E8C,0x93F1, // + 0x4E8E,0x98B0, // + 0x4E91,0x895D, // + 0x4E92,0x8CDD, // + 0x4E94,0x8CDC, // + 0x4E95,0x88E4, // + 0x4E98,0x986A, // + 0x4E99,0x9869, // + 0x4E9B,0x8DB1, // + 0x4E9C,0x889F, // + 0x4E9E,0x98B1, // + 0x4E9F,0x98B2, // + 0x4EA0,0x98B3, // + 0x4EA1,0x9653, // + 0x4EA2,0x98B4, // + 0x4EA4,0x8CF0, // + 0x4EA5,0x88E5, // + 0x4EA6,0x9692, // + 0x4EA8,0x8B9C, // + 0x4EAB,0x8B9D, // + 0x4EAC,0x8B9E, // + 0x4EAD,0x92E0, // + 0x4EAE,0x97BA, // + 0x4EB0,0x98B5, // + 0x4EB3,0x98B6, // + 0x4EB6,0x98B7, // + 0x4EBA,0x906C, // + 0x4EC0,0x8F59, // + 0x4EC1,0x906D, // + 0x4EC2,0x98BC, // + 0x4EC4,0x98BA, // + 0x4EC6,0x98BB, // + 0x4EC7,0x8B77, // + 0x4ECA,0x8DA1, // + 0x4ECB,0x89EE, // + 0x4ECD,0x98B9, // + 0x4ECE,0x98B8, // + 0x4ECF,0x95A7, // + 0x4ED4,0x8E65, // + 0x4ED5,0x8E64, // + 0x4ED6,0x91BC, // + 0x4ED7,0x98BD, // + 0x4ED8,0x9574, // + 0x4ED9,0x90E5, // + 0x4EDD,0x8157, // + 0x4EDE,0x98BE, // + 0x4EDF,0x98C0, // + 0x4EE3,0x91E3, // + 0x4EE4,0x97DF, // + 0x4EE5,0x88C8, // + 0x4EED,0x98BF, // + 0x4EEE,0x89BC, // + 0x4EF0,0x8BC2, // + 0x4EF2,0x9287, // + 0x4EF6,0x8C8F, // + 0x4EF7,0x98C1, // + 0x4EFB,0x9443, // + 0x4F01,0x8AE9, // + 0x4F09,0x98C2, // + 0x4F0A,0x88C9, // + 0x4F0D,0x8CDE, // + 0x4F0E,0x8AEA, // + 0x4F0F,0x959A, // + 0x4F10,0x94B0, // + 0x4F11,0x8B78, // + 0x4F1A,0x89EF, // + 0x4F1C,0x98E5, // + 0x4F1D,0x9360, // + 0x4F2F,0x948C, // + 0x4F30,0x98C4, // + 0x4F34,0x94BA, // + 0x4F36,0x97E0, // + 0x4F38,0x904C, // + 0x4F3A,0x8E66, // + 0x4F3C,0x8E97, // + 0x4F3D,0x89BE, // + 0x4F43,0x92CF, // + 0x4F46,0x9241, // + 0x4F47,0x98C8, // + 0x4F4D,0x88CA, // + 0x4F4E,0x92E1, // + 0x4F4F,0x8F5A, // + 0x4F50,0x8DB2, // + 0x4F51,0x9743, // + 0x4F53,0x91CC, // + 0x4F55,0x89BD, // + 0x4F57,0x98C7, // + 0x4F59,0x975D, // + 0x4F5A,0x98C3, // + 0x4F5B,0x98C5, // + 0x4F5C,0x8DEC, // + 0x4F5D,0x98C6, // + 0x4F5E,0x9B43, // + 0x4F69,0x98CE, // + 0x4F6F,0x98D1, // + 0x4F70,0x98CF, // + 0x4F73,0x89C0, // + 0x4F75,0x95B9, // + 0x4F76,0x98C9, // + 0x4F7B,0x98CD, // + 0x4F7C,0x8CF1, // + 0x4F7F,0x8E67, // + 0x4F83,0x8AA4, // + 0x4F86,0x98D2, // + 0x4F88,0x98CA, // + 0x4F8B,0x97E1, // + 0x4F8D,0x8E98, // + 0x4F8F,0x98CB, // + 0x4F91,0x98D0, // + 0x4F96,0x98D3, // + 0x4F98,0x98CC, // + 0x4F9B,0x8B9F, // + 0x4F9D,0x88CB, // + 0x4FA0,0x8BA0, // + 0x4FA1,0x89BF, // + 0x4FAB,0x9B44, // + 0x4FAD,0x9699, // + 0x4FAE,0x958E, // + 0x4FAF,0x8CF2, // + 0x4FB5,0x904E, // + 0x4FB6,0x97B5, // + 0x4FBF,0x95D6, // + 0x4FC2,0x8C57, // + 0x4FC3,0x91A3, // + 0x4FC4,0x89E2, // + 0x4FCA,0x8F72, // + 0x4FCE,0x98D7, // + 0x4FD0,0x98DC, // + 0x4FD1,0x98DA, // + 0x4FD4,0x98D5, // + 0x4FD7,0x91AD, // + 0x4FD8,0x98D8, // + 0x4FDA,0x98DB, // + 0x4FDB,0x98D9, // + 0x4FDD,0x95DB, // + 0x4FDF,0x98D6, // + 0x4FE1,0x904D, // + 0x4FE3,0x9693, // + 0x4FE4,0x98DD, // + 0x4FE5,0x98DE, // + 0x4FEE,0x8F43, // + 0x4FEF,0x98EB, // + 0x4FF3,0x946F, // + 0x4FF5,0x9555, // + 0x4FF6,0x98E6, // + 0x4FF8,0x95EE, // + 0x4FFA,0x89B4, // + 0x4FFE,0x98EA, // + 0x5005,0x98E4, // + 0x5006,0x98ED, // + 0x5009,0x9171, // + 0x500B,0x8CC2, // + 0x500D,0x947B, // + 0x500F,0xE0C5, // + 0x5011,0x98EC, // + 0x5012,0x937C, // + 0x5014,0x98E1, // + 0x5016,0x8CF4, // + 0x5019,0x8CF3, // + 0x501A,0x98DF, // + 0x501F,0x8ED8, // + 0x5021,0x98E7, // + 0x5023,0x95ED, // + 0x5024,0x926C, // + 0x5025,0x98E3, // + 0x5026,0x8C91, // + 0x5028,0x98E0, // + 0x5029,0x98E8, // + 0x502A,0x98E2, // + 0x502B,0x97CF, // + 0x502C,0x98E9, // + 0x502D,0x9860, // + 0x5036,0x8BE4, // + 0x5039,0x8C90, // + 0x5043,0x98EE, // + 0x5047,0x98EF, // + 0x5048,0x98F3, // + 0x5049,0x88CC, // + 0x504F,0x95CE, // + 0x5050,0x98F2, // + 0x5055,0x98F1, // + 0x5056,0x98F5, // + 0x505A,0x98F4, // + 0x505C,0x92E2, // + 0x5065,0x8C92, // + 0x506C,0x98F6, // + 0x5072,0x8EC3, // + 0x5074,0x91A4, // + 0x5075,0x92E3, // + 0x5076,0x8BF4, // + 0x5078,0x98F7, // + 0x507D,0x8B55, // + 0x5080,0x98F8, // + 0x5085,0x98FA, // + 0x508D,0x9654, // + 0x5091,0x8C86, // + 0x5098,0x8E50, // + 0x5099,0x94F5, // + 0x509A,0x98F9, // + 0x50AC,0x8DC3, // + 0x50AD,0x9762, // + 0x50B2,0x98FC, // + 0x50B3,0x9942, // + 0x50B4,0x98FB, // + 0x50B5,0x8DC2, // + 0x50B7,0x8F9D, // + 0x50BE,0x8C58, // + 0x50C2,0x9943, // + 0x50C5,0x8BCD, // + 0x50C9,0x9940, // + 0x50CA,0x9941, // + 0x50CD,0x93AD, // + 0x50CF,0x919C, // + 0x50D1,0x8BA1, // + 0x50D5,0x966C, // + 0x50D6,0x9944, // + 0x50DA,0x97BB, // + 0x50DE,0x9945, // + 0x50E3,0x9948, // + 0x50E5,0x9946, // + 0x50E7,0x916D, // + 0x50ED,0x9947, // + 0x50EE,0x9949, // + 0x50F5,0x994B, // + 0x50F9,0x994A, // + 0x50FB,0x95C6, // + 0x5100,0x8B56, // + 0x5101,0x994D, // + 0x5102,0x994E, // + 0x5104,0x89AD, // + 0x5109,0x994C, // + 0x5112,0x8EF2, // + 0x5114,0x9951, // + 0x5115,0x9950, // + 0x5116,0x994F, // + 0x5118,0x98D4, // + 0x511A,0x9952, // + 0x511F,0x8F9E, // + 0x5121,0x9953, // + 0x512A,0x9744, // + 0x5132,0x96D7, // + 0x5137,0x9955, // + 0x513A,0x9954, // + 0x513B,0x9957, // + 0x513C,0x9956, // + 0x513F,0x9958, // + 0x5140,0x9959, // + 0x5141,0x88F2, // + 0x5143,0x8CB3, // + 0x5144,0x8C5A, // + 0x5146,0x929B, // + 0x5147,0x8BA2, // + 0x5148,0x90E6, // + 0x5149,0x8CF5, // + 0x514B,0x8D8E, // + 0x514D,0x96C6, // + 0x514E,0x9365, // + 0x5150,0x8E99, // + 0x5152,0x995A, // + 0x5154,0x995C, // + 0x515A,0x937D, // + 0x515C,0x8A95, // + 0x5162,0x995D, // + 0x5165,0x93FC, // + 0x5168,0x9153, // + 0x5169,0x995F, // + 0x516A,0x9960, // + 0x516B,0x94AA, // + 0x516C,0x8CF6, // + 0x516D,0x985A, // + 0x516E,0x9961, // + 0x5171,0x8BA4, // + 0x5175,0x95BA, // + 0x5176,0x91B4, // + 0x5177,0x8BEF, // + 0x5178,0x9354, // + 0x517C,0x8C93, // + 0x5180,0x9962, // + 0x5182,0x9963, // + 0x5185,0x93E0, // + 0x5186,0x897E, // + 0x5189,0x9966, // + 0x518A,0x8DFB, // + 0x518C,0x9965, // + 0x518D,0x8DC4, // + 0x518F,0x9967, // + 0x5190,0xE3EC, // + 0x5191,0x9968, // + 0x5192,0x9660, // + 0x5193,0x9969, // + 0x5195,0x996A, // + 0x5196,0x996B, // + 0x5197,0x8FE7, // + 0x5199,0x8ECA, // + 0x51A0,0x8AA5, // + 0x51A2,0x996E, // + 0x51A4,0x996C, // + 0x51A5,0x96BB, // + 0x51A6,0x996D, // + 0x51A8,0x9579, // + 0x51A9,0x996F, // + 0x51AA,0x9970, // + 0x51AB,0x9971, // + 0x51AC,0x937E, // + 0x51B0,0x9975, // + 0x51B1,0x9973, // + 0x51B2,0x9974, // + 0x51B3,0x9972, // + 0x51B4,0x8DE1, // + 0x51B5,0x9976, // + 0x51B6,0x96E8, // + 0x51B7,0x97E2, // + 0x51BD,0x9977, // + 0x51C4,0x90A6, // + 0x51C5,0x9978, // + 0x51C6,0x8F79, // + 0x51C9,0x9979, // + 0x51CB,0x929C, // + 0x51CC,0x97BD, // + 0x51CD,0x9380, // + 0x51D6,0x99C3, // + 0x51DB,0x997A, // + 0x51DC,0xEAA3, // + 0x51DD,0x8BC3, // + 0x51E0,0x997B, // + 0x51E1,0x967D, // + 0x51E6,0x8F88, // + 0x51E7,0x91FA, // + 0x51E9,0x997D, // + 0x51EA,0x93E2, // + 0x51ED,0x997E, // + 0x51F0,0x9980, // + 0x51F1,0x8A4D, // + 0x51F5,0x9981, // + 0x51F6,0x8BA5, // + 0x51F8,0x93CA, // + 0x51F9,0x899A, // + 0x51FA,0x8F6F, // + 0x51FD,0x949F, // + 0x51FE,0x9982, // + 0x5200,0x9381, // + 0x5203,0x906E, // + 0x5204,0x9983, // + 0x5206,0x95AA, // + 0x5207,0x90D8, // + 0x5208,0x8AA0, // + 0x520A,0x8AA7, // + 0x520B,0x9984, // + 0x520E,0x9986, // + 0x5211,0x8C59, // + 0x5214,0x9985, // + 0x5217,0x97F1, // + 0x521D,0x8F89, // + 0x5224,0x94BB, // + 0x5225,0x95CA, // + 0x5227,0x9987, // + 0x5229,0x9798, // + 0x522A,0x9988, // + 0x522E,0x9989, // + 0x5230,0x939E, // + 0x5233,0x998A, // + 0x5236,0x90A7, // + 0x5237,0x8DFC, // + 0x5238,0x8C94, // + 0x5239,0x998B, // + 0x523A,0x8E68, // + 0x523B,0x8D8F, // + 0x5243,0x92E4, // + 0x5244,0x998D, // + 0x5247,0x91A5, // + 0x524A,0x8DED, // + 0x524B,0x998E, // + 0x524C,0x998F, // + 0x524D,0x914F, // + 0x524F,0x998C, // + 0x5254,0x9991, // + 0x5256,0x9655, // + 0x525B,0x8D84, // + 0x525E,0x9990, // + 0x5263,0x8C95, // + 0x5264,0x8DDC, // + 0x5265,0x948D, // + 0x5269,0x9994, // + 0x526A,0x9992, // + 0x526F,0x959B, // + 0x5270,0x8FE8, // + 0x5271,0x999B, // + 0x5272,0x8A84, // + 0x5273,0x9995, // + 0x5274,0x9993, // + 0x5275,0x916E, // + 0x527D,0x9997, // + 0x527F,0x9996, // + 0x5283,0x8A63, // + 0x5287,0x8C80, // + 0x5288,0x999C, // + 0x5289,0x97AB, // + 0x528D,0x9998, // + 0x5291,0x999D, // + 0x5292,0x999A, // + 0x5294,0x9999, // + 0x529B,0x97CD, // + 0x529F,0x8CF7, // + 0x52A0,0x89C1, // + 0x52A3,0x97F2, // + 0x52A9,0x8F95, // + 0x52AA,0x9377, // + 0x52AB,0x8D85, // + 0x52AC,0x99A0, // + 0x52AD,0x99A1, // + 0x52B1,0x97E3, // + 0x52B4,0x984A, // + 0x52B5,0x99A3, // + 0x52B9,0x8CF8, // + 0x52BC,0x99A2, // + 0x52BE,0x8A4E, // + 0x52C1,0x99A4, // + 0x52C3,0x9675, // + 0x52C5,0x92BA, // + 0x52C7,0x9745, // + 0x52C9,0x95D7, // + 0x52CD,0x99A5, // + 0x52D2,0xE8D3, // + 0x52D5,0x93AE, // + 0x52D7,0x99A6, // + 0x52D8,0x8AA8, // + 0x52D9,0x96B1, // + 0x52DD,0x8F9F, // + 0x52DE,0x99A7, // + 0x52DF,0x95E5, // + 0x52E0,0x99AB, // + 0x52E2,0x90A8, // + 0x52E3,0x99A8, // + 0x52E4,0x8BCE, // + 0x52E6,0x99A9, // + 0x52E7,0x8AA9, // + 0x52F2,0x8C4D, // + 0x52F3,0x99AC, // + 0x52F5,0x99AD, // + 0x52F8,0x99AE, // + 0x52F9,0x99AF, // + 0x52FA,0x8ED9, // + 0x52FE,0x8CF9, // + 0x52FF,0x96DC, // + 0x5301,0x96E6, // + 0x5302,0x93F5, // + 0x5305,0x95EF, // + 0x5306,0x99B0, // + 0x5308,0x99B1, // + 0x530D,0x99B3, // + 0x530F,0x99B5, // + 0x5310,0x99B4, // + 0x5315,0x99B6, // + 0x5316,0x89BB, // + 0x5317,0x966B, // + 0x5319,0x8DFA, // + 0x531A,0x99B7, // + 0x531D,0x9178, // + 0x5320,0x8FA0, // + 0x5321,0x8BA7, // + 0x5323,0x99B8, // + 0x532A,0x94D9, // + 0x532F,0x99B9, // + 0x5331,0x99BA, // + 0x5333,0x99BB, // + 0x5338,0x99BC, // + 0x5339,0x9543, // + 0x533A,0x8BE6, // + 0x533B,0x88E3, // + 0x533F,0x93BD, // + 0x5340,0x99BD, // + 0x5341,0x8F5C, // + 0x5343,0x90E7, // + 0x5345,0x99BF, // + 0x5346,0x99BE, // + 0x5347,0x8FA1, // + 0x5348,0x8CDF, // + 0x5349,0x99C1, // + 0x534A,0x94BC, // + 0x534D,0x99C2, // + 0x5351,0x94DA, // + 0x5352,0x91B2, // + 0x5353,0x91EC, // + 0x5354,0x8BA6, // + 0x5357,0x93EC, // + 0x5358,0x9250, // + 0x535A,0x948E, // + 0x535C,0x966D, // + 0x535E,0x99C4, // + 0x5360,0x90E8, // + 0x5366,0x8C54, // + 0x5369,0x99C5, // + 0x536E,0x99C6, // + 0x536F,0x894B, // + 0x5370,0x88F3, // + 0x5371,0x8AEB, // + 0x5373,0x91A6, // + 0x5374,0x8B70, // + 0x5375,0x9791, // + 0x5377,0x99C9, // + 0x5378,0x89B5, // + 0x537B,0x99C8, // + 0x537F,0x8BA8, // + 0x5382,0x99CA, // + 0x5384,0x96EF, // + 0x5396,0x99CB, // + 0x5398,0x97D0, // + 0x539A,0x8CFA, // + 0x539F,0x8CB4, // + 0x53A0,0x99CC, // + 0x53A5,0x99CE, // + 0x53A6,0x99CD, // + 0x53A8,0x907E, // + 0x53A9,0x8958, // + 0x53AD,0x897D, // + 0x53AE,0x99CF, // + 0x53B0,0x99D0, // + 0x53B3,0x8CB5, // + 0x53B6,0x99D1, // + 0x53BB,0x8B8E, // + 0x53C2,0x8E51, // + 0x53C3,0x99D2, // + 0x53C8,0x9694, // + 0x53C9,0x8DB3, // + 0x53CA,0x8B79, // + 0x53CB,0x9746, // + 0x53CC,0x916F, // + 0x53CD,0x94BD, // + 0x53CE,0x8EFB, // + 0x53D4,0x8F66, // + 0x53D6,0x8EE6, // + 0x53D7,0x8EF3, // + 0x53D9,0x8F96, // + 0x53DB,0x94BE, // + 0x53DF,0x99D5, // + 0x53E1,0x8962, // + 0x53E2,0x9170, // + 0x53E3,0x8CFB, // + 0x53E4,0x8CC3, // + 0x53E5,0x8BE5, // + 0x53E8,0x99D9, // + 0x53E9,0x9240, // + 0x53EA,0x91FC, // + 0x53EB,0x8BA9, // + 0x53EC,0x8FA2, // + 0x53ED,0x99DA, // + 0x53EE,0x99D8, // + 0x53EF,0x89C2, // + 0x53F0,0x91E4, // + 0x53F1,0x8EB6, // + 0x53F2,0x8E6A, // + 0x53F3,0x8945, // + 0x53F6,0x8A90, // + 0x53F7,0x8D86, // + 0x53F8,0x8E69, // + 0x53FA,0x99DB, // + 0x5401,0x99DC, // + 0x5403,0x8B68, // + 0x5404,0x8A65, // + 0x5408,0x8D87, // + 0x5409,0x8B67, // + 0x540A,0x92DD, // + 0x540B,0x8944, // + 0x540C,0x93AF, // + 0x540D,0x96BC, // + 0x540E,0x8D40, // + 0x540F,0x9799, // + 0x5410,0x9366, // + 0x5411,0x8CFC, // + 0x541B,0x8C4E, // + 0x541D,0x99E5, // + 0x541F,0x8BE1, // + 0x5420,0x9669, // + 0x5426,0x94DB, // + 0x5429,0x99E4, // + 0x542B,0x8ADC, // + 0x542C,0x99DF, // + 0x542D,0x99E0, // + 0x542E,0x99E2, // + 0x5436,0x99E3, // + 0x5438,0x8B7A, // + 0x5439,0x9081, // + 0x543B,0x95AB, // + 0x543C,0x99E1, // + 0x543D,0x99DD, // + 0x543E,0x8CE1, // + 0x5440,0x99DE, // + 0x5442,0x9843, // + 0x5446,0x95F0, // + 0x5448,0x92E6, // + 0x5449,0x8CE0, // + 0x544A,0x8D90, // + 0x544E,0x99E6, // + 0x5451,0x93DB, // + 0x545F,0x99EA, // + 0x5468,0x8EFC, // + 0x546A,0x8EF4, // + 0x5470,0x99ED, // + 0x5471,0x99EB, // + 0x5473,0x96A1, // + 0x5475,0x99E8, // + 0x5476,0x99F1, // + 0x5477,0x99EC, // + 0x547B,0x99EF, // + 0x547C,0x8CC4, // + 0x547D,0x96BD, // + 0x5480,0x99F0, // + 0x5484,0x99F2, // + 0x5486,0x99F4, // + 0x548B,0x8DEE, // + 0x548C,0x9861, // + 0x548E,0x99E9, // + 0x548F,0x99E7, // + 0x5490,0x99F3, // + 0x5492,0x99EE, // + 0x54A2,0x99F6, // + 0x54A4,0x9A42, // + 0x54A5,0x99F8, // + 0x54A8,0x99FC, // + 0x54AB,0x9A40, // + 0x54AC,0x99F9, // + 0x54AF,0x9A5D, // + 0x54B2,0x8DE7, // + 0x54B3,0x8A50, // + 0x54B8,0x99F7, // + 0x54BC,0x9A44, // + 0x54BD,0x88F4, // + 0x54BE,0x9A43, // + 0x54C0,0x88A3, // + 0x54C1,0x9569, // + 0x54C2,0x9A41, // + 0x54C4,0x99FA, // + 0x54C7,0x99F5, // + 0x54C8,0x99FB, // + 0x54C9,0x8DC6, // + 0x54D8,0x9A45, // + 0x54E1,0x88F5, // + 0x54E2,0x9A4E, // + 0x54E5,0x9A46, // + 0x54E6,0x9A47, // + 0x54E8,0x8FA3, // + 0x54E9,0x9689, // + 0x54ED,0x9A4C, // + 0x54EE,0x9A4B, // + 0x54F2,0x934E, // + 0x54FA,0x9A4D, // + 0x54FD,0x9A4A, // + 0x5504,0x8953, // + 0x5506,0x8DB4, // + 0x5507,0x904F, // + 0x550F,0x9A48, // + 0x5510,0x9382, // + 0x5514,0x9A49, // + 0x5516,0x88A0, // + 0x552E,0x9A53, // + 0x552F,0x9742, // + 0x5531,0x8FA5, // + 0x5533,0x9A59, // + 0x5538,0x9A58, // + 0x5539,0x9A4F, // + 0x553E,0x91C1, // + 0x5540,0x9A50, // + 0x5544,0x91ED, // + 0x5545,0x9A55, // + 0x5546,0x8FA4, // + 0x554C,0x9A52, // + 0x554F,0x96E2, // + 0x5556,0x9A56, // + 0x5557,0x9A57, // + 0x555C,0x9A54, // + 0x555D,0x9A5A, // + 0x5563,0x9A51, // + 0x557B,0x9A60, // + 0x557C,0x9A65, // + 0x557E,0x9A61, // + 0x5580,0x9A5C, // + 0x5583,0x9A66, // + 0x5584,0x9150, // + 0x5587,0x9A68, // + 0x5589,0x8D41, // + 0x558A,0x9A5E, // + 0x558B,0x929D, // + 0x5598,0x9A62, // + 0x559A,0x8AAB, // + 0x559C,0x8AEC, // + 0x559D,0x8A85, // + 0x559E,0x9A63, // + 0x559F,0x9A5F, // + 0x55A7,0x8C96, // + 0x55A8,0x9A69, // + 0x55A9,0x9A67, // + 0x55AA,0x9172, // + 0x55AB,0x8B69, // + 0x55AC,0x8BAA, // + 0x55AE,0x9A64, // + 0x55B0,0x8BF2, // + 0x55B6,0x8963, // + 0x55C4,0x9A6D, // + 0x55C5,0x9A6B, // + 0x55C7,0x9AA5, // + 0x55D4,0x9A70, // + 0x55DA,0x9A6A, // + 0x55DC,0x9A6E, // + 0x55DF,0x9A6C, // + 0x55E3,0x8E6B, // + 0x55E4,0x9A6F, // + 0x55F7,0x9A72, // + 0x55F9,0x9A77, // + 0x55FD,0x9A75, // + 0x55FE,0x9A74, // + 0x5606,0x9251, // + 0x5609,0x89C3, // + 0x5614,0x9A71, // + 0x5616,0x9A73, // + 0x5617,0x8FA6, // + 0x5618,0x8952, // + 0x561B,0x9A76, // + 0x5629,0x89DC, // + 0x562F,0x9A82, // + 0x5631,0x8FFA, // + 0x5632,0x9A7D, // + 0x5634,0x9A7B, // + 0x5636,0x9A7C, // + 0x5638,0x9A7E, // + 0x5642,0x895C, // + 0x564C,0x9158, // + 0x564E,0x9A78, // + 0x5650,0x9A79, // + 0x565B,0x8A9A, // + 0x5664,0x9A81, // + 0x5668,0x8AED, // + 0x566A,0x9A84, // + 0x566B,0x9A80, // + 0x566C,0x9A83, // + 0x5674,0x95AC, // + 0x5678,0x93D3, // + 0x567A,0x94B6, // + 0x5680,0x9A86, // + 0x5686,0x9A85, // + 0x5687,0x8A64, // + 0x568A,0x9A87, // + 0x568F,0x9A8A, // + 0x5694,0x9A89, // + 0x56A0,0x9A88, // + 0x56A2,0x9458, // + 0x56A5,0x9A8B, // + 0x56AE,0x9A8C, // + 0x56B4,0x9A8E, // + 0x56B6,0x9A8D, // + 0x56BC,0x9A90, // + 0x56C0,0x9A93, // + 0x56C1,0x9A91, // + 0x56C2,0x9A8F, // + 0x56C3,0x9A92, // + 0x56C8,0x9A94, // + 0x56CE,0x9A95, // + 0x56D1,0x9A96, // + 0x56D3,0x9A97, // + 0x56D7,0x9A98, // + 0x56D8,0x9964, // + 0x56DA,0x8EFA, // + 0x56DB,0x8E6C, // + 0x56DE,0x89F1, // + 0x56E0,0x88F6, // + 0x56E3,0x9263, // + 0x56EE,0x9A99, // + 0x56F0,0x8DA2, // + 0x56F2,0x88CD, // + 0x56F3,0x907D, // + 0x56F9,0x9A9A, // + 0x56FA,0x8CC5, // + 0x56FD,0x8D91, // + 0x56FF,0x9A9C, // + 0x5700,0x9A9B, // + 0x5703,0x95DE, // + 0x5704,0x9A9D, // + 0x5708,0x9A9F, // + 0x5709,0x9A9E, // + 0x570B,0x9AA0, // + 0x570D,0x9AA1, // + 0x570F,0x8C97, // + 0x5712,0x8980, // + 0x5713,0x9AA2, // + 0x5716,0x9AA4, // + 0x5718,0x9AA3, // + 0x571C,0x9AA6, // + 0x571F,0x9379, // + 0x5726,0x9AA7, // + 0x5727,0x88B3, // + 0x5728,0x8DDD, // + 0x572D,0x8C5C, // + 0x5730,0x926E, // + 0x5737,0x9AA8, // + 0x5738,0x9AA9, // + 0x573B,0x9AAB, // + 0x5740,0x9AAC, // + 0x5742,0x8DE2, // + 0x5747,0x8BCF, // + 0x574A,0x9656, // + 0x574E,0x9AAA, // + 0x574F,0x9AAD, // + 0x5750,0x8DBF, // + 0x5751,0x8D42, // + 0x5761,0x9AB1, // + 0x5764,0x8DA3, // + 0x5766,0x9252, // + 0x5769,0x9AAE, // + 0x576A,0x92D8, // + 0x577F,0x9AB2, // + 0x5782,0x9082, // + 0x5788,0x9AB0, // + 0x5789,0x9AB3, // + 0x578B,0x8C5E, // + 0x5793,0x9AB4, // + 0x57A0,0x9AB5, // + 0x57A2,0x8D43, // + 0x57A3,0x8A5F, // + 0x57A4,0x9AB7, // + 0x57AA,0x9AB8, // + 0x57B0,0x9AB9, // + 0x57B3,0x9AB6, // + 0x57C0,0x9AAF, // + 0x57C3,0x9ABA, // + 0x57C6,0x9ABB, // + 0x57CB,0x9684, // + 0x57CE,0x8FE9, // + 0x57D2,0x9ABD, // + 0x57D3,0x9ABE, // + 0x57D4,0x9ABC, // + 0x57D6,0x9AC0, // + 0x57DC,0x9457, // + 0x57DF,0x88E6, // + 0x57E0,0x9575, // + 0x57E3,0x9AC1, // + 0x57F4,0x8FFB, // + 0x57F7,0x8EB7, // + 0x57F9,0x947C, // + 0x57FA,0x8AEE, // + 0x57FC,0x8DE9, // + 0x5800,0x9678, // + 0x5802,0x93B0, // + 0x5805,0x8C98, // + 0x5806,0x91CD, // + 0x580A,0x9ABF, // + 0x580B,0x9AC2, // + 0x5815,0x91C2, // + 0x5819,0x9AC3, // + 0x581D,0x9AC4, // + 0x5821,0x9AC6, // + 0x5824,0x92E7, // + 0x582A,0x8AAC, // + 0x582F,0xEA9F, // + 0x5830,0x8981, // + 0x5831,0x95F1, // + 0x5834,0x8FEA, // + 0x5835,0x9367, // + 0x583A,0x8DE4, // + 0x583D,0x9ACC, // + 0x5840,0x95BB, // + 0x5841,0x97DB, // + 0x584A,0x89F2, // + 0x584B,0x9AC8, // + 0x5851,0x9159, // + 0x5852,0x9ACB, // + 0x5854,0x9383, // + 0x5857,0x9368, // + 0x5858,0x9384, // + 0x5859,0x94B7, // + 0x585A,0x92CB, // + 0x585E,0x8DC7, // + 0x5862,0x9AC7, // + 0x5869,0x8996, // + 0x586B,0x9355, // + 0x5870,0x9AC9, // + 0x5872,0x9AC5, // + 0x5875,0x906F, // + 0x5879,0x9ACD, // + 0x587E,0x8F6D, // + 0x5883,0x8BAB, // + 0x5885,0x9ACE, // + 0x5893,0x95E6, // + 0x5897,0x919D, // + 0x589C,0x92C4, // + 0x589F,0x9AD0, // + 0x58A8,0x966E, // + 0x58AB,0x9AD1, // + 0x58AE,0x9AD6, // + 0x58B3,0x95AD, // + 0x58B8,0x9AD5, // + 0x58B9,0x9ACF, // + 0x58BA,0x9AD2, // + 0x58BB,0x9AD4, // + 0x58BE,0x8DA4, // + 0x58C1,0x95C7, // + 0x58C5,0x9AD7, // + 0x58C7,0x9264, // + 0x58CA,0x89F3, // + 0x58CC,0x8FEB, // + 0x58D1,0x9AD9, // + 0x58D3,0x9AD8, // + 0x58D5,0x8D88, // + 0x58D7,0x9ADA, // + 0x58D8,0x9ADC, // + 0x58D9,0x9ADB, // + 0x58DC,0x9ADE, // + 0x58DE,0x9AD3, // + 0x58DF,0x9AE0, // + 0x58E4,0x9ADF, // + 0x58E5,0x9ADD, // + 0x58EB,0x8E6D, // + 0x58EC,0x9070, // + 0x58EE,0x9173, // + 0x58EF,0x9AE1, // + 0x58F0,0x90BA, // + 0x58F1,0x88EB, // + 0x58F2,0x9484, // + 0x58F7,0x92D9, // + 0x58F9,0x9AE3, // + 0x58FA,0x9AE2, // + 0x58FB,0x9AE4, // + 0x58FC,0x9AE5, // + 0x58FD,0x9AE6, // + 0x5902,0x9AE7, // + 0x5909,0x95CF, // + 0x590A,0x9AE8, // + 0x590F,0x89C4, // + 0x5910,0x9AE9, // + 0x5916,0x8A4F, // + 0x5918,0x99C7, // + 0x5919,0x8F67, // + 0x591A,0x91BD, // + 0x591B,0x9AEA, // + 0x591C,0x96E9, // + 0x5922,0x96B2, // + 0x5925,0x9AEC, // + 0x5927,0x91E5, // + 0x5929,0x9356, // + 0x592A,0x91BE, // + 0x592B,0x9576, // + 0x592C,0x9AED, // + 0x592D,0x9AEE, // + 0x592E,0x899B, // + 0x5931,0x8EB8, // + 0x5932,0x9AEF, // + 0x5937,0x88CE, // + 0x5938,0x9AF0, // + 0x593E,0x9AF1, // + 0x5944,0x8982, // + 0x5947,0x8AEF, // + 0x5948,0x93DE, // + 0x5949,0x95F2, // + 0x594E,0x9AF5, // + 0x594F,0x9174, // + 0x5950,0x9AF4, // + 0x5951,0x8C5F, // + 0x5954,0x967A, // + 0x5955,0x9AF3, // + 0x5957,0x9385, // + 0x5958,0x9AF7, // + 0x595A,0x9AF6, // + 0x5960,0x9AF9, // + 0x5962,0x9AF8, // + 0x5965,0x899C, // + 0x5967,0x9AFA, // + 0x5968,0x8FA7, // + 0x5969,0x9AFC, // + 0x596A,0x9244, // + 0x596C,0x9AFB, // + 0x596E,0x95B1, // + 0x5973,0x8F97, // + 0x5974,0x937A, // + 0x5978,0x9B40, // + 0x597D,0x8D44, // + 0x5981,0x9B41, // + 0x5982,0x9440, // + 0x5983,0x94DC, // + 0x5984,0x96CF, // + 0x598A,0x9444, // + 0x598D,0x9B4A, // + 0x5993,0x8B57, // + 0x5996,0x9764, // + 0x5999,0x96AD, // + 0x599B,0x9BAA, // + 0x599D,0x9B42, // + 0x59A3,0x9B45, // + 0x59A5,0x91C3, // + 0x59A8,0x9657, // + 0x59AC,0x9369, // + 0x59B2,0x9B46, // + 0x59B9,0x9685, // + 0x59BB,0x8DC8, // + 0x59BE,0x8FA8, // + 0x59C6,0x9B47, // + 0x59C9,0x8E6F, // + 0x59CB,0x8E6E, // + 0x59D0,0x88B7, // + 0x59D1,0x8CC6, // + 0x59D3,0x90A9, // + 0x59D4,0x88CF, // + 0x59D9,0x9B4B, // + 0x59DA,0x9B4C, // + 0x59DC,0x9B49, // + 0x59E5,0x8957, // + 0x59E6,0x8AAD, // + 0x59E8,0x9B48, // + 0x59EA,0x96C3, // + 0x59EB,0x9550, // + 0x59F6,0x88A6, // + 0x59FB,0x88F7, // + 0x59FF,0x8E70, // + 0x5A01,0x88D0, // + 0x5A03,0x88A1, // + 0x5A09,0x9B51, // + 0x5A11,0x9B4F, // + 0x5A18,0x96BA, // + 0x5A1A,0x9B52, // + 0x5A1C,0x9B50, // + 0x5A1F,0x9B4E, // + 0x5A20,0x9050, // + 0x5A25,0x9B4D, // + 0x5A29,0x95D8, // + 0x5A2F,0x8CE2, // + 0x5A35,0x9B56, // + 0x5A36,0x9B57, // + 0x5A3C,0x8FA9, // + 0x5A40,0x9B53, // + 0x5A41,0x984B, // + 0x5A46,0x946B, // + 0x5A49,0x9B55, // + 0x5A5A,0x8DA5, // + 0x5A62,0x9B58, // + 0x5A66,0x9577, // + 0x5A6A,0x9B59, // + 0x5A6C,0x9B54, // + 0x5A7F,0x96B9, // + 0x5A92,0x947D, // + 0x5A9A,0x9B5A, // + 0x5A9B,0x9551, // + 0x5ABD,0x9B5F, // + 0x5ABE,0x9B5C, // + 0x5AC1,0x89C5, // + 0x5AC2,0x9B5E, // + 0x5AC9,0x8EB9, // + 0x5ACB,0x9B5D, // + 0x5ACC,0x8C99, // + 0x5AD0,0x9B6B, // + 0x5AD6,0x9B64, // + 0x5AD7,0x9B61, // + 0x5AE1,0x9284, // + 0x5AE3,0x9B60, // + 0x5AE6,0x9B62, // + 0x5AE9,0x9B63, // + 0x5AFA,0x9B65, // + 0x5AFB,0x9B66, // + 0x5B09,0x8AF0, // + 0x5B0B,0x9B68, // + 0x5B0C,0x9B67, // + 0x5B16,0x9B69, // + 0x5B22,0x8FEC, // + 0x5B2A,0x9B6C, // + 0x5B2C,0x92DA, // + 0x5B30,0x8964, // + 0x5B32,0x9B6A, // + 0x5B36,0x9B6D, // + 0x5B3E,0x9B6E, // + 0x5B40,0x9B71, // + 0x5B43,0x9B6F, // + 0x5B45,0x9B70, // + 0x5B50,0x8E71, // + 0x5B51,0x9B72, // + 0x5B54,0x8D45, // + 0x5B55,0x9B73, // + 0x5B57,0x8E9A, // + 0x5B58,0x91B6, // + 0x5B5A,0x9B74, // + 0x5B5B,0x9B75, // + 0x5B5C,0x8E79, // + 0x5B5D,0x8D46, // + 0x5B5F,0x96D0, // + 0x5B63,0x8B47, // + 0x5B64,0x8CC7, // + 0x5B65,0x9B76, // + 0x5B66,0x8A77, // + 0x5B69,0x9B77, // + 0x5B6B,0x91B7, // + 0x5B70,0x9B78, // + 0x5B71,0x9BA1, // + 0x5B73,0x9B79, // + 0x5B75,0x9B7A, // + 0x5B78,0x9B7B, // + 0x5B7A,0x9B7D, // + 0x5B80,0x9B7E, // + 0x5B83,0x9B80, // + 0x5B85,0x91EE, // + 0x5B87,0x8946, // + 0x5B88,0x8EE7, // + 0x5B89,0x88C0, // + 0x5B8B,0x9176, // + 0x5B8C,0x8AAE, // + 0x5B8D,0x8EB3, // + 0x5B8F,0x8D47, // + 0x5B95,0x9386, // + 0x5B97,0x8F40, // + 0x5B98,0x8AAF, // + 0x5B99,0x9288, // + 0x5B9A,0x92E8, // + 0x5B9B,0x88B6, // + 0x5B9C,0x8B58, // + 0x5B9D,0x95F3, // + 0x5B9F,0x8EC0, // + 0x5BA2,0x8B71, // + 0x5BA3,0x90E9, // + 0x5BA4,0x8EBA, // + 0x5BA5,0x9747, // + 0x5BA6,0x9B81, // + 0x5BAE,0x8B7B, // + 0x5BB0,0x8DC9, // + 0x5BB3,0x8A51, // + 0x5BB4,0x8983, // + 0x5BB5,0x8FAA, // + 0x5BB6,0x89C6, // + 0x5BB8,0x9B82, // + 0x5BB9,0x9765, // + 0x5BBF,0x8F68, // + 0x5BC2,0x8EE2, // + 0x5BC3,0x9B83, // + 0x5BC4,0x8AF1, // + 0x5BC5,0x93D0, // + 0x5BC6,0x96A7, // + 0x5BC7,0x9B84, // + 0x5BC9,0x9B85, // + 0x5BCC,0x9578, // + 0x5BD0,0x9B87, // + 0x5BD2,0x8AA6, // + 0x5BD3,0x8BF5, // + 0x5BD4,0x9B86, // + 0x5BDB,0x8AB0, // + 0x5BDD,0x9051, // + 0x5BDE,0x9B8B, // + 0x5BDF,0x8E40, // + 0x5BE1,0x89C7, // + 0x5BE2,0x9B8A, // + 0x5BE4,0x9B88, // + 0x5BE5,0x9B8C, // + 0x5BE6,0x9B89, // + 0x5BE7,0x944A, // + 0x5BE8,0x9ECB, // + 0x5BE9,0x9052, // + 0x5BEB,0x9B8D, // + 0x5BEE,0x97BE, // + 0x5BF0,0x9B8E, // + 0x5BF3,0x9B90, // + 0x5BF5,0x929E, // + 0x5BF6,0x9B8F, // + 0x5BF8,0x90A1, // + 0x5BFA,0x8E9B, // + 0x5BFE,0x91CE, // + 0x5BFF,0x8EF5, // + 0x5C01,0x9595, // + 0x5C02,0x90EA, // + 0x5C04,0x8ECB, // + 0x5C05,0x9B91, // + 0x5C06,0x8FAB, // + 0x5C07,0x9B92, // + 0x5C08,0x9B93, // + 0x5C09,0x88D1, // + 0x5C0A,0x91B8, // + 0x5C0B,0x9071, // + 0x5C0D,0x9B94, // + 0x5C0E,0x93B1, // + 0x5C0F,0x8FAC, // + 0x5C11,0x8FAD, // + 0x5C13,0x9B95, // + 0x5C16,0x90EB, // + 0x5C1A,0x8FAE, // + 0x5C20,0x9B96, // + 0x5C22,0x9B97, // + 0x5C24,0x96DE, // + 0x5C28,0x9B98, // + 0x5C2D,0x8BC4, // + 0x5C31,0x8F41, // + 0x5C38,0x9B99, // + 0x5C39,0x9B9A, // + 0x5C3A,0x8EDA, // + 0x5C3B,0x904B, // + 0x5C3C,0x93F2, // + 0x5C3D,0x9073, // + 0x5C3E,0x94F6, // + 0x5C3F,0x9441, // + 0x5C40,0x8BC7, // + 0x5C41,0x9B9B, // + 0x5C45,0x8B8F, // + 0x5C46,0x9B9C, // + 0x5C48,0x8BFC, // + 0x5C4A,0x93CD, // + 0x5C4B,0x89AE, // + 0x5C4D,0x8E72, // + 0x5C4E,0x9B9D, // + 0x5C4F,0x9BA0, // + 0x5C50,0x9B9F, // + 0x5C51,0x8BFB, // + 0x5C53,0x9B9E, // + 0x5C55,0x9357, // + 0x5C5E,0x91AE, // + 0x5C60,0x936A, // + 0x5C61,0x8EC6, // + 0x5C64,0x9177, // + 0x5C65,0x979A, // + 0x5C6C,0x9BA2, // + 0x5C6E,0x9BA3, // + 0x5C6F,0x93D4, // + 0x5C71,0x8E52, // + 0x5C76,0x9BA5, // + 0x5C79,0x9BA6, // + 0x5C8C,0x9BA7, // + 0x5C90,0x8AF2, // + 0x5C91,0x9BA8, // + 0x5C94,0x9BA9, // + 0x5CA1,0x89AA, // + 0x5CA8,0x915A, // + 0x5CA9,0x8AE2, // + 0x5CAB,0x9BAB, // + 0x5CAC,0x96A6, // + 0x5CB1,0x91D0, // + 0x5CB3,0x8A78, // + 0x5CB6,0x9BAD, // + 0x5CB7,0x9BAF, // + 0x5CB8,0x8ADD, // + 0x5CBB,0x9BAC, // + 0x5CBC,0x9BAE, // + 0x5CBE,0x9BB1, // + 0x5CC5,0x9BB0, // + 0x5CC7,0x9BB2, // + 0x5CD9,0x9BB3, // + 0x5CE0,0x93BB, // + 0x5CE1,0x8BAC, // + 0x5CE8,0x89E3, // + 0x5CE9,0x9BB4, // + 0x5CEA,0x9BB9, // + 0x5CED,0x9BB7, // + 0x5CEF,0x95F5, // + 0x5CF0,0x95F4, // + 0x5CF6,0x9387, // + 0x5CFA,0x9BB6, // + 0x5CFB,0x8F73, // + 0x5CFD,0x9BB5, // + 0x5D07,0x9092, // + 0x5D0B,0x9BBA, // + 0x5D0E,0x8DE8, // + 0x5D11,0x9BC0, // + 0x5D14,0x9BC1, // + 0x5D15,0x9BBB, // + 0x5D16,0x8A52, // + 0x5D17,0x9BBC, // + 0x5D18,0x9BC5, // + 0x5D19,0x9BC4, // + 0x5D1A,0x9BC3, // + 0x5D1B,0x9BBF, // + 0x5D1F,0x9BBE, // + 0x5D22,0x9BC2, // + 0x5D29,0x95F6, // + 0x5D4B,0x9BC9, // + 0x5D4C,0x9BC6, // + 0x5D4E,0x9BC8, // + 0x5D50,0x9792, // + 0x5D52,0x9BC7, // + 0x5D5C,0x9BBD, // + 0x5D69,0x9093, // + 0x5D6C,0x9BCA, // + 0x5D6F,0x8DB5, // + 0x5D73,0x9BCB, // + 0x5D76,0x9BCC, // + 0x5D82,0x9BCF, // + 0x5D84,0x9BCE, // + 0x5D87,0x9BCD, // + 0x5D8B,0x9388, // + 0x5D8C,0x9BB8, // + 0x5D90,0x9BD5, // + 0x5D9D,0x9BD1, // + 0x5DA2,0x9BD0, // + 0x5DAC,0x9BD2, // + 0x5DAE,0x9BD3, // + 0x5DB7,0x9BD6, // + 0x5DBA,0x97E4, // + 0x5DBC,0x9BD7, // + 0x5DBD,0x9BD4, // + 0x5DC9,0x9BD8, // + 0x5DCC,0x8ADE, // + 0x5DCD,0x9BD9, // + 0x5DD2,0x9BDB, // + 0x5DD3,0x9BDA, // + 0x5DD6,0x9BDC, // + 0x5DDB,0x9BDD, // + 0x5DDD,0x90EC, // + 0x5DDE,0x8F42, // + 0x5DE1,0x8F84, // + 0x5DE3,0x9183, // + 0x5DE5,0x8D48, // + 0x5DE6,0x8DB6, // + 0x5DE7,0x8D49, // + 0x5DE8,0x8B90, // + 0x5DEB,0x9BDE, // + 0x5DEE,0x8DB7, // + 0x5DF1,0x8CC8, // + 0x5DF2,0x9BDF, // + 0x5DF3,0x96A4, // + 0x5DF4,0x9462, // + 0x5DF5,0x9BE0, // + 0x5DF7,0x8D4A, // + 0x5DFB,0x8AAA, // + 0x5DFD,0x9246, // + 0x5DFE,0x8BD0, // + 0x5E02,0x8E73, // + 0x5E03,0x957A, // + 0x5E06,0x94BF, // + 0x5E0B,0x9BE1, // + 0x5E0C,0x8AF3, // + 0x5E11,0x9BE4, // + 0x5E16,0x929F, // + 0x5E19,0x9BE3, // + 0x5E1A,0x9BE2, // + 0x5E1B,0x9BE5, // + 0x5E1D,0x92E9, // + 0x5E25,0x9083, // + 0x5E2B,0x8E74, // + 0x5E2D,0x90C8, // + 0x5E2F,0x91D1, // + 0x5E30,0x8B41, // + 0x5E33,0x92A0, // + 0x5E36,0x9BE6, // + 0x5E37,0x9BE7, // + 0x5E38,0x8FED, // + 0x5E3D,0x9658, // + 0x5E40,0x9BEA, // + 0x5E43,0x9BE9, // + 0x5E44,0x9BE8, // + 0x5E45,0x959D, // + 0x5E47,0x9BF1, // + 0x5E4C,0x9679, // + 0x5E4E,0x9BEB, // + 0x5E54,0x9BED, // + 0x5E55,0x968B, // + 0x5E57,0x9BEC, // + 0x5E5F,0x9BEE, // + 0x5E61,0x94A6, // + 0x5E62,0x9BEF, // + 0x5E63,0x95BC, // + 0x5E64,0x9BF0, // + 0x5E72,0x8AB1, // + 0x5E73,0x95BD, // + 0x5E74,0x944E, // + 0x5E75,0x9BF2, // + 0x5E76,0x9BF3, // + 0x5E78,0x8D4B, // + 0x5E79,0x8AB2, // + 0x5E7A,0x9BF4, // + 0x5E7B,0x8CB6, // + 0x5E7C,0x9763, // + 0x5E7D,0x9748, // + 0x5E7E,0x8AF4, // + 0x5E7F,0x9BF6, // + 0x5E81,0x92A1, // + 0x5E83,0x8D4C, // + 0x5E84,0x8FAF, // + 0x5E87,0x94DD, // + 0x5E8A,0x8FB0, // + 0x5E8F,0x8F98, // + 0x5E95,0x92EA, // + 0x5E96,0x95F7, // + 0x5E97,0x9358, // + 0x5E9A,0x8D4D, // + 0x5E9C,0x957B, // + 0x5EA0,0x9BF7, // + 0x5EA6,0x9378, // + 0x5EA7,0x8DC0, // + 0x5EAB,0x8CC9, // + 0x5EAD,0x92EB, // + 0x5EB5,0x88C1, // + 0x5EB6,0x8F8E, // + 0x5EB7,0x8D4E, // + 0x5EB8,0x9766, // + 0x5EC1,0x9BF8, // + 0x5EC2,0x9BF9, // + 0x5EC3,0x9470, // + 0x5EC8,0x9BFA, // + 0x5EC9,0x97F5, // + 0x5ECA,0x984C, // + 0x5ECF,0x9BFC, // + 0x5ED0,0x9BFB, // + 0x5ED3,0x8A66, // + 0x5ED6,0x9C40, // + 0x5EDA,0x9C43, // + 0x5EDB,0x9C44, // + 0x5EDD,0x9C42, // + 0x5EDF,0x955F, // + 0x5EE0,0x8FB1, // + 0x5EE1,0x9C46, // + 0x5EE2,0x9C45, // + 0x5EE3,0x9C41, // + 0x5EE8,0x9C47, // + 0x5EE9,0x9C48, // + 0x5EEC,0x9C49, // + 0x5EF0,0x9C4C, // + 0x5EF1,0x9C4A, // + 0x5EF3,0x9C4B, // + 0x5EF4,0x9C4D, // + 0x5EF6,0x8984, // + 0x5EF7,0x92EC, // + 0x5EF8,0x9C4E, // + 0x5EFA,0x8C9A, // + 0x5EFB,0x89F4, // + 0x5EFC,0x9455, // + 0x5EFE,0x9C4F, // + 0x5EFF,0x93F9, // + 0x5F01,0x95D9, // + 0x5F03,0x9C50, // + 0x5F04,0x984D, // + 0x5F09,0x9C51, // + 0x5F0A,0x95BE, // + 0x5F0B,0x9C54, // + 0x5F0C,0x989F, // + 0x5F0D,0x98AF, // + 0x5F0F,0x8EAE, // + 0x5F10,0x93F3, // + 0x5F11,0x9C55, // + 0x5F13,0x8B7C, // + 0x5F14,0x92A2, // + 0x5F15,0x88F8, // + 0x5F16,0x9C56, // + 0x5F17,0x95A4, // + 0x5F18,0x8D4F, // + 0x5F1B,0x926F, // + 0x5F1F,0x92ED, // + 0x5F25,0x96ED, // + 0x5F26,0x8CB7, // + 0x5F27,0x8CCA, // + 0x5F29,0x9C57, // + 0x5F2D,0x9C58, // + 0x5F2F,0x9C5E, // + 0x5F31,0x8EE3, // + 0x5F35,0x92A3, // + 0x5F37,0x8BAD, // + 0x5F38,0x9C59, // + 0x5F3C,0x954A, // + 0x5F3E,0x9265, // + 0x5F41,0x9C5A, // + 0x5F4A,0x8BAE, // + 0x5F4C,0x9C5C, // + 0x5F4E,0x9C5D, // + 0x5F51,0x9C5F, // + 0x5F53,0x9396, // + 0x5F56,0x9C60, // + 0x5F57,0x9C61, // + 0x5F59,0x9C62, // + 0x5F5C,0x9C53, // + 0x5F5D,0x9C52, // + 0x5F61,0x9C63, // + 0x5F62,0x8C60, // + 0x5F66,0x9546, // + 0x5F69,0x8DCA, // + 0x5F6A,0x9556, // + 0x5F6B,0x92A4, // + 0x5F6C,0x956A, // + 0x5F6D,0x9C64, // + 0x5F70,0x8FB2, // + 0x5F71,0x8965, // + 0x5F73,0x9C65, // + 0x5F77,0x9C66, // + 0x5F79,0x96F0, // + 0x5F7C,0x94DE, // + 0x5F7F,0x9C69, // + 0x5F80,0x899D, // + 0x5F81,0x90AA, // + 0x5F82,0x9C68, // + 0x5F83,0x9C67, // + 0x5F84,0x8C61, // + 0x5F85,0x91D2, // + 0x5F87,0x9C6D, // + 0x5F88,0x9C6B, // + 0x5F8A,0x9C6A, // + 0x5F8B,0x97A5, // + 0x5F8C,0x8CE3, // + 0x5F90,0x8F99, // + 0x5F91,0x9C6C, // + 0x5F92,0x936B, // + 0x5F93,0x8F5D, // + 0x5F97,0x93BE, // + 0x5F98,0x9C70, // + 0x5F99,0x9C6F, // + 0x5F9E,0x9C6E, // + 0x5FA0,0x9C71, // + 0x5FA1,0x8CE4, // + 0x5FA8,0x9C72, // + 0x5FA9,0x959C, // + 0x5FAA,0x8F7A, // + 0x5FAD,0x9C73, // + 0x5FAE,0x94F7, // + 0x5FB3,0x93BF, // + 0x5FB4,0x92A5, // + 0x5FB9,0x934F, // + 0x5FBC,0x9C74, // + 0x5FBD,0x8B4A, // + 0x5FC3,0x9053, // + 0x5FC5,0x954B, // + 0x5FCC,0x8AF5, // + 0x5FCD,0x9445, // + 0x5FD6,0x9C75, // + 0x5FD7,0x8E75, // + 0x5FD8,0x9659, // + 0x5FD9,0x965A, // + 0x5FDC,0x899E, // + 0x5FDD,0x9C7A, // + 0x5FE0,0x9289, // + 0x5FE4,0x9C77, // + 0x5FEB,0x89F5, // + 0x5FF0,0x9CAB, // + 0x5FF1,0x9C79, // + 0x5FF5,0x944F, // + 0x5FF8,0x9C78, // + 0x5FFB,0x9C76, // + 0x5FFD,0x8D9A, // + 0x5FFF,0x9C7C, // + 0x600E,0x9C83, // + 0x600F,0x9C89, // + 0x6010,0x9C81, // + 0x6012,0x937B, // + 0x6015,0x9C86, // + 0x6016,0x957C, // + 0x6019,0x9C80, // + 0x601B,0x9C85, // + 0x601C,0x97E5, // + 0x601D,0x8E76, // + 0x6020,0x91D3, // + 0x6021,0x9C7D, // + 0x6025,0x8B7D, // + 0x6026,0x9C88, // + 0x6027,0x90AB, // + 0x6028,0x8985, // + 0x6029,0x9C82, // + 0x602A,0x89F6, // + 0x602B,0x9C87, // + 0x602F,0x8BAF, // + 0x6031,0x9C84, // + 0x603A,0x9C8A, // + 0x6041,0x9C8C, // + 0x6042,0x9C96, // + 0x6043,0x9C94, // + 0x6046,0x9C91, // + 0x604A,0x9C90, // + 0x604B,0x97F6, // + 0x604D,0x9C92, // + 0x6050,0x8BB0, // + 0x6052,0x8D50, // + 0x6055,0x8F9A, // + 0x6059,0x9C99, // + 0x605A,0x9C8B, // + 0x605F,0x9C8F, // + 0x6060,0x9C7E, // + 0x6062,0x89F8, // + 0x6063,0x9C93, // + 0x6064,0x9C95, // + 0x6065,0x9270, // + 0x6068,0x8DA6, // + 0x6069,0x89B6, // + 0x606A,0x9C8D, // + 0x606B,0x9C98, // + 0x606C,0x9C97, // + 0x606D,0x8BB1, // + 0x606F,0x91A7, // + 0x6070,0x8A86, // + 0x6075,0x8C62, // + 0x6077,0x9C8E, // + 0x6081,0x9C9A, // + 0x6083,0x9C9D, // + 0x6084,0x9C9F, // + 0x6089,0x8EBB, // + 0x608B,0x9CA5, // + 0x608C,0x92EE, // + 0x608D,0x9C9B, // + 0x6092,0x9CA3, // + 0x6094,0x89F7, // + 0x6096,0x9CA1, // + 0x6097,0x9CA2, // + 0x609A,0x9C9E, // + 0x609B,0x9CA0, // + 0x609F,0x8CE5, // + 0x60A0,0x9749, // + 0x60A3,0x8AB3, // + 0x60A6,0x8978, // + 0x60A7,0x9CA4, // + 0x60A9,0x9459, // + 0x60AA,0x88AB, // + 0x60B2,0x94DF, // + 0x60B3,0x9C7B, // + 0x60B4,0x9CAA, // + 0x60B5,0x9CAE, // + 0x60B6,0x96E3, // + 0x60B8,0x9CA7, // + 0x60BC,0x9389, // + 0x60BD,0x9CAC, // + 0x60C5,0x8FEE, // + 0x60C6,0x9CAD, // + 0x60C7,0x93D5, // + 0x60D1,0x9866, // + 0x60D3,0x9CA9, // + 0x60D8,0x9CAF, // + 0x60DA,0x8D9B, // + 0x60DC,0x90C9, // + 0x60DF,0x88D2, // + 0x60E0,0x9CA8, // + 0x60E1,0x9CA6, // + 0x60E3,0x9179, // + 0x60E7,0x9C9C, // + 0x60E8,0x8E53, // + 0x60F0,0x91C4, // + 0x60F1,0x9CBB, // + 0x60F3,0x917A, // + 0x60F4,0x9CB6, // + 0x60F6,0x9CB3, // + 0x60F7,0x9CB4, // + 0x60F9,0x8EE4, // + 0x60FA,0x9CB7, // + 0x60FB,0x9CBA, // + 0x6100,0x9CB5, // + 0x6101,0x8F44, // + 0x6103,0x9CB8, // + 0x6106,0x9CB2, // + 0x6108,0x96FA, // + 0x6109,0x96F9, // + 0x610D,0x9CBC, // + 0x610E,0x9CBD, // + 0x610F,0x88D3, // + 0x6115,0x9CB1, // + 0x611A,0x8BF0, // + 0x611B,0x88A4, // + 0x611F,0x8AB4, // + 0x6121,0x9CB9, // + 0x6127,0x9CC1, // + 0x6128,0x9CC0, // + 0x612C,0x9CC5, // + 0x6134,0x9CC6, // + 0x613C,0x9CC4, // + 0x613D,0x9CC7, // + 0x613E,0x9CBF, // + 0x613F,0x9CC3, // + 0x6142,0x9CC8, // + 0x6144,0x9CC9, // + 0x6147,0x9CBE, // + 0x6148,0x8E9C, // + 0x614A,0x9CC2, // + 0x614B,0x91D4, // + 0x614C,0x8D51, // + 0x614D,0x9CB0, // + 0x614E,0x9054, // + 0x6153,0x9CD6, // + 0x6155,0x95E7, // + 0x6158,0x9CCC, // + 0x6159,0x9CCD, // + 0x615A,0x9CCE, // + 0x615D,0x9CD5, // + 0x615F,0x9CD4, // + 0x6162,0x969D, // + 0x6163,0x8AB5, // + 0x6165,0x9CD2, // + 0x6167,0x8C64, // + 0x6168,0x8A53, // + 0x616B,0x9CCF, // + 0x616E,0x97B6, // + 0x616F,0x9CD1, // + 0x6170,0x88D4, // + 0x6171,0x9CD3, // + 0x6173,0x9CCA, // + 0x6174,0x9CD0, // + 0x6175,0x9CD7, // + 0x6176,0x8C63, // + 0x6177,0x9CCB, // + 0x617E,0x977C, // + 0x6182,0x974A, // + 0x6187,0x9CDA, // + 0x618A,0x9CDE, // + 0x618E,0x919E, // + 0x6190,0x97F7, // + 0x6191,0x9CDF, // + 0x6194,0x9CDC, // + 0x6196,0x9CD9, // + 0x6199,0x9CD8, // + 0x619A,0x9CDD, // + 0x61A4,0x95AE, // + 0x61A7,0x93B2, // + 0x61A9,0x8C65, // + 0x61AB,0x9CE0, // + 0x61AC,0x9CDB, // + 0x61AE,0x9CE1, // + 0x61B2,0x8C9B, // + 0x61B6,0x89AF, // + 0x61BA,0x9CE9, // + 0x61BE,0x8AB6, // + 0x61C3,0x9CE7, // + 0x61C6,0x9CE8, // + 0x61C7,0x8DA7, // + 0x61C8,0x9CE6, // + 0x61C9,0x9CE4, // + 0x61CA,0x9CE3, // + 0x61CB,0x9CEA, // + 0x61CC,0x9CE2, // + 0x61CD,0x9CEC, // + 0x61D0,0x89F9, // + 0x61E3,0x9CEE, // + 0x61E6,0x9CED, // + 0x61F2,0x92A6, // + 0x61F4,0x9CF1, // + 0x61F6,0x9CEF, // + 0x61F7,0x9CE5, // + 0x61F8,0x8C9C, // + 0x61FA,0x9CF0, // + 0x61FC,0x9CF4, // + 0x61FD,0x9CF3, // + 0x61FE,0x9CF5, // + 0x61FF,0x9CF2, // + 0x6200,0x9CF6, // + 0x6208,0x9CF7, // + 0x6209,0x9CF8, // + 0x620A,0x95E8, // + 0x620C,0x9CFA, // + 0x620D,0x9CF9, // + 0x620E,0x8F5E, // + 0x6210,0x90AC, // + 0x6211,0x89E4, // + 0x6212,0x89FA, // + 0x6214,0x9CFB, // + 0x6216,0x88BD, // + 0x621A,0x90CA, // + 0x621B,0x9CFC, // + 0x621D,0xE6C1, // + 0x621E,0x9D40, // + 0x621F,0x8C81, // + 0x6221,0x9D41, // + 0x6226,0x90ED, // + 0x622A,0x9D42, // + 0x622E,0x9D43, // + 0x622F,0x8B59, // + 0x6230,0x9D44, // + 0x6232,0x9D45, // + 0x6233,0x9D46, // + 0x6234,0x91D5, // + 0x6238,0x8CCB, // + 0x623B,0x96DF, // + 0x6240,0x8F8A, // + 0x6241,0x9D47, // + 0x6247,0x90EE, // + 0x6248,0xE7BB, // + 0x6249,0x94E0, // + 0x624B,0x8EE8, // + 0x624D,0x8DCB, // + 0x624E,0x9D48, // + 0x6253,0x91C5, // + 0x6255,0x95A5, // + 0x6258,0x91EF, // + 0x625B,0x9D4B, // + 0x625E,0x9D49, // + 0x6260,0x9D4C, // + 0x6263,0x9D4A, // + 0x6268,0x9D4D, // + 0x626E,0x95AF, // + 0x6271,0x88B5, // + 0x6276,0x957D, // + 0x6279,0x94E1, // + 0x627C,0x9D4E, // + 0x627E,0x9D51, // + 0x627F,0x8FB3, // + 0x6280,0x8B5A, // + 0x6282,0x9D4F, // + 0x6283,0x9D56, // + 0x6284,0x8FB4, // + 0x6289,0x9D50, // + 0x628A,0x9463, // + 0x6291,0x977D, // + 0x6292,0x9D52, // + 0x6293,0x9D53, // + 0x6294,0x9D57, // + 0x6295,0x938A, // + 0x6296,0x9D54, // + 0x6297,0x8D52, // + 0x6298,0x90DC, // + 0x629B,0x9D65, // + 0x629C,0x94B2, // + 0x629E,0x91F0, // + 0x62AB,0x94E2, // + 0x62AC,0x9DAB, // + 0x62B1,0x95F8, // + 0x62B5,0x92EF, // + 0x62B9,0x9695, // + 0x62BB,0x9D5A, // + 0x62BC,0x899F, // + 0x62BD,0x928A, // + 0x62C2,0x9D63, // + 0x62C5,0x9253, // + 0x62C6,0x9D5D, // + 0x62C7,0x9D64, // + 0x62C8,0x9D5F, // + 0x62C9,0x9D66, // + 0x62CA,0x9D62, // + 0x62CC,0x9D61, // + 0x62CD,0x948F, // + 0x62D0,0x89FB, // + 0x62D1,0x9D59, // + 0x62D2,0x8B91, // + 0x62D3,0x91F1, // + 0x62D4,0x9D55, // + 0x62D7,0x9D58, // + 0x62D8,0x8D53, // + 0x62D9,0x90D9, // + 0x62DB,0x8FB5, // + 0x62DC,0x9D60, // + 0x62DD,0x9471, // + 0x62E0,0x8B92, // + 0x62E1,0x8A67, // + 0x62EC,0x8A87, // + 0x62ED,0x9040, // + 0x62EE,0x9D68, // + 0x62EF,0x9D6D, // + 0x62F1,0x9D69, // + 0x62F3,0x8C9D, // + 0x62F5,0x9D6E, // + 0x62F6,0x8E41, // + 0x62F7,0x8D89, // + 0x62FE,0x8F45, // + 0x62FF,0x9D5C, // + 0x6301,0x8E9D, // + 0x6302,0x9D6B, // + 0x6307,0x8E77, // + 0x6308,0x9D6C, // + 0x6309,0x88C2, // + 0x630C,0x9D67, // + 0x6311,0x92A7, // + 0x6319,0x8B93, // + 0x631F,0x8BB2, // + 0x6327,0x9D6A, // + 0x6328,0x88A5, // + 0x632B,0x8DC1, // + 0x632F,0x9055, // + 0x633A,0x92F0, // + 0x633D,0x94D2, // + 0x633E,0x9D70, // + 0x633F,0x917D, // + 0x6349,0x91A8, // + 0x634C,0x8E4A, // + 0x634D,0x9D71, // + 0x634F,0x9D73, // + 0x6350,0x9D6F, // + 0x6355,0x95DF, // + 0x6357,0x92BB, // + 0x635C,0x917B, // + 0x6367,0x95F9, // + 0x6368,0x8ECC, // + 0x6369,0x9D80, // + 0x636B,0x9D7E, // + 0x636E,0x9098, // + 0x6372,0x8C9E, // + 0x6376,0x9D78, // + 0x6377,0x8FB7, // + 0x637A,0x93E6, // + 0x637B,0x9450, // + 0x6380,0x9D76, // + 0x6383,0x917C, // + 0x6388,0x8EF6, // + 0x6389,0x9D7B, // + 0x638C,0x8FB6, // + 0x638E,0x9D75, // + 0x638F,0x9D7A, // + 0x6392,0x9472, // + 0x6396,0x9D74, // + 0x6398,0x8C40, // + 0x639B,0x8A7C, // + 0x639F,0x9D7C, // + 0x63A0,0x97A9, // + 0x63A1,0x8DCC, // + 0x63A2,0x9254, // + 0x63A3,0x9D79, // + 0x63A5,0x90DA, // + 0x63A7,0x8D54, // + 0x63A8,0x9084, // + 0x63A9,0x8986, // + 0x63AB,0x9D77, // + 0x63AC,0x8B64, // + 0x63B2,0x8C66, // + 0x63B4,0x92CD, // + 0x63B5,0x9D7D, // + 0x63BB,0x917E, // + 0x63BE,0x9D81, // + 0x63C0,0x9D83, // + 0x63C3,0x91B5, // + 0x63C4,0x9D89, // + 0x63C6,0x9D84, // + 0x63C9,0x9D86, // + 0x63CF,0x9560, // + 0x63D0,0x92F1, // + 0x63D2,0x9D87, // + 0x63D6,0x974B, // + 0x63DA,0x9767, // + 0x63DB,0x8AB7, // + 0x63E1,0x88AC, // + 0x63E3,0x9D85, // + 0x63E9,0x9D82, // + 0x63EE,0x8AF6, // + 0x63F4,0x8987, // + 0x63F6,0x9D88, // + 0x63FA,0x9768, // + 0x6406,0x9D8C, // + 0x640D,0x91B9, // + 0x640F,0x9D93, // + 0x6413,0x9D8D, // + 0x6416,0x9D8A, // + 0x6417,0x9D91, // + 0x641C,0x9D72, // + 0x6426,0x9D8E, // + 0x6428,0x9D92, // + 0x642C,0x94C0, // + 0x642D,0x938B, // + 0x6434,0x9D8B, // + 0x6436,0x9D8F, // + 0x643A,0x8C67, // + 0x643E,0x8DEF, // + 0x6442,0x90DB, // + 0x644E,0x9D97, // + 0x6458,0x9345, // + 0x6467,0x9D94, // + 0x6469,0x9680, // + 0x646F,0x9D95, // + 0x6476,0x9D96, // + 0x6478,0x96CC, // + 0x647A,0x90A0, // + 0x6483,0x8C82, // + 0x6488,0x9D9D, // + 0x6492,0x8E54, // + 0x6493,0x9D9A, // + 0x6495,0x9D99, // + 0x649A,0x9451, // + 0x649E,0x93B3, // + 0x64A4,0x9350, // + 0x64A5,0x9D9B, // + 0x64A9,0x9D9C, // + 0x64AB,0x958F, // + 0x64AD,0x9464, // + 0x64AE,0x8E42, // + 0x64B0,0x90EF, // + 0x64B2,0x966F, // + 0x64B9,0x8A68, // + 0x64BB,0x9DA3, // + 0x64BC,0x9D9E, // + 0x64C1,0x9769, // + 0x64C2,0x9DA5, // + 0x64C5,0x9DA1, // + 0x64C7,0x9DA2, // + 0x64CD,0x9180, // + 0x64D2,0x9DA0, // + 0x64D4,0x9D5E, // + 0x64D8,0x9DA4, // + 0x64DA,0x9D9F, // + 0x64E0,0x9DA9, // + 0x64E1,0x9DAA, // + 0x64E2,0x9346, // + 0x64E3,0x9DAC, // + 0x64E6,0x8E43, // + 0x64E7,0x9DA7, // + 0x64EF,0x9DAD, // + 0x64F1,0x9DA6, // + 0x64F2,0x9DB1, // + 0x64F4,0x9DB0, // + 0x64F6,0x9DAF, // + 0x64FA,0x9DB2, // + 0x64FD,0x9DB4, // + 0x64FE,0x8FEF, // + 0x6500,0x9DB3, // + 0x6505,0x9DB7, // + 0x6518,0x9DB5, // + 0x651C,0x9DB6, // + 0x651D,0x9D90, // + 0x6523,0x9DB9, // + 0x6524,0x9DB8, // + 0x652A,0x9D98, // + 0x652B,0x9DBA, // + 0x652C,0x9DAE, // + 0x652F,0x8E78, // + 0x6534,0x9DBB, // + 0x6535,0x9DBC, // + 0x6536,0x9DBE, // + 0x6537,0x9DBD, // + 0x6538,0x9DBF, // + 0x6539,0x89FC, // + 0x653B,0x8D55, // + 0x653E,0x95FA, // + 0x653F,0x90AD, // + 0x6545,0x8CCC, // + 0x6548,0x9DC1, // + 0x654D,0x9DC4, // + 0x654F,0x9571, // + 0x6551,0x8B7E, // + 0x6555,0x9DC3, // + 0x6556,0x9DC2, // + 0x6557,0x9473, // + 0x6558,0x9DC5, // + 0x6559,0x8BB3, // + 0x655D,0x9DC7, // + 0x655E,0x9DC6, // + 0x6562,0x8AB8, // + 0x6563,0x8E55, // + 0x6566,0x93D6, // + 0x656C,0x8C68, // + 0x6570,0x9094, // + 0x6572,0x9DC8, // + 0x6574,0x90AE, // + 0x6575,0x9347, // + 0x6577,0x957E, // + 0x6578,0x9DC9, // + 0x6582,0x9DCA, // + 0x6583,0x9DCB, // + 0x6587,0x95B6, // + 0x6588,0x9B7C, // + 0x6589,0x90C4, // + 0x658C,0x956B, // + 0x658E,0x8DD6, // + 0x6590,0x94E3, // + 0x6591,0x94C1, // + 0x6597,0x936C, // + 0x6599,0x97BF, // + 0x659B,0x9DCD, // + 0x659C,0x8ECE, // + 0x659F,0x9DCE, // + 0x65A1,0x88B4, // + 0x65A4,0x8BD2, // + 0x65A5,0x90CB, // + 0x65A7,0x9580, // + 0x65AB,0x9DCF, // + 0x65AC,0x8E61, // + 0x65AD,0x9266, // + 0x65AF,0x8E7A, // + 0x65B0,0x9056, // + 0x65B7,0x9DD0, // + 0x65B9,0x95FB, // + 0x65BC,0x8997, // + 0x65BD,0x8E7B, // + 0x65C1,0x9DD3, // + 0x65C3,0x9DD1, // + 0x65C4,0x9DD4, // + 0x65C5,0x97B7, // + 0x65C6,0x9DD2, // + 0x65CB,0x90F9, // + 0x65CC,0x9DD5, // + 0x65CF,0x91B0, // + 0x65D2,0x9DD6, // + 0x65D7,0x8AF8, // + 0x65D9,0x9DD8, // + 0x65DB,0x9DD7, // + 0x65E0,0x9DD9, // + 0x65E1,0x9DDA, // + 0x65E2,0x8AF9, // + 0x65E5,0x93FA, // + 0x65E6,0x9255, // + 0x65E7,0x8B8C, // + 0x65E8,0x8E7C, // + 0x65E9,0x9181, // + 0x65EC,0x8F7B, // + 0x65ED,0x88AE, // + 0x65F1,0x9DDB, // + 0x65FA,0x89A0, // + 0x65FB,0x9DDF, // + 0x6602,0x8D56, // + 0x6603,0x9DDE, // + 0x6606,0x8DA9, // + 0x6607,0x8FB8, // + 0x660A,0x9DDD, // + 0x660C,0x8FB9, // + 0x660E,0x96BE, // + 0x660F,0x8DA8, // + 0x6613,0x88D5, // + 0x6614,0x90CC, // + 0x661C,0x9DE4, // + 0x661F,0x90AF, // + 0x6620,0x8966, // + 0x6625,0x8F74, // + 0x6627,0x9686, // + 0x6628,0x8DF0, // + 0x662D,0x8FBA, // + 0x662F,0x90A5, // + 0x6634,0x9DE3, // + 0x6635,0x9DE1, // + 0x6636,0x9DE2, // + 0x663C,0x928B, // + 0x663F,0x9E45, // + 0x6641,0x9DE8, // + 0x6642,0x8E9E, // + 0x6643,0x8D57, // + 0x6644,0x9DE6, // + 0x6649,0x9DE7, // + 0x664B,0x9057, // + 0x664F,0x9DE5, // + 0x6652,0x8E4E, // + 0x665D,0x9DEA, // + 0x665E,0x9DE9, // + 0x665F,0x9DEE, // + 0x6662,0x9DEF, // + 0x6664,0x9DEB, // + 0x6666,0x8A41, // + 0x6667,0x9DEC, // + 0x6668,0x9DED, // + 0x6669,0x94D3, // + 0x666E,0x9581, // + 0x666F,0x8C69, // + 0x6670,0x9DF0, // + 0x6674,0x90B0, // + 0x6676,0x8FBB, // + 0x667A,0x9271, // + 0x6681,0x8BC5, // + 0x6683,0x9DF1, // + 0x6684,0x9DF5, // + 0x6687,0x89C9, // + 0x6688,0x9DF2, // + 0x6689,0x9DF4, // + 0x668E,0x9DF3, // + 0x6691,0x8F8B, // + 0x6696,0x9267, // + 0x6697,0x88C3, // + 0x6698,0x9DF6, // + 0x669D,0x9DF7, // + 0x66A2,0x92A8, // + 0x66A6,0x97EF, // + 0x66AB,0x8E62, // + 0x66AE,0x95E9, // + 0x66B4,0x965C, // + 0x66B8,0x9E41, // + 0x66B9,0x9DF9, // + 0x66BC,0x9DFC, // + 0x66BE,0x9DFB, // + 0x66C1,0x9DF8, // + 0x66C4,0x9E40, // + 0x66C7,0x93DC, // + 0x66C9,0x9DFA, // + 0x66D6,0x9E42, // + 0x66D9,0x8F8C, // + 0x66DA,0x9E43, // + 0x66DC,0x976A, // + 0x66DD,0x9498, // + 0x66E0,0x9E44, // + 0x66E6,0x9E46, // + 0x66E9,0x9E47, // + 0x66F0,0x9E48, // + 0x66F2,0x8BC8, // + 0x66F3,0x8967, // + 0x66F4,0x8D58, // + 0x66F5,0x9E49, // + 0x66F7,0x9E4A, // + 0x66F8,0x8F91, // + 0x66F9,0x9182, // + 0x66FC,0x99D6, // + 0x66FD,0x915D, // + 0x66FE,0x915C, // + 0x66FF,0x91D6, // + 0x6700,0x8DC5, // + 0x6703,0x98F0, // + 0x6708,0x8C8E, // + 0x6709,0x974C, // + 0x670B,0x95FC, // + 0x670D,0x959E, // + 0x670F,0x9E4B, // + 0x6714,0x8DF1, // + 0x6715,0x92BD, // + 0x6716,0x9E4C, // + 0x6717,0x984E, // + 0x671B,0x965D, // + 0x671D,0x92A9, // + 0x671E,0x9E4D, // + 0x671F,0x8AFA, // + 0x6726,0x9E4E, // + 0x6727,0x9E4F, // + 0x6728,0x96D8, // + 0x672A,0x96A2, // + 0x672B,0x9696, // + 0x672C,0x967B, // + 0x672D,0x8E44, // + 0x672E,0x9E51, // + 0x6731,0x8EE9, // + 0x6734,0x9670, // + 0x6736,0x9E53, // + 0x6737,0x9E56, // + 0x6738,0x9E55, // + 0x673A,0x8AF7, // + 0x673D,0x8B80, // + 0x673F,0x9E52, // + 0x6741,0x9E54, // + 0x6746,0x9E57, // + 0x6749,0x9099, // + 0x674E,0x979B, // + 0x674F,0x88C7, // + 0x6750,0x8DDE, // + 0x6751,0x91BA, // + 0x6753,0x8EDB, // + 0x6756,0x8FF1, // + 0x6759,0x9E5A, // + 0x675C,0x936D, // + 0x675E,0x9E58, // + 0x675F,0x91A9, // + 0x6760,0x9E59, // + 0x6761,0x8FF0, // + 0x6762,0x96DB, // + 0x6764,0x9E5C, // + 0x6765,0x9788, // + 0x676A,0x9E61, // + 0x676D,0x8D59, // + 0x676F,0x9474, // + 0x6770,0x9E5E, // + 0x6771,0x938C, // + 0x6772,0x9DDC, // + 0x6773,0x9DE0, // + 0x6775,0x8B6E, // + 0x6777,0x9466, // + 0x677C,0x9E60, // + 0x677E,0x8FBC, // + 0x677F,0x94C2, // + 0x6785,0x9E66, // + 0x6787,0x94F8, // + 0x6789,0x9E5D, // + 0x678B,0x9E63, // + 0x678C,0x9E62, // + 0x6790,0x90CD, // + 0x6795,0x968D, // + 0x6797,0x97D1, // + 0x679A,0x9687, // + 0x679C,0x89CA, // + 0x679D,0x8E7D, // + 0x67A0,0x9867, // + 0x67A1,0x9E65, // + 0x67A2,0x9095, // + 0x67A6,0x9E64, // + 0x67A9,0x9E5F, // + 0x67AF,0x8CCD, // + 0x67B3,0x9E6B, // + 0x67B4,0x9E69, // + 0x67B6,0x89CB, // + 0x67B7,0x9E67, // + 0x67B8,0x9E6D, // + 0x67B9,0x9E73, // + 0x67C1,0x91C6, // + 0x67C4,0x95BF, // + 0x67C6,0x9E75, // + 0x67CA,0x9541, // + 0x67CE,0x9E74, // + 0x67CF,0x9490, // + 0x67D0,0x965E, // + 0x67D1,0x8AB9, // + 0x67D3,0x90F5, // + 0x67D4,0x8F5F, // + 0x67D8,0x92D1, // + 0x67DA,0x974D, // + 0x67DD,0x9E70, // + 0x67DE,0x9E6F, // + 0x67E2,0x9E71, // + 0x67E4,0x9E6E, // + 0x67E7,0x9E76, // + 0x67E9,0x9E6C, // + 0x67EC,0x9E6A, // + 0x67EE,0x9E72, // + 0x67EF,0x9E68, // + 0x67F1,0x928C, // + 0x67F3,0x96F6, // + 0x67F4,0x8EC4, // + 0x67F5,0x8DF2, // + 0x67FB,0x8DB8, // + 0x67FE,0x968F, // + 0x67FF,0x8A60, // + 0x6802,0x92CC, // + 0x6803,0x93C8, // + 0x6804,0x8968, // + 0x6813,0x90F0, // + 0x6816,0x90B2, // + 0x6817,0x8C49, // + 0x681E,0x9E78, // + 0x6821,0x8D5A, // + 0x6822,0x8A9C, // + 0x6829,0x9E7A, // + 0x682A,0x8A94, // + 0x682B,0x9E81, // + 0x6832,0x9E7D, // + 0x6834,0x90F1, // + 0x6838,0x8A6A, // + 0x6839,0x8DAA, // + 0x683C,0x8A69, // + 0x683D,0x8DCD, // + 0x6840,0x9E7B, // + 0x6841,0x8C85, // + 0x6842,0x8C6A, // + 0x6843,0x938D, // + 0x6846,0x9E79, // + 0x6848,0x88C4, // + 0x684D,0x9E7C, // + 0x684E,0x9E7E, // + 0x6850,0x8BCB, // + 0x6851,0x8C4B, // + 0x6853,0x8ABA, // + 0x6854,0x8B6A, // + 0x6859,0x9E82, // + 0x685C,0x8DF7, // + 0x685D,0x9691, // + 0x685F,0x8E56, // + 0x6863,0x9E83, // + 0x6867,0x954F, // + 0x6874,0x9E8F, // + 0x6876,0x89B1, // + 0x6877,0x9E84, // + 0x687E,0x9E95, // + 0x687F,0x9E85, // + 0x6881,0x97C0, // + 0x6883,0x9E8C, // + 0x6885,0x947E, // + 0x688D,0x9E94, // + 0x688F,0x9E87, // + 0x6893,0x88B2, // + 0x6894,0x9E89, // + 0x689B,0x9E8B, // + 0x689D,0x9E8A, // + 0x689F,0x9E86, // + 0x68A0,0x9E91, // + 0x68A2,0x8FBD, // + 0x68A6,0x9AEB, // + 0x68A7,0x8CE6, // + 0x68A8,0x979C, // + 0x68AD,0x9E88, // + 0x68AF,0x92F2, // + 0x68B0,0x8A42, // + 0x68B1,0x8DAB, // + 0x68B3,0x9E80, // + 0x68B5,0x9E90, // + 0x68B6,0x8A81, // + 0x68B9,0x9E8E, // + 0x68BA,0x9E92, // + 0x68BC,0x938E, // + 0x68C4,0x8AFC, // + 0x68C6,0x9EB0, // + 0x68C9,0x96C7, // + 0x68CA,0x9E97, // + 0x68CB,0x8AFB, // + 0x68CD,0x9E9E, // + 0x68D2,0x965F, // + 0x68D4,0x9E9F, // + 0x68D5,0x9EA1, // + 0x68D7,0x9EA5, // + 0x68D8,0x9E99, // + 0x68DA,0x9249, // + 0x68DF,0x938F, // + 0x68E0,0x9EA9, // + 0x68E1,0x9E9C, // + 0x68E3,0x9EA6, // + 0x68E7,0x9EA0, // + 0x68EE,0x9058, // + 0x68EF,0x9EAA, // + 0x68F2,0x90B1, // + 0x68F9,0x9EA8, // + 0x68FA,0x8ABB, // + 0x6900,0x986F, // + 0x6901,0x9E96, // + 0x6904,0x9EA4, // + 0x6905,0x88D6, // + 0x6908,0x9E98, // + 0x690B,0x96B8, // + 0x690C,0x9E9D, // + 0x690D,0x9041, // + 0x690E,0x92C5, // + 0x690F,0x9E93, // + 0x6912,0x9EA3, // + 0x6919,0x909A, // + 0x691A,0x9EAD, // + 0x691B,0x8A91, // + 0x691C,0x8C9F, // + 0x6921,0x9EAF, // + 0x6922,0x9E9A, // + 0x6923,0x9EAE, // + 0x6925,0x9EA7, // + 0x6926,0x9E9B, // + 0x6928,0x9EAB, // + 0x692A,0x9EAC, // + 0x6930,0x9EBD, // + 0x6934,0x93CC, // + 0x6936,0x9EA2, // + 0x6939,0x9EB9, // + 0x693D,0x9EBB, // + 0x693F,0x92D6, // + 0x694A,0x976B, // + 0x6953,0x9596, // + 0x6954,0x9EB6, // + 0x6955,0x91C8, // + 0x6959,0x9EBC, // + 0x695A,0x915E, // + 0x695C,0x9EB3, // + 0x695D,0x9EC0, // + 0x695E,0x9EBF, // + 0x6960,0x93ED, // + 0x6961,0x9EBE, // + 0x6962,0x93E8, // + 0x696A,0x9EC2, // + 0x696B,0x9EB5, // + 0x696D,0x8BC6, // + 0x696E,0x9EB8, // + 0x696F,0x8F7C, // + 0x6973,0x9480, // + 0x6974,0x9EBA, // + 0x6975,0x8BC9, // + 0x6977,0x9EB2, // + 0x6978,0x9EB4, // + 0x6979,0x9EB1, // + 0x697C,0x984F, // + 0x697D,0x8A79, // + 0x697E,0x9EB7, // + 0x6981,0x9EC1, // + 0x6982,0x8A54, // + 0x698A,0x8DE5, // + 0x698E,0x897C, // + 0x6991,0x9ED2, // + 0x6994,0x9850, // + 0x6995,0x9ED5, // + 0x699B,0x9059, // + 0x699C,0x9ED4, // + 0x69A0,0x9ED3, // + 0x69A7,0x9ED0, // + 0x69AE,0x9EC4, // + 0x69B1,0x9EE1, // + 0x69B2,0x9EC3, // + 0x69B4,0x9ED6, // + 0x69BB,0x9ECE, // + 0x69BE,0x9EC9, // + 0x69BF,0x9EC6, // + 0x69C1,0x9EC7, // + 0x69C3,0x9ECF, // + 0x69C7,0xEAA0, // + 0x69CA,0x9ECC, // + 0x69CB,0x8D5C, // + 0x69CC,0x92C6, // + 0x69CD,0x9184, // + 0x69CE,0x9ECA, // + 0x69D0,0x9EC5, // + 0x69D3,0x9EC8, // + 0x69D8,0x976C, // + 0x69D9,0x968A, // + 0x69DD,0x9ECD, // + 0x69DE,0x9ED7, // + 0x69E7,0x9EDF, // + 0x69E8,0x9ED8, // + 0x69EB,0x9EE5, // + 0x69ED,0x9EE3, // + 0x69F2,0x9EDE, // + 0x69F9,0x9EDD, // + 0x69FB,0x92CE, // + 0x69FD,0x9185, // + 0x69FF,0x9EDB, // + 0x6A02,0x9ED9, // + 0x6A05,0x9EE0, // + 0x6A0A,0x9EE6, // + 0x6A0B,0x94F3, // + 0x6A0C,0x9EEC, // + 0x6A12,0x9EE7, // + 0x6A13,0x9EEA, // + 0x6A14,0x9EE4, // + 0x6A17,0x9294, // + 0x6A19,0x9557, // + 0x6A1B,0x9EDA, // + 0x6A1E,0x9EE2, // + 0x6A1F,0x8FBE, // + 0x6A21,0x96CD, // + 0x6A22,0x9EF6, // + 0x6A23,0x9EE9, // + 0x6A29,0x8CA0, // + 0x6A2A,0x89A1, // + 0x6A2B,0x8A7E, // + 0x6A2E,0x9ED1, // + 0x6A35,0x8FBF, // + 0x6A36,0x9EEE, // + 0x6A38,0x9EF5, // + 0x6A39,0x8EF7, // + 0x6A3A,0x8A92, // + 0x6A3D,0x924D, // + 0x6A44,0x9EEB, // + 0x6A47,0x9EF0, // + 0x6A48,0x9EF4, // + 0x6A4B,0x8BB4, // + 0x6A58,0x8B6B, // + 0x6A59,0x9EF2, // + 0x6A5F,0x8B40, // + 0x6A61,0x93C9, // + 0x6A62,0x9EF1, // + 0x6A66,0x9EF3, // + 0x6A72,0x9EED, // + 0x6A78,0x9EEF, // + 0x6A7F,0x8A80, // + 0x6A80,0x9268, // + 0x6A84,0x9EFA, // + 0x6A8D,0x9EF8, // + 0x6A8E,0x8CE7, // + 0x6A90,0x9EF7, // + 0x6A97,0x9F40, // + 0x6A9C,0x9E77, // + 0x6AA0,0x9EF9, // + 0x6AA2,0x9EFB, // + 0x6AA3,0x9EFC, // + 0x6AAA,0x9F4B, // + 0x6AAC,0x9F47, // + 0x6AAE,0x9E8D, // + 0x6AB3,0x9F46, // + 0x6AB8,0x9F45, // + 0x6ABB,0x9F42, // + 0x6AC1,0x9EE8, // + 0x6AC2,0x9F44, // + 0x6AC3,0x9F43, // + 0x6AD1,0x9F49, // + 0x6AD3,0x9845, // + 0x6ADA,0x9F4C, // + 0x6ADB,0x8BF9, // + 0x6ADE,0x9F48, // + 0x6ADF,0x9F4A, // + 0x6AE8,0x94A5, // + 0x6AEA,0x9F4D, // + 0x6AFA,0x9F51, // + 0x6AFB,0x9F4E, // + 0x6B04,0x9793, // + 0x6B05,0x9F4F, // + 0x6B0A,0x9EDC, // + 0x6B12,0x9F52, // + 0x6B16,0x9F53, // + 0x6B1D,0x8954, // + 0x6B1F,0x9F55, // + 0x6B20,0x8C87, // + 0x6B21,0x8E9F, // + 0x6B23,0x8BD3, // + 0x6B27,0x89A2, // + 0x6B32,0x977E, // + 0x6B37,0x9F57, // + 0x6B38,0x9F56, // + 0x6B39,0x9F59, // + 0x6B3A,0x8B5C, // + 0x6B3D,0x8BD4, // + 0x6B3E,0x8ABC, // + 0x6B43,0x9F5C, // + 0x6B49,0x9F5D, // + 0x6B4C,0x89CC, // + 0x6B4E,0x9256, // + 0x6B50,0x9F5E, // + 0x6B53,0x8ABD, // + 0x6B54,0x9F60, // + 0x6B59,0x9F5F, // + 0x6B5B,0x9F61, // + 0x6B5F,0x9F62, // + 0x6B61,0x9F63, // + 0x6B62,0x8E7E, // + 0x6B63,0x90B3, // + 0x6B64,0x8D9F, // + 0x6B66,0x9590, // + 0x6B69,0x95E0, // + 0x6B6A,0x9863, // + 0x6B6F,0x8E95, // + 0x6B73,0x8DCE, // + 0x6B74,0x97F0, // + 0x6B78,0x9F64, // + 0x6B79,0x9F65, // + 0x6B7B,0x8E80, // + 0x6B7F,0x9F66, // + 0x6B80,0x9F67, // + 0x6B83,0x9F69, // + 0x6B84,0x9F68, // + 0x6B86,0x9677, // + 0x6B89,0x8F7D, // + 0x6B8A,0x8EEA, // + 0x6B8B,0x8E63, // + 0x6B8D,0x9F6A, // + 0x6B95,0x9F6C, // + 0x6B96,0x9042, // + 0x6B98,0x9F6B, // + 0x6B9E,0x9F6D, // + 0x6BA4,0x9F6E, // + 0x6BAA,0x9F6F, // + 0x6BAB,0x9F70, // + 0x6BAF,0x9F71, // + 0x6BB1,0x9F73, // + 0x6BB2,0x9F72, // + 0x6BB3,0x9F74, // + 0x6BB4,0x89A3, // + 0x6BB5,0x9269, // + 0x6BB7,0x9F75, // + 0x6BBA,0x8E45, // + 0x6BBB,0x8A6B, // + 0x6BBC,0x9F76, // + 0x6BBF,0x9361, // + 0x6BC0,0x9ACA, // + 0x6BC5,0x8B42, // + 0x6BC6,0x9F77, // + 0x6BCB,0x9F78, // + 0x6BCD,0x95EA, // + 0x6BCE,0x9688, // + 0x6BD2,0x93C5, // + 0x6BD3,0x9F79, // + 0x6BD4,0x94E4, // + 0x6BD8,0x94F9, // + 0x6BDB,0x96D1, // + 0x6BDF,0x9F7A, // + 0x6BEB,0x9F7C, // + 0x6BEC,0x9F7B, // + 0x6BEF,0x9F7E, // + 0x6BF3,0x9F7D, // + 0x6C08,0x9F81, // + 0x6C0F,0x8E81, // + 0x6C11,0x96AF, // + 0x6C13,0x9F82, // + 0x6C14,0x9F83, // + 0x6C17,0x8B43, // + 0x6C1B,0x9F84, // + 0x6C23,0x9F86, // + 0x6C24,0x9F85, // + 0x6C34,0x9085, // + 0x6C37,0x9558, // + 0x6C38,0x8969, // + 0x6C3E,0x94C3, // + 0x6C40,0x92F3, // + 0x6C41,0x8F60, // + 0x6C42,0x8B81, // + 0x6C4E,0x94C4, // + 0x6C50,0x8EAC, // + 0x6C55,0x9F88, // + 0x6C57,0x8ABE, // + 0x6C5A,0x8998, // + 0x6C5D,0x93F0, // + 0x6C5E,0x9F87, // + 0x6C5F,0x8D5D, // + 0x6C60,0x9272, // + 0x6C62,0x9F89, // + 0x6C68,0x9F91, // + 0x6C6A,0x9F8A, // + 0x6C70,0x91BF, // + 0x6C72,0x8B82, // + 0x6C73,0x9F92, // + 0x6C7A,0x8C88, // + 0x6C7D,0x8B44, // + 0x6C7E,0x9F90, // + 0x6C81,0x9F8E, // + 0x6C82,0x9F8B, // + 0x6C83,0x9780, // + 0x6C88,0x92BE, // + 0x6C8C,0x93D7, // + 0x6C8D,0x9F8C, // + 0x6C90,0x9F94, // + 0x6C92,0x9F93, // + 0x6C93,0x8C42, // + 0x6C96,0x89AB, // + 0x6C99,0x8DB9, // + 0x6C9A,0x9F8D, // + 0x6C9B,0x9F8F, // + 0x6CA1,0x9676, // + 0x6CA2,0x91F2, // + 0x6CAB,0x9697, // + 0x6CAE,0x9F9C, // + 0x6CB1,0x9F9D, // + 0x6CB3,0x89CD, // + 0x6CB8,0x95A6, // + 0x6CB9,0x96FB, // + 0x6CBA,0x9F9F, // + 0x6CBB,0x8EA1, // + 0x6CBC,0x8FC0, // + 0x6CBD,0x9F98, // + 0x6CBE,0x9F9E, // + 0x6CBF,0x8988, // + 0x6CC1,0x8BB5, // + 0x6CC4,0x9F95, // + 0x6CC5,0x9F9A, // + 0x6CC9,0x90F2, // + 0x6CCA,0x9491, // + 0x6CCC,0x94E5, // + 0x6CD3,0x9F97, // + 0x6CD5,0x9640, // + 0x6CD7,0x9F99, // + 0x6CD9,0x9FA2, // + 0x6CDB,0x9FA0, // + 0x6CDD,0x9F9B, // + 0x6CE1,0x9641, // + 0x6CE2,0x9467, // + 0x6CE3,0x8B83, // + 0x6CE5,0x9344, // + 0x6CE8,0x928D, // + 0x6CEA,0x9FA3, // + 0x6CEF,0x9FA1, // + 0x6CF0,0x91D7, // + 0x6CF1,0x9F96, // + 0x6CF3,0x896A, // + 0x6D0B,0x976D, // + 0x6D0C,0x9FAE, // + 0x6D12,0x9FAD, // + 0x6D17,0x90F4, // + 0x6D19,0x9FAA, // + 0x6D1B,0x978C, // + 0x6D1E,0x93B4, // + 0x6D1F,0x9FA4, // + 0x6D25,0x92C3, // + 0x6D29,0x896B, // + 0x6D2A,0x8D5E, // + 0x6D2B,0x9FA7, // + 0x6D32,0x8F46, // + 0x6D33,0x9FAC, // + 0x6D35,0x9FAB, // + 0x6D36,0x9FA6, // + 0x6D38,0x9FA9, // + 0x6D3B,0x8A88, // + 0x6D3D,0x9FA8, // + 0x6D3E,0x9468, // + 0x6D41,0x97AC, // + 0x6D44,0x8FF2, // + 0x6D45,0x90F3, // + 0x6D59,0x9FB4, // + 0x6D5A,0x9FB2, // + 0x6D5C,0x956C, // + 0x6D63,0x9FAF, // + 0x6D64,0x9FB1, // + 0x6D66,0x8959, // + 0x6D69,0x8D5F, // + 0x6D6A,0x9851, // + 0x6D6C,0x8A5C, // + 0x6D6E,0x9582, // + 0x6D74,0x9781, // + 0x6D77,0x8A43, // + 0x6D78,0x905A, // + 0x6D79,0x9FB3, // + 0x6D85,0x9FB8, // + 0x6D88,0x8FC1, // + 0x6D8C,0x974F, // + 0x6D8E,0x9FB5, // + 0x6D93,0x9FB0, // + 0x6D95,0x9FB6, // + 0x6D99,0x97DC, // + 0x6D9B,0x9393, // + 0x6D9C,0x93C0, // + 0x6DAF,0x8A55, // + 0x6DB2,0x8974, // + 0x6DB5,0x9FBC, // + 0x6DB8,0x9FBF, // + 0x6DBC,0x97C1, // + 0x6DC0,0x9784, // + 0x6DC5,0x9FC6, // + 0x6DC6,0x9FC0, // + 0x6DC7,0x9FBD, // + 0x6DCB,0x97D2, // + 0x6DCC,0x9FC3, // + 0x6DD1,0x8F69, // + 0x6DD2,0x9FC5, // + 0x6DD5,0x9FCA, // + 0x6DD8,0x9391, // + 0x6DD9,0x9FC8, // + 0x6DDE,0x9FC2, // + 0x6DE1,0x9257, // + 0x6DE4,0x9FC9, // + 0x6DE6,0x9FBE, // + 0x6DE8,0x9FC4, // + 0x6DEA,0x9FCB, // + 0x6DEB,0x88FA, // + 0x6DEC,0x9FC1, // + 0x6DEE,0x9FCC, // + 0x6DF3,0x8F7E, // + 0x6DF5,0x95A3, // + 0x6DF7,0x8DAC, // + 0x6DF9,0x9FB9, // + 0x6DFA,0x9FC7, // + 0x6DFB,0x9359, // + 0x6E05,0x90B4, // + 0x6E07,0x8A89, // + 0x6E08,0x8DCF, // + 0x6E09,0x8FC2, // + 0x6E0A,0x9FBB, // + 0x6E0B,0x8F61, // + 0x6E13,0x8C6B, // + 0x6E15,0x9FBA, // + 0x6E19,0x9FD0, // + 0x6E1A,0x8F8D, // + 0x6E1B,0x8CB8, // + 0x6E1D,0x9FDF, // + 0x6E1F,0x9FD9, // + 0x6E20,0x8B94, // + 0x6E21,0x936E, // + 0x6E23,0x9FD4, // + 0x6E24,0x9FDD, // + 0x6E25,0x88AD, // + 0x6E26,0x8951, // + 0x6E29,0x89B7, // + 0x6E2B,0x9FD6, // + 0x6E2C,0x91AA, // + 0x6E2D,0x9FCD, // + 0x6E2E,0x9FCF, // + 0x6E2F,0x8D60, // + 0x6E38,0x9FE0, // + 0x6E3A,0x9FDB, // + 0x6E3E,0x9FD3, // + 0x6E43,0x9FDA, // + 0x6E4A,0x96A9, // + 0x6E4D,0x9FD8, // + 0x6E4E,0x9FDC, // + 0x6E56,0x8CCE, // + 0x6E58,0x8FC3, // + 0x6E5B,0x9258, // + 0x6E5F,0x9FD2, // + 0x6E67,0x974E, // + 0x6E6B,0x9FD5, // + 0x6E6E,0x9FCE, // + 0x6E6F,0x9392, // + 0x6E72,0x9FD1, // + 0x6E76,0x9FD7, // + 0x6E7E,0x9870, // + 0x6E7F,0x8EBC, // + 0x6E80,0x969E, // + 0x6E82,0x9FE1, // + 0x6E8C,0x94AC, // + 0x6E8F,0x9FED, // + 0x6E90,0x8CB9, // + 0x6E96,0x8F80, // + 0x6E98,0x9FE3, // + 0x6E9C,0x97AD, // + 0x6E9D,0x8D61, // + 0x6E9F,0x9FF0, // + 0x6EA2,0x88EC, // + 0x6EA5,0x9FEE, // + 0x6EAA,0x9FE2, // + 0x6EAF,0x9FE8, // + 0x6EB2,0x9FEA, // + 0x6EB6,0x976E, // + 0x6EB7,0x9FE5, // + 0x6EBA,0x934D, // + 0x6EBD,0x9FE7, // + 0x6EC2,0x9FEF, // + 0x6EC4,0x9FE9, // + 0x6EC5,0x96C5, // + 0x6EC9,0x9FE4, // + 0x6ECB,0x8EA0, // + 0x6ECC,0x9FFC, // + 0x6ED1,0x8A8A, // + 0x6ED3,0x9FE6, // + 0x6ED4,0x9FEB, // + 0x6ED5,0x9FEC, // + 0x6EDD,0x91EA, // + 0x6EDE,0x91D8, // + 0x6EEC,0x9FF4, // + 0x6EEF,0x9FFA, // + 0x6EF2,0x9FF8, // + 0x6EF4,0x9348, // + 0x6EF7,0xE042, // + 0x6EF8,0x9FF5, // + 0x6EFE,0x9FF6, // + 0x6EFF,0x9FDE, // + 0x6F01,0x8B99, // + 0x6F02,0x9559, // + 0x6F06,0x8EBD, // + 0x6F09,0x8D97, // + 0x6F0F,0x9852, // + 0x6F11,0x9FF2, // + 0x6F13,0xE041, // + 0x6F14,0x8989, // + 0x6F15,0x9186, // + 0x6F20,0x9499, // + 0x6F22,0x8ABF, // + 0x6F23,0x97F8, // + 0x6F2B,0x969F, // + 0x6F2C,0x92D0, // + 0x6F31,0x9FF9, // + 0x6F32,0x9FFB, // + 0x6F38,0x9151, // + 0x6F3E,0xE040, // + 0x6F3F,0x9FF7, // + 0x6F41,0x9FF1, // + 0x6F45,0x8AC1, // + 0x6F54,0x8C89, // + 0x6F58,0xE04E, // + 0x6F5B,0xE049, // + 0x6F5C,0x90F6, // + 0x6F5F,0x8A83, // + 0x6F64,0x8F81, // + 0x6F66,0xE052, // + 0x6F6D,0xE04B, // + 0x6F6E,0x92AA, // + 0x6F6F,0xE048, // + 0x6F70,0x92D7, // + 0x6F74,0xE06B, // + 0x6F78,0xE045, // + 0x6F7A,0xE044, // + 0x6F7C,0xE04D, // + 0x6F80,0xE047, // + 0x6F81,0xE046, // + 0x6F82,0xE04C, // + 0x6F84,0x909F, // + 0x6F86,0xE043, // + 0x6F8E,0xE04F, // + 0x6F91,0xE050, // + 0x6F97,0x8AC0, // + 0x6FA1,0xE055, // + 0x6FA3,0xE054, // + 0x6FA4,0xE056, // + 0x6FAA,0xE059, // + 0x6FB1,0x9362, // + 0x6FB3,0xE053, // + 0x6FB9,0xE057, // + 0x6FC0,0x8C83, // + 0x6FC1,0x91F7, // + 0x6FC2,0xE051, // + 0x6FC3,0x945A, // + 0x6FC6,0xE058, // + 0x6FD4,0xE05D, // + 0x6FD8,0xE05E, // + 0x6FDB,0xE061, // + 0x6FDF,0xE05A, // + 0x6FE0,0x8D8A, // + 0x6FE1,0x9447, // + 0x6FE4,0x9FB7, // + 0x6FEB,0x9794, // + 0x6FEC,0xE05C, // + 0x6FEE,0xE060, // + 0x6FEF,0x91F3, // + 0x6FF1,0xE05F, // + 0x6FF3,0xE04A, // + 0x6FF6,0xE889, // + 0x6FFA,0xE064, // + 0x6FFE,0xE068, // + 0x7001,0xE066, // + 0x7009,0xE062, // + 0x700B,0xE063, // + 0x700F,0xE067, // + 0x7011,0xE065, // + 0x7015,0x956D, // + 0x7018,0xE06D, // + 0x701A,0xE06A, // + 0x701B,0xE069, // + 0x701D,0xE06C, // + 0x701E,0x93D2, // + 0x701F,0xE06E, // + 0x7026,0x9295, // + 0x7027,0x91EB, // + 0x702C,0x90A3, // + 0x7030,0xE06F, // + 0x7032,0xE071, // + 0x703E,0xE070, // + 0x704C,0x9FF3, // + 0x7051,0xE072, // + 0x7058,0x93E5, // + 0x7063,0xE073, // + 0x706B,0x89CE, // + 0x706F,0x9394, // + 0x7070,0x8A44, // + 0x7078,0x8B84, // + 0x707C,0x8EDC, // + 0x707D,0x8DD0, // + 0x7089,0x9846, // + 0x708A,0x9086, // + 0x708E,0x898A, // + 0x7092,0xE075, // + 0x7099,0xE074, // + 0x70AC,0xE078, // + 0x70AD,0x9259, // + 0x70AE,0xE07B, // + 0x70AF,0xE076, // + 0x70B3,0xE07A, // + 0x70B8,0xE079, // + 0x70B9,0x935F, // + 0x70BA,0x88D7, // + 0x70C8,0x97F3, // + 0x70CB,0xE07D, // + 0x70CF,0x8947, // + 0x70D9,0xE080, // + 0x70DD,0xE07E, // + 0x70DF,0xE07C, // + 0x70F1,0xE077, // + 0x70F9,0x9642, // + 0x70FD,0xE082, // + 0x7109,0xE081, // + 0x7114,0x898B, // + 0x7119,0xE084, // + 0x711A,0x95B0, // + 0x711C,0xE083, // + 0x7121,0x96B3, // + 0x7126,0x8FC5, // + 0x7136,0x9152, // + 0x713C,0x8FC4, // + 0x7149,0x97F9, // + 0x714C,0xE08A, // + 0x714E,0x90F7, // + 0x7155,0xE086, // + 0x7156,0xE08B, // + 0x7159,0x898C, // + 0x7162,0xE089, // + 0x7164,0x9481, // + 0x7165,0xE085, // + 0x7166,0xE088, // + 0x7167,0x8FC6, // + 0x7169,0x94CF, // + 0x716C,0xE08C, // + 0x716E,0x8ECF, // + 0x717D,0x90F8, // + 0x7184,0xE08F, // + 0x7188,0xE087, // + 0x718A,0x8C46, // + 0x718F,0xE08D, // + 0x7194,0x976F, // + 0x7195,0xE090, // + 0x7199,0xEAA4, // + 0x719F,0x8F6E, // + 0x71A8,0xE091, // + 0x71AC,0xE092, // + 0x71B1,0x944D, // + 0x71B9,0xE094, // + 0x71BE,0xE095, // + 0x71C3,0x9452, // + 0x71C8,0x9395, // + 0x71C9,0xE097, // + 0x71CE,0xE099, // + 0x71D0,0x97D3, // + 0x71D2,0xE096, // + 0x71D4,0xE098, // + 0x71D5,0x898D, // + 0x71D7,0xE093, // + 0x71DF,0x9A7A, // + 0x71E0,0xE09A, // + 0x71E5,0x9187, // + 0x71E6,0x8E57, // + 0x71E7,0xE09C, // + 0x71EC,0xE09B, // + 0x71ED,0x9043, // + 0x71EE,0x99D7, // + 0x71F5,0xE09D, // + 0x71F9,0xE09F, // + 0x71FB,0xE08E, // + 0x71FC,0xE09E, // + 0x71FF,0xE0A0, // + 0x7206,0x949A, // + 0x720D,0xE0A1, // + 0x7210,0xE0A2, // + 0x721B,0xE0A3, // + 0x7228,0xE0A4, // + 0x722A,0x92DC, // + 0x722C,0xE0A6, // + 0x722D,0xE0A5, // + 0x7230,0xE0A7, // + 0x7232,0xE0A8, // + 0x7235,0x8EDD, // + 0x7236,0x9583, // + 0x723A,0x96EA, // + 0x723B,0xE0A9, // + 0x723C,0xE0AA, // + 0x723D,0x9175, // + 0x723E,0x8EA2, // + 0x723F,0xE0AB, // + 0x7240,0xE0AC, // + 0x7246,0xE0AD, // + 0x7247,0x95D0, // + 0x7248,0x94C5, // + 0x724B,0xE0AE, // + 0x724C,0x9476, // + 0x7252,0x92AB, // + 0x7258,0xE0AF, // + 0x7259,0x89E5, // + 0x725B,0x8B8D, // + 0x725D,0x96C4, // + 0x725F,0x96B4, // + 0x7261,0x89B2, // + 0x7262,0x9853, // + 0x7267,0x9671, // + 0x7269,0x95A8, // + 0x7272,0x90B5, // + 0x7274,0xE0B0, // + 0x7279,0x93C1, // + 0x727D,0x8CA1, // + 0x727E,0xE0B1, // + 0x7280,0x8DD2, // + 0x7281,0xE0B3, // + 0x7282,0xE0B2, // + 0x7287,0xE0B4, // + 0x7292,0xE0B5, // + 0x7296,0xE0B6, // + 0x72A0,0x8B5D, // + 0x72A2,0xE0B7, // + 0x72A7,0xE0B8, // + 0x72AC,0x8CA2, // + 0x72AF,0x94C6, // + 0x72B2,0xE0BA, // + 0x72B6,0x8FF3, // + 0x72B9,0xE0B9, // + 0x72C2,0x8BB6, // + 0x72C3,0xE0BB, // + 0x72C4,0xE0BD, // + 0x72C6,0xE0BC, // + 0x72CE,0xE0BE, // + 0x72D0,0x8CCF, // + 0x72D2,0xE0BF, // + 0x72D7,0x8BE7, // + 0x72D9,0x915F, // + 0x72DB,0x8D9D, // + 0x72E0,0xE0C1, // + 0x72E1,0xE0C2, // + 0x72E2,0xE0C0, // + 0x72E9,0x8EEB, // + 0x72EC,0x93C6, // + 0x72ED,0x8BB7, // + 0x72F7,0xE0C4, // + 0x72F8,0x924B, // + 0x72F9,0xE0C3, // + 0x72FC,0x9854, // + 0x72FD,0x9482, // + 0x730A,0xE0C7, // + 0x7316,0xE0C9, // + 0x7317,0xE0C6, // + 0x731B,0x96D2, // + 0x731C,0xE0C8, // + 0x731D,0xE0CA, // + 0x731F,0x97C2, // + 0x7325,0xE0CE, // + 0x7329,0xE0CD, // + 0x732A,0x9296, // + 0x732B,0x944C, // + 0x732E,0x8CA3, // + 0x732F,0xE0CC, // + 0x7334,0xE0CB, // + 0x7336,0x9750, // + 0x7337,0x9751, // + 0x733E,0xE0CF, // + 0x733F,0x898E, // + 0x7344,0x8D96, // + 0x7345,0x8E82, // + 0x734E,0xE0D0, // + 0x734F,0xE0D1, // + 0x7357,0xE0D3, // + 0x7363,0x8F62, // + 0x7368,0xE0D5, // + 0x736A,0xE0D4, // + 0x7370,0xE0D6, // + 0x7372,0x8A6C, // + 0x7375,0xE0D8, // + 0x7378,0xE0D7, // + 0x737A,0xE0DA, // + 0x737B,0xE0D9, // + 0x7384,0x8CBA, // + 0x7387,0x97A6, // + 0x7389,0x8BCA, // + 0x738B,0x89A4, // + 0x7396,0x8BE8, // + 0x73A9,0x8ADF, // + 0x73B2,0x97E6, // + 0x73B3,0xE0DC, // + 0x73BB,0xE0DE, // + 0x73C0,0xE0DF, // + 0x73C2,0x89CF, // + 0x73C8,0xE0DB, // + 0x73CA,0x8E58, // + 0x73CD,0x92BF, // + 0x73CE,0xE0DD, // + 0x73DE,0xE0E2, // + 0x73E0,0x8EEC, // + 0x73E5,0xE0E0, // + 0x73EA,0x8C5D, // + 0x73ED,0x94C7, // + 0x73EE,0xE0E1, // + 0x73F1,0xE0FC, // + 0x73F8,0xE0E7, // + 0x73FE,0x8CBB, // + 0x7403,0x8B85, // + 0x7405,0xE0E4, // + 0x7406,0x979D, // + 0x7409,0x97AE, // + 0x7422,0x91F4, // + 0x7425,0xE0E6, // + 0x7432,0xE0E8, // + 0x7433,0x97D4, // + 0x7434,0x8BD5, // + 0x7435,0x94FA, // + 0x7436,0x9469, // + 0x743A,0xE0E9, // + 0x743F,0xE0EB, // + 0x7441,0xE0EE, // + 0x7455,0xE0EA, // + 0x7459,0xE0ED, // + 0x745A,0x8CE8, // + 0x745B,0x896C, // + 0x745C,0xE0EF, // + 0x745E,0x9090, // + 0x745F,0xE0EC, // + 0x7460,0x97DA, // + 0x7463,0xE0F2, // + 0x7464,0xEAA2, // + 0x7469,0xE0F0, // + 0x746A,0xE0F3, // + 0x746F,0xE0E5, // + 0x7470,0xE0F1, // + 0x7473,0x8DBA, // + 0x7476,0xE0F4, // + 0x747E,0xE0F5, // + 0x7483,0x979E, // + 0x748B,0xE0F6, // + 0x749E,0xE0F7, // + 0x74A2,0xE0E3, // + 0x74A7,0xE0F8, // + 0x74B0,0x8AC2, // + 0x74BD,0x8EA3, // + 0x74CA,0xE0F9, // + 0x74CF,0xE0FA, // + 0x74D4,0xE0FB, // + 0x74DC,0x895A, // + 0x74E0,0xE140, // + 0x74E2,0x955A, // + 0x74E3,0xE141, // + 0x74E6,0x8AA2, // + 0x74E7,0xE142, // + 0x74E9,0xE143, // + 0x74EE,0xE144, // + 0x74F0,0xE146, // + 0x74F1,0xE147, // + 0x74F2,0xE145, // + 0x74F6,0x9572, // + 0x74F7,0xE149, // + 0x74F8,0xE148, // + 0x7503,0xE14B, // + 0x7504,0xE14A, // + 0x7505,0xE14C, // + 0x750C,0xE14D, // + 0x750D,0xE14F, // + 0x750E,0xE14E, // + 0x7511,0x8D99, // + 0x7513,0xE151, // + 0x7515,0xE150, // + 0x7518,0x8AC3, // + 0x751A,0x9072, // + 0x751E,0xE152, // + 0x751F,0x90B6, // + 0x7523,0x8E59, // + 0x7525,0x8999, // + 0x7526,0xE153, // + 0x7528,0x9770, // + 0x752B,0x95E1, // + 0x752C,0xE154, // + 0x7530,0x9363, // + 0x7531,0x9752, // + 0x7532,0x8D62, // + 0x7533,0x905C, // + 0x7537,0x926A, // + 0x7538,0x99B2, // + 0x753A,0x92AC, // + 0x753B,0x89E6, // + 0x753C,0xE155, // + 0x7544,0xE156, // + 0x7549,0xE159, // + 0x754A,0xE158, // + 0x754B,0x9DC0, // + 0x754C,0x8A45, // + 0x754D,0xE157, // + 0x754F,0x88D8, // + 0x7551,0x94A8, // + 0x7554,0x94C8, // + 0x7559,0x97AF, // + 0x755A,0xE15C, // + 0x755B,0xE15A, // + 0x755C,0x927B, // + 0x755D,0x90A4, // + 0x7560,0x94A9, // + 0x7562,0x954C, // + 0x7564,0xE15E, // + 0x7565,0x97AA, // + 0x7566,0x8C6C, // + 0x7567,0xE15F, // + 0x7569,0xE15D, // + 0x756A,0x94D4, // + 0x756B,0xE160, // + 0x756D,0xE161, // + 0x7570,0x88D9, // + 0x7573,0x8FF4, // + 0x7574,0xE166, // + 0x7576,0xE163, // + 0x7577,0x93EB, // + 0x7578,0xE162, // + 0x757F,0x8B45, // + 0x7582,0xE169, // + 0x7586,0xE164, // + 0x7587,0xE165, // + 0x7589,0xE168, // + 0x758A,0xE167, // + 0x758B,0x9544, // + 0x758E,0x9161, // + 0x758F,0x9160, // + 0x7591,0x8B5E, // + 0x7594,0xE16A, // + 0x759A,0xE16B, // + 0x759D,0xE16C, // + 0x75A3,0xE16E, // + 0x75A5,0xE16D, // + 0x75AB,0x8975, // + 0x75B1,0xE176, // + 0x75B2,0x94E6, // + 0x75B3,0xE170, // + 0x75B5,0xE172, // + 0x75B8,0xE174, // + 0x75B9,0x905D, // + 0x75BC,0xE175, // + 0x75BD,0xE173, // + 0x75BE,0x8EBE, // + 0x75C2,0xE16F, // + 0x75C3,0xE171, // + 0x75C5,0x9561, // + 0x75C7,0x8FC7, // + 0x75CA,0xE178, // + 0x75CD,0xE177, // + 0x75D2,0xE179, // + 0x75D4,0x8EA4, // + 0x75D5,0x8DAD, // + 0x75D8,0x9397, // + 0x75D9,0xE17A, // + 0x75DB,0x92C9, // + 0x75DE,0xE17C, // + 0x75E2,0x979F, // + 0x75E3,0xE17B, // + 0x75E9,0x9189, // + 0x75F0,0xE182, // + 0x75F2,0xE184, // + 0x75F3,0xE185, // + 0x75F4,0x9273, // + 0x75FA,0xE183, // + 0x75FC,0xE180, // + 0x75FE,0xE17D, // + 0x75FF,0xE17E, // + 0x7601,0xE181, // + 0x7609,0xE188, // + 0x760B,0xE186, // + 0x760D,0xE187, // + 0x761F,0xE189, // + 0x7620,0xE18B, // + 0x7621,0xE18C, // + 0x7622,0xE18D, // + 0x7624,0xE18E, // + 0x7627,0xE18A, // + 0x7630,0xE190, // + 0x7634,0xE18F, // + 0x763B,0xE191, // + 0x7642,0x97C3, // + 0x7646,0xE194, // + 0x7647,0xE192, // + 0x7648,0xE193, // + 0x764C,0x8AE0, // + 0x7652,0x96FC, // + 0x7656,0x95C8, // + 0x7658,0xE196, // + 0x765C,0xE195, // + 0x7661,0xE197, // + 0x7662,0xE198, // + 0x7667,0xE19C, // + 0x7668,0xE199, // + 0x7669,0xE19A, // + 0x766A,0xE19B, // + 0x766C,0xE19D, // + 0x7670,0xE19E, // + 0x7672,0xE19F, // + 0x7676,0xE1A0, // + 0x7678,0xE1A1, // + 0x767A,0x94AD, // + 0x767B,0x936F, // + 0x767C,0xE1A2, // + 0x767D,0x9492, // + 0x767E,0x9553, // + 0x7680,0xE1A3, // + 0x7683,0xE1A4, // + 0x7684,0x9349, // + 0x7686,0x8A46, // + 0x7687,0x8D63, // + 0x7688,0xE1A5, // + 0x768B,0xE1A6, // + 0x768E,0xE1A7, // + 0x7690,0x8E48, // + 0x7693,0xE1A9, // + 0x7696,0xE1A8, // + 0x7699,0xE1AA, // + 0x769A,0xE1AB, // + 0x76AE,0x94E7, // + 0x76B0,0xE1AC, // + 0x76B4,0xE1AD, // + 0x76B7,0xEA89, // + 0x76B8,0xE1AE, // + 0x76B9,0xE1AF, // + 0x76BA,0xE1B0, // + 0x76BF,0x8E4D, // + 0x76C2,0xE1B1, // + 0x76C3,0x9475, // + 0x76C6,0x967E, // + 0x76C8,0x896D, // + 0x76CA,0x8976, // + 0x76CD,0xE1B2, // + 0x76D2,0xE1B4, // + 0x76D6,0xE1B3, // + 0x76D7,0x9390, // + 0x76DB,0x90B7, // + 0x76DC,0x9F58, // + 0x76DE,0xE1B5, // + 0x76DF,0x96BF, // + 0x76E1,0xE1B6, // + 0x76E3,0x8AC4, // + 0x76E4,0x94D5, // + 0x76E5,0xE1B7, // + 0x76E7,0xE1B8, // + 0x76EA,0xE1B9, // + 0x76EE,0x96DA, // + 0x76F2,0x96D3, // + 0x76F4,0x92BC, // + 0x76F8,0x918A, // + 0x76FB,0xE1BB, // + 0x76FE,0x8F82, // + 0x7701,0x8FC8, // + 0x7704,0xE1BE, // + 0x7707,0xE1BD, // + 0x7708,0xE1BC, // + 0x7709,0x94FB, // + 0x770B,0x8AC5, // + 0x770C,0x8CA7, // + 0x771B,0xE1C4, // + 0x771E,0xE1C1, // + 0x771F,0x905E, // + 0x7720,0x96B0, // + 0x7724,0xE1C0, // + 0x7725,0xE1C2, // + 0x7726,0xE1C3, // + 0x7729,0xE1BF, // + 0x7737,0xE1C5, // + 0x7738,0xE1C6, // + 0x773A,0x92AD, // + 0x773C,0x8AE1, // + 0x7740,0x9285, // + 0x7747,0xE1C7, // + 0x775A,0xE1C8, // + 0x775B,0xE1CB, // + 0x7761,0x9087, // + 0x7763,0x93C2, // + 0x7765,0xE1CC, // + 0x7766,0x9672, // + 0x7768,0xE1C9, // + 0x776B,0xE1CA, // + 0x7779,0xE1CF, // + 0x777E,0xE1CE, // + 0x777F,0xE1CD, // + 0x778B,0xE1D1, // + 0x778E,0xE1D0, // + 0x7791,0xE1D2, // + 0x779E,0xE1D4, // + 0x77A0,0xE1D3, // + 0x77A5,0x95CB, // + 0x77AC,0x8F75, // + 0x77AD,0x97C4, // + 0x77B0,0xE1D5, // + 0x77B3,0x93B5, // + 0x77B6,0xE1D6, // + 0x77B9,0xE1D7, // + 0x77BB,0xE1DB, // + 0x77BC,0xE1D9, // + 0x77BD,0xE1DA, // + 0x77BF,0xE1D8, // + 0x77C7,0xE1DC, // + 0x77CD,0xE1DD, // + 0x77D7,0xE1DE, // + 0x77DA,0xE1DF, // + 0x77DB,0x96B5, // + 0x77DC,0xE1E0, // + 0x77E2,0x96EE, // + 0x77E3,0xE1E1, // + 0x77E5,0x926D, // + 0x77E7,0x948A, // + 0x77E9,0x8BE9, // + 0x77ED,0x925A, // + 0x77EE,0xE1E2, // + 0x77EF,0x8BB8, // + 0x77F3,0x90CE, // + 0x77FC,0xE1E3, // + 0x7802,0x8DBB, // + 0x780C,0xE1E4, // + 0x7812,0xE1E5, // + 0x7814,0x8CA4, // + 0x7815,0x8DD3, // + 0x7820,0xE1E7, // + 0x7825,0x9375, // + 0x7826,0x8DD4, // + 0x7827,0x8B6D, // + 0x7832,0x9643, // + 0x7834,0x946A, // + 0x783A,0x9376, // + 0x783F,0x8D7B, // + 0x7845,0xE1E9, // + 0x785D,0x8FC9, // + 0x786B,0x97B0, // + 0x786C,0x8D64, // + 0x786F,0x8CA5, // + 0x7872,0x94A1, // + 0x7874,0xE1EB, // + 0x787C,0xE1ED, // + 0x7881,0x8CE9, // + 0x7886,0xE1EC, // + 0x7887,0x92F4, // + 0x788C,0xE1EF, // + 0x788D,0x8A56, // + 0x788E,0xE1EA, // + 0x7891,0x94E8, // + 0x7893,0x894F, // + 0x7895,0x8DEA, // + 0x7897,0x9871, // + 0x789A,0xE1EE, // + 0x78A3,0xE1F0, // + 0x78A7,0x95C9, // + 0x78A9,0x90D7, // + 0x78AA,0xE1F2, // + 0x78AF,0xE1F3, // + 0x78B5,0xE1F1, // + 0x78BA,0x8A6D, // + 0x78BC,0xE1F9, // + 0x78BE,0xE1F8, // + 0x78C1,0x8EA5, // + 0x78C5,0xE1FA, // + 0x78C6,0xE1F5, // + 0x78CA,0xE1FB, // + 0x78CB,0xE1F6, // + 0x78D0,0x94D6, // + 0x78D1,0xE1F4, // + 0x78D4,0xE1F7, // + 0x78DA,0xE241, // + 0x78E7,0xE240, // + 0x78E8,0x9681, // + 0x78EC,0xE1FC, // + 0x78EF,0x88E9, // + 0x78F4,0xE243, // + 0x78FD,0xE242, // + 0x7901,0x8FCA, // + 0x7907,0xE244, // + 0x790E,0x9162, // + 0x7911,0xE246, // + 0x7912,0xE245, // + 0x7919,0xE247, // + 0x7926,0xE1E6, // + 0x792A,0xE1E8, // + 0x792B,0xE249, // + 0x792C,0xE248, // + 0x793A,0x8EA6, // + 0x793C,0x97E7, // + 0x793E,0x8ED0, // + 0x7940,0xE24A, // + 0x7941,0x8C56, // + 0x7947,0x8B5F, // + 0x7948,0x8B46, // + 0x7949,0x8E83, // + 0x7950,0x9753, // + 0x7953,0xE250, // + 0x7955,0xE24F, // + 0x7956,0x9163, // + 0x7957,0xE24C, // + 0x795A,0xE24E, // + 0x795D,0x8F6A, // + 0x795E,0x905F, // + 0x795F,0xE24D, // + 0x7960,0xE24B, // + 0x7962,0x9449, // + 0x7965,0x8FCB, // + 0x796D,0x8DD5, // + 0x7977,0x9398, // + 0x797A,0xE251, // + 0x797F,0xE252, // + 0x7980,0xE268, // + 0x7981,0x8BD6, // + 0x7984,0x985C, // + 0x7985,0x9154, // + 0x798A,0xE253, // + 0x798D,0x89D0, // + 0x798E,0x92F5, // + 0x798F,0x959F, // + 0x799D,0xE254, // + 0x79A6,0x8B9A, // + 0x79A7,0xE255, // + 0x79AA,0xE257, // + 0x79AE,0xE258, // + 0x79B0,0x9448, // + 0x79B3,0xE259, // + 0x79B9,0xE25A, // + 0x79BD,0x8BD7, // + 0x79BE,0x89D1, // + 0x79BF,0x93C3, // + 0x79C0,0x8F47, // + 0x79C1,0x8E84, // + 0x79C9,0xE25C, // + 0x79CB,0x8F48, // + 0x79D1,0x89C8, // + 0x79D2,0x9562, // + 0x79D5,0xE25D, // + 0x79D8,0x94E9, // + 0x79DF,0x9164, // + 0x79E1,0xE260, // + 0x79E3,0xE261, // + 0x79E4,0x9489, // + 0x79E6,0x9060, // + 0x79E7,0xE25E, // + 0x79E9,0x9281, // + 0x79EC,0xE25F, // + 0x79F0,0x8FCC, // + 0x79FB,0x88DA, // + 0x7A00,0x8B48, // + 0x7A08,0xE262, // + 0x7A0B,0x92F6, // + 0x7A0D,0xE263, // + 0x7A0E,0x90C5, // + 0x7A14,0x96AB, // + 0x7A17,0x9542, // + 0x7A18,0xE264, // + 0x7A19,0xE265, // + 0x7A1A,0x9274, // + 0x7A1C,0x97C5, // + 0x7A1F,0xE267, // + 0x7A20,0xE266, // + 0x7A2E,0x8EED, // + 0x7A31,0xE269, // + 0x7A32,0x88EE, // + 0x7A37,0xE26C, // + 0x7A3B,0xE26A, // + 0x7A3C,0x89D2, // + 0x7A3D,0x8C6D, // + 0x7A3E,0xE26B, // + 0x7A3F,0x8D65, // + 0x7A40,0x8D92, // + 0x7A42,0x95E4, // + 0x7A43,0xE26D, // + 0x7A46,0x9673, // + 0x7A49,0xE26F, // + 0x7A4D,0x90CF, // + 0x7A4E,0x896E, // + 0x7A4F,0x89B8, // + 0x7A50,0x88AA, // + 0x7A57,0xE26E, // + 0x7A61,0xE270, // + 0x7A62,0xE271, // + 0x7A63,0x8FF5, // + 0x7A69,0xE272, // + 0x7A6B,0x8A6E, // + 0x7A70,0xE274, // + 0x7A74,0x8C8A, // + 0x7A76,0x8B86, // + 0x7A79,0xE275, // + 0x7A7A,0x8BF3, // + 0x7A7D,0xE276, // + 0x7A7F,0x90FA, // + 0x7A81,0x93CB, // + 0x7A83,0x90DE, // + 0x7A84,0x8DF3, // + 0x7A88,0xE277, // + 0x7A92,0x9282, // + 0x7A93,0x918B, // + 0x7A95,0xE279, // + 0x7A96,0xE27B, // + 0x7A97,0xE278, // + 0x7A98,0xE27A, // + 0x7A9F,0x8C41, // + 0x7AA9,0xE27C, // + 0x7AAA,0x8C45, // + 0x7AAE,0x8B87, // + 0x7AAF,0x9771, // + 0x7AB0,0xE27E, // + 0x7AB6,0xE280, // + 0x7ABA,0x894D, // + 0x7ABF,0xE283, // + 0x7AC3,0x8A96, // + 0x7AC4,0xE282, // + 0x7AC5,0xE281, // + 0x7AC7,0xE285, // + 0x7AC8,0xE27D, // + 0x7ACA,0xE286, // + 0x7ACB,0x97A7, // + 0x7ACD,0xE287, // + 0x7ACF,0xE288, // + 0x7AD2,0x9AF2, // + 0x7AD3,0xE28A, // + 0x7AD5,0xE289, // + 0x7AD9,0xE28B, // + 0x7ADA,0xE28C, // + 0x7ADC,0x97B3, // + 0x7ADD,0xE28D, // + 0x7ADF,0xE8ED, // + 0x7AE0,0x8FCD, // + 0x7AE1,0xE28E, // + 0x7AE2,0xE28F, // + 0x7AE3,0x8F76, // + 0x7AE5,0x93B6, // + 0x7AE6,0xE290, // + 0x7AEA,0x9247, // + 0x7AED,0xE291, // + 0x7AF0,0xE292, // + 0x7AF6,0x8BA3, // + 0x7AF8,0x995E, // + 0x7AF9,0x927C, // + 0x7AFA,0x8EB1, // + 0x7AFF,0x8AC6, // + 0x7B02,0xE293, // + 0x7B04,0xE2A0, // + 0x7B06,0xE296, // + 0x7B08,0x8B88, // + 0x7B0A,0xE295, // + 0x7B0B,0xE2A2, // + 0x7B0F,0xE294, // + 0x7B11,0x8FCE, // + 0x7B18,0xE298, // + 0x7B19,0xE299, // + 0x7B1B,0x934A, // + 0x7B1E,0xE29A, // + 0x7B20,0x8A7D, // + 0x7B25,0x9079, // + 0x7B26,0x9584, // + 0x7B28,0xE29C, // + 0x7B2C,0x91E6, // + 0x7B33,0xE297, // + 0x7B35,0xE29B, // + 0x7B36,0xE29D, // + 0x7B39,0x8DF9, // + 0x7B45,0xE2A4, // + 0x7B46,0x954D, // + 0x7B48,0x94A4, // + 0x7B49,0x9399, // + 0x7B4B,0x8BD8, // + 0x7B4C,0xE2A3, // + 0x7B4D,0xE2A1, // + 0x7B4F,0x94B3, // + 0x7B50,0xE29E, // + 0x7B51,0x927D, // + 0x7B52,0x939B, // + 0x7B54,0x939A, // + 0x7B56,0x8DF4, // + 0x7B5D,0xE2B6, // + 0x7B65,0xE2A6, // + 0x7B67,0xE2A8, // + 0x7B6C,0xE2AB, // + 0x7B6E,0xE2AC, // + 0x7B70,0xE2A9, // + 0x7B71,0xE2AA, // + 0x7B74,0xE2A7, // + 0x7B75,0xE2A5, // + 0x7B7A,0xE29F, // + 0x7B86,0x95CD, // + 0x7B87,0x89D3, // + 0x7B8B,0xE2B3, // + 0x7B8D,0xE2B0, // + 0x7B8F,0xE2B5, // + 0x7B92,0xE2B4, // + 0x7B94,0x9493, // + 0x7B95,0x96A5, // + 0x7B97,0x8E5A, // + 0x7B98,0xE2AE, // + 0x7B99,0xE2B7, // + 0x7B9A,0xE2B2, // + 0x7B9C,0xE2B1, // + 0x7B9D,0xE2AD, // + 0x7B9F,0xE2AF, // + 0x7BA1,0x8AC7, // + 0x7BAA,0x925C, // + 0x7BAD,0x90FB, // + 0x7BB1,0x94A0, // + 0x7BB4,0xE2BC, // + 0x7BB8,0x94A2, // + 0x7BC0,0x90DF, // + 0x7BC1,0xE2B9, // + 0x7BC4,0x94CD, // + 0x7BC6,0xE2BD, // + 0x7BC7,0x95D1, // + 0x7BC9,0x927A, // + 0x7BCB,0xE2B8, // + 0x7BCC,0xE2BA, // + 0x7BCF,0xE2BB, // + 0x7BDD,0xE2BE, // + 0x7BE0,0x8EC2, // + 0x7BE4,0x93C4, // + 0x7BE5,0xE2C3, // + 0x7BE6,0xE2C2, // + 0x7BE9,0xE2BF, // + 0x7BED,0x9855, // + 0x7BF3,0xE2C8, // + 0x7BF6,0xE2CC, // + 0x7BF7,0xE2C9, // + 0x7C00,0xE2C5, // + 0x7C07,0xE2C6, // + 0x7C0D,0xE2CB, // + 0x7C11,0xE2C0, // + 0x7C12,0x99D3, // + 0x7C13,0xE2C7, // + 0x7C14,0xE2C1, // + 0x7C17,0xE2CA, // + 0x7C1F,0xE2D0, // + 0x7C21,0x8AC8, // + 0x7C23,0xE2CD, // + 0x7C27,0xE2CE, // + 0x7C2A,0xE2CF, // + 0x7C2B,0xE2D2, // + 0x7C37,0xE2D1, // + 0x7C38,0x94F4, // + 0x7C3D,0xE2D3, // + 0x7C3E,0x97FA, // + 0x7C3F,0x95EB, // + 0x7C40,0xE2D8, // + 0x7C43,0xE2D5, // + 0x7C4C,0xE2D4, // + 0x7C4D,0x90D0, // + 0x7C4F,0xE2D7, // + 0x7C50,0xE2D9, // + 0x7C54,0xE2D6, // + 0x7C56,0xE2DD, // + 0x7C58,0xE2DA, // + 0x7C5F,0xE2DB, // + 0x7C60,0xE2C4, // + 0x7C64,0xE2DC, // + 0x7C65,0xE2DE, // + 0x7C6C,0xE2DF, // + 0x7C73,0x95C4, // + 0x7C75,0xE2E0, // + 0x7C7E,0x96E0, // + 0x7C81,0x8BCC, // + 0x7C82,0x8C48, // + 0x7C83,0xE2E1, // + 0x7C89,0x95B2, // + 0x7C8B,0x9088, // + 0x7C8D,0x96AE, // + 0x7C90,0xE2E2, // + 0x7C92,0x97B1, // + 0x7C95,0x9494, // + 0x7C97,0x9165, // + 0x7C98,0x9453, // + 0x7C9B,0x8F6C, // + 0x7C9F,0x88BE, // + 0x7CA1,0xE2E7, // + 0x7CA2,0xE2E5, // + 0x7CA4,0xE2E3, // + 0x7CA5,0x8A9F, // + 0x7CA7,0x8FCF, // + 0x7CA8,0xE2E8, // + 0x7CAB,0xE2E6, // + 0x7CAD,0xE2E4, // + 0x7CAE,0xE2EC, // + 0x7CB1,0xE2EB, // + 0x7CB2,0xE2EA, // + 0x7CB3,0xE2E9, // + 0x7CB9,0xE2ED, // + 0x7CBD,0xE2EE, // + 0x7CBE,0x90B8, // + 0x7CC0,0xE2EF, // + 0x7CC2,0xE2F1, // + 0x7CC5,0xE2F0, // + 0x7CCA,0x8CD0, // + 0x7CCE,0x9157, // + 0x7CD2,0xE2F3, // + 0x7CD6,0x939C, // + 0x7CD8,0xE2F2, // + 0x7CDC,0xE2F4, // + 0x7CDE,0x95B3, // + 0x7CDF,0x918C, // + 0x7CE0,0x8D66, // + 0x7CE2,0xE2F5, // + 0x7CE7,0x97C6, // + 0x7CEF,0xE2F7, // + 0x7CF2,0xE2F8, // + 0x7CF4,0xE2F9, // + 0x7CF6,0xE2FA, // + 0x7CF8,0x8E85, // + 0x7CFA,0xE2FB, // + 0x7CFB,0x8C6E, // + 0x7CFE,0x8B8A, // + 0x7D00,0x8B49, // + 0x7D02,0xE340, // + 0x7D04,0x96F1, // + 0x7D05,0x8D67, // + 0x7D06,0xE2FC, // + 0x7D0A,0xE343, // + 0x7D0B,0x96E4, // + 0x7D10,0x9552, // + 0x7D14,0x8F83, // + 0x7D15,0xE342, // + 0x7D17,0x8ED1, // + 0x7D18,0x8D68, // + 0x7D19,0x8E86, // + 0x7D1A,0x8B89, // + 0x7D1B,0x95B4, // + 0x7D1C,0xE341, // + 0x7D20,0x9166, // + 0x7D21,0x9661, // + 0x7D22,0x8DF5, // + 0x7D2B,0x8E87, // + 0x7D2C,0x92DB, // + 0x7D2E,0xE346, // + 0x7D2F,0x97DD, // + 0x7D30,0x8DD7, // + 0x7D32,0xE347, // + 0x7D33,0x9061, // + 0x7D35,0xE349, // + 0x7D39,0x8FD0, // + 0x7D3A,0x8DAE, // + 0x7D3F,0xE348, // + 0x7D42,0x8F49, // + 0x7D43,0x8CBC, // + 0x7D44,0x9167, // + 0x7D45,0xE344, // + 0x7D46,0xE34A, // + 0x7D4B,0xE345, // + 0x7D4C,0x8C6F, // + 0x7D4E,0xE34D, // + 0x7D4F,0xE351, // + 0x7D50,0x8C8B, // + 0x7D56,0xE34C, // + 0x7D5B,0xE355, // + 0x7D5E,0x8D69, // + 0x7D61,0x978D, // + 0x7D62,0x88BA, // + 0x7D63,0xE352, // + 0x7D66,0x8B8B, // + 0x7D68,0xE34F, // + 0x7D6E,0xE350, // + 0x7D71,0x939D, // + 0x7D72,0xE34E, // + 0x7D73,0xE34B, // + 0x7D75,0x8A47, // + 0x7D76,0x90E2, // + 0x7D79,0x8CA6, // + 0x7D7D,0xE357, // + 0x7D89,0xE354, // + 0x7D8F,0xE356, // + 0x7D93,0xE353, // + 0x7D99,0x8C70, // + 0x7D9A,0x91B1, // + 0x7D9B,0xE358, // + 0x7D9C,0x918E, // + 0x7D9F,0xE365, // + 0x7DA2,0xE361, // + 0x7DAB,0xE35F, // + 0x7DAC,0x8EF8, // + 0x7DAD,0x88DB, // + 0x7DAE,0xE35A, // + 0x7DAF,0xE362, // + 0x7DB0,0xE366, // + 0x7DB1,0x8D6A, // + 0x7DB2,0x96D4, // + 0x7DB4,0x92D4, // + 0x7DB5,0xE35C, // + 0x7DB8,0xE364, // + 0x7DBA,0xE359, // + 0x7DBB,0x925D, // + 0x7DBD,0xE35E, // + 0x7DBE,0x88BB, // + 0x7DBF,0x96C8, // + 0x7DC7,0xE35D, // + 0x7DCA,0x8BD9, // + 0x7DCB,0x94EA, // + 0x7DCF,0x918D, // + 0x7DD1,0x97CE, // + 0x7DD2,0x8F8F, // + 0x7DD5,0xE38E, // + 0x7DD8,0xE367, // + 0x7DDA,0x90FC, // + 0x7DDC,0xE363, // + 0x7DDD,0xE368, // + 0x7DDE,0xE36A, // + 0x7DE0,0x92F7, // + 0x7DE1,0xE36D, // + 0x7DE4,0xE369, // + 0x7DE8,0x95D2, // + 0x7DE9,0x8AC9, // + 0x7DEC,0x96C9, // + 0x7DEF,0x88DC, // + 0x7DF2,0xE36C, // + 0x7DF4,0x97FB, // + 0x7DFB,0xE36B, // + 0x7E01,0x898F, // + 0x7E04,0x93EA, // + 0x7E05,0xE36E, // + 0x7E09,0xE375, // + 0x7E0A,0xE36F, // + 0x7E0B,0xE376, // + 0x7E12,0xE372, // + 0x7E1B,0x949B, // + 0x7E1E,0x8EC8, // + 0x7E1F,0xE374, // + 0x7E21,0xE371, // + 0x7E22,0xE377, // + 0x7E23,0xE370, // + 0x7E26,0x8F63, // + 0x7E2B,0x9644, // + 0x7E2E,0x8F6B, // + 0x7E31,0xE373, // + 0x7E32,0xE380, // + 0x7E35,0xE37B, // + 0x7E37,0xE37E, // + 0x7E39,0xE37C, // + 0x7E3A,0xE381, // + 0x7E3B,0xE37A, // + 0x7E3D,0xE360, // + 0x7E3E,0x90D1, // + 0x7E41,0x94C9, // + 0x7E43,0xE37D, // + 0x7E46,0xE378, // + 0x7E4A,0x9140, // + 0x7E4B,0x8C71, // + 0x7E4D,0x8F4A, // + 0x7E54,0x9044, // + 0x7E55,0x9155, // + 0x7E56,0xE384, // + 0x7E59,0xE386, // + 0x7E5A,0xE387, // + 0x7E5D,0xE383, // + 0x7E5E,0xE385, // + 0x7E66,0xE379, // + 0x7E67,0xE382, // + 0x7E69,0xE38A, // + 0x7E6A,0xE389, // + 0x7E6D,0x969A, // + 0x7E70,0x8C4A, // + 0x7E79,0xE388, // + 0x7E7B,0xE38C, // + 0x7E7C,0xE38B, // + 0x7E7D,0xE38F, // + 0x7E7F,0xE391, // + 0x7E83,0xE38D, // + 0x7E88,0xE392, // + 0x7E89,0xE393, // + 0x7E8C,0xE394, // + 0x7E8E,0xE39A, // + 0x7E8F,0x935A, // + 0x7E90,0xE396, // + 0x7E92,0xE395, // + 0x7E93,0xE397, // + 0x7E94,0xE398, // + 0x7E96,0xE399, // + 0x7E9B,0xE39B, // + 0x7E9C,0xE39C, // + 0x7F36,0x8ACA, // + 0x7F38,0xE39D, // + 0x7F3A,0xE39E, // + 0x7F45,0xE39F, // + 0x7F4C,0xE3A0, // + 0x7F4D,0xE3A1, // + 0x7F4E,0xE3A2, // + 0x7F50,0xE3A3, // + 0x7F51,0xE3A4, // + 0x7F54,0xE3A6, // + 0x7F55,0xE3A5, // + 0x7F58,0xE3A7, // + 0x7F5F,0xE3A8, // + 0x7F60,0xE3A9, // + 0x7F67,0xE3AC, // + 0x7F68,0xE3AA, // + 0x7F69,0xE3AB, // + 0x7F6A,0x8DDF, // + 0x7F6B,0x8C72, // + 0x7F6E,0x9275, // + 0x7F70,0x94B1, // + 0x7F72,0x8F90, // + 0x7F75,0x946C, // + 0x7F77,0x94EB, // + 0x7F78,0xE3AD, // + 0x7F79,0x9CEB, // + 0x7F82,0xE3AE, // + 0x7F83,0xE3B0, // + 0x7F85,0x9785, // + 0x7F86,0xE3AF, // + 0x7F87,0xE3B2, // + 0x7F88,0xE3B1, // + 0x7F8A,0x9772, // + 0x7F8C,0xE3B3, // + 0x7F8E,0x94FC, // + 0x7F94,0xE3B4, // + 0x7F9A,0xE3B7, // + 0x7F9D,0xE3B6, // + 0x7F9E,0xE3B5, // + 0x7FA3,0xE3B8, // + 0x7FA4,0x8C51, // + 0x7FA8,0x9141, // + 0x7FA9,0x8B60, // + 0x7FAE,0xE3BC, // + 0x7FAF,0xE3B9, // + 0x7FB2,0xE3BA, // + 0x7FB6,0xE3BD, // + 0x7FB8,0xE3BE, // + 0x7FB9,0xE3BB, // + 0x7FBD,0x8948, // + 0x7FC1,0x89A5, // + 0x7FC5,0xE3C0, // + 0x7FC6,0xE3C1, // + 0x7FCA,0xE3C2, // + 0x7FCC,0x9782, // + 0x7FD2,0x8F4B, // + 0x7FD4,0xE3C4, // + 0x7FD5,0xE3C3, // + 0x7FE0,0x9089, // + 0x7FE1,0xE3C5, // + 0x7FE6,0xE3C6, // + 0x7FE9,0xE3C7, // + 0x7FEB,0x8AE3, // + 0x7FF0,0x8ACB, // + 0x7FF3,0xE3C8, // + 0x7FF9,0xE3C9, // + 0x7FFB,0x967C, // + 0x7FFC,0x9783, // + 0x8000,0x9773, // + 0x8001,0x9856, // + 0x8003,0x8D6C, // + 0x8004,0xE3CC, // + 0x8005,0x8ED2, // + 0x8006,0xE3CB, // + 0x800B,0xE3CD, // + 0x800C,0x8EA7, // + 0x8010,0x91CF, // + 0x8012,0xE3CE, // + 0x8015,0x8D6B, // + 0x8017,0x96D5, // + 0x8018,0xE3CF, // + 0x8019,0xE3D0, // + 0x801C,0xE3D1, // + 0x8021,0xE3D2, // + 0x8028,0xE3D3, // + 0x8033,0x8EA8, // + 0x8036,0x96EB, // + 0x803B,0xE3D5, // + 0x803D,0x925E, // + 0x803F,0xE3D4, // + 0x8046,0xE3D7, // + 0x804A,0xE3D6, // + 0x8052,0xE3D8, // + 0x8056,0x90B9, // + 0x8058,0xE3D9, // + 0x805A,0xE3DA, // + 0x805E,0x95B7, // + 0x805F,0xE3DB, // + 0x8061,0x918F, // + 0x8062,0xE3DC, // + 0x8068,0xE3DD, // + 0x806F,0x97FC, // + 0x8070,0xE3E0, // + 0x8072,0xE3DF, // + 0x8073,0xE3DE, // + 0x8074,0x92AE, // + 0x8076,0xE3E1, // + 0x8077,0x9045, // + 0x8079,0xE3E2, // + 0x807D,0xE3E3, // + 0x807E,0x9857, // + 0x807F,0xE3E4, // + 0x8084,0xE3E5, // + 0x8085,0xE3E7, // + 0x8086,0xE3E6, // + 0x8087,0x94A3, // + 0x8089,0x93F7, // + 0x808B,0x985D, // + 0x808C,0x94A7, // + 0x8093,0xE3E9, // + 0x8096,0x8FD1, // + 0x8098,0x9549, // + 0x809A,0xE3EA, // + 0x809B,0xE3E8, // + 0x809D,0x8ACC, // + 0x80A1,0x8CD2, // + 0x80A2,0x8E88, // + 0x80A5,0x94EC, // + 0x80A9,0x8CA8, // + 0x80AA,0x9662, // + 0x80AC,0xE3ED, // + 0x80AD,0xE3EB, // + 0x80AF,0x8D6D, // + 0x80B1,0x8D6E, // + 0x80B2,0x88E7, // + 0x80B4,0x8DE6, // + 0x80BA,0x9478, // + 0x80C3,0x88DD, // + 0x80C4,0xE3F2, // + 0x80C6,0x925F, // + 0x80CC,0x9477, // + 0x80CE,0x91D9, // + 0x80D6,0xE3F4, // + 0x80D9,0xE3F0, // + 0x80DA,0xE3F3, // + 0x80DB,0xE3EE, // + 0x80DD,0xE3F1, // + 0x80DE,0x9645, // + 0x80E1,0x8CD3, // + 0x80E4,0x88FB, // + 0x80E5,0xE3EF, // + 0x80EF,0xE3F6, // + 0x80F1,0xE3F7, // + 0x80F4,0x93B7, // + 0x80F8,0x8BB9, // + 0x80FC,0xE445, // + 0x80FD,0x945C, // + 0x8102,0x8E89, // + 0x8105,0x8BBA, // + 0x8106,0x90C6, // + 0x8107,0x9865, // + 0x8108,0x96AC, // + 0x8109,0xE3F5, // + 0x810A,0x90D2, // + 0x811A,0x8B72, // + 0x811B,0xE3F8, // + 0x8123,0xE3FA, // + 0x8129,0xE3F9, // + 0x812F,0xE3FB, // + 0x8131,0x9245, // + 0x8133,0x945D, // + 0x8139,0x92AF, // + 0x813E,0xE442, // + 0x8146,0xE441, // + 0x814B,0xE3FC, // + 0x814E,0x9074, // + 0x8150,0x9585, // + 0x8151,0xE444, // + 0x8153,0xE443, // + 0x8154,0x8D6F, // + 0x8155,0x9872, // + 0x815F,0xE454, // + 0x8165,0xE448, // + 0x8166,0xE449, // + 0x816B,0x8EEE, // + 0x816E,0xE447, // + 0x8170,0x8D98, // + 0x8171,0xE446, // + 0x8174,0xE44A, // + 0x8178,0x92B0, // + 0x8179,0x95A0, // + 0x817A,0x9142, // + 0x817F,0x91DA, // + 0x8180,0xE44E, // + 0x8182,0xE44F, // + 0x8183,0xE44B, // + 0x8188,0xE44C, // + 0x818A,0xE44D, // + 0x818F,0x8D70, // + 0x8193,0xE455, // + 0x8195,0xE451, // + 0x819A,0x9586, // + 0x819C,0x968C, // + 0x819D,0x9547, // + 0x81A0,0xE450, // + 0x81A3,0xE453, // + 0x81A4,0xE452, // + 0x81A8,0x9663, // + 0x81A9,0xE456, // + 0x81B0,0xE457, // + 0x81B3,0x9156, // + 0x81B5,0xE458, // + 0x81B8,0xE45A, // + 0x81BA,0xE45E, // + 0x81BE,0xE459, // + 0x81BF,0x945E, // + 0x81C0,0xE45C, // + 0x81C2,0xE45D, // + 0x81C6,0x89B0, // + 0x81C8,0xE464, // + 0x81C9,0xE45F, // + 0x81CD,0xE460, // + 0x81D1,0xE461, // + 0x81D3,0x919F, // + 0x81D8,0xE463, // + 0x81D9,0xE462, // + 0x81DA,0xE465, // + 0x81DF,0xE466, // + 0x81E0,0xE467, // + 0x81E3,0x9062, // + 0x81E5,0x89E7, // + 0x81E7,0xE468, // + 0x81E8,0x97D5, // + 0x81EA,0x8EA9, // + 0x81ED,0x8F4C, // + 0x81F3,0x8E8A, // + 0x81F4,0x9276, // + 0x81FA,0xE469, // + 0x81FB,0xE46A, // + 0x81FC,0x8950, // + 0x81FE,0xE46B, // + 0x8201,0xE46C, // + 0x8202,0xE46D, // + 0x8205,0xE46E, // + 0x8207,0xE46F, // + 0x8208,0x8BBB, // + 0x8209,0x9DA8, // + 0x820A,0xE470, // + 0x820C,0x90E3, // + 0x820D,0xE471, // + 0x820E,0x8EC9, // + 0x8210,0xE472, // + 0x8212,0x98AE, // + 0x8216,0xE473, // + 0x8217,0x95DC, // + 0x8218,0x8ADA, // + 0x821B,0x9143, // + 0x821C,0x8F77, // + 0x821E,0x9591, // + 0x821F,0x8F4D, // + 0x8229,0xE474, // + 0x822A,0x8D71, // + 0x822B,0xE475, // + 0x822C,0x94CA, // + 0x822E,0xE484, // + 0x8233,0xE477, // + 0x8235,0x91C7, // + 0x8236,0x9495, // + 0x8237,0x8CBD, // + 0x8238,0xE476, // + 0x8239,0x9144, // + 0x8240,0xE478, // + 0x8247,0x92F8, // + 0x8258,0xE47A, // + 0x8259,0xE479, // + 0x825A,0xE47C, // + 0x825D,0xE47B, // + 0x825F,0xE47D, // + 0x8262,0xE480, // + 0x8264,0xE47E, // + 0x8266,0x8ACD, // + 0x8268,0xE481, // + 0x826A,0xE482, // + 0x826B,0xE483, // + 0x826E,0x8DAF, // + 0x826F,0x97C7, // + 0x8271,0xE485, // + 0x8272,0x9046, // + 0x8276,0x8990, // + 0x8277,0xE486, // + 0x8278,0xE487, // + 0x827E,0xE488, // + 0x828B,0x88F0, // + 0x828D,0xE489, // + 0x8292,0xE48A, // + 0x8299,0x9587, // + 0x829D,0x8EC5, // + 0x829F,0xE48C, // + 0x82A5,0x8A48, // + 0x82A6,0x88B0, // + 0x82AB,0xE48B, // + 0x82AC,0xE48E, // + 0x82AD,0x946D, // + 0x82AF,0x9063, // + 0x82B1,0x89D4, // + 0x82B3,0x9646, // + 0x82B8,0x8C7C, // + 0x82B9,0x8BDA, // + 0x82BB,0xE48D, // + 0x82BD,0x89E8, // + 0x82C5,0x8AA1, // + 0x82D1,0x8991, // + 0x82D2,0xE492, // + 0x82D3,0x97E8, // + 0x82D4,0x91DB, // + 0x82D7,0x9563, // + 0x82D9,0xE49E, // + 0x82DB,0x89D5, // + 0x82DC,0xE49C, // + 0x82DE,0xE49A, // + 0x82DF,0xE491, // + 0x82E1,0xE48F, // + 0x82E3,0xE490, // + 0x82E5,0x8EE1, // + 0x82E6,0x8BEA, // + 0x82E7,0x9297, // + 0x82EB,0x93CF, // + 0x82F1,0x8970, // + 0x82F3,0xE494, // + 0x82F4,0xE493, // + 0x82F9,0xE499, // + 0x82FA,0xE495, // + 0x82FB,0xE498, // + 0x8302,0x96CE, // + 0x8303,0xE497, // + 0x8304,0x89D6, // + 0x8305,0x8A9D, // + 0x8306,0xE49B, // + 0x8309,0xE49D, // + 0x830E,0x8C73, // + 0x8316,0xE4A1, // + 0x8317,0xE4AA, // + 0x8318,0xE4AB, // + 0x831C,0x88A9, // + 0x8323,0xE4B2, // + 0x8328,0x88EF, // + 0x832B,0xE4A9, // + 0x832F,0xE4A8, // + 0x8331,0xE4A3, // + 0x8332,0xE4A2, // + 0x8334,0xE4A0, // + 0x8335,0xE49F, // + 0x8336,0x9283, // + 0x8338,0x91F9, // + 0x8339,0xE4A5, // + 0x8340,0xE4A4, // + 0x8345,0xE4A7, // + 0x8349,0x9190, // + 0x834A,0x8C74, // + 0x834F,0x8960, // + 0x8350,0xE4A6, // + 0x8352,0x8D72, // + 0x8358,0x9191, // + 0x8373,0xE4B8, // + 0x8375,0xE4B9, // + 0x8377,0x89D7, // + 0x837B,0x89AC, // + 0x837C,0xE4B6, // + 0x8385,0xE4AC, // + 0x8387,0xE4B4, // + 0x8389,0xE4BB, // + 0x838A,0xE4B5, // + 0x838E,0xE4B3, // + 0x8393,0xE496, // + 0x8396,0xE4B1, // + 0x839A,0xE4AD, // + 0x839E,0x8ACE, // + 0x839F,0xE4AF, // + 0x83A0,0xE4BA, // + 0x83A2,0xE4B0, // + 0x83A8,0xE4BC, // + 0x83AA,0xE4AE, // + 0x83AB,0x949C, // + 0x83B1,0x9789, // + 0x83B5,0xE4B7, // + 0x83BD,0xE4CD, // + 0x83C1,0xE4C5, // + 0x83C5,0x909B, // + 0x83CA,0x8B65, // + 0x83CC,0x8BDB, // + 0x83CE,0xE4C0, // + 0x83D3,0x89D9, // + 0x83D6,0x8FD2, // + 0x83D8,0xE4C3, // + 0x83DC,0x8DD8, // + 0x83DF,0x9370, // + 0x83E0,0xE4C8, // + 0x83E9,0x95EC, // + 0x83EB,0xE4BF, // + 0x83EF,0x89D8, // + 0x83F0,0x8CD4, // + 0x83F1,0x9548, // + 0x83F2,0xE4C9, // + 0x83F4,0xE4BD, // + 0x83F7,0xE4C6, // + 0x83FB,0xE4D0, // + 0x83FD,0xE4C1, // + 0x8403,0xE4C2, // + 0x8404,0x93B8, // + 0x8407,0xE4C7, // + 0x840B,0xE4C4, // + 0x840C,0x9647, // + 0x840D,0xE4CA, // + 0x840E,0x88DE, // + 0x8413,0xE4BE, // + 0x8420,0xE4CC, // + 0x8422,0xE4CB, // + 0x8429,0x948B, // + 0x842A,0xE4D2, // + 0x842C,0xE4DD, // + 0x8431,0x8A9E, // + 0x8435,0xE4E0, // + 0x8438,0xE4CE, // + 0x843C,0xE4D3, // + 0x843D,0x978E, // + 0x8446,0xE4DC, // + 0x8449,0x9774, // + 0x844E,0x97A8, // + 0x8457,0x9298, // + 0x845B,0x8A8B, // + 0x8461,0x9592, // + 0x8462,0xE4E2, // + 0x8463,0x939F, // + 0x8466,0x88AF, // + 0x8469,0xE4DB, // + 0x846B,0xE4D7, // + 0x846C,0x9192, // + 0x846D,0xE4D1, // + 0x846E,0xE4D9, // + 0x846F,0xE4DE, // + 0x8471,0x944B, // + 0x8475,0x88A8, // + 0x8477,0xE4D6, // + 0x8479,0xE4DF, // + 0x847A,0x9598, // + 0x8482,0xE4DA, // + 0x8484,0xE4D5, // + 0x848B,0x8FD3, // + 0x8490,0x8F4E, // + 0x8494,0x8EAA, // + 0x8499,0x96D6, // + 0x849C,0x9566, // + 0x849F,0xE4E5, // + 0x84A1,0xE4EE, // + 0x84AD,0xE4D8, // + 0x84B2,0x8A97, // + 0x84B8,0x8FF6, // + 0x84B9,0xE4E3, // + 0x84BB,0xE4E8, // + 0x84BC,0x9193, // + 0x84BF,0xE4E4, // + 0x84C1,0xE4EB, // + 0x84C4,0x927E, // + 0x84C6,0xE4EC, // + 0x84C9,0x9775, // + 0x84CA,0xE4E1, // + 0x84CB,0x8A57, // + 0x84CD,0xE4E7, // + 0x84D0,0xE4EA, // + 0x84D1,0x96AA, // + 0x84D6,0xE4ED, // + 0x84D9,0xE4E6, // + 0x84DA,0xE4E9, // + 0x84EC,0x9648, // + 0x84EE,0x9840, // + 0x84F4,0xE4F1, // + 0x84FC,0xE4F8, // + 0x84FF,0xE4F0, // + 0x8500,0x8EC1, // + 0x8506,0xE4CF, // + 0x8511,0x95CC, // + 0x8513,0x96A0, // + 0x8514,0xE4F7, // + 0x8515,0xE4F6, // + 0x8517,0xE4F2, // + 0x8518,0xE4F3, // + 0x851A,0x8955, // + 0x851F,0xE4F5, // + 0x8521,0xE4EF, // + 0x8526,0x92D3, // + 0x852C,0xE4F4, // + 0x852D,0x88FC, // + 0x8535,0x91A0, // + 0x853D,0x95C1, // + 0x8540,0xE4F9, // + 0x8541,0xE540, // + 0x8543,0x94D7, // + 0x8548,0xE4FC, // + 0x8549,0x8FD4, // + 0x854A,0x8EC7, // + 0x854B,0xE542, // + 0x854E,0x8BBC, // + 0x8555,0xE543, // + 0x8557,0x9599, // + 0x8558,0xE4FB, // + 0x855A,0xE4D4, // + 0x8563,0xE4FA, // + 0x8568,0x986E, // + 0x8569,0x93A0, // + 0x856A,0x9593, // + 0x856D,0xE54A, // + 0x8577,0xE550, // + 0x857E,0xE551, // + 0x8580,0xE544, // + 0x8584,0x9496, // + 0x8587,0xE54E, // + 0x8588,0xE546, // + 0x858A,0xE548, // + 0x8590,0xE552, // + 0x8591,0xE547, // + 0x8594,0xE54B, // + 0x8597,0x8992, // + 0x8599,0x93E3, // + 0x859B,0xE54C, // + 0x859C,0xE54F, // + 0x85A4,0xE545, // + 0x85A6,0x9145, // + 0x85A8,0xE549, // + 0x85A9,0x8E46, // + 0x85AA,0x9064, // + 0x85AB,0x8C4F, // + 0x85AC,0x96F2, // + 0x85AE,0x96F7, // + 0x85AF,0x8F92, // + 0x85B9,0xE556, // + 0x85BA,0xE554, // + 0x85C1,0x986D, // + 0x85C9,0xE553, // + 0x85CD,0x9795, // + 0x85CF,0xE555, // + 0x85D0,0xE557, // + 0x85D5,0xE558, // + 0x85DD,0xE559, // + 0x85E4,0x93A1, // + 0x85E5,0xE55A, // + 0x85E9,0x94CB, // + 0x85EA,0xE54D, // + 0x85F7,0x8F93, // + 0x85F9,0xE55C, // + 0x85FA,0xE561, // + 0x85FB,0x9194, // + 0x85FE,0xE560, // + 0x8602,0xE541, // + 0x8606,0xE562, // + 0x8607,0x9168, // + 0x860A,0xE55D, // + 0x860B,0xE55F, // + 0x8613,0xE55E, // + 0x8616,0x9F50, // + 0x8617,0x9F41, // + 0x861A,0xE564, // + 0x8622,0xE563, // + 0x862D,0x9796, // + 0x862F,0xE1BA, // + 0x8630,0xE565, // + 0x863F,0xE566, // + 0x864D,0xE567, // + 0x864E,0x8CD5, // + 0x8650,0x8B73, // + 0x8654,0xE569, // + 0x8655,0x997C, // + 0x865A,0x8B95, // + 0x865C,0x97B8, // + 0x865E,0x8BF1, // + 0x865F,0xE56A, // + 0x8667,0xE56B, // + 0x866B,0x928E, // + 0x8671,0xE56C, // + 0x8679,0x93F8, // + 0x867B,0x88B8, // + 0x868A,0x89E1, // + 0x868B,0xE571, // + 0x868C,0xE572, // + 0x8693,0xE56D, // + 0x8695,0x8E5C, // + 0x86A3,0xE56E, // + 0x86A4,0x9461, // + 0x86A9,0xE56F, // + 0x86AA,0xE570, // + 0x86AB,0xE57A, // + 0x86AF,0xE574, // + 0x86B0,0xE577, // + 0x86B6,0xE573, // + 0x86C4,0xE575, // + 0x86C6,0xE576, // + 0x86C7,0x8ED6, // + 0x86C9,0xE578, // + 0x86CB,0x9260, // + 0x86CD,0x8C75, // + 0x86CE,0x8A61, // + 0x86D4,0xE57B, // + 0x86D9,0x8A5E, // + 0x86DB,0xE581, // + 0x86DE,0xE57C, // + 0x86DF,0xE580, // + 0x86E4,0x94B8, // + 0x86E9,0xE57D, // + 0x86EC,0xE57E, // + 0x86ED,0x9567, // + 0x86EE,0x94D8, // + 0x86EF,0xE582, // + 0x86F8,0x91FB, // + 0x86F9,0xE58C, // + 0x86FB,0xE588, // + 0x86FE,0x89E9, // + 0x8700,0xE586, // + 0x8702,0x9649, // + 0x8703,0xE587, // + 0x8706,0xE584, // + 0x8708,0xE585, // + 0x8709,0xE58A, // + 0x870A,0xE58D, // + 0x870D,0xE58B, // + 0x8711,0xE589, // + 0x8712,0xE583, // + 0x8718,0x9277, // + 0x871A,0xE594, // + 0x871C,0x96A8, // + 0x8725,0xE592, // + 0x8729,0xE593, // + 0x8734,0xE58E, // + 0x8737,0xE590, // + 0x873B,0xE591, // + 0x873F,0xE58F, // + 0x8749,0x90E4, // + 0x874B,0x9858, // + 0x874C,0xE598, // + 0x874E,0xE599, // + 0x8753,0xE59F, // + 0x8755,0x9049, // + 0x8757,0xE59B, // + 0x8759,0xE59E, // + 0x875F,0xE596, // + 0x8760,0xE595, // + 0x8763,0xE5A0, // + 0x8766,0x89DA, // + 0x8768,0xE59C, // + 0x876A,0xE5A1, // + 0x876E,0xE59D, // + 0x8774,0xE59A, // + 0x8776,0x92B1, // + 0x8778,0xE597, // + 0x877F,0x9488, // + 0x8782,0xE5A5, // + 0x878D,0x975A, // + 0x879F,0xE5A4, // + 0x87A2,0xE5A3, // + 0x87AB,0xE5AC, // + 0x87AF,0xE5A6, // + 0x87B3,0xE5AE, // + 0x87BA,0x9786, // + 0x87BB,0xE5B1, // + 0x87BD,0xE5A8, // + 0x87C0,0xE5A9, // + 0x87C4,0xE5AD, // + 0x87C6,0xE5B0, // + 0x87C7,0xE5AF, // + 0x87CB,0xE5A7, // + 0x87D0,0xE5AA, // + 0x87D2,0xE5BB, // + 0x87E0,0xE5B4, // + 0x87EF,0xE5B2, // + 0x87F2,0xE5B3, // + 0x87F6,0xE5B8, // + 0x87F7,0xE5B9, // + 0x87F9,0x8A49, // + 0x87FB,0x8B61, // + 0x87FE,0xE5B7, // + 0x8805,0xE5A2, // + 0x880D,0xE5B6, // + 0x880E,0xE5BA, // + 0x880F,0xE5B5, // + 0x8811,0xE5BC, // + 0x8815,0xE5BE, // + 0x8816,0xE5BD, // + 0x8821,0xE5C0, // + 0x8822,0xE5BF, // + 0x8823,0xE579, // + 0x8827,0xE5C4, // + 0x8831,0xE5C1, // + 0x8836,0xE5C2, // + 0x8839,0xE5C3, // + 0x883B,0xE5C5, // + 0x8840,0x8C8C, // + 0x8842,0xE5C7, // + 0x8844,0xE5C6, // + 0x8846,0x8F4F, // + 0x884C,0x8D73, // + 0x884D,0x9FA5, // + 0x8852,0xE5C8, // + 0x8853,0x8F70, // + 0x8857,0x8A58, // + 0x8859,0xE5C9, // + 0x885B,0x8971, // + 0x885D,0x8FD5, // + 0x885E,0xE5CA, // + 0x8861,0x8D74, // + 0x8862,0xE5CB, // + 0x8863,0x88DF, // + 0x8868,0x955C, // + 0x886B,0xE5CC, // + 0x8870,0x908A, // + 0x8872,0xE5D3, // + 0x8875,0xE5D0, // + 0x8877,0x928F, // + 0x887D,0xE5D1, // + 0x887E,0xE5CE, // + 0x887F,0x8BDC, // + 0x8881,0xE5CD, // + 0x8882,0xE5D4, // + 0x8888,0x8C55, // + 0x888B,0x91DC, // + 0x888D,0xE5DA, // + 0x8892,0xE5D6, // + 0x8896,0x91B3, // + 0x8897,0xE5D5, // + 0x8899,0xE5D8, // + 0x889E,0xE5CF, // + 0x88A2,0xE5D9, // + 0x88A4,0xE5DB, // + 0x88AB,0x94ED, // + 0x88AE,0xE5D7, // + 0x88B0,0xE5DC, // + 0x88B1,0xE5DE, // + 0x88B4,0x8CD1, // + 0x88B5,0xE5D2, // + 0x88B7,0x88BF, // + 0x88BF,0xE5DD, // + 0x88C1,0x8DD9, // + 0x88C2,0x97F4, // + 0x88C3,0xE5DF, // + 0x88C4,0xE5E0, // + 0x88C5,0x9195, // + 0x88CF,0x97A0, // + 0x88D4,0xE5E1, // + 0x88D5,0x9754, // + 0x88D8,0xE5E2, // + 0x88D9,0xE5E3, // + 0x88DC,0x95E2, // + 0x88DD,0xE5E4, // + 0x88DF,0x8DBE, // + 0x88E1,0x97A1, // + 0x88E8,0xE5E9, // + 0x88F2,0xE5EA, // + 0x88F3,0x8FD6, // + 0x88F4,0xE5E8, // + 0x88F8,0x9787, // + 0x88F9,0xE5E5, // + 0x88FC,0xE5E7, // + 0x88FD,0x90BB, // + 0x88FE,0x909E, // + 0x8902,0xE5E6, // + 0x8904,0xE5EB, // + 0x8907,0x95A1, // + 0x890A,0xE5ED, // + 0x890C,0xE5EC, // + 0x8910,0x8A8C, // + 0x8912,0x964A, // + 0x8913,0xE5EE, // + 0x891D,0xE5FA, // + 0x891E,0xE5F0, // + 0x8925,0xE5F1, // + 0x892A,0xE5F2, // + 0x892B,0xE5F3, // + 0x8936,0xE5F7, // + 0x8938,0xE5F8, // + 0x893B,0xE5F6, // + 0x8941,0xE5F4, // + 0x8943,0xE5EF, // + 0x8944,0xE5F5, // + 0x894C,0xE5F9, // + 0x894D,0xE8B5, // + 0x8956,0x89A6, // + 0x895E,0xE5FC, // + 0x895F,0x8BDD, // + 0x8960,0xE5FB, // + 0x8964,0xE641, // + 0x8966,0xE640, // + 0x896A,0xE643, // + 0x896D,0xE642, // + 0x896F,0xE644, // + 0x8972,0x8F50, // + 0x8974,0xE645, // + 0x8977,0xE646, // + 0x897E,0xE647, // + 0x897F,0x90BC, // + 0x8981,0x9776, // + 0x8983,0xE648, // + 0x8986,0x95A2, // + 0x8987,0x9465, // + 0x8988,0xE649, // + 0x898A,0xE64A, // + 0x898B,0x8CA9, // + 0x898F,0x8B4B, // + 0x8993,0xE64B, // + 0x8996,0x8E8B, // + 0x8997,0x9460, // + 0x8998,0xE64C, // + 0x899A,0x8A6F, // + 0x89A1,0xE64D, // + 0x89A6,0xE64F, // + 0x89A7,0x9797, // + 0x89A9,0xE64E, // + 0x89AA,0x9065, // + 0x89AC,0xE650, // + 0x89AF,0xE651, // + 0x89B2,0xE652, // + 0x89B3,0x8ACF, // + 0x89BA,0xE653, // + 0x89BD,0xE654, // + 0x89BF,0xE655, // + 0x89C0,0xE656, // + 0x89D2,0x8A70, // + 0x89DA,0xE657, // + 0x89DC,0xE658, // + 0x89DD,0xE659, // + 0x89E3,0x89F0, // + 0x89E6,0x9047, // + 0x89E7,0xE65A, // + 0x89F8,0xE65C, // + 0x8A00,0x8CBE, // + 0x8A02,0x92F9, // + 0x8A03,0xE65D, // + 0x8A08,0x8C76, // + 0x8A0A,0x9075, // + 0x8A0C,0xE660, // + 0x8A0E,0x93A2, // + 0x8A10,0xE65F, // + 0x8A13,0x8C50, // + 0x8A16,0xE65E, // + 0x8A17,0x91F5, // + 0x8A18,0x8B4C, // + 0x8A1B,0xE661, // + 0x8A1D,0xE662, // + 0x8A1F,0x8FD7, // + 0x8A23,0x8C8D, // + 0x8A25,0xE663, // + 0x8A2A,0x964B, // + 0x8A2D,0x90DD, // + 0x8A31,0x8B96, // + 0x8A33,0x96F3, // + 0x8A34,0x9169, // + 0x8A36,0xE664, // + 0x8A3A,0x9066, // + 0x8A3B,0x9290, // + 0x8A3C,0x8FD8, // + 0x8A41,0xE665, // + 0x8A46,0xE668, // + 0x8A48,0xE669, // + 0x8A50,0x8DBC, // + 0x8A51,0x91C0, // + 0x8A52,0xE667, // + 0x8A54,0x8FD9, // + 0x8A55,0x955D, // + 0x8A5B,0xE666, // + 0x8A5E,0x8E8C, // + 0x8A60,0x8972, // + 0x8A62,0xE66D, // + 0x8A63,0x8C77, // + 0x8A66,0x8E8E, // + 0x8A69,0x8E8D, // + 0x8A6B,0x986C, // + 0x8A6C,0xE66C, // + 0x8A6D,0xE66B, // + 0x8A6E,0x9146, // + 0x8A70,0x8B6C, // + 0x8A71,0x9862, // + 0x8A72,0x8A59, // + 0x8A73,0x8FDA, // + 0x8A7C,0xE66A, // + 0x8A82,0xE66F, // + 0x8A84,0xE670, // + 0x8A85,0xE66E, // + 0x8A87,0x8CD6, // + 0x8A89,0x975F, // + 0x8A8C,0x8E8F, // + 0x8A8D,0x9446, // + 0x8A91,0xE673, // + 0x8A93,0x90BE, // + 0x8A95,0x9261, // + 0x8A98,0x9755, // + 0x8A9A,0xE676, // + 0x8A9E,0x8CEA, // + 0x8AA0,0x90BD, // + 0x8AA1,0xE672, // + 0x8AA3,0xE677, // + 0x8AA4,0x8CEB, // + 0x8AA5,0xE674, // + 0x8AA6,0xE675, // + 0x8AA8,0xE671, // + 0x8AAC,0x90E0, // + 0x8AAD,0x93C7, // + 0x8AB0,0x924E, // + 0x8AB2,0x89DB, // + 0x8AB9,0x94EE, // + 0x8ABC,0x8B62, // + 0x8ABF,0x92B2, // + 0x8AC2,0xE67A, // + 0x8AC4,0xE678, // + 0x8AC7,0x926B, // + 0x8ACB,0x90BF, // + 0x8ACC,0x8AD0, // + 0x8ACD,0xE679, // + 0x8ACF,0x907A, // + 0x8AD2,0x97C8, // + 0x8AD6,0x985F, // + 0x8ADA,0xE67B, // + 0x8ADB,0xE687, // + 0x8ADC,0x92B3, // + 0x8ADE,0xE686, // + 0x8AE0,0xE683, // + 0x8AE1,0xE68B, // + 0x8AE2,0xE684, // + 0x8AE4,0xE680, // + 0x8AE6,0x92FA, // + 0x8AE7,0xE67E, // + 0x8AEB,0xE67C, // + 0x8AED,0x9740, // + 0x8AEE,0x8E90, // + 0x8AF1,0xE681, // + 0x8AF3,0xE67D, // + 0x8AF7,0xE685, // + 0x8AF8,0x8F94, // + 0x8AFA,0x8CBF, // + 0x8AFE,0x91F8, // + 0x8B00,0x9664, // + 0x8B01,0x8979, // + 0x8B02,0x88E0, // + 0x8B04,0x93A3, // + 0x8B07,0xE689, // + 0x8B0C,0xE688, // + 0x8B0E,0x93E4, // + 0x8B10,0xE68D, // + 0x8B14,0xE682, // + 0x8B16,0xE68C, // + 0x8B17,0xE68E, // + 0x8B19,0x8CAA, // + 0x8B1A,0xE68A, // + 0x8B1B,0x8D75, // + 0x8B1D,0x8ED3, // + 0x8B20,0xE68F, // + 0x8B21,0x9777, // + 0x8B26,0xE692, // + 0x8B28,0xE695, // + 0x8B2B,0xE693, // + 0x8B2C,0x9554, // + 0x8B33,0xE690, // + 0x8B39,0x8BDE, // + 0x8B3E,0xE694, // + 0x8B41,0xE696, // + 0x8B49,0xE69A, // + 0x8B4C,0xE697, // + 0x8B4E,0xE699, // + 0x8B4F,0xE698, // + 0x8B56,0xE69B, // + 0x8B58,0x8EAF, // + 0x8B5A,0xE69D, // + 0x8B5B,0xE69C, // + 0x8B5C,0x9588, // + 0x8B5F,0xE69F, // + 0x8B66,0x8C78, // + 0x8B6B,0xE69E, // + 0x8B6C,0xE6A0, // + 0x8B6F,0xE6A1, // + 0x8B70,0x8B63, // + 0x8B71,0xE3BF, // + 0x8B72,0x8FF7, // + 0x8B74,0xE6A2, // + 0x8B77,0x8CEC, // + 0x8B7D,0xE6A3, // + 0x8B80,0xE6A4, // + 0x8B83,0x8E5D, // + 0x8B8A,0x9DCC, // + 0x8B8C,0xE6A5, // + 0x8B8E,0xE6A6, // + 0x8B90,0x8F51, // + 0x8B92,0xE6A7, // + 0x8B93,0xE6A8, // + 0x8B96,0xE6A9, // + 0x8B99,0xE6AA, // + 0x8B9A,0xE6AB, // + 0x8C37,0x924A, // + 0x8C3A,0xE6AC, // + 0x8C3F,0xE6AE, // + 0x8C41,0xE6AD, // + 0x8C46,0x93A4, // + 0x8C48,0xE6AF, // + 0x8C4A,0x964C, // + 0x8C4C,0xE6B0, // + 0x8C4E,0xE6B1, // + 0x8C50,0xE6B2, // + 0x8C55,0xE6B3, // + 0x8C5A,0x93D8, // + 0x8C61,0x8FDB, // + 0x8C62,0xE6B4, // + 0x8C6A,0x8D8B, // + 0x8C6B,0x98AC, // + 0x8C6C,0xE6B5, // + 0x8C78,0xE6B6, // + 0x8C79,0x955E, // + 0x8C7A,0xE6B7, // + 0x8C7C,0xE6BF, // + 0x8C82,0xE6B8, // + 0x8C85,0xE6BA, // + 0x8C89,0xE6B9, // + 0x8C8A,0xE6BB, // + 0x8C8C,0x9665, // + 0x8C8D,0xE6BC, // + 0x8C8E,0xE6BD, // + 0x8C94,0xE6BE, // + 0x8C98,0xE6C0, // + 0x8C9D,0x8A4C, // + 0x8C9E,0x92E5, // + 0x8CA0,0x9589, // + 0x8CA1,0x8DE0, // + 0x8CA2,0x8D76, // + 0x8CA7,0x956E, // + 0x8CA8,0x89DD, // + 0x8CA9,0x94CC, // + 0x8CAA,0xE6C3, // + 0x8CAB,0x8AD1, // + 0x8CAC,0x90D3, // + 0x8CAD,0xE6C2, // + 0x8CAE,0xE6C7, // + 0x8CAF,0x9299, // + 0x8CB0,0x96E1, // + 0x8CB2,0xE6C5, // + 0x8CB3,0xE6C6, // + 0x8CB4,0x8B4D, // + 0x8CB6,0xE6C8, // + 0x8CB7,0x9483, // + 0x8CB8,0x91DD, // + 0x8CBB,0x94EF, // + 0x8CBC,0x935C, // + 0x8CBD,0xE6C4, // + 0x8CBF,0x9666, // + 0x8CC0,0x89EA, // + 0x8CC1,0xE6CA, // + 0x8CC2,0x9847, // + 0x8CC3,0x92C0, // + 0x8CC4,0x9864, // + 0x8CC7,0x8E91, // + 0x8CC8,0xE6C9, // + 0x8CCA,0x91AF, // + 0x8CCD,0xE6DA, // + 0x8CCE,0x9147, // + 0x8CD1,0x93F6, // + 0x8CD3,0x956F, // + 0x8CDA,0xE6CD, // + 0x8CDB,0x8E5E, // + 0x8CDC,0x8E92, // + 0x8CDE,0x8FDC, // + 0x8CE0,0x9485, // + 0x8CE2,0x8CAB, // + 0x8CE3,0xE6CC, // + 0x8CE4,0xE6CB, // + 0x8CE6,0x958A, // + 0x8CEA,0x8EBF, // + 0x8CED,0x9371, // + 0x8CFA,0xE6CF, // + 0x8CFB,0xE6D0, // + 0x8CFC,0x8D77, // + 0x8CFD,0xE6CE, // + 0x8D04,0xE6D1, // + 0x8D05,0xE6D2, // + 0x8D07,0xE6D4, // + 0x8D08,0x91A1, // + 0x8D0A,0xE6D3, // + 0x8D0B,0x8AE4, // + 0x8D0D,0xE6D6, // + 0x8D0F,0xE6D5, // + 0x8D10,0xE6D7, // + 0x8D13,0xE6D9, // + 0x8D14,0xE6DB, // + 0x8D16,0xE6DC, // + 0x8D64,0x90D4, // + 0x8D66,0x8ECD, // + 0x8D67,0xE6DD, // + 0x8D6B,0x8A71, // + 0x8D6D,0xE6DE, // + 0x8D70,0x9196, // + 0x8D71,0xE6DF, // + 0x8D73,0xE6E0, // + 0x8D74,0x958B, // + 0x8D77,0x8B4E, // + 0x8D81,0xE6E1, // + 0x8D85,0x92B4, // + 0x8D8A,0x897A, // + 0x8D99,0xE6E2, // + 0x8DA3,0x8EEF, // + 0x8DA8,0x9096, // + 0x8DB3,0x91AB, // + 0x8DBA,0xE6E5, // + 0x8DBE,0xE6E4, // + 0x8DC2,0xE6E3, // + 0x8DCB,0xE6EB, // + 0x8DCC,0xE6E9, // + 0x8DCF,0xE6E6, // + 0x8DD6,0xE6E8, // + 0x8DDA,0xE6E7, // + 0x8DDB,0xE6EA, // + 0x8DDD,0x8B97, // + 0x8DDF,0xE6EE, // + 0x8DE1,0x90D5, // + 0x8DE3,0xE6EF, // + 0x8DE8,0x8CD7, // + 0x8DEA,0xE6EC, // + 0x8DEB,0xE6ED, // + 0x8DEF,0x9848, // + 0x8DF3,0x92B5, // + 0x8DF5,0x9148, // + 0x8DFC,0xE6F0, // + 0x8DFF,0xE6F3, // + 0x8E08,0xE6F1, // + 0x8E09,0xE6F2, // + 0x8E0A,0x9778, // + 0x8E0F,0x93A5, // + 0x8E10,0xE6F6, // + 0x8E1D,0xE6F4, // + 0x8E1E,0xE6F5, // + 0x8E1F,0xE6F7, // + 0x8E2A,0xE748, // + 0x8E30,0xE6FA, // + 0x8E34,0xE6FB, // + 0x8E35,0xE6F9, // + 0x8E42,0xE6F8, // + 0x8E44,0x92FB, // + 0x8E47,0xE740, // + 0x8E48,0xE744, // + 0x8E49,0xE741, // + 0x8E4A,0xE6FC, // + 0x8E4C,0xE742, // + 0x8E50,0xE743, // + 0x8E55,0xE74A, // + 0x8E59,0xE745, // + 0x8E5F,0x90D6, // + 0x8E60,0xE747, // + 0x8E63,0xE749, // + 0x8E64,0xE746, // + 0x8E72,0xE74C, // + 0x8E74,0x8F52, // + 0x8E76,0xE74B, // + 0x8E7C,0xE74D, // + 0x8E81,0xE74E, // + 0x8E84,0xE751, // + 0x8E85,0xE750, // + 0x8E87,0xE74F, // + 0x8E8A,0xE753, // + 0x8E8B,0xE752, // + 0x8E8D,0x96F4, // + 0x8E91,0xE755, // + 0x8E93,0xE754, // + 0x8E94,0xE756, // + 0x8E99,0xE757, // + 0x8EA1,0xE759, // + 0x8EAA,0xE758, // + 0x8EAB,0x9067, // + 0x8EAC,0xE75A, // + 0x8EAF,0x8BEB, // + 0x8EB1,0xE75D, // + 0x8EBE,0xE75E, // + 0x8EC5,0xE75F, // + 0x8EC6,0xE75C, // + 0x8EC8,0xE760, // + 0x8ECA,0x8ED4, // + 0x8ECB,0xE761, // + 0x8ECC,0x8B4F, // + 0x8ECD,0x8C52, // + 0x8ED2,0x8CAC, // + 0x8EDB,0xE762, // + 0x8EDF,0x93EE, // + 0x8EE2,0x935D, // + 0x8EE3,0xE763, // + 0x8EEB,0xE766, // + 0x8EF8,0x8EB2, // + 0x8EFB,0xE765, // + 0x8EFC,0xE764, // + 0x8EFD,0x8C79, // + 0x8EFE,0xE767, // + 0x8F03,0x8A72, // + 0x8F05,0xE769, // + 0x8F09,0x8DDA, // + 0x8F0A,0xE768, // + 0x8F0C,0xE771, // + 0x8F12,0xE76B, // + 0x8F13,0xE76D, // + 0x8F14,0x95E3, // + 0x8F15,0xE76A, // + 0x8F19,0xE76C, // + 0x8F1B,0xE770, // + 0x8F1C,0xE76E, // + 0x8F1D,0x8B50, // + 0x8F1F,0xE76F, // + 0x8F26,0xE772, // + 0x8F29,0x9479, // + 0x8F2A,0x97D6, // + 0x8F2F,0x8F53, // + 0x8F33,0xE773, // + 0x8F38,0x9741, // + 0x8F39,0xE775, // + 0x8F3B,0xE774, // + 0x8F3E,0xE778, // + 0x8F3F,0x9760, // + 0x8F42,0xE777, // + 0x8F44,0x8A8D, // + 0x8F45,0xE776, // + 0x8F46,0xE77B, // + 0x8F49,0xE77A, // + 0x8F4C,0xE779, // + 0x8F4D,0x9351, // + 0x8F4E,0xE77C, // + 0x8F57,0xE77D, // + 0x8F5C,0xE77E, // + 0x8F5F,0x8D8C, // + 0x8F61,0x8C44, // + 0x8F62,0xE780, // + 0x8F63,0xE781, // + 0x8F64,0xE782, // + 0x8F9B,0x9068, // + 0x8F9C,0xE783, // + 0x8F9E,0x8EAB, // + 0x8F9F,0xE784, // + 0x8FA3,0xE785, // + 0x8FA7,0x999F, // + 0x8FA8,0x999E, // + 0x8FAD,0xE786, // + 0x8FAE,0xE390, // + 0x8FAF,0xE787, // + 0x8FB0,0x9243, // + 0x8FB1,0x904A, // + 0x8FB2,0x945F, // + 0x8FB7,0xE788, // + 0x8FBA,0x95D3, // + 0x8FBB,0x92D2, // + 0x8FBC,0x8D9E, // + 0x8FBF,0x9248, // + 0x8FC2,0x8949, // + 0x8FC4,0x9698, // + 0x8FC5,0x9076, // + 0x8FCE,0x8C7D, // + 0x8FD1,0x8BDF, // + 0x8FD4,0x95D4, // + 0x8FDA,0xE789, // + 0x8FE2,0xE78B, // + 0x8FE5,0xE78A, // + 0x8FE6,0x89DE, // + 0x8FE9,0x93F4, // + 0x8FEA,0xE78C, // + 0x8FEB,0x9497, // + 0x8FED,0x9352, // + 0x8FEF,0xE78D, // + 0x8FF0,0x8F71, // + 0x8FF4,0xE78F, // + 0x8FF7,0x96C0, // + 0x8FF8,0xE79E, // + 0x8FF9,0xE791, // + 0x8FFA,0xE792, // + 0x8FFD,0x92C7, // + 0x9000,0x91DE, // + 0x9001,0x9197, // + 0x9003,0x93A6, // + 0x9005,0xE790, // + 0x9006,0x8B74, // + 0x900B,0xE799, // + 0x900D,0xE796, // + 0x900E,0xE7A3, // + 0x900F,0x93A7, // + 0x9010,0x9280, // + 0x9011,0xE793, // + 0x9013,0x92FC, // + 0x9014,0x9372, // + 0x9015,0xE794, // + 0x9016,0xE798, // + 0x9017,0x9080, // + 0x9019,0x9487, // + 0x901A,0x92CA, // + 0x901D,0x90C0, // + 0x901E,0xE797, // + 0x901F,0x91AC, // + 0x9020,0x91A2, // + 0x9021,0xE795, // + 0x9022,0x88A7, // + 0x9023,0x9841, // + 0x9027,0xE79A, // + 0x902E,0x91DF, // + 0x9031,0x8F54, // + 0x9032,0x9069, // + 0x9035,0xE79C, // + 0x9036,0xE79B, // + 0x9038,0x88ED, // + 0x9039,0xE79D, // + 0x903C,0x954E, // + 0x903E,0xE7A5, // + 0x9041,0x93D9, // + 0x9042,0x908B, // + 0x9045,0x9278, // + 0x9047,0x8BF6, // + 0x9049,0xE7A4, // + 0x904A,0x9756, // + 0x904B,0x895E, // + 0x904D,0x95D5, // + 0x904E,0x89DF, // + 0x904F,0xE79F, // + 0x9050,0xE7A0, // + 0x9051,0xE7A1, // + 0x9052,0xE7A2, // + 0x9053,0x93B9, // + 0x9054,0x9242, // + 0x9055,0x88E1, // + 0x9056,0xE7A6, // + 0x9058,0xE7A7, // + 0x9059,0xEAA1, // + 0x905C,0x91BB, // + 0x905E,0xE7A8, // + 0x9060,0x8993, // + 0x9061,0x916B, // + 0x9063,0x8CAD, // + 0x9065,0x9779, // + 0x9068,0xE7A9, // + 0x9069,0x934B, // + 0x906D,0x9198, // + 0x906E,0x8ED5, // + 0x906F,0xE7AA, // + 0x9072,0xE7AD, // + 0x9075,0x8F85, // + 0x9076,0xE7AB, // + 0x9077,0x914A, // + 0x9078,0x9149, // + 0x907A,0x88E2, // + 0x907C,0x97C9, // + 0x907D,0xE7AF, // + 0x907F,0x94F0, // + 0x9080,0xE7B1, // + 0x9081,0xE7B0, // + 0x9082,0xE7AE, // + 0x9083,0xE284, // + 0x9084,0x8AD2, // + 0x9087,0xE78E, // + 0x9089,0xE7B3, // + 0x908A,0xE7B2, // + 0x908F,0xE7B4, // + 0x9091,0x9757, // + 0x90A3,0x93DF, // + 0x90A6,0x964D, // + 0x90A8,0xE7B5, // + 0x90AA,0x8ED7, // + 0x90AF,0xE7B6, // + 0x90B1,0xE7B7, // + 0x90B5,0xE7B8, // + 0x90B8,0x9340, // + 0x90C1,0x88E8, // + 0x90CA,0x8D78, // + 0x90CE,0x9859, // + 0x90DB,0xE7BC, // + 0x90E1,0x8C53, // + 0x90E2,0xE7B9, // + 0x90E4,0xE7BA, // + 0x90E8,0x9594, // + 0x90ED,0x8A73, // + 0x90F5,0x9758, // + 0x90F7,0x8BBD, // + 0x90FD,0x9373, // + 0x9102,0xE7BD, // + 0x9112,0xE7BE, // + 0x9119,0xE7BF, // + 0x912D,0x9341, // + 0x9130,0xE7C1, // + 0x9132,0xE7C0, // + 0x9149,0x93D1, // + 0x914A,0xE7C2, // + 0x914B,0x8F55, // + 0x914C,0x8EDE, // + 0x914D,0x947A, // + 0x914E,0x9291, // + 0x9152,0x8EF0, // + 0x9154,0x908C, // + 0x9156,0xE7C3, // + 0x9158,0xE7C4, // + 0x9162,0x907C, // + 0x9163,0xE7C5, // + 0x9165,0xE7C6, // + 0x9169,0xE7C7, // + 0x916A,0x978F, // + 0x916C,0x8F56, // + 0x9172,0xE7C9, // + 0x9173,0xE7C8, // + 0x9175,0x8D79, // + 0x9177,0x8D93, // + 0x9178,0x8E5F, // + 0x9182,0xE7CC, // + 0x9187,0x8F86, // + 0x9189,0xE7CB, // + 0x918B,0xE7CA, // + 0x918D,0x91E7, // + 0x9190,0x8CED, // + 0x9192,0x90C1, // + 0x9197,0x94AE, // + 0x919C,0x8F58, // + 0x91A2,0xE7CD, // + 0x91A4,0x8FDD, // + 0x91AA,0xE7D0, // + 0x91AB,0xE7CE, // + 0x91AF,0xE7CF, // + 0x91B4,0xE7D2, // + 0x91B5,0xE7D1, // + 0x91B8,0x8FF8, // + 0x91BA,0xE7D3, // + 0x91C0,0xE7D4, // + 0x91C1,0xE7D5, // + 0x91C6,0x94CE, // + 0x91C7,0x8DD1, // + 0x91C8,0x8EDF, // + 0x91C9,0xE7D6, // + 0x91CB,0xE7D7, // + 0x91CC,0x97A2, // + 0x91CD,0x8F64, // + 0x91CE,0x96EC, // + 0x91CF,0x97CA, // + 0x91D0,0xE7D8, // + 0x91D1,0x8BE0, // + 0x91D6,0xE7D9, // + 0x91D8,0x9342, // + 0x91DB,0xE7DC, // + 0x91DC,0x8A98, // + 0x91DD,0x906A, // + 0x91DF,0xE7DA, // + 0x91E1,0xE7DB, // + 0x91E3,0x92DE, // + 0x91E6,0x9674, // + 0x91E7,0x8BFA, // + 0x91F5,0xE7DE, // + 0x91F6,0xE7DF, // + 0x91FC,0xE7DD, // + 0x91FF,0xE7E1, // + 0x920D,0x93DD, // + 0x920E,0x8A62, // + 0x9211,0xE7E5, // + 0x9214,0xE7E2, // + 0x9215,0xE7E4, // + 0x921E,0xE7E0, // + 0x9229,0xE86E, // + 0x922C,0xE7E3, // + 0x9234,0x97E9, // + 0x9237,0x8CD8, // + 0x923F,0xE7ED, // + 0x9244,0x9353, // + 0x9245,0xE7E8, // + 0x9248,0xE7EB, // + 0x9249,0xE7E9, // + 0x924B,0xE7EE, // + 0x9250,0xE7EF, // + 0x9257,0xE7E7, // + 0x925A,0xE7F4, // + 0x925B,0x8994, // + 0x925E,0xE7E6, // + 0x9262,0x94AB, // + 0x9264,0xE7EA, // + 0x9266,0x8FDE, // + 0x9271,0x8D7A, // + 0x927E,0x9667, // + 0x9280,0x8BE2, // + 0x9283,0x8F65, // + 0x9285,0x93BA, // + 0x9291,0x914C, // + 0x9293,0xE7F2, // + 0x9295,0xE7EC, // + 0x9296,0xE7F1, // + 0x9298,0x96C1, // + 0x929A,0x92B6, // + 0x929B,0xE7F3, // + 0x929C,0xE7F0, // + 0x92AD,0x914B, // + 0x92B7,0xE7F7, // + 0x92B9,0xE7F6, // + 0x92CF,0xE7F5, // + 0x92D2,0x964E, // + 0x92E4,0x8F9B, // + 0x92E9,0xE7F8, // + 0x92EA,0x95DD, // + 0x92ED,0x8973, // + 0x92F2,0x9565, // + 0x92F3,0x9292, // + 0x92F8,0x8B98, // + 0x92FA,0xE7FA, // + 0x92FC,0x8D7C, // + 0x9306,0x8E4B, // + 0x930F,0xE7F9, // + 0x9310,0x908D, // + 0x9318,0x908E, // + 0x9319,0xE840, // + 0x931A,0xE842, // + 0x9320,0x8FF9, // + 0x9322,0xE841, // + 0x9323,0xE843, // + 0x9326,0x8BD1, // + 0x9328,0x9564, // + 0x932B,0x8EE0, // + 0x932C,0x9842, // + 0x932E,0xE7FC, // + 0x932F,0x8DF6, // + 0x9332,0x985E, // + 0x9335,0xE845, // + 0x933A,0xE844, // + 0x933B,0xE846, // + 0x9344,0xE7FB, // + 0x934B,0x93E7, // + 0x934D,0x9374, // + 0x9354,0x92D5, // + 0x9356,0xE84B, // + 0x935B,0x9262, // + 0x935C,0xE847, // + 0x9360,0xE848, // + 0x936C,0x8C4C, // + 0x936E,0xE84A, // + 0x9375,0x8CAE, // + 0x937C,0xE849, // + 0x937E,0x8FDF, // + 0x938C,0x8A99, // + 0x9394,0xE84F, // + 0x9396,0x8DBD, // + 0x9397,0x9199, // + 0x939A,0x92C8, // + 0x93A7,0x8A5A, // + 0x93AC,0xE84D, // + 0x93AD,0xE84E, // + 0x93AE,0x92C1, // + 0x93B0,0xE84C, // + 0x93B9,0xE850, // + 0x93C3,0xE856, // + 0x93C8,0xE859, // + 0x93D0,0xE858, // + 0x93D1,0x934C, // + 0x93D6,0xE851, // + 0x93D7,0xE852, // + 0x93D8,0xE855, // + 0x93DD,0xE857, // + 0x93E1,0x8BBE, // + 0x93E4,0xE85A, // + 0x93E5,0xE854, // + 0x93E8,0xE853, // + 0x9403,0xE85E, // + 0x9407,0xE85F, // + 0x9410,0xE860, // + 0x9413,0xE85D, // + 0x9414,0xE85C, // + 0x9418,0x8FE0, // + 0x9419,0x93A8, // + 0x9421,0xE864, // + 0x942B,0xE862, // + 0x9435,0xE863, // + 0x9436,0xE861, // + 0x9438,0x91F6, // + 0x943A,0xE865, // + 0x9441,0xE866, // + 0x9444,0xE868, // + 0x9451,0x8AD3, // + 0x9452,0xE867, // + 0x9453,0x96F8, // + 0x945A,0xE873, // + 0x945B,0xE869, // + 0x945E,0xE86C, // + 0x9460,0xE86A, // + 0x9462,0xE86B, // + 0x946A,0xE86D, // + 0x9470,0xE86F, // + 0x9475,0xE870, // + 0x9477,0xE871, // + 0x947C,0xE874, // + 0x947D,0xE872, // + 0x947E,0xE875, // + 0x947F,0xE877, // + 0x9481,0xE876, // + 0x9577,0x92B7, // + 0x9580,0x96E5, // + 0x9582,0xE878, // + 0x9583,0x914D, // + 0x9587,0xE879, // + 0x9589,0x95C2, // + 0x958A,0xE87A, // + 0x958B,0x8A4A, // + 0x9591,0x8AD5, // + 0x9593,0x8AD4, // + 0x9594,0xE87B, // + 0x9596,0xE87C, // + 0x9598,0xE87D, // + 0x9599,0xE87E, // + 0x95A0,0xE880, // + 0x95A2,0x8AD6, // + 0x95A3,0x8A74, // + 0x95A4,0x8D7D, // + 0x95A5,0x94B4, // + 0x95A7,0xE882, // + 0x95A8,0xE881, // + 0x95AD,0xE883, // + 0x95B2,0x897B, // + 0x95B9,0xE886, // + 0x95BB,0xE885, // + 0x95BC,0xE884, // + 0x95BE,0xE887, // + 0x95C3,0xE88A, // + 0x95C7,0x88C5, // + 0x95CA,0xE888, // + 0x95CC,0xE88C, // + 0x95CD,0xE88B, // + 0x95D4,0xE88E, // + 0x95D5,0xE88D, // + 0x95D6,0xE88F, // + 0x95D8,0x93AC, // + 0x95DC,0xE890, // + 0x95E1,0xE891, // + 0x95E2,0xE893, // + 0x95E5,0xE892, // + 0x961C,0x958C, // + 0x9621,0xE894, // + 0x9628,0xE895, // + 0x962A,0x8DE3, // + 0x962E,0xE896, // + 0x962F,0xE897, // + 0x9632,0x9668, // + 0x963B,0x916A, // + 0x963F,0x88A2, // + 0x9640,0x91C9, // + 0x9642,0xE898, // + 0x9644,0x958D, // + 0x964B,0xE89B, // + 0x964C,0xE899, // + 0x964D,0x8D7E, // + 0x964F,0xE89A, // + 0x9650,0x8CC0, // + 0x965B,0x95C3, // + 0x965C,0xE89D, // + 0x965D,0xE89F, // + 0x965E,0xE89E, // + 0x965F,0xE8A0, // + 0x9662,0x8940, // + 0x9663,0x9077, // + 0x9664,0x8F9C, // + 0x9665,0x8AD7, // + 0x9666,0xE8A1, // + 0x966A,0x9486, // + 0x966C,0xE8A3, // + 0x9670,0x8941, // + 0x9672,0xE8A2, // + 0x9673,0x92C2, // + 0x9675,0x97CB, // + 0x9676,0x93A9, // + 0x9677,0xE89C, // + 0x9678,0x97A4, // + 0x967A,0x8CAF, // + 0x967D,0x977A, // + 0x9685,0x8BF7, // + 0x9686,0x97B2, // + 0x9688,0x8C47, // + 0x968A,0x91E0, // + 0x968B,0xE440, // + 0x968D,0xE8A4, // + 0x968E,0x8A4B, // + 0x968F,0x908F, // + 0x9694,0x8A75, // + 0x9695,0xE8A6, // + 0x9697,0xE8A7, // + 0x9698,0xE8A5, // + 0x9699,0x8C84, // + 0x969B,0x8DDB, // + 0x969C,0x8FE1, // + 0x96A0,0x8942, // + 0x96A3,0x97D7, // + 0x96A7,0xE8A9, // + 0x96A8,0xE7AC, // + 0x96AA,0xE8A8, // + 0x96B0,0xE8AC, // + 0x96B1,0xE8AA, // + 0x96B2,0xE8AB, // + 0x96B4,0xE8AD, // + 0x96B6,0xE8AE, // + 0x96B7,0x97EA, // + 0x96B8,0xE8AF, // + 0x96B9,0xE8B0, // + 0x96BB,0x90C7, // + 0x96BC,0x94B9, // + 0x96C0,0x909D, // + 0x96C1,0x8AE5, // + 0x96C4,0x9759, // + 0x96C5,0x89EB, // + 0x96C6,0x8F57, // + 0x96C7,0x8CD9, // + 0x96C9,0xE8B3, // + 0x96CB,0xE8B2, // + 0x96CC,0x8E93, // + 0x96CD,0xE8B4, // + 0x96CE,0xE8B1, // + 0x96D1,0x8E47, // + 0x96D5,0xE8B8, // + 0x96D6,0xE5AB, // + 0x96D9,0x99D4, // + 0x96DB,0x9097, // + 0x96DC,0xE8B6, // + 0x96E2,0x97A3, // + 0x96E3,0x93EF, // + 0x96E8,0x894A, // + 0x96EA,0x90E1, // + 0x96EB,0x8EB4, // + 0x96F0,0x95B5, // + 0x96F2,0x895F, // + 0x96F6,0x97EB, // + 0x96F7,0x978B, // + 0x96F9,0xE8B9, // + 0x96FB,0x9364, // + 0x9700,0x8EF9, // + 0x9704,0xE8BA, // + 0x9706,0xE8BB, // + 0x9707,0x906B, // + 0x9708,0xE8BC, // + 0x970A,0x97EC, // + 0x970D,0xE8B7, // + 0x970E,0xE8BE, // + 0x970F,0xE8C0, // + 0x9711,0xE8BF, // + 0x9713,0xE8BD, // + 0x9716,0xE8C1, // + 0x9719,0xE8C2, // + 0x971C,0x919A, // + 0x971E,0x89E0, // + 0x9724,0xE8C3, // + 0x9727,0x96B6, // + 0x972A,0xE8C4, // + 0x9730,0xE8C5, // + 0x9732,0x9849, // + 0x9738,0x9E50, // + 0x9739,0xE8C6, // + 0x973D,0xE8C7, // + 0x973E,0xE8C8, // + 0x9742,0xE8CC, // + 0x9744,0xE8C9, // + 0x9746,0xE8CA, // + 0x9748,0xE8CB, // + 0x9749,0xE8CD, // + 0x9752,0x90C2, // + 0x9756,0x96F5, // + 0x9759,0x90C3, // + 0x975C,0xE8CE, // + 0x975E,0x94F1, // + 0x9760,0xE8CF, // + 0x9761,0xEA72, // + 0x9762,0x96CA, // + 0x9764,0xE8D0, // + 0x9766,0xE8D1, // + 0x9768,0xE8D2, // + 0x9769,0x8A76, // + 0x976B,0xE8D4, // + 0x976D,0x9078, // + 0x9771,0xE8D5, // + 0x9774,0x8C43, // + 0x9779,0xE8D6, // + 0x977A,0xE8DA, // + 0x977C,0xE8D8, // + 0x9781,0xE8D9, // + 0x9784,0x8A93, // + 0x9785,0xE8D7, // + 0x9786,0xE8DB, // + 0x978B,0xE8DC, // + 0x978D,0x88C6, // + 0x978F,0xE8DD, // + 0x9790,0xE8DE, // + 0x9798,0x8FE2, // + 0x979C,0xE8DF, // + 0x97A0,0x8B66, // + 0x97A3,0xE8E2, // + 0x97A6,0xE8E1, // + 0x97A8,0xE8E0, // + 0x97AB,0xE691, // + 0x97AD,0x95DA, // + 0x97B3,0xE8E3, // + 0x97B4,0xE8E4, // + 0x97C3,0xE8E5, // + 0x97C6,0xE8E6, // + 0x97C8,0xE8E7, // + 0x97CB,0xE8E8, // + 0x97D3,0x8AD8, // + 0x97DC,0xE8E9, // + 0x97ED,0xE8EA, // + 0x97EE,0x9442, // + 0x97F2,0xE8EC, // + 0x97F3,0x89B9, // + 0x97F5,0xE8EF, // + 0x97F6,0xE8EE, // + 0x97FB,0x8943, // + 0x97FF,0x8BBF, // + 0x9801,0x95C5, // + 0x9802,0x92B8, // + 0x9803,0x8DA0, // + 0x9805,0x8D80, // + 0x9806,0x8F87, // + 0x9808,0x907B, // + 0x980C,0xE8F1, // + 0x980F,0xE8F0, // + 0x9810,0x9761, // + 0x9811,0x8AE6, // + 0x9812,0x94D0, // + 0x9813,0x93DA, // + 0x9817,0x909C, // + 0x9818,0x97CC, // + 0x981A,0x8C7A, // + 0x9821,0xE8F4, // + 0x9824,0xE8F3, // + 0x982C,0x966A, // + 0x982D,0x93AA, // + 0x9834,0x896F, // + 0x9837,0xE8F5, // + 0x9838,0xE8F2, // + 0x983B,0x9570, // + 0x983C,0x978A, // + 0x983D,0xE8F6, // + 0x9846,0xE8F7, // + 0x984B,0xE8F9, // + 0x984C,0x91E8, // + 0x984D,0x8A7A, // + 0x984E,0x8A7B, // + 0x984F,0xE8F8, // + 0x9854,0x8AE7, // + 0x9855,0x8CB0, // + 0x9858,0x8AE8, // + 0x985B,0x935E, // + 0x985E,0x97DE, // + 0x9867,0x8CDA, // + 0x986B,0xE8FA, // + 0x986F,0xE8FB, // + 0x9870,0xE8FC, // + 0x9871,0xE940, // + 0x9873,0xE942, // + 0x9874,0xE941, // + 0x98A8,0x9597, // + 0x98AA,0xE943, // + 0x98AF,0xE944, // + 0x98B1,0xE945, // + 0x98B6,0xE946, // + 0x98C3,0xE948, // + 0x98C4,0xE947, // + 0x98C6,0xE949, // + 0x98DB,0x94F2, // + 0x98DC,0xE3CA, // + 0x98DF,0x9048, // + 0x98E2,0x8B51, // + 0x98E9,0xE94A, // + 0x98EB,0xE94B, // + 0x98ED,0x99AA, // + 0x98EE,0x9F5A, // + 0x98EF,0x94D1, // + 0x98F2,0x88F9, // + 0x98F4,0x88B9, // + 0x98FC,0x8E94, // + 0x98FD,0x964F, // + 0x98FE,0x8FFC, // + 0x9903,0xE94C, // + 0x9905,0x96DD, // + 0x9909,0xE94D, // + 0x990A,0x977B, // + 0x990C,0x8961, // + 0x9910,0x8E60, // + 0x9912,0xE94E, // + 0x9913,0x89EC, // + 0x9914,0xE94F, // + 0x9918,0xE950, // + 0x991D,0xE952, // + 0x991E,0xE953, // + 0x9920,0xE955, // + 0x9921,0xE951, // + 0x9924,0xE954, // + 0x9928,0x8AD9, // + 0x992C,0xE956, // + 0x992E,0xE957, // + 0x993D,0xE958, // + 0x993E,0xE959, // + 0x9942,0xE95A, // + 0x9945,0xE95C, // + 0x994B,0xE95E, // + 0x994C,0xE961, // + 0x9950,0xE95D, // + 0x9951,0xE95F, // + 0x9952,0xE960, // + 0x9955,0xE962, // + 0x9957,0x8BC0, // + 0x9996,0x8EF1, // + 0x9997,0xE963, // + 0x9998,0xE964, // + 0x9999,0x8D81, // + 0x99A5,0xE965, // + 0x99A8,0x8A5D, // + 0x99AC,0x946E, // + 0x99AD,0xE966, // + 0x99AE,0xE967, // + 0x99B3,0x9279, // + 0x99B4,0x93E9, // + 0x99BC,0xE968, // + 0x99C1,0x949D, // + 0x99C4,0x91CA, // + 0x99C5,0x8977, // + 0x99C6,0x8BEC, // + 0x99C8,0x8BED, // + 0x99D0,0x9293, // + 0x99D1,0xE96D, // + 0x99D2,0x8BEE, // + 0x99D5,0x89ED, // + 0x99D8,0xE96C, // + 0x99DB,0xE96A, // + 0x99DD,0xE96B, // + 0x99DF,0xE969, // + 0x99E2,0xE977, // + 0x99ED,0xE96E, // + 0x99EE,0xE96F, // + 0x99F1,0xE970, // + 0x99F2,0xE971, // + 0x99F8,0xE973, // + 0x99FB,0xE972, // + 0x99FF,0x8F78, // + 0x9A01,0xE974, // + 0x9A05,0xE976, // + 0x9A0E,0x8B52, // + 0x9A0F,0xE975, // + 0x9A12,0x919B, // + 0x9A13,0x8CB1, // + 0x9A19,0xE978, // + 0x9A28,0x91CB, // + 0x9A2B,0xE979, // + 0x9A30,0x93AB, // + 0x9A37,0xE97A, // + 0x9A3E,0xE980, // + 0x9A40,0xE97D, // + 0x9A42,0xE97C, // + 0x9A43,0xE97E, // + 0x9A45,0xE97B, // + 0x9A4D,0xE982, // + 0x9A55,0xE981, // + 0x9A57,0xE984, // + 0x9A5A,0x8BC1, // + 0x9A5B,0xE983, // + 0x9A5F,0xE985, // + 0x9A62,0xE986, // + 0x9A64,0xE988, // + 0x9A65,0xE987, // + 0x9A69,0xE989, // + 0x9A6A,0xE98B, // + 0x9A6B,0xE98A, // + 0x9AA8,0x8D9C, // + 0x9AAD,0xE98C, // + 0x9AB0,0xE98D, // + 0x9ABC,0xE98E, // + 0x9AC0,0xE98F, // + 0x9AC4,0x9091, // + 0x9ACF,0xE990, // + 0x9AD1,0xE991, // + 0x9AD3,0xE992, // + 0x9AD4,0xE993, // + 0x9AD8,0x8D82, // + 0x9ADE,0xE994, // + 0x9ADF,0xE995, // + 0x9AE2,0xE996, // + 0x9AE3,0xE997, // + 0x9AE6,0xE998, // + 0x9AEA,0x94AF, // + 0x9AEB,0xE99A, // + 0x9AED,0x9545, // + 0x9AEE,0xE99B, // + 0x9AEF,0xE999, // + 0x9AF1,0xE99D, // + 0x9AF4,0xE99C, // + 0x9AF7,0xE99E, // + 0x9AFB,0xE99F, // + 0x9B06,0xE9A0, // + 0x9B18,0xE9A1, // + 0x9B1A,0xE9A2, // + 0x9B1F,0xE9A3, // + 0x9B22,0xE9A4, // + 0x9B23,0xE9A5, // + 0x9B25,0xE9A6, // + 0x9B27,0xE9A7, // + 0x9B28,0xE9A8, // + 0x9B29,0xE9A9, // + 0x9B2A,0xE9AA, // + 0x9B2E,0xE9AB, // + 0x9B2F,0xE9AC, // + 0x9B31,0x9F54, // + 0x9B32,0xE9AD, // + 0x9B3B,0xE2F6, // + 0x9B3C,0x8B53, // + 0x9B41,0x8A40, // + 0x9B42,0x8DB0, // + 0x9B43,0xE9AF, // + 0x9B44,0xE9AE, // + 0x9B45,0x96A3, // + 0x9B4D,0xE9B1, // + 0x9B4E,0xE9B2, // + 0x9B4F,0xE9B0, // + 0x9B51,0xE9B3, // + 0x9B54,0x9682, // + 0x9B58,0xE9B4, // + 0x9B5A,0x8B9B, // + 0x9B6F,0x9844, // + 0x9B74,0xE9B5, // + 0x9B83,0xE9B7, // + 0x9B8E,0x88BC, // + 0x9B91,0xE9B8, // + 0x9B92,0x95A9, // + 0x9B93,0xE9B6, // + 0x9B96,0xE9B9, // + 0x9B97,0xE9BA, // + 0x9B9F,0xE9BB, // + 0x9BA0,0xE9BC, // + 0x9BA8,0xE9BD, // + 0x9BAA,0x968E, // + 0x9BAB,0x8E4C, // + 0x9BAD,0x8DF8, // + 0x9BAE,0x914E, // + 0x9BB4,0xE9BE, // + 0x9BB9,0xE9C1, // + 0x9BC0,0xE9BF, // + 0x9BC6,0xE9C2, // + 0x9BC9,0x8CEF, // + 0x9BCA,0xE9C0, // + 0x9BCF,0xE9C3, // + 0x9BD1,0xE9C4, // + 0x9BD2,0xE9C5, // + 0x9BD4,0xE9C9, // + 0x9BD6,0x8E49, // + 0x9BDB,0x91E2, // + 0x9BE1,0xE9CA, // + 0x9BE2,0xE9C7, // + 0x9BE3,0xE9C6, // + 0x9BE4,0xE9C8, // + 0x9BE8,0x8C7E, // + 0x9BF0,0xE9CE, // + 0x9BF1,0xE9CD, // + 0x9BF2,0xE9CC, // + 0x9BF5,0x88B1, // + 0x9C04,0xE9D8, // + 0x9C06,0xE9D4, // + 0x9C08,0xE9D5, // + 0x9C09,0xE9D1, // + 0x9C0A,0xE9D7, // + 0x9C0C,0xE9D3, // + 0x9C0D,0x8A82, // + 0x9C10,0x986B, // + 0x9C12,0xE9D6, // + 0x9C13,0xE9D2, // + 0x9C14,0xE9D0, // + 0x9C15,0xE9CF, // + 0x9C1B,0xE9DA, // + 0x9C21,0xE9DD, // + 0x9C24,0xE9DC, // + 0x9C25,0xE9DB, // + 0x9C2D,0x9568, // + 0x9C2E,0xE9D9, // + 0x9C2F,0x88F1, // + 0x9C30,0xE9DE, // + 0x9C32,0xE9E0, // + 0x9C39,0x8A8F, // + 0x9C3A,0xE9CB, // + 0x9C3B,0x8956, // + 0x9C3E,0xE9E2, // + 0x9C46,0xE9E1, // + 0x9C47,0xE9DF, // + 0x9C48,0x924C, // + 0x9C52,0x9690, // + 0x9C57,0x97D8, // + 0x9C5A,0xE9E3, // + 0x9C60,0xE9E4, // + 0x9C67,0xE9E5, // + 0x9C76,0xE9E6, // + 0x9C78,0xE9E7, // + 0x9CE5,0x92B9, // + 0x9CE7,0xE9E8, // + 0x9CE9,0x94B5, // + 0x9CEB,0xE9ED, // + 0x9CEC,0xE9E9, // + 0x9CF0,0xE9EA, // + 0x9CF3,0x9650, // + 0x9CF4,0x96C2, // + 0x9CF6,0x93CE, // + 0x9D03,0xE9EE, // + 0x9D06,0xE9EF, // + 0x9D07,0x93BC, // + 0x9D08,0xE9EC, // + 0x9D09,0xE9EB, // + 0x9D0E,0x89A8, // + 0x9D12,0xE9F7, // + 0x9D15,0xE9F6, // + 0x9D1B,0x8995, // + 0x9D1F,0xE9F4, // + 0x9D23,0xE9F3, // + 0x9D26,0xE9F1, // + 0x9D28,0x8A9B, // + 0x9D2A,0xE9F0, // + 0x9D2B,0x8EB0, // + 0x9D2C,0x89A7, // + 0x9D3B,0x8D83, // + 0x9D3E,0xE9FA, // + 0x9D3F,0xE9F9, // + 0x9D41,0xE9F8, // + 0x9D44,0xE9F5, // + 0x9D46,0xE9FB, // + 0x9D48,0xE9FC, // + 0x9D50,0xEA44, // + 0x9D51,0xEA43, // + 0x9D59,0xEA45, // + 0x9D5C,0x894C, // + 0x9D5D,0xEA40, // + 0x9D5E,0xEA41, // + 0x9D60,0x8D94, // + 0x9D61,0x96B7, // + 0x9D64,0xEA42, // + 0x9D6C,0x9651, // + 0x9D6F,0xEA4A, // + 0x9D72,0xEA46, // + 0x9D7A,0xEA4B, // + 0x9D87,0xEA48, // + 0x9D89,0xEA47, // + 0x9D8F,0x8C7B, // + 0x9D9A,0xEA4C, // + 0x9DA4,0xEA4D, // + 0x9DA9,0xEA4E, // + 0x9DAB,0xEA49, // + 0x9DAF,0xE9F2, // + 0x9DB2,0xEA4F, // + 0x9DB4,0x92DF, // + 0x9DB8,0xEA53, // + 0x9DBA,0xEA54, // + 0x9DBB,0xEA52, // + 0x9DC1,0xEA51, // + 0x9DC2,0xEA57, // + 0x9DC4,0xEA50, // + 0x9DC6,0xEA55, // + 0x9DCF,0xEA56, // + 0x9DD3,0xEA59, // + 0x9DD9,0xEA58, // + 0x9DED,0xEA5C, // + 0x9DEF,0xEA5D, // + 0x9DF2,0x9868, // + 0x9DF8,0xEA5A, // + 0x9DF9,0x91E9, // + 0x9DFA,0x8DEB, // + 0x9DFD,0xEA5E, // + 0x9E1A,0xEA5F, // + 0x9E1B,0xEA60, // + 0x9E1E,0xEA61, // + 0x9E75,0xEA62, // + 0x9E78,0x8CB2, // + 0x9E79,0xEA63, // + 0x9E7D,0xEA64, // + 0x9E7F,0x8EAD, // + 0x9E81,0xEA65, // + 0x9E88,0xEA66, // + 0x9E8B,0xEA67, // + 0x9E8C,0xEA68, // + 0x9E91,0xEA6B, // + 0x9E92,0xEA69, // + 0x9E95,0xEA6A, // + 0x9E97,0x97ED, // + 0x9E9D,0xEA6C, // + 0x9E9F,0x97D9, // + 0x9EA5,0xEA6D, // + 0x9EA6,0x949E, // + 0x9EA9,0xEA6E, // + 0x9EAA,0xEA70, // + 0x9EAD,0xEA71, // + 0x9EB8,0xEA6F, // + 0x9EB9,0x8D8D, // + 0x9EBA,0x96CB, // + 0x9EBB,0x9683, // + 0x9EBC,0x9BF5, // + 0x9EBE,0x9F80, // + 0x9EBF,0x969B, // + 0x9EC4,0x89A9, // + 0x9ECC,0xEA73, // + 0x9ECD,0x8B6F, // + 0x9ECE,0xEA74, // + 0x9ECF,0xEA75, // + 0x9ED0,0xEA76, // + 0x9ED2,0x8D95, // + 0x9ED4,0xEA77, // + 0x9ED8,0xE0D2, // + 0x9ED9,0x96D9, // + 0x9EDB,0x91E1, // + 0x9EDC,0xEA78, // + 0x9EDD,0xEA7A, // + 0x9EDE,0xEA79, // + 0x9EE0,0xEA7B, // + 0x9EE5,0xEA7C, // + 0x9EE8,0xEA7D, // + 0x9EEF,0xEA7E, // + 0x9EF4,0xEA80, // + 0x9EF6,0xEA81, // + 0x9EF7,0xEA82, // + 0x9EF9,0xEA83, // + 0x9EFB,0xEA84, // + 0x9EFC,0xEA85, // + 0x9EFD,0xEA86, // + 0x9F07,0xEA87, // + 0x9F08,0xEA88, // + 0x9F0E,0x9343, // + 0x9F13,0x8CDB, // + 0x9F15,0xEA8A, // + 0x9F20,0x916C, // + 0x9F21,0xEA8B, // + 0x9F2C,0xEA8C, // + 0x9F3B,0x9540, // + 0x9F3E,0xEA8D, // + 0x9F4A,0xEA8E, // + 0x9F4B,0xE256, // + 0x9F4E,0xE6D8, // + 0x9F4F,0xE8EB, // + 0x9F52,0xEA8F, // + 0x9F54,0xEA90, // + 0x9F5F,0xEA92, // + 0x9F60,0xEA93, // + 0x9F61,0xEA94, // + 0x9F62,0x97EE, // + 0x9F63,0xEA91, // + 0x9F66,0xEA95, // + 0x9F67,0xEA96, // + 0x9F6A,0xEA98, // + 0x9F6C,0xEA97, // + 0x9F72,0xEA9A, // + 0x9F76,0xEA9B, // + 0x9F77,0xEA99, // + 0x9F8D,0x97B4, // + 0x9F95,0xEA9C, // + 0x9F9C,0xEA9D, // + 0x9F9D,0xE273, // + 0x9FA0,0xEA9E, // + 0xFF01,0x8149, // FULLWIDTH EXCLAMATION MARK + 0xFF03,0x8194, // FULLWIDTH NUMBER SIGN + 0xFF04,0x8190, // FULLWIDTH DOLLAR SIGN + 0xFF05,0x8193, // FULLWIDTH PERCENT SIGN + 0xFF06,0x8195, // FULLWIDTH AMPERSAND + 0xFF07,0x81AD, // FULLWIDTH APOSTROPHE + 0xFF08,0x8169, // FULLWIDTH LEFT PARENTHESIS + 0xFF09,0x816A, // FULLWIDTH RIGHT PARENTHESIS + 0xFF0A,0x8196, // FULLWIDTH ASTERISK + 0xFF0B,0x817B, // FULLWIDTH PLUS SIGN + 0xFF0C,0x8143, // FULLWIDTH COMMA + 0xFF0E,0x8144, // FULLWIDTH FULL STOP + 0xFF0F,0x815E, // FULLWIDTH SOLIDUS + 0xFF10,0x824F, // FULLWIDTH DIGIT ZERO + 0xFF11,0x8250, // FULLWIDTH DIGIT ONE + 0xFF12,0x8251, // FULLWIDTH DIGIT TWO + 0xFF13,0x8252, // FULLWIDTH DIGIT THREE + 0xFF14,0x8253, // FULLWIDTH DIGIT FOUR + 0xFF15,0x8254, // FULLWIDTH DIGIT FIVE + 0xFF16,0x8255, // FULLWIDTH DIGIT SIX + 0xFF17,0x8256, // FULLWIDTH DIGIT SEVEN + 0xFF18,0x8257, // FULLWIDTH DIGIT EIGHT + 0xFF19,0x8258, // FULLWIDTH DIGIT NINE + 0xFF1A,0x8146, // FULLWIDTH COLON + 0xFF1B,0x8147, // FULLWIDTH SEMICOLON + 0xFF1C,0x8183, // FULLWIDTH LESS-THAN SIGN + 0xFF1D,0x8181, // FULLWIDTH EQUALS SIGN + 0xFF1E,0x8184, // FULLWIDTH GREATER-THAN SIGN + 0xFF1F,0x8148, // FULLWIDTH QUESTION MARK + 0xFF20,0x8197, // FULLWIDTH COMMERCIAL AT + 0xFF21,0x8260, // FULLWIDTH LATIN CAPITAL LETTER A + 0xFF22,0x8261, // FULLWIDTH LATIN CAPITAL LETTER B + 0xFF23,0x8262, // FULLWIDTH LATIN CAPITAL LETTER C + 0xFF24,0x8263, // FULLWIDTH LATIN CAPITAL LETTER D + 0xFF25,0x8264, // FULLWIDTH LATIN CAPITAL LETTER E + 0xFF26,0x8265, // FULLWIDTH LATIN CAPITAL LETTER F + 0xFF27,0x8266, // FULLWIDTH LATIN CAPITAL LETTER G + 0xFF28,0x8267, // FULLWIDTH LATIN CAPITAL LETTER H + 0xFF29,0x8268, // FULLWIDTH LATIN CAPITAL LETTER I + 0xFF2A,0x8269, // FULLWIDTH LATIN CAPITAL LETTER J + 0xFF2B,0x826A, // FULLWIDTH LATIN CAPITAL LETTER K + 0xFF2C,0x826B, // FULLWIDTH LATIN CAPITAL LETTER L + 0xFF2D,0x826C, // FULLWIDTH LATIN CAPITAL LETTER M + 0xFF2E,0x826D, // FULLWIDTH LATIN CAPITAL LETTER N + 0xFF2F,0x826E, // FULLWIDTH LATIN CAPITAL LETTER O + 0xFF30,0x826F, // FULLWIDTH LATIN CAPITAL LETTER P + 0xFF31,0x8270, // FULLWIDTH LATIN CAPITAL LETTER Q + 0xFF32,0x8271, // FULLWIDTH LATIN CAPITAL LETTER R + 0xFF33,0x8272, // FULLWIDTH LATIN CAPITAL LETTER S + 0xFF34,0x8273, // FULLWIDTH LATIN CAPITAL LETTER T + 0xFF35,0x8274, // FULLWIDTH LATIN CAPITAL LETTER U + 0xFF36,0x8275, // FULLWIDTH LATIN CAPITAL LETTER V + 0xFF37,0x8276, // FULLWIDTH LATIN CAPITAL LETTER W + 0xFF38,0x8277, // FULLWIDTH LATIN CAPITAL LETTER X + 0xFF39,0x8278, // FULLWIDTH LATIN CAPITAL LETTER Y + 0xFF3A,0x8279, // FULLWIDTH LATIN CAPITAL LETTER Z + 0xFF3B,0x816D, // FULLWIDTH LEFT SQUARE BRACKET + 0xFF3D,0x816E, // FULLWIDTH RIGHT SQUARE BRACKET + 0xFF3E,0x814F, // FULLWIDTH CIRCUMFLEX ACCENT + 0xFF3F,0x8151, // FULLWIDTH LOW LINE + 0xFF40,0x814D, // FULLWIDTH GRAVE ACCENT + 0xFF41,0x8281, // FULLWIDTH LATIN SMALL LETTER A + 0xFF42,0x8282, // FULLWIDTH LATIN SMALL LETTER B + 0xFF43,0x8283, // FULLWIDTH LATIN SMALL LETTER C + 0xFF44,0x8284, // FULLWIDTH LATIN SMALL LETTER D + 0xFF45,0x8285, // FULLWIDTH LATIN SMALL LETTER E + 0xFF46,0x8286, // FULLWIDTH LATIN SMALL LETTER F + 0xFF47,0x8287, // FULLWIDTH LATIN SMALL LETTER G + 0xFF48,0x8288, // FULLWIDTH LATIN SMALL LETTER H + 0xFF49,0x8289, // FULLWIDTH LATIN SMALL LETTER I + 0xFF4A,0x828A, // FULLWIDTH LATIN SMALL LETTER J + 0xFF4B,0x828B, // FULLWIDTH LATIN SMALL LETTER K + 0xFF4C,0x828C, // FULLWIDTH LATIN SMALL LETTER L + 0xFF4D,0x828D, // FULLWIDTH LATIN SMALL LETTER M + 0xFF4E,0x828E, // FULLWIDTH LATIN SMALL LETTER N + 0xFF4F,0x828F, // FULLWIDTH LATIN SMALL LETTER O + 0xFF50,0x8290, // FULLWIDTH LATIN SMALL LETTER P + 0xFF51,0x8291, // FULLWIDTH LATIN SMALL LETTER Q + 0xFF52,0x8292, // FULLWIDTH LATIN SMALL LETTER R + 0xFF53,0x8293, // FULLWIDTH LATIN SMALL LETTER S + 0xFF54,0x8294, // FULLWIDTH LATIN SMALL LETTER T + 0xFF55,0x8295, // FULLWIDTH LATIN SMALL LETTER U + 0xFF56,0x8296, // FULLWIDTH LATIN SMALL LETTER V + 0xFF57,0x8297, // FULLWIDTH LATIN SMALL LETTER W + 0xFF58,0x8298, // FULLWIDTH LATIN SMALL LETTER X + 0xFF59,0x8299, // FULLWIDTH LATIN SMALL LETTER Y + 0xFF5A,0x829A, // FULLWIDTH LATIN SMALL LETTER Z + 0xFF5B,0x816F, // FULLWIDTH LEFT CURLY BRACKET + 0xFF5C,0x8162, // FULLWIDTH VERTICAL LINE + 0xFF5D,0x8170, // FULLWIDTH RIGHT CURLY BRACKET + 0xFFE3,0x8150, // FULLWIDTH MACRON + 0xFFE5,0x818F // FULLWIDTH YEN SIGN +}; \ No newline at end of file diff --git a/3rdparty/zint-2.4.4/backend/svg.c b/3rdparty/zint-2.4.4/backend/svg.c new file mode 100644 index 0000000..5cbba13 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/svg.c @@ -0,0 +1,614 @@ +/* svg.c - Scalable Vector Graphics */ + +/* + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include +#include "common.h" + +#define SSET "0123456789ABCDEF" + +int svg_plot(struct zint_symbol *symbol) +{ + int i, block_width, latch, r, this_row; + float textpos, large_bar_height, preset_height, row_height, row_posn = 0.0; + FILE *fsvg; + int fgred, fggrn, fgblu, bgred, bggrn, bgblu; + float /*red_ink,*/ green_ink, blue_ink, red_paper, green_paper , blue_paper; + int error_number = 0; + int textoffset, xoffset, yoffset, textdone, main_width; + char textpart[10], addon[6]; + int large_bar_count, comp_offset; + float addon_text_posn; + float scaler = symbol->scale; + float default_text_posn; + int plot_text = 1; + const char *locale = NULL; + + row_height=0; + textdone = 0; + main_width = symbol->width; + strcpy(addon, ""); + comp_offset = 0; + addon_text_posn = 0.0; + + if((symbol->output_options & BARCODE_STDOUT) != 0) { + fsvg = stdout; + } else { + fsvg = fopen(symbol->outfile, "w"); + } + if(fsvg == NULL) { + strcpy(symbol->errtxt, "Could not open output file"); + return ERROR_FILE_ACCESS; + } + + /* sort out colour options */ + to_upper((unsigned char*)symbol->fgcolour); + to_upper((unsigned char*)symbol->bgcolour); + + if(strlen(symbol->fgcolour) != 6) { + strcpy(symbol->errtxt, "Malformed foreground colour target"); + return ERROR_INVALID_OPTION; + } + if(strlen(symbol->bgcolour) != 6) { + strcpy(symbol->errtxt, "Malformed background colour target"); + return ERROR_INVALID_OPTION; + } + error_number = is_sane(SSET, (unsigned char*)symbol->fgcolour, strlen(symbol->fgcolour)); + if (error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Malformed foreground colour target"); + return ERROR_INVALID_OPTION; + } + error_number = is_sane(SSET, (unsigned char*)symbol->bgcolour, strlen(symbol->bgcolour)); + if (error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Malformed background colour target"); + return ERROR_INVALID_OPTION; + } + locale = setlocale(LC_ALL, "C"); + + fgred = (16 * ctoi(symbol->fgcolour[0])) + ctoi(symbol->fgcolour[1]); + fggrn = (16 * ctoi(symbol->fgcolour[2])) + ctoi(symbol->fgcolour[3]); + fgblu = (16 * ctoi(symbol->fgcolour[4])) + ctoi(symbol->fgcolour[5]); + bgred = (16 * ctoi(symbol->bgcolour[0])) + ctoi(symbol->bgcolour[1]); + bggrn = (16 * ctoi(symbol->bgcolour[2])) + ctoi(symbol->bgcolour[3]); + bgblu = (16 * ctoi(symbol->bgcolour[4])) + ctoi(symbol->bgcolour[5]); +// red_ink = fgred / 256.0; + green_ink = fggrn / 256.0; + blue_ink = fgblu / 256.0; + red_paper = bgred / 256.0; + green_paper = bggrn / 256.0; + blue_paper = bgblu / 256.0; + + if (symbol->height == 0) { + symbol->height = 50; + } + + large_bar_count = 0; + preset_height = 0.0; + for(i = 0; i < symbol->rows; i++) { + preset_height += symbol->row_height[i]; + if(symbol->row_height[i] == 0) { + large_bar_count++; + } + } + large_bar_height = (symbol->height - preset_height) / large_bar_count; + + if (large_bar_count == 0) { + symbol->height = preset_height; + } + + while(!(module_is_set(symbol, symbol->rows - 1, comp_offset))) { + comp_offset++; + } + + /* Certain symbols need whitespace otherwise characters get chopped off the sides */ + if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) + || (symbol->symbology == BARCODE_ISBNX)) { + switch(ustrlen(symbol->text)) { + case 13: /* EAN 13 */ + case 16: + case 19: + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + } + main_width = 96 + comp_offset; + break; + default: + main_width = 68 + comp_offset; + } + } + + if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) { + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + main_width = 96 + comp_offset; + } + } + + if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) { + if(symbol->whitespace_width == 0) { + symbol->whitespace_width = 10; + main_width = 51 + comp_offset; + } + } + + latch = 0; + r = 0; + /* Isolate add-on text */ + if(is_extendable(symbol->symbology)) { + for(i = 0; i < ustrlen(symbol->text); i++) { + if (latch == 1) { + addon[r] = symbol->text[i]; + r++; + } + if (symbol->text[i] == '+') { + latch = 1; + } + } + } + addon[r] = '\0'; + + if((symbol->show_hrt == 0) || (ustrlen(symbol->text) == 0)) { + plot_text = 0; + } + if(plot_text) { + textoffset = 9; + } else { + textoffset = 0; + } + xoffset = symbol->border_width + symbol->whitespace_width; + yoffset = symbol->border_width; + + /* Start writing the header */ + fprintf(fsvg, "\n"); + fprintf(fsvg, "\n"); + if(symbol->symbology != BARCODE_MAXICODE) { + fprintf(fsvg, "width + xoffset + xoffset) * scaler), roundup((symbol->height + textoffset + yoffset + yoffset) * scaler)); + } else { + fprintf(fsvg, "\n"); + if(ustrlen(symbol->text) != 0) { + fprintf(fsvg, " %s\n", symbol->text); + } else { + fprintf(fsvg, " Zint Generated Symbol\n"); + } + fprintf(fsvg, " \n"); + fprintf(fsvg, "\n \n", symbol->fgcolour); + + if(symbol->symbology != BARCODE_MAXICODE) { + fprintf(fsvg, " \n", roundup((symbol->width + xoffset + xoffset) * scaler), roundup((symbol->height + textoffset + yoffset + yoffset) * scaler), symbol->bgcolour); + } else { + fprintf(fsvg, " \n", roundup((74.0 + xoffset + xoffset) * scaler), roundup((72.0 + yoffset + yoffset) * scaler), symbol->bgcolour); + } + + if(((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + default_text_posn = (symbol->height + textoffset + symbol->border_width + symbol->border_width) * scaler; + } else { + default_text_posn = (symbol->height + textoffset + symbol->border_width) * scaler; + } + + if(symbol->symbology == BARCODE_MAXICODE) { + /* Maxicode uses hexagons */ + float ax, ay, bx, by, cx, cy, dx, dy, ex, ey, fx, fy, mx, my; + + + textoffset = 0.0; + if (((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + fprintf(fsvg, " \n", 0.0, 0.0, (74.0 + xoffset + xoffset) * scaler, symbol->border_width * scaler); + fprintf(fsvg, " \n", 0.0, (72.0 + symbol->border_width) * scaler, (74.0 + xoffset + xoffset) * scaler, symbol->border_width * scaler); + } + if((symbol->output_options & BARCODE_BOX) != 0) { + /* side bars */ + fprintf(fsvg, " \n", 0.0, 0.0, symbol->border_width * scaler, (72.0 + (2 * symbol->border_width)) * scaler); + fprintf(fsvg, " \n", (74.0 + xoffset + xoffset - symbol->border_width) * scaler, 0.0, symbol->border_width * scaler, (72.0 + (2 * symbol->border_width)) * scaler); + } + fprintf(fsvg, " \n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 10.85 * scaler, symbol->fgcolour); + fprintf(fsvg, " \n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 8.97 * scaler, symbol->bgcolour); + fprintf(fsvg, " \n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 7.10 * scaler, symbol->fgcolour); + fprintf(fsvg, " \n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 5.22 * scaler, symbol->bgcolour); + fprintf(fsvg, " \n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 3.31 * scaler, symbol->fgcolour); + fprintf(fsvg, " \n", (35.76 + xoffset) * scaler, (35.60 + yoffset) * scaler, 1.43 * scaler, symbol->bgcolour); + for(r = 0; r < symbol->rows; r++) { + for(i = 0; i < symbol->width; i++) { + if(module_is_set(symbol, r, i)) { + /* Dump a hexagon */ + my = r * 2.135 + 1.43; + ay = my + 1.0 + yoffset; + by = my + 0.5 + yoffset; + cy = my - 0.5 + yoffset; + dy = my - 1.0 + yoffset; + ey = my - 0.5 + yoffset; + fy = my + 0.5 + yoffset; + if(r & 1) { + mx = (2.46 * i) + 1.23 + 1.23; + } else { + mx = (2.46 * i) + 1.23; + } + ax = mx + xoffset; + bx = mx + 0.86 + xoffset; + cx = mx + 0.86 + xoffset; + dx = mx + xoffset; + ex = mx - 0.86 + xoffset; + fx = mx - 0.86 + xoffset; + fprintf(fsvg, " \n", ax * scaler, ay * scaler, bx * scaler, by * scaler, cx * scaler, cy * scaler, dx * scaler, dy * scaler, ex * scaler, ey * scaler, fx * scaler, fy * scaler); + } + } + } + } + + if(symbol->symbology != BARCODE_MAXICODE) { + /* everything else uses rectangles (or squares) */ + /* Works from the bottom of the symbol up */ + int addon_latch = 0; + + for(r = 0; r < symbol->rows; r++) { + this_row = r; + if(symbol->row_height[this_row] == 0) { + row_height = large_bar_height; + } else { + row_height = symbol->row_height[this_row]; + } + row_posn = 0; + for(i = 0; i < r; i++) { + if(symbol->row_height[i] == 0) { + row_posn += large_bar_height; + } else { + row_posn += symbol->row_height[i]; + } + } + row_posn += yoffset; + + i = 0; + if(module_is_set(symbol, this_row, 0)) { + latch = 1; + } else { + latch = 0; + } + + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, this_row, i + block_width) == module_is_set(symbol, this_row, i)); + if((addon_latch == 0) && (r == (symbol->rows - 1)) && (i > main_width)) { + addon_text_posn = (row_posn + 8.0) * scaler; + addon_latch = 1; + } + if(latch == 1) { + /* a bar */ + if(addon_latch == 0) { + fprintf(fsvg, " \n", (i + xoffset) * scaler, row_posn * scaler, block_width * scaler, row_height * scaler); + } else { + fprintf(fsvg, " \n", (i + xoffset) * scaler, (row_posn + 10.0) * scaler, block_width * scaler, (row_height - 5.0) * scaler); + } + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + + } while (i < symbol->width); + } + } + /* That's done the actual data area, everything else is human-friendly */ + + xoffset += comp_offset; + row_posn = (row_posn + large_bar_height) * scaler; + + if(plot_text) { + if ((((symbol->symbology == BARCODE_EANX) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_EANX_CC)) || + (symbol->symbology == BARCODE_ISBNX)) { + /* guard bar extensions and text formatting for EAN8 and EAN13 */ + switch(ustrlen(symbol->text)) { + case 8: /* EAN-8 */ + case 11: + case 14: + fprintf(fsvg, " \n", (0 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (2 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (32 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (34 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (64 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (66 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + for(i = 0; i < 4; i++) { + textpart[i] = symbol->text[i]; + } + textpart[4] = '\0'; + textpos = 17; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + for(i = 0; i < 4; i++) { + textpart[i] = symbol->text[i + 4]; + } + textpart[4] = '\0'; + textpos = 50; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = xoffset + 86; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", addon); + fprintf(fsvg, " \n"); + break; + case 5: + textpos = xoffset + 100; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", addon); + fprintf(fsvg, " \n"); + break; + } + + break; + case 13: /* EAN 13 */ + case 16: + case 19: + fprintf(fsvg, " \n", (0 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (2 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (46 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (48 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (92 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (94 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -7; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + textpos = 24; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 7]; + } + textpart[6] = '\0'; + textpos = 71; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = xoffset + 114; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", addon); + fprintf(fsvg, " \n"); + break; + case 5: + textpos = xoffset + 128; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", addon); + fprintf(fsvg, " \n"); + break; + } + break; + + } + } + + if (((symbol->symbology == BARCODE_UPCA) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCA_CC)) { + /* guard bar extensions and text formatting for UPCA */ + latch = 1; + + i = 0 + comp_offset; + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); + if(latch == 1) { + /* a bar */ + fprintf(fsvg, " \n", (i + xoffset - comp_offset) * scaler, row_posn, block_width * scaler, 5.0 * scaler); + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + } while (i < 11 + comp_offset); + fprintf(fsvg, " \n", (46 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (48 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + latch = 1; + i = 85 + comp_offset; + do { + block_width = 0; + do { + block_width++; + } while (module_is_set(symbol, symbol->rows - 1, i + block_width) == module_is_set(symbol, symbol->rows - 1, i)); + if(latch == 1) { + /* a bar */ + fprintf(fsvg, " \n", (i + xoffset - comp_offset) * scaler, row_posn, block_width * scaler, 5.0 * scaler); + latch = 0; + } else { + /* a space */ + latch = 1; + } + i += block_width; + } while (i < 96 + comp_offset); + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -5; + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + for(i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[5] = '\0'; + textpos = 27; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + for(i = 0; i < 5; i++) { + textpart[i] = symbol->text[i + 6]; + } + textpart[6] = '\0'; + textpos = 68; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + textpart[0] = symbol->text[11]; + textpart[1] = '\0'; + textpos = 100; + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = xoffset + 116; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", addon); + fprintf(fsvg, " \n"); + break; + case 5: + textpos = xoffset + 130; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", addon); + fprintf(fsvg, " \n"); + break; + } + + } + + if (((symbol->symbology == BARCODE_UPCE) && (symbol->rows == 1)) || (symbol->symbology == BARCODE_UPCE_CC)) { + /* guard bar extensions and text formatting for UPCE */ + fprintf(fsvg, " \n", (0 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (2 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (46 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (48 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + fprintf(fsvg, " \n", (50 + xoffset) * scaler, row_posn, scaler, 5.0 * scaler); + textpart[0] = symbol->text[0]; + textpart[1] = '\0'; + textpos = -5; + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + for(i = 0; i < 6; i++) { + textpart[i] = symbol->text[i + 1]; + } + textpart[6] = '\0'; + textpos = 24; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + textpart[0] = symbol->text[7]; + textpart[1] = '\0'; + textpos = 55; + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", textpart); + fprintf(fsvg, " \n"); + textdone = 1; + switch(strlen(addon)) { + case 2: + textpos = xoffset + 70; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", addon); + fprintf(fsvg, " \n"); + break; + case 5: + textpos = xoffset + 84; + fprintf(fsvg, " \n", 11.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", addon); + fprintf(fsvg, " \n"); + break; + } + + } + } /* if (plot_text) */ + + xoffset -= comp_offset; + + switch(symbol->symbology) { + case BARCODE_MAXICODE: + /* Do nothing! (It's already been done) */ + break; + default: + if((symbol->output_options & BARCODE_BIND) != 0) { + if((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) { + /* row binding */ + for(r = 1; r < symbol->rows; r++) { + fprintf(fsvg, " \n", xoffset * scaler, ((r * row_height) + yoffset - 1) * scaler, symbol->width * scaler, 2.0 * scaler); + } + } + } + if (((symbol->output_options & BARCODE_BOX) != 0) || ((symbol->output_options & BARCODE_BIND) != 0)) { + fprintf(fsvg, " \n", 0.0, 0.0, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler); + fprintf(fsvg, " \n", 0.0, (symbol->height + symbol->border_width) * scaler, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler); + } + if((symbol->output_options & BARCODE_BOX) != 0) { + /* side bars */ + fprintf(fsvg, " \n", 0.0, 0.0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler); + fprintf(fsvg, " \n", (symbol->width + xoffset + xoffset - symbol->border_width) * scaler, 0.0, symbol->border_width * scaler, (symbol->height + (2 * symbol->border_width)) * scaler); + } + break; + } + + /* Put the human readable text at the bottom */ + if(plot_text && (textdone == 0)) { + textpos = symbol->width / 2.0; + fprintf(fsvg, " \n", 8.0 * scaler, symbol->fgcolour); + fprintf(fsvg, " %s\n", symbol->text); + fprintf(fsvg, " \n"); + } + fprintf(fsvg, " \n"); + fprintf(fsvg, "\n"); + + fclose(fsvg); + + if (locale) + setlocale(LC_ALL, locale); + + return error_number; +} + diff --git a/3rdparty/zint-2.4.4/backend/telepen.c b/3rdparty/zint-2.4.4/backend/telepen.c new file mode 100644 index 0000000..5ee4a5d --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/telepen.c @@ -0,0 +1,157 @@ +/* telepen.c - Handles Telepen and Telepen numeric */ + +/* + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define SODIUM "0123456789X" + +#include +#include +#include +#include "common.h" + +static char *TeleTable[] = +{ + "1111111111111111", "1131313111", "33313111", "1111313131", "3111313111", "11333131", "13133131", "111111313111", + "31333111", "1131113131", "33113131", "1111333111", "3111113131", "1113133111", "1311133111", "111111113131", + "3131113111", "11313331", "333331", "111131113111", "31113331", "1133113111", "1313113111", "1111113331", + "31131331", "113111113111", "3311113111", "1111131331", "311111113111", "1113111331", "1311111331", "11111111113111", + "31313311", "1131311131", "33311131", "1111313311", "3111311131", "11333311", "13133311", "111111311131", + "31331131", "1131113311", "33113311", "1111331131", "3111113311", "1113131131", "1311131131", "111111113311", + "3131111131", "1131131311", "33131311", "111131111131", "3111131311", "1133111131", "1313111131", "111111131311", + "3113111311", "113111111131", "3311111131", "111113111311", "311111111131", "111311111311", "131111111311", "11111111111131", + "3131311111", "11313133", "333133", "111131311111", "31113133", "1133311111", "1313311111", "1111113133", + "313333", "113111311111", "3311311111", "11113333", "311111311111", "11131333", "13111333", "11111111311111", + "31311133", "1131331111", "33331111", " 1111311133", "3111331111", "11331133", "13131133", "111111331111", + "3113131111", "1131111133", "33111133", "111113131111", "3111111133", "111311131111", "131111131111", "111111111133", + "31311313", "113131111111", "3331111111", "1111311313", "311131111111", "11331313", "13131313", "11111131111111", + "3133111111", "1131111313", "33111313", "111133111111", "3111111313", "111313111111", "131113111111", "111111111313", + "313111111111", "1131131113", "33131113", "11113111111111","3111131113", "113311111111", "131311111111", "111111131113", + "3113111113", "11311111111111","331111111111","111113111113", "31111111111111","111311111113","131111111113"}; + +int telepen(struct zint_symbol *symbol, unsigned char source[], int src_len) +{ + int i, count, check_digit; + int error_number; + char dest[512]; /*14 + 30 * 14 + 14 + 14 + 1 ~ 512 */ + + error_number = 0; + + count = 0; + + if(src_len > 30) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + /* Start character */ + strcpy(dest, TeleTable['_']); + + for(i = 0; i < src_len; i++) { + if(source[i] > 126) { + /* Cannot encode extended ASCII */ + strcpy(symbol->errtxt, "Invalid characters in input data"); + return ERROR_INVALID_DATA1; + } + concat(dest, TeleTable[source[i]]); + count += source[i]; + } + + check_digit = 127 - (count % 127); + if(check_digit == 127) { check_digit = 0; } + concat(dest, TeleTable[check_digit]); + + /* Stop character */ + concat(dest, TeleTable['z']); + + expand(symbol, dest); + for(i = 0; i < src_len; i++) { + if(source[i] == '\0') { + symbol->text[i] = ' '; + } else { + symbol->text[i] = source[i]; + } + } + symbol->text[src_len] = '\0'; + return error_number; +} + +int telepen_num(struct zint_symbol *symbol, unsigned char source[], int src_len) +{ + int i, count, check_digit, glyph; + int error_number, temp_length = src_len; + char dest[1024]; /* 14 + 60 * 14 + 14 + 14 + 1 ~ 1024 */ + unsigned char temp[64]; + + error_number = 0; + count = 0; + + if(temp_length > 60) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + ustrcpy(temp, source); + to_upper(temp); + error_number = is_sane(NEON, temp, temp_length); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + + /* Add a leading zero if required */ + if (temp_length & 1) + { + memmove(temp + 1, temp, temp_length); + temp[0] = '0'; + + temp[++temp_length] = '\0'; + } + + /* Start character */ + strcpy(dest, TeleTable['_']); + + for (i = 0; i < temp_length; i += 2) + { + if(temp[i] == 'X') { + strcpy(symbol->errtxt, "Invalid position of X in Telepen data"); + return ERROR_INVALID_DATA1; + } + + if(temp[i + 1] == 'X') { + glyph = ctoi(temp[i]) + 17; + count += glyph; + } else { + glyph = (10 * ctoi(temp[i])) + ctoi(temp[i + 1]); + glyph += 27; + count += glyph; + } + concat(dest, TeleTable[glyph]); + } + + check_digit = 127 - (count % 127); + if(check_digit == 127) { check_digit = 0; } + concat(dest, TeleTable[check_digit]); + + /* Stop character */ + concat(dest, TeleTable['z']); + + expand(symbol, dest); + ustrcpy(symbol->text, temp); + return error_number; +} + diff --git a/3rdparty/zint-2.4.4/backend/upcean.c b/3rdparty/zint-2.4.4/backend/upcean.c new file mode 100644 index 0000000..f403f3d --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/upcean.c @@ -0,0 +1,796 @@ +/* upcean.c - Handles UPC, EAN and ISBN + + libzint - the open source barcode library + Copyright (C) 2008 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define SODIUM "0123456789+" +#define EAN2 102 +#define EAN5 105 + +#include +#include +#include +#include "common.h" + +/* UPC and EAN tables checked against EN 797:1996 */ + +static char *UPCParity0[10] = {"BBBAAA", "BBABAA", "BBAABA", "BBAAAB", "BABBAA", "BAABBA", "BAAABB", + "BABABA", "BABAAB", "BAABAB"}; /* Number set for UPC-E symbol (EN Table 4) */ +static char *UPCParity1[10] = {"AAABBB", "AABABB", "AABBAB", "AABBBA", "ABAABB", "ABBAAB", "ABBBAA", + "ABABAB", "ABABBA", "ABBABA"}; /* Not covered by BS EN 797:1995 */ +static char *EAN2Parity[4] = {"AA", "AB", "BA", "BB"}; /* Number sets for 2-digit add-on (EN Table 6) */ +static char *EAN5Parity[10] = {"BBAAA", "BABAA", "BAABA", "BAAAB", "ABBAA", "AABBA", "AAABB", "ABABA", + "ABAAB", "AABAB"}; /* Number set for 5-digit add-on (EN Table 7) */ +static char *EAN13Parity[10] = {"AAAAA", "ABABB", "ABBAB", "ABBBA", "BAABB", "BBAAB", "BBBAA", "BABAB", + "BABBA", "BBABA"}; /* Left hand of the EAN-13 symbol (EN Table 3) */ +static char *EANsetA[10] = {"3211", "2221", "2122", "1411", "1132", "1231", "1114", "1312", "1213", + "3112"}; /* Representation set A and C (EN Table 1) */ +static char *EANsetB[10] = {"1123", "1222", "2212", "1141", "2311", "1321", "4111", "2131", "3121", + "2113"}; /* Representation set B (EN Table 1) */ + +char upc_check(char source[]) +{ /* Calculate the correct check digit for a UPC barcode */ + unsigned int i, count, check_digit; + + count = 0; + + for (i = 0; i < strlen(source); i++) { + count += ctoi(source[i]); + + if (!(i & 1)) { + count += 2 * (ctoi(source[i])); + } + } + + check_digit = 10 - (count%10); + if (check_digit == 10) { check_digit = 0; } + return itoc(check_digit); +} + +void upca_draw(char source[], char dest[]) +{ /* UPC A is usually used for 12 digit numbers, but this function takes a source of any length */ + unsigned int i, half_way; + + half_way = strlen(source) / 2; + + /* start character */ + concat (dest, "111"); + + for(i = 0; i <= strlen(source); i++) + { + if (i == half_way) + { + /* middle character - separates manufacturer no. from product no. */ + /* also inverts right hand characters */ + concat(dest, "11111"); + } + + lookup(NEON, EANsetA, source[i], dest); + } + + /* stop character */ + concat (dest, "111"); +} + +void upca(struct zint_symbol *symbol, unsigned char source[], char dest[]) +{ /* Make a UPC A barcode when we haven't been given the check digit */ + int length; + char gtin[15]; + + strcpy(gtin, (char*)source); + length = strlen(gtin); + gtin[length] = upc_check(gtin); + gtin[length + 1] = '\0'; + upca_draw(gtin, dest); + ustrcpy(symbol->text, (unsigned char*)gtin); +} + +void upce(struct zint_symbol *symbol, unsigned char source[], char dest[]) +{ /* UPC E is a zero-compressed version of UPC A */ + int i, num_system; + char emode, equivalent[12], check_digit, parity[8], temp[8]; + char hrt[9]; + + /* Two number systems can be used - system 0 and system 1 */ + if(ustrlen(source) == 7) { + switch(source[0]) { + case '0': num_system = 0; break; + case '1': num_system = 1; break; + default: num_system = 0; source[0] = '0'; break; + } + strcpy(temp, (char*)source); + strcpy(hrt, (char*)source); + for(i = 1; i <= 7; i++) { + source[i - 1] = temp[i]; + } + } + else { + num_system = 0; + hrt[0] = '0'; + hrt[1] = '\0'; + concat(hrt, (char*)source); + } + + /* Expand the zero-compressed UPCE code to make a UPCA equivalent (EN Table 5) */ + emode = source[5]; + for(i = 0; i < 11; i++) { + equivalent[i] = '0'; + } + if(num_system == 1) { equivalent[0] = temp[0]; } + equivalent[1] = source[0]; + equivalent[2] = source[1]; + equivalent[11] = '\0'; + + switch(emode) + { + case '0': + case '1': + case '2': + equivalent[3] = emode; + equivalent[8] = source[2]; + equivalent[9] = source[3]; + equivalent[10] = source[4]; + break; + case '3': + equivalent[3] = source[2]; + equivalent[9] = source[3]; + equivalent[10] = source[4]; + if(((source[2] == '0') || (source[2] == '1')) || (source[2] == '2')) { + /* Note 1 - "X3 shall not be equal to 0, 1 or 2" */ + strcpy(symbol->errtxt, "Invalid UPC-E data"); + } + break; + case '4': + equivalent[3] = source[2]; + equivalent[4] = source[3]; + equivalent[10] = source[4]; + if(source[3] == '0') { + /* Note 2 - "X4 shall not be equal to 0" */ + strcpy(symbol->errtxt, "Invalid UPC-E data"); + } + break; + case '5': + case '6': + case '7': + case '8': + case '9': + equivalent[3] = source[2]; + equivalent[4] = source[3]; + equivalent[5] = source[4]; + equivalent[10] = emode; + if(source[4] == '0') { + /* Note 3 - "X5 shall not be equal to 0" */ + strcpy(symbol->errtxt, "Invalid UPC-E data"); + } + break; + } + + /* Get the check digit from the expanded UPCA code */ + + check_digit = upc_check(equivalent); + + /* Use the number system and check digit information to choose a parity scheme */ + if(num_system == 1) { + strcpy(parity, UPCParity1[ctoi(check_digit)]); + } else { + strcpy(parity, UPCParity0[ctoi(check_digit)]); + } + + /* Take all this information and make the barcode pattern */ + + /* start character */ + concat (dest, "111"); + + for(i = 0; i <= ustrlen(source); i++) { + switch(parity[i]) { + case 'A': lookup(NEON, EANsetA, source[i], dest); break; + case 'B': lookup(NEON, EANsetB, source[i], dest); break; + } + } + + /* stop character */ + concat (dest, "111111"); + + hrt[7] = check_digit; + hrt[8] = '\0'; + ustrcpy(symbol->text, (unsigned char*)hrt); +} + + +void add_on(unsigned char source[], char dest[], int mode) +{ /* EAN-2 and EAN-5 add-on codes */ + char parity[6]; + int i, code_type; + + /* If an add-on then append with space */ + if (mode != 0) + { + concat(dest, "9"); + } + + /* Start character */ + concat (dest, "112"); + + /* Determine EAN2 or EAN5 add-on */ + if(ustrlen(source) == 2) + { + code_type = EAN2; + } + else + { + code_type = EAN5; + } + + /* Calculate parity for EAN2 */ + if(code_type == EAN2) + { + int code_value, parity_bit; + + code_value = (10 * ctoi(source[0])) + ctoi(source[1]); + parity_bit = code_value%4; + strcpy(parity, EAN2Parity[parity_bit]); + } + + if(code_type == EAN5) + { + int values[6], parity_sum, parity_bit; + + for(i = 0; i < 6; i++) + { + values[i] = ctoi(source[i]); + } + + parity_sum = (3 * (values[0] + values[2] + values[4])); + parity_sum += (9 * (values[1] + values[3])); + + parity_bit = parity_sum%10; + strcpy(parity, EAN5Parity[parity_bit]); + } + + for(i = 0; i < ustrlen(source); i++) + { + switch(parity[i]) { + case 'A': lookup(NEON, EANsetA, source[i], dest); break; + case 'B': lookup(NEON, EANsetB, source[i], dest); break; + } + + /* Glyph separator */ + if(i != (ustrlen(source) - 1)) + { + concat (dest, "11"); + } + } +} + + +/* ************************ EAN-13 ****************** */ + +char ean_check(char source[]) +{ /* Calculate the correct check digit for a EAN-13 barcode */ + int i; + unsigned int h, count, check_digit; + + count = 0; + + h = strlen(source); + for (i = h - 1; i >= 0; i--) { + count += ctoi(source[i]); + + if (i & 1) { + count += 2 * ctoi(source[i]); + } + } + check_digit = 10 - (count%10); + if (check_digit == 10) { check_digit = 0; } + return itoc(check_digit); +} + +void ean13(struct zint_symbol *symbol, unsigned char source[], char dest[]) +{ + unsigned int length, i, half_way; + char parity[6]; + char gtin[15]; + + strcpy(parity, ""); + strcpy(gtin, (char*)source); + + /* Add the appropriate check digit */ + length = strlen(gtin); + gtin[length] = ean_check(gtin); + gtin[length + 1] = '\0'; + + /* Get parity for first half of the symbol */ + lookup(SODIUM, EAN13Parity, gtin[0], parity); + + /* Now get on with the cipher */ + half_way = 7; + + /* start character */ + concat (dest, "111"); + length = strlen(gtin); + for(i = 1; i <= length; i++) + { + if (i == half_way) + { + /* middle character - separates manufacturer no. from product no. */ + /* also inverses right hand characters */ + concat (dest, "11111"); + } + + if(((i > 1) && (i < 7)) && (parity[i - 2] == 'B')) + { + lookup(NEON, EANsetB, gtin[i], dest); + } + else + { + lookup(NEON, EANsetA, gtin[i], dest); + } + } + + /* stop character */ + concat (dest, "111"); + + ustrcpy(symbol->text, (unsigned char*)gtin); +} + +void ean8(struct zint_symbol *symbol, unsigned char source[], char dest[]) +{ /* Make an EAN-8 barcode when we haven't been given the check digit */ + /* EAN-8 is basically the same as UPC-A but with fewer digits */ + int length; + char gtin[10]; + + strcpy(gtin, (char*)source); + length = strlen(gtin); + gtin[length] = upc_check(gtin); + gtin[length + 1] = '\0'; + upca_draw(gtin, dest); + ustrcpy(symbol->text, (unsigned char*)gtin); +} + +char isbn13_check(unsigned char source[]) /* For ISBN(13) only */ +{ + unsigned int i, weight, sum, check, h; + + sum = 0; + weight = 1; + h = ustrlen(source) - 1; + + for(i = 0; i < h; i++) + { + sum += ctoi(source[i]) * weight; + if(weight == 1) weight = 3; else weight = 1; + } + + check = sum % 10; + check = 10 - check; + return itoc(check); +} + +char isbn_check(unsigned char source[]) /* For ISBN(10) and SBN only */ +{ + unsigned int i, weight, sum, check, h; + char check_char; + + sum = 0; + weight = 1; + h = ustrlen(source) - 1; + + for(i = 0; i < h; i++) + { + sum += ctoi(source[i]) * weight; + weight++; + } + + check = sum % 11; + check_char = itoc(check); + if(check == 10) { check_char = 'X'; } + return check_char; +} + +int isbn(struct zint_symbol *symbol, unsigned char source[], const unsigned int src_len, char dest[]) /* Make an EAN-13 barcode from an SBN or ISBN */ +{ + int i, error_number; + char check_digit; + + to_upper(source); + error_number = is_sane("0123456789X", source, src_len); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in input"); + return error_number; + } + + /* Input must be 9, 10 or 13 characters */ + if(((src_len < 9) || (src_len > 13)) || ((src_len > 10) && (src_len < 13))) + { + strcpy(symbol->errtxt, "Input wrong length"); + return ERROR_TOO_LONG; + } + + if(src_len == 13) /* Using 13 character ISBN */ + { + if(!(((source[0] == '9') && (source[1] == '7')) && + ((source[2] == '8') || (source[2] == '9')))) + { + strcpy(symbol->errtxt, "Invalid ISBN"); + return ERROR_INVALID_DATA1; + } + + check_digit = isbn13_check(source); + if (source[src_len - 1] != check_digit) + { + strcpy(symbol->errtxt, "Incorrect ISBN check"); + return ERROR_INVALID_CHECK; + } + source[12] = '\0'; + + ean13(symbol, source, dest); + } + + if(src_len == 10) /* Using 10 digit ISBN */ + { + check_digit = isbn_check(source); + if(check_digit != source[src_len - 1]) + { + strcpy(symbol->errtxt, "Incorrect ISBN check"); + return ERROR_INVALID_CHECK; + } + for(i = 13; i > 0; i--) + { + source[i] = source[i - 3]; + } + source[0] = '9'; + source[1] = '7'; + source[2] = '8'; + source[12] = '\0'; + + ean13(symbol, source, dest); + } + + if(src_len == 9) /* Using 9 digit SBN */ + { + /* Add leading zero */ + for(i = 10; i > 0; i--) + { + source[i] = source[i - 1]; + } + source[0] = '0'; + + /* Verify check digit */ + check_digit = isbn_check(source); + if(check_digit != source[ustrlen(source) - 1]) + { + strcpy(symbol->errtxt, "Incorrect SBN check"); + return ERROR_INVALID_CHECK; + } + + /* Convert to EAN-13 number */ + for(i = 13; i > 0; i--) + { + source[i] = source[i - 3]; + } + source[0] = '9'; + source[1] = '7'; + source[2] = '8'; + source[12] = '\0'; + + ean13(symbol, source, dest); + } + + return 0; +} + +void ean_leading_zeroes(struct zint_symbol *symbol, unsigned char source[], unsigned char local_source[]) { + /* Add leading zeroes to EAN and UPC strings */ + unsigned char first_part[20], second_part[20], zfirst_part[20], zsecond_part[20]; + int with_addon = 0; + int first_len = 0, second_len = 0, zfirst_len = 0, zsecond_len = 0, i, h; + + h = ustrlen(source); + for(i = 0; i < h; i++) { + if(source[i] == '+') { + with_addon = 1; + } else { + if(with_addon == 0) { + first_len++; + } else { + second_len++; + } + } + } + + ustrcpy(first_part, (unsigned char *)""); + ustrcpy(second_part, (unsigned char *)""); + ustrcpy(zfirst_part, (unsigned char *)""); + ustrcpy(zsecond_part, (unsigned char *)""); + + /* Split input into two strings */ + for(i = 0; i < first_len; i++) { + first_part[i] = source[i]; + first_part[i + 1] = '\0'; + } + + for(i = 0; i < second_len; i++) { + second_part[i] = source[i + first_len + 1]; + second_part[i + 1] = '\0'; + } + + /* Calculate target lengths */ + if(second_len <= 5) { zsecond_len = 5; } + if(second_len <= 2) { zsecond_len = 2; } + if(second_len == 0) { zsecond_len = 0; } + switch(symbol->symbology) { + case BARCODE_EANX: + case BARCODE_EANX_CC: + if(first_len <= 12) { zfirst_len = 12; } + if(first_len <= 7) { zfirst_len = 7; } + if(second_len == 0) { + if(first_len <= 5) { zfirst_len = 5; } + if(first_len <= 2) { zfirst_len = 2; } + } + break; + case BARCODE_UPCA: + case BARCODE_UPCA_CC: + zfirst_len = 11; + break; + case BARCODE_UPCE: + case BARCODE_UPCE_CC: + if(first_len == 7) { zfirst_len = 7; } + if(first_len <= 6) { zfirst_len = 6; } + break; + case BARCODE_ISBNX: + if(first_len <= 9) { zfirst_len = 9; } + break; + } + + + /* Add leading zeroes */ + for(i = 0; i < (zfirst_len - first_len); i++) { + uconcat(zfirst_part, (unsigned char *)"0"); + } + uconcat(zfirst_part, first_part); + for(i = 0; i < (zsecond_len - second_len); i++) { + uconcat(zsecond_part, (unsigned char *)"0"); + } + uconcat(zsecond_part, second_part); + + /* Copy adjusted data back to local_source */ + uconcat(local_source, zfirst_part); + if(zsecond_len != 0) { + uconcat(local_source, (unsigned char *)"+"); + uconcat(local_source, zsecond_part); + } +} + +int eanx(struct zint_symbol *symbol, unsigned char source[], int src_len) +{ + /* splits string to parts before and after '+' parts */ + unsigned char first_part[20] = { 0 }, second_part[20] = { 0 }, dest[1000] = { 0 }; + unsigned char local_source[20] = { 0 }; + int latch, reader, writer, with_addon; + int error_number, i; + + + with_addon = FALSE; + latch = FALSE; + writer = 0; + + if(src_len > 19) { + strcpy(symbol->errtxt, "Input too long"); + return ERROR_TOO_LONG; + } + if(symbol->symbology != BARCODE_ISBNX) { + /* ISBN has it's own checking routine */ + error_number = is_sane("0123456789+", source, src_len); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in data"); + return error_number; + } + } else { + error_number = is_sane("0123456789Xx", source, src_len); + if(error_number == ERROR_INVALID_DATA1) { + strcpy(symbol->errtxt, "Invalid characters in input"); + return error_number; + } + } + + + /* Add leading zeroes */ + ustrcpy(local_source, (unsigned char *)""); + if(symbol->symbology == BARCODE_ISBNX) { + to_upper(local_source); + } + + ean_leading_zeroes(symbol, source, local_source); + + for(reader = 0; reader <= ustrlen(local_source); reader++) + { + if(source[reader] == '+') { with_addon = TRUE; } + } + + reader = 0; + if(with_addon) { + do { + if(local_source[reader] == '+') { + first_part[writer] = '\0'; + latch = TRUE; + reader++; + writer = 0; + } + + if(latch) { + second_part[writer] = local_source[reader]; + reader++; + writer++; + } else { + first_part[writer] = local_source[reader]; + reader++; + writer++; + } + } while (reader <= ustrlen(local_source)); + } else { + strcpy((char*)first_part, (char*)local_source); + } + + + switch(symbol->symbology) + { + case BARCODE_EANX: + switch(ustrlen(first_part)) + { + case 2: add_on(first_part, (char*)dest, 0); ustrcpy(symbol->text, first_part); break; + case 5: add_on(first_part, (char*)dest, 0); ustrcpy(symbol->text, first_part); break; + case 7: ean8(symbol, first_part, (char*)dest); break; + case 12: ean13(symbol, first_part, (char*)dest); break; + default: strcpy(symbol->errtxt, "Invalid length input"); return ERROR_TOO_LONG; break; + } + break; + case BARCODE_EANX_CC: + switch(ustrlen(first_part)) + { /* Adds vertical separator bars according to ISO/IEC 24723 section 11.4 */ + case 7: set_module(symbol, symbol->rows, 1); + set_module(symbol, symbol->rows, 67); + set_module(symbol, symbol->rows + 1, 0); + set_module(symbol, symbol->rows + 1, 68); + set_module(symbol, symbol->rows + 2, 1); + set_module(symbol, symbol->rows + 1, 67); + symbol->row_height[symbol->rows] = 2; + symbol->row_height[symbol->rows + 1] = 2; + symbol->row_height[symbol->rows + 2] = 2; + symbol->rows += 3; + ean8(symbol, first_part, (char*)dest); break; + case 12:set_module(symbol, symbol->rows, 1); + set_module(symbol, symbol->rows, 95); + set_module(symbol, symbol->rows + 1, 0); + set_module(symbol, symbol->rows + 1, 96); + set_module(symbol, symbol->rows + 2, 1); + set_module(symbol, symbol->rows + 2, 95); + symbol->row_height[symbol->rows] = 2; + symbol->row_height[symbol->rows + 1] = 2; + symbol->row_height[symbol->rows + 2] = 2; + symbol->rows += 3; + ean13(symbol, first_part, (char*)dest); break; + default: strcpy(symbol->errtxt, "Invalid length EAN input"); return ERROR_TOO_LONG; break; + } + break; + case BARCODE_UPCA: + if(ustrlen(first_part) == 11) { + upca(symbol, first_part, (char*)dest); + } else { + strcpy(symbol->errtxt, "Input wrong length"); + return ERROR_TOO_LONG; + } + break; + case BARCODE_UPCA_CC: + if(ustrlen(first_part) == 11) { + set_module(symbol, symbol->rows, 1); + set_module(symbol, symbol->rows, 95); + set_module(symbol, symbol->rows + 1, 0); + set_module(symbol, symbol->rows + 1, 96); + set_module(symbol, symbol->rows + 2, 1); + set_module(symbol, symbol->rows + 2, 95); + symbol->row_height[symbol->rows] = 2; + symbol->row_height[symbol->rows + 1] = 2; + symbol->row_height[symbol->rows + 2] = 2; + symbol->rows += 3; + upca(symbol, first_part, (char*)dest); + } else { + strcpy(symbol->errtxt, "UPCA input wrong length"); + return ERROR_TOO_LONG; + } + break; + case BARCODE_UPCE: + if((ustrlen(first_part) >= 6) && (ustrlen(first_part) <= 7)) { + upce(symbol, first_part, (char*)dest); + } else { + strcpy(symbol->errtxt, "Input wrong length"); + return ERROR_TOO_LONG; + } + break; + case BARCODE_UPCE_CC: + if((ustrlen(first_part) >= 6) && (ustrlen(first_part) <= 7)) { + set_module(symbol, symbol->rows, 1); + set_module(symbol, symbol->rows, 51); + set_module(symbol, symbol->rows + 1, 0); + set_module(symbol, symbol->rows + 1, 52); + set_module(symbol, symbol->rows + 2, 1); + set_module(symbol, symbol->rows + 2, 51); + symbol->row_height[symbol->rows] = 2; + symbol->row_height[symbol->rows + 1] = 2; + symbol->row_height[symbol->rows + 2] = 2; + symbol->rows += 3; + upce(symbol, first_part, (char*)dest); + } else { + strcpy(symbol->errtxt, "UPCE input wrong length"); + return ERROR_TOO_LONG; + } + break; + case BARCODE_ISBNX: + error_number = isbn(symbol, first_part, ustrlen(first_part), (char*)dest); + if(error_number > 4) { + return error_number; + } + break; + } + switch(ustrlen(second_part)) + { + case 0: break; + case 2: + add_on(second_part, (char*)dest, 1); + uconcat(symbol->text, (unsigned char*)"+"); + uconcat(symbol->text, second_part); + break; + case 5: + add_on(second_part, (char*)dest, 1); + uconcat(symbol->text, (unsigned char*)"+"); + uconcat(symbol->text, second_part); + break; + default: + strcpy(symbol->errtxt, "Invalid length input"); + return ERROR_TOO_LONG; + break; + } + + expand(symbol, (char*)dest); + + switch(symbol->symbology) { + case BARCODE_EANX_CC: + case BARCODE_UPCA_CC: + case BARCODE_UPCE_CC: + /* shift the symbol to the right one space to allow for separator bars */ + for(i = (symbol->width + 1); i >= 1; i--) { + if(module_is_set(symbol, symbol->rows - 1, i - 1)) { + set_module(symbol, symbol->rows - 1, i); + } else { + unset_module(symbol, symbol->rows - 1, i); + } + } + unset_module(symbol, symbol->rows - 1, 0); + symbol->width += 2; + break; + } + + + if((symbol->errtxt[0] == 'w') && (error_number == 0)) { + error_number = 1; /* flag UPC-E warnings */ + } + return error_number; +} + + + + diff --git a/3rdparty/zint-2.4.4/backend/zint.h b/3rdparty/zint-2.4.4/backend/zint.h new file mode 100644 index 0000000..2d5e2c5 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend/zint.h @@ -0,0 +1,238 @@ +/* zint.h - definitions for libzint + + libzint - the open source barcode library + Copyright (C) 2009 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef ZINT_H +#define ZINT_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +struct zint_render_line { + float x, y, length, width; + struct zint_render_line *next; /* Pointer to next line */ +}; + +struct zint_render_string { + float x, y, fsize; + float width; /* Suggested string width, may be 0 if none recommended */ + int length; + unsigned char *text; + struct zint_render_string *next; /* Pointer to next character */ +}; + +struct zint_render_ring { + float x, y, radius, line_width; + struct zint_render_ring *next; /* Pointer to next ring */ +}; + +struct zint_render_hexagon { + float x, y; + struct zint_render_hexagon *next; /* Pointer to next hexagon */ +}; + +struct zint_render { + float width, height; + struct zint_render_line *lines; /* Pointer to first line */ + struct zint_render_string *strings; /* Pointer to first string */ + struct zint_render_ring *rings; /* Pointer to first ring */ + struct zint_render_hexagon *hexagons; /* Pointer to first hexagon */ +}; + +struct zint_symbol { + int symbology; + int height; + int whitespace_width; + int border_width; + int output_options; + char fgcolour[10]; + char bgcolour[10]; + char outfile[256]; + float scale; + int option_1; + int option_2; + int option_3; + int show_hrt; + int input_mode; + unsigned char text[128]; + int rows; + int width; + char primary[128]; + unsigned char encoded_data[178][143]; + int row_height[178]; /* Largest symbol is 177x177 QR Code */ + char errtxt[100]; + char *bitmap; + int bitmap_width; + int bitmap_height; + struct zint_render *rendered; +}; + + +/* Tbarcode 7 codes */ +#define BARCODE_CODE11 1 +#define BARCODE_C25MATRIX 2 +#define BARCODE_C25INTER 3 +#define BARCODE_C25IATA 4 +#define BARCODE_C25LOGIC 6 +#define BARCODE_C25IND 7 +#define BARCODE_CODE39 8 +#define BARCODE_EXCODE39 9 +#define BARCODE_EANX 13 +#define BARCODE_EAN128 16 +#define BARCODE_CODABAR 18 +#define BARCODE_CODE128 20 +#define BARCODE_DPLEIT 21 +#define BARCODE_DPIDENT 22 +#define BARCODE_CODE16K 23 +#define BARCODE_CODE49 24 +#define BARCODE_CODE93 25 +#define BARCODE_FLAT 28 +#define BARCODE_RSS14 29 +#define BARCODE_RSS_LTD 30 +#define BARCODE_RSS_EXP 31 +#define BARCODE_TELEPEN 32 +#define BARCODE_UPCA 34 +#define BARCODE_UPCE 37 +#define BARCODE_POSTNET 40 +#define BARCODE_MSI_PLESSEY 47 +#define BARCODE_FIM 49 +#define BARCODE_LOGMARS 50 +#define BARCODE_PHARMA 51 +#define BARCODE_PZN 52 +#define BARCODE_PHARMA_TWO 53 +#define BARCODE_PDF417 55 +#define BARCODE_PDF417TRUNC 56 +#define BARCODE_MAXICODE 57 +#define BARCODE_QRCODE 58 +#define BARCODE_CODE128B 60 +#define BARCODE_AUSPOST 63 +#define BARCODE_AUSREPLY 66 +#define BARCODE_AUSROUTE 67 +#define BARCODE_AUSREDIRECT 68 +#define BARCODE_ISBNX 69 +#define BARCODE_RM4SCC 70 +#define BARCODE_DATAMATRIX 71 +#define BARCODE_EAN14 72 +#define BARCODE_CODABLOCKF 74 +#define BARCODE_NVE18 75 +#define BARCODE_JAPANPOST 76 +#define BARCODE_KOREAPOST 77 +#define BARCODE_RSS14STACK 79 +#define BARCODE_RSS14STACK_OMNI 80 +#define BARCODE_RSS_EXPSTACK 81 +#define BARCODE_PLANET 82 +#define BARCODE_MICROPDF417 84 +#define BARCODE_ONECODE 85 +#define BARCODE_PLESSEY 86 + +/* Tbarcode 8 codes */ +#define BARCODE_TELEPEN_NUM 87 +#define BARCODE_ITF14 89 +#define BARCODE_KIX 90 +#define BARCODE_AZTEC 92 +#define BARCODE_DAFT 93 +#define BARCODE_MICROQR 97 + +/* Tbarcode 9 codes */ +#define BARCODE_HIBC_128 98 +#define BARCODE_HIBC_39 99 +#define BARCODE_HIBC_DM 102 +#define BARCODE_HIBC_QR 104 +#define BARCODE_HIBC_PDF 106 +#define BARCODE_HIBC_MICPDF 108 +#define BARCODE_HIBC_BLOCKF 110 +#define BARCODE_HIBC_AZTEC 112 + +/* Zint specific */ +#define BARCODE_AZRUNE 128 +#define BARCODE_CODE32 129 +#define BARCODE_EANX_CC 130 +#define BARCODE_EAN128_CC 131 +#define BARCODE_RSS14_CC 132 +#define BARCODE_RSS_LTD_CC 133 +#define BARCODE_RSS_EXP_CC 134 +#define BARCODE_UPCA_CC 135 +#define BARCODE_UPCE_CC 136 +#define BARCODE_RSS14STACK_CC 137 +#define BARCODE_RSS14_OMNI_CC 138 +#define BARCODE_RSS_EXPSTACK_CC 139 +#define BARCODE_CHANNEL 140 +#define BARCODE_CODEONE 141 +#define BARCODE_GRIDMATRIX 142 + +#define BARCODE_NO_ASCII 1 +#define BARCODE_BIND 2 +#define BARCODE_BOX 4 +#define BARCODE_STDOUT 8 +#define READER_INIT 16 +#define SMALL_TEXT 32 + +#define DATA_MODE 0 +#define UNICODE_MODE 1 +#define GS1_MODE 2 +#define KANJI_MODE 3 +#define SJIS_MODE 4 + +#define DM_SQUARE 100 + +#define WARN_INVALID_OPTION 2 +#define ERROR_TOO_LONG 5 +#define ERROR_INVALID_DATA1 6 +#define ERROR_INVALID_CHECK 7 +#define ERROR_INVALID_OPTION 8 +#define ERROR_ENCODING_PROBLEM 9 +#define ERROR_FILE_ACCESS 10 +#define ERROR_MEMORY 11 + +#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_MSC_VER) +# if defined (DLL_EXPORT) || defined(PIC) || defined(_USRDLL) +# define ZINT_EXTERN __declspec(dllexport) +# elif defined(ZINT_DLL) +# define ZINT_EXTERN __declspec(dllimport) +# else +# define ZINT_EXTERN extern +# endif +#else +# define ZINT_EXTERN extern +#endif + +ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void); +ZINT_EXTERN void ZBarcode_Clear(struct zint_symbol *symbol); +ZINT_EXTERN void ZBarcode_Delete(struct zint_symbol *symbol); + +ZINT_EXTERN int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *input, int length); +ZINT_EXTERN int ZBarcode_Encode_File(struct zint_symbol *symbol, char *filename); +ZINT_EXTERN int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, char *filename, int rotate_angle); + +ZINT_EXTERN int ZBarcode_Render(struct zint_symbol *symbol, float width, float height); + +ZINT_EXTERN int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, unsigned char *input, int length, int rotate_angle); +ZINT_EXTERN int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, char *filename, int rotate_angle); + +ZINT_EXTERN int ZBarcode_ValidID(int symbol_id); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* ZINT_H */ diff --git a/3rdparty/zint-2.4.4/backend_qt4/Zint.pro b/3rdparty/zint-2.4.4/backend_qt4/Zint.pro new file mode 100644 index 0000000..367b03f --- /dev/null +++ b/3rdparty/zint-2.4.4/backend_qt4/Zint.pro @@ -0,0 +1,131 @@ +DEFINES += NO_PNG + +TEMPLATE = lib +CONFIG += dll + +CONFIG(release, debug|release){ + message(Release) + BUILD_TYPE = release +}else{ + message(Debug) + BUILD_TYPE = debug +} + + +macx{ + CONFIG -= dll + CONFIG += lib_bundle + CONFIG += plugin +} + +unix{ + CONFIG += plugin +} + +#VERSION = 2.4.4 + +INCLUDEPATH += $$PWD/../backend +DEFINES += _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS ZINT_VERSION=\\\"$$VERSION\\\" +DEFINES += QZINT_LIBRARY +TARGET = QtZint + +!contains(DEFINES, NO_PNG) { + SOURCES += $$PWD/../backend/png.c + LIBS += -lpng +} + + +win32-msvc* { + DEFINES += _CRT_SECURE_NO_WARNINGS + #QMAKE_CFLAGS += /TP /wd4018 /wd4244 /wd4305 + #QMAKE_CXXFLAGS += /TP /wd4018 /wd4244 /wd4305 +} + + +INCLUDEPATH += zint zint/backend zint/backend_qt4 + +HEADERS += \ + $$PWD/qzint.h \ + $$PWD/qzint_global.h \ + $$PWD/../backend/aztec.h \ + $$PWD/../backend/code1.h \ + $$PWD/../backend/code49.h \ + $$PWD/../backend/common.h \ + $$PWD/../backend/composite.h \ + $$PWD/../backend/dmatrix.h \ + $$PWD/../backend/font.h \ + $$PWD/../backend/gb2312.h \ + $$PWD/../backend/gridmtx.h \ + $$PWD/../backend/gs1.h \ + $$PWD/../backend/large.h \ + $$PWD/../backend/maxicode.h \ + $$PWD/../backend/maxipng.h \ + $$PWD/../backend/ms_stdint.h \ + $$PWD/../backend/pdf417.h \ + $$PWD/../backend/qr.h \ + $$PWD/../backend/reedsol.h \ + $$PWD/../backend/rss.h \ + $$PWD/../backend/sjis.h \ + $$PWD/../backend/zint.h + +SOURCES += \ + $$PWD/qzint.cpp \ + $$PWD/../backend/2of5.c \ + $$PWD/../backend/auspost.c \ + $$PWD/../backend/aztec.c \ + $$PWD/../backend/code.c \ + $$PWD/../backend/code1.c \ + $$PWD/../backend/code16k.c \ + $$PWD/../backend/code49.c \ + $$PWD/../backend/code128.c \ + $$PWD/../backend/common.c \ + $$PWD/../backend/composite.c \ + $$PWD/../backend/dllversion.c \ + $$PWD/../backend/dmatrix.c \ + $$PWD/../backend/gridmtx.c \ + $$PWD/../backend/gs1.c \ + $$PWD/../backend/imail.c \ + $$PWD/../backend/large.c \ + $$PWD/../backend/library.c \ + $$PWD/../backend/maxicode.c \ + $$PWD/../backend/medical.c \ + $$PWD/../backend/pdf417.c \ + $$PWD/../backend/plessey.c \ + $$PWD/../backend/png.c \ + $$PWD/../backend/postal.c \ + $$PWD/../backend/ps.c \ + $$PWD/../backend/qr.c \ + $$PWD/../backend/reedsol.c \ + $$PWD/../backend/render.c \ + $$PWD/../backend/rss.c \ + $$PWD/../backend/svg.c \ + $$PWD/../backend/telepen.c \ + $$PWD/../backend/upcean.c + + +unix { + UNIX_DIR = $${OUT_PWD}/unix + MOC_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/moc + UI_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/ui + UI_HEADERS_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/ui + UI_SOURCES_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/ui + OBJECTS_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/obj + RCC_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/rcc + DESTDIR = $$PWD/../../../lib/unix/$${BUILD_TYPE} + DLLDESTDIR = $${DESTDIR} +} + + +win32 { + WIN32_DIR = $${OUT_PWD}/win32 + MOC_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/moc + UI_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/ui + UI_HEADERS_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/ui + UI_SOURCES_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/ui + OBJECTS_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/obj + RCC_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/rcc + DESTDIR = $$PWD/../../../lib/win32/$${BUILD_TYPE} + DLLDESTDIR = $${DESTDIR} +} + +INSTALLS = target diff --git a/3rdparty/zint-2.4.4/backend_qt4/qzint.cpp b/3rdparty/zint-2.4.4/backend_qt4/qzint.cpp new file mode 100644 index 0000000..eb4f65e --- /dev/null +++ b/3rdparty/zint-2.4.4/backend_qt4/qzint.cpp @@ -0,0 +1,692 @@ +/*************************************************************************** + * Copyright (C) 2008 by BogDan Vatra * + * bogdan@licentia.eu * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + ***************************************************************************/ + +#include "qzint.h" +#include + +Zint::QZint* createWidget() { + Zint::QZint *z = new Zint::QZint(); + return z; +} + +namespace Zint +{ + +static const qreal maxi_diagonal=11; +static const qreal maxi_width=1.73205807568877*maxi_diagonal/2; +static const char* fontstyle="Arial"; +static const int fontPixelSizeSmall=6; +static const int fontPixelSizeLarge=8; + +QZint::QZint() +{ + m_symbol=BARCODE_CODE128; + m_height=50; + m_border=NO_BORDER; + m_borderWidth=1; + m_securityLevel=-1; + m_pdf417CodeWords=928; + m_fgColor=Qt::black; + m_bgColor=Qt::white; + m_zintSymbol=0; + m_error=0; + m_input_mode = UNICODE_MODE; + m_scale = 1.0; + m_option_3 = 0; + m_hidetext = false; + m_whitespace = 0; +} + +QZint::~QZint() +{ + if (m_zintSymbol) + ZBarcode_Delete(m_zintSymbol); +} + +void QZint::encode() +{ + if (m_zintSymbol) + ZBarcode_Delete(m_zintSymbol); + + m_lastError.clear(); + m_zintSymbol = ZBarcode_Create(); + m_zintSymbol->output_options=m_border; + m_zintSymbol->symbology=m_symbol; + m_zintSymbol->height=m_height; + m_zintSymbol->whitespace_width=m_whitespace; + m_zintSymbol->border_width=m_borderWidth; + m_zintSymbol->option_1=m_securityLevel; + m_zintSymbol->input_mode = m_input_mode; + m_zintSymbol->option_2=m_width; + if(m_hidetext) { + m_zintSymbol->show_hrt = 0; + } else { + m_zintSymbol->show_hrt = 1; + } + if(m_symbol == BARCODE_PDF417) { + m_zintSymbol->option_3=m_pdf417CodeWords; + } else { + m_zintSymbol->option_3 = m_option_3; + } + QByteArray bstr=m_text.toUtf8(); + QByteArray pstr=m_primaryMessage.left(99).toLatin1(); + strcpy(m_zintSymbol->primary,pstr.data()); + int error = ZBarcode_Encode(m_zintSymbol, (unsigned char*)bstr.data(), bstr.length()); + if (error > WARN_INVALID_OPTION) + m_lastError=m_zintSymbol->errtxt; + + if (m_zintSymbol->symbology == BARCODE_MAXICODE) + m_zintSymbol->height = 33; + + switch(m_zintSymbol->output_options) { + case 0: m_border = NO_BORDER; break; + case 2: m_border = BIND; break; + case 4: m_border = BOX; break; + } + m_borderWidth = (BorderType)m_zintSymbol->border_width; + m_whitespace = m_zintSymbol->whitespace_width; +} + +int QZint::symbol() +{ + return m_symbol; +} +void QZint::setSymbol(int symbol) +{ + m_symbol=symbol; +} + +void QZint::setInputMode(int input_mode) +{ + m_input_mode = input_mode; +} + +QString QZint::text() +{ + return m_text; +} +void QZint::setText(const QString & text) +{ + m_text=text; +} + +QString QZint::primaryMessage() +{ + return m_primaryMessage; +} +void QZint::setPrimaryMessage(const QString & primaryMessage) +{ + m_primaryMessage=primaryMessage; +} + +int QZint::height() +{ + encode(); + return (m_zintSymbol->height+(m_border!=NO_BORDER)?m_borderWidth*2:0)*(m_zintSymbol->symbology == BARCODE_MAXICODE?(maxi_width+1):1); +} + +void QZint::setHeight(int height) +{ + m_height=height; +} + +void QZint::setWidth(int width) +{ + m_width=width; +} + +void QZint::setOption3(int option) +{ + m_option_3 = option; +} + +int QZint::width() +{ + encode(); + return (m_zintSymbol->width+(m_border==BOX)?m_borderWidth*2:0)*(m_zintSymbol->symbology == BARCODE_MAXICODE?(maxi_width+1):1); +} + +float QZint::scale() +{ + return m_scale; +} + +void QZint::setScale(float scale) +{ + m_scale = scale; +} + +QColor QZint::fgColor() +{ + return m_fgColor; +} +void QZint::setFgColor(const QColor & fgColor) +{ + m_fgColor=fgColor; +} + +QColor QZint::bgColor() +{ + return m_bgColor; +} +void QZint::setBgColor(const QColor & bgColor) +{ + m_bgColor=bgColor; +} + +QZint::BorderType QZint::borderType() +{ + return m_border; +} +void QZint::setBorderType(BorderType border) +{ + m_border=border; +} + +int QZint::borderWidth() +{ + return m_borderWidth; +} +void QZint::setBorderWidth(int boderWidth) +{ + if (boderWidth<1 || boderWidth>16) + boderWidth=1; + m_borderWidth=boderWidth; +} + +void QZint::setWhitespace(int whitespace) +{ + m_whitespace = whitespace; +} + +int QZint::pdf417CodeWords() +{ + return m_pdf417CodeWords; +} +void QZint::setPdf417CodeWords(int pdf417CodeWords) +{ + m_pdf417CodeWords=pdf417CodeWords; +} + +int QZint::securityLevel() +{ + return m_securityLevel; +} +void QZint::setSecurityLevel(int securityLevel) +{ + m_securityLevel=securityLevel; +} + +QString QZint::error_message() +{ + return m_lastError; +} + +int QZint::mode() +{ + return m_securityLevel; +} +void QZint::setMode(int securityLevel) +{ + m_securityLevel=securityLevel; +} + +void QZint::setHideText(bool hide) +{ + m_hidetext = hide; +} + +bool QZint::save_to_file(QString filename) +{ + if (m_zintSymbol) + ZBarcode_Delete(m_zintSymbol); + + QString fg_colour_hash = m_fgColor.name(); + QString bg_colour_hash = m_bgColor.name(); + + m_lastError.clear(); + m_zintSymbol = ZBarcode_Create(); + m_zintSymbol->output_options=m_border; + m_zintSymbol->symbology=m_symbol; + m_zintSymbol->height=m_height; + m_zintSymbol->whitespace_width=m_whitespace; + m_zintSymbol->border_width=m_borderWidth; + m_zintSymbol->option_1=m_securityLevel; + m_zintSymbol->input_mode = m_input_mode; + m_zintSymbol->option_2=m_width; + if(m_hidetext) { + m_zintSymbol->show_hrt = 0; + } else { + m_zintSymbol->show_hrt = 1; + } + if(m_symbol == BARCODE_PDF417) { + m_zintSymbol->option_3=m_pdf417CodeWords; + } else { + m_zintSymbol->option_3 = m_option_3; + } + m_zintSymbol->scale=m_scale; + QByteArray bstr=m_text.toUtf8(); + QByteArray pstr=m_primaryMessage.left(99).toLatin1(); + QByteArray fstr=filename.left(255).toLatin1(); + strcpy(m_zintSymbol->primary,pstr.data()); + strcpy(m_zintSymbol->outfile,fstr.data()); + QByteArray fgcol=fg_colour_hash.right(6).toLatin1(); + QByteArray bgcol=bg_colour_hash.right(6).toLatin1(); + strcpy(m_zintSymbol->fgcolour,fgcol.data()); + strcpy(m_zintSymbol->bgcolour,bgcol.data()); + int error = ZBarcode_Encode(m_zintSymbol, (unsigned char*)bstr.data(), bstr.length()); + if (error > WARN_INVALID_OPTION) + m_lastError=m_zintSymbol->errtxt; + error = ZBarcode_Print(m_zintSymbol, 0); + if (error > WARN_INVALID_OPTION) + m_lastError=m_zintSymbol->errtxt; + if(error == 0) { return true; } else { return false; } +} + +int QZint::module_set(int y_coord, int x_coord) +{ + int x_char, x_sub, result; + + x_char = x_coord / 7; + x_sub = x_coord % 7; + result = 0; + + switch(x_sub) { + case 0: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x01) != 0) { result = 1; } break; + case 1: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x02) != 0) { result = 1; } break; + case 2: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x04) != 0) { result = 1; } break; + case 3: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x08) != 0) { result = 1; } break; + case 4: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x10) != 0) { result = 1; } break; + case 5: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x20) != 0) { result = 1; } break; + case 6: if((m_zintSymbol->encoded_data[y_coord][x_char] & 0x40) != 0) { result = 1; } break; + } + + return result; +} + +void QZint::render(QPainter & painter, const QRectF & paintRect, AspectRatioMode mode) +{ + encode(); + bool textdone; + int comp_offset = 0, xoffset = m_whitespace, j, main_width = 0, addon_text_height = 0; + int yoffset = 0; + QString caption = QString::fromUtf8((const char *)m_zintSymbol->text, -1); + QFont fontSmall(fontstyle); + fontSmall.setPixelSize(fontPixelSizeSmall); + QFont fontLarge(fontstyle); + fontLarge.setPixelSize(fontPixelSizeLarge); + + if (m_lastError.length()) + { + painter.setFont(fontLarge); + painter.drawText(paintRect,Qt::AlignCenter,m_lastError); + return; + } + + painter.save(); + painter.setClipRect(paintRect,Qt::IntersectClip); + qreal xtr=paintRect.x(); + qreal ytr=paintRect.y(); + + int zrow_height=m_zintSymbol->height; + int zrows=0; + for (int i=0;irows;i++) + { + zrow_height-=m_zintSymbol->row_height[i]; + if (!m_zintSymbol->row_height[i]) + zrows++; + } + if (zrows) + { + zrow_height/=zrows; + for (int i=0;irows;i++) + if (!m_zintSymbol->row_height[i]) + m_zintSymbol->row_height[i]=zrow_height; + } + else + m_zintSymbol->height-=zrow_height; + + + qreal gwidth=m_zintSymbol->width; + qreal gheight=m_zintSymbol->height; + if (m_zintSymbol->symbology == BARCODE_MAXICODE) + { + gheight*=(maxi_width); + gwidth*=(maxi_width+1); + } + + qreal xsf=1; + qreal ysf=1; + qreal textoffset = 0; + + gwidth+=((m_border==BOX)?m_borderWidth*2:0); + gheight+=((m_border!=NO_BORDER)?m_borderWidth*2:0); + if(QString((const char*)m_zintSymbol->text).isEmpty() == false) { + textoffset = 9; + gheight += textoffset; + } else { + textoffset = 0; + } + gwidth+=m_zintSymbol->whitespace_width*2; + switch(mode) + { + case IgnoreAspectRatio: + xsf=(qreal)paintRect.width()/gwidth; + ysf=(qreal)paintRect.height()/gheight; + break; + + case KeepAspectRatio: + if (paintRect.width()/gwidthsymbology != BARCODE_MAXICODE) { + /* Draw boundary bars or boxes around the symbol */ + switch(m_border) + { + case BOX: + painter.fillRect(0,m_borderWidth,m_borderWidth,m_zintSymbol->height,QBrush(m_fgColor)); + painter.fillRect(m_zintSymbol->width + xoffset + xoffset + m_borderWidth,m_borderWidth,m_borderWidth,m_zintSymbol->height,QBrush(m_fgColor)); + painter.fillRect(0,0,m_zintSymbol->width + xoffset + xoffset + m_borderWidth + m_borderWidth,m_borderWidth,QBrush(m_fgColor)); + painter.fillRect(0,m_zintSymbol->height + m_borderWidth,m_zintSymbol->width + xoffset + xoffset + m_borderWidth + m_borderWidth, m_borderWidth,QBrush(m_fgColor)); + painter.translate(m_borderWidth+m_zintSymbol->whitespace_width,m_borderWidth); + yoffset = m_borderWidth; + break; + case BIND: + painter.fillRect(0,0,m_zintSymbol->width + xoffset + xoffset,m_borderWidth,QBrush(m_fgColor)); + painter.fillRect(0,m_zintSymbol->height + m_borderWidth,m_zintSymbol->width + xoffset + xoffset, m_borderWidth,QBrush(m_fgColor)); + painter.translate(m_zintSymbol->whitespace_width,m_borderWidth); + yoffset = m_borderWidth; + break; + + default: + painter.translate(m_zintSymbol->whitespace_width,0); + break;; + } + } + + while(!(module_set(m_zintSymbol->rows - 1, comp_offset))) { + comp_offset++; + } + xoffset = comp_offset; + + /* Set up some values for displaying EAN and UPC symbols correctly */ + main_width = m_zintSymbol->width; + if ((((m_zintSymbol->symbology == BARCODE_EANX) && (m_zintSymbol->rows == 1)) || (m_zintSymbol->symbology == BARCODE_EANX_CC)) + || (m_zintSymbol->symbology == BARCODE_ISBNX)) { + switch(caption.size()) { + case 13: /* EAN 13 */ + case 16: + case 19: + if(m_zintSymbol->whitespace_width == 0) { + m_zintSymbol->whitespace_width = 10; + } + main_width = 96 + comp_offset; + break; + default: + main_width = 68 + comp_offset; + break; + } + } + + if (((m_zintSymbol->symbology == BARCODE_UPCA) && (m_zintSymbol->rows == 1)) || (m_zintSymbol->symbology == BARCODE_UPCA_CC)) { + if(m_zintSymbol->whitespace_width == 0) { + m_zintSymbol->whitespace_width = 10; + } + main_width = 96 + comp_offset; + } + + if (((m_zintSymbol->symbology == BARCODE_UPCE) && (m_zintSymbol->rows == 1)) || (m_zintSymbol->symbology == BARCODE_UPCE_CC)) { + if(m_zintSymbol->whitespace_width == 0) { + m_zintSymbol->whitespace_width = 10; + } + main_width = 51 + comp_offset; + } + + p.setWidth(1); + painter.setPen(p); + + if (m_zintSymbol->symbology == BARCODE_MAXICODE) + { + /* Draw Maxicode with hexagons */ + painter.save(); + painter.setRenderHint(QPainter::Antialiasing); + for (int r=0;rrows;r++) + { + for (int c=0;cwidth;c++) + { + if (module_set(r, c)) + { + qreal col=(qreal)c*(maxi_width+1)+(r%2)*((maxi_width+1)/2); + qreal row=(qreal)r*(maxi_width+1)*0.868; + QPainterPath pt; + pt.moveTo(col+maxi_width/2, row); + pt.lineTo(col+maxi_width, row+maxi_diagonal/4); + pt.lineTo(col+maxi_width, row+(maxi_diagonal-maxi_diagonal/4)); + pt.lineTo(col+maxi_width/2, row+maxi_diagonal); + pt.lineTo(col, row+(maxi_diagonal-maxi_diagonal/4)); + pt.lineTo(col, row+maxi_diagonal/4); + pt.lineTo(col+maxi_width/2, row); + painter.fillPath(pt,QBrush(m_fgColor)); + } + } + } + p.setWidth(maxi_width); + painter.setPen(p); + const qreal w=maxi_width+1; + painter.drawEllipse(QPointF(14.5*w,16.5*w*0.868),w,w); + painter.drawEllipse(QPointF(14.5*w,16.5*w*0.868),w+w*1.5,w+w*1.5); + painter.drawEllipse(QPointF(14.5*w,16.5*w*0.868),w+w*3,w+w*3); + painter.restore(); + } + else + { + /* Draw all other symbols with rectangles */ + int y=0; + for (int row=0;rowrows;row++) + { + for (int i=0;iwidth;i++) { + if (module_set(row, i)) + { + int ed = module_set(row, i); + int linewidth=0; + for (int j=i;jwidth;j++,linewidth++) + if (ed != module_set(row, j)) + break; + QColor color; + color=m_fgColor; + + if(!((i > main_width) && (row == m_zintSymbol->rows - 1))) { + painter.fillRect(i,y,linewidth,m_zintSymbol->row_height[row],QBrush(color)); + } else { + painter.fillRect(i,y + 8,linewidth,m_zintSymbol->row_height[row] - 3,QBrush(color)); + addon_text_height = y; + } + } + } + /* Add row binding */ + if(((m_zintSymbol->symbology == BARCODE_CODE16K) || (m_zintSymbol->symbology == BARCODE_CODE49)) && (row != 0)) { + painter.fillRect(0,y - 1,m_zintSymbol->width,2,QBrush(m_fgColor)); + } + y+=m_zintSymbol->row_height[row]; + } + } + + textdone = false; + + if(m_hidetext == false) { + painter.setFont(fontSmall); + if(((m_zintSymbol->symbology == BARCODE_EANX) || (m_zintSymbol->symbology == BARCODE_EANX_CC)) || + (m_zintSymbol->symbology == BARCODE_ISBNX)) { + /* Add bridge and format text for EAN */ + switch(caption.size()) { + case 8: + case 11: + case 14: + painter.fillRect(0 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(2 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(32 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(34 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(64 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(66 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.setFont(fontLarge); + painter.drawText(3 + xoffset, m_zintSymbol->height + yoffset, 29, 9,Qt::AlignCenter, caption.mid(0,4)); + painter.drawText(35 + xoffset, m_zintSymbol->height + yoffset, 29, 9,Qt::AlignCenter, caption.mid(4,4)); + if(caption.size() == 11) { /* EAN-2 */ painter.drawText(76 + xoffset, addon_text_height, 20, 9,Qt::AlignCenter, caption.mid(9,2)); }; + if(caption.size() == 14) { /* EAN-5 */ painter.drawText(76 + xoffset, addon_text_height, 47, 9,Qt::AlignCenter, caption.mid(9,5)); }; + painter.setFont(fontSmall); + textdone = true; + break; + case 13: + case 16: + case 19: + painter.fillRect(0 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(2 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(46 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(48 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(92 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(94 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.setFont(fontLarge); + painter.drawText(xoffset - 7, m_zintSymbol->height + yoffset, 7, 9,Qt::AlignCenter, caption.mid(0,1)); + painter.drawText(3 + xoffset, m_zintSymbol->height + yoffset, 43, 9,Qt::AlignCenter, caption.mid(1,6)); + painter.drawText(49 + xoffset, m_zintSymbol->height + yoffset, 43, 9,Qt::AlignCenter, caption.mid(7,6)); + if(caption.size() == 16) { /* EAN-2 */ painter.drawText(104 + xoffset, addon_text_height, 20, 9,Qt::AlignCenter, caption.mid(14,2)); }; + if(caption.size() == 19) { /* EAN-5 */ painter.drawText(104 + xoffset, addon_text_height, 47, 9,Qt::AlignCenter, caption.mid(14,5)); }; + painter.setFont(fontSmall); + textdone = true; + break; + } + if(textdone == false) { + painter.setFont(fontLarge); + painter.drawText(0, m_zintSymbol->height, m_zintSymbol->width, 9,Qt::AlignCenter, caption); + painter.setFont(fontSmall); + textdone = true; + } + } + + if((m_zintSymbol->symbology == BARCODE_UPCA) || (m_zintSymbol->symbology == BARCODE_UPCA_CC)) { + /* Add bridge and format text for UPC-A */ + int block_width; + bool latch = true; + + j = 0 + comp_offset; + do { + block_width = 0; + do { + block_width++; + } while (module_set(m_zintSymbol->rows - 1, j + block_width) == module_set(m_zintSymbol->rows - 1, j)); + if(latch == true) { + /* a bar */ + painter.fillRect(j + xoffset - comp_offset,m_zintSymbol->height,block_width,5,QBrush(m_fgColor)); + latch = false; + } else { + /* a space */ + latch = true; + } + j += block_width; + } while (j < 11 + comp_offset); + painter.fillRect(46 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(48 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + latch = true; + j = 85 + comp_offset; + do { + block_width = 0; + do { + block_width++; + } while (module_set(m_zintSymbol->rows - 1, j + block_width) == module_set(m_zintSymbol->rows - 1, j)); + if(latch == true) { + /* a bar */ + painter.fillRect(j + xoffset - comp_offset,m_zintSymbol->height,block_width,5,QBrush(m_fgColor)); + latch = false; + } else { + /* a space */ + latch = true; + } + j += block_width; + } while (j < 96 + comp_offset); + painter.drawText(xoffset - 7, m_zintSymbol->height + yoffset + 2, 7, 7,Qt::AlignCenter, caption.mid(0,1)); + painter.drawText(96 + xoffset, m_zintSymbol->height + yoffset + 2, 7, 7,Qt::AlignCenter, caption.mid(11,1)); + painter.setFont(fontLarge); + painter.drawText(11 + xoffset, m_zintSymbol->height + yoffset, 35, 9,Qt::AlignCenter, caption.mid(1,5)); + painter.drawText(49 + xoffset, m_zintSymbol->height + yoffset, 35, 9,Qt::AlignCenter, caption.mid(6,5)); + if(caption.size() == 15) { /* EAN-2 */ painter.drawText(104 + xoffset, addon_text_height, 20, 9,Qt::AlignCenter, caption.mid(13,2)); }; + if(caption.size() == 18) { /* EAN-5 */ painter.drawText(104 + xoffset, addon_text_height, 47, 9,Qt::AlignCenter, caption.mid(13,5)); }; + painter.setFont(fontSmall); + textdone = true; + } + + if((m_zintSymbol->symbology == BARCODE_UPCE) || (m_zintSymbol->symbology == BARCODE_UPCE_CC)) { + /* Add bridge and format text for UPC-E */ + painter.fillRect(0 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(2 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(46 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(48 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.fillRect(50 + xoffset,m_zintSymbol->height,1,5,QBrush(m_fgColor)); + painter.drawText(xoffset - 7, m_zintSymbol->height + yoffset + 2, 7, 7,Qt::AlignCenter, caption.mid(0,1)); + painter.drawText(51 + xoffset, m_zintSymbol->height + yoffset + 2, 7, 7,Qt::AlignCenter, caption.mid(7,1)); + painter.setFont(fontLarge); + painter.drawText(3 + xoffset, m_zintSymbol->height + yoffset, 43, 9,Qt::AlignCenter, caption.mid(1,6)); + if(caption.size() == 11) { /* EAN-2 */ painter.drawText(60 + xoffset, addon_text_height, 20, 9,Qt::AlignCenter, caption.mid(9,2)); }; + if(caption.size() == 14) { /* EAN-2 */ painter.drawText(60 + xoffset, addon_text_height, 47, 9,Qt::AlignCenter, caption.mid(9,5)); }; + painter.setFont(fontSmall); + textdone = true; + } + } /* if (m_hidetext == false) */ + + if((m_hidetext == false) && (textdone == false)) { + /* Add text to any other symbol */ + painter.drawText(0, m_zintSymbol->height + yoffset, m_zintSymbol->width, 7, Qt::AlignCenter, caption); + } + painter.restore(); +} + +const QString & QZint::lastError() +{ + return m_lastError; +} + +bool QZint::hasErrors() +{ + return m_lastError.length(); +} + +} + diff --git a/3rdparty/zint-2.4.4/backend_qt4/qzint.h b/3rdparty/zint-2.4.4/backend_qt4/qzint.h new file mode 100644 index 0000000..cf11a04 --- /dev/null +++ b/3rdparty/zint-2.4.4/backend_qt4/qzint.h @@ -0,0 +1,126 @@ +/*************************************************************************** + * Copyright (C) 2008 by BogDan Vatra * + * bogdan@licentia.eu * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + ***************************************************************************/ + +#ifndef BARCODERENDER_H +#define BARCODERENDER_H + +#include "qzint_global.h" +#include +#include + + +namespace Zint +{ +#include "zint.h" + +class QZINTSHARED_EXPORT QZint +{ +private: + +public: + enum BorderType{NO_BORDER=0, BIND=2, BOX=4}; + enum AspectRatioMode{IgnoreAspectRatio=0, KeepAspectRatio=1, CenterBarCode=2}; + +public: + QZint(); + ~QZint(); + + int symbol(); + void setSymbol(int symbol); + + QString text(); + void setText(const QString & text); + + QString primaryMessage(); + void setPrimaryMessage(const QString & primaryMessage); + + void setHeight(int height); + int height(); + + void setWidth(int width); + int width(); + + void setOption3(int option); + + QColor fgColor(); + void setFgColor(const QColor & fgColor); + + QColor bgColor(); + void setBgColor(const QColor & bgColor); + + BorderType borderType(); + void setBorderType(BorderType border); + + int borderWidth(); + void setBorderWidth(int boderWidth); + + int pdf417CodeWords(); + void setPdf417CodeWords(int pdf417CodeWords); + + int securityLevel(); + void setSecurityLevel(int securityLevel); + + float scale(); + void setScale(float scale); + + int mode(); + void setMode(int securityLevel); + + void setInputMode(int input_mode); + + void setWhitespace(int whitespace); + + QString error_message(); + + void render(QPainter & painter, const QRectF & paintRect, AspectRatioMode mode=IgnoreAspectRatio); + + const QString & lastError(); + bool hasErrors(); + + bool save_to_file(QString filename); + + void setHideText(bool hide); + +private: + void encode(); + int module_set(int y_coord, int x_coord); + +private: + int m_symbol; + QString m_text; + QString m_primaryMessage; + int m_height; + BorderType m_border; + int m_borderWidth; + int m_width; + int m_securityLevel; + int m_pdf417CodeWords; + int m_input_mode; + QColor m_fgColor; + QColor m_bgColor; + QString m_lastError; + int m_error; + int m_whitespace; + zint_symbol * m_zintSymbol; + float m_scale; + int m_option_3; + bool m_hidetext; +}; +} + +extern "C" QZINTSHARED_EXPORT Zint::QZint* createWidget(); + +#endif diff --git a/3rdparty/zint-2.4.4/backend_qt4/qzint_global.h b/3rdparty/zint-2.4.4/backend_qt4/qzint_global.h new file mode 100644 index 0000000..025b16e --- /dev/null +++ b/3rdparty/zint-2.4.4/backend_qt4/qzint_global.h @@ -0,0 +1,12 @@ +#ifndef QZINT_GLOBAL_H +#define QZINT_GLOBAL_H + +#include + +#if defined(QZINT_LIBRARY) +# define QZINTSHARED_EXPORT Q_DECL_EXPORT +#else +# define QZINTSHARED_EXPORT Q_DECL_IMPORT +#endif + +#endif // QZINT_GLOBAL_H diff --git a/demo/r1/r1.pro b/demo/r1/r1.pro index 9c95ac4..98adb4c 100644 --- a/demo/r1/r1.pro +++ b/demo/r1/r1.pro @@ -30,6 +30,8 @@ CONFIG(release, debug|release){ BUILD_TYPE = debug } CONFIG -= app_bundle +CONFIG += create_prl +CONFIG += link_prl unix{ UNIX_DIR = $$OUT_PWD/../build/unix @@ -41,7 +43,7 @@ unix{ OBJECTS_DIR = $${DEST_DIR}/obj RCC_DIR = $${DEST_DIR}/rcc - LIBS += -L$$PWD/../../lib/$${BUILD_TYPE} -llimereport + LIBS += -L$$PWD/../../lib/unix/$${BUILD_TYPE} -llimereport DESTDIR = $$DEST_DIR/bin QMAKE_POST_LINK += mkdir -p $$quote($$DESTDIR) | $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DESTDIR) $$escape_expand(\n\t) } @@ -63,5 +65,5 @@ win32 { RC_FILE += mainicon.rc QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DESTDIR) $$escape_expand(\\n\\t) - LIBS += -L$$PWD/../../lib/$${BUILD_TYPE} -llimereport + LIBS += -L$$PWD/../../lib/win32/$${BUILD_TYPE} -llimereport } diff --git a/limereport.pro b/limereport.pro index 5f4a9ae..e1d5a0f 100644 --- a/limereport.pro +++ b/limereport.pro @@ -1,16 +1,26 @@ -#CONFIG +=zint -#QMAKE_CFLAGS += -std=c99 -#ZINT_PATH = $$PWD/../zint-2.4.3 -#ZINT_VERSION = 2.4.3 -#include(qzint.pri) -include(report-lib.pri) +DEFINES += WITH_ZINT +contains (DEFINES,WITH_ZINT){ + CONFIG +=zint + include(3rdparty/3rdparty.pro) +} +include(report-lib.pri) TEMPLATE = lib QT += core xml sql script TARGET = limereport DEFINES += LIMEREPORT_EXPORTS +CONFIG(release, debug|release){ + message(Release) + BUILD_TYPE = release +}else{ + message(Debug) + BUILD_TYPE = debug +} +CONFIG += create_prl +CONFIG += link_prl + EXTRA_FILES += \ $$PWD/src/lrglobal.cpp \ $$PWD/src/lrglobal.h \ @@ -25,38 +35,41 @@ unix { for(FILE,EXTRA_FILES){ QMAKE_POST_LINK += $$quote($$QMAKE_COPY $${FILE} $${DEST_DIR}$$escape_expand(\n\t)) } - MOC_DIR = $${OUT_PWD}/unix/moc - UI_DIR = $${OUT_PWD}/unix/ui - UI_HEADERS_DIR = $${OUT_PWD}/unix/ui - UI_SOURCES_DIR = $${OUT_PWD}/unix/ui - OBJECTS_DIR = $${OUT_PWD}/unix/obj - RCC_DIR = $${OUT_PWD}/unix/rcc + MOC_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/moc + UI_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui + UI_HEADERS_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui + UI_SOURCES_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui + OBJECTS_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/obj + RCC_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/rcc + DESTDIR = $$PWD/lib/unix/$${BUILD_TYPE} + for(FILE,EXTRA_FILES){ + QMAKE_POST_LINK += $$QMAKE_COPY $$quote($$FILE) $$quote($$DESTDIR/include) $$escape_expand(\\n\\t) + } + } win32 { EXTRA_FILES ~= s,/,\\,g DEST_DIR ~= s,/,\\,g for(FILE,EXTRA_FILES){ - QMAKE_POST_LINK += $$QMAKE_COPY $$quote($$FILE) $$quote($$DEST_DIR) $$escape_expand(\\n\\t) + QMAKE_POST_LINK += $$QMAKE_COPY $$quote($$FILE) $$quote($$DEST_DIR) $$escape_expand(\\n\\t) } - MOC_DIR = $${OUT_PWD}/win32/moc - UI_DIR = $${OUT_PWD}/win32/ui - UI_HEADERS_DIR = $${OUT_PWD}/win32/ui - UI_SOURCES_DIR = $${OUT_PWD}/win32/ui - OBJECTS_DIR = $${OUT_PWD}/win32/obj - RCC_DIR = $${OUT_PWD}/win32/rcc -} + MOC_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/moc + UI_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui + UI_HEADERS_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui + UI_SOURCES_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui + OBJECTS_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/obj + RCC_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/rcc + DESTDIR = $$PWD/lib/win32/$${BUILD_TYPE} -DESTDIR = $$PWD/lib +} DEPENDPATH += report report/bands report/base report/databrowser report/items report/objectinspector INCLUDEPATH += report report/bands report/base report/databrowser report/items report/objectinspector -CONFIG(release, debug|release): DESTDIR = $$PWD/lib/release/ -else:CONFIG(debug, debug|release): DESTDIR = $$PWD/lib/debug/ +contains(DEFINES,WITH_ZINT){ -#win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../zint-2.4.3/build-backend_dll-Desktop_Qt_5_5_0_MSVC2010_32bit-Release/release/ -lQtZint22 -#else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../zint-2.4.3/build-backend_dll-Desktop_Qt_5_5_0_MSVC2010_32bit-Release/debug/ -lQtZint22 + LIBS += -L$${DEST_DIR} -lQtZint +} -#INCLUDEPATH += $$PWD/../zint-2.4.3/backend $$PWD/../zint-2.4.3/backend_qt4 -#DEPENDPATH += $$PWD/../zint-2.4.3/backend $$PWD/../zint-2.4.3/backend_qt4 +INSTALLS += target From 598d4f10ed285edecf751bb4b0e080c3f4e4c3a6 Mon Sep 17 00:00:00 2001 From: newsages Date: Mon, 21 Mar 2016 02:12:30 +0100 Subject: [PATCH 3/3] Change to subforder project model. --- 3rdparty/zint-2.4.4/backend_qt4/Zint.pro | 4 +- demo/r1/demo_reports/categories.lrxml | 170 ----- demo/r1/demo_reports/columns_demo.lrxml | 245 ------- ...eport1_report_header_group_subdetail.lrxml | 632 ------------------ demo/r1/demo_reports/northwind.db | Bin 925696 -> 0 bytes demo/r1/demo_reports/ordres_by_date.lrxml | 168 ----- demo/r1/demo_reports/png/Beverage.png | Bin 72283 -> 0 bytes demo/r1/demo_reports/png/Condiments.png | Bin 52335 -> 0 bytes demo/r1/demo_reports/png/Confections.png | Bin 93774 -> 0 bytes demo/r1/demo_reports/png/Confections1.png | Bin 64048 -> 0 bytes demo/r1/demo_reports/png/Confections2.png | Bin 37359 -> 0 bytes demo/r1/demo_reports/png/Dairy_Products.png | Bin 36952 -> 0 bytes demo/r1/demo_reports/png/Grains_Cereals.png | Bin 60122 -> 0 bytes demo/r1/demo_reports/png/Grains_Cereals1.png | Bin 66362 -> 0 bytes demo/r1/demo_reports/png/Meat_Poultry.png | Bin 70514 -> 0 bytes demo/r1/demo_reports/png/Produce.png | Bin 67390 -> 0 bytes demo/r1/demo_reports/png/Seafood.png | Bin 67298 -> 0 bytes demo/r1/mainicon.rc | 1 - demo/r1/r1.pro | 69 -- demo_r1/demo_r1.pro | 74 ++ {demo/r1 => demo_r1}/images/logo.png | Bin {demo/r1 => demo_r1}/images/lr.png | Bin {demo/r1 => demo_r1}/lr1.ico | Bin {demo/r1 => demo_r1}/lr6.ico | Bin {demo/r1 => demo_r1}/main.cpp | 0 {demo/r1 => demo_r1}/main.ico | Bin {demo/r1 => demo_r1}/mainwindow.cpp | 0 {demo/r1 => demo_r1}/mainwindow.h | 0 {demo/r1 => demo_r1}/mainwindow.ui | 0 {demo/r1 => demo_r1}/r1.qrc | 0 lib/.gitignore | 5 - limereport.pro | 76 +-- {src => limereport}/bands/lrdataband.cpp | 0 {src => limereport}/bands/lrdataband.h | 0 {src => limereport}/bands/lrgroupbands.cpp | 0 {src => limereport}/bands/lrgroupbands.h | 0 {src => limereport}/bands/lrpagefooter.cpp | 0 {src => limereport}/bands/lrpagefooter.h | 0 {src => limereport}/bands/lrpageheader.cpp | 0 {src => limereport}/bands/lrpageheader.h | 0 {src => limereport}/bands/lrreportfooter.cpp | 0 {src => limereport}/bands/lrreportfooter.h | 0 {src => limereport}/bands/lrreportheader.cpp | 0 {src => limereport}/bands/lrreportheader.h | 0 {src => limereport}/bands/lrsubdetailband.cpp | 0 {src => limereport}/bands/lrsubdetailband.h | 0 .../base/lrattribsabstractfactory.h | 0 .../base/lrsimpleabstractfactory.h | 0 {src => limereport}/base/lrsingleton.h | 0 .../databrowser/images/add.png | Bin .../databrowser/images/data.png | Bin .../databrowser/images/data1.png | Bin .../databrowser/images/data_add.png | Bin .../databrowser/images/data_add1.png | Bin .../databrowser/images/data_delete.png | Bin .../databrowser/images/data_delete1.png | Bin .../databrowser/images/data_edit.png | Bin .../databrowser/images/data_edit1.png | Bin .../databrowser/images/database_connect.png | Bin .../databrowser/images/database_connected.png | Bin .../images/database_connected2.png | Bin .../images/database_connected3.png | Bin .../images/database_disconnect.png | Bin .../databrowser/images/edit_table.png | Bin .../databrowser/images/error_message.png | Bin .../databrowser/images/error_message_2.png | Bin .../databrowser/images/field.png | Bin .../databrowser/images/plug-connect.png | Bin .../databrowser/images/plug-disconnect.png | Bin .../databrowser/images/remove.png | Bin .../databrowser/images/row.png | Bin .../databrowser/images/table.png | Bin .../databrowser/images/table_add.png | Bin .../databrowser/images/table_delete.png | Bin .../databrowser/images/table_delete1.png | Bin .../databrowser/images/table_edit.png | Bin .../databrowser/images/table_error.png | Bin .../databrowser/images/table_error1.png | Bin .../databrowser/images/table_good.png | Bin .../databrowser/images/table_good1.png | Bin .../databrowser/images/table_view.png | Bin .../databrowser/images/table_view1.png | Bin .../databrowser/images/value.png | Bin .../databrowser/images/value1.png | Bin .../databrowser/images/value_add.png | Bin .../databrowser/images/value_add1.png | Bin .../databrowser/images/value_add2.png | Bin .../databrowser/images/value_delete.png | Bin .../databrowser/images/value_delete1.png | Bin .../databrowser/images/value_edit.png | Bin .../databrowser/images/value_edit1.png | Bin .../databrowser/images/value_edit2.png | Bin .../databrowser/lrconnectiondialog.cpp | 0 .../databrowser/lrconnectiondialog.h | 0 .../databrowser/lrconnectiondialog.ui | 0 .../databrowser/lrdatabrowser.cpp | 0 .../databrowser/lrdatabrowser.h | 0 .../databrowser/lrdatabrowser.qrc | 0 .../databrowser/lrdatabrowser.ui | 0 .../databrowser/lrdatabrowsertree.cpp | 0 .../databrowser/lrdatabrowsertree.h | 0 .../databrowser/lrsqleditdialog.cpp | 0 .../databrowser/lrsqleditdialog.h | 0 .../databrowser/lrsqleditdialog.ui | 0 .../databrowser/lrvariabledialog.cpp | 0 .../databrowser/lrvariabledialog.h | 0 .../databrowser/lrvariabledialog.ui | 0 .../images/Control-Edit Box.png | Bin {src => limereport}/images/Hourglass_80.png | Bin {src => limereport}/images/PDF2.png | Bin {src => limereport}/images/addBand.png | Bin {src => limereport}/images/addBand1.png | Bin {src => limereport}/images/allLines.png | Bin {src => limereport}/images/allLines1.png | Bin {src => limereport}/images/barcode.png | Bin {src => limereport}/images/barcode2.png | Bin {src => limereport}/images/bottomLine.png | Bin {src => limereport}/images/bottomLine1.png | Bin {src => limereport}/images/bringToFront.png | Bin {src => limereport}/images/closebox.png | Bin {src => limereport}/images/copy.png | Bin {src => limereport}/images/copy2.png | Bin {src => limereport}/images/copy24.png | Bin {src => limereport}/images/cpyright_logo.png | Bin {src => limereport}/images/cut.png | Bin {src => limereport}/images/cut1.png | Bin {src => limereport}/images/cut24.png | Bin {src => limereport}/images/cut_24.png | Bin {src => limereport}/images/dasabases.png | Bin {src => limereport}/images/database.png | Bin {src => limereport}/images/delete.png | Bin {src => limereport}/images/delete1.png | Bin {src => limereport}/images/design.png | Bin {src => limereport}/images/dialog-close.png | Bin .../images/dialog-close_red.png | Bin {src => limereport}/images/disk_blue.png | Bin {src => limereport}/images/document_add.png | Bin {src => limereport}/images/document_add_1.png | Bin .../images/document_zoom_in.png | Bin .../images/document_zoom_in_1.png | Bin .../images/document_zoom_out.png | Bin .../images/document_zoom_out_1.png | Bin {src => limereport}/images/edit-copy_1_24.png | Bin .../images/edit-paste_1_24.png | Bin {src => limereport}/images/edit.png | Bin .../images/edit_control_24.png | Bin .../images/edit_control_2_24.png | Bin .../images/edit_control_3_24.png | Bin {src => limereport}/images/edit_layout.png | Bin .../images/edit_layout_2_24.png | Bin .../images/edit_layout_3_24.png | Bin .../images/edit_layout_4_24.png | Bin {src => limereport}/images/edit_pecil2.png | Bin {src => limereport}/images/empty.png | Bin {src => limereport}/images/errors.png | Bin {src => limereport}/images/field.png | Bin {src => limereport}/images/first2.png | Bin {src => limereport}/images/folder.png | Bin {src => limereport}/images/folder1.png | Bin {src => limereport}/images/folder3.png | Bin {src => limereport}/images/function2.png | Bin {src => limereport}/images/function3.png | Bin {src => limereport}/images/go-next.png | Bin {src => limereport}/images/grid.png | Bin {src => limereport}/images/hideLeftPanel.png | Bin {src => limereport}/images/hideRightPanel.png | Bin {src => limereport}/images/hlayout.png | Bin {src => limereport}/images/hlayuot_1_24.png | Bin {src => limereport}/images/hlayuot_2_24.png | Bin {src => limereport}/images/hlayuot_3_24.png | Bin {src => limereport}/images/last2.png | Bin {src => limereport}/images/layuot_create.png | Bin .../images/layuot_create_24.png | Bin .../images/layuot_delete_24.png | Bin {src => limereport}/images/layuot_move.png | Bin {src => limereport}/images/layuot_select.png | Bin .../images/layuot_select_24.png | Bin {src => limereport}/images/leftLine.png | Bin {src => limereport}/images/leftLine1.png | Bin {src => limereport}/images/logo.png | Bin {src => limereport}/images/logo_100.png | Bin {src => limereport}/images/magnet.png | Bin {src => limereport}/images/main.png | Bin {src => limereport}/images/move_back.png | Bin {src => limereport}/images/move_top_1.png | Bin {src => limereport}/images/new_leaf.png | Bin {src => limereport}/images/new_leaf1.png | Bin {src => limereport}/images/next.png | Bin {src => limereport}/images/next1.png | Bin {src => limereport}/images/next2.png | Bin {src => limereport}/images/noLines.png | Bin {src => limereport}/images/noLines1.png | Bin {src => limereport}/images/paste.png | Bin {src => limereport}/images/paste1.png | Bin {src => limereport}/images/paste_1_24.png | Bin {src => limereport}/images/pin_green.png | Bin {src => limereport}/images/prin-preview2.png | Bin .../images/prin-preview_4_24.png | Bin {src => limereport}/images/print.png | Bin {src => limereport}/images/print2_big.png | Bin {src => limereport}/images/print_2_24.png | Bin {src => limereport}/images/print_preview.png | Bin {src => limereport}/images/print_preview1.png | Bin {src => limereport}/images/print_preview2.png | Bin {src => limereport}/images/prior.png | Bin {src => limereport}/images/prior1.png | Bin {src => limereport}/images/prior2.png | Bin {src => limereport}/images/redo.png | Bin {src => limereport}/images/redo1.png | Bin {src => limereport}/images/rightLine.png | Bin {src => limereport}/images/rightLine1.png | Bin {src => limereport}/images/save.png | Bin {src => limereport}/images/save_as_1_24.png | Bin {src => limereport}/images/sendToBack.png | Bin {src => limereport}/images/settings.png | Bin {src => limereport}/images/table1.png | Bin .../images/text-align-botom.png | Bin .../images/text-align-botom1.png | Bin .../images/text-align-justify.png | Bin .../images/text-align-justify1.png | Bin {src => limereport}/images/text-align-top.png | Bin .../images/text-align-top1.png | Bin .../images/text-align-v-center.png | Bin .../images/text-align-v-center1.png | Bin .../images/text_align_center.png | Bin .../images/text_align_center1.png | Bin .../images/text_align_left.png | Bin .../images/text_align_left1.png | Bin .../images/text_align_right.png | Bin .../images/text_align_right1.png | Bin {src => limereport}/images/text_bold.png | Bin {src => limereport}/images/text_bold1.png | Bin {src => limereport}/images/text_italic.png | Bin {src => limereport}/images/text_italic1.png | Bin {src => limereport}/images/text_underline.png | Bin .../images/text_underline1.png | Bin {src => limereport}/images/toBack.png | Bin {src => limereport}/images/toBottom.png | Bin {src => limereport}/images/toCenter.png | Bin {src => limereport}/images/toFront.png | Bin {src => limereport}/images/toLeft1.png | Bin {src => limereport}/images/toRight.png | Bin {src => limereport}/images/toSameHeight.png | Bin {src => limereport}/images/toSameWidth.png | Bin {src => limereport}/images/toTop.png | Bin {src => limereport}/images/toVCernter.png | Bin {src => limereport}/images/to_bottom.png | Bin {src => limereport}/images/to_center.png | Bin {src => limereport}/images/to_h_center.png | Bin {src => limereport}/images/to_left.png | Bin {src => limereport}/images/to_right.png | Bin {src => limereport}/images/to_same_height.png | Bin {src => limereport}/images/to_same_width.png | Bin {src => limereport}/images/to_top.png | Bin {src => limereport}/images/topLine.png | Bin {src => limereport}/images/topLine1.png | Bin {src => limereport}/images/undo.png | Bin {src => limereport}/images/undo1.png | Bin {src => limereport}/images/value.png | Bin {src => limereport}/images/var1.png | Bin {src => limereport}/images/variable.png | Bin {src => limereport}/images/variable1.png | Bin {src => limereport}/images/vlayout.png | Bin {src => limereport}/images/zoom-in_2_16.png | Bin {src => limereport}/images/zoom_in.png | Bin {src => limereport}/images/zoom_in1.png | Bin {src => limereport}/images/zoom_out.png | Bin {src => limereport}/images/zoom_out1.png | Bin .../items/editors/lrfonteditorwidget.cpp | 0 .../items/editors/lrfonteditorwidget.h | 0 .../items/editors/lritemeditorwidget.cpp | 0 .../items/editors/lritemeditorwidget.h | 0 .../editors/lritemsaligneditorwidget.cpp | 0 .../items/editors/lritemsaligneditorwidget.h | 0 .../editors/lritemsborderseditorwidget.cpp | 0 .../editors/lritemsborderseditorwidget.h | 0 .../editors/lrtextalignmenteditorwidget.cpp | 0 .../editors/lrtextalignmenteditorwidget.h | 0 {src => limereport}/items/images/DataBand.png | Bin .../items/images/DataBand16.png | Bin .../items/images/GroupFooter16.png | Bin .../items/images/GroupHeader16.png | Bin .../items/images/PageFooter.png | Bin .../items/images/PageFooter16.png | Bin .../items/images/PageHeader.png | Bin .../items/images/PageHeader16.png | Bin .../items/images/ReportFooter.png | Bin .../items/images/ReportFooter16.png | Bin .../items/images/ReportHeader.png | Bin .../items/images/ReportHeader16.png | Bin .../items/images/ReportPage.png | Bin .../items/images/ReportPage16.png | Bin .../items/images/SubDetailBand16.png | Bin .../items/images/SubDetailFooterBand16.png | Bin .../items/images/SubDetailHeaderBand16.png | Bin {src => limereport}/items/images/addBand1.png | Bin {src => limereport}/items/images/barcode2.png | Bin {src => limereport}/items/images/hlayout.png | Bin .../items/images/hlayuot_3_24.png | Bin .../items/images/imageItem.png | Bin .../items/images/imageItem1.png | Bin .../items/images/imageItem2.png | Bin .../items/images/insert-text.png | Bin .../items/images/insert-text_2.png | Bin .../items/images/insert-text_3.png | Bin .../items/images/insert-text_5.png | Bin {src => limereport}/items/images/settings.png | Bin .../items/images/settings2.png | Bin {src => limereport}/items/images/shape2.png | Bin {src => limereport}/items/images/shape4.png | Bin {src => limereport}/items/images/shape5.png | Bin {src => limereport}/items/items.qrc | 0 {src => limereport}/items/lralignpropitem.cpp | 0 {src => limereport}/items/lralignpropitem.h | 0 {src => limereport}/items/lrbarcodeitem.cpp | 0 {src => limereport}/items/lrbarcodeitem.h | 0 .../items/lrhorizontallayout.cpp | 0 .../items/lrhorizontallayout.h | 0 {src => limereport}/items/lrimageitem.cpp | 0 {src => limereport}/items/lrimageitem.h | 0 {src => limereport}/items/lrshapeitem.cpp | 0 {src => limereport}/items/lrshapeitem.h | 0 .../items/lrsimpletagparser.cpp | 0 {src => limereport}/items/lrsimpletagparser.h | 0 .../items/lrsubitemparentpropitem.cpp | 0 .../items/lrsubitemparentpropitem.h | 0 {src => limereport}/items/lrtextitem.cpp | 0 {src => limereport}/items/lrtextitem.h | 0 .../items/lrtextitemeditor.cpp | 0 {src => limereport}/items/lrtextitemeditor.h | 0 {src => limereport}/items/lrtextitemeditor.ui | 0 report-lib.pri => limereport/limereport.pro | 103 ++- {src => limereport}/lraboutdialog.cpp | 0 {src => limereport}/lraboutdialog.h | 0 {src => limereport}/lraboutdialog.ui | 0 {src => limereport}/lrbanddesignintf.cpp | 0 {src => limereport}/lrbanddesignintf.h | 0 {src => limereport}/lrbandsmanager.cpp | 0 {src => limereport}/lrbandsmanager.h | 0 {src => limereport}/lrbasedesignintf.cpp | 0 {src => limereport}/lrbasedesignintf.h | 0 .../lrcallbackdatasourceintf.h | 0 {src => limereport}/lrcollection.h | 0 {src => limereport}/lrdatadesignintf.cpp | 0 {src => limereport}/lrdatadesignintf.h | 0 {src => limereport}/lrdatasourcemanager.cpp | 0 {src => limereport}/lrdatasourcemanager.h | 0 {src => limereport}/lrdatasourcemanagerintf.h | 0 {src => limereport}/lrdesignelementsfactory.h | 0 {src => limereport}/lrglobal.cpp | 0 {src => limereport}/lrglobal.h | 0 {src => limereport}/lrgroupfunctions.cpp | 0 {src => limereport}/lrgroupfunctions.h | 0 {src => limereport}/lritemdesignintf.cpp | 0 {src => limereport}/lritemdesignintf.h | 0 {src => limereport}/lrpagedesignintf.cpp | 0 {src => limereport}/lrpagedesignintf.h | 0 {src => limereport}/lrpageitemdesignintf.cpp | 0 {src => limereport}/lrpageitemdesignintf.h | 0 {src => limereport}/lrpreviewreportwindow.cpp | 0 {src => limereport}/lrpreviewreportwindow.h | 0 {src => limereport}/lrpreviewreportwindow.ui | 0 {src => limereport}/lrreportdesignwidget.cpp | 0 {src => limereport}/lrreportdesignwidget.h | 0 {src => limereport}/lrreportdesignwindow.cpp | 0 {src => limereport}/lrreportdesignwindow.h | 0 {src => limereport}/lrreportengine.cpp | 0 {src => limereport}/lrreportengine.h | 0 {src => limereport}/lrreportengine_p.h | 0 {src => limereport}/lrreportrender.cpp | 0 {src => limereport}/lrreportrender.h | 0 {src => limereport}/lrscriptenginemanager.cpp | 0 {src => limereport}/lrscriptenginemanager.h | 0 .../lrscriptenginemanagerintf.h | 0 {src => limereport}/lrsettingdialog.cpp | 0 {src => limereport}/lrsettingdialog.h | 0 {src => limereport}/lrsettingdialog.ui | 0 {src => limereport}/lrsimplecrypt.cpp | 0 {src => limereport}/lrsimplecrypt.h | 0 {src => limereport}/lrvariablesholder.cpp | 0 {src => limereport}/lrvariablesholder.h | 0 .../editors/lrbuttonlineeditor.cpp | 0 .../editors/lrbuttonlineeditor.h | 0 .../editors/lrcheckboxeditor.cpp | 0 .../editors/lrcheckboxeditor.h | 0 .../objectinspector/editors/lrcoloreditor.cpp | 0 .../objectinspector/editors/lrcoloreditor.h | 0 .../editors/lrcomboboxeditor.cpp | 0 .../editors/lrcomboboxeditor.h | 0 .../objectinspector/editors/lrfonteditor.cpp | 0 .../objectinspector/editors/lrfonteditor.h | 0 .../objectinspector/editors/lrimageeditor.cpp | 0 .../objectinspector/editors/lrimageeditor.h | 0 .../editors/lrtextitempropertyeditor.cpp | 0 .../editors/lrtextitempropertyeditor.h | 0 .../editors/ltextitempropertyeditor.ui | 0 .../objectinspector/images/check.png | Bin .../objectinspector/images/check_w.png | Bin .../objectinspector/images/clear.png | Bin .../objectinspector/images/edit_16.ico | Bin .../objectinspector/images/uncheck.png | Bin .../objectinspector/images/uncheck_w.png | Bin .../objectinspector/lobjectinspector.qrc | 0 .../lrbasedesignobjectmodel.cpp | 0 .../objectinspector/lrbasedesignobjectmodel.h | 0 .../lrobjectinspectorwidget.cpp | 0 .../objectinspector/lrobjectinspectorwidget.h | 0 .../objectinspector/lrobjectitemmodel.cpp | 0 .../objectinspector/lrobjectitemmodel.h | 0 .../objectinspector/lrobjectpropitem.cpp | 0 .../objectinspector/lrobjectpropitem.h | 0 .../objectinspector/lrpropertydelegate.cpp | 0 .../objectinspector/lrpropertydelegate.h | 0 .../propertyItems/lrboolpropitem.cpp | 0 .../propertyItems/lrboolpropitem.h | 0 .../propertyItems/lrcolorpropitem.cpp | 0 .../propertyItems/lrcolorpropitem.h | 0 .../propertyItems/lrcontentpropitem.cpp | 0 .../propertyItems/lrcontentpropitem.h | 0 .../propertyItems/lrdatasourcepropitem.cpp | 0 .../propertyItems/lrdatasourcepropitem.h | 0 .../propertyItems/lrenumpropitem.cpp | 0 .../propertyItems/lrenumpropitem.h | 0 .../propertyItems/lrflagspropitem.cpp | 0 .../propertyItems/lrflagspropitem.h | 0 .../propertyItems/lrfontpropitem.cpp | 0 .../propertyItems/lrfontpropitem.h | 0 .../propertyItems/lrgroupfieldpropitem.cpp | 0 .../propertyItems/lrgroupfieldpropitem.h | 0 .../propertyItems/lrimagepropitem.cpp | 0 .../propertyItems/lrimagepropitem.h | 0 .../propertyItems/lrintpropitem.cpp | 0 .../propertyItems/lrintpropitem.h | 0 .../propertyItems/lrqrealpropitem.cpp | 0 .../propertyItems/lrqrealpropitem.h | 0 .../propertyItems/lrrectproptem.cpp | 0 .../propertyItems/lrrectproptem.h | 0 .../propertyItems/lrstringpropitem.cpp | 0 .../propertyItems/lrstringpropitem.h | 0 .../objectsbrowser/lrobjectbrowser.cpp | 0 .../objectsbrowser/lrobjectbrowser.h | 0 {src => limereport}/report.qrc | 0 .../serializators/lrserializatorintf.h | 0 .../serializators/lrstorageintf.h | 0 .../lrxmlbasetypesserializators.cpp | 0 .../lrxmlbasetypesserializators.h | 0 .../serializators/lrxmlqrectserializator.cpp | 0 .../serializators/lrxmlqrectserializator.h | 0 .../serializators/lrxmlreader.cpp | 0 .../serializators/lrxmlreader.h | 0 .../serializators/lrxmlserializatorsfactory.h | 0 .../serializators/lrxmlwriter.cpp | 0 .../serializators/lrxmlwriter.h | 0 qzint.pri | 64 -- src/acollection.cpp | 30 - src/areportpreviewwidget.h | 48 -- src/databrowser/images/check.png | Bin 617 -> 0 bytes src/databrowser/images/check_circle.png | Bin 933 -> 0 bytes src/databrowser/images/cursor-small.png | Bin 397 -> 0 bytes src/databrowser/images/error.png | Bin 917 -> 0 bytes src/databrowser/images/greenled.png | Bin 537 -> 0 bytes src/databrowser/images/note_edit.png | Bin 1511 -> 0 bytes .../images/plug-disconnect-slash.png | Bin 1520 -> 0 bytes src/databrowser/images/pointer.png | Bin 157 -> 0 bytes src/databrowser/images/table_db.png | Bin 1494 -> 0 bytes src/images/PDF1.png | Bin 3045 -> 0 bytes src/images/barcode1.png | Bin 877 -> 0 bytes src/images/barcode3_16.png | Bin 521 -> 0 bytes src/images/barcode3_24.png | Bin 665 -> 0 bytes src/images/copy16.png | Bin 503 -> 0 bytes src/images/copy_2_16.png | Bin 527 -> 0 bytes src/images/copy_2_24.png | Bin 998 -> 0 bytes src/images/cut16.png | Bin 727 -> 0 bytes src/images/cut_1_24.png | Bin 1072 -> 0 bytes src/images/document-new_16.png | Bin 600 -> 0 bytes src/images/document-new_24.png | Bin 917 -> 0 bytes src/images/document_delete_16.png | Bin 935 -> 0 bytes src/images/document_delete_24.png | Bin 1586 -> 0 bytes src/images/edit-copy_1_16.png | Bin 498 -> 0 bytes src/images/edit-paste_1_16.png | Bin 557 -> 0 bytes src/images/edit-paste_2_24.png | Bin 1167 -> 0 bytes src/images/edit_cursor.png | Bin 5797 -> 0 bytes src/images/edit_pencil.png | Bin 1706 -> 0 bytes src/images/function.png | Bin 526 -> 0 bytes src/images/hourglass.png | Bin 9953 -> 0 bytes src/images/insert-text_16.png | Bin 592 -> 0 bytes src/images/insert-text_1_24.png | Bin 718 -> 0 bytes src/images/insert-text_24.png | Bin 846 -> 0 bytes src/images/main.ico | Bin 323550 -> 0 bytes src/images/new_1_16.png | Bin 691 -> 0 bytes src/images/new_1_24.png | Bin 1026 -> 0 bytes src/images/paste16.png | Bin 529 -> 0 bytes src/images/paste24.png | Bin 927 -> 0 bytes src/images/prin-preview_2.png | Bin 1453 -> 0 bytes src/images/prin-preview_3.png | Bin 1518 -> 0 bytes src/images/print_2.png | Bin 930 -> 0 bytes src/images/redo_1_16.png | Bin 875 -> 0 bytes src/images/redo_1_24.png | Bin 870 -> 0 bytes src/images/save_1_16.png | Bin 569 -> 0 bytes src/images/save_1_24.png | Bin 833 -> 0 bytes src/images/save_as_1_16.png | Bin 769 -> 0 bytes src/images/table.png | Bin 268 -> 0 bytes src/images/to_bottom_2.png | Bin 3161 -> 0 bytes src/images/to_center_2.png | Bin 3097 -> 0 bytes src/images/to_h_center_2.png | Bin 3114 -> 0 bytes src/images/to_left_2.png | Bin 3126 -> 0 bytes src/images/to_right_2.png | Bin 3132 -> 0 bytes src/images/to_same_height_2.png | Bin 3019 -> 0 bytes src/images/to_same_width_2.png | Bin 3005 -> 0 bytes src/images/to_top_2.png | Bin 3154 -> 0 bytes src/images/undo_1_16.png | Bin 847 -> 0 bytes src/images/undo_1_24.png | Bin 785 -> 0 bytes src/images/zoom-in_1_16.png | Bin 692 -> 0 bytes src/images/zoom-in_1_24.png | Bin 1049 -> 0 bytes src/images/zoom-out_1_16.png | Bin 688 -> 0 bytes src/images/zoom-out_1_24.png | Bin 1020 -> 0 bytes src/items/abordertextitem.cpp | 323 --------- src/items/abordertextitem.h | 110 --- src/items/images/Control-Edit Box.png | Bin 618 -> 0 bytes src/items/images/insert-text_1.png | Bin 997 -> 0 bytes src/lrserializatorsfactory.cpp | 30 - src/lrserializatorsfactory.h | 51 -- src/objectinspector/images/checked.png | Bin 343 -> 0 bytes src/objectinspector/images/unchecked.png | Bin 242 -> 0 bytes src/scriptbrowser/lrscriptbrowser.cpp | 195 ------ src/scriptbrowser/lrscriptbrowser.h | 77 --- src/serializators/aserializatorintf.cpp | 30 - src/serializators/astorageintf.cpp | 31 - src/waitform.cpp | 44 -- src/waitform.h | 51 -- src/waitform.ui | 58 -- 531 files changed, 167 insertions(+), 2522 deletions(-) delete mode 100644 demo/r1/demo_reports/categories.lrxml delete mode 100644 demo/r1/demo_reports/columns_demo.lrxml delete mode 100644 demo/r1/demo_reports/demoReport1_report_header_group_subdetail.lrxml delete mode 100644 demo/r1/demo_reports/northwind.db delete mode 100644 demo/r1/demo_reports/ordres_by_date.lrxml delete mode 100644 demo/r1/demo_reports/png/Beverage.png delete mode 100644 demo/r1/demo_reports/png/Condiments.png delete mode 100644 demo/r1/demo_reports/png/Confections.png delete mode 100644 demo/r1/demo_reports/png/Confections1.png delete mode 100644 demo/r1/demo_reports/png/Confections2.png delete mode 100644 demo/r1/demo_reports/png/Dairy_Products.png delete mode 100644 demo/r1/demo_reports/png/Grains_Cereals.png delete mode 100644 demo/r1/demo_reports/png/Grains_Cereals1.png delete mode 100644 demo/r1/demo_reports/png/Meat_Poultry.png delete mode 100644 demo/r1/demo_reports/png/Produce.png delete mode 100644 demo/r1/demo_reports/png/Seafood.png delete mode 100644 demo/r1/mainicon.rc delete mode 100644 demo/r1/r1.pro create mode 100644 demo_r1/demo_r1.pro rename {demo/r1 => demo_r1}/images/logo.png (100%) rename {demo/r1 => demo_r1}/images/lr.png (100%) rename {demo/r1 => demo_r1}/lr1.ico (100%) rename {demo/r1 => demo_r1}/lr6.ico (100%) rename {demo/r1 => demo_r1}/main.cpp (100%) rename {demo/r1 => demo_r1}/main.ico (100%) rename {demo/r1 => demo_r1}/mainwindow.cpp (100%) rename {demo/r1 => demo_r1}/mainwindow.h (100%) rename {demo/r1 => demo_r1}/mainwindow.ui (100%) rename {demo/r1 => demo_r1}/r1.qrc (100%) delete mode 100644 lib/.gitignore rename {src => limereport}/bands/lrdataband.cpp (100%) rename {src => limereport}/bands/lrdataband.h (100%) rename {src => limereport}/bands/lrgroupbands.cpp (100%) rename {src => limereport}/bands/lrgroupbands.h (100%) rename {src => limereport}/bands/lrpagefooter.cpp (100%) rename {src => limereport}/bands/lrpagefooter.h (100%) rename {src => limereport}/bands/lrpageheader.cpp (100%) rename {src => limereport}/bands/lrpageheader.h (100%) rename {src => limereport}/bands/lrreportfooter.cpp (100%) rename {src => limereport}/bands/lrreportfooter.h (100%) rename {src => limereport}/bands/lrreportheader.cpp (100%) rename {src => limereport}/bands/lrreportheader.h (100%) rename {src => limereport}/bands/lrsubdetailband.cpp (100%) rename {src => limereport}/bands/lrsubdetailband.h (100%) rename {src => limereport}/base/lrattribsabstractfactory.h (100%) rename {src => limereport}/base/lrsimpleabstractfactory.h (100%) rename {src => limereport}/base/lrsingleton.h (100%) rename {src => limereport}/databrowser/images/add.png (100%) rename {src => limereport}/databrowser/images/data.png (100%) rename {src => limereport}/databrowser/images/data1.png (100%) rename {src => limereport}/databrowser/images/data_add.png (100%) rename {src => limereport}/databrowser/images/data_add1.png (100%) rename {src => limereport}/databrowser/images/data_delete.png (100%) rename {src => limereport}/databrowser/images/data_delete1.png (100%) rename {src => limereport}/databrowser/images/data_edit.png (100%) rename {src => limereport}/databrowser/images/data_edit1.png (100%) rename {src => limereport}/databrowser/images/database_connect.png (100%) rename {src => limereport}/databrowser/images/database_connected.png (100%) rename {src => limereport}/databrowser/images/database_connected2.png (100%) rename {src => limereport}/databrowser/images/database_connected3.png (100%) rename {src => limereport}/databrowser/images/database_disconnect.png (100%) rename {src => limereport}/databrowser/images/edit_table.png (100%) rename {src => limereport}/databrowser/images/error_message.png (100%) rename {src => limereport}/databrowser/images/error_message_2.png (100%) rename {src => limereport}/databrowser/images/field.png (100%) rename {src => limereport}/databrowser/images/plug-connect.png (100%) rename {src => limereport}/databrowser/images/plug-disconnect.png (100%) rename {src => limereport}/databrowser/images/remove.png (100%) rename {src => limereport}/databrowser/images/row.png (100%) rename {src => limereport}/databrowser/images/table.png (100%) rename {src => limereport}/databrowser/images/table_add.png (100%) rename {src => limereport}/databrowser/images/table_delete.png (100%) rename {src => limereport}/databrowser/images/table_delete1.png (100%) rename {src => limereport}/databrowser/images/table_edit.png (100%) rename {src => limereport}/databrowser/images/table_error.png (100%) rename {src => limereport}/databrowser/images/table_error1.png (100%) rename {src => limereport}/databrowser/images/table_good.png (100%) rename {src => limereport}/databrowser/images/table_good1.png (100%) rename {src => limereport}/databrowser/images/table_view.png (100%) rename {src => limereport}/databrowser/images/table_view1.png (100%) rename {src => limereport}/databrowser/images/value.png (100%) rename {src => limereport}/databrowser/images/value1.png (100%) rename {src => limereport}/databrowser/images/value_add.png (100%) rename {src => limereport}/databrowser/images/value_add1.png (100%) rename {src => limereport}/databrowser/images/value_add2.png (100%) rename {src => limereport}/databrowser/images/value_delete.png (100%) rename {src => limereport}/databrowser/images/value_delete1.png (100%) rename {src => limereport}/databrowser/images/value_edit.png (100%) rename {src => limereport}/databrowser/images/value_edit1.png (100%) rename {src => limereport}/databrowser/images/value_edit2.png (100%) rename {src => limereport}/databrowser/lrconnectiondialog.cpp (100%) rename {src => limereport}/databrowser/lrconnectiondialog.h (100%) rename {src => limereport}/databrowser/lrconnectiondialog.ui (100%) rename {src => limereport}/databrowser/lrdatabrowser.cpp (100%) rename {src => limereport}/databrowser/lrdatabrowser.h (100%) rename {src => limereport}/databrowser/lrdatabrowser.qrc (100%) rename {src => limereport}/databrowser/lrdatabrowser.ui (100%) rename {src => limereport}/databrowser/lrdatabrowsertree.cpp (100%) rename {src => limereport}/databrowser/lrdatabrowsertree.h (100%) rename {src => limereport}/databrowser/lrsqleditdialog.cpp (100%) rename {src => limereport}/databrowser/lrsqleditdialog.h (100%) rename {src => limereport}/databrowser/lrsqleditdialog.ui (100%) rename {src => limereport}/databrowser/lrvariabledialog.cpp (100%) rename {src => limereport}/databrowser/lrvariabledialog.h (100%) rename {src => limereport}/databrowser/lrvariabledialog.ui (100%) rename {src => limereport}/images/Control-Edit Box.png (100%) rename {src => limereport}/images/Hourglass_80.png (100%) rename {src => limereport}/images/PDF2.png (100%) rename {src => limereport}/images/addBand.png (100%) rename {src => limereport}/images/addBand1.png (100%) rename {src => limereport}/images/allLines.png (100%) rename {src => limereport}/images/allLines1.png (100%) rename {src => limereport}/images/barcode.png (100%) rename {src => limereport}/images/barcode2.png (100%) rename {src => limereport}/images/bottomLine.png (100%) rename {src => limereport}/images/bottomLine1.png (100%) rename {src => limereport}/images/bringToFront.png (100%) rename {src => limereport}/images/closebox.png (100%) rename {src => limereport}/images/copy.png (100%) rename {src => limereport}/images/copy2.png (100%) rename {src => limereport}/images/copy24.png (100%) rename {src => limereport}/images/cpyright_logo.png (100%) rename {src => limereport}/images/cut.png (100%) rename {src => limereport}/images/cut1.png (100%) rename {src => limereport}/images/cut24.png (100%) rename {src => limereport}/images/cut_24.png (100%) rename {src => limereport}/images/dasabases.png (100%) rename {src => limereport}/images/database.png (100%) rename {src => limereport}/images/delete.png (100%) rename {src => limereport}/images/delete1.png (100%) rename {src => limereport}/images/design.png (100%) rename {src => limereport}/images/dialog-close.png (100%) rename {src => limereport}/images/dialog-close_red.png (100%) rename {src => limereport}/images/disk_blue.png (100%) rename {src => limereport}/images/document_add.png (100%) rename {src => limereport}/images/document_add_1.png (100%) rename {src => limereport}/images/document_zoom_in.png (100%) rename {src => limereport}/images/document_zoom_in_1.png (100%) rename {src => limereport}/images/document_zoom_out.png (100%) rename {src => limereport}/images/document_zoom_out_1.png (100%) rename {src => limereport}/images/edit-copy_1_24.png (100%) rename {src => limereport}/images/edit-paste_1_24.png (100%) rename {src => limereport}/images/edit.png (100%) rename {src => limereport}/images/edit_control_24.png (100%) rename {src => limereport}/images/edit_control_2_24.png (100%) rename {src => limereport}/images/edit_control_3_24.png (100%) rename {src => limereport}/images/edit_layout.png (100%) rename {src => limereport}/images/edit_layout_2_24.png (100%) rename {src => limereport}/images/edit_layout_3_24.png (100%) rename {src => limereport}/images/edit_layout_4_24.png (100%) rename {src => limereport}/images/edit_pecil2.png (100%) rename {src => limereport}/images/empty.png (100%) rename {src => limereport}/images/errors.png (100%) rename {src => limereport}/images/field.png (100%) rename {src => limereport}/images/first2.png (100%) rename {src => limereport}/images/folder.png (100%) rename {src => limereport}/images/folder1.png (100%) rename {src => limereport}/images/folder3.png (100%) rename {src => limereport}/images/function2.png (100%) rename {src => limereport}/images/function3.png (100%) rename {src => limereport}/images/go-next.png (100%) rename {src => limereport}/images/grid.png (100%) rename {src => limereport}/images/hideLeftPanel.png (100%) rename {src => limereport}/images/hideRightPanel.png (100%) rename {src => limereport}/images/hlayout.png (100%) rename {src => limereport}/images/hlayuot_1_24.png (100%) rename {src => limereport}/images/hlayuot_2_24.png (100%) rename {src => limereport}/images/hlayuot_3_24.png (100%) rename {src => limereport}/images/last2.png (100%) rename {src => limereport}/images/layuot_create.png (100%) rename {src => limereport}/images/layuot_create_24.png (100%) rename {src => limereport}/images/layuot_delete_24.png (100%) rename {src => limereport}/images/layuot_move.png (100%) rename {src => limereport}/images/layuot_select.png (100%) rename {src => limereport}/images/layuot_select_24.png (100%) rename {src => limereport}/images/leftLine.png (100%) rename {src => limereport}/images/leftLine1.png (100%) rename {src => limereport}/images/logo.png (100%) rename {src => limereport}/images/logo_100.png (100%) rename {src => limereport}/images/magnet.png (100%) rename {src => limereport}/images/main.png (100%) rename {src => limereport}/images/move_back.png (100%) rename {src => limereport}/images/move_top_1.png (100%) rename {src => limereport}/images/new_leaf.png (100%) rename {src => limereport}/images/new_leaf1.png (100%) rename {src => limereport}/images/next.png (100%) rename {src => limereport}/images/next1.png (100%) rename {src => limereport}/images/next2.png (100%) rename {src => limereport}/images/noLines.png (100%) rename {src => limereport}/images/noLines1.png (100%) rename {src => limereport}/images/paste.png (100%) rename {src => limereport}/images/paste1.png (100%) rename {src => limereport}/images/paste_1_24.png (100%) rename {src => limereport}/images/pin_green.png (100%) rename {src => limereport}/images/prin-preview2.png (100%) rename {src => limereport}/images/prin-preview_4_24.png (100%) rename {src => limereport}/images/print.png (100%) rename {src => limereport}/images/print2_big.png (100%) rename {src => limereport}/images/print_2_24.png (100%) rename {src => limereport}/images/print_preview.png (100%) rename {src => limereport}/images/print_preview1.png (100%) rename {src => limereport}/images/print_preview2.png (100%) rename {src => limereport}/images/prior.png (100%) rename {src => limereport}/images/prior1.png (100%) rename {src => limereport}/images/prior2.png (100%) rename {src => limereport}/images/redo.png (100%) rename {src => limereport}/images/redo1.png (100%) rename {src => limereport}/images/rightLine.png (100%) rename {src => limereport}/images/rightLine1.png (100%) rename {src => limereport}/images/save.png (100%) rename {src => limereport}/images/save_as_1_24.png (100%) rename {src => limereport}/images/sendToBack.png (100%) rename {src => limereport}/images/settings.png (100%) rename {src => limereport}/images/table1.png (100%) rename {src => limereport}/images/text-align-botom.png (100%) rename {src => limereport}/images/text-align-botom1.png (100%) rename {src => limereport}/images/text-align-justify.png (100%) rename {src => limereport}/images/text-align-justify1.png (100%) rename {src => limereport}/images/text-align-top.png (100%) rename {src => limereport}/images/text-align-top1.png (100%) rename {src => limereport}/images/text-align-v-center.png (100%) rename {src => limereport}/images/text-align-v-center1.png (100%) rename {src => limereport}/images/text_align_center.png (100%) rename {src => limereport}/images/text_align_center1.png (100%) rename {src => limereport}/images/text_align_left.png (100%) rename {src => limereport}/images/text_align_left1.png (100%) rename {src => limereport}/images/text_align_right.png (100%) rename {src => limereport}/images/text_align_right1.png (100%) rename {src => limereport}/images/text_bold.png (100%) rename {src => limereport}/images/text_bold1.png (100%) rename {src => limereport}/images/text_italic.png (100%) rename {src => limereport}/images/text_italic1.png (100%) rename {src => limereport}/images/text_underline.png (100%) rename {src => limereport}/images/text_underline1.png (100%) rename {src => limereport}/images/toBack.png (100%) rename {src => limereport}/images/toBottom.png (100%) rename {src => limereport}/images/toCenter.png (100%) rename {src => limereport}/images/toFront.png (100%) rename {src => limereport}/images/toLeft1.png (100%) rename {src => limereport}/images/toRight.png (100%) rename {src => limereport}/images/toSameHeight.png (100%) rename {src => limereport}/images/toSameWidth.png (100%) rename {src => limereport}/images/toTop.png (100%) rename {src => limereport}/images/toVCernter.png (100%) rename {src => limereport}/images/to_bottom.png (100%) rename {src => limereport}/images/to_center.png (100%) rename {src => limereport}/images/to_h_center.png (100%) rename {src => limereport}/images/to_left.png (100%) rename {src => limereport}/images/to_right.png (100%) rename {src => limereport}/images/to_same_height.png (100%) rename {src => limereport}/images/to_same_width.png (100%) rename {src => limereport}/images/to_top.png (100%) rename {src => limereport}/images/topLine.png (100%) rename {src => limereport}/images/topLine1.png (100%) rename {src => limereport}/images/undo.png (100%) rename {src => limereport}/images/undo1.png (100%) rename {src => limereport}/images/value.png (100%) rename {src => limereport}/images/var1.png (100%) rename {src => limereport}/images/variable.png (100%) rename {src => limereport}/images/variable1.png (100%) rename {src => limereport}/images/vlayout.png (100%) rename {src => limereport}/images/zoom-in_2_16.png (100%) rename {src => limereport}/images/zoom_in.png (100%) rename {src => limereport}/images/zoom_in1.png (100%) rename {src => limereport}/images/zoom_out.png (100%) rename {src => limereport}/images/zoom_out1.png (100%) rename {src => limereport}/items/editors/lrfonteditorwidget.cpp (100%) rename {src => limereport}/items/editors/lrfonteditorwidget.h (100%) rename {src => limereport}/items/editors/lritemeditorwidget.cpp (100%) rename {src => limereport}/items/editors/lritemeditorwidget.h (100%) rename {src => limereport}/items/editors/lritemsaligneditorwidget.cpp (100%) rename {src => limereport}/items/editors/lritemsaligneditorwidget.h (100%) rename {src => limereport}/items/editors/lritemsborderseditorwidget.cpp (100%) rename {src => limereport}/items/editors/lritemsborderseditorwidget.h (100%) rename {src => limereport}/items/editors/lrtextalignmenteditorwidget.cpp (100%) rename {src => limereport}/items/editors/lrtextalignmenteditorwidget.h (100%) rename {src => limereport}/items/images/DataBand.png (100%) rename {src => limereport}/items/images/DataBand16.png (100%) rename {src => limereport}/items/images/GroupFooter16.png (100%) rename {src => limereport}/items/images/GroupHeader16.png (100%) rename {src => limereport}/items/images/PageFooter.png (100%) rename {src => limereport}/items/images/PageFooter16.png (100%) rename {src => limereport}/items/images/PageHeader.png (100%) rename {src => limereport}/items/images/PageHeader16.png (100%) rename {src => limereport}/items/images/ReportFooter.png (100%) rename {src => limereport}/items/images/ReportFooter16.png (100%) rename {src => limereport}/items/images/ReportHeader.png (100%) rename {src => limereport}/items/images/ReportHeader16.png (100%) rename {src => limereport}/items/images/ReportPage.png (100%) rename {src => limereport}/items/images/ReportPage16.png (100%) rename {src => limereport}/items/images/SubDetailBand16.png (100%) rename {src => limereport}/items/images/SubDetailFooterBand16.png (100%) rename {src => limereport}/items/images/SubDetailHeaderBand16.png (100%) rename {src => limereport}/items/images/addBand1.png (100%) rename {src => limereport}/items/images/barcode2.png (100%) rename {src => limereport}/items/images/hlayout.png (100%) rename {src => limereport}/items/images/hlayuot_3_24.png (100%) rename {src => limereport}/items/images/imageItem.png (100%) rename {src => limereport}/items/images/imageItem1.png (100%) rename {src => limereport}/items/images/imageItem2.png (100%) rename {src => limereport}/items/images/insert-text.png (100%) rename {src => limereport}/items/images/insert-text_2.png (100%) rename {src => limereport}/items/images/insert-text_3.png (100%) rename {src => limereport}/items/images/insert-text_5.png (100%) rename {src => limereport}/items/images/settings.png (100%) rename {src => limereport}/items/images/settings2.png (100%) rename {src => limereport}/items/images/shape2.png (100%) rename {src => limereport}/items/images/shape4.png (100%) rename {src => limereport}/items/images/shape5.png (100%) rename {src => limereport}/items/items.qrc (100%) rename {src => limereport}/items/lralignpropitem.cpp (100%) rename {src => limereport}/items/lralignpropitem.h (100%) rename {src => limereport}/items/lrbarcodeitem.cpp (100%) rename {src => limereport}/items/lrbarcodeitem.h (100%) rename {src => limereport}/items/lrhorizontallayout.cpp (100%) rename {src => limereport}/items/lrhorizontallayout.h (100%) rename {src => limereport}/items/lrimageitem.cpp (100%) rename {src => limereport}/items/lrimageitem.h (100%) rename {src => limereport}/items/lrshapeitem.cpp (100%) rename {src => limereport}/items/lrshapeitem.h (100%) rename {src => limereport}/items/lrsimpletagparser.cpp (100%) rename {src => limereport}/items/lrsimpletagparser.h (100%) rename {src => limereport}/items/lrsubitemparentpropitem.cpp (100%) rename {src => limereport}/items/lrsubitemparentpropitem.h (100%) rename {src => limereport}/items/lrtextitem.cpp (100%) rename {src => limereport}/items/lrtextitem.h (100%) rename {src => limereport}/items/lrtextitemeditor.cpp (100%) rename {src => limereport}/items/lrtextitemeditor.h (100%) rename {src => limereport}/items/lrtextitemeditor.ui (100%) rename report-lib.pri => limereport/limereport.pro (83%) rename {src => limereport}/lraboutdialog.cpp (100%) rename {src => limereport}/lraboutdialog.h (100%) rename {src => limereport}/lraboutdialog.ui (100%) rename {src => limereport}/lrbanddesignintf.cpp (100%) rename {src => limereport}/lrbanddesignintf.h (100%) rename {src => limereport}/lrbandsmanager.cpp (100%) rename {src => limereport}/lrbandsmanager.h (100%) rename {src => limereport}/lrbasedesignintf.cpp (100%) rename {src => limereport}/lrbasedesignintf.h (100%) rename {src => limereport}/lrcallbackdatasourceintf.h (100%) rename {src => limereport}/lrcollection.h (100%) rename {src => limereport}/lrdatadesignintf.cpp (100%) rename {src => limereport}/lrdatadesignintf.h (100%) rename {src => limereport}/lrdatasourcemanager.cpp (100%) rename {src => limereport}/lrdatasourcemanager.h (100%) rename {src => limereport}/lrdatasourcemanagerintf.h (100%) rename {src => limereport}/lrdesignelementsfactory.h (100%) rename {src => limereport}/lrglobal.cpp (100%) rename {src => limereport}/lrglobal.h (100%) rename {src => limereport}/lrgroupfunctions.cpp (100%) rename {src => limereport}/lrgroupfunctions.h (100%) rename {src => limereport}/lritemdesignintf.cpp (100%) rename {src => limereport}/lritemdesignintf.h (100%) rename {src => limereport}/lrpagedesignintf.cpp (100%) rename {src => limereport}/lrpagedesignintf.h (100%) rename {src => limereport}/lrpageitemdesignintf.cpp (100%) rename {src => limereport}/lrpageitemdesignintf.h (100%) rename {src => limereport}/lrpreviewreportwindow.cpp (100%) rename {src => limereport}/lrpreviewreportwindow.h (100%) rename {src => limereport}/lrpreviewreportwindow.ui (100%) rename {src => limereport}/lrreportdesignwidget.cpp (100%) rename {src => limereport}/lrreportdesignwidget.h (100%) rename {src => limereport}/lrreportdesignwindow.cpp (100%) rename {src => limereport}/lrreportdesignwindow.h (100%) rename {src => limereport}/lrreportengine.cpp (100%) rename {src => limereport}/lrreportengine.h (100%) rename {src => limereport}/lrreportengine_p.h (100%) rename {src => limereport}/lrreportrender.cpp (100%) rename {src => limereport}/lrreportrender.h (100%) rename {src => limereport}/lrscriptenginemanager.cpp (100%) rename {src => limereport}/lrscriptenginemanager.h (100%) rename {src => limereport}/lrscriptenginemanagerintf.h (100%) rename {src => limereport}/lrsettingdialog.cpp (100%) rename {src => limereport}/lrsettingdialog.h (100%) rename {src => limereport}/lrsettingdialog.ui (100%) rename {src => limereport}/lrsimplecrypt.cpp (100%) rename {src => limereport}/lrsimplecrypt.h (100%) rename {src => limereport}/lrvariablesholder.cpp (100%) rename {src => limereport}/lrvariablesholder.h (100%) rename {src => limereport}/objectinspector/editors/lrbuttonlineeditor.cpp (100%) rename {src => limereport}/objectinspector/editors/lrbuttonlineeditor.h (100%) rename {src => limereport}/objectinspector/editors/lrcheckboxeditor.cpp (100%) rename {src => limereport}/objectinspector/editors/lrcheckboxeditor.h (100%) rename {src => limereport}/objectinspector/editors/lrcoloreditor.cpp (100%) rename {src => limereport}/objectinspector/editors/lrcoloreditor.h (100%) rename {src => limereport}/objectinspector/editors/lrcomboboxeditor.cpp (100%) rename {src => limereport}/objectinspector/editors/lrcomboboxeditor.h (100%) rename {src => limereport}/objectinspector/editors/lrfonteditor.cpp (100%) rename {src => limereport}/objectinspector/editors/lrfonteditor.h (100%) rename {src => limereport}/objectinspector/editors/lrimageeditor.cpp (100%) rename {src => limereport}/objectinspector/editors/lrimageeditor.h (100%) rename {src => limereport}/objectinspector/editors/lrtextitempropertyeditor.cpp (100%) rename {src => limereport}/objectinspector/editors/lrtextitempropertyeditor.h (100%) rename {src => limereport}/objectinspector/editors/ltextitempropertyeditor.ui (100%) rename {src => limereport}/objectinspector/images/check.png (100%) rename {src => limereport}/objectinspector/images/check_w.png (100%) rename {src => limereport}/objectinspector/images/clear.png (100%) rename {src => limereport}/objectinspector/images/edit_16.ico (100%) rename {src => limereport}/objectinspector/images/uncheck.png (100%) rename {src => limereport}/objectinspector/images/uncheck_w.png (100%) rename {src => limereport}/objectinspector/lobjectinspector.qrc (100%) rename {src => limereport}/objectinspector/lrbasedesignobjectmodel.cpp (100%) rename {src => limereport}/objectinspector/lrbasedesignobjectmodel.h (100%) rename {src => limereport}/objectinspector/lrobjectinspectorwidget.cpp (100%) rename {src => limereport}/objectinspector/lrobjectinspectorwidget.h (100%) rename {src => limereport}/objectinspector/lrobjectitemmodel.cpp (100%) rename {src => limereport}/objectinspector/lrobjectitemmodel.h (100%) rename {src => limereport}/objectinspector/lrobjectpropitem.cpp (100%) rename {src => limereport}/objectinspector/lrobjectpropitem.h (100%) rename {src => limereport}/objectinspector/lrpropertydelegate.cpp (100%) rename {src => limereport}/objectinspector/lrpropertydelegate.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrboolpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrboolpropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrcolorpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrcolorpropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrcontentpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrcontentpropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrdatasourcepropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrdatasourcepropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrenumpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrenumpropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrflagspropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrflagspropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrfontpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrfontpropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrgroupfieldpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrgroupfieldpropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrimagepropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrimagepropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrintpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrintpropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrqrealpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrqrealpropitem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrrectproptem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrrectproptem.h (100%) rename {src => limereport}/objectinspector/propertyItems/lrstringpropitem.cpp (100%) rename {src => limereport}/objectinspector/propertyItems/lrstringpropitem.h (100%) rename {src => limereport}/objectsbrowser/lrobjectbrowser.cpp (100%) rename {src => limereport}/objectsbrowser/lrobjectbrowser.h (100%) rename {src => limereport}/report.qrc (100%) rename {src => limereport}/serializators/lrserializatorintf.h (100%) rename {src => limereport}/serializators/lrstorageintf.h (100%) rename {src => limereport}/serializators/lrxmlbasetypesserializators.cpp (100%) rename {src => limereport}/serializators/lrxmlbasetypesserializators.h (100%) rename {src => limereport}/serializators/lrxmlqrectserializator.cpp (100%) rename {src => limereport}/serializators/lrxmlqrectserializator.h (100%) rename {src => limereport}/serializators/lrxmlreader.cpp (100%) rename {src => limereport}/serializators/lrxmlreader.h (100%) rename {src => limereport}/serializators/lrxmlserializatorsfactory.h (100%) rename {src => limereport}/serializators/lrxmlwriter.cpp (100%) rename {src => limereport}/serializators/lrxmlwriter.h (100%) delete mode 100644 qzint.pri delete mode 100644 src/acollection.cpp delete mode 100644 src/areportpreviewwidget.h delete mode 100644 src/databrowser/images/check.png delete mode 100644 src/databrowser/images/check_circle.png delete mode 100644 src/databrowser/images/cursor-small.png delete mode 100644 src/databrowser/images/error.png delete mode 100644 src/databrowser/images/greenled.png delete mode 100644 src/databrowser/images/note_edit.png delete mode 100644 src/databrowser/images/plug-disconnect-slash.png delete mode 100644 src/databrowser/images/pointer.png delete mode 100644 src/databrowser/images/table_db.png delete mode 100644 src/images/PDF1.png delete mode 100644 src/images/barcode1.png delete mode 100644 src/images/barcode3_16.png delete mode 100644 src/images/barcode3_24.png delete mode 100644 src/images/copy16.png delete mode 100644 src/images/copy_2_16.png delete mode 100644 src/images/copy_2_24.png delete mode 100644 src/images/cut16.png delete mode 100644 src/images/cut_1_24.png delete mode 100644 src/images/document-new_16.png delete mode 100644 src/images/document-new_24.png delete mode 100644 src/images/document_delete_16.png delete mode 100644 src/images/document_delete_24.png delete mode 100644 src/images/edit-copy_1_16.png delete mode 100644 src/images/edit-paste_1_16.png delete mode 100644 src/images/edit-paste_2_24.png delete mode 100644 src/images/edit_cursor.png delete mode 100644 src/images/edit_pencil.png delete mode 100644 src/images/function.png delete mode 100644 src/images/hourglass.png delete mode 100644 src/images/insert-text_16.png delete mode 100644 src/images/insert-text_1_24.png delete mode 100644 src/images/insert-text_24.png delete mode 100644 src/images/main.ico delete mode 100644 src/images/new_1_16.png delete mode 100644 src/images/new_1_24.png delete mode 100644 src/images/paste16.png delete mode 100644 src/images/paste24.png delete mode 100644 src/images/prin-preview_2.png delete mode 100644 src/images/prin-preview_3.png delete mode 100644 src/images/print_2.png delete mode 100644 src/images/redo_1_16.png delete mode 100644 src/images/redo_1_24.png delete mode 100644 src/images/save_1_16.png delete mode 100644 src/images/save_1_24.png delete mode 100644 src/images/save_as_1_16.png delete mode 100644 src/images/table.png delete mode 100644 src/images/to_bottom_2.png delete mode 100644 src/images/to_center_2.png delete mode 100644 src/images/to_h_center_2.png delete mode 100644 src/images/to_left_2.png delete mode 100644 src/images/to_right_2.png delete mode 100644 src/images/to_same_height_2.png delete mode 100644 src/images/to_same_width_2.png delete mode 100644 src/images/to_top_2.png delete mode 100644 src/images/undo_1_16.png delete mode 100644 src/images/undo_1_24.png delete mode 100644 src/images/zoom-in_1_16.png delete mode 100644 src/images/zoom-in_1_24.png delete mode 100644 src/images/zoom-out_1_16.png delete mode 100644 src/images/zoom-out_1_24.png delete mode 100644 src/items/abordertextitem.cpp delete mode 100644 src/items/abordertextitem.h delete mode 100644 src/items/images/Control-Edit Box.png delete mode 100644 src/items/images/insert-text_1.png delete mode 100644 src/lrserializatorsfactory.cpp delete mode 100644 src/lrserializatorsfactory.h delete mode 100644 src/objectinspector/images/checked.png delete mode 100644 src/objectinspector/images/unchecked.png delete mode 100644 src/scriptbrowser/lrscriptbrowser.cpp delete mode 100644 src/scriptbrowser/lrscriptbrowser.h delete mode 100644 src/serializators/aserializatorintf.cpp delete mode 100644 src/serializators/astorageintf.cpp delete mode 100644 src/waitform.cpp delete mode 100644 src/waitform.h delete mode 100644 src/waitform.ui diff --git a/3rdparty/zint-2.4.4/backend_qt4/Zint.pro b/3rdparty/zint-2.4.4/backend_qt4/Zint.pro index 367b03f..db6f84e 100644 --- a/3rdparty/zint-2.4.4/backend_qt4/Zint.pro +++ b/3rdparty/zint-2.4.4/backend_qt4/Zint.pro @@ -111,7 +111,7 @@ unix { UI_SOURCES_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/ui OBJECTS_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/obj RCC_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/rcc - DESTDIR = $$PWD/../../../lib/unix/$${BUILD_TYPE} + DESTDIR = $$PWD/../../../build/unix/$${BUILD_TYPE}/lib DLLDESTDIR = $${DESTDIR} } @@ -124,7 +124,7 @@ win32 { UI_SOURCES_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/ui OBJECTS_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/obj RCC_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/rcc - DESTDIR = $$PWD/../../../lib/win32/$${BUILD_TYPE} + DESTDIR = $$PWD/../../../build/win32/$${BUILD_TYPE}/lib DLLDESTDIR = $${DESTDIR} } diff --git a/demo/r1/demo_reports/categories.lrxml b/demo/r1/demo_reports/categories.lrxml deleted file mode 100644 index 165a91e..0000000 --- a/demo/r1/demo_reports/categories.lrxml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - page1 - - - - - - - - ReportPage1 - - - - DataBand1 - - - - ImageItem1 - - - - - DataBand1 - - - - - - category - Picture - - - - - - ReportPage1 - - - - - - - category - - - - - - - SubDetailBand1 - - - - TextItem1 - - - - - SubDetailBand1 - - - $D{products.ProductName} - - - - - - - - - - - - - - - TextItem2 - - - - - SubDetailBand1 - - - $D{products.UnitPrice} - - - - - - - - - - - - - - - - - ReportPage1 - - - - DataBand1 - - - products - - - - - - - - - - - - - - - - - datasources - - - - northwind - QSQLITE - ./demo_reports/northwind.db - - - - - - - - - - category - Select * from categories - northwind - - - - - - products - Select * from products where CategoryID = $D{category.CategoryID} - northwind - category - - - - - - - TestName - TestValue - - - - - diff --git a/demo/r1/demo_reports/columns_demo.lrxml b/demo/r1/demo_reports/columns_demo.lrxml deleted file mode 100644 index ad8a2ec..0000000 --- a/demo/r1/demo_reports/columns_demo.lrxml +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - page1 - - - - - - - - ReportPage1 - - - - DataBand1 - - - - TextItem1 - - - - - DataBand1 - - - - $D{orders.OrderID} - - - - - - - - - - - - - - - TextItem2 - - - - - DataBand1 - - - - $D{orders.OrderDate} - - - - - - - - - - - - - - - BarcodeItem1 - - - - - DataBand1 - - - - $D{orders.OrderID} - - 1 - - - - - - - - - - TextItem4 - - - - - DataBand1 - - - - $D{orders.ShipName} - - - - - - - - - - - - - - - TextItem5 - - - - - DataBand1 - - - - $D{orders.ShipPostalCode} - - - - - - - - - - - - - - - - - ReportPage1 - - - - - - - - orders - - - - - - - - - ReportHeader1 - - - - TextItem3 - - - - - ReportHeader1 - - - - Orders selected by condition used variable OrdersDate - - - - - - - - - - - - - - - - - ReportPage1 - - - - - - - - - - - - - - - - - - - - - - - - - datasources - - - - northwind.db - QSQLITE - ./demo_reports/northwind.db - - - - - - - - - - orders - Select * from orders where OrderDate = $V{OrdersDate} - northwind.db - - - - - - - - OrdersDate - 2005-03-22 - - - - - diff --git a/demo/r1/demo_reports/demoReport1_report_header_group_subdetail.lrxml b/demo/r1/demo_reports/demoReport1_report_header_group_subdetail.lrxml deleted file mode 100644 index e036b0e..0000000 --- a/demo/r1/demo_reports/demoReport1_report_header_group_subdetail.lrxml +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - page1 - - - - - - - - ReportPage1 - - - - ReportHeader1 - - - - TextItem1 - - - - - ReportHeader1 - - - Lime -Report - - - - - - - - - - - - - - - ImageItem1 - - - - - ReportHeader1 - - - 89504e470d0a1a0a0000000d494844520000006400000071080600000023f9067c000000097048597300000dd700000dd70142289b780000119c49444154789ced9d79701cd59dc73feff55cba46b7c18eed8d84c1b6c02c4636b58ea928d8c609b0bb64c3429104ca5420b001c292cd3ae50d7120091bbb300e570a0c2609391c0889b99c1828b0036c42488c8d8d1cf9968c25d91aeb1849a3397afa78fb47cf48e383b2248f3c9a91be5553d3d3afbbe7757ffbbddfeffd8ef704a780dfef07104208745d17a73a7e1c83871002c330304d13c00638e503deb871a36bf1e2c5771886e1374d5328a546ba9e630642086f2010f8d3b469d35ec7e1c2729deaa44020e002beee72b9ced6340da5d4782b49135c2e577e28145a0b6c077a80e82909e9eaea12b66d8b6834aaaf5cb9f2059fcf67bb5c2e4388715e868b4824622e58b060e6a5975eba2810084c00a602fb180421a2b7b7570098a669ad58b1621b70180802d688d63ab711abadadfdbc94b2ce344d17e00524c0295b4812524a05f402078056c0601032681c274001d1d9b367cf9152da899e46e13c4b31684212308128104e6c8f6378b04b4b4b63272b182a2149a894cf38860129e5c9f79fe17a8ce31418276494619c905186e1ca9013a094e2b8b1c9b806360c199b36428410ac59b3068fc7a3b5b5b5b9bababa4428143a9ea49c47d23ed5d8d8686fdebcd92461a31a2cd24608c0c2850b7d555555cb84105f554a598ccd56226ddb8eb6b4b43c595d5dfd108e5818f41021ad843cf0c003f1bababab57bf6ec79aba9a9a9c2300c4f3aaf9f0d104208cbb2ac8f3efa28004c04dac904215eaf97b56bd7aab56bd776242a509cb8fe586b25c9f1591c88e0989804839427692344d7f56465e240178ef5722c43e190613104e19e36426ebdf5569e7aeaa964454cc64d2b082150437420a58d90a79e7a0aa514efbfff3eab57af1e6bddd431b02c8bbd7bf7aa1d3b760cf9dcb40af59e9e1e317dfaf4090f3ffc70795f5f9fb42c6b4c12a394b21b1b1b3bafbcf2ca761cb5f7cc7759008140c05b5555f5359fcf779bdfef5763d1bb2884909665450dc3580bfc08a7eb36067b7eda0859b06001d3a74fd78195c033c0598087b1a76541c2e721a5acb46d3b309413d346c8e6cd9b939b16d08df356b8187b26faa48a6bd8b6ddc710959bb476590c6858a1c4672cb68e54d864ca7492625c5443ad44aec2e7f3118b9dd431f8b148ab71f1b5d75ea3a4a4c4130c06dddddddda2afaf6fccb590847151eddab5cb7cf4d147e389dd99d1b2ce39e79c7ee3a26ddb63dab8d8dadafae4a38f3efa50625f668c8bf7dd775fbcaeae6ecdae5dbbde3874e85085aeeb1e31d6ecef806ddb564b4b4b07703699322e161414b06edd3ab56eddba2e1c197214d0d275fd2c4252cbd2851091841b62d0481b21e1709844450c9c40ba1ec6669705098baf52ca66880185692364f7eeddcc98312359199381e0afb186fefbcecfcf27128964c6b83863c60c945284c361d78e1d3bdcb66dd3d1d131e644881002d33469686830972f5f9e941d99d1b2745d777b3c9e2f5e72c9255799a6698f455b168e96a55f78e1851b962f5fbe9e449ac1604f4e2b211b366c50b5b5b507dadbdbff1608048ae2f1b89b2178cb720022d1428cfafa7a1ba8648881e9692364e6cc995c7bedb516b0056804ca0177baae9f6550802ea554b66d674686ecdab52b591113c7853bd66d59966ddb0619362e82330689e3a8bf63a5ab3a1ec96e3a738172c761ac47c60ffbdec7637b4719c60919651895849c247226db9403c731348c14f2919221a7052104adadad1228080402aeaeae2e2984c80a992484108661a88686065d08116588f274541202e0f7fb27e4e7e7ff72c284093312ba7c56b49244d449a4babafac96f7ce31b8f3030141814462d21f7dd775fd7942953beb67dfbf6a99d9d9d2596656585295f08816559768a3fe428d94ec8d2a54b59b56a958993131f05f271e45d56b4129cb19821840867cc1f924eac5ab50a9c9b8ae1bc6182ec21230995202373093b23802185618e420cb9eea352edede93926934165eb2767d4dee2e26294526cd9b2456cd8b0411ac6a04363338e8450a7bebe5e2554f5cc587bd38d7038ecaea9a939b7aaaaaa3012896493fc10b66d5b4d4d4d6dafbefaea61ce60f4fb097fb264c9127efef39f9fc62507609a66797e7efe8352ca595eaf17b247a80bdbb663c160f027c0c33856ef918d7eafacaca4a1a1a1f0e8d1a3de482422a2d1a8d075ddb8fcf2cbfb18620ad7c9b06cd9324a4a4a8e02d700938032b22b705b0171b7db5d6e18c6d1a19c382c42962d5be6292d2d5d5b565676594272d9e170f843e0cb38898e3aa7f1f056ae5c090331c2dd89eb659b2bd8300c23c299705099a629955213344d3b0b48469b848099c01e1c07d5e93ebc64026932c62b9bc848be3c4356db874548381c3e7e324c158bc5bc38ddcb41d2d7df67f33450c3aaf3b0083959ac956ddb9263f3d2d3d9c5642321c3c2a81c188e658c1332ca907142dc19afc1e8c219893ab9f762b4da4a64811b615a1034503fdc86f56117b691620bfde3bfc0c2dfc3d042cb720be924a49f849716e3bdb01caf5be2366c8a8a3d7c420a2a04e4d90a6528621797d3da1aa1cd52e85183d89fdb885eb681380965604609ecee4e63edb204e9214408a46dca7228bc773ee72d9acc055e8d85122e9282a9273b65820fa6158361531f3579775a31af4d29e2fd8e183df7be4f647777d69bde8785d327c48c23224151d9f466d95faee1bfce2d67e6604f15804732cbe36156b187dbaafd341f8ef0649ec66fdf0d70f8a583843501961a3bc40c8b903e7c0acb8058103e781136de4f61a0a5e0dc0a669ecea3f348a67cb290fbefba80db3f33891fe8162fbfda4c72fead3141ca500951000b8ffcc6cf960945bcf1001cdae34ca0e1e1844766296c4b61db0a4b2994022500211002a426909ac475fc30d3ab31694e254f3c5dc7e2a5efb1fcd7fb69c4b167e57cfefb500991f75ccc9485d6f65bdcbfbc792e0a671af914580a3b6e61e8367a632f47767773784f0f6d2d7d043b6284f35c70561ebe73fd949d5fc6e4e9c55495fba870493c9a18a88f0026e5f36f3f9ecf3fe4bbb8f3e9ddd4e3182e739a945313229cf80261c5e51dd3a8f9ce6c7ee4d198e894258e51604b4df5e956744f0fcdcfede783c71bd819b368c3310c8670e68bd719485e71013ea0e8a6f39875fbf95c3eab8c4bbc927c2106c647255e2e5e71098fb784f9da6bcdd47b35a2ba95bba47c2c21791a442de8a140a18744c18edff91fa9e3db9a9692eaac004d424105ed65b37aae7a70d3b35b8334006d4000e8c021248663b94d9dfb2369fbf23eb397bf3fb397376e3a8fb9df9bc36d930b982585f33f0228f372e1e397f2fdea67f9ba6e71c82389c67394928f1d27479df7585dd3fc44a1f6c62abf6bdd1d9e63c800c82b82e90b50776f523d37fc2ab4354883807ae03d9c55630ee01013c46921111c726289ed10d029042dc0ee67f6f2d2dc17b9635b07eb554ad72405727201f35ff92cb70065713b7733b34e2024d5aa1eb811ff25a2f1dbf20f2bca8f6f4b76e104c5d5f7c3dd6fc0e40bd08c3e05f42868c621a10fa755243d8827d39214602b852520ecd1683f1ae5c36bdfe47b1f74f08bd403dd92fc4bcfe6ba697e2e000a4f56f75cc03137a5be95101940eb0d1496f9f88e4772776abbb015ea48dc133cfa8535dd2cb82b71627fe86dd27f3cd4d5779402e21696df4de4608803dfdfca836d11de4af5ace4bba87c643ed703a5621407689c0efa09e9b909c403cef681ebc99b90c77fba044b530fb614f6fe5e5a17bfee59d75531abfd24d74bfa4086eda0ea359c94b8973fe2c0abcdacb0ed810001af46de45657c0a98a29cf0d26c097c18342440e3f550fc8cb3a3fd465c530ab9c125b83ff54025a4aaefe4e0dc17f84553c4b3bdd45fd03782f55240ac3bcedfdb63fcb67faf80420f155f9ac66c72b4db9200d5cf393f1e9c8328f430df2d5973ec511a91c973f58b5fe0b95e83bf9f555eb2c3eff78747ba72af7c446720ca2bfd3b14b804de4f4fe47cc04f0ea65d1ff386dd7201555e8d678fd92f04d6d4b976f8a6e7a2ca11d6fb6a6a6a9add6ef7888713be759858b74e8352031a9726707fa280b3812272508ef43ff8835fa2a0c8cd1382c4a02f8180eeea0e7ee99988f015291ccda9bba6a62636d273987812352bf512b31447fa2b2c90856efc3832243709d9f4cfb826e673b3142c4e2dec3388def5176da3955fa14bd11f9663e7e7e78fb8a12f39f0f3695808e2294502671e2e37d995333228c8b995f08fe54c724b7e985a60d8988fede4ede79bb46d3e8fcb48040e9b30bc64c6e122cf8526a134f9db56d8e178ff1a8a39450680acef4274c570f519fc9f61130147c5792fc0be6f6f6153698167afdbed8e4b29873ce5693a90a7512a0525c9df96c26a8dd08333d6c939038a8c5970de6f38e4ff194bde3ec29a884947678c8eeb37f112d0545c5cbc4fd3b4e440ef8cbe910dd7915fe0667eff0ee1b4dcad1d1ce1582b40ce2019c06c037d97ff8187be3283f74b3cd41c8e500fecaeaeaeeef8b84510471a93f229714bae4edd173589bdd8c4411cdb58b2ebca1952925a8a8d935c19f8e96e5e07b624eef2e8f9e79f7f467ddbea1e10ff0bcf2f427a24b334415db2ccb4b0f7f570b83dc61101bd2a073d89a96aa3c279e3ba8170e22ecdcaca4aef89a78d0c9abee89001f0d9c94cf46afc777fa180b049f48583ec0082ca592839e756ac3e991e6fe338920084659d997b5ebf18aa9e75b68fde88cfe7e26a2958942c570a5ac31c7db89ead3899b97de4a250cf7405001efb147ce133cef6772f42f83dccf7481e4c3da6374ef8a77b780f382c1c07987ec2857200191fe96ebe0a2efb0a886b9cdfff53cb451ec9e3405ef2184b616fefa471f587bc0bb42867c6ba9cebae20c3841cb81ece790ef883f33b7233177a246b85e0bcd4e39afb68bff3cfbc0e1cc27180252775c939648c90e012284de487beb808f9d9a9d47a258f4b416dea711d317a57ed60d3ce2e3e948203b6a2931c5e012e2384bc77f500192d5fc65deea3ce2bf989382eecb4374ee4378dfcf5f106de96827db6a2951c951d496484907f7ad9f90e2ec15be0e6f36ec9d3380ea77ef4c689ac6f62cb9d7fe26501fb6c45234e5044ce6956a9c8a896a5e02c4df018c79111b731df6c65e757dee645609f721249735690a722a3843cbd9b8e8321965bea5899a09c94858826e800f625be739e0cc82021f7d6c2b7fe4aecfa4dbcb4a79b27535526af86fbdfab98f7bbcb9907484b41d919b31764161923e47b5ba1cc8bdad24ed757dfe1a1963e7e9f5aae09bc574d65c9cfeaf857a0b44b47cb73e59effe37864b4cbead2513e17e6bb015a96fd8de55d3a5b53cbdd92c2ebce61d9f7e7b008288e9ae3848c3862a6e31afef57ef63e5ccfd2b0c947a9e5f92e26fc470df7947999468ec662a522e38424a080d80fb6b1f5b9fd2cd52d82c9c71e36d11b82f49678f82403b158394b4ada08494e4283f37087e3c9b381de5bde61d3a666be6b9a447b747a9fdfcf9f3eb3815f3586083010a6aa12ff99aeea8f1aa46d60a8699a3671e2c4e22baeb8a2fcf6db6f374a4b4b6ddb1eda184e0ac1ae964ef9c10b4fbc531cfae3d3cda1f8d45bf7f9dfa9ad2d6a9f397346f7e73ef739dfecd9b32bdd6eb77df0e0c1981022428ed9b4d24288104254545414af5fbffebaaaaaaa3abfdf1f95520eeb414d9c34894fd7fe58b6f7463cdece4eb14dc517959496868a8b8bfbdc6eb795b23cf66660238e5d2b67c628696b2145454545f3e6cd5b98b6eb1516503da9f2a4658661d8dddddd79c0361c67558c1c6929a345a80f099665c50f1f3e5c8a331d949b1c2103864948228c3463537f0b215c96657971727f732a606e585d56281452baae1f8c46a3d5baaebb1273659d11082144341a8d0583c120391e753268ac5ebd5a5fbd7af5ddc00ca00a279bf64cc2064252ca1edbb6738a94614d1c80f34022c07ee00867befb528069db762f39e6b01aae9625185884385373f62413496db24f86a88f1ba39d9290840017524af737bff9cd0be6cd9be79b3367ceb9050505166476b42c84c8bad1ba10826834aa0b216a841027f42ca724c4344d9452bacbe572af58b1e21edbb693339266db5b396a5058580810370c43eaba6e92129f7c4a429a9b9bed8e8e8e8d6d6d6de78442a1024065cb7a50a31cc2e5727976eedcd9c4406ac5a05673d670a698a9022ac8d2c1e42886e976bb038661b400d1c11022189828c633a2551b9b48ae241407aca1ca81f1d6917e1c33edc8ff0311504d2a89d602380000000049454e44ae426082 - - - - - - - - ShapeItem1 - - - - - ReportHeader1 - - - - - - - - - - - - ShapeItem2 - - - - - ReportHeader1 - - - - - - - - - - - - TextItem9 - - - - - ReportHeader1 - - - REPORT - - - - - - - - - - - - - - - TextItem10 - - - - - ReportHeader1 - - - HEADER - - - - - - - - - - - - - - - - - ReportPage1 - - - - - - - - - - DataBand1 - - - - TextItem3 - - - - - DataBand1 - - - $D{orders.OrderDate} - - - - - - - - - - - - - - - TextItem4 - - - - - DataBand1 - - - $D{orders.OrderID} - - - - - - - - - - - - - - - TextItem12 - - - - - DataBand1 - - - DATA BAND - - - - - - - - - - - - - - - TextItem16 - - - - - DataBand1 - - - OrderID - - - - - - - - - - - - - - - TextItem17 - - - - - DataBand1 - - - Order Date - - - - - - - - - - - - - - - - - ReportPage1 - - - - - - - orders - - - - - - - GroupBandHeader1 - - - - TextItem2 - - - - - GroupBandHeader1 - - - $D{orders.CompanyName} - - - - - - - - - - - - - - - ShapeItem3 - - - - - GroupBandHeader1 - - - - - - - - - - - - TextItem11 - - - - - GroupBandHeader1 - - - GROUP HEADER - - - - - - - - - - - - - - - - - ReportPage1 - - - - DataBand1 - - - CompanyName - - - - - SubDetailBand1 - - - - TextItem5 - - - - - SubDetailBand1 - - - $D{orderitems.ProductName} - - - - - - - - - - - - - - - TextItem6 - - - - - SubDetailBand1 - - - $D{orderitems.Quantity} - - - - - - - - - - - - - - - TextItem7 - - - - - SubDetailBand1 - - - $S{line("SubDetailBand1")} - - - - - - - - - - - - - - - TextItem13 - - - - - SubDetailBand1 - - - SUBDETAIL BAND - - - - - - - - - - - - - - - - - ReportPage1 - - - - DataBand1 - - - orderitems - - - - SubDetailFooterBand1 - - - - TextItem8 - - - - - SubDetailFooterBand1 - - - $S{SUM($D{orderitems.Quantity},"SubDetailBand1")} - - - - - - - - - - - - - - - TextItem14 - - - - - SubDetailFooterBand1 - - - SUBDETAIL FOOTER - - - - - - - - - - - - - - - TextItem15 - - - - - SubDetailFooterBand1 - - - Total - - - - - - - - - - - - - - - ShapeItem4 - - - - - SubDetailFooterBand1 - - - - - - - - - - - - - - ReportPage1 - - - - SubDetailBand1 - - - - - - - - - - - - - - - - - - - datasources - - - - northwind - QSQLITE - ./demo_reports/northwind.db - - - - - - - - - - orders - Select * from orders -inner join customers on customers.customerid = orders.customerid order by companyname -limit 50 - northwind - - - - - - orderitems - Select * from orderitems - inner join products on products.productid = orderitems.productid -where orderid = $D{orders.orderid} - northwind - orders - - - - - - - diff --git a/demo/r1/demo_reports/northwind.db b/demo/r1/demo_reports/northwind.db deleted file mode 100644 index 42a4ef6df97df487dd5ba977b839db5e50ab5192..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925696 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

}F}vw)qbm=H!FjeM94escG=JY=IjTDmz}+ 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�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≫v5}*N-j$w1yDP)0)^7P9F8j3h?F%Ft+WWH=ZW-3 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%0AV56I}c&R^t;Y5c=ifY_Z`KI6K3D@ApXH= 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 a0Z;%G00lq+PyiGF1wa8%02KKDB=A3YIJ*G= diff --git a/demo/r1/demo_reports/ordres_by_date.lrxml b/demo/r1/demo_reports/ordres_by_date.lrxml deleted file mode 100644 index baf2cf9..0000000 --- a/demo/r1/demo_reports/ordres_by_date.lrxml +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - page1 - - - - - - - - ReportPage1 - - - - DataBand1 - - - - TextItem1 - - - - - DataBand1 - - - $D{orders.OrderID} - - - - - - - - - - - - - - - TextItem2 - - - - - DataBand1 - - - $D{orders.OrderDate} - - - - - - - - - - - - - - - - - ReportPage1 - - - - - - - orders - - - - - - - ReportHeader1 - - - - TextItem3 - - - - - ReportHeader1 - - - Orders selected by condition used variable OrdersDate - - - - - - - - - - - - - - - - - ReportPage1 - - - - - - - - - - - - - - - - - - - - - - - datasources - - - - northwind.db - QSQLITE - ./demo_reports/northwind.db - - - - - - - - - - orders - Select * from orders where OrderDate = $V{OrdersDate} - northwind.db - - - - - - - - OrdersDate - 2005-03-22 - - - - - diff --git a/demo/r1/demo_reports/png/Beverage.png b/demo/r1/demo_reports/png/Beverage.png deleted file mode 100644 index b818319af40c0d06252a6f3bbcaafcaca8e76356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72283 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�U^5gC612#v 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 diff --git a/demo/r1/demo_reports/png/Condiments.png b/demo/r1/demo_reports/png/Condiments.png deleted file mode 100644 index c658b6e4f81614b4ef4d3427f06fe06c0fd61c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52335 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׏ISztF!^xmA4ka*$IQ6&8UJV&zFx63jB+8T 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 diff --git a/demo/r1/demo_reports/png/Confections.png b/demo/r1/demo_reports/png/Confections.png deleted file mode 100644 index 11ca99c6622013f92b09d6d348418233084be5a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93774 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%0AV56I}c&R^t;Y5c=ifY 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 M1~r6KYd(4NAKr*`A^-pY diff --git a/demo/r1/demo_reports/png/Dairy_Products.png b/demo/r1/demo_reports/png/Dairy_Products.png deleted file mode 100644 index 3e9088b17607e0e77ff1d3a24a19e38874322d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36952 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 X2Auj*rp<#800000NkvXXu0mjf-1)}y diff --git a/demo/r1/demo_reports/png/Grains_Cereals1.png b/demo/r1/demo_reports/png/Grains_Cereals1.png deleted file mode 100644 index 514e33aaac4672aed89e58b8f7c80a1579f3840d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66362 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%0D&d!I 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 diff --git a/demo/r1/demo_reports/png/Produce.png b/demo/r1/demo_reports/png/Produce.png deleted file mode 100644 index 8955fe9c849a38dd8315d2bee6469f176ee85986..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67390 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

O#h0kT?U*@xgLC? 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 diff --git a/demo/r1/mainicon.rc b/demo/r1/mainicon.rc deleted file mode 100644 index 83c0128..0000000 --- a/demo/r1/mainicon.rc +++ /dev/null @@ -1 +0,0 @@ -DI_ICON1 ICON "main.ico" diff --git a/demo/r1/r1.pro b/demo/r1/r1.pro deleted file mode 100644 index 98adb4c..0000000 --- a/demo/r1/r1.pro +++ /dev/null @@ -1,69 +0,0 @@ -QT += core gui script sql -greaterThan(QT_MAJOR_VERSION, 4){ - QT += widgets printsupport - DEFINES += HAVE_QT5 -} -TARGET = LRDemo -TEMPLATE = app - -SOURCES += main.cpp\ - mainwindow.cpp - -HEADERS += mainwindow.h - -FORMS += mainwindow.ui - -INCLUDEPATH += $$PWD/../../include -DEPENDPATH += $$PWD/../../include - -RESOURCES += \ - r1.qrc - - -EXTRA_DIR += $$PWD/demo_reports/* - -CONFIG(release, debug|release){ - message(Release) - BUILD_TYPE = release -}else{ - message(Debug) - BUILD_TYPE = debug -} -CONFIG -= app_bundle -CONFIG += create_prl -CONFIG += link_prl - -unix{ - UNIX_DIR = $$OUT_PWD/../build/unix - DEST_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/demo_reports - MOC_DIR = $${DEST_DIR}/moc - UI_DIR = $${DEST_DIR}/ui - UI_HEADERS_DIR = $${DEST_DIR}/ui - UI_SOURCES_DIR = $${DEST_DIR}/ui - OBJECTS_DIR = $${DEST_DIR}/obj - RCC_DIR = $${DEST_DIR}/rcc - - LIBS += -L$$PWD/../../lib/unix/$${BUILD_TYPE} -llimereport - DESTDIR = $$DEST_DIR/bin - QMAKE_POST_LINK += mkdir -p $$quote($$DESTDIR) | $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DESTDIR) $$escape_expand(\n\t) -} - -win32 { - WIN32_DIR = $$OUT_PWD/../build/win32 - EXTRA_DIR ~= s,/,\\,g - - DEST_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/demo_reports/ - DEST_DIR ~= s,/,\\,g - MOC_DIR = $${DEST_DIR}/moc - UI_DIR = $${DEST_DIR}/ui - UI_HEADERS_DIR = $${DEST_DIR}/ui - UI_SOURCES_DIR = $${DEST_DIR}/ui - OBJECTS_DIR = $${DEST_DIR}/obj - RCC_DIR = $${DEST_DIR}/rcc - - DESTDIR = $$DEST_DIR/bin - RC_FILE += mainicon.rc - - QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DESTDIR) $$escape_expand(\\n\\t) - LIBS += -L$$PWD/../../lib/win32/$${BUILD_TYPE} -llimereport -} diff --git a/demo_r1/demo_r1.pro b/demo_r1/demo_r1.pro new file mode 100644 index 0000000..779fb55 --- /dev/null +++ b/demo_r1/demo_r1.pro @@ -0,0 +1,74 @@ +QT += core gui script sql +greaterThan(QT_MAJOR_VERSION, 4){ + QT += widgets printsupport + DEFINES += HAVE_QT5 +} +CONFIG -= app_bundle +TARGET = LRDemo +TEMPLATE = app + +SOURCES += main.cpp\ + mainwindow.cpp + +HEADERS += mainwindow.h + +FORMS += mainwindow.ui + +INCLUDEPATH += $$PWD/../include +DEPENDPATH += $$PWD/../include + +RESOURCES += \ + r1.qrc + + +EXTRA_DIR += $$PWD/demo_reports/* + +CONFIG(release, debug|release){ + message(Release) + BUILD_TYPE = release +}else{ + message(Debug) + BUILD_TYPE = debug +} + +unix{ + UNIX_DIR = $$PWD/../build/unix + DEST_DIR = $${UNIX_DIR}/$${BUILD_TYPE}/demo_reports + MOC_DIR = $${OUT_PWD}/moc + UI_DIR = $${OUT_PWD}//ui + UI_HEADERS_DIR = $${OUT_PWD}//ui + UI_SOURCES_DIR = $${OUT_PWD}//ui + OBJECTS_DIR = $${OUT_PWD}//obj + RCC_DIR = $${OUT_PWD}//rcc + + LIBS += -L$$PWD/../build/unix/$${BUILD_TYPE}/lib -llimereport + DESTDIR = $$DEST_DIR + QMAKE_POST_LINK += mkdir -p $$quote($$DESTDIR) | $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DESTDIR) $$escape_expand(\n\t) + QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN + QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib + QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/../lib + QMAKE_LFLAGS_RPATH += #. .. ./libs + target.path = $${DEST_DIR} +} + +win32 { + WIN32_DIR = $$PWD/../build/win32 + EXTRA_DIR ~= s,/,\\,g + + DEST_DIR = $${WIN32_DIR}/$${BUILD_TYPE}/demo_reports/ + DEST_DIR ~= s,/,\\,g + MOC_DIR = $${OUT_PWD}/moc + UI_DIR = $${OUT_PWD}/ui + UI_HEADERS_DIR = $${OUT_PWD}/ui + UI_SOURCES_DIR = $${OUT_PWD}/ui + OBJECTS_DIR = $${OUT_PWD}/obj + RCC_DIR = $${OUT_PWD}/rcc + + DESTDIR = $$DEST_DIR + RC_FILE += mainicon.rc + + QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$DESTDIR) $$escape_expand(\\n\\t) + LIBS += -L$$PWD/../build/win32/$${BUILD_TYPE}/lib -llimereport +} + +INSTALLS = target diff --git a/demo/r1/images/logo.png b/demo_r1/images/logo.png similarity index 100% rename from demo/r1/images/logo.png rename to demo_r1/images/logo.png diff --git a/demo/r1/images/lr.png b/demo_r1/images/lr.png similarity index 100% rename from demo/r1/images/lr.png rename to demo_r1/images/lr.png diff --git a/demo/r1/lr1.ico b/demo_r1/lr1.ico similarity index 100% rename from demo/r1/lr1.ico rename to demo_r1/lr1.ico diff --git a/demo/r1/lr6.ico b/demo_r1/lr6.ico similarity index 100% rename from demo/r1/lr6.ico rename to demo_r1/lr6.ico diff --git a/demo/r1/main.cpp b/demo_r1/main.cpp similarity index 100% rename from demo/r1/main.cpp rename to demo_r1/main.cpp diff --git a/demo/r1/main.ico b/demo_r1/main.ico similarity index 100% rename from demo/r1/main.ico rename to demo_r1/main.ico diff --git a/demo/r1/mainwindow.cpp b/demo_r1/mainwindow.cpp similarity index 100% rename from demo/r1/mainwindow.cpp rename to demo_r1/mainwindow.cpp diff --git a/demo/r1/mainwindow.h b/demo_r1/mainwindow.h similarity index 100% rename from demo/r1/mainwindow.h rename to demo_r1/mainwindow.h diff --git a/demo/r1/mainwindow.ui b/demo_r1/mainwindow.ui similarity index 100% rename from demo/r1/mainwindow.ui rename to demo_r1/mainwindow.ui diff --git a/demo/r1/r1.qrc b/demo_r1/r1.qrc similarity index 100% rename from demo/r1/r1.qrc rename to demo_r1/r1.qrc diff --git a/lib/.gitignore b/lib/.gitignore deleted file mode 100644 index 591459e..0000000 --- a/lib/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -release/* -debug/* -*.so.1.0.0.debug -*.so.1.0.0 -/ReportGenerator.app/ diff --git a/limereport.pro b/limereport.pro index e1d5a0f..319e7e8 100644 --- a/limereport.pro +++ b/limereport.pro @@ -1,75 +1,15 @@ -DEFINES += WITH_ZINT -contains (DEFINES,WITH_ZINT){ - CONFIG +=zint - include(3rdparty/3rdparty.pro) +TEMPLATE = subdirs +CONFIG += zint +contains(CONFIG, zint){ + SUBDIRS += 3rdparty } -include(report-lib.pri) -TEMPLATE = lib -QT += core xml sql script -TARGET = limereport +SUBDIRS += \ + limereport -DEFINES += LIMEREPORT_EXPORTS +CONFIG += ordered -CONFIG(release, debug|release){ - message(Release) - BUILD_TYPE = release -}else{ - message(Debug) - BUILD_TYPE = debug -} -CONFIG += create_prl -CONFIG += link_prl +SUBDIRS += demo_r1 -EXTRA_FILES += \ - $$PWD/src/lrglobal.cpp \ - $$PWD/src/lrglobal.h \ - $$PWD/src/lrdatasourcemanagerintf.h \ - $$PWD/src/lrreportengine.h \ - $$PWD/src/lrscriptenginemanagerintf.h \ - $$PWD/src/lrcallbackdatasourceintf.h -DEST_DIR = $$PWD/include/ -unix { - for(FILE,EXTRA_FILES){ - QMAKE_POST_LINK += $$quote($$QMAKE_COPY $${FILE} $${DEST_DIR}$$escape_expand(\n\t)) - } - MOC_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/moc - UI_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui - UI_HEADERS_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui - UI_SOURCES_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui - OBJECTS_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/obj - RCC_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/rcc - DESTDIR = $$PWD/lib/unix/$${BUILD_TYPE} - for(FILE,EXTRA_FILES){ - QMAKE_POST_LINK += $$QMAKE_COPY $$quote($$FILE) $$quote($$DESTDIR/include) $$escape_expand(\\n\\t) - } - -} - -win32 { - EXTRA_FILES ~= s,/,\\,g - DEST_DIR ~= s,/,\\,g - for(FILE,EXTRA_FILES){ - QMAKE_POST_LINK += $$QMAKE_COPY $$quote($$FILE) $$quote($$DEST_DIR) $$escape_expand(\\n\\t) - } - MOC_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/moc - UI_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui - UI_HEADERS_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui - UI_SOURCES_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui - OBJECTS_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/obj - RCC_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/rcc - DESTDIR = $$PWD/lib/win32/$${BUILD_TYPE} - -} - -DEPENDPATH += report report/bands report/base report/databrowser report/items report/objectinspector -INCLUDEPATH += report report/bands report/base report/databrowser report/items report/objectinspector - -contains(DEFINES,WITH_ZINT){ - - LIBS += -L$${DEST_DIR} -lQtZint -} - -INSTALLS += target diff --git a/src/bands/lrdataband.cpp b/limereport/bands/lrdataband.cpp similarity index 100% rename from src/bands/lrdataband.cpp rename to limereport/bands/lrdataband.cpp diff --git a/src/bands/lrdataband.h b/limereport/bands/lrdataband.h similarity index 100% rename from src/bands/lrdataband.h rename to limereport/bands/lrdataband.h diff --git a/src/bands/lrgroupbands.cpp b/limereport/bands/lrgroupbands.cpp similarity index 100% rename from src/bands/lrgroupbands.cpp rename to limereport/bands/lrgroupbands.cpp diff --git a/src/bands/lrgroupbands.h b/limereport/bands/lrgroupbands.h similarity index 100% rename from src/bands/lrgroupbands.h rename to limereport/bands/lrgroupbands.h diff --git a/src/bands/lrpagefooter.cpp b/limereport/bands/lrpagefooter.cpp similarity index 100% rename from src/bands/lrpagefooter.cpp rename to limereport/bands/lrpagefooter.cpp diff --git a/src/bands/lrpagefooter.h b/limereport/bands/lrpagefooter.h similarity index 100% rename from src/bands/lrpagefooter.h rename to limereport/bands/lrpagefooter.h diff --git a/src/bands/lrpageheader.cpp b/limereport/bands/lrpageheader.cpp similarity index 100% rename from src/bands/lrpageheader.cpp rename to limereport/bands/lrpageheader.cpp diff --git a/src/bands/lrpageheader.h b/limereport/bands/lrpageheader.h similarity index 100% rename from src/bands/lrpageheader.h rename to limereport/bands/lrpageheader.h diff --git a/src/bands/lrreportfooter.cpp b/limereport/bands/lrreportfooter.cpp similarity index 100% rename from src/bands/lrreportfooter.cpp rename to limereport/bands/lrreportfooter.cpp diff --git a/src/bands/lrreportfooter.h b/limereport/bands/lrreportfooter.h similarity index 100% rename from src/bands/lrreportfooter.h rename to limereport/bands/lrreportfooter.h diff --git a/src/bands/lrreportheader.cpp b/limereport/bands/lrreportheader.cpp similarity index 100% rename from src/bands/lrreportheader.cpp rename to limereport/bands/lrreportheader.cpp diff --git a/src/bands/lrreportheader.h b/limereport/bands/lrreportheader.h similarity index 100% rename from src/bands/lrreportheader.h rename to limereport/bands/lrreportheader.h diff --git a/src/bands/lrsubdetailband.cpp b/limereport/bands/lrsubdetailband.cpp similarity index 100% rename from src/bands/lrsubdetailband.cpp rename to limereport/bands/lrsubdetailband.cpp diff --git a/src/bands/lrsubdetailband.h b/limereport/bands/lrsubdetailband.h similarity index 100% rename from src/bands/lrsubdetailband.h rename to limereport/bands/lrsubdetailband.h diff --git a/src/base/lrattribsabstractfactory.h b/limereport/base/lrattribsabstractfactory.h similarity index 100% rename from src/base/lrattribsabstractfactory.h rename to limereport/base/lrattribsabstractfactory.h diff --git a/src/base/lrsimpleabstractfactory.h b/limereport/base/lrsimpleabstractfactory.h similarity index 100% rename from src/base/lrsimpleabstractfactory.h rename to limereport/base/lrsimpleabstractfactory.h diff --git a/src/base/lrsingleton.h b/limereport/base/lrsingleton.h similarity index 100% rename from src/base/lrsingleton.h rename to limereport/base/lrsingleton.h diff --git a/src/databrowser/images/add.png b/limereport/databrowser/images/add.png similarity index 100% rename from src/databrowser/images/add.png rename to limereport/databrowser/images/add.png diff --git a/src/databrowser/images/data.png b/limereport/databrowser/images/data.png similarity index 100% rename from src/databrowser/images/data.png rename to limereport/databrowser/images/data.png diff --git a/src/databrowser/images/data1.png b/limereport/databrowser/images/data1.png similarity index 100% rename from src/databrowser/images/data1.png rename to limereport/databrowser/images/data1.png diff --git a/src/databrowser/images/data_add.png b/limereport/databrowser/images/data_add.png similarity index 100% rename from src/databrowser/images/data_add.png rename to limereport/databrowser/images/data_add.png diff --git a/src/databrowser/images/data_add1.png b/limereport/databrowser/images/data_add1.png similarity index 100% rename from src/databrowser/images/data_add1.png rename to limereport/databrowser/images/data_add1.png diff --git a/src/databrowser/images/data_delete.png b/limereport/databrowser/images/data_delete.png similarity index 100% rename from src/databrowser/images/data_delete.png rename to limereport/databrowser/images/data_delete.png diff --git a/src/databrowser/images/data_delete1.png b/limereport/databrowser/images/data_delete1.png similarity index 100% rename from src/databrowser/images/data_delete1.png rename to limereport/databrowser/images/data_delete1.png diff --git a/src/databrowser/images/data_edit.png b/limereport/databrowser/images/data_edit.png similarity index 100% rename from src/databrowser/images/data_edit.png rename to limereport/databrowser/images/data_edit.png diff --git a/src/databrowser/images/data_edit1.png b/limereport/databrowser/images/data_edit1.png similarity index 100% rename from src/databrowser/images/data_edit1.png rename to limereport/databrowser/images/data_edit1.png diff --git a/src/databrowser/images/database_connect.png b/limereport/databrowser/images/database_connect.png similarity index 100% rename from src/databrowser/images/database_connect.png rename to limereport/databrowser/images/database_connect.png diff --git a/src/databrowser/images/database_connected.png b/limereport/databrowser/images/database_connected.png similarity index 100% rename from src/databrowser/images/database_connected.png rename to limereport/databrowser/images/database_connected.png diff --git a/src/databrowser/images/database_connected2.png b/limereport/databrowser/images/database_connected2.png similarity index 100% rename from src/databrowser/images/database_connected2.png rename to limereport/databrowser/images/database_connected2.png diff --git a/src/databrowser/images/database_connected3.png b/limereport/databrowser/images/database_connected3.png similarity index 100% rename from src/databrowser/images/database_connected3.png rename to limereport/databrowser/images/database_connected3.png diff --git a/src/databrowser/images/database_disconnect.png b/limereport/databrowser/images/database_disconnect.png similarity index 100% rename from src/databrowser/images/database_disconnect.png rename to limereport/databrowser/images/database_disconnect.png diff --git a/src/databrowser/images/edit_table.png b/limereport/databrowser/images/edit_table.png similarity index 100% rename from src/databrowser/images/edit_table.png rename to limereport/databrowser/images/edit_table.png diff --git a/src/databrowser/images/error_message.png b/limereport/databrowser/images/error_message.png similarity index 100% rename from src/databrowser/images/error_message.png rename to limereport/databrowser/images/error_message.png diff --git a/src/databrowser/images/error_message_2.png b/limereport/databrowser/images/error_message_2.png similarity index 100% rename from src/databrowser/images/error_message_2.png rename to limereport/databrowser/images/error_message_2.png diff --git a/src/databrowser/images/field.png b/limereport/databrowser/images/field.png similarity index 100% rename from src/databrowser/images/field.png rename to limereport/databrowser/images/field.png diff --git a/src/databrowser/images/plug-connect.png b/limereport/databrowser/images/plug-connect.png similarity index 100% rename from src/databrowser/images/plug-connect.png rename to limereport/databrowser/images/plug-connect.png diff --git a/src/databrowser/images/plug-disconnect.png b/limereport/databrowser/images/plug-disconnect.png similarity index 100% rename from src/databrowser/images/plug-disconnect.png rename to limereport/databrowser/images/plug-disconnect.png diff --git a/src/databrowser/images/remove.png b/limereport/databrowser/images/remove.png similarity index 100% rename from src/databrowser/images/remove.png rename to limereport/databrowser/images/remove.png diff --git a/src/databrowser/images/row.png b/limereport/databrowser/images/row.png similarity index 100% rename from src/databrowser/images/row.png rename to limereport/databrowser/images/row.png diff --git a/src/databrowser/images/table.png b/limereport/databrowser/images/table.png similarity index 100% rename from src/databrowser/images/table.png rename to limereport/databrowser/images/table.png diff --git a/src/databrowser/images/table_add.png b/limereport/databrowser/images/table_add.png similarity index 100% rename from src/databrowser/images/table_add.png rename to limereport/databrowser/images/table_add.png diff --git a/src/databrowser/images/table_delete.png b/limereport/databrowser/images/table_delete.png similarity index 100% rename from src/databrowser/images/table_delete.png rename to limereport/databrowser/images/table_delete.png diff --git a/src/databrowser/images/table_delete1.png b/limereport/databrowser/images/table_delete1.png similarity index 100% rename from src/databrowser/images/table_delete1.png rename to limereport/databrowser/images/table_delete1.png diff --git a/src/databrowser/images/table_edit.png b/limereport/databrowser/images/table_edit.png similarity index 100% rename from src/databrowser/images/table_edit.png rename to limereport/databrowser/images/table_edit.png diff --git a/src/databrowser/images/table_error.png b/limereport/databrowser/images/table_error.png similarity index 100% rename from src/databrowser/images/table_error.png rename to limereport/databrowser/images/table_error.png diff --git a/src/databrowser/images/table_error1.png b/limereport/databrowser/images/table_error1.png similarity index 100% rename from src/databrowser/images/table_error1.png rename to limereport/databrowser/images/table_error1.png diff --git a/src/databrowser/images/table_good.png b/limereport/databrowser/images/table_good.png similarity index 100% rename from src/databrowser/images/table_good.png rename to limereport/databrowser/images/table_good.png diff --git a/src/databrowser/images/table_good1.png b/limereport/databrowser/images/table_good1.png similarity index 100% rename from src/databrowser/images/table_good1.png rename to limereport/databrowser/images/table_good1.png diff --git a/src/databrowser/images/table_view.png b/limereport/databrowser/images/table_view.png similarity index 100% rename from src/databrowser/images/table_view.png rename to limereport/databrowser/images/table_view.png diff --git a/src/databrowser/images/table_view1.png b/limereport/databrowser/images/table_view1.png similarity index 100% rename from src/databrowser/images/table_view1.png rename to limereport/databrowser/images/table_view1.png diff --git a/src/databrowser/images/value.png b/limereport/databrowser/images/value.png similarity index 100% rename from src/databrowser/images/value.png rename to limereport/databrowser/images/value.png diff --git a/src/databrowser/images/value1.png b/limereport/databrowser/images/value1.png similarity index 100% rename from src/databrowser/images/value1.png rename to limereport/databrowser/images/value1.png diff --git a/src/databrowser/images/value_add.png b/limereport/databrowser/images/value_add.png similarity index 100% rename from src/databrowser/images/value_add.png rename to limereport/databrowser/images/value_add.png diff --git a/src/databrowser/images/value_add1.png b/limereport/databrowser/images/value_add1.png similarity index 100% rename from src/databrowser/images/value_add1.png rename to limereport/databrowser/images/value_add1.png diff --git a/src/databrowser/images/value_add2.png b/limereport/databrowser/images/value_add2.png similarity index 100% rename from src/databrowser/images/value_add2.png rename to limereport/databrowser/images/value_add2.png diff --git a/src/databrowser/images/value_delete.png b/limereport/databrowser/images/value_delete.png similarity index 100% rename from src/databrowser/images/value_delete.png rename to limereport/databrowser/images/value_delete.png diff --git a/src/databrowser/images/value_delete1.png b/limereport/databrowser/images/value_delete1.png similarity index 100% rename from src/databrowser/images/value_delete1.png rename to limereport/databrowser/images/value_delete1.png diff --git a/src/databrowser/images/value_edit.png b/limereport/databrowser/images/value_edit.png similarity index 100% rename from src/databrowser/images/value_edit.png rename to limereport/databrowser/images/value_edit.png diff --git a/src/databrowser/images/value_edit1.png b/limereport/databrowser/images/value_edit1.png similarity index 100% rename from src/databrowser/images/value_edit1.png rename to limereport/databrowser/images/value_edit1.png diff --git a/src/databrowser/images/value_edit2.png b/limereport/databrowser/images/value_edit2.png similarity index 100% rename from src/databrowser/images/value_edit2.png rename to limereport/databrowser/images/value_edit2.png diff --git a/src/databrowser/lrconnectiondialog.cpp b/limereport/databrowser/lrconnectiondialog.cpp similarity index 100% rename from src/databrowser/lrconnectiondialog.cpp rename to limereport/databrowser/lrconnectiondialog.cpp diff --git a/src/databrowser/lrconnectiondialog.h b/limereport/databrowser/lrconnectiondialog.h similarity index 100% rename from src/databrowser/lrconnectiondialog.h rename to limereport/databrowser/lrconnectiondialog.h diff --git a/src/databrowser/lrconnectiondialog.ui b/limereport/databrowser/lrconnectiondialog.ui similarity index 100% rename from src/databrowser/lrconnectiondialog.ui rename to limereport/databrowser/lrconnectiondialog.ui diff --git a/src/databrowser/lrdatabrowser.cpp b/limereport/databrowser/lrdatabrowser.cpp similarity index 100% rename from src/databrowser/lrdatabrowser.cpp rename to limereport/databrowser/lrdatabrowser.cpp diff --git a/src/databrowser/lrdatabrowser.h b/limereport/databrowser/lrdatabrowser.h similarity index 100% rename from src/databrowser/lrdatabrowser.h rename to limereport/databrowser/lrdatabrowser.h diff --git a/src/databrowser/lrdatabrowser.qrc b/limereport/databrowser/lrdatabrowser.qrc similarity index 100% rename from src/databrowser/lrdatabrowser.qrc rename to limereport/databrowser/lrdatabrowser.qrc diff --git a/src/databrowser/lrdatabrowser.ui b/limereport/databrowser/lrdatabrowser.ui similarity index 100% rename from src/databrowser/lrdatabrowser.ui rename to limereport/databrowser/lrdatabrowser.ui diff --git a/src/databrowser/lrdatabrowsertree.cpp b/limereport/databrowser/lrdatabrowsertree.cpp similarity index 100% rename from src/databrowser/lrdatabrowsertree.cpp rename to limereport/databrowser/lrdatabrowsertree.cpp diff --git a/src/databrowser/lrdatabrowsertree.h b/limereport/databrowser/lrdatabrowsertree.h similarity index 100% rename from src/databrowser/lrdatabrowsertree.h rename to limereport/databrowser/lrdatabrowsertree.h diff --git a/src/databrowser/lrsqleditdialog.cpp b/limereport/databrowser/lrsqleditdialog.cpp similarity index 100% rename from src/databrowser/lrsqleditdialog.cpp rename to limereport/databrowser/lrsqleditdialog.cpp diff --git a/src/databrowser/lrsqleditdialog.h b/limereport/databrowser/lrsqleditdialog.h similarity index 100% rename from src/databrowser/lrsqleditdialog.h rename to limereport/databrowser/lrsqleditdialog.h diff --git a/src/databrowser/lrsqleditdialog.ui b/limereport/databrowser/lrsqleditdialog.ui similarity index 100% rename from src/databrowser/lrsqleditdialog.ui rename to limereport/databrowser/lrsqleditdialog.ui diff --git a/src/databrowser/lrvariabledialog.cpp b/limereport/databrowser/lrvariabledialog.cpp similarity index 100% rename from src/databrowser/lrvariabledialog.cpp rename to limereport/databrowser/lrvariabledialog.cpp diff --git a/src/databrowser/lrvariabledialog.h b/limereport/databrowser/lrvariabledialog.h similarity index 100% rename from src/databrowser/lrvariabledialog.h rename to limereport/databrowser/lrvariabledialog.h diff --git a/src/databrowser/lrvariabledialog.ui b/limereport/databrowser/lrvariabledialog.ui similarity index 100% rename from src/databrowser/lrvariabledialog.ui rename to limereport/databrowser/lrvariabledialog.ui diff --git a/src/images/Control-Edit Box.png b/limereport/images/Control-Edit Box.png similarity index 100% rename from src/images/Control-Edit Box.png rename to limereport/images/Control-Edit Box.png diff --git a/src/images/Hourglass_80.png b/limereport/images/Hourglass_80.png similarity index 100% rename from src/images/Hourglass_80.png rename to limereport/images/Hourglass_80.png diff --git a/src/images/PDF2.png b/limereport/images/PDF2.png similarity index 100% rename from src/images/PDF2.png rename to limereport/images/PDF2.png diff --git a/src/images/addBand.png b/limereport/images/addBand.png similarity index 100% rename from src/images/addBand.png rename to limereport/images/addBand.png diff --git a/src/images/addBand1.png b/limereport/images/addBand1.png similarity index 100% rename from src/images/addBand1.png rename to limereport/images/addBand1.png diff --git a/src/images/allLines.png b/limereport/images/allLines.png similarity index 100% rename from src/images/allLines.png rename to limereport/images/allLines.png diff --git a/src/images/allLines1.png b/limereport/images/allLines1.png similarity index 100% rename from src/images/allLines1.png rename to limereport/images/allLines1.png diff --git a/src/images/barcode.png b/limereport/images/barcode.png similarity index 100% rename from src/images/barcode.png rename to limereport/images/barcode.png diff --git a/src/images/barcode2.png b/limereport/images/barcode2.png similarity index 100% rename from src/images/barcode2.png rename to limereport/images/barcode2.png diff --git a/src/images/bottomLine.png b/limereport/images/bottomLine.png similarity index 100% rename from src/images/bottomLine.png rename to limereport/images/bottomLine.png diff --git a/src/images/bottomLine1.png b/limereport/images/bottomLine1.png similarity index 100% rename from src/images/bottomLine1.png rename to limereport/images/bottomLine1.png diff --git a/src/images/bringToFront.png b/limereport/images/bringToFront.png similarity index 100% rename from src/images/bringToFront.png rename to limereport/images/bringToFront.png diff --git a/src/images/closebox.png b/limereport/images/closebox.png similarity index 100% rename from src/images/closebox.png rename to limereport/images/closebox.png diff --git a/src/images/copy.png b/limereport/images/copy.png similarity index 100% rename from src/images/copy.png rename to limereport/images/copy.png diff --git a/src/images/copy2.png b/limereport/images/copy2.png similarity index 100% rename from src/images/copy2.png rename to limereport/images/copy2.png diff --git a/src/images/copy24.png b/limereport/images/copy24.png similarity index 100% rename from src/images/copy24.png rename to limereport/images/copy24.png diff --git a/src/images/cpyright_logo.png b/limereport/images/cpyright_logo.png similarity index 100% rename from src/images/cpyright_logo.png rename to limereport/images/cpyright_logo.png diff --git a/src/images/cut.png b/limereport/images/cut.png similarity index 100% rename from src/images/cut.png rename to limereport/images/cut.png diff --git a/src/images/cut1.png b/limereport/images/cut1.png similarity index 100% rename from src/images/cut1.png rename to limereport/images/cut1.png diff --git a/src/images/cut24.png b/limereport/images/cut24.png similarity index 100% rename from src/images/cut24.png rename to limereport/images/cut24.png diff --git a/src/images/cut_24.png b/limereport/images/cut_24.png similarity index 100% rename from src/images/cut_24.png rename to limereport/images/cut_24.png diff --git a/src/images/dasabases.png b/limereport/images/dasabases.png similarity index 100% rename from src/images/dasabases.png rename to limereport/images/dasabases.png diff --git a/src/images/database.png b/limereport/images/database.png similarity index 100% rename from src/images/database.png rename to limereport/images/database.png diff --git a/src/images/delete.png b/limereport/images/delete.png similarity index 100% rename from src/images/delete.png rename to limereport/images/delete.png diff --git a/src/images/delete1.png b/limereport/images/delete1.png similarity index 100% rename from src/images/delete1.png rename to limereport/images/delete1.png diff --git a/src/images/design.png b/limereport/images/design.png similarity index 100% rename from src/images/design.png rename to limereport/images/design.png diff --git a/src/images/dialog-close.png b/limereport/images/dialog-close.png similarity index 100% rename from src/images/dialog-close.png rename to limereport/images/dialog-close.png diff --git a/src/images/dialog-close_red.png b/limereport/images/dialog-close_red.png similarity index 100% rename from src/images/dialog-close_red.png rename to limereport/images/dialog-close_red.png diff --git a/src/images/disk_blue.png b/limereport/images/disk_blue.png similarity index 100% rename from src/images/disk_blue.png rename to limereport/images/disk_blue.png diff --git a/src/images/document_add.png b/limereport/images/document_add.png similarity index 100% rename from src/images/document_add.png rename to limereport/images/document_add.png diff --git a/src/images/document_add_1.png b/limereport/images/document_add_1.png similarity index 100% rename from src/images/document_add_1.png rename to limereport/images/document_add_1.png diff --git a/src/images/document_zoom_in.png b/limereport/images/document_zoom_in.png similarity index 100% rename from src/images/document_zoom_in.png rename to limereport/images/document_zoom_in.png diff --git a/src/images/document_zoom_in_1.png b/limereport/images/document_zoom_in_1.png similarity index 100% rename from src/images/document_zoom_in_1.png rename to limereport/images/document_zoom_in_1.png diff --git a/src/images/document_zoom_out.png b/limereport/images/document_zoom_out.png similarity index 100% rename from src/images/document_zoom_out.png rename to limereport/images/document_zoom_out.png diff --git a/src/images/document_zoom_out_1.png b/limereport/images/document_zoom_out_1.png similarity index 100% rename from src/images/document_zoom_out_1.png rename to limereport/images/document_zoom_out_1.png diff --git a/src/images/edit-copy_1_24.png b/limereport/images/edit-copy_1_24.png similarity index 100% rename from src/images/edit-copy_1_24.png rename to limereport/images/edit-copy_1_24.png diff --git a/src/images/edit-paste_1_24.png b/limereport/images/edit-paste_1_24.png similarity index 100% rename from src/images/edit-paste_1_24.png rename to limereport/images/edit-paste_1_24.png diff --git a/src/images/edit.png b/limereport/images/edit.png similarity index 100% rename from src/images/edit.png rename to limereport/images/edit.png diff --git a/src/images/edit_control_24.png b/limereport/images/edit_control_24.png similarity index 100% rename from src/images/edit_control_24.png rename to limereport/images/edit_control_24.png diff --git a/src/images/edit_control_2_24.png b/limereport/images/edit_control_2_24.png similarity index 100% rename from src/images/edit_control_2_24.png rename to limereport/images/edit_control_2_24.png diff --git a/src/images/edit_control_3_24.png b/limereport/images/edit_control_3_24.png similarity index 100% rename from src/images/edit_control_3_24.png rename to limereport/images/edit_control_3_24.png diff --git a/src/images/edit_layout.png b/limereport/images/edit_layout.png similarity index 100% rename from src/images/edit_layout.png rename to limereport/images/edit_layout.png diff --git a/src/images/edit_layout_2_24.png b/limereport/images/edit_layout_2_24.png similarity index 100% rename from src/images/edit_layout_2_24.png rename to limereport/images/edit_layout_2_24.png diff --git a/src/images/edit_layout_3_24.png b/limereport/images/edit_layout_3_24.png similarity index 100% rename from src/images/edit_layout_3_24.png rename to limereport/images/edit_layout_3_24.png diff --git a/src/images/edit_layout_4_24.png b/limereport/images/edit_layout_4_24.png similarity index 100% rename from src/images/edit_layout_4_24.png rename to limereport/images/edit_layout_4_24.png diff --git a/src/images/edit_pecil2.png b/limereport/images/edit_pecil2.png similarity index 100% rename from src/images/edit_pecil2.png rename to limereport/images/edit_pecil2.png diff --git a/src/images/empty.png b/limereport/images/empty.png similarity index 100% rename from src/images/empty.png rename to limereport/images/empty.png diff --git a/src/images/errors.png b/limereport/images/errors.png similarity index 100% rename from src/images/errors.png rename to limereport/images/errors.png diff --git a/src/images/field.png b/limereport/images/field.png similarity index 100% rename from src/images/field.png rename to limereport/images/field.png diff --git a/src/images/first2.png b/limereport/images/first2.png similarity index 100% rename from src/images/first2.png rename to limereport/images/first2.png diff --git a/src/images/folder.png b/limereport/images/folder.png similarity index 100% rename from src/images/folder.png rename to limereport/images/folder.png diff --git a/src/images/folder1.png b/limereport/images/folder1.png similarity index 100% rename from src/images/folder1.png rename to limereport/images/folder1.png diff --git a/src/images/folder3.png b/limereport/images/folder3.png similarity index 100% rename from src/images/folder3.png rename to limereport/images/folder3.png diff --git a/src/images/function2.png b/limereport/images/function2.png similarity index 100% rename from src/images/function2.png rename to limereport/images/function2.png diff --git a/src/images/function3.png b/limereport/images/function3.png similarity index 100% rename from src/images/function3.png rename to limereport/images/function3.png diff --git a/src/images/go-next.png b/limereport/images/go-next.png similarity index 100% rename from src/images/go-next.png rename to limereport/images/go-next.png diff --git a/src/images/grid.png b/limereport/images/grid.png similarity index 100% rename from src/images/grid.png rename to limereport/images/grid.png diff --git a/src/images/hideLeftPanel.png b/limereport/images/hideLeftPanel.png similarity index 100% rename from src/images/hideLeftPanel.png rename to limereport/images/hideLeftPanel.png diff --git a/src/images/hideRightPanel.png b/limereport/images/hideRightPanel.png similarity index 100% rename from src/images/hideRightPanel.png rename to limereport/images/hideRightPanel.png diff --git a/src/images/hlayout.png b/limereport/images/hlayout.png similarity index 100% rename from src/images/hlayout.png rename to limereport/images/hlayout.png diff --git a/src/images/hlayuot_1_24.png b/limereport/images/hlayuot_1_24.png similarity index 100% rename from src/images/hlayuot_1_24.png rename to limereport/images/hlayuot_1_24.png diff --git a/src/images/hlayuot_2_24.png b/limereport/images/hlayuot_2_24.png similarity index 100% rename from src/images/hlayuot_2_24.png rename to limereport/images/hlayuot_2_24.png diff --git a/src/images/hlayuot_3_24.png b/limereport/images/hlayuot_3_24.png similarity index 100% rename from src/images/hlayuot_3_24.png rename to limereport/images/hlayuot_3_24.png diff --git a/src/images/last2.png b/limereport/images/last2.png similarity index 100% rename from src/images/last2.png rename to limereport/images/last2.png diff --git a/src/images/layuot_create.png b/limereport/images/layuot_create.png similarity index 100% rename from src/images/layuot_create.png rename to limereport/images/layuot_create.png diff --git a/src/images/layuot_create_24.png b/limereport/images/layuot_create_24.png similarity index 100% rename from src/images/layuot_create_24.png rename to limereport/images/layuot_create_24.png diff --git a/src/images/layuot_delete_24.png b/limereport/images/layuot_delete_24.png similarity index 100% rename from src/images/layuot_delete_24.png rename to limereport/images/layuot_delete_24.png diff --git a/src/images/layuot_move.png b/limereport/images/layuot_move.png similarity index 100% rename from src/images/layuot_move.png rename to limereport/images/layuot_move.png diff --git a/src/images/layuot_select.png b/limereport/images/layuot_select.png similarity index 100% rename from src/images/layuot_select.png rename to limereport/images/layuot_select.png diff --git a/src/images/layuot_select_24.png b/limereport/images/layuot_select_24.png similarity index 100% rename from src/images/layuot_select_24.png rename to limereport/images/layuot_select_24.png diff --git a/src/images/leftLine.png b/limereport/images/leftLine.png similarity index 100% rename from src/images/leftLine.png rename to limereport/images/leftLine.png diff --git a/src/images/leftLine1.png b/limereport/images/leftLine1.png similarity index 100% rename from src/images/leftLine1.png rename to limereport/images/leftLine1.png diff --git a/src/images/logo.png b/limereport/images/logo.png similarity index 100% rename from src/images/logo.png rename to limereport/images/logo.png diff --git a/src/images/logo_100.png b/limereport/images/logo_100.png similarity index 100% rename from src/images/logo_100.png rename to limereport/images/logo_100.png diff --git a/src/images/magnet.png b/limereport/images/magnet.png similarity index 100% rename from src/images/magnet.png rename to limereport/images/magnet.png diff --git a/src/images/main.png b/limereport/images/main.png similarity index 100% rename from src/images/main.png rename to limereport/images/main.png diff --git a/src/images/move_back.png b/limereport/images/move_back.png similarity index 100% rename from src/images/move_back.png rename to limereport/images/move_back.png diff --git a/src/images/move_top_1.png b/limereport/images/move_top_1.png similarity index 100% rename from src/images/move_top_1.png rename to limereport/images/move_top_1.png diff --git a/src/images/new_leaf.png b/limereport/images/new_leaf.png similarity index 100% rename from src/images/new_leaf.png rename to limereport/images/new_leaf.png diff --git a/src/images/new_leaf1.png b/limereport/images/new_leaf1.png similarity index 100% rename from src/images/new_leaf1.png rename to limereport/images/new_leaf1.png diff --git a/src/images/next.png b/limereport/images/next.png similarity index 100% rename from src/images/next.png rename to limereport/images/next.png diff --git a/src/images/next1.png b/limereport/images/next1.png similarity index 100% rename from src/images/next1.png rename to limereport/images/next1.png diff --git a/src/images/next2.png b/limereport/images/next2.png similarity index 100% rename from src/images/next2.png rename to limereport/images/next2.png diff --git a/src/images/noLines.png b/limereport/images/noLines.png similarity index 100% rename from src/images/noLines.png rename to limereport/images/noLines.png diff --git a/src/images/noLines1.png b/limereport/images/noLines1.png similarity index 100% rename from src/images/noLines1.png rename to limereport/images/noLines1.png diff --git a/src/images/paste.png b/limereport/images/paste.png similarity index 100% rename from src/images/paste.png rename to limereport/images/paste.png diff --git a/src/images/paste1.png b/limereport/images/paste1.png similarity index 100% rename from src/images/paste1.png rename to limereport/images/paste1.png diff --git a/src/images/paste_1_24.png b/limereport/images/paste_1_24.png similarity index 100% rename from src/images/paste_1_24.png rename to limereport/images/paste_1_24.png diff --git a/src/images/pin_green.png b/limereport/images/pin_green.png similarity index 100% rename from src/images/pin_green.png rename to limereport/images/pin_green.png diff --git a/src/images/prin-preview2.png b/limereport/images/prin-preview2.png similarity index 100% rename from src/images/prin-preview2.png rename to limereport/images/prin-preview2.png diff --git a/src/images/prin-preview_4_24.png b/limereport/images/prin-preview_4_24.png similarity index 100% rename from src/images/prin-preview_4_24.png rename to limereport/images/prin-preview_4_24.png diff --git a/src/images/print.png b/limereport/images/print.png similarity index 100% rename from src/images/print.png rename to limereport/images/print.png diff --git a/src/images/print2_big.png b/limereport/images/print2_big.png similarity index 100% rename from src/images/print2_big.png rename to limereport/images/print2_big.png diff --git a/src/images/print_2_24.png b/limereport/images/print_2_24.png similarity index 100% rename from src/images/print_2_24.png rename to limereport/images/print_2_24.png diff --git a/src/images/print_preview.png b/limereport/images/print_preview.png similarity index 100% rename from src/images/print_preview.png rename to limereport/images/print_preview.png diff --git a/src/images/print_preview1.png b/limereport/images/print_preview1.png similarity index 100% rename from src/images/print_preview1.png rename to limereport/images/print_preview1.png diff --git a/src/images/print_preview2.png b/limereport/images/print_preview2.png similarity index 100% rename from src/images/print_preview2.png rename to limereport/images/print_preview2.png diff --git a/src/images/prior.png b/limereport/images/prior.png similarity index 100% rename from src/images/prior.png rename to limereport/images/prior.png diff --git a/src/images/prior1.png b/limereport/images/prior1.png similarity index 100% rename from src/images/prior1.png rename to limereport/images/prior1.png diff --git a/src/images/prior2.png b/limereport/images/prior2.png similarity index 100% rename from src/images/prior2.png rename to limereport/images/prior2.png diff --git a/src/images/redo.png b/limereport/images/redo.png similarity index 100% rename from src/images/redo.png rename to limereport/images/redo.png diff --git a/src/images/redo1.png b/limereport/images/redo1.png similarity index 100% rename from src/images/redo1.png rename to limereport/images/redo1.png diff --git a/src/images/rightLine.png b/limereport/images/rightLine.png similarity index 100% rename from src/images/rightLine.png rename to limereport/images/rightLine.png diff --git a/src/images/rightLine1.png b/limereport/images/rightLine1.png similarity index 100% rename from src/images/rightLine1.png rename to limereport/images/rightLine1.png diff --git a/src/images/save.png b/limereport/images/save.png similarity index 100% rename from src/images/save.png rename to limereport/images/save.png diff --git a/src/images/save_as_1_24.png b/limereport/images/save_as_1_24.png similarity index 100% rename from src/images/save_as_1_24.png rename to limereport/images/save_as_1_24.png diff --git a/src/images/sendToBack.png b/limereport/images/sendToBack.png similarity index 100% rename from src/images/sendToBack.png rename to limereport/images/sendToBack.png diff --git a/src/images/settings.png b/limereport/images/settings.png similarity index 100% rename from src/images/settings.png rename to limereport/images/settings.png diff --git a/src/images/table1.png b/limereport/images/table1.png similarity index 100% rename from src/images/table1.png rename to limereport/images/table1.png diff --git a/src/images/text-align-botom.png b/limereport/images/text-align-botom.png similarity index 100% rename from src/images/text-align-botom.png rename to limereport/images/text-align-botom.png diff --git a/src/images/text-align-botom1.png b/limereport/images/text-align-botom1.png similarity index 100% rename from src/images/text-align-botom1.png rename to limereport/images/text-align-botom1.png diff --git a/src/images/text-align-justify.png b/limereport/images/text-align-justify.png similarity index 100% rename from src/images/text-align-justify.png rename to limereport/images/text-align-justify.png diff --git a/src/images/text-align-justify1.png b/limereport/images/text-align-justify1.png similarity index 100% rename from src/images/text-align-justify1.png rename to limereport/images/text-align-justify1.png diff --git a/src/images/text-align-top.png b/limereport/images/text-align-top.png similarity index 100% rename from src/images/text-align-top.png rename to limereport/images/text-align-top.png diff --git a/src/images/text-align-top1.png b/limereport/images/text-align-top1.png similarity index 100% rename from src/images/text-align-top1.png rename to limereport/images/text-align-top1.png diff --git a/src/images/text-align-v-center.png b/limereport/images/text-align-v-center.png similarity index 100% rename from src/images/text-align-v-center.png rename to limereport/images/text-align-v-center.png diff --git a/src/images/text-align-v-center1.png b/limereport/images/text-align-v-center1.png similarity index 100% rename from src/images/text-align-v-center1.png rename to limereport/images/text-align-v-center1.png diff --git a/src/images/text_align_center.png b/limereport/images/text_align_center.png similarity index 100% rename from src/images/text_align_center.png rename to limereport/images/text_align_center.png diff --git a/src/images/text_align_center1.png b/limereport/images/text_align_center1.png similarity index 100% rename from src/images/text_align_center1.png rename to limereport/images/text_align_center1.png diff --git a/src/images/text_align_left.png b/limereport/images/text_align_left.png similarity index 100% rename from src/images/text_align_left.png rename to limereport/images/text_align_left.png diff --git a/src/images/text_align_left1.png b/limereport/images/text_align_left1.png similarity index 100% rename from src/images/text_align_left1.png rename to limereport/images/text_align_left1.png diff --git a/src/images/text_align_right.png b/limereport/images/text_align_right.png similarity index 100% rename from src/images/text_align_right.png rename to limereport/images/text_align_right.png diff --git a/src/images/text_align_right1.png b/limereport/images/text_align_right1.png similarity index 100% rename from src/images/text_align_right1.png rename to limereport/images/text_align_right1.png diff --git a/src/images/text_bold.png b/limereport/images/text_bold.png similarity index 100% rename from src/images/text_bold.png rename to limereport/images/text_bold.png diff --git a/src/images/text_bold1.png b/limereport/images/text_bold1.png similarity index 100% rename from src/images/text_bold1.png rename to limereport/images/text_bold1.png diff --git a/src/images/text_italic.png b/limereport/images/text_italic.png similarity index 100% rename from src/images/text_italic.png rename to limereport/images/text_italic.png diff --git a/src/images/text_italic1.png b/limereport/images/text_italic1.png similarity index 100% rename from src/images/text_italic1.png rename to limereport/images/text_italic1.png diff --git a/src/images/text_underline.png b/limereport/images/text_underline.png similarity index 100% rename from src/images/text_underline.png rename to limereport/images/text_underline.png diff --git a/src/images/text_underline1.png b/limereport/images/text_underline1.png similarity index 100% rename from src/images/text_underline1.png rename to limereport/images/text_underline1.png diff --git a/src/images/toBack.png b/limereport/images/toBack.png similarity index 100% rename from src/images/toBack.png rename to limereport/images/toBack.png diff --git a/src/images/toBottom.png b/limereport/images/toBottom.png similarity index 100% rename from src/images/toBottom.png rename to limereport/images/toBottom.png diff --git a/src/images/toCenter.png b/limereport/images/toCenter.png similarity index 100% rename from src/images/toCenter.png rename to limereport/images/toCenter.png diff --git a/src/images/toFront.png b/limereport/images/toFront.png similarity index 100% rename from src/images/toFront.png rename to limereport/images/toFront.png diff --git a/src/images/toLeft1.png b/limereport/images/toLeft1.png similarity index 100% rename from src/images/toLeft1.png rename to limereport/images/toLeft1.png diff --git a/src/images/toRight.png b/limereport/images/toRight.png similarity index 100% rename from src/images/toRight.png rename to limereport/images/toRight.png diff --git a/src/images/toSameHeight.png b/limereport/images/toSameHeight.png similarity index 100% rename from src/images/toSameHeight.png rename to limereport/images/toSameHeight.png diff --git a/src/images/toSameWidth.png b/limereport/images/toSameWidth.png similarity index 100% rename from src/images/toSameWidth.png rename to limereport/images/toSameWidth.png diff --git a/src/images/toTop.png b/limereport/images/toTop.png similarity index 100% rename from src/images/toTop.png rename to limereport/images/toTop.png diff --git a/src/images/toVCernter.png b/limereport/images/toVCernter.png similarity index 100% rename from src/images/toVCernter.png rename to limereport/images/toVCernter.png diff --git a/src/images/to_bottom.png b/limereport/images/to_bottom.png similarity index 100% rename from src/images/to_bottom.png rename to limereport/images/to_bottom.png diff --git a/src/images/to_center.png b/limereport/images/to_center.png similarity index 100% rename from src/images/to_center.png rename to limereport/images/to_center.png diff --git a/src/images/to_h_center.png b/limereport/images/to_h_center.png similarity index 100% rename from src/images/to_h_center.png rename to limereport/images/to_h_center.png diff --git a/src/images/to_left.png b/limereport/images/to_left.png similarity index 100% rename from src/images/to_left.png rename to limereport/images/to_left.png diff --git a/src/images/to_right.png b/limereport/images/to_right.png similarity index 100% rename from src/images/to_right.png rename to limereport/images/to_right.png diff --git a/src/images/to_same_height.png b/limereport/images/to_same_height.png similarity index 100% rename from src/images/to_same_height.png rename to limereport/images/to_same_height.png diff --git a/src/images/to_same_width.png b/limereport/images/to_same_width.png similarity index 100% rename from src/images/to_same_width.png rename to limereport/images/to_same_width.png diff --git a/src/images/to_top.png b/limereport/images/to_top.png similarity index 100% rename from src/images/to_top.png rename to limereport/images/to_top.png diff --git a/src/images/topLine.png b/limereport/images/topLine.png similarity index 100% rename from src/images/topLine.png rename to limereport/images/topLine.png diff --git a/src/images/topLine1.png b/limereport/images/topLine1.png similarity index 100% rename from src/images/topLine1.png rename to limereport/images/topLine1.png diff --git a/src/images/undo.png b/limereport/images/undo.png similarity index 100% rename from src/images/undo.png rename to limereport/images/undo.png diff --git a/src/images/undo1.png b/limereport/images/undo1.png similarity index 100% rename from src/images/undo1.png rename to limereport/images/undo1.png diff --git a/src/images/value.png b/limereport/images/value.png similarity index 100% rename from src/images/value.png rename to limereport/images/value.png diff --git a/src/images/var1.png b/limereport/images/var1.png similarity index 100% rename from src/images/var1.png rename to limereport/images/var1.png diff --git a/src/images/variable.png b/limereport/images/variable.png similarity index 100% rename from src/images/variable.png rename to limereport/images/variable.png diff --git a/src/images/variable1.png b/limereport/images/variable1.png similarity index 100% rename from src/images/variable1.png rename to limereport/images/variable1.png diff --git a/src/images/vlayout.png b/limereport/images/vlayout.png similarity index 100% rename from src/images/vlayout.png rename to limereport/images/vlayout.png diff --git a/src/images/zoom-in_2_16.png b/limereport/images/zoom-in_2_16.png similarity index 100% rename from src/images/zoom-in_2_16.png rename to limereport/images/zoom-in_2_16.png diff --git a/src/images/zoom_in.png b/limereport/images/zoom_in.png similarity index 100% rename from src/images/zoom_in.png rename to limereport/images/zoom_in.png diff --git a/src/images/zoom_in1.png b/limereport/images/zoom_in1.png similarity index 100% rename from src/images/zoom_in1.png rename to limereport/images/zoom_in1.png diff --git a/src/images/zoom_out.png b/limereport/images/zoom_out.png similarity index 100% rename from src/images/zoom_out.png rename to limereport/images/zoom_out.png diff --git a/src/images/zoom_out1.png b/limereport/images/zoom_out1.png similarity index 100% rename from src/images/zoom_out1.png rename to limereport/images/zoom_out1.png diff --git a/src/items/editors/lrfonteditorwidget.cpp b/limereport/items/editors/lrfonteditorwidget.cpp similarity index 100% rename from src/items/editors/lrfonteditorwidget.cpp rename to limereport/items/editors/lrfonteditorwidget.cpp diff --git a/src/items/editors/lrfonteditorwidget.h b/limereport/items/editors/lrfonteditorwidget.h similarity index 100% rename from src/items/editors/lrfonteditorwidget.h rename to limereport/items/editors/lrfonteditorwidget.h diff --git a/src/items/editors/lritemeditorwidget.cpp b/limereport/items/editors/lritemeditorwidget.cpp similarity index 100% rename from src/items/editors/lritemeditorwidget.cpp rename to limereport/items/editors/lritemeditorwidget.cpp diff --git a/src/items/editors/lritemeditorwidget.h b/limereport/items/editors/lritemeditorwidget.h similarity index 100% rename from src/items/editors/lritemeditorwidget.h rename to limereport/items/editors/lritemeditorwidget.h diff --git a/src/items/editors/lritemsaligneditorwidget.cpp b/limereport/items/editors/lritemsaligneditorwidget.cpp similarity index 100% rename from src/items/editors/lritemsaligneditorwidget.cpp rename to limereport/items/editors/lritemsaligneditorwidget.cpp diff --git a/src/items/editors/lritemsaligneditorwidget.h b/limereport/items/editors/lritemsaligneditorwidget.h similarity index 100% rename from src/items/editors/lritemsaligneditorwidget.h rename to limereport/items/editors/lritemsaligneditorwidget.h diff --git a/src/items/editors/lritemsborderseditorwidget.cpp b/limereport/items/editors/lritemsborderseditorwidget.cpp similarity index 100% rename from src/items/editors/lritemsborderseditorwidget.cpp rename to limereport/items/editors/lritemsborderseditorwidget.cpp diff --git a/src/items/editors/lritemsborderseditorwidget.h b/limereport/items/editors/lritemsborderseditorwidget.h similarity index 100% rename from src/items/editors/lritemsborderseditorwidget.h rename to limereport/items/editors/lritemsborderseditorwidget.h diff --git a/src/items/editors/lrtextalignmenteditorwidget.cpp b/limereport/items/editors/lrtextalignmenteditorwidget.cpp similarity index 100% rename from src/items/editors/lrtextalignmenteditorwidget.cpp rename to limereport/items/editors/lrtextalignmenteditorwidget.cpp diff --git a/src/items/editors/lrtextalignmenteditorwidget.h b/limereport/items/editors/lrtextalignmenteditorwidget.h similarity index 100% rename from src/items/editors/lrtextalignmenteditorwidget.h rename to limereport/items/editors/lrtextalignmenteditorwidget.h diff --git a/src/items/images/DataBand.png b/limereport/items/images/DataBand.png similarity index 100% rename from src/items/images/DataBand.png rename to limereport/items/images/DataBand.png diff --git a/src/items/images/DataBand16.png b/limereport/items/images/DataBand16.png similarity index 100% rename from src/items/images/DataBand16.png rename to limereport/items/images/DataBand16.png diff --git a/src/items/images/GroupFooter16.png b/limereport/items/images/GroupFooter16.png similarity index 100% rename from src/items/images/GroupFooter16.png rename to limereport/items/images/GroupFooter16.png diff --git a/src/items/images/GroupHeader16.png b/limereport/items/images/GroupHeader16.png similarity index 100% rename from src/items/images/GroupHeader16.png rename to limereport/items/images/GroupHeader16.png diff --git a/src/items/images/PageFooter.png b/limereport/items/images/PageFooter.png similarity index 100% rename from src/items/images/PageFooter.png rename to limereport/items/images/PageFooter.png diff --git a/src/items/images/PageFooter16.png b/limereport/items/images/PageFooter16.png similarity index 100% rename from src/items/images/PageFooter16.png rename to limereport/items/images/PageFooter16.png diff --git a/src/items/images/PageHeader.png b/limereport/items/images/PageHeader.png similarity index 100% rename from src/items/images/PageHeader.png rename to limereport/items/images/PageHeader.png diff --git a/src/items/images/PageHeader16.png b/limereport/items/images/PageHeader16.png similarity index 100% rename from src/items/images/PageHeader16.png rename to limereport/items/images/PageHeader16.png diff --git a/src/items/images/ReportFooter.png b/limereport/items/images/ReportFooter.png similarity index 100% rename from src/items/images/ReportFooter.png rename to limereport/items/images/ReportFooter.png diff --git a/src/items/images/ReportFooter16.png b/limereport/items/images/ReportFooter16.png similarity index 100% rename from src/items/images/ReportFooter16.png rename to limereport/items/images/ReportFooter16.png diff --git a/src/items/images/ReportHeader.png b/limereport/items/images/ReportHeader.png similarity index 100% rename from src/items/images/ReportHeader.png rename to limereport/items/images/ReportHeader.png diff --git a/src/items/images/ReportHeader16.png b/limereport/items/images/ReportHeader16.png similarity index 100% rename from src/items/images/ReportHeader16.png rename to limereport/items/images/ReportHeader16.png diff --git a/src/items/images/ReportPage.png b/limereport/items/images/ReportPage.png similarity index 100% rename from src/items/images/ReportPage.png rename to limereport/items/images/ReportPage.png diff --git a/src/items/images/ReportPage16.png b/limereport/items/images/ReportPage16.png similarity index 100% rename from src/items/images/ReportPage16.png rename to limereport/items/images/ReportPage16.png diff --git a/src/items/images/SubDetailBand16.png b/limereport/items/images/SubDetailBand16.png similarity index 100% rename from src/items/images/SubDetailBand16.png rename to limereport/items/images/SubDetailBand16.png diff --git a/src/items/images/SubDetailFooterBand16.png b/limereport/items/images/SubDetailFooterBand16.png similarity index 100% rename from src/items/images/SubDetailFooterBand16.png rename to limereport/items/images/SubDetailFooterBand16.png diff --git a/src/items/images/SubDetailHeaderBand16.png b/limereport/items/images/SubDetailHeaderBand16.png similarity index 100% rename from src/items/images/SubDetailHeaderBand16.png rename to limereport/items/images/SubDetailHeaderBand16.png diff --git a/src/items/images/addBand1.png b/limereport/items/images/addBand1.png similarity index 100% rename from src/items/images/addBand1.png rename to limereport/items/images/addBand1.png diff --git a/src/items/images/barcode2.png b/limereport/items/images/barcode2.png similarity index 100% rename from src/items/images/barcode2.png rename to limereport/items/images/barcode2.png diff --git a/src/items/images/hlayout.png b/limereport/items/images/hlayout.png similarity index 100% rename from src/items/images/hlayout.png rename to limereport/items/images/hlayout.png diff --git a/src/items/images/hlayuot_3_24.png b/limereport/items/images/hlayuot_3_24.png similarity index 100% rename from src/items/images/hlayuot_3_24.png rename to limereport/items/images/hlayuot_3_24.png diff --git a/src/items/images/imageItem.png b/limereport/items/images/imageItem.png similarity index 100% rename from src/items/images/imageItem.png rename to limereport/items/images/imageItem.png diff --git a/src/items/images/imageItem1.png b/limereport/items/images/imageItem1.png similarity index 100% rename from src/items/images/imageItem1.png rename to limereport/items/images/imageItem1.png diff --git a/src/items/images/imageItem2.png b/limereport/items/images/imageItem2.png similarity index 100% rename from src/items/images/imageItem2.png rename to limereport/items/images/imageItem2.png diff --git a/src/items/images/insert-text.png b/limereport/items/images/insert-text.png similarity index 100% rename from src/items/images/insert-text.png rename to limereport/items/images/insert-text.png diff --git a/src/items/images/insert-text_2.png b/limereport/items/images/insert-text_2.png similarity index 100% rename from src/items/images/insert-text_2.png rename to limereport/items/images/insert-text_2.png diff --git a/src/items/images/insert-text_3.png b/limereport/items/images/insert-text_3.png similarity index 100% rename from src/items/images/insert-text_3.png rename to limereport/items/images/insert-text_3.png diff --git a/src/items/images/insert-text_5.png b/limereport/items/images/insert-text_5.png similarity index 100% rename from src/items/images/insert-text_5.png rename to limereport/items/images/insert-text_5.png diff --git a/src/items/images/settings.png b/limereport/items/images/settings.png similarity index 100% rename from src/items/images/settings.png rename to limereport/items/images/settings.png diff --git a/src/items/images/settings2.png b/limereport/items/images/settings2.png similarity index 100% rename from src/items/images/settings2.png rename to limereport/items/images/settings2.png diff --git a/src/items/images/shape2.png b/limereport/items/images/shape2.png similarity index 100% rename from src/items/images/shape2.png rename to limereport/items/images/shape2.png diff --git a/src/items/images/shape4.png b/limereport/items/images/shape4.png similarity index 100% rename from src/items/images/shape4.png rename to limereport/items/images/shape4.png diff --git a/src/items/images/shape5.png b/limereport/items/images/shape5.png similarity index 100% rename from src/items/images/shape5.png rename to limereport/items/images/shape5.png diff --git a/src/items/items.qrc b/limereport/items/items.qrc similarity index 100% rename from src/items/items.qrc rename to limereport/items/items.qrc diff --git a/src/items/lralignpropitem.cpp b/limereport/items/lralignpropitem.cpp similarity index 100% rename from src/items/lralignpropitem.cpp rename to limereport/items/lralignpropitem.cpp diff --git a/src/items/lralignpropitem.h b/limereport/items/lralignpropitem.h similarity index 100% rename from src/items/lralignpropitem.h rename to limereport/items/lralignpropitem.h diff --git a/src/items/lrbarcodeitem.cpp b/limereport/items/lrbarcodeitem.cpp similarity index 100% rename from src/items/lrbarcodeitem.cpp rename to limereport/items/lrbarcodeitem.cpp diff --git a/src/items/lrbarcodeitem.h b/limereport/items/lrbarcodeitem.h similarity index 100% rename from src/items/lrbarcodeitem.h rename to limereport/items/lrbarcodeitem.h diff --git a/src/items/lrhorizontallayout.cpp b/limereport/items/lrhorizontallayout.cpp similarity index 100% rename from src/items/lrhorizontallayout.cpp rename to limereport/items/lrhorizontallayout.cpp diff --git a/src/items/lrhorizontallayout.h b/limereport/items/lrhorizontallayout.h similarity index 100% rename from src/items/lrhorizontallayout.h rename to limereport/items/lrhorizontallayout.h diff --git a/src/items/lrimageitem.cpp b/limereport/items/lrimageitem.cpp similarity index 100% rename from src/items/lrimageitem.cpp rename to limereport/items/lrimageitem.cpp diff --git a/src/items/lrimageitem.h b/limereport/items/lrimageitem.h similarity index 100% rename from src/items/lrimageitem.h rename to limereport/items/lrimageitem.h diff --git a/src/items/lrshapeitem.cpp b/limereport/items/lrshapeitem.cpp similarity index 100% rename from src/items/lrshapeitem.cpp rename to limereport/items/lrshapeitem.cpp diff --git a/src/items/lrshapeitem.h b/limereport/items/lrshapeitem.h similarity index 100% rename from src/items/lrshapeitem.h rename to limereport/items/lrshapeitem.h diff --git a/src/items/lrsimpletagparser.cpp b/limereport/items/lrsimpletagparser.cpp similarity index 100% rename from src/items/lrsimpletagparser.cpp rename to limereport/items/lrsimpletagparser.cpp diff --git a/src/items/lrsimpletagparser.h b/limereport/items/lrsimpletagparser.h similarity index 100% rename from src/items/lrsimpletagparser.h rename to limereport/items/lrsimpletagparser.h diff --git a/src/items/lrsubitemparentpropitem.cpp b/limereport/items/lrsubitemparentpropitem.cpp similarity index 100% rename from src/items/lrsubitemparentpropitem.cpp rename to limereport/items/lrsubitemparentpropitem.cpp diff --git a/src/items/lrsubitemparentpropitem.h b/limereport/items/lrsubitemparentpropitem.h similarity index 100% rename from src/items/lrsubitemparentpropitem.h rename to limereport/items/lrsubitemparentpropitem.h diff --git a/src/items/lrtextitem.cpp b/limereport/items/lrtextitem.cpp similarity index 100% rename from src/items/lrtextitem.cpp rename to limereport/items/lrtextitem.cpp diff --git a/src/items/lrtextitem.h b/limereport/items/lrtextitem.h similarity index 100% rename from src/items/lrtextitem.h rename to limereport/items/lrtextitem.h diff --git a/src/items/lrtextitemeditor.cpp b/limereport/items/lrtextitemeditor.cpp similarity index 100% rename from src/items/lrtextitemeditor.cpp rename to limereport/items/lrtextitemeditor.cpp diff --git a/src/items/lrtextitemeditor.h b/limereport/items/lrtextitemeditor.h similarity index 100% rename from src/items/lrtextitemeditor.h rename to limereport/items/lrtextitemeditor.h diff --git a/src/items/lrtextitemeditor.ui b/limereport/items/lrtextitemeditor.ui similarity index 100% rename from src/items/lrtextitemeditor.ui rename to limereport/items/lrtextitemeditor.ui diff --git a/report-lib.pri b/limereport/limereport.pro similarity index 83% rename from report-lib.pri rename to limereport/limereport.pro index f61d42c..6a2af27 100644 --- a/report-lib.pri +++ b/limereport/limereport.pro @@ -1,18 +1,9 @@ +TARGET = limereport +TEMPLATE = lib QT += script xml sql -REPORT_PATH = $$PWD - -LIMEREPORT_VERSION_MAJOR = 1 -LIMEREPORT_VERSION_MINOR = 3 -LIMEREPORT_VERSION_RELEASE = 10 - -LIMEREPORT_VERSION = '\\"$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}\\"' -DEFINES += LIMEREPORT_VERSION_STR=\"$${LIMEREPORT_VERSION}\" -DEFINES += LIMEREPORT_VERSION=$${LIMEREPORT_VERSION} - greaterThan(QT_MAJOR_VERSION, 4) { DEFINES+=HAVE_QT5 QT+= printsupport widgets - contains(QT,uitools){ message(uitools) DEFINES += HAVE_UI_LOADER @@ -26,9 +17,80 @@ lessThan(QT_MAJOR_VERSION, 5){ } } -DEFINES += INSPECT_BASEDESIGN +CONFIG(release, debug|release){ + message(Release) + BUILD_TYPE = release +}else{ + message(Debug) + BUILD_TYPE = debug +} +CONFIG += lib +CONFIG += dll +CONFIG += create_prl +CONFIG += link_prl +CONFIG -= app_bundle -REPORT_PATH = $$PWD/src +LIMEREPORT_VERSION_MAJOR = 1 +LIMEREPORT_VERSION_MINOR = 3 +LIMEREPORT_VERSION_RELEASE = 10 +LIMEREPORT_VERSION = '\\"$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}\\"' + +DEFINES += LIMEREPORT_VERSION_STR=\"$${LIMEREPORT_VERSION}\" +DEFINES += LIMEREPORT_VERSION=$${LIMEREPORT_VERSION} + +DEFINES += INSPECT_BASEDESIGN +DEFINES += LIMEREPORT_EXPORTS + +REPORT_PATH = $$PWD +EXTRA_FILES += \ + $$PWD/lrglobal.cpp \ + $$PWD/lrglobal.h \ + $$PWD/lrdatasourcemanagerintf.h \ + $$PWD/lrreportengine.h \ + $$PWD/lrscriptenginemanagerintf.h \ + $$PWD/lrcallbackdatasourceintf.h + +DEST_DIR = $$PWD/../include/ + +unix { + for(FILE,EXTRA_FILES){ + QMAKE_POST_LINK += $$quote($$QMAKE_COPY $${FILE} $${DEST_DIR}$$escape_expand(\n\t)) + } + MOC_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/moc + UI_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui + UI_HEADERS_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui + UI_SOURCES_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/ui + OBJECTS_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/obj + RCC_DIR = $${OUT_PWD}/unix/$${BUILD_TYPE}/rcc + DESTDIR = $$PWD/../build/unix/$${BUILD_TYPE}/lib + for(FILE,EXTRA_FILES){ + QMAKE_POST_LINK += mkdir -p $$quote($${DESTDIR}/include) | $$QMAKE_COPY $$quote($$FILE) $$quote($$DESTDIR/include/) $$escape_expand(\\n\\t) + } + +} + +win32 { + EXTRA_FILES ~= s,/,\\,g + DEST_DIR ~= s,/,\\,g + for(FILE,EXTRA_FILES){ + QMAKE_POST_LINK += $$QMAKE_COPY $$quote($$FILE) $$quote($$DEST_DIR) $$escape_expand(\\n\\t) + } + MOC_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/moc + UI_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui + UI_HEADERS_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui + UI_SOURCES_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/ui + OBJECTS_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/obj + RCC_DIR = $${OUT_PWD}/win32/$${BUILD_TYPE}/rcc + DESTDIR = $$PWD/../build/win32/$${BUILD_TYPE}/lib + +} + +DEPENDPATH += report report/bands report/base report/databrowser report/items report/objectinspector +INCLUDEPATH += report report/bands report/base report/databrowser report/items report/objectinspector + +contains(CONFIG,zint){ + LIBS += -L$${DEST_DIR} -lQtZint +} INCLUDEPATH += \ @@ -231,20 +293,19 @@ RESOURCES += \ $$REPORT_PATH/items/items.qrc -TRANSLATIONS_PATH = $$PWD/translations + + +####### +####Automatically build required translation files (*.qm) +TRANSLATIONS_PATH = $$PWD/../translations TRANSLATIONS += $$TRANSLATIONS_PATH/limereport_ru.ts \ $$TRANSLATIONS_PATH/limereport_es_ES.ts OTHER_FILES += $$TRANSLATIONS -####### -####Automatically build required translation files (*.qm) all.depends = locale -#QMAKE_EXTRA_TARGETS += all -#"%.ts".commands = lupdate -ts $@ $< - -TRANSLATIONS_TARGETS = $$replace(TRANSLATIONS, ".ts", ".qm") +TRANSLATIONS_TARGETS = $$replace(TRANSLATIONS, "\.ts", ".qm") locale.depends = $$TRANSLATIONS_TARGETS QMAKE_EXTRA_TARGETS += locale @@ -255,3 +316,5 @@ QMAKE_EXTRA_TARGETS += "%.qm" PRE_TARGETDEPS += locale #### EN AUTOMATIC TRANSLATIONS + +#INSTALLS += target diff --git a/src/lraboutdialog.cpp b/limereport/lraboutdialog.cpp similarity index 100% rename from src/lraboutdialog.cpp rename to limereport/lraboutdialog.cpp diff --git a/src/lraboutdialog.h b/limereport/lraboutdialog.h similarity index 100% rename from src/lraboutdialog.h rename to limereport/lraboutdialog.h diff --git a/src/lraboutdialog.ui b/limereport/lraboutdialog.ui similarity index 100% rename from src/lraboutdialog.ui rename to limereport/lraboutdialog.ui diff --git a/src/lrbanddesignintf.cpp b/limereport/lrbanddesignintf.cpp similarity index 100% rename from src/lrbanddesignintf.cpp rename to limereport/lrbanddesignintf.cpp diff --git a/src/lrbanddesignintf.h b/limereport/lrbanddesignintf.h similarity index 100% rename from src/lrbanddesignintf.h rename to limereport/lrbanddesignintf.h diff --git a/src/lrbandsmanager.cpp b/limereport/lrbandsmanager.cpp similarity index 100% rename from src/lrbandsmanager.cpp rename to limereport/lrbandsmanager.cpp diff --git a/src/lrbandsmanager.h b/limereport/lrbandsmanager.h similarity index 100% rename from src/lrbandsmanager.h rename to limereport/lrbandsmanager.h diff --git a/src/lrbasedesignintf.cpp b/limereport/lrbasedesignintf.cpp similarity index 100% rename from src/lrbasedesignintf.cpp rename to limereport/lrbasedesignintf.cpp diff --git a/src/lrbasedesignintf.h b/limereport/lrbasedesignintf.h similarity index 100% rename from src/lrbasedesignintf.h rename to limereport/lrbasedesignintf.h diff --git a/src/lrcallbackdatasourceintf.h b/limereport/lrcallbackdatasourceintf.h similarity index 100% rename from src/lrcallbackdatasourceintf.h rename to limereport/lrcallbackdatasourceintf.h diff --git a/src/lrcollection.h b/limereport/lrcollection.h similarity index 100% rename from src/lrcollection.h rename to limereport/lrcollection.h diff --git a/src/lrdatadesignintf.cpp b/limereport/lrdatadesignintf.cpp similarity index 100% rename from src/lrdatadesignintf.cpp rename to limereport/lrdatadesignintf.cpp diff --git a/src/lrdatadesignintf.h b/limereport/lrdatadesignintf.h similarity index 100% rename from src/lrdatadesignintf.h rename to limereport/lrdatadesignintf.h diff --git a/src/lrdatasourcemanager.cpp b/limereport/lrdatasourcemanager.cpp similarity index 100% rename from src/lrdatasourcemanager.cpp rename to limereport/lrdatasourcemanager.cpp diff --git a/src/lrdatasourcemanager.h b/limereport/lrdatasourcemanager.h similarity index 100% rename from src/lrdatasourcemanager.h rename to limereport/lrdatasourcemanager.h diff --git a/src/lrdatasourcemanagerintf.h b/limereport/lrdatasourcemanagerintf.h similarity index 100% rename from src/lrdatasourcemanagerintf.h rename to limereport/lrdatasourcemanagerintf.h diff --git a/src/lrdesignelementsfactory.h b/limereport/lrdesignelementsfactory.h similarity index 100% rename from src/lrdesignelementsfactory.h rename to limereport/lrdesignelementsfactory.h diff --git a/src/lrglobal.cpp b/limereport/lrglobal.cpp similarity index 100% rename from src/lrglobal.cpp rename to limereport/lrglobal.cpp diff --git a/src/lrglobal.h b/limereport/lrglobal.h similarity index 100% rename from src/lrglobal.h rename to limereport/lrglobal.h diff --git a/src/lrgroupfunctions.cpp b/limereport/lrgroupfunctions.cpp similarity index 100% rename from src/lrgroupfunctions.cpp rename to limereport/lrgroupfunctions.cpp diff --git a/src/lrgroupfunctions.h b/limereport/lrgroupfunctions.h similarity index 100% rename from src/lrgroupfunctions.h rename to limereport/lrgroupfunctions.h diff --git a/src/lritemdesignintf.cpp b/limereport/lritemdesignintf.cpp similarity index 100% rename from src/lritemdesignintf.cpp rename to limereport/lritemdesignintf.cpp diff --git a/src/lritemdesignintf.h b/limereport/lritemdesignintf.h similarity index 100% rename from src/lritemdesignintf.h rename to limereport/lritemdesignintf.h diff --git a/src/lrpagedesignintf.cpp b/limereport/lrpagedesignintf.cpp similarity index 100% rename from src/lrpagedesignintf.cpp rename to limereport/lrpagedesignintf.cpp diff --git a/src/lrpagedesignintf.h b/limereport/lrpagedesignintf.h similarity index 100% rename from src/lrpagedesignintf.h rename to limereport/lrpagedesignintf.h diff --git a/src/lrpageitemdesignintf.cpp b/limereport/lrpageitemdesignintf.cpp similarity index 100% rename from src/lrpageitemdesignintf.cpp rename to limereport/lrpageitemdesignintf.cpp diff --git a/src/lrpageitemdesignintf.h b/limereport/lrpageitemdesignintf.h similarity index 100% rename from src/lrpageitemdesignintf.h rename to limereport/lrpageitemdesignintf.h diff --git a/src/lrpreviewreportwindow.cpp b/limereport/lrpreviewreportwindow.cpp similarity index 100% rename from src/lrpreviewreportwindow.cpp rename to limereport/lrpreviewreportwindow.cpp diff --git a/src/lrpreviewreportwindow.h b/limereport/lrpreviewreportwindow.h similarity index 100% rename from src/lrpreviewreportwindow.h rename to limereport/lrpreviewreportwindow.h diff --git a/src/lrpreviewreportwindow.ui b/limereport/lrpreviewreportwindow.ui similarity index 100% rename from src/lrpreviewreportwindow.ui rename to limereport/lrpreviewreportwindow.ui diff --git a/src/lrreportdesignwidget.cpp b/limereport/lrreportdesignwidget.cpp similarity index 100% rename from src/lrreportdesignwidget.cpp rename to limereport/lrreportdesignwidget.cpp diff --git a/src/lrreportdesignwidget.h b/limereport/lrreportdesignwidget.h similarity index 100% rename from src/lrreportdesignwidget.h rename to limereport/lrreportdesignwidget.h diff --git a/src/lrreportdesignwindow.cpp b/limereport/lrreportdesignwindow.cpp similarity index 100% rename from src/lrreportdesignwindow.cpp rename to limereport/lrreportdesignwindow.cpp diff --git a/src/lrreportdesignwindow.h b/limereport/lrreportdesignwindow.h similarity index 100% rename from src/lrreportdesignwindow.h rename to limereport/lrreportdesignwindow.h diff --git a/src/lrreportengine.cpp b/limereport/lrreportengine.cpp similarity index 100% rename from src/lrreportengine.cpp rename to limereport/lrreportengine.cpp diff --git a/src/lrreportengine.h b/limereport/lrreportengine.h similarity index 100% rename from src/lrreportengine.h rename to limereport/lrreportengine.h diff --git a/src/lrreportengine_p.h b/limereport/lrreportengine_p.h similarity index 100% rename from src/lrreportengine_p.h rename to limereport/lrreportengine_p.h diff --git a/src/lrreportrender.cpp b/limereport/lrreportrender.cpp similarity index 100% rename from src/lrreportrender.cpp rename to limereport/lrreportrender.cpp diff --git a/src/lrreportrender.h b/limereport/lrreportrender.h similarity index 100% rename from src/lrreportrender.h rename to limereport/lrreportrender.h diff --git a/src/lrscriptenginemanager.cpp b/limereport/lrscriptenginemanager.cpp similarity index 100% rename from src/lrscriptenginemanager.cpp rename to limereport/lrscriptenginemanager.cpp diff --git a/src/lrscriptenginemanager.h b/limereport/lrscriptenginemanager.h similarity index 100% rename from src/lrscriptenginemanager.h rename to limereport/lrscriptenginemanager.h diff --git a/src/lrscriptenginemanagerintf.h b/limereport/lrscriptenginemanagerintf.h similarity index 100% rename from src/lrscriptenginemanagerintf.h rename to limereport/lrscriptenginemanagerintf.h diff --git a/src/lrsettingdialog.cpp b/limereport/lrsettingdialog.cpp similarity index 100% rename from src/lrsettingdialog.cpp rename to limereport/lrsettingdialog.cpp diff --git a/src/lrsettingdialog.h b/limereport/lrsettingdialog.h similarity index 100% rename from src/lrsettingdialog.h rename to limereport/lrsettingdialog.h diff --git a/src/lrsettingdialog.ui b/limereport/lrsettingdialog.ui similarity index 100% rename from src/lrsettingdialog.ui rename to limereport/lrsettingdialog.ui diff --git a/src/lrsimplecrypt.cpp b/limereport/lrsimplecrypt.cpp similarity index 100% rename from src/lrsimplecrypt.cpp rename to limereport/lrsimplecrypt.cpp diff --git a/src/lrsimplecrypt.h b/limereport/lrsimplecrypt.h similarity index 100% rename from src/lrsimplecrypt.h rename to limereport/lrsimplecrypt.h diff --git a/src/lrvariablesholder.cpp b/limereport/lrvariablesholder.cpp similarity index 100% rename from src/lrvariablesholder.cpp rename to limereport/lrvariablesholder.cpp diff --git a/src/lrvariablesholder.h b/limereport/lrvariablesholder.h similarity index 100% rename from src/lrvariablesholder.h rename to limereport/lrvariablesholder.h diff --git a/src/objectinspector/editors/lrbuttonlineeditor.cpp b/limereport/objectinspector/editors/lrbuttonlineeditor.cpp similarity index 100% rename from src/objectinspector/editors/lrbuttonlineeditor.cpp rename to limereport/objectinspector/editors/lrbuttonlineeditor.cpp diff --git a/src/objectinspector/editors/lrbuttonlineeditor.h b/limereport/objectinspector/editors/lrbuttonlineeditor.h similarity index 100% rename from src/objectinspector/editors/lrbuttonlineeditor.h rename to limereport/objectinspector/editors/lrbuttonlineeditor.h diff --git a/src/objectinspector/editors/lrcheckboxeditor.cpp b/limereport/objectinspector/editors/lrcheckboxeditor.cpp similarity index 100% rename from src/objectinspector/editors/lrcheckboxeditor.cpp rename to limereport/objectinspector/editors/lrcheckboxeditor.cpp diff --git a/src/objectinspector/editors/lrcheckboxeditor.h b/limereport/objectinspector/editors/lrcheckboxeditor.h similarity index 100% rename from src/objectinspector/editors/lrcheckboxeditor.h rename to limereport/objectinspector/editors/lrcheckboxeditor.h diff --git a/src/objectinspector/editors/lrcoloreditor.cpp b/limereport/objectinspector/editors/lrcoloreditor.cpp similarity index 100% rename from src/objectinspector/editors/lrcoloreditor.cpp rename to limereport/objectinspector/editors/lrcoloreditor.cpp diff --git a/src/objectinspector/editors/lrcoloreditor.h b/limereport/objectinspector/editors/lrcoloreditor.h similarity index 100% rename from src/objectinspector/editors/lrcoloreditor.h rename to limereport/objectinspector/editors/lrcoloreditor.h diff --git a/src/objectinspector/editors/lrcomboboxeditor.cpp b/limereport/objectinspector/editors/lrcomboboxeditor.cpp similarity index 100% rename from src/objectinspector/editors/lrcomboboxeditor.cpp rename to limereport/objectinspector/editors/lrcomboboxeditor.cpp diff --git a/src/objectinspector/editors/lrcomboboxeditor.h b/limereport/objectinspector/editors/lrcomboboxeditor.h similarity index 100% rename from src/objectinspector/editors/lrcomboboxeditor.h rename to limereport/objectinspector/editors/lrcomboboxeditor.h diff --git a/src/objectinspector/editors/lrfonteditor.cpp b/limereport/objectinspector/editors/lrfonteditor.cpp similarity index 100% rename from src/objectinspector/editors/lrfonteditor.cpp rename to limereport/objectinspector/editors/lrfonteditor.cpp diff --git a/src/objectinspector/editors/lrfonteditor.h b/limereport/objectinspector/editors/lrfonteditor.h similarity index 100% rename from src/objectinspector/editors/lrfonteditor.h rename to limereport/objectinspector/editors/lrfonteditor.h diff --git a/src/objectinspector/editors/lrimageeditor.cpp b/limereport/objectinspector/editors/lrimageeditor.cpp similarity index 100% rename from src/objectinspector/editors/lrimageeditor.cpp rename to limereport/objectinspector/editors/lrimageeditor.cpp diff --git a/src/objectinspector/editors/lrimageeditor.h b/limereport/objectinspector/editors/lrimageeditor.h similarity index 100% rename from src/objectinspector/editors/lrimageeditor.h rename to limereport/objectinspector/editors/lrimageeditor.h diff --git a/src/objectinspector/editors/lrtextitempropertyeditor.cpp b/limereport/objectinspector/editors/lrtextitempropertyeditor.cpp similarity index 100% rename from src/objectinspector/editors/lrtextitempropertyeditor.cpp rename to limereport/objectinspector/editors/lrtextitempropertyeditor.cpp diff --git a/src/objectinspector/editors/lrtextitempropertyeditor.h b/limereport/objectinspector/editors/lrtextitempropertyeditor.h similarity index 100% rename from src/objectinspector/editors/lrtextitempropertyeditor.h rename to limereport/objectinspector/editors/lrtextitempropertyeditor.h diff --git a/src/objectinspector/editors/ltextitempropertyeditor.ui b/limereport/objectinspector/editors/ltextitempropertyeditor.ui similarity index 100% rename from src/objectinspector/editors/ltextitempropertyeditor.ui rename to limereport/objectinspector/editors/ltextitempropertyeditor.ui diff --git a/src/objectinspector/images/check.png b/limereport/objectinspector/images/check.png similarity index 100% rename from src/objectinspector/images/check.png rename to limereport/objectinspector/images/check.png diff --git a/src/objectinspector/images/check_w.png b/limereport/objectinspector/images/check_w.png similarity index 100% rename from src/objectinspector/images/check_w.png rename to limereport/objectinspector/images/check_w.png diff --git a/src/objectinspector/images/clear.png b/limereport/objectinspector/images/clear.png similarity index 100% rename from src/objectinspector/images/clear.png rename to limereport/objectinspector/images/clear.png diff --git a/src/objectinspector/images/edit_16.ico b/limereport/objectinspector/images/edit_16.ico similarity index 100% rename from src/objectinspector/images/edit_16.ico rename to limereport/objectinspector/images/edit_16.ico diff --git a/src/objectinspector/images/uncheck.png b/limereport/objectinspector/images/uncheck.png similarity index 100% rename from src/objectinspector/images/uncheck.png rename to limereport/objectinspector/images/uncheck.png diff --git a/src/objectinspector/images/uncheck_w.png b/limereport/objectinspector/images/uncheck_w.png similarity index 100% rename from src/objectinspector/images/uncheck_w.png rename to limereport/objectinspector/images/uncheck_w.png diff --git a/src/objectinspector/lobjectinspector.qrc b/limereport/objectinspector/lobjectinspector.qrc similarity index 100% rename from src/objectinspector/lobjectinspector.qrc rename to limereport/objectinspector/lobjectinspector.qrc diff --git a/src/objectinspector/lrbasedesignobjectmodel.cpp b/limereport/objectinspector/lrbasedesignobjectmodel.cpp similarity index 100% rename from src/objectinspector/lrbasedesignobjectmodel.cpp rename to limereport/objectinspector/lrbasedesignobjectmodel.cpp diff --git a/src/objectinspector/lrbasedesignobjectmodel.h b/limereport/objectinspector/lrbasedesignobjectmodel.h similarity index 100% rename from src/objectinspector/lrbasedesignobjectmodel.h rename to limereport/objectinspector/lrbasedesignobjectmodel.h diff --git a/src/objectinspector/lrobjectinspectorwidget.cpp b/limereport/objectinspector/lrobjectinspectorwidget.cpp similarity index 100% rename from src/objectinspector/lrobjectinspectorwidget.cpp rename to limereport/objectinspector/lrobjectinspectorwidget.cpp diff --git a/src/objectinspector/lrobjectinspectorwidget.h b/limereport/objectinspector/lrobjectinspectorwidget.h similarity index 100% rename from src/objectinspector/lrobjectinspectorwidget.h rename to limereport/objectinspector/lrobjectinspectorwidget.h diff --git a/src/objectinspector/lrobjectitemmodel.cpp b/limereport/objectinspector/lrobjectitemmodel.cpp similarity index 100% rename from src/objectinspector/lrobjectitemmodel.cpp rename to limereport/objectinspector/lrobjectitemmodel.cpp diff --git a/src/objectinspector/lrobjectitemmodel.h b/limereport/objectinspector/lrobjectitemmodel.h similarity index 100% rename from src/objectinspector/lrobjectitemmodel.h rename to limereport/objectinspector/lrobjectitemmodel.h diff --git a/src/objectinspector/lrobjectpropitem.cpp b/limereport/objectinspector/lrobjectpropitem.cpp similarity index 100% rename from src/objectinspector/lrobjectpropitem.cpp rename to limereport/objectinspector/lrobjectpropitem.cpp diff --git a/src/objectinspector/lrobjectpropitem.h b/limereport/objectinspector/lrobjectpropitem.h similarity index 100% rename from src/objectinspector/lrobjectpropitem.h rename to limereport/objectinspector/lrobjectpropitem.h diff --git a/src/objectinspector/lrpropertydelegate.cpp b/limereport/objectinspector/lrpropertydelegate.cpp similarity index 100% rename from src/objectinspector/lrpropertydelegate.cpp rename to limereport/objectinspector/lrpropertydelegate.cpp diff --git a/src/objectinspector/lrpropertydelegate.h b/limereport/objectinspector/lrpropertydelegate.h similarity index 100% rename from src/objectinspector/lrpropertydelegate.h rename to limereport/objectinspector/lrpropertydelegate.h diff --git a/src/objectinspector/propertyItems/lrboolpropitem.cpp b/limereport/objectinspector/propertyItems/lrboolpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrboolpropitem.cpp rename to limereport/objectinspector/propertyItems/lrboolpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrboolpropitem.h b/limereport/objectinspector/propertyItems/lrboolpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrboolpropitem.h rename to limereport/objectinspector/propertyItems/lrboolpropitem.h diff --git a/src/objectinspector/propertyItems/lrcolorpropitem.cpp b/limereport/objectinspector/propertyItems/lrcolorpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrcolorpropitem.cpp rename to limereport/objectinspector/propertyItems/lrcolorpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrcolorpropitem.h b/limereport/objectinspector/propertyItems/lrcolorpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrcolorpropitem.h rename to limereport/objectinspector/propertyItems/lrcolorpropitem.h diff --git a/src/objectinspector/propertyItems/lrcontentpropitem.cpp b/limereport/objectinspector/propertyItems/lrcontentpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrcontentpropitem.cpp rename to limereport/objectinspector/propertyItems/lrcontentpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrcontentpropitem.h b/limereport/objectinspector/propertyItems/lrcontentpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrcontentpropitem.h rename to limereport/objectinspector/propertyItems/lrcontentpropitem.h diff --git a/src/objectinspector/propertyItems/lrdatasourcepropitem.cpp b/limereport/objectinspector/propertyItems/lrdatasourcepropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrdatasourcepropitem.cpp rename to limereport/objectinspector/propertyItems/lrdatasourcepropitem.cpp diff --git a/src/objectinspector/propertyItems/lrdatasourcepropitem.h b/limereport/objectinspector/propertyItems/lrdatasourcepropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrdatasourcepropitem.h rename to limereport/objectinspector/propertyItems/lrdatasourcepropitem.h diff --git a/src/objectinspector/propertyItems/lrenumpropitem.cpp b/limereport/objectinspector/propertyItems/lrenumpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrenumpropitem.cpp rename to limereport/objectinspector/propertyItems/lrenumpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrenumpropitem.h b/limereport/objectinspector/propertyItems/lrenumpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrenumpropitem.h rename to limereport/objectinspector/propertyItems/lrenumpropitem.h diff --git a/src/objectinspector/propertyItems/lrflagspropitem.cpp b/limereport/objectinspector/propertyItems/lrflagspropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrflagspropitem.cpp rename to limereport/objectinspector/propertyItems/lrflagspropitem.cpp diff --git a/src/objectinspector/propertyItems/lrflagspropitem.h b/limereport/objectinspector/propertyItems/lrflagspropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrflagspropitem.h rename to limereport/objectinspector/propertyItems/lrflagspropitem.h diff --git a/src/objectinspector/propertyItems/lrfontpropitem.cpp b/limereport/objectinspector/propertyItems/lrfontpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrfontpropitem.cpp rename to limereport/objectinspector/propertyItems/lrfontpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrfontpropitem.h b/limereport/objectinspector/propertyItems/lrfontpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrfontpropitem.h rename to limereport/objectinspector/propertyItems/lrfontpropitem.h diff --git a/src/objectinspector/propertyItems/lrgroupfieldpropitem.cpp b/limereport/objectinspector/propertyItems/lrgroupfieldpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrgroupfieldpropitem.cpp rename to limereport/objectinspector/propertyItems/lrgroupfieldpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrgroupfieldpropitem.h b/limereport/objectinspector/propertyItems/lrgroupfieldpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrgroupfieldpropitem.h rename to limereport/objectinspector/propertyItems/lrgroupfieldpropitem.h diff --git a/src/objectinspector/propertyItems/lrimagepropitem.cpp b/limereport/objectinspector/propertyItems/lrimagepropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrimagepropitem.cpp rename to limereport/objectinspector/propertyItems/lrimagepropitem.cpp diff --git a/src/objectinspector/propertyItems/lrimagepropitem.h b/limereport/objectinspector/propertyItems/lrimagepropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrimagepropitem.h rename to limereport/objectinspector/propertyItems/lrimagepropitem.h diff --git a/src/objectinspector/propertyItems/lrintpropitem.cpp b/limereport/objectinspector/propertyItems/lrintpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrintpropitem.cpp rename to limereport/objectinspector/propertyItems/lrintpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrintpropitem.h b/limereport/objectinspector/propertyItems/lrintpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrintpropitem.h rename to limereport/objectinspector/propertyItems/lrintpropitem.h diff --git a/src/objectinspector/propertyItems/lrqrealpropitem.cpp b/limereport/objectinspector/propertyItems/lrqrealpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrqrealpropitem.cpp rename to limereport/objectinspector/propertyItems/lrqrealpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrqrealpropitem.h b/limereport/objectinspector/propertyItems/lrqrealpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrqrealpropitem.h rename to limereport/objectinspector/propertyItems/lrqrealpropitem.h diff --git a/src/objectinspector/propertyItems/lrrectproptem.cpp b/limereport/objectinspector/propertyItems/lrrectproptem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrrectproptem.cpp rename to limereport/objectinspector/propertyItems/lrrectproptem.cpp diff --git a/src/objectinspector/propertyItems/lrrectproptem.h b/limereport/objectinspector/propertyItems/lrrectproptem.h similarity index 100% rename from src/objectinspector/propertyItems/lrrectproptem.h rename to limereport/objectinspector/propertyItems/lrrectproptem.h diff --git a/src/objectinspector/propertyItems/lrstringpropitem.cpp b/limereport/objectinspector/propertyItems/lrstringpropitem.cpp similarity index 100% rename from src/objectinspector/propertyItems/lrstringpropitem.cpp rename to limereport/objectinspector/propertyItems/lrstringpropitem.cpp diff --git a/src/objectinspector/propertyItems/lrstringpropitem.h b/limereport/objectinspector/propertyItems/lrstringpropitem.h similarity index 100% rename from src/objectinspector/propertyItems/lrstringpropitem.h rename to limereport/objectinspector/propertyItems/lrstringpropitem.h diff --git a/src/objectsbrowser/lrobjectbrowser.cpp b/limereport/objectsbrowser/lrobjectbrowser.cpp similarity index 100% rename from src/objectsbrowser/lrobjectbrowser.cpp rename to limereport/objectsbrowser/lrobjectbrowser.cpp diff --git a/src/objectsbrowser/lrobjectbrowser.h b/limereport/objectsbrowser/lrobjectbrowser.h similarity index 100% rename from src/objectsbrowser/lrobjectbrowser.h rename to limereport/objectsbrowser/lrobjectbrowser.h diff --git a/src/report.qrc b/limereport/report.qrc similarity index 100% rename from src/report.qrc rename to limereport/report.qrc diff --git a/src/serializators/lrserializatorintf.h b/limereport/serializators/lrserializatorintf.h similarity index 100% rename from src/serializators/lrserializatorintf.h rename to limereport/serializators/lrserializatorintf.h diff --git a/src/serializators/lrstorageintf.h b/limereport/serializators/lrstorageintf.h similarity index 100% rename from src/serializators/lrstorageintf.h rename to limereport/serializators/lrstorageintf.h diff --git a/src/serializators/lrxmlbasetypesserializators.cpp b/limereport/serializators/lrxmlbasetypesserializators.cpp similarity index 100% rename from src/serializators/lrxmlbasetypesserializators.cpp rename to limereport/serializators/lrxmlbasetypesserializators.cpp diff --git a/src/serializators/lrxmlbasetypesserializators.h b/limereport/serializators/lrxmlbasetypesserializators.h similarity index 100% rename from src/serializators/lrxmlbasetypesserializators.h rename to limereport/serializators/lrxmlbasetypesserializators.h diff --git a/src/serializators/lrxmlqrectserializator.cpp b/limereport/serializators/lrxmlqrectserializator.cpp similarity index 100% rename from src/serializators/lrxmlqrectserializator.cpp rename to limereport/serializators/lrxmlqrectserializator.cpp diff --git a/src/serializators/lrxmlqrectserializator.h b/limereport/serializators/lrxmlqrectserializator.h similarity index 100% rename from src/serializators/lrxmlqrectserializator.h rename to limereport/serializators/lrxmlqrectserializator.h diff --git a/src/serializators/lrxmlreader.cpp b/limereport/serializators/lrxmlreader.cpp similarity index 100% rename from src/serializators/lrxmlreader.cpp rename to limereport/serializators/lrxmlreader.cpp diff --git a/src/serializators/lrxmlreader.h b/limereport/serializators/lrxmlreader.h similarity index 100% rename from src/serializators/lrxmlreader.h rename to limereport/serializators/lrxmlreader.h diff --git a/src/serializators/lrxmlserializatorsfactory.h b/limereport/serializators/lrxmlserializatorsfactory.h similarity index 100% rename from src/serializators/lrxmlserializatorsfactory.h rename to limereport/serializators/lrxmlserializatorsfactory.h diff --git a/src/serializators/lrxmlwriter.cpp b/limereport/serializators/lrxmlwriter.cpp similarity index 100% rename from src/serializators/lrxmlwriter.cpp rename to limereport/serializators/lrxmlwriter.cpp diff --git a/src/serializators/lrxmlwriter.h b/limereport/serializators/lrxmlwriter.h similarity index 100% rename from src/serializators/lrxmlwriter.h rename to limereport/serializators/lrxmlwriter.h diff --git a/qzint.pri b/qzint.pri deleted file mode 100644 index 51a6a50..0000000 --- a/qzint.pri +++ /dev/null @@ -1,64 +0,0 @@ -DEFINES += _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS ZINT_VERSION=\\\"$$ZINT_VERSION\\\" NO_PNG - -!contains(DEFINES, NO_PNG) { - LIBS += -lpng -} - -INCLUDEPATH += \ - $$ZINT_PATH/backend \ - $$ZINT_PATH/backend_qt4 - -HEADERS += $$ZINT_PATH/backend/aztec.h \ - $$ZINT_PATH/backend/code1.h \ - $$ZINT_PATH/backend/code49.h \ - $$ZINT_PATH/backend/common.h \ - $$ZINT_PATH/backend/composite.h \ - $$ZINT_PATH/backend/dmatrix.h \ - $$ZINT_PATH/backend/font.h \ - $$ZINT_PATH/backend/gb2312.h \ - $$ZINT_PATH/backend/gridmtx.h \ - $$ZINT_PATH/backend/gs1.h \ - $$ZINT_PATH/backend/large.h \ - $$ZINT_PATH/backend/maxicode.h \ - $$ZINT_PATH/backend/maxipng.h \ - $$ZINT_PATH/backend/ms_stdint.h \ - $$ZINT_PATH/backend/pdf417.h \ - $$ZINT_PATH/backend/qr.h \ - $$ZINT_PATH/backend/reedsol.h \ - $$ZINT_PATH/backend/rss.h \ - $$ZINT_PATH/backend/sjis.h \ - $$ZINT_PATH/backend/zint.h \ - $$ZINT_PATH/backend_qt4/qzint.h - -SOURCES += $$ZINT_PATH/backend/2of5.c \ - $$ZINT_PATH/backend/auspost.c \ - $$ZINT_PATH/backend/aztec.c \ - $$ZINT_PATH/backend/code.c \ - $$ZINT_PATH/backend/code1.c \ - $$ZINT_PATH/backend/code128.c \ - $$ZINT_PATH/backend/code16k.c \ - $$ZINT_PATH/backend/code49.c \ - $$ZINT_PATH/backend/common.c \ - $$ZINT_PATH/backend/composite.c \ - $$ZINT_PATH/backend/dmatrix.c \ - $$ZINT_PATH/backend/gridmtx.c \ - $$ZINT_PATH/backend/gs1.c \ - $$ZINT_PATH/backend/imail.c \ - $$ZINT_PATH/backend/large.c \ - $$ZINT_PATH/backend/library.c \ - $$ZINT_PATH/backend/maxicode.c \ - $$ZINT_PATH/backend/medical.c \ - $$ZINT_PATH/backend/pdf417.c \ - $$ZINT_PATH/backend/plessey.c \ - $$ZINT_PATH/backend/postal.c \ - $$ZINT_PATH/backend/ps.c \ - $$ZINT_PATH/backend/qr.c \ - $$ZINT_PATH/backend/reedsol.c \ - $$ZINT_PATH/backend/render.c \ - $$ZINT_PATH/backend/rss.c \ - $$ZINT_PATH/backend/svg.c \ - $$ZINT_PATH/backend/telepen.c \ - $$ZINT_PATH/backend/upcean.c \ - $$ZINT_PATH/backend/dllversion.c \ - $$ZINT_PATH/backend/png.c \ - $$ZINT_PATH/backend_qt4/qzint.cpp diff --git a/src/acollection.cpp b/src/acollection.cpp deleted file mode 100644 index 5682a2b..0000000 --- a/src/acollection.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#include "acollection.h" diff --git a/src/areportpreviewwidget.h b/src/areportpreviewwidget.h deleted file mode 100644 index d36294e..0000000 --- a/src/areportpreviewwidget.h +++ /dev/null @@ -1,48 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#ifndef AREPORTPREVIEWINTF_H -#define AREPORTPREVIEWINTF_H - -#include -#include - -namespace ArReport{ - -class ReportPreviewWidgetIntf : public QWidget -{ - Q_OBJECT -public: - explicit ReportPreviewWidgetIntf(QWidget *parent=0); -private: - QGraphicsView* m_view; -}; - -} -#endif // AREPORTPREVIEWINTF_H diff --git a/src/databrowser/images/check.png b/src/databrowser/images/check.png deleted file mode 100644 index 3bde53b3bb326bf370839961f1e752436e3d497a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)gTf}lSVx-{y>P`n97R5#v47eNrTiy+9G zq6pR?OA7HqqQU|R6r)911X3=g_NUP1j_aKBy#|M1TQo$Os$`p3_*yWphzE3O)wD#(IkKU`U{Ttlcs~@bC z?IE%eRz2*st_ChH^f&<6720S!KOZ;WuG+B_JeI2QG~Zc&35x7jRQS0-1&(s!#(__j zg&9Ufh~EnMn71;atV5Mmra@;Oqf8*6deA1kEX)`nErxPlp6c(IySjAAVvL7+^muJu zsF!Y zMzbu-Bc;@c$W26UuEHfP5C986g>!Cl&P^eNsq1>Vsi|q65fQT4ERxA29~l|pxm=E$ zrm5Jr%^k;K0H7!e2_dB0?Uun{&@l`{CK3r5jYjbcAK&fsvQP)H00000NkvXXu0mjf DawsKv diff --git a/src/databrowser/images/check_circle.png b/src/databrowser/images/check_circle.png deleted file mode 100644 index 7fe467b751046418f22aea200e095c9f25a5228c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmV;W16urvP)Mb9 z(q@oQv;uKKCkDeRvOppbgJh0bJ}jBZ5)-3K=7*8Z4`xf2`AIa(o^zh(ocBHN%eAz$fa5suJgGUKKB%rD)*jL2b$Rs|tSS-8S+S=NSi;K&X$)vU*iXyyTudBPe`he-%q3jtJTV`Qq$br?6BMI9ml+#m=Ih@=kdtRGeB?9Bf5SGL^!~$WSPRSS-*@+VMds3v+XG=(zbcB60-xV=fdHZn7~gGtkR& z46eiz?PIR7C6EhE%n;&0 zrLF=#->jQynZZ9!=e6F3{05lf1&}g0>~MdoiER&SfK6*+N#;tumKhbg^WqAg-JJs53TjrW(Qf<#C(AqGbYAJBmbgKMHW&_vlN|Z; z#JbGP%-rnkY`fLEb?4Ee-!@iN?JD_SqhVs=@0qTypKnb~J-I{0HKHiWYnonW1_Gfc z3@lQ50X@ZELQP|&|Be6Yqf{e7y7J8G>gpm3iU<*lZv+?s3J;!e|I%#300000NkvXX Hu0mjfdm6m_ diff --git a/src/databrowser/images/cursor-small.png b/src/databrowser/images/cursor-small.png deleted file mode 100644 index 7643a546d56a793b464b28204afb5da71eae8ae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmV;80doF{P)IVpFC}X#yG&0t{qbk_-U)l^MpKIdf)%jEqbu&=5UR3_uCk`Sa)3%F4=y0}at9 zDi(hH_`!_C{^sT7)%ot-yPu4Vj9NgUiv(Tp?b|n2poR}!U0tg=I5@bXqoZxUe*L-w z=(6Ql{Qydd$XH5Bs=>j*VFHj&J$LThU7+S~s;a7aKt6_Aa4JR@5E2qf;pOGk=i}p( z04AzgK(YT878a9OSy_oQ0O~D1AeI3d7Gq#wFolhcEdaB}jJ zEn#6PM5fILEf|q0_0Ur25E}29Ofq%J(6JC`q0mBy?ny{jXYEjkmt@Nj2(*O6i3L%y zQ;@7+%huVIbdv6#r^CIc$RbfbhE9Fp9AJsVN@ayNA2G`_nRf|0-YBt8PA%&;PP`@gnxa zhe)lC4*IAnDvGF}zK`rSv0RtJ;v&1X+UHB2SN{$EoT$LW{O>O>UCO4`*O7w*R0JZ& zYQCbNimITgG`-S1_wU|m0w>0E5+4IzIaw}eGj0pr-$zAI6+{J5MGOq{FQQ1hP3pkq z`22j<6aG3a0vZco!P=1rrHjfJvLuBlFK5GJXD0- zvuC`?HuHJ3*CR9a0fePIQNgrr+e7(pW05+`ibL2Z69Ibz&okvHZv_wu^U?P_2%B(X zh#v1Z8ee1*HsX0~l}d<#sVK_J*bj50idq)`v|12$`0Eu2tk$blVufPpL=;qvBU3eM zK+(DgRxZbOV+(;*#!7z_5Ua!W%}S-&Nv9#5Ml}fYp)YTY$S_ALiYAkEQYjjZ7tJc% zFn}Q>>f{&@zYBT++|JI<(%iXo$ad3ou?#yodM;FzSTaHU!;h#uS))1duYL=E0BXh| zK-~N%euwqXJTKX<*FT;9D#bY>h(I^jg1Ad?PQ`@AXzHm6pBbLOV@U&?d(vgRu3Nd{>>lY7T^N|^Yx=D zj*Tfu5xz%x;KVVQy$oN?L-{Ba9LV&c+k(bl@Z=V(x=;hQfhN!b+CU!&MgcJcaSY@r zPymjZdBW^D=3GGdsJW*0_kew~);9`d91ua`KoXb&(xz8zvmTufjH3b21H6&&1S5Gk rRI}r1qOe8tQPZ*Ek0dzS|8MMH@ip_qGX;z_00000NkvXXu0mjf1z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-k4Z#9RCwBA{Qv(y133U7fLK5TBO@b1#DXCKNX7%P z0aWAy5HDmn!LR_P1Y{XN05O6IkVXpz0if7^U0odm9a}91K{-93h{KfW=1`}qw_|Ni@%;m5U~3@=W- zya3c_2+{)(Kuj>_fo#I22}FPR`jO$Y^cMy$NlpW(R~P^S2&|Erg&|(YRuikHuR#3m z$9EwAE5mQu-(a;MJpcg&*2u!fV8AcOhf~w9Kfk~Z`zQDxtQN!u2q1`!Yzz$F{@~XH z0)LtQg4KcmKmb8(WM{bW@ZLSVn!px(hNuOx0RjkS=RY(ijqe+;|2?Xp;NSZ~>@f;geaYNe&=@7|BiK b009O7a1`vpDeMe#00000NkvXXu0mjf4S&pR diff --git a/src/databrowser/images/note_edit.png b/src/databrowser/images/note_edit.png deleted file mode 100644 index c199961093dd2612df51165ebefe104486db4548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1511 zcmVWdKcSATu!_L}hv)GB7YRATc;PGB`RhFd!>1F)%Rxh&T)Y000McNliru z(*p(<0RyAXG$Q~2010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00lou zL_t(|+RasKY?Do{gA{ZSiYVd+0m?%Gx@Jpjae`rAB z9|b4zmVn`AfCxWeDluUy8H2enbf6oIj+N2d*7aL&YrC#rzg~~0%@`vyhJ-(y}+Hb}9U#L)x>O+1e#Cz03Y6=}pG zZuEUh`LerM^|>dNetTkk%A_Fa4_*iU$b8Gp5&IG15)o=Sf@UPql%(KA;yR(WMl91; zK{l@%619;sRY*mL5k3FjG3>1$O6e7!rgMahb!Z%ey;eRqmU?m{a4CBN-)U?TB(a>2 zqnS(P*7;O55@|s-6ox8Dv^A6=p-9d0M?f(Fp|l!t^|}_tP}mM9AYu*z2Q$9whk~7)Ahv zPLIN>I!N;M*kd__#?V`+Pd6j}?k<>jeF*0A5hN$VNj0!}#sD>F0dZCH(KyBiO$hq~ zNW~Kn2y>8^uR~EyJ@Rw~kSYurcGiJI>`4f9O1LW9vG*8@N2*&eT)PU_pC(v*<v_t~CHi|1#Tij7n--vF^pGc72bj(cV%I5XZ3D|{$Y8E7cdV4uH${l_jt z>nKNDgf=R^`>r$3igY+f z!l)>(KrRiR-#-PG4Z&{pB4zjD)Dwx1pK0lc&QAN8I+*$u4*8n%C2mU(oTh#n4H|!q z9x6i#1r41T(@@PM$(1?RX$?T1l+WkMn-%X zFxjy0wLMsAe1UQ~NR9guiOF{p2O8#_fGI;q>e|@}G`4Coh32sg!0)nw3r)~nC2VpQ zO%;nU5s1L)^y9k8j_s?r;W14qtbM;wem~|_twQPYUP<&qZ5z3XWlR+Uf>{P)8U;?o z{T)c91aMo;$kP_1X5~7Flnq$zZNLw|cfjWKz%=B*+WAdrWZf`zo}g9jquI9(rS&h; zm@I;5@qx-o2TsmucEo~3VRzX;-tzO*a45UYadCXxdK3$kDzup{f~)qzsL#Wjh8574 zFM+PSnWp)|?Dwg_36Rk*h=}y}()RToQ-h;-wQHsVgQUxTCLQ^Etw3Ir?L%R&9cG&g zmgE4|G!&ra*$vQ_E`dy0OZR1zatkrbR@%@G`o#(yhYp9CVqBY(rZcCwiHEsB@fF#! ztHP;3KZd$a!QvItEGN)2#?A8RF{i}Mov zCA8DMmq;?(L+)=7JC^YmC6VYk*hn9C5-;Z8x9A)rJt!pPPBA`^<6nwwKt{y$u$ce= N002ovPDHLkV1lR#r+WYZ diff --git a/src/databrowser/images/plug-disconnect-slash.png b/src/databrowser/images/plug-disconnect-slash.png deleted file mode 100644 index 60109826f3774207405dbb12f324ed048724c4bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1520 zcmaJ>eNYr-96m)v4JW0>Q8QfkP>SGo_x3(_IC1axjyrToPRi5BVYywn1^4#cUA*HY zOLHV8OoK*Atr-)IX*AL?VGw0X7${9s5k*BOHF3h!P%|-X7XkUBac6elujhGwpYN`l zpPo8?+|+R@m1?}pNx0>4g7S_TEq|x?JfY-aie&dl3;0|qNC}Jzr}-QPaB)-~<7Ozj zXjvs>WJHo!*Wl3!F0DiDn571)5p@_s;3 zq;mK|$pXrrJ`I5jxY<0PBo2xD#ernWX@f#k075h{B=lpH_y$=d`FsY)4WUKJ%{+7d zfAz)8q5uQA8Idm(ymA$D)x%6Z-;e?vhyf!hp@5OA=%AL0O#cB%Vg&CkYHWH`-hfN4VIIMbTtq=AUJL{+4QIxCQN#(-im?)M0!}r{Y0CYKy_w=L5HI@fGZ{W7>EH=!~e>VA1KbblDXoNhtB9o1W^yHu)?ueu04Gt^P>Dd~F& zpS<>R+^xMcadm9w$#*t&BkmU3pgd!xIitZes$f^NJ5yuSnZC}lJFfR0!{ zBT8L0;zS*>bFn2fAv*R{qv5;!m`i1U^j4Zj9U!8<*nXb>eZ`Hf!R8O26qK~6-N2>% z$0w4ACCyitrH1V-muB6Bi>hiTmNq>iPZM!5H*Xv%smb;iZ4>&!o}e(|0MrQwDR zj;}_%+rBBSsx#a%=4GMo;^Az#wkk_wTa)RqgJ_vzcFl(zIaliq8&(bF5Tsxh~^ zv1tcdd2B^9wDDLtwtL3rwujY;>9fis&!1m*)FyrX@Jmhk{%h-FST5fAD;%BiS|8V5 z<`#UNDeXT)d;+lf?+}#fQl|VdD?C{@m$wcJ@}Z zCD&#|<+j|LT2p2{ICEC&mTg<>-w)Dp`+n55pKPn@*_8bF+;7Ks?%CEm;?NwiebL*n z`h+LpP7JrQ4{yEw_gta+`qZZS?vXWAWN1m`FFk!}-!$qs>^^cTY9jSk?U{R#?XC8| uK0Y_jyo!w1f3DvZ5p|}+p7O>&uQ#gTMTdwi-#oSQ4|dtpiM`hB)&BvB^ggHn diff --git a/src/databrowser/images/pointer.png b/src/databrowser/images/pointer.png deleted file mode 100644 index ea87a66d8d2eeda5da8cb1ef58d354f96dbef270..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`DV{ElAr-f-Ub@J2K!Jlb;BV2_ z)7#m&oyzuZ-rgeD^v+XRG~iub?@}kPz#C^&lv)(o8Q#ZjXJq@!CUAxA)9n{hQ4^ml zXmOmmuxBOjhS}Z=njIAS4;>O%v1@_D)uY$1w=qa5GMmRM)eB1S^3DU=$KdJe=d#Wz Gp$P!<{y1y^ diff --git a/src/databrowser/images/table_db.png b/src/databrowser/images/table_db.png deleted file mode 100644 index fa41658f2a97fbfde7dac9cbb6fb9c229c6b3ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1494 zcmV;{1u6Q8P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipM> z5-cP4shuhS00mY_L_t(Y$CZ`aZ(LUu#(!&{ea_688GB}&#FyALZsI_zrYWLn3xe{% zBNG2Zr9L3k00M+~0U<%3kwEmNLh5s$KmjB~g~UY_kWvv!QrtKpR)p(GJh45ObIzR0 z-irrc8W*7|TRK}upT506t+l?jw*2byA7pKF{WG(3^FNH^_zOl1imD(eDn(IjY;WKD z&Twn{=imG8w@Myz*|*l-zWCVV=igjeUZK-&s|f;BRX{*hlQdar#_{XhQeFaHc~}9n zwbff#T$ty~%E$6FOJz71$Z#;w(Qu&S@knO69sk6+v)s8qJa=$L0P_)Fa1=qS)zJ5Q zJ*Hc&;M7c4qbL$%1n-rqsu+(`>D|7;?(9=vd+xRMOHFawkW4B9a*YragVHb=W8VaU znsH{U-y2?i_xAJF+As)=q2J%t!61=1ZZOqqNnR9;lZ49Uawm!O#gFgEPtLCg-q<-CnQ1-5cclFuKY_QNq8f9QO??%`q}8uWZIBDZR#(Q7x>21t1_OT?MI(>6aSK> zNU*)T+vVz+Gy2HV61}_k$R{afS%7*3&$*RFNHgkcr`_q4%gak)EsC%<6z3gfQ8F4QvUY8amH8!B zKiL)I;o5t5>9m`&aH>UBL0NgZzP`yb7v>mcUYh3;R`^D< zWu{tFnin~v@kokdqJk$fNL^3^SW$`aS{J1hFGjouqSQc2oJJTF*>};6>(_40ojUb9 zIdk^;dc7G<@(D>Y!aGNrr3^+RG9S>1yWG1w#)#s|iZq?DeIK0nc&8Zk^mj%ilagV5 z3L^rln9INZopaw)nh=P601Rx6G0jIJL%n1QIIc#ZbNGBy5@9&}_qRK&-DrH&m_uG9+ z=Owa+VUm#-h3pPfoY!NVtZ?$=={7-Nz$-_3-YZdHSn4*YR29I8NL6`Fvz*hNSc=MP zJq*YvrA)=4o|uktUXO7mrPFpR!tXZ-)*T3xPN_u!C))L6)6jX()=t7gw|Rv12Pr3~ z8_abZ|Ci(ZehRD{rt6^U4@}IXe`7v`iy-n5oWs-~;Q3GQc(Ah1$8f0RS7%HqNddxfH^7!f)%(`X<^ z*oQgYnhBi(#;Ls}vLD3SpMLbIm(%Z;PMv}~ES3R6YsgEt?*vsM8{k!`+Hq)$ diff --git a/src/images/PDF1.png b/src/images/PDF1.png deleted file mode 100644 index 3caba4ea9325903b0e22220359dbe90c1ebf0a97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3045 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 diff --git a/src/images/barcode1.png b/src/images/barcode1.png deleted file mode 100644 index 3360dd886a256c526ad5e839782c9a7259a30f59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmV-z1CsoSP)=_ToACI`e3NA-e_*NXrORjza>&3ayx8G$JiP`D&g;43Iq_ zuxz!CrcTl&j6Hd zkOdw{vl1GMJwVboKq+)Y8zWtjNusGZhDVoU$|)dxP>s?g8hs#-kRM+O6$^F6mOkXt zNjL?>_|KBi(lb!slXEGQa}ABg;OPHQW`Y4!GT@IOXW|6zocSfxai+na1x>_U=Ai-2 z4OrwVDFgGTzrH^qXFmV=fHLXo12?lk!?>x{5v~4u)F)3-F#UX3cE)9r(|( zr);dT@l1ZEr3|>sAwEY@VTO%In7FW9z`}6WFU8GbZ8({Xk{QrNlj1+3MgYKATls8GayP~Yjt8ECu(VJ zZDC_4AX9W@X>Mh5Co}I@0003@NklU=I*!;$)=mGFHun?K=77* zh=evx5vbCzu$`2j4O~l(<)iWEIWsZ9HIToY*8(y#`RO=KC$9cp@uvy9-42Hd8#}OF z_fb|EN7Y?)05^bbo*th7@$hiZ-TfUxY`0qkY;JD>=(-L8<#Pdu@C*W>7I7I}M@nA- zC2b*+QsP7N`Wk_Rwv06ug@ zSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj1+3MgYKATls8GayP~Yjt8ECu(VJ zZDC_4AX9W@X>Mh5Co}I@0005pNkl5SuKy;bRPAHeT6yK2op0uwZ^!U59x*-w{!H@(m;zD{ zz}@}HQPy?MY&HXU3*1b`2J7`2Nnx50hQ+nXz`~wMm|15VZHl~TT+M;p#sHGIyu3gX ztJMXo)mIRlpPz%^%h?$MvMeJ_Qvi}AAxRQMpAcRFIsh;kp!hVP2Vo3Wt)&mPg1-Y2 zEgG3d4%Hr3x5US1UH=AXvTrsU zUn~}$Z#JIixfglvMNxQBmR@d4ueMvSs>*M7x4zr$e81m&UDtm4>C}JT-TC$P_oiLE z2WEC}4a~^03`t~JMwX^XB1u1o_cC0r<#O3&(iGz8jfuTzTW))@>+~l=Dy zAn`oUna}3{AAoNI6;)M5Q5Hi^QSaSTlR|A;F(~$|`%A#dGq&q1;2rR~k2eM0#4b2J zypxX_zknaW&A8!AVi&Y0{ucg3kl!!=@dw9W`Mjw*SMt;X00000NkvXXu0mjf8juzI diff --git a/src/images/copy16.png b/src/images/copy16.png deleted file mode 100644 index 9c718085cbf7f5ff8c41e24aa2af9de127ae5a67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmVhZd!RBC_pIuG6o!jG4^&*E+0c2tVTm^g5x*}*Pr6fbER}%cyG7EAl%n#kj-Y{ zv{<};Z8je^5l9tGq(PD)AUw+DG|7!=0$MatiAihBw`QTWE4}gAvb5Z8*HKRQQ;&ne zaLLMJy}r>J52OewKo|m~Az}72gRfpshhJ9(ADzxRYcC;zloEsxI%pmQL@Y+F5eX7s zhC8H?vA1O)*=RI|lR`lU!9!)?DayPNxY1ZxoA##q*I_23|4V8bLLy=KO%%mq&99Nv zjpkv)EnOq$e7gc9(iV|H@#Q2Ea}2PWN%9j_K$Ul0SC0p&G*BYWDai@}HpJOowVMB( z&s|*@Jk{^_$G4S=eO@ZTWHNzNGKC6>fQ4^m)#4t;ZX|Y4mD&ai_XM{v{%@NN8@9bq tMN?~vORp7e4Oz_9=c%?35BE=i0RT5r8CncW4OIXD002ovPDHLkV1gUd&$j>o diff --git a/src/images/copy_2_16.png b/src/images/copy_2_16.png deleted file mode 100644 index db1d9fbafc2f08e1beef834d7128ada961f53ea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP)pya@#$h3+(` zJq0}ybtIrch?)+XKnZ~=3M-;iiImO76nn{Jmx7V3(Rjz7|M|TF`~mj(-RipgYnX_D zz0V}+xPzIZB8Vy?k_CVWs>;^pW(%kR$nOAYGv0@d1FGY_B~9f0PSEdWW-J={wZHRw>t ztrk}SD+S@(0tJ-`)b6eQNZ~4H{{zI`Nz;^Rn)>t0b3Xzc5m!|SC5D~C;(otRqp`vN z^Yi=btLsaE9pC^s1P=G(_+m1d_;fn;G);XzpZj95@a1yp0iJ*la#UJ?`wis`BDdf)H8 z`l=UVX8g|<0RR#00k9VU{l(Y}V2PPO6#@X*+iJC@J5qu`AVHfXwEYX0E^FKk97U*9 zDx&~O0iYu#TCEm{2t)$Hg-E(5?gFJ+Xemg%? zgtL}FxE08#R4;%7lC>-HM3Zs%_AZ17UXudIszP4&c@T+s(Y(|)^bJ==JZlN^AX5NY z!ew2b)$-ta0JhHLx_ze*A+!3A|4bA5LCT1`!INE3v|~~x?81~>S7wH_7R(H#6qp%A zgi5s<6!gcUypu&nvev>FgJ!b{DJ7Iru-1Zz(3T3dS}i!wZJ8Cw0!x0awNOf7V`Br2 zMgwsi!x)2VwF(jf^YimKG&Z(_U9f|@TmlfsF%}jUFgQ2}W`;2ajYb30FJEF}e7xr- z(>SzKYN0c$4@{AQRt5pKvuCrZkJM`)9FBK z4XqVcSJ&{U{s?DIodFRQ`9lGa=?au=Nx6+N=e|XQg@7-aobv<|on>n+8)H~X$tx=>JaPQkLjZ!A!OYG(q4P50mpx?6O05sye*H#c^$U)UPn7b< z#mkpo-M@49Ff-dERsygTMbRk2HrQ9M*C!JLxj+L012}l#Kx%nH{c`tRZ;h~j zFHTC4)d7s|W_cDD7kOr8hChG)#A8PeKL$Xd_+?DEtB=Pxj#2CDA$vFoQE>B(N)_5DRhDh?0nv7IsRSYvA_ViEFi> z)i#3v!4~3Qk+5EFb30QQ5D|i48j~sf1jE3jm}D|Jb8@!133xxaFC2JzKOTPXd(P2L zPf!0X6bgUy3)|e>Gy(ZtqFgR3rIZ>Dhe`;cj*pMk<>lo#7KWkneP7jTH3b;o_Uj{O zI2>Y{CZ$q|^Ye4w-rmqOjW~{}R;z4mY*4G!5@6zo08P^XSX^AhbzN?6Z%LAbR4O$t z{t6kq16Y@f zY&L1NTI6y$q9`Jh$zT`;?RJ}NHcP2gB93E}Qgk{U{hfk#yG^lJWM*cDX0yrt{XJ4j z3WWmK*VjBeJYX0Gwr%4$4z_Loc!|r)%dD@jK?_&j0N`w&f`+aQNW_Nd&Y&MJMd2DTMk2%U)G$KvY{yI51`BNV?2q72@1`Gy+ zu`h&RX=#aiy-v5=MF_#%+?))<(B0eHn~I|7vp$ml?NLhM`#v`}H|V;~GEeDpyxm^m@JT>P!H`FfdK?9Z1)8EXxAGbzP>XrwPLl zDc^rcZDC>I!~XvMCw^j@rUfrAFPVHk@3-6S-vAB|4>Ldq;D7V?Xn=y-X5s(<002ov JPDHLkV1h7WPp1F? diff --git a/src/images/cut_1_24.png b/src/images/cut_1_24.png deleted file mode 100644 index 62af544152667d66a048bf638b96f2d70201cb15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072 zcmV-01kd}4P)XHRhptOp=+*?W zZ55_$xhn8SXB}t~&lmw}%UY;k5BmPMb|T;x&)3H3vC;He18cx~P-=RB?vR3F(+g-R z;rd`KBEsPyZJkNO+z>1Tl7e6q97PKjKV>UyTCF+OY1c->;<;#uP_QBYndRihU_u!) zlkF%>r@1m?;pNpDpGL1FDnuxx1FpvypJxBnfTsY#LP!)GqD%o#794I^?7!DxC#%cF zvoVtp(Si9aFJyAw(1u{e7%SN7ye0un5>gpdjL$8*HiFc4O$~)2L4d%RNU1OUKFV$g ze&SAnyv;|5SXGq)ib0d}czQ0!4ad9eWL;eBi=MjBsmM7ucL2Ln+|zS>};Rb-3k0|HwLw;_sWER9!TTzR6is+71Ii zCSFFq%{3Iv+l>Ap^+P(V?rGWScZU#4 zr-DG(5Q0ORmI_GuE|mK6?!LYy){3pTAr#tOuj`-X9Or~!{#|;W2_L^1{`e4#LvNq% zAF<4;4_fXulu8JtS_4upXg=Syq-md$5FUV2YaBPnI3F!)$=r1>h9}=Tn~dYnc#7jwX{;6`Dp4aDbUFkPv??o1;Go zxDX)v>SRO1iAqglcHRA8{*7IC>1M3hir4Du?vDk7XY71F7}GSwq|8N#9@;TH{QduR zhihxMZz?bEL^f;0q=f1B7i1)|>#pA3?xJ7-cr}sOY6|g4xs;kI<*7ZFFAuKP0KoD3 q`s+<8AB{=rMx;Ew{o=(Hx_<#Xi=hH0U`@6F0000Pe)vKc4qRtGnCr*_GI z&<-LLOQ;2h4n;v6Dh|@sEK2v(A`P|*jhjl)%MS-7BzH;P-1|7(UA!Evec<7Jxx4S@ z`P_S_fJ;E0^J(w61vOITye7oJ=w<2h*(ORRFn&_8bci8>2 z%i@(qHuIZ2tUZ{|{>na6J4!TwmH!Xl{<2NOZ*cIf48ZqB89QofEUOMcCZhpRN{tP4 z!l3!PiFe-{17F{%h0i}#R~-PYHHe_1SI|m@`v@?1eGcc9;s$WIBoxbvj{;oA)$!zU zIOew#10yvIyTSVRiH~=bb5KTV|kgO08pF^Y`SA6YU0I6{LM*^_cVy&gu^8_%H z2B|=!WH<)g@_gS81_Lq1OaMegTCKKSTVFp&PmWsw m7l11#Op(Q1V zRw!Qfrb@gGY>B;ze?p-k2sY4vKq%N-^`@jvYB9xZ!IlyOyU|THX0}z6X4lEi$9a1( zJCn)gvp;w_=gbVx{LcHnb4G~>FC%qbCCE_H3H@auRme$?^wiht^9J(+C;3Lsi3^~B zVkh?3I~-w@iQ#vLa~E?L!RZiEaI<=o+mCNo$nv3lAq@o#EiTn3wN@yl2}Xt1I&i3h zwI?oTe?CjLKg;%xrHQzyR&!5XEM;R;nM*8 z*ZgCiu2rbFH;}Y|W+WMR9D?)?@M^P)`^;r!+}f7F(-k42Kvsk9E00000NkvXXu0mjft<0`O diff --git a/src/images/document_delete_16.png b/src/images/document_delete_16.png deleted file mode 100644 index f4fb31136d6204dcf470885f73a90ef240bbd36f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmV;Y16cftP)SFBPvj=9g8Jead9#^0!aa^mvW_IPeim%qYtJbY4-C+QX7MbYb zSTt(HilP|)mG=!~nj0AzK_nc3&1M5f&lMIGZNK8K6V{im-Ac?XizW66>qLh56isuC z0x%2%ju1?|-GJcv3$Tr`;bS21{j$Xc1zT$CuGVsn#Kh(OPg`q+!H;CXG07wIrbRk{ z8jm6Q(q;IoFM#Rs_WJ(e{BRTnEN=N60ajABwqJW|3Fl1Rqn$rnOTRS{^_W^Vc zghT;}f^OCy3`CYY)b^lpgGo$+Ks)@Rr3LlfUGej`Zopy{F_lX3KWf7L0|%i}1{yVe zD!(%rYI#;}wpx)o&4pL3t!VajRej1|6y9{^AKYwd#<(O2(ekQbyP;9)s&4;V+|U;R1^~qCast)+ZkPZ7002ov JPDHLkV1hF%x0C}2P)8n|-i<|NhO~YV-2)ux6jEa6O7S_7 zOr~XKzwujhQ_~hr*ME6c5-$O;qCMeoc$EmC@V)caEm)R?csxF}Vlhm_;;>Q{Hf-Do zpWp9tZ0C4ObMsEk(0_U@z`lL^)^J-zfO3uHCCA6*_f{f_L?QtvWy>Wh&@@$^_4f8+ zUTG=H7nUojly#)_a;sZ+8{fSWfMtKdty*ZJOudV8U@(}jny?)khM_~(bqN?_B`%lB z<$^C5#DcPNg_VALrLE2DHqArN;=29=a7qNt%g>iINC0`@NbVgjaamVY31pfkbZsg> z0TRlXgR(`7m8I3y2jdg5y)RWj&d-Z|G#Z85chzP!+yzz9krCl0O!B$8=@LpxN<@;${DScj*J|2T#2V<(`KCK1%lpnlVffIomxC=J0t06qdJq)q@l*Pt*MRLeZ( z@$QC`8?r+|B+38qf>K$5a8#0D^BaE0owJQF?%zijzni~hGdoq4!AuHnF`%kyvU^=j z=(#}zfHgGyQTIQ6^|>qSki|@`$PJ7nCXr$%i{P2ZPvGX6vq14Y6c&VW`^TR#Sg{y$ z%F1B44Z2{8Du=ttu3K)pT|IWMJ_HgVc_>t5+j^Nd@Y8$;`I<5HSiE>Fh*5T_rB( zQs`2iO|-V5=jc&b6xO017SEEbBuP^wQ%Ttu({oLE4#4@o^WIQBYD8hM!qSuU>_R6nROX8K9Gb zF~+m_xGEb3319XZp^wa}hW` ky{y+^h~F-*oPPxv0NJ~!L+l>y_W%F@07*qoM6N<$f|yJD8UO$Q diff --git a/src/images/edit-copy_1_16.png b/src/images/edit-copy_1_16.png deleted file mode 100644 index 8dd48c494924874a088590a749193994d075c22f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmVl*+}S4tk-SEw(HMMH$UOFgT8OyWIuox(>z|!eNT?Q)#FJN+p=4fyzsz3(&M5 z1Oj8QEH>2c<<$iq9`D@|1fH*+ou9fEhcV03wkV2NSzd)@nNYt}lHgoRaN9}vHG1pg5Cj3DD1s1zdc6*S;N$b%7N-)ik diff --git a/src/images/edit-paste_1_16.png b/src/images/edit-paste_1_16.png deleted file mode 100644 index b0fa070e1616e45a3a5ffbbf2a5340e13a3ab6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D47P)lbH86?+K_76ZvcHzRmg4TirIZ5N5 znkIh$$;h%>1g=8mHi{J!SC(rO3Pgc~|jfg3+VNFvguN}Tvp;2WV+RAL2Hfa zbo$h6HjiC^X6Dj(JVqFXsMqUYW-Jy9Ff)uXU}kup2c;AM91+opqkq!N!ND0ujOYeZ2g8d0%%Pv)OzG;IEG3_`eQp1wnwrgF}c2Mx#;m?dy3}M5bHU z=$43JwOUzmT>VtNc=-Kr2LO69naly~+t=p~(K=yf(9SM~!y#(5&y{}v&utPh{m6)D vuib9{$mjFyp8Jb%_xkGc`~9!`pYHh^x`Qocq|#xV00000NkvXXu0mjf&1msD diff --git a/src/images/edit-paste_2_24.png b/src/images/edit-paste_2_24.png deleted file mode 100644 index cc8b1bdbc8b28b9aec00a877f8dfe1cc24d1c330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1167 zcmV;A1aSL_P)0b000McNliru+zAR75+@H5gscDn1RP03 zK~z}7tyfKp97Py@YG(E;Gn=@&i%PPq1EL;+M=v=Do-zcFiv&;p0TmX(4-`BpNCbmk z0|9S(4J+y~g6JXZ!C@AXU82MtgVCLj-RbG7dLIwnRoy+?Ju|zppqQeor=I8ic;0$j zk;F8k-EQAkO09?p(vu`e{!y>j*KmSSnfAr4t*svbTrSwYS+Cbmf)6!~2VT1JJpq7X z0RW^VoAH_?Zoc!1Ix&G4-@ATk?#yHFmS*QKC{;?%r{L??UVydMyWOovpS}Lo&nVB% zNB^@HVl_zqXb1g|Z(V)!#@G-ntepMit*3kE7Zxfgl}dh!0M%-BDr-Kw^e<|)8fIo@ z{QtY%?u8G239bORF)0Vme}4B&W|P(;Jm}#1+P$d=yz$K~%$zz6i9-bn#2B1@>iOp; zCZXlBIKN-DaEmXM-S__bvUpX6r$9p6J3Oc*LL8+J1 z#u9*#WF^TZ8yzl$SREZAQG%U%d<_x~qj#+J@4Eb<(I5#40}l!^CLyrFApkt-@-8ND zUnv!42^a&4i4RGv6cgg7k1pe(#)(T?L37p_A|vZ!6;KkZT?}2!V^8D} zNLzly3lqRI1jLxgQWyJJ1t5J03JDa2;W&4JcQpwyIw9gbGKN4A@H9jc0y>OUU^Bo@ zb{PVrWKIB_>w&m-XS5xyjTi7Z@Q3q&B$aC_6^sEd0?vD$NK||Mfu1 z3mFv{eT2X`@I2rmGAR#)xhgd)Fmn~=5YR{N z0=H(W5FHoXbxdvz0HVsCM`eVjuY$fWa2^@g*X4jaV68QbF}{5RfPs}i0dxUK>NeE5 z6_Cb&Ru_U5fm>@41Ob8|!2W&*y?zf03QJ3m*zN7@0Kh&;IpP7|(ZmuQjo+j}5+Z`Z zV1Rae4?DZNs8wrNT|Eatq19@=-)Jr z(o*`*k?gdugrarQBTk`fk}$?#Fc_fQ?O}EGoCDu!G#ZbNf@ecuG#Fn-=`gtF@;LDi zf*~k^a;c1Fvw3@CW8)bB9p=c%6Bz#bUAq^CPvjMk==a)GdEmmZyu6H7tM&H!`ueAp zN~O&rEyrKCV<&*cgM)*=IAMgw@}J%z@7&$Jx4F4V01NK(uV_y7ajK$^#T5XHaZ4~Z h5^<5)2cS6t;6F9x?hdVS9jX8T002ovPDHLkV1ik@2gU#Z diff --git a/src/images/edit_cursor.png b/src/images/edit_cursor.png deleted file mode 100644 index 21070fb642c090598c38347c044dcc7091118d22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5797 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 Q+W-In07*qoM6N<$f>Tr9egFUf diff --git a/src/images/hourglass.png b/src/images/hourglass.png deleted file mode 100644 index 2cb94c7e481370b544a199f623fcfcad1b255f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9953 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 Y1GZe?kuig0&;S4c07*qoM6N<$f)%uTAOHXW diff --git a/src/images/main.ico b/src/images/main.ico deleted file mode 100644 index 7f117056b9a55275a2bda9a201c2fd602194179e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323550 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 Z_zMd8ChUjVhi(7>002ovPDHLkV1o2$HLm~w diff --git a/src/images/new_1_24.png b/src/images/new_1_24.png deleted file mode 100644 index efa2da7fb5ab7bcd5939d4ca8c84c67e48ead3cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1026 zcmV+d1pWJoP)&MCOzA`eI%w@ecUt&SfT{!|$5ZK}8(KhrNFh2n$ z6||M#^+@#C4+{&6S6OXhp-@1%T!vB#p63O;R4Vz0{=UML?LvACN)Q+{=(-Li3CbrZ z351r@iFn+6XRl)-f@zxIoWpUPx^AUXzP53P=X&2m=-D?Qgpcr%6!b^}+h?Ysqyn5W zLO*{F&3bquAjR&qDza!=knDMoLW2>FA$GVQ1VBaO(7Az*-a$YqsFIB*KEV@G1;AA- z5rMIQN??pJ+Z>XIZd}srrAvS$c&EmZIQc&E-=BeU6r><{@d5ROT5krkYdU6(1-!MT zMbGt~5pFY< z=OVmkUV=6Bs#-3$O`Jb>?k51)-wFVE%R(p=f?*ioy#DJhm&?!?GrCj5{9*fmZQHie zHC^xS?$QT4I<(xSgz&tTxw*OP zjlq>}IOk|@Z*SVM<2YDbTLb4D(P$L;eEy%AnVGZG)6*Lb!PU#Vu8Ymh&4%DaA^{-; z^7%Z5hli2PW^?oN^COd!lXq+50$|IsU>F88O@m<=P33SL7m-K=>+9=}78VxX9UB{4 zIv7*8Zb~WmzK?J?+*Arcfpfl^PNzpECMH%I#Z|$+ZQFM?Ha32(uG>Cj-=vf%7Kj6lR&1TgAAr&ZD!k+qP}W%jJ@CJRS#CRRM9ND9TBQ-xjmkjMQ-h5{U#%r&Fla zYOo82VSMr$Ij3T=SddLTjly+Z+O#GUI#oqsWi!YTYX~Mp1c=N6n29LEN`M@2&z|S8 zz?K6UxCItq2SjA@zXAxJ_(ltgM1XRn1uCLIxCJIj9r$!Vb_lQ|29qtzg5l3_{kb(5 zjm9I~{uX%RpAOcb`;j_K(Y$)So_lkBnZvay{frS1X+EDb*~^{h3eETC3$-v9491ub zaDdSvvJzC!Z}FLDhAZ7kYALA3agvM{_x2uq3_@aC(l?*XVtlmP7TaJ=wf_u#Ew6js*Gtbt~* zs{A=Gb$fB4_f;IvKO|8ZscO_8?%ufy;JXvxG_OjdY&+pl1U&!}$Ngk~f1mw+4{bE>ZVIWZeAx02><{m`o-piUJ~n`MEg^1_ShZeUJno zs915FY2jSkvW{XA78NH^L^U?rh~?!cvAj$q$q3E~hQlF5q=phefU9WZEU%n%)8I;} zXYt+hA|EH4yyE9e~!QI zhw5I7X&!|-)4asyR`yp|difVp08(fW0y5KzK^%I|pTdhth6D(sMr4x&1f&p=JNv@x zLSU`-Na~a1=K8oj1^(c(8{Y%ChyM{POM|4T{{?y55I>Ftqz(W8002ovPDHLkV1j-v Bv&#Sg diff --git a/src/images/prin-preview_2.png b/src/images/prin-preview_2.png deleted file mode 100644 index 6c6c63ea17604dd85bb2a6b32de1888aeb17da8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1453 zcmV;e1ycHnP)RJ_P%sczF~Q zygpeK6cp@(pp{beMMShJqNr7gN^7dswrNP(Vwxs#Z*xEA_%NF^8@sWI5&hsWyYtQY zpFjWaaz6NvO*C@s+Bfq8FgW{PdL<(xrz{ba4WX4t_wni1z6d}alowM_<&G|>q z<}e%WP*M)wFwmNdl;Xs(-#9$FA0v~aeRU^7z|8by!k;*54fOZZ+Svm}qT%VE?4KC~ zmPSCzh-p_bd3=PCgZt^b>`K;luR#a{&?qS>mrD$Nw~u}VsX{LZfgxg9g@{)|#8{2Y zXh1s&6tpi^Qya?P#Q<)=SBJ3==wl4md7(*$A(#%^Ltz)c4W;P}ep!^ES zObd}tP@E}aS~gls3`0N^Vi*Q)wSwbCq>>?2tE8K9bvQABVCe+HC;)9?m=?#6{6ur- zg(w-JqYwlLG$0U$foa)D<>5FE$xNT=h2!ESdv>k*1@?=Dal*6IP381X@_AnzV*xqco&Um?}CX(@k^n zmnwcPI|pPGqLMj^r7{_Dgwo^*vRXjG!nBf@sVu%zLMTc3_fgy+!uLIFJ2kJFfKDu4 z1>(t9PuF$4SxdF-$$EZ|LFBVG?U65ZGB$pkPz!=cA;XZQm7uf5CYR07R%qkn&%Z|I zdok^FJ(fMHyy9)uvvo)_4E5ks547gAuJ=6t?rYq0-LnMJ$8#k|4-C_mJCAhQ#xMlM zVg)ZO;z$R}>tS_A2R0$1GR)Q2_K5^Jd9*?nc)nn&=v9E#++b7ul`h!f)u_(}O-iylL!k0hQ zcgWUegD|RKy1vE_HDRRx@ow!o~_$2s7*imIz| zJ-s3mPBOiko9=j#_uhV}j)WT|=)CC8GpS^199P9T;Q0#2Q!6%RnduI$-?oFj?>sU` z!jFEVd5xS)(xg>O!Z6a5DhfaNs{%@cA(ltN&USIl&Cm1A-shN_@#whlDm-6e)F!7= zMG;1|DscT+j`{Y+?k`qE4K25#QCv~D63-X4n<~DB;xY_l1zcbAZ<>UEk!Jr~y1uE5G*Qeid*Iy1dn{!=j z)^YodIr=u|mqnoW>lt=`(9g;7Lwxz8S6=A%ykM6AY@ns~oU_Ys8y&m*rsicIK5IYk zo8hhZOMJhl=Yj<;A1Io&AEy>>+<1vy?%SNt{nH%i+nlHGXOHh;d`T10N+zY!l$Sh` zoh>PsYl~t1e+jH)2o}R?IFzQ$%FdT}92#5+0x6T7jeLIs&49(8vQ~p^00000NkvXX Hu0mjf{>Q9? diff --git a/src/images/prin-preview_3.png b/src/images/prin-preview_3.png deleted file mode 100644 index 370f69503a62f93aed62f301ef9116e4e5842c79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1518 zcmV%c}OZEn1a-{^tDU(dFMW6{BXDER<_zwqbHf%y?18* z^Pm4YXXY&Y$0jOuY}%QA23Rrl-q)>-?nA=v?ZgOtL_?!cXUxK{nyP)n_}g_hEN`uS z_+%Ycr5P#+R$M#3F6k@9NAFACe@k-4bU{l?IHkQkF!z3~?8S?tELt2PHlgBP*#1L$ z1u!}SLEw`rDz^Q(^Z$S#^3^%WQ~C(Oin-3M5|Cv z&(m18htd-1`lR|amTl7Cr>H+Ils-_Dxnd**MvQ@)(+sMkg3A|0IM$&sEk!IIf@%#D z;sRj?IJpRec}>kE`^2I{B>pZ2M$Ce#GYoqAHQ#*VvTwIf=dYS#!Nas5S!0vS_+&E? zzS{1g4WB~6E!%mZLKlpb1>*6S`^!$eA&XVN6L(~zF_<#hv!jLi7x=UtkVIn=Ob_4l zP{Bmx@hMcrO`2wzZ2R&c*Ddd6V!|%RiXKtU;FA2wPDt^{^L?3hE9;V4m-jsS-U4pB z>|M@IxYc;m5>FhKyBWarE9ORe%m$Kxh7;D#c(m3lko_eW=y87^B zjF@rW{9+C3Z`xD7a{-UNn95p3sZpp>y#C1r%AkGVGg5`a09<(+TtXeYz6?AdvrzY;dyN>(TzecjgrEcO(0%f2H%F`1;QEDvdhLNI&5m3G$ zRX9vfwyivG>%-i204E!MYq@$q-|na<-7^<}qlcP!e)Tezu6_&}LagEVLW6Wm1or(L zkS~@GIA`)gcDHQ>694F0y?$kZ51u_pb|8H3YM;#;kFV#NJD=p@vlr5Fw4-c%G!jL+ zHsX#o-I<%ONhDJlb;@^pYM_s&*R7?mH->4=#I$BJy|IORAFQXUI#xEeuFBxuZMm#b zlp5)2Jpa^NvbvrJR;{Iea*@D4OyD1)<47AXKifxYpjb9mdYYotm}f0`Xw~c)k!Zf4 z@qJFY*^xNS=U+tI-t83fc|eiP1ax=7y!n$(j57?u4+o@cNmt`YMZrqIt0~E&lzF4o45~Lo10R)v!WEgbL*H z?xr2zvivWLTUE(v4Rg32_Onom!2o= z!X-zJ-gKz>?=+q{tV;reR_RCY@QDlNMzhVWwaHVBf#%j)n)f^G zf{sxYB;y&BN|PORMRc;D9IK6l_5UR>o-P;(tK$EHn3db`!qW#&ew?}I z{N|oB=iX~nmH)GZodoBEqchHJir75eJu)hVDm0Ph_u zo5H380~iBAqc$cR3mWafn5}or*89dl#bmm=c7b=6$ijxzobrGzqd{}bD3yS_`pqYs z;GOLrz}ak)D%mF~2w6K&5SoIf&&cRv! zOMv2AGK3*cg)nsjs%Q&&y5p7I|uPf}2Y>bK}*4Dv4D>=Y-|egxl-+4Wl-Af}@8{l(z3*S<3fE_gkD3!q^Il zRjl9JgUM<Vqn(+LPKhW(0ZjFc@kH2fr?@R zvnv4g$YZ^BUV)Eizb@6_tCPz}v%ojUIKWhN$3>K#u+o$iLOpT1feKx&2Q z>1n!Jfp&?h*Rq|iJ#oQyx;kIYM9+M5{+H5j$DIWK0blUJP^UaI&;S4c07*qoM6N<$ Ef*X>yCIA2c diff --git a/src/images/redo_1_16.png b/src/images/redo_1_16.png deleted file mode 100644 index 17f7ac077b1504a66821b02da01eb4cc6a6d7a99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU^en}aSW-Lla!#qV{zv7jQ_?4 z1_cR|S%3=u|4&jn#K0)$=*Bj^Q|JChNhYwM(lG|UygD^D`^yq+{WI4{v;jpyYF&cQ z-%@P8x^%?d>JL-Mx2WgX%wXb!O(n{A@q~ z(c2_>AY;l&-NT9}0v4}RovWm*bzJ3;_PGN`&mBH+;79vI`NR2b_W$dR{`~zv`Qh>T z@;t}o-=;>$vl&92*(i13)VbpU`B|$buhCj~^uVc8M-H6$G5?|cWq&rdWA;4%CF_h0 zjQ*r0B>Xsg;LxAh2YpWVG$tNi`TjL?T`|O0EC=`UIT%Q^U3|W{J3{4*lG*OxnQzv` z9#Z&wao@Q@hu!n{#&7>PV>xT&k`o);I($}$FTAH>o3d9#>7n`?t3ne)AmE4S%^!LpdmFNmP=D+uj9Siwt<} zX735FXQ%@QBFn*@oDBvH3QLu;Kno~}1 zx5vuG`N8 z3`C%{NlCzH`uUgh^u+o5CIA0VPf2(n{OI3-0|!3zH8ws3r5t-Uwl?|GJ@wH^m(Kvj zfx2MY>grDZe(LXEAp7_8{6@zk9S7xgOY0igB-+vti7lz|)|WpQ@6`w2wEQVqu_b<| z5irFoY5r^URpx;h)uftg22^hd#F0R&?0I;2$`{^K;DE?7GrS6azvq$fUI!50)78&q Iol`;+0D8ZE4gdfE diff --git a/src/images/redo_1_24.png b/src/images/redo_1_24.png deleted file mode 100644 index 7ae0543af1fe406372432c824f7c7f5008c57084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmV-s1DX7ZP)F!HD8{BJC}$iLJZ35B4M?|G+CM1)?a5Cn6i0oA+v; zMfv0Hv7vmaEM?)HA4X#jb!{GKsB7FA`2GWm^AwBXaB2b91fVG5iL`B4zn7<+I6ETsdvE8wmB1L@te<<-`vj`w2K_3IQXP7R91sl{PXwG`(Hp@@jI#P3TyzTE1`i(wsh}{R@Kz1sDPvJ(hhK_7RQCF;y_(-PHJn`^xnHZsP>u{hf6Eo z*4O)1N4)bj&+|mpffh*6<)bimYRTI)IlDw?GZ@WaT!_^WOI~bXUNKpY1OU%`(72&B z-u_Mjy$Py17Q^c-5EJ+o+WMO z!Bdx-=WP0h4u=_?xpk9c>!hct%^N5_EG(?Ff8>z)ZbiGL%(dq8$#GI<4iPY+PF)(a zub&(;M@^RS_I7;XvnuNa42VE3qsiZn*=I)%n$cTx0)XkIpES1C!w(?L>dg4(X8Vty z*oksI4&eFV2SP5R$zPAz=T6*)mSBWgKLAioPPzSeLyK@er`Lb^+Vr0|V7@P#17Py} z?D?RGxj5>+yc-Je=agPKf7J9Jf44kZiXB72V{e{`+Be3c>4r|C{|5h;@BoJQneo&O z9gS2G+4Q2{xN5M?U?+dD36!w?5&wzRfJ@(sOT+F;{9&1H*y!zv_sXXeUpTWWFu;Yc w+`0O8nXJBtmltMqWNC&w|I{js$o~cY2E;Rc+~=-8tpET307*qoM6N<$f*XpqNB{r; diff --git a/src/images/save_1_16.png b/src/images/save_1_16.png deleted file mode 100644 index 49716539b5cc443adf03a0822dfc69656c9cf366..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)6#o6otP#GyC4l`j*|5fTW6zUBINvZ%AR2E(HI9rI1$q z52Fhk^e*0`P2myXkkk zNn_OYwYBhSf4{8jn!2t@DRFvw%5XU3`PSCt&EerhMAjsP_rt;9WdN|8+wNYvNZUoK zl#;BhtVpNRk#4suqtQr?kB=p*_S}8l-3wFQ14sbwjsR|knNbu4RaH@zB}GvXW5mn| zA>d{Z!aTxUV0KNFloG90ix?v*B{nuT*xlW|ePebPUS!_E)6Gq*s!EDh3wNh(w~-Ja z1RO9k5aA|guCA{U5hMirdU6sIfT?1tRGkhYf{Wb7GDAWj#)tr|s^U?*&3H0FRhJ{Y zJviXS&JJcq&KXr*!bSdhFyP(M(Sm>(Wl?Z>dCB?tIjXuOu*j>bBF@TO6i`)SjP(2c z2e;3-o5@lHRi$YfE-o$}bWoNhW`?`p@1WP~-Me{dmNULo;+?>BI{hd6e>ixux=IXz zrfC?D$A7gyiy$IA?sWJ*69^(weEUeh`9!V8G#k@7>K!^+jjV?LDhRh9kp#$(v$NM9 zPJZ^klvn9SJx$e9Hexmp?jRx-f@lnqV~{+W_VU@JH3q_Oi?gTNiOVCR00000NkvXX Hu0mjf&SeDA diff --git a/src/images/save_1_24.png b/src/images/save_1_24.png deleted file mode 100644 index 621fe372a160f2733a787ad9e7aa5f725ca2e5bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSx;P){y0Ruxo-DMlWwX3WG z10#NeS-H`VkWb-iHVKG3G0+gmLPcgK29gl5U8G;ny?C$RJ zbTqorV1T=$8i222J1By?WA2CuxTC5RMM1CEV`*uL7$X3a$%L{j0WdS%y;Z=?-UX7OoM_IxFK^!D{jDtka?Y3;Ip1&dtKr)z$wl zMb7h##SF`NPUC-);zhtRTNT|-N0!f>YZo0I9i2Jy-<6%2vA({JnXxh$@N6fW53A-R*yvHBIjaNOZp^$y?v@;aiLp?=$C^}>a>B!um5 zzaN3z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;cS%G+RCwB)lf6#kN&tnwnT%t{R^mt?3JQ97gG>8AIF~CT)eQmN^ws+qoec9nIn#l zj(nD7JUl#5mL$5?C0vW&aCJ8o}p84iairMS4bAW0G?lgZzgmzUr9Bw3av)>^dI zXss!Vg4t}wY&PTk{G5}M6K-y9h@uFsHF=&h8jZefZ*Pa6jg)f^=NwvVthGEnJ@NSX z$n*0v0M0q$I3`IFj4=d3Kvh);ArxR+BV!CzRkcR*`J61v==b|1NkUN+gkgwM3S$gS z(;%f}JRTQ^hleeyvesgZp(qL#iv{!foWWqg`uaL~o@0!m)9FyxHP%|Z_Xr_c)T*i& zjYi*;F$O6maU4_EHPh*owY4?w@9*jN`|R)UPPKqni7WL z(nL`dwV!u99@FdfT2y7N#W_b=mT0Y)CTf}n=N#5r-rwKpcDpUA%JZBc2-=A(llPvF zCA_@6Af;?kRj=10O;eOobi3W9M%`|=O|`PJ!eB6HQ3dc!=YD7MH?F%KhiX1 zcXt=(+!rGu1XWcLMG;$DTf}k9!NCDpmZ7}&|9o8B+1W{6Utf_@vbnjr6xA5hj@mhg z`t=$9FRJ)FgZ~<9Q9qykNkRznJQsCczyCV`5tXXuO7Y8f00000NkvXXu0mjfw}V{u diff --git a/src/images/table.png b/src/images/table.png deleted file mode 100644 index 936e4fc62c3bc3b76f72710e6f53008b2fec7d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)3pXz#qne?Z2vA6}#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-J9H^+o)5S5w;&gJt0s#Xf0|Nt<^G3h@`=0I0TrLrrAj4V9x8q26 zw|&5m8%N?|{v1320xm1XHOv}V?|Sa|vEzuu2G*ocI-7HJvNmmedGHmhni!i|(IP{3 z-#GzS{ASKB>zZg5r(mx7Y{H6ifvUzeXIxe?OE8>nvla`~^#fYZz~JfX=d#Wzp$Py@ Cq*qb^ diff --git a/src/images/to_bottom_2.png b/src/images/to_bottom_2.png deleted file mode 100644 index 1161c42582d090e963e7efa1657655e9d1a9c3a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3161 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 diff --git a/src/images/to_h_center_2.png b/src/images/to_h_center_2.png deleted file mode 100644 index 30679ffe5aa5ba8d5f40587f01df1781baa8444b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3114 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 Ef(`w}m;e9( diff --git a/src/images/to_left_2.png b/src/images/to_left_2.png deleted file mode 100644 index c04d56ae11cbc4ca9571e46c4b0b09605764514e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3126 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 Qi2wiq07*qoM6N<$g1isQTL1t6 diff --git a/src/images/to_right_2.png b/src/images/to_right_2.png deleted file mode 100644 index 5ec05c65303c1f522dcf59e3d2ee66b60d565367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3132 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 N002ovPDHLkV1gFGmK6X1 diff --git a/src/images/to_same_width_2.png b/src/images/to_same_width_2.png deleted file mode 100644 index 4f1b9766d002ed67aad6b3b9bc8a13fa8ddf3484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3005 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 diff --git a/src/images/to_top_2.png b/src/images/to_top_2.png deleted file mode 100644 index 85bed4968296eca3012d9900fab6476f25c48953..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3154 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 diff --git a/src/images/undo_1_16.png b/src/images/undo_1_16.png deleted file mode 100644 index d4835eb9d31cba4b67344f9e31b7b0601c71a28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU>5UqaSW-Llaz3P&*EN{!JqVm zga-!{`PqRg82u2QVoIY^i$K=M&_Qr?BVux$n?(^{M|G&Zh*XQZa|CF=s%l*{-?tE%O!Vm7tED%dv zF20$4=D>ktXAYb=bK<~(FY=4t{g-EJ%g>kiS6_AR!}qVB|Ie2*T3hqaeZ{Sei%);^ z@bLTxS@{1y%RyT{mjDTd13w>`a|!OUoxrWJXZGqlj*B+jeDKz%^IJsB*FBH4iyZli z)Z_%sW1YVT`X=-IopfU^s9xal(TAoL&pLxfWdXk5h=7ln}sj zLiX9TnJs=!x-NpI!NwC;POmU4{BK$J=#SUib^q5qHsUp&B@Paz#Ds(dfrzsLKRT-) zSD9Jsv$?g^3#k9EJAB~7b6w`c`_J?A=m1@P=7K^x(C1=l2~X-j8#XjHCMrQf0I2`R zfddB$n)4Z*pNN0UJv~#jMM7f6Jx8Z!=FH58?LA@)ii`~miVO@4HaPP<7Ohx+5U89J zthtF@iJ7^X35X9~uW5VgGYM!>y@Z5CwuF(Sghbu4m);rbnVT$LO6^bfCc=pv;c*K;Lu&4S3a; zF0)$VAJFkeMg}!C`k$JBg8DFhC)x}O{L(hGeEM%_VDKj;A)!KD`^^8&iJd@2*20JX z_BR~|`GEY~8!ey3-~zXf{lJd#OAu5=4?0Ik#jx@!Z_$u?;~tB)Qy@PQj_1~bExlPB+A SE_itqWTvO9pUXO@geCxm$ZQ<| diff --git a/src/images/undo_1_24.png b/src/images/undo_1_24.png deleted file mode 100644 index d2ce600bb35b7a43b5b0065afa5b31816794a864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785 zcmV+s1Md8ZP))~>z&|No4KZMEC3b?rBq%;a}` zX682s{6_aSh`is$q*7Kor^hwkSv-DDbw!2Eo>i+^thq=Xq=6p!8Zo1RdXx#u z0Ga5e5%cTO(8IPy--Ww%ZErR{{{`6XDsvW%nO&nrGQ=CO(=e9#T6BD2WuoK+Vht!FF4>WwNf46Adk=FX3HIDWkxGCGx zKNn0uwb!+?S4yGGI5OIbiUm;dAQ%yp83(DOlz~ucm^~+4UA>CwD=!o21>kM)+@4xu zotSSg7%q?kWunX|X26Ty{2IOSDf;JUn5}MP@FOzZgp9VKV&71D2&IR?h|nv`D9F)h zKKYm@KWn_O1l#e=<(C|T^UIAd&oI9>B(~i3ctwg~H-GRuFNahzIq6o+cVIiZl#7l5 zEbg#k5wR#1GzNU=kQ$))1^GmUGczXR#27wh%8$ z4pG)U4iM{0acrH(;o*Z=iAbznN@VpTM)i1k4?Ymuag8;;7H%L=J!bBdI`YDq%|XbcfQeV>YOj20olFfnd5;7^;hU?{dLtJ#wt zosfGM*MgNO-(KDVSv~%WuB!79tn+c;Prw3NL>2@h+yZ3U|M+jDWmBk|#O}Z4Os1He zT0}qpKAInINxqiPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU0uBHe8HI}TjQ{`wMoC0LR5;6( z(obm9a1_At_e*UTnkKa=tUdHkLYd2i_RxWs!V02vFl1~xLBwOPJ9z1BY=^NqJ?(G zm!+j81O5^EF=R5CFvfTTA><-S(lQ(lZGs@AX`0>$g+jU+a18(;o6Uwhoz7My64?uf z!=$e3ge=R$TrL-jMx!qQAZZ2=000C*yl}hSZ#a%S-QM2rEKE+`bUK|!u~;l$uh(y! zoSei=fmW-mWCl*{Gv z^JH?`q3e$8mzR#M#l<@W%N{;jUM|V9JZ8GV#l^*$*Xw1A#Uim=sjS>vS$TySMt$Gy zKHJ>ed*|_ZB9bJPOo7qSQN7pey-g$%Pef5X7g6HT7Am%yeAL{+}1R$B8pJ~ilV3_NzSjWtz}JtKQ%r+KEp7~j^FRM@jU;{YPHU-udio+ zIpJ^hdc7(|QJ*wTo7Z)Hgr?~S@p$|opU)p(2><}-_xne7yS?-?GBq`IP$(3RuLJ-9 zIGxT4#<+|zo-+(%grcbX9LK%BG9b$`7>03(5c-TUo*fJZTDRNXg#Qg81c5+cjOTeC a0Eq85p8A0Q6^APx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXA| z000i8B{OaS00WsxL_t(I%eB>ANLyzZ2k_^7B{?o?)8yoslZcXbB?V<-Pdv@VvbL2jG7y?8S?Pg@xB$F4t8>QO;r*W^Qh7jx{ti+{@*1 z_a`PM>aPsX&(C8%pYQWhsWe+Em44$mE<=)}Nf3lnIF5Jq_xJM-hhxfax9{qK$>YPo zz`z&DWOBNvr)Sac_nQfVP*qh$wOXyr^L%1uWu+|;2&^K6MvO*d{-0nR0AOux&5ID4 zWm)!aZ*Q-J<9PhDn>THjMn}&If{?UYt$Tq$;BhDv%J4k@rJjy)0055TK8VNTk9R1qj?_^p2WO8!y>iYWnU4~)m?_R(DJJ0jc_V#w7 zTrR)1zrW7`z=!E{`q9C`fdK%je+Lr)082|tYG-HXF9bo{@_N19@pwGd*VmUD8ym}G z7-rbq+#Ho8=~I)*)Y#qK?U5wuO{>+q5{X0(b$#i%xjC!NX8XFewRMW7=_-a{)nc(| z$!4?Ry}i9ZMn*~_1>($ex|XJ_YpFc{3}f?rl09UZL{MLl2`rjub9U>N45IPofQ zE|)7bH8tHs2weaG8vtOMrm-Byjl13M?>9C!$|r&W07OxI5eH4vSf|rD?smI>IL3*S zg!mDDA0hP4bGZF^oIL4<&@^oaAvB)NW*-26=jgq9Efz}<04|&uj>Tf&bUG87rXAyF z002xTlLr7W;@|AGVzCI4BuQqo`6qTm00000NkvXXu0mjf7hCSv diff --git a/src/images/zoom-out_1_16.png b/src/images/zoom-out_1_16.png deleted file mode 100644 index 39dc346ae70fd1b40a0e80adf954ab0b389a96cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E&kP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU0uBHf8U>h>b^rhZLP)eTtY%|v_lbb z5(7$yOfh1oWGNJm*xJ^#y@oV4(xzOG9O~W6os*!_)A*f!(}&;h@euq`p-}J;Lj1a} ze_32ywBaA2pF_D^P8o)=gb)f4LYU!j=#nJq6~}Q)u~^J<0xkgnRIAn0$;rvfbUOVm zl}ZuIvaqVE!&HjA`I(6E7_&N`B;rov!W=_ca=G3*0So|uBuRCI z&|Qw>ZfTnKeJ~hsM@L6DTCLV2Q53ICOibJ~O>;+<w6;s003uaXS*JcXY*Gim&(Z@V_C1AR3J(1VOk40Qd)| WR`XUGa-_)s0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXA| z009_D>bHIX00VqUL_t(I%eB=@Xk%p*0O0fAn>6>{xlK*ey!(LI*j^1%X~aNPrUY$q zX5E3p$QWF7AugsMh@uGH3hufx&~1^KaR`ErxTp^(OraB#7HlAorinMX$;~_Y@9THd z!Z0w*ovLT`^DjOQ=Wxye_@4qj`LVsd{nF&*eABE!|Cbi&1bFe0ByAb#j;hT zX}MqQc6(jZw86>A32Q22i^Y=n`F!r9qa)+`^*57>()o?&`4N_7DT<;{zwaV~@OC+y z&5mM>ow6*Snk~imp-||H{r&wr>+9=sI2>+s9LFGpY=jUr7!34uI*rE1$77{ZDJ9GD z-=>-;Nz!-qdcD84wsz~_;J_h@A~zfkS;H_mLdca~uXm+fE{9ZAjZ2brR!~>XJaD7YXxr`fdl=(u05Aanh!EoO`~54yVDQf2 z;bHGmFaUro%TMA!2=N30ft6q|c=rOQFSEqY@%tF#_a4LDkK>lhUI;=+5o5ektJNL= zK. * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#include -#include - -#include "apagedesignintf.h" -#include "abordertextitem.h" -#include "adesignelementsfactory.h" -#include "aglobal.h" -#include "adatasourcemanager.h" -#include "asimpletagparser.h" - -namespace{ - -const QString xmlTag = "TextItem"; - -ArReport::BaseDesignIntf * createTextItem(QObject* owner, ArReport::BaseDesignIntf* parent){ - return new ArReport::TextItem(owner,parent); -} -bool registred = ArReport::DesignElementsFactory::instance().registerCreator(xmlTag, ArReport::ItemAttribs(QObject::tr("Text Item"),"TextItem"), createTextItem); - -} - -namespace ArReport{ - -TextItem::TextItem(QObject *owner, QGraphicsItem *parent) - : ItemDesignIntf(xmlTag,owner,parent),m_spaceBorder(4){ - m_text = new QTextDocument(); - Init(); -} - -TextItem::TextItem(const QString& text, QObject* owner /*= 0*/, QGraphicsItem* parent /*= 0*/) - :ItemDesignIntf(xmlTag, owner,parent),m_spaceBorder(4){ - m_strText = text; - m_text = new QTextDocument(text); - m_text->setHtml(m_strText); - initText(); - Init(); -} - -TextItem::~TextItem() -{ - delete m_text; -} - -void TextItem::paint(QPainter* ppainter, const QStyleOptionGraphicsItem* style, QWidget* widget) { - Q_UNUSED(widget); - Q_UNUSED(style); - - ppainter->save(); - - setupPainter(ppainter); - - if (isSelected()) { - ppainter->setOpacity(0); - ppainter->fillRect(rect(),QBrush(QColor(Qt::white))); - ppainter->setOpacity(1); - } - else ppainter->fillRect(rect(),QBrush(Qt::white)); - - //initText(); - - QSizeF tmpSize = rect().size()-m_textSize;//m_text->size(); - - if ((tmpSize.height()>0) && (m_alignment & Qt::AlignVCenter)) - ppainter->translate(0,tmpSize.height()/2); - - QRegion clipReg=ppainter->clipRegion().xored(ppainter->clipRegion().subtracted(rect().toRect())); - ppainter->setClipRegion(clipReg); - qreal pos=0; - for(QTextBlock it=m_text->begin();it!=m_text->end();it=it.next()){ - for (int i=0;ilineCount();i++){ - pos+=it.layout()->lineAt(i).height(); - it.layout()->lineAt(i).draw(ppainter,QPointF(spaceBorderSize(),0)); - } - } - - ppainter->restore(); - BaseDesignIntf::paint(ppainter, style, widget); -} - -QString TextItem::text() const{ - return m_strText; -} - -void TextItem::Init() -{ - //setFlag(QGraphicsItem::ItemIsMovable); - //setFlag(QGraphicsItem::ItemIsSelectable); - m_autoWidth=NoneAutoWidth; - m_alignment= Qt::AlignLeft|Qt::AlignTop; - m_autoHeight=false; - m_text->setDefaultFont(sceneFont()); - m_textSize=QSizeF(); -} - -void TextItem::setText(QString value) -{ - if (m_strText.compare(value)!=0){ - m_strText=value; - m_text->setHtml(value); - m_text->setTextWidth(width()); - m_textSize=m_text->size(); - if (!isLoading()){ - update(rect()); - } - } -} - -void TextItem::updateItemSize(RenderPass pass, int /*maxHeight*/) -{ - if (isNeedExpandContent()) - expandContent(pass); - initText(); - - if (m_textSize.width()>width() && (m_autoWidth==MaxWordLength)){ - setWidth(m_textSize.width()); - } - if ((m_textSize.height()>height()) && (m_autoHeight) ){ - setHeight(m_textSize.height()+5); - } -} - -void TextItem::updateLayout() -{ - m_layout.setText(text()); - qreal linePos = 0; - m_layout.beginLayout(); - while(true){ - QTextLine line = m_layout.createLine(); - if (!line.isValid()) break; - line.setLineWidth(width()-m_spaceBorder*2); - line.setPosition(QPoint(m_spaceBorder,linePos)); - linePos+=line.height(); - } - m_layout.endLayout(); -} - -bool TextItem::isNeedExpandContent() const -{ - QRegExp rx("$*\\{[^{]*\\}"); - return text().contains(rx); -} - -QString TextItem::expandDataFields(QString context) -{ - DataManager* dm=DataManager::instance(); - QRegExp rx("\\$D\\{[^\\{]*\\}"); - if (context.contains(rx)){ - - while ((rx.indexIn(context))!=-1){ - QString field=rx.cap(0); - field.remove("$D{"); - field.remove("}"); - if (dm->isContainField(field)) { - context.replace(rx.cap(0),dm->fieldData(field).toString()); - } else { - context.replace(rx.cap(0),tr("Field %1 not found").arg(field)); - } - } - } - return context; -} - -void TextItem::initText() -{ - QTextOption to; - to.setAlignment(m_alignment); - to.setWrapMode(QTextOption::WordWrap); - m_text->setDocumentMargin(spaceBorderSize()); - m_text->setDefaultTextOption(to); - m_text->setDefaultFont(sceneFont()); - m_text->setTextWidth(rect().width()); - m_textSize=m_text->size(); -} - -void TextItem::setGeometry(QRectF rect) -{ - BaseDesignIntf::setGeometry(rect); - m_text->setTextWidth(width()); -} - -bool TextItem::isNeedUpdateSize() const -{ - return ((m_textSize.height()>geometry().height()||m_textSize.width()>geometry().width())&& - (autoHeight()||autoWidth())) - || isNeedExpandContent(); -} - -void TextItem::setSpaceBorderSize(int value) -{ - m_spaceBorder=value; - update(rect()); -} - -void TextItem::setAlignment(Qt::Alignment value) -{ - m_alignment=value; - m_layout.setTextOption(QTextOption(m_alignment)); - update(rect()); -} - -void TextItem::expandContent(RenderPass pass) -{ - QString context=text(); - switch(pass){ - case FirstPass: - context=expandDataFields(context); - break; - case SecondPass:; - } - setText(context); -} - -bool TextItem::canBeSliced(int height) const -{ - return height>(m_text->begin().layout()->lineAt(0).height()); -} - -BaseDesignIntf *TextItem::cloneUpperPart(int height, QObject *owner, QGraphicsItem *parent) -{ - int linesHeight=0; - initText(); - QString tmpText=""; - TextItem* upperPart = dynamic_cast(cloneItem(itemMode(),owner,parent)); - - for (QTextBlock it=m_text->begin();it!=m_text->end();it=it.next()){ - for (int i=0;ilineCount();i++){ - linesHeight+=it.layout()->lineAt(i).height(); - if ((linesHeight>height)) {linesHeight-=it.layout()->lineAt(i).height(); goto loop_exit;} - tmpText+=it.text().mid(it.layout()->lineAt(i).textStart(),it.layout()->lineAt(i).textLength()); - } - } - loop_exit: - upperPart->setHeight(linesHeight); - QScopedPointer context(new HtmlContext(m_strText)); - upperPart->setText(context->extendTextByTags(tmpText,0)); - return upperPart; -} - -BaseDesignIntf *TextItem::cloneBottomPart(int height, QObject *owner, QGraphicsItem *parent) -{ - TextItem* bottomPart = dynamic_cast(cloneItem(itemMode(),owner,parent)); - int linesHeight=0; - int curLine=0; - QTextBlock curBlock; - - QString tmpText=""; - - for (curBlock=m_text->begin();curBlock!=m_text->end();curBlock=curBlock.next()){ - for (curLine=0;curLinelineCount();curLine++){ - linesHeight+=curBlock.layout()->lineAt(curLine).height(); - if (linesHeight>height) {goto loop_exit;} - } - } - loop_exit:; - int textPos=0; - for (;curBlock!=m_text->end();curBlock=curBlock.next()){ - for (;curLinelineCount();curLine++){ - if (tmpText=="") textPos= curBlock.layout()->lineAt(curLine).textStart(); - tmpText+=curBlock.text().mid(curBlock.layout()->lineAt(curLine).textStart(), - curBlock.layout()->lineAt(curLine).textLength()); - } - } - QScopedPointer context(new HtmlContext(m_strText)); - bottomPart->setText(context->extendTextByTags(tmpText,textPos)); - return bottomPart; -} - -BaseDesignIntf *TextItem::createSameTypeItem(QObject *owner, QGraphicsItem *parent) -{ - return new TextItem(owner,parent); -} - -BaseDesignIntf *TextItem::cloneEmpty(int height, QObject *owner, QGraphicsItem *parent) -{ - TextItem* empty=dynamic_cast(cloneItem(itemMode(),owner,parent)); - empty->setText(""); - empty->setHeight(height); - return empty; -} - -void TextItem::objectLoadFinished() -{ - ItemDesignIntf::objectLoadFinished(); - initText(); -} - -void TextItem::setTextItemFont(QFont value) -{ - setFont(value); - m_text->setDefaultFont(sceneFont()); -} - -} - diff --git a/src/items/abordertextitem.h b/src/items/abordertextitem.h deleted file mode 100644 index cc9bdee..0000000 --- a/src/items/abordertextitem.h +++ /dev/null @@ -1,110 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#ifndef ABORDERTEXTITEM_H -#define ABORDERTEXTITEM_H -#include -#include -#include -#include "aitemdesignintf.h" -#include - -#include - -namespace ArReport { - -class Tag; -class TextItem : public ArReport::ItemDesignIntf { - Q_OBJECT - Q_ENUMS(AutoWidth) - Q_PROPERTY(QString content READ text WRITE setText) - Q_PROPERTY(int margin READ spaceBorderSize WRITE setSpaceBorderSize) - Q_PROPERTY(Qt::Alignment alignment READ alignment() WRITE setAlignment) - Q_PROPERTY(AutoWidth autoWidth READ autoWidth() WRITE setAutoWidth()) - Q_PROPERTY(bool autoHeight READ autoHeight() WRITE setAutoHeight()) - Q_PROPERTY(QFont font READ font() WRITE setTextItemFont()) -public: - - enum AutoWidth{NoneAutoWidth,MaxWordLength,MaxStringLength}; - - void Init(); - TextItem(QObject* owner,QGraphicsItem* parent); - TextItem(const QString& text,QObject* owner = 0, QGraphicsItem* parent = 0); - ~TextItem(); - - void paint(QPainter* ppainter, const QStyleOptionGraphicsItem*, QWidget*); - QString text() const; - void setText(QString value); - - void setSpaceBorderSize(int value); - int spaceBorderSize() const {return m_spaceBorder;} - - void setAlignment(Qt::Alignment value); - Qt::Alignment alignment(){return m_alignment;} - - virtual void setGeometry(QRectF rect); - virtual bool isNeedUpdateSize() const; - virtual void updateItemSize(RenderPass pass, int); - void expandContent(RenderPass pass); - - void setAutoHeight(bool value){m_autoHeight=value;} - bool autoHeight() const {return m_autoHeight;} - - void setAutoWidth(AutoWidth value){m_autoWidth=value;} - AutoWidth autoWidth() const {return m_autoWidth;} - - virtual bool canBeSliced(int height) const; - virtual bool isEmpty() const{return m_text->isEmpty();} - virtual BaseDesignIntf* cloneUpperPart(int height, QObject *owner, QGraphicsItem *parent); - virtual BaseDesignIntf* cloneBottomPart(int height, QObject *owner, QGraphicsItem *parent); - virtual BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0); - virtual BaseDesignIntf* cloneEmpty(int height, QObject *owner, QGraphicsItem *parent); - virtual void objectLoadFinished(); - - void setTextItemFont(QFont value); -protected: - void updateLayout(); - bool isNeedExpandContent() const; - QString expandDataFields(QString context); -private: - void initText(); -private: - QString m_strText; - int m_spaceBorder; - QTextLayout m_layout; - QTextDocument* m_text; - Qt::Alignment m_alignment; - bool m_autoHeight; - AutoWidth m_autoWidth; - QSizeF m_textSize; - QFont m_font; -}; - -} -#endif // ABORDERTEXTITEM_H diff --git a/src/items/images/Control-Edit Box.png b/src/items/images/Control-Edit Box.png deleted file mode 100644 index ea0fb75eb36f851eaca0a8099810725cf3105747..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+s!VP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-;7LS5RCwC#l}|`iQ5eO4_s(n^MvaLmZ6OE}7}VB{ zyLMJcU?4#>Q8vZ&XNZEd7a|Qcgp!%t7E!dZR<3jv(WWA-aN!~%qd}%j+?4nGTFkuX z{IMJtZxeo-`&};goO{l>?_Hy+gjtr5Yl~pRiawipA8N``053Zh3i#`(`$YnO^0yLI z#3@b$k=n7gSKiJo)R)2jgZ-NZ7m@lxmeNO9FZj^NLqr58x-o%o3sCpTKYz*NL~-sP z3NCsRBr|sdTL3P2<8<|0ssKE4a)4weS7FQ7d;#Yw6-28E?hKqloYHwX&CJsr0GCf6 zWwEeCPtxP@_;vcu4|64TjE?r!0Ne+yRuHYWrSDvp`A-Y{`n?(`XljTNk8R`o(lSnj z{NfKf+FKD(RJ8)sIaxnsQKkRtD5(?OJi2!+@V>Z7dG+Qadv@19gc65=}}t@Z-0G$&+nrpmmhvY zCT3n;#bMy;+AcWvtRh{Xc z{_?^s%FD}T!GM*`q*VSCObkLLbaNbs;^Jb{>!7oOxi%GOK8!$%UNL z04oVu(EzH*qd6c5LLLmj;tVM0)M5;%)WGCK0Fx5|)i=}A*ME2hq;+<0y~Kr7Sn%;f z0K-GiRBzts6Xbs+u@<3e$Aj)iisyU!o~Gix+I>Jh!w7AOxSrwQt|)Li6=j*?-8MACf%hYZmd`$|mMk zHsRB#0k_8kx5uMUIuON(cF=rH3}p5L;>LDe@&M7#Q&QO8-cIWY49x>67cwxXFt9ib zWq@IfXMj~35jD9GtZIM(BBmLQlI2CLXn+vsP0K)D)u>(#O)`<`X+c36nm4aUu(-H@ z@iDQ)_793x=iPf8UVOWt7;DXjvlUL1|4ygvNc#iFB zV01c!(dm%xnK+v$vyrUizRCHuwY7PMQDTg*Q;ix+&JPBI0D$guYj z98ek`^jj(1=>f0Ti*Pthq_5Y>zYuIZ5y#H%PHJ3n|2SH&H6ea-31vr%P!{#z?U!-< ze7p#!y-0j3K^Qn}j{Fmuk#N`?X*VMzC?c^4YyyRiVXz~_ke~vb_98f0r?yO7Pzb;p zzX8YA7VI_#4n7P46#0B>F@*tkmc<4iL2UgGen+=Z!Y2TRfFX=E4CrXOffKvGFtW4` z>U6+o_oBvi2@cy4Yc%zPH~pxrssqc~QCV^ZHEu5kI{f*CSF@K5|NUzf%Ny_)_?Ad% T<=^Bf00000NkvXXu0mjf+mgd# diff --git a/src/lrserializatorsfactory.cpp b/src/lrserializatorsfactory.cpp deleted file mode 100644 index b1757f5..0000000 --- a/src/lrserializatorsfactory.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ - diff --git a/src/lrserializatorsfactory.h b/src/lrserializatorsfactory.h deleted file mode 100644 index 111484d..0000000 --- a/src/lrserializatorsfactory.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#ifndef ASERIALIZATORSFACTORY_H -#define ASERIALIZATORSFACTORY_H -#include "asimpleabstractfactory.h" -#include "serializators/aserializatorintf.h" - -namespace LimeReport{ - -typedef SerializatorIntf* (*CreateSerializator)(QObject* parent); - -class SerializatorsFactory: public SimpleAbstractFactory -{ -private: - friend class Singleton; -public: - SerializatorsFactory(); - ~SerializatorsFactory(){} - SerializatorsFactory(const SerializatorsFactory&){} - SerializatorsFactory& operator = (const SerializatorsFactory&){return *this;} -}; - -} -#endif // ASERIALIZATORSFACTORY_H diff --git a/src/objectinspector/images/checked.png b/src/objectinspector/images/checked.png deleted file mode 100644 index 07d1fafda682b360e9e1fbb425d7b36325c686d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmV-d0jU0oP)sX=v39Ri7HQtC#t$ryqxc!J{!bAX!OfrM}Z)QU}3 zYzhoX)rQ~A%s>D4-kS`p`uBQ!wpkR#5vUgABw-kSJv;aqxlrx*d#&VQ7*I;3z#;$u zmSs(bw{6R2vq32}>Uq~F@~NbhL{T*Bo9tjrLJ02nJ3@%p1B4JrDQTL9?RGospB>Tl zdgXSz0q}S{kWz9!pV{qpS_MsZkftelo&!G*UX~?}<8U|}w8CcrNs`cY9d%uEI-LOU zJP+4(wE?pux?C<~S%ztv0QkPI9S$0gY}+dfS;y7Lu pJ_YzxN>x)o^sj$0dDSXyeFNQ!P$Z2^<7)r_002ovPDHLkV1gQLj|2b! diff --git a/src/objectinspector/images/unchecked.png b/src/objectinspector/images/unchecked.png deleted file mode 100644 index 574c0d4d8f9490470bc1bee64ef2d162430a5cc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*O%l>?NMQuI#tDc!iC48^bnV1qu~;x;Tb-9Dh4y zr(lBt4~ux4&r0he{(y$=1#B-4vhL`6eM->su(U. * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#include "lrscriptbrowser.h" -#include "ui_lrscriptbrowser.h" - -#ifdef HAVE_UI_LOADER -#include -#include -#endif -#include - -namespace LimeReport{ - -ScriptBrowser::ScriptBrowser(QWidget *parent) : - QWidget(parent), - ui(new Ui::ScriptBrowser) -{ - ui->setupUi(this); -#ifndef HAVE_UI_LOADER - ui->tpDialogs->setVisible(false); - ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tpDialogs)); -#endif -} - -ScriptBrowser::~ScriptBrowser() -{ - delete ui; -} - -void ScriptBrowser::setReportEditor(ReportDesignWidget* report) -{ - m_report=report; - connect(m_report,SIGNAL(cleared()),this,SLOT(slotClear())); - connect(m_report,SIGNAL(loaded()),this,SLOT(slotUpdate())); - updateFunctionTree(); -} - -void ScriptBrowser::updateFunctionTree() -{ - ScriptEngineManager* sm = reportEditor()->scriptManager(); - QMap categ; - foreach(ScriptFunctionDesc fd, sm->functionsDescriber()){ - QString functionCategory = (fd.category!="") ? fd.category : tr("NO CATEGORY"); - if (categ.contains(functionCategory)){ - QTreeWidgetItem* item = new QTreeWidgetItem(categ.value(fd.category),QStringList(fd.name)); - item->setIcon(0,QIcon(":/report/images/function")); - } else { - QTreeWidgetItem* categItem = new QTreeWidgetItem(ui->twFunctions,QStringList(functionCategory)); - categItem->setIcon(0,QIcon(":/report/images/folder")); - categ.insert(functionCategory,categItem); - QTreeWidgetItem* item = new QTreeWidgetItem(categItem,QStringList(fd.name)); - item->setIcon(0,QIcon(":/report/images/function")); - } - } -} - -#ifdef HAVE_UI_LOADER -void ScriptBrowser::fillProperties(QTreeWidgetItem* objectItem, QObject* item){ - for(int i=0; imetaObject()->propertyCount(); ++i){ - QStringList row; - row<metaObject()->property(i).typeName()<metaObject()->property(i).name(); - /*QTreeWidgetItem* propItem = */new QTreeWidgetItem(objectItem,row); - } -} - -void ScriptBrowser::fillDialog(QTreeWidgetItem* dialogItem,const QString& description){ - - QUiLoader loader; - QByteArray baDesc = description.toUtf8(); - QBuffer buff(&baDesc); - buff.open(QIODevice::ReadOnly); - QDialog* dialog = dynamic_cast(loader.load(&buff)); - if (dialog){ - foreach (QObject* child, dialog->children()) { - if (!child->objectName().isEmpty()){ - QStringList row; - row<metaObject()->className()<objectName(); - QTreeWidgetItem* item = new QTreeWidgetItem(dialogItem,row); - item->setIcon(0,QIcon(":/scriptbrowser/images/item")); - fillProperties(item,child); - } - } - delete dialog; - } - -} - -void ScriptBrowser::updateDialogsTree() -{ - ui->twDialogs->clear(); - ScriptEngineContext* sc = reportEditor()->scriptContext(); - foreach(DialogDescriber::Ptr dc, sc->dialogsDescriber()){ - QTreeWidgetItem* dialogItem = new QTreeWidgetItem(ui->twDialogs,QStringList(dc->name())); - dialogItem->setIcon(0,QIcon(":/scriptbrowser/images/dialog")); - fillDialog(dialogItem,dc->description()); - } -} -#endif -void ScriptBrowser::slotClear() -{ - ui->twDialogs->clear(); - ui->twFunctions->clear(); -} - -void ScriptBrowser::slotUpdate() -{ -#ifdef HAVE_UI_LOADER - updateDialogsTree(); -#endif - updateFunctionTree(); -} - -#ifdef HAVE_UI_LOADER -void ScriptBrowser::on_tbAddDialog_clicked() -{ - QFileDialog fileDialog(this); - if (fileDialog.exec()==QDialog::Accepted){ - QStringList fileNames = fileDialog.selectedFiles(); - QUiLoader loader; - - if (!fileNames.isEmpty()){ - foreach (QString fileName, fileNames) { - QFile file(fileName); - file.open(QIODevice::ReadOnly); - if (file.isOpen()){ - QWidget* widget = loader.load(&file); - QDialog* dialog = dynamic_cast(widget); - if (dialog){ - if (!m_report->scriptContext()->containsDialog(dialog->objectName())){ - file.seek(0); - m_report->scriptContext()->addDialog(dialog->objectName(),file.readAll()); - updateDialogsTree(); - } else { - QMessageBox::critical(this,tr("Error"),tr("Dialog with name: %1 already exists").arg(dialog->objectName())); - } - } else { - if (widget) - QMessageBox::critical(this,tr("Error"),tr("ui file must cointain QDialog instead QWidget or QMainWindow")); - else - QMessageBox::critical(this,tr("Error"),tr("wrong file format")); - } - if (widget) delete widget; - } - } - } - } -} - -void ScriptBrowser::on_tbRunDialog_clicked() -{ - if (ui->twDialogs->currentItem()&& ui->twDialogs->currentItem()->parent()==0){ - m_report->scriptContext()->previewDialog(ui->twDialogs->currentItem()->text(0)); - } -} - -void ScriptBrowser::on_tbDeleteDialog_clicked() -{ - if (ui->twDialogs->currentItem()&& ui->twDialogs->currentItem()->parent()==0){ - m_report->scriptContext()->deleteDialog(ui->twDialogs->currentItem()->text(0)); - updateDialogsTree(); - } -} - -#endif - -} //namespace LimeReport - - diff --git a/src/scriptbrowser/lrscriptbrowser.h b/src/scriptbrowser/lrscriptbrowser.h deleted file mode 100644 index 214977b..0000000 --- a/src/scriptbrowser/lrscriptbrowser.h +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#ifndef LRSCRIPTBROWSER_H -#define LRSCRIPTBROWSER_H - -#include -#include -#include -#include "lrreportdesignwidget.h" - -namespace Ui { -class ScriptBrowser; -} - -namespace LimeReport{ - -class ScriptBrowser : public QWidget -{ - Q_OBJECT - -public: - explicit ScriptBrowser(QWidget *parent = 0); - ~ScriptBrowser(); - void setReportEditor(LimeReport::ReportDesignWidget* report); - inline ReportDesignWidget* reportEditor(){return m_report;} - void updateFunctionTree(); -#ifdef HAVE_UI_LOADER - void updateDialogsTree(); -#endif -protected: -#ifdef HAVE_UI_LOADER - void fillDialog(QTreeWidgetItem *dialogItem, const QString &description); - void fillProperties(QTreeWidgetItem *objectItem, QObject *item); -#endif -private slots: - void slotClear(); - void slotUpdate(); -#ifdef HAVE_UI_LOADER - void on_tbAddDialog_clicked(); - void on_tbRunDialog_clicked(); - void on_tbDeleteDialog_clicked(); -#endif - -private: - Ui::ScriptBrowser *ui; - ReportDesignWidget* m_report; -}; - -} // namespace LimeReport -#endif // LRSCRIPTBROWSER_H diff --git a/src/serializators/aserializatorintf.cpp b/src/serializators/aserializatorintf.cpp deleted file mode 100644 index 91eb6c9..0000000 --- a/src/serializators/aserializatorintf.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#include "lrserializatorintf.h" diff --git a/src/serializators/astorageintf.cpp b/src/serializators/astorageintf.cpp deleted file mode 100644 index 5812cf1..0000000 --- a/src/serializators/astorageintf.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#include "astorageintf.h" - diff --git a/src/waitform.cpp b/src/waitform.cpp deleted file mode 100644 index f359918..0000000 --- a/src/waitform.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#include "waitform.h" -#include "ui_waitform.h" -#include - -WaitForm::WaitForm(QWidget *parent) : - QDialog(parent), - ui(new Ui::WaitForm) -{ - ui->setupUi(this); -} - -WaitForm::~WaitForm() -{ - delete ui; -} diff --git a/src/waitform.h b/src/waitform.h deleted file mode 100644 index 658ce3b..0000000 --- a/src/waitform.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * This file is part of the Lime Report project * - * Copyright (C) 2015 by Alexander Arin * - * arin_a@bk.ru * - * * - ** GNU General Public License Usage ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - * * - ** GNU Lesser General Public License ** - * * - * This library is free software: you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License as * - * published by the Free Software Foundation, either version 3 of the * - * License, or (at your option) any later version. * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library. * - * If not, see . * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - ****************************************************************************/ -#ifndef WAITFORM_H -#define WAITFORM_H - -#include - -namespace Ui { -class WaitForm; -} - -class WaitForm : public QDialog -{ - Q_OBJECT - -public: - explicit WaitForm(QWidget *parent = 0); - ~WaitForm(); - -private: - Ui::WaitForm *ui; -}; - -#endif // WAITFORM_H diff --git a/src/waitform.ui b/src/waitform.ui deleted file mode 100644 index 4549ef8..0000000 --- a/src/waitform.ui +++ /dev/null @@ -1,58 +0,0 @@ - - - WaitForm - - - - 0 - 0 - 186 - 95 - - - - - 0 - 0 - - - - Wait - - - false - - - - - - - 0 - 0 - - - - - - - :/report/images/hourglass - - - true - - - - - - - Please wait ... - - - - - - - - - -