From df2f64d88ed79cc591590bd811dd5e597fda7131 Mon Sep 17 00:00:00 2001 From: Valentin Roland Date: Mon, 27 May 2024 22:47:53 +0200 Subject: [PATCH] Add clang-format make targets and CI checks (#314) Adds a .clang-format definition and checks in CI to enforce consistent code formatting going forward. --- .clang-format | 7 + .github/workflows/main.yml | 14 + .gitignore | 2 + Makefile | 15 +- examples/demo/main/main.c | 10 +- examples/dragon/main/main.c | 2 +- .../lib/Firasans/Firasans.h | 2356 ++++++++--------- .../lilygo-t5-47-epd-platformio/src/main.cpp | 14 +- examples/screen_diag/main/commands.c | 14 +- examples/screen_diag/main/commands.h | 19 +- examples/screen_diag/main/commands/graphics.c | 294 +- examples/screen_diag/main/commands/screen.c | 201 +- examples/screen_diag/main/commands/system.c | 213 +- examples/screen_diag/main/commands/tests.c | 85 +- examples/screen_diag/main/epd.c | 14 +- examples/screen_diag/main/screen_diag.c | 33 +- examples/test/main/main.c | 10 +- examples/weather/main/ArduinoJson.h | 443 ++-- examples/weather/main/lang.h | 6 +- examples/weather/main/owm_credentials.h | 36 +- examples/weather/main/weather.cpp | 241 +- examples/www-image/main/jpg-render.c | 70 +- examples/www-image/main/jpgdec-render.cpp | 46 +- src/board/epd_board.c | 85 +- src/board/epd_board_common.c | 41 +- src/board/epd_board_lilygo_t5_47.c | 313 +-- src/board/epd_board_v2_v3.c | 226 +- src/board/epd_board_v4.c | 265 +- src/board/epd_board_v5.c | 268 +- src/board/epd_board_v6.c | 376 +-- src/board/epd_board_v7.c | 253 +- src/board/pca9555.c | 53 +- src/board/pca9555.h | 45 +- src/board/tps65185.c | 34 +- src/board/tps65185.h | 2 +- src/builtin_waveforms.c | 6 +- src/epd_board.h | 68 +- src/epd_board_specific.h | 22 +- src/epd_display.h | 1 - src/epd_highlevel.h | 42 +- src/epd_internals.h | 73 +- src/epdiy.c | 786 +++--- src/epdiy.h | 44 +- src/font.c | 668 ++--- src/highlevel.c | 326 +-- src/output_common/line_queue.c | 25 +- src/output_common/line_queue.h | 5 +- src/output_common/lut.c | 732 +++-- src/output_common/lut.h | 118 +- src/output_common/render_context.c | 31 +- src/output_common/render_context.h | 17 +- src/output_common/render_method.h | 5 +- src/output_i2s/i2s_data_bus.c | 423 ++- src/output_i2s/i2s_data_bus.h | 42 +- src/output_i2s/render_i2s.c | 98 +- src/output_i2s/render_i2s.h | 22 +- src/output_i2s/rmt_pulse.c | 118 +- src/output_i2s/rmt_pulse.h | 14 +- src/output_lcd/idf-4-backports.h | 18 +- src/output_lcd/lcd_driver.c | 38 +- src/output_lcd/lcd_driver.h | 47 +- src/output_lcd/render_lcd.c | 54 +- src/output_lcd/render_lcd.h | 6 +- src/render.c | 55 +- test/test_diff.c | 25 +- test/test_initialization.c | 11 +- test/test_line_mask.c | 14 +- test/test_lut.c | 37 +- 68 files changed, 5086 insertions(+), 5011 deletions(-) diff --git a/.clang-format b/.clang-format index d2c36875..a05539ca 100644 --- a/.clang-format +++ b/.clang-format @@ -2,3 +2,10 @@ BasedOnStyle: chromium IndentWidth: 4 ColumnLimit: 100 AlignAfterOpenBracket: BlockIndent +IncludeBlocks: Preserve +BreakBeforeBinaryOperators: All +Cpp11BracedListStyle: false +AllowAllParametersOfDeclarationOnNextLine: true +BinPackArguments: false +BinPackParameters: false +SortIncludes: false diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bb5d808e..2f70dc0b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,6 +3,19 @@ name: ESP-IDF on: [push, pull_request] jobs: + format-check: + runs-on: ubuntu-latest + container: + image: "espressif/idf:release-v5.2" + steps: + - uses: actions/checkout@v4 + - run: | + . $IDF_PATH/export.sh + idf_tools.py install esp-clang + . $IDF_PATH/export.sh + which clang-format + make format-check + build: runs-on: ubuntu-latest strategy: @@ -11,6 +24,7 @@ jobs: version: - release-v4.4 - release-v5.1 + - release-v5.2 example: - calibration_helper - demo diff --git a/.gitignore b/.gitignore index b1f3bdc1..5ab771df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .pio .vscode build/ +build.clang sdkconfig.old sdkconfig **/build/ @@ -24,3 +25,4 @@ dependencies.lock ED*.h ES*.h examples/private_*/ +*.code-workspace diff --git a/Makefile b/Makefile index 749298de..385cc55f 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,13 @@ EXPORTED_MODES ?= 1,2,5,16,17 # Generate waveforms in room temperature range EXPORT_TEMPERATURE_RANGE ?= 15,35 +FORMATTED_FILES := $(shell find ./ -regex '.*\.\(c\|cpp\|h\|ino\)$$' \ + -not -regex '.*/\(.ccls-cache\|.cache\|waveforms\|\components\|build\)/.*' \ + -not -regex '.*/img_.*.h' \ + -not -regex '.*/build.*' \ + -not -regex '.*/\(firasans_.*.h\|opensans.*.h\|amiri.h\|alexandria.h\|dragon.h\)' \ + -not -regex '.*E[DS][0-9]*[A-Za-z]*[0-9].h') + # the default headers that should come with the distribution default: \ $(patsubst %,src/waveforms/epdiy_%.h,$(SUPPORTRED_DISPLAYS)) @@ -17,9 +24,11 @@ clean: rm src/waveforms/eink_*.h format: - clang-format -i $(shell find ./examples -regex '.*main.*\.\(c\|cpp\|h\|ino\)$$' \ - -not -regex '.*/\(.ccls-cache\|waveforms\|\components\|build\)/.*' \ - -not -regex '.*E[DS][0-9]*[A-Za-z]*[0-9].h') + clang-format --style=file -i $(FORMATTED_FILES) + +format-check: + clang-format --style=file --dry-run -Werror $(FORMATTED_FILES) + src/waveforms/epdiy_%.h: src/waveforms/epdiy_%.json python3 scripts/waveform_hdrgen.py \ diff --git a/examples/demo/main/main.c b/examples/demo/main/main.c index 6eccb1c5..508f9c43 100644 --- a/examples/demo/main/main.c +++ b/examples/demo/main/main.c @@ -50,7 +50,8 @@ void idf_setup() { epd_set_rotation(EPD_ROT_LANDSCAPE); printf( - "Dimensions after rotation, width: %d height: %d\n\n", epd_rotated_display_width(), + "Dimensions after rotation, width: %d height: %d\n\n", + epd_rotated_display_width(), epd_rotated_display_height() ); @@ -221,7 +222,8 @@ void idf_loop() { .x = 20, .y = 20, .width = epd_rotated_display_width() - 40, - .height = epd_rotated_display_height() - 40}; + .height = epd_rotated_display_height() - 40, + }; epd_draw_rect(border_rect, 0, fb); cursor_x = 50; @@ -235,7 +237,9 @@ void idf_loop() { "➾ High-quality font rendering ✎🙋\n" "➾ Partial update\n" "➾ Arbitrary transitions with vendor waveforms", - &cursor_x, &cursor_y, fb + &cursor_x, + &cursor_y, + fb ); EpdRect img_beach_area = { diff --git a/examples/dragon/main/main.c b/examples/dragon/main/main.c index 5f6e374a..f5d9d453 100644 --- a/examples/dragon/main/main.c +++ b/examples/dragon/main/main.c @@ -18,7 +18,7 @@ EpdiyHighlevelState hl; #endif void idf_loop() { - EpdRect dragon_area = {.x = 0, .y = 0, .width = dragon_width, .height = dragon_height}; + EpdRect dragon_area = { .x = 0, .y = 0, .width = dragon_width, .height = dragon_height }; int temperature = 25; diff --git a/examples/lilygo-t5-47-epd-platformio/lib/Firasans/Firasans.h b/examples/lilygo-t5-47-epd-platformio/lib/Firasans/Firasans.h index d00c3f36..3e37ddb5 100644 --- a/examples/lilygo-t5-47-epd-platformio/lib/Firasans/Firasans.h +++ b/examples/lilygo-t5-47-epd-platformio/lib/Firasans/Firasans.h @@ -6907,1192 +6907,1180 @@ const uint8_t FiraSans_12Bitmaps[110473] = { 0xF7, 0xD9, 0x81, 0x6C, 0x00, 0x94, 0x01, 0x37, 0x3E, }; const EpdGlyph FiraSans_12Glyphs[] = { - { 0, 0, 7, 0, 0, 8, 0 }, // - { 4, 18, 6, 1, 18, 44, 8 }, // ! - { 8, 7, 10, 1, 18, 37, 52 }, // " - { 13, 18, 13, 0, 18, 123, 89 }, // # - { 13, 26, 13, 0, 22, 115, 212 }, // $ - { 19, 20, 21, 1, 19, 166, 327 }, // % - { 16, 19, 18, 2, 18, 142, 493 }, // & - { 3, 7, 5, 1, 18, 23, 635 }, // ' - { 7, 26, 8, 1, 22, 97, 658 }, // ( - { 7, 26, 8, 1, 22, 100, 755 }, // ) - { 11, 10, 11, 0, 19, 66, 855 }, // * - { 10, 10, 12, 1, 14, 30, 921 }, // + - { 5, 8, 6, 0, 4, 33, 951 }, // , - { 8, 2, 10, 1, 9, 17, 984 }, // - - { 4, 4, 6, 1, 4, 16, 1001 }, // . - { 9, 24, 13, 2, 21, 98, 1017 }, // / - { 12, 18, 14, 1, 18, 86, 1115 }, // 0 - { 9, 17, 11, 0, 17, 37, 1201 }, // 1 - { 12, 18, 12, 0, 18, 90, 1238 }, // 2 - { 12, 18, 12, 0, 18, 96, 1328 }, // 3 - { 12, 18, 13, 1, 18, 80, 1424 }, // 4 - { 12, 18, 13, 0, 18, 78, 1504 }, // 5 - { 12, 18, 13, 1, 18, 111, 1582 }, // 6 - { 11, 18, 11, 0, 17, 57, 1693 }, // 7 - { 12, 18, 14, 1, 18, 117, 1750 }, // 8 - { 11, 18, 13, 1, 18, 113, 1867 }, // 9 - { 4, 13, 6, 1, 13, 22, 1980 }, // : - { 5, 17, 6, 0, 13, 45, 2002 }, // ; - { 11, 12, 13, 1, 14, 67, 2047 }, // < - { 10, 6, 13, 1, 12, 23, 2114 }, // = - { 11, 12, 13, 1, 14, 65, 2137 }, // > - { 11, 18, 11, 0, 18, 83, 2202 }, // ? - { 23, 24, 26, 1, 18, 217, 2285 }, // @ - { 15, 18, 14, 0, 18, 119, 2502 }, // A - { 13, 18, 15, 2, 18, 93, 2621 }, // B - { 13, 18, 14, 1, 18, 90, 2714 }, // C - { 13, 18, 16, 2, 18, 84, 2804 }, // D - { 11, 18, 13, 2, 18, 43, 2888 }, // E - { 10, 18, 12, 2, 18, 37, 2931 }, // F - { 14, 18, 16, 1, 18, 107, 2968 }, // G - { 13, 18, 17, 2, 18, 32, 3075 }, // H - { 3, 18, 7, 2, 18, 13, 3107 }, // I - { 6, 22, 8, 0, 18, 33, 3120 }, // J - { 13, 18, 15, 2, 18, 93, 3153 }, // K - { 10, 18, 12, 2, 18, 28, 3246 }, // L - { 17, 18, 19, 1, 18, 157, 3274 }, // M - { 13, 18, 17, 2, 18, 88, 3431 }, // N - { 15, 18, 17, 1, 18, 106, 3519 }, // O - { 12, 18, 15, 2, 18, 64, 3625 }, // P - { 16, 21, 17, 1, 18, 132, 3689 }, // Q - { 13, 18, 15, 2, 18, 95, 3821 }, // R - { 13, 18, 14, 0, 18, 108, 3916 }, // S - { 13, 18, 13, 0, 18, 29, 4024 }, // T - { 13, 18, 17, 2, 18, 61, 4053 }, // U - { 14, 18, 14, 0, 18, 119, 4114 }, // V - { 21, 18, 21, 0, 18, 172, 4233 }, // W - { 14, 18, 14, 0, 18, 113, 4405 }, // X - { 14, 18, 14, 0, 18, 84, 4518 }, // Y - { 12, 18, 13, 0, 18, 74, 4602 }, // Z - { 6, 24, 8, 1, 21, 24, 4676 }, // [ - { 9, 24, 13, 2, 21, 97, 4700 }, // - { 6, 24, 8, 1, 21, 23, 4797 }, // ] - { 12, 8, 14, 1, 22, 56, 4820 }, // ^ - { 13, 2, 13, 0, -2, 17, 4876 }, // _ - { 7, 6, 8, 0, 21, 31, 4893 }, // ` - { 12, 15, 13, 1, 14, 90, 4924 }, // a - { 12, 20, 15, 2, 20, 84, 5014 }, // b - { 11, 14, 12, 1, 14, 70, 5098 }, // c - { 12, 20, 15, 1, 20, 83, 5168 }, // d - { 12, 14, 14, 1, 14, 88, 5251 }, // e - { 10, 20, 8, 0, 20, 47, 5339 }, // f - { 13, 22, 13, 0, 16, 138, 5386 }, // g - { 11, 20, 14, 2, 20, 50, 5524 }, // h - { 5, 20, 7, 1, 20, 23, 5574 }, // i - { 7, 26, 7, -1, 20, 48, 5597 }, // j - { 11, 20, 13, 2, 20, 72, 5645 }, // k - { 5, 20, 7, 2, 20, 24, 5717 }, // l - { 18, 14, 21, 2, 14, 63, 5741 }, // m - { 11, 14, 14, 2, 14, 44, 5804 }, // n - { 13, 14, 15, 1, 14, 89, 5848 }, // o - { 12, 20, 15, 2, 14, 86, 5937 }, // p - { 12, 20, 15, 1, 14, 82, 6023 }, // q - { 8, 14, 10, 2, 14, 34, 6105 }, // r - { 11, 14, 12, 0, 14, 80, 6139 }, // s - { 10, 18, 9, 0, 18, 49, 6219 }, // t - { 11, 14, 14, 2, 14, 43, 6268 }, // u - { 13, 14, 12, 0, 14, 97, 6311 }, // v - { 18, 14, 18, 0, 14, 132, 6408 }, // w - { 12, 14, 12, 0, 14, 91, 6540 }, // x - { 13, 20, 12, 0, 14, 125, 6631 }, // y - { 11, 14, 11, 0, 14, 51, 6756 }, // z - { 7, 25, 8, 0, 21, 61, 6807 }, // { - { 3, 24, 10, 4, 21, 14, 6868 }, // | - { 7, 25, 8, 1, 21, 59, 6882 }, // } - { 12, 4, 12, 0, 10, 33, 6941 }, // ~ - { 0, 0, 7, 0, 0, 8, 6974 }, // - { 4, 18, 6, 1, 12, 37, 6982 }, // ÂĄ - { 11, 22, 12, 1, 18, 77, 7019 }, // Âą - { 12, 18, 13, 1, 18, 78, 7096 }, // ÂŁ - { 14, 15, 14, 0, 16, 93, 7174 }, // € - { 14, 18, 13, 0, 18, 88, 7267 }, // „ - { 3, 23, 10, 4, 20, 19, 7355 }, // Š - { 11, 20, 13, 1, 18, 117, 7374 }, // § - { 9, 3, 10, 0, 20, 24, 7491 }, // š - { 16, 17, 20, 2, 20, 136, 7515 }, // © - { 11, 17, 13, 1, 17, 80, 7651 }, // ÂȘ - { 12, 14, 14, 1, 14, 90, 7731 }, // « - { 10, 6, 13, 1, 9, 25, 7821 }, // ÂŹ - { 8, 2, 10, 1, 9, 17, 7846 }, // ­ - { 14, 14, 16, 1, 19, 105, 7863 }, // Âź - { 8, 2, 8, 0, 19, 17, 7968 }, // ÂŻ - { 9, 8, 13, 1, 18, 45, 7985 }, // ° - { 10, 14, 13, 1, 15, 38, 8030 }, // ± - { 8, 11, 10, 1, 19, 52, 8068 }, // ÂČ - { 8, 11, 10, 1, 19, 55, 8120 }, // Âł - { 7, 6, 8, 0, 21, 27, 8175 }, // ÂŽ - { 11, 20, 15, 2, 14, 59, 8202 }, // ” - { 13, 24, 18, 2, 18, 63, 8261 }, // ¶ - { 4, 4, 6, 1, 10, 16, 8324 }, // · - { 7, 7, 7, 0, 1, 35, 8340 }, // ž - { 6, 11, 10, 1, 19, 23, 8375 }, // Âč - { 11, 17, 13, 1, 17, 70, 8398 }, // Âș - { 12, 14, 14, 1, 14, 90, 8468 }, // » - { 22, 21, 23, 1, 19, 148, 8558 }, // ÂŒ - { 21, 21, 23, 1, 19, 147, 8706 }, // Âœ - { 22, 21, 23, 1, 19, 170, 8853 }, // Ÿ - { 11, 19, 11, 0, 13, 83, 9023 }, // Âż - { 15, 23, 14, 0, 23, 134, 9106 }, // À - { 15, 23, 14, 0, 23, 136, 9240 }, // Á - { 15, 24, 14, 0, 24, 141, 9376 }, //  - { 15, 23, 14, 0, 23, 138, 9517 }, // à - { 15, 23, 14, 0, 23, 139, 9655 }, // Ä - { 15, 25, 14, 0, 25, 145, 9794 }, // Å - { 21, 18, 20, -1, 18, 143, 9939 }, // Æ - { 13, 25, 14, 1, 18, 129, 10082 }, // Ç - { 11, 23, 13, 2, 23, 60, 10211 }, // È - { 11, 23, 13, 2, 23, 62, 10271 }, // É - { 11, 24, 13, 2, 24, 69, 10333 }, // Ê - { 11, 23, 13, 2, 23, 63, 10402 }, // Ë - { 7, 23, 7, 0, 23, 31, 10465 }, // Ì - { 7, 23, 7, 0, 23, 29, 10496 }, // Í - { 9, 24, 7, -1, 24, 36, 10525 }, // Î - { 9, 23, 7, -1, 23, 30, 10561 }, // Ï - { 16, 18, 16, 0, 18, 103, 10591 }, // Ð - { 13, 23, 17, 2, 23, 110, 10694 }, // Ñ - { 15, 23, 17, 1, 23, 123, 10804 }, // Ò - { 15, 23, 17, 1, 23, 124, 10927 }, // Ó - { 15, 24, 17, 1, 24, 130, 11051 }, // Ô - { 15, 23, 17, 1, 23, 127, 11181 }, // Õ - { 15, 23, 17, 1, 23, 126, 11308 }, // Ö - { 10, 10, 13, 1, 13, 57, 11434 }, // × - { 15, 25, 17, 1, 22, 172, 11491 }, // Ø - { 13, 23, 17, 2, 23, 79, 11663 }, // Ù - { 13, 23, 17, 2, 23, 82, 11742 }, // Ú - { 13, 24, 17, 2, 24, 87, 11824 }, // Û - { 13, 23, 17, 2, 23, 82, 11911 }, // Ü - { 14, 23, 14, 0, 23, 98, 11993 }, // Ý - { 12, 18, 15, 2, 18, 69, 12091 }, // Þ - { 12, 20, 15, 2, 20, 110, 12160 }, // ß - { 12, 22, 13, 1, 21, 113, 12270 }, // Ă  - { 12, 22, 13, 1, 21, 110, 12383 }, // ĂĄ - { 12, 22, 13, 1, 21, 115, 12493 }, // Ăą - { 12, 21, 13, 1, 20, 108, 12608 }, // ĂŁ - { 12, 21, 13, 1, 20, 108, 12716 }, // Ă€ - { 12, 23, 13, 1, 22, 122, 12824 }, // Ă„ - { 19, 14, 21, 1, 14, 135, 12946 }, // ĂŠ - { 11, 20, 12, 1, 14, 93, 13081 }, // ç - { 12, 21, 14, 1, 21, 107, 13174 }, // Ăš - { 12, 21, 14, 1, 21, 109, 13281 }, // Ă© - { 12, 21, 14, 1, 21, 112, 13390 }, // ĂȘ - { 12, 20, 14, 1, 20, 105, 13502 }, // Ă« - { 7, 21, 7, 0, 21, 35, 13607 }, // ĂŹ - { 7, 21, 7, 0, 21, 30, 13642 }, // Ă­ - { 9, 21, 7, -1, 21, 36, 13672 }, // Ăź - { 9, 20, 7, -1, 20, 30, 13708 }, // ĂŻ - { 12, 21, 14, 1, 21, 127, 13738 }, // Ă° - { 11, 20, 14, 2, 20, 64, 13865 }, // ñ - { 13, 21, 15, 1, 21, 107, 13929 }, // ĂČ - { 13, 21, 15, 1, 21, 111, 14036 }, // Ăł - { 13, 21, 15, 1, 21, 114, 14147 }, // ĂŽ - { 13, 20, 15, 1, 20, 110, 14261 }, // Ă” - { 13, 20, 15, 1, 20, 109, 14371 }, // ö - { 10, 16, 13, 1, 17, 39, 14480 }, // Ă· - { 13, 22, 15, 1, 18, 135, 14519 }, // Ăž - { 11, 21, 14, 2, 21, 65, 14654 }, // Ăč - { 11, 21, 14, 2, 21, 62, 14719 }, // Ăș - { 11, 21, 14, 2, 21, 68, 14781 }, // Ă» - { 11, 20, 14, 2, 20, 62, 14849 }, // ĂŒ - { 13, 27, 12, 0, 21, 144, 14911 }, // Ăœ - { 12, 26, 15, 2, 20, 90, 15055 }, // ĂŸ - { 13, 26, 12, 0, 20, 145, 15145 }, // Ăż - { 8, 2, 10, 1, 9, 17, 15290 }, // ‐ - { 8, 2, 10, 1, 9, 17, 15307 }, // ‑ - { 14, 2, 14, 0, 10, 17, 15324 }, // ‒ - { 13, 2, 13, 0, 9, 17, 15341 }, // – - { 19, 2, 20, 0, 9, 17, 15358 }, // — - { 13, 2, 13, 0, 9, 17, 15375 }, // ― - { 7, 24, 14, 4, 21, 18, 15392 }, // ‖ - { 13, 4, 13, 0, -1, 18, 15410 }, // ‗ - { 4, 7, 6, 1, 20, 22, 15428 }, // ‘ - { 4, 7, 6, 1, 19, 23, 15450 }, // ’ - { 4, 7, 6, 1, 3, 23, 15473 }, // ‚ - { 3, 8, 7, 2, 17, 24, 15496 }, // ‛ - { 9, 7, 10, 1, 20, 44, 15520 }, // “ - { 9, 7, 10, 1, 19, 46, 15564 }, // ” - { 9, 7, 10, 1, 3, 46, 15610 }, // „ - { 8, 8, 12, 1, 17, 41, 15656 }, // ‟ - { 11, 17, 13, 1, 17, 31, 15697 }, // † - { 11, 17, 13, 1, 17, 33, 15728 }, // ‡ - { 6, 6, 8, 1, 12, 25, 15761 }, // ‱ - { 5, 7, 6, 1, 9, 27, 15786 }, // ‣ - { 3, 3, 8, 3, 0, 14, 15813 }, //   - { 11, 3, 17, 3, 0, 25, 15827 }, //   - { 17, 4, 18, 1, 4, 41, 15852 }, // 
 - { 4, 4, 6, 1, 8, 16, 15893 }, // ‧ - { 0, 0, 0, 0, 0, 8, 15909 }, // - { 0, 0, 0, 0, 0, 8, 15917 }, // - { 0, 0, 0, 0, 0, 8, 15925 }, // â€Ș - { 0, 0, 0, 0, 0, 8, 15933 }, // ‫ - { 0, 0, 0, 0, 0, 8, 15941 }, // ‬ - { 0, 0, 0, 0, 0, 8, 15949 }, // ‭ - { 0, 0, 0, 0, 0, 8, 15957 }, // ‼ - { 0, 0, 3, 0, 0, 8, 15965 }, //   - { 28, 20, 30, 1, 19, 204, 15973 }, // ‰ - { 36, 22, 37, 0, 20, 222, 16177 }, // ‱ - { 6, 10, 6, 0, 19, 39, 16399 }, // â€Č - { 11, 10, 11, 0, 19, 71, 16438 }, // ″ - { 15, 10, 15, 0, 19, 91, 16509 }, // ‮ - { 6, 10, 6, 0, 19, 39, 16600 }, // — - { 11, 10, 11, 0, 19, 68, 16639 }, // ‶ - { 15, 10, 15, 0, 19, 89, 16707 }, // ‷ - { 9, 9, 9, 0, 4, 50, 16796 }, // ‾ - { 7, 14, 9, 1, 14, 60, 16846 }, // â€č - { 7, 14, 9, 1, 14, 60, 16906 }, // â€ș - { 14, 14, 16, 1, 12, 90, 16966 }, // ※ - { 8, 18, 14, 3, 18, 74, 17056 }, // ‌ - { 9, 18, 11, 1, 18, 82, 17130 }, // “ - { 13, 1, 13, 0, 20, 12, 17212 }, // ‟ - { 17, 5, 17, 0, -1, 45, 17224 }, // ‿ - { 12, 3, 12, 0, 19, 25, 17269 }, // ⁀ - { 12, 19, 12, 0, 14, 86, 17294 }, // ⁁ - { 19, 19, 23, 2, 19, 132, 17380 }, // ⁂ - { 3, 3, 7, 2, 7, 12, 17512 }, // ⁃ - { 13, 21, 3, -5, 19, 71, 17524 }, // ⁄ - { 6, 23, 8, 1, 19, 24, 17595 }, // ⁅ - { 6, 23, 8, 1, 19, 25, 17619 }, // ⁆ - { 19, 18, 21, 1, 18, 132, 17644 }, // ⁇ - { 15, 18, 19, 1, 18, 125, 17776 }, // ⁈ - { 16, 18, 20, 3, 18, 114, 17901 }, // ⁉ - { 11, 20, 13, 1, 14, 90, 18015 }, // ⁊ - { 12, 21, 12, 0, 16, 46, 18105 }, // ⁋ - { 12, 15, 18, 3, 15, 58, 18151 }, // ⁌ - { 12, 15, 18, 3, 15, 57, 18209 }, // ⁍ - { 10, 10, 12, 1, 8, 58, 18266 }, // ⁎ - { 3, 16, 7, 2, 11, 33, 18324 }, // ⁏ - { 14, 13, 18, 2, 14, 64, 18357 }, // ⁐ - { 10, 21, 12, 1, 19, 92, 18421 }, // ⁑ - { 15, 22, 18, 1, 18, 100, 18513 }, // ⁒ - { 12, 5, 14, 1, 9, 37, 18613 }, // ⁓ - { 12, 3, 12, 0, -2, 26, 18650 }, // ⁔ - { 7, 8, 9, 1, 10, 41, 18676 }, // ⁕ - { 7, 11, 9, 1, 11, 25, 18717 }, // ⁖ - { 20, 10, 19, 0, 19, 111, 18742 }, // ⁗ - { 11, 11, 12, 1, 11, 33, 18853 }, // ⁘ - { 11, 11, 14, 2, 11, 33, 18886 }, // ⁙ - { 3, 17, 6, 2, 17, 21, 18919 }, // ⁚ - { 18, 23, 20, 1, 19, 48, 18940 }, // ⁛ - { 13, 13, 15, 1, 12, 54, 18988 }, // ⁜ - { 3, 17, 6, 2, 17, 21, 19042 }, // ⁝ - { 3, 24, 6, 2, 19, 24, 19063 }, // ⁞ - { 0, 0, 6, 0, 0, 8, 19087 }, //   - { 18, 16, 23, 2, 16, 62, 19095 }, // ← - { 17, 17, 23, 3, 17, 79, 19157 }, // ↑ - { 17, 16, 23, 3, 16, 64, 19236 }, // → - { 17, 17, 23, 3, 16, 79, 19300 }, // ↓ - { 28, 16, 32, 2, 16, 97, 19379 }, // ↔ - { 17, 27, 23, 3, 22, 133, 19476 }, // ↕ - { 14, 13, 20, 3, 14, 77, 19609 }, // ↖ - { 14, 13, 20, 3, 15, 74, 19686 }, // ↗ - { 14, 14, 20, 3, 15, 75, 19760 }, // ↘ - { 14, 14, 23, 4, 15, 77, 19835 }, // ↙ - { 23, 15, 25, 1, 15, 88, 19912 }, // ↚ - { 23, 15, 25, 1, 15, 90, 20000 }, // ↛ - { 23, 14, 25, 1, 14, 94, 20090 }, // ↜ - { 23, 14, 25, 1, 14, 94, 20184 }, // ↝ - { 23, 14, 25, 1, 14, 86, 20278 }, // ↞ - { 12, 22, 13, 0, 18, 80, 20364 }, // ↟ - { 23, 15, 25, 1, 15, 72, 20444 }, // ↠ - { 12, 22, 13, 0, 18, 76, 20516 }, // ↡ - { 23, 14, 25, 1, 14, 100, 20592 }, // ↱ - { 23, 14, 25, 1, 14, 96, 20692 }, // ↣ - { 23, 15, 25, 1, 15, 76, 20788 }, // ↀ - { 12, 24, 13, 0, 19, 60, 20864 }, // ↄ - { 23, 15, 25, 1, 15, 73, 20924 }, // ↩ - { 13, 24, 13, 0, 19, 63, 20997 }, // ↧ - { 12, 24, 13, 0, 19, 86, 21060 }, // ↹ - { 23, 15, 25, 1, 15, 87, 21146 }, // ↩ - { 23, 15, 25, 1, 15, 82, 21233 }, // â†Ș - { 24, 15, 25, 1, 15, 102, 21315 }, // ↫ - { 24, 15, 25, 1, 15, 102, 21417 }, // ↬ - { 28, 14, 31, 1, 14, 129, 21519 }, // ↭ - { 29, 15, 31, 1, 15, 127, 21648 }, // ↼ - { 23, 25, 25, 1, 19, 127, 21775 }, // ↯ - { 10, 19, 13, 1, 18, 50, 21902 }, // ↰ - { 10, 19, 13, 1, 18, 50, 21952 }, // ↱ - { 10, 19, 13, 1, 19, 48, 22002 }, // â†Č - { 10, 19, 13, 1, 19, 43, 22050 }, // ↳ - { 10, 19, 13, 1, 18, 41, 22093 }, // ↮ - { 20, 19, 25, 1, 19, 66, 22134 }, // ↔ - { 24, 13, 25, 0, 12, 100, 22200 }, // ↶ - { 24, 13, 25, 1, 12, 101, 22300 }, // ↷ - { 23, 24, 25, 1, 20, 76, 22401 }, // ↾ - { 22, 22, 25, 2, 18, 112, 22477 }, // â†č - { 18, 20, 19, 1, 18, 119, 22589 }, // â†ș - { 18, 20, 19, 1, 18, 118, 22708 }, // ↻ - { 23, 8, 25, 1, 15, 37, 22826 }, // ↌ - { 23, 8, 25, 1, 8, 36, 22863 }, // ↜ - { 8, 23, 13, 5, 19, 44, 22899 }, // ↟ - { 8, 23, 13, -1, 19, 40, 22943 }, // ↿ - { 23, 8, 25, 1, 15, 38, 22983 }, // ⇀ - { 23, 8, 25, 1, 8, 38, 23021 }, // ⇁ - { 8, 23, 13, 5, 19, 37, 23059 }, // ⇂ - { 8, 23, 13, -1, 19, 41, 23096 }, // ⇃ - { 23, 21, 25, 1, 18, 92, 23137 }, // ⇄ - { 21, 22, 21, 0, 18, 92, 23229 }, // ⇅ - { 23, 21, 25, 1, 18, 95, 23321 }, // ⇆ - { 23, 22, 25, 1, 18, 80, 23416 }, // ⇇ - { 21, 22, 21, 0, 18, 80, 23496 }, // ⇈ - { 23, 22, 25, 1, 18, 76, 23576 }, // ⇉ - { 21, 22, 21, 0, 18, 79, 23652 }, // ⇊ - { 23, 20, 25, 1, 17, 68, 23731 }, // ⇋ - { 23, 20, 25, 1, 17, 68, 23799 }, // ⇌ - { 23, 14, 25, 1, 14, 105, 23867 }, // ⇍ - { 29, 14, 31, 1, 14, 122, 23972 }, // ⇎ - { 23, 14, 25, 1, 14, 104, 24094 }, // ⇏ - { 23, 14, 25, 1, 14, 69, 24198 }, // ⇐ - { 14, 23, 15, 1, 19, 65, 24267 }, // ⇑ - { 23, 14, 25, 1, 14, 59, 24332 }, // ⇒ - { 14, 23, 15, 1, 19, 66, 24391 }, // ⇓ - { 29, 14, 31, 1, 14, 86, 24457 }, // ⇔ - { 14, 26, 15, 1, 20, 101, 24543 }, // ⇕ - { 23, 23, 25, 1, 18, 101, 24644 }, // ⇖ - { 23, 23, 25, 1, 18, 107, 24745 }, // ⇗ - { 23, 23, 25, 1, 19, 96, 24852 }, // ⇘ - { 23, 23, 25, 1, 19, 99, 24948 }, // ⇙ - { 23, 18, 25, 1, 16, 76, 25047 }, // ⇚ - { 23, 18, 25, 1, 16, 74, 25123 }, // ⇛ - { 23, 9, 25, 1, 12, 70, 25197 }, // ⇜ - { 23, 9, 25, 1, 12, 75, 25267 }, // ⇝ - { 13, 22, 13, 0, 18, 86, 25342 }, // ⇞ - { 13, 22, 13, 0, 18, 88, 25428 }, // ⇟ - { 23, 15, 25, 1, 15, 63, 25516 }, // ⇠ - { 13, 23, 13, 0, 19, 64, 25579 }, // ⇡ - { 23, 15, 25, 1, 15, 61, 25643 }, // ⇱ - { 13, 23, 13, 0, 19, 63, 25704 }, // ⇣ - { 22, 15, 25, 2, 15, 71, 25767 }, // ⇀ - { 22, 15, 25, 1, 15, 74, 25838 }, // ⇄ - { 22, 16, 24, 1, 16, 83, 25912 }, // ⇩ - { 16, 23, 18, 1, 22, 79, 25995 }, // ⇧ - { 22, 16, 24, 1, 16, 85, 26074 }, // ⇹ - { 16, 22, 18, 1, 19, 80, 26159 }, // ⇩ - { 16, 23, 18, 1, 22, 97, 26239 }, // â‡Ș - { 14, 22, 15, 0, 18, 81, 26336 }, // ⇫ - { 14, 23, 15, 0, 19, 84, 26417 }, // ⇬ - { 14, 22, 15, 0, 18, 86, 26501 }, // ⇭ - { 14, 22, 15, 1, 18, 99, 26587 }, // ⇼ - { 14, 22, 15, 1, 18, 113, 26686 }, // ⇯ - { 22, 14, 25, 2, 14, 67, 26799 }, // ⇰ - { 16, 19, 19, 2, 17, 91, 26866 }, // ⇱ - { 16, 18, 19, 1, 18, 88, 26957 }, // â‡Č - { 14, 25, 15, 1, 20, 82, 27045 }, // ⇳ - { 23, 15, 25, 1, 15, 101, 27127 }, // ⇮ - { 21, 22, 21, 0, 18, 95, 27228 }, // ⇔ - { 23, 26, 25, 1, 20, 103, 27323 }, // ⇶ - { 23, 14, 25, 1, 14, 87, 27426 }, // ⇷ - { 23, 14, 25, 1, 14, 83, 27513 }, // ⇾ - { 23, 14, 25, 1, 14, 125, 27596 }, // â‡č - { 23, 14, 25, 1, 14, 92, 27721 }, // â‡ș - { 23, 14, 25, 1, 14, 88, 27813 }, // ⇻ - { 23, 14, 25, 1, 14, 128, 27901 }, // ⇌ - { 24, 15, 25, 1, 15, 77, 28029 }, // ⇜ - { 24, 15, 25, 1, 15, 74, 28106 }, // ⇟ - { 22, 14, 25, 2, 14, 94, 28180 }, // ⇿ - { 17, 16, 19, 1, 15, 131, 28274 }, // ⌀ - { 25, 14, 27, 1, 16, 100, 28405 }, // ⌁ - { 14, 17, 20, 3, 17, 66, 28505 }, // ⌂ - { 12, 8, 15, 2, 20, 44, 28571 }, // ⌃ - { 12, 8, 15, 2, 3, 46, 28615 }, // ⌄ - { 13, 11, 15, 1, 13, 52, 28661 }, // ⌅ - { 13, 16, 15, 1, 18, 55, 28713 }, // ⌆ - { 7, 26, 10, 1, 20, 70, 28768 }, // ⌇ - { 7, 25, 11, 4, 20, 21, 28838 }, // ⌈ - { 7, 25, 11, 0, 20, 18, 28859 }, // ⌉ - { 7, 25, 11, 4, 20, 19, 28877 }, // ⌊ - { 7, 25, 11, 0, 20, 22, 28896 }, // ⌋ - { 10, 10, 13, 1, 17, 21, 28918 }, // ⌌ - { 10, 10, 13, 1, 17, 18, 28939 }, // ⌍ - { 10, 10, 13, 1, 9, 18, 28957 }, // ⌎ - { 10, 10, 13, 1, 9, 22, 28975 }, // ⌏ - { 14, 7, 19, 4, 9, 21, 28997 }, // ⌐ - { 9, 8, 13, 2, 11, 31, 29018 }, // ⌑ - { 17, 10, 19, 1, 16, 65, 29049 }, // ⌒ - { 17, 9, 19, 1, 16, 64, 29114 }, // ⌓ - { 16, 10, 19, 2, 16, 73, 29178 }, // ⌔ - { 12, 12, 14, 0, 12, 67, 29251 }, // ⌕ - { 14, 14, 14, 0, 15, 75, 29318 }, // ⌖ - { 14, 14, 14, 0, 15, 58, 29393 }, // ⌗ - { 14, 14, 14, 0, 15, 77, 29451 }, // ⌘ - { 14, 7, 19, 4, 14, 18, 29528 }, // ⌙ - { 18, 18, 20, 1, 17, 169, 29546 }, // ⌚ - { 14, 24, 17, 1, 19, 165, 29715 }, // ⌛ - { 10, 10, 13, 1, 17, 21, 29880 }, // ⌜ - { 10, 10, 13, 1, 17, 18, 29901 }, // ⌝ - { 10, 10, 13, 1, 9, 18, 29919 }, // ⌞ - { 10, 10, 13, 1, 9, 22, 29937 }, // ⌟ - { 17, 33, 16, -1, 24, 75, 29959 }, // ⌠ - { 17, 33, 16, 0, 24, 83, 30034 }, // ⌡ - { 18, 5, 17, 0, 10, 44, 30117 }, // ⌱ - { 18, 5, 17, 0, 10, 41, 30161 }, // ⌣ - { 16, 12, 20, 2, 14, 71, 30202 }, // ⌀ - { 14, 14, 20, 3, 14, 64, 30273 }, // ⌄ - { 32, 18, 35, 2, 18, 129, 30337 }, // 〈 - { 27, 18, 31, 2, 18, 93, 30466 }, // ⌧ - { 31, 19, 37, 3, 18, 173, 30559 }, // ⌹ - { 7, 25, 10, 2, 20, 80, 30732 }, // 〈 - { 6, 25, 10, 1, 20, 70, 30812 }, // âŒȘ - { 32, 18, 37, 2, 18, 133, 30882 }, // ⌫ - { 19, 22, 23, 2, 18, 130, 31015 }, // ⌬ - { 21, 15, 20, 0, 15, 131, 31145 }, // ⌭ - { 20, 15, 20, 0, 14, 126, 31276 }, // ⌼ - { 19, 8, 20, 0, 10, 25, 31402 }, // ⌯ - { 18, 12, 20, 1, 12, 72, 31427 }, // ⌰ - { 16, 14, 20, 2, 15, 75, 31499 }, // ⌱ - { 16, 15, 20, 2, 15, 68, 31574 }, // âŒČ - { 16, 9, 20, 2, 15, 42, 31642 }, // ⌳ - { 16, 14, 20, 2, 14, 26, 31684 }, // ⌮ - { 16, 12, 20, 2, 12, 77, 31710 }, // ⌔ - { 17, 17, 19, 1, 17, 24, 31787 }, // ⌶ - { 10, 17, 12, 1, 16, 22, 31811 }, // ⌷ - { 17, 19, 19, 1, 18, 26, 31833 }, // ⌾ - { 17, 19, 19, 1, 18, 48, 31859 }, // âŒč - { 17, 19, 19, 1, 18, 123, 31907 }, // âŒș - { 17, 19, 19, 1, 18, 67, 32030 }, // ⌻ - { 17, 19, 19, 1, 18, 126, 32097 }, // ⌌ - { 17, 23, 19, 1, 19, 130, 32223 }, // ⌜ - { 20, 19, 19, 0, 17, 156, 32353 }, // ⌟ - { 16, 15, 16, 0, 15, 61, 32509 }, // ⌿ - { 16, 15, 16, 0, 15, 56, 32570 }, // ⍀ - { 17, 17, 19, 1, 16, 67, 32626 }, // ⍁ - { 17, 17, 19, 1, 16, 68, 32693 }, // ⍂ - { 17, 17, 19, 1, 16, 74, 32761 }, // ⍃ - { 17, 17, 19, 1, 16, 74, 32835 }, // ⍄ - { 23, 25, 25, 1, 20, 91, 32909 }, // ⍅ - { 23, 25, 25, 1, 20, 86, 33000 }, // ⍆ - { 17, 19, 19, 1, 18, 64, 33086 }, // ⍇ - { 17, 19, 19, 1, 18, 63, 33150 }, // ⍈ - { 18, 20, 19, 1, 17, 148, 33213 }, // ⍉ - { 18, 20, 18, 0, 17, 27, 33361 }, // ⍊ - { 19, 24, 21, 1, 19, 112, 33388 }, // ⍋ - { 17, 17, 19, 1, 16, 76, 33500 }, // ⍌ - { 17, 19, 19, 1, 18, 113, 33576 }, // ⍍ - { 17, 17, 19, 1, 17, 82, 33689 }, // ⍎ - { 22, 23, 20, -1, 19, 71, 33771 }, // ⍏ - { 17, 19, 19, 1, 18, 67, 33842 }, // ⍐ - { 18, 20, 18, 0, 16, 27, 33909 }, // ⍑ - { 19, 24, 21, 1, 19, 137, 33936 }, // ⍒ - { 17, 17, 19, 1, 16, 76, 34073 }, // ⍓ - { 17, 19, 19, 1, 18, 117, 34149 }, // ⍔ - { 17, 17, 19, 1, 17, 81, 34266 }, // ⍕ - { 22, 23, 20, -1, 19, 72, 34347 }, // ⍖ - { 17, 19, 19, 1, 18, 64, 34419 }, // ⍗ - { 16, 13, 19, 2, 17, 46, 34483 }, // ⍘ - { 20, 22, 21, 0, 18, 112, 34529 }, // ⍙ - { 19, 21, 19, 0, 17, 106, 34641 }, // ⍚ - { 16, 13, 19, 2, 17, 51, 34747 }, // ⍛ - { 18, 20, 19, 1, 16, 94, 34798 }, // ⍜ - { 19, 26, 21, 1, 20, 135, 34892 }, // ⍝ - { 17, 19, 19, 1, 18, 52, 35027 }, // ⍞ - { 18, 18, 19, 1, 16, 147, 35079 }, // ⍟ - { 17, 19, 19, 1, 18, 44, 35226 }, // ⍠ - { 17, 22, 19, 1, 20, 45, 35270 }, // ⍡ - { 20, 24, 21, 0, 20, 144, 35315 }, // ⍱ - { 13, 18, 13, 0, 20, 93, 35459 }, // ⍣ - { 11, 16, 13, 1, 20, 51, 35552 }, // ⍀ - { 18, 22, 19, 1, 20, 113, 35603 }, // ⍄ - { 13, 19, 17, 1, 17, 58, 35716 }, // ⍊ - { 16, 21, 19, 2, 18, 80, 35774 }, // ⍧ - { 18, 15, 19, 1, 19, 73, 35854 }, // ⍚ - { 16, 20, 19, 2, 19, 89, 35927 }, // ⍩ - { 16, 12, 19, 2, 8, 41, 36016 }, // âȘ - { 19, 18, 21, 1, 17, 134, 36057 }, // ⍫ - { 17, 18, 16, 0, 18, 144, 36191 }, // ⍬ - { 15, 25, 15, 0, 20, 61, 36335 }, // ⍭ - { 13, 16, 15, 1, 15, 54, 36396 }, // ⍼ - { 17, 19, 19, 1, 18, 66, 36450 }, // ⍯ - { 17, 19, 19, 1, 18, 79, 36516 }, // ⍰ - { 14, 16, 17, 1, 15, 95, 36595 }, // ⍱ - { 15, 16, 17, 1, 15, 106, 36690 }, // âČ - { 8, 12, 9, 0, 12, 36, 36796 }, // ⍳ - { 11, 17, 12, 0, 12, 87, 36832 }, // ⍎ - { 15, 12, 16, 1, 12, 98, 36919 }, // ⍔ - { 14, 16, 15, 1, 12, 102, 37017 }, // ⍶ - { 11, 16, 11, 0, 12, 81, 37119 }, // ⍷ - { 9, 16, 9, 0, 12, 49, 37200 }, // ⍞ - { 15, 16, 16, 1, 12, 106, 37249 }, // âč - { 14, 12, 15, 1, 12, 95, 37355 }, // âș - { 16, 18, 19, 1, 17, 87, 37450 }, // ⍻ - { 20, 24, 23, 2, 18, 101, 37537 }, // ⍌ - { 20, 13, 19, 0, 13, 33, 37638 }, // ⍜ - { 17, 15, 20, 1, 15, 80, 37671 }, // ⍟ - { 7, 25, 8, 0, 20, 47, 37751 }, // ⍿ - { 14, 25, 17, 1, 19, 138, 37798 }, // ⎀ - { 21, 11, 25, 2, 11, 79, 37936 }, // ⎁ - { 22, 11, 25, 2, 11, 121, 38015 }, // ⎂ - { 21, 18, 24, 2, 16, 137, 38136 }, // ⎃ - { 21, 17, 23, 1, 17, 100, 38273 }, // ⎄ - { 17, 23, 19, 1, 20, 56, 38373 }, // ⎅ - { 24, 24, 25, 1, 19, 156, 38429 }, // ⎆ - { 19, 13, 22, 1, 13, 66, 38585 }, // ⎇ - { 21, 21, 24, 2, 18, 183, 38651 }, // ⎈ - { 19, 18, 19, 0, 16, 151, 38834 }, // ⎉ - { 18, 18, 19, 1, 16, 127, 38985 }, // ⎊ - { 18, 18, 19, 1, 16, 144, 39112 }, // ⎋ - { 17, 19, 19, 1, 19, 100, 39256 }, // ⎌ - { 18, 16, 19, 1, 16, 27, 39356 }, // ⎍ - { 20, 16, 21, 1, 16, 94, 39383 }, // ⎎ - { 18, 17, 19, 1, 17, 96, 39477 }, // ⎏ - { 17, 17, 19, 1, 17, 89, 39573 }, // ⎐ - { 18, 17, 19, 1, 17, 102, 39662 }, // ⎑ - { 17, 17, 19, 1, 17, 107, 39764 }, // ⎒ - { 17, 5, 19, 1, 9, 25, 39871 }, // ⎓ - { 20, 18, 22, 1, 16, 88, 39896 }, // ⎔ - { 17, 17, 19, 1, 17, 22, 39984 }, // ⎕ - { 7, 10, 9, 1, 17, 41, 40006 }, // ⎖ - { 19, 23, 21, 1, 18, 114, 40047 }, // ⎗ - { 19, 23, 21, 1, 18, 120, 40161 }, // ⎘ - { 24, 25, 26, 1, 19, 111, 40281 }, // ⎙ - { 24, 18, 26, 1, 18, 136, 40392 }, // ⎚ - { 13, 32, 13, 0, 23, 80, 40528 }, // ⎛ - { 13, 32, 13, 0, 23, 19, 40608 }, // ⎜ - { 13, 32, 13, 0, 23, 78, 40627 }, // ⎝ - { 13, 32, 13, 0, 23, 81, 40705 }, // ⎞ - { 13, 32, 13, 0, 23, 21, 40786 }, // ⎟ - { 13, 32, 13, 0, 23, 83, 40807 }, // ⎠ - { 13, 32, 13, 0, 23, 34, 40890 }, // ⎡ - { 13, 32, 13, 0, 23, 19, 40924 }, // ⎱ - { 13, 32, 13, 0, 23, 28, 40943 }, // ⎣ - { 13, 32, 13, 0, 23, 32, 40971 }, // ⎀ - { 13, 32, 13, 0, 23, 21, 41003 }, // ⎄ - { 13, 32, 13, 0, 23, 34, 41024 }, // ⎊ - { 14, 33, 13, -1, 24, 33, 41058 }, // ⎧ - { 14, 32, 13, -1, 23, 42, 41091 }, // ⎚ - { 14, 33, 13, -1, 24, 33, 41133 }, // ⎩ - { 14, 32, 13, -1, 23, 19, 41166 }, // âŽȘ - { 14, 33, 13, -1, 24, 29, 41185 }, // ⎫ - { 14, 32, 13, -1, 23, 44, 41214 }, // ⎬ - { 14, 33, 13, -1, 24, 30, 41258 }, // ⎭ - { 18, 32, 16, -1, 23, 24, 41288 }, // ⎼ - { 29, 1, 25, -2, 8, 14, 41312 }, // ⎯ - { 12, 26, 13, 0, 20, 56, 41326 }, // ⎰ - { 12, 26, 13, 0, 20, 48, 41382 }, // ⎱ - { 41, 33, 41, 0, 24, 155, 41430 }, // âŽČ - { 41, 32, 41, 0, 23, 142, 41585 }, // ⎳ - { 23, 6, 23, 0, 1, 22, 41727 }, // ⎮ - { 23, 6, 23, 0, 6, 22, 41749 }, // ⎔ - { 23, 16, 23, 0, 11, 33, 41771 }, // ⎶ - { 17, 25, 17, 1, 20, 117, 41804 }, // ⎷ - { 1, 16, 19, 2, 15, 12, 41921 }, // ⎾ - { 1, 16, 19, 16, 15, 12, 41933 }, // âŽč - { 13, 2, 13, 0, 16, 15, 41945 }, // âŽș - { 13, 2, 13, 0, 12, 15, 41960 }, // ⎻ - { 13, 2, 13, 0, 4, 15, 41975 }, // ⎌ - { 13, 2, 13, 0, 0, 15, 41990 }, // ⎜ - { 5, 14, 7, 1, 13, 19, 42005 }, // ⎟ - { 5, 13, 7, 1, 13, 17, 42024 }, // ⎿ - { 14, 19, 15, 1, 17, 96, 42041 }, // ⏀ - { 13, 19, 15, 1, 17, 99, 42137 }, // ⏁ - { 13, 19, 15, 1, 17, 99, 42236 }, // ⏂ - { 14, 19, 15, 0, 17, 96, 42335 }, // ⏃ - { 14, 19, 15, 0, 17, 93, 42431 }, // ⏄ - { 14, 19, 15, 0, 17, 89, 42524 }, // ⏅ - { 15, 19, 15, 0, 17, 63, 42613 }, // ⏆ - { 15, 19, 15, 0, 17, 72, 42676 }, // ⏇ - { 15, 19, 15, 0, 17, 68, 42748 }, // ⏈ - { 11, 19, 15, 2, 17, 23, 42816 }, // ⏉ - { 11, 19, 15, 2, 17, 21, 42839 }, // ⏊ - { 5, 14, 7, 1, 13, 20, 42860 }, // ⏋ - { 5, 13, 7, 1, 13, 19, 42880 }, // ⏌ - { 15, 13, 17, 1, 13, 52, 42899 }, // ⏍ - { 23, 19, 25, 0, 19, 108, 42951 }, // ⏎ - { 16, 19, 20, 2, 19, 89, 43059 }, // ⏏ - { 1, 25, 13, 6, 20, 12, 43148 }, // ⏐ - { 16, 5, 19, 2, 9, 41, 43160 }, // ⏑ - { 16, 8, 19, 2, 11, 47, 43201 }, // ⏒ - { 17, 9, 19, 1, 12, 49, 43248 }, // ⏓ - { 30, 8, 31, 1, 11, 73, 43297 }, // ⏔ - { 30, 9, 31, 1, 12, 72, 43370 }, // ⏕ - { 30, 5, 31, 1, 9, 67, 43442 }, // ⏖ - { 16, 9, 19, 1, 12, 22, 43509 }, // ⏗ - { 15, 9, 19, 2, 12, 21, 43531 }, // ⏘ - { 15, 9, 19, 2, 12, 28, 43552 }, // ⏙ - { 18, 23, 18, 0, 19, 48, 43580 }, // ⏚ - { 21, 10, 25, 2, 10, 36, 43628 }, // ⏛ - { 23, 8, 23, 0, 4, 66, 43664 }, // ⏜ - { 23, 7, 23, 0, 4, 56, 43730 }, // ⏝ - { 23, 10, 23, 0, 5, 63, 43786 }, // ⏞ - { 23, 10, 23, 0, 5, 67, 43849 }, // ⏟ - { 23, 6, 23, 0, 1, 49, 43916 }, // ⏠ - { 23, 5, 23, 0, 4, 43, 43965 }, // ⏡ - { 18, 17, 19, 1, 17, 106, 44008 }, // ⏱ - { 19, 22, 23, 2, 18, 117, 44114 }, // ⏣ - { 20, 1, 24, 2, 8, 13, 44231 }, // ⏀ - { 22, 10, 24, 1, 10, 78, 44244 }, // ⏄ - { 25, 16, 25, 0, 16, 106, 44322 }, // ⏊ - { 20, 24, 25, 2, 18, 154, 44428 }, // ⏧ - { 15, 13, 17, 1, 9, 89, 44582 }, // ⏚ - { 18, 17, 20, 1, 15, 106, 44671 }, // ⏩ - { 18, 17, 20, 1, 15, 99, 44777 }, // âȘ - { 16, 17, 20, 2, 15, 80, 44876 }, // ⏫ - { 16, 17, 20, 2, 15, 85, 44956 }, // ⏬ - { 19, 16, 20, 0, 15, 116, 45041 }, // ⏭ - { 19, 16, 20, 1, 15, 96, 45157 }, // ⏼ - { 19, 16, 20, 1, 15, 69, 45253 }, // ⏯ - { 21, 22, 25, 2, 19, 226, 45322 }, // ⏰ - { 21, 23, 25, 2, 20, 194, 45548 }, // ⏱ - { 21, 20, 25, 2, 17, 183, 45742 }, // âČ - { 15, 23, 19, 2, 19, 161, 45925 }, // ⏳ - { 8, 17, 20, 6, 16, 51, 46086 }, // ⏎ - { 8, 17, 20, 6, 16, 60, 46137 }, // ⏔ - { 16, 9, 20, 2, 12, 50, 46197 }, // ⏶ - { 16, 9, 20, 2, 10, 44, 46247 }, // ⏷ - { 10, 16, 20, 5, 15, 20, 46291 }, // ⏞ - { 15, 15, 20, 3, 15, 18, 46311 }, // âč - { 15, 15, 20, 3, 15, 72, 46329 }, // âș - { 19, 19, 21, 1, 19, 131, 46401 }, // ⏻ - { 20, 20, 22, 1, 20, 150, 46532 }, // ⏌ - { 3, 13, 7, 2, 15, 13, 46682 }, // ⏜ - { 13, 12, 17, 2, 15, 65, 46695 }, // ⏟ - { 25, 14, 25, 0, 15, 143, 46760 }, // ⏿ - { 17, 18, 19, 1, 16, 24, 46903 }, // ■ - { 17, 18, 19, 1, 16, 34, 46927 }, // □ - { 17, 18, 19, 1, 16, 76, 46961 }, // ▱ - { 17, 18, 19, 1, 16, 45, 47037 }, // ▣ - { 17, 18, 19, 1, 16, 46, 47082 }, // â–€ - { 17, 18, 19, 1, 16, 41, 47128 }, // â–„ - { 17, 18, 19, 1, 16, 57, 47169 }, // ▩ - { 17, 18, 19, 1, 16, 125, 47226 }, // ▧ - { 17, 18, 19, 1, 16, 126, 47351 }, // ▹ - { 17, 18, 19, 1, 16, 153, 47477 }, // ▩ - { 8, 8, 10, 1, 11, 19, 47630 }, // â–Ș - { 8, 8, 10, 1, 11, 28, 47649 }, // ▫ - { 15, 8, 17, 1, 11, 20, 47677 }, // ▬ - { 15, 8, 17, 1, 11, 31, 47697 }, // ▭ - { 8, 15, 10, 1, 15, 18, 47728 }, // ▼ - { 11, 18, 15, 2, 18, 30, 47746 }, // ▯ - { 20, 8, 20, 0, 11, 43, 47776 }, // ▰ - { 20, 8, 20, 0, 11, 63, 47819 }, // ▱ - { 20, 17, 22, 1, 18, 89, 47882 }, // â–Č - { 19, 15, 19, 0, 15, 94, 47971 }, // △ - { 12, 9, 13, 0, 13, 53, 48065 }, // ▮ - { 9, 7, 9, 0, 11, 41, 48118 }, // â–” - { 17, 19, 22, 3, 18, 79, 48159 }, // ▶ - { 16, 19, 17, 1, 17, 90, 48238 }, // ▷ - { 9, 12, 13, 2, 14, 51, 48328 }, // ▾ - { 8, 9, 8, 0, 12, 42, 48379 }, // â–č - { 12, 13, 15, 2, 15, 54, 48421 }, // â–ș - { 21, 14, 23, 2, 14, 86, 48475 }, // ▻ - { 20, 17, 22, 1, 17, 89, 48561 }, // â–Œ - { 19, 15, 19, 0, 15, 98, 48650 }, // â–œ - { 12, 9, 13, 0, 11, 53, 48748 }, // â–Ÿ - { 9, 8, 9, 0, 11, 43, 48801 }, // ▿ - { 17, 19, 22, 2, 18, 87, 48844 }, // ◀ - { 16, 19, 17, 0, 17, 92, 48931 }, // ◁ - { 10, 12, 13, 1, 14, 53, 49023 }, // ◂ - { 7, 9, 8, 0, 12, 41, 49076 }, // ◃ - { 12, 13, 15, 1, 15, 57, 49117 }, // ◄ - { 21, 14, 23, 0, 14, 98, 49174 }, // ◅ - { 20, 20, 20, 0, 17, 81, 49272 }, // ◆ - { 20, 20, 20, 0, 17, 97, 49353 }, // ◇ - { 20, 20, 20, 0, 17, 121, 49450 }, // ◈ - { 20, 19, 19, 0, 17, 167, 49571 }, // ◉ - { 13, 17, 13, 0, 17, 102, 49738 }, // ◊ - { 20, 19, 19, 0, 17, 128, 49840 }, // ○ - { 13, 13, 13, 0, 12, 85, 49968 }, // ◌ - { 20, 20, 19, 0, 17, 134, 50053 }, // ◍ - { 20, 19, 19, 0, 17, 163, 50187 }, // ◎ - { 18, 18, 22, 2, 18, 100, 50350 }, // ● - { 20, 19, 19, 0, 17, 121, 50450 }, // ◐ - { 20, 19, 19, 0, 17, 119, 50571 }, // ◑ - { 20, 20, 19, 0, 17, 123, 50690 }, // ◒ - { 20, 19, 19, 0, 17, 121, 50813 }, // ◓ - { 20, 19, 19, 0, 17, 135, 50934 }, // ◔ - { 20, 20, 19, 0, 17, 122, 51069 }, // ◕ - { 10, 20, 11, 0, 17, 72, 51191 }, // ◖ - { 10, 20, 11, 1, 17, 69, 51263 }, // ◗ - { 25, 26, 25, 0, 20, 64, 51332 }, // ◘ - { 26, 26, 25, 0, 20, 137, 51396 }, // ◙ - { 26, 13, 25, 0, 20, 85, 51533 }, // ◚ - { 26, 13, 25, 0, 7, 88, 51618 }, // ◛ - { 10, 10, 19, 0, 17, 47, 51706 }, // ◜ - { 10, 10, 19, 9, 17, 41, 51753 }, // ◝ - { 10, 10, 19, 9, 8, 48, 51794 }, // ◞ - { 10, 10, 19, 0, 8, 42, 51842 }, // ◟ - { 20, 10, 19, 0, 17, 74, 51884 }, // ◠ - { 20, 10, 19, 0, 8, 72, 51958 }, // ◡ - { 17, 18, 19, 1, 16, 63, 52030 }, // ◱ - { 17, 18, 19, 1, 16, 58, 52093 }, // ◣ - { 17, 18, 19, 1, 16, 68, 52151 }, // â—€ - { 17, 18, 19, 1, 16, 59, 52219 }, // â—„ - { 9, 9, 9, 0, 12, 49, 52278 }, // ◩ - { 17, 18, 19, 1, 16, 35, 52327 }, // ◧ - { 17, 18, 19, 1, 16, 34, 52362 }, // ◹ - { 17, 18, 19, 1, 16, 72, 52396 }, // ◩ - { 17, 18, 19, 1, 16, 64, 52468 }, // â—Ș - { 17, 18, 19, 1, 16, 41, 52532 }, // ◫ - { 19, 15, 19, 0, 15, 106, 52573 }, // ◬ - { 19, 15, 19, 0, 15, 104, 52679 }, // ◭ - { 19, 15, 19, 0, 15, 105, 52783 }, // ◼ - { 25, 24, 25, 0, 19, 132, 52888 }, // ◯ - { 17, 18, 19, 1, 16, 50, 53020 }, // ◰ - { 17, 18, 19, 1, 16, 52, 53070 }, // ◱ - { 17, 18, 19, 1, 16, 52, 53122 }, // â—Č - { 17, 18, 19, 1, 16, 50, 53174 }, // ◳ - { 19, 19, 19, 0, 17, 144, 53224 }, // ◮ - { 19, 19, 19, 0, 17, 143, 53368 }, // â—” - { 19, 19, 19, 0, 17, 144, 53511 }, // ◶ - { 19, 19, 19, 0, 17, 149, 53655 }, // ◷ - { 18, 18, 19, 1, 16, 69, 53804 }, // ◾ - { 17, 18, 19, 1, 16, 72, 53873 }, // â—č - { 18, 18, 19, 1, 16, 69, 53945 }, // â—ș - { 13, 14, 16, 1, 14, 28, 54014 }, // ◻ - { 13, 13, 16, 1, 14, 19, 54042 }, // â—Œ - { 10, 10, 12, 1, 12, 29, 54061 }, // â—œ - { 10, 10, 12, 1, 12, 18, 54090 }, // â—Ÿ - { 17, 18, 19, 1, 16, 78, 54108 }, // ◿ - { 24, 23, 25, 1, 19, 198, 54186 }, // ☀ - { 25, 14, 25, 0, 17, 141, 54384 }, // ☁ - { 25, 19, 26, 1, 14, 127, 54525 }, // ☂ - { 25, 23, 25, 0, 20, 222, 54652 }, // ☃ - { 26, 14, 25, 0, 11, 103, 54874 }, // ☄ - { 18, 18, 20, 1, 17, 100, 54977 }, // ★ - { 18, 17, 20, 1, 17, 117, 55077 }, // ☆ - { 10, 18, 12, 1, 17, 73, 55194 }, // ☇ - { 15, 20, 17, 1, 17, 98, 55267 }, // ☈ - { 20, 19, 19, 0, 17, 152, 55365 }, // ☉ - { 23, 17, 24, 0, 16, 143, 55517 }, // ☊ - { 23, 16, 24, 0, 16, 140, 55660 }, // ☋ - { 11, 12, 14, 1, 12, 65, 55800 }, // ☌ - { 20, 20, 19, 0, 16, 102, 55865 }, // ☍ - { 26, 17, 26, 0, 17, 177, 55967 }, // ☎ - { 26, 17, 26, 0, 17, 190, 56144 }, // ☏ - { 24, 24, 25, 0, 19, 28, 56334 }, // ☐ - { 24, 24, 25, 0, 19, 134, 56362 }, // ☑ - { 24, 24, 25, 0, 19, 145, 56496 }, // ☒ - { 16, 17, 22, 3, 17, 105, 56641 }, // ☓ - { 25, 25, 26, 1, 20, 204, 56746 }, // ☔ - { 24, 23, 25, 0, 19, 205, 56950 }, // ☕ - { 17, 17, 19, 1, 17, 109, 57155 }, // ☖ - { 17, 17, 19, 1, 17, 91, 57264 }, // ☗ - { 21, 22, 22, 1, 19, 145, 57355 }, // ☘ - { 25, 15, 25, 0, 15, 155, 57500 }, // ☙ - { 21, 11, 24, 2, 13, 84, 57655 }, // ☚ - { 22, 11, 24, 2, 13, 81, 57739 }, // ☛ - { 22, 11, 24, 2, 13, 114, 57820 }, // ☜ - { 10, 21, 24, 8, 18, 96, 57934 }, // ☝ - { 21, 11, 24, 2, 13, 106, 58030 }, // ☞ - { 11, 21, 24, 7, 18, 118, 58136 }, // ☟ - { 17, 25, 18, 1, 20, 198, 58254 }, // ☠ - { 16, 19, 16, 0, 19, 97, 58452 }, // ☥ - { 25, 24, 25, 0, 19, 240, 58549 }, // ☹ - { 24, 21, 25, 1, 19, 182, 58789 }, // ☣ - { 25, 25, 25, 0, 20, 155, 58971 }, // ☀ - { 14, 23, 15, 0, 18, 109, 59126 }, // ☄ - { 14, 22, 16, 1, 18, 81, 59235 }, // ☊ - { 16, 22, 18, 1, 19, 138, 59316 }, // ☧ - { 14, 22, 16, 1, 18, 57, 59454 }, // ☚ - { 21, 20, 25, 2, 17, 74, 59511 }, // ☩ - { 18, 19, 22, 2, 19, 119, 59585 }, // â˜Ș - { 25, 26, 25, 0, 20, 259, 59704 }, // ☫ - { 19, 24, 22, 1, 19, 214, 59963 }, // ☏ - { 20, 20, 21, 0, 19, 160, 60177 }, // ☭ - { 19, 20, 21, 1, 19, 152, 60337 }, // ☟ - { 19, 20, 21, 1, 19, 164, 60489 }, // ☯ - { 19, 14, 25, 3, 16, 41, 60653 }, // ☰ - { 19, 14, 25, 3, 16, 63, 60694 }, // ☱ - { 19, 14, 25, 3, 16, 58, 60757 }, // â˜Č - { 19, 14, 25, 3, 16, 67, 60815 }, // ☳ - { 19, 14, 25, 3, 16, 53, 60882 }, // ☎ - { 19, 14, 25, 3, 16, 68, 60935 }, // ☔ - { 19, 14, 25, 3, 16, 63, 61003 }, // ☶ - { 19, 14, 25, 3, 16, 69, 61066 }, // ☷ - { 23, 24, 25, 1, 19, 220, 61135 }, // ☞ - { 21, 22, 23, 1, 18, 183, 61355 }, // â˜č - { 21, 22, 23, 1, 18, 182, 61538 }, // â˜ș - { 21, 21, 23, 1, 18, 178, 61720 }, // ☻ - { 19, 18, 19, 0, 18, 102, 61898 }, // ☌ - { 17, 20, 19, 1, 19, 106, 62000 }, // ☜ - { 17, 20, 19, 1, 19, 121, 62106 }, // ☟ - { 13, 26, 15, 1, 20, 140, 62227 }, // ☿ - { 16, 25, 18, 1, 20, 129, 62367 }, // ♀ - { 16, 25, 18, 1, 20, 120, 62496 }, // ♁ - { 20, 20, 22, 1, 18, 130, 62616 }, // ♂ - { 18, 21, 20, 1, 18, 92, 62746 }, // ♃ - { 15, 23, 15, 0, 19, 109, 62838 }, // ♄ - { 18, 21, 19, 0, 18, 104, 62947 }, // ♅ - { 24, 21, 24, 0, 18, 160, 63051 }, // ♆ - { 11, 21, 13, 1, 18, 73, 63211 }, // ♇ - { 25, 24, 29, 2, 19, 183, 63284 }, // ♈ - { 23, 24, 26, 2, 19, 181, 63467 }, // ♉ - { 20, 22, 24, 2, 20, 75, 63648 }, // ♊ - { 23, 18, 27, 2, 18, 180, 63723 }, // ♋ - { 20, 25, 24, 2, 20, 187, 63903 }, // ♌ - { 20, 24, 23, 2, 19, 172, 64090 }, // ♍ - { 20, 16, 24, 2, 18, 98, 64262 }, // ♎ - { 23, 25, 26, 2, 19, 119, 64360 }, // ♏ - { 20, 20, 23, 2, 19, 127, 64479 }, // ♐ - { 24, 23, 27, 1, 19, 185, 64606 }, // ♑ - { 23, 16, 27, 2, 17, 153, 64791 }, // ♒ - { 17, 20, 20, 1, 19, 127, 64944 }, // ♓ - { 32, 33, 32, 0, 24, 269, 65071 }, // ♔ - { 32, 33, 32, 0, 24, 245, 65340 }, // ♕ - { 33, 33, 32, -1, 24, 125, 65585 }, // ♖ - { 33, 33, 32, -1, 24, 188, 65710 }, // ♗ - { 32, 33, 32, 0, 24, 221, 65898 }, // ♘ - { 33, 33, 32, -1, 24, 153, 66119 }, // ♙ - { 32, 33, 32, 0, 24, 272, 66272 }, // ♚ - { 32, 32, 32, 0, 23, 262, 66544 }, // ♛ - { 33, 33, 32, -1, 24, 125, 66806 }, // ♜ - { 33, 33, 32, -1, 24, 182, 66931 }, // ♝ - { 34, 33, 32, -1, 24, 234, 67113 }, // ♞ - { 33, 33, 32, -1, 24, 155, 67347 }, // ♟ - { 23, 24, 25, 1, 19, 147, 67502 }, // ♠ - { 25, 24, 25, 0, 19, 171, 67649 }, // ♡ - { 23, 24, 25, 1, 19, 154, 67820 }, // ♱ - { 23, 24, 25, 1, 19, 144, 67974 }, // ♣ - { 23, 24, 25, 1, 19, 171, 68118 }, // ♀ - { 25, 24, 25, 0, 19, 141, 68289 }, // ♄ - { 23, 24, 25, 1, 19, 134, 68430 }, // ♩ - { 24, 24, 25, 0, 19, 191, 68564 }, // ♧ - { 25, 22, 26, 0, 18, 218, 68755 }, // ♹ - { 8, 24, 10, 0, 19, 46, 68973 }, // ♩ - { 14, 24, 16, 0, 19, 105, 69019 }, // â™Ș - { 18, 24, 20, 0, 19, 112, 69124 }, // ♫ - { 18, 24, 20, 0, 19, 120, 69236 }, // ♬ - { 9, 24, 11, 2, 19, 74, 69356 }, // ♭ - { 7, 24, 10, 2, 19, 50, 69430 }, // ♼ - { 10, 24, 10, 0, 19, 70, 69480 }, // ♯ - { 18, 23, 18, 0, 19, 92, 69550 }, // ♰ - { 19, 25, 19, 0, 20, 104, 69642 }, // ♱ - { 25, 24, 25, 0, 19, 223, 69746 }, // â™Č - { 25, 25, 25, 0, 20, 189, 69969 }, // ♳ - { 25, 25, 25, 0, 20, 202, 70158 }, // ♮ - { 25, 24, 25, 0, 19, 199, 70360 }, // â™” - { 25, 24, 25, 0, 19, 193, 70559 }, // ♶ - { 25, 24, 25, 0, 19, 208, 70752 }, // ♷ - { 25, 24, 25, 0, 19, 197, 70960 }, // ♾ - { 26, 24, 25, 0, 19, 200, 71157 }, // â™č - { 25, 24, 25, 0, 19, 178, 71357 }, // â™ș - { 24, 24, 25, 0, 19, 206, 71535 }, // ♻ - { 25, 25, 25, 0, 20, 265, 71741 }, // ♌ - { 25, 26, 25, 0, 20, 280, 72006 }, // ♜ - { 25, 26, 25, 0, 20, 216, 72286 }, // ♟ - { 18, 24, 25, 3, 19, 153, 72502 }, // ♿ - { 23, 22, 25, 1, 18, 88, 72655 }, // ⚀ - { 23, 22, 25, 1, 18, 102, 72743 }, // ⚁ - { 23, 22, 25, 1, 18, 122, 72845 }, // ⚂ - { 23, 22, 25, 1, 18, 103, 72967 }, // ⚃ - { 23, 22, 25, 1, 18, 122, 73070 }, // ⚄ - { 23, 22, 25, 1, 18, 99, 73192 }, // ⚅ - { 25, 24, 25, 0, 19, 136, 73291 }, // ⚆ - { 25, 24, 25, 0, 19, 142, 73427 }, // ⚇ - { 24, 24, 25, 1, 19, 148, 73569 }, // ⚈ - { 24, 24, 25, 0, 19, 160, 73717 }, // ⚉ - { 19, 4, 25, 3, 11, 22, 73877 }, // ⚊ - { 19, 4, 25, 3, 11, 39, 73899 }, // ⚋ - { 19, 8, 25, 3, 13, 27, 73938 }, // ⚌ - { 19, 8, 25, 3, 13, 42, 73965 }, // ⚍ - { 19, 8, 25, 3, 13, 37, 74007 }, // ⚎ - { 19, 8, 25, 3, 13, 38, 74044 }, // ⚏ - { 21, 25, 25, 2, 20, 99, 74082 }, // ⚐ - { 21, 25, 25, 2, 20, 66, 74181 }, // ⚑ - { 28, 23, 28, 0, 19, 239, 74247 }, // ⚒ - { 22, 24, 23, 0, 19, 119, 74486 }, // ⚓ - { 25, 19, 25, 0, 16, 189, 74605 }, // ⚔ - { 15, 22, 16, 0, 18, 118, 74794 }, // ⚕ - { 29, 25, 28, 0, 19, 248, 74912 }, // ⚖ - { 23, 22, 23, 0, 19, 170, 75160 }, // ⚗ - { 14, 22, 14, 0, 18, 135, 75330 }, // ⚘ - { 21, 22, 23, 1, 18, 195, 75465 }, // ⚙ - { 27, 23, 27, 0, 18, 131, 75660 }, // ⚚ - { 20, 23, 23, 1, 19, 193, 75791 }, // ⚛ - { 19, 21, 20, 1, 17, 158, 75984 }, // ⚜ - { 23, 22, 25, 1, 18, 177, 76142 }, // ⚝ - { 20, 24, 25, 2, 19, 109, 76319 }, // ⚞ - { 20, 24, 25, 3, 19, 116, 76428 }, // ⚟ - { 25, 22, 25, 0, 19, 166, 76544 }, // ⚠ - { 11, 24, 12, 0, 19, 125, 76710 }, // ⚡ - { 18, 17, 20, 1, 13, 142, 76835 }, // ⚱ - { 19, 19, 20, 1, 17, 156, 76977 }, // ⚣ - { 18, 26, 19, 1, 20, 170, 77133 }, // ⚀ - { 13, 21, 14, 1, 17, 110, 77303 }, // âš„ - { 14, 19, 15, 1, 18, 101, 77413 }, // ⚩ - { 17, 25, 18, 1, 20, 164, 77514 }, // ⚧ - { 11, 21, 13, 1, 20, 103, 77678 }, // ⚹ - { 20, 12, 22, 1, 13, 73, 77781 }, // ⚩ - { 15, 15, 15, 0, 15, 75, 77854 }, // âšȘ - { 14, 14, 15, 1, 14, 68, 77929 }, // ⚫ - { 12, 12, 12, 0, 13, 60, 77997 }, // ⚬ - { 18, 12, 20, 1, 13, 83, 78057 }, // ⚭ - { 23, 13, 25, 1, 14, 86, 78140 }, // ⚼ - { 29, 12, 31, 1, 13, 121, 78226 }, // ⚯ - { 21, 10, 23, 1, 13, 69, 78347 }, // ⚰ - { 14, 24, 16, 1, 19, 144, 78416 }, // ⚱ - { 11, 17, 13, 1, 13, 69, 78560 }, // âšČ - { 12, 23, 16, 2, 18, 84, 78629 }, // ⚳ - { 15, 23, 18, 2, 18, 101, 78713 }, // ⚮ - { 13, 23, 18, 3, 18, 86, 78814 }, // âš” - { 18, 21, 19, 1, 16, 103, 78900 }, // ⚶ - { 11, 22, 12, 1, 17, 89, 79003 }, // ⚷ - { 11, 25, 15, 2, 19, 110, 79092 }, // ⚾ - { 19, 18, 21, 1, 16, 124, 79202 }, // âšč - { 15, 16, 17, 1, 16, 105, 79326 }, // âšș - { 15, 16, 17, 1, 15, 104, 79431 }, // ⚻ - { 14, 18, 17, 2, 13, 51, 79535 }, // ⚌ - { 25, 25, 25, 0, 20, 257, 79586 }, // âšœ - { 25, 24, 25, 0, 19, 154, 79843 }, // ⚟ - { 25, 24, 25, 0, 19, 112, 79997 }, // ⚿ - { 33, 33, 32, -1, 24, 125, 80109 }, // ⛀ - { 33, 33, 32, -1, 24, 164, 80234 }, // ⛁ - { 33, 32, 32, -1, 23, 116, 80398 }, // ⛂ - { 33, 33, 32, -1, 24, 154, 80514 }, // ⛃ - { 17, 21, 25, 4, 16, 144, 80668 }, // ⛄ - { 25, 17, 25, 0, 20, 181, 80812 }, // ⛅ - { 25, 22, 25, 0, 18, 230, 80993 }, // ⛆ - { 23, 24, 25, 1, 19, 194, 81223 }, // ⛇ - { 25, 23, 25, 0, 17, 214, 81417 }, // ⛈ - { 17, 17, 19, 1, 16, 107, 81631 }, // ⛉ - { 17, 17, 19, 1, 16, 91, 81738 }, // ⛊ - { 23, 23, 25, 1, 19, 145, 81829 }, // ⛋ - { 14, 15, 25, 6, 15, 81, 81974 }, // ⛌ - { 24, 21, 25, 1, 17, 158, 82055 }, // ⛍ - { 23, 19, 25, 1, 17, 124, 82213 }, // ⛎ - { 23, 24, 25, 1, 19, 166, 82337 }, // ⛏ - { 25, 25, 25, -1, 20, 213, 82503 }, // ⛐ - { 24, 22, 25, 1, 18, 184, 82716 }, // ⛑ - { 23, 23, 25, 1, 19, 230, 82900 }, // ⛒ - { 19, 23, 25, 3, 19, 204, 83130 }, // ⛓ - { 23, 24, 25, 1, 19, 119, 83334 }, // ⛔ - { 23, 25, 25, 1, 20, 170, 83453 }, // ⛕ - { 23, 24, 25, 1, 19, 184, 83623 }, // ⛖ - { 24, 24, 25, 1, 19, 192, 83807 }, // ⛗ - { 21, 23, 25, 2, 19, 90, 83999 }, // ⛘ - { 21, 23, 25, 2, 19, 102, 84089 }, // ⛙ - { 23, 23, 25, 1, 19, 75, 84191 }, // ⛚ - { 23, 20, 25, 1, 17, 140, 84266 }, // ⛛ - { 25, 23, 25, 0, 19, 122, 84406 }, // ⛜ - { 23, 24, 25, 1, 19, 132, 84528 }, // ⛝ - { 23, 24, 25, 1, 19, 169, 84660 }, // ⛞ - { 23, 12, 25, 1, 12, 96, 84829 }, // ⛟ - { 24, 24, 25, 0, 19, 74, 84925 }, // ⛠ - { 24, 23, 25, 1, 20, 117, 84999 }, // ⛡ - { 15, 24, 16, 1, 19, 150, 85116 }, // ⛱ - { 16, 23, 25, 5, 19, 143, 85266 }, // ⛣ - { 23, 22, 25, 1, 18, 162, 85409 }, // ⛀ - { 23, 22, 25, 1, 18, 167, 85571 }, // ⛄ - { 23, 22, 25, 1, 18, 169, 85738 }, // ⛩ - { 23, 22, 25, 1, 18, 166, 85907 }, // ⛧ - { 17, 22, 19, 1, 18, 108, 86073 }, // ⛹ - { 25, 24, 25, 0, 19, 117, 86181 }, // ⛩ - { 24, 23, 25, 1, 19, 141, 86298 }, // â›Ș - { 21, 22, 25, 2, 18, 56, 86439 }, // ⛫ - { 21, 18, 25, 2, 17, 103, 86495 }, // ⛬ - { 19, 19, 20, 0, 17, 141, 86598 }, // ⛭ - { 23, 19, 25, 1, 17, 156, 86739 }, // ⛼ - { 19, 19, 20, 0, 17, 155, 86895 }, // ⛯ - { 25, 15, 25, 0, 15, 118, 87050 }, // ⛰ - { 26, 19, 29, 1, 18, 184, 87168 }, // ✀ - { 23, 14, 25, 1, 16, 99, 87352 }, // ✁ - { 23, 13, 25, 1, 15, 118, 87451 }, // ✂ - { 23, 14, 25, 1, 16, 105, 87569 }, // ✃ - { 26, 19, 29, 2, 18, 187, 87674 }, // ✄ - { 21, 19, 22, 0, 18, 137, 87861 }, // ✅ - { 25, 24, 25, 0, 19, 230, 87998 }, // ✆ - { 25, 24, 25, 0, 19, 239, 88228 }, // ✇ - { 23, 22, 24, 0, 19, 144, 88467 }, // ✈ - { 16, 11, 18, 1, 14, 76, 88611 }, // ✉ - { 18, 19, 20, 1, 17, 168, 88687 }, // ✊ - { 17, 22, 19, 1, 18, 161, 88855 }, // ✋ - { 11, 21, 15, 2, 20, 126, 89016 }, // ✌ - { 22, 14, 23, 0, 13, 123, 89142 }, // ✍ - { 22, 16, 23, 1, 17, 142, 89265 }, // ✎ - { 22, 11, 24, 1, 14, 100, 89407 }, // ✏ - { 22, 17, 23, 1, 17, 148, 89507 }, // ✐ - { 23, 11, 24, 1, 14, 118, 89655 }, // ✑ - { 23, 13, 25, 1, 15, 119, 89773 }, // ✒ - { 18, 18, 20, 1, 18, 100, 89892 }, // ✓ - { 20, 19, 22, 1, 18, 131, 89992 }, // ✔ - { 18, 18, 20, 1, 18, 102, 90123 }, // ✕ - { 18, 18, 20, 1, 18, 126, 90225 }, // ✖ - { 15, 19, 17, 1, 17, 121, 90351 }, // ✗ - { 16, 19, 18, 1, 18, 126, 90472 }, // ✘ - { 18, 17, 20, 1, 17, 83, 90598 }, // ✙ - { 18, 18, 20, 1, 18, 50, 90681 }, // ✚ - { 18, 18, 20, 1, 18, 52, 90731 }, // ✛ - { 17, 18, 20, 1, 18, 59, 90783 }, // ✜ - { 11, 18, 13, 1, 18, 40, 90842 }, // ✝ - { 12, 17, 14, 1, 17, 58, 90882 }, // ✞ - { 12, 17, 14, 1, 17, 59, 90940 }, // ✟ - { 19, 19, 21, 1, 18, 148, 90999 }, // ✠ - { 16, 19, 18, 1, 18, 123, 91147 }, // ✡ - { 18, 18, 20, 1, 18, 105, 91270 }, // ✱ - { 18, 19, 20, 1, 18, 117, 91375 }, // ✣ - { 19, 19, 20, 1, 18, 137, 91492 }, // ✀ - { 19, 19, 20, 1, 18, 136, 91629 }, // ✄ - { 19, 19, 21, 1, 18, 110, 91765 }, // ✩ - { 19, 18, 21, 1, 18, 116, 91875 }, // ✧ - { 23, 22, 25, 1, 18, 148, 91991 }, // ✹ - { 20, 19, 21, 1, 18, 132, 92139 }, // ✩ - { 18, 19, 20, 1, 18, 150, 92271 }, // âœȘ - { 20, 19, 22, 1, 18, 126, 92421 }, // ✫ - { 20, 19, 21, 1, 18, 143, 92547 }, // ✬ - { 20, 19, 22, 1, 18, 138, 92690 }, // ✭ - { 19, 19, 21, 1, 18, 147, 92828 }, // ✼ - { 18, 18, 20, 1, 17, 114, 92975 }, // ✯ - { 22, 19, 24, 1, 18, 155, 93089 }, // ✰ - { 18, 18, 19, 1, 18, 120, 93244 }, // ✱ - { 17, 18, 19, 1, 18, 104, 93364 }, // âœČ - { 17, 18, 19, 1, 18, 124, 93468 }, // ✳ - { 19, 18, 21, 1, 18, 130, 93592 }, // ✮ - { 19, 19, 20, 1, 17, 132, 93722 }, // ✔ - { 16, 19, 18, 1, 17, 112, 93854 }, // ✶ - { 19, 19, 20, 1, 18, 142, 93966 }, // ✷ - { 18, 19, 20, 1, 18, 127, 94108 }, // ✾ - { 19, 19, 20, 1, 17, 131, 94235 }, // âœč - { 18, 18, 20, 1, 18, 160, 94366 }, // âœș - { 16, 19, 18, 1, 18, 123, 94526 }, // ✻ - { 18, 19, 18, 0, 18, 138, 94649 }, // ✌ - { 16, 19, 18, 1, 18, 135, 94787 }, // ✜ - { 16, 19, 18, 1, 18, 143, 94922 }, // ✟ - { 20, 18, 21, 1, 18, 147, 95065 }, // ✿ - { 19, 19, 21, 1, 18, 174, 95212 }, // ❀ - { 19, 19, 20, 1, 18, 181, 95386 }, // ❁ - { 19, 19, 20, 1, 18, 177, 95567 }, // ❂ - { 16, 19, 18, 1, 18, 143, 95744 }, // ❃ - { 17, 18, 18, 0, 18, 136, 95887 }, // ❄ - { 16, 18, 18, 1, 18, 131, 96023 }, // ❅ - { 17, 18, 18, 0, 18, 148, 96154 }, // ❆ - { 19, 19, 20, 1, 18, 139, 96302 }, // ❇ - { 19, 19, 20, 1, 18, 164, 96441 }, // ❈ - { 17, 18, 19, 1, 18, 108, 96605 }, // ❉ - { 18, 18, 20, 1, 18, 144, 96713 }, // ❊ - { 18, 18, 20, 1, 18, 156, 96857 }, // ❋ - { 15, 15, 17, 1, 16, 100, 97013 }, // ❌ - { 21, 18, 23, 1, 18, 127, 97113 }, // ❍ - { 18, 18, 20, 1, 18, 122, 97240 }, // ❎ - { 18, 17, 20, 1, 17, 45, 97362 }, // ❏ - { 18, 18, 20, 1, 18, 41, 97407 }, // ❐ - { 18, 17, 20, 1, 17, 44, 97448 }, // ❑ - { 18, 18, 20, 1, 18, 42, 97492 }, // ❒ - { 16, 21, 18, 1, 18, 123, 97534 }, // ❓ - { 16, 21, 18, 1, 18, 126, 97657 }, // ❔ - { 9, 21, 10, 0, 18, 100, 97783 }, // ❕ - { 19, 19, 20, 1, 18, 135, 97883 }, // ❖ - { 8, 23, 10, 1, 19, 92, 98018 }, // ❗ - { 2, 18, 4, 1, 18, 11, 98110 }, // ❘ - { 6, 18, 8, 1, 18, 16, 98121 }, // ❙ - { 9, 18, 11, 1, 18, 20, 98137 }, // ❚ - { 8, 12, 11, 1, 18, 57, 98157 }, // ❛ - { 9, 12, 11, 1, 18, 62, 98214 }, // ❜ - { 15, 12, 17, 1, 18, 91, 98276 }, // ❝ - { 15, 12, 17, 1, 18, 93, 98367 }, // ❞ - { 9, 11, 11, 1, 6, 62, 98460 }, // ❟ - { 15, 11, 17, 1, 6, 87, 98522 }, // ❠ - { 17, 24, 19, 1, 19, 140, 98609 }, // ❡ - { 11, 19, 13, 1, 18, 89, 98749 }, // ❱ - { 12, 19, 14, 1, 18, 92, 98838 }, // ❣ - { 21, 16, 23, 1, 17, 109, 98930 }, // ❀ - { 16, 18, 17, 1, 18, 86, 99039 }, // ❄ - { 21, 22, 22, 1, 18, 187, 99125 }, // ❊ - { 25, 15, 25, 0, 15, 157, 99312 }, // ❧ - { 11, 24, 12, 1, 19, 107, 99469 }, // ❚ - { 11, 24, 11, 0, 19, 105, 99576 }, // ❩ - { 8, 24, 10, 1, 19, 95, 99681 }, // âȘ - { 8, 24, 10, 1, 19, 91, 99776 }, // ❫ - { 8, 24, 8, 0, 19, 87, 99867 }, // ❬ - { 8, 24, 8, 0, 19, 87, 99954 }, // ❭ - { 13, 18, 13, 0, 16, 98, 100041 }, // ❼ - { 13, 18, 13, 0, 16, 91, 100139 }, // ❯ - { 12, 24, 14, 1, 19, 101, 100230 }, // ❰ - { 12, 24, 14, 1, 19, 95, 100331 }, // ❱ - { 6, 24, 8, 1, 19, 36, 100426 }, // âČ - { 6, 24, 6, 0, 19, 35, 100462 }, // ❳ - { 14, 24, 13, -1, 19, 101, 100497 }, // ❎ - { 13, 24, 13, 0, 19, 95, 100598 }, // ❔ - { 24, 24, 25, 1, 19, 124, 100693 }, // ❶ - { 25, 24, 25, 0, 19, 197, 100817 }, // ❷ - { 25, 24, 25, 0, 19, 215, 101014 }, // ❞ - { 25, 24, 25, 0, 19, 181, 101229 }, // âč - { 25, 24, 25, 0, 19, 208, 101410 }, // âș - { 25, 24, 25, 0, 19, 220, 101618 }, // ❻ - { 25, 24, 25, 0, 19, 203, 101838 }, // ❌ - { 25, 24, 25, 0, 19, 213, 102041 }, // ❜ - { 25, 25, 25, 0, 20, 211, 102254 }, // ❟ - { 24, 24, 25, 1, 19, 176, 102465 }, // ❿ - { 25, 24, 25, 0, 19, 163, 102641 }, // ➀ - { 25, 24, 25, 0, 19, 196, 102804 }, // ➁ - { 25, 24, 25, 0, 19, 203, 103000 }, // ➂ - { 25, 24, 25, 0, 19, 189, 103203 }, // ➃ - { 25, 24, 25, 0, 19, 189, 103392 }, // ➄ - { 25, 24, 25, 0, 19, 211, 103581 }, // ➅ - { 25, 24, 25, 0, 19, 185, 103792 }, // ➆ - { 25, 24, 25, 0, 19, 223, 103977 }, // ➇ - { 25, 24, 25, 0, 19, 215, 104200 }, // ➈ - { 25, 24, 25, 0, 19, 204, 104415 }, // ➉ - { 24, 24, 25, 0, 19, 138, 104619 }, // ➊ - { 25, 24, 25, 0, 19, 189, 104757 }, // ➋ - { 24, 24, 25, 1, 19, 205, 104946 }, // ➌ - { 24, 24, 25, 0, 19, 167, 105151 }, // ➍ - { 24, 24, 25, 0, 19, 187, 105318 }, // ➎ - { 24, 24, 25, 0, 19, 204, 105505 }, // ➏ - { 24, 24, 25, 1, 19, 169, 105709 }, // ➐ - { 25, 24, 25, 0, 19, 228, 105878 }, // ➑ - { 24, 24, 25, 0, 19, 210, 106106 }, // ➒ - { 25, 24, 25, 0, 19, 224, 106316 }, // ➓ - { 21, 15, 23, 1, 16, 78, 106540 }, // ➔ - { 18, 18, 20, 1, 18, 48, 106618 }, // ➕ - { 18, 3, 20, 1, 10, 16, 106666 }, // ➖ - { 18, 17, 20, 1, 17, 31, 106682 }, // ➗ - { 17, 13, 19, 1, 15, 81, 106713 }, // ➘ - { 22, 11, 24, 1, 14, 83, 106794 }, // ➙ - { 17, 13, 19, 1, 15, 92, 106877 }, // ➚ - { 22, 10, 24, 1, 14, 67, 106969 }, // ➛ - { 22, 17, 24, 1, 17, 105, 107036 }, // ➜ - { 22, 11, 24, 1, 14, 50, 107141 }, // ➝ - { 23, 13, 25, 1, 14, 93, 107191 }, // ➞ - { 23, 13, 25, 1, 14, 96, 107284 }, // ➟ - { 24, 16, 26, 1, 15, 138, 107380 }, // ➠ - { 22, 16, 25, 2, 16, 59, 107518 }, // ➡ - { 22, 13, 24, 1, 15, 92, 107577 }, // ➱ - { 22, 13, 24, 1, 15, 92, 107669 }, // ➣ - { 22, 18, 24, 1, 18, 118, 107761 }, // ➀ - { 22, 15, 24, 1, 16, 75, 107879 }, // ➄ - { 22, 14, 24, 1, 16, 81, 107954 }, // ➊ - { 11, 23, 12, 1, 19, 73, 108035 }, // ➧ - { 21, 14, 23, 1, 16, 72, 108108 }, // ➚ - { 20, 15, 22, 1, 16, 81, 108180 }, // ➩ - { 20, 15, 22, 1, 16, 69, 108261 }, // âžȘ - { 20, 13, 22, 1, 15, 83, 108330 }, // ➫ - { 20, 13, 22, 1, 15, 81, 108413 }, // ➬ - { 16, 16, 18, 1, 17, 91, 108494 }, // ➭ - { 16, 16, 18, 1, 17, 94, 108585 }, // ➼ - { 21, 15, 23, 1, 16, 81, 108679 }, // ➯ - { 19, 12, 21, 1, 12, 98, 108760 }, // ➰ - { 21, 15, 23, 1, 16, 86, 108858 }, // ➱ - { 18, 17, 20, 1, 17, 93, 108944 }, // âžČ - { 23, 10, 24, 1, 14, 119, 109037 }, // ➳ - { 18, 17, 20, 1, 17, 104, 109156 }, // ➮ - { 21, 7, 22, 1, 12, 69, 109260 }, // ➔ - { 18, 17, 20, 1, 17, 101, 109329 }, // ➶ - { 21, 19, 23, 1, 18, 133, 109430 }, // ➷ - { 23, 12, 25, 1, 15, 112, 109563 }, // ➾ - { 21, 19, 23, 1, 18, 135, 109675 }, // âžč - { 20, 12, 21, 1, 15, 97, 109810 }, // âžș - { 21, 12, 22, 1, 15, 106, 109907 }, // ➻ - { 22, 10, 24, 1, 14, 97, 110013 }, // ➌ - { 23, 14, 25, 1, 16, 118, 110110 }, // ➜ - { 22, 14, 24, 1, 16, 87, 110228 }, // ➟ - { 30, 12, 32, 1, 12, 158, 110315 }, // ➿ + { 0, 0, 7, 0, 0, 8, 0 }, // + { 4, 18, 6, 1, 18, 44, 8 }, // ! + { 8, 7, 10, 1, 18, 37, 52 }, // " + { 13, 18, 13, 0, 18, 123, 89 }, // # + { 13, 26, 13, 0, 22, 115, 212 }, // $ + { 19, 20, 21, 1, 19, 166, 327 }, // % + { 16, 19, 18, 2, 18, 142, 493 }, // & + { 3, 7, 5, 1, 18, 23, 635 }, // ' + { 7, 26, 8, 1, 22, 97, 658 }, // ( + { 7, 26, 8, 1, 22, 100, 755 }, // ) + { 11, 10, 11, 0, 19, 66, 855 }, // * + { 10, 10, 12, 1, 14, 30, 921 }, // + + { 5, 8, 6, 0, 4, 33, 951 }, // , + { 8, 2, 10, 1, 9, 17, 984 }, // - + { 4, 4, 6, 1, 4, 16, 1001 }, // . + { 9, 24, 13, 2, 21, 98, 1017 }, // / + { 12, 18, 14, 1, 18, 86, 1115 }, // 0 + { 9, 17, 11, 0, 17, 37, 1201 }, // 1 + { 12, 18, 12, 0, 18, 90, 1238 }, // 2 + { 12, 18, 12, 0, 18, 96, 1328 }, // 3 + { 12, 18, 13, 1, 18, 80, 1424 }, // 4 + { 12, 18, 13, 0, 18, 78, 1504 }, // 5 + { 12, 18, 13, 1, 18, 111, 1582 }, // 6 + { 11, 18, 11, 0, 17, 57, 1693 }, // 7 + { 12, 18, 14, 1, 18, 117, 1750 }, // 8 + { 11, 18, 13, 1, 18, 113, 1867 }, // 9 + { 4, 13, 6, 1, 13, 22, 1980 }, // : + { 5, 17, 6, 0, 13, 45, 2002 }, // ; + { 11, 12, 13, 1, 14, 67, 2047 }, // < + { 10, 6, 13, 1, 12, 23, 2114 }, // = + { 11, 12, 13, 1, 14, 65, 2137 }, // > + { 11, 18, 11, 0, 18, 83, 2202 }, // ? + { 23, 24, 26, 1, 18, 217, 2285 }, // @ + { 15, 18, 14, 0, 18, 119, 2502 }, // A + { 13, 18, 15, 2, 18, 93, 2621 }, // B + { 13, 18, 14, 1, 18, 90, 2714 }, // C + { 13, 18, 16, 2, 18, 84, 2804 }, // D + { 11, 18, 13, 2, 18, 43, 2888 }, // E + { 10, 18, 12, 2, 18, 37, 2931 }, // F + { 14, 18, 16, 1, 18, 107, 2968 }, // G + { 13, 18, 17, 2, 18, 32, 3075 }, // H + { 3, 18, 7, 2, 18, 13, 3107 }, // I + { 6, 22, 8, 0, 18, 33, 3120 }, // J + { 13, 18, 15, 2, 18, 93, 3153 }, // K + { 10, 18, 12, 2, 18, 28, 3246 }, // L + { 17, 18, 19, 1, 18, 157, 3274 }, // M + { 13, 18, 17, 2, 18, 88, 3431 }, // N + { 15, 18, 17, 1, 18, 106, 3519 }, // O + { 12, 18, 15, 2, 18, 64, 3625 }, // P + { 16, 21, 17, 1, 18, 132, 3689 }, // Q + { 13, 18, 15, 2, 18, 95, 3821 }, // R + { 13, 18, 14, 0, 18, 108, 3916 }, // S + { 13, 18, 13, 0, 18, 29, 4024 }, // T + { 13, 18, 17, 2, 18, 61, 4053 }, // U + { 14, 18, 14, 0, 18, 119, 4114 }, // V + { 21, 18, 21, 0, 18, 172, 4233 }, // W + { 14, 18, 14, 0, 18, 113, 4405 }, // X + { 14, 18, 14, 0, 18, 84, 4518 }, // Y + { 12, 18, 13, 0, 18, 74, 4602 }, // Z + { 6, 24, 8, 1, 21, 24, 4676 }, // [ + { 9, 24, 13, 2, 21, 97, 4700 }, // + { 6, 24, 8, 1, 21, 23, 4797 }, // ] + { 12, 8, 14, 1, 22, 56, 4820 }, // ^ + { 13, 2, 13, 0, -2, 17, 4876 }, // _ + { 7, 6, 8, 0, 21, 31, 4893 }, // ` + { 12, 15, 13, 1, 14, 90, 4924 }, // a + { 12, 20, 15, 2, 20, 84, 5014 }, // b + { 11, 14, 12, 1, 14, 70, 5098 }, // c + { 12, 20, 15, 1, 20, 83, 5168 }, // d + { 12, 14, 14, 1, 14, 88, 5251 }, // e + { 10, 20, 8, 0, 20, 47, 5339 }, // f + { 13, 22, 13, 0, 16, 138, 5386 }, // g + { 11, 20, 14, 2, 20, 50, 5524 }, // h + { 5, 20, 7, 1, 20, 23, 5574 }, // i + { 7, 26, 7, -1, 20, 48, 5597 }, // j + { 11, 20, 13, 2, 20, 72, 5645 }, // k + { 5, 20, 7, 2, 20, 24, 5717 }, // l + { 18, 14, 21, 2, 14, 63, 5741 }, // m + { 11, 14, 14, 2, 14, 44, 5804 }, // n + { 13, 14, 15, 1, 14, 89, 5848 }, // o + { 12, 20, 15, 2, 14, 86, 5937 }, // p + { 12, 20, 15, 1, 14, 82, 6023 }, // q + { 8, 14, 10, 2, 14, 34, 6105 }, // r + { 11, 14, 12, 0, 14, 80, 6139 }, // s + { 10, 18, 9, 0, 18, 49, 6219 }, // t + { 11, 14, 14, 2, 14, 43, 6268 }, // u + { 13, 14, 12, 0, 14, 97, 6311 }, // v + { 18, 14, 18, 0, 14, 132, 6408 }, // w + { 12, 14, 12, 0, 14, 91, 6540 }, // x + { 13, 20, 12, 0, 14, 125, 6631 }, // y + { 11, 14, 11, 0, 14, 51, 6756 }, // z + { 7, 25, 8, 0, 21, 61, 6807 }, // { + { 3, 24, 10, 4, 21, 14, 6868 }, // | + { 7, 25, 8, 1, 21, 59, 6882 }, // } + { 12, 4, 12, 0, 10, 33, 6941 }, // ~ + { 0, 0, 7, 0, 0, 8, 6974 }, // + { 4, 18, 6, 1, 12, 37, 6982 }, // ÂĄ + { 11, 22, 12, 1, 18, 77, 7019 }, // Âą + { 12, 18, 13, 1, 18, 78, 7096 }, // ÂŁ + { 14, 15, 14, 0, 16, 93, 7174 }, // € + { 14, 18, 13, 0, 18, 88, 7267 }, // „ + { 3, 23, 10, 4, 20, 19, 7355 }, // Š + { 11, 20, 13, 1, 18, 117, 7374 }, // § + { 9, 3, 10, 0, 20, 24, 7491 }, // š + { 16, 17, 20, 2, 20, 136, 7515 }, // © + { 11, 17, 13, 1, 17, 80, 7651 }, // ÂȘ + { 12, 14, 14, 1, 14, 90, 7731 }, // « + { 10, 6, 13, 1, 9, 25, 7821 }, // ÂŹ + { 8, 2, 10, 1, 9, 17, 7846 }, // ­ + { 14, 14, 16, 1, 19, 105, 7863 }, // Âź + { 8, 2, 8, 0, 19, 17, 7968 }, // ÂŻ + { 9, 8, 13, 1, 18, 45, 7985 }, // ° + { 10, 14, 13, 1, 15, 38, 8030 }, // ± + { 8, 11, 10, 1, 19, 52, 8068 }, // ÂČ + { 8, 11, 10, 1, 19, 55, 8120 }, // Âł + { 7, 6, 8, 0, 21, 27, 8175 }, // ÂŽ + { 11, 20, 15, 2, 14, 59, 8202 }, // ” + { 13, 24, 18, 2, 18, 63, 8261 }, // ¶ + { 4, 4, 6, 1, 10, 16, 8324 }, // · + { 7, 7, 7, 0, 1, 35, 8340 }, // ž + { 6, 11, 10, 1, 19, 23, 8375 }, // Âč + { 11, 17, 13, 1, 17, 70, 8398 }, // Âș + { 12, 14, 14, 1, 14, 90, 8468 }, // » + { 22, 21, 23, 1, 19, 148, 8558 }, // ÂŒ + { 21, 21, 23, 1, 19, 147, 8706 }, // Âœ + { 22, 21, 23, 1, 19, 170, 8853 }, // Ÿ + { 11, 19, 11, 0, 13, 83, 9023 }, // Âż + { 15, 23, 14, 0, 23, 134, 9106 }, // À + { 15, 23, 14, 0, 23, 136, 9240 }, // Á + { 15, 24, 14, 0, 24, 141, 9376 }, //  + { 15, 23, 14, 0, 23, 138, 9517 }, // à + { 15, 23, 14, 0, 23, 139, 9655 }, // Ä + { 15, 25, 14, 0, 25, 145, 9794 }, // Å + { 21, 18, 20, -1, 18, 143, 9939 }, // Æ + { 13, 25, 14, 1, 18, 129, 10082 }, // Ç + { 11, 23, 13, 2, 23, 60, 10211 }, // È + { 11, 23, 13, 2, 23, 62, 10271 }, // É + { 11, 24, 13, 2, 24, 69, 10333 }, // Ê + { 11, 23, 13, 2, 23, 63, 10402 }, // Ë + { 7, 23, 7, 0, 23, 31, 10465 }, // Ì + { 7, 23, 7, 0, 23, 29, 10496 }, // Í + { 9, 24, 7, -1, 24, 36, 10525 }, // Î + { 9, 23, 7, -1, 23, 30, 10561 }, // Ï + { 16, 18, 16, 0, 18, 103, 10591 }, // Ð + { 13, 23, 17, 2, 23, 110, 10694 }, // Ñ + { 15, 23, 17, 1, 23, 123, 10804 }, // Ò + { 15, 23, 17, 1, 23, 124, 10927 }, // Ó + { 15, 24, 17, 1, 24, 130, 11051 }, // Ô + { 15, 23, 17, 1, 23, 127, 11181 }, // Õ + { 15, 23, 17, 1, 23, 126, 11308 }, // Ö + { 10, 10, 13, 1, 13, 57, 11434 }, // × + { 15, 25, 17, 1, 22, 172, 11491 }, // Ø + { 13, 23, 17, 2, 23, 79, 11663 }, // Ù + { 13, 23, 17, 2, 23, 82, 11742 }, // Ú + { 13, 24, 17, 2, 24, 87, 11824 }, // Û + { 13, 23, 17, 2, 23, 82, 11911 }, // Ü + { 14, 23, 14, 0, 23, 98, 11993 }, // Ý + { 12, 18, 15, 2, 18, 69, 12091 }, // Þ + { 12, 20, 15, 2, 20, 110, 12160 }, // ß + { 12, 22, 13, 1, 21, 113, 12270 }, // Ă  + { 12, 22, 13, 1, 21, 110, 12383 }, // ĂĄ + { 12, 22, 13, 1, 21, 115, 12493 }, // Ăą + { 12, 21, 13, 1, 20, 108, 12608 }, // ĂŁ + { 12, 21, 13, 1, 20, 108, 12716 }, // Ă€ + { 12, 23, 13, 1, 22, 122, 12824 }, // Ă„ + { 19, 14, 21, 1, 14, 135, 12946 }, // ĂŠ + { 11, 20, 12, 1, 14, 93, 13081 }, // ç + { 12, 21, 14, 1, 21, 107, 13174 }, // Ăš + { 12, 21, 14, 1, 21, 109, 13281 }, // Ă© + { 12, 21, 14, 1, 21, 112, 13390 }, // ĂȘ + { 12, 20, 14, 1, 20, 105, 13502 }, // Ă« + { 7, 21, 7, 0, 21, 35, 13607 }, // ĂŹ + { 7, 21, 7, 0, 21, 30, 13642 }, // Ă­ + { 9, 21, 7, -1, 21, 36, 13672 }, // Ăź + { 9, 20, 7, -1, 20, 30, 13708 }, // ĂŻ + { 12, 21, 14, 1, 21, 127, 13738 }, // Ă° + { 11, 20, 14, 2, 20, 64, 13865 }, // ñ + { 13, 21, 15, 1, 21, 107, 13929 }, // ĂČ + { 13, 21, 15, 1, 21, 111, 14036 }, // Ăł + { 13, 21, 15, 1, 21, 114, 14147 }, // ĂŽ + { 13, 20, 15, 1, 20, 110, 14261 }, // Ă” + { 13, 20, 15, 1, 20, 109, 14371 }, // ö + { 10, 16, 13, 1, 17, 39, 14480 }, // Ă· + { 13, 22, 15, 1, 18, 135, 14519 }, // Ăž + { 11, 21, 14, 2, 21, 65, 14654 }, // Ăč + { 11, 21, 14, 2, 21, 62, 14719 }, // Ăș + { 11, 21, 14, 2, 21, 68, 14781 }, // Ă» + { 11, 20, 14, 2, 20, 62, 14849 }, // ĂŒ + { 13, 27, 12, 0, 21, 144, 14911 }, // Ăœ + { 12, 26, 15, 2, 20, 90, 15055 }, // ĂŸ + { 13, 26, 12, 0, 20, 145, 15145 }, // Ăż + { 8, 2, 10, 1, 9, 17, 15290 }, // ‐ + { 8, 2, 10, 1, 9, 17, 15307 }, // ‑ + { 14, 2, 14, 0, 10, 17, 15324 }, // ‒ + { 13, 2, 13, 0, 9, 17, 15341 }, // – + { 19, 2, 20, 0, 9, 17, 15358 }, // — + { 13, 2, 13, 0, 9, 17, 15375 }, // ― + { 7, 24, 14, 4, 21, 18, 15392 }, // ‖ + { 13, 4, 13, 0, -1, 18, 15410 }, // ‗ + { 4, 7, 6, 1, 20, 22, 15428 }, // ‘ + { 4, 7, 6, 1, 19, 23, 15450 }, // ’ + { 4, 7, 6, 1, 3, 23, 15473 }, // ‚ + { 3, 8, 7, 2, 17, 24, 15496 }, // ‛ + { 9, 7, 10, 1, 20, 44, 15520 }, // “ + { 9, 7, 10, 1, 19, 46, 15564 }, // ” + { 9, 7, 10, 1, 3, 46, 15610 }, // „ + { 8, 8, 12, 1, 17, 41, 15656 }, // ‟ + { 11, 17, 13, 1, 17, 31, 15697 }, // † + { 11, 17, 13, 1, 17, 33, 15728 }, // ‡ + { 6, 6, 8, 1, 12, 25, 15761 }, // ‱ + { 5, 7, 6, 1, 9, 27, 15786 }, // ‣ + { 3, 3, 8, 3, 0, 14, 15813 }, //   + { 11, 3, 17, 3, 0, 25, 15827 }, //   + { 17, 4, 18, 1, 4, 41, 15852 }, // 
 + { 4, 4, 6, 1, 8, 16, 15893 }, // ‧ + { 0, 0, 0, 0, 0, 8, 15909 }, // + { 0, 0, 0, 0, 0, 8, 15917 }, // + { 0, 0, 0, 0, 0, 8, 15925 }, // â€Ș + { 0, 0, 0, 0, 0, 8, 15933 }, // ‫ + { 0, 0, 0, 0, 0, 8, 15941 }, // ‬ + { 0, 0, 0, 0, 0, 8, 15949 }, // ‭ + { 0, 0, 0, 0, 0, 8, 15957 }, // ‼ + { 0, 0, 3, 0, 0, 8, 15965 }, //   + { 28, 20, 30, 1, 19, 204, 15973 }, // ‰ + { 36, 22, 37, 0, 20, 222, 16177 }, // ‱ + { 6, 10, 6, 0, 19, 39, 16399 }, // â€Č + { 11, 10, 11, 0, 19, 71, 16438 }, // ″ + { 15, 10, 15, 0, 19, 91, 16509 }, // ‮ + { 6, 10, 6, 0, 19, 39, 16600 }, // — + { 11, 10, 11, 0, 19, 68, 16639 }, // ‶ + { 15, 10, 15, 0, 19, 89, 16707 }, // ‷ + { 9, 9, 9, 0, 4, 50, 16796 }, // ‾ + { 7, 14, 9, 1, 14, 60, 16846 }, // â€č + { 7, 14, 9, 1, 14, 60, 16906 }, // â€ș + { 14, 14, 16, 1, 12, 90, 16966 }, // ※ + { 8, 18, 14, 3, 18, 74, 17056 }, // ‌ + { 9, 18, 11, 1, 18, 82, 17130 }, // “ + { 13, 1, 13, 0, 20, 12, 17212 }, // ‟ + { 17, 5, 17, 0, -1, 45, 17224 }, // ‿ + { 12, 3, 12, 0, 19, 25, 17269 }, // ⁀ + { 12, 19, 12, 0, 14, 86, 17294 }, // ⁁ + { 19, 19, 23, 2, 19, 132, 17380 }, // ⁂ + { 3, 3, 7, 2, 7, 12, 17512 }, // ⁃ + { 13, 21, 3, -5, 19, 71, 17524 }, // ⁄ + { 6, 23, 8, 1, 19, 24, 17595 }, // ⁅ + { 6, 23, 8, 1, 19, 25, 17619 }, // ⁆ + { 19, 18, 21, 1, 18, 132, 17644 }, // ⁇ + { 15, 18, 19, 1, 18, 125, 17776 }, // ⁈ + { 16, 18, 20, 3, 18, 114, 17901 }, // ⁉ + { 11, 20, 13, 1, 14, 90, 18015 }, // ⁊ + { 12, 21, 12, 0, 16, 46, 18105 }, // ⁋ + { 12, 15, 18, 3, 15, 58, 18151 }, // ⁌ + { 12, 15, 18, 3, 15, 57, 18209 }, // ⁍ + { 10, 10, 12, 1, 8, 58, 18266 }, // ⁎ + { 3, 16, 7, 2, 11, 33, 18324 }, // ⁏ + { 14, 13, 18, 2, 14, 64, 18357 }, // ⁐ + { 10, 21, 12, 1, 19, 92, 18421 }, // ⁑ + { 15, 22, 18, 1, 18, 100, 18513 }, // ⁒ + { 12, 5, 14, 1, 9, 37, 18613 }, // ⁓ + { 12, 3, 12, 0, -2, 26, 18650 }, // ⁔ + { 7, 8, 9, 1, 10, 41, 18676 }, // ⁕ + { 7, 11, 9, 1, 11, 25, 18717 }, // ⁖ + { 20, 10, 19, 0, 19, 111, 18742 }, // ⁗ + { 11, 11, 12, 1, 11, 33, 18853 }, // ⁘ + { 11, 11, 14, 2, 11, 33, 18886 }, // ⁙ + { 3, 17, 6, 2, 17, 21, 18919 }, // ⁚ + { 18, 23, 20, 1, 19, 48, 18940 }, // ⁛ + { 13, 13, 15, 1, 12, 54, 18988 }, // ⁜ + { 3, 17, 6, 2, 17, 21, 19042 }, // ⁝ + { 3, 24, 6, 2, 19, 24, 19063 }, // ⁞ + { 0, 0, 6, 0, 0, 8, 19087 }, //   + { 18, 16, 23, 2, 16, 62, 19095 }, // ← + { 17, 17, 23, 3, 17, 79, 19157 }, // ↑ + { 17, 16, 23, 3, 16, 64, 19236 }, // → + { 17, 17, 23, 3, 16, 79, 19300 }, // ↓ + { 28, 16, 32, 2, 16, 97, 19379 }, // ↔ + { 17, 27, 23, 3, 22, 133, 19476 }, // ↕ + { 14, 13, 20, 3, 14, 77, 19609 }, // ↖ + { 14, 13, 20, 3, 15, 74, 19686 }, // ↗ + { 14, 14, 20, 3, 15, 75, 19760 }, // ↘ + { 14, 14, 23, 4, 15, 77, 19835 }, // ↙ + { 23, 15, 25, 1, 15, 88, 19912 }, // ↚ + { 23, 15, 25, 1, 15, 90, 20000 }, // ↛ + { 23, 14, 25, 1, 14, 94, 20090 }, // ↜ + { 23, 14, 25, 1, 14, 94, 20184 }, // ↝ + { 23, 14, 25, 1, 14, 86, 20278 }, // ↞ + { 12, 22, 13, 0, 18, 80, 20364 }, // ↟ + { 23, 15, 25, 1, 15, 72, 20444 }, // ↠ + { 12, 22, 13, 0, 18, 76, 20516 }, // ↡ + { 23, 14, 25, 1, 14, 100, 20592 }, // ↱ + { 23, 14, 25, 1, 14, 96, 20692 }, // ↣ + { 23, 15, 25, 1, 15, 76, 20788 }, // ↀ + { 12, 24, 13, 0, 19, 60, 20864 }, // ↄ + { 23, 15, 25, 1, 15, 73, 20924 }, // ↩ + { 13, 24, 13, 0, 19, 63, 20997 }, // ↧ + { 12, 24, 13, 0, 19, 86, 21060 }, // ↹ + { 23, 15, 25, 1, 15, 87, 21146 }, // ↩ + { 23, 15, 25, 1, 15, 82, 21233 }, // â†Ș + { 24, 15, 25, 1, 15, 102, 21315 }, // ↫ + { 24, 15, 25, 1, 15, 102, 21417 }, // ↬ + { 28, 14, 31, 1, 14, 129, 21519 }, // ↭ + { 29, 15, 31, 1, 15, 127, 21648 }, // ↼ + { 23, 25, 25, 1, 19, 127, 21775 }, // ↯ + { 10, 19, 13, 1, 18, 50, 21902 }, // ↰ + { 10, 19, 13, 1, 18, 50, 21952 }, // ↱ + { 10, 19, 13, 1, 19, 48, 22002 }, // â†Č + { 10, 19, 13, 1, 19, 43, 22050 }, // ↳ + { 10, 19, 13, 1, 18, 41, 22093 }, // ↮ + { 20, 19, 25, 1, 19, 66, 22134 }, // ↔ + { 24, 13, 25, 0, 12, 100, 22200 }, // ↶ + { 24, 13, 25, 1, 12, 101, 22300 }, // ↷ + { 23, 24, 25, 1, 20, 76, 22401 }, // ↾ + { 22, 22, 25, 2, 18, 112, 22477 }, // â†č + { 18, 20, 19, 1, 18, 119, 22589 }, // â†ș + { 18, 20, 19, 1, 18, 118, 22708 }, // ↻ + { 23, 8, 25, 1, 15, 37, 22826 }, // ↌ + { 23, 8, 25, 1, 8, 36, 22863 }, // ↜ + { 8, 23, 13, 5, 19, 44, 22899 }, // ↟ + { 8, 23, 13, -1, 19, 40, 22943 }, // ↿ + { 23, 8, 25, 1, 15, 38, 22983 }, // ⇀ + { 23, 8, 25, 1, 8, 38, 23021 }, // ⇁ + { 8, 23, 13, 5, 19, 37, 23059 }, // ⇂ + { 8, 23, 13, -1, 19, 41, 23096 }, // ⇃ + { 23, 21, 25, 1, 18, 92, 23137 }, // ⇄ + { 21, 22, 21, 0, 18, 92, 23229 }, // ⇅ + { 23, 21, 25, 1, 18, 95, 23321 }, // ⇆ + { 23, 22, 25, 1, 18, 80, 23416 }, // ⇇ + { 21, 22, 21, 0, 18, 80, 23496 }, // ⇈ + { 23, 22, 25, 1, 18, 76, 23576 }, // ⇉ + { 21, 22, 21, 0, 18, 79, 23652 }, // ⇊ + { 23, 20, 25, 1, 17, 68, 23731 }, // ⇋ + { 23, 20, 25, 1, 17, 68, 23799 }, // ⇌ + { 23, 14, 25, 1, 14, 105, 23867 }, // ⇍ + { 29, 14, 31, 1, 14, 122, 23972 }, // ⇎ + { 23, 14, 25, 1, 14, 104, 24094 }, // ⇏ + { 23, 14, 25, 1, 14, 69, 24198 }, // ⇐ + { 14, 23, 15, 1, 19, 65, 24267 }, // ⇑ + { 23, 14, 25, 1, 14, 59, 24332 }, // ⇒ + { 14, 23, 15, 1, 19, 66, 24391 }, // ⇓ + { 29, 14, 31, 1, 14, 86, 24457 }, // ⇔ + { 14, 26, 15, 1, 20, 101, 24543 }, // ⇕ + { 23, 23, 25, 1, 18, 101, 24644 }, // ⇖ + { 23, 23, 25, 1, 18, 107, 24745 }, // ⇗ + { 23, 23, 25, 1, 19, 96, 24852 }, // ⇘ + { 23, 23, 25, 1, 19, 99, 24948 }, // ⇙ + { 23, 18, 25, 1, 16, 76, 25047 }, // ⇚ + { 23, 18, 25, 1, 16, 74, 25123 }, // ⇛ + { 23, 9, 25, 1, 12, 70, 25197 }, // ⇜ + { 23, 9, 25, 1, 12, 75, 25267 }, // ⇝ + { 13, 22, 13, 0, 18, 86, 25342 }, // ⇞ + { 13, 22, 13, 0, 18, 88, 25428 }, // ⇟ + { 23, 15, 25, 1, 15, 63, 25516 }, // ⇠ + { 13, 23, 13, 0, 19, 64, 25579 }, // ⇡ + { 23, 15, 25, 1, 15, 61, 25643 }, // ⇱ + { 13, 23, 13, 0, 19, 63, 25704 }, // ⇣ + { 22, 15, 25, 2, 15, 71, 25767 }, // ⇀ + { 22, 15, 25, 1, 15, 74, 25838 }, // ⇄ + { 22, 16, 24, 1, 16, 83, 25912 }, // ⇩ + { 16, 23, 18, 1, 22, 79, 25995 }, // ⇧ + { 22, 16, 24, 1, 16, 85, 26074 }, // ⇹ + { 16, 22, 18, 1, 19, 80, 26159 }, // ⇩ + { 16, 23, 18, 1, 22, 97, 26239 }, // â‡Ș + { 14, 22, 15, 0, 18, 81, 26336 }, // ⇫ + { 14, 23, 15, 0, 19, 84, 26417 }, // ⇬ + { 14, 22, 15, 0, 18, 86, 26501 }, // ⇭ + { 14, 22, 15, 1, 18, 99, 26587 }, // ⇼ + { 14, 22, 15, 1, 18, 113, 26686 }, // ⇯ + { 22, 14, 25, 2, 14, 67, 26799 }, // ⇰ + { 16, 19, 19, 2, 17, 91, 26866 }, // ⇱ + { 16, 18, 19, 1, 18, 88, 26957 }, // â‡Č + { 14, 25, 15, 1, 20, 82, 27045 }, // ⇳ + { 23, 15, 25, 1, 15, 101, 27127 }, // ⇮ + { 21, 22, 21, 0, 18, 95, 27228 }, // ⇔ + { 23, 26, 25, 1, 20, 103, 27323 }, // ⇶ + { 23, 14, 25, 1, 14, 87, 27426 }, // ⇷ + { 23, 14, 25, 1, 14, 83, 27513 }, // ⇾ + { 23, 14, 25, 1, 14, 125, 27596 }, // â‡č + { 23, 14, 25, 1, 14, 92, 27721 }, // â‡ș + { 23, 14, 25, 1, 14, 88, 27813 }, // ⇻ + { 23, 14, 25, 1, 14, 128, 27901 }, // ⇌ + { 24, 15, 25, 1, 15, 77, 28029 }, // ⇜ + { 24, 15, 25, 1, 15, 74, 28106 }, // ⇟ + { 22, 14, 25, 2, 14, 94, 28180 }, // ⇿ + { 17, 16, 19, 1, 15, 131, 28274 }, // ⌀ + { 25, 14, 27, 1, 16, 100, 28405 }, // ⌁ + { 14, 17, 20, 3, 17, 66, 28505 }, // ⌂ + { 12, 8, 15, 2, 20, 44, 28571 }, // ⌃ + { 12, 8, 15, 2, 3, 46, 28615 }, // ⌄ + { 13, 11, 15, 1, 13, 52, 28661 }, // ⌅ + { 13, 16, 15, 1, 18, 55, 28713 }, // ⌆ + { 7, 26, 10, 1, 20, 70, 28768 }, // ⌇ + { 7, 25, 11, 4, 20, 21, 28838 }, // ⌈ + { 7, 25, 11, 0, 20, 18, 28859 }, // ⌉ + { 7, 25, 11, 4, 20, 19, 28877 }, // ⌊ + { 7, 25, 11, 0, 20, 22, 28896 }, // ⌋ + { 10, 10, 13, 1, 17, 21, 28918 }, // ⌌ + { 10, 10, 13, 1, 17, 18, 28939 }, // ⌍ + { 10, 10, 13, 1, 9, 18, 28957 }, // ⌎ + { 10, 10, 13, 1, 9, 22, 28975 }, // ⌏ + { 14, 7, 19, 4, 9, 21, 28997 }, // ⌐ + { 9, 8, 13, 2, 11, 31, 29018 }, // ⌑ + { 17, 10, 19, 1, 16, 65, 29049 }, // ⌒ + { 17, 9, 19, 1, 16, 64, 29114 }, // ⌓ + { 16, 10, 19, 2, 16, 73, 29178 }, // ⌔ + { 12, 12, 14, 0, 12, 67, 29251 }, // ⌕ + { 14, 14, 14, 0, 15, 75, 29318 }, // ⌖ + { 14, 14, 14, 0, 15, 58, 29393 }, // ⌗ + { 14, 14, 14, 0, 15, 77, 29451 }, // ⌘ + { 14, 7, 19, 4, 14, 18, 29528 }, // ⌙ + { 18, 18, 20, 1, 17, 169, 29546 }, // ⌚ + { 14, 24, 17, 1, 19, 165, 29715 }, // ⌛ + { 10, 10, 13, 1, 17, 21, 29880 }, // ⌜ + { 10, 10, 13, 1, 17, 18, 29901 }, // ⌝ + { 10, 10, 13, 1, 9, 18, 29919 }, // ⌞ + { 10, 10, 13, 1, 9, 22, 29937 }, // ⌟ + { 17, 33, 16, -1, 24, 75, 29959 }, // ⌠ + { 17, 33, 16, 0, 24, 83, 30034 }, // ⌡ + { 18, 5, 17, 0, 10, 44, 30117 }, // ⌱ + { 18, 5, 17, 0, 10, 41, 30161 }, // ⌣ + { 16, 12, 20, 2, 14, 71, 30202 }, // ⌀ + { 14, 14, 20, 3, 14, 64, 30273 }, // ⌄ + { 32, 18, 35, 2, 18, 129, 30337 }, // 〈 + { 27, 18, 31, 2, 18, 93, 30466 }, // ⌧ + { 31, 19, 37, 3, 18, 173, 30559 }, // ⌹ + { 7, 25, 10, 2, 20, 80, 30732 }, // 〈 + { 6, 25, 10, 1, 20, 70, 30812 }, // âŒȘ + { 32, 18, 37, 2, 18, 133, 30882 }, // ⌫ + { 19, 22, 23, 2, 18, 130, 31015 }, // ⌬ + { 21, 15, 20, 0, 15, 131, 31145 }, // ⌭ + { 20, 15, 20, 0, 14, 126, 31276 }, // ⌼ + { 19, 8, 20, 0, 10, 25, 31402 }, // ⌯ + { 18, 12, 20, 1, 12, 72, 31427 }, // ⌰ + { 16, 14, 20, 2, 15, 75, 31499 }, // ⌱ + { 16, 15, 20, 2, 15, 68, 31574 }, // âŒČ + { 16, 9, 20, 2, 15, 42, 31642 }, // ⌳ + { 16, 14, 20, 2, 14, 26, 31684 }, // ⌮ + { 16, 12, 20, 2, 12, 77, 31710 }, // ⌔ + { 17, 17, 19, 1, 17, 24, 31787 }, // ⌶ + { 10, 17, 12, 1, 16, 22, 31811 }, // ⌷ + { 17, 19, 19, 1, 18, 26, 31833 }, // ⌾ + { 17, 19, 19, 1, 18, 48, 31859 }, // âŒč + { 17, 19, 19, 1, 18, 123, 31907 }, // âŒș + { 17, 19, 19, 1, 18, 67, 32030 }, // ⌻ + { 17, 19, 19, 1, 18, 126, 32097 }, // ⌌ + { 17, 23, 19, 1, 19, 130, 32223 }, // ⌜ + { 20, 19, 19, 0, 17, 156, 32353 }, // ⌟ + { 16, 15, 16, 0, 15, 61, 32509 }, // ⌿ + { 16, 15, 16, 0, 15, 56, 32570 }, // ⍀ + { 17, 17, 19, 1, 16, 67, 32626 }, // ⍁ + { 17, 17, 19, 1, 16, 68, 32693 }, // ⍂ + { 17, 17, 19, 1, 16, 74, 32761 }, // ⍃ + { 17, 17, 19, 1, 16, 74, 32835 }, // ⍄ + { 23, 25, 25, 1, 20, 91, 32909 }, // ⍅ + { 23, 25, 25, 1, 20, 86, 33000 }, // ⍆ + { 17, 19, 19, 1, 18, 64, 33086 }, // ⍇ + { 17, 19, 19, 1, 18, 63, 33150 }, // ⍈ + { 18, 20, 19, 1, 17, 148, 33213 }, // ⍉ + { 18, 20, 18, 0, 17, 27, 33361 }, // ⍊ + { 19, 24, 21, 1, 19, 112, 33388 }, // ⍋ + { 17, 17, 19, 1, 16, 76, 33500 }, // ⍌ + { 17, 19, 19, 1, 18, 113, 33576 }, // ⍍ + { 17, 17, 19, 1, 17, 82, 33689 }, // ⍎ + { 22, 23, 20, -1, 19, 71, 33771 }, // ⍏ + { 17, 19, 19, 1, 18, 67, 33842 }, // ⍐ + { 18, 20, 18, 0, 16, 27, 33909 }, // ⍑ + { 19, 24, 21, 1, 19, 137, 33936 }, // ⍒ + { 17, 17, 19, 1, 16, 76, 34073 }, // ⍓ + { 17, 19, 19, 1, 18, 117, 34149 }, // ⍔ + { 17, 17, 19, 1, 17, 81, 34266 }, // ⍕ + { 22, 23, 20, -1, 19, 72, 34347 }, // ⍖ + { 17, 19, 19, 1, 18, 64, 34419 }, // ⍗ + { 16, 13, 19, 2, 17, 46, 34483 }, // ⍘ + { 20, 22, 21, 0, 18, 112, 34529 }, // ⍙ + { 19, 21, 19, 0, 17, 106, 34641 }, // ⍚ + { 16, 13, 19, 2, 17, 51, 34747 }, // ⍛ + { 18, 20, 19, 1, 16, 94, 34798 }, // ⍜ + { 19, 26, 21, 1, 20, 135, 34892 }, // ⍝ + { 17, 19, 19, 1, 18, 52, 35027 }, // ⍞ + { 18, 18, 19, 1, 16, 147, 35079 }, // ⍟ + { 17, 19, 19, 1, 18, 44, 35226 }, // ⍠ + { 17, 22, 19, 1, 20, 45, 35270 }, // ⍡ + { 20, 24, 21, 0, 20, 144, 35315 }, // ⍱ + { 13, 18, 13, 0, 20, 93, 35459 }, // ⍣ + { 11, 16, 13, 1, 20, 51, 35552 }, // ⍀ + { 18, 22, 19, 1, 20, 113, 35603 }, // ⍄ + { 13, 19, 17, 1, 17, 58, 35716 }, // ⍊ + { 16, 21, 19, 2, 18, 80, 35774 }, // ⍧ + { 18, 15, 19, 1, 19, 73, 35854 }, // ⍚ + { 16, 20, 19, 2, 19, 89, 35927 }, // ⍩ + { 16, 12, 19, 2, 8, 41, 36016 }, // âȘ + { 19, 18, 21, 1, 17, 134, 36057 }, // ⍫ + { 17, 18, 16, 0, 18, 144, 36191 }, // ⍬ + { 15, 25, 15, 0, 20, 61, 36335 }, // ⍭ + { 13, 16, 15, 1, 15, 54, 36396 }, // ⍼ + { 17, 19, 19, 1, 18, 66, 36450 }, // ⍯ + { 17, 19, 19, 1, 18, 79, 36516 }, // ⍰ + { 14, 16, 17, 1, 15, 95, 36595 }, // ⍱ + { 15, 16, 17, 1, 15, 106, 36690 }, // âČ + { 8, 12, 9, 0, 12, 36, 36796 }, // ⍳ + { 11, 17, 12, 0, 12, 87, 36832 }, // ⍎ + { 15, 12, 16, 1, 12, 98, 36919 }, // ⍔ + { 14, 16, 15, 1, 12, 102, 37017 }, // ⍶ + { 11, 16, 11, 0, 12, 81, 37119 }, // ⍷ + { 9, 16, 9, 0, 12, 49, 37200 }, // ⍞ + { 15, 16, 16, 1, 12, 106, 37249 }, // âč + { 14, 12, 15, 1, 12, 95, 37355 }, // âș + { 16, 18, 19, 1, 17, 87, 37450 }, // ⍻ + { 20, 24, 23, 2, 18, 101, 37537 }, // ⍌ + { 20, 13, 19, 0, 13, 33, 37638 }, // ⍜ + { 17, 15, 20, 1, 15, 80, 37671 }, // ⍟ + { 7, 25, 8, 0, 20, 47, 37751 }, // ⍿ + { 14, 25, 17, 1, 19, 138, 37798 }, // ⎀ + { 21, 11, 25, 2, 11, 79, 37936 }, // ⎁ + { 22, 11, 25, 2, 11, 121, 38015 }, // ⎂ + { 21, 18, 24, 2, 16, 137, 38136 }, // ⎃ + { 21, 17, 23, 1, 17, 100, 38273 }, // ⎄ + { 17, 23, 19, 1, 20, 56, 38373 }, // ⎅ + { 24, 24, 25, 1, 19, 156, 38429 }, // ⎆ + { 19, 13, 22, 1, 13, 66, 38585 }, // ⎇ + { 21, 21, 24, 2, 18, 183, 38651 }, // ⎈ + { 19, 18, 19, 0, 16, 151, 38834 }, // ⎉ + { 18, 18, 19, 1, 16, 127, 38985 }, // ⎊ + { 18, 18, 19, 1, 16, 144, 39112 }, // ⎋ + { 17, 19, 19, 1, 19, 100, 39256 }, // ⎌ + { 18, 16, 19, 1, 16, 27, 39356 }, // ⎍ + { 20, 16, 21, 1, 16, 94, 39383 }, // ⎎ + { 18, 17, 19, 1, 17, 96, 39477 }, // ⎏ + { 17, 17, 19, 1, 17, 89, 39573 }, // ⎐ + { 18, 17, 19, 1, 17, 102, 39662 }, // ⎑ + { 17, 17, 19, 1, 17, 107, 39764 }, // ⎒ + { 17, 5, 19, 1, 9, 25, 39871 }, // ⎓ + { 20, 18, 22, 1, 16, 88, 39896 }, // ⎔ + { 17, 17, 19, 1, 17, 22, 39984 }, // ⎕ + { 7, 10, 9, 1, 17, 41, 40006 }, // ⎖ + { 19, 23, 21, 1, 18, 114, 40047 }, // ⎗ + { 19, 23, 21, 1, 18, 120, 40161 }, // ⎘ + { 24, 25, 26, 1, 19, 111, 40281 }, // ⎙ + { 24, 18, 26, 1, 18, 136, 40392 }, // ⎚ + { 13, 32, 13, 0, 23, 80, 40528 }, // ⎛ + { 13, 32, 13, 0, 23, 19, 40608 }, // ⎜ + { 13, 32, 13, 0, 23, 78, 40627 }, // ⎝ + { 13, 32, 13, 0, 23, 81, 40705 }, // ⎞ + { 13, 32, 13, 0, 23, 21, 40786 }, // ⎟ + { 13, 32, 13, 0, 23, 83, 40807 }, // ⎠ + { 13, 32, 13, 0, 23, 34, 40890 }, // ⎡ + { 13, 32, 13, 0, 23, 19, 40924 }, // ⎱ + { 13, 32, 13, 0, 23, 28, 40943 }, // ⎣ + { 13, 32, 13, 0, 23, 32, 40971 }, // ⎀ + { 13, 32, 13, 0, 23, 21, 41003 }, // ⎄ + { 13, 32, 13, 0, 23, 34, 41024 }, // ⎊ + { 14, 33, 13, -1, 24, 33, 41058 }, // ⎧ + { 14, 32, 13, -1, 23, 42, 41091 }, // ⎚ + { 14, 33, 13, -1, 24, 33, 41133 }, // ⎩ + { 14, 32, 13, -1, 23, 19, 41166 }, // âŽȘ + { 14, 33, 13, -1, 24, 29, 41185 }, // ⎫ + { 14, 32, 13, -1, 23, 44, 41214 }, // ⎬ + { 14, 33, 13, -1, 24, 30, 41258 }, // ⎭ + { 18, 32, 16, -1, 23, 24, 41288 }, // ⎼ + { 29, 1, 25, -2, 8, 14, 41312 }, // ⎯ + { 12, 26, 13, 0, 20, 56, 41326 }, // ⎰ + { 12, 26, 13, 0, 20, 48, 41382 }, // ⎱ + { 41, 33, 41, 0, 24, 155, 41430 }, // âŽČ + { 41, 32, 41, 0, 23, 142, 41585 }, // ⎳ + { 23, 6, 23, 0, 1, 22, 41727 }, // ⎮ + { 23, 6, 23, 0, 6, 22, 41749 }, // ⎔ + { 23, 16, 23, 0, 11, 33, 41771 }, // ⎶ + { 17, 25, 17, 1, 20, 117, 41804 }, // ⎷ + { 1, 16, 19, 2, 15, 12, 41921 }, // ⎾ + { 1, 16, 19, 16, 15, 12, 41933 }, // âŽč + { 13, 2, 13, 0, 16, 15, 41945 }, // âŽș + { 13, 2, 13, 0, 12, 15, 41960 }, // ⎻ + { 13, 2, 13, 0, 4, 15, 41975 }, // ⎌ + { 13, 2, 13, 0, 0, 15, 41990 }, // ⎜ + { 5, 14, 7, 1, 13, 19, 42005 }, // ⎟ + { 5, 13, 7, 1, 13, 17, 42024 }, // ⎿ + { 14, 19, 15, 1, 17, 96, 42041 }, // ⏀ + { 13, 19, 15, 1, 17, 99, 42137 }, // ⏁ + { 13, 19, 15, 1, 17, 99, 42236 }, // ⏂ + { 14, 19, 15, 0, 17, 96, 42335 }, // ⏃ + { 14, 19, 15, 0, 17, 93, 42431 }, // ⏄ + { 14, 19, 15, 0, 17, 89, 42524 }, // ⏅ + { 15, 19, 15, 0, 17, 63, 42613 }, // ⏆ + { 15, 19, 15, 0, 17, 72, 42676 }, // ⏇ + { 15, 19, 15, 0, 17, 68, 42748 }, // ⏈ + { 11, 19, 15, 2, 17, 23, 42816 }, // ⏉ + { 11, 19, 15, 2, 17, 21, 42839 }, // ⏊ + { 5, 14, 7, 1, 13, 20, 42860 }, // ⏋ + { 5, 13, 7, 1, 13, 19, 42880 }, // ⏌ + { 15, 13, 17, 1, 13, 52, 42899 }, // ⏍ + { 23, 19, 25, 0, 19, 108, 42951 }, // ⏎ + { 16, 19, 20, 2, 19, 89, 43059 }, // ⏏ + { 1, 25, 13, 6, 20, 12, 43148 }, // ⏐ + { 16, 5, 19, 2, 9, 41, 43160 }, // ⏑ + { 16, 8, 19, 2, 11, 47, 43201 }, // ⏒ + { 17, 9, 19, 1, 12, 49, 43248 }, // ⏓ + { 30, 8, 31, 1, 11, 73, 43297 }, // ⏔ + { 30, 9, 31, 1, 12, 72, 43370 }, // ⏕ + { 30, 5, 31, 1, 9, 67, 43442 }, // ⏖ + { 16, 9, 19, 1, 12, 22, 43509 }, // ⏗ + { 15, 9, 19, 2, 12, 21, 43531 }, // ⏘ + { 15, 9, 19, 2, 12, 28, 43552 }, // ⏙ + { 18, 23, 18, 0, 19, 48, 43580 }, // ⏚ + { 21, 10, 25, 2, 10, 36, 43628 }, // ⏛ + { 23, 8, 23, 0, 4, 66, 43664 }, // ⏜ + { 23, 7, 23, 0, 4, 56, 43730 }, // ⏝ + { 23, 10, 23, 0, 5, 63, 43786 }, // ⏞ + { 23, 10, 23, 0, 5, 67, 43849 }, // ⏟ + { 23, 6, 23, 0, 1, 49, 43916 }, // ⏠ + { 23, 5, 23, 0, 4, 43, 43965 }, // ⏡ + { 18, 17, 19, 1, 17, 106, 44008 }, // ⏱ + { 19, 22, 23, 2, 18, 117, 44114 }, // ⏣ + { 20, 1, 24, 2, 8, 13, 44231 }, // ⏀ + { 22, 10, 24, 1, 10, 78, 44244 }, // ⏄ + { 25, 16, 25, 0, 16, 106, 44322 }, // ⏊ + { 20, 24, 25, 2, 18, 154, 44428 }, // ⏧ + { 15, 13, 17, 1, 9, 89, 44582 }, // ⏚ + { 18, 17, 20, 1, 15, 106, 44671 }, // ⏩ + { 18, 17, 20, 1, 15, 99, 44777 }, // âȘ + { 16, 17, 20, 2, 15, 80, 44876 }, // ⏫ + { 16, 17, 20, 2, 15, 85, 44956 }, // ⏬ + { 19, 16, 20, 0, 15, 116, 45041 }, // ⏭ + { 19, 16, 20, 1, 15, 96, 45157 }, // ⏼ + { 19, 16, 20, 1, 15, 69, 45253 }, // ⏯ + { 21, 22, 25, 2, 19, 226, 45322 }, // ⏰ + { 21, 23, 25, 2, 20, 194, 45548 }, // ⏱ + { 21, 20, 25, 2, 17, 183, 45742 }, // âČ + { 15, 23, 19, 2, 19, 161, 45925 }, // ⏳ + { 8, 17, 20, 6, 16, 51, 46086 }, // ⏎ + { 8, 17, 20, 6, 16, 60, 46137 }, // ⏔ + { 16, 9, 20, 2, 12, 50, 46197 }, // ⏶ + { 16, 9, 20, 2, 10, 44, 46247 }, // ⏷ + { 10, 16, 20, 5, 15, 20, 46291 }, // ⏞ + { 15, 15, 20, 3, 15, 18, 46311 }, // âč + { 15, 15, 20, 3, 15, 72, 46329 }, // âș + { 19, 19, 21, 1, 19, 131, 46401 }, // ⏻ + { 20, 20, 22, 1, 20, 150, 46532 }, // ⏌ + { 3, 13, 7, 2, 15, 13, 46682 }, // ⏜ + { 13, 12, 17, 2, 15, 65, 46695 }, // ⏟ + { 25, 14, 25, 0, 15, 143, 46760 }, // ⏿ + { 17, 18, 19, 1, 16, 24, 46903 }, // ■ + { 17, 18, 19, 1, 16, 34, 46927 }, // □ + { 17, 18, 19, 1, 16, 76, 46961 }, // ▱ + { 17, 18, 19, 1, 16, 45, 47037 }, // ▣ + { 17, 18, 19, 1, 16, 46, 47082 }, // â–€ + { 17, 18, 19, 1, 16, 41, 47128 }, // â–„ + { 17, 18, 19, 1, 16, 57, 47169 }, // ▩ + { 17, 18, 19, 1, 16, 125, 47226 }, // ▧ + { 17, 18, 19, 1, 16, 126, 47351 }, // ▹ + { 17, 18, 19, 1, 16, 153, 47477 }, // ▩ + { 8, 8, 10, 1, 11, 19, 47630 }, // â–Ș + { 8, 8, 10, 1, 11, 28, 47649 }, // ▫ + { 15, 8, 17, 1, 11, 20, 47677 }, // ▬ + { 15, 8, 17, 1, 11, 31, 47697 }, // ▭ + { 8, 15, 10, 1, 15, 18, 47728 }, // ▼ + { 11, 18, 15, 2, 18, 30, 47746 }, // ▯ + { 20, 8, 20, 0, 11, 43, 47776 }, // ▰ + { 20, 8, 20, 0, 11, 63, 47819 }, // ▱ + { 20, 17, 22, 1, 18, 89, 47882 }, // â–Č + { 19, 15, 19, 0, 15, 94, 47971 }, // △ + { 12, 9, 13, 0, 13, 53, 48065 }, // ▮ + { 9, 7, 9, 0, 11, 41, 48118 }, // â–” + { 17, 19, 22, 3, 18, 79, 48159 }, // ▶ + { 16, 19, 17, 1, 17, 90, 48238 }, // ▷ + { 9, 12, 13, 2, 14, 51, 48328 }, // ▾ + { 8, 9, 8, 0, 12, 42, 48379 }, // â–č + { 12, 13, 15, 2, 15, 54, 48421 }, // â–ș + { 21, 14, 23, 2, 14, 86, 48475 }, // ▻ + { 20, 17, 22, 1, 17, 89, 48561 }, // â–Œ + { 19, 15, 19, 0, 15, 98, 48650 }, // â–œ + { 12, 9, 13, 0, 11, 53, 48748 }, // â–Ÿ + { 9, 8, 9, 0, 11, 43, 48801 }, // ▿ + { 17, 19, 22, 2, 18, 87, 48844 }, // ◀ + { 16, 19, 17, 0, 17, 92, 48931 }, // ◁ + { 10, 12, 13, 1, 14, 53, 49023 }, // ◂ + { 7, 9, 8, 0, 12, 41, 49076 }, // ◃ + { 12, 13, 15, 1, 15, 57, 49117 }, // ◄ + { 21, 14, 23, 0, 14, 98, 49174 }, // ◅ + { 20, 20, 20, 0, 17, 81, 49272 }, // ◆ + { 20, 20, 20, 0, 17, 97, 49353 }, // ◇ + { 20, 20, 20, 0, 17, 121, 49450 }, // ◈ + { 20, 19, 19, 0, 17, 167, 49571 }, // ◉ + { 13, 17, 13, 0, 17, 102, 49738 }, // ◊ + { 20, 19, 19, 0, 17, 128, 49840 }, // ○ + { 13, 13, 13, 0, 12, 85, 49968 }, // ◌ + { 20, 20, 19, 0, 17, 134, 50053 }, // ◍ + { 20, 19, 19, 0, 17, 163, 50187 }, // ◎ + { 18, 18, 22, 2, 18, 100, 50350 }, // ● + { 20, 19, 19, 0, 17, 121, 50450 }, // ◐ + { 20, 19, 19, 0, 17, 119, 50571 }, // ◑ + { 20, 20, 19, 0, 17, 123, 50690 }, // ◒ + { 20, 19, 19, 0, 17, 121, 50813 }, // ◓ + { 20, 19, 19, 0, 17, 135, 50934 }, // ◔ + { 20, 20, 19, 0, 17, 122, 51069 }, // ◕ + { 10, 20, 11, 0, 17, 72, 51191 }, // ◖ + { 10, 20, 11, 1, 17, 69, 51263 }, // ◗ + { 25, 26, 25, 0, 20, 64, 51332 }, // ◘ + { 26, 26, 25, 0, 20, 137, 51396 }, // ◙ + { 26, 13, 25, 0, 20, 85, 51533 }, // ◚ + { 26, 13, 25, 0, 7, 88, 51618 }, // ◛ + { 10, 10, 19, 0, 17, 47, 51706 }, // ◜ + { 10, 10, 19, 9, 17, 41, 51753 }, // ◝ + { 10, 10, 19, 9, 8, 48, 51794 }, // ◞ + { 10, 10, 19, 0, 8, 42, 51842 }, // ◟ + { 20, 10, 19, 0, 17, 74, 51884 }, // ◠ + { 20, 10, 19, 0, 8, 72, 51958 }, // ◡ + { 17, 18, 19, 1, 16, 63, 52030 }, // ◱ + { 17, 18, 19, 1, 16, 58, 52093 }, // ◣ + { 17, 18, 19, 1, 16, 68, 52151 }, // â—€ + { 17, 18, 19, 1, 16, 59, 52219 }, // â—„ + { 9, 9, 9, 0, 12, 49, 52278 }, // ◩ + { 17, 18, 19, 1, 16, 35, 52327 }, // ◧ + { 17, 18, 19, 1, 16, 34, 52362 }, // ◹ + { 17, 18, 19, 1, 16, 72, 52396 }, // ◩ + { 17, 18, 19, 1, 16, 64, 52468 }, // â—Ș + { 17, 18, 19, 1, 16, 41, 52532 }, // ◫ + { 19, 15, 19, 0, 15, 106, 52573 }, // ◬ + { 19, 15, 19, 0, 15, 104, 52679 }, // ◭ + { 19, 15, 19, 0, 15, 105, 52783 }, // ◼ + { 25, 24, 25, 0, 19, 132, 52888 }, // ◯ + { 17, 18, 19, 1, 16, 50, 53020 }, // ◰ + { 17, 18, 19, 1, 16, 52, 53070 }, // ◱ + { 17, 18, 19, 1, 16, 52, 53122 }, // â—Č + { 17, 18, 19, 1, 16, 50, 53174 }, // ◳ + { 19, 19, 19, 0, 17, 144, 53224 }, // ◮ + { 19, 19, 19, 0, 17, 143, 53368 }, // â—” + { 19, 19, 19, 0, 17, 144, 53511 }, // ◶ + { 19, 19, 19, 0, 17, 149, 53655 }, // ◷ + { 18, 18, 19, 1, 16, 69, 53804 }, // ◾ + { 17, 18, 19, 1, 16, 72, 53873 }, // â—č + { 18, 18, 19, 1, 16, 69, 53945 }, // â—ș + { 13, 14, 16, 1, 14, 28, 54014 }, // ◻ + { 13, 13, 16, 1, 14, 19, 54042 }, // â—Œ + { 10, 10, 12, 1, 12, 29, 54061 }, // â—œ + { 10, 10, 12, 1, 12, 18, 54090 }, // â—Ÿ + { 17, 18, 19, 1, 16, 78, 54108 }, // ◿ + { 24, 23, 25, 1, 19, 198, 54186 }, // ☀ + { 25, 14, 25, 0, 17, 141, 54384 }, // ☁ + { 25, 19, 26, 1, 14, 127, 54525 }, // ☂ + { 25, 23, 25, 0, 20, 222, 54652 }, // ☃ + { 26, 14, 25, 0, 11, 103, 54874 }, // ☄ + { 18, 18, 20, 1, 17, 100, 54977 }, // ★ + { 18, 17, 20, 1, 17, 117, 55077 }, // ☆ + { 10, 18, 12, 1, 17, 73, 55194 }, // ☇ + { 15, 20, 17, 1, 17, 98, 55267 }, // ☈ + { 20, 19, 19, 0, 17, 152, 55365 }, // ☉ + { 23, 17, 24, 0, 16, 143, 55517 }, // ☊ + { 23, 16, 24, 0, 16, 140, 55660 }, // ☋ + { 11, 12, 14, 1, 12, 65, 55800 }, // ☌ + { 20, 20, 19, 0, 16, 102, 55865 }, // ☍ + { 26, 17, 26, 0, 17, 177, 55967 }, // ☎ + { 26, 17, 26, 0, 17, 190, 56144 }, // ☏ + { 24, 24, 25, 0, 19, 28, 56334 }, // ☐ + { 24, 24, 25, 0, 19, 134, 56362 }, // ☑ + { 24, 24, 25, 0, 19, 145, 56496 }, // ☒ + { 16, 17, 22, 3, 17, 105, 56641 }, // ☓ + { 25, 25, 26, 1, 20, 204, 56746 }, // ☔ + { 24, 23, 25, 0, 19, 205, 56950 }, // ☕ + { 17, 17, 19, 1, 17, 109, 57155 }, // ☖ + { 17, 17, 19, 1, 17, 91, 57264 }, // ☗ + { 21, 22, 22, 1, 19, 145, 57355 }, // ☘ + { 25, 15, 25, 0, 15, 155, 57500 }, // ☙ + { 21, 11, 24, 2, 13, 84, 57655 }, // ☚ + { 22, 11, 24, 2, 13, 81, 57739 }, // ☛ + { 22, 11, 24, 2, 13, 114, 57820 }, // ☜ + { 10, 21, 24, 8, 18, 96, 57934 }, // ☝ + { 21, 11, 24, 2, 13, 106, 58030 }, // ☞ + { 11, 21, 24, 7, 18, 118, 58136 }, // ☟ + { 17, 25, 18, 1, 20, 198, 58254 }, // ☠ + { 16, 19, 16, 0, 19, 97, 58452 }, // ☥ + { 25, 24, 25, 0, 19, 240, 58549 }, // ☹ + { 24, 21, 25, 1, 19, 182, 58789 }, // ☣ + { 25, 25, 25, 0, 20, 155, 58971 }, // ☀ + { 14, 23, 15, 0, 18, 109, 59126 }, // ☄ + { 14, 22, 16, 1, 18, 81, 59235 }, // ☊ + { 16, 22, 18, 1, 19, 138, 59316 }, // ☧ + { 14, 22, 16, 1, 18, 57, 59454 }, // ☚ + { 21, 20, 25, 2, 17, 74, 59511 }, // ☩ + { 18, 19, 22, 2, 19, 119, 59585 }, // â˜Ș + { 25, 26, 25, 0, 20, 259, 59704 }, // ☫ + { 19, 24, 22, 1, 19, 214, 59963 }, // ☏ + { 20, 20, 21, 0, 19, 160, 60177 }, // ☭ + { 19, 20, 21, 1, 19, 152, 60337 }, // ☟ + { 19, 20, 21, 1, 19, 164, 60489 }, // ☯ + { 19, 14, 25, 3, 16, 41, 60653 }, // ☰ + { 19, 14, 25, 3, 16, 63, 60694 }, // ☱ + { 19, 14, 25, 3, 16, 58, 60757 }, // â˜Č + { 19, 14, 25, 3, 16, 67, 60815 }, // ☳ + { 19, 14, 25, 3, 16, 53, 60882 }, // ☎ + { 19, 14, 25, 3, 16, 68, 60935 }, // ☔ + { 19, 14, 25, 3, 16, 63, 61003 }, // ☶ + { 19, 14, 25, 3, 16, 69, 61066 }, // ☷ + { 23, 24, 25, 1, 19, 220, 61135 }, // ☞ + { 21, 22, 23, 1, 18, 183, 61355 }, // â˜č + { 21, 22, 23, 1, 18, 182, 61538 }, // â˜ș + { 21, 21, 23, 1, 18, 178, 61720 }, // ☻ + { 19, 18, 19, 0, 18, 102, 61898 }, // ☌ + { 17, 20, 19, 1, 19, 106, 62000 }, // ☜ + { 17, 20, 19, 1, 19, 121, 62106 }, // ☟ + { 13, 26, 15, 1, 20, 140, 62227 }, // ☿ + { 16, 25, 18, 1, 20, 129, 62367 }, // ♀ + { 16, 25, 18, 1, 20, 120, 62496 }, // ♁ + { 20, 20, 22, 1, 18, 130, 62616 }, // ♂ + { 18, 21, 20, 1, 18, 92, 62746 }, // ♃ + { 15, 23, 15, 0, 19, 109, 62838 }, // ♄ + { 18, 21, 19, 0, 18, 104, 62947 }, // ♅ + { 24, 21, 24, 0, 18, 160, 63051 }, // ♆ + { 11, 21, 13, 1, 18, 73, 63211 }, // ♇ + { 25, 24, 29, 2, 19, 183, 63284 }, // ♈ + { 23, 24, 26, 2, 19, 181, 63467 }, // ♉ + { 20, 22, 24, 2, 20, 75, 63648 }, // ♊ + { 23, 18, 27, 2, 18, 180, 63723 }, // ♋ + { 20, 25, 24, 2, 20, 187, 63903 }, // ♌ + { 20, 24, 23, 2, 19, 172, 64090 }, // ♍ + { 20, 16, 24, 2, 18, 98, 64262 }, // ♎ + { 23, 25, 26, 2, 19, 119, 64360 }, // ♏ + { 20, 20, 23, 2, 19, 127, 64479 }, // ♐ + { 24, 23, 27, 1, 19, 185, 64606 }, // ♑ + { 23, 16, 27, 2, 17, 153, 64791 }, // ♒ + { 17, 20, 20, 1, 19, 127, 64944 }, // ♓ + { 32, 33, 32, 0, 24, 269, 65071 }, // ♔ + { 32, 33, 32, 0, 24, 245, 65340 }, // ♕ + { 33, 33, 32, -1, 24, 125, 65585 }, // ♖ + { 33, 33, 32, -1, 24, 188, 65710 }, // ♗ + { 32, 33, 32, 0, 24, 221, 65898 }, // ♘ + { 33, 33, 32, -1, 24, 153, 66119 }, // ♙ + { 32, 33, 32, 0, 24, 272, 66272 }, // ♚ + { 32, 32, 32, 0, 23, 262, 66544 }, // ♛ + { 33, 33, 32, -1, 24, 125, 66806 }, // ♜ + { 33, 33, 32, -1, 24, 182, 66931 }, // ♝ + { 34, 33, 32, -1, 24, 234, 67113 }, // ♞ + { 33, 33, 32, -1, 24, 155, 67347 }, // ♟ + { 23, 24, 25, 1, 19, 147, 67502 }, // ♠ + { 25, 24, 25, 0, 19, 171, 67649 }, // ♡ + { 23, 24, 25, 1, 19, 154, 67820 }, // ♱ + { 23, 24, 25, 1, 19, 144, 67974 }, // ♣ + { 23, 24, 25, 1, 19, 171, 68118 }, // ♀ + { 25, 24, 25, 0, 19, 141, 68289 }, // ♄ + { 23, 24, 25, 1, 19, 134, 68430 }, // ♩ + { 24, 24, 25, 0, 19, 191, 68564 }, // ♧ + { 25, 22, 26, 0, 18, 218, 68755 }, // ♹ + { 8, 24, 10, 0, 19, 46, 68973 }, // ♩ + { 14, 24, 16, 0, 19, 105, 69019 }, // â™Ș + { 18, 24, 20, 0, 19, 112, 69124 }, // ♫ + { 18, 24, 20, 0, 19, 120, 69236 }, // ♬ + { 9, 24, 11, 2, 19, 74, 69356 }, // ♭ + { 7, 24, 10, 2, 19, 50, 69430 }, // ♼ + { 10, 24, 10, 0, 19, 70, 69480 }, // ♯ + { 18, 23, 18, 0, 19, 92, 69550 }, // ♰ + { 19, 25, 19, 0, 20, 104, 69642 }, // ♱ + { 25, 24, 25, 0, 19, 223, 69746 }, // â™Č + { 25, 25, 25, 0, 20, 189, 69969 }, // ♳ + { 25, 25, 25, 0, 20, 202, 70158 }, // ♮ + { 25, 24, 25, 0, 19, 199, 70360 }, // â™” + { 25, 24, 25, 0, 19, 193, 70559 }, // ♶ + { 25, 24, 25, 0, 19, 208, 70752 }, // ♷ + { 25, 24, 25, 0, 19, 197, 70960 }, // ♾ + { 26, 24, 25, 0, 19, 200, 71157 }, // â™č + { 25, 24, 25, 0, 19, 178, 71357 }, // â™ș + { 24, 24, 25, 0, 19, 206, 71535 }, // ♻ + { 25, 25, 25, 0, 20, 265, 71741 }, // ♌ + { 25, 26, 25, 0, 20, 280, 72006 }, // ♜ + { 25, 26, 25, 0, 20, 216, 72286 }, // ♟ + { 18, 24, 25, 3, 19, 153, 72502 }, // ♿ + { 23, 22, 25, 1, 18, 88, 72655 }, // ⚀ + { 23, 22, 25, 1, 18, 102, 72743 }, // ⚁ + { 23, 22, 25, 1, 18, 122, 72845 }, // ⚂ + { 23, 22, 25, 1, 18, 103, 72967 }, // ⚃ + { 23, 22, 25, 1, 18, 122, 73070 }, // ⚄ + { 23, 22, 25, 1, 18, 99, 73192 }, // ⚅ + { 25, 24, 25, 0, 19, 136, 73291 }, // ⚆ + { 25, 24, 25, 0, 19, 142, 73427 }, // ⚇ + { 24, 24, 25, 1, 19, 148, 73569 }, // ⚈ + { 24, 24, 25, 0, 19, 160, 73717 }, // ⚉ + { 19, 4, 25, 3, 11, 22, 73877 }, // ⚊ + { 19, 4, 25, 3, 11, 39, 73899 }, // ⚋ + { 19, 8, 25, 3, 13, 27, 73938 }, // ⚌ + { 19, 8, 25, 3, 13, 42, 73965 }, // ⚍ + { 19, 8, 25, 3, 13, 37, 74007 }, // ⚎ + { 19, 8, 25, 3, 13, 38, 74044 }, // ⚏ + { 21, 25, 25, 2, 20, 99, 74082 }, // ⚐ + { 21, 25, 25, 2, 20, 66, 74181 }, // ⚑ + { 28, 23, 28, 0, 19, 239, 74247 }, // ⚒ + { 22, 24, 23, 0, 19, 119, 74486 }, // ⚓ + { 25, 19, 25, 0, 16, 189, 74605 }, // ⚔ + { 15, 22, 16, 0, 18, 118, 74794 }, // ⚕ + { 29, 25, 28, 0, 19, 248, 74912 }, // ⚖ + { 23, 22, 23, 0, 19, 170, 75160 }, // ⚗ + { 14, 22, 14, 0, 18, 135, 75330 }, // ⚘ + { 21, 22, 23, 1, 18, 195, 75465 }, // ⚙ + { 27, 23, 27, 0, 18, 131, 75660 }, // ⚚ + { 20, 23, 23, 1, 19, 193, 75791 }, // ⚛ + { 19, 21, 20, 1, 17, 158, 75984 }, // ⚜ + { 23, 22, 25, 1, 18, 177, 76142 }, // ⚝ + { 20, 24, 25, 2, 19, 109, 76319 }, // ⚞ + { 20, 24, 25, 3, 19, 116, 76428 }, // ⚟ + { 25, 22, 25, 0, 19, 166, 76544 }, // ⚠ + { 11, 24, 12, 0, 19, 125, 76710 }, // ⚡ + { 18, 17, 20, 1, 13, 142, 76835 }, // ⚱ + { 19, 19, 20, 1, 17, 156, 76977 }, // ⚣ + { 18, 26, 19, 1, 20, 170, 77133 }, // ⚀ + { 13, 21, 14, 1, 17, 110, 77303 }, // âš„ + { 14, 19, 15, 1, 18, 101, 77413 }, // ⚩ + { 17, 25, 18, 1, 20, 164, 77514 }, // ⚧ + { 11, 21, 13, 1, 20, 103, 77678 }, // ⚹ + { 20, 12, 22, 1, 13, 73, 77781 }, // ⚩ + { 15, 15, 15, 0, 15, 75, 77854 }, // âšȘ + { 14, 14, 15, 1, 14, 68, 77929 }, // ⚫ + { 12, 12, 12, 0, 13, 60, 77997 }, // ⚬ + { 18, 12, 20, 1, 13, 83, 78057 }, // ⚭ + { 23, 13, 25, 1, 14, 86, 78140 }, // ⚼ + { 29, 12, 31, 1, 13, 121, 78226 }, // ⚯ + { 21, 10, 23, 1, 13, 69, 78347 }, // ⚰ + { 14, 24, 16, 1, 19, 144, 78416 }, // ⚱ + { 11, 17, 13, 1, 13, 69, 78560 }, // âšČ + { 12, 23, 16, 2, 18, 84, 78629 }, // ⚳ + { 15, 23, 18, 2, 18, 101, 78713 }, // ⚮ + { 13, 23, 18, 3, 18, 86, 78814 }, // âš” + { 18, 21, 19, 1, 16, 103, 78900 }, // ⚶ + { 11, 22, 12, 1, 17, 89, 79003 }, // ⚷ + { 11, 25, 15, 2, 19, 110, 79092 }, // ⚾ + { 19, 18, 21, 1, 16, 124, 79202 }, // âšč + { 15, 16, 17, 1, 16, 105, 79326 }, // âšș + { 15, 16, 17, 1, 15, 104, 79431 }, // ⚻ + { 14, 18, 17, 2, 13, 51, 79535 }, // ⚌ + { 25, 25, 25, 0, 20, 257, 79586 }, // âšœ + { 25, 24, 25, 0, 19, 154, 79843 }, // ⚟ + { 25, 24, 25, 0, 19, 112, 79997 }, // ⚿ + { 33, 33, 32, -1, 24, 125, 80109 }, // ⛀ + { 33, 33, 32, -1, 24, 164, 80234 }, // ⛁ + { 33, 32, 32, -1, 23, 116, 80398 }, // ⛂ + { 33, 33, 32, -1, 24, 154, 80514 }, // ⛃ + { 17, 21, 25, 4, 16, 144, 80668 }, // ⛄ + { 25, 17, 25, 0, 20, 181, 80812 }, // ⛅ + { 25, 22, 25, 0, 18, 230, 80993 }, // ⛆ + { 23, 24, 25, 1, 19, 194, 81223 }, // ⛇ + { 25, 23, 25, 0, 17, 214, 81417 }, // ⛈ + { 17, 17, 19, 1, 16, 107, 81631 }, // ⛉ + { 17, 17, 19, 1, 16, 91, 81738 }, // ⛊ + { 23, 23, 25, 1, 19, 145, 81829 }, // ⛋ + { 14, 15, 25, 6, 15, 81, 81974 }, // ⛌ + { 24, 21, 25, 1, 17, 158, 82055 }, // ⛍ + { 23, 19, 25, 1, 17, 124, 82213 }, // ⛎ + { 23, 24, 25, 1, 19, 166, 82337 }, // ⛏ + { 25, 25, 25, -1, 20, 213, 82503 }, // ⛐ + { 24, 22, 25, 1, 18, 184, 82716 }, // ⛑ + { 23, 23, 25, 1, 19, 230, 82900 }, // ⛒ + { 19, 23, 25, 3, 19, 204, 83130 }, // ⛓ + { 23, 24, 25, 1, 19, 119, 83334 }, // ⛔ + { 23, 25, 25, 1, 20, 170, 83453 }, // ⛕ + { 23, 24, 25, 1, 19, 184, 83623 }, // ⛖ + { 24, 24, 25, 1, 19, 192, 83807 }, // ⛗ + { 21, 23, 25, 2, 19, 90, 83999 }, // ⛘ + { 21, 23, 25, 2, 19, 102, 84089 }, // ⛙ + { 23, 23, 25, 1, 19, 75, 84191 }, // ⛚ + { 23, 20, 25, 1, 17, 140, 84266 }, // ⛛ + { 25, 23, 25, 0, 19, 122, 84406 }, // ⛜ + { 23, 24, 25, 1, 19, 132, 84528 }, // ⛝ + { 23, 24, 25, 1, 19, 169, 84660 }, // ⛞ + { 23, 12, 25, 1, 12, 96, 84829 }, // ⛟ + { 24, 24, 25, 0, 19, 74, 84925 }, // ⛠ + { 24, 23, 25, 1, 20, 117, 84999 }, // ⛡ + { 15, 24, 16, 1, 19, 150, 85116 }, // ⛱ + { 16, 23, 25, 5, 19, 143, 85266 }, // ⛣ + { 23, 22, 25, 1, 18, 162, 85409 }, // ⛀ + { 23, 22, 25, 1, 18, 167, 85571 }, // ⛄ + { 23, 22, 25, 1, 18, 169, 85738 }, // ⛩ + { 23, 22, 25, 1, 18, 166, 85907 }, // ⛧ + { 17, 22, 19, 1, 18, 108, 86073 }, // ⛹ + { 25, 24, 25, 0, 19, 117, 86181 }, // ⛩ + { 24, 23, 25, 1, 19, 141, 86298 }, // â›Ș + { 21, 22, 25, 2, 18, 56, 86439 }, // ⛫ + { 21, 18, 25, 2, 17, 103, 86495 }, // ⛬ + { 19, 19, 20, 0, 17, 141, 86598 }, // ⛭ + { 23, 19, 25, 1, 17, 156, 86739 }, // ⛼ + { 19, 19, 20, 0, 17, 155, 86895 }, // ⛯ + { 25, 15, 25, 0, 15, 118, 87050 }, // ⛰ + { 26, 19, 29, 1, 18, 184, 87168 }, // ✀ + { 23, 14, 25, 1, 16, 99, 87352 }, // ✁ + { 23, 13, 25, 1, 15, 118, 87451 }, // ✂ + { 23, 14, 25, 1, 16, 105, 87569 }, // ✃ + { 26, 19, 29, 2, 18, 187, 87674 }, // ✄ + { 21, 19, 22, 0, 18, 137, 87861 }, // ✅ + { 25, 24, 25, 0, 19, 230, 87998 }, // ✆ + { 25, 24, 25, 0, 19, 239, 88228 }, // ✇ + { 23, 22, 24, 0, 19, 144, 88467 }, // ✈ + { 16, 11, 18, 1, 14, 76, 88611 }, // ✉ + { 18, 19, 20, 1, 17, 168, 88687 }, // ✊ + { 17, 22, 19, 1, 18, 161, 88855 }, // ✋ + { 11, 21, 15, 2, 20, 126, 89016 }, // ✌ + { 22, 14, 23, 0, 13, 123, 89142 }, // ✍ + { 22, 16, 23, 1, 17, 142, 89265 }, // ✎ + { 22, 11, 24, 1, 14, 100, 89407 }, // ✏ + { 22, 17, 23, 1, 17, 148, 89507 }, // ✐ + { 23, 11, 24, 1, 14, 118, 89655 }, // ✑ + { 23, 13, 25, 1, 15, 119, 89773 }, // ✒ + { 18, 18, 20, 1, 18, 100, 89892 }, // ✓ + { 20, 19, 22, 1, 18, 131, 89992 }, // ✔ + { 18, 18, 20, 1, 18, 102, 90123 }, // ✕ + { 18, 18, 20, 1, 18, 126, 90225 }, // ✖ + { 15, 19, 17, 1, 17, 121, 90351 }, // ✗ + { 16, 19, 18, 1, 18, 126, 90472 }, // ✘ + { 18, 17, 20, 1, 17, 83, 90598 }, // ✙ + { 18, 18, 20, 1, 18, 50, 90681 }, // ✚ + { 18, 18, 20, 1, 18, 52, 90731 }, // ✛ + { 17, 18, 20, 1, 18, 59, 90783 }, // ✜ + { 11, 18, 13, 1, 18, 40, 90842 }, // ✝ + { 12, 17, 14, 1, 17, 58, 90882 }, // ✞ + { 12, 17, 14, 1, 17, 59, 90940 }, // ✟ + { 19, 19, 21, 1, 18, 148, 90999 }, // ✠ + { 16, 19, 18, 1, 18, 123, 91147 }, // ✡ + { 18, 18, 20, 1, 18, 105, 91270 }, // ✱ + { 18, 19, 20, 1, 18, 117, 91375 }, // ✣ + { 19, 19, 20, 1, 18, 137, 91492 }, // ✀ + { 19, 19, 20, 1, 18, 136, 91629 }, // ✄ + { 19, 19, 21, 1, 18, 110, 91765 }, // ✩ + { 19, 18, 21, 1, 18, 116, 91875 }, // ✧ + { 23, 22, 25, 1, 18, 148, 91991 }, // ✹ + { 20, 19, 21, 1, 18, 132, 92139 }, // ✩ + { 18, 19, 20, 1, 18, 150, 92271 }, // âœȘ + { 20, 19, 22, 1, 18, 126, 92421 }, // ✫ + { 20, 19, 21, 1, 18, 143, 92547 }, // ✬ + { 20, 19, 22, 1, 18, 138, 92690 }, // ✭ + { 19, 19, 21, 1, 18, 147, 92828 }, // ✼ + { 18, 18, 20, 1, 17, 114, 92975 }, // ✯ + { 22, 19, 24, 1, 18, 155, 93089 }, // ✰ + { 18, 18, 19, 1, 18, 120, 93244 }, // ✱ + { 17, 18, 19, 1, 18, 104, 93364 }, // âœČ + { 17, 18, 19, 1, 18, 124, 93468 }, // ✳ + { 19, 18, 21, 1, 18, 130, 93592 }, // ✮ + { 19, 19, 20, 1, 17, 132, 93722 }, // ✔ + { 16, 19, 18, 1, 17, 112, 93854 }, // ✶ + { 19, 19, 20, 1, 18, 142, 93966 }, // ✷ + { 18, 19, 20, 1, 18, 127, 94108 }, // ✾ + { 19, 19, 20, 1, 17, 131, 94235 }, // âœč + { 18, 18, 20, 1, 18, 160, 94366 }, // âœș + { 16, 19, 18, 1, 18, 123, 94526 }, // ✻ + { 18, 19, 18, 0, 18, 138, 94649 }, // ✌ + { 16, 19, 18, 1, 18, 135, 94787 }, // ✜ + { 16, 19, 18, 1, 18, 143, 94922 }, // ✟ + { 20, 18, 21, 1, 18, 147, 95065 }, // ✿ + { 19, 19, 21, 1, 18, 174, 95212 }, // ❀ + { 19, 19, 20, 1, 18, 181, 95386 }, // ❁ + { 19, 19, 20, 1, 18, 177, 95567 }, // ❂ + { 16, 19, 18, 1, 18, 143, 95744 }, // ❃ + { 17, 18, 18, 0, 18, 136, 95887 }, // ❄ + { 16, 18, 18, 1, 18, 131, 96023 }, // ❅ + { 17, 18, 18, 0, 18, 148, 96154 }, // ❆ + { 19, 19, 20, 1, 18, 139, 96302 }, // ❇ + { 19, 19, 20, 1, 18, 164, 96441 }, // ❈ + { 17, 18, 19, 1, 18, 108, 96605 }, // ❉ + { 18, 18, 20, 1, 18, 144, 96713 }, // ❊ + { 18, 18, 20, 1, 18, 156, 96857 }, // ❋ + { 15, 15, 17, 1, 16, 100, 97013 }, // ❌ + { 21, 18, 23, 1, 18, 127, 97113 }, // ❍ + { 18, 18, 20, 1, 18, 122, 97240 }, // ❎ + { 18, 17, 20, 1, 17, 45, 97362 }, // ❏ + { 18, 18, 20, 1, 18, 41, 97407 }, // ❐ + { 18, 17, 20, 1, 17, 44, 97448 }, // ❑ + { 18, 18, 20, 1, 18, 42, 97492 }, // ❒ + { 16, 21, 18, 1, 18, 123, 97534 }, // ❓ + { 16, 21, 18, 1, 18, 126, 97657 }, // ❔ + { 9, 21, 10, 0, 18, 100, 97783 }, // ❕ + { 19, 19, 20, 1, 18, 135, 97883 }, // ❖ + { 8, 23, 10, 1, 19, 92, 98018 }, // ❗ + { 2, 18, 4, 1, 18, 11, 98110 }, // ❘ + { 6, 18, 8, 1, 18, 16, 98121 }, // ❙ + { 9, 18, 11, 1, 18, 20, 98137 }, // ❚ + { 8, 12, 11, 1, 18, 57, 98157 }, // ❛ + { 9, 12, 11, 1, 18, 62, 98214 }, // ❜ + { 15, 12, 17, 1, 18, 91, 98276 }, // ❝ + { 15, 12, 17, 1, 18, 93, 98367 }, // ❞ + { 9, 11, 11, 1, 6, 62, 98460 }, // ❟ + { 15, 11, 17, 1, 6, 87, 98522 }, // ❠ + { 17, 24, 19, 1, 19, 140, 98609 }, // ❡ + { 11, 19, 13, 1, 18, 89, 98749 }, // ❱ + { 12, 19, 14, 1, 18, 92, 98838 }, // ❣ + { 21, 16, 23, 1, 17, 109, 98930 }, // ❀ + { 16, 18, 17, 1, 18, 86, 99039 }, // ❄ + { 21, 22, 22, 1, 18, 187, 99125 }, // ❊ + { 25, 15, 25, 0, 15, 157, 99312 }, // ❧ + { 11, 24, 12, 1, 19, 107, 99469 }, // ❚ + { 11, 24, 11, 0, 19, 105, 99576 }, // ❩ + { 8, 24, 10, 1, 19, 95, 99681 }, // âȘ + { 8, 24, 10, 1, 19, 91, 99776 }, // ❫ + { 8, 24, 8, 0, 19, 87, 99867 }, // ❬ + { 8, 24, 8, 0, 19, 87, 99954 }, // ❭ + { 13, 18, 13, 0, 16, 98, 100041 }, // ❼ + { 13, 18, 13, 0, 16, 91, 100139 }, // ❯ + { 12, 24, 14, 1, 19, 101, 100230 }, // ❰ + { 12, 24, 14, 1, 19, 95, 100331 }, // ❱ + { 6, 24, 8, 1, 19, 36, 100426 }, // âČ + { 6, 24, 6, 0, 19, 35, 100462 }, // ❳ + { 14, 24, 13, -1, 19, 101, 100497 }, // ❎ + { 13, 24, 13, 0, 19, 95, 100598 }, // ❔ + { 24, 24, 25, 1, 19, 124, 100693 }, // ❶ + { 25, 24, 25, 0, 19, 197, 100817 }, // ❷ + { 25, 24, 25, 0, 19, 215, 101014 }, // ❞ + { 25, 24, 25, 0, 19, 181, 101229 }, // âč + { 25, 24, 25, 0, 19, 208, 101410 }, // âș + { 25, 24, 25, 0, 19, 220, 101618 }, // ❻ + { 25, 24, 25, 0, 19, 203, 101838 }, // ❌ + { 25, 24, 25, 0, 19, 213, 102041 }, // ❜ + { 25, 25, 25, 0, 20, 211, 102254 }, // ❟ + { 24, 24, 25, 1, 19, 176, 102465 }, // ❿ + { 25, 24, 25, 0, 19, 163, 102641 }, // ➀ + { 25, 24, 25, 0, 19, 196, 102804 }, // ➁ + { 25, 24, 25, 0, 19, 203, 103000 }, // ➂ + { 25, 24, 25, 0, 19, 189, 103203 }, // ➃ + { 25, 24, 25, 0, 19, 189, 103392 }, // ➄ + { 25, 24, 25, 0, 19, 211, 103581 }, // ➅ + { 25, 24, 25, 0, 19, 185, 103792 }, // ➆ + { 25, 24, 25, 0, 19, 223, 103977 }, // ➇ + { 25, 24, 25, 0, 19, 215, 104200 }, // ➈ + { 25, 24, 25, 0, 19, 204, 104415 }, // ➉ + { 24, 24, 25, 0, 19, 138, 104619 }, // ➊ + { 25, 24, 25, 0, 19, 189, 104757 }, // ➋ + { 24, 24, 25, 1, 19, 205, 104946 }, // ➌ + { 24, 24, 25, 0, 19, 167, 105151 }, // ➍ + { 24, 24, 25, 0, 19, 187, 105318 }, // ➎ + { 24, 24, 25, 0, 19, 204, 105505 }, // ➏ + { 24, 24, 25, 1, 19, 169, 105709 }, // ➐ + { 25, 24, 25, 0, 19, 228, 105878 }, // ➑ + { 24, 24, 25, 0, 19, 210, 106106 }, // ➒ + { 25, 24, 25, 0, 19, 224, 106316 }, // ➓ + { 21, 15, 23, 1, 16, 78, 106540 }, // ➔ + { 18, 18, 20, 1, 18, 48, 106618 }, // ➕ + { 18, 3, 20, 1, 10, 16, 106666 }, // ➖ + { 18, 17, 20, 1, 17, 31, 106682 }, // ➗ + { 17, 13, 19, 1, 15, 81, 106713 }, // ➘ + { 22, 11, 24, 1, 14, 83, 106794 }, // ➙ + { 17, 13, 19, 1, 15, 92, 106877 }, // ➚ + { 22, 10, 24, 1, 14, 67, 106969 }, // ➛ + { 22, 17, 24, 1, 17, 105, 107036 }, // ➜ + { 22, 11, 24, 1, 14, 50, 107141 }, // ➝ + { 23, 13, 25, 1, 14, 93, 107191 }, // ➞ + { 23, 13, 25, 1, 14, 96, 107284 }, // ➟ + { 24, 16, 26, 1, 15, 138, 107380 }, // ➠ + { 22, 16, 25, 2, 16, 59, 107518 }, // ➡ + { 22, 13, 24, 1, 15, 92, 107577 }, // ➱ + { 22, 13, 24, 1, 15, 92, 107669 }, // ➣ + { 22, 18, 24, 1, 18, 118, 107761 }, // ➀ + { 22, 15, 24, 1, 16, 75, 107879 }, // ➄ + { 22, 14, 24, 1, 16, 81, 107954 }, // ➊ + { 11, 23, 12, 1, 19, 73, 108035 }, // ➧ + { 21, 14, 23, 1, 16, 72, 108108 }, // ➚ + { 20, 15, 22, 1, 16, 81, 108180 }, // ➩ + { 20, 15, 22, 1, 16, 69, 108261 }, // âžȘ + { 20, 13, 22, 1, 15, 83, 108330 }, // ➫ + { 20, 13, 22, 1, 15, 81, 108413 }, // ➬ + { 16, 16, 18, 1, 17, 91, 108494 }, // ➭ + { 16, 16, 18, 1, 17, 94, 108585 }, // ➼ + { 21, 15, 23, 1, 16, 81, 108679 }, // ➯ + { 19, 12, 21, 1, 12, 98, 108760 }, // ➰ + { 21, 15, 23, 1, 16, 86, 108858 }, // ➱ + { 18, 17, 20, 1, 17, 93, 108944 }, // âžČ + { 23, 10, 24, 1, 14, 119, 109037 }, // ➳ + { 18, 17, 20, 1, 17, 104, 109156 }, // ➮ + { 21, 7, 22, 1, 12, 69, 109260 }, // ➔ + { 18, 17, 20, 1, 17, 101, 109329 }, // ➶ + { 21, 19, 23, 1, 18, 133, 109430 }, // ➷ + { 23, 12, 25, 1, 15, 112, 109563 }, // ➾ + { 21, 19, 23, 1, 18, 135, 109675 }, // âžč + { 20, 12, 21, 1, 15, 97, 109810 }, // âžș + { 21, 12, 22, 1, 15, 106, 109907 }, // ➻ + { 22, 10, 24, 1, 14, 97, 110013 }, // ➌ + { 23, 14, 25, 1, 16, 118, 110110 }, // ➜ + { 22, 14, 24, 1, 16, 87, 110228 }, // ➟ + { 30, 12, 32, 1, 12, 158, 110315 }, // ➿ }; const EpdUnicodeInterval FiraSans_12Intervals[] = { - { 0x20, 0x7E, 0x0 }, - { 0xA0, 0xFF, 0x5F }, - { 0x2010, 0x205F, 0xBF }, - { 0x2190, 0x21FF, 0x10F }, - { 0x2300, 0x23FF, 0x17F }, - { 0x25A0, 0x25FF, 0x27F }, - { 0x2600, 0x26F0, 0x2DF }, - { 0x2700, 0x27BF, 0x3D0 }, + { 0x20, 0x7E, 0x0 }, { 0xA0, 0xFF, 0x5F }, { 0x2010, 0x205F, 0xBF }, + { 0x2190, 0x21FF, 0x10F }, { 0x2300, 0x23FF, 0x17F }, { 0x25A0, 0x25FF, 0x27F }, + { 0x2600, 0x26F0, 0x2DF }, { 0x2700, 0x27BF, 0x3D0 }, }; const EpdFont FiraSans_12 = { - FiraSans_12Bitmaps, - FiraSans_12Glyphs, - FiraSans_12Intervals, - 8, - 1, - 30, - 24, - -7, + FiraSans_12Bitmaps, FiraSans_12Glyphs, FiraSans_12Intervals, 8, 1, 30, 24, -7, }; \ No newline at end of file diff --git a/examples/lilygo-t5-47-epd-platformio/src/main.cpp b/examples/lilygo-t5-47-epd-platformio/src/main.cpp index e0a0bcd7..b1ef3d3c 100644 --- a/examples/lilygo-t5-47-epd-platformio/src/main.cpp +++ b/examples/lilygo-t5-47-epd-platformio/src/main.cpp @@ -74,8 +74,8 @@ double_t get_battery_percentage() { percent_experiment = 100; } - String voltage = "Battery Voltage :" + String(battery_voltage) + "V which is around " + - String(percent_experiment) + "%"; + String voltage = "Battery Voltage :" + String(battery_voltage) + "V which is around " + + String(percent_experiment) + "%"; Serial.println(voltage); epd_poweroff(); @@ -135,7 +135,11 @@ void display_full_screen_left_aligned_text(const char* text) { String battery_text = String(get_battery_percentage()); battery_text.concat("% Battery"); epd_write_string( - &FiraSans_12, battery_text.c_str(), &battery_cursor_x, &battery_cursor_y, fb, + &FiraSans_12, + battery_text.c_str(), + &battery_cursor_x, + &battery_cursor_y, + fb, &battery_font_props ); /********************************************************/ @@ -193,8 +197,8 @@ void print_wakeup_reason() { */ void correct_adc_reference() { esp_adc_cal_characteristics_t adc_chars; - esp_adc_cal_value_t val_type = - esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 1100, &adc_chars); + esp_adc_cal_value_t val_type + = esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 1100, &adc_chars); if (val_type == ESP_ADC_CAL_VAL_EFUSE_VREF) { Serial.printf("eFuse Vref:%u mV", adc_chars.vref); vref = adc_chars.vref; diff --git a/examples/screen_diag/main/commands.c b/examples/screen_diag/main/commands.c index b6f4385e..ea6de582 100644 --- a/examples/screen_diag/main/commands.c +++ b/examples/screen_diag/main/commands.c @@ -1,15 +1,17 @@ #include "commands.h" -bool validate_color(uint8_t* inout_color, struct arg_int* arg) -{ +bool validate_color(uint8_t* inout_color, struct arg_int* arg) { int user_color = arg->count != 0 ? arg->ival[0] : *inout_color; - if (user_color < 0 || user_color > 0xFF) - { - printf("Invalid color %d (0x%02x): Must be in range 0x00 to 0xFF.\r\n", user_color, (uint8_t) user_color); + if (user_color < 0 || user_color > 0xFF) { + printf( + "Invalid color %d (0x%02x): Must be in range 0x00 to 0xFF.\r\n", + user_color, + (uint8_t)user_color + ); return false; } - *inout_color = (uint8_t) user_color; + *inout_color = (uint8_t)user_color; return true; } diff --git a/examples/screen_diag/main/commands.h b/examples/screen_diag/main/commands.h index ceb964be..0fa436f8 100644 --- a/examples/screen_diag/main/commands.h +++ b/examples/screen_diag/main/commands.h @@ -6,8 +6,8 @@ #include #include -#include #include +#include #ifndef ARRAY_SIZE /** @@ -48,13 +48,13 @@ bool validate_color(uint8_t* inout_color, struct arg_int* arg); * * @param args_struct name of the (static) argument struct. */ -#define HANDLE_ARGUMENTS(args_struct) \ - { \ - int nerrors = arg_parse(argc, argv, (void**) &args_struct); \ - if (nerrors > 0) { \ - arg_print_errors(stdout, args_struct.end, argv[0]); \ - return 1; \ - } \ +#define HANDLE_ARGUMENTS(args_struct) \ + { \ + int nerrors = arg_parse(argc, argv, (void**)&args_struct); \ + if (nerrors > 0) { \ + arg_print_errors(stdout, args_struct.end, argv[0]); \ + return 1; \ + } \ } /** @@ -64,7 +64,8 @@ bool validate_color(uint8_t* inout_color, struct arg_int* arg); * @param accessor accessor used to retrieve the first value (e.g. ival for struct arg_int) * @param default_value */ -#define GET_ARG(arg, accessor, default_value) (arg)->count == 1 ? (arg)->accessor[0] : (default_value) +#define GET_ARG(arg, accessor, default_value) \ + (arg)->count == 1 ? (arg)->accessor[0] : (default_value) /** * Alias for GET_ARG, specialized for int arguments. diff --git a/examples/screen_diag/main/commands/graphics.c b/examples/screen_diag/main/commands/graphics.c index cf57c561..945405e0 100644 --- a/examples/screen_diag/main/commands/graphics.c +++ b/examples/screen_diag/main/commands/graphics.c @@ -3,55 +3,55 @@ #include #include -#include #include +#include -#include "../epd.h" #include "../commands.h" +#include "../epd.h" #include "fonts.h" static struct { struct arg_int *x, *y; - struct arg_int *len; - struct arg_int *color; - struct arg_end *end; + struct arg_int* len; + struct arg_int* color; + struct arg_end* end; } draw_hvline_args; static struct { struct arg_int *from_x, *from_y; struct arg_int *to_x, *to_y; - struct arg_int *color; - struct arg_end *end; -} draw_line_args ; + struct arg_int* color; + struct arg_end* end; +} draw_line_args; static struct { struct arg_int *x, *y; struct arg_int *width, *height; - struct arg_int *color; - struct arg_end *end; + struct arg_int* color; + struct arg_end* end; } draw_rect_args; static struct { struct arg_int *x, *y; - struct arg_int *radius; - struct arg_int *color; - struct arg_end *end; + struct arg_int* radius; + struct arg_int* color; + struct arg_end* end; } draw_circle_args; static struct { struct arg_int *x0, *y0; struct arg_int *x1, *y1; struct arg_int *x2, *y2; - struct arg_int *color; - struct arg_end *end; + struct arg_int* color; + struct arg_end* end; } draw_triangle_args; static struct { struct arg_int *x, *y; - struct arg_int *color; - struct arg_lit *serif; - struct arg_str *msg; - struct arg_end *end; + struct arg_int* color; + struct arg_lit* serif; + struct arg_str* msg; + struct arg_end* end; } write_text_args; static int draw_hline(int argc, char* argv[]); @@ -65,8 +65,7 @@ static int draw_triangle(int argc, char* argv[]); static int fill_triangle(int argc, char* argv[]); static int write_text(int argc, char* argv[]); -void register_graphics_commands(void) -{ +void register_graphics_commands(void) { // setup args draw_hvline_args.x = arg_intn(NULL, NULL, "", 1, 1, "start x position"); draw_hvline_args.y = arg_intn(NULL, NULL, "", 1, 1, "start y position"); @@ -111,146 +110,134 @@ void register_graphics_commands(void) write_text_args.end = arg_end(NARGS(write_text_args)); // register commands - const esp_console_cmd_t commands[] = { - { - .command = "draw_hline", - .help = "Draw horizontal line.", - .hint = NULL, - .func = &draw_hline, - .argtable = &draw_hvline_args - }, - { - .command = "draw_vline", - .help = "Draw vertical line.", - .hint = NULL, - .func = &draw_vline, - .argtable = &draw_hvline_args - }, - { - .command = "draw_line", - .help = "Draw line between two points.", - .hint = NULL, - .func = &draw_line, - .argtable = &draw_line_args - }, - { - .command = "draw_rect", - .help = "Draw a rectangle.", - .hint = NULL, - .func = &draw_rect, - .argtable = &draw_rect_args - }, - { - .command = "fill_rect", - .help = "Draw a filled rectangle.", - .hint = NULL, - .func = &fill_rect, - .argtable = &draw_rect_args - }, - { - .command = "draw_circle", - .help = "Draw a circle.", - .hint = NULL, - .func = &draw_circle, - .argtable = &draw_circle_args - }, - { - .command = "fill_circle", - .help = "Draw a filled circle.", - .hint = NULL, - .func = &fill_circle, - .argtable = &draw_circle_args - }, - { - .command = "draw_triangle", - .help = "Draw a triangle from three different points.", - .hint = NULL, - .func = &draw_triangle, - .argtable = &draw_triangle_args - }, - { - .command = "fill_triangle", - .help = "Draw a filled triangle from three different points.", - .hint = NULL, - .func = &fill_triangle, - .argtable = &draw_triangle_args - }, - { - .command = "write_text", - .help = "Write text message to the screen using the sans-serif font by default.", - .hint = NULL, - .func = &write_text, - .argtable = &write_text_args - } - }; + const esp_console_cmd_t commands[] + = { { .command = "draw_hline", + .help = "Draw horizontal line.", + .hint = NULL, + .func = &draw_hline, + .argtable = &draw_hvline_args }, + { .command = "draw_vline", + .help = "Draw vertical line.", + .hint = NULL, + .func = &draw_vline, + .argtable = &draw_hvline_args }, + { .command = "draw_line", + .help = "Draw line between two points.", + .hint = NULL, + .func = &draw_line, + .argtable = &draw_line_args }, + { .command = "draw_rect", + .help = "Draw a rectangle.", + .hint = NULL, + .func = &draw_rect, + .argtable = &draw_rect_args }, + { .command = "fill_rect", + .help = "Draw a filled rectangle.", + .hint = NULL, + .func = &fill_rect, + .argtable = &draw_rect_args }, + { .command = "draw_circle", + .help = "Draw a circle.", + .hint = NULL, + .func = &draw_circle, + .argtable = &draw_circle_args }, + { .command = "fill_circle", + .help = "Draw a filled circle.", + .hint = NULL, + .func = &fill_circle, + .argtable = &draw_circle_args }, + { .command = "draw_triangle", + .help = "Draw a triangle from three different points.", + .hint = NULL, + .func = &draw_triangle, + .argtable = &draw_triangle_args }, + { .command = "fill_triangle", + .help = "Draw a filled triangle from three different points.", + .hint = NULL, + .func = &fill_triangle, + .argtable = &draw_triangle_args }, + { .command = "write_text", + .help = "Write text message to the screen using the sans-serif font by default.", + .hint = NULL, + .func = &write_text, + .argtable = &write_text_args } }; for (size_t i = 0; i < ARRAY_SIZE(commands); ++i) ESP_ERROR_CHECK(esp_console_cmd_register(&commands[i])); } -static int draw_hline(int argc, char* argv[]) -{ +static int draw_hline(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_hvline_args) uint8_t color = 0x00; if (!validate_color(&color, draw_hvline_args.color)) return 1; - epd_draw_hline(draw_hvline_args.x->ival[0], draw_hvline_args.y->ival[0], - draw_hvline_args.len->ival[0], color, g_framebuffer); + epd_draw_hline( + draw_hvline_args.x->ival[0], + draw_hvline_args.y->ival[0], + draw_hvline_args.len->ival[0], + color, + g_framebuffer + ); update_screen(); return 0; } -static int draw_vline(int argc, char* argv[]) -{ +static int draw_vline(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_hvline_args) uint8_t color = 0x00; if (!validate_color(&color, draw_hvline_args.color)) return 1; - epd_draw_vline(draw_hvline_args.x->ival[0], draw_hvline_args.y->ival[0], - draw_hvline_args.len->ival[0], color, g_framebuffer); + epd_draw_vline( + draw_hvline_args.x->ival[0], + draw_hvline_args.y->ival[0], + draw_hvline_args.len->ival[0], + color, + g_framebuffer + ); update_screen(); return 0; } -static int draw_line(int argc, char* argv[]) -{ +static int draw_line(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_line_args) uint8_t color = 0x00; if (!validate_color(&color, draw_line_args.color)) return 1; - epd_draw_line(draw_line_args.from_x->ival[0], draw_line_args.from_y->ival[0], - draw_line_args.to_x->ival[0], draw_line_args.to_y->ival[0], - color, g_framebuffer); + epd_draw_line( + draw_line_args.from_x->ival[0], + draw_line_args.from_y->ival[0], + draw_line_args.to_x->ival[0], + draw_line_args.to_y->ival[0], + color, + g_framebuffer + ); update_screen(); return 0; } -static int draw_rect(int argc, char* argv[]) -{ +static int draw_rect(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_rect_args) uint8_t color = 0x00; if (!validate_color(&color, draw_rect_args.color)) return 1; - EpdRect rect = { - .x = draw_rect_args.x->ival[0], - .y = draw_rect_args.y->ival[0], - .width = draw_rect_args.width->ival[0], - .height = draw_rect_args.height->ival[0] - }; + EpdRect rect = { .x = draw_rect_args.x->ival[0], + .y = draw_rect_args.y->ival[0], + .width = draw_rect_args.width->ival[0], + .height = draw_rect_args.height->ival[0] }; epd_draw_rect(rect, color, g_framebuffer); @@ -259,20 +246,17 @@ static int draw_rect(int argc, char* argv[]) return 0; } -static int fill_rect(int argc, char* argv[]) -{ +static int fill_rect(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_rect_args) uint8_t color = 0x00; if (!validate_color(&color, draw_rect_args.color)) return 1; - EpdRect rect = { - .x = draw_rect_args.x->ival[0], - .y = draw_rect_args.y->ival[0], - .width = draw_rect_args.width->ival[0], - .height = draw_rect_args.height->ival[0] - }; + EpdRect rect = { .x = draw_rect_args.x->ival[0], + .y = draw_rect_args.y->ival[0], + .width = draw_rect_args.width->ival[0], + .height = draw_rect_args.height->ival[0] }; epd_fill_rect(rect, color, g_framebuffer); @@ -281,76 +265,93 @@ static int fill_rect(int argc, char* argv[]) return 0; } -static int draw_circle(int argc, char* argv[]) -{ +static int draw_circle(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_circle_args) uint8_t color = 0x00; if (!validate_color(&color, draw_circle_args.color)) return 1; - epd_draw_circle(draw_circle_args.x->ival[0], draw_circle_args.y->ival[0], - draw_circle_args.radius->ival[0], color, g_framebuffer); + epd_draw_circle( + draw_circle_args.x->ival[0], + draw_circle_args.y->ival[0], + draw_circle_args.radius->ival[0], + color, + g_framebuffer + ); update_screen(); return 0; } -static int fill_circle(int argc, char* argv[]) -{ +static int fill_circle(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_circle_args) uint8_t color = 0x00; if (!validate_color(&color, draw_circle_args.color)) return 1; - epd_fill_circle(draw_circle_args.x->ival[0], draw_circle_args.y->ival[0], - draw_circle_args.radius->ival[0], color, g_framebuffer); + epd_fill_circle( + draw_circle_args.x->ival[0], + draw_circle_args.y->ival[0], + draw_circle_args.radius->ival[0], + color, + g_framebuffer + ); update_screen(); return 0; } -static int draw_triangle(int argc, char* argv[]) -{ +static int draw_triangle(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_triangle_args) uint8_t color = 0x00; if (!validate_color(&color, draw_triangle_args.color)) return 1; - epd_draw_triangle(draw_triangle_args.x0->ival[0], draw_triangle_args.y0->ival[0], - draw_triangle_args.x1->ival[0], draw_triangle_args.y1->ival[0], - draw_triangle_args.x2->ival[0], draw_triangle_args.y2->ival[0], - color, g_framebuffer); + epd_draw_triangle( + draw_triangle_args.x0->ival[0], + draw_triangle_args.y0->ival[0], + draw_triangle_args.x1->ival[0], + draw_triangle_args.y1->ival[0], + draw_triangle_args.x2->ival[0], + draw_triangle_args.y2->ival[0], + color, + g_framebuffer + ); update_screen(); return 0; } -static int fill_triangle(int argc, char* argv[]) -{ +static int fill_triangle(int argc, char* argv[]) { HANDLE_ARGUMENTS(draw_triangle_args) uint8_t color = 0x00; if (!validate_color(&color, draw_triangle_args.color)) return 1; - epd_fill_triangle(draw_triangle_args.x0->ival[0], draw_triangle_args.y0->ival[0], - draw_triangle_args.x1->ival[0], draw_triangle_args.y1->ival[0], - draw_triangle_args.x2->ival[0], draw_triangle_args.y2->ival[0], - color, g_framebuffer); + epd_fill_triangle( + draw_triangle_args.x0->ival[0], + draw_triangle_args.y0->ival[0], + draw_triangle_args.x1->ival[0], + draw_triangle_args.y1->ival[0], + draw_triangle_args.x2->ival[0], + draw_triangle_args.y2->ival[0], + color, + g_framebuffer + ); update_screen(); return 0; } -static int write_text(int argc, char* argv[]) -{ +static int write_text(int argc, char* argv[]) { HANDLE_ARGUMENTS(write_text_args) uint8_t color = 0x00; @@ -361,10 +362,7 @@ static int write_text(int argc, char* argv[]) if (write_text_args.serif->count) font = &Amiri; - EpdFontProperties props = { - .bg_color = 0x00, - .fg_color = color - }; + EpdFontProperties props = { .bg_color = 0x00, .fg_color = color }; int pos_x = write_text_args.x->ival[0]; int pos_y = write_text_args.y->ival[0]; diff --git a/examples/screen_diag/main/commands/screen.c b/examples/screen_diag/main/commands/screen.c index 312502de..f86a96bb 100644 --- a/examples/screen_diag/main/commands/screen.c +++ b/examples/screen_diag/main/commands/screen.c @@ -3,11 +3,11 @@ #include #include -#include #include +#include -#include "../epd.h" #include "../commands.h" +#include "../epd.h" static struct { struct arg_str* rotation; @@ -37,10 +37,11 @@ static int get_temp(int argc, char* argv[]); static int power_on(int argc, char* argv[]); static int power_off(int argc, char* argv[]); -void register_screen_commands(void) -{ +void register_screen_commands(void) { // setup arguments - set_rotation_args.rotation = arg_strn(NULL, NULL, "", 1, 1, "screen rotation: \"horizontal\" or \"portrait\""); + set_rotation_args.rotation = arg_strn( + NULL, NULL, "", 1, 1, "screen rotation: \"horizontal\" or \"portrait\"" + ); set_rotation_args.inverted = arg_litn(NULL, "inverted", 0, 1, ""); set_rotation_args.end = arg_end(NARGS(set_rotation_args)); @@ -54,83 +55,58 @@ void register_screen_commands(void) set_pixel_args.end = arg_end(NARGS(set_pixel_args)); const esp_console_cmd_t commands[] = { - { - .command = "get_rotation", - .help = "Get current screen rotation.", - .hint = NULL, - .func = &get_rotation - }, - { - .command = "set_rotation", - .help = "Changes screen rotation.", - .hint = NULL, - .func = &set_rotation, - .argtable = &set_rotation_args - }, - { - .command = "get_width", - .help = "Print screen width.", - .hint = NULL, - .func = &get_width - }, - { - .command = "get_height", - .help = "Print screen height.", - .hint = NULL, - .func = &get_height - }, - { - .command = "get_pixel", - .help = "Get pixel color in front buffer.", - .hint = NULL, - .func = &get_pixel, - .argtable = &get_pixel_args - }, - { - .command = "set_pixel", - .help = "Set pixel color in front buffer.", - .hint = NULL, - .func = &set_pixel, - .argtable = &set_pixel_args - }, - { - .command = "clear_screen", - .help = "Clear the entire screen and reset the front buffer to white.", - .hint = NULL, - .func = &clear_screen_cmd - }, - { - .command = "full_clear_screen", - .help = "Same as clear_screen, but also tries to get rid of any artifacts by cycling through colors on the screen.", - .hint = NULL, - .func = &full_clear_screen_cmd - }, - { - .command = "get_temp", - .help = "Returns the ambient temperature.", - .hint = NULL, - .func = &get_temp - }, - { - .command = "power_on", - .help = "Turns on the power of the display.", - .hint = NULL, - .func = &power_on - }, - { - .command = "power_off", - .help = "Turns off the power of the display.", - .hint = NULL, - .func = &power_off - } + { .command = "get_rotation", + .help = "Get current screen rotation.", + .hint = NULL, + .func = &get_rotation }, + { .command = "set_rotation", + .help = "Changes screen rotation.", + .hint = NULL, + .func = &set_rotation, + .argtable = &set_rotation_args }, + { .command = "get_width", .help = "Print screen width.", .hint = NULL, .func = &get_width }, + { .command = "get_height", + .help = "Print screen height.", + .hint = NULL, + .func = &get_height }, + { .command = "get_pixel", + .help = "Get pixel color in front buffer.", + .hint = NULL, + .func = &get_pixel, + .argtable = &get_pixel_args }, + { .command = "set_pixel", + .help = "Set pixel color in front buffer.", + .hint = NULL, + .func = &set_pixel, + .argtable = &set_pixel_args }, + { .command = "clear_screen", + .help = "Clear the entire screen and reset the front buffer to white.", + .hint = NULL, + .func = &clear_screen_cmd }, + { .command = "full_clear_screen", + .help = "Same as clear_screen, but also tries to get rid of any artifacts by cycling " + "through colors on the screen.", + .hint = NULL, + .func = &full_clear_screen_cmd }, + { .command = "get_temp", + .help = "Returns the ambient temperature.", + .hint = NULL, + .func = &get_temp }, + { .command = "power_on", + .help = "Turns on the power of the display.", + .hint = NULL, + .func = &power_on }, + { .command = "power_off", + .help = "Turns off the power of the display.", + .hint = NULL, + .func = &power_off } }; for (size_t i = 0; i < ARRAY_SIZE(commands); ++i) ESP_ERROR_CHECK(esp_console_cmd_register(&commands[i])); } -static int get_rotation(int argc, char* argv[]) -{ +static int get_rotation(int argc, char* argv[]) { enum EpdRotation rot = epd_get_rotation(); if (rot == EPD_ROT_INVERTED_LANDSCAPE || rot == EPD_ROT_INVERTED_PORTRAIT) printf("inverted "); @@ -143,23 +119,19 @@ static int get_rotation(int argc, char* argv[]) return 0; } -static int set_rotation(int argc, char* argv[]) -{ +static int set_rotation(int argc, char* argv[]) { HANDLE_ARGUMENTS(set_rotation_args) const char* rot_str = set_rotation_args.rotation->sval[0]; const bool invert = set_rotation_args.inverted->count == 1; enum EpdRotation rot = EPD_ROT_LANDSCAPE; - if (!strcmp(rot_str, "landscape")) - { + if (!strcmp(rot_str, "landscape")) { if (invert) rot = EPD_ROT_INVERTED_LANDSCAPE; else rot = EPD_ROT_LANDSCAPE; - } - else if (!strcmp(rot_str, "portrait")) - { + } else if (!strcmp(rot_str, "portrait")) { if (invert) rot = EPD_ROT_INVERTED_PORTRAIT; else @@ -171,25 +143,24 @@ static int set_rotation(int argc, char* argv[]) return 0; } -static int get_width(int argc, char* argv[]) -{ +static int get_width(int argc, char* argv[]) { printf("%d\r\n", epd_rotated_display_width()); return 0; } -static int get_height(int argc, char* argv[]) -{ +static int get_height(int argc, char* argv[]) { printf("%d\r\n", epd_rotated_display_height()); return 0; } -static inline void swap(int* lhs, int* rhs) -{ +static inline void swap(int* lhs, int* rhs) { const int tmp = *lhs; *lhs = *rhs; *rhs = tmp; } -struct coords { int x, y; }; +struct coords { + int x, y; +}; /* Basically the _rotate() function from epd_driver.c */ static struct coords map_to_screen(int x, int y) { @@ -216,13 +187,18 @@ static struct coords map_to_screen(int x, int y) { /* Read the pixel data from the front buffer, because there is no function provided by the driver. * Most importantly, we need to adjust the rotation of the incoming coordinates. */ -static int get_pixel_color(int x, int y) -{ +static int get_pixel_color(int x, int y) { const struct coords adjusted = map_to_screen(x, y); - if (adjusted.x < 0 || adjusted.x >= epd_width() || adjusted.y < 0 || adjusted.y >= epd_height()) - { - printf("Invalid coordinates (%d,%d): Must be withing the screen size (%d,%d).\r\n", adjusted.x, adjusted.y, epd_width(), epd_height()); + if (adjusted.x < 0 || adjusted.x >= epd_width() || adjusted.y < 0 + || adjusted.y >= epd_height()) { + printf( + "Invalid coordinates (%d,%d): Must be withing the screen size (%d,%d).\r\n", + adjusted.x, + adjusted.y, + epd_width(), + epd_height() + ); return -1; } @@ -235,28 +211,30 @@ static int get_pixel_color(int x, int y) return color; } -static int get_pixel(int argc, char* argv[]) -{ +static int get_pixel(int argc, char* argv[]) { HANDLE_ARGUMENTS(get_pixel_args) const int pos_x = get_pixel_args.posx->ival[0]; const int pos_y = get_pixel_args.posy->ival[0]; const int color = get_pixel_color(pos_x, pos_y); - if (color == -1) - { - printf("Invalid coordinates (%d,%d): Must be withing the screen size (%d,%d).\r\n", pos_x, pos_y, - epd_rotated_display_width(), epd_rotated_display_height()); + if (color == -1) { + printf( + "Invalid coordinates (%d,%d): Must be withing the screen size (%d,%d).\r\n", + pos_x, + pos_y, + epd_rotated_display_width(), + epd_rotated_display_height() + ); return 1; } - printf("Pixel (%d,%d) has color %d (0x%02x)\r\n", pos_x, pos_y, color, (uint8_t) color); + printf("Pixel (%d,%d) has color %d (0x%02x)\r\n", pos_x, pos_y, color, (uint8_t)color); return 0; } -static int set_pixel(int argc, char* argv[]) -{ +static int set_pixel(int argc, char* argv[]) { HANDLE_ARGUMENTS(set_pixel_args) const int pos_x = set_pixel_args.posx->ival[0]; @@ -274,22 +252,19 @@ static int set_pixel(int argc, char* argv[]) return 0; } -static int clear_screen_cmd(int argc, char* argv[]) -{ +static int clear_screen_cmd(int argc, char* argv[]) { clear_screen(); printf("Cleared screen.\r\n"); return 0; } -static int full_clear_screen_cmd(int argc, char* argv[]) -{ +static int full_clear_screen_cmd(int argc, char* argv[]) { full_clear_screen(); printf("Cleared screen.\r\n"); return 0; } -static int get_temp(int argc, char* argv[]) -{ +static int get_temp(int argc, char* argv[]) { epd_poweron(); const float temp = epd_ambient_temperature(); epd_poweroff(); @@ -298,15 +273,13 @@ static int get_temp(int argc, char* argv[]) return 0; } -static int power_on(int argc, char* argv[]) -{ +static int power_on(int argc, char* argv[]) { epd_poweron(); printf("Power turned on.\r\n"); return 0; } -static int power_off(int argc, char* argv[]) -{ +static int power_off(int argc, char* argv[]) { epd_poweroff(); printf("Power turned off.\r\n"); return 0; diff --git a/examples/screen_diag/main/commands/system.c b/examples/screen_diag/main/commands/system.c index 5e5715d5..290c626c 100644 --- a/examples/screen_diag/main/commands/system.c +++ b/examples/screen_diag/main/commands/system.c @@ -6,14 +6,14 @@ #include #include -#include -#include -#include -#include +#include #include -#include +#include #include -#include +#include +#include +#include +#include #include "../commands.h" @@ -35,95 +35,83 @@ static int system_dump_firmware_info(int argc, char* argv[]); static int system_get_time(int argc, char* argv[]); static int system_get_mac(int argc, char* argv[]); -void register_system_commands(void) -{ - dump_heaps_args.caps = arg_intn(NULL, NULL, "", 0, 1, "Heap caps to print. Default: MALLOC_CAP_DEFAULT"); +void register_system_commands(void) { + dump_heaps_args.caps + = arg_intn(NULL, NULL, "", 0, 1, "Heap caps to print. Default: MALLOC_CAP_DEFAULT"); dump_heaps_args.end = arg_end(NARGS(dump_heaps_args)); - get_mac_args.interface = arg_strn(NULL, NULL, "", 0, 1, "Either \"wifi_station\", \"wifi_ap\", \"bluetooth\" or \"ethernet\""); + get_mac_args.interface = arg_strn( + NULL, + NULL, + "", + 0, + 1, + "Either \"wifi_station\", \"wifi_ap\", \"bluetooth\" or \"ethernet\"" + ); get_mac_args.end = arg_end(NARGS(get_mac_args)); // register commands const esp_console_cmd_t commands[] = { - { - .command = "system_restart", - .help = "Restarts the system.", - .hint = NULL, - .func = &system_restart - }, - { - .command = "free_heap_size", - .help = "Returns the free heap size.", - .hint = NULL, - .func = &system_get_free_heap_size - }, - { - .command = "dump_heaps_info", - .help = "Dumps heap information of all heaps matching the capability.", - .hint = NULL, - .func = &system_dump_heaps_info, - .argtable = &dump_heaps_args - }, - { - .command = "chip_info", - .help = "Dumps chip information.", - .hint = NULL, - .func = &system_dump_chip_info - }, - { - .command = "firmware_info", - .help = "Dumps information about the ESP-IDF and the firmware.", - .hint = NULL, - .func = &system_dump_firmware_info - }, - { - .command = "get_time", - .help = "Returns the time in microseconds since boot.", - .hint = NULL, - .func = &system_get_time - }, - { - .command = "get_mac", - .help = "Returns the MAC address for the given interface or the pre-programmed base address.", - .hint = NULL, - .func = &system_get_mac, - .argtable = &get_mac_args - } + { .command = "system_restart", + .help = "Restarts the system.", + .hint = NULL, + .func = &system_restart }, + { .command = "free_heap_size", + .help = "Returns the free heap size.", + .hint = NULL, + .func = &system_get_free_heap_size }, + { .command = "dump_heaps_info", + .help = "Dumps heap information of all heaps matching the capability.", + .hint = NULL, + .func = &system_dump_heaps_info, + .argtable = &dump_heaps_args }, + { .command = "chip_info", + .help = "Dumps chip information.", + .hint = NULL, + .func = &system_dump_chip_info }, + { .command = "firmware_info", + .help = "Dumps information about the ESP-IDF and the firmware.", + .hint = NULL, + .func = &system_dump_firmware_info }, + { .command = "get_time", + .help = "Returns the time in microseconds since boot.", + .hint = NULL, + .func = &system_get_time }, + { .command = "get_mac", + .help + = "Returns the MAC address for the given interface or the pre-programmed base address.", + .hint = NULL, + .func = &system_get_mac, + .argtable = &get_mac_args } }; for (size_t i = 0; i < ARRAY_SIZE(commands); ++i) ESP_ERROR_CHECK(esp_console_cmd_register(&commands[i])); } -static int system_restart(int argc, char* argv[]) -{ +static int system_restart(int argc, char* argv[]) { esp_restart(); // unreachable } -static int system_get_free_heap_size(int argc, char* argv[]) -{ +static int system_get_free_heap_size(int argc, char* argv[]) { printf("Free heap size: %lu bytes.\r\n", esp_get_free_heap_size()); return 0; } -static int system_dump_heaps_info(int argc, char* argv[]) -{ +static int system_dump_heaps_info(int argc, char* argv[]) { HANDLE_ARGUMENTS(dump_heaps_args); - uint32_t caps = dump_heaps_args.caps->count == 1 - ? dump_heaps_args.caps->ival[0] - : MALLOC_CAP_DEFAULT; + uint32_t caps + = dump_heaps_args.caps->count == 1 ? dump_heaps_args.caps->ival[0] : MALLOC_CAP_DEFAULT; heap_caps_print_heap_info(caps); return 0; } -static const char* chip_model_str(esp_chip_model_t model) -{ - switch (model) - { +static const char* chip_model_str(esp_chip_model_t model) { + switch (model) { case CHIP_ESP32: return "ESP32"; case CHIP_ESP32S2: @@ -141,79 +129,81 @@ static const char* chip_model_str(esp_chip_model_t model) } } -static int system_dump_chip_info(int argc, char* argv[]) -{ +static int system_dump_chip_info(int argc, char* argv[]) { esp_chip_info_t info; esp_chip_info(&info); - printf("model: %s\r\n" - "features (0x%lX):\r\n" - "\tEMB_FLASH: %d\r\n" - "\tWIFI_BGN: %d\r\n" - "\tBLE:\t%d\r\n" - "\tBT:\t%d\r\n" - "\tIEEE802154: %d\r\n" - "\tEMB_PSRAM: %d\r\n" - "revision: %d.%d\r\n" - "cores: %d\r\n", - chip_model_str(info.model), info.features, + printf( + "model: %s\r\n" + "features (0x%lX):\r\n" + "\tEMB_FLASH: %d\r\n" + "\tWIFI_BGN: %d\r\n" + "\tBLE:\t%d\r\n" + "\tBT:\t%d\r\n" + "\tIEEE802154: %d\r\n" + "\tEMB_PSRAM: %d\r\n" + "revision: %d.%d\r\n" + "cores: %d\r\n", + chip_model_str(info.model), + info.features, (info.features & CHIP_FEATURE_EMB_PSRAM) != 0, (info.features & CHIP_FEATURE_WIFI_BGN) != 0, (info.features & CHIP_FEATURE_BLE) != 0, (info.features & CHIP_FEATURE_BT) != 0, (info.features & CHIP_FEATURE_IEEE802154) != 0, (info.features & CHIP_FEATURE_EMB_PSRAM) != 0, - (info.revision / 100), (info.revision % 100), - info.cores); + (info.revision / 100), + (info.revision % 100), + info.cores + ); return 0; } -static int system_dump_firmware_info(int argc, char* argv[]) -{ +static int system_dump_firmware_info(int argc, char* argv[]) { char hash[64]; esp_app_get_elf_sha256(hash, 64); const esp_app_desc_t* app = esp_app_get_description(); - printf("ESP-IDF version: %s\r\n" - "Firmware info:\r\n" - "\tmagic: 0x%lX\r\n" - "\tsecure_version: 0x%lX\r\n" - "\tversion: %s\r\n" - "\tproject_name: %s\r\n" - "\tcompile time/date: %s %s\r\n" - "\telf sha256: %s\r\n", - esp_get_idf_version(), - app->magic_word, - app->secure_version, app->version, - app->project_name, app->time, app->date, - hash); + printf( + "ESP-IDF version: %s\r\n" + "Firmware info:\r\n" + "\tmagic: 0x%lX\r\n" + "\tsecure_version: 0x%lX\r\n" + "\tversion: %s\r\n" + "\tproject_name: %s\r\n" + "\tcompile time/date: %s %s\r\n" + "\telf sha256: %s\r\n", + esp_get_idf_version(), + app->magic_word, + app->secure_version, + app->version, + app->project_name, + app->time, + app->date, + hash + ); return 0; } -static int system_get_time(int argc, char* argv[]) -{ +static int system_get_time(int argc, char* argv[]) { printf("Time in microseconds since boot: %llu\r\n", esp_timer_get_time()); return 0; } -static void print_mac(uint8_t mac[8]) -{ +static void print_mac(uint8_t mac[8]) { // only print MAC-48 types - printf("%02X:%02X:%02X:%02X:%02X:%02X\r\n", - mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + printf("%02X:%02X:%02X:%02X:%02X:%02X\r\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } -static int system_get_mac(int argc, char* argv[]) -{ +static int system_get_mac(int argc, char* argv[]) { HANDLE_ARGUMENTS(get_mac_args); uint8_t mac[8]; - if (get_mac_args.interface->count == 0) - { + if (get_mac_args.interface->count == 0) { esp_base_mac_addr_get(mac); print_mac(mac); @@ -230,9 +220,12 @@ static int system_get_mac(int argc, char* argv[]) type = ESP_MAC_BT; else if (!strcmp(arg, "ethernet")) type = ESP_MAC_ETH; - else - { - printf("Invalid interface: \"%s\". Must be one of \"wifi_station\", \"wifi_ap\", \"bluetooth\" or \"ethernet\".\r\n", arg); + else { + printf( + "Invalid interface: \"%s\". Must be one of \"wifi_station\", \"wifi_ap\", " + "\"bluetooth\" or \"ethernet\".\r\n", + arg + ); return 1; } diff --git a/examples/screen_diag/main/commands/tests.c b/examples/screen_diag/main/commands/tests.c index 1a850018..6be2a149 100644 --- a/examples/screen_diag/main/commands/tests.c +++ b/examples/screen_diag/main/commands/tests.c @@ -2,75 +2,75 @@ #include -#include #include +#include -#include "../epd.h" #include "../commands.h" +#include "../epd.h" #include "fonts.h" static struct { - struct arg_int *slope; - struct arg_int *width; - struct arg_int *color; - struct arg_end *end; + struct arg_int* slope; + struct arg_int* width; + struct arg_int* color; + struct arg_end* end; } render_stairs_args; static struct { - struct arg_int *gutter; - struct arg_int *color; - struct arg_end *end; + struct arg_int* gutter; + struct arg_int* color; + struct arg_end* end; } render_grid_args; static int render_stairs_cmd(int argc, char* argv[]); static int render_grid_cmd(int argc, char* argv[]); -void register_tests_commands(void) -{ +void register_tests_commands(void) { // setup args - render_stairs_args.slope = arg_intn(NULL, NULL, "", 0, 1, "angle by which each diagonal line is drawn. default value: 3"); - render_stairs_args.width = arg_intn(NULL, NULL, "", 0, 1, "thickness of each diagonal line. default value: 100"); + render_stairs_args.slope = arg_intn( + NULL, NULL, "", 0, 1, "angle by which each diagonal line is drawn. default value: 3" + ); + render_stairs_args.width = arg_intn( + NULL, NULL, "", 0, 1, "thickness of each diagonal line. default value: 100" + ); render_stairs_args.color = arg_intn(NULL, NULL, "", 0, 1, "default value: 0x00"); render_stairs_args.end = arg_end(NARGS(render_stairs_args)); - render_grid_args.gutter = arg_intn(NULL, NULL, "", 0, 1, "default value: 75"); // gcd(1200, 825) = 75 + render_grid_args.gutter + = arg_intn(NULL, NULL, "", 0, 1, "default value: 75"); // gcd(1200, 825) = 75 render_grid_args.color = arg_intn(NULL, NULL, "", 0, 1, "default value: 0x00"); render_grid_args.end = arg_end(NARGS(render_grid_args)); // register commands const esp_console_cmd_t commands[] = { - { - .command = "render_stairs", - .help = "Render multiple diagonal lines across the screen.", - .hint = NULL, - .func = &render_stairs_cmd, - .argtable = &render_stairs_args - }, - { - .command = "render_grid", - .help = "Renders a grid across the whole screen. At a certain gutter size, cell info will be printed as well.", - .hint = NULL, - .func = &render_grid_cmd, - .argtable = &render_grid_args - }, + { .command = "render_stairs", + .help = "Render multiple diagonal lines across the screen.", + .hint = NULL, + .func = &render_stairs_cmd, + .argtable = &render_stairs_args }, + { .command = "render_grid", + .help + = "Renders a grid across the whole screen. At a certain gutter size, cell info will " + "be printed as well.", + .hint = NULL, + .func = &render_grid_cmd, + .argtable = &render_grid_args }, }; for (size_t i = 0; i < ARRAY_SIZE(commands); ++i) ESP_ERROR_CHECK(esp_console_cmd_register(&commands[i])); } -static void render_stairs(int slope, int width, uint8_t color) -{ - for(int y = 0, x = 0; y < epd_rotated_display_height(); y++) { +static void render_stairs(int slope, int width, uint8_t color) { + for (int y = 0, x = 0; y < epd_rotated_display_height(); y++) { epd_draw_hline(x, y, width, color, g_framebuffer); x += slope; - if(x + width > epd_rotated_display_width()) + if (x + width > epd_rotated_display_width()) x = 0; } } -static int render_stairs_cmd(int argc, char* argv[]) -{ +static int render_stairs_cmd(int argc, char* argv[]) { HANDLE_ARGUMENTS(render_stairs_args) uint8_t color = 0x00; @@ -80,8 +80,7 @@ static int render_stairs_cmd(int argc, char* argv[]) const int slope = GET_INT_ARG(render_stairs_args.slope, 3); const int width = GET_INT_ARG(render_stairs_args.width, 100); - if (slope < 1 || slope > width) - { + if (slope < 1 || slope > width) { printf("Slope %d is too steep: Must be between 1 and width (%d)\r\n", slope, width); return 1; } @@ -92,8 +91,7 @@ static int render_stairs_cmd(int argc, char* argv[]) return 0; } -void render_grid(int gutter, uint8_t color) -{ +void render_grid(int gutter, uint8_t color) { const int width = epd_rotated_display_width(); const int height = epd_rotated_display_height(); @@ -112,22 +110,19 @@ void render_grid(int gutter, uint8_t color) static char label[32]; int col = 0, row; - for (int y = 0; y < height; y += gutter, ++col) - { + for (int y = 0; y < height; y += gutter, ++col) { row = 0; - for (int x = 0; x < width; x += gutter, ++row) - { + for (int x = 0; x < width; x += gutter, ++row) { // print info snprintf(label, sizeof(label), "(%d,%d)", row, col); int rx = y + Alexandria.advance_y; - int cx = x + 4; // margin + int cx = x + 4; // margin epd_write_default(&Alexandria, label, &cx, &rx, g_framebuffer); } } } -static int render_grid_cmd(int argc, char* argv[]) -{ +static int render_grid_cmd(int argc, char* argv[]) { HANDLE_ARGUMENTS(render_grid_args) uint8_t color = 0x00; diff --git a/examples/screen_diag/main/epd.c b/examples/screen_diag/main/epd.c index 529a1cbe..2bb47132 100644 --- a/examples/screen_diag/main/epd.c +++ b/examples/screen_diag/main/epd.c @@ -1,8 +1,8 @@ #include "epd.h" +#include #include #include -#include static EpdiyHighlevelState s_state; uint8_t* g_framebuffer; @@ -15,8 +15,7 @@ static int s_temperature; #define DEMO_BOARD epd_board_v7 #endif -void initialize_screen(void) -{ +void initialize_screen(void) { epd_init(&DEMO_BOARD, &ED097TC2, EPD_LUT_64K); // Set VCOM for boards that allow to set this in software (in mV). // This will print an error if unsupported. In this case, @@ -33,8 +32,7 @@ void initialize_screen(void) epd_poweroff(); } -void update_screen(void) -{ +void update_screen(void) { enum EpdDrawError err; epd_poweron(); @@ -47,14 +45,12 @@ void update_screen(void) } } -void clear_screen(void) -{ +void clear_screen(void) { epd_hl_set_all_white(&s_state); update_screen(); } -void full_clear_screen(void) -{ +void full_clear_screen(void) { epd_poweron(); epd_fullclear(&s_state, s_temperature); epd_poweroff(); diff --git a/examples/screen_diag/main/screen_diag.c b/examples/screen_diag/main/screen_diag.c index c0edc2c7..4d8ca113 100644 --- a/examples/screen_diag/main/screen_diag.c +++ b/examples/screen_diag/main/screen_diag.c @@ -1,34 +1,33 @@ /* Based on the console example app, which is licensed under CC0. - * @link https://github.com/espressif/esp-idf/blob/v4.4.3/examples/system/console/basic/main/console_example_main.c + * @link + * https://github.com/espressif/esp-idf/blob/v4.4.3/examples/system/console/basic/main/console_example_main.c */ -#include -#include #include +#include #include #include #include +#include -#include "epd.h" -#include "commands/screen.h" #include "commands/graphics.h" +#include "commands/screen.h" #include "commands/system.h" #include "commands/tests.h" +#include "epd.h" #define DEFINE_FONTS #include "fonts.h" static const char* TAG = "screen_diag"; -static void initialize_filesystem(void) -{ +static void initialize_filesystem(void) { static wl_handle_t wl_handle; - const esp_vfs_fat_mount_config_t mount_config = { - .max_files = 4, - .format_if_mount_failed = true - }; + const esp_vfs_fat_mount_config_t mount_config + = { .max_files = 4, .format_if_mount_failed = true }; - esp_err_t err = esp_vfs_fat_spiflash_mount("/screen_diag", "storage", &mount_config, &wl_handle); + esp_err_t err + = esp_vfs_fat_spiflash_mount("/screen_diag", "storage", &mount_config, &wl_handle); if (err != ESP_OK) { ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err)); @@ -36,18 +35,16 @@ static void initialize_filesystem(void) } } -static void initialize_nvs(void) -{ +static void initialize_nvs(void) { esp_err_t err = nvs_flash_init(); if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) { - ESP_ERROR_CHECK( nvs_flash_erase() ); + ESP_ERROR_CHECK(nvs_flash_erase()); err = nvs_flash_init(); } ESP_ERROR_CHECK(err); } -void app_main(void) -{ +void app_main(void) { initialize_nvs(); initialize_filesystem(); initialize_screen(); @@ -63,7 +60,7 @@ void app_main(void) register_graphics_commands(); register_tests_commands(); - esp_console_repl_t *repl; + esp_console_repl_t* repl; esp_console_dev_uart_config_t hw_config = ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_console_new_repl_uart(&hw_config, &repl_config, &repl)); diff --git a/examples/test/main/main.c b/examples/test/main/main.c index ec272d72..4ff48869 100644 --- a/examples/test/main/main.c +++ b/examples/test/main/main.c @@ -2,18 +2,14 @@ #include #include "unity_test_runner.h" -static void print_banner(const char* text) -{ +static void print_banner(const char* text) { printf("\n#### %s #####\n\n", text); } - -void app_main(void) -{ +void app_main(void) { print_banner("Running all the registered tests"); UNITY_BEGIN(); - //unity_run_tests_by_tag("unit", false); + // unity_run_tests_by_tag("unit", false); unity_run_all_tests(); UNITY_END(); } - diff --git a/examples/weather/main/ArduinoJson.h b/examples/weather/main/ArduinoJson.h index b3d3098c..a92135cc 100644 --- a/examples/weather/main/ArduinoJson.h +++ b/examples/weather/main/ArduinoJson.h @@ -118,8 +118,8 @@ #endif #endif // ARDUINO #ifndef ARDUINOJSON_ENABLE_PROGMEM -#if defined(PROGMEM) && defined(pgm_read_byte) && defined(pgm_read_dword) && \ - defined(pgm_read_ptr) && defined(pgm_read_float) +#if defined(PROGMEM) && defined(pgm_read_byte) && defined(pgm_read_dword) && defined(pgm_read_ptr) \ + && defined(pgm_read_float) #define ARDUINOJSON_ENABLE_PROGMEM 1 #else #define ARDUINOJSON_ENABLE_PROGMEM 0 @@ -144,8 +144,8 @@ #define ARDUINOJSON_NEGATIVE_EXPONENTIATION_THRESHOLD 1e-5 #endif #ifndef ARDUINOJSON_LITTLE_ENDIAN -#if defined(_MSC_VER) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \ - defined(__LITTLE_ENDIAN__) || defined(__i386) || defined(__x86_64) +#if defined(_MSC_VER) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) \ + || defined(__LITTLE_ENDIAN__) || defined(__i386) || defined(__x86_64) #define ARDUINOJSON_LITTLE_ENDIAN 1 #else #define ARDUINOJSON_LITTLE_ENDIAN 0 @@ -216,21 +216,27 @@ #define ARDUINOJSON_VERSION_MINOR 17 #define ARDUINOJSON_VERSION_REVISION 3 #ifndef ARDUINOJSON_NAMESPACE -#define ARDUINOJSON_NAMESPACE \ - ARDUINOJSON_CONCAT4( \ - ARDUINOJSON_CONCAT4( \ - ArduinoJson, ARDUINOJSON_VERSION_MAJOR, ARDUINOJSON_VERSION_MINOR, \ - ARDUINOJSON_VERSION_REVISION \ - ), \ - _, \ - ARDUINOJSON_HEX_DIGIT( \ - ARDUINOJSON_ENABLE_PROGMEM, ARDUINOJSON_USE_LONG_LONG, ARDUINOJSON_USE_DOUBLE, \ - ARDUINOJSON_ENABLE_STRING_DEDUPLICATION \ - ), \ - ARDUINOJSON_HEX_DIGIT( \ - ARDUINOJSON_ENABLE_NAN, ARDUINOJSON_ENABLE_INFINITY, ARDUINOJSON_ENABLE_COMMENTS, \ - ARDUINOJSON_DECODE_UNICODE \ - ) \ +#define ARDUINOJSON_NAMESPACE \ + ARDUINOJSON_CONCAT4( \ + ARDUINOJSON_CONCAT4( \ + ArduinoJson, \ + ARDUINOJSON_VERSION_MAJOR, \ + ARDUINOJSON_VERSION_MINOR, \ + ARDUINOJSON_VERSION_REVISION \ + ), \ + _, \ + ARDUINOJSON_HEX_DIGIT( \ + ARDUINOJSON_ENABLE_PROGMEM, \ + ARDUINOJSON_USE_LONG_LONG, \ + ARDUINOJSON_USE_DOUBLE, \ + ARDUINOJSON_ENABLE_STRING_DEDUPLICATION \ + ), \ + ARDUINOJSON_HEX_DIGIT( \ + ARDUINOJSON_ENABLE_NAN, \ + ARDUINOJSON_ENABLE_INFINITY, \ + ARDUINOJSON_ENABLE_COMMENTS, \ + ARDUINOJSON_DECODE_UNICODE \ + ) \ ) #endif #if ARDUINOJSON_DEBUG @@ -459,25 +465,25 @@ template struct is_same : true_type {}; template struct is_integral { - static const bool value = - is_same::value || is_same::value || - is_same::value || is_same::value || - is_same::value || is_same::value || - is_same::value || is_same::value || + static const bool value + = is_same::value || is_same::value + || is_same::value || is_same::value + || is_same::value || is_same::value + || is_same::value || is_same::value || #if ARDUINOJSON_HAS_LONG_LONG - is_same::value || is_same::value || + is_same::value || is_same::value || #endif #if ARDUINOJSON_HAS_INT64 - is_same::value || is_same::value || + is_same::value || is_same::value || #endif - is_same::value || is_same::value; + is_same::value || is_same::value; }; template struct is_integral : is_integral {}; template struct is_enum { - static const bool value = is_convertible::value && !is_class::value && - !is_integral::value && !is_floating_point::value; + static const bool value = is_convertible::value && !is_class::value + && !is_integral::value && !is_floating_point::value; }; template struct is_pointer : false_type {}; @@ -1281,17 +1287,27 @@ struct FloatTraits { } static T positiveBinaryPowerOfTen(int index) { ARDUINOJSON_DEFINE_STATIC_ARRAY( // - uint32_t, factors, + uint32_t, + factors, ARDUINOJSON_EXPAND18({ - 0x40240000, 0x00000000, // 1e1 - 0x40590000, 0x00000000, // 1e2 - 0x40C38800, 0x00000000, // 1e4 - 0x4197D784, 0x00000000, // 1e8 - 0x4341C379, 0x37E08000, // 1e16 - 0x4693B8B5, 0xB5056E17, // 1e32 - 0x4D384F03, 0xE93FF9F5, // 1e64 - 0x5A827748, 0xF9301D32, // 1e128 - 0x75154FDD, 0x7F73BF3C // 1e256 + 0x40240000, + 0x00000000, // 1e1 + 0x40590000, + 0x00000000, // 1e2 + 0x40C38800, + 0x00000000, // 1e4 + 0x4197D784, + 0x00000000, // 1e8 + 0x4341C379, + 0x37E08000, // 1e16 + 0x4693B8B5, + 0xB5056E17, // 1e32 + 0x4D384F03, + 0xE93FF9F5, // 1e64 + 0x5A827748, + 0xF9301D32, // 1e128 + 0x75154FDD, + 0x7F73BF3C // 1e256 }) ); return forge( @@ -1301,17 +1317,27 @@ struct FloatTraits { } static T negativeBinaryPowerOfTen(int index) { ARDUINOJSON_DEFINE_STATIC_ARRAY( // - uint32_t, factors, + uint32_t, + factors, ARDUINOJSON_EXPAND18({ - 0x3FB99999, 0x9999999A, // 1e-1 - 0x3F847AE1, 0x47AE147B, // 1e-2 - 0x3F1A36E2, 0xEB1C432D, // 1e-4 - 0x3E45798E, 0xE2308C3A, // 1e-8 - 0x3C9CD2B2, 0x97D889BC, // 1e-16 - 0x3949F623, 0xD5A8A733, // 1e-32 - 0x32A50FFD, 0x44F4A73D, // 1e-64 - 0x255BBA08, 0xCF8C979D, // 1e-128 - 0x0AC80628, 0x64AC6F43 // 1e-256 + 0x3FB99999, + 0x9999999A, // 1e-1 + 0x3F847AE1, + 0x47AE147B, // 1e-2 + 0x3F1A36E2, + 0xEB1C432D, // 1e-4 + 0x3E45798E, + 0xE2308C3A, // 1e-8 + 0x3C9CD2B2, + 0x97D889BC, // 1e-16 + 0x3949F623, + 0xD5A8A733, // 1e-32 + 0x32A50FFD, + 0x44F4A73D, // 1e-64 + 0x255BBA08, + 0xCF8C979D, // 1e-128 + 0x0AC80628, + 0x64AC6F43 // 1e-256 }) ); return forge( @@ -1321,17 +1347,27 @@ struct FloatTraits { } static T negativeBinaryPowerOfTenPlusOne(int index) { ARDUINOJSON_DEFINE_STATIC_ARRAY( // - uint32_t, factors, + uint32_t, + factors, ARDUINOJSON_EXPAND18({ - 0x3FF00000, 0x00000000, // 1e0 - 0x3FB99999, 0x9999999A, // 1e-1 - 0x3F50624D, 0xD2F1A9FC, // 1e-3 - 0x3E7AD7F2, 0x9ABCAF48, // 1e-7 - 0x3CD203AF, 0x9EE75616, // 1e-15 - 0x398039D6, 0x65896880, // 1e-31 - 0x32DA53FC, 0x9631D10D, // 1e-63 - 0x25915445, 0x81B7DEC2, // 1e-127 - 0x0AFE07B2, 0x7DD78B14 // 1e-255 + 0x3FF00000, + 0x00000000, // 1e0 + 0x3FB99999, + 0x9999999A, // 1e-1 + 0x3F50624D, + 0xD2F1A9FC, // 1e-3 + 0x3E7AD7F2, + 0x9ABCAF48, // 1e-7 + 0x3CD203AF, + 0x9EE75616, // 1e-15 + 0x398039D6, + 0x65896880, // 1e-31 + 0x32DA53FC, + 0x9631D10D, // 1e-63 + 0x25915445, + 0x81B7DEC2, // 1e-127 + 0x0AFE07B2, + 0x7DD78B14 // 1e-255 }) ); return forge( @@ -1374,19 +1410,19 @@ struct FloatTraits { } static T positiveBinaryPowerOfTen(int index) { ARDUINOJSON_DEFINE_STATIC_ARRAY( - T, factors, ARDUINOJSON_EXPAND6({1e1f, 1e2f, 1e4f, 1e8f, 1e16f, 1e32f}) + T, factors, ARDUINOJSON_EXPAND6({ 1e1f, 1e2f, 1e4f, 1e8f, 1e16f, 1e32f }) ); return ARDUINOJSON_READ_STATIC_ARRAY(T, factors, index); } static T negativeBinaryPowerOfTen(int index) { ARDUINOJSON_DEFINE_STATIC_ARRAY( - T, factors, ARDUINOJSON_EXPAND6({1e-1f, 1e-2f, 1e-4f, 1e-8f, 1e-16f, 1e-32f}) + T, factors, ARDUINOJSON_EXPAND6({ 1e-1f, 1e-2f, 1e-4f, 1e-8f, 1e-16f, 1e-32f }) ); return ARDUINOJSON_READ_STATIC_ARRAY(T, factors, index); } static T negativeBinaryPowerOfTenPlusOne(int index) { ARDUINOJSON_DEFINE_STATIC_ARRAY( - T, factors, ARDUINOJSON_EXPAND6({1e0f, 1e-1f, 1e-3f, 1e-7f, 1e-15f, 1e-31f}) + T, factors, ARDUINOJSON_EXPAND6({ 1e0f, 1e-1f, 1e-3f, 1e-7f, 1e-15f, 1e-31f }) ); return ARDUINOJSON_READ_STATIC_ARRAY(T, factors, index); } @@ -1541,8 +1577,8 @@ class VariantData { } } bool isFloat() const { - return type() == VALUE_IS_FLOAT || type() == VALUE_IS_POSITIVE_INTEGER || - type() == VALUE_IS_NEGATIVE_INTEGER; + return type() == VALUE_IS_FLOAT || type() == VALUE_IS_POSITIVE_INTEGER + || type() == VALUE_IS_NEGATIVE_INTEGER; } bool isString() const { return type() == VALUE_IS_LINKED_STRING || type() == VALUE_IS_OWNED_STRING; @@ -1631,8 +1667,9 @@ class VariantData { return setString(value, pool, typename TAdaptedString::storage_policy()); } template - inline bool - setString(TAdaptedString value, MemoryPool* pool, storage_policies::decide_at_runtime) { + inline bool setString( + TAdaptedString value, MemoryPool* pool, storage_policies::decide_at_runtime + ) { if (value.isStatic()) return setString(value, pool, storage_policies::store_by_address()); else @@ -1743,10 +1780,7 @@ inline bool slotSetKey(VariantSlot* var, TAdaptedString key, MemoryPool* pool) { } template inline bool slotSetKey( - VariantSlot* var, - TAdaptedString key, - MemoryPool* pool, - storage_policies::decide_at_runtime + VariantSlot* var, TAdaptedString key, MemoryPool* pool, storage_policies::decide_at_runtime ) { if (key.isStatic()) { return slotSetKey(var, key, pool, storage_policies::store_by_address()); @@ -1755,18 +1789,16 @@ inline bool slotSetKey( } } template -inline bool -slotSetKey(VariantSlot* var, TAdaptedString key, MemoryPool*, storage_policies::store_by_address) { +inline bool slotSetKey( + VariantSlot* var, TAdaptedString key, MemoryPool*, storage_policies::store_by_address +) { ARDUINOJSON_ASSERT(var); var->setKey(key.data(), storage_policies::store_by_address()); return true; } template inline bool slotSetKey( - VariantSlot* var, - TAdaptedString key, - MemoryPool* pool, - storage_policies::store_by_copy + VariantSlot* var, TAdaptedString key, MemoryPool* pool, storage_policies::store_by_copy ) { const char* dup = pool->saveString(key); if (!dup) @@ -2022,8 +2054,9 @@ inline CollectionData* variantToObject(VariantData* var) { inline NO_INLINE VariantData* variantAddElement(VariantData* var, MemoryPool* pool) { return var != 0 ? var->addElement(pool) : 0; } -inline NO_INLINE VariantData* -variantGetOrAddElement(VariantData* var, size_t index, MemoryPool* pool) { +inline NO_INLINE VariantData* variantGetOrAddElement( + VariantData* var, size_t index, MemoryPool* pool +) { return var != 0 ? var->getOrAddElement(index, pool) : 0; } template @@ -2031,8 +2064,9 @@ NO_INLINE VariantData* variantGetOrAddMember(VariantData* var, TChar* key, Memor return var != 0 ? var->getOrAddMember(adaptString(key), pool) : 0; } template -NO_INLINE VariantData* -variantGetOrAddMember(VariantData* var, const TString& key, MemoryPool* pool) { +NO_INLINE VariantData* variantGetOrAddMember( + VariantData* var, const TString& key, MemoryPool* pool +) { return var != 0 ? var->getOrAddMember(adaptString(key), pool) : 0; } enum CompareResult { @@ -2077,8 +2111,8 @@ CompareResult arithmeticCompare( const T1& lhs, const T2& rhs, typename enable_if< - is_integral::value && is_integral::value && - is_signed::value == is_signed::value && sizeof(T2) == sizeof(T1)>::type* = 0 + is_integral::value && is_integral::value + && is_signed::value == is_signed::value && sizeof(T2) == sizeof(T1)>::type* = 0 ) { return arithmeticCompare(lhs, static_cast(rhs)); } @@ -2087,8 +2121,8 @@ CompareResult arithmeticCompare( const T1& lhs, const T2& rhs, typename enable_if< - is_integral::value && is_integral::value && is_unsigned::value && - is_signed::value && sizeof(T2) == sizeof(T1)>::type* = 0 + is_integral::value && is_integral::value && is_unsigned::value + && is_signed::value && sizeof(T2) == sizeof(T1)>::type* = 0 ) { if (rhs < 0) return COMPARE_RESULT_GREATER; @@ -2099,8 +2133,8 @@ CompareResult arithmeticCompare( const T1& lhs, const T2& rhs, typename enable_if< - is_integral::value && is_integral::value && is_signed::value && - is_unsigned::value && sizeof(T2) == sizeof(T1)>::type* = 0 + is_integral::value && is_integral::value && is_signed::value + && is_unsigned::value && sizeof(T2) == sizeof(T1)>::type* = 0 ) { if (lhs < 0) return COMPARE_RESULT_LESS; @@ -2116,17 +2150,13 @@ CompareResult arithmeticCompare( } template CompareResult arithmeticCompareNegateLeft( - UInt, - const T2&, - typename enable_if::value>::type* = 0 + UInt, const T2&, typename enable_if::value>::type* = 0 ) { return COMPARE_RESULT_LESS; } template CompareResult arithmeticCompareNegateLeft( - UInt lhs, - const T2& rhs, - typename enable_if::value>::type* = 0 + UInt lhs, const T2& rhs, typename enable_if::value>::type* = 0 ) { if (rhs > 0) return COMPARE_RESULT_LESS; @@ -2134,17 +2164,13 @@ CompareResult arithmeticCompareNegateLeft( } template CompareResult arithmeticCompareNegateRight( - const T1&, - UInt, - typename enable_if::value>::type* = 0 + const T1&, UInt, typename enable_if::value>::type* = 0 ) { return COMPARE_RESULT_GREATER; } template CompareResult arithmeticCompareNegateRight( - const T1& lhs, - UInt rhs, - typename enable_if::value>::type* = 0 + const T1& lhs, UInt rhs, typename enable_if::value>::type* = 0 ) { if (lhs > 0) return COMPARE_RESULT_GREATER; @@ -2158,16 +2184,18 @@ CompareResult compare(const T1& lhs, const T2& rhs); // VariantCompare.cpp template struct VariantOperators { template - friend typename enable_if::value, typename VariantAs::type>::type - operator|(const TVariant& variant, T defaultValue) { + friend typename enable_if::value, typename VariantAs::type>::type operator|( + const TVariant& variant, T defaultValue + ) { if (variant.template is()) return variant.template as(); else return defaultValue; } template - friend typename enable_if::value, typename T::variant_type>::type - operator|(const TVariant& variant, T defaultValue) { + friend typename enable_if::value, typename T::variant_type>::type operator|( + const TVariant& variant, T defaultValue + ) { if (variant) return variant; else @@ -2186,8 +2214,9 @@ struct VariantOperators { return compare(lhs, rhs) == COMPARE_RESULT_EQUAL; } template - friend typename enable_if::value, bool>::type - operator==(TVariant lhs, const T& rhs) { + friend typename enable_if::value, bool>::type operator==( + TVariant lhs, const T& rhs + ) { return compare(lhs, rhs) == COMPARE_RESULT_EQUAL; } template @@ -2203,8 +2232,9 @@ struct VariantOperators { return compare(lhs, rhs) != COMPARE_RESULT_EQUAL; } template - friend typename enable_if::value, bool>::type - operator!=(TVariant lhs, const T& rhs) { + friend typename enable_if::value, bool>::type operator!=( + TVariant lhs, const T& rhs + ) { return compare(lhs, rhs) != COMPARE_RESULT_EQUAL; } template @@ -2220,8 +2250,9 @@ struct VariantOperators { return compare(lhs, rhs) == COMPARE_RESULT_LESS; } template - friend typename enable_if::value, bool>::type - operator<(TVariant lhs, const T& rhs) { + friend typename enable_if::value, bool>::type operator<( + TVariant lhs, const T& rhs + ) { return compare(lhs, rhs) == COMPARE_RESULT_LESS; } template @@ -2237,8 +2268,9 @@ struct VariantOperators { return (compare(lhs, rhs) & COMPARE_RESULT_LESS_OR_EQUAL) != 0; } template - friend typename enable_if::value, bool>::type - operator<=(TVariant lhs, const T& rhs) { + friend typename enable_if::value, bool>::type operator<=( + TVariant lhs, const T& rhs + ) { return (compare(lhs, rhs) & COMPARE_RESULT_LESS_OR_EQUAL) != 0; } template @@ -2254,8 +2286,9 @@ struct VariantOperators { return compare(lhs, rhs) == COMPARE_RESULT_GREATER; } template - friend typename enable_if::value, bool>::type - operator>(TVariant lhs, const T& rhs) { + friend typename enable_if::value, bool>::type operator>( + TVariant lhs, const T& rhs + ) { return compare(lhs, rhs) == COMPARE_RESULT_GREATER; } template @@ -2271,8 +2304,9 @@ struct VariantOperators { return (compare(lhs, rhs) & COMPARE_RESULT_GREATER_OR_EQUAL) != 0; } template - friend typename enable_if::value, bool>::type - operator>=(TVariant lhs, const T& rhs) { + friend typename enable_if::value, bool>::type operator>=( + TVariant lhs, const T& rhs + ) { return (compare(lhs, rhs) & COMPARE_RESULT_GREATER_OR_EQUAL) != 0; } }; @@ -2415,8 +2449,7 @@ class VariantRef : public VariantRefBase, } template FORCE_INLINE bool set( - T value, - typename enable_if::value && !is_same::value>::type* = 0 + T value, typename enable_if::value && !is_same::value>::type* = 0 ) const { return variantSetInteger(_data, value); } @@ -2425,8 +2458,7 @@ class VariantRef : public VariantRefBase, } template FORCE_INLINE bool set( - SerializedValue value, - typename enable_if::value>::type* = 0 + SerializedValue value, typename enable_if::value>::type* = 0 ) const { return variantSetOwnedRaw(_data, value, _pool); } @@ -2729,8 +2761,9 @@ void objectRemove(CollectionData* obj, TAdaptedString key) { obj->removeMember(key); } template -inline VariantData* -objectGetOrAddMember(CollectionData* obj, TAdaptedString key, MemoryPool* pool) { +inline VariantData* objectGetOrAddMember( + CollectionData* obj, TAdaptedString key, MemoryPool* pool +) { if (!obj) return 0; return obj->getOrAddMember(key, pool); @@ -3449,9 +3482,9 @@ class BasicJsonDocument : AllocatorOwner, public JsonDocument { BasicJsonDocument( const T& src, typename enable_if< - is_same::value || is_same::value || - is_same::value || is_same::value || - is_same::value || is_same::value>::type* = 0 + is_same::value || is_same::value + || is_same::value || is_same::value + || is_same::value || is_same::value>::type* = 0 ) : JsonDocument(allocPool(src.memoryUsage())) { set(src); @@ -3595,8 +3628,9 @@ inline bool copyArray(T* src, size_t len, JsonDocument& dst) { return copyArray(src, len, dst.to()); } template -inline typename enable_if::value, bool>::type -copyArray(T (&src)[N1][N2], const TDestination& dst) { +inline typename enable_if::value, bool>::type copyArray( + T (&src)[N1][N2], const TDestination& dst +) { bool ok = true; for (size_t i = 0; i < N1; i++) { ArrayRef nestedArray = dst.createNestedArray(); @@ -3664,8 +3698,9 @@ class ArrayCopier2D : public Visitor { size_t _capacity1, _capacity2; }; template -inline typename enable_if::value, size_t>::type -copyArray(const TSource& src, T (&dst)[N]) { +inline typename enable_if::value, size_t>::type copyArray( + const TSource& src, T (&dst)[N] +) { return copyArray(src, dst, N); } template @@ -4369,9 +4404,9 @@ class DeserializationError { } Code code() const { return _code; } const char* c_str() const { - static const char* messages[] = {"Ok", "EmptyInput", "IncompleteInput", - "InvalidInput", "NoMemory", "NotSupported", - "TooDeep"}; + static const char* messages[] + = { "Ok", "EmptyInput", "IncompleteInput", "InvalidInput", + "NoMemory", "NotSupported", "TooDeep" }; ARDUINOJSON_ASSERT(static_cast(_code) < sizeof(messages) / sizeof(messages[0])); return messages[_code]; } @@ -4385,7 +4420,7 @@ class DeserializationError { ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s5, "NotSupported"); ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s6, "TooDeep"); ARDUINOJSON_DEFINE_STATIC_ARRAY( - const char*, messages, ARDUINOJSON_EXPAND7({s0, s1, s2, s3, s4, s5, s6}) + const char*, messages, ARDUINOJSON_EXPAND7({ s0, s1, s2, s3, s4, s5, s6 }) ); return ARDUINOJSON_READ_STATIC_ARRAY(const __FlashStringHelper*, messages, _code); } @@ -4487,8 +4522,8 @@ struct Reader::type> }; template struct IsCharOrVoid { - static const bool value = is_same::value || is_same::value || - is_same::value || is_same::value; + static const bool value = is_same::value || is_same::value + || is_same::value || is_same::value; }; template struct IsCharOrVoid : IsCharOrVoid {}; @@ -4511,9 +4546,8 @@ struct BoundedReader::value>: public: explicit BoundedReader(const void* ptr, size_t len) : IteratorReader( - reinterpret_cast(ptr), - reinterpret_cast(ptr) + len - ) {} + reinterpret_cast(ptr), reinterpret_cast(ptr) + len + ) {} }; template struct Reader, void> : Reader { @@ -4678,9 +4712,7 @@ StringCopier makeStringStorage(TInput&, MemoryPool& pool) { } template StringMover makeStringStorage( - TChar* input, - MemoryPool&, - typename enable_if::value>::type* = 0 + TChar* input, MemoryPool&, typename enable_if::value>::type* = 0 ) { return StringMover(reinterpret_cast(input)); } @@ -4689,8 +4721,9 @@ TDeserializer makeDeserializer(MemoryPool& pool, TReader reade return TDeserializer(pool, reader, writer); } template